epic-s6ts
[kivitendo-erp.git] / scripts / generate_client_js_actions.pl
index 448a42c..f7f9a16 100755 (executable)
@@ -4,10 +4,11 @@ use strict;
 use warnings;
 
 use File::Slurp;
+use FindBin;
 use List::Util qw(first max);
 use Template;
 
-my $rel_dir = (first { -f "${_}/SL/ClientJS.pm" } qw(. ..)) || die "ClientJS.pm not found";
+my $rel_dir = $FindBin::Bin . '/..';
 my @actions;
 
 foreach (read_file("${rel_dir}/SL/ClientJS.pm")) {
@@ -15,7 +16,7 @@ foreach (read_file("${rel_dir}/SL/ClientJS.pm")) {
 
   next unless (m/^my \%supported_methods/ .. m/^\);/);
 
-  push @actions, [ 'action',  $1, $2, $3 ] if m/^ \s+ '? ([a-zA-Z_:]+) '? \s*=>\s* (\d+) , (?: \s* \# \s+ (.+))? $/x;
+  push @actions, [ 'action',  $1, $2, $3 ] if m/^ \s+ '? ([a-zA-Z_:]+) '? \s*=>\s* (-? \d+) , (?: \s* \# \s+ (.+))? $/x;
   push @actions, [ 'comment', $1, $2     ] if m/^ \s+\# \s+ (.+?) (?: \s* pattern: \s+ (.+))? $/x;
 }
 
@@ -33,7 +34,9 @@ foreach my $action (@actions) {
     $pattern = $action->[2] eq '<DEFAULT>' ? $default_pattern : $action->[2] if $action->[2];
 
   } else {
-    my $args = $action->[2] == 1 ? '' : join(', ', map { "action[$_]" } (2..$action->[2]));
+    my $args = $action->[2] == 1 ? ''
+             : $action->[2] <  0 ? 'action.slice(2, action.length)'
+             :                     join(', ', map { "action[$_]" } (2..$action->[2]));
 
     $output .= sprintf('      %s if (action[0] == \'%s\')%s ',
                        $first ? '    ' : 'else',
@@ -56,6 +59,6 @@ foreach my $action (@actions) {
 
 $output .= sprintf "\n      else\%sconsole.log('Unknown action: ' + action[0]);\n", ' ' x (4 + 2 + 6 + 3 + 4 + 2 + $longest + 1);
 
-my $template = Template->new({ RELATIVE => 1 });
+my $template = Template->new({ ABSOLUTE => 1 });
 $template->process($rel_dir . '/scripts/generate_client_js_actions.tpl', { actions => $output }, $rel_dir . '/js/client_js.js') || die $template->error(), "\n";
 print "js/client_js.js generated automatically.\n";