@@ -, +, @@ fields/subfields 'mouseover' and 'mousemove' are not used and would trigger too much events. 'keypress' is also not used, and is deprecated It just makes the code a lot less complicated. - Go to every page that has a MARC editor and verify that plugins still work. This includes addbiblio.pl, additem.pl, authorities.pl, neworderempty.pl, orderreceive.pl - Test plugins that use 'focus' event (for instance barcode.pl), 'blur' event (callnumber.pl) and 'click' event (almost all the others) - Test that plugins work on cloned fields/subfields --- C4/Items.pm | 2 +- Koha/FrameworkPlugin.pm | 84 ++------------- Koha/UI/Form/Builder/Item.pm | 1 + authorities/authorities.pl | 1 + cataloguing/value_builder/EXAMPLE.pl | 26 +---- .../prog/en/includes/html_helpers.inc | 6 +- .../prog/en/modules/acqui/neworderempty.tt | 2 +- .../prog/en/modules/acqui/orderreceive.tt | 2 +- .../en/modules/authorities/authorities.tt | 4 +- .../prog/en/modules/cataloguing/addbiblio.tt | 8 +- .../prog/en/modules/cataloguing/additem.tt | 2 +- koha-tmpl/intranet-tmpl/prog/js/additem.js | 14 --- koha-tmpl/intranet-tmpl/prog/js/cataloging.js | 101 ++++++++---------- 13 files changed, 72 insertions(+), 181 deletions(-) --- a/C4/Items.pm +++ a/C4/Items.pm @@ -1520,7 +1520,7 @@ sub PrepareItemrecordDisplay { my $tab= $plugin->noclick? '-1': ''; my $class= $plugin->noclick? ' disabled': ''; my $title= $plugin->noclick? 'No popup': 'Tag editor'; - $subfield_data{marc_value} = qq[...\n].$plugin->javascript; + $subfield_data{marc_value} = qq[...\n].$plugin->javascript; } else { warn $plugin->errstr; $subfield_data{marc_value} = qq(); # supply default input form --- a/Koha/FrameworkPlugin.pm +++ a/Koha/FrameworkPlugin.pm @@ -297,94 +297,24 @@ sub _process_javascript { $script =~ s/\]*\>\s*(\/\/\\s*)?\<\/script\>//s; - my $id = $params->{id}//''; - my $bind = ''; my $clickfound = 0; - my @events = qw|click focus blur change mouseover mouseout mousedown - mouseup mousemove keydown keypress keyup|; + my @events = qw|click focus blur change mousedown mouseup keydown keyup|; foreach my $ev ( @events ) { my $scan = $ev eq 'click' && $self->{oldschool}? 'clic': $ev; - if( $script =~ /function\s+($scan\w+)\s*\(([^\)]*)\)/is ) { - my ( $bl, $sl ) = $self->_add_binding( $1, $2, $ev, $id ); - $script .= $sl; - $bind .= $bl; + if( $script =~ /function\s+($scan\w+)\s*\(/is ) { + my $function_name = $1; + $script .= sprintf('registerFrameworkPluginHandler("%s", "%s", %s);', $self->name, $ev, $function_name); $clickfound = 1 if $ev eq 'click'; } } - if( !$clickfound ) { # make buttonDot do nothing - my ( $bl ) = $self->_add_binding( 'noclick', '', 'click', $id ); - $bind .= $bl; - } $self->{noclick} = !$clickfound; - $self->{javascript}= _merge_script( $id, $script, $bind ); -} - -sub _add_binding { -# adds some jQuery code for event binding: -# $bind contains lines for the actual event binding: .click, .focus, etc. -# $script contains function definitions (if needed) - my ( $self, $fname, $pars, $ev, $id ) = @_; - my ( $bind, $script ); - my $ctl= $ev eq 'click'? 'buttonDot_'.$id: $id; - #click event applies to buttonDot - - if( $pars =~ /^(e|ev|event)$/i ) { # new style event handler assumed - $bind= qq| \$("#$ctl").$ev(\{id: '$id'\}, $fname);\n|; - $script=''; - } elsif( $fname eq 'noclick' ) { # no click: return false, no scroll - $bind= qq| \$("#$ctl").$ev(function () { return false; });\n|; - $script=''; - } else { # add real event handler calling the function found - $bind=qq| \$("#$ctl").$ev(\{id: '$id'\}, ${fname}_handler);\n|; - $script = $self->_add_handler( $ev, $fname ); - } - return ( $bind, $script ); -} - -sub _add_handler { -# adds a handler with event parameter -# event.data.id is passed to the plugin function in parameters -# for the click event we always return false to prevent scrolling - my ( $self, $ev, $fname ) = @_; - my $first= $self->_first_item_par( $ev ); - my $prefix= $ev eq 'click'? '': 'return '; - my $suffix= $ev eq 'click'? "\n return false;": ''; - return <{item_style} && $self->{oldschool} && - $event=~/focus|blur|change/ ) { - return qq/'0',/; - } - return ''; -} - -sub _merge_script { -# Combine script and event bindings, enclosed in script tags. -# The BindEvents function is added to easily repeat event binding; -# this is used in additem.js for dynamically created item blocks. - my ( $id, $script, $bind ) = @_; - chomp ($script, $bind); - return <{javascript} = < +\$(document).ready(function () { $script -function BindEvents$id() { -$bind -} -\$(document).ready(function() { - BindEvents$id(); }); -HERE +JS } =head1 AUTHOR --- a/Koha/UI/Form/Builder/Item.pm +++ a/Koha/UI/Form/Builder/Item.pm @@ -336,6 +336,7 @@ sub generate_subfield_form { class => $class, nopopup => $plugin->noclick, javascript => $plugin->javascript, + plugin => $plugin->name, }; } else { --- a/authorities/authorities.pl +++ a/authorities/authorities.pl @@ -199,6 +199,7 @@ sub create_input { maxlength => $max_length, javascript => $plugin->javascript, noclick => $plugin->noclick, + plugin => $plugin->name, }; } else { # warn and supply default field warn $plugin->errstr; --- a/cataloguing/value_builder/EXAMPLE.pl +++ a/cataloguing/value_builder/EXAMPLE.pl @@ -65,37 +65,19 @@ my $builder= sub { |; }; --- a/koha-tmpl/intranet-tmpl/prog/en/includes/html_helpers.inc +++ a/koha-tmpl/intranet-tmpl/prog/en/includes/html_helpers.inc @@ -144,11 +144,11 @@ [% IF mv.readonly %] [% ELSE %] - + [% IF ( mv.nopopup ) %] - ... + ... [% ELSE %] - ... + ... [% END %] [% UNLESS no_plugin %][%# FIXME - from batchMod-edit, jQuery is included at the end of the template and cataloguing plugins are not working in this situation %] [%- mv.javascript | $raw -%] --- a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/neworderempty.tt +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/neworderempty.tt @@ -528,7 +528,7 @@
The autoBarcode system preference is set to [% Koha.Preference('autoBarcode') | html %] and items with blank barcodes will have barcodes generated upon save to database
[% END %] -
+
[% END %][%# | html UNLESS subscriptionid %] --- a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/orderreceive.tt +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/orderreceive.tt @@ -242,7 +242,7 @@ used

[% END %] -
+
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/authorities.tt +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/authorities.tt @@ -427,7 +427,7 @@
[% END # /IF duplicateauthid %] -
+ @@ -712,7 +712,7 @@ [% IF mv.noclick %] ... [% ELSE %] - ... + ... [% END %] [% mv.javascript | $raw %] [% END #/IF ( mv.type == 'text1' ) %] --- a/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/addbiblio.tt +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/addbiblio.tt @@ -839,7 +839,7 @@ $(document).ready(function(){
-
+
[% IF ( INVALID_METADATA ) %]

Errors found

@@ -1168,7 +1168,7 @@ $(document).ready(function(){ [% END %] [% ELSIF ( mv.type == 'text_complex' ) %] - + [% mv.javascript | $raw %] [% ELSIF ( mv.type == 'hidden' ) %] @@ -1220,9 +1220,9 @@ $(document).ready(function(){ [% ELSE %] [% IF mv.plugin == "upload.pl" %] - Upload + Upload [% ELSE %] - Tag editor + Tag editor [% END %] [% END %] --- a/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/additem.tt +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/additem.tt @@ -174,7 +174,7 @@
-
+
[% IF (popup) %] --- a/koha-tmpl/intranet-tmpl/prog/js/additem.js +++ a/koha-tmpl/intranet-tmpl/prog/js/additem.js @@ -227,24 +227,10 @@ function cloneItemBlock(index, unique_item_fields, callback) { var cloneIndex = "itemblock"+random; callback(cloneIndex); } - BindPluginEvents(data); } }); } -function BindPluginEvents(data) { -// the script tag in data for plugins contains a document ready that binds -// the events for the plugin -// when we append, this code does not get executed anymore; so we do it here - var events= data.match(/BindEventstag_\d+_subfield_._\d+/g); - if ( events == null ) return; - for(var i=0; i