witten
/
luminotes
Archived
1
0
Fork 0
Commit Graph

243 Commits

Author SHA1 Message Date
Dan Helfman 6fcec83167 Fixed annoying bug where some unit tests didn't use stub SMTP class and so actually send real email messages. 2008-06-07 17:06:43 -07:00
Dan Helfman 1ea667528e Wrote unit tests for controller.Users.signup_group_member(). 2008-06-06 16:14:44 -07:00
Dan Helfman 7ee838d46e controller.Users.remove_group() now resets the removed user's rate plan to 0. Also fixed broken controller.Users.signup().
Updated unit tests.
2008-06-06 15:13:11 -07:00
Dan Helfman 9c923172ab Fixing broken unit test. 2008-06-05 16:00:24 -07:00
Dan Helfman a0ca8025d0 New controller.Users.calculate_group_storage(). 2008-06-05 14:16:49 -07:00
Dan Helfman 0e51e461fa New controller.Users.remove_group() method to remove a user's group membership. 2008-06-03 20:19:07 -07:00
Dan Helfman 3a9cd0a024 New controller.Groups.update_settings() and associated unit tests. 2008-06-03 16:11:27 -07:00
Dan Helfman 39ca4c619b Groups.load_users() now returns info on the group itself as well. 2008-06-02 16:03:48 -07:00
Dan Helfman 79e2c45533 New controller.Groups class and a new controller.Users.check_group() method.
Also a new model.Group.sql_load_users() method.
Lots of unit tests.
2008-05-29 16:36:14 -07:00
Dan Helfman df3d170362 View groups that you're a member of, with an indicatation if you're an admin of that group.
- modify controller.Users.current() to return the user's groups
    - update test_current() unit tests to expect empty groups list in results
  - modify Main_page, Notebook_rss, Front_page, Tour_page, and Upgrade_page to accept a new groups parameter
    - Main_page should add it as a hidden HTML variable
  - update Wiki.js to read the hidden groups variable and display the groups in account settings
2008-05-28 16:05:38 -07:00
Dan Helfman e971959755 Attempting to access the RSS feed for a non-existent notebook now
displays a somewhat informative message in the feed instead of just
silently raising an error.
2008-05-26 23:00:31 -07:00
Dan Helfman ae5c911c1c New multiple-notebook search query was way too slow. Now fixed.
- make model.Notebook.sql_search_notes() search either with user_id or an anonymous user_id, not both
  - update controller.Notebooks.search(), so if the anonymous user has access to the given notebook,
    then run the search as the anonymous user instead of the given user id
  - update unit tests
  - don't search trash/deleted notebooks
2008-05-19 22:36:21 -07:00
Dan Helfman 02a3544590 Search result now return notes from multiple notebooks.
- change model.Notebook.sql_search_notes() to be a static method
   - take a first_notebook_id argument and a user_id argument
   - join user_notebook on notebook_id and matches on user_notebook.user_id instead of notebook_id
   - order by notebook_id = first_notebook desc, rank instead of just rank
   - include search result for notebooks readable by anonymous user, but only if such a notebook is given as first_notebook_id
 - update code that calls model.Notebook.sql_search_notes()
 - update model.Note.to_dict() to include notebook_id
 - modify Wiki.display_search_results()
   - separate search results for the current notebook and results for all other notebooks
   - indicate which notebook each result is from
   - if there are results in other notebooks but no results in the current notebook, indicate that clearly
   - when you click on a result note link in the current notebook, it should simply open a new note
   - when you click on a result note link in another notebook, it should open in a new window
 - test in IE
 - update unit tests for:
   - controller.Notebooks.search()
   - model.Notebook.sql_search_notes()
   - model.Note.to_dict()
