Giter Site home page Giter Site logo

tiddlyspace's Introduction

Selenium Test Status

TiddlySpace

A discoursive social model for tiddlers

TiddlySpace provides a shared hosting environment for lots of users using lots of Tiddlers, contained in "spaces". Each space may be presented as a TiddlyWiki or in one of several other representations (e.g. HTML, Atom, JSON).

Spaces can optionally include other spaces to add content and functionality. Content can easily be followed, copied, shared, and modified to create a network of learning and sharing. Tiddlers can also be used as a flexible key value data store, allowing the creation of interesting JavaScript-based applications.

TiddlySpace is an open source project managed by Osmosoft with contributions from the TiddlyWiki and TiddlyWeb communities. TiddlySpace can be used on the public website, or groups can host their own.

If you are interested in helping to develop TiddlySpace, have a look at the roadmap.

Copyright 2012 UnaMesa Association BSD Licensed.

tiddlyspace's People

Contributors

bengillies avatar cdent avatar colmjude avatar fnd avatar jdlrobson avatar pads avatar pmario avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

tiddlyspace's Issues

Create a custom ColorPalette for each new space

It's sometimes confusing that newly created spaces look so similar. We could generate a unique ColorPalette for each new space, using the space name as a PRNG seed to choose a base color, and colour wheel geometry to pick out the other shades and complements.

Space creation workflow

The workflow for creating a new space could be improved.

Showing a displayMessage to say the users/space has been created was

nice but before I finished reading it I was redirected away from the
page. It might be nicer if the displayMessages were suppressed and one
of the tiddlers opened in the new space welcomed the user to their
newly create space. This would also be an appropriate place to explain
some of the TiddlySpace basics.

(This could be a GettingStartedTiddlySpace tiddler)

Login/Registration box user interface

Simon commented:
Showing the user the login box and a different registration box seems odd. In my Login and Registration macros I use tabs to switch between login and registration. I know Jeremy rather likes the amazon method. See amazon.com.

Redesign backstage area

Many people have pointed out the backstage is not as clear as it should be.
There are a variety of reasons - confusing copy text, no copy text, misleading buttons, inconsistencies with original, TiddlyWiki hidden away controls.

  • better labels for headings
  • backstage fade in/out behaviour
  • too much content in backstage tabs
  • Restore access to "plugins" and "tweaks" panels in the backstage area
    *I have added users psd and rakugo as members of matt.tiddlyspace.com - however I no longer want them to be able to edit my TiddlySpace. It is not clear in the backstage how you would be able to go about this. (even though it is possible -- see below)

Each of the backstage tabs seem rather cluttered/unclear. I would
prefer to see less content in each tab and more descriptive tab
titles. eg logout, subscriptions, identities, new, settings etc.
'User' could be changed to 'Your account'.
better copy could be put in the subscriptions too.
Suggested commit from Jon: http://github.com/jdlrobson/tiddlyspace/commit/3cb4d57466f3431da2de2f9294521036b53a72

!Removing members from a space
This is already possible by clicking on the respective username in the list above the Add member form - so it seems this is just another case where we need better copy text.

!Details of backstage behaviour
On browsers that support it, TiddlySpace should make the backstage bar default to position: fixed, so that it stays fixed to the top of the browser window as the user scrolls.

Some degree of autohide behaviour may be desirable. A simple approach might be:

Fade in the backstage bar when:

the TiddlyWiki document opens
the user scrolls to the top of the window, and stays there for 400ms
the mouse moves into the area covered by the backstage bar
Fade out the backstage bar when:

the user scrolls away from the top of the window
the mouse moves out of the area covered by the backstage bar
Although switched on by default, the position: fixed behaviour and the autohide behaviour should be exposed as TiddlyWiki options:

chkBackstageFixed - "Fix the backstage bar to the top of the browser window"

chkBackstageAutoHide - "Automatically hide the backstage bar when not needed"

Error retrieving members for another space

I don't think this is a huge problem, as the error simply shows that the logged in user is not a member of that space. The error should probably be suppressed though, instead of displayed to the user.

Replication:

From a clean install:

Create user "foo"
Logout

Create user "bar"
Whilst logged in as "bar":
navigate to foo's space
click on backstage
click on space
You should then see the error:
error retrieving members for space foo: error

TiddlySpace should allow references to tiddlers from other spaces

TiddlySpace should allow users to link to tiddlers from other spaces using the syntax TiddlerName@SpaceName. Clicking on such a link should pull the tiddler into the current document. To ensure the tiddler doesn't overwrite other tiddlers from different spaces with the same name, the imported tiddler should have it's title decorated.

It should also be possible to link to another space as @spacename. Clicking on the link should open the space in a new window.

Remove members from my TiddlySpace

