Merge branch 'master' into eval-code
authorDobrica Pavlinusic <dpavlin@rot13.org>
Wed, 16 Jun 2010 19:40:27 +0000 (21:40 +0200)
committerDobrica Pavlinusic <dpavlin@rot13.org>
Wed, 16 Jun 2010 19:40:27 +0000 (21:40 +0200)
lib/MojoFacets/Data.pm
public/js/jquery.textarea_grow.js [new file with mode: 0644]
public/mojo_facets.css
templates/data/items/table.html.ep

index 373e9a1..3a02f05 100644 (file)
@@ -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 (file)
index 0000000..a07ab75
--- /dev/null
@@ -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) };
+       });
+};
+
index b67da0f..64bc459 100644 (file)
@@ -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;
 }
+
+
index b55d7c0..a5f82bf 100644 (file)
@@ -48,5 +48,21 @@ filter
 
 </table>
 
+<form id=eval method=post>
+% my $rows = scalar split(/\n/,$code);
+<textarea name=code rows=<%= $rows + 1 %>>
+<%= $code %>
+</textarea>
+<input name=test   type=submit value="Test code">
+<input name=commit type=submit value="Commit changes">
+</form>
+
 <script type="text/javascript" src="/edit_table.js"></script>
+<script type="text/javascript" src="/js/jquery.textarea_grow.js"></script>
+<script type="text/javascript">
+
+$(document).ready( function(){
+       $('form#eval textarea').textarea_grow();
+});
 
+</script>