2008-05-19 15:16:25 -07:00
Dan Helfman 8b705ec4c3 In send_invites(), no longer implicitly assuming rate plan 0 has
notebook_collaboration set to False.
2008-05-08 23:17:17 +00:00
Dan Helfman a6baa45435 Made signup support yearly subscriptions. 2008-05-08 19:14:39 +00:00
Dan Helfman 269c28983d Support for yearly subscriptions. 2008-05-08 18:39:46 +00:00
Dan Helfman 18982dc129 Implemented basic user account settings. Now you can change your email
address.
2008-05-08 03:05:35 +00:00
Dan Helfman 70f52a7406 Fixed a bug where an invite sent for a notebook with an accented unicode
name would cause a UnicodeEncodeError upon sending the invite email. Now
such invites are encoded as quoted-printable UTF-8, while other invites
continue to be 7-bit ASCII.
2008-05-06 23:29:43 +00:00
Dan Helfman 1d17ea4eff Fixed a bug where attempting to load a notebook preview without access
would give a "list index out of range" error instead of an access error.
2008-05-05 23:10:26 +00:00
Dan Helfman 1095e509de Fixed yet another diff-breaking edge case. This one had to do with
inserting italicized text right before some existing italicized text.
2008-05-03 07:40:46 +00:00
Dan Helfman 570e0ade77 More diff fixes. This time for "<br/>" tags. 2008-05-03 06:10:09 +00:00
Dan Helfman 94fdd08cf4 * Fixed a bug that prevented diffs from working for notes with links.
* Made CSS for links within <del> or <ins> red or green, respectively.
2008-05-03 05:36:28 +00:00
Dan Helfman 97c373561d * Added replace_contents() to model.Note to set the contents without updating the revision or anything else.
* Added new optional previous_revision params to default(), contents() and load_note() in controller.Notebooks.
   These use Html_differ() to generate and return diffs.
 * Updated Wiki.js:
   * provide previous_revision when a revision is opened in a new window/tab
   * call load_note() when two revisions when a revision is clicked in Changes_pulldown
   * update compare_versions() to display a diff instead of opening the two revisions separately
   * update load_editor():
     * update all invocations of load_editor(), including in Editor.js, to accept a new previous_revision argument
     * modify load_editor() to use the previous_revision argument (when supplied) to load a diff
2008-05-03 04:29:23 +00:00
Dan Helfman 42ae3e0ba1 Completed Html_differ unit tests. 2008-05-02 23:59:03 +00:00
Dan Helfman 5f852a3d8e Bug fix: Used to get access error when you loaded the children links for a note that was in the trash. 2008-04-29 21:26:09 +00:00
Dan Helfman b71568b35b Implemented unit tests for controller.Notebooks.load_recent_updates(). 2008-04-29 03:25:38 +00:00
Dan Helfman 1d0867d776 * Renamed existing controller.Notebooks.load_recent_notes method to just recent_notes().
* 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.
2008-04-29 00:54:08 +00:00
Dan Helfman 011baf2cb4 Adding unfinished Forums controller and associated tests. 2008-04-25 20:34:01 +00:00
Dan Helfman ea87c273f9 Added unit tests for new RSS related controller methods.
Setting separator to empty for a few more Rss_item elements.
2008-04-23 02:54:59 +00:00
Dan Helfman eb587fc44f Fixed bug where recent notes were ordered by creation time instead of revision time. 2008-04-18 20:39:23 +00:00
Dan Helfman c488864273 * Now if you try to load a page where access is required, and you're not
logged in, you'll be redirected to a login page. After you login, you'll
   be redirected to the page you were originally trying to access.
2008-04-18 19:54:50 +00:00
Dan Helfman d0a1cbf71d Complete unit tests for controller.Notebooks.load_note_links(). 2008-04-16 08:13:35 +00:00
Dan Helfman 8541c784be Modified tests for controller.Notebooks.default() to test for new "recent_notes" return value. 2008-04-16 07:33:07 +00:00
Dan Helfman 6fb7038229 * Implemented all unit tests for new thumbnail() and related methods.
* Changed default thumbnail size to ( 125, 125 ) instead of ( 75, 75 ).
2008-04-02 05:34:50 +00:00
Dan Helfman 03f015f99a * Propsetting a bunch of svn:ignores.
* 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.
2008-04-01 21:54:43 +00:00
Dan Helfman 276bb9b5bc Fixing unit test to account for new Html_cleaner tag stripping behavior. 2008-04-01 21:32:01 +00:00
Dan Helfman 3fc9a74591 Additional unit tests for purging file links that have a quote_filename parameter. 2008-03-27 03:48:13 +00:00
Dan Helfman afe8c1227c Fixed a bug in which Files.purge_unused() deleted the file for a file link
that had a quote_filename parameter.
2008-03-27 02:50:16 +00:00
Dan Helfman c452408106 Finished remake of signup page. You can now click "signup" for non-free accounts even if you're not logged in. 2008-03-24 22:33:00 +00:00
Dan Helfman e9d2ea28d1 Began redesign of upgrade/pricing page. 2008-03-22 04:01:21 +00:00
Dan Helfman 2cae1faf2d Conditionally quoting download filenames based on detected browser. 2008-03-18 22:22:19 +00:00
Dan Helfman 39a9cba457 Fixed a bug that prevented the upload of filenames with special characters
in them. In other words, I made controller.Files work better with unicode.
2008-03-18 20:40:39 +00:00
Dan Helfman 49a4c3c72d Completed unit tests for notebook movement methods. 2008-03-17 22:37:37 +00:00
Dan Helfman f3b0d563c1 Fixed database transaction leak by wrapping every exposed database-using
controller method with a new @end_transaction() decorator. This
decorator is responsible for rolling back unfinished transactions.
2008-03-17 21:17:00 +00:00
Dan Helfman 94a51889f9 Added ability to reorder notebooks on the right side of the page.
Need to complete unit tests for controller.Notebooks.move_up() and move_down().
2008-03-15 03:04:59 +00:00
Dan Helfman 68fe84b707 Adding missing unit tests for controller.Root.tour(). 2008-03-13 20:45:45 +00:00
Dan Helfman 2b0a9af3e3 Client code now only calls save_note() on the server when necessary, and
takes startup flag into account.

