[Jifty-commit] r4129 - in jifty/branches/virtual-models: . lib lib/Jifty lib/Jifty/Module lib/Jifty/Plugin lib/Jifty/Plugin/REST lib/Jifty/View/Declare lib/Jifty/Web lib/Jifty/Web/Form/Field share/web/static/js t/TestApp/lib/TestApp/Model t/TestApp/t

jifty-commit at lists.jifty.org jifty-commit at lists.jifty.org
Tue Sep 18 11:48:37 EDT 2007


Author: sterling
Date: Tue Sep 18 11:48:33 2007
New Revision: 4129

Modified:
   jifty/branches/virtual-models/   (props changed)
   jifty/branches/virtual-models/lib/Jifty.pm
   jifty/branches/virtual-models/lib/Jifty/ClassLoader.pm
   jifty/branches/virtual-models/lib/Jifty/DateTime.pm
   jifty/branches/virtual-models/lib/Jifty/Everything.pm
   jifty/branches/virtual-models/lib/Jifty/Module/Pluggable.pm
   jifty/branches/virtual-models/lib/Jifty/Plugin/Feedback.pm
   jifty/branches/virtual-models/lib/Jifty/Plugin/REST/Dispatcher.pm
   jifty/branches/virtual-models/lib/Jifty/Record.pm
   jifty/branches/virtual-models/lib/Jifty/Script.pm
   jifty/branches/virtual-models/lib/Jifty/Test.pm
   jifty/branches/virtual-models/lib/Jifty/Util.pm
   jifty/branches/virtual-models/lib/Jifty/View/Declare/Handler.pm
   jifty/branches/virtual-models/lib/Jifty/View/Declare/Page.pm
   jifty/branches/virtual-models/lib/Jifty/Web/Form/Element.pm
   jifty/branches/virtual-models/lib/Jifty/Web/Form/Field.pm
   jifty/branches/virtual-models/lib/Jifty/Web/Form/Field/Button.pm
   jifty/branches/virtual-models/lib/Jifty/Web/Form/Field/Checkbox.pm
   jifty/branches/virtual-models/lib/Jifty/Web/Form/Field/Collection.pm
   jifty/branches/virtual-models/lib/Jifty/Web/Form/Field/Combobox.pm
   jifty/branches/virtual-models/lib/Jifty/Web/Form/Field/Radio.pm
   jifty/branches/virtual-models/lib/Jifty/Web/Form/Field/ResetButton.pm
   jifty/branches/virtual-models/lib/Jifty/Web/Form/Field/Select.pm
   jifty/branches/virtual-models/lib/Jifty/Web/Form/Field/Textarea.pm
   jifty/branches/virtual-models/lib/Jifty/Web/PageRegion.pm
   jifty/branches/virtual-models/lib/Jifty/Web/Session.pm
   jifty/branches/virtual-models/share/web/static/js/jifty.js
   jifty/branches/virtual-models/t/TestApp/lib/TestApp/Model/User.pm
   jifty/branches/virtual-models/t/TestApp/t/11-current_user.t

