"/users/logout" URL will log you out and redirect you the front page.
Made front page prettier and better at explaining Luminotes (hopefully). The
front page is no longer a wiki, but is instead a mostly static page.
* new toolbar button for attaching a file
* button opens new Upload_pulldown() for uploading a file
* began controller.Notebooks.upload_file() to process the upload
* Fixed Invite.sql_update() to have SQL params in proper order.
* Fixed bug where email addresses containing "-" were considered invalid.
* Made UI for inviting other people to your notebook.
* Tweaked the rate plans and added a new one.
browser-specific CSS hack and looked crappy. Those elements that are still
rounded are now implemented with nice smooth images instead.
Also changed downloaded HTML generation to specify sans-serif for the font.
the client. Previously, the main page would load as mostly blank, then the
client would immediately issue two async json calls to load the user and
notebook data, including startup notes. Now, the main page loads with the note
data actually as part of the page. If JavaScript is off, then you see all the
notes displayed, including startup notes and any designated note. If
JavaScript is on, then those "static" notes are instantly hidden and their
contents are loaded into iframes for editing/display.
The real upshot is that Luminotes in read-only mode is now more useful when
JavaScript is off, and actually displays notes and their contents. This is
very useful for search engine indexing.
Updated all Python unit tests. Still have to get to JavaScript unit tests,
what few their are.
* Each model.User now has a current storage bytes and a rate plan.
* model.User.to_dict() updated accordingly.
* Minor Scheduler.add() change to bail of the given thread is None.
* controller.Users.current() returns current user's rate plan details.
* controller.Users.update_storage() now takes an optional callback.
* Various methods in controller.Notebooks responsible for calling controller.Users.update_storage().
* Added rate plan details to config/Common.py.
* Added quota utilization colors to style.css.
* Implemented quota utilization calculation and display in Wiki.js.
Still to-do: Return updated storage bytes where appropriate in controller.Notebook and update the
client accordingly.
from a different window:
* Made controller.notebooks responsible for preventing unmodified notes from being saved, instead
of model.Notebook handling this task.
* Created a revision validator for passing revisions as arguments to exposed methods.
* controller.Notebooks.save_note() now requires a previous_revision parameter, used to determine
whether the note has been modified in the particular window it's being saved from.
* save_note() returns a new previous_revision value, so the client can determine whether a save
has occurred from another window.
* controller.Notebooks.undelete_note() fixed to quietly bail if the note to undelete isn't
actually deleted, which can happen if it was undeleted in another window.
* Editor() now responsible for making revisions list if it doesn't exist
* No longer giving an "undo" message when the user deletes an empty note.
* On the client side, detecting whether the previous_revision as reported by save_note() looks
correct, and if not, alerting the user about the conflict. Also displaying a "compare versions"
button that opens both the current version and the previous version.
* Implemented a new controller.Notebooks.lookup_note_id() method to get only a note's id given its title.
* Added some new link resolution code to Editor and Wiki, to fill in a link's id according to its destination note.
* Factored out some of the link finding code into a common Editor.find_link_at_cursor() method.
* Factored out query parsing into a common parse_query() function, which operates on a link node.
* Added new Link_pulldown class-thingy to represent the little pulldown you see when the cursor's on a link.
* Refactored Pulldown's positioning code to support offset positioning (needed for elements within an iframe).
* model.Note has a deleted_from member to indicate the notebook id it was deleted from (if any)
* controller.Notebooks sets the deleted_from member and makes all deleted notes startup notes in the trash
* new controller.Notebooks.undelete_note() method
* split up the idea of UI messages into errors and informational messages, with separate CSS
* updated Editor and Wiki UI code to deal with new deleted_from variable
* added "undelete" button when viewing a deleted note, and "delete" changes to "delete forever"
* added a "trash" link to the notebook links
* reorganized responsibilities for displaying notebook/user links among Wiki.populate() and Wiki.display_user()
* when deleting messages in a notebook with a trash, displaying "The note has been moved to the trash"...
with a working undo button!
* tweaked focusing logic in display_search_results(), which has been renamed to display_loaded_notes()
* Revisions can be opened either in the current page or in a new window/tab.
* Added ability for a read-write notebook to contain read-only notes. This supports showing read-only revisions.
* Fixed updatedb.py to properly load the anonymous user.
* Updated initdb.py and updatedb.py to deadl with new-style /notebooks/notebookid?note_id=noteid wiki links.
* Made Persistent copy the revisions_list on each revision update so different revisions don't share lists.
* Prevented Note from updating its revision twice upon construction. Now it's only updated once.
* Work-around for nasty urlparse() caching bug related to unicode strings that cherrypy barfs on.
* Added optional revision flag to various controller.Notebooks methods to allow opening of a notebook with a particular note revision displayed.
* Made controller.Notebooks.save_note() return the newly minted revision timestamp upon a successful save.
* Whenever we get back a revision timestamp from save_note(), we store in in the client's list of revisions for that note.
* Now raising Access_error in controller.Notebooks in various places where the notebook requested is unknown.
* Tweaked pulldown CSS a bit. Now will sport a handy-dandy scrollbar if the pulldown gets too tall, at least in real browsers.
* Fixed bug where clicking "show on startup" checkbox directly didn't visually toggle the checkbox.