Fixed unit test for database cache.
2008-03-07 23:14:39 +00:00
Dan Helfman 21ccc97826 Now using memcached in various places to improve performance. If the Python
cmemcache module is not importable, then memcached simply won't be used.
2008-03-05 00:34:58 +00:00
Dan Helfman 3af5af18c5 Changed controller.Users.logout() to not be a JSON method so just hitting the
"/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.
2008-03-01 00:26:06 +00:00
Dan Helfman dcd40eaa45 Tweaked controller.Files.download() to better handle filenames with weird characters. 2008-02-24 01:01:50 +00:00
Dan Helfman bb8442bb03 All unit tests passing again. 2008-02-23 23:57:05 +00:00
Dan Helfman b7e1b26d3b Unit tests for controller.Files are done! 2008-02-23 23:16:39 +00:00
Dan Helfman 3ed4145ed3 Yet more controller.Files unit tests. 2008-02-23 22:59:36 +00:00
Dan Helfman 4150811d9e Many more controller.Files unit tests. 2008-02-23 22:17:02 +00:00
Dan Helfman 7b76d6371b Additional unit tests. 2008-02-23 08:59:39 +00:00
Dan Helfman 3f5d5d2a89 Implemented several unit tests for controller.Files. 2008-02-23 08:14:19 +00:00
Dan Helfman 731dc52623 More work on file uploading. Unit tests need to be fixed. 2008-02-18 20:08:07 +00:00
Dan Helfman 1398e89f96 Wrote initial unit tests for new Files controller. A few more still needed. 2008-02-06 01:34:12 +00:00
Dan Helfman ffd2d15175 Now, if you delete a notebook and the only remaining notebook is read-only,
then a new read-write notebook is created for you automatically. This fixes a
bug where you could delete a notebook and have only a read-only notebook
remaining, thereby having no way to add a new notebook.
2008-01-24 22:02:02 +00:00
Dan Helfman 4fd44700e1 Now tracking conversions for subscriptions.
Notes in the trash can no longer be edited. They must be undeleted first.
2008-01-22 20:29:29 +00:00
Dan Helfman 76d5f48fa2 Wrote unit tests for controller.Users.paypal_notify() and thanks() methods.
Changed some wording on the thank you page.
2008-01-15 00:36:19 +00:00
Dan Helfman 8f00cceb94 Made upgrade page dynamically generated on the server instead of static html.
This allows things like only displaying subscription buttons if you're logged in.
2008-01-10 08:33:19 +00:00
Dan Helfman 7bdc228d09 A user can now revoke their own access. Protecting users from the own
stupidity proved too complex and fragile. So now they have the full power to
shoot themselves in the foot.

A user can no longer, however, redeem an invite that they send to themself.
2008-01-06 21:59:22 +00:00
Dan Helfman 2bcbc17172 Feature to preview notebook as viewer or collaborator, so you can see what it
will look like to people you share it with.

Hopefully fixed broken demo conversion detection.
2008-01-06 00:12:18 +00:00
Dan Helfman 980ad74e79 When redirected to a note in the main notebook as a result of accessing, for
instance, the "/upgrade" URL, your no longer appear to get logged out.
2008-01-05 00:42:50 +00:00
Dan Helfman 9fb0951c16 Unit test for one user saving a note that was created by a different user. 2008-01-04 22:58:20 +00:00
Dan Helfman 5520fe5892 * make a User_revision object containing a revision timestamp, user_id, username
* change controller.Notebooks.load_note_revisions() to select and return User_revision objects
 * change controller.Notebooks.save_note() to use User_revision objects for new_revision and previous_revision as well
 * update client to deal with new load_note_revisions() return values (make sure all uses of revisions_list are updated)
 * update client to deal with new new_revision/previous_revision
 * update changes pulldown to show username along with each timestamp
 * update model.Invite to load redeemed_username along with redeemed_user_id
 * display the redeemed username next to each email address in the "share this notebook" note