I have added users psd and rakugo as members of matt.tiddlyspace.com - however I no longer want them to be able to edit my TiddlySpace, through backstage I don't appear to be able to remove them?

Unsubscribe from a space

I have subscribed to a number of spaces, however I now wish to unsubscribe - I can't see an option for this via backstage?

500 error when registering using special characters

creating a user works, but creating bags and recipes raises to the
following exception:

[...]
File "/usr/local/lib/python2.6/dist-packages/tiddlyweb/util.py", line 102, in write_utf8_file
  dest_file.write(content)
File "/usr/lib/python2.6/codecs.py", line 686, in write
  return self.writer.write(data)
File "/usr/lib/python2.6/codecs.py", line 351, in write
  data, consumed = self.encode(object, self.errors)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 8: ordinal not in range(128)

reduced test case:

var space = new tiddlyweb.Space("xMåns", "/");
space.put();

(executed from Firebug -- this is not reproducible using curl)

Copy text on editing an alien/private/public tiddler

Simon made the suggestion that similarly to shadow tiddlers where when you edit you get copy giving you information on the status of the tiddler and its effects, we could use a similar mechanism when a user edits an alien/private/public tiddler.

ie. alien tiddler from psds space in jons space:
This tiddler came from psd's TiddlySpace. Saving a new version of this tiddler will cause a copy of this tiddler to live in your space. You will have full control of editing this tiddler and any changes made to this tiddler in psd's space will not be propagated to your space without your own intervention.

I then went into http://smm3scriber.tiddlyspace.com/ and changed the
tiddler #red. This change only effected the red tiddler in the
smm3scriber space. Again I suspect this is the correct behavior but it
would be nice to show the users a notice (in the same way we do about
shadow tiddlers) informing them that editing this tiddler will mean an
end to the pub/sub relationship.

Tiddler names clash with other urls

If I create a tiddler called "FooBar", I can view it at foo.tiddlyspace.com/FooBar.

I can also create a tiddler called "bags", "recipes", "challenge" or similar, which currently clashes with the urls already in place, meaning that they are not available at /{tiddler_name}.

I'm not sure what the solution is here, whether we should just let it be, or actively forbid tiddlers with these names. It does seem somewhat inconsistent though

Login/logout hidden under backstage

Typically on many websites a login/logout button is found in the top right of a webpage
In TiddlySpace it is hidden away in the backstage.

Non-TiddlyWiki types would just
be looking for a logout button.

Seems we could present this better.

Notification of unsynced changes

It would be useful if the user was informed of pending changes that have not yet been synced. Normally, such changes are flushed very quickly, unless there are network connectivity issues.

If there are pending changes that haven't been synced for (say) 5 seconds, then the notification should appear.

logging in with openid before registering leads to 404

Repeat:

This is not desirable. Strawman fix:

This latter would require that the user tiddler be broken up into two tiddlers, one for login one for registration, which seems like a good idea anyway, as they would both need a bit of associated copy, and since they are macros, is cut and dry.

OpenID registration requires protocol

It appears the openid2 challenger requires the HTTP protocol to be entered with respective OpenID:

Traceback (most recent call last):
  File "/usr/local/lib/python2.6/dist-packages/tiddlyweb/web/http.py", line 112, in __call__
    return self.application(environ, start_response)
  File "/usr/local/lib/python2.6/dist-packages/tiddlyweb/web/wsgi.py", line 240, in __call__
    output = self.application(environ, start_response)
  File "/usr/local/lib/python2.6/dist-packages/tiddlyweb/web/wsgi.py", line 47, in __call__
    output = self.application(environ, start_response)
  File "/usr/local/lib/python2.6/dist-packages/tiddlyweb/web/serve.py", line 111, in __call__
    return self.application(environ, start_response)
  File "/usr/local/lib/python2.6/dist-packages/tiddlyweb/web/serve.py", line 96, in __call__
    return self.application(environ, start_response)
  File "/usr/local/lib/python2.6/dist-packages/tiddlyweb/web/query.py", line 31, in __call__
    return self.application(environ, start_response)
  File "/usr/local/lib/python2.6/dist-packages/tiddlyweb/web/wsgi.py", line 200, in __call__
    return self.application(environ, start_response)
  File "/usr/local/lib/python2.6/dist-packages/tiddlyweb/web/extractor.py", line 27, in __call__
    return self.application(environ, start_response)
  File "/usr/local/lib/python2.6/dist-packages/tiddlywebplugins/tiddlyspace/handler.py", line 106, in __call__
    return self.application(environ, start_response)
  File "/usr/local/lib/python2.6/dist-packages/tiddlyweb/web/wsgi.py", line 33, in __call__
    return self.application(environ, start_response)
  File "/usr/local/lib/python2.6/dist-packages/tiddlyweb/web/negotiate.py", line 21, in __call__
    return self.application(environ, start_response)
  File "/usr/local/lib/python2.6/dist-packages/selector.py", line 161, in __call__
    return app(environ, start_response)
  File "/usr/local/lib/python2.6/dist-packages/tiddlyweb/web/challenge.py", line 46, in challenge_get
    return challenger.challenge_get(environ, start_response)
  File "/usr/local/lib/python2.6/dist-packages/tiddlywebplugins/openid2.py", line 20, in challenge_get
    return self._handle_response(environ, start_response)
  File "/usr/local/lib/python2.6/dist-packages/tiddlywebplugins/openid2.py", line 70, in _handle_response
    info = oidconsumer.complete(query, url)
  File "/usr/local/lib/python2.6/dist-packages/openid/consumer/consumer.py", line 415, in complete
    response = self.consumer.complete(message, endpoint, current_url)
  File "/usr/local/lib/python2.6/dist-packages/openid/consumer/consumer.py", line 620, in complete
    return modeMethod(message, endpoint, return_to)
  File "/usr/local/lib/python2.6/dist-packages/openid/consumer/consumer.py", line 647, in _complete_id_res
    return self._doIdRes(message, endpoint, return_to)
  File "/usr/local/lib/python2.6/dist-packages/openid/consumer/consumer.py", line 731, in _doIdRes
    endpoint = self._verifyDiscoveryResults(message, endpoint)
  File "/usr/local/lib/python2.6/dist-packages/openid/consumer/consumer.py", line 890, in _verifyDiscoveryResults
    return self._verifyDiscoveryResultsOpenID1(resp_msg, endpoint)
  File "/usr/local/lib/python2.6/dist-packages/openid/consumer/consumer.py", line 987, in _verifyDiscoveryResultsOpenID1
    return self._discoverAndVerify(claimed_id, [to_match, to_match_1_0])
  File "/usr/local/lib/python2.6/dist-packages/openid/consumer/consumer.py", line 1053, in _discoverAndVerify
    _, services = self._discover(claimed_id)
  File "/usr/local/lib/python2.6/dist-packages/openid/consumer/discover.py", line 470, in discover
    return discoverURI(identifier)
  File "/usr/local/lib/python2.6/dist-packages/openid/consumer/discover.py", line 462, in discoverURI
    claimed_id, openid_services = discoverYadis(uri)
  File "/usr/local/lib/python2.6/dist-packages/openid/consumer/discover.py", line 406, in discoverYadis
    return discoverNoYadis(uri)
  File "/usr/local/lib/python2.6/dist-packages/openid/consumer/discover.py", line 442, in discoverNoYadis
    http_resp = fetchers.fetch(uri)
  File "/usr/local/lib/python2.6/dist-packages/openid/fetchers.py", line 42, in fetch
    return fetcher.fetch(url, body, headers)
  File "/usr/local/lib/python2.6/dist-packages/openid/fetchers.py", line 181, in fetch
    raise HTTPFetchingError(why=exc_inst)
HTTPFetchingError: (6, "Couldn't resolve host 'fnd.lewcid.org'")

(input was "fnd.lewcid.org" instead of "http://fnd.lewcid.org")

Ticket raised here rather than on openid2 because this might be an issue with TiddlySpaceIdentities.

Front page copy text

Simon commented:
When I load up TiddlySpace.com I am immediately presented with login/registration box. Do I need to login/register? Why would i want to do that? Some copy would be helpful.

At the moment there is not much to convince a user needs a TiddlySpace or even what one is.

Ability to edit txtUserName is misleading

In options menu on right of the TiddlyWiki created by TiddlySpace the user is able to edit txtUserName.

As any changes made to the txtUserName input field will be ignored by

the server its probably best not to displayed as it implies you can
edit content as someone else (if I change it to psd all edits appear
to be by psd until I refresh the page). Its currently in
GettingStarted, the sidebar and backstage.

Finding the publish button and understand it's effect(s)

The process of publishing which is new to TiddlySpace might require a little more thinking.

For instance

The publish command is rather hidden in the ToolbarCommands
(especially being behind [more]). Non TiddlyWiki types might not even
look there.

Cannot view a space with a dot in the name

test case:

Create user foo.bar.baz
user is created, space is created.
When trying to view the space however (foo.bar.baz.tiddlyspace.com), TiddlySpace assumes the space name is "foo" and not "foo.bar.baz"

