@@ -727,29 +727,12 @@ CompilerProto.parseDeps = function () {
727
727
}
728
728
729
729
/**
730
- * Add an event delegation listener
730
+ * Add an event listener to the delegator
731
731
* listeners are instances of directives with `isFn:true`
732
732
*/
733
733
CompilerProto . addListener = function ( listener ) {
734
734
var event = listener . arg ,
735
- delegator = this . delegators [ event ]
736
- if ( ! delegator ) {
737
- // initialize a delegator
738
- delegator = this . delegators [ event ] = {
739
- targets : [ ] ,
740
- handler : function ( e ) {
741
- var i = delegator . targets . length ,
742
- target
743
- while ( i -- ) {
744
- target = delegator . targets [ i ]
745
- if ( target . el . contains ( e . target ) && target . handler ) {
746
- target . handler ( e )
747
- }
748
- }
749
- }
750
- }
751
- this . el . addEventListener ( event , delegator . handler )
752
- }
735
+ delegator = this . delegators [ event ] || this . addDelegator ( event )
753
736
delegator . targets . push ( listener )
754
737
}
755
738
@@ -761,6 +744,33 @@ CompilerProto.removeListener = function (listener) {
761
744
targets . splice ( targets . indexOf ( listener ) , 1 )
762
745
}
763
746
747
+ /**
748
+ * Add an event delegator
749
+ */
750
+ CompilerProto . addDelegator = function ( event ) {
751
+ var delegator = this . delegators [ event ] = {
752
+ targets : [ ] ,
753
+ handler : function ( e ) {
754
+ var target ,
755
+ i = delegator . targets . length ,
756
+ stop = e . stopPropagation
757
+ // overwrite propagation control
758
+ e . stopPropagation = function ( ) {
759
+ e . stopped = true
760
+ stop . call ( e )
761
+ }
762
+ while ( i -- ) {
763
+ target = delegator . targets [ i ]
764
+ if ( ! e . stopped && target . handler && target . el . contains ( e . target ) ) {
765
+ target . handler ( e )
766
+ }
767
+ }
768
+ }
769
+ }
770
+ this . el . addEventListener ( event , delegator . handler )
771
+ return delegator
772
+ }
773
+
764
774
/**
765
775
* Do a one-time eval of a string that potentially
766
776
* includes bindings. It accepts additional raw data
0 commit comments