2008-01-04 04:45:43 +00:00
Dan Helfman a354eadcbb When saving a model.Notebook or model.Note to the database, set the user_id field based on the current user. 2008-01-01 01:44:54 +00:00
Dan Helfman d0d87731d2 * Preventing a user from revoking their own access.
* More unit tests for revoking access.
2007-12-30 01:20:38 +00:00
Dan Helfman 05876e2d7e Another unit test for sending invites. 2007-12-29 20:00:42 +00:00
Dan Helfman bb1bbb26e1 Unit tests for controller.Users.redeem_invite(). 2007-12-28 06:36:57 +00:00
Dan Helfman f00809955c * Users.signup(), Users.login(), and Root.default() now support optional invite_id parameter.
* 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.
2007-12-27 22:16:47 +00:00
Dan Helfman 8372b03373 Began work on invite redeeming. 2007-12-18 00:05:13 +00:00
Dan Helfman 4a5aeaed98 Implemented server-side portion of revoke_invite(), so now the UI for revoking invites functions properly. 2007-12-14 01:53:12 +00:00
Dan Helfman f9b4d41a15 model.Invite.sql_load_similar() should not require from_user_id to be the same.
This way, when there are multiple notebook owners, they can get each others' similar invites.
2007-12-13 23:17:24 +00:00
Dan Helfman 36c5ff5b08 Display of current invites now updates when you add new invites.
This means that controller.Users.send_invites() now returns a list of current invites.
Added a "new!" to the share link.
2007-12-13 20:26:32 +00:00
Dan Helfman 225167035d * model.Invite now has a to_dict() method, like other model classes do.
* Initial invites are now returned through Main_page() and displayed (but not
   yet updated) within the "share this notebook" note.
2007-12-12 00:52:34 +00:00
Dan Helfman a4a6667642 Demo accounts cannot share their notebook anymore (but free accounts can). 2007-12-11 06:28:56 +00:00
Dan Helfman 52c111895a Non-paying users can now invite people to their notebook, but only as viewers.
Paying users can invite them as viewers, collaborators, or owners.
2007-12-11 02:58:31 +00:00
Dan Helfman 5554b1df17 * Started a static upgrade HTML file with rate plans.
* 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.
2007-12-11 01:15:03 +00:00
Dan Helfman a615f65d29 Made send_invites() update any similar invites that have already been sent. 2007-12-06 22:05:00 +00:00
Dan Helfman 32fd09b3f7 * Implemented controller.Users.send_invites().
* Added some SQL indices to invite table.
2007-12-06 01:32:20 +00:00
Dan Helfman 1cb12f6ae4 Making various notebook/user functions support the new "owner" access flag. 2007-12-04 21:28:03 +00:00
Dan Helfman 0152b49475 Refactored the way note summaries are created in the link pulldown window. 2007-11-27 21:28:25 +00:00
Dan Helfman eec5ef6411 Implemented delete forever for notebooks. And unit tests! 2007-11-17 23:29:22 +00:00
Dan Helfman 7bd83199a1 Almost done with notebook deletion/undeletion. Just need to implement delete forever. 2007-11-17 22:55:13 +00:00
Dan Helfman cdd971780e Began work on notebook deletion and subsequent undo/undeletion.
Changed schema slightly to support this.
Added a schema delta file and wrote an UPGRADE doc with info on how to upgrade schemas.
2007-11-17 04:21:48 +00:00
Dan Helfman fc2ab3800b Fixing broken unit tests due to rename change. 2007-11-16 00:35:24 +00:00
Dan Helfman 3b2462eff3 Not allowing "trash" as a new name when you rename a notebook.
Not allowing renaming of the actual trash notebook.
Not showing "add new notebook" link when anonymous user.
2007-11-15 22:55:57 +00:00
Dan Helfman b22c784d39 Can now create and rename notebooks. Still need to implement deletion and some other niceties. 2007-11-15 01:30:45 +00:00
Dan Helfman ebd427d667 Make privacy policy accessible from sane URL. 2007-11-13 00:59:19 +00:00
Dan Helfman f2721be076 Basic rss feed for blog. 2007-11-10 03:57:27 +00:00
Dan Helfman 44a1cb79c2 Added basic multipage navigation to blog.
Made name of notebook link at the top of the page better for "special" Luminotes notebooks.
2007-11-10 01:46:56 +00:00
Dan Helfman 7552157865 Handy way to load the user's guide. 2007-11-06 22:42:53 +00:00
Dan Helfman 2831d56db5 Email address is now completely optional during signup. 2007-11-04 19:09:48 +00:00
Dan Helfman 88dd396feb Fix for: I get "that note is in the trash" error when clicking on an old
revision of a note that's not in the trash. This is because that particular
revision of the note represents when the note used to be in the trash (because
it was previously deleted).
2007-11-03 08:15:39 +00:00
Dan Helfman 37e886f27c Revamped searching to use PostgreSQL's tsearch2 full-text searching. 2007-11-02 20:19:53 +00:00
Dan Helfman ad58956f34 Some early work in support of a reverse chronological order view of a notebook, useful for a blog. 2007-10-30 23:05:46 +00:00
Dan Helfman 84283f524e If you click on a link for a note that's in the trash, you just get a message telling you so, with a button to undelete the note. 2007-10-22 23:17:56 +00:00
Dan Helfman 28835e5850 Strip newlines before comparing contents of a note to see if it's been altered. 2007-10-22 21:20:20 +00:00
Dan Helfman 27a6a06c91 Display a realtime count of total notes next to the "all notes" link. 2007-10-19 20:24:16 +00:00
Dan Helfman d7ee122efb * Altered password reset URL path to start with /r/
* Made notes in the main notebook accessable by title at root URLs. So you can get to the "sign up" note at the /sign_up URL.
2007-10-17 07:53:42 +00:00
Dan Helfman 218fe3995c Bug fix. Repro: Try making a link to a note that doesn't exist yet, then click
on the link. Delete the new note. Then go back to the first message, and click
after the link, so the link's pulldown shows. You'll get this error message:
"Sorry, you don't have access to do that."

