material 0.9.20 → 0.9.22

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 (51) hide show
  1. package/index.js +1 -0
  2. package/package.json +1 -1
  3. package/src/class/app.js +10 -0
  4. package/src/class/component.js +16 -13
  5. package/src/class/control.js +24 -16
  6. package/src/class/form.js +7 -22
  7. package/src/class/view.js +18 -19
  8. package/src/colorpicker.js +356 -0
  9. package/src/datehour.js +17 -12
  10. package/src/form/cancel.js +1 -2
  11. package/src/form/controller.js +10 -18
  12. package/src/form/data.js +175 -47
  13. package/src/form/fetch.js +18 -25
  14. package/src/form/render.js +2 -2
  15. package/src/form/submit.js +9 -3
  16. package/src/form/update.js +27 -30
  17. package/src/list/build.js +6 -1
  18. package/src/list/status.js +5 -0
  19. package/src/list/update.js +2 -0
  20. package/src/list/virtual.js +1 -1
  21. package/src/module/dom.js +0 -1
  22. package/src/module/emitter.js +45 -13
  23. package/src/module/extract.js +2 -2
  24. package/src/module/layout.js +1 -1
  25. package/src/module/request.js +49 -16
  26. package/src/selector.js +1 -1
  27. package/src/skin/material/control/colorpicker.sass +188 -0
  28. package/src/switch.js +6 -8
  29. package/src/switcher.js +21 -12
  30. package/src/text.js +1 -1
  31. package/src/textfield.js +6 -1
  32. package/src/list.new/build.js +0 -139
  33. package/src/list.new/click.js +0 -40
  34. package/src/list.new/collection.js +0 -30
  35. package/src/list.new/create.js +0 -45
  36. package/src/list.new/data.js +0 -16
  37. package/src/list.new/display.js +0 -78
  38. package/src/list.new/empty.js +0 -9
  39. package/src/list.new/filter.js +0 -114
  40. package/src/list.new/image.js +0 -19
  41. package/src/list.new/init.js +0 -6
  42. package/src/list.new/load.js +0 -9
  43. package/src/list.new/remove.js +0 -22
  44. package/src/list.new/render.js +0 -142
  45. package/src/list.new/request.js +0 -216
  46. package/src/list.new/search.js +0 -155
  47. package/src/list.new/select.js +0 -221
  48. package/src/list.new/status.js +0 -21
  49. package/src/list.new/update.js +0 -75
  50. package/src/list.new/virtual.js +0 -186
  51. package/src/list.new/virtual.new.js +0 -213
