[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