The fix was to look for the cases when the deleted note is either in the trash
or deleted "forever", and then return None for the note value (instead of just
raising an Access_error).
2007-10-17 01:47:46 +00:00
Dan Helfman 613ee8a217 Completely revamped the way the main page and the notes on it are loaded by
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.
2007-10-16 21:37:12 +00:00
Dan Helfman bbebad528e Renaming new_model to model, now that the old bsddb model is out of the way. 2007-10-11 19:49:00 +00:00
Dan Helfman 43c6f54e9f Merged revisions 401-446 via svnmerge from
svn+ssh://torsion.org/home/luminotes/repos/luminotes/branches/postgres

................
  r402 | witten | 2007-10-04 00:48:49 -0700 (Thu, 04 Oct 2007) | 3 lines

  Initialized merge tracking via "svnmerge" with revisions "1-401" from
  svn+ssh://torsion.org/home/luminotes/repos/luminotes/trunk
................
  r404 | witten | 2007-10-04 01:17:07 -0700 (Thu, 04 Oct 2007) | 2 lines

  Beginning a conversion from bsddb to postgres.
................
  r405 | witten | 2007-10-04 01:18:58 -0700 (Thu, 04 Oct 2007) | 9 lines

  Merged revisions 402-404 via svnmerge from
  svn+ssh://torsion.org/home/luminotes/repos/luminotes/trunk

  ........
    r403 | witten | 2007-10-04 01:14:45 -0700 (Thu, 04 Oct 2007) | 2 lines

    Yay, no more stupid deprecation warnings from simplejson about the sre module.
  ........
................
  r406 | witten | 2007-10-04 15:34:39 -0700 (Thu, 04 Oct 2007) | 4 lines

   * Switched back to Python 2.4 because many Python modules in Debian are not packaged to work with Python 2.5
   * Began removal of all references to Scheduler, @async, yield, and so on.
   * Converted Database.py to support PostgreSQL and updated its unit tests accordingly.
................
  r407 | witten | 2007-10-04 16:34:01 -0700 (Thu, 04 Oct 2007) | 2 lines

  All unit tests for the new model classes now pass.
................
  r409 | witten | 2007-10-05 00:53:56 -0700 (Fri, 05 Oct 2007) | 2 lines

  Reordering some columns and adding some indices.
................
  r410 | witten | 2007-10-05 16:08:37 -0700 (Fri, 05 Oct 2007) | 4 lines

  Now adding trash notebooks to user_notebook table. Also switching db
  conversion/verification tools back to require Python 2.5, since they still use
  the old Scheduler, which requires 2.5 generator features.
................
  r411 | witten | 2007-10-06 16:26:56 -0700 (Sat, 06 Oct 2007) | 2 lines

  Lots more unit tests passing. Most of the recent work was on controller.Users and related stuff.
................
  r412 | witten | 2007-10-07 01:52:12 -0700 (Sun, 07 Oct 2007) | 2 lines

  controller.Users unit tests now finally pass!
................
  r413 | witten | 2007-10-07 02:14:10 -0700 (Sun, 07 Oct 2007) | 3 lines

  Got controller.Root unit tests passing.
  Moved fake sql_* function shenanigans from Test_users.py to Test_controller.py, for use by other controller unit tests.
................
  r414 | witten | 2007-10-08 23:11:11 -0700 (Mon, 08 Oct 2007) | 2 lines

  All unit tests pass! Fuck yeah!
................
  r415 | witten | 2007-10-08 23:13:07 -0700 (Mon, 08 Oct 2007) | 2 lines

  Removing all references to Scheduler from luminotes.py
