Skip to content

Commit 4555d1b

Browse files
committed
Release 1.0.0
1 parent 202e684 commit 4555d1b

2 files changed

Lines changed: 272 additions & 49 deletions

File tree

dist/domodule.js

Lines changed: 271 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,92 +1,209 @@
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+
35
var _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

57
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
68

9+
/* eslint no-new:0 */
10+
711
var 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;

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "domodule",
3-
"version": "0.0.0",
3+
"version": "1.0.0",
44
"description": "Class based modules",
55
"main": "lib/domodule.js",
66
"keywords": [

0 commit comments

Comments
 (0)