Index: openacs-4/packages/acs-templating/tcl/head-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-templating/tcl/head-procs.tcl,v diff -u -N -r1.20.2.12 -r1.20.2.13 --- openacs-4/packages/acs-templating/tcl/head-procs.tcl 1 Oct 2016 11:10:45 -0000 1.20.2.12 +++ openacs-4/packages/acs-templating/tcl/head-procs.tcl 2 Oct 2016 16:40:25 -0000 1.20.2.13 @@ -759,17 +759,19 @@ } ad_proc template::add_confirm_handler { + {-event click} {-message "Are you sure?"} {-CSSclass "acs-confirm"} - {-event click} {-id} } { Register an event handler for confirmation dialogs for elements either with an specified ID or for elements of a CSS class (default "acs_confirm"). - @id optional ID for HTML element - @message Message to be displayed in the confirmation dialog + @event register confirm handler for this type of event + @id register confirm handler for this HTML ID + @CSSclass register confirm handler for this CSS class + @message Message to be displayed in the confirmation dialog @author Gustaf Neumann } { if {[info exists id]} { @@ -792,11 +794,48 @@ } }] } - #template::add_body_script -script $script } +ad_proc template::add_event_listener { + {-event click} + {-CSSclass "acs-listen"} + {-id} + {-usecapture:boolean false} + {-preventdefault:boolean true} + {-script:required} +} { + + Register an event handler for elements either with an specified ID + or for elements of a CSS class. + @event register confirm handler for this type of event + @id register confirm handler for this HTML ID + @CSSclass register confirm handler for this CSS class + @message Message to be displayed in the confirmation dialog + @author Gustaf Neumann +} { + set prevent [expr {$preventdefault_p ? "event.preventDefault();" : ""}] + + if {[info exists id]} { + template::add_body_script -script [subst { + document.getElementById('$id').addEventListener('$event', function (event) { + $prevent$script + }, $usecapture_p); + }] + } else { + template::add_body_script -script [subst { + var elems = document.getElementsByClassName('$CSSclass'); + for (var i = 0, l = elems.length; i < l; i++) { + elems\[i\].addEventListener('$event', function (event) { + $prevent;$script + }, $usecapture_p); + } + }] + } +} + + # Local variables: # mode: tcl # tcl-indent-level: 4