svelte-common 4.22.21 → 5.0.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.
package/README.md CHANGED
@@ -38,16 +38,22 @@ or the [live example](https://arlac77.github.io/components/svelte-common/example
38
38
  * [Parameters](#parameters-3)
39
39
  * [filter](#filter)
40
40
  * [Parameters](#parameters-4)
41
- * [initializeServiceWorker](#initializeserviceworker)
41
+ * [Pagination](#pagination)
42
42
  * [Parameters](#parameters-5)
43
+ * [page](#page)
44
+ * [Parameters](#parameters-6)
45
+ * [page](#page-1)
46
+ * [pageNavigationElement](#pagenavigationelement)
47
+ * [initializeServiceWorker](#initializeserviceworker)
48
+ * [Parameters](#parameters-7)
43
49
  * [toggleOrderBy](#toggleorderby)
44
- * [Parameters](#parameters-6)
50
+ * [Parameters](#parameters-8)
45
51
  * [sortable](#sortable)
46
- * [Parameters](#parameters-7)
52
+ * [Parameters](#parameters-9)
47
53
  * [sorter](#sorter)
48
- * [Parameters](#parameters-8)
54
+ * [Parameters](#parameters-10)
49
55
  * [keyPrefixStore](#keyprefixstore)
50
- * [Parameters](#parameters-9)
56
+ * [Parameters](#parameters-11)
51
57
 
52
58
  ## AttributeDefinition
53
59
 
@@ -121,6 +127,32 @@ Generate filter function.
121
127
 
122
128
  Returns **[Function](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Statements/function)** 
123
129
 
130
+ ## Pagination
131
+
132
+ Pagination support store.
133
+
134
+ ### Parameters
135
+
136
+ * `source`  
137
+ * `itemsPerPage` (optional, default `10`)
138
+
139
+ ### page
140
+
141
+ Set current page
142
+
143
+ #### Parameters
144
+
145
+ * `n` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** 
146
+
147
+ ### page
148
+
149
+ Returns **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** current page
150
+
151
+ ### pageNavigationElement
152
+
153
+ * **See**: @link <https://getbootstrap.com/docs/4.0/components/pagination>
154
+ * **See**: @link <https://a11y-style-guide.com/style-guide/section-navigation.html#kssref-navigation-pagination>
155
+
124
156
  ## initializeServiceWorker
125
157
 
126
158
  Create a store holding a service worker
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "svelte-common",
3
- "version": "4.22.21",
3
+ "version": "5.0.0",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -23,7 +23,7 @@
23
23
  "prepare": "vite build",
24
24
  "start": "vite",
25
25
  "test": "npm run test:ava && npm run test:cafe",
26
- "test:cafe": "testcafe $BROWSER:headless tests/cafe/*.*js --esm -s build/test --page-request-timeout 5000 --app-init-delay 8000 --app vite",
26
+ "test:cafe": "testcafe $BROWSER:headless tests/cafe/*-cafe.mjs --esm -s build/test --page-request-timeout 5000 --app-init-delay 8000 --app vite",
27
27
  "test:ava": "ava --timeout 2m tests/*-ava.mjs tests/*-ava-node.mjs",
28
28
  "cover": "c8 -x 'tests/**/*' --temp-directory build/tmp ava --timeout 2m tests/*-ava.mjs tests/*-ava-node.mjs && c8 report -r lcov -o build/coverage --temp-directory build/tmp",
29
29
  "docs": "documentation readme --section=API ./src/**/*.mjs",
@@ -33,29 +33,29 @@
33
33
  "preview": "vite preview"
34
34
  },
35
35
  "dependencies": {
36
- "svelte-command": "^1.1.40",
37
- "svelte-entitlement": "^1.2.52"
36
+ "svelte-command": "^1.1.42",
37
+ "svelte-entitlement": "^1.2.53"
38
38
  },
39
39
  "devDependencies": {
40
- "@semantic-release/commit-analyzer": "^9.0.2",
40
+ "@semantic-release/commit-analyzer": "^10.0.1",
41
41
  "@semantic-release/exec": "^6.0.3",
42
- "@semantic-release/release-notes-generator": "^11.0.1",
43
- "@sveltejs/vite-plugin-svelte": "^2.4.0",
44
- "ava": "^5.3.0",
45
- "c8": "^7.13.0",
42
+ "@semantic-release/release-notes-generator": "^11.0.3",
43
+ "@sveltejs/vite-plugin-svelte": "^2.4.2",
44
+ "ava": "^5.3.1",
45
+ "c8": "^8.0.0",
46
46
  "documentation": "^14.0.2",
47
- "mf-styling": "^1.7.56",
48
- "npm-pkgbuild": "^11.8.6",
49
- "semantic-release": "^21.0.2",
50
- "stylelint": "^15.6.2",
47
+ "mf-styling": "^1.8.1",
48
+ "npm-pkgbuild": "^11.8.9",
49
+ "semantic-release": "^21.0.5",
50
+ "stylelint": "^15.9.0",
51
51
  "stylelint-config-standard": "^33.0.0",
52
- "svelte": "^3.59.1",
53
- "testcafe": "^2.6.0",
52
+ "svelte": "^4.0.0",
53
+ "testcafe": "^3.0.0",
54
54
  "vite": "^4.3.9"
55
55
  },
56
56
  "optionalDependencies": {
57
57
  "mf-hosting-cloudflare": "^1.0.5",
58
- "mf-hosting-frontend": "^1.9.3"
58
+ "mf-hosting-frontend": "^1.9.5"
59
59
  },
60
60
  "repository": {
61
61
  "type": "git",
package/src/attribute.mjs CHANGED
@@ -53,9 +53,11 @@ export function* tokens(string) {
53
53
  break;
54
54
  }
55
55
 
56
+ case ".":
56
57
  case "+":
57
58
  case "-":
58
- case ".":
59
+ case "*":
60
+ case "/":
59
61
  case "(":
60
62
  case ")":
61
63
  case "[":
@@ -119,7 +121,9 @@ export function setAttribute(object, name, value) {
119
121
  }
120
122
  }
121
123
 
122
- lastObject[lastKey] = value;
124
+ if (lastKey) {
125
+ lastObject[lastKey] = value;
126
+ }
123
127
  }
124
128
 
125
129
  /**
package/src/index.svelte CHANGED
@@ -55,5 +55,6 @@
55
55
  SORT_DESCENDING
56
56
  } from "./sorting.mjs";
57
57
  export { filter } from "./filter.mjs";
58
+ export { Pagination, pageNavigation } from "./pagination.mjs";
58
59
  export { initializeServiceWorker } from "./service-worker.mjs";
59
60
  </script>
@@ -0,0 +1,106 @@
1
+ /**
2
+ * Pagination support store.
3
+ */
4
+ export class Pagination {
5
+ subscriptions = new Set();
6
+ data;
7
+ itemsPerPage;
8
+ #page = 0;
9
+
10
+ constructor(source, itemsPerPage = 10) {
11
+ this.data = [...source];
12
+ this.itemsPerPage = itemsPerPage;
13
+ }
14
+
15
+ /**
16
+ * Set current page
17
+ * @param {number} n
18
+ */
19
+ set page(n) {
20
+ if (this.#page !== n && n > 0 && n <= this.numberOfPages) {
21
+ this.#page = n;
22
+ this.subscriptions.forEach(subscription => subscription(this));
23
+ }
24
+ }
25
+
26
+ /**
27
+ * @return {number} current page
28
+ */
29
+ get page() {
30
+ return this.#page;
31
+ }
32
+
33
+ subscribe(s) {
34
+ this.subscriptions.add(s);
35
+
36
+ s(this);
37
+
38
+ return () => this.subscriptions.delete(s);
39
+ }
40
+
41
+ get numberOfPages() {
42
+ return this.data.length / this.itemsPerPage;
43
+ }
44
+
45
+ *items() {
46
+ const n = this.page;
47
+
48
+ for (const item of this.data.slice(
49
+ n * this.itemsPerPage,
50
+ (n + 1) * this.itemsPerPage
51
+ )) {
52
+ yield item;
53
+ }
54
+ }
55
+
56
+ /**
57
+ * @see @link https://getbootstrap.com/docs/4.0/components/pagination
58
+ * @see @link https://a11y-style-guide.com/style-guide/section-navigation.html#kssref-navigation-pagination
59
+ */
60
+ get pageNavigationElement() {
61
+ const nav = document.createElement("nav");
62
+ nav.setAttribute("aria-label", "pagination");
63
+
64
+ this.subscribe(pg => {
65
+ const items = [];
66
+
67
+ function add(innerText, eh) {
68
+ const a = document.createElement("a");
69
+ a.setAttribute("href", "#");
70
+ a.innerText = innerText;
71
+ a.onclick = eh;
72
+ items.push(a);
73
+ return a;
74
+ }
75
+
76
+ add("<<", event => (this.page = 1));
77
+ add("<", event => (this.page = this.page - 1));
78
+
79
+ for (let n = 1; n < this.numberOfPages; n++) {
80
+ if (
81
+ this.numberOfPages > 10 &&
82
+ (n <= 3 ||
83
+ n > this.numberOfPages - 3 ||
84
+ n % 10 === 0 ||
85
+ (n < this.page + 3 && n > this.page - 3))
86
+ ) {
87
+ const a = add(String(n), event => (this.page = n));
88
+ if (n === this.page) {
89
+ a.setAttribute("aria-current", "page");
90
+ }
91
+ }
92
+ }
93
+
94
+ add(">", event => (this.page = this.page + 1));
95
+ add(">>", event => (this.page = this.numberOfPages));
96
+
97
+ nav.replaceChildren(...items);
98
+ });
99
+
100
+ return nav;
101
+ }
102
+ }
103
+
104
+ export function pageNavigation(elem, pg) {
105
+ elem.replaceChildren(pg.pageNavigationElement);
106
+ }