................
  r416 | witten | 2007-10-08 23:54:51 -0700 (Mon, 08 Oct 2007) | 3 lines

  Converted deleted_from to deleted_from_id in a few more places.
  Fixed bug in Users.contents().
................
  r417 | witten | 2007-10-09 00:11:59 -0700 (Tue, 09 Oct 2007) | 3 lines

  Typo fix in Note sql method.
  Adding autocommit flag to Database.next_id() method.
................
  r418 | witten | 2007-10-09 00:13:19 -0700 (Tue, 09 Oct 2007) | 2 lines

  Updating unit test for new auto commit flag.
................
  r419 | witten | 2007-10-09 00:14:09 -0700 (Tue, 09 Oct 2007) | 2 lines

  Removing debugging print.
................
  r420 | witten | 2007-10-09 00:20:55 -0700 (Tue, 09 Oct 2007) | 2 lines

  More sql fixes. I really need some funtional tests that hit the database and exercise the SQL.
................
  r421 | witten | 2007-10-09 00:51:34 -0700 (Tue, 09 Oct 2007) | 3 lines

  Fixed controller.Database handling of tuple as an Object_type.
  Made SQL for user storage calculation better at handling null values and also more succinct.
................
  r422 | witten | 2007-10-09 13:32:16 -0700 (Tue, 09 Oct 2007) | 2 lines

  Converting Wiki.js to trash_id notebook member instead of trash object.
................
  r423 | witten | 2007-10-09 13:42:10 -0700 (Tue, 09 Oct 2007) | 2 lines

  No longer displaying "download as html" on the front page, as people see "download" and think they're downloading the software.
................
  r424 | witten | 2007-10-09 14:24:40 -0700 (Tue, 09 Oct 2007) | 2 lines

  Notebooks.contents() now returns notebooks with correct read-write status.
................
  r425 | witten | 2007-10-09 14:32:25 -0700 (Tue, 09 Oct 2007) | 2 lines

  Fixed reporting of validation errors to the user. Now says "The blah is missing." instead of just "is missing"
................
  r426 | witten | 2007-10-09 17:05:22 -0700 (Tue, 09 Oct 2007) | 2 lines

  No longer redirecting to trash notebook upon login.
................
  r427 | witten | 2007-10-09 17:20:33 -0700 (Tue, 09 Oct 2007) | 2 lines

  Made controller.Database use a connection pool.
................
  r429 | witten | 2007-10-09 20:13:30 -0700 (Tue, 09 Oct 2007) | 2 lines

  Converted initdb.py and updatedb.py to Postgres from bsddb.
................
  r430 | witten | 2007-10-09 20:37:14 -0700 (Tue, 09 Oct 2007) | 2 lines

  Changing error message to remove underscores from variable names.
................
  r431 | witten | 2007-10-10 13:23:30 -0700 (Wed, 10 Oct 2007) | 2 lines

  Removing unused note_title parameter from Wiki.create_editor().
................
  r432 | witten | 2007-10-10 13:25:16 -0700 (Wed, 10 Oct 2007) | 2 lines

  Revision regular expression now supports timezone notation.
