@mantou/gem 1.7.8 → 1.7.10

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 (69) hide show
  1. package/dist/gem.es.js +246 -113
  2. package/dist/gem.umd.js +24 -24
  3. package/elements/base/dialog.d.ts.map +1 -1
  4. package/elements/base/dialog.js +1 -1
  5. package/elements/base/dialog.js.map +1 -1
  6. package/elements/base/gesture.d.ts.map +1 -1
  7. package/elements/base/gesture.js +7 -1
  8. package/elements/base/gesture.js.map +1 -1
  9. package/elements/base/link.d.ts.map +1 -1
  10. package/elements/base/link.js +8 -4
  11. package/elements/base/link.js.map +1 -1
  12. package/elements/base/modal-factory.d.ts +28 -6
  13. package/elements/base/modal-factory.d.ts.map +1 -1
  14. package/elements/base/reflect.d.ts +8 -0
  15. package/elements/base/reflect.d.ts.map +1 -1
  16. package/elements/base/reflect.js +36 -9
  17. package/elements/base/reflect.js.map +1 -1
  18. package/elements/base/route.d.ts +38 -10
  19. package/elements/base/route.d.ts.map +1 -1
  20. package/elements/base/route.js +119 -73
  21. package/elements/base/route.js.map +1 -1
  22. package/elements/base/title.d.ts.map +1 -1
  23. package/elements/base/title.js +8 -2
  24. package/elements/base/title.js.map +1 -1
  25. package/helper/i18n.d.ts +8 -1
  26. package/helper/i18n.d.ts.map +1 -1
  27. package/helper/i18n.js +7 -3
  28. package/helper/i18n.js.map +1 -1
  29. package/helper/logger.d.ts +9 -0
  30. package/helper/logger.d.ts.map +1 -0
  31. package/helper/logger.js +16 -0
  32. package/helper/logger.js.map +1 -0
  33. package/helper/ssr-shim.d.ts.map +1 -1
  34. package/helper/ssr-shim.js +12 -4
  35. package/helper/ssr-shim.js.map +1 -1
  36. package/lib/element.d.ts +5 -5
  37. package/lib/element.d.ts.map +1 -1
  38. package/lib/element.js +40 -14
  39. package/lib/element.js.map +1 -1
  40. package/lib/history.d.ts +3 -2
  41. package/lib/history.d.ts.map +1 -1
  42. package/lib/history.js +22 -9
  43. package/lib/history.js.map +1 -1
  44. package/lib/utils.d.ts +2 -1
  45. package/lib/utils.d.ts.map +1 -1
  46. package/lib/utils.js +10 -8
  47. package/lib/utils.js.map +1 -1
  48. package/lib/version.d.ts +1 -1
  49. package/lib/version.d.ts.map +1 -1
  50. package/lib/version.js +1 -1
  51. package/lib/version.js.map +1 -1
  52. package/package.json +2 -2
  53. package/src/elements/base/dialog.ts +4 -1
  54. package/src/elements/base/gesture.ts +6 -1
  55. package/src/elements/base/link.ts +8 -4
  56. package/src/elements/base/reflect.ts +43 -9
  57. package/src/elements/base/route.ts +130 -73
  58. package/src/elements/base/title.ts +9 -2
  59. package/src/helper/i18n.ts +12 -4
  60. package/src/helper/logger.ts +21 -0
  61. package/src/helper/ssr-shim.ts +14 -4
  62. package/src/lib/element.ts +46 -17
  63. package/src/lib/history.ts +30 -12
  64. package/src/lib/utils.ts +16 -9
  65. package/src/lib/version.ts +1 -1
  66. package/src/test/elements/link.test.ts +15 -0
  67. package/src/test/elements/reflect.test.ts +27 -0
  68. package/src/test/elements/title.test.ts +25 -0
  69. package/src/test/utils.test.ts +14 -0
package/src/lib/utils.ts CHANGED
@@ -32,14 +32,24 @@ export function addMicrotaskToStack(func: () => void) {
32
32
  microtaskStack.push(func);
33
33
  }
34
34
 
35
+ // 不编码 hash 用于比较
35
36
  export function absoluteLocation(currentPath = '', relativePath = '') {
36
37
  const { pathname, search, hash } = new URL(relativePath, location.origin + currentPath);
37
- return pathname + search + hash;
38
+ return pathname + search + decodeURIComponent(hash);
38
39
  }
39
40
 
40
- // eslint-disable-next-line @typescript-eslint/ban-types
41
41
  export type NonPrimitive = object;
42
42
 