Log:
 r12178 at dynpc145:  andrew | 2007-09-18 10:47:23 -0500
 Merge down from trunk.
  r12066 at dynpc145:  andrew | 2007-09-13 11:03:51 -0500
  Clean up the masonXXXXXXXXXX temp directory after each test run.
  r12105 at dynpc145:  andrew | 2007-09-13 22:14:55 -0500
  Make find_plugins() sensitive to wantarray.
  r12109 at dynpc145:  andrew | 2007-09-13 22:18:45 -0500
   r12106 at riddle (orig r4110):  clkao | 2007-09-13 15:24:14 -0500
   Handle region redirect with continuation return (for spa).
   
   r12107 at riddle (orig r4111):  clkao | 2007-09-13 15:33:15 -0500
   Remove debug info.
   r12108 at riddle (orig r4112):  clkao | 2007-09-13 17:40:15 -0500
   Patch by Alex to make sp_submit_form to be happier with J:V vars.
  
  r12177 at dynpc145:  andrew | 2007-09-18 10:36:48 -0500
   r12163 at dynpc145 (orig r4115):  sartak | 2007-09-14 16:36:16 -0500
    r42673 at onn:  sartak | 2007-09-14 17:34:32 -0400
    The REST dispatcher should warn $@ if an error occurs
   
   r12164 at dynpc145 (orig r4116):  sartak | 2007-09-15 02:00:08 -0500
    r42711 at onn:  sartak | 2007-09-15 02:59:55 -0400
    Fix mismerge..
   
   r12165 at dynpc145 (orig r4117):  clkao | 2007-09-15 08:51:12 -0500
   When replacing a region, use the technique described in
   
   http://blog.stevenlevithan.com/archives/faster-than-innerhtml
   
   to improve performance.  
   
   r12166 at dynpc145 (orig r4118):  clkao | 2007-09-16 12:57:14 -0500
   Revert r4117 as the element readiness state is not compatible with what it was.
   r12168 at dynpc145 (orig r4120):  sunnavy | 2007-09-17 08:05:10 -0500
   a tiny change and typo fix
   r12171 at dynpc145 (orig r4123):  sartak | 2007-09-17 11:56:33 -0500
    r42750 at onn:  sartak | 2007-09-17 12:56:10 -0400
    Add some more tests for Jifty::DateTime in the TestApp
   
   r12172 at dynpc145 (orig r4124):  sartak | 2007-09-17 13:27:25 -0500
    r42755 at onn:  sartak | 2007-09-17 14:26:59 -0400
    Add support for "title" attribute on elements, which shows tooltips
   
   r12174 at dynpc145 (orig r4126):  jesse | 2007-09-17 17:15:33 -0500
    r67334 at 000-251-384:  jesse | 2007-09-17 18:15:06 -0400
    * Don't do weird things with loading model subclasses
   
   r12175 at dynpc145 (orig r4127):  jesse | 2007-09-17 17:15:41 -0500
    r67335 at 000-251-384:  jesse | 2007-09-17 18:15:15 -0400
    * Class::Accessor::Fast cleanups
   
   r12176 at dynpc145 (orig r4128):  jesse | 2007-09-17 21:23:05 -0500
    r67338 at pinglin:  jesse | 2007-09-17 22:19:33 -0400
    * Use much less UNIVERSAL::require (to shave a second or two off start times)
   
  
 


Modified: jifty/branches/virtual-models/lib/Jifty.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty.pm	Tue Sep 18 11:48:33 2007
@@ -412,7 +412,9 @@
 sub find_plugin {
     my $self = shift;
     my $name = shift;
-    return grep { $_->isa($name) } Jifty->plugins;
+
+    my @plugins = grep { $_->isa($name) } Jifty->plugins;
+    return wantarray ? @plugins : $plugins[0];
 }
 
 =head2 class_loader

Modified: jifty/branches/virtual-models/lib/Jifty/ClassLoader.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/ClassLoader.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/ClassLoader.pm	Tue Sep 18 11:48:33 2007
@@ -330,7 +330,7 @@
     
     # Construct the list of models for the application for later reference
     my %models;
-    $models{$_} = 1 for grep {/^($base)::Model::(.*)$/ and not /Collection$/} $self->plugins;
+    $models{$_} = 1 for grep {/^($base)::Model::(.*)$/ and not /Collection(?:$||\:\:)/} $self->plugins;
     $self->models(sort keys %models);
 
     # Load all those models and model-related actions, notifications, and events
@@ -350,9 +350,9 @@
     push( @$models, $full ) unless grep { $_ eq $full } @$models;
 
     my $base = $self->{base};
-    my ($short) = $full =~ /::Model::(.*)/;
-    Jifty::Util->require( $full . "Collection" );
-    Jifty::Util->require( $base . "::Action::" . $_ . $short )
+    my($short) = $full =~ /::Model::(\w*)/;
+    Jifty::Util->require($full . "Collection");
+    Jifty::Util->require($base . "::Action::" . $_ . $short)
         for qw/Create Update Delete Search/;
 
 }

Modified: jifty/branches/virtual-models/lib/Jifty/DateTime.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/DateTime.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/DateTime.pm	Tue Sep 18 11:48:33 2007
@@ -57,15 +57,19 @@
 
     # XXX What if they really mean midnight offset by time zone?
 
