@@ -16,12 +16,14 @@ export default class Component {
16
16
17
17
const options = mergeDeep ( { } , defaults , params ) ;
18
18
const target = this . getTarget ( selector ) ;
19
+ const handlers = { } ;
19
20
20
21
this . title = title ;
21
22
this . selector = selector ;
22
23
this . defaults = defaults ;
23
24
this . params = params ;
24
25
this . options = options ;
26
+ this . handlers = handlers ;
25
27
this . target = target ;
26
28
this . warning = warning ;
27
29
} ;
@@ -92,7 +94,33 @@ export default class Component {
92
94
} ) ;
93
95
} ;
94
96
95
- getTarget ( selector ) {
97
+ initHandlers ( ) {
98
+ const _that = this ;
99
+
100
+ const { parseDataSelector, handlers } = this ;
101
+
102
+ const outside = [ 'document' , 'body' , 'html' , 'outside' ] ;
103
+
104
+ Object . entries ( handlers ) . forEach ( ( [ type , handlers ] ) => {
105
+ Object . entries ( handlers ) . forEach ( ( [ id , handler ] ) => {
106
+ if ( typeof handler !== 'function' ) {
107
+ return ;
108
+ } ;
109
+
110
+ const { selector } = parseDataSelector ( id ) ;
111
+
112
+ const cb = async function ( e ) {
113
+ await handler . call ( _that , e ) ;
114
+ } ;
115
+
116
+ const params = outside . includes ( id ) ? [ type , cb ] : [ type , selector , cb ] ;
117
+
118
+ $ ( document ) . on ( ...params ) ;
119
+ } ) ;
120
+ } ) ;
121
+ } ;
122
+
123
+ getTarget = selector => {
96
124
if ( typeof selector === 'string' ) {
97
125
return Array . from ( document . querySelectorAll ( selector ) ) ;
98
126
} ;
@@ -112,9 +140,20 @@ export default class Component {
112
140
return [ ] ;
113
141
} ;
114
142
143
+ getDataSelector = selector => {
144
+ const { getTarget } = this ;
145
+
146
+ const target = getTarget ( selector ) ;
147
+ const dataKeys = Object . keys ( target [ 0 ] . dataset ) ;
148
+ const data = dataKeys . length ? `[data-${ dataKeys [ 0 ] } ]` : null ;
149
+
150
+ return data ;
151
+ } ;
152
+
115
153
parseDataSelector = id => {
116
- const { selector : s } = this ;
154
+ const { selector : _selector , getDataSelector } = this ;
117
155
156
+ const s = ( typeof _selector === 'string' ) ? _selector : getDataSelector ( _selector ) ;
118
157
const reg = / \[ | \] | d a t a - / gi;
119
158
120
159
if ( ( typeof s === 'string' ) && reg . test ( s ) ) {
0 commit comments