@knowark/componarkjs 1.13.4 → 1.14.1
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 +57 -45
- package/lib/base/component/component.js +142 -20
- package/lib/base/component/component.test.js +753 -374
- package/lib/base/component/index.js +3 -0
- package/lib/base/styles/index.js +4 -1
- package/lib/base/utils/define.js +30 -7
- package/lib/base/utils/define.test.js +129 -42
- package/lib/base/utils/format.js +12 -6
- package/lib/base/utils/format.test.js +16 -16
- package/lib/base/utils/helpers.js +42 -9
- package/lib/base/utils/helpers.test.js +134 -115
- package/lib/base/utils/index.js +1 -0
- package/lib/base/utils/slots.js +3 -2
- package/lib/base/utils/slots.test.js +38 -38
- package/lib/base/utils/uuid.js +1 -1
- package/lib/base/utils/uuid.test.js +13 -13
- package/lib/components/audio/components/audio.js +36 -3
- package/lib/components/audio/components/audio.test.js +120 -90
- package/lib/components/audio/index.js +1 -0
- package/lib/components/audio/styles/index.js +5 -1
- package/lib/components/camera/components/camera.js +15 -0
- package/lib/components/camera/components/camera.test.js +96 -91
- package/lib/components/camera/index.js +1 -0
- package/lib/components/camera/styles/index.js +5 -1
- package/lib/components/capture/components/capture.js +48 -4
- package/lib/components/capture/components/capture.test.js +165 -97
- package/lib/components/capture/index.js +1 -0
- package/lib/components/droparea/components/droparea-preview.js +114 -19
- package/lib/components/droparea/components/droparea-preview.test.js +344 -80
- package/lib/components/droparea/components/droparea.js +82 -6
- package/lib/components/droparea/components/droparea.test.js +309 -299
- package/lib/components/droparea/index.js +1 -0
- package/lib/components/droparea/styles/index.js +5 -1
- package/lib/components/emit/components/emit.js +34 -4
- package/lib/components/emit/components/emit.test.js +192 -134
- package/lib/components/emit/index.js +1 -0
- package/lib/components/index.js +2 -1
- package/lib/components/list/components/item.js +6 -0
- package/lib/components/list/components/item.test.js +69 -68
- package/lib/components/list/components/list.js +51 -7
- package/lib/components/list/components/list.test.js +358 -227
- package/lib/components/list/index.js +1 -0
- package/lib/components/paginator/components/paginator.js +34 -8
- package/lib/components/paginator/components/paginator.test.js +146 -143
- package/lib/components/paginator/index.js +1 -0
- package/lib/components/paginator/styles/index.js +5 -1
- package/lib/components/spinner/components/spinner.js +10 -0
- package/lib/components/spinner/components/spinner.test.js +36 -41
- package/lib/components/spinner/index.js +1 -0
- package/lib/components/spinner/styles/index.js +5 -1
- package/lib/components/splitview/components/splitview.detail.js +10 -1
- package/lib/components/splitview/components/splitview.detail.test.js +75 -73
- package/lib/components/splitview/components/splitview.js +54 -11
- package/lib/components/splitview/components/splitview.master.js +37 -2
- package/lib/components/splitview/components/splitview.master.test.js +52 -52
- package/lib/components/splitview/components/splitview.test.js +135 -31
- package/lib/components/splitview/index.js +1 -0
- package/lib/components/translate/components/translate.js +65 -14
- package/lib/components/translate/components/translate.test.js +658 -131
- package/lib/components/translate/index.js +1 -0
- package/lib/index.js +3 -0
- package/package.json +4 -27
- package/scripts/node-test-setup.js +94 -0
- package/tsconfig.json +1 -1
- package/types/base/component/component.d.ts +43 -8
- package/types/base/component/component.d.ts.map +1 -1
- package/types/base/component/index.d.ts +4 -6
- package/types/base/component/index.d.ts.map +1 -1
- package/types/base/styles/index.d.ts +3 -2
- package/types/base/styles/index.d.ts.map +1 -1
- package/types/base/utils/define.d.ts +3 -2
- package/types/base/utils/define.d.ts.map +1 -1
- package/types/base/utils/format.d.ts +12 -6
- package/types/base/utils/format.d.ts.map +1 -1
- package/types/base/utils/helpers.d.ts +27 -7
- package/types/base/utils/helpers.d.ts.map +1 -1
- package/types/base/utils/slots.d.ts +8 -10
- package/types/base/utils/slots.d.ts.map +1 -1
- package/types/base/utils/uuid.d.ts +1 -1
- package/types/base/utils/uuid.d.ts.map +1 -1
- package/types/components/audio/components/audio.d.ts +23 -9
- package/types/components/audio/components/audio.d.ts.map +1 -1
- package/types/components/audio/styles/index.d.ts +3 -2
- package/types/components/audio/styles/index.d.ts.map +1 -1
- package/types/components/camera/components/camera.d.ts +11 -3
- package/types/components/camera/components/camera.d.ts.map +1 -1
- package/types/components/camera/styles/index.d.ts +3 -2
- package/types/components/camera/styles/index.d.ts.map +1 -1
- package/types/components/capture/components/capture.d.ts +23 -3
- package/types/components/capture/components/capture.d.ts.map +1 -1
- package/types/components/droparea/components/droparea-preview.d.ts +64 -11
- package/types/components/droparea/components/droparea-preview.d.ts.map +1 -1
- package/types/components/droparea/components/droparea.d.ts +58 -13
- package/types/components/droparea/components/droparea.d.ts.map +1 -1
- package/types/components/droparea/styles/index.d.ts +3 -2
- package/types/components/droparea/styles/index.d.ts.map +1 -1
- package/types/components/emit/components/emit.d.ts +15 -3
- package/types/components/emit/components/emit.d.ts.map +1 -1
- package/types/components/list/components/item.d.ts +8 -1
- package/types/components/list/components/item.d.ts.map +1 -1
- package/types/components/list/components/list.d.ts +23 -5
- package/types/components/list/components/list.d.ts.map +1 -1
- package/types/components/paginator/components/paginator.d.ts +32 -8
- package/types/components/paginator/components/paginator.d.ts.map +1 -1
- package/types/components/paginator/styles/index.d.ts +3 -2
- package/types/components/paginator/styles/index.d.ts.map +1 -1
- package/types/components/spinner/components/spinner.d.ts +14 -3
- package/types/components/spinner/components/spinner.d.ts.map +1 -1
- package/types/components/spinner/styles/index.d.ts +3 -2
- package/types/components/spinner/styles/index.d.ts.map +1 -1
- package/types/components/splitview/components/splitview.d.ts +22 -4
- package/types/components/splitview/components/splitview.d.ts.map +1 -1
- package/types/components/splitview/components/splitview.detail.d.ts +12 -2
- package/types/components/splitview/components/splitview.detail.d.ts.map +1 -1
- package/types/components/splitview/components/splitview.master.d.ts +12 -1
- package/types/components/splitview/components/splitview.master.d.ts.map +1 -1
- package/types/components/translate/components/translate.d.ts +44 -10
- package/types/components/translate/components/translate.d.ts.map +1 -1
|
@@ -2,7 +2,12 @@ import { Component } from '#base/index.js'
|
|
|
2
2
|
import styles from '../styles/index.js'
|
|
3
3
|
|
|
4
4
|
const tag = 'ark-paginator'
|
|
5
|
+
/**
|
|
6
|
+
* Pagination control component.
|
|
7
|
+
*/
|
|
5
8
|
export class Paginator extends Component {
|
|
9
|
+
/** @param {object} context
|
|
10
|
+
* @returns {this} */
|
|
6
11
|
init (context = {}) {
|
|
7
12
|
this.binding = 'paginator-listen'
|
|
8
13
|
this.collectionSize = (
|
|
@@ -21,6 +26,7 @@ export class Paginator extends Component {
|
|
|
21
26
|
return ['collectionSize', 'pageSize', 'displayedPages', 'currentPage']
|
|
22
27
|
}
|
|
23
28
|
|
|
29
|
+
/** @returns {this} */
|
|
24
30
|
render () {
|
|
25
31
|
this._grabSlots()
|
|
26
32
|
this.content = /* html */`
|
|
@@ -42,12 +48,13 @@ export class Paginator extends Component {
|
|
|
42
48
|
this._buildButton(this.previousButton, '_prev', '<'))
|
|
43
49
|
|
|
44
50
|
for (const page of this.currentPages) {
|
|
45
|
-
|
|
51
|
+
/** @type {[string, string][]} */
|
|
52
|
+
const attributes = [['data-page', String(page)]]
|
|
46
53
|
if ((Number(page) === Number(this.currentPage))) {
|
|
47
54
|
attributes.unshift(['active', ''])
|
|
48
55
|
}
|
|
49
56
|
this.querySelector('[data-middle]').appendChild(
|
|
50
|
-
this._buildButton(this.pageButton, null, page
|
|
57
|
+
this._buildButton(this.pageButton, null, `${page}`, attributes))
|
|
51
58
|
}
|
|
52
59
|
|
|
53
60
|
this.querySelector('[data-end]').appendChild(
|
|
@@ -58,10 +65,12 @@ export class Paginator extends Component {
|
|
|
58
65
|
return super.render()
|
|
59
66
|
}
|
|
60
67
|
|
|
68
|
+
/** @returns {number} */
|
|
61
69
|
get totalPages () {
|
|
62
70
|
return Math.ceil(this.collectionSize / this.pageSize)
|
|
63
71
|
}
|
|
64
72
|
|
|
73
|
+
/** @returns {number[]} */
|
|
65
74
|
get currentPages () {
|
|
66
75
|
const displayedPages = Math.min(
|
|
67
76
|
parseInt(this.displayedPages), this.totalPages)
|
|
@@ -72,6 +81,7 @@ export class Paginator extends Component {
|
|
|
72
81
|
return Array.from({ length: displayedPages }, (_, i) => i + startPage)
|
|
73
82
|
}
|
|
74
83
|
|
|
84
|
+
/** @returns {void} */
|
|
75
85
|
_notifyChange () {
|
|
76
86
|
const page = parseInt(this.currentPage)
|
|
77
87
|
const limit = parseInt(this.pageSize)
|
|
@@ -80,6 +90,8 @@ export class Paginator extends Component {
|
|
|
80
90
|
}
|
|
81
91
|
|
|
82
92
|
/** @param {number} currentPage */
|
|
93
|
+
/** @param {number} currentPage
|
|
94
|
+
* @returns {void} */
|
|
83
95
|
_setCurrentPage (currentPage) {
|
|
84
96
|
if (currentPage > 0 && currentPage <= this.totalPages) {
|
|
85
97
|
this.currentPage = currentPage
|
|
@@ -88,19 +100,22 @@ export class Paginator extends Component {
|
|
|
88
100
|
}
|
|
89
101
|
}
|
|
90
102
|
|
|
91
|
-
/** @param {Event} event
|
|
103
|
+
/** @param {Event} event
|
|
104
|
+
* @returns {void} */
|
|
92
105
|
_first (event) {
|
|
93
106
|
event.stopPropagation()
|
|
94
107
|
this._setCurrentPage(1)
|
|
95
108
|
}
|
|
96
109
|
|
|
97
|
-
/** @param {Event} event
|
|
110
|
+
/** @param {Event} event
|
|
111
|
+
* @returns {void} */
|
|
98
112
|
_prev (event) {
|
|
99
113
|
event.stopPropagation()
|
|
100
114
|
this._setCurrentPage(parseInt(this.currentPage) - 1)
|
|
101
115
|
}
|
|
102
116
|
|
|
103
|
-
/** @param {Event} event
|
|
117
|
+
/** @param {Event} event
|
|
118
|
+
* @returns {void} */
|
|
104
119
|
_move (event) {
|
|
105
120
|
event.stopPropagation()
|
|
106
121
|
const target = /** @type {HTMLElement} */ (event.target)
|
|
@@ -108,18 +123,21 @@ export class Paginator extends Component {
|
|
|
108
123
|
this._setCurrentPage(page)
|
|
109
124
|
}
|
|
110
125
|
|
|
111
|
-
/** @param {Event} event
|
|
126
|
+
/** @param {Event} event
|
|
127
|
+
* @returns {void} */
|
|
112
128
|
_next (event) {
|
|
113
129
|
event.stopPropagation()
|
|
114
130
|
this._setCurrentPage(parseInt(this.currentPage) + 1)
|
|
115
131
|
}
|
|
116
132
|
|
|
117
|
-
/** @param {Event} event
|
|
133
|
+
/** @param {Event} event
|
|
134
|
+
* @returns {void} */
|
|
118
135
|
_last (event) {
|
|
119
136
|
event.stopPropagation()
|
|
120
137
|
this._setCurrentPage(this.totalPages)
|
|
121
138
|
}
|
|
122
139
|
|
|
140
|
+
/** @returns {void} */
|
|
123
141
|
_grabSlots() {
|
|
124
142
|
const [pageButton] = [this.slots.page].flat()
|
|
125
143
|
this.pageButton = this.pageButton ?? pageButton
|
|
@@ -133,8 +151,16 @@ export class Paginator extends Component {
|
|
|
133
151
|
this.lastButton = this.lastButton ?? lastButton
|
|
134
152
|
}
|
|
135
153
|
|
|
154
|
+
/**
|
|
155
|
+
* @param {HTMLButtonElement|null} element
|
|
156
|
+
* @param {string|null} handler
|
|
157
|
+
* @param {string} content
|
|
158
|
+
* @param {Array<[string,string]>} attributes
|
|
159
|
+
* @returns {HTMLButtonElement}
|
|
160
|
+
*/
|
|
136
161
|
_buildButton (element, handler, content, attributes = []) {
|
|
137
|
-
const button =
|
|
162
|
+
const button = /** @type {HTMLButtonElement} */ (
|
|
163
|
+
(element ?? document.createElement('button')).cloneNode(true))
|
|
138
164
|
button.innerHTML = button.innerHTML || content
|
|
139
165
|
if (handler) {
|
|
140
166
|
button.setAttribute('paginator-listen', '')
|
|
@@ -1,152 +1,155 @@
|
|
|
1
|
+
import { it } from 'node:test';
|
|
2
|
+
import assert from 'node:assert/strict';
|
|
1
3
|
import './paginator.js'
|
|
2
4
|
|
|
3
|
-
|
|
4
|
-
let container = null
|
|
5
|
-
|
|
6
|
-
beforeEach(() => {
|
|
7
|
-
container = document.createElement('div')
|
|
8
|
-
document.body.appendChild(container)
|
|
9
|
-
})
|
|
5
|
+
let container = null
|
|
10
6
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
7
|
+
const setup = () => {
|
|
8
|
+
document.body.innerHTML = '';
|
|
9
|
+
container = document.createElement('div')
|
|
10
|
+
document.body.appendChild(container)
|
|
11
|
+
};
|
|
15
12
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
13
|
+
it('can be instantiated', () => {
|
|
14
|
+
setup();
|
|
15
|
+
container.innerHTML = /* html */ `
|
|
16
|
+
<ark-paginator></ark-paginator>
|
|
17
|
+
`
|
|
18
|
+
const paginator = container.querySelector('ark-paginator')
|
|
21
19
|
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
assert.strictEqual(paginator, paginator.init())
|
|
21
|
+
})
|
|
22
|
+
|
|
23
|
+
it('can be instantiated with parameters', () => {
|
|
24
|
+
setup();
|
|
25
|
+
container.innerHTML = /* html */ `
|
|
26
|
+
<ark-paginator page-size="12" displayed-pages="5"></ark-paginator>
|
|
27
|
+
`
|
|
28
|
+
const paginator = container.querySelector('ark-paginator')
|
|
29
|
+
paginator.init({ collectionSize: 120, currentPage: 4 })
|
|
30
|
+
|
|
31
|
+
assert.strictEqual(paginator.pageSize, '12')
|
|
32
|
+
assert.strictEqual(paginator.collectionSize, '120')
|
|
33
|
+
assert.strictEqual(paginator.currentPage, '4')
|
|
34
|
+
assert.strictEqual(paginator.displayedPages, '5')
|
|
35
|
+
assert.strictEqual(paginator.totalPages, 10)
|
|
36
|
+
|
|
37
|
+
paginator.init({ collectionSize: 120, pageSize: 10 })
|
|
38
|
+
assert.strictEqual(paginator.totalPages, 12)
|
|
39
|
+
})
|
|
40
|
+
|
|
41
|
+
it('computes the current shown pages', () => {
|
|
42
|
+
setup();
|
|
43
|
+
container.innerHTML = /* html */ `
|
|
44
|
+
<ark-paginator collection-size="120" page-size="12"
|
|
45
|
+
displayed-pages="5" current-page="1"></ark-paginator>
|
|
46
|
+
`
|
|
47
|
+
const paginator = container.querySelector('ark-paginator')
|
|
48
|
+
|
|
49
|
+
assert.deepStrictEqual(paginator.currentPages, [1, 2, 3, 4, 5])
|
|
50
|
+
assert.deepStrictEqual(paginator.totalPages, 10)
|
|
51
|
+
|
|
52
|
+
paginator.init({ currentPage: 3 })
|
|
53
|
+
assert.deepStrictEqual(paginator.currentPages, [1, 2, 3, 4, 5])
|
|
54
|
+
|
|
55
|
+
paginator.init({ currentPage: 4 })
|
|
56
|
+
assert.deepStrictEqual(paginator.currentPages, [2, 3, 4, 5, 6])
|
|
57
|
+
|
|
58
|
+
paginator.init({ currentPage: 5 })
|
|
59
|
+
assert.deepStrictEqual(paginator.currentPages, [3, 4, 5, 6, 7])
|
|
60
|
+
|
|
61
|
+
paginator.init({ currentPage: 7 })
|
|
62
|
+
assert.deepStrictEqual(paginator.currentPages, [5, 6, 7, 8, 9])
|
|
63
|
+
|
|
64
|
+
paginator.init({ currentPage: 8 })
|
|
65
|
+
assert.deepStrictEqual(paginator.currentPages, [6, 7, 8, 9, 10])
|
|
66
|
+
|
|
67
|
+
paginator.init({ currentPage: 9 })
|
|
68
|
+
assert.deepStrictEqual(paginator.currentPages, [6, 7, 8, 9, 10])
|
|
69
|
+
|
|
70
|
+
paginator.init({ currentPage: 10 })
|
|
71
|
+
assert.deepStrictEqual(paginator.currentPages, [6, 7, 8, 9, 10])
|
|
72
|
+
|
|
73
|
+
paginator.init({ displayedPages: 6, currentPage: 5 })
|
|
74
|
+
assert.deepStrictEqual(paginator.currentPages, [2, 3, 4, 5, 6, 7])
|
|
75
|
+
|
|
76
|
+
paginator.init({ displayedPages: 6, currentPage: 7 })
|
|
77
|
+
assert.deepStrictEqual(paginator.currentPages, [4, 5, 6, 7, 8, 9])
|
|
24
78
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
79
|
+
paginator.init({ displayedPages: 6, currentPage: 9 })
|
|
80
|
+
assert.deepStrictEqual(paginator.currentPages, [5, 6, 7, 8, 9, 10])
|
|
81
|
+
})
|
|
82
|
+
|
|
83
|
+
it('enables and notifies page changes', () => {
|
|
84
|
+
setup();
|
|
85
|
+
container.innerHTML = /* html */ `
|
|
86
|
+
<ark-paginator collection-size="100" page-size="10"
|
|
87
|
+
displayed-pages="5" current-page="1"></ark-paginator>
|
|
88
|
+
`
|
|
89
|
+
const paginator = container.querySelector('ark-paginator')
|
|
90
|
+
|
|
91
|
+
let pageChangedEvent = null
|
|
92
|
+
paginator.addEventListener(
|
|
93
|
+
'page-changed', (event) => pageChangedEvent = event)
|
|
94
|
+
|
|
95
|
+
paginator._setCurrentPage(4)
|
|
96
|
+
|
|
97
|
+
assert.deepStrictEqual(paginator.currentPage, '4')
|
|
98
|
+
assert.ok(pageChangedEvent)
|
|
99
|
+
})
|
|
100
|
+
|
|
101
|
+
it('moves to the different pages', () => {
|
|
102
|
+
setup();
|
|
103
|
+
container.innerHTML = /* html */ `
|
|
104
|
+
<ark-paginator collection-size="100" page-size="10"
|
|
105
|
+
displayed-pages="5" current-page="1"></ark-paginator>
|
|
106
|
+
`
|
|
107
|
+
const paginator = container.querySelector('ark-paginator')
|
|
31
108
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
expect(paginator.currentPages).toEqual([1, 2, 3, 4, 5])
|
|
54
|
-
|
|
55
|
-
paginator.init({ currentPage: 4 })
|
|
56
|
-
expect(paginator.currentPages).toEqual([2, 3, 4, 5, 6])
|
|
57
|
-
|
|
58
|
-
paginator.init({ currentPage: 5 })
|
|
59
|
-
expect(paginator.currentPages).toEqual([3, 4, 5, 6, 7])
|
|
60
|
-
|
|
61
|
-
paginator.init({ currentPage: 7 })
|
|
62
|
-
expect(paginator.currentPages).toEqual([5, 6, 7, 8, 9])
|
|
63
|
-
|
|
64
|
-
paginator.init({ currentPage: 8 })
|
|
65
|
-
expect(paginator.currentPages).toEqual([6, 7, 8, 9, 10])
|
|
66
|
-
|
|
67
|
-
paginator.init({ currentPage: 9 })
|
|
68
|
-
expect(paginator.currentPages).toEqual([6, 7, 8, 9, 10])
|
|
69
|
-
|
|
70
|
-
paginator.init({ currentPage: 10 })
|
|
71
|
-
expect(paginator.currentPages).toEqual([6, 7, 8, 9, 10])
|
|
72
|
-
|
|
73
|
-
paginator.init({ displayedPages: 6, currentPage: 5 })
|
|
74
|
-
expect(paginator.currentPages).toEqual([2, 3, 4, 5, 6, 7])
|
|
75
|
-
|
|
76
|
-
paginator.init({ displayedPages: 6, currentPage: 7 })
|
|
77
|
-
expect(paginator.currentPages).toEqual([4, 5, 6, 7, 8, 9])
|
|
78
|
-
|
|
79
|
-
paginator.init({ displayedPages: 6, currentPage: 9 })
|
|
80
|
-
expect(paginator.currentPages).toEqual([5, 6, 7, 8, 9, 10])
|
|
81
|
-
})
|
|
82
|
-
|
|
83
|
-
it('enables and notifies page changes', () => {
|
|
84
|
-
container.innerHTML = /* html */ `
|
|
85
|
-
<ark-paginator collection-size="100" page-size="10"
|
|
86
|
-
displayed-pages="5" current-page="1"></ark-paginator>
|
|
87
|
-
`
|
|
88
|
-
const paginator = container.querySelector('ark-paginator')
|
|
89
|
-
|
|
90
|
-
let pageChangedEvent = null
|
|
91
|
-
paginator.addEventListener(
|
|
92
|
-
'page-changed', (event) => pageChangedEvent = event)
|
|
93
|
-
|
|
94
|
-
paginator._setCurrentPage(4)
|
|
95
|
-
|
|
96
|
-
expect(paginator.currentPage).toEqual('4')
|
|
97
|
-
expect(pageChangedEvent).toBeTruthy()
|
|
98
|
-
})
|
|
99
|
-
|
|
100
|
-
it('moves to the different pages', () => {
|
|
101
|
-
container.innerHTML = /* html */ `
|
|
102
|
-
<ark-paginator collection-size="100" page-size="10"
|
|
103
|
-
displayed-pages="5" current-page="1"></ark-paginator>
|
|
104
|
-
`
|
|
105
|
-
const paginator = container.querySelector('ark-paginator')
|
|
106
|
-
|
|
107
|
-
paginator.select('[data-page="4"]').click()
|
|
108
|
-
expect(paginator.currentPage).toEqual('4')
|
|
109
|
-
|
|
110
|
-
paginator.select('[data-page="6"]').click()
|
|
111
|
-
expect(paginator.currentPage).toEqual('6')
|
|
112
|
-
|
|
113
|
-
paginator.select('[on-click="_prev"]').click()
|
|
114
|
-
expect(paginator.currentPage).toEqual('5')
|
|
115
|
-
|
|
116
|
-
paginator.select('[on-click="_next"]').click()
|
|
117
|
-
expect(paginator.currentPage).toEqual('6')
|
|
118
|
-
|
|
119
|
-
paginator.select('[on-click="_first"]').click()
|
|
120
|
-
expect(paginator.currentPage).toEqual('1')
|
|
121
|
-
|
|
122
|
-
paginator.select('[on-click="_last"]').click()
|
|
123
|
-
expect(paginator.currentPage).toEqual('10')
|
|
124
|
-
|
|
125
|
-
paginator.select('[on-click="_next"]').click()
|
|
126
|
-
expect(paginator.currentPage).toEqual('10')
|
|
127
|
-
})
|
|
128
|
-
|
|
129
|
-
it('can be provided with custom styleable elements', () => {
|
|
130
|
-
container.innerHTML = /* html */ `
|
|
131
|
-
<ark-paginator page-size="12" displayed-pages="5">
|
|
132
|
-
<button data-first slot="first">
|
|
133
|
-
<span style="pointer-events: none">FIRST</span>
|
|
134
|
-
</button>
|
|
135
|
-
<button data-previous slot="previous">BACK</button>
|
|
136
|
-
<button data-page-general slot="page"></button>
|
|
137
|
-
<button data-next slot="next"></button>
|
|
138
|
-
<button data-last slot="last"></button>
|
|
139
|
-
</ark-paginator>
|
|
140
|
-
`
|
|
109
|
+
paginator.select('[data-page="4"]').click()
|
|
110
|
+
assert.deepStrictEqual(paginator.currentPage, '4')
|
|
111
|
+
|
|
112
|
+
paginator.select('[data-page="6"]').click()
|
|
113
|
+
assert.deepStrictEqual(paginator.currentPage, '6')
|
|
114
|
+
|
|
115
|
+
paginator.select('[on-click="_prev"]').click()
|
|
116
|
+
assert.deepStrictEqual(paginator.currentPage, '5')
|
|
117
|
+
|
|
118
|
+
paginator.select('[on-click="_next"]').click()
|
|
119
|
+
assert.deepStrictEqual(paginator.currentPage, '6')
|
|
120
|
+
|
|
121
|
+
paginator.select('[on-click="_first"]').click()
|
|
122
|
+
assert.deepStrictEqual(paginator.currentPage, '1')
|
|
123
|
+
|
|
124
|
+
paginator.select('[on-click="_last"]').click()
|
|
125
|
+
assert.deepStrictEqual(paginator.currentPage, '10')
|
|
126
|
+
|
|
127
|
+
paginator.select('[on-click="_next"]').click()
|
|
128
|
+
assert.deepStrictEqual(paginator.currentPage, '10')
|
|
129
|
+
})
|
|
141
130
|
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
131
|
+
it('can be provided with custom styleable elements', () => {
|
|
132
|
+
setup();
|
|
133
|
+
container.innerHTML = /* html */ `
|
|
134
|
+
<ark-paginator page-size="12" displayed-pages="5">
|
|
135
|
+
<button data-first slot="first">
|
|
136
|
+
<span style="pointer-events: none">FIRST</span>
|
|
137
|
+
</button>
|
|
138
|
+
<button data-previous slot="previous">BACK</button>
|
|
139
|
+
<button data-page-general slot="page"></button>
|
|
140
|
+
<button data-next slot="next"></button>
|
|
141
|
+
<button data-last slot="last"></button>
|
|
142
|
+
</ark-paginator>
|
|
143
|
+
`
|
|
144
|
+
|
|
145
|
+
const paginator = container.querySelector('ark-paginator')
|
|
146
|
+
|
|
147
|
+
assert.deepStrictEqual(
|
|
148
|
+
paginator.querySelector('[data-first]').innerHTML.trim(),
|
|
149
|
+
'<span style="pointer-events: none">FIRST</span>'
|
|
150
|
+
)
|
|
151
|
+
assert.deepStrictEqual(paginator.querySelector('[data-previous]').innerHTML.trim(), 'BACK')
|
|
152
|
+
assert.ok(paginator.querySelector('[data-page-general]'))
|
|
153
|
+
assert.ok(paginator.querySelector('[data-next]'))
|
|
154
|
+
assert.ok(paginator.querySelector('[data-last]'))
|
|
152
155
|
})
|
|
@@ -2,7 +2,12 @@ import { Component } from '#base/index.js'
|
|
|
2
2
|
import styles from '../styles/index.js'
|
|
3
3
|
|
|
4
4
|
const tag = 'ark-spinner'
|
|
5
|
+
/**
|
|
6
|
+
* Configurable loading spinner component.
|
|
7
|
+
*/
|
|
5
8
|
export class Spinner extends Component {
|
|
9
|
+
/** @param {object} context
|
|
10
|
+
* @returns {this} */
|
|
6
11
|
init (context = {}) {
|
|
7
12
|
this.scale = context.scale || this.scale || '1'
|
|
8
13
|
this.type = context.type || this.type || 'circle'
|
|
@@ -14,6 +19,7 @@ export class Spinner extends Component {
|
|
|
14
19
|
return ['scale', 'type']
|
|
15
20
|
}
|
|
16
21
|
|
|
22
|
+
/** @returns {this} */
|
|
17
23
|
render () {
|
|
18
24
|
this.innerHTML = /* html */ `
|
|
19
25
|
${this.spinnerType(this.type)}
|
|
@@ -22,6 +28,8 @@ export class Spinner extends Component {
|
|
|
22
28
|
return super.render()
|
|
23
29
|
}
|
|
24
30
|
|
|
31
|
+
/** @param {string} scale
|
|
32
|
+
* @returns {void} */
|
|
25
33
|
setScale (scale) {
|
|
26
34
|
this.style.setProperty('transform', `scale(${scale})`)
|
|
27
35
|
}
|
|
@@ -31,6 +39,8 @@ export class Spinner extends Component {
|
|
|
31
39
|
return this.querySelector('[data-loader]')
|
|
32
40
|
}
|
|
33
41
|
|
|
42
|
+
/** @param {string} type
|
|
43
|
+
* @returns {string} */
|
|
34
44
|
spinnerType (type) {
|
|
35
45
|
let content = ''
|
|
36
46
|
|
|
@@ -1,50 +1,45 @@
|
|
|
1
|
+
import { it } from 'node:test'
|
|
2
|
+
import assert from 'node:assert/strict'
|
|
1
3
|
import './spinner.js'
|
|
2
4
|
|
|
3
|
-
|
|
4
|
-
let container = null
|
|
5
|
+
let container = null
|
|
5
6
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
const setup = () => {
|
|
8
|
+
document.body.innerHTML = ''
|
|
9
|
+
container = document.createElement('div')
|
|
10
|
+
document.body.appendChild(container)
|
|
11
|
+
}
|
|
10
12
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
it('can be instantiated', () => {
|
|
14
|
+
setup()
|
|
15
|
+
container.innerHTML = /* html */ `
|
|
16
|
+
<ark-spinner></ark-spinner>
|
|
17
|
+
`
|
|
18
|
+
const spinner = container.querySelector('ark-spinner')
|
|
15
19
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
`
|
|
20
|
-
const spinner = container.querySelector('ark-spinner')
|
|
21
|
-
|
|
22
|
-
expect(spinner).toBeTruthy
|
|
23
|
-
expect(spinner).toBe(spinner.init())
|
|
24
|
-
})
|
|
25
|
-
|
|
26
|
-
it('Different types of spinner can be used', () => {
|
|
27
|
-
container.innerHTML = /* html */ `
|
|
28
|
-
<ark-spinner type="chase"></ark-spinner>
|
|
29
|
-
<ark-spinner type="rect"></ark-spinner>
|
|
30
|
-
<ark-spinner type="loader"></ark-spinner>
|
|
31
|
-
<ark-spinner type="bounce"></ark-spinner>
|
|
32
|
-
`
|
|
33
|
-
const spinner = container.querySelector('ark-spinner')
|
|
34
|
-
const loader = spinner.loader
|
|
20
|
+
assert.ok(spinner)
|
|
21
|
+
assert.strictEqual(spinner, spinner.init())
|
|
22
|
+
})
|
|
35
23
|
|
|
36
|
-
|
|
37
|
-
|
|
24
|
+
it('Different types of spinner can be used', () => {
|
|
25
|
+
setup()
|
|
26
|
+
container.innerHTML = /* html */ `
|
|
27
|
+
<ark-spinner type="chase"></ark-spinner>
|
|
28
|
+
<ark-spinner type="rect"></ark-spinner>
|
|
29
|
+
<ark-spinner type="loader"></ark-spinner>
|
|
30
|
+
<ark-spinner type="bounce"></ark-spinner>
|
|
31
|
+
`
|
|
32
|
+
const spinner = container.querySelector('ark-spinner')
|
|
33
|
+
assert.ok(spinner.loader)
|
|
34
|
+
})
|
|
38
35
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
36
|
+
it('Can set the scale of the spinner', () => {
|
|
37
|
+
setup()
|
|
38
|
+
container.innerHTML = /* html */ `
|
|
39
|
+
<ark-spinner scale="2.5" type="chase"></ark-spinner>
|
|
40
|
+
`
|
|
41
|
+
const spinner = container.querySelector('ark-spinner')
|
|
44
42
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
spinner.scale
|
|
48
|
-
)
|
|
49
|
-
})
|
|
43
|
+
assert.ok(spinner.loader)
|
|
44
|
+
assert.strictEqual(spinner.style.transform.split(')')[0].split('(')[1], spinner.scale)
|
|
50
45
|
})
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { Component } from "#base/index.js"
|
|
2
2
|
|
|
3
3
|
const tag = 'ark-splitview-detail'
|
|
4
|
+
/**
|
|
5
|
+
* Detail slot wrapper for split-view component.
|
|
6
|
+
*/
|
|
4
7
|
export class SplitViewDetail extends Component {
|
|
5
8
|
constructor () {
|
|
6
9
|
super()
|
|
@@ -8,6 +11,8 @@ export class SplitViewDetail extends Component {
|
|
|
8
11
|
'close', this.onClose.bind(this))
|
|
9
12
|
}
|
|
10
13
|
|
|
14
|
+
/** @param {object} context
|
|
15
|
+
* @returns {this} */
|
|
11
16
|
init (context = {}) {
|
|
12
17
|
this.binding = 'splitview-detail-listen'
|
|
13
18
|
|
|
@@ -22,6 +27,7 @@ export class SplitViewDetail extends Component {
|
|
|
22
27
|
return super.init(context)
|
|
23
28
|
}
|
|
24
29
|
|
|
30
|
+
/** @returns {this} */
|
|
25
31
|
render () {
|
|
26
32
|
this.content = ''
|
|
27
33
|
this.append(this.main)
|
|
@@ -29,16 +35,19 @@ export class SplitViewDetail extends Component {
|
|
|
29
35
|
return super.render()
|
|
30
36
|
}
|
|
31
37
|
|
|
32
|
-
/** @param {Event} event
|
|
38
|
+
/** @param {Event} event
|
|
39
|
+
* @returns {void} */
|
|
33
40
|
onClose (event) {
|
|
34
41
|
event.stopPropagation()
|
|
35
42
|
this.hide()
|
|
36
43
|
}
|
|
37
44
|
|
|
45
|
+
/** @returns {void} */
|
|
38
46
|
show () {
|
|
39
47
|
this.removeAttribute('hidden')
|
|
40
48
|
}
|
|
41
49
|
|
|
50
|
+
/** @returns {void} */
|
|
42
51
|
hide () {
|
|
43
52
|
this.setAttribute('hidden', '')
|
|
44
53
|
}
|