+    #     this behavior is (sadly!) consistent with
+    #     DateTime->truncate(to => 'day') and Jifty::DateTime::new_from_string
+    #     suggestions for improvement are very welcome
+
     # Do not bother with time zones unless time is used, we assume that
     # 00:00:00 implies that no time is used
     if ($self->hour || $self->minute || $self->second) {
 
         # Unless the user has explicitly said they want a floating time,
-        # we want to convert to the end-user's timezone.  This is
-        # complicated by the fact that DateTime auto-appends
+        # we want to convert to the end-user's timezone. If we ignore
+        # $args{time_zone}, then DateTime::from_epoch will get very confused
         if (!$args{time_zone} and my $tz = $self->current_user_has_timezone) {
-            $self->set_time_zone("UTC");
+            $self->set_time_zone("UTC"); # XXX: why are we doing this?
             $self->set_time_zone( $tz );
         }
     }
@@ -78,6 +82,30 @@
     return $self;
 }
 
+=head2 now ARGS
+
+See L<DateTime/now>. If a time_zone argument is passed in, then this method
+is effectively a no-op.
+
+OTHERWISE this will always set this object's timezone to the current user's
+timezone (or UTC if that's not available). Without this, DateTime's C<now> will
+set the timezone to UTC always (by passing C<< time_zone => 'UTC' >> to
+C<Jifty::DateTime::new>. We want Jifty::DateTime to always reflect the current
+user's timezone (unless otherwise requested, of course).
+
+=cut
+
+sub now {
+    my $class = shift;
+    my %args  = @_;
+    my $self  = $class->SUPER::now(%args);
+
+    $self->set_time_zone($self->current_user_has_timezone || 'UTC')
+        unless $args{time_zone};
+
+    return $self;
+}
+
 =head2 current_user_has_timezone
 
 Return timezone if the current user has one. This is determined by checking to see if the current user has a user object. If it has a user object, then it checks to see if that user object has a C<time_zone> method and uses that to determine the value.
@@ -166,13 +194,13 @@
     if ($ymd eq $rel->ymd) {
         return "today";
     }
-    
+
     # Is it yesterday?
     my $yesterday = $rel->clone->subtract(days => 1);
     if ($ymd eq $yesterday->ymd) {
         return "yesterday";
     }
-    
+
     # Is it tomorrow?
     my $tomorrow = $rel->clone->add(days => 1);
     if ($ymd eq $tomorrow->ymd) {

Modified: jifty/branches/virtual-models/lib/Jifty/Everything.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Everything.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/Everything.pm	Tue Sep 18 11:48:33 2007
@@ -11,7 +11,7 @@
 
 use Cwd ();
 BEGIN {
-    # Cwd::cwd() insists doing `pwd`, which is a few hundres of shell
+    # Cwd::cwd() insists doing `pwd`, which is a few hundreds of shell
     # outs just in the BEGIN time for Module::Pluggable to load things.
     if ($^O ne 'MSWin32') {
         require POSIX;

Modified: jifty/branches/virtual-models/lib/Jifty/Module/Pluggable.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Module/Pluggable.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/Module/Pluggable.pm	Tue Sep 18 11:48:33 2007
@@ -52,18 +52,9 @@
     # On success, it expects you to return undef.
 
     return if $module =~/\.#/;
-
-    local $UNIVERSAL::require::ERROR;
-
-    no warnings; # This is lexical and turns off exactly one warning below -- "Can't locate package in @ISA".
-                 # (for some reason, "no warnings 'syntax'" does not work as advertised here.)
-                 # Note that it does _not_ turn off warnings triggered in the $module itself.
-    if ((not $module->require()) &&  ( $UNIVERSAL::require::ERROR !~ /^Can't locate/)) {
-        die $UNIVERSAL::require::ERROR;
-    }
-         # We'd prefer to use Jifty::Util->require() here, but it spews crazy warnings
-
-    return $UNIVERSAL::require::ERROR;
+    eval { Jifty::Util->require($module); };
+    my $err = $@;
+    return $err;
 }
 
 1;

Modified: jifty/branches/virtual-models/lib/Jifty/Plugin/Feedback.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Plugin/Feedback.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/Plugin/Feedback.pm	Tue Sep 18 11:48:33 2007
@@ -2,7 +2,7 @@
 use warnings;
 
 package Jifty::Plugin::Feedback;
-use base qw/Jifty::Plugin Class::Accessor/;
+use base qw/Jifty::Plugin Class::Accessor::Fast/;
 
 # Your plugin goes here.  If takes any configuration or arguments, you
 # probably want to override L<Jifty::Plugin/init>.

Modified: jifty/branches/virtual-models/lib/Jifty/Plugin/REST/Dispatcher.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Plugin/REST/Dispatcher.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/Plugin/REST/Dispatcher.pm	Tue Sep 18 11:48:33 2007
@@ -693,6 +693,7 @@
     eval { $action->run };
 
     if ($@) {
+        Jifty->log->warn($@);
         abort(500);
     }
 

Modified: jifty/branches/virtual-models/lib/Jifty/Record.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Record.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/Record.pm	Tue Sep 18 11:48:33 2007
@@ -18,7 +18,8 @@
 
 =cut
 
-use base qw(Jifty::Object Jifty::DBI::Record Class::Accessor::Fast);
+use base qw( Jifty::Object Jifty::DBI::Record);
+
 __PACKAGE__->mk_accessors('_is_readable');
 use Jifty::DBI::SchemaGenerator;
 

Modified: jifty/branches/virtual-models/lib/Jifty/Script.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Script.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/Script.pm	Tue Sep 18 11:48:33 2007
@@ -24,8 +24,7 @@
 sub prepare {
     my $self = shift;
     if ($ARGV[0] =~ /--?h(elp?)/i) {
-        shift @ARGV; #discard the --help
-        unshift @ARGV, 'help';
+        $ARGV[0] = 'help';
     }
     elsif (!@ARGV) {
         if ( my $cmd = $ENV{'JIFTY_COMMAND'} ) {

Modified: jifty/branches/virtual-models/lib/Jifty/Test.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Test.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/Test.pm	Tue Sep 18 11:48:33 2007
@@ -281,7 +281,7 @@
             },
             Web => {
                 Port => int(rand(5000) + 10000),
-                DataDir => File::Temp::tempdir('masonXXXXXXXXXX')
+                DataDir => File::Temp::tempdir('masonXXXXXXXXXX', CLEANUP => 1)
             },
             Mailer => 'Jifty::Test',
             MailerArgs => [],
@@ -522,6 +522,9 @@
         unlink @Test_Files_To_Cleanup;
     }
 
+    # Cleanup the tempdirs
+    File::Temp::cleanup();
+
     # Unlink test file
     unlink $Test->{test_config} if $Test->{test_config};
 }

Modified: jifty/branches/virtual-models/lib/Jifty/Util.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Util.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/Util.pm	Tue Sep 18 11:48:33 2007
@@ -237,18 +237,19 @@
 
     return 1 if $self->already_required($class);
 
-    local $UNIVERSAL::require::ERROR = '';
-    my $retval = $class->require;
-    if ($UNIVERSAL::require::ERROR) {
-        my $error = $UNIVERSAL::require::ERROR;
-        $error =~ s/ at .*?\n$//;
-        if ($args{'quiet'} and $error =~ /^Can't locate/) {
+    my $pkg = $class .".pm";
+    $pkg =~ s/::/\//g;
+    my $retval = eval  {CORE::require "$pkg"} ;
+    my $error = $@;
+    if (my $message = $error) { 
+        $message =~ s/ at .*?\n$//;
+        if ($args{'quiet'} and $message =~ /^Can't locate/) {
             return 0;
         }
-        elsif ( $UNIVERSAL::require::ERROR !~ /^Can't locate/) {
-            die $UNIVERSAL::require::ERROR;
+        elsif ( $error !~ /^Can't locate/) {
+            die $error;
         } else {
-            Jifty->log->error(sprintf("$error at %s line %d\n", (caller(1))[1,2]));
+            Jifty->log->error(sprintf("$message at %s line %d\n", (caller(1))[1,2]));
             return 0;
         }
     }

Modified: jifty/branches/virtual-models/lib/Jifty/View/Declare/Handler.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/View/Declare/Handler.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/View/Declare/Handler.pm	Tue Sep 18 11:48:33 2007
@@ -3,7 +3,7 @@
 use warnings;
 use strict;
 
-use base qw/Jifty::Object Class::Accessor/;
+use base qw/Jifty::Object Class::Accessor::Fast/;
 use Template::Declare;
 
 __PACKAGE__->mk_accessors(qw/root_class/);

Modified: jifty/branches/virtual-models/lib/Jifty/View/Declare/Page.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/View/Declare/Page.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/View/Declare/Page.pm	Tue Sep 18 11:48:33 2007
@@ -188,7 +188,7 @@
 =cut
 
 sub render_jifty_page_detritus {
-
+    show('/app_page_footer') if Template::Declare->resolve_template('/app_page_footer' => 1); # the 1 is 'show_private'
     show('/keybindings');
     with( id => "jifty-wait-message", style => "display: none" ),
         div { _('Loading...') };

Modified: jifty/branches/virtual-models/lib/Jifty/Web/Form/Element.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Web/Form/Element.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/Web/Form/Element.pm	Tue Sep 18 11:48:33 2007
@@ -160,11 +160,11 @@
 
 =cut
 
-sub accessors { shift->handlers, qw(class key_binding key_binding_label id label tooltip continuation) }
+sub accessors { shift->handlers, qw(class title key_binding key_binding_label id label tooltip continuation) }
 __PACKAGE__->mk_accessors(qw(_onclick _onchange _ondblclick _onmousedown _onmouseup _onmouseover 
                              _onmousemove _onmouseout _onfocus _onblur _onkeypress _onkeydown 
                              _onkeyup _onselect
-                             class key_binding key_binding_label id label tooltip continuation));
+                             class title key_binding key_binding_label id label tooltip continuation));
 
 =head2 new PARAMHASH OVERRIDE
 
@@ -562,6 +562,10 @@
 
 Sets the CSS class that the element will display as
 
+=head2 title
+
+Sets the title that the element will display, e.g. for tooltips
+
 =head2 key_binding
 
 Sets the key binding associated with this element

Modified: jifty/branches/virtual-models/lib/Jifty/Web/Form/Field.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Web/Form/Field.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/Web/Form/Field.pm	Tue Sep 18 11:48:33 2007
@@ -487,6 +487,7 @@
     my $field = qq!  <input !;
     $field .= qq! type="@{[ $self->type ]}"!;
     $field .= qq! name="@{[ $self->input_name ]}"! if ($self->input_name);
+    $field .= qq! title="@{[ $self->title ]}"! if ($self->title);
     $field .= qq! id="@{[ $self->element_id ]}"!;
     $field .= qq! value="@{[Jifty->web->escape($self->current_value)]}"! if defined $self->current_value;
     $field .= $self->_widget_class; 

Modified: jifty/branches/virtual-models/lib/Jifty/Web/Form/Field/Button.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Web/Form/Field/Button.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/Web/Form/Field/Button.pm	Tue Sep 18 11:48:33 2007
@@ -43,6 +43,7 @@
         'type="submit"',
         'name="' . $self->input_name . '" ',
         'value="' . Jifty->web->escape(_($self->label )). '"',
+        ($self->title ? qq( title="@{[$self->title]}") : ''),
         'id="'. Jifty->web->serial . '"',
         ($self->key_binding ? qq( accesskey="@{[$self->key_binding]}") : ''),
         $self->_widget_class('button', ($self->button_as_link ? ("button_as_link") : ())),

Modified: jifty/branches/virtual-models/lib/Jifty/Web/Form/Field/Checkbox.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Web/Form/Field/Checkbox.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/Web/Form/Field/Checkbox.pm	Tue Sep 18 11:48:33 2007
@@ -34,6 +34,7 @@
 
     $field .= qq!<input!;
     $field .= qq! type="checkbox"!;
+    $field .= qq! title="@{[ $self->title ]}"! if ($self->title);
     $field .= qq! name="@{[ $self->input_name ]}"!;
     $field .= qq! id="@{[ $self->element_id ]}"!;
     $field .= qq! value="@{[$self->value ||1]}"!;
@@ -57,6 +58,7 @@
     my $self  = shift;
     my $field .= qq!<input type="checkbox"!;
     $field .= qq! name="@{[ $self->input_name ]}"!;
+    $field .= qq! title="@{[ $self->title ]}"! if ($self->title);
     $field .= qq! id="@{[ $self->element_id ]}"!;
     $field .= qq! value="@{[$self->value ||1]}"!;
     $field .= $self->_widget_class;

Modified: jifty/branches/virtual-models/lib/Jifty/Web/Form/Field/Collection.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Web/Form/Field/Collection.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/Web/Form/Field/Collection.pm	Tue Sep 18 11:48:33 2007
@@ -51,6 +51,7 @@
     $id =~ s/\s+/_/;
     my $field = qq! <input type="text" !;
     $field .= qq! name="@{[ $self->input_name ]}"!;
+    $field .= qq! title="@{[ $self->title ]}"! if ($self->title);
     $field .= qq! id="@{[ $id ]}"!;
     $field .= qq! value="0"!;
     $field .= $self->_widget_class;

Modified: jifty/branches/virtual-models/lib/Jifty/Web/Form/Field/Combobox.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Web/Form/Field/Combobox.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/Web/Form/Field/Combobox.pm	Tue Sep 18 11:48:33 2007
@@ -19,12 +19,15 @@
 
 sub render_widget {
     my $self  = shift;
+    my $title = $self->title ? qq! title="@{[ $self->title ]}"!
+                             : qq! !;
 
 my $field = <<"EOF";
 <nobr>
 <span id="@{[ $self->element_id ]}_Container" class="combobox">
 <input name="@{[ $self->fallback_name ]}" 
        id="@{[ $self->element_id ]}" 
+       $title
        @{[ $self->_widget_class('combo-text')]}
        value="@{[ $self->current_value ]}" 
        type="text" 

Modified: jifty/branches/virtual-models/lib/Jifty/Web/Form/Field/Radio.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Web/Form/Field/Radio.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/Web/Form/Field/Radio.pm	Tue Sep 18 11:48:33 2007
@@ -59,6 +59,7 @@
     my $field = qq! <input type="radio" !;
     $field .= qq! name="@{[ $self->input_name ]}"!;
     $field .= qq! id="@{[ $id ]}"!;
+    $field .= qq! title="@{[ $self->title ]}"! if ($self->title);
     $field .= qq! value="@{[ $value ]}"!;
     $field .= $self->_widget_class;
 

Modified: jifty/branches/virtual-models/lib/Jifty/Web/Form/Field/ResetButton.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Web/Form/Field/ResetButton.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/Web/Form/Field/ResetButton.pm	Tue Sep 18 11:48:33 2007
@@ -24,6 +24,7 @@
         '<input',
         'type="reset"',
         'name="' . $self->input_name . '" ',
+        ($self->title ? 'title="'.$self->title.'" ' : ''),
         'value="' . _($self->label ). '"',
         $self->_widget_class('button', 'reset'),
         $self->javascript,

Modified: jifty/branches/virtual-models/lib/Jifty/Web/Form/Field/Select.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Web/Form/Field/Select.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/Web/Form/Field/Select.pm	Tue Sep 18 11:48:33 2007
@@ -22,6 +22,7 @@
     my $field = qq! <select !;
     $field .= qq! name="@{[ $self->input_name ]}"!;
     $field .= qq! id="@{[ $self->element_id ]}"!;
+    $field .= qq! id="@{[ $self->title ]}"! if ($self->title);
     $field .= $self->_widget_class;
     $field .= $self->javascript;
     $field .= qq!      >\n!;

Modified: jifty/branches/virtual-models/lib/Jifty/Web/Form/Field/Textarea.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Web/Form/Field/Textarea.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/Web/Form/Field/Textarea.pm	Tue Sep 18 11:48:33 2007
@@ -34,6 +34,7 @@
     $field .= qq!<textarea!;
     $field .= qq! name="@{[ $self->input_name ]}"!;
     $field .= qq! id="@{[ $self->element_id ]}"!;
+    $field .= qq! title="@{[ $self->title ]}"! if ($self->title);
     $field .= qq! rows="@{[$self->rows || 5 ]}"!;
     $field .= qq! cols="@{[$self->cols || 60]}"!;
     $field .= $self->_widget_class;

Modified: jifty/branches/virtual-models/lib/Jifty/Web/PageRegion.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Web/PageRegion.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/Web/PageRegion.pm	Tue Sep 18 11:48:33 2007
@@ -310,13 +310,14 @@
     $subrequest->path( $self->path );
     $subrequest->top_request( Jifty->web->request->top_request );
 
+    my %args;
     if ($self->path =~ m/\?/) {
 	# XXX: this only happens if we are redirect within region AND
 	# with continuation, which is already taken care of by the
 	# clone.
 	my ($path, $arg) = split(/\?/, $self->path, 2);
 	$subrequest->path( $path );
-	my %args = (map { split /=/, $_ } split /&/, $arg);
+	%args = (map { split /=/, $_ } split /&/, $arg);
 	if ($args{'J:C'}) {
 	    $subrequest->continuation($args{'J:C'});
 	}
@@ -327,6 +328,13 @@
     }
     # $subrequest->clear_actions;
     local Jifty->web->{request} = $subrequest;
+    if ($args{'J:RETURN'}) {
+	my $top = Jifty->web->request->top_request;
+	my $cont = Jifty->web->session->get_continuation($args{'J:RETURN'});
+	$cont->return;
+	# need to set this as subrequest again as it's clobbered by the return
+	Jifty->web->request->top_request($top);
+    }
 
     # While we're inside this region, have Mason to tack its response
     # onto a variable and not send headers when it does so

Modified: jifty/branches/virtual-models/lib/Jifty/Web/Session.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Web/Session.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/Web/Session.pm	Tue Sep 18 11:48:33 2007
@@ -74,7 +74,6 @@
 
     $session->create( key_type => "session" ) unless $session->id;
     $self->_session($session);
-    $self->{cache} = undef;
 }
 
 =head2 load_by_kv key => value 
@@ -165,7 +164,7 @@
 
     return undef unless $self->loaded;
 
-    if ($key_type eq "continuation" or $key_type eq "session") {
+
         my $setting = Jifty::Model::Session->new;
         $setting->load_by_cols(
             session_id => $self->id,
@@ -173,19 +172,6 @@
             data_key   => $key
         );
         return $setting->value;
-    } else {
-        unless ($self->{cache}) {
-            my $settings = Jifty::Model::SessionCollection->new;
-            $settings->limit( column => 'session_id', value => $self->id, case_sensitive => '1' );
-            $settings->limit( column => 'key_type',   value => 'continuation', operator => '!=', entry_aggregator => 'and', case_sensitive => '1' );
-            $settings->limit( column => 'key_type',   value => 'session', operator => '!=', entry_aggregator => 'and', case_sensitive => '1' );
-            while (my $row = $settings->next) {
-                $self->{cache}{$row->key_type}{$row->data_key} = $row->value;
-            }
-        }
-
-        return $self->{cache}{$key_type}{$key};
-    }
 
 }
 
@@ -225,8 +211,6 @@
         );
     }
 
-    $self->{cache}{$key_type}{$key} = $value
-      if $self->{cache};
 
 }
 

Modified: jifty/branches/virtual-models/share/web/static/js/jifty.js
==============================================================================
--- jifty/branches/virtual-models/share/web/static/js/jifty.js	(original)
+++ jifty/branches/virtual-models/share/web/static/js/jifty.js	Tue Sep 18 11:48:33 2007
@@ -600,6 +600,9 @@
          && ((element.nodeName != 'A')     || (! element.getAttribute("name"))))
             return $H();
 
+        if (element.getAttribute("name").length == 0)
+            return $H();
+
         var extras = $H();
 
         // Split other arguments out, if we're on a button
@@ -1494,10 +1497,38 @@
     var form = Form.Element.getForm(elt);
     var elements = Form.getElements(form);
 
-    var args = {};
-    for (var i = 0; i < elements.length; i++)
-	args[elements[i].name] = $F(elements[i]);
+    // Three things need to get merged -- hidden defaults, defaults
+    // from buttons, and form values.  Hence, we build up three lists
+    // and then merge them.
+    var hiddens = $H();
+    var buttons = $H();
+    var inputs = $H()
+    for (var i = 0; i < elements.length; i++) {
+        var e = elements[i];
+        var parsed = e.getAttribute("name").match(/^J:V-region-__page\.(.*)/);
+        var extras = Form.Element.buttonArguments(e);
+        if (extras.keys().length > 0) {
+            // Button with values
+            for (var j = 0; j < extras.keys().length; j++) {
+                // Might also have J:V mappings on it
+                parsed = extras.keys()[j].match(/^J:V-region-__page\.(.*)/);
+                if ((parsed != null) && (parsed.length == 2)) {
+                    buttons[parsed[1]] = extras.values()[j];
+                } else if (extras.keys()[j].length > 0) {
+                    inputs[extras.keys()[j]] = extras.values()[j];
+                }
+                
+            }
+        } else if ((parsed != null) && (parsed.length == 2)) {
+            // Hidden default
+            hiddens[parsed[1]] = $F(e);
+        } else if (e.name.length > 0) {
+            // Straight up values
+            inputs[e.name] = $F(e);
+        }
+    }
 
+    var args = hiddens.merge(buttons.merge(inputs));
     if(event.ctrlKey||event.metaKey||event.altKey||event.shiftKey) return true;
     return update( {'continuation':{},'actions':null,'fragments':[{'mode':'Replace','args':args,'region':'__page','path': submit_to}]}, elt );
 }

Modified: jifty/branches/virtual-models/t/TestApp/lib/TestApp/Model/User.pm
==============================================================================
--- jifty/branches/virtual-models/t/TestApp/lib/TestApp/Model/User.pm	(original)
+++ jifty/branches/virtual-models/t/TestApp/lib/TestApp/Model/User.pm	Tue Sep 18 11:48:33 2007
@@ -40,5 +40,15 @@
 
 # Your model-specific methods go here.
 
+sub current_time
+{
+    Jifty::DateTime->now();
+}
+
+sub time_zone
+{
+    'America/Anchorage'
+}
+
 1;
 

Modified: jifty/branches/virtual-models/t/TestApp/t/11-current_user.t
==============================================================================
--- jifty/branches/virtual-models/t/TestApp/t/11-current_user.t	(original)
+++ jifty/branches/virtual-models/t/TestApp/t/11-current_user.t	Tue Sep 18 11:48:33 2007
@@ -11,7 +11,7 @@
 use lib 't/lib';
 use Jifty::SubTest;
 
-use Jifty::Test tests => 23;
+use Jifty::Test tests => 27;
 use Jifty::Test::WWW::Mechanize;
 
 use_ok('TestApp::Model::User');
@@ -34,6 +34,8 @@
             password => 'secret2', tasty => 1 );
 ok($o->id, "New user has valid id set");
 ok($o->tasty, "User is tasty");
+like($o->created_on->time_zone, qr/Floating/, "User's created_on date is in the floating timezone");
+like($o->current_time->time_zone, qr/UTC/, "Jifty::DateTime::now defaults to UTC (superuser has no user_object)");
 
 is($o->email, 'bob at example.com', 'email initially set correctly');
 $o->set_email('bob+jifty at example.com');
@@ -49,6 +51,8 @@
 is($bob->user_object->email, 'bob+jifty at example.com', 'email from before');
 $bob->user_object->set_email('bob+test at example.com');
 is($bob->user_object->email, 'bob+test at example.com', 'email updated correctly');
+like($bob->user_object->created_on->time_zone, qr/Floating/, "User's created_on date is in the floating timezone");
+like($bob->user_object->current_time->time_zone, qr{America::Anchorage}, "Jifty::DateTime::now correctly peers into current_user->user_object->time_zone");
 
 my $server = Jifty::Test->make_server;
 isa_ok($server, 'Jifty::Server');


More information about the Jifty-commit mailing list