[Jifty-commit] r1666 - in jifty/branches/moose: . doc/talks lib lib/Jifty lib/Jifty/Manual lib/Jifty/Script share/web/static/js share/web/templates/__jifty/admin share/web/templates/__jifty/css share/web/templates/__jifty/js

jifty-commit at lists.jifty.org jifty-commit at lists.jifty.org
Tue Jul 25 01:28:04 EDT 2006


Author: audreyt
Date: Tue Jul 25 01:28:01 2006
New Revision: 1666

Added:
   jifty/branches/moose/doc/talks/oscon.2006.xul
Removed:
   jifty/branches/moose/Changes
Modified:
   jifty/branches/moose/   (props changed)
   jifty/branches/moose/Changelog
   jifty/branches/moose/MANIFEST
   jifty/branches/moose/MANIFEST.SKIP
   jifty/branches/moose/META.yml
   jifty/branches/moose/SIGNATURE
   jifty/branches/moose/lib/Jifty.pm
   jifty/branches/moose/lib/Jifty/ClassLoader.pm
   jifty/branches/moose/lib/Jifty/Dispatcher.pm
   jifty/branches/moose/lib/Jifty/Manual/Continuations.pod
   jifty/branches/moose/lib/Jifty/Script/Schema.pm
   jifty/branches/moose/lib/Jifty/Web.pm
   jifty/branches/moose/share/web/static/js/calendar.js
   jifty/branches/moose/share/web/static/js/jifty.js
   jifty/branches/moose/share/web/templates/__jifty/admin/fragments/list/new_item
   jifty/branches/moose/share/web/templates/__jifty/admin/index.html
   jifty/branches/moose/share/web/templates/__jifty/css/dhandler
   jifty/branches/moose/share/web/templates/__jifty/js/dhandler

Log:
 r16518 at T (orig r1648):  jesse | 2006-07-22 16:26:09 -0700
  r14349 at pinglin:  jesse | 2006-07-22 16:18:11 -0700
  * Dispatcher fixes to deal with the better canonicalization we started doing in
    0.60707
 
 r16530 at T (orig r1649):  jesse | 2006-07-22 17:15:34 -0700
  r14354 at pinglin:  jesse | 2006-07-22 16:40:40 -0700
  * Even though Jifty::Web uses URIs internally, external code shouldn't be forced to
    (This API change broke things after the last release)
 
 r16531 at T (orig r1650):  jesse | 2006-07-22 17:15:44 -0700
  r14355 at pinglin:  jesse | 2006-07-22 16:46:10 -0700
  * MANIFEST updates
 
 r16532 at T (orig r1651):  jesse | 2006-07-22 17:15:52 -0700
  r14356 at pinglin:  jesse | 2006-07-22 17:15:20 -0700
  * 0.60722
 
 r16536 at T (orig r1652):  ishigaki | 2006-07-22 20:53:25 -0700
 * Win32 complains when you try to unlink open DB
 r16576 at T (orig r1653):  nelhage | 2006-07-24 09:20:26 -0700
 If we don't have XMLHttpRequest, fall back on page loads
 r16577 at T (orig r1654):  trs | 2006-07-24 09:38:06 -0700
  r14612 at zot:  tom | 2006-07-21 12:21:50 -0400
  * Fix placeholders on browser forward/back
  * Replace hard tabs with spaces for consistency
 
 r16578 at T (orig r1655):  trs | 2006-07-24 09:38:11 -0700
 
 r16579 at T (orig r1656):  trs | 2006-07-24 09:38:19 -0700
  r14730 at zot:  tom | 2006-07-24 12:33:48 -0400
  Gzip compress the squished CSS and JS if possible.  The static handler usually deals with this, but we're not serving squished CSS/JS from the static root.
 
 r16583 at T (orig r1657):  trs | 2006-07-24 10:43:12 -0700
  r14737 at zot:  tom | 2006-07-24 13:42:59 -0400
  Show calendar widget on focus and hide it on blur
 
 r16585 at T (orig r1659):  jesse | 2006-07-24 13:14:23 -0700
  r14364 at pinglin:  jesse | 2006-07-22 22:26:16 -0700
  * Don't blow up when trying to check if action mixins are autogenerated
 
 r16586 at T (orig r1660):  jesse | 2006-07-24 13:14:32 -0700
  r14366 at pinglin:  jesse | 2006-07-24 13:13:49 -0700
  * oscon
 
 r16587 at T (orig r1661):  trs | 2006-07-24 13:47:11 -0700
  r14739 at zot:  tom | 2006-07-24 16:46:53 -0400
  Fix the element selected in the region
 
 r16588 at T (orig r1662):  audreyt | 2006-07-24 15:52:21 -0700
 * Jifty::ClassLoader - Make Jifty::Handle a CL'ed module as well,
   so MyApp::Handle can implement scary magick of its own.
 r16589 at T (orig r1663):  audreyt | 2006-07-24 16:04:13 -0700
 * Jifty->web->return in void context is now an immediate return.
 r16590 at T (orig r1664):  audreyt | 2006-07-24 16:11:40 -0700
 * Dispatcher: Support tangent($url) as sugar for Jifty->web->tangent(url=>$url).
 * Dispatcher: Allow "**" in glob pattern to mean anychar including slash.
 r16591 at T (orig r1665):  audreyt | 2006-07-24 16:12:31 -0700
 * Jifty::Manual::Continuations: reflect tangent() in the manual.


Modified: jifty/branches/moose/Changelog
==============================================================================
--- jifty/branches/moose/Changelog	(original)
+++ jifty/branches/moose/Changelog	Tue Jul 25 01:28:01 2006
@@ -1,3 +1,90 @@
+0.60722
+
+* Dispatcher fixes to deal with the better canonicalization we started doing in
+   0.60707
+* changed all instances of '/usr/bin/perl' to '/usr/bin/env perl'
+* added a path option to Jifty::Web->url
+* added url tests
+* Jifty::Manual::Actions -- update the worldview to reflect the
+  parameters/arguments concept split.
+* Introduce aliases.  See Jifty::Param::Schema for the table.
+* Declarative Jifty Parameters.
+* See Jifty::Param and Jifty::Param::Schema for the new syntax.
+* Also added dependencies for Jifty::Script::Deps and declarative parameters.
+* Also updated test applications to use declarative parameters. 
+* Adding the CSS browser selector trick from http://rafael.adm.br/css_browser_selector/ to Jifty
+* After autocomplete, trigger a validation.
+* Upping JSON::Syck version dependency. 0.14 fixes escaping in single-quoted strings.
+* Add a tooltip to the dismiss link and hide the dotted border
+* Trailing commas are not good for JS in Safari
+* Let's not blow up if we have placeholders on an input without a form
+* Don't fade autocomplete in and out, just show and hide it
+* Not submitting placeholder values when we submit forms or AJAX
+* Add the class before we set the text, so that it appears grayed-out, rather than appearing and *then* graying out
+* Support multi-line placeholders
+* textareas can have placeholders, too; Style them appropriately as well
+* Adding support for placeholders, grayed-out text in form fields that is written in with JS and vanishes on focus
+* Auto-accept cpan's wisdom about prompts (Jifty::Deps)
+* 0th sketch at "jifty deps"
+* packaging plan updates
+* J::Web::redirect can take a Clickable as arg, so make goto do that, instead of passing a URL with parameters, which doesn't work right
+* Proper port support on urls. Thanks to jpeacock.
+*  Resolve inconsistent filenames vs packages (Plugins)
+* Switched Jifty::Web::url to use uri.pm rather than "heuristics"
+* Let's not blow up if an action has a result that's an unblessed reference.
+* Don't upgrade the database versions with schema --print. I'm not sure
+  if there's a good way to persuade JDBI to give us the SQL to print, so
+  we're just spitting out a warning for now, but that's better than the
+  old behavior.
+* Stop notification from flipping out if you use a scalar as the To:
+* basic smoke test for jifty's notifications 
+* Only set active child on create if we have a request
+* More serious failure message, and don't imply that it's necessarily the server's fault.
+* update .po files
+* Jifty::Dispatcher - there's no call_next, remove it from POD, fnord.
+* Refactoring message rendering slightly
+* Fix Jifty-Win32 by having canonicalize_path always returning
+  /-separated paths, never \-separated paths.
+* Let classes be set on menu items
+* Adding a warning about our slow Rico.Corner.round
+* Documenting how to write sane Behaviours that don't leak memory (leak
+  less memory, probably) in IE and aren't dog-slow.
+* Fix JS memory leak in IE
+* Make jifty tests respect the current given @INC, so it doesn't
+  use lib when you are supposed to use blib during make test.
+* Make the subtest system less painful.
+* Use Jifty::Script to invoke test server, so it doesn't depend on
+  bin/jifty.
+* Fix a Safari display bug
+* Fix calendar positioning bug and make sure it works when the date field is within a relative or absolutely positioned element
+* Test file for Jifty::Client
+* First pass at a Jifty client module.
+*  English orthography fixes.
+* Trailing commas in Perl are good.  In Javascript, they aren't, and sometimes cause IE to barf (like this one).
+*  Hide focus border
+* Lowering the autocomplete delay
+* first-pass editorial run over Continuations.pod.
+* Sketchy sketchy handwavy descriptions of page region backend.
+  Ramblings totally not expected to be interpretable.
+* Wrap the popup notification div in dropshadow wrapper hooks
+* Mention webservices in Actions doc
+* Double fallback goes the way of the dodo
+* Continuation manual
+* Set up the output API for mapping of request parameters (input API
+  already existed)
+* Change method of getting results out of response on continuation RETURN
+* Fewer calls to ->arguments, though they might be cached already.
+* Not all CurrentUser classes may have a "nobody"
+* Jifty::Web::Form:Clickable - provide a bit more info on how to use
+  the "returns" field.
+* jifty-dispatcher.graffle that shows the dispatch chain.
+* Nicer "server down" message
+* Re-enable form inputs after failure
+* toggleable page region clickables weren't doing the right thing when used in non-ajax mode
+* Fix the validation and autocomplete race condition
+* Skip nobody and superuser when we do notifications
+
+
 060707
 
   * Minor build fixes

Modified: jifty/branches/moose/MANIFEST
==============================================================================
--- jifty/branches/moose/MANIFEST	(original)
+++ jifty/branches/moose/MANIFEST	Tue Jul 25 01:28:01 2006
@@ -4,7 +4,6 @@
 bin/service
 bin/xgettext
 Changelog
-Changes
 doc/ajax-upgraded-links
 doc/building_a_par
 doc/client_side_continuations
@@ -15,56 +14,12 @@
 doc/examples/CounterDemo/Makefile.PL
 doc/examples/CounterDemo/share/web/templates/index.html
 doc/examples/CounterDemo/t/00-counter-test.t
+doc/jifty-dispatcher.graffle
+doc/jifty-dispatcher.svg
 doc/packaging
 doc/plugin-requirements
 doc/plugin-syntax
 doc/plugins-restated-assumptions
-doc/talks/blogdemo.png
-doc/talks/component-tree.png
-doc/talks/edit.png
-doc/talks/error.png
-doc/talks/euroscon.css
-doc/talks/halo-overview.png
-doc/talks/halo.png
-doc/talks/new-entry.png
-doc/talks/npw.2006.xul
-doc/talks/npw.2006/blog.png
-doc/talks/npw.2006/Blog/bin/jifty
-doc/talks/npw.2006/Blog/etc/config.yml
-doc/talks/npw.2006/Blog/lib/Blog/Dispatcher.pm
-doc/talks/npw.2006/Blog/lib/Blog/Model/Entry.pm
-doc/talks/npw.2006/Blog/Makefile.PL
-doc/talks/npw.2006/Blog/share/web/templates/index.html
-doc/talks/npw.2006/Blog/share/web/templates/new_entry
-doc/talks/npw.2006/Blog/t/00-model-Entry.t
-doc/talks/npw.2006/canonicalize_entry.png
-doc/talks/npw.2006/halo.png
-doc/talks/npw.2006/halo2.png
-doc/talks/npw.2006/jifty_3_files.png
-doc/talks/npw.2006/jifty_app.png
-doc/talks/npw.2006/jifty_edit_model.png
-doc/talks/npw.2006/jifty_model.png
-doc/talks/npw.2006/jifty_schema_setup.png
-doc/talks/npw.2006/jifty_server.png
-doc/talks/npw.2006/jifty_web_1.png
-doc/talks/npw.2006/jifty_web_crud.png
-doc/talks/npw.2006/jifty_web_crud_create_2.png
-doc/talks/npw.2006/jifty_web_crud_edit.png
-doc/talks/npw.2006/jifty_web_crud_edited.png
-doc/talks/npw.2006/jifty_web_crud_new.png
-doc/talks/npw.2006/jifty_web_dbadmin.png
-doc/talks/npw.2006/makefile_pl.png
-doc/talks/npw.2006/new_entry.png
-doc/talks/npw.2006/online_docs.png
-doc/talks/npw.2006/tests.png
-doc/talks/npw.2006/validate_entry.png
-doc/talks/npw2005.xul
-doc/talks/pony.jpg
-doc/talks/pony.png
-doc/talks/takahashi.css
-doc/talks/takahashi.js
-doc/talks/yapc.asia.2006.xul
-doc/talks/yapc.na.2006.xul
 etc/config.yml
 inc/Module/AutoInstall.pm
 inc/Module/Install.pm
@@ -91,6 +46,7 @@
 lib/Jifty/API.pm
 lib/Jifty/Bootstrap.pm
 lib/Jifty/ClassLoader.pm
+lib/Jifty/Client.pm
 lib/Jifty/Collection.pm
 lib/Jifty/Config.pm
 lib/Jifty/Continuation.pm
