1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 | import util from './util.js';
|
18 | import internal from './internal/index.js';
|
19 |
|
20 |
|
21 | function loadPage({page, parent, params = {}}, done, error) {
|
22 | internal.getPageHTMLAsync(page).then(html => {
|
23 | const pageElement = util.createElement(html);
|
24 | parent.appendChild(pageElement);
|
25 |
|
26 | done(pageElement);
|
27 | }).catch(e => error(e));
|
28 | }
|
29 |
|
30 | function unloadPage(element) {
|
31 | if (element._destroy instanceof Function) {
|
32 | element._destroy();
|
33 | } else {
|
34 | element.remove();
|
35 | }
|
36 | }
|
37 |
|
38 | export class PageLoader {
|
39 | |
40 |
|
41 |
|
42 | constructor(loader, unloader) {
|
43 | this._loader = loader instanceof Function ? loader : loadPage;
|
44 | this._unloader = unloader instanceof Function ? unloader : unloadPage;
|
45 | }
|
46 |
|
47 | |
48 |
|
49 |
|
50 | set internalLoader(fn) {
|
51 | if (!(fn instanceof Function)) {
|
52 | throw Error('First parameter must be an instance of Function');
|
53 | }
|
54 | this._loader = fn;
|
55 | }
|
56 |
|
57 | get internalLoader() {
|
58 | return this._loader;
|
59 | }
|
60 |
|
61 | |
62 |
|
63 |
|
64 |
|
65 |
|
66 |
|
67 |
|
68 | load({page, parent, params = {}}, done, error) {
|
69 | this._loader({page, parent, params}, pageElement => {
|
70 | if (!(pageElement instanceof Element)) {
|
71 | throw Error('pageElement must be an instance of Element.');
|
72 | }
|
73 |
|
74 | done(pageElement);
|
75 | }, error);
|
76 | }
|
77 |
|
78 | unload(pageElement) {
|
79 | if (!(pageElement instanceof Element)) {
|
80 | throw Error('pageElement must be an instance of Element.');
|
81 | }
|
82 |
|
83 | this._unloader(pageElement);
|
84 | }
|
85 | }
|
86 |
|
87 | export const defaultPageLoader = new PageLoader();
|
88 |
|
89 | export const instantPageLoader = new PageLoader(
|
90 | function({page, parent, params = {}}, done) {
|
91 | const element = util.createElement(page.trim());
|
92 | parent.appendChild(element);
|
93 |
|
94 | done(element);
|
95 | },
|
96 | unloadPage
|
97 | );
|