From: Dobrica Pavlinusic Date: Wed, 16 Jun 2010 19:40:27 +0000 (+0200) Subject: Merge branch 'master' into eval-code X-Git-Url: http://git.rot13.org/?p=MojoFacets.git;a=commitdiff_plain;h=206455e4fe5735cf5d6418f453a6e499da40d22e;hp=136f45adf13ec642fbb42de4eead8fe4f0a46b17 Merge branch 'master' into eval-code --- diff --git a/lib/MojoFacets/Data.pm b/lib/MojoFacets/Data.pm index 373e9a1..3a02f05 100644 --- a/lib/MojoFacets/Data.pm +++ b/lib/MojoFacets/Data.pm @@ -370,7 +370,7 @@ sub _param_scalar { $self->session($name => $scalar); } - warn "# _perm_scalar $name ",dump $scalar; + warn "# _param_scalar $name ",dump $scalar; return $scalar; } @@ -604,17 +604,39 @@ sub items { warn "all_filters $all_filters produced ", $#$filtered + 1, " items\n" if $filtered; - my $sorted_items; my $data = $self->_loaded('data'); + + my $code = $self->_param_scalar('code'); + if ( $self->param('commit') ) { + warn "# commit $code"; + foreach ( 0 .. $#{ $data->{items} } ) { + my $rec = $data->{items}->[ $_ ]; + eval $code; + } + undef $code; + } + + my $sorted_items; my $from_end = $sort eq 'd' ? $#$filtered : 0; foreach ( 0 .. $limit ) { my $i = $_ + $offset; last unless defined $filtered->[$i]; $i = $from_end - $i if $from_end; my $id = $filtered->[$i]; - push @$sorted_items, - my $item = $data->{items}->[ $id ]; - $item->{_row_id} ||= $id; + my $rec = $data->{items}->[ $id ]; + $rec->{_row_id} ||= $id; + if ( $code ) { + $rec = Storable::dclone $rec; + eval $code; + if ( $@ ) { + warn "ERROR evaling\n$code\n$@"; + undef $code; + $self->stash('eval_error', $@) if $@; + } else { + warn "EVAL $code ",dump($rec); + } + } + push @$sorted_items, $rec; } warn "# sorted_items ", $#$sorted_items + 1, " offset $offset limit $limit order $sort"; @@ -628,6 +650,7 @@ sub items { rows => $#$filtered + 1, numeric => { map { $_, $self->_is_numeric($_) } @columns }, filters => $self->_current_filters, + code => $code, ); } diff --git a/public/js/jquery.textarea_grow.js b/public/js/jquery.textarea_grow.js new file mode 100644 index 0000000..a07ab75 --- /dev/null +++ b/public/js/jquery.textarea_grow.js @@ -0,0 +1,17 @@ +jQuery.fn.textarea_grow = function(){ + return this.each(function(){ + var rows = this.rows; + console.debug( 'textarea_grow', rows, this ); + var grow = function(ta) { + var lines = ta.value.split('\n').length; + if ( lines != rows ) { + ta.rows = lines; + rows = lines; + console.debug('keyup', lines, rows, ta ); + } + }; + grow(this); + this.onkeyup = function() { grow(this) }; + }); +}; + diff --git a/public/mojo_facets.css b/public/mojo_facets.css index b67da0f..64bc459 100644 --- a/public/mojo_facets.css +++ b/public/mojo_facets.css @@ -160,6 +160,21 @@ form.action_filter { color: #444; } +/* items/table */ + +form#eval { + position: fixed; + bottom: 0; + left: 0; + width: 100%; + z-index: 10; + background: #eee; +} + +form#eval textarea { + width: 100%; +} + /* items/list.html.ep */ a.facet { font-family: monospace; @@ -211,3 +226,5 @@ tr.hidden { margin: 1em; text-align: center; } + + diff --git a/templates/data/items/table.html.ep b/templates/data/items/table.html.ep index b55d7c0..a5f82bf 100644 --- a/templates/data/items/table.html.ep +++ b/templates/data/items/table.html.ep @@ -48,5 +48,21 @@ filter +
+% my $rows = scalar split(/\n/,$code); + + + +
+ + +