Error:
Traceback (most recent call last):
File "/usr/local/lib/python2.6/dist-packages/tiddlyweb/web/http.py", line 112, in call
return self.application(environ, start_response)
File "/usr/local/lib/python2.6/dist-packages/tiddlyweb/web/wsgi.py", line 232, in call
output = self.application(environ, start_response)
File "/usr/local/lib/python2.6/dist-packages/tiddlyweb/web/wsgi.py", line 47, in call
output = self.application(environ, start_response)
File "/usr/local/lib/python2.6/dist-packages/tiddlyweb/web/serve.py", line 113, in call
return self.application(environ, start_response)
File "/usr/local/lib/python2.6/dist-packages/tiddlyweb/web/serve.py", line 98, in call
return self.application(environ, start_response)
File "/usr/local/lib/python2.6/dist-packages/tiddlyweb/web/query.py", line 31, in call
return self.application(environ, start_response)
File "/usr/local/lib/python2.6/dist-packages/tiddlyweb/web/wsgi.py", line 192, in call
return self.application(environ, start_response)
File "/usr/local/lib/python2.6/dist-packages/tiddlyweb/web/extractor.py", line 27, in call
return self.application(environ, start_response)
File "/usr/local/lib/python2.6/dist-packages/tiddlyweb/web/wsgi.py", line 33, in call
return self.application(environ, start_response)
File "/usr/local/lib/python2.6/dist-packages/tiddlyweb/web/negotiate.py", line 21, in call
return self.application(environ, start_response)
File "/usr/local/lib/python2.6/dist-packages/selector.py", line 161, in call
return app(environ, start_response)
File "/usr/local/lib/python2.6/dist-packages/tiddlywebplugins/tiddlyspace/root_handler.py", line 24, in home
serves front page generated from tiddlers in frontpage bag
File "/usr/local/lib/python2.6/dist-packages/tiddlywebplugins/tiddlyspace/root_handler.py", line 42, in serve_space
if port == 80 or port == 443:
File "/usr/local/lib/python2.6/dist-packages/tiddlyweb/store.py", line 99, in get
thing = func(thing)
File "/usr/local/lib/python2.6/dist-packages/tiddlyweb/stores/text.py", line 127, in bag_get
raise NoBagError('unable to list tiddlers in bag: %s' % exc)
NoBagError: unable to list tiddlers in bag: [Errno 2] No such file or directory: '/data/vhost/tiddlyspace.labs.osmosoft.com/tiddlyweb/store/bags/foo_private/tiddlers'

Incorrect status URI when registering from firefox

(n.b. this appears to work from webkit)

In firefox (os x 10.6.3, ff 3.5.7), when registering a new user from the tiddlyspace front page, after registration a get of /status is made. However, for reasons unclear the URI requested (reported in the log) is:

GET //tiddlyspace.org:8080/status

repeat:

  • startup up dev instance
  • go to http://tiddyspace.org:8080/
  • register a previously non existent user
  • display message shows error
  • server logs show GET //tiddlyspace.org:8080/status

superabundance of requests to /status on home page load

When loading the home page, /status is requested 4 times:

127.0.0.1 - - [14/May/2010 09:19:14] "GET / HTTP/1.1" 200 453166 0.287182
127.0.0.1 - - [14/May/2010 09:19:14] "GET /status HTTP/1.1" 200 246 0.004797
127.0.0.1 - - [14/May/2010 09:19:14] "GET /status HTTP/1.1" 200 246 0.005495
127.0.0.1 - - [14/May/2010 09:19:14] "GET /status HTTP/1.1" 200 246 0.007525
127.0.0.1 - - [14/May/2010 09:19:14] "GET /status HTTP/1.1" 200 246 0.008976

While this may be the result of XHR being a pain in the ass, it also suggests some redundancy. Especially as there's little to do with the info. If the act of getting the different challengers and the user info has been separated, it might be worthwhile to integrate that into a single gathering of global info in TiddlyWebConfig handling.

This simply because seeing lots of requests to the same URI makes for confusing debugging and indicates insufficient granularity in the way resources are either being presented or used.

permissioning on a public space

When I am looking at a space in public mode (say I am jon and I am looking at psd.tiddlyspace.com which I am not a member on) and click on backstage, the backstage tries to show me the members of the space and gives me an interface to add subscriptions to the space. But since I don't have these permissions it seems rather redundant being able to see them.

Also the new tiddler button is visible as is the edit button - when I can't edit.

Will comment soon with resolution..

When creating a new tiddler the created attribute is confused

When creating a new tiddler, if the tiddler is closed, then opened, the created field is 'created NaN undefined NaN'.

Repeat:

  • make a new tiddler
  • click done
  • note that created is the current date
  • close tiddler
  • open tiddler
  • note that created is 'created NaN undefined NaN'

Nice 404 page

Currently get 404 Not Found: ('Space for psd does not exist',) when a space that doesn't exist is visited. Maybe a nicer 404 might be in order here? Possibly suggesting similarly named spaces. Not worth worrying about too much though...

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.