Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 6ca21978

Von Moritz Bunkus vor mehr als 11 Jahren hinzugefügt

  • ID 6ca2197818029fad5253edd8f08988ddc66aa359
  • Vorgänger 4d9d7d51
  • Nachfolger bb8964dd

ClientJS: um jstree-Funktionen erweitert; client_js.js komplett automatisch erzeugen

Unterschiede anzeigen:

SL/ClientJS.pm
13 13
);
14 14

  
15 15
my %supported_methods = (
16
  # ## jQuery basics ##
17

  
16 18
  # Basic effects
17 19
  hide         => 1,
18 20
  show         => 1,
......
56 58
  # Data storage
57 59
  data         => 3,
58 60
  removeData   => 2,
61

  
62
  # ## jstree plugin ## pattern: $.jstree._reference($(<TARGET>)).<FUNCTION>(<ARGS>)
63

  
64
  # Operations on the whole tree
65
  'jstree:lock'          => 1,
66
  'jstree:unlock'        => 1,
67

  
68
  # Opening and closing nodes
69
  'jstree:open_node'     => 2,
70
  'jstree:open_all'      => 2,
71
  'jstree:close_node'    => 2,
72
  'jstree:close_all'     => 2,
73
  'jstree:toggle_node'   => 2,
74
  'jstree:save_opened'   => 1,
75
  'jstree:reopen'        => 1,
76

  
77
  # Modifying nodes
78
  'jstree:rename_node'   => 3,
79
  'jstree:delete_node'   => 2,
80
  'jstree:move_node'     => 5,
81

  
82
  # Selecting nodes (from the 'ui' plugin to jstree)
83
  'jstree:select_node'   => 2,  # $.jstree._reference($(<TARGET>)).<FUNCTION>(<ARGS>, true)
84
  'jstree:deselect_node' => 2,
85
  'jstree:deselect_all'  => 1,
59 86
);
60 87

  
61 88
sub AUTOLOAD {
......
67 94
  $method           =~ s/.*:://;
68 95
  return if $method eq 'DESTROY';
69 96

  
97
  $method      =  (delete($self->{_prefix}) || '') . $method;
70 98
  my $num_args =  $supported_methods{$method};
71
  $::lxdebug->message(0, "autoload method $method");
72 99

  
73 100
  croak "Unsupported jQuery action: $method"                                                    unless defined $num_args;
74 101
  croak "Parameter count mismatch for $method(actual: " . scalar(@args) . " wanted: $num_args)" if     scalar(@args) != $num_args;
......
103 130
  return $controller->render(\$self->to_json, { type => 'json' });
104 131
}
105 132

  
133
sub jstree {
134
  my ($self) = @_;
135
  $self->{_prefix} = 'jstree:';
136
  return $self;
137
}
138

  
106 139
1;
107 140
__END__
108 141

  
......
152 185
    my $html = $self->render('SomeController/the_action', { output => 0 });
153 186
    $js->html('#id_with_new_content', $html);
154 187

  
188
    # Operations on a jstree: rename a node and select it
189
    my $text_block = SL::DB::RequirementSpecTextBlock->new(id => 4711)->load;
190
    $js->jstree->rename_node('#tb-' . $text_block->id, $text_block->title)
191
       ->jstree->select_node('#tb-' . $text_block->id);
192

  
155 193
    # Finally render the JSON response:
156 194
    $self->render($js);
195

  
196
    # Rendering can also be chained, e.g.
197
    $js->html('#selector', $html)
198
       ->render($self);
157 199
  }
158 200

  
159 201
=head1 OVERVIEW
......
210 252

  
211 253
  $controller->render(\$self->to_json, { type => 'json' });
212 254

  
255
=item C<jstree>
256

  
257
Tells C<$self> that the next action is to be called on a jstree
258
instance. For example:
259

  
260
  $js->jstree->rename_node('tb-' . $text_block->id, $text_block->title);
261

  
213 262
=back
214 263

  
215 264
=head1 FUNCTIONS EVALUATED ON THE CLIENT SIDE
......
254 303

  
255 304
=back
256 305

  
306
=head2 JSTREE JQUERY PLUGIN
307

  
308
The following functions of the C<jstree> plugin to jQuery are
309
supported:
310

  
311
=over 4
312

  
313
=item Operations on the whole tree
314

  
315
C<lock>, C<unlock>
316

  
317
=item Opening and closing nodes
318

  
319
C<open_node>, C<close_node>, C<toggle_node>, C<open_all>,
320
C<close_all>, C<save_opened>, C<reopen>
321

  
322
=item Modifying nodes
323

  
324
C<rename_node>, C<delete_node>, C<move_node>
325

  
326
=item Selecting nodes (from the 'ui' jstree plugin)
327

  
328
C<select_node>, C<deselect_node>, C<deselect_all>
329

  
330
=back
331

  
257 332
=head1 ADDING SUPPORT FOR ADDITIONAL FUNCTIONS
258 333

  
259 334
In order not having to maintain two files (this one and
260 335
C<js/client_js.js>) there's a script that can parse this file's
261
C<%supported_methods> definition and convert it into the appropriate
262
code ready for manual insertion into C<js/client_js.js>. The steps
263
are:
336
C<%supported_methods> definition and generate the file
337
C<js/client_js.js> accordingly. The steps are:
264 338

  
265 339
=over 2
266 340

  
......
268 342
key is the function name and the value is the number of expected
269 343
parameters.
270 344

  
271
=item 2. Run C<scripts/generate_client_js_actions.pl>
345
=item 2. Run C<scripts/generate_client_js_actions.pl>. It will
346
generate C<js/client_js.js> automatically.
272 347

  
273
=item 3. Edit C<js/client_js.js> and replace the type casing code with
274
the output generated in step 2.
348
=item 3. Reload the files in your browser (cleaning its cache can also
349
help).
275 350

  
276 351
=back
277 352

  
353
The template file used for generated C<js/client_js.js> is
354
C<scripts/generate_client_js_actions.tpl>.
355

  
278 356
=head1 BUGS
279 357

  
280 358
Nothing here yet.

Auch abrufbar als: Unified diff