UNPKG

3.02 kBJavaScriptView Raw
1import Change from './listener/change.js';
2import Submit from './listener/submit.js';
3import Input from './listener/input.js';
4import Reset from './listener/reset.js';
5import Component from './component.js';
6import Listener from './listener.js';
7import Batcher from './batcher.js';
8import Definer from './definer.js';
9import Fetcher from './fetcher.js';
10import Methods from './methods.js';
11import Utility from './utility.js';
12import Binder from './binder.js';
13import Loader from './loader.js';
14import Router from './router.js';
15import Model from './model.js';
16import Style from './style.js';
17import Path from './path.js';
18
19document.head.insertAdjacentHTML('afterbegin', '<style>:not(:defined){visibility:hidden;}o-router,o-router>:first-child{display:block;}</style>');
20
21const oSetup = document.querySelector('script[o-setup]');
22
23if (oSetup) {
24 Promise.resolve().then(function () {
25 const attribute = oSetup.getAttribute('o-setup');
26
27 if (!attribute) {
28 throw new Error('Oxe - attribute o-setup requires arguments');
29 }
30
31 const options = attribute.split(/\s+|\s*,+\s*/);
32
33 Loader.type = options[1] || 'esm';
34
35 return Loader.load(options[0]);
36 });
37}
38
39let SETUP = false;
40const GLOBAL = {};
41
42export default Object.freeze({
43
44 global: GLOBAL,
45 component: Component,
46 batcher: Batcher,
47 definer: Definer,
48 fetcher: Fetcher,
49 methods: Methods,
50 utility: Utility,
51 binder: Binder,
52 loader: Loader,
53 router: Router,
54 model: Model,
55 style: Style,
56 path: Path,
57
58 setup (options) {
59 const self = this;
60
61 if (SETUP) return;
62 else SETUP = true;
63
64 options = options || {};
65 options.listener = options.listener || {};
66
67 document.addEventListener('input', Listener.bind(null, options, Input), true);
68 document.addEventListener('reset', Listener.bind(null, options, Reset), true);
69 document.addEventListener('change', Listener.bind(null, options, Change), true);
70 document.addEventListener('submit', Listener.bind(null, options, Submit), true);
71
72 return Promise.all([
73 self.path.setup(options.path),
74 self.style.setup(options.style),
75 self.model.setup(options.model),
76 self.binder.setup(options.binder),
77 self.loader.setup(options.loader),
78 self.definer.setup(options.definer),
79 self.fetcher.setup(options.fetcher),
80 ]).then(function () {
81 if (options.listener.before) {
82 return options.listener.before();
83 }
84 }).then(function () {
85 if (options.component) {
86 return self.component.setup(options.component);
87 }
88 }).then(function () {
89 if (options.router) {
90 return self.router.setup(options.router);
91 }
92 }).then(function () {
93 if (options.listener.after) {
94 return options.listener.after();
95 }
96 });
97 }
98
99});