43
+ export function addListener<T extends EventTarget, A extends Parameters<T['addEventListener']>>(
44
+ target: T,
45
+ type: A[0],
46
+ listener: A[1],
47
+ options?: A[2],
48
+ ) {
49
+ target.addEventListener(type, listener, options);
50
+ return () => target.removeEventListener(type, listener, options);
51
+ }
52
+
43
53
  interface LinkedListEventMap {
44
54
  start: Event;
45
55
  end: Event;
@@ -49,7 +59,7 @@ export interface LinkedListItem<T> {
49
59
  prev?: LinkedListItem<T>;
50
60
  next?: LinkedListItem<T>;
51
61
  }
52
- // work on nodejs
62
+
53
63
  export class LinkedList<T = any> extends EventTarget {
54
64
  declare addEventListener: <K extends keyof LinkedListEventMap>(
55
65
  type: K,
@@ -269,12 +279,9 @@ export function createCSSSheet<T extends StyledKeyValuePair>(rules: T | string,
269
279
  return sheet as Sheet<T>;
270
280
  }
271
281
 
272
- export function randomStr(number = 5, origin = '0123456789abcdefghijklmnopqrstuvwxyz') {
273
- const len = origin.length;
274
- let str = '';
275
- for (let i = 0; i < number; i++) {
276
- str += origin[Math.floor(Math.random() * len)];
277
- }
282
+ export function randomStr(len = 5): string {
283
+ const str = Math.random().toString(36).slice(2).slice(0, len);
284
+ if (str.length < len) return str + randomStr(len - str.length);
278
285
  return str;
279
286
  }
280
287
 
@@ -1 +1 @@
1
- export const version = '1.7.8';
1
+ export const version = '1.7.10';
@@ -0,0 +1,15 @@
1
+ import { fixture, expect } from '@open-wc/testing';
2
+
3
+ import { html } from '../../lib/element';
4
+ import type { GemActiveLinkElement } from '../../elements/link';
5
+
6
+ import '../../elements/link';
7
+
8
+ describe('GemTitleElement', () => {
9
+ it('basic', async () => {
10
+ const ele: GemActiveLinkElement = await fixture(
11
+ html`<gem-active-link pattern="/*" href="/#测试">active-link</gem-active-link>`,
12
+ );
13
+ expect(ele.active).to.equal(true);
14
+ });
15
+ });
@@ -0,0 +1,27 @@
1
+ import { fixture, expect, nextFrame } from '@open-wc/testing';
2
+
3
+ import { html } from '../../lib/element';
4
+ import type { GemReflectElement } from '../../elements/reflect';
5
+
6
+ import '../../elements/reflect';
7
+
8
+ describe('GemReflectElement', () => {
9
+ it('basic', async () => {
10
+ const reflect: GemReflectElement = await fixture(html`
11
+ <gem-reflect>
12
+ <div id="one"></div>
13
+ <div id="two"></div>
14
+ </gem-reflect>
15
+ `);
16
+ const div = document.head.querySelector('#one');
17
+ expect(!!div).to.equal(true);
18
+ const comment = new Comment();
19
+ div?.after(comment);
20
+ reflect.target = document.body;
21
+ await nextFrame();
22
+ expect(document.body.querySelector('#one')).to.equal(div);
23
+ expect(div?.nextSibling).to.equal(comment);
24
+ reflect.remove();
25
+ expect(!!document.querySelector('#one')).to.equal(false);
26
+ });
27
+ });
@@ -0,0 +1,25 @@
1
+ import { fixture, expect, nextFrame } from '@open-wc/testing';
2
+
3
+ import { html } from '../../lib/element';
4
+ import type { GemTitleElement } from '../../elements/title';
5
+
6
+ import '../../elements/title';
7
+
8
+ describe('GemTitleElement', () => {
9
+ it('basic', async () => {
10
+ const ele: GemTitleElement = await fixture(html`<gem-title>title</gem-title>`);
11
+ expect(document.title).to.equal('title');
12
+ ele.textContent = 'title2';
13
+ await nextFrame();
14
+ expect(document.title).to.equal('title2');
15
+
16
+ ele.prefix = 'prefix-';
17
+ await nextFrame();
18
+ expect(document.title).to.equal('prefix-title2');
19
+
20
+ history.pushState(null, 'Page', '/');
21
+ await nextFrame();
22
+ expect(document.title).to.equal('prefix-Page');
23
+ expect(ele.shadowRoot!.textContent).to.equal('Page');
24
+ });
25
+ });
@@ -25,6 +25,8 @@ describe('utils 测试', () => {
25
25
  expect(absoluteLocation('/a', '/a/b')).to.equal('/a/b');
26
26
  expect(absoluteLocation('/a/c', './b')).to.equal('/a/b');
27
27
  expect(absoluteLocation('/a/c/d', '../b')).to.equal('/a/b');
28
+ expect(absoluteLocation('/a/c/d', '../b?a=a#a')).to.equal('/a/b?a=a#a');
29
+ expect(absoluteLocation('/a/c/d', '../b?a=测试#测试#')).to.equal('/a/b?a=%E6%B5%8B%E8%AF%95#测试#');
28
30
  });
29
31
  it('LinkedList', () => {
30
32
  const linkedList = new LinkedList<() => void>();
@@ -36,6 +38,18 @@ describe('utils 测试', () => {
36
38
  const fun2 = () => 2;
37
39
  linkedList.add(fun1);
38
40
  linkedList.add(fun2);
41
+ expect(linkedList.first?.value).to.equal(fun1);
42
+ expect(linkedList.last?.value).to.equal(fun2);
43
+ expect(linkedList.find(fun1)).to.equal(linkedList.first);
44
+ expect(linkedList.find(fun2)).to.equal(linkedList.last);
45
+ expect(linkedList.find(fun1)?.next).to.equal(linkedList.last);
46
+ const subLinked = new LinkedList();
47
+ subLinked.add(fun1);
48
+ subLinked.add(fun2);
49
+ expect(linkedList.isSuperLinkOf(subLinked)).to.equal(true);
50
+ expect(new LinkedList().isSuperLinkOf(subLinked)).to.equal(false);
51
+ expect(subLinked.isSuperLinkOf(new LinkedList())).to.equal(true);
52
+
39
53
  linkedList.delete(fun2);
40
54
  expect(linkedList.size).to.equal(1);
41
55
  linkedList.add(fun2);