vaderjs 1.5.7 → 1.5.9
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/index.ts +59 -22
- package/package.json +2 -3
package/index.ts
CHANGED
|
@@ -73,15 +73,25 @@ export const useEffect = (callback:any, dependencies: any[]) => {
|
|
|
73
73
|
// make a switch function component
|
|
74
74
|
|
|
75
75
|
|
|
76
|
-
|
|
77
|
-
|
|
76
|
+
export const A = (props: any, children: any) => {
|
|
77
|
+
function handleClick(e) {
|
|
78
|
+
e.preventDefault();
|
|
79
|
+
window.history.pushState({}, "", props.href);
|
|
80
|
+
window.dispatchEvent(new PopStateEvent("popstate"));
|
|
81
|
+
window.location.reload();
|
|
82
|
+
}
|
|
78
83
|
return {
|
|
79
|
-
type:
|
|
80
|
-
props:{},
|
|
84
|
+
type: "a",
|
|
85
|
+
props: {...props, onClick: handleClick},
|
|
81
86
|
children: children || [],
|
|
82
87
|
}
|
|
83
88
|
}
|
|
84
89
|
|
|
90
|
+
|
|
91
|
+
export const Fragment = (props: any, children: any) => {
|
|
92
|
+
return children[0];
|
|
93
|
+
}
|
|
94
|
+
|
|
85
95
|
globalThis.Fragment = Fragment;
|
|
86
96
|
|
|
87
97
|
/**
|
|
@@ -142,15 +152,19 @@ export function Match({ when, children }) {
|
|
|
142
152
|
* @description - Manage state and forceupdate specific affected elements
|
|
143
153
|
* @param key
|
|
144
154
|
* @param initialState
|
|
145
|
-
* @
|
|
155
|
+
* @param persist - persist state on reload
|
|
156
|
+
* @returns {()=> T, (newState: any, Element: string) => void, key}
|
|
146
157
|
*/
|
|
147
|
-
export const useState = <T>(initialState: T) => {
|
|
158
|
+
export const useState = <T>(initialState: T, persist: false) => {
|
|
148
159
|
const setState = (newState: T) => {
|
|
149
160
|
initialState = newState;
|
|
150
161
|
}
|
|
162
|
+
/**
|
|
163
|
+
* @returns {T}
|
|
164
|
+
*/
|
|
151
165
|
const getVal = () => {
|
|
152
|
-
return initialState
|
|
153
|
-
}
|
|
166
|
+
return initialState as T
|
|
167
|
+
}
|
|
154
168
|
|
|
155
169
|
return [getVal, setState];
|
|
156
170
|
}
|
|
@@ -201,7 +215,7 @@ export class Component {
|
|
|
201
215
|
}
|
|
202
216
|
}
|
|
203
217
|
}
|
|
204
|
-
useState(key, defaultValue) {
|
|
218
|
+
useState(key, defaultValue, persist = false) {
|
|
205
219
|
if (typeof window === "undefined")
|
|
206
220
|
return [defaultValue, () => {
|
|
207
221
|
}];
|
|
@@ -216,7 +230,7 @@ export class Component {
|
|
|
216
230
|
if (!window["listener" + key] && !isServer) {
|
|
217
231
|
window["listener" + key] = true;
|
|
218
232
|
window.addEventListener("beforeunload", () => {
|
|
219
|
-
sessionStorage.removeItem("state_" + key);
|
|
233
|
+
!persist && sessionStorage.removeItem("state_" + key);
|
|
220
234
|
});
|
|
221
235
|
}
|
|
222
236
|
const setValue = (newValue) => {
|
|
@@ -262,30 +276,54 @@ export class Component {
|
|
|
262
276
|
update: (oldElement, newElement) => {
|
|
263
277
|
|
|
264
278
|
if (this.Reconciler.shouldUpdate(oldElement, newElement)) {
|
|
265
|
-
|
|
266
|
-
|
|
279
|
+
let part = this.Reconciler.shouldUpdate(oldElement, newElement, true);
|
|
280
|
+
if (part === true) {
|
|
281
|
+
if (oldElement.nodeType === 3) {
|
|
282
|
+
oldElement.nodeValue = newElement.nodeValue;
|
|
283
|
+
} else {
|
|
284
|
+
oldElement.innerHTML = newElement.innerHTML;
|
|
285
|
+
// swap attributes
|
|
286
|
+
for (let i = 0; i < newElement.attributes.length; i++) {
|
|
287
|
+
let attr = newElement.attributes[i];
|
|
288
|
+
oldElement.setAttribute(attr.name, attr.value);
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
} else if (part.type === "attribute") {
|
|
292
|
+
oldElement.setAttribute(part.name, part.value);
|
|
293
|
+
}
|
|
267
294
|
} else {
|
|
268
295
|
for (let i = 0; i < newElement.childNodes.length; i++) {
|
|
269
|
-
this.Reconciler.update(oldElement.childNodes[i], newElement.childNodes[i]);
|
|
296
|
+
this.Reconciler.update(oldElement.childNodes[i], newElement.childNodes[i], true);
|
|
270
297
|
}
|
|
271
298
|
}
|
|
272
299
|
},
|
|
273
|
-
shouldUpdate(oldElement, newElement) {
|
|
300
|
+
shouldUpdate(oldElement, newElement, isChild = false) {
|
|
274
301
|
if (oldElement.nodeType !== newElement.nodeType) {
|
|
275
|
-
|
|
302
|
+
// and both do not contain same text
|
|
303
|
+
|
|
304
|
+
return oldElement.innerHTML !== newElement.innerHTML ? { type: 'innerHTML' } : true;
|
|
276
305
|
}
|
|
277
306
|
if (oldElement.nodeType === 3 && newElement.nodeType === 3) {
|
|
278
|
-
|
|
307
|
+
if (oldElement.nodeValue !== newElement.nodeValue) {
|
|
308
|
+
return true;
|
|
309
|
+
}
|
|
279
310
|
}
|
|
280
311
|
if (oldElement.nodeName !== newElement.nodeName) {
|
|
281
312
|
return true;
|
|
282
|
-
}
|
|
283
|
-
if (oldElement.innerHTML !== newElement.innerHTML) {
|
|
284
|
-
return true;
|
|
285
|
-
}
|
|
313
|
+
}
|
|
286
314
|
if (oldElement.childNodes.length !== newElement.childNodes.length) {
|
|
287
315
|
return true;
|
|
288
316
|
}
|
|
317
|
+
if(newElement.attributes){
|
|
318
|
+
for (let i = 0; i < newElement.attributes.length; i++) {
|
|
319
|
+
let attr = newElement.attributes[i];
|
|
320
|
+
if (oldElement.getAttribute(attr.name) !== attr.value) {
|
|
321
|
+
return { type: "attribute", name: attr.name, value: attr.value };
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
|
|
289
327
|
return false;
|
|
290
328
|
}
|
|
291
329
|
};
|
|
@@ -345,8 +383,7 @@ export class Component {
|
|
|
345
383
|
} else if (typeof child === "object") {
|
|
346
384
|
el.appendChild(this.parseToElement(child));
|
|
347
385
|
} else {
|
|
348
|
-
let span = document.
|
|
349
|
-
span.innerHTML = child;
|
|
386
|
+
let span = document.createTextNode(child)
|
|
350
387
|
el.appendChild(span);
|
|
351
388
|
}
|
|
352
389
|
}
|
package/package.json
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vaderjs",
|
|
3
|
-
"version": "1.5.
|
|
3
|
+
"version": "1.5.9",
|
|
4
4
|
"description": "A simple and powerful JavaScript library for building modern web applications.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"vaderjs": "./main.js"
|
|
7
7
|
},
|
|
8
8
|
"dependencies": {
|
|
9
|
-
"ansi-colors": "latest"
|
|
10
|
-
"vaderjs": "^1.5.0"
|
|
9
|
+
"ansi-colors": "latest"
|
|
11
10
|
}
|
|
12
11
|
}
|