@@ -106,9 +62,11 @@
 lib/Jifty/Logger.pm
 lib/Jifty/Manual/AccessControl.pod
 lib/Jifty/Manual/Actions.pod
+lib/Jifty/Manual/Continuations.pod
 lib/Jifty/Manual/Cookbook.pod
 lib/Jifty/Manual/Glossary.pod
 lib/Jifty/Manual/ObjectModel.pod
+lib/Jifty/Manual/PageRegions.pm
 lib/Jifty/Manual/Tutorial.pod
 lib/Jifty/Manual/Tutorial_ja.pod
 lib/Jifty/Mason/Halo.pm
@@ -117,6 +75,8 @@
 lib/Jifty/Model/SessionCollection.pm
 lib/Jifty/Notification.pm
 lib/Jifty/Object.pm
+lib/Jifty/Param.pm
+lib/Jifty/Param/Schema.pm
 lib/Jifty/Plugin.pm
 lib/Jifty/Plugin/ClassLoader.pm
 lib/Jifty/Record.pm
@@ -128,6 +88,7 @@
 lib/Jifty/Script.pm
 lib/Jifty/Script/Action.pm
 lib/Jifty/Script/App.pm
+lib/Jifty/Script/Deps.pm
 lib/Jifty/Script/FastCGI.pm
 lib/Jifty/Script/Help.pm
 lib/Jifty/Script/Model.pm
@@ -251,6 +212,7 @@
 share/web/static/js/calendar.js
 share/web/static/js/combobox.js
 share/web/static/js/context_menu.js
+share/web/static/js/css_browser_selector.js
 share/web/static/js/cssquery/cssQuery-level2.js
 share/web/static/js/cssquery/cssQuery-level3.js
 share/web/static/js/cssquery/cssQuery-standard.js
@@ -330,6 +292,8 @@
 t/05-dispatcher.t
 t/06-forms.t
 t/07-limit-actions.t
+t/08-client.t
+t/09-url.t
 t/99-pod-coverage.t
 t/99-pod.t
 t/Continuations/bin/jifty
@@ -350,6 +314,7 @@
 t/Continuations/t/03-gc.t
 t/Continuations/t/04-before-blocks.t
 t/Jifty.pm
+t/lib/Jifty/SubTest.pm
 t/Mapper/bin/jifty
 t/Mapper/lib/Mapper/Action/CrossBridge.pm
 t/Mapper/lib/Mapper/Action/GetGrail.pm
@@ -379,5 +344,6 @@
 t/TestApp/t/05-editactions-Record.t
 t/TestApp/t/06-validation.t
 t/TestApp/t/07-sandboxing.t
+t/TestApp/t/08-notifications.t
 t/TestApp/t/config-Cachable
 t/TestApp/t/config-Record