................
  r433 | witten | 2007-10-10 14:43:47 -0700 (Wed, 10 Oct 2007) | 2 lines

  Finished implementing ranked ordering for startup notes. (However, there's no way to change the rank from the client yet.)
................
  r434 | witten | 2007-10-10 16:25:19 -0700 (Wed, 10 Oct 2007) | 4 lines

  More strict access checking. Fixed oversight in Postgres DB conversion where,
  in certain controller.Notebook methods, access was only checked at the
  notebook level, not at the note level as well.
................
  r435 | witten | 2007-10-10 17:45:18 -0700 (Wed, 10 Oct 2007) | 3 lines

  Now loading revisions on demand from client when the "changes" button is clicked. Also caching
  loading revisions so subsequent clicks don't have to reload.
................
  r436 | witten | 2007-10-10 21:31:20 -0700 (Wed, 10 Oct 2007) | 2 lines

  Tweaking some of the error handling in Expose and Root so that unhandled errors give a generic error message to the client.
................
  r437 | witten | 2007-10-10 21:33:49 -0700 (Wed, 10 Oct 2007) | 2 lines

  The release script no longer runs initdb.py, because the default database is no longer a single file included in the tarball.
................
  r438 | witten | 2007-10-10 21:40:11 -0700 (Wed, 10 Oct 2007) | 2 lines

  Updated install instructuctions to include use of initdb.py.
................
  r439 | witten | 2007-10-10 21:56:42 -0700 (Wed, 10 Oct 2007) | 3 lines

  Made initdb.py only nuke (drop tables/views) when given a command-line flag.
  Also made install directions more correct.
................
  r440 | witten | 2007-10-10 21:58:48 -0700 (Wed, 10 Oct 2007) | 2 lines

  IE 6 doesn't like commas.
................
  r441 | witten | 2007-10-10 22:08:50 -0700 (Wed, 10 Oct 2007) | 4 lines

  load your notebook. without clicking on "changes", edit a note that has previous revisions. click on "changes". it'll only show
  the most recent revision. fixed by not appending to changes as a result of a save unless the client-side revisions list cache has
  something in it
................
  r442 | witten | 2007-10-10 23:30:41 -0700 (Wed, 10 Oct 2007) | 2 lines

  Forgot to actually save off the new revision as editor.revision.
................
  r443 | witten | 2007-10-11 01:35:54 -0700 (Thu, 11 Oct 2007) | 13 lines

  More intelligent datetime handling:
    * convertdb.py assumes old bsddb database timestamps are Pacific, and then
      converts them to UTC before inserting them into the new PostgreSQL
      database.
    * No longer using naked timezoneless datetime objects in model/controller
      code, except in unit tests that need compatability with pysqlite. Now
      using UTC everwhere.
    * Asking PostgreSQL to give us all timestamps back in UTC.
    * New dependency on python-tz (pytz) package, noted in INSTALL doc.
    * Client now responsible for converting UTC timestamps to local time for
      display.
................
  r444 | witten | 2007-10-11 01:46:09 -0700 (Thu, 11 Oct 2007) | 2 lines

  Tweak to prevent potential race in IE.
................
  r445 | witten | 2007-10-11 01:49:58 -0700 (Thu, 11 Oct 2007) | 2 lines

  Got JavaScript "unit" tests passing again.
................
  r446 | witten | 2007-10-11 01:53:58 -0700 (Thu, 11 Oct 2007) | 2 lines

  Noting that js tests require the Luminotes server on localhost.
................
2007-10-11 09:03:43 +00:00
Dan Helfman 76e036eab6 Made a demo that you can get to without signing up or entering any information. 2007-09-28 23:54:19 +00:00
Dan Helfman ca60ffd1b3 Whoops, forgot to remove titles_only search flag from unit tests. 2007-09-28 22:59:44 +00:00
Dan Helfman e50d8d909e Fixing broken unit test. 2007-09-28 20:20:55 +00:00
Dan Helfman f6da052e88 Self-service password reset functionality, plus full unit tests.
GOD DAMN that was annoying to implement.
2007-09-26 23:49:27 +00:00
Dan Helfman 13bc06295f Changing the storage usage calculation algorithm to not count old notebook revisions. 2007-09-21 19:15:02 +00:00
Dan Helfman ae329d771a Returning storage usage to the client whenever usage changes. 2007-09-20 22:16:52 +00:00
Dan Helfman 4d736d4821 Lots of work on user storage quotas:
* 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.
2007-09-20 20:36:19 +00:00
Dan Helfman ebf1538313 model.User now has a storage_bytes member, and controller.Users has a method for calculating and updating this field. 2007-09-13 00:53:49 +00:00
Dan Helfman 2e75521ac2 controller.Users.calculate_storage() method to calculate the total bytes used by a particular user. 2007-09-12 22:42:46 +00:00
Dan Helfman 8e7749d512 controller.Database.size() function for getting the approximate storage size of an object. 2007-09-12 21:28:28 +00:00
Dan Helfman 197d65877f * Changed client "recent notes" link to "all notes".
* When you try to load a note called "all notes", load a magic (dynamically-generated) note that
   lists all notes in reverse revision time order.
 * Changed controller.Notebooks.recent_notes() to all_notes().
 * Prevent "all notes" link from showing up when you're in the trash.
 * Prevent link pulldown from showing up for links within read-only notes.
 * Wrote a crappy deletenote tool.
2007-09-04 21:37:48 +00:00
Dan Helfman 658e42aeba Made some changes intended to speed up page loading slightly.
* 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.
2007-09-01 23:46:15 +00:00
Dan Helfman 70b3e415f1 * Added new controller.Notebooks.delete_all_notes() method.
* Put UI link in trash to delete all notes.
2007-09-01 21:06:37 +00:00
Dan Helfman bcade394e9 Moved login link to the top of the page; now present dependent on whether you're already logged in. 2007-08-30 23:57:56 +00:00
Dan Helfman a1fb86f306 Reverting [304] because it prevents you from seeing the main Luminotes wiki when you're logged in. 2007-08-30 19:08:37 +00:00
Dan Helfman 4e932255a4 UI code no longer responsible for surpressing display of "Luminotes" notebook link. That's now done on the server. 2007-08-29 18:36:41 +00:00
Dan Helfman 191ced02f1 Unit test for new parent_id parameter. 2007-08-29 01:11:13 +00:00
Dan Helfman fd175aa85d No longer sending quite as much data in response to /users/current requests.
Now the client has to explicitly request the inclusion of startup notes.

Also no longer including startup notes or revision lists with every single
serialized Notebook.
2007-08-27 22:37:22 +00:00
Dan Helfman 4887defa83 controller.Notebooks.save_note() now looks for the note to be saved in that
notebook's trash. If found, it first undeletes the note before saving it. This
is necessary if, for instance, you have the same note open in window A and
window B, and then you delete the note in window A and subsequently modify it
and save it in window B.
2007-08-24 20:35:06 +00:00
Dan Helfman 20313728d2 Several changes to handle the case where a note is changed out from under you, due to being saved
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.
2007-08-23 23:56:42 +00:00
Dan Helfman 7973d87a7d * Turned "search:" label into a search button that, when clicked, displays a
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.
2007-08-17 22:26:02 +00:00
Dan Helfman 69caeaf655 Code mostly related to manipulating wiki links, plus a new link pulldown:
* 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).
2007-08-14 04:13:49 +00:00
Dan Helfman f2eac9cb1f Implemented a basic trash, including undo upon note deletion and undeletion from the trash:
* 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()
2007-08-07 01:48:43 +00:00
Dan Helfman 4e28620348 * Added a trash Notebook to model.Notebook.
* Made sure the trash is not exposed by the read-only notebook view.
 * Modified model.User.check_access() to consider read-write access to a
   notebook to be sufficient for access to that notebook's trash.
 * Modified controller.Users so new users are created with a notebook that
   has a trash.
 * Changed controller.Notebooks so deleted notes go to the trash (if any).
