11'use strict' ;
22
3+ var _typeof = typeof Symbol === "function" && typeof Symbol . iterator === "symbol" ? function ( obj ) { return typeof obj ; } : function ( obj ) { return obj && typeof Symbol === "function" && obj . constructor === Symbol ? "symbol" : typeof obj ; } ;
4+
35var _createClass = function ( ) { function defineProperties ( target , props ) { for ( var i = 0 ; i < props . length ; i ++ ) { var descriptor = props [ i ] ; descriptor . enumerable = descriptor . enumerable || false ; descriptor . configurable = true ; if ( "value" in descriptor ) descriptor . writable = true ; Object . defineProperty ( target , descriptor . key , descriptor ) ; } } return function ( Constructor , protoProps , staticProps ) { if ( protoProps ) defineProperties ( Constructor . prototype , protoProps ) ; if ( staticProps ) defineProperties ( Constructor , staticProps ) ; return Constructor ; } ; } ( ) ;
46
57function _classCallCheck ( instance , Constructor ) { if ( ! ( instance instanceof Constructor ) ) { throw new TypeError ( "Cannot call a class as a function" ) ; } }
68
9+ /* eslint no-new:0 */
10+
711var Domodule = function ( ) {
12+ // eslint-disable-line no-unused-vars
13+
814 function Domodule ( el ) {
9- var _this = this ;
15+ var requiredOptions = arguments . length <= 1 || arguments [ 1 ] === undefined ? [ ] : arguments [ 1 ] ;
1016
1117 _classCallCheck ( this , Domodule ) ;
1218
1319 this . el = el ;
1420 this . els = { } ;
1521 this . options = this . serializeAttrs ( 'module' , this . el ) ;
22+ this . requiredOptions = requiredOptions ;
1623
17- var _iteratorNormalCompletion = true ;
18- var _didIteratorError = false ;
19- var _iteratorError = undefined ;
24+ this . verifyOptions ( ) ;
25+ this . setupActions ( ) ;
26+ this . setupNamed ( ) ;
27+ this . storeRef ( ) ;
2028
21- try {
22- var _loop = function _loop ( ) {
23- var action = _step . value ;
29+ return this ;
30+ }
2431
25- action . addEventListener ( action . dataset . actionType || 'click' , function ( event ) {
26- if ( typeof _this [ action . dataset . action ] !== 'function' ) {
27- return ;
28- }
32+ _createClass ( Domodule , [ {
33+ key : 'verifyOptions' ,
34+ value : function verifyOptions ( ) {
35+ if ( ! Array . isArray ( this . requiredOptions ) ) {
36+ return this ;
37+ }
2938
30- _this [ action . dataset . action ] . call ( _this , action , event , _this . serializeAttrs ( 'action' , action ) ) ;
31- } ) ;
32- } ;
39+ var _iteratorNormalCompletion = true ;
40+ var _didIteratorError = false ;
41+ var _iteratorError = undefined ;
3342
34- for ( var _iterator = this . find ( '[data-action]' ) [ Symbol . iterator ] ( ) , _step ; ! ( _iteratorNormalCompletion = ( _step = _iterator . next ( ) ) . done ) ; _iteratorNormalCompletion = true ) {
35- _loop ( ) ;
36- }
37- } catch ( err ) {
38- _didIteratorError = true ;
39- _iteratorError = err ;
40- } finally {
4143 try {
42- if ( ! _iteratorNormalCompletion && _iterator . return ) {
43- _iterator . return ( ) ;
44+ for ( var _iterator = Array . values ( this . requiredOptions ) [ Symbol . iterator ] ( ) , _step ; ! ( _iteratorNormalCompletion = ( _step = _iterator . next ( ) ) . done ) ; _iteratorNormalCompletion = true ) {
45+ var requiredOption = _step . value ;
46+
47+ if ( ! this . options . hasOwnProperty ( requiredOption ) ) {
48+ throw new Error ( 'Missing required option: ' + requiredOption ) ;
49+ }
4450 }
51+ } catch ( err ) {
52+ _didIteratorError = true ;
53+ _iteratorError = err ;
4554 } finally {
46- if ( _didIteratorError ) {
47- throw _iteratorError ;
55+ try {
56+ if ( ! _iteratorNormalCompletion && _iterator . return ) {
57+ _iterator . return ( ) ;
58+ }
59+ } finally {
60+ if ( _didIteratorError ) {
61+ throw _iteratorError ;
62+ }
4863 }
4964 }
65+
66+ return this ;
5067 }
68+ } , {
69+ key : 'setupActions' ,
70+ value : function setupActions ( ) {
71+ var _this = this ;
5172
52- var _iteratorNormalCompletion2 = true ;
53- var _didIteratorError2 = false ;
54- var _iteratorError2 = undefined ;
73+ var _iteratorNormalCompletion2 = true ;
74+ var _didIteratorError2 = false ;
75+ var _iteratorError2 = undefined ;
5576
56- try {
57- for ( var _iterator2 = this . find ( '[data-name]' ) [ Symbol . iterator ] ( ) , _step2 ; ! ( _iteratorNormalCompletion2 = ( _step2 = _iterator2 . next ( ) ) . done ) ; _iteratorNormalCompletion2 = true ) {
58- var named = _step2 . value ;
77+ try {
78+ var _loop = function _loop ( ) {
79+ var action = _step2 . value ;
80+
81+ if ( action . dataset . domoduleActionProcessed ) {
82+ return 'continue' ;
83+ }
5984
60- this . els [ named . dataset . name ] = named ;
85+ action . addEventListener ( action . dataset . actionType || 'click' , function ( event ) {
86+ if ( typeof _this [ action . dataset . action ] !== 'function' ) {
87+ return ;
88+ }
89+
90+ _this [ action . dataset . action ] . call ( _this , action , event , _this . serializeAttrs ( 'action' , action ) ) ;
91+ } ) ;
92+
93+ action . dataset . domoduleActionProcessed = true ;
94+ } ;
95+
96+ for ( var _iterator2 = this . find ( '[data-action]' ) [ Symbol . iterator ] ( ) , _step2 ; ! ( _iteratorNormalCompletion2 = ( _step2 = _iterator2 . next ( ) ) . done ) ; _iteratorNormalCompletion2 = true ) {
97+ var _ret = _loop ( ) ;
98+
99+ if ( _ret === 'continue' ) continue ;
100+ }
101+ } catch ( err ) {
102+ _didIteratorError2 = true ;
103+ _iteratorError2 = err ;
104+ } finally {
105+ try {
106+ if ( ! _iteratorNormalCompletion2 && _iterator2 . return ) {
107+ _iterator2 . return ( ) ;
108+ }
109+ } finally {
110+ if ( _didIteratorError2 ) {
111+ throw _iteratorError2 ;
112+ }
113+ }
61114 }
62- } catch ( err ) {
63- _didIteratorError2 = true ;
64- _iteratorError2 = err ;
65- } finally {
115+ }
116+ } , {
117+ key : 'setupNamed' ,
118+ value : function setupNamed ( ) {
119+ var _iteratorNormalCompletion3 = true ;
120+ var _didIteratorError3 = false ;
121+ var _iteratorError3 = undefined ;
122+
66123 try {
67- if ( ! _iteratorNormalCompletion2 && _iterator2 . return ) {
68- _iterator2 . return ( ) ;
124+ for ( var _iterator3 = this . find ( '[data-name]' ) [ Symbol . iterator ] ( ) , _step3 ; ! ( _iteratorNormalCompletion3 = ( _step3 = _iterator3 . next ( ) ) . done ) ; _iteratorNormalCompletion3 = true ) {
125+ var named = _step3 . value ;
126+
127+ if ( ! named . dataset . domoduleNameProcessed ) {
128+ this . els [ named . dataset . name ] = named ;
129+ named . dataset . domoduleNameProcessed = true ;
130+ }
69131 }
132+ } catch ( err ) {
133+ _didIteratorError3 = true ;
134+ _iteratorError3 = err ;
70135 } finally {
71- if ( _didIteratorError2 ) {
72- throw _iteratorError2 ;
136+ try {
137+ if ( ! _iteratorNormalCompletion3 && _iterator3 . return ) {
138+ _iterator3 . return ( ) ;
139+ }
140+ } finally {
141+ if ( _didIteratorError3 ) {
142+ throw _iteratorError3 ;
143+ }
73144 }
74145 }
75146 }
147+ } , {
148+ key : 'storeRef' ,
149+ value : function storeRef ( ) {
150+ if ( typeof Domodule . refs === 'undefined' ) {
151+ Domodule . refs = { } ;
152+ }
76153
77- return this ;
78- }
154+ if ( ! this . el . id ) {
155+ throw new Error ( 'Module container should have a unique id attribute' ) ;
156+ }
79157
80- _createClass ( Domodule , [ {
158+ if ( typeof Domodule . refs [ this . el . id ] !== 'undefined' ) {
159+ return false ;
160+ }
161+
162+ Domodule . refs [ this . el . id ] = this ;
163+ }
164+ } , {
81165 key : 'serializeAttrs' ,
82166 value : function serializeAttrs ( key , el ) {
83167 var values = { } ;
84168
85- for ( var data in el . dataset ) {
86- if ( el . dataset . hasOwnProperty ( data ) && data . startsWith ( key ) && data !== key ) {
87- var optionName = data . replace ( key , '' ) ;
88- optionName = optionName [ 0 ] . toLowerCase ( ) + optionName . slice ( 1 ) ;
89- values [ optionName ] = el . dataset [ data ] ;
169+ var _iteratorNormalCompletion4 = true ;
170+ var _didIteratorError4 = false ;
171+ var _iteratorError4 = undefined ;
172+
173+ try {
174+ for ( var _iterator4 = Object . keys ( el . dataset ) [ Symbol . iterator ] ( ) , _step4 ; ! ( _iteratorNormalCompletion4 = ( _step4 = _iterator4 . next ( ) ) . done ) ; _iteratorNormalCompletion4 = true ) {
175+ var data = _step4 . value ;
176+
177+ if ( data . startsWith ( key ) && data !== key ) {
178+ var optionName = data . replace ( key , '' ) ;
179+ var isGlobal = false ;
180+
181+ if ( optionName . startsWith ( 'Global' ) ) {
182+ optionName = optionName . replace ( 'Global' , '' ) ;
183+ isGlobal = true ;
184+ }
185+
186+ optionName = optionName [ 0 ] . toLowerCase ( ) + optionName . slice ( 1 ) ;
187+
188+ if ( isGlobal ) {
189+ values [ optionName ] = window [ el . dataset [ data ] ] ;
190+ } else {
191+ values [ optionName ] = el . dataset [ data ] ;
192+ }
193+ }
194+ }
195+ } catch ( err ) {
196+ _didIteratorError4 = true ;
197+ _iteratorError4 = err ;
198+ } finally {
199+ try {
200+ if ( ! _iteratorNormalCompletion4 && _iterator4 . return ) {
201+ _iterator4 . return ( ) ;
202+ }
203+ } finally {
204+ if ( _didIteratorError4 ) {
205+ throw _iteratorError4 ;
206+ }
90207 }
91208 }
92209
@@ -97,6 +214,112 @@ var Domodule = function () {
97214 value : function find ( selector ) {
98215 return this . el . querySelectorAll ( selector ) ;
99216 }
217+ } , {
218+ key : 'findOne' ,
219+ value : function findOne ( selector ) {
220+ var found = this . find ( selector ) ;
221+
222+ if ( found . length ) {
223+ return found [ 0 ] ;
224+ }
225+
226+ return null ;
227+ }
228+ } , {
229+ key : 'findByName' ,
230+ value : function findByName ( name ) {
231+ return this . els [ name ] ;
232+ }
233+ } , {
234+ key : 'getOption' ,
235+ value : function getOption ( option ) {
236+ return this . options [ option ] ;
237+ }
238+
239+ // static methods can't access `this` so they go last
240+
241+ } ] , [ {
242+ key : 'getInstance' ,
243+ value : function getInstance ( name ) {
244+ if ( name instanceof Node ) {
245+ return Domodule . refs [ name . id ] ;
246+ }
247+
248+ return Domodule . refs [ name ] ;
249+ }
250+ } , {
251+ key : 'discover' ,
252+ value : function discover ( ) {
253+ var el = arguments . length <= 0 || arguments [ 0 ] === undefined ? 'body' : arguments [ 0 ] ;
254+
255+ var els = void 0 ;
256+
257+ if ( el instanceof Node ) {
258+ els = [ el ] ;
259+ } if ( Array . isArray ( el ) ) {
260+ els = el ;
261+ } else {
262+ els = document . querySelectorAll ( el ) ;
263+ }
264+
265+ var _iteratorNormalCompletion5 = true ;
266+ var _didIteratorError5 = false ;
267+ var _iteratorError5 = undefined ;
268+
269+ try {
270+ for ( var _iterator5 = els [ Symbol . iterator ] ( ) , _step5 ; ! ( _iteratorNormalCompletion5 = ( _step5 = _iterator5 . next ( ) ) . done ) ; _iteratorNormalCompletion5 = true ) {
271+ var matched = _step5 . value ;
272+
273+ var foundModules = matched . querySelectorAll ( '[data-module]' ) ;
274+
275+ var _iteratorNormalCompletion6 = true ;
276+ var _didIteratorError6 = false ;
277+ var _iteratorError6 = undefined ;
278+
279+ try {
280+ for ( var _iterator6 = foundModules [ Symbol . iterator ] ( ) , _step6 ; ! ( _iteratorNormalCompletion6 = ( _step6 = _iterator6 . next ( ) ) . done ) ; _iteratorNormalCompletion6 = true ) {
281+ var moduleEl = _step6 . value ;
282+
283+ var moduleName = moduleEl . dataset . module ;
284+
285+ if ( moduleName && typeof window [ moduleName ] === 'function' ) {
286+ if ( _typeof ( Domodule . refs ) === 'object' && typeof Domodule . refs [ moduleEl . id ] !== 'undefined' ) {
287+ continue ;
288+ } else {
289+ new window [ moduleName ] ( moduleEl ) ;
290+ }
291+ }
292+ }
293+ } catch ( err ) {
294+ _didIteratorError6 = true ;
295+ _iteratorError6 = err ;
296+ } finally {
297+ try {
298+ if ( ! _iteratorNormalCompletion6 && _iterator6 . return ) {
299+ _iterator6 . return ( ) ;
300+ }
301+ } finally {
302+ if ( _didIteratorError6 ) {
303+ throw _iteratorError6 ;
304+ }
305+ }
306+ }
307+ }
308+ } catch ( err ) {
309+ _didIteratorError5 = true ;
310+ _iteratorError5 = err ;
311+ } finally {
312+ try {
313+ if ( ! _iteratorNormalCompletion5 && _iterator5 . return ) {
314+ _iterator5 . return ( ) ;
315+ }
316+ } finally {
317+ if ( _didIteratorError5 ) {
318+ throw _iteratorError5 ;
319+ }
320+ }
321+ }
322+ }
100323 } ] ) ;
101324
102325 return Domodule ;
0 commit comments