X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/mfinanz.git/blobdiff_plain/7af2b12887c4b1cb0cb427960c57f5b777b85315..bb8964ddfc59e40b62f6e65f5dd38cea9b7323d0:/SL/ClientJS.pm?ds=inline diff --git a/SL/ClientJS.pm b/SL/ClientJS.pm index 47f8a225b..6f9ce5adb 100644 --- a/SL/ClientJS.pm +++ b/SL/ClientJS.pm @@ -13,6 +13,8 @@ use Rose::Object::MakeMethods::Generic ); my %supported_methods = ( + # ## jQuery basics ## + # Basic effects hide => 1, show => 1, @@ -56,6 +58,31 @@ my %supported_methods = ( # Data storage data => 3, removeData => 2, + + # ## jstree plugin ## pattern: $.jstree._reference($()).() + + # Operations on the whole tree + 'jstree:lock' => 1, + 'jstree:unlock' => 1, + + # Opening and closing nodes + 'jstree:open_node' => 2, + 'jstree:open_all' => 2, + 'jstree:close_node' => 2, + 'jstree:close_all' => 2, + 'jstree:toggle_node' => 2, + 'jstree:save_opened' => 1, + 'jstree:reopen' => 1, + + # Modifying nodes + 'jstree:rename_node' => 3, + 'jstree:delete_node' => 2, + 'jstree:move_node' => 5, + + # Selecting nodes (from the 'ui' plugin to jstree) + 'jstree:select_node' => 2, # $.jstree._reference($()).(, true) + 'jstree:deselect_node' => 2, + 'jstree:deselect_all' => 1, ); sub AUTOLOAD { @@ -67,8 +94,8 @@ sub AUTOLOAD { $method =~ s/.*:://; return if $method eq 'DESTROY'; + $method = (delete($self->{_prefix}) || '') . $method; my $num_args = $supported_methods{$method}; - $::lxdebug->message(0, "autoload method $method"); croak "Unsupported jQuery action: $method" unless defined $num_args; croak "Parameter count mismatch for $method(actual: " . scalar(@args) . " wanted: $num_args)" if scalar(@args) != $num_args; @@ -98,6 +125,17 @@ sub to_array { return $self->_actions; } +sub render { + my ($self, $controller) = @_; + return $controller->render(\$self->to_json, { type => 'json' }); +} + +sub jstree { + my ($self) = @_; + $self->{_prefix} = 'jstree:'; + return $self; +} + 1; __END__ @@ -147,8 +185,17 @@ Now some Perl code: my $html = $self->render('SomeController/the_action', { output => 0 }); $js->html('#id_with_new_content', $html); + # Operations on a jstree: rename a node and select it + my $text_block = SL::DB::RequirementSpecTextBlock->new(id => 4711)->load; + $js->jstree->rename_node('#tb-' . $text_block->id, $text_block->title) + ->jstree->select_node('#tb-' . $text_block->id); + # Finally render the JSON response: $self->render($js); + + # Rendering can also be chained, e.g. + $js->html('#selector', $html) + ->render($self); } =head1 OVERVIEW @@ -198,6 +245,20 @@ are the function parameters. Returns the actions gathered so far as a JSON string ready to be sent to the client. +=item C + +Renders C<$self> via the controller. Useful for chaining. Equivalent +to the following: + + $controller->render(\$self->to_json, { type => 'json' }); + +=item C + +Tells C<$self> that the next action is to be called on a jstree +instance. For example: + + $js->jstree->rename_node('tb-' . $text_block->id, $text_block->title); + =back =head1 FUNCTIONS EVALUATED ON THE CLIENT SIDE @@ -242,13 +303,38 @@ C, C =back +=head2 JSTREE JQUERY PLUGIN + +The following functions of the C plugin to jQuery are +supported: + +=over 4 + +=item Operations on the whole tree + +C, C + +=item Opening and closing nodes + +C, C, C, C, +C, C, C + +=item Modifying nodes + +C, C, C + +=item Selecting nodes (from the 'ui' jstree plugin) + +C, C, C + +=back + =head1 ADDING SUPPORT FOR ADDITIONAL FUNCTIONS In order not having to maintain two files (this one and C) there's a script that can parse this file's -C<%supported_methods> definition and convert it into the appropriate -code ready for manual insertion into C. The steps -are: +C<%supported_methods> definition and generate the file +C accordingly. The steps are: =over 2 @@ -256,13 +342,17 @@ are: key is the function name and the value is the number of expected parameters. -=item 2. Run C +=item 2. Run C. It will +generate C automatically. -=item 3. Edit C and replace the type casing code with -the output generated in step 2. +=item 3. Reload the files in your browser (cleaning its cache can also +help). =back +The template file used for generated C is +C. + =head1 BUGS Nothing here yet.