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.
Files changed (2) hide show
  1. package/index.ts +59 -22
  2. 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
- export const Fragment = (props: any, children: any) => {
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: isServer ? null : "div",
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
- * @returns {state, (newState: any, Element: string) => void, key}
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
- console.log("should update");
266
- oldElement.replaceWith(newElement);
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
- return true;
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
- return oldElement.textContent !== newElement.textContent;
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.createElement("span");
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.7",
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
  }