@esportsplus/template 0.20.4 → 0.21.0

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.
@@ -1,7 +1,11 @@
1
+ import { STATE_HYDRATING, STATE_NONE, STATE_WAITING } from './constants.js';
1
2
  import { Attributes, Element } from './types.js';
3
+ type State = typeof STATE_HYDRATING | typeof STATE_NONE | typeof STATE_WAITING;
4
+ declare const set: (element: Element, name: string, value: unknown, state?: State) => void;
2
5
  declare const spread: (element: Element, value: Attributes | Attributes[]) => void;
3
6
  declare const _default: {
7
+ set: (element: Element, name: string, value: unknown, state?: State) => void;
4
8
  spread: (element: Element, value: Attributes | Attributes[]) => void;
5
9
  };
6
10
  export default _default;
7
- export { spread };
11
+ export { set, spread };
@@ -102,7 +102,24 @@ function schedule(ctx, element, name, state, value) {
102
102
  scheduled = true;
103
103
  raf.add(task);
104
104
  }
105
- function set(element, name, value, state) {
105
+ function task() {
106
+ let context, n = queue.length;
107
+ while ((context = queue.next()) && n--) {
108
+ let { element, updates } = context;
109
+ for (let name in updates) {
110
+ apply(element, name, updates[name]);
111
+ }
112
+ context.updates = {};
113
+ context.updating = false;
114
+ }
115
+ if (queue.length) {
116
+ raf.add(task);
117
+ }
118
+ else {
119
+ scheduled = false;
120
+ }
121
+ }
122
+ const set = (element, name, value, state = STATE_HYDRATING) => {
106
123
  let fn = name === 'class' || name === 'style' ? list : property, type = typeof value;
107
124
  if (type === 'function') {
108
125
  if (name.startsWith('on')) {
@@ -144,24 +161,7 @@ function set(element, name, value, state) {
144
161
  return;
145
162
  }
146
163
  fn(null, element, null, name, value, state);
147
- }
148
- function task() {
149
- let context, n = queue.length;
150
- while ((context = queue.next()) && n--) {
151
- let { element, updates } = context;
152
- for (let name in updates) {
153
- apply(element, name, updates[name]);
154
- }
155
- context.updates = {};
156
- context.updating = false;
157
- }
158
- if (queue.length) {
159
- raf.add(task);
160
- }
161
- else {
162
- scheduled = false;
163
- }
164
- }
164
+ };
165
165
  const spread = function (element, value) {
166
166
  if (isObject(value)) {
167
167
  for (let name in value) {
@@ -169,7 +169,7 @@ const spread = function (element, value) {
169
169
  if (v == null || v === false || v === '') {
170
170
  continue;
171
171
  }
172
- set(element, name, v, STATE_HYDRATING);
172
+ set(element, name, v);
173
173
  }
174
174
  }
175
175
  else if (isArray(value)) {
@@ -178,5 +178,5 @@ const spread = function (element, value) {
178
178
  }
179
179
  }
180
180
  };
181
- export default { spread };
182
- export { spread };
181
+ export default { set, spread };
182
+ export { set, spread };
@@ -4,6 +4,7 @@ import { addEventListener } from '../utilities/element.js';
4
4
  import { parentElement } from '../utilities/node.js';
5
5
  import { ondisconnect } from '../slot/cleanup.js';
6
6
  import onconnect from './onconnect.js';
7
+ import onresize from './onresize.js';
7
8
  import ontick from './ontick.js';
8
9
  let capture = new Set(['onblur', 'onfocus', 'onscroll']), controllers = new Map(), keys = {}, passive = new Set([
9
10
  'onmousedown', 'onmouseenter', 'onmouseleave', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onmousewheel',
@@ -65,6 +66,9 @@ export default (element, event, listener) => {
65
66
  case 'ondisconnect':
66
67
  ondisconnect(element, () => listener(element));
67
68
  return;
69
+ case 'onresize':
70
+ onresize(element, listener);
71
+ return;
68
72
  case 'ontick':
69
73
  ontick(element, listener);
70
74
  return;
@@ -0,0 +1,3 @@
1
+ import { Element } from '../types.js';
2
+ declare const _default: (element: Element, listener: Function) => void;
3
+ export default _default;
@@ -0,0 +1,22 @@
1
+ let listeners = new Map(), registered = false;
2
+ function onresize() {
3
+ for (let [element, fn] of listeners) {
4
+ if (element.isConnected) {
5
+ fn(element);
6
+ }
7
+ else {
8
+ listeners.delete(element);
9
+ }
10
+ }
11
+ if (listeners.size === 0) {
12
+ window.removeEventListener('resize', onresize);
13
+ registered = false;
14
+ }
15
+ }
16
+ export default (element, listener) => {
17
+ listeners.set(element, listener);
18
+ if (!registered) {
19
+ window.addEventListener('resize', onresize);
20
+ registered = true;
21
+ }
22
+ };
package/package.json CHANGED
@@ -14,7 +14,7 @@
14
14
  "private": false,
15
15
  "type": "module",
16
16
  "types": "./build/index.d.ts",
17
- "version": "0.20.4",
17
+ "version": "0.21.0",
18
18
  "scripts": {
19
19
  "build": "tsc && tsc-alias",
20
20
  "-": "-"
package/src/attributes.ts CHANGED
@@ -169,7 +169,31 @@ function schedule(ctx: Context | null, element: Element, name: string, state: St
169
169
  raf.add(task);
170
170
  }
171
171
 
172
- function set(element: Element, name: string, value: unknown, state: State) {
172
+ function task() {
173
+ let context,
174
+ n = queue.length;
175
+
176
+ while ((context = queue.next()) && n--) {
177
+ let { element, updates } = context;
178
+
179
+ for (let name in updates) {
180
+ apply(element, name, updates[name]);
181
+ }
182
+
183
+ context.updates = {};
184
+ context.updating = false;
185
+ }
186
+
187
+ if (queue.length) {
188
+ raf.add(task);
189
+ }
190
+ else {
191
+ scheduled = false;
192
+ }
193
+ }
194
+
195
+
196
+ const set = (element: Element, name: string, value: unknown, state: State = STATE_HYDRATING) => {
173
197
  let fn = name === 'class' || name === 'style' ? list : property,
174
198
  type = typeof value;
175
199
 
@@ -233,31 +257,7 @@ function set(element: Element, name: string, value: unknown, state: State) {
233
257
  }
234
258
 
235
259
  fn(null, element, null, name, value, state);
236
- }
237
-
238
- function task() {
239
- let context,
240
- n = queue.length;
241
-
242
- while ((context = queue.next()) && n--) {
243
- let { element, updates } = context;
244
-
245
- for (let name in updates) {
246
- apply(element, name, updates[name]);
247
- }
248
-
249
- context.updates = {};
250
- context.updating = false;
251
- }
252
-
253
- if (queue.length) {
254
- raf.add(task);
255
- }
256
- else {
257
- scheduled = false;
258
- }
259
- }
260
-
260
+ };
261
261
 
262
262
  const spread = function (element: Element, value: Attributes | Attributes[]) {
263
263
  if (isObject(value)) {
@@ -268,7 +268,7 @@ const spread = function (element: Element, value: Attributes | Attributes[]) {
268
268
  continue;
269
269
  }
270
270
 
271
- set(element, name, v, STATE_HYDRATING);
271
+ set(element, name, v);
272
272
  }
273
273
  }
274
274
  else if (isArray(value)) {
@@ -279,5 +279,5 @@ const spread = function (element: Element, value: Attributes | Attributes[]) {
279
279
  };
280
280
 
281
281
 
282
- export default { spread };
283
- export { spread };
282
+ export default { set, spread };
283
+ export { set, spread };
@@ -5,6 +5,7 @@ import { addEventListener } from '~/utilities/element';
5
5
  import { parentElement } from '~/utilities/node';
6
6
  import { ondisconnect } from '~/slot/cleanup';
7
7
  import onconnect from './onconnect';
8
+ import onresize from './onresize';
8
9
  import ontick from './ontick';
9
10
 
10
11
 
@@ -97,6 +98,10 @@ export default (element: Element, event: `on${string}`, listener: Function): voi
97
98
  ondisconnect(element, () => listener(element));
98
99
  return;
99
100
 
101
+ case 'onresize':
102
+ onresize(element, listener);
103
+ return;
104
+
100
105
  case 'ontick':
101
106
  ontick(element, listener);
102
107
  return;
@@ -0,0 +1,32 @@
1
+ import { Element } from '~/types';
2
+
3
+
4
+ let listeners = new Map<Element, Function>(),
5
+ registered = false;
6
+
7
+
8
+ function onresize() {
9
+ for (let [element, fn] of listeners) {
10
+ if (element.isConnected) {
11
+ fn(element);
12
+ }
13
+ else {
14
+ listeners.delete(element);
15
+ }
16
+ }
17
+
18
+ if (listeners.size === 0) {
19
+ window.removeEventListener('resize', onresize);
20
+ registered = false;
21
+ }
22
+ }
23
+
24
+
25
+ export default (element: Element, listener: Function) => {
26
+ listeners.set(element, listener);
27
+
28
+ if (!registered) {
29
+ window.addEventListener('resize', onresize);
30
+ registered = true;
31
+ }
32
+ };