@pageboard/html 0.11.28 → 0.12.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.
Files changed (52) hide show
  1. package/elements/accordion.js +0 -1
  2. package/elements/card.js +5 -5
  3. package/elements/consent.js +1 -1
  4. package/elements/embed.js +1 -1
  5. package/elements/fieldsets.js +2 -2
  6. package/elements/form.js +2 -2
  7. package/elements/grid.js +3 -3
  8. package/elements/heading.js +1 -1
  9. package/elements/image.js +4 -4
  10. package/elements/input-date.js +3 -4
  11. package/elements/inputs.js +12 -12
  12. package/elements/layout.js +8 -9
  13. package/elements/link.js +1 -1
  14. package/elements/menu.js +7 -7
  15. package/elements/navigation.js +3 -16
  16. package/elements/pagination.js +1 -1
  17. package/elements/paragraph.js +2 -2
  18. package/elements/sitemap.js +8 -8
  19. package/elements/sticky.js +2 -2
  20. package/elements/tab.js +1 -1
  21. package/elements/table.js +10 -10
  22. package/elements/template.js +1 -1
  23. package/lib/nouislider.js +28 -0
  24. package/package.json +1 -1
  25. package/ui/accordion.js +3 -21
  26. package/ui/consent.css +3 -3
  27. package/ui/consent.js +9 -13
  28. package/ui/embed.js +11 -17
  29. package/ui/fieldset-list.js +9 -9
  30. package/ui/fieldset.js +4 -8
  31. package/ui/form.js +143 -158
  32. package/ui/heading-helper.js +13 -19
  33. package/ui/image.js +19 -30
  34. package/ui/input-date-slot.js +2 -2
  35. package/ui/input-date.js +2 -7
  36. package/ui/input-file.js +58 -61
  37. package/ui/input-range.js +4 -8
  38. package/ui/layout.js +2 -6
  39. package/ui/media.js +15 -28
  40. package/ui/menu.js +23 -27
  41. package/ui/pagination.js +2 -2
  42. package/ui/query-tags.js +4 -4
  43. package/ui/rating.js +2 -2
  44. package/ui/scroll-link.js +2 -9
  45. package/ui/select.js +21 -23
  46. package/ui/sitemap-helper.js +5 -5
  47. package/ui/sitemap.js +15 -15
  48. package/ui/sticky.js +2 -6
  49. package/ui/tab-helper.js +32 -34
  50. package/ui/tab.js +2 -4
  51. package/ui/time.js +2 -7
  52. package/ui/transition.js +21 -21
