@knowark/componarkjs 1.7.3 → 1.7.5
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/Makefile +6 -3
- package/jsconfig.json +23 -0
- package/lib/base/component/component.js +27 -26
- package/lib/base/component/component.test.js +76 -32
- package/lib/base/styles/styles.js +34 -5
- package/lib/base/utils/define.js +6 -7
- package/lib/base/utils/define.test.js +5 -5
- package/lib/base/utils/helpers.js +14 -10
- package/lib/base/utils/helpers.test.js +13 -13
- package/lib/base/utils/uuid.js +4 -4
- package/lib/components/audio/components/audio.js +6 -6
- package/lib/components/audio/components/audio.test.js +11 -10
- package/lib/components/audio/styles/ark.css.js +1 -1
- package/lib/components/camera/components/camera.test.js +6 -6
- package/lib/components/camera/styles/ark.css.js +1 -1
- package/lib/components/camera/styles/index.js +1 -1
- package/lib/components/capture/components/capture.js +2 -2
- package/lib/components/capture/components/capture.test.js +1 -1
- package/lib/components/droparea/components/droparea-preview.js +27 -26
- package/lib/components/droparea/components/droparea-preview.test.js +9 -9
- package/lib/components/droparea/components/droparea.js +19 -19
- package/lib/components/droparea/components/droparea.test.js +42 -42
- package/lib/components/droparea/styles/ark.css.js +1 -1
- package/lib/components/emit/components/emit.js +4 -4
- package/lib/components/emit/components/emit.test.js +5 -5
- package/lib/components/list/components/item.test.js +12 -14
- package/lib/components/list/components/list.js +25 -25
- package/lib/components/list/components/list.test.js +27 -29
- package/lib/components/paginator/components/paginator.js +2 -2
- package/lib/components/paginator/components/paginator.test.js +15 -18
- package/lib/components/paginator/styles/ark.css.js +1 -1
- package/lib/components/spinner/components/spinner.js +17 -17
- package/lib/components/spinner/styles/index.js +1 -1
- package/lib/components/splitview/components/splitview.detail.js +3 -3
- package/lib/components/splitview/components/splitview.detail.test.js +23 -23
- package/lib/components/splitview/components/splitview.js +3 -3
- package/lib/components/splitview/components/splitview.master.js +3 -3
- package/lib/components/splitview/components/splitview.master.test.js +2 -2
- package/lib/components/splitview/components/splitview.test.js +5 -7
- package/lib/components/translate/components/translate.js +17 -19
- package/lib/components/translate/components/translate.test.js +13 -14
- package/package.json +1 -1
- package/showcase/assets/knowark.svg +1 -0
- package/showcase/{design/screens/base/audio/audioDemo.js → components/demos/audio.js} +6 -10
- package/showcase/{design/screens/base/camera/cameraDemo.js → components/demos/camera.js} +6 -7
- package/showcase/{design/screens/base/droparea/dropareaDemo.js → components/demos/droparea.js} +7 -7
- package/showcase/{design/screens/base/list/listDemo.js → components/demos/list.js} +2 -3
- package/showcase/{design/screens/base/paginator/paginatorDemo.js → components/demos/paginator.js} +9 -9
- package/showcase/{design/screens/base/splitview/splitViewDemo.js → components/demos/splitview.js} +42 -9
- package/showcase/{design/screens/base/translate/translateDemo.js → components/demos/translate.js} +4 -5
- package/showcase/components/index.html +81 -0
- package/showcase/index.html +40 -82
- package/showcase/index.js +0 -1
- package/webpack.config.cjs +50 -50
- package/showcase/design/core/factories/development/development.factory.js +0 -5
- package/showcase/design/core/factories/development/index.js +0 -1
- package/showcase/design/core/factories/index.js +0 -11
- package/showcase/design/core/factories/standard.factory.js +0 -19
- package/showcase/design/index.html +0 -22
- package/showcase/design/index.js +0 -7
- package/showcase/design/screens/base/audio/index.js +0 -25
- package/showcase/design/screens/base/camera/index.js +0 -25
- package/showcase/design/screens/base/droparea/index.js +0 -25
- package/showcase/design/screens/base/index.js +0 -42
- package/showcase/design/screens/base/list/index.js +0 -25
- package/showcase/design/screens/base/paginator/index.js +0 -25
- package/showcase/design/screens/base/root.component.js +0 -294
- package/showcase/design/screens/base/root.routes.js +0 -28
- package/showcase/design/screens/base/spinner/index.js +0 -25
- package/showcase/design/screens/base/spinner/spinnerDemo.js +0 -55
- package/showcase/design/screens/base/splitview/detailDemo.js +0 -40
- package/showcase/design/screens/base/splitview/index.js +0 -25
- package/showcase/design/screens/base/translate/index.js +0 -20
- package/showcase/design/screens/main.js +0 -12
- package/showcase/design/screens/screens.routes.js +0 -23
- package/tsconfig.json +0 -23
- /package/showcase/{design/.htaccess → .htaccess} +0 -0
|
@@ -4,7 +4,7 @@ import './droparea.js'
|
|
|
4
4
|
describe('Droparea', () => {
|
|
5
5
|
const createBubbledEvent = (type, props = {}) => {
|
|
6
6
|
const event = new Event(type, {
|
|
7
|
-
bubbles: true
|
|
7
|
+
bubbles: true
|
|
8
8
|
})
|
|
9
9
|
Object.assign(event, props)
|
|
10
10
|
return event
|
|
@@ -45,7 +45,7 @@ describe('Droparea', () => {
|
|
|
45
45
|
dragNode.dispatchEvent(
|
|
46
46
|
createBubbledEvent('dragover', {
|
|
47
47
|
clientX: 0,
|
|
48
|
-
clientY: 1
|
|
48
|
+
clientY: 1
|
|
49
49
|
})
|
|
50
50
|
)
|
|
51
51
|
expect(dropZone.classList['1']).toBe('highlight')
|
|
@@ -62,7 +62,7 @@ describe('Droparea', () => {
|
|
|
62
62
|
dropZone.dispatchEvent(
|
|
63
63
|
createBubbledEvent('dragleave', {
|
|
64
64
|
clientX: 0,
|
|
65
|
-
clientY: 1
|
|
65
|
+
clientY: 1
|
|
66
66
|
})
|
|
67
67
|
)
|
|
68
68
|
expect(dropZone.classList.length).toBe(1)
|
|
@@ -76,17 +76,17 @@ describe('Droparea', () => {
|
|
|
76
76
|
const droparea = container.querySelector('ark-droparea')
|
|
77
77
|
const dropZone = droparea.querySelector('.ark-droparea__form')
|
|
78
78
|
const myFile = new File(['image'], 'Doggy.png', {
|
|
79
|
-
type: 'image/png'
|
|
79
|
+
type: 'image/png'
|
|
80
80
|
})
|
|
81
81
|
const myFile2 = new File(['image'], 'Scooby.png', {
|
|
82
|
-
type: 'image/png'
|
|
82
|
+
type: 'image/png'
|
|
83
83
|
})
|
|
84
84
|
const dropEvent = createBubbledEvent('drop', {
|
|
85
85
|
clientX: 0,
|
|
86
86
|
clientY: 1,
|
|
87
87
|
dataTransfer: {
|
|
88
|
-
files: [myFile, myFile2]
|
|
89
|
-
}
|
|
88
|
+
files: [myFile, myFile2]
|
|
89
|
+
}
|
|
90
90
|
})
|
|
91
91
|
|
|
92
92
|
dropZone.dispatchEvent(dropEvent)
|
|
@@ -102,18 +102,18 @@ describe('Droparea', () => {
|
|
|
102
102
|
const droparea = container.querySelector('ark-droparea')
|
|
103
103
|
const dropZone = droparea.querySelector('.ark-droparea__form')
|
|
104
104
|
const myFile = new File(['image'], 'Snoopy.png', {
|
|
105
|
-
type: 'image/png'
|
|
105
|
+
type: 'image/png'
|
|
106
106
|
})
|
|
107
107
|
const myFile2 = new File(['image'], 'Scooby.png', {
|
|
108
|
-
type: 'image/png'
|
|
108
|
+
type: 'image/png'
|
|
109
109
|
})
|
|
110
110
|
|
|
111
111
|
const dropEvent = createBubbledEvent('drop', {
|
|
112
112
|
clientX: 0,
|
|
113
113
|
clientY: 1,
|
|
114
114
|
dataTransfer: {
|
|
115
|
-
files: [myFile, myFile2]
|
|
116
|
-
}
|
|
115
|
+
files: [myFile, myFile2]
|
|
116
|
+
}
|
|
117
117
|
})
|
|
118
118
|
|
|
119
119
|
dropZone.dispatchEvent(dropEvent)
|
|
@@ -129,18 +129,18 @@ describe('Droparea', () => {
|
|
|
129
129
|
const droparea = container.querySelector('ark-droparea')
|
|
130
130
|
const dropZone = droparea.querySelector('.ark-droparea__form')
|
|
131
131
|
const myFile = new File(['image'], 'Snoopy.png', {
|
|
132
|
-
type: 'image/png'
|
|
132
|
+
type: 'image/png'
|
|
133
133
|
})
|
|
134
134
|
const myFile2 = new File(['image'], 'Scooby.png', {
|
|
135
|
-
type: 'image/png'
|
|
135
|
+
type: 'image/png'
|
|
136
136
|
})
|
|
137
137
|
|
|
138
138
|
const dropEvent = createBubbledEvent('drop', {
|
|
139
139
|
clientX: 0,
|
|
140
140
|
clientY: 1,
|
|
141
141
|
dataTransfer: {
|
|
142
|
-
files: [myFile, myFile2]
|
|
143
|
-
}
|
|
142
|
+
files: [myFile, myFile2]
|
|
143
|
+
}
|
|
144
144
|
})
|
|
145
145
|
|
|
146
146
|
dropZone.dispatchEvent(dropEvent)
|
|
@@ -155,18 +155,18 @@ describe('Droparea', () => {
|
|
|
155
155
|
const droparea = container.querySelector('ark-droparea')
|
|
156
156
|
const dropZone = droparea.querySelector('.ark-droparea__form')
|
|
157
157
|
const myFile = new File(['image'], 'Snoopy.png', {
|
|
158
|
-
type: 'image/png'
|
|
158
|
+
type: 'image/png'
|
|
159
159
|
})
|
|
160
160
|
const myFile2 = new File(['image'], 'Scooby.png', {
|
|
161
|
-
type: 'image/png'
|
|
161
|
+
type: 'image/png'
|
|
162
162
|
})
|
|
163
163
|
|
|
164
164
|
const dropEvent = createBubbledEvent('drop', {
|
|
165
165
|
clientX: 0,
|
|
166
166
|
clientY: 1,
|
|
167
167
|
dataTransfer: {
|
|
168
|
-
files: [myFile, myFile2]
|
|
169
|
-
}
|
|
168
|
+
files: [myFile, myFile2]
|
|
169
|
+
}
|
|
170
170
|
})
|
|
171
171
|
|
|
172
172
|
dropZone.dispatchEvent(dropEvent)
|
|
@@ -176,14 +176,14 @@ describe('Droparea', () => {
|
|
|
176
176
|
name: 'Snoopy.png',
|
|
177
177
|
size: 5,
|
|
178
178
|
type: 'image/png',
|
|
179
|
-
url: undefined
|
|
179
|
+
url: undefined
|
|
180
180
|
},
|
|
181
181
|
{
|
|
182
182
|
name: 'Scooby.png',
|
|
183
183
|
size: 5,
|
|
184
184
|
type: 'image/png',
|
|
185
|
-
url: undefined
|
|
186
|
-
}
|
|
185
|
+
url: undefined
|
|
186
|
+
}
|
|
187
187
|
])
|
|
188
188
|
})
|
|
189
189
|
|
|
@@ -196,13 +196,13 @@ describe('Droparea', () => {
|
|
|
196
196
|
const dropOpen = droparea.querySelector('.ark-droparea__open')
|
|
197
197
|
const input = droparea.querySelector('.ark-droparea__input')
|
|
198
198
|
const myFile = new File(['image'], 'Snoopy.png', {
|
|
199
|
-
type: 'image/png'
|
|
199
|
+
type: 'image/png'
|
|
200
200
|
})
|
|
201
201
|
const changeEvent = createBubbledEvent('change', {})
|
|
202
202
|
Object.defineProperty(changeEvent, 'target', {
|
|
203
203
|
value: {
|
|
204
|
-
files: [myFile]
|
|
205
|
-
}
|
|
204
|
+
files: [myFile]
|
|
205
|
+
}
|
|
206
206
|
})
|
|
207
207
|
dropOpen.click()
|
|
208
208
|
input.dispatchEvent(changeEvent)
|
|
@@ -217,16 +217,16 @@ describe('Droparea', () => {
|
|
|
217
217
|
const droparea = container.querySelector('ark-droparea')
|
|
218
218
|
const input = droparea.querySelector('.ark-droparea__input')
|
|
219
219
|
const myFile = new File(['image'], 'Snoopy.jpg', {
|
|
220
|
-
type: 'image/png'
|
|
220
|
+
type: 'image/png'
|
|
221
221
|
})
|
|
222
222
|
const myFile2 = new File(['image'], 'Scrappy.png', {
|
|
223
|
-
type: 'image/png'
|
|
223
|
+
type: 'image/png'
|
|
224
224
|
})
|
|
225
225
|
const changeEvent = createBubbledEvent('change', {})
|
|
226
226
|
Object.defineProperty(changeEvent, 'target', {
|
|
227
227
|
value: {
|
|
228
|
-
files: [myFile, myFile2]
|
|
229
|
-
}
|
|
228
|
+
files: [myFile, myFile2]
|
|
229
|
+
}
|
|
230
230
|
})
|
|
231
231
|
|
|
232
232
|
input.dispatchEvent(changeEvent)
|
|
@@ -241,13 +241,13 @@ describe('Droparea', () => {
|
|
|
241
241
|
const droparea = container.querySelector('ark-droparea')
|
|
242
242
|
const input = droparea.querySelector('.ark-droparea__input')
|
|
243
243
|
const myFile = new File(['text'], 'Snoopy.txt', {
|
|
244
|
-
type: 'text/txt'
|
|
244
|
+
type: 'text/txt'
|
|
245
245
|
})
|
|
246
246
|
const changeEvent = createBubbledEvent('change', {})
|
|
247
247
|
Object.defineProperty(changeEvent, 'target', {
|
|
248
248
|
value: {
|
|
249
|
-
files: [myFile]
|
|
250
|
-
}
|
|
249
|
+
files: [myFile]
|
|
250
|
+
}
|
|
251
251
|
})
|
|
252
252
|
input.dispatchEvent(changeEvent)
|
|
253
253
|
expect(droparea.fileList.length).toBeFalsy()
|
|
@@ -262,16 +262,16 @@ describe('Droparea', () => {
|
|
|
262
262
|
const droparea = container.querySelector('ark-droparea')
|
|
263
263
|
const dropZone = droparea.querySelector('.ark-droparea__form')
|
|
264
264
|
const myFile = new File(['audio'], 'autechre.mp3', {
|
|
265
|
-
type: 'audio/mp3'
|
|
265
|
+
type: 'audio/mp3'
|
|
266
266
|
})
|
|
267
267
|
const myFile2 = new File(['video'], 'cats.mov', {
|
|
268
|
-
type: 'video/mov'
|
|
268
|
+
type: 'video/mov'
|
|
269
269
|
})
|
|
270
270
|
const myFile3 = new File(['image'], 'snoopy.jpg', {
|
|
271
|
-
type: 'image/jpg'
|
|
271
|
+
type: 'image/jpg'
|
|
272
272
|
})
|
|
273
273
|
const myFile4 = new File(['text'], 'styles.css', {
|
|
274
|
-
type: 'text/css'
|
|
274
|
+
type: 'text/css'
|
|
275
275
|
})
|
|
276
276
|
|
|
277
277
|
const files = [myFile, myFile2, myFile3, myFile4]
|
|
@@ -279,8 +279,8 @@ describe('Droparea', () => {
|
|
|
279
279
|
clientX: 0,
|
|
280
280
|
clientY: 1,
|
|
281
281
|
dataTransfer: {
|
|
282
|
-
files
|
|
283
|
-
}
|
|
282
|
+
files
|
|
283
|
+
}
|
|
284
284
|
})
|
|
285
285
|
dropZone.dispatchEvent(dropEvent)
|
|
286
286
|
|
|
@@ -297,10 +297,10 @@ describe('Droparea', () => {
|
|
|
297
297
|
const droparea = container.querySelector('ark-droparea')
|
|
298
298
|
const dropZone = droparea.querySelector('.ark-droparea__form')
|
|
299
299
|
const myFile = new File(['image'], 'Doggy.png', {
|
|
300
|
-
type: 'image/png'
|
|
300
|
+
type: 'image/png'
|
|
301
301
|
})
|
|
302
302
|
const myFile2 = new File(['image'], 'Scooby.png', {
|
|
303
|
-
type: 'image/png'
|
|
303
|
+
type: 'image/png'
|
|
304
304
|
})
|
|
305
305
|
Object.defineProperty(myFile2, 'size', { value: 1024 * 1024 + 1 })
|
|
306
306
|
|
|
@@ -308,8 +308,8 @@ describe('Droparea', () => {
|
|
|
308
308
|
clientX: 0,
|
|
309
309
|
clientY: 1,
|
|
310
310
|
dataTransfer: {
|
|
311
|
-
files: [myFile, myFile2]
|
|
312
|
-
}
|
|
311
|
+
files: [myFile, myFile2]
|
|
312
|
+
}
|
|
313
313
|
})
|
|
314
314
|
|
|
315
315
|
droparea.maxSizeValidate([])
|
|
@@ -4,7 +4,7 @@ const tag = 'ark-emit'
|
|
|
4
4
|
export class Emit extends Component {
|
|
5
5
|
constructor () {
|
|
6
6
|
super()
|
|
7
|
-
const type = this
|
|
7
|
+
const type = this.receive || 'click'
|
|
8
8
|
this.source = JSON.parse(this._pop(':scope > data')?.textContent || null)
|
|
9
9
|
this.addEventListener(type, this.handle.bind(this))
|
|
10
10
|
}
|
|
@@ -16,11 +16,11 @@ export class Emit extends Component {
|
|
|
16
16
|
handle (event) {
|
|
17
17
|
const detail = Object.assign({}, event.detail)
|
|
18
18
|
if (this.source) Object.assign(detail, this.source)
|
|
19
|
-
|
|
19
|
+
|
|
20
20
|
const value = event.target.value
|
|
21
21
|
if (value) Object.assign(detail, { value })
|
|
22
|
-
|
|
23
|
-
const type = this
|
|
22
|
+
|
|
23
|
+
const type = this.dispatch || 'emit'
|
|
24
24
|
this.emit(type, detail)
|
|
25
25
|
}
|
|
26
26
|
|
|
@@ -12,7 +12,7 @@ describe('Emit', () => {
|
|
|
12
12
|
container.remove()
|
|
13
13
|
container = null
|
|
14
14
|
})
|
|
15
|
-
|
|
15
|
+
|
|
16
16
|
it('can be instantiated', () => {
|
|
17
17
|
container.innerHTML = `
|
|
18
18
|
<ark-emit></ark-emit>
|
|
@@ -70,7 +70,7 @@ describe('Emit', () => {
|
|
|
70
70
|
const dataElement = emit.querySelector('data')
|
|
71
71
|
expect(dataElement).toBe(null)
|
|
72
72
|
|
|
73
|
-
emit.addEventListener('emit', (event) => {
|
|
73
|
+
emit.addEventListener('emit', (event) => {
|
|
74
74
|
const detail = event.detail
|
|
75
75
|
expect(detail).toEqual(data)
|
|
76
76
|
})
|
|
@@ -100,13 +100,13 @@ describe('Emit', () => {
|
|
|
100
100
|
`
|
|
101
101
|
|
|
102
102
|
const emit = container.querySelector('[data-outer]')
|
|
103
|
-
emit.addEventListener('outer', (event) => {
|
|
103
|
+
emit.addEventListener('outer', (event) => {
|
|
104
104
|
const detail = event.detail
|
|
105
105
|
expect(detail).toEqual({
|
|
106
106
|
id: '7a792bda-6f8a-44ed-a63a-a48bba1e76bf',
|
|
107
107
|
name: 'John Doe',
|
|
108
108
|
age: 34,
|
|
109
|
-
job:
|
|
109
|
+
job: 'programmer'
|
|
110
110
|
})
|
|
111
111
|
})
|
|
112
112
|
|
|
@@ -128,7 +128,7 @@ describe('Emit', () => {
|
|
|
128
128
|
inputEvent, 'target', { writable: false, value: target })
|
|
129
129
|
|
|
130
130
|
const emit = container.querySelector('ark-emit')
|
|
131
|
-
emit.addEventListener('emit', (event) => {
|
|
131
|
+
emit.addEventListener('emit', (event) => {
|
|
132
132
|
const detail = event.detail
|
|
133
133
|
expect(detail).toEqual({ value: 'XYZ' })
|
|
134
134
|
})
|
|
@@ -15,12 +15,12 @@ describe('List item', () => {
|
|
|
15
15
|
})
|
|
16
16
|
|
|
17
17
|
it('can be instantiated', () => {
|
|
18
|
-
|
|
18
|
+
container.innerHTML = `
|
|
19
19
|
<ark-list></ark-list>
|
|
20
20
|
`
|
|
21
21
|
|
|
22
22
|
const list = container.querySelector('ark-list')
|
|
23
|
-
list.source =
|
|
23
|
+
list.source = ['Colombia', 'Uruguay', 'Brasil', 'Perú']
|
|
24
24
|
list.render()
|
|
25
25
|
const item = list.querySelector('ark-list-item')
|
|
26
26
|
|
|
@@ -28,12 +28,12 @@ describe('List item', () => {
|
|
|
28
28
|
})
|
|
29
29
|
|
|
30
30
|
it('can be rendered with data', () => {
|
|
31
|
-
|
|
31
|
+
container.innerHTML = `
|
|
32
32
|
<ark-list></ark-list>
|
|
33
33
|
`
|
|
34
34
|
|
|
35
35
|
const list = container.querySelector('ark-list')
|
|
36
|
-
list.source =
|
|
36
|
+
list.source = ['Colombia']
|
|
37
37
|
list.render()
|
|
38
38
|
const item = list.querySelector('ark-list-item')
|
|
39
39
|
|
|
@@ -49,24 +49,24 @@ describe('List item', () => {
|
|
|
49
49
|
`
|
|
50
50
|
|
|
51
51
|
const list = container.querySelector('[data-template-list]')
|
|
52
|
-
list.source =
|
|
52
|
+
list.source = ['Colombia']
|
|
53
53
|
list.render()
|
|
54
54
|
const item = list.querySelector('ark-list-item')
|
|
55
|
-
|
|
55
|
+
|
|
56
56
|
item.data = 'my data'
|
|
57
|
-
item.template = data => /* html */ `<span>${data}</span>`
|
|
57
|
+
item.template = data => /* html */ `<span>${data}</span>`
|
|
58
58
|
item.render()
|
|
59
59
|
|
|
60
60
|
expect(item.innerHTML.trim()).toEqual('<span>my data</span>')
|
|
61
61
|
})
|
|
62
|
-
|
|
62
|
+
|
|
63
63
|
it('can be rendered with template', () => {
|
|
64
64
|
container.innerHTML = `
|
|
65
65
|
<ark-list data-template-list></ark-list>
|
|
66
66
|
`
|
|
67
67
|
|
|
68
68
|
const list = container.querySelector('[data-template-list]')
|
|
69
|
-
list.source =
|
|
69
|
+
list.source = ['Colombia']
|
|
70
70
|
list.render()
|
|
71
71
|
const item = list.querySelector('ark-list-item')
|
|
72
72
|
|
|
@@ -75,19 +75,17 @@ describe('List item', () => {
|
|
|
75
75
|
item.render()
|
|
76
76
|
|
|
77
77
|
item.addEventListener('list-item:selected', event => {
|
|
78
|
-
expect(event
|
|
78
|
+
expect(event.detail.data).toEqual('my data')
|
|
79
79
|
})
|
|
80
80
|
item.click()
|
|
81
81
|
})
|
|
82
|
-
|
|
82
|
+
|
|
83
83
|
it('can be rendered without template', () => {
|
|
84
84
|
const item = new ListItem()
|
|
85
85
|
item.init({
|
|
86
|
-
data:'my data'
|
|
86
|
+
data: 'my data'
|
|
87
87
|
}).render()
|
|
88
88
|
|
|
89
89
|
expect(item.innerHTML.trim()).toEqual('my data')
|
|
90
|
-
|
|
91
90
|
})
|
|
92
|
-
|
|
93
91
|
})
|
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
import { Component } from
|
|
2
|
-
import { ListItem } from
|
|
1
|
+
import { Component } from '../../../base/component/index.js'
|
|
2
|
+
import { ListItem } from './list.item.js'
|
|
3
3
|
|
|
4
|
-
const tag =
|
|
4
|
+
const tag = 'ark-list'
|
|
5
5
|
|
|
6
6
|
export class List extends Component {
|
|
7
7
|
constructor () {
|
|
8
8
|
super()
|
|
9
|
-
this.addEventListener(
|
|
10
|
-
this.addEventListener(
|
|
9
|
+
this.addEventListener('click', this._onSelected.bind(this))
|
|
10
|
+
this.addEventListener('delete', this.onDeleted.bind(this))
|
|
11
11
|
}
|
|
12
12
|
|
|
13
13
|
/** @param {Object} context */
|
|
14
|
-
init(context = {}) {
|
|
14
|
+
init (context = {}) {
|
|
15
15
|
this.source = /** @type {Array} */ (context.source) || this.source || []
|
|
16
16
|
this.template = context.template || this.template || ((data) => `${data}`)
|
|
17
17
|
|
|
18
18
|
return super.init()
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
-
render() {
|
|
21
|
+
render () {
|
|
22
22
|
const listData = this.select('data')
|
|
23
23
|
const list = JSON.parse(listData?.textContent || null)
|
|
24
24
|
const source = list || this.source
|
|
@@ -26,29 +26,29 @@ export class List extends Component {
|
|
|
26
26
|
const itemTemplate = (this.select('template'))?.innerHTML
|
|
27
27
|
this.template = itemTemplate ? this._format(itemTemplate) : this.template
|
|
28
28
|
|
|
29
|
-
this.content =
|
|
29
|
+
this.content = ''
|
|
30
30
|
|
|
31
31
|
source.forEach((data, index) => {
|
|
32
32
|
const item = new ListItem()
|
|
33
33
|
|
|
34
|
-
if (this.hasAttribute(
|
|
35
|
-
item.setAttribute(
|
|
34
|
+
if (this.hasAttribute('click-disabled')) {
|
|
35
|
+
item.setAttribute('click-disabled', '')
|
|
36
36
|
}
|
|
37
|
-
|
|
37
|
+
|
|
38
38
|
this.appendChild(item)
|
|
39
39
|
|
|
40
40
|
item.init({
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
41
|
+
data,
|
|
42
|
+
template: this.template,
|
|
43
|
+
index
|
|
44
|
+
}).render()
|
|
45
45
|
})
|
|
46
46
|
|
|
47
47
|
return super.render()
|
|
48
48
|
}
|
|
49
49
|
|
|
50
50
|
/** @param {number} start @param {number?} deleteCount */
|
|
51
|
-
delete(start, deleteCount = 1) {
|
|
51
|
+
delete (start, deleteCount = 1) {
|
|
52
52
|
this.source.splice(start, deleteCount)
|
|
53
53
|
const deletions = []
|
|
54
54
|
for (let i = start; i < (deleteCount + start); i++) {
|
|
@@ -58,37 +58,37 @@ export class List extends Component {
|
|
|
58
58
|
deletions.map(item => item.remove())
|
|
59
59
|
}
|
|
60
60
|
|
|
61
|
-
_format(template) {
|
|
61
|
+
_format (template) {
|
|
62
62
|
return (data) => Function(`return \`${template}\``).call(data)
|
|
63
63
|
}
|
|
64
64
|
|
|
65
65
|
/** @param {MouseEvent} event */
|
|
66
|
-
_onSelected(event) {
|
|
66
|
+
_onSelected (event) {
|
|
67
67
|
event.stopImmediatePropagation()
|
|
68
68
|
|
|
69
69
|
const target = /** @type {HTMLElement} */ (event.target)
|
|
70
|
-
const item = /** @type {ListItem} */ (target.closest(
|
|
70
|
+
const item = /** @type {ListItem} */ (target.closest('ark-list-item'))
|
|
71
71
|
|
|
72
|
-
if (!item || item.hasAttribute(
|
|
72
|
+
if (!item || item.hasAttribute('click-disabled')) return
|
|
73
73
|
|
|
74
74
|
this.dispatchEvent(
|
|
75
|
-
new CustomEvent(
|
|
75
|
+
new CustomEvent('list-selected', {
|
|
76
76
|
bubbles: true,
|
|
77
77
|
detail: {
|
|
78
78
|
index: item.index,
|
|
79
79
|
data: item.data,
|
|
80
|
-
origin: event
|
|
81
|
-
}
|
|
80
|
+
origin: event
|
|
81
|
+
}
|
|
82
82
|
})
|
|
83
83
|
)
|
|
84
84
|
}
|
|
85
85
|
|
|
86
86
|
/** @param {MouseEvent} event */
|
|
87
|
-
onDeleted(event) {
|
|
87
|
+
onDeleted (event) {
|
|
88
88
|
event.stopImmediatePropagation()
|
|
89
89
|
|
|
90
90
|
const target = /** @type {HTMLElement} */ (event.target)
|
|
91
|
-
const item = /** @type {ListItem} */ (target.closest(
|
|
91
|
+
const item = /** @type {ListItem} */ (target.closest('ark-list-item'))
|
|
92
92
|
|
|
93
93
|
this.delete(Number(item.index))
|
|
94
94
|
}
|