2007-08-03 21:12:17 +00:00
Dan Helfman 4356336f6b Updated unit tests for redirect upon non-http / request when logged in.
Also updated INSTALL with info about Apache configuration.
2007-08-03 19:43:16 +00:00
Dan Helfman 9e0b611790 When the user is logged in and hitting the root page ("/") without https, do a redirect to https. 2007-08-02 23:25:57 +00:00
Dan Helfman 4a3571a4e8 Changing logout redirect to honor whatever the http_url setting happens to be. 2007-08-02 18:57:53 +00:00
Dan Helfman 0ac518e395 * controller.Users.current() now returns an http_url if one is configured in config/Common.py
* changed controller.Users and controller.Root constructor arguments to support this.
 * Updated INSTALL document accordingly.
 * Client now will prepend this new http_url variable to the logout link.
2007-08-02 18:52:20 +00:00
Dan Helfman ccfcd3ccfe * Added convenience method to model.Notebook called is_startup_note(), and made use of it.
* is_startup_note() checks whether the object id of the given note is in the list of startup notes,
   not whether the actual object is.
 * This fixed a bug in which the same note could be saved to the list of startup notes multiple
   times, thereby causing funny display problems when the same note was loaded twice.
2007-08-01 02:23:54 +00:00
Dan Helfman f23fcdde21 * Can now click on revision timestamps to open up the contents of previous note revisions with a small timestamp at the top.
* 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.
2007-07-31 22:53:57 +00:00
Dan Helfman 2c20d60f9e * Rewrote all wiki note links to be of the form: /notebooks/notebookid?note_id=noteid
* Refactored some of validator decorator to use clearer variable names internally.
 * Validator decorator now supports treating arguments with default values as optional.
 * controller.Notebooks.default() takes an optional note_id argument.
 * controller.Notebooks.contents() takes an optional note_id argument.
 * Wiki.js now makes use of these new controller APIs.
 * Editor.js now takes a notebook_id argument to its constructor so it can properly make links.
2007-07-28 04:22:44 +00:00
Dan Helfman f05d3db661 * Added a "changes" tab with a list of revision timestamps for each note. Note yet clickable.
* 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.
2007-07-26 01:18:41 +00:00
Dan Helfman 35e06bccef Fixing unit test that was broken by earlier switching to secondary id keys including class names. 2007-07-24 00:03:50 +00:00
Dan Helfman 24a7205d3a Html_nuker now converts some character/entity refs to their ascii equivalents,
which allows searching for things that contain non-alphanumeric characters
encoded as char/entity refs.
2007-07-19 19:03:40 +00:00
Dan Helfman 3ba0527d4c Added a reload() method to Database, designed for loading and immediately
saving a key/value to the database. This is useful for schema evolution.
2007-07-18 19:43:12 +00:00
Dan Helfman 0976fdf8c6 Renaming all entries to notes to fit better with the name "Luminotes". 2007-07-17 01:21:31 +00:00
Dan Helfman 02cfca5322 Renaming repository to new name: luminotes 2007-07-16 20:22:38 +00:00