@@ -1,213 +0,0 @@
1
- // based on https://sergimansilla.com/blog/virtual-scrolling/
2
-
3
- // Import necessary modules
4
- import passiveEvents from '../module/passive' // Import the passiveEvents utility.
5
- import emitter from '../module/emitter' // Import the emitter module.
6
-
7
- // Define the VirtualList class
8
- class VirtualList {
9
- constructor (options) {
10
- // Initialize the class with options passed to the constructor.
11
- this.options = { ...(options || {}) } // Spread operator to merge options with default values.
12
- Object.assign(this, emitter) // Assign emitter methods to the instance.
13
-
14
- // Destructure options for easier access to properties.
15
- const { itemHeight = 0, size = 0, items = [], render, container } = options
16
-
17
- // Initialize instance variables with default or provided values.
18
- this.itemHeight = itemHeight
19
- this.next = false
20
- this.size = size
21
- this.chunkSize = size
22
- this.items = items
23
- this.render = render
24
- this.scroller = VirtualList.createScroller()
25
- this.container = container
26
-
27
- // Get the offset height of the container.
28
- this.setOffset()
29
-
30
- // Add a window resize event listener to update the offset height.
31
- window.addEventListener('resize', () => {
32
- clearTimeout(this.resizeTimeout)
33
-
34
- this.resizeTimeout = setTimeout(() => {
35
- this.setOffset()
36
- }, 50)
37
- })
38
-
39
- // Add 'virtual' class to the container element.
40
- this.container.classList.add('virtual')
41
- }
42
-
43
- // Method to render a chunk of items within the visible range.
44
- renderChunk (node, from, number) {
45
- const fragment = document.createDocumentFragment()
46
- fragment.appendChild(this.scroller)
47
-
48
- let last = from + number
49
- if (last > this.count) last = this.count
50
-
51
- for (let i = from; i < last; i++) {
52
- const item = this.render(i)
53
-
54
- // Position the item absolutely based on its index and item height.
55
- item.style.position = 'absolute'
56
- item.style.top = i * this.itemHeight + 'px'
57
- fragment.appendChild(item)
58
- }
59
-
60
- node.innerHTML = ''
61
- node.appendChild(fragment)
62
-
63
- // Emit 'next' event if applicable.
64
- // console.log('last', last)
65
- // console.log('count', this.count)
66
- // console.log('next', this.next)
67
- // console.log('size', this.size)
68
-
69
- if (this.next && last && last > (this.count - this.size / 2)) {
70
- this.emit('next', this.count)
71
- }
72
-
73
- this.next = true
74
- }
75
-
76
- // Method to set the items and render the initial chunk.
77
- set (items) {
78
- this.next = false
79
- this.items = items
80
- this.count = items.length
81
-
82
- if (this.count < 1 || this.count === undefined) return
83
-
84
- this.container.innerHTML = ''
85
- this.container.scrollTop = 0
86
-
87
- const height = this.itemHeight * this.count
88
-
89
- this.scroller.style.height = height + 'px'
90
-
91
- this.itemsByScreen = Math.ceil(this.offsetHeight / this.itemHeight)
92
-
93
- let size = this.itemsByScreen * 4
94
- this.renderChunk(this.container, 0, size)
95
-
96
- this.size = size
97
-
98
- this.emit('size', size)
99
-
100
- let lastRepaintY
101
- const maxBuffer = this.itemsByScreen * this.itemHeight
102
-
103
- // Add a scroll event listener to render items dynamically.
104
- const onScroll = (e) => {
105
- const scrollTop = e.target.scrollTop
106
- const first = parseInt(scrollTop / this.itemHeight) - this.itemsByScreen
107
-
108
- size = this.itemsByScreen * 4
109
-
110
- if (!lastRepaintY || Math.abs(scrollTop - lastRepaintY) > maxBuffer) {
111
- this.renderChunk(this.container, first, size)
112
- lastRepaintY = scrollTop
113
- }
114
-
115
- const progress = Math.ceil((scrollTop / this.itemHeight) + this.itemsByScreen) - 1
116
- this.emit('progress', progress)
117
- }
118
-
119
- if (!this.scrollEvents) {
120
- // Add scroll event listener with passive option if supported.
121
- this.container.addEventListener(
122
- 'scroll',
123
- onScroll,
124
- passiveEvents() ? { passive: true } : false
125
- )
126
- this.scrollEvents = true
127
- }
128
- }
129
-
130
- // Method to update the items and re-render the visible chunk.
131
- update (items) {
132
- this.items = items || this.items
133
-
134
- if (!this.items) return
135
-
136
- this.count = this.items.length
137
- const cachedItemsLen = this.itemsByScreen * 4
138
- const scrollTop = this.container.scrollTop
139
- const height = this.itemHeight * this.count
140
-
141
- this.scroller.style.height = height + 'px'
142
-
143
- let first = parseInt(scrollTop / this.itemHeight) - this.itemsByScreen
144
- first = first < 0 ? 0 : first
145
-
146
- this.renderChunk(this.container, first, cachedItemsLen)
147
- }
148
-
149
- // Method to add items and update the container height.
150
- add (items) {
151
- this.items = items || this.items
152
-
153
- if (!this.items) return
154
-
155
- this.count = this.items.length
156
- const height = this.itemHeight * this.count
157
-
158
- this.scroller.style.height = height + 'px'
159
- }
160
-
161
- // Method to reset the items and container to an initial state.
162
- reset () {
163
- this.items = []
164
- this.count = 0
165
-
166
- this.container.scrollTop = 0
167
-
168
- this.scroller.style.height = '0'
169
- }
170
-
171
- // Method to set the offset height of the container.
172
- setOffset (info) {
173
- this.offsetHeight = this.container.offsetHeight
174
- if (this.offsetHeight < 1) {
175
- this.offsetHeight = window.innerHeight ||
176
- document.documentElement.clientHeight ||
177
- document.body.clientHeight
178
- }
179
-
180
- this.itemsByScreen = Math.ceil(this.offsetHeight / this.itemHeight)
181
-
182
- const itemsByScreen = Math.ceil(this.offsetHeight / this.itemHeight)
183
- const size = itemsByScreen * 4
184
-
185
- return size
186
- }
187
-
188
- setCount = function (count) {
189
- console.error('setCount', count)
190
- this.count = count
191
- const height = this.itemHeight * this.count
192
-
193
- this.container.height = height + 'px'
194
-
195
- // console.log('scroller height', height)
196
- this.scroller.style.height = height + 'px'
197
- }
198
-
199
- // Method to get the total count of items.
200
- getCount () {
201
- return this.count
202
- }
203
-
204
- // Static method to create a scroller element.
205
- static createScroller () {
206
- const scroller = document.createElement('div')
207
- scroller.classList.add('scroller')
208
- return scroller
209
- }
210
- }
211
-
212
- // Export the VirtualList class as the default export.
213
- export default VirtualList