@onetype/framework 2.0.45 → 2.0.46
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/addons/core/assets/back/functions/import.js +3 -3
- package/addons/core/commands/front/directives/run.js +1 -1
- package/addons/core/commands/front/directives/submit.js +1 -1
- package/addons/render/directives/front/items/self/100-if.js +25 -22
- package/addons/render/directives/front/items/self/1000-render.js +36 -33
- package/addons/render/directives/front/items/self/110-show.js +23 -20
- package/addons/render/directives/front/items/self/160-slot.js +33 -30
- package/addons/render/directives/front/items/self/200-for.js +71 -68
- package/addons/render/directives/front/items/self/2000-base.js +36 -33
- package/addons/render/directives/front/items/self/500-click-outside.js +37 -34
- package/addons/render/directives/front/items/self/500-events.js +1 -1
- package/addons/render/directives/front/items/self/500-mouse-enter.js +1 -1
- package/addons/render/directives/front/items/self/500-mouse-leave.js +1 -1
- package/addons/render/directives/front/items/self/650-fetch.js +150 -149
- package/addons/render/directives/front/items/self/660-form.js +217 -219
- package/addons/render/directives/front/items/self/700-text.js +42 -39
- package/addons/render/directives/front/items/self/750-html.js +38 -35
- package/addons/render/directives/front/items/self/750-node.js +1 -1
- package/addons/render/elements/front/items/directives/element.js +2 -2
- package/addons/render/pages/front/items/directives/change.js +1 -1
- package/addons/render/transforms/js/items/self/transform.js +1 -1
- package/lib/boot/load.js +105 -0
- package/lib/load.js +2 -1
- package/lib/src/classes/addon/classes/item/mixins/get.js +12 -1
- package/lib/src/classes/addon/classes/item/mixins/set.js +24 -2
- package/lib/src/classes/addon/mixins/items.js +48 -4
- package/lib/src/mixins/addons.js +27 -29
- package/lib/src/mixins/dependencies.js +24 -17
- package/package.json +1 -1
- package/lib/events.js +0 -106
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
onetype.AddonReady('directives', (directives)
|
|
1
|
+
onetype.AddonReady('directives', function(directives)
|
|
2
2
|
{
|
|
3
3
|
directives.ItemAdd({
|
|
4
4
|
id: 'ot-element',
|
|
@@ -6,7 +6,7 @@ onetype.AddonReady('directives', (directives) =>
|
|
|
6
6
|
name: 'Element Load',
|
|
7
7
|
description: 'Load and render elements using custom tag syntax. Automatically detects <e-{name}> tags and renders corresponding elements.',
|
|
8
8
|
trigger: 'node',
|
|
9
|
-
order:
|
|
9
|
+
order: 2500,
|
|
10
10
|
strict: false,
|
|
11
11
|
type: '1',
|
|
12
12
|
code: function(data, item, compile, node, identifier)
|
package/lib/boot/load.js
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
const otboot =
|
|
2
|
+
{
|
|
3
|
+
ready: () =>
|
|
4
|
+
{
|
|
5
|
+
window.onetype.Emit('@document.ready');
|
|
6
|
+
},
|
|
7
|
+
|
|
8
|
+
load: () =>
|
|
9
|
+
{
|
|
10
|
+
window.onetype.Emit('@document.load');
|
|
11
|
+
},
|
|
12
|
+
|
|
13
|
+
resize: () =>
|
|
14
|
+
{
|
|
15
|
+
window.onetype.Emit('@window.resize', {
|
|
16
|
+
width: window.innerWidth,
|
|
17
|
+
height: window.innerHeight
|
|
18
|
+
});
|
|
19
|
+
},
|
|
20
|
+
|
|
21
|
+
scroll: () =>
|
|
22
|
+
{
|
|
23
|
+
window.onetype.Emit('@window.scroll', {
|
|
24
|
+
x: window.scrollX,
|
|
25
|
+
y: window.scrollY
|
|
26
|
+
});
|
|
27
|
+
},
|
|
28
|
+
|
|
29
|
+
visibility: () =>
|
|
30
|
+
{
|
|
31
|
+
window.onetype.Emit('@document.visibility', {
|
|
32
|
+
hidden: document.hidden,
|
|
33
|
+
state: document.visibilityState
|
|
34
|
+
});
|
|
35
|
+
},
|
|
36
|
+
|
|
37
|
+
beforeunload: () =>
|
|
38
|
+
{
|
|
39
|
+
window.onetype.Emit('@window.beforeunload');
|
|
40
|
+
},
|
|
41
|
+
|
|
42
|
+
focus: () =>
|
|
43
|
+
{
|
|
44
|
+
window.onetype.Emit('@window.focus');
|
|
45
|
+
},
|
|
46
|
+
|
|
47
|
+
blur: () =>
|
|
48
|
+
{
|
|
49
|
+
window.onetype.Emit('@window.blur');
|
|
50
|
+
},
|
|
51
|
+
|
|
52
|
+
orientation: () =>
|
|
53
|
+
{
|
|
54
|
+
window.onetype.Emit('@window.orientation', {
|
|
55
|
+
angle: screen.orientation?.angle || window.orientation,
|
|
56
|
+
type: screen.orientation?.type || 'unknown'
|
|
57
|
+
});
|
|
58
|
+
},
|
|
59
|
+
|
|
60
|
+
online: () =>
|
|
61
|
+
{
|
|
62
|
+
window.onetype.Emit('@navigator.online');
|
|
63
|
+
},
|
|
64
|
+
|
|
65
|
+
offline: () =>
|
|
66
|
+
{
|
|
67
|
+
window.onetype.Emit('@navigator.offline');
|
|
68
|
+
},
|
|
69
|
+
|
|
70
|
+
popstate: (event) =>
|
|
71
|
+
{
|
|
72
|
+
window.onetype.Emit('@history.popstate', {
|
|
73
|
+
state: event.state,
|
|
74
|
+
pathname: window.location.pathname
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
document.addEventListener('visibilitychange', otboot.visibility);
|
|
80
|
+
|
|
81
|
+
window.addEventListener('resize', otboot.resize);
|
|
82
|
+
window.addEventListener('scroll', otboot.scroll);
|
|
83
|
+
window.addEventListener('beforeunload', otboot.beforeunload);
|
|
84
|
+
window.addEventListener('focus', otboot.focus);
|
|
85
|
+
window.addEventListener('blur', otboot.blur);
|
|
86
|
+
window.addEventListener('orientationchange', otboot.orientation);
|
|
87
|
+
window.addEventListener('online', otboot.online);
|
|
88
|
+
window.addEventListener('offline', otboot.offline);
|
|
89
|
+
window.addEventListener('popstate', otboot.popstate);
|
|
90
|
+
|
|
91
|
+
if(document.readyState === 'loading')
|
|
92
|
+
{
|
|
93
|
+
document.addEventListener('DOMContentLoaded', otboot.ready);
|
|
94
|
+
window.addEventListener('load', otboot.load);
|
|
95
|
+
}
|
|
96
|
+
else if(document.readyState === 'interactive')
|
|
97
|
+
{
|
|
98
|
+
otboot.ready();
|
|
99
|
+
window.addEventListener('load', otboot.load);
|
|
100
|
+
}
|
|
101
|
+
else
|
|
102
|
+
{
|
|
103
|
+
otboot.ready();
|
|
104
|
+
otboot.load();
|
|
105
|
+
}
|
package/lib/load.js
CHANGED
|
@@ -3,7 +3,8 @@ import OneType from './src/onetype.js';
|
|
|
3
3
|
const onetype = new OneType();
|
|
4
4
|
|
|
5
5
|
/* Framework */
|
|
6
|
-
onetype.Assets('framework', import.meta.url, { js: { path: '.', exclude: ['load.js', 'styles'] } });
|
|
6
|
+
onetype.Assets('framework', import.meta.url, { js: { path: '.', exclude: ['load.js', 'styles', 'boot'] } });
|
|
7
|
+
onetype.Assets('boot', import.meta.url, { js: 'boot' });
|
|
7
8
|
onetype.Assets('styles', import.meta.url, { css: 'styles' });
|
|
8
9
|
|
|
9
10
|
/* Core */
|
|
@@ -53,7 +53,18 @@ const AddonItemGet =
|
|
|
53
53
|
|
|
54
54
|
if(callback)
|
|
55
55
|
{
|
|
56
|
-
this.addon.items.callbacks.get.forEach(callback =>
|
|
56
|
+
this.addon.items.callbacks.get.forEach(callback =>
|
|
57
|
+
{
|
|
58
|
+
try
|
|
59
|
+
{
|
|
60
|
+
callback(this, key, value);
|
|
61
|
+
}
|
|
62
|
+
catch(error)
|
|
63
|
+
{
|
|
64
|
+
this.addon.onetype.Error(500, 'Error in item get callback.');
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
|
|
57
68
|
this.addon.onetype.Emit('@addon.item.get', this, key, value);
|
|
58
69
|
}
|
|
59
70
|
|
|
@@ -40,7 +40,18 @@ const AddonItemSet =
|
|
|
40
40
|
|
|
41
41
|
if(callback)
|
|
42
42
|
{
|
|
43
|
-
this.addon.items.callbacks.modify.forEach(callback =>
|
|
43
|
+
this.addon.items.callbacks.modify.forEach(callback =>
|
|
44
|
+
{
|
|
45
|
+
try
|
|
46
|
+
{
|
|
47
|
+
callback(this, key, value, prevValue);
|
|
48
|
+
}
|
|
49
|
+
catch(error)
|
|
50
|
+
{
|
|
51
|
+
this.addon.onetype.Error(500, 'Error in item modify callback.');
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
|
|
44
55
|
this.addon.onetype.Emit('@addon.item.modify', this, key, value, prevValue);
|
|
45
56
|
}
|
|
46
57
|
|
|
@@ -48,7 +59,18 @@ const AddonItemSet =
|
|
|
48
59
|
|
|
49
60
|
if(callback)
|
|
50
61
|
{
|
|
51
|
-
this.addon.items.callbacks.modified.forEach(callback =>
|
|
62
|
+
this.addon.items.callbacks.modified.forEach(callback =>
|
|
63
|
+
{
|
|
64
|
+
try
|
|
65
|
+
{
|
|
66
|
+
callback(this, key, value, prevValue);
|
|
67
|
+
}
|
|
68
|
+
catch(error)
|
|
69
|
+
{
|
|
70
|
+
this.addon.onetype.Error(500, 'Error in item modified callback.');
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
|
|
52
74
|
this.addon.onetype.Emit('@addon.item.modified', this, key, value, prevValue);
|
|
53
75
|
}
|
|
54
76
|
},
|
|
@@ -79,7 +79,18 @@ const AddonItems =
|
|
|
79
79
|
|
|
80
80
|
if(callback)
|
|
81
81
|
{
|
|
82
|
-
this.items.callbacks.add.forEach(callback =>
|
|
82
|
+
this.items.callbacks.add.forEach(callback =>
|
|
83
|
+
{
|
|
84
|
+
try
|
|
85
|
+
{
|
|
86
|
+
callback(item);
|
|
87
|
+
}
|
|
88
|
+
catch(error)
|
|
89
|
+
{
|
|
90
|
+
this.onetype.Error(500, 'Error in item add callback.');
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
|
|
83
94
|
this.onetype.Emit('@addon.item.add', item);
|
|
84
95
|
}
|
|
85
96
|
|
|
@@ -92,7 +103,18 @@ const AddonItems =
|
|
|
92
103
|
|
|
93
104
|
if(callback)
|
|
94
105
|
{
|
|
95
|
-
this.items.callbacks.added.forEach(callback =>
|
|
106
|
+
this.items.callbacks.added.forEach(callback =>
|
|
107
|
+
{
|
|
108
|
+
try
|
|
109
|
+
{
|
|
110
|
+
callback(item);
|
|
111
|
+
}
|
|
112
|
+
catch(error)
|
|
113
|
+
{
|
|
114
|
+
this.onetype.Error(500, 'Error in item added callback.');
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
|
|
96
118
|
this.onetype.Emit('@addon.item.added', item);
|
|
97
119
|
}
|
|
98
120
|
|
|
@@ -132,7 +154,18 @@ const AddonItems =
|
|
|
132
154
|
|
|
133
155
|
if(callback)
|
|
134
156
|
{
|
|
135
|
-
this.items.callbacks.remove.forEach(callback =>
|
|
157
|
+
this.items.callbacks.remove.forEach(callback =>
|
|
158
|
+
{
|
|
159
|
+
try
|
|
160
|
+
{
|
|
161
|
+
callback(item);
|
|
162
|
+
}
|
|
163
|
+
catch(error)
|
|
164
|
+
{
|
|
165
|
+
this.onetype.Error(500, 'Error in item remove callback.');
|
|
166
|
+
}
|
|
167
|
+
});
|
|
168
|
+
|
|
136
169
|
this.onetype.Emit('@addon.item.remove', item);
|
|
137
170
|
}
|
|
138
171
|
|
|
@@ -140,7 +173,18 @@ const AddonItems =
|
|
|
140
173
|
|
|
141
174
|
if(callback)
|
|
142
175
|
{
|
|
143
|
-
this.items.callbacks.removed.forEach(callback =>
|
|
176
|
+
this.items.callbacks.removed.forEach(callback =>
|
|
177
|
+
{
|
|
178
|
+
try
|
|
179
|
+
{
|
|
180
|
+
callback(item);
|
|
181
|
+
}
|
|
182
|
+
catch(error)
|
|
183
|
+
{
|
|
184
|
+
this.onetype.Error(500, 'Error in item removed callback.');
|
|
185
|
+
}
|
|
186
|
+
});
|
|
187
|
+
|
|
144
188
|
this.onetype.Emit('@addon.item.removed', item);
|
|
145
189
|
}
|
|
146
190
|
},
|
package/lib/src/mixins/addons.js
CHANGED
|
@@ -26,15 +26,19 @@ const OneTypeAddons =
|
|
|
26
26
|
|
|
27
27
|
if(callback)
|
|
28
28
|
{
|
|
29
|
-
|
|
29
|
+
this.addons.callbacks.add.forEach(callback =>
|
|
30
30
|
{
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
31
|
+
try
|
|
32
|
+
{
|
|
33
|
+
callback(addon);
|
|
34
|
+
}
|
|
35
|
+
catch(error)
|
|
36
|
+
{
|
|
37
|
+
this.Error(500, 'Error while performing addon add callback.', {addon: name});
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
this.Emit('@addon.add', addon);
|
|
38
42
|
}
|
|
39
43
|
|
|
40
44
|
return this.AddonGet(name);
|
|
@@ -70,15 +74,19 @@ const OneTypeAddons =
|
|
|
70
74
|
|
|
71
75
|
if(callback)
|
|
72
76
|
{
|
|
73
|
-
|
|
77
|
+
this.addons.callbacks.remove.forEach(callback =>
|
|
74
78
|
{
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
79
|
+
try
|
|
80
|
+
{
|
|
81
|
+
callback(addon);
|
|
82
|
+
}
|
|
83
|
+
catch(error)
|
|
84
|
+
{
|
|
85
|
+
this.Error(500, 'Error while performing addon remove callback.', {addon: name});
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
this.Emit('@addon.remove', addon);
|
|
82
90
|
}
|
|
83
91
|
|
|
84
92
|
addon.ItemsRemove(callback);
|
|
@@ -103,30 +111,20 @@ const OneTypeAddons =
|
|
|
103
111
|
this.addons.callbacks[name].push(callback);
|
|
104
112
|
},
|
|
105
113
|
|
|
106
|
-
AddonReady(name, callback
|
|
114
|
+
AddonReady(name, callback)
|
|
107
115
|
{
|
|
108
116
|
const addon = this.AddonGet(name);
|
|
109
117
|
|
|
110
118
|
if(addon)
|
|
111
119
|
{
|
|
112
|
-
|
|
113
|
-
{
|
|
114
|
-
return callback(addon);
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
return setTimeout(() => callback(addon));
|
|
120
|
+
return callback(addon);
|
|
118
121
|
}
|
|
119
122
|
|
|
120
123
|
this.AddonOn('add', (addon) =>
|
|
121
124
|
{
|
|
122
125
|
if(addon.GetName() === name)
|
|
123
126
|
{
|
|
124
|
-
|
|
125
|
-
{
|
|
126
|
-
return callback(addon);
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
return setTimeout(() => callback(addon));
|
|
127
|
+
callback(addon);
|
|
130
128
|
}
|
|
131
129
|
})
|
|
132
130
|
}
|
|
@@ -36,18 +36,21 @@ const OneTypeDependencies =
|
|
|
36
36
|
|
|
37
37
|
if(callback)
|
|
38
38
|
{
|
|
39
|
-
|
|
39
|
+
this.dependencies.callbacks.add.forEach(callback =>
|
|
40
40
|
{
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
41
|
+
try
|
|
42
|
+
{
|
|
43
|
+
callback(dependency);
|
|
44
|
+
}
|
|
45
|
+
catch(error)
|
|
46
|
+
{
|
|
47
|
+
this.Error(500, 'Error while performing dependency add callback.', {name});
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
this.Emit('@dependency.add', dependency);
|
|
48
52
|
}
|
|
49
53
|
|
|
50
|
-
|
|
51
54
|
return this;
|
|
52
55
|
},
|
|
53
56
|
|
|
@@ -67,15 +70,19 @@ const OneTypeDependencies =
|
|
|
67
70
|
|
|
68
71
|
if(callback)
|
|
69
72
|
{
|
|
70
|
-
|
|
73
|
+
this.dependencies.callbacks.remove.forEach(callback =>
|
|
71
74
|
{
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
75
|
+
try
|
|
76
|
+
{
|
|
77
|
+
callback(dependency);
|
|
78
|
+
}
|
|
79
|
+
catch(error)
|
|
80
|
+
{
|
|
81
|
+
this.Error(500, 'Error while performing dependency remove callback.', {name});
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
this.Emit('@dependency.remove', dependency);
|
|
79
86
|
}
|
|
80
87
|
|
|
81
88
|
delete this.dependencies.items[name];
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@onetype/framework",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.46",
|
|
4
4
|
"description": "OneType Framework — Full-stack isomorphic JavaScript framework built from scratch. One addon abstraction powers databases, servers, commands, pages, directives, queues, and more.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "lib/load.js",
|
package/lib/events.js
DELETED
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
const handleReady = () =>
|
|
2
|
-
{
|
|
3
|
-
window.onetype.Emit('@document.ready');
|
|
4
|
-
};
|
|
5
|
-
|
|
6
|
-
const handleLoad = () =>
|
|
7
|
-
{
|
|
8
|
-
window.onetype.Emit('@document.load');
|
|
9
|
-
};
|
|
10
|
-
|
|
11
|
-
const handleResize = () =>
|
|
12
|
-
{
|
|
13
|
-
window.onetype.Emit('@window.resize',
|
|
14
|
-
{
|
|
15
|
-
width: window.innerWidth,
|
|
16
|
-
height: window.innerHeight
|
|
17
|
-
});
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
const handleScroll = () =>
|
|
21
|
-
{
|
|
22
|
-
window.onetype.Emit('@window.scroll',
|
|
23
|
-
{
|
|
24
|
-
x: window.scrollX,
|
|
25
|
-
y: window.scrollY
|
|
26
|
-
});
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
const handleVisibility = () =>
|
|
30
|
-
{
|
|
31
|
-
window.onetype.Emit('@document.visibility',
|
|
32
|
-
{
|
|
33
|
-
hidden: document.hidden,
|
|
34
|
-
state: document.visibilityState
|
|
35
|
-
});
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
const handleBeforeUnload = () =>
|
|
39
|
-
{
|
|
40
|
-
window.onetype.Emit('@window.beforeunload');
|
|
41
|
-
};
|
|
42
|
-
|
|
43
|
-
const handleFocus = () =>
|
|
44
|
-
{
|
|
45
|
-
window.onetype.Emit('@window.focus');
|
|
46
|
-
};
|
|
47
|
-
|
|
48
|
-
const handleBlur = () =>
|
|
49
|
-
{
|
|
50
|
-
window.onetype.Emit('@window.blur');
|
|
51
|
-
};
|
|
52
|
-
|
|
53
|
-
const handleOrientation = () =>
|
|
54
|
-
{
|
|
55
|
-
window.onetype.Emit('@window.orientation',
|
|
56
|
-
{
|
|
57
|
-
angle: screen.orientation?.angle || window.orientation,
|
|
58
|
-
type: screen.orientation?.type || 'unknown'
|
|
59
|
-
});
|
|
60
|
-
};
|
|
61
|
-
|
|
62
|
-
const handleOnline = () =>
|
|
63
|
-
{
|
|
64
|
-
window.onetype.Emit('@navigator.online');
|
|
65
|
-
};
|
|
66
|
-
|
|
67
|
-
const handleOffline = () =>
|
|
68
|
-
{
|
|
69
|
-
window.onetype.Emit('@navigator.offline');
|
|
70
|
-
};
|
|
71
|
-
|
|
72
|
-
const handlePopstate = (event) =>
|
|
73
|
-
{
|
|
74
|
-
window.onetype.Emit('@history.popstate',
|
|
75
|
-
{
|
|
76
|
-
state: event.state,
|
|
77
|
-
pathname: window.location.pathname
|
|
78
|
-
});
|
|
79
|
-
};
|
|
80
|
-
|
|
81
|
-
if (document.readyState === 'loading')
|
|
82
|
-
{
|
|
83
|
-
document.addEventListener('DOMContentLoaded', handleReady);
|
|
84
|
-
window.addEventListener('load', handleLoad);
|
|
85
|
-
}
|
|
86
|
-
else if (document.readyState === 'interactive')
|
|
87
|
-
{
|
|
88
|
-
handleReady();
|
|
89
|
-
window.addEventListener('load', handleLoad);
|
|
90
|
-
}
|
|
91
|
-
else
|
|
92
|
-
{
|
|
93
|
-
handleReady();
|
|
94
|
-
handleLoad();
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
window.addEventListener('resize', handleResize);
|
|
98
|
-
window.addEventListener('scroll', handleScroll);
|
|
99
|
-
document.addEventListener('visibilitychange', handleVisibility);
|
|
100
|
-
window.addEventListener('beforeunload', handleBeforeUnload);
|
|
101
|
-
window.addEventListener('focus', handleFocus);
|
|
102
|
-
window.addEventListener('blur', handleBlur);
|
|
103
|
-
window.addEventListener('orientationchange', handleOrientation);
|
|
104
|
-
window.addEventListener('online', handleOnline);
|
|
105
|
-
window.addEventListener('offline', handleOffline);
|
|
106
|
-
window.addEventListener('popstate', handlePopstate);
|