* Implemented new controller.Notebooks.load_recent_updates() method.
* Added new Wiki.js total_notes_count_updated signal
* Added "more" and "less" links to "recent updates" table.
* Updated Wiki.js Recent_notes to support new "more" and "less" links.
* Commented out unfinished discussion forums unit test.
* controller.Notebooks now takes (and stores) an https_url constructor parameter.
* New controller.Notebooks.updates() method to produce an updates RSS feed for a particular notebook.
* New controller.Notebooks.get_update_link() method to make a brief page with just a link for an updated note, referred to by the feed.
* Implemented views for the new RSS feed.
* Fixed bug in Rss_item's guid that caused newlines to be inserted before and after long URLs.
* Still need to unit test new controller code.
* Put all expanders into <div>s, which are then wrapped in <td>s. This makes for better vertical centering, especially in IE.
* Modified Wiki.js to account for expanders now having yet another parent.
* Put note tree instructions in a <tr><td> instead of in a <div>, as <div>s alone don't belong in tables.
in IE6. Apparently Internet Explorer doesn't support appending rows directly
to tables. Fixed by adding a <tbody> to the table and appending to that
instead of the table itself.
Add a brief paragraph with instructions on how to add a note to the note tree, shown only when there are no notes there.
Added a heading for "recent notes", which should be filled out with links in a subsequent commit.
associated expanders.
* Waged an epic battle against the dark forces of CSS. Did you know that the
max-height property applies to nearly all HTML elements *except* tables? No?
Well neither did I until I looked it up, seriously wondered what the W3C
could have been smoking, and then proceeded to spend the next DAY AND A
FRICKING HALF making my table have a max-height without breaking any of my
other intricately arranged CSS. Victory is mine.
* Added a fixed list of startup links.
* When link in list is clicked, open corresponding note editor.
* When a startup note is added/deleted, update the list.
Still much more work to do on this before it's complete.
made the header that's on the product pages present at the top of the wiki
page as well. Still need to make links bold when viewing certain pages
(help, contact, etc).
* Added a bunch of thumbnail-related methods to controller.Files.
* Modified Files.download() method to redirect to image preview if
requested.
* Implemented image preview to popup full image in a separate window.
* Added empty stubs for relevant unit tests. Still to-do.
* Added new dependency on python-imaging package (PIL).
* Updated file info popup to include clickable thumbnail.
"/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.
1. In progress(), around the time when the file starts uploading. This causes
an upload that's too large to bail before the whole file uploads, but the
quota calculation is only an estimate and relies on the client actually
calling progress().
2. In upload(), when the file finishes uploading. This quota calculation is
exact, but only happens after the entire upload completes.
* 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
* Modified Wiki.js to include invite_id parameter when necessary.
* Increased storage quota (and price) for premium rate plan.
* Added a note displayed when redeeming an invite, with links to signup and login.
* 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.
immediately after the editor you're working on instead of at the bottom of the
page. Also, if you undo a note's deletion, it'll show up right back where it
was amonst the notes.
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.
1. It's confusing. People think you click it to perform the search, then are surprised when it doesn't do that.
2. Now that the search results are displayed more clearly, there's really no need for a titles-only search option.
* 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.
* Blank iframe contents now come from static HTML rather than dynamic CherryPy.
* Reindented @strongly_expire decorator.
* Removed one stage of Editor's multi-stage construction.
pulldown with "titles only" and "everything" radio buttons, defaulting to
"titles only".
* Wiki javascript code for submitting a search now sends a new titles_only
parameter according to what the user has selected in the search pulldown.
* controller.Notebooks.search() now takes a new titles_only boolean argument,
which does exactly what you would expect.
it's query string "title=" arg or from the actual contained title.
* Made use of this new function in various places where title-grabbing was being done manually.
* Made Editor.mouse_clicked() highlight and bail if there's already an open editor with a matching
title. (Previously, it only did this matching by id.)
* Wiki.load_editor() now looks to an open Link_pulldown's title field for the note's title, if
available.
* Link_pulldown formats "title=" query string args with MochiKit's queryString() to escape spaces
and such.
* Updated NOTE_LINK_PATTERN in wiki download view (untested currently).