Modified: jifty/branches/moose/MANIFEST.SKIP
==============================================================================
--- jifty/branches/moose/MANIFEST.SKIP	(original)
+++ jifty/branches/moose/MANIFEST.SKIP	Tue Jul 25 01:28:01 2006
@@ -19,3 +19,4 @@
 .*.swp
 var/*
 t/*/var/*
+doc/talks/*

Modified: jifty/branches/moose/META.yml
==============================================================================
--- jifty/branches/moose/META.yml	(original)
+++ jifty/branches/moose/META.yml	Tue Jul 25 01:28:01 2006
@@ -78,4 +78,4 @@
   perl: 5.8.3
   version: 0
 tests: t/*.t t/*/t/*.t
-version: 0.60707
+version: 0.60722

Modified: jifty/branches/moose/SIGNATURE
==============================================================================
--- jifty/branches/moose/SIGNATURE	(original)
+++ jifty/branches/moose/SIGNATURE	Tue Jul 25 01:28:01 2006
@@ -15,16 +15,15 @@
 Hash: SHA1
 
 SHA1 8a1668319fec7d4608a8766e731e4c11098a362f AUTHORS
-SHA1 ba2b8279751c9a1869ca296606ee1e54866ccdf8 Changelog
-SHA1 4babaaac002a6a1c4c6d2590891b71e22ca72cd5 Changes
-SHA1 ea7debc8f1725ff78acd323f062594769ac53f31 MANIFEST
-SHA1 3ad8481344a1d0ce2dc5726c1db8bea1917402de MANIFEST.SKIP
-SHA1 fe08a73889f52ecc69beafe4cee1cf784ccd6c58 META.yml
-SHA1 a32b3baaae940ff7b99e5b5cd7f9e1bd92befb59 Makefile.PL
+SHA1 e933361984e8b712b90c7b9c9a2801c357b30c52 Changelog
+SHA1 313ac6fa56fefcc7e30f36516659896bd36f4566 MANIFEST
+SHA1 ef79154bdd753b6bc03a2919356e0e904b4b9ba2 MANIFEST.SKIP
+SHA1 a66635ea6823676d009d092b3174df6e9f5e5204 META.yml
+SHA1 bdf2e6a311a5857142e246616acfb33fe8d4672c Makefile.PL
 SHA1 e395a2eabaf8faf8266dedc664c1eb52c6c589cf README
 SHA1 aaf8f7a1025fc97077072672f325e2a5f3c03a41 bin/build_par
-SHA1 d7982e7064c5ee2a98ea858ebf57664f50a26c40 bin/jifty
-SHA1 309338abe024f34d6c8629645e5ff8487e2d75f2 bin/service
+SHA1 a7dc1f376cac630ea28d2965e561469deb951cc7 bin/jifty
+SHA1 9a91a81e3db1a12368153fed9e504aad492cd971 bin/service
 SHA1 543a2677f66d3c8ca671b790509b6c1721ac6270 bin/xgettext
 SHA1 b8bb315ef8fbdd2f069b6339ad0461b5d933d7da doc/ajax-upgraded-links
 SHA1 a0d03921821ca39ea461f1f9fa812fdbb5f501a0 doc/building_a_par
@@ -32,60 +31,16 @@
 SHA1 a78a22aa4be910be14347278720e196137819d55 doc/command_naming
 SHA1 69cafeee7cc90aabb0ae8cf1e9c695794a54c9a6 doc/edit-in-place
 SHA1 fa5b3f272228531a255c7c676d798e3162c68ce0 doc/examples/CounterDemo/Makefile.PL
-SHA1 599ba4fb849edc90f652768852c3aa2d7029a636 doc/examples/CounterDemo/bin/jifty
+SHA1 af23c4b1688a4ad7167173083381cea744d57691 doc/examples/CounterDemo/bin/jifty
 SHA1 d1b66f68f17cc67957c534e1e493c5a0f5b22556 doc/examples/CounterDemo/etc/config.yml
 SHA1 61b3c250cbb86dd5f1e5f42e82020e3e3befaff1 doc/examples/CounterDemo/share/web/templates/index.html
 SHA1 514c712a4e0bd5a16b71c35ab9e607a7db865a67 doc/examples/CounterDemo/t/00-counter-test.t
-SHA1 1825dbdbb540ee2d4c9f3fd0e4dbd830e631ed0d doc/packaging
+SHA1 4f01bbe985a1ad3742b48563992bdbf032a6ce4d doc/jifty-dispatcher.graffle
+SHA1 b07f1666f9da714a9007058ea74d0d4cfa31ebfe doc/jifty-dispatcher.svg
+SHA1 44839f806443cbb6469f3610f9a6c488d1777f60 doc/packaging
 SHA1 3ec038720e82a1297a3a5db6a0e1b24fe0aa13c2 doc/plugin-requirements
 SHA1 3de2d7f062e78fc8b543f6b93e79852274c6c657 doc/plugin-syntax
 SHA1 c83d2b6f9d5638d1e2abdb56bf7dd4bb549baa65 doc/plugins-restated-assumptions
-SHA1 d489ea6ef3df6fd121dd021caa4d4c162a2cf883 doc/talks/blogdemo.png
-SHA1 d3664832060c2b7dbf3067f1073e0483304862c4 doc/talks/component-tree.png
-SHA1 1d8ffbd9f5745536319dc0003698d9e57774ecbb doc/talks/edit.png
-SHA1 adcec9e9e718cbda196d0a6c4a2583d216de0ab6 doc/talks/error.png
-SHA1 56b7fc2b9ffc8d360def77b0c62f6a357ffebce0 doc/talks/euroscon.css
-SHA1 3b5c622e6a9cdaa5b81665dd47291b668e2cddbb doc/talks/halo-overview.png
-SHA1 650f029db7ab0c1fcba16625bbdef274d3c03d7c doc/talks/halo.png
-SHA1 bd3c19e906807a3f5b1aa75931710b22fce672f0 doc/talks/new-entry.png
-SHA1 772e1cd5c8cd6758e9c7b13bf0dd0ecfe6a34b1a doc/talks/npw.2006.xul
-SHA1 88b93fcf3d12d9c21f27a9e27ae31f82ef48367a doc/talks/npw.2006/Blog/Makefile.PL
-SHA1 bab0077c1352a4c99e9c3d48be04d72be21ec0cf doc/talks/npw.2006/Blog/bin/jifty
-SHA1 f429c0ec9bf17fb7f48b6744ade39a82bf59a25d doc/talks/npw.2006/Blog/etc/config.yml
-SHA1 cca70e8c4681b8fc795fa41b0e18da303979e016 doc/talks/npw.2006/Blog/lib/Blog/Dispatcher.pm
-SHA1 3740a7ad07b0766d1fe0f1aea0165e91dd1f3e78 doc/talks/npw.2006/Blog/lib/Blog/Model/Entry.pm
-SHA1 12b69b2eec0350496a21a6921ecaece2755ca7d0 doc/talks/npw.2006/Blog/share/web/templates/index.html
-SHA1 1d9f68e6693e85646617e037a50ca361dbc9691b doc/talks/npw.2006/Blog/share/web/templates/new_entry
-SHA1 c4ac6efa652e88140a9eb7fd98485a9b66b8c472 doc/talks/npw.2006/Blog/t/00-model-Entry.t
-SHA1 7c4032454ffed80d13fc0e02a00d9529fdf29394 doc/talks/npw.2006/blog.png
-SHA1 42648114aa72597d3219571b7800ce7c4934d59c doc/talks/npw.2006/canonicalize_entry.png
-SHA1 d3664832060c2b7dbf3067f1073e0483304862c4 doc/talks/npw.2006/halo.png
-SHA1 650f029db7ab0c1fcba16625bbdef274d3c03d7c doc/talks/npw.2006/halo2.png
-SHA1 748466f9a3a51ae47160409d733ffffa1bca9c21 doc/talks/npw.2006/jifty_3_files.png
-SHA1 2d7d2e96abbbfb21dedc5fe48edb8f427d2e0344 doc/talks/npw.2006/jifty_app.png
-SHA1 6399a81527d55d6a48cbc7b22ac0d61737f3ee5e doc/talks/npw.2006/jifty_edit_model.png
-SHA1 f595dff6ee8a0e75bd8c83c9a3da7a661f40cc1f doc/talks/npw.2006/jifty_model.png
-SHA1 97c6dfaf5bb5045ff940ffed2475294353304605 doc/talks/npw.2006/jifty_schema_setup.png
-SHA1 ffa5a6f545686e45b65f3e18cf256cb33c29fb90 doc/talks/npw.2006/jifty_server.png
-SHA1 b62ed39eb1e73b351c749a643d8a946ada3f6cff doc/talks/npw.2006/jifty_web_1.png
-SHA1 6072f1cad3c7bad0676c5172ab67b5db77eb0e17 doc/talks/npw.2006/jifty_web_crud.png
-SHA1 254877cc649e8fa836ad22380880881a2cc518b6 doc/talks/npw.2006/jifty_web_crud_create_2.png
-SHA1 8561378956d1194bad37d961a7cb1347ba4c6fa9 doc/talks/npw.2006/jifty_web_crud_edit.png
-SHA1 4750531fd66ff064fba2f1096d159ecb20967b57 doc/talks/npw.2006/jifty_web_crud_edited.png
-SHA1 dd797a4f87bbaa0235e678c46119ca6bc910cbcd doc/talks/npw.2006/jifty_web_crud_new.png
-SHA1 5ccf1bbbb67a404ae4668f761f54b6046c72dff9 doc/talks/npw.2006/jifty_web_dbadmin.png
-SHA1 17e4bd9bfb0a4b3239da18186cc9f4f1fed40900 doc/talks/npw.2006/makefile_pl.png
-SHA1 59faa98d51ebeb6978d49a97d92af92c89648c0c doc/talks/npw.2006/new_entry.png
-SHA1 53b7d0f54a3a68f30390556ec610cee8be0e2db6 doc/talks/npw.2006/online_docs.png
-SHA1 5395291e5a5d2bff244865faf33a138874b13d93 doc/talks/npw.2006/tests.png
-SHA1 2ad5115506e9a255020b1c3e2a9caa7e6662588a doc/talks/npw.2006/validate_entry.png
-SHA1 42eb797f2b0063b01764fd9d1a7aced2836f7388 doc/talks/npw2005.xul
-SHA1 67f41db40d62b81d71cb60c542695e0d7e6d393d doc/talks/pony.jpg
-SHA1 e29c31fecdc7227dc0864eeba7c5ddeb8dd92608 doc/talks/pony.png
-SHA1 c11707316f85aac566d1e2ad4985352319d2e11d doc/talks/takahashi.css
-SHA1 694ea3fb3d4ddd8a0de192dcdda324f9423da4c9 doc/talks/takahashi.js
-SHA1 109e87541d601c1be1d2042c6ab9d2952a94d36b doc/talks/yapc.asia.2006.xul
-SHA1 4b5680d51102b03ddf72dab0677ec8d97b6d6962 doc/talks/yapc.na.2006.xul
 SHA1 7d6cffbb4f916bfaba69540329cb7d7f67d12f25 etc/config.yml
 SHA1 e974f78178f53c88fb7e3f8d20f7df184d13e1d0 inc/Module/AutoInstall.pm
 SHA1 017bedfcba1e0c72b36301e6ef21b8712b84d175 inc/Module/Install.pm
@@ -101,75 +56,81 @@
 SHA1 7eb44b00058c44795038d7fa4c0c77470f20a7f8 inc/Module/Install/Win32.pm
 SHA1 6d05967a5e1680b5f118315aaa6b8a1e143d79d8 inc/Module/Install/WriteAll.pm
 SHA1 c17e8f3cf8ebe1eb4929fd2bd2fd530a9de1abd0 lib/Email/Send/Jifty/Test.pm
-SHA1 26d6d6bba3e8677b8c5ef632bb8ac23ec0805d4a lib/Jifty.pm
+SHA1 aec0a78576b85191626741b91510258ac2cd2cc3 lib/Jifty.pm
 SHA1 97b88e634644b2634bcd5c96d21a9fbb02bc135c lib/Jifty/API.pm
-SHA1 6f459bab942544c5e3f718df8f511dba0d4a5613 lib/Jifty/Action.pm
+SHA1 b88fa39d416114e24b434b38edd86b0cff86104b lib/Jifty/Action.pm
 SHA1 a6d9d87b4fa06cfab36f249a67946b45669dcee7 lib/Jifty/Action/Autocomplete.pm
-SHA1 07adae0debb0900f92921f7bc3ef8d62b00182f4 lib/Jifty/Action/Record.pm
+SHA1 79c5f54c338e989c0467d9a5baa52da65cfbcf12 lib/Jifty/Action/Record.pm
 SHA1 f2dce309f70c71cd1f86948548a108dbe7ddd25e lib/Jifty/Action/Record/Create.pm
 SHA1 8417e5141d1e90c08a5359cc147d56590cd8af9b lib/Jifty/Action/Record/Delete.pm
 SHA1 6eda031083567c5cfe9d434e1bdc31bb16ba087c lib/Jifty/Action/Record/Update.pm
 SHA1 c99a798acc9c65baf4e750a70487c192980e0c54 lib/Jifty/Action/Redirect.pm
 SHA1 cf349fcfe9ee28216eae2213ab0016ceaffaf2a7 lib/Jifty/Bootstrap.pm
 SHA1 5f5c4895999d303bcfeea8dc86553e8dec13688c lib/Jifty/ClassLoader.pm
+SHA1 8630d9cfbc56fa66229e975743ecfab25337720b lib/Jifty/Client.pm
 SHA1 8b4824481d003c667434223ba1432e18422431e7 lib/Jifty/Collection.pm
 SHA1 1164429483ccf9d6fb9bf21d87c5d11d942dd115 lib/Jifty/Config.pm
-SHA1 ab34204334253d661611a6bfd14189553e18787b lib/Jifty/Continuation.pm
+SHA1 40fbe5939099501bd4fbae6fc8b1b65aaa815010 lib/Jifty/Continuation.pm
 SHA1 15970f85b57eab885568a71f164dc627c791287c lib/Jifty/CurrentUser.pm
-SHA1 64fa43baf3d9be3e68af7dd283f0694c98800726 lib/Jifty/DateTime.pm
-SHA1 5ab70b0b6bf13257d7d2cecf9399561d03c9fd9a lib/Jifty/Dispatcher.pm
+SHA1 b4f56fb42e62e5712f2c382a3daf72532b09aa63 lib/Jifty/DateTime.pm
+SHA1 4002b796a33386e5729d36a3e6a27e6b193e1cce lib/Jifty/Dispatcher.pm
 SHA1 aa71ff8e4bd2b2652254eb63272c1edf9664f270 lib/Jifty/Everything.pm
 SHA1 f4285964bfa60f300d7f572868af745737396320 lib/Jifty/Handle.pm
 SHA1 61af0bde25c3eee4b72198dbc79fee93fb63673a lib/Jifty/Handler.pm
 SHA1 47fd8e670f13cfea2eb215a3b39fd2ab3d63e71f lib/Jifty/I18N.pm
 SHA1 db36e9299112e1796c3044390ffe452751f675b0 lib/Jifty/JSON.pm
-SHA1 c71e1c29ac2ce404cc0cf818234f7c5e45d12c37 lib/Jifty/LetMe.pm
+SHA1 b985e7e9a20461beef1090f4b0db4897290cbd82 lib/Jifty/LetMe.pm
 SHA1 f47496ea9779b3ba77bffccf16f923bb3be52682 lib/Jifty/Logger.pm
 SHA1 c2ef5f9cfac7a0adff5c492bfdd005d42e489173 lib/Jifty/Manual/AccessControl.pod
-SHA1 96b0cd5887e084e73ad3ed21cde9ba853a89180a lib/Jifty/Manual/Actions.pod
+SHA1 ddeb3174dd4b5deded7257f397b814ff86042050 lib/Jifty/Manual/Actions.pod
+SHA1 19b55c02fb61a54a3b72efefef8657a2b46558fc lib/Jifty/Manual/Continuations.pod
 SHA1 b706c85c0d68ea72e9aac27b4970e9271d6d5811 lib/Jifty/Manual/Cookbook.pod
-SHA1 00e16e6193acde5737fd066e0b10563ebb4efaeb lib/Jifty/Manual/Glossary.pod
+SHA1 0f95658ca3d4ed3deb1951f514774446a583247f lib/Jifty/Manual/Glossary.pod
 SHA1 1204d70c868084ac3114fae277e98a756f83f819 lib/Jifty/Manual/ObjectModel.pod
+SHA1 7624a4adaab3901040b2dccb33ba3d59bf4978a9 lib/Jifty/Manual/PageRegions.pm
 SHA1 3891b4eab1d94d8b218b8441dce22f6c22acfa1c lib/Jifty/Manual/Tutorial.pod
 SHA1 45f95f61826365d39a5eab2cc119967273d17077 lib/Jifty/Manual/Tutorial_ja.pod
-SHA1 fd9d89d662030b76e460126f6f2981451ef1b32d lib/Jifty/Mason/Halo.pm
+SHA1 59ce74460e9c1fe8aa1114c2e874348583b76548 lib/Jifty/Mason/Halo.pm
 SHA1 809ace5bafff5ad2461d5495464863ba808dfd19 lib/Jifty/Model/Metadata.pm
 SHA1 36de25464ae4eb07675f453cc590b634c6ff5a37 lib/Jifty/Model/Session.pm
 SHA1 0efcdf22d66e521cf250c1398caf3aba93ed795d lib/Jifty/Model/SessionCollection.pm
-SHA1 bec34fd3d0ff15d63efd43c2a7ac3a9c3ce4bafd lib/Jifty/Notification.pm
+SHA1 a08cad548e0c3a8e7020c3d28b397cd829d6f2dc lib/Jifty/Notification.pm
 SHA1 dbde3807a964ad4f792bffc08fac49d8daea8017 lib/Jifty/Object.pm
+SHA1 fe40079f81fd0929ce416506620a803977710cad lib/Jifty/Param.pm
+SHA1 05ed23b70fff7823482140dc691f52ec55dfdc8f lib/Jifty/Param/Schema.pm
 SHA1 e4f29a83cacf2be4411d0b838ceef8bc9ea76cbe lib/Jifty/Plugin.pm
 SHA1 146820c9560378371020a368286fe04824162b82 lib/Jifty/Plugin/ClassLoader.pm
 SHA1 704b7095944e8a90456119419ed7c80a0741f29b lib/Jifty/Record.pm
-SHA1 9277ea7430fbd44fed095c69a42b4f4623620520 lib/Jifty/Request.pm
-SHA1 34aa686aedc18677d8b9560c5ac4bd68aad2f5e2 lib/Jifty/Request/Mapper.pm
+SHA1 8b550946dad45163316f329508be79e4354269fe lib/Jifty/Request.pm
+SHA1 7e4d83147f5f665bb0e8d290ea70340b82a205c2 lib/Jifty/Request/Mapper.pm
 SHA1 05bc90e5a7c6518443783bd8c16dc9da36af78c2 lib/Jifty/Response.pm
 SHA1 25140e3449ae4e87800f31f3cdeceefed5f9419e lib/Jifty/Result.pm
 SHA1 44466e45b0bf67fd0dd63e76f310acbdd27532b2 lib/Jifty/RightsFrom.pm
 SHA1 0306af64a6289796db4b5ff2b8c5e7c23506a9e3 lib/Jifty/Script.pm
-SHA1 c84102766498aa2a3511e1e69f3bc8dbd72fae2f lib/Jifty/Script/Action.pm
+SHA1 bf8ebc59859c7a5f21ff9968f3cab9ded54ca686 lib/Jifty/Script/Action.pm
 SHA1 4fa2b5ac1c0a9423a630833ea02c374e3850c32d lib/Jifty/Script/App.pm
+SHA1 1ad9937d9e28f1568954bcffac500be87f3cb355 lib/Jifty/Script/Deps.pm
 SHA1 29d13e52fe20d59515cb06fb30c38d111a407255 lib/Jifty/Script/FastCGI.pm
 SHA1 e25a259fc9fd3183a7981236f428f54ac4c4f49e lib/Jifty/Script/Help.pm
-SHA1 6e39a67ed7b1ae8dc90aa7ef8dfef738507194ad lib/Jifty/Script/Model.pm
+SHA1 3d64cec7b94114377438a33dc4708675132a57cf lib/Jifty/Script/Model.pm
 SHA1 5f83918df18adf655da5a5119ef136789a61956e lib/Jifty/Script/Plugin.pm
 SHA1 4268d0e323c346773bc8f700c4b61abe9b608507 lib/Jifty/Script/Po.pm
-SHA1 f027e301fd3820988f3af3592876e289fd800523 lib/Jifty/Script/Schema.pm
+SHA1 b5d2f7108d962c9248aef01e4cc6e4dbecf03e3a lib/Jifty/Script/Schema.pm
 SHA1 84fb7443024ef5a86463ea3a5ae2c726b4fb62d3 lib/Jifty/Script/Server.pm
-SHA1 3fd6fc85409c817f55c9293c7a5b75fedf0c0e11 lib/Jifty/Server.pm
-SHA1 bc511caf42f189641b819f2338d6641fe748dc25 lib/Jifty/Test.pm
-SHA1 5a86e32934a9b313f3e2c51c6af0f2c67f1a5b2b lib/Jifty/Test/WWW/Mechanize.pm
-SHA1 a56f403521ac4df5ec15079b98da33797a2b047d lib/Jifty/TestServer.pm
+SHA1 0646a96ca5f3da1585e3fb1dcc9b3540d2b8f50f lib/Jifty/Server.pm
+SHA1 f525e25ccb57b4f11f33a35c234d46280180c353 lib/Jifty/Test.pm
+SHA1 28e075057f01fdb79aa79706e1de5665604e54fb lib/Jifty/Test/WWW/Mechanize.pm
+SHA1 733fe172a33d77ebbf1202ab02632c5d896f16f8 lib/Jifty/TestServer.pm
 SHA1 7561e9fb302562617853fcc2a9be665a67ffc4d8 lib/Jifty/Upgrade.pm
 SHA1 cd2a8612b1b7204d321b80eea365036c29702fc2 lib/Jifty/Upgrade/Internal.pm
-SHA1 9ff363c5856b01b542aa11eddf214f12ea6bc28a lib/Jifty/Util.pm
+SHA1 0b22153c9912d6bfcf82f7615c96cffafb346bed lib/Jifty/Util.pm
 SHA1 f66bcdc226c855a95fd99b3bef1b6175330ea896 lib/Jifty/View/Mason/Handler.pm
 SHA1 d0aa38f5fd528d499de91da1e8c411f39f922bb2 lib/Jifty/View/Static/Handler.pm
-SHA1 e43bdd80cc6dfdcc97d14f4ecdbeb029be3b3e86 lib/Jifty/Web.pm
+SHA1 463169e333ac334b026c3395fa06b982a76dbae5 lib/Jifty/Web.pm
 SHA1 1efc063a47d726c98d2b4a4e3104dab9765caff4 lib/Jifty/Web/Form.pm
-SHA1 873e38779b90756c6c7d9100ff02c5b0decdc3b8 lib/Jifty/Web/Form/Clickable.pm
+SHA1 853ce15ee3efe007c649338b667885b44434044c lib/Jifty/Web/Form/Clickable.pm
 SHA1 f0536868d6915a7d2972a811a5feec14e278c24a lib/Jifty/Web/Form/Element.pm
-SHA1 fafb5dec85bea60f79fd086506b7ca713b8f1a6b lib/Jifty/Web/Form/Field.pm
+SHA1 f55bac5a2d0747f048b725a9c2408584d54dd8e2 lib/Jifty/Web/Form/Field.pm
 SHA1 82c6b2694e45c38fa7c9902e41d78bbdfda82c29 lib/Jifty/Web/Form/Field/Button.pm
 SHA1 c1071263839a663d44d7f922c7c24b5bcc132a82 lib/Jifty/Web/Form/Field/Checkbox.pm
 SHA1 b21ef4e33a628f5d6c54adf5f47f75e69a861644 lib/Jifty/Web/Form/Field/Combobox.pm
@@ -185,8 +146,8 @@
 SHA1 2548412d5bfbd08050d53ab5c58e0d962d4b2448 lib/Jifty/Web/Form/Field/Unrendered.pm
 SHA1 e37541952c969f2e74f942782d483de75e9265f9 lib/Jifty/Web/Form/Field/Upload.pm
 SHA1 1f162c264cef4c395b500cf71f6c9eb40f2aca89 lib/Jifty/Web/Form/Link.pm
-SHA1 d38dafcb090e0d7605f0fc86685bff01450bafa6 lib/Jifty/Web/Menu.pm
-SHA1 9056772e89fb963d1835b54d97136bfbf64bc6a2 lib/Jifty/Web/PageRegion.pm
+SHA1 31bcb079f01fb208fb0b2a4d41fde1044bb3a295 lib/Jifty/Web/Menu.pm
+SHA1 c5a1a65313ab58792634581786167279b033a29f lib/Jifty/Web/PageRegion.pm
 SHA1 8c7c78fb97daf25e74e60c6de5a5adee1659b7da lib/Jifty/Web/Session.pm
 SHA1 ec239a461310c3eb36cc4d3d2df3c020b1cab3fb lib/Jifty/YAML.pm
 SHA1 e8ce16205eccb1b99224ca81d3a3496163a98864 plugins/EditInPlace/Makefile.PL
@@ -211,10 +172,10 @@
 SHA1 52a2ddc6b4ea6ba0791d8a66690ca2eddd447c6b plugins/Login/lib/Jifty/Plugin/Login/Action/ConfirmEmail.pm
 SHA1 b659d37396fe16dd28d72cdf930f1c7569da295a plugins/Login/lib/Jifty/Plugin/Login/Action/Login.pm
 SHA1 4f97a6640ce0daaae9bbf79d37f7fe9d366ef85b plugins/Login/lib/Jifty/Plugin/Login/Action/Logout.pm
-SHA1 b4bd0a12cc900662def2f239cf373bcf237d4698 plugins/Login/lib/Jifty/Plugin/Login/Action/RecoverPassword.pm
-SHA1 77d8d2e0002c6ec0a7892de8466d879551eb3e95 plugins/Login/lib/Jifty/Plugin/Login/Action/ResetLostPassword.pm
-SHA1 8b86c663e81e56898098a70fb2f19c22df2b4331 plugins/Login/lib/Jifty/Plugin/Login/Action/SendAccountConfirmation.pm
-SHA1 c59230ba86f09793aa696c71e1c54452cb3e0805 plugins/Login/lib/Jifty/Plugin/Login/Action/SendPasswordReminder.pm
+SHA1 b869cffda9c3d66c648faac4952e0cd02333a541 plugins/Login/lib/Jifty/Plugin/Login/Action/RecoverPassword.pm
+SHA1 2ab6394a5ee996abbd009aec0218ee0992c238d9 plugins/Login/lib/Jifty/Plugin/Login/Action/ResetLostPassword.pm
+SHA1 540c9431a20816d42125516da79759223fe6118e plugins/Login/lib/Jifty/Plugin/Login/Action/SendAccountConfirmation.pm
+SHA1 1122315c148dab40760b86665da4752ca31c2ed5 plugins/Login/lib/Jifty/Plugin/Login/Action/SendPasswordReminder.pm
 SHA1 4dce159f0a69c5fe972ee3e6a31c1809bbf844e0 plugins/Login/lib/Jifty/Plugin/Login/Action/Signup.pm
 SHA1 81875f6ab2d807bfe4671af084b4f238d383464c plugins/Login/lib/Jifty/Plugin/Login/CurrentUser.pm
 SHA1 6ed1349bb1d9f833bfd5c02b8aee94cc2f93da5f plugins/Login/lib/Jifty/Plugin/Login/Dispatcher.pm
@@ -231,8 +192,8 @@
 SHA1 62229286e03ec35c922c8a7f9f3bb68412a78a55 share/dtd/xhtml-special.ent
 SHA1 e7749f99989ec8a9608f6cfbd41a5e5dddc18aec share/dtd/xhtml-symbol.ent
 SHA1 b4a6d708f6b55a48526e9483c718f2ed820df75c share/dtd/xhtml1-strict.dtd
-SHA1 ddf4a9e74074ad5df970f33a969c6a0fcbcb180c share/po/en.po
-SHA1 b65b002b9c7e5326823324c154cd2b3fc4f02b91 share/po/ja.po
+SHA1 90aff5cc1f876571775287cc0c1c83e7291c3ab2 share/po/en.po
+SHA1 90aff5cc1f876571775287cc0c1c83e7291c3ab2 share/po/ja.po
 SHA1 da39a3ee5e6b4b0d3255bfef95601890afd80709 share/web/static/css/app-base.css
 SHA1 da39a3ee5e6b4b0d3255bfef95601890afd80709 share/web/static/css/app.css
 SHA1 c566d7ab5005e82dcf2f90809ae757e07d338138 share/web/static/css/autocomplete.css
@@ -241,7 +202,7 @@
 SHA1 7046e3ca935a0d601a08da923d1d3c30bcadf9fe share/web/static/css/calendar.css
 SHA1 bf48b6bda86f359b95b29a7c3451a3c1b5721385 share/web/static/css/combobox.css
 SHA1 6b4d4cbc063731dabe50356a3560eae6a9f25aef share/web/static/css/context-menus.css
-SHA1 406222bd1c864c23e9c2bd77905d6769821a862e share/web/static/css/forms.css
+SHA1 ce0df332b0cde528e88f5054cb3b39989e0cc999 share/web/static/css/forms.css
 SHA1 52ddd83ee7c511d78537454a097f0264a7db3c1c share/web/static/css/halos.css
 SHA1 c7eede0c22f68e4417748bb0903b48195648f4c0 share/web/static/css/keybindings.css
 SHA1 91cd2873a5521bbc172389d8af2c29f33578fcc9 share/web/static/css/main.css
@@ -261,12 +222,13 @@
 SHA1 62a1b41ac5eefbf3d0ad578a19572d4096d88146 share/web/static/images/silk/pencil.png
 SHA1 2f84cd8d3f46ffe9eb1406a4f6337fa5b5e2bcd1 share/web/static/images/silk/pencil_add.png
 SHA1 eb756c931be8ef70fc27ba0046375f32022e3b6d share/web/static/js/app.js
-SHA1 a0ddd0a1b4b45cf198aff6c62cf36f18b3c367e9 share/web/static/js/app_behaviour.js
+SHA1 e919b502c93ea84b87749d3ec05d4e7755a9a04d share/web/static/js/app_behaviour.js
 SHA1 86484ce84ddeb7488563eae5c2dc0b94b3c9a5eb share/web/static/js/behaviour.js
 SHA1 094b2109587bbb33cb401c4dcf6bdea352739c6b share/web/static/js/bps_util.js
-SHA1 ad5ba6aa95329704f1d9cd38b9050b141aadf474 share/web/static/js/calendar.js
+SHA1 f1e525a957d32dfad2da6cac393d0c9b28b19299 share/web/static/js/calendar.js
 SHA1 e9f9931abe8ddf86cf5cfddd1f0e963bb5bf0ccb share/web/static/js/combobox.js
-SHA1 456cfe126f09d2e287a1f2f03e466531985b4b5b share/web/static/js/context_menu.js
+SHA1 cc50df358f5554be8b40ae58780a117b7a3296ab share/web/static/js/context_menu.js
+SHA1 b03b1f06f9c972cfb083c3d87b3dc74e4d85bf77 share/web/static/js/css_browser_selector.js
 SHA1 efa1e9f561fb31ec520e32e7d623e8e41afb7dfc share/web/static/js/cssquery/cssQuery-level2.js
 SHA1 37cfa3bfdb37450d3a89a88387c4e04baefff271 share/web/static/js/cssquery/cssQuery-level3.js
 SHA1 a80e117cfca6644bde2bb8bd8d48a093e784a731 share/web/static/js/cssquery/cssQuery-standard.js
@@ -274,9 +236,9 @@
 SHA1 e72565db2119b617c9ca0af948956a399caa5720 share/web/static/js/dom-drag.js
 SHA1 4553f3cb184b09228ed4362898e9d30200a2a585 share/web/static/js/formatDate.js
 SHA1 a1d2c6292d656c275383b97aad6ca913b8a1b031 share/web/static/js/halo.js
-SHA1 4b9752127e8737d1e1c0ea696a64b8d65ccb28b4 share/web/static/js/jifty.js
+SHA1 94fa23b1cfc931576e854394dc4b0d3cec8f48cb share/web/static/js/jifty.js
 SHA1 29fe34f11192976f1a388562188b1eb9af7f4497 share/web/static/js/jifty_smoothscroll.js
-SHA1 fc33aea1f6d4719e0a0cacd0884fe076757b8edf share/web/static/js/jifty_utils.js
+SHA1 12d8200d7c97c107dd202aa9759e2441d2d079fe share/web/static/js/jifty_utils.js
 SHA1 49478568d1f258c9d061faa30c2181fd999b07f0 share/web/static/js/jsTrace.js
 SHA1 3b3493afbf46fc8afba58f541e338836bedbdd0b share/web/static/js/jsan/DOM/Events.js
 SHA1 36b2a3f1966b97fcc338b557830106bf2d490485 share/web/static/js/jsan/JSAN.js
@@ -286,9 +248,9 @@
 SHA1 f15b0364f99d2e4c1af795c82883f89b9eaca9b2 share/web/static/js/json.js
 SHA1 e68a5e22ae973fc8afd47a5b43fbed154dcae6ff share/web/static/js/key_bindings.js
 SHA1 986a63bc533f6fa99c9b0f0226a14f9871b94ce5 share/web/static/js/prototype.js
-SHA1 bed876257c8351aaa9c70e0882721635f25c0577 share/web/static/js/rico.js
+SHA1 a1048deeafbc76659e54eb77c0e51b6b79cade19 share/web/static/js/rico.js
 SHA1 164bc59cf75fe943edc80da65b19246fc9b9643e share/web/static/js/scriptaculous/builder.js
-SHA1 20c11fc4d6c719d83f74cb1e9b69ed2bb129ac45 share/web/static/js/scriptaculous/controls.js
+SHA1 afa5b63db51fc4c3c4ff2535d3af5fe5b00add19 share/web/static/js/scriptaculous/controls.js
 SHA1 28f001d3c48395daf0de22876a70d918db3a461e share/web/static/js/scriptaculous/dragdrop.js
 SHA1 21ce51daa693e3716678ac4190369b499b35e8de share/web/static/js/scriptaculous/effects.js
 SHA1 914db330c7fe585dfeddce713558f04328fb51db share/web/static/js/scriptaculous/scriptaculous.js
@@ -324,7 +286,7 @@
 SHA1 bd81ff4e458c5e1a76c131dce40ffd71fd6a76f7 share/web/templates/__jifty/online_docs/index.html
 SHA1 630b516dede6767e8185de8211e6affd7b564cfe share/web/templates/__jifty/online_docs/toc.html
 SHA1 38e4c2bc3b3e49581eea8c80da26e2cfae817979 share/web/templates/__jifty/validator.xml
-SHA1 a342f6c5f3234fc37f55af22537ab73ebd61a52b share/web/templates/__jifty/webservices/xml
+SHA1 97a8559ffd4486a7af5f15fa34425c1caad352e6 share/web/templates/__jifty/webservices/xml
 SHA1 c7384fcdf1ee7a3e347388c6619f6aa2f297656e share/web/templates/__jifty/webservices/yaml
 SHA1 8145ab6043a7bbd70e1bfa33e068fb741f4ee3a5 share/web/templates/_elements/header
 SHA1 f36e8e0557117d8fdcebad74694fac718101ce27 share/web/templates/_elements/keybindings
@@ -337,18 +299,20 @@
 SHA1 106fc0286e2aff5a01d9a623c37fc807451f2037 share/web/templates/dhandler
 SHA1 b9d730f675335894e36b780202e1afbe98b2985f share/web/templates/helpers/calendar.html
 SHA1 1bd17a07884f71740a048c41b67ac9b06915bf76 share/web/templates/index.html
-SHA1 76ec5be5f10be9402d1df4a1a2dee831ed8bff1a t/00-load.t
-SHA1 1a865b0c66f49d018fd7c512a09d923985513bb7 t/01-dependencies.t
-SHA1 840c77265cad57e9135c7fb1c21100df2ad7ab6e t/01-version_checks.t
-SHA1 fc52f8d8fde7fd7dc6d2bd6e77a6ce8f6e89029e t/02-connect.t
-SHA1 8adc1ea4a205ce52ba03f070c33e321e35152b70 t/03-form-protocol.t
-SHA1 2c0bb7cb044635cac4c8a902e2f3e59c80d7eb0c t/05-dispatcher.t
+SHA1 7f9dae91a9bfc2743eec1d7aaf78e16fc9f1baba t/00-load.t
+SHA1 b609aef23419ee96e809ead7bd0e721460f9b363 t/01-dependencies.t
+SHA1 95fe956e7bae756a7bc25e65a6761ee0c64981e7 t/01-version_checks.t
+SHA1 4fa0e0143339298278c5e22a58236c6b71555508 t/02-connect.t
+SHA1 46221e3b0272c3ef2f5ce0032239dc3aba1d2e04 t/03-form-protocol.t
+SHA1 b3e2d70996dbbe82510a8e75646b83b96d0b566a t/05-dispatcher.t
 SHA1 acc343a5359eda7ce3765b16a70a6906a625ab38 t/06-forms.t
-SHA1 9310b60d521227aaeb9b3fd0c69aa579cd10ab6f t/07-limit-actions.t
+SHA1 0712de44cbe60eea251a1955b0bcb218f22adf4a t/07-limit-actions.t
+SHA1 38ab90a10fc0cbbbfc3205e543312950302f37a2 t/08-client.t
+SHA1 ea9587b57587f6b9b5e02e3d30b96807f7b62200 t/09-url.t
 SHA1 59c44900b1cb957d262f96363ceff21b46e0d598 t/99-pod-coverage.t
 SHA1 bb0da54f2b3f2d7955baa41ee458cb3d1887f475 t/99-pod.t
-SHA1 d7982e7064c5ee2a98ea858ebf57664f50a26c40 t/Continuations/bin/jifty
-SHA1 69d51b37601c4fc51b989234f96611357d96c137 t/Continuations/lib/Continuations/Action/CrossBridge.pm
+SHA1 a7dc1f376cac630ea28d2965e561469deb951cc7 t/Continuations/bin/jifty
+SHA1 adbc53cbd328b4d49d3336586fe8f7b7124da970 t/Continuations/lib/Continuations/Action/CrossBridge.pm
 SHA1 01ebcf50d361afff117bfbb14125470da3010f90 t/Continuations/lib/Continuations/Action/GetGrail.pm
 SHA1 55c7de13306c111504b1c9a10fb3147a3d8be79f t/Continuations/lib/Continuations/Dispatcher.pm
 SHA1 904ccf244ddafa2cf756e2de1f251b0962399750 t/Continuations/share/web/templates/autohandler
@@ -359,22 +323,22 @@
 SHA1 a57494ba5021699868a520313332b08eee3bb1e9 t/Continuations/share/web/templates/help-help.html
 SHA1 6831427bd1a041b49a320d60ef7baf2e2e62be1a t/Continuations/share/web/templates/index-help.html
 SHA1 4acb52a5373144d2cb5ccb7a39961e5306c8b5ee t/Continuations/share/web/templates/index.html
-SHA1 233ce8afb5de542506f03195f0d905f97d96324a t/Continuations/t/00-prototype.t
-SHA1 cc03d9e1f5d78c0ee1d9b74b56bda7fcd093dfda t/Continuations/t/01-raw-api.t
-SHA1 5220780feaa3fc9a432e0a2043cc07a1c6d198ec t/Continuations/t/02-api.t
-SHA1 37fa61497ffea2011ae176a2237dad18a8fc3aec t/Continuations/t/03-gc.t
-SHA1 4d6b80b7cb255a5ea7273c71dc495ece0ef1a2d5 t/Continuations/t/04-before-blocks.t
+SHA1 3b7b51b4428dcbf0b9b1d55c39fd139a3ee4868a t/Continuations/t/00-prototype.t
+SHA1 c36179582e4dfabdc7b39cbd8196f187140e24eb t/Continuations/t/01-raw-api.t
+SHA1 313bd1afbbd9e066db03080e99766961f9fba2a8 t/Continuations/t/02-api.t
+SHA1 f68f215bb0d9eae9054185b1335ae1fdd0f82708 t/Continuations/t/03-gc.t
+SHA1 acb9008e28ca12dfdc63d007f4f9cad74144b09f t/Continuations/t/04-before-blocks.t
 SHA1 29a9d0b63d274805fe33c3123faf1a5f871a0e24 t/Jifty.pm
-SHA1 d7982e7064c5ee2a98ea858ebf57664f50a26c40 t/Mapper/bin/jifty
-SHA1 da400e1042a4c521197a8a49b854dc077243af6b t/Mapper/lib/Mapper/Action/CrossBridge.pm
+SHA1 a7dc1f376cac630ea28d2965e561469deb951cc7 t/Mapper/bin/jifty
+SHA1 b381fb60f53d16f8846f7011b8f8a862eaa834c0 t/Mapper/lib/Mapper/Action/CrossBridge.pm
 SHA1 6bee8bba7db76902f300f69bbc7ffbd045380074 t/Mapper/lib/Mapper/Action/GetGrail.pm
 SHA1 904ccf244ddafa2cf756e2de1f251b0962399750 t/Mapper/share/web/templates/autohandler
 SHA1 14a865ad9c903f69dffa595c463f343dd29f62e2 t/Mapper/share/web/templates/index.html
-SHA1 7ef92738118be1ae4bf958babec0ba0882ff1ecc t/Mapper/t/00-prototype.t
-SHA1 e6ebd82c83b4c826e305c6f212609f99e0474115 t/Mapper/t/01-raw-api.t
-SHA1 05cab3dccff05395659b5b16724ad75476d90db9 t/Mapper/t/02-api.t
-SHA1 d7982e7064c5ee2a98ea858ebf57664f50a26c40 t/TestApp/bin/jifty
-SHA1 a3b4652e1fe7fb95e65ccafc533b6a239876a475 t/TestApp/lib/TestApp/Action/DoSomething.pm
+SHA1 3b7b51b4428dcbf0b9b1d55c39fd139a3ee4868a t/Mapper/t/00-prototype.t
+SHA1 548bf96ee16a84e3793d89cc0dd68ab67bd03f66 t/Mapper/t/01-raw-api.t
+SHA1 c366dab11ba6f52982dd6278e3da5ba4358516ab t/Mapper/t/02-api.t
+SHA1 a7dc1f376cac630ea28d2965e561469deb951cc7 t/TestApp/bin/jifty
+SHA1 c752d0a2527b22719f71a2df9a86a9f70ac18975 t/TestApp/lib/TestApp/Action/DoSomething.pm
 SHA1 802334e8157cdda70a1f6675aa58ac029e2234e9 t/TestApp/lib/TestApp/Dispatcher.pm
 SHA1 367411e4ab66086e6620b0743273b902bbdb5a31 t/TestApp/lib/TestApp/Model/User.pm
 SHA1 67f41db40d62b81d71cb60c542695e0d7e6d393d t/TestApp/share/web/static/images/pony.jpg
@@ -383,23 +347,25 @@
 SHA1 f5870c2fb3222b86d97f14bdf8155821c887987b t/TestApp/share/web/templates/editform
 SHA1 ef0db81c421ba89231ea6d72f355b7dd8fd5e8e2 t/TestApp/share/web/templates/index.html
 SHA1 9a50bb56338896f9cd50b7098a9e28397ad28a34 t/TestApp/share/web/templates/somedir/dhandler
-SHA1 d21256a0b0b25ffc5ccc549bc1e6839694ac2921 t/TestApp/t/00-model-User.t
-SHA1 fc82fe131a569aacf7d886265617a13bcb4dd4d8 t/TestApp/t/00-prototype.t
-SHA1 23fc2f1a93c3243ed86891f29dc080facf1430cc t/TestApp/t/01-config.t
-SHA1 7ee50f1358dcedb7a4ec6b2336b423dbfd345461 t/TestApp/t/02-dispatch.t
-SHA1 37501cb9ad895131f10abe23b832f9bababd5fe4 t/TestApp/t/03-static.t
-SHA1 212fe99dac8967a6feb0725d0e4b102b9a1b0c39 t/TestApp/t/04-sessions.t
-SHA1 2f5dd61abd226ed559cecafa4f4817240f98c29a t/TestApp/t/05-actions-before-redirect.pm
-SHA1 fc4e9c429e7cb31530d9ceb16046eaa1c7aab943 t/TestApp/t/05-editactions-Cachable.t
-SHA1 62cd71ae0b5a6e017b6d1b0d8b2bd535e1e6e3f0 t/TestApp/t/05-editactions-Record.t
-SHA1 54087891789c499faecda98d2ea0bb17acc305b5 t/TestApp/t/06-validation.t
-SHA1 5927f20749d730a354fb4552f15c73260566c0c5 t/TestApp/t/07-sandboxing.t
+SHA1 034a7c1261c73d35435a8cfc2f536e3ee68bec0a t/TestApp/t/00-model-User.t
+SHA1 3b7b51b4428dcbf0b9b1d55c39fd139a3ee4868a t/TestApp/t/00-prototype.t
+SHA1 94a1fe86cc34fbdce9087f30a69a859063ca8714 t/TestApp/t/01-config.t
+SHA1 6c6726cd87697675c80828825ff34109daec7f86 t/TestApp/t/02-dispatch.t
+SHA1 d438a2c8aa2fa15c80da4f2a44ecfe65856b58f8 t/TestApp/t/03-static.t
+SHA1 dc8e0ea29839c6dd50843d7c95a907874f6d5472 t/TestApp/t/04-sessions.t
+SHA1 071288e6e1c64cef819f8e3adb7b20a8c7044804 t/TestApp/t/05-actions-before-redirect.pm
+SHA1 f4ea65a5204c4fceb0892a324d225795e8ceb5a5 t/TestApp/t/05-editactions-Cachable.t
+SHA1 be4abdfb357b579670dedf2626283a3128b2677b t/TestApp/t/05-editactions-Record.t
+SHA1 31c78b5db1aaa7d3b6efa226f28d6b17ab2ac2f9 t/TestApp/t/06-validation.t
+SHA1 0a73294c477197748994580ed1615cbe42bfa335 t/TestApp/t/07-sandboxing.t
+SHA1 842377402228a26ff444c565831bc560a66c0302 t/TestApp/t/08-notifications.t
 SHA1 69401ad0579fa743f087731536229d2806dd1d6a t/TestApp/t/config-Cachable
 SHA1 710c4b0faaea46f90a7b071e5396541a59ed0ff1 t/TestApp/t/config-Record
+SHA1 fbd02b72586a9774301e6dc34fe9c1fcdfb1f3ad t/lib/Jifty/SubTest.pm
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1.4.3 (Darwin)
 
-iD8DBQFErfMyEi9d9xCOQEYRArtLAJ0bMc2nIWwEIm9P3NEnHJm/xw+3aACgqSqO
-BlgHLHiwkx03ixIY/8DJxLQ=
-=SIyP
+iD8DBQFEwr8GEi9d9xCOQEYRAhlBAJ0VBXeKiMVCOFBiV6BLGSmv19yIAQCeJAxq
+HHOmOquVy6ciOfI7CMl6oeU=
+=UVjm
 -----END PGP SIGNATURE-----

Added: jifty/branches/moose/doc/talks/oscon.2006.xul
==============================================================================
--- (empty file)
+++ jifty/branches/moose/doc/talks/oscon.2006.xul	Tue Jul 25 01:28:01 2006
@@ -0,0 +1,941 @@
+<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet href="chrome://global/skin/" type="text/css"?><?xml-stylesheet href="takahashi.css" type="text/css"?><page xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="presentation" xmlns:html="http:/www.w3.org/1999/xhtml" orient="vertical" onkeypress="Presentation.onKeyPress(event);">
+<html:textarea id="builtinCode" style="visibility: collapse">
+
+&#9832; Jifty
+----
+Jesse Vincent
+
+Best Practical 
+----
+We 
+Make 
+RT
+----
+We 
+Make
+SVK
+----
+We
+Make
+Jifty
+----
+Web App
+Framework
+----
+Encapsulates
+Complexity
+----
+Jifty
+= JFDI
+----
+JFDI = 
+ Just Do It
+----
+Lets you
+JFDI
+----
+Let's 
+JFDI
+----
+Demo
+App
+----
+How about
+a weblog?
+----
+Glad you
+like it
+----
+This isn't 
+a live demo
+----
+Let's set
+it up
+----
+{{img src="#" width="0" height="0"}}
+{{img src="npw.2006/jifty_app.png" width="552" height="364"}}
+----
+Many
+Directories
+---- 
+3 Files
+---- 
+{{img src="npw.2006/jifty_3_files.png" width="552" height="364"}}
+----
+It runs!
+----
+{{img src="npw.2006/jifty_web_1.png" width="800" height="622"}}
+----
+Not a
+good blog
+----
+Good blogs 
+have entries
+----
+{{img src="npw.2006/jifty_model.png" width="552" height="364"}}
+----
+{{img src="npw.2006/jifty_edit_model.png" width="552" height="364"}}
+----
+{{img src="npw.2006/jifty_schema_setup.png" width="552" height="364"}}
+----
+{{img src="npw.2006/jifty_server.png" width="552" height="364"}}
+----
+{{img src="npw.2006/jifty_web_1.png" width="800" height="622"}}
+----
+{{img src="npw.2006/jifty_web_dbadmin.png" width="800" height="622"}}
+----
+{{img src="npw.2006/jifty_web_crud_new.png" width="800" height="622"}}
+----
+{{img src="npw.2006/jifty_web_crud_edit.png" width="800" height="622"}}
+----
+{{img src="npw.2006/jifty_web_crud_create_2.png" width="800" height="622"}}
+----
+{{img src="npw.2006/jifty_web_crud_edited.png" width="800" height="622"}}
+----
+Nice
+----
+Not really a blog
+----
+{{#i|./lib/Blog/Dispatcher.pm}}
+----
+ package Blog::Dispatcher;
+ use Jifty::Dispatcher -base;
+ 
+ before '*' => run {
+    my $top = Jifty->web->navigation;
+    $top->child('List Entries' => url => '/'); 
+    $top->child('New Entry'    => url => '/new_entry');
+ }
+----
+ on '/' => run {
+     my $entries = Blog::Model::EntryCollection->new;
+     $entries->unlimit;
+   
+     set entries => $entries;
+ };
+---- 
+ on '/new_entry' => run {
+     set create => Jifty->web->new_action(
+         class => 'CreateEntry'
+     );
+ };
+----
+{{#i|./web/templates/new_entry}}
+----
+{{img src="npw.2006/new_entry.png" width="707" height="476"}}
+----
+ &lt;%ARGS>
+ $create # From the dispatcher
+ &lt;/%ARGS>
+  
+ &lt;&amp;|/_elements/wrapper, title => 'Create an article' &amp;>
+ % my $form = Jifty->web->form;
+ &lt;% $form->start %>
+ % for my $arg ($create->argument_names) {
+   &lt;% $create->form_field($arg) %>
+ % }
+ &lt;% $form->submit( label => 'Save' ) %>
+ &lt;% $form->end %>
+ &lt;/&amp;>
+----
+{{#i|./web/templates/index.html}}
+----
+{{img src="npw.2006/blog.png" width="707" height="476"}}
+----
+ &lt;%ARGS>
+ $entries # From the dispatcher
+ &lt;/%ARGS>
+  
+ &lt;&amp;|/_elements/wrapper&amp;>
+ % while (my $entry = $entries->next) {
+  &lt;h2>&lt;% $entry->title %>&lt;/h2>
+  &lt;div class="body">
+    &lt;% $entry->body %>
+  &lt;/div>
+ % }
+ &lt;/&amp;>
+----
+ lib/Blog/Dispatcher.pm
+ lib/Blog/Model/Entry.pm
+ web/templates/new_entry
+ web/templates/index.html
+----
+All Done!
+----
+It runs
+----
+Ship it!
+----
+Oh wait
+----
+New corporate
+directive
+----
+...banning 
+profanity
+----
+(We need 
+to protect
+the children!)
+----
+From the
+Internet
+----
+Need to
+censor blogs
+----
+No problem!
+----
+(Except updating
+my resume)
+----
+Back to the code!
+----
+ # vi lib/Blog/Model/Entry.pm
+
+ use Regexp::Common 'profanity_us';
+
+ sub validate_body {
+    my ($self, $body) = @_;
+
+    if ($body =~ /$RE{profanity}/i) {
+        return (
+            0, 'Would you speak like that in front of your mother? *cough*'
+        );
+    }
+
+    return 1;
+ }
+----
+{{img src="npw.2006/validate_entry.png" width="707" height="476"}}
+----
+Not 
+good enough
+----
+Stops people 
+from blogging
+----
+Clean it up 
+directly
+----
+ # vi lib/Blog/Model/Entry.pm
+
+ sub canonicalize_body {
+    my ($self, $body) = @_;
+     
+    $body =~ s/$RE{profanity}/**expletives**/gi;
+    return $body;
+ }
+
+----
+{{img src="npw.2006/canonicalize_entry.png" width="707" height="476"}}
+----
+(Autocompleters
+work the same)
+----
+{{#i|now}} we
+ship it
+----
+{{#tag|Anatomy of a}}
+{{#tag|Jifty app}}
+----
+ {{#i|Schema (Model)}}
+ {{#i|Actions (Controller)}}
+ {{#i|Fragments (View)}}
+----
+ {{#i|Dispatcher (Kernel) }}
+ {{#i|ClassLoader (Bootloader)}}
+ {{#i|Continuations (Job Control)}}
+----
+{{#tag|Schema (Model)}}
+----
+Jifty::DBI
+----
+Data
+Schema
+Manager
+----
+{{#i|No more...}}
+----
+CREATE TABLE
+----
+ALTER TABLE
+----
+CREATE FOREIGN KEY
+----
+Object
+Relational
+Mapper
+----
+{{#i|No more...}}
+----
+SELECT
+----
+INSERT
+----
+UPDATE
+----
+DELETE
+----
+Inside
+Jifty::DBI
+----
+Three object types
+----
+Handles
+Records
+Collections
+----
+{{#i|Jifty::DBI::Handle}}
+----
+Database 
+independence
+----
+SQLite
+----
+Postgres
+----
+MySQL
+----
+Oracle
+----
+(Oracle still needs a little bit of love)
+----
+{{#i|Jifty::DBI::Record}}
+----
+Database Rows
+----
+{{#i|Declarative Syntax}}
+----
+Remember
+our blog?
+----
+Time for
+0.0.2
+----
+ package Blog::Model::Comment::Schema;
+ since '0.0.2';
+ column entry => refers_to Blog::Model:Entry;
+ column author => refers_to Blog::Model::User;
+ column body =>
+    label is 'Content',
+    type is 'text',
+    render as 'Textarea',
+    default is 'First Post!';
+----
+ column title =>
+    label is 'Title',
+    length is 40,
+    hints is '40 bytes max',
+    is mandatory;
+----
+Database
+upgrades
+suck     
+----
+Database
+upgrades
+sucked
+----
+Jifty 
+fixed it
+----
+ # vi etc/config.yml (Set version to 0.0.2)
+
+ # jifty server
+
+ Application schema version in database (v0.0.1) doesn't match 
+ application schema version (0.0.2)
+ Please run `bin/jifty schema --setup` to upgrade the database.
+
+----
+
+ # jifty schema --setup 
+
+ Jifty version 0.605070 up to date.
+ INFO - Generating SQL to upgrade Blog v0.0.1 database to v0.0.2
+ INFO - Upgraded to version v0.0.2
+
+ # jifty server
+ INFO - You can connect to your server at http://localhost:8888/
+
+----
+ column tags =>
+    since '0.0.3',
+    refers_to Blog::Model::TagCollection by 'entry';
+----
+ column mood => 
+    since '0.0.4',
+    default is => 'happy',
+    valid_values are     
+        { display => 'Sad',   value => 'sad' },
+        { display => 'Happy', value => 'happy' };
+----
+ column created =>
+    since '0.0.5',
+    is immutable,    
+    type is 'timestamp',
+    default is literal 'now()',
+    filters are 'Jifty::DBI::Filter::DateTime';
+
+----
+Two-step
+upgrade
+----
+ # vi etc/config.yml
+
+ (Bump the version to 0.0.5)
+
+ # jifty schema --setup 
+----
+Jifty::DBI
+caches, too!
+----
+Single Process
+{{#i|Cache::Simple::TimedExpirey}}
+----
+Multi-Host
+{{#i|Cache::Memcached}}
+----
+{{#i|Jifty::DBI::Collection}}
+----
+Joins
+----
+Paging
+{{#i|Data::Page}}
+----
+{{#tag|Actions (Controller)}}
+----
+Actions are 
+APIs to your app
+----
+Actions define
+method calls
+----
+Actions takes 
+typed arguments 
+----
+Action return
+results
+----
+Actions are not
+tied to URLs
+----
+Any action
+on any page
+----
+(Yes, we have 
+ACLs for Actions)
+----
+(But you want to
+ACL your Models,
+not your Actions)
+----
+Actions are
+generic RPC
+----
+Jifty provides
+a webform encoding
+----
+Jifty provides
+a YAML encoding
+----
+Jifty provides
+an XML encoding
+----
+(You get 
+web services
+for free)
+----
+Jifty provides three 
+actions for each of 
+your model classes
+----
+ - Create
+  (Blog::Action::CreateEntry)
+ - Update
+  (Blog::Action::UpdateEntry)
+ - Delete
+   (Blog::Action::DeleteEntry)
+----
+Just extend 
+(subclass) 
+the defaults
+----
+If we had more time, 
+we'd show you that 
+actions do this:
+----
+ # Render a template
+ for ($self->argument_names()) {
+    $self->form_field($_);
+ }
+ # User submits the form
+ $self->validate_arguments();
+ $self->take_action();
+----
+{{#tag|Jifty::Dispatcher (Kernel)}}
+(Stay for the next talk!)
+----
+Encapsulates
+View Logic
+----
+Simple
+----
+Declarative
+----
+Three 
+stages
+----
+ - before
+ - on
+ - after
+----
+Before:
+sets up your state
+----
+On: 
+shows your pages
+----
+After: 
+cleans your state
+----
+If no rule matches
+forwards to templates
+----
+{{#tag|Jifty::ClassLoader (Bootloader)}}
+----
+I hate
+scaffolding
+----
+I hate
+code generation
+----
+Ugly
+----
+Redundant
+----
+Breakable
+----
+Annoying
+----
+Redundant
+----
+Why have
+{{#i|empty}}
+classes?
+----
+Enter
+{{#i|Jifty::ClassLoader}}
+----
+Autocreates
+----
+Blog                       
+----
+Blog::Record                
+----
+Blog::Collection            
+----
+Blog::Model::EntryCollection
+Blog::Model::CommentCollection
+----
+Blog::Action::CreateEntry
+Blog::Action::UpdateEntry
+Blog::Action::DeleteEntry
+Blog::Action::CreateComment
+Blog::Action::UpdateComment
+Blog::Action::DeleteComment
+----
+Blog::Bootstrap          
+----
+Blog::Upgrade             
+----
+Blog::Dispatcher             
+----
+Blog::CurrentUser
+----
+{{#tag|Continuations (Job Control)}}
+----
+Continuations?
+In Perl?
+----
+Delimited
+Continuations
+----
+Full Continuations
+serialize the world
+----
+App state...
+----
+Your
+%ENV...
+----
+Your 
+DBI handle...
+----
+Your
+log handle...
+----
+Phase of
+the moon
+----
+Maybe we don't 
+need all that
+----
+Jifty::Continuations
+serialize your app's
+request state
+----
+That's all
+you need
+----
+Why continuations?
+----
+They make your
+life better
+----
+The web is built on
+----
+GOTO
+----
+Do you {{#i|like}}
+----
+GOTO?
+----
+Continuations 
+give you
+----
+GOSUB
+----
+Welcome to
+civilization
+----
+{{#i|(They give you other cool stuff too. But}}
+{{#i|I was a Russian major, Go find a Scheme hacker}}
+{{#i|to find out more about why continuations are}}
+{{#i|cooler than sliced bread. And why the rest}}
+{{#i|of the world has been living in ignorance for}}
+{{#i|for the last 20 years.)}}
+----
+{{#i|A brief tangent...}}
+----
+Back to 
+our Blog
+----
+Requiring
+Login
+----
+{{#i|Blog::Dispatcher}}
+----
+ ## Auth and login
+ before '*' => run {
+     if (not Jifty->web->current_user->id ) {
+        tangent '/login';
+     }
+ };
+----
+{{#i|share/web/templates/login}}
+----
+ &lt;%init>
+ my $action = Jifty->web->new_action(class => 'Login', moniker => 'loginbox' );
+ &lt;/%init>
+ &lt;&amp;|/_elements/wrapper,
+     title => 'Login' &amp;>
+ &lt;h2>Login&lt;/h2>
+  &lt;% Jifty->web->form->start %>
+    &lt;% $action->form_field('address') %>
+    &lt;% $action->form_field('password') %>
+    &lt;% Jifty->web->return( label => 'Login') %>
+  &lt;% Jifty->web->form->end %>
+ &lt;/&amp;>
+
+~ call => Jifty->web->request->continuation) %>
+~ alexmv, do we need this in form->start?
+----
+Didn't show:
+{{#i|Blog::Action::Login}}
+----
+{{#tag|Templates and Fragments (View)}}
+----
+Mason
+----
+(TT2 Coming Soon)
+----
+(Declarative Coded Views
+Coming Soon)
+----
+(In about 20 minutes)
+----
+Mason Provides
+"Components"
+----
+Server-side 
+inclusion
+----
+Not very 
+Web 2.0,
+ is it?
+----
+Welcome to
+fragments
+----
+Just like
+components...
+----
+With a
+twist
+----
+Client side
+inclusion
+----
+(for AJAX/AHAH)
+----
+Server Side
+inclusion
+----
+(remember lynx?)
+----
+(or your phone)
+----
+Don't worry
+----
+No      
+special
+setup
+----
+Not much
+special
+setup
+----
+Instead of
+----
+ &lt;&amp; /fragments/page_of_posts &amp;>
+----
+You write
+----
+ &lt;% Jifty->web->region(
+        name => "myweblog-posts",
+        path => "/fragments/page_of_posts") 
+ %>
+----
+Then
+you're
+done
+----
+{{#tag|DEVELOPMENT}}
+{{#tag|TOOLS}}
+----
+Standalone Server
+{{#i|HTTP::Server::Simple}}
+----
+{{#i|Module::Install}}
+{{img src="npw.2006/makefile_pl.png" width="552" height="364"}}
+----
+Halos
+----
+{{img src="npw.2006/halo2.png" width="468" height="665"}}
+----
+Template 
+Profiling
+----
+SQL Logging
+----
+SQL Profiling
+----
+{{img src="npw.2006/halo.png" width="428" height="391"}}
+----
+View Introspection
+----
+Online Editing
+----
+{{#i|Module::Refresh}}
+----
+Magic Profiling
+----
+Devel Mode
+----
+Online Docs
+----
+{{img src="npw.2006/online_docs.png" width="800" height="622"}}
+----
+Plugins
+----
+{{#tag|DEPLOYMENT}}
+----
+Run 
+fast
+----
+FastCGI
+(Apache or
+lightttpd)
+----
+MemCached
+----
+Fast Static
+Content Server
+----
+{{#i|CSS::Squish}}
+----
+(Same thing for 
+Javascript)
+----
+Jifty::Web::Session
+(Designed for AJAX)
+----
+I18N
+---- 
+{{#tag|THE FUTURE}}
+----
+Wiki-style
+UI Editor
+----
+Even less
+code
+----
+Easier
+Install
+----
+More
+docs
+----
+Sample
+apps
+----
+"Jifty in a Jiffy"
+movies and
+music videos
+----
+{{#tag|GET JIFTY}}
+----
+ cpan Jifty
+----
+ svn co
+   http://svn.jifty.org/svn/jifty.org
+----
+ http://jifty.org/
+----
+Getting started?
+----
+ perldoc Jifty::Manual::Tutorial
+----
+ #jifty on freenode.net
+----
+ jifty-devel at lists.jifty.org
+----
+Thanks!
+</html:textarea>
+<deck flex="1" id="deck">
+<vbox flex="1" onmousemove="Presentation.onMouseMoveOnCanvas(event);">
+<toolbox id="canvasToolbar">
+<toolbar>
+<toolbarbutton oncommand="Presentation.home()" label="|&lt;&lt;" observes="canBack"/>
+<toolbarbutton oncommand="Presentation.back()" label="&lt;" observes="canBack"/>
+<toolbarbutton oncommand="Presentation.forward()" label="&gt;" observes="canForward"/>
+<toolbarbutton oncommand="Presentation.end()" label="&gt;&gt;|" observes="canForward"/>
+<toolbarseparator/>
+<hbox align="center">
+<textbox id="current_page" size="4" oninput="if (this.value) Presentation.showPage(parseInt(this.value)-1);"/>
+<description value="/"/>
+<description id="max_page"/>
+</hbox>
+<toolbarseparator/>
+<vbox flex="2">
+<spacer flex="1"/>
+<scrollbar id="scroller" align="center" orient="horizontal" oncommand="Presentation.showPage(parseInt(event.target.getAttribute('curpos')));" onclick="Presentation.showPage(parseInt(event.target.getAttribute('curpos')));" onmousedown="Presentation.onScrollerDragStart();" onmousemove="Presentation.onScrollerDragMove();" onmouseup="Presentation.onScrollerDragDrop();"/>
+<spacer flex="1"/>
+</vbox>
+<toolbarseparator/>
+<spacer flex="1"/>
+<toolbarseparator/>
+<toolbarbutton id="toggleEva" label="Eva" type="checkbox" autoCheck="false" oncommand="Presentation.toggleEvaMode();"/>
+<toolbarseparator/>
+<toolbarbutton label="Edit" oncommand="Presentation.toggleEditMode();"/>
+<toolbarbutton oncommand="Presentation.reload();" label="Reload"/>
+</toolbar>
+</toolbox>
+<vbox flex="1" id="canvas" onclick="Presentation.onPresentationClick(event);">
+<spacer flex="1"/>
+<hbox flex="1">
+<spacer flex="1"/>
+<vbox id="content">
+</vbox>
+<spacer flex="1"/>
+</hbox>
+<spacer flex="1"/>
+</vbox>
+</vbox>
+<vbox flex="1" id="edit">
+<toolbox>
+<toolbar>
+<toolbarbutton label="New Page" oncommand="Presentation.addPage()"/>
+<spacer flex="1"/>
+<toolbarseparator/>
+<toolbarbutton label="View" oncommand="Presentation.toggleEditMode();"/>
+<toolbarbutton oncommand="Presentation.reload();" label="Reload"/>
+</toolbar>
+</toolbox>
+<textbox id="textField" flex="1" multiline="true" oninput="Presentation.onEdit()"/>
+<hbox collapsed="true">
+<iframe id="dataLoader" onload="if (window.Presentation) Presentation.onDataLoad();"/>
+</hbox>
+</vbox>
+</deck>
+<broadcasterset>
+<broadcaster id="canBack"/>
+<broadcaster id="canForward"/>
+</broadcasterset>
+<commandset>
+<command id="cmd_forward" oncommand="if (Presentation.isPresentationMode) Presentation.forward();"/>
+<command id="cmd_back" oncommand="if (Presentation.isPresentationMode) Presentation.back();"/>
+<command id="cmd_home" oncommand="if (Presentation.isPresentationMode) Presentation.home();"/>
+<command id="cmd_end" oncommand="if (Presentation.isPresentationMode) Presentation.end();"/>
+</commandset>
+<keyset>
+<key key=" "      command="cmd_forward"/>
+<key keycode="VK_ENTER"      command="cmd_forward"/>
+<key keycode="VK_RETURN"     command="cmd_forward"/>
+<key keycode="VK_PAGE_DOWN"  command="cmd_forward"/>
+<key keycode="VK_RIGHT"      command="cmd_forward"/>
+<key keycode="VK_DOWN"       command="cmd_forward"/>
+<!--key keycode="VK_BACK_SPACE" command="cmd_back"/-->
+<key keycode="VK_UP"    command="cmd_back"/>
+<key keycode="VK_PAGE_UP"    command="cmd_back"/>
+<!--
+<key keycode="VK_BACK_UP"    command="cmd_back"/>-->
+<!--
+<key keycode="VK_BACK_LEFT"  command="cmd_back"/>-->
+<key keycode="VK_HOME"       command="cmd_home"/>
+<!--
+<key keycode="VK_END"        command="cmd_end"/>-->
+<key key="n" modifiers="accel" oncommand="Presentation.addPage();"/>
+<key key="r" modifiers="accel" oncommand="window.location.reload();"/>
+<key key="e" modifiers="accel" oncommand="Presentation.toggleEditMode();"/>
+<key key="a" modifiers="accel" oncommand="Presentation.toggleEvaMode();"/>
+</keyset>
+<script src="takahashi.js" type="application/x-javascript" />
+</page>
+
+<!-- ***** BEGIN LICENSE BLOCK *****
+   - Version: MPL 1.1
+   -
+   - The contents of this file are subject to the Mozilla Public License Version
+   - 1.1 (the "License"); you may not use this file except in compliance with
+   - the License. You may obtain a copy of the License at
+   - http://www.mozilla.org/MPL/
+   -
+   - Software distributed under the License is distributed on an "AS IS" basis,
+   - WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+   - for the specific language governing rights and limitations under the
+   - License.
+   -
+   - The Original Code is the Takahashi-Method-based Presentation Tool in XUL.
+   -
+   - The Initial Developer of the Original Code is SHIMODA Hiroshi.
+   - Portions created by the Initial Developer are Copyright (C) 2005
+   - the Initial Developer. All Rights Reserved.
+   -
+   - Contributor(s): SHIMODA Hiroshi <piro at p.club.ne.jp>
+   -
+   - ***** END LICENSE BLOCK ***** -->
+
+

Modified: jifty/branches/moose/lib/Jifty.pm
==============================================================================
--- jifty/branches/moose/lib/Jifty.pm	(original)
+++ jifty/branches/moose/lib/Jifty.pm	Tue Jul 25 01:28:01 2006
@@ -5,7 +5,7 @@
 use encoding 'utf8';
 # Work around the fact that Time::Local caches thing on first require
 BEGIN { local $ENV{'TZ'} = "GMT";  require Time::Local;}
-$Jifty::VERSION = '0.60707';
+$Jifty::VERSION = '0.60722';
 
 =head1 NAME
 
@@ -262,7 +262,10 @@
         or __PACKAGE__->config->framework('SkipDatabase')
         or not __PACKAGE__->config->framework('Database') )
     {
-        __PACKAGE__->handle( Jifty::Handle->new() );
+
+        my $handle_class = (Jifty->config->framework('ApplicationClass') . "::Handle");
+        Jifty::Util->require( $handle_class );
+        __PACKAGE__->handle( $handle_class->new );
         __PACKAGE__->handle->connect();
         __PACKAGE__->handle->check_schema_version();
     }

Modified: jifty/branches/moose/lib/Jifty/ClassLoader.pm
==============================================================================
--- jifty/branches/moose/lib/Jifty/ClassLoader.pm	(original)
+++ jifty/branches/moose/lib/Jifty/ClassLoader.pm	Tue Jul 25 01:28:01 2006
@@ -65,6 +65,10 @@
 
 An empty class that descends from L<Jifty::Dispatcher>.
 
+=item I<Application>::Handle
+
+An empty class that descends from L<Jifty::Handle> is created.
+
 =item I<Application>::Bootstrap
 
 An empty class that descends from L<Jifty::Bootstrap>.
@@ -118,7 +122,7 @@
 #                . "use base qw/Jifty::Action/; sub _autogenerated { 1 };\n"
 #                . "1;" );
 #    }
-    elsif ( $module =~ m!^(?:$base)::(Record|Collection|Notification|Dispatcher|Bootstrap|Upgrade)$! ) {
+    elsif ( $module =~ m!^(?:$base)::(Record|Collection|Notification|Dispatcher|Bootstrap|Upgrade|Handle)$! ) {
         return $self->return_class(
                   "use warnings; use strict; package $module;\n"
                 . "use base qw/Jifty::$1/; sub _autogenerated { 1 };\n"

Modified: jifty/branches/moose/lib/Jifty/Dispatcher.pm
==============================================================================
--- jifty/branches/moose/lib/Jifty/Dispatcher.pm	(original)
+++ jifty/branches/moose/lib/Jifty/Dispatcher.pm	Tue Jul 25 01:28:01 2006
@@ -71,8 +71,8 @@
 directory in a default Jifty application.  They're also the right way
 to enable L<Jifty::LetMe> actions.
 
-You can entirely stop processing with the C<redirect> and C<abort>
-directives, though L</after> rules will still run.
+You can entirely stop processing with the C<redirect>, C<tangent> and
+C<abort> directives, though L</after> rules will still run.
 
 =item on
 
@@ -82,15 +82,15 @@
 templates.
 
 Dispatcher directives are evaluated in order until we get to either a
-C<show>, C<redirect> or an C<abort>.
+C<show>, C<redirect>, C<tangent> or C<abort>.
 
 =item after
 
 L<after> rules let you clean up after rendering your page. Delete your
 cache files, write your transaction logs, whatever.
 
-At this point, it's too late to C<show>, C<redirect> or C<abort> page
-display.
+At this point, it's too late to C<show>, C<redirect>, C<tangent> or C<abort>
+page display.
 
 =back
 
@@ -241,6 +241,10 @@
 
 Redirect to another URI.
 
+=head2 tangent $uri
+
+Take a continuation here, and tangent to another URI.
+
 =head2 plugin
 
 See L</Plugins and rule ordering>, above.
@@ -252,7 +256,7 @@
 
     before on after
 
-    show dispatch abort redirect
+    show dispatch abort redirect tangent
 
     GET POST PUT HEAD DELETE OPTIONS
 
@@ -278,6 +282,7 @@
 sub show (;$@)    { _ret @_ }    # render a page
 sub dispatch ($@) { _ret @_ }    # run dispatch again with another URI
 sub redirect ($@) { _ret @_ }    # web redirect
+sub tangent ($@)  { _ret @_ }    # web tangent
 sub abort (;$@)   { _ret @_ }    # abort request
 sub default ($$@) { _ret @_ }    # set parameter if it's not yet set
 sub set ($$@)     { _ret @_ }    # set parameter
@@ -673,7 +678,7 @@
 
 This method is called by the dispatcher internally. You shouldn't need to.
 
-Redirect the user to the URL provded in the mandatory PATH argument.
+Redirect the user to the URL provided in the mandatory PATH argument.
 
 =cut
 
@@ -683,6 +688,21 @@
     Jifty->web->redirect($path);
 }
 
+=head2 _do_tangent PATH
+
+This method is called by the dispatcher internally. You shouldn't need to.
+
+Take a tangent to the URL provided in the mandatory PATH argument.
+(See L<Jifty::Manual::Continuation> for more about tangents.)
+
+=cut
+
+sub _do_tangent {
+    my ( $self, $path ) = @_;
+    $self->log->debug("Taking a tangent to $path");
+    Jifty->web->tangent(url => $path);
+}
+
 =head2 _do_abort 
 
 This method is called by the dispatcher internally. You shouldn't need to.
@@ -722,26 +742,10 @@
     $path = "$self->{cwd}/$path" unless $path =~ m{^/};
 
     # When we're requesting a directory, go looking for the index.html
-    if ( $path =~ m{/$} and $self->template_exists( $path . "/index.html" ) )
-    {
-
+    if ( $self->template_exists( $path . "/index.html" ) ) {
         $path .= "/index.html";
     }
 
-    # Redirect to directory (and then index) if they requested
-    # the directory itself
-
-    # XXX TODO, we should search all component roots
-
-    if ($path !~ m{/$}
-        and -d Jifty::Util->absolute_path(
-            Jifty->config->framework('Web')->{'TemplateRoot'} . $path
-        )
-        )
-    {
-        $self->_do_show( $path . "/" );
-    }
-
     my $abs_template_path = Jifty::Util->absolute_path(
         Jifty->config->framework('Web')->{'TemplateRoot'} . $path );
     my $abs_root_path = Jifty::Util->absolute_path(
@@ -995,6 +999,14 @@
 
 =item *
 
+Two stars (C<**>) can match zero or more characters, including slash:
+
+    /**/bar
+    /foo/**
+    **
+
+=item *
+
 Consecutive C<?> marks are captured together:
 
     /foo???bar      # One capture for ???
@@ -1022,6 +1034,10 @@
         (?= / | \z)  # lookahead for slash or end-of-string
     }{([^/]+)}gx;
     $glob =~ s{
+        # Two stars can match zero or more characters, including slash.
+        \\ \* \\ \*
+    }{(.*)}gx;
+    $glob =~ s{
         # All other stars can match zero or more non-slash character.
         \\ \*
     }{([^/]*)}gx;

Modified: jifty/branches/moose/lib/Jifty/Manual/Continuations.pod
==============================================================================
--- jifty/branches/moose/lib/Jifty/Manual/Continuations.pod	(original)
+++ jifty/branches/moose/lib/Jifty/Manual/Continuations.pod	Tue Jul 25 01:28:01 2006
@@ -147,8 +147,8 @@
 protection in C<before> blocks:
 
     before '/protected' => sub {
-        Jifty->web->tangent( url => '/login' )
-          unless Jifty->web->current_user->id;
+        # shorthand for: Jifty->web->tangent( url => '/login' )
+        tangent('/login') unless Jifty->web->current_user->id;
     };
 
 And in the C</login> template:

Modified: jifty/branches/moose/lib/Jifty/Script/Schema.pm
==============================================================================
--- jifty/branches/moose/lib/Jifty/Script/Schema.pm	(original)
+++ jifty/branches/moose/lib/Jifty/Script/Schema.pm	Tue Jul 25 01:28:01 2006
@@ -453,6 +453,8 @@
         if ( $self->{'print'} ) {
             print "DROP DATABASE $database;\n";
         } elsif ( $driver eq 'SQLite' ) {
+            # Win32 complains when you try to unlink open DB
+            $handle->disconnect if $^O eq 'MSWin32';
             unlink($database);
         } else {
             $handle->simple_query("DROP DATABASE $database");

Modified: jifty/branches/moose/lib/Jifty/Web.pm
==============================================================================
--- jifty/branches/moose/lib/Jifty/Web.pm	(original)
+++ jifty/branches/moose/lib/Jifty/Web.pm	Tue Jul 25 01:28:01 2006
@@ -147,7 +147,7 @@
       $uri->path($path);
     }
     
-    return $uri->canonical;
+    return $uri->canonical->as_string;
 }
 
 =head3 serial 
@@ -731,13 +731,16 @@
 
 =head3 return PARAMHASH
 
-Generates and renders a L<Jifty::Web::Form::Clickable> using the given
-I<PARAMHASH>, additionally defaults to calling the current
-continuation.
+If called in non-void context, creates and renders a
+L<Jifty::Web::Form::Clickable> using the given I<PARAMHASH>,
+additionally defaults to calling the current continuation.
 
 Takes an additional argument, C<to>, which can specify a default path
 to return to if there is no current continuation.
 
+In void context, does a redirect to the URL that the
+L<Jifty::Web::Form::Clickable> object generates.
+
 =cut
 
 sub return {
@@ -745,11 +748,22 @@
     my %args = (@_);
     my $continuation = Jifty->web->request->continuation;
     if (not $continuation and $args{to}) {
-        $continuation = Jifty::Continuation->new(request => Jifty::Request->new(path => $args{to}));
+        $continuation = Jifty::Continuation->new(
+            request => Jifty::Request->new(path => $args{to})
+        );
     }
     delete $args{to};
 
-    $self->link( call => $continuation, %args );
+    my $clickable = Jifty::Web::Form::Clickable->new(
+        call => $continuation, %args
+    );
+
+    if ( defined wantarray ) {
+        return $clickable->generate;
+    }
+    else {
+        $self->redirect($clickable);
+    }
 }
 
 =head3 render_messages [MONIKER]

Modified: jifty/branches/moose/share/web/static/js/calendar.js
==============================================================================
--- jifty/branches/moose/share/web/static/js/calendar.js	(original)
+++ jifty/branches/moose/share/web/static/js/calendar.js	Tue Jul 25 01:28:01 2006
@@ -8,7 +8,8 @@
         
         if ( !input ) return false;
 
-        DOM.Events.addListener( input, "click", Jifty.Calendar.toggleCalendar );
+        DOM.Events.addListener( input, "focus", Jifty.Calendar.toggleCalendar );
+        DOM.Events.addListener( input, "blur", Jifty.Calendar.doBlur );
         return true;
     },
 
@@ -91,6 +92,24 @@
             
             Jifty.Calendar.openCalendar = "";
         }
+    },
+
+    _doneBlurOnce: false,
+    _blurredCalendar: '',
+    doBlur: function(ev) {
+        if ( Jifty.Calendar.openCalendar && !Jifty.Calendar._doneBlurOnce ) {
+            Jifty.Calendar._doneBlurOnce    = true;
+            Jifty.Calendar._blurredCalendar = Jifty.Calendar.openCalendar;
+            setTimeout( Jifty.Calendar.doBlur, 200 );
+            return;
+        }
+        else if ( Jifty.Calendar._doneBlurOnce
+                  && Jifty.Calendar._blurredCalendar == Jifty.Calendar.openCalendar )
+        {
+            Jifty.Calendar.hideOpenCalendar();
+        }
+        Jifty.Calendar._doneBlurOnce    = false;
+        Jifty.Calendar._blurredCalendar = '';
     }
 };
 

Modified: jifty/branches/moose/share/web/static/js/jifty.js
==============================================================================
--- jifty/branches/moose/share/web/static/js/jifty.js	(original)
+++ jifty/branches/moose/share/web/static/js/jifty.js	Tue Jul 25 01:28:01 2006
@@ -38,38 +38,38 @@
 
     // Returns an Array of all fields in this Action
     fields: function() {
-	if(!this.cached_fields) {
-	    var elements = new Array;
-	    var possible = Form.getElements(this.form);
-	    // Also pull from extra query parameters
-	    for (var i = 0; i < this.extras.length; i++)
-		possible.push(this.extras[i]);
-
-	    for (var i = 0; i < possible.length; i++) {
-		if (Form.Element.getMoniker(possible[i]) == this.moniker)
-		    elements.push(possible[i]);
-	    }
-	    this.cached_fields = elements;
-	}
+        if(!this.cached_fields) {
+            var elements = new Array;
+            var possible = Form.getElements(this.form);
+            // Also pull from extra query parameters
+            for (var i = 0; i < this.extras.length; i++)
+                possible.push(this.extras[i]);
+
+            for (var i = 0; i < possible.length; i++) {
+                if (Form.Element.getMoniker(possible[i]) == this.moniker)
+                    elements.push(possible[i]);
+            }
+            this.cached_fields = elements;
+        }
         return this.cached_fields;
     },
 
     buttons: function() {
-	var elements = new Array();
-	var possible = Form.getElements(this.form);
-	for(var i = 0; i < possible.length; i++) {
-	    if(possible[i].nodeName == 'INPUT' && possible[i].getAttribute("type") == 'submit') {
-		actions = Form.Element.buttonActions(possible[i]);
-		//If the button has no actions explicitly associated
-		//with it, it's associated with all the actions in the
-		//form
-		if(   actions.length == 0
-		   || actions.indexOf(this.moniker) >= 0) {
-		    elements.push(possible[i]);
-		}
-	    }
-	}
-	return elements;
+        var elements = new Array();
+        var possible = Form.getElements(this.form);
+        for(var i = 0; i < possible.length; i++) {
+            if(possible[i].nodeName == 'INPUT' && possible[i].getAttribute("type") == 'submit') {
+                actions = Form.Element.buttonActions(possible[i]);
+                //If the button has no actions explicitly associated
+                //with it, it's associated with all the actions in the
+                //form
+                if(   actions.length == 0
+                   || actions.indexOf(this.moniker) >= 0) {
+                    elements.push(possible[i]);
+                }
+            }
+        }
+        return elements;
     },
 
     getField: function(name) {
@@ -114,15 +114,16 @@
             var f = fields[i];
 
             if (   (Form.Element.getType(f) != "registration")
-		&& (Form.Element.getValue(f) != null)
-                && (!Jifty.Placeholder.hasPlaceholder(f))) {
+                && (Form.Element.getValue(f) != null)
+                && (!Jifty.Placeholder.hasPlaceholder(f)))
+            {
                 if (! a['fields'][Form.Element.getField(f)])
                     a['fields'][Form.Element.getField(f)] = {};
-		var field = Form.Element.getField(f);
-		var type = Form.Element.getType(f);
-		    
+                var field = Form.Element.getField(f);
+                var type = Form.Element.getType(f);
+                    
                 a['fields'][field][type] = this._mergeValues(a['fields'][field][type],
-							     Form.Element.getValue(f));
+                                                             Form.Element.getValue(f));
             }
         }
 
@@ -130,14 +131,14 @@
     },
 
     _mergeValues: function() {
-	var oldval = arguments[0];
-	var newval = arguments[1];
-	if(!oldval) return newval;
-	if(oldval.constructor != Array) {
-	    oldval = [oldval];
-	}
-	oldval.push(newval);
-	return oldval;
+        var oldval = arguments[0];
+        var newval = arguments[1];
+        if(!oldval) return newval;
+        if(oldval.constructor != Array) {
+            oldval = [oldval];
+        }
+        oldval.push(newval);
+        return oldval;
     },
 
     // Validate the action
@@ -351,12 +352,12 @@
 
     buttonActions: function(element) {
         element = $(element);
-	var actions = Form.Element.buttonArguments(element)['J:ACTIONS'];
-	if(actions) {
-	    return actions.split(",");
-	} else {
-	    return new Array();
-	}
+        var actions = Form.Element.buttonArguments(element)['J:ACTIONS'];
+        if(actions) {
+            return actions.split(",");
+        } else {
+            return new Array();
+        }
     },  
 
     buttonFormElements: function(element) {
@@ -384,7 +385,7 @@
         elt.onblur = function () {
             Form.Element.validate(this);
         }
-	elt = null;	//Prevent IE from leaking memory
+        elt = null;        //Prevent IE from leaking memory
     },
     'input.date': function(e) {
         if ( !Element.hasClassName( e, 'has_calendar_link' ) ) {
@@ -515,6 +516,10 @@
 //     - 'mode' is one of 'Replace', or the name of a Prototype Insertion
 //     - 'effect' is the name of a Prototype Effect
 function update() {
+    // If we don't have XMLHttpRequest, bail and fallback on full-page
+    // loads
+    if(!Ajax.getTransport()) return true;
+    
     show_wait_message();
     var named_args = arguments[0];
     var trigger    = arguments[1];
@@ -708,7 +713,7 @@
         
         alert("Unable to connect to server.\n\nTry again in a few minutes.");
 
-	Jifty.failedRequest = transport;
+        Jifty.failedRequest = transport;
 
         var keys = request["actions"].keys();
         for ( var i = 0; i < keys.length; i++ ) {
@@ -849,8 +854,8 @@
         beforeHide: this.beforeHide,
         frequency: 0.1,
         onShow: this.onShow,
-	onHide: this.onHide,
-	afterUpdateElement: this.afterUpdate
+        onHide: this.onHide,
+        afterUpdateElement: this.afterUpdate
     });
   },
 
@@ -945,7 +950,11 @@
   },
 
   onBlur: function() {
-     if(this.element.value == '') {
+     /* On browser back/forward, the placeholder text will be remembered
+        for the field, so we want to add the class if the value is the same
+        as the placeholder text.  This does have the effect of making it
+        impossible to submit a field with the same value as the placeholder. */
+     if (this.element.value == '' || this.element.value == this.text) {
        Element.addClassName(this.element, 'placeholder');
        this.element.value = this.text;
      }

Modified: jifty/branches/moose/share/web/templates/__jifty/admin/fragments/list/new_item
==============================================================================
--- jifty/branches/moose/share/web/templates/__jifty/admin/fragments/list/new_item	(original)
+++ jifty/branches/moose/share/web/templates/__jifty/admin/fragments/list/new_item	Tue Jul 25 01:28:01 2006
@@ -19,7 +19,7 @@
                  { submit => $create },
                  { refresh_self => 1 },
                  {
-                   element => $region->parent->get_element('dl.list'),
+                   element => $region->parent->get_element('div.list'),
                    append => '/__jifty/admin/fragments/list/view',
                    args   => { 
                               object_type => $object_type,

Modified: jifty/branches/moose/share/web/templates/__jifty/admin/index.html
==============================================================================
--- jifty/branches/moose/share/web/templates/__jifty/admin/index.html	(original)
+++ jifty/branches/moose/share/web/templates/__jifty/admin/index.html	Tue Jul 25 01:28:01 2006
@@ -50,7 +50,7 @@
 <ul>
 % foreach my $action (Jifty->api->actions) {
 % Jifty::Util->require($action);
-% next if ( $action->autogenerated);
+% next if ( $action->can('autogenerated') and $action->autogenerated);
 <li><% Jifty->web->link( url => '/__jifty/admin/action/'.$action, label => $action) %>
 % }
 </ul>

Modified: jifty/branches/moose/share/web/templates/__jifty/css/dhandler
==============================================================================
--- jifty/branches/moose/share/web/templates/__jifty/css/dhandler	(original)
+++ jifty/branches/moose/share/web/templates/__jifty/css/dhandler	Tue Jul 25 01:28:01 2006
@@ -20,6 +20,20 @@
 $r->content_type("text/css");
 $r->header_out( 'Expires' => HTTP::Date::time2str(time + 31536000) );
 
-Jifty->web->out( Jifty->web->cached_css );
+# XXX TODO: If we start caching the squished CSS in a file somewhere, we
+# can have the static handler serve it, which would take care of gzipping
+# for us.
+use Compress::Zlib qw();
+
+if ( Jifty::View::Static::Handler->client_accepts_gzipped_content ) {
+    Jifty->log->debug("Sending gzipped squished CSS");
+    $r->header_out( "Content-Encoding" => "gzip" );
+    binmode STDOUT;
+    print Compress::Zlib::memGzip( Jifty->web->cached_css );
+}
+else {
+    Jifty->log->debug("Sending squished CSS");
+    print Jifty->web->cached_css;
+}
 return;
 </%init>

Modified: jifty/branches/moose/share/web/templates/__jifty/js/dhandler
==============================================================================
--- jifty/branches/moose/share/web/templates/__jifty/js/dhandler	(original)
+++ jifty/branches/moose/share/web/templates/__jifty/js/dhandler	Tue Jul 25 01:28:01 2006
@@ -20,6 +20,20 @@
 $r->content_type("application/x-javascript");
 $r->header_out( 'Expires' => HTTP::Date::time2str(time + 31536000) );
 
-Jifty->web->out( Jifty->web->cached_javascript );
+# XXX TODO: If we start caching the squished JS in a file somewhere, we
+# can have the static handler serve it, which would take care of gzipping
+# for us.
+use Compress::Zlib qw();
+
+if ( Jifty::View::Static::Handler->client_accepts_gzipped_content ) {
+    Jifty->log->debug("Sending gzipped squished JS");
+    $r->header_out( "Content-Encoding" => "gzip" );
+    binmode STDOUT;
+    print Compress::Zlib::memGzip( Jifty->web->cached_javascript );
+}
+else {
+    Jifty->log->debug("Sending squished JS");
+    print Jifty->web->cached_javascript;
+}
 return;
 </%init>


More information about the Jifty-commit mailing list