@@ -1,4 +1,4 @@
1
- class HTMLElementSitepage extends VirtualHTMLElement {
1
+ class HTMLElementSitepage extends Page.Element {
2
2
  static defaults = {
3
3
  url: null,
4
4
  index: (x) => parseInt(x) || 0
@@ -61,7 +61,7 @@ class HTMLElementSitepage extends VirtualHTMLElement {
61
61
  }
62
62
  }
63
63
 
64
- Page.setup(() => {
65
- VirtualHTMLElement.define('element-sitepage', HTMLElementSitepage);
66
- VirtualHTMLElement.extend('element-sitemap', HTMLElementSitepage);
67
- });
64
+
65
+ Page.define('element-sitepage', HTMLElementSitepage);
66
+ Page.extend('element-sitemap', HTMLElementSitepage);
67
+
package/ui/sitemap.js CHANGED
@@ -1,4 +1,4 @@
1
- class HTMLElementSitemap extends VirtualHTMLElement {
1
+ class HTMLElementSitemap extends Page.Element {
2
2
  static makeTree(tree, parent) {
3
3
  let page = tree._;
4
4
  if (page) {
@@ -52,27 +52,27 @@ class HTMLElementSitemap extends VirtualHTMLElement {
52
52
  });
53
53
  }
54
54
 
55
- build(state) {
55
+ async build(state) {
56
56
  if (this.firstElementChild.children.length > 0 && this.isContentEditable) {
57
57
  // workaround... build is called a second time with pagecut-placeholder set
58
58
  return;
59
59
  }
60
- return Pageboard.bundle(Pageboard.fetch('get', `/.api/pages`), state).then(res => {
61
- state.scope.$element = state.scope.$elements.sitemap;
62
- const tree = this.constructor.transformResponse(res);
63
- const node = Pageboard.render({
64
- item: tree
65
- }, state.scope);
66
- // only change block content
67
- const src = node.firstElementChild;
68
- const dst = this.firstElementChild;
69
- dst.textContent = '';
70
- while (src.firstChild) dst.appendChild(src.firstChild);
71
- });
60
+ const res = await Pageboard.fetch('get', `/.api/pages`);
61
+ const scope = await Pageboard.bundle(state, res);
62
+ scope.$element = scope.$elements.sitemap;
63
+ const tree = this.constructor.transformResponse(res);
64
+ const node = Pageboard.render({
65
+ item: tree
66
+ }, scope);
67
+ // only change block content
68
+ const src = node.firstElementChild;
69
+ const dst = this.firstElementChild;
70
+ dst.textContent = '';
71
+ while (src.firstChild) dst.appendChild(src.firstChild);
72
72
  }
73
73
  }
74
74
 
75
75
 
76
- VirtualHTMLElement.define('element-sitemap', HTMLElementSitemap);
76
+ Page.define('element-sitemap', HTMLElementSitemap);
77
77
 
78
78
 
package/ui/sticky.js CHANGED
@@ -1,8 +1,4 @@
1
- class HTMLElementStickyNav extends HTMLElement {
2
- constructor() {
3
- super();
4
- if (this.init) this.init();
5
- }
1
+ class HTMLElementStickyNav extends Page.Element {
6
2
  #lastScroll;
7
3
  #currentScroll() {
8
4
  return document.documentElement.scrollTop;
@@ -33,4 +29,4 @@ class HTMLElementStickyNav extends HTMLElement {
33
29
  }
34
30
  }
35
31
 
36
- VirtualHTMLElement.define('element-sticky-nav', HTMLElementStickyNav, 'header');
32
+ Page.define('element-sticky-nav', HTMLElementStickyNav, 'header');
package/ui/tab-helper.js CHANGED
@@ -1,38 +1,36 @@
1
- Page.setup(() => {
2
- VirtualHTMLElement.extend('element-tabs', class TabsHelper {
3
- setup(state) {
4
- if (!this.observer) this.observer = new MutationObserver(records => {
5
- for (const record of records) this.mutate(record, state);
6
- });
7
- this.observer.observe(this.items, {
8
- childList: true
9
- });
1
+ Page.extend('element-tabs', class TabsHelper {
2
+ setup(state) {
3
+ if (!this.observer) this.observer = new MutationObserver(records => {
4
+ for (const record of records) this.mutate(record, state);
5
+ });
6
+ this.observer.observe(this.items, {
7
+ childList: true
8
+ });
9
+ }
10
+ close() {
11
+ if (this.observer) this.observer.disconnect();
12
+ }
13
+ mutate(record, state) {
14
+ const items = this.items;
15
+ const tabs = this.tabs;
16
+ if (!items || !tabs) return;
17
+ for (const node of record.addedNodes) {
18
+ tabs.insertBefore(state.scope.$view.render({
19
+ type: 'tab'
20
+ }), tabs.children[items.children.indexOf(node) + 1]);
10
21
  }
11
- close() {
12
- if (this.observer) this.observer.disconnect();
22
+ for (let i = 0; i < record.removedNodes.length; i++) {
23
+ const pos = record.target.childNodes.indexOf(record.previousSibling) + 1 + i;
24
+ const child = tabs.childNodes[pos];
25
+ if (child) child.remove();
13
26
  }
14
- mutate(record, state) {
15
- const items = this.items;
16
- const tabs = this.tabs;
17
- if (!items || !tabs) return;
18
- for (const node of record.addedNodes) {
19
- tabs.insertBefore(state.scope.$view.render({
20
- type: 'tab'
21
- }), tabs.children[items.children.indexOf(node) + 1]);
22
- }
23
- for (let i = 0; i < record.removedNodes.length; i++) {
24
- const pos = record.target.childNodes.indexOf(record.previousSibling) + 1 + i;
25
- const child = tabs.childNodes[pos];
26
- if (child) child.remove();
27
- }
28
- }
29
- handleClick(e, state) {
30
- const item = e.target.closest('[block-type="tab_item"]');
31
- if (!item) return;
32
- const menu = item.parentNode;
33
- if (!menu || menu.parentNode != this) return;
34
- this.options.index = this.dataset.index = menu.children.indexOf(item);
35
- }
36
- });
27
+ }
28
+ handleClick(e, state) {
29
+ const item = e.target.closest('[block-type="tab_item"]');
30
+ if (!item) return;
31
+ const menu = item.parentNode;
32
+ if (!menu || menu.parentNode != this) return;
33
+ this.options.index = this.dataset.index = menu.children.indexOf(item);
34
+ }
37
35
  });
38
36
 
package/ui/tab.js CHANGED
@@ -1,4 +1,4 @@
1
- class HTMLElementTabs extends VirtualHTMLElement {
1
+ class HTMLElementTabs extends Page.Element {
2
2
  static defaults = {
3
3
  index: (x) => parseInt(x) || 0
4
4
  };
@@ -30,6 +30,4 @@ class HTMLElementTabs extends VirtualHTMLElement {
30
30
  }
31
31
  }
32
32
 
33
- Page.ready(() => {
34
- VirtualHTMLElement.define('element-tabs', HTMLElementTabs);
35
- });
33
+ Page.define('element-tabs', HTMLElementTabs);
package/ui/time.js CHANGED
@@ -1,9 +1,4 @@
1
- class HTMLElementTime extends HTMLTimeElement {
2
- constructor() {
3
- super();
4
- if (this.init) this.init();
5
- }
6
-
1
+ class HTMLElementTime extends Page.create(HTMLTimeElement) {
7
2
  static defaults = {
8
3
  dataFormat: null,
9
4
  dataTimezone: null,
@@ -19,4 +14,4 @@ class HTMLElementTime extends HTMLTimeElement {
19
14
  }
20
15
  }
21
16
 
22
- VirtualHTMLElement.define(`element-time`, HTMLElementTime, 'time');
17
+ Page.define(`element-time`, HTMLElementTime, 'time');
package/ui/transition.js CHANGED
@@ -21,6 +21,8 @@ Page.init(state => {
21
21
  });
22
22
 
23
23
  class Transition {
24
+ #defer;
25
+
24
26
  static event(name) {
25
27
  const low = name.toLowerCase();
26
28
  const caps = name[0].toUpperCase() + low.substring(1);
@@ -57,37 +59,35 @@ class Transition {
57
59
  from.after(to);
58
60
  }
59
61
  start() {
60
- return new Promise(resolve => {
61
- this.resolve = resolve;
62
- if (!this.ok) {
63
- this.destroy();
64
- } else {
65
- setTimeout(() => {
66
- this.root.addEventListener(this.event, this);
67
- this.root.classList.add('transitioning');
68
- });
69
- this.safe = setTimeout(() => {
70
- console.warn("Transition timeout");
71
- this.end();
72
- }, 4000);
73
- }
74
- });
62
+ this.#defer = new Deferred();
63
+ if (!this.ok) {
64
+ this.destroy();
65
+ } else {
66
+ setTimeout(() => {
67
+ this.root.addEventListener(this.event, this);
68
+ this.root.classList.add('transitioning');
69
+ });
70
+ this.safe = setTimeout(() => {
71
+ console.warn("Transition timeout");
72
+ this.end();
73
+ }, 4000);
74
+ }
75
75
  }
76
76
  cancel() {
77
77
  this.ok = false;
78
78
  this.root.classList.remove('transitioning');
79
- if (this.resolve) {
80
- this.resolve();
81
- delete this.resolve;
79
+ if (this.#defer) {
80
+ this.#defer.resolve();
81
+ this.#defer = null;
82
82
  }
83
83
  }
84
84
  end() {
85
85
  this.ok = false;
86
86
  this.from.remove();
87
87
  this.destroy();
88
- if (this.resolve) {
89
- this.resolve();
90
- delete this.resolve;
88
+ if (this.#defer) {
89
+ this.#defer.resolve();
90
+ this.#defer = null;
91
91
  }
92
92
  }
93
93
  scrollTo(obj) {