material 0.7.0 → 0.7.2
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 +1 -5
- package/dist/demo-bundle.js +2281 -2
- package/dist/demo-bundle.js.map +7 -1
- package/dist/demo.js +13 -13
- package/esbuild.js +22 -0
- package/esbuild.watch.js +25 -0
- package/form.js +27 -0
- package/index.js +59 -58
- package/list.js +35 -0
- package/package.json +8 -17
- package/src/appbar.js +7 -204
- package/src/badge.js +27 -0
- package/src/button.js +127 -177
- package/src/calendar.js +53 -55
- package/src/card.js +1 -3
- package/src/checkbox.js +5 -55
- package/src/component.js +0 -2
- package/src/container.js +0 -2
- package/src/datehour.js +38 -0
- package/src/dialog.js +104 -151
- package/src/divider.js +1 -3
- package/src/drawer.js +1 -19
- package/src/element/attribute.js +7 -10
- package/src/element/build.js +6 -7
- package/src/element/create.js +3 -6
- package/src/element/event.js +2 -2
- package/src/element/insert.js +6 -17
- package/src/element/observer.js +22 -0
- package/src/element/offset.js +2 -2
- package/src/element/style.js +12 -12
- package/src/element.js +2 -2
- package/src/field/email.js +9 -44
- package/src/field/image.js +17 -51
- package/src/{control/file.js → file.js} +15 -45
- package/src/form/build.js +7 -7
- package/src/form/controller.js +8 -8
- package/src/form/create.js +1 -1
- package/src/form/data.js +9 -9
- package/src/form/delete.js +1 -1
- package/src/form/render.js +9 -9
- package/src/form/set.js +1 -1
- package/src/form/submit.js +6 -6
- package/src/form/update.js +3 -3
- package/src/form/verify.js +6 -6
- package/src/form.js +9 -11
- package/src/icon.js +4 -6
- package/src/image.js +39 -106
- package/src/item.js +1 -3
- package/src/layout.js +14 -14
- package/src/{control/link.js → link.js} +13 -32
- package/src/list/build.js +10 -10
- package/src/list/click.js +3 -3
- package/src/list/collection.js +1 -1
- package/src/list/filter.js +11 -11
- package/src/list/image.js +3 -3
- package/src/list/render.js +15 -15
- package/src/list/request.js +8 -8
- package/src/list/search.js +12 -12
- package/src/list/select.js +18 -18
- package/src/list/status.js +1 -1
- package/src/list/update.js +6 -6
- package/src/list/virtual.js +20 -20
- package/src/list/virtual.new.js +5 -5
- package/src/list.js +29 -217
- package/src/loading.js +73 -0
- package/src/map/build.js +2 -2
- package/src/map/countries.js +8 -8
- package/src/map/display.js +13 -13
- package/src/map/focus.js +7 -7
- package/src/map/select.js +2 -2
- package/src/map/set.js +3 -3
- package/src/map/viewport.js +11 -11
- package/src/menu.js +59 -115
- package/src/mixin/control.js +3 -3
- package/src/mixin/controller.js +5 -5
- package/src/mixin/create.js +1 -1
- package/src/mixin/display.js +1 -2
- package/src/mixin/events.js +4 -16
- package/src/mixin/focus.js +1 -1
- package/src/mixin/icon.js +2 -2
- package/src/mixin/init.js +2 -2
- package/src/mixin/insert.js +7 -29
- package/src/mixin/label.js +2 -2
- package/src/mixin/settings.js +5 -5
- package/src/module/attach.js +35 -49
- package/src/{control/module → module}/attributes.js +4 -4
- package/src/module/build.js +12 -12
- package/src/module/classify.js +4 -4
- package/src/module/controller.js +5 -32
- package/src/module/css.js +12 -84
- package/src/module/dataset.js +1 -1
- package/src/module/dom.js +8 -3
- package/src/module/dot.js +4 -4
- package/src/module/emitter.js +1 -1
- package/src/module/event.js +2 -2
- package/src/module/events.js +29 -35
- package/src/module/extract.js +10 -10
- package/src/module/last.js +18 -0
- package/src/module/mediator.js +1 -13
- package/src/module/object.js +4 -4
- package/src/module/observer.js +43 -16
- package/src/module/remove.js +10 -10
- package/src/module/ripple.js +19 -24
- package/src/module/scrollbar.js +10 -14
- package/src/module/smoothscroll.js +5 -9
- package/src/module/utils.js +14 -23
- package/src/module/viewport.js +5 -5
- package/src/navigation.js +19 -0
- package/src/progress.js +1 -11
- package/src/search.js +66 -0
- package/src/select.js +58 -273
- package/src/{control/selecter.js → selecter.js} +42 -42
- package/src/selector.js +3 -3
- package/src/skin/material/component/navigation.sass +9 -0
- package/src/skin/material/control/button.sass +10 -0
- package/src/slider.js +1 -3
- package/src/snackbar.js +72 -50
- package/src/switch.js +111 -103
- package/src/{control/switcher.js → switcher.js} +28 -31
- package/src/tabs.js +4 -5
- package/src/tabview.js +26 -46
- package/src/text.js +25 -74
- package/src/textfield.js +97 -234
- package/src/toolbar.js +12 -12
- package/src/tooltip.js +7 -7
- package/src/tree.js +10 -66
- package/src/view/build.js +2 -2
- package/src/view/dataset.js +1 -1
- package/src/view.js +9 -74
- package/rollup.config.js +0 -34
- package/src/banner.js +0 -231
- package/src/control/button.js +0 -239
- package/src/control/button.new.js +0 -190
- package/src/control/datehour.js +0 -65
- package/src/control/dialog.js +0 -175
- package/src/control/image.js +0 -92
- package/src/control/list.js +0 -67
- package/src/control/loading.js +0 -128
- package/src/control/menu.js +0 -85
- package/src/control/module/addclass.js +0 -16
- package/src/control/search.js +0 -98
- package/src/control/select.js +0 -130
- package/src/control/snackbar.js +0 -91
- package/src/control/switch.js +0 -272
- package/src/control/text.js +0 -70
- package/src/control/textfield.js +0 -177
- package/src/element/ripple.js +0 -90
- package/src/tabs/setup.js +0 -0
package/src/button.js
CHANGED
|
@@ -1,234 +1,184 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import
|
|
4
|
-
import
|
|
1
|
+
import EventEmitter from './mixin/emitter'
|
|
2
|
+
import build from './module/build'
|
|
3
|
+
import display from './mixin/display'
|
|
4
|
+
import bindEvents from './module/events'
|
|
5
|
+
import dataset from './module/dataset'
|
|
5
6
|
import ripple from './module/ripple'
|
|
6
7
|
|
|
7
|
-
|
|
8
|
+
const DEFAULT_TYPE = 'button'
|
|
9
|
+
const DEFAULT_CLASS = 'button'
|
|
8
10
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
+
class Button extends EventEmitter {
|
|
12
|
+
static isComponent () {
|
|
13
|
+
return true
|
|
14
|
+
}
|
|
11
15
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
[
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
16
|
+
static defaults = {
|
|
17
|
+
class: DEFAULT_CLASS,
|
|
18
|
+
tag: 'button',
|
|
19
|
+
styles: ['style', 'color'],
|
|
20
|
+
ripple: true,
|
|
21
|
+
stopPropagation: false,
|
|
22
|
+
events: [
|
|
23
|
+
['element.click', 'click'],
|
|
24
|
+
['element.mousedown', 'mousedown'],
|
|
25
|
+
['element.mouseup', 'mouseup'],
|
|
26
|
+
['element.mouseleave', 'mouseup'],
|
|
27
|
+
['element.touchstart', 'mousedown'],
|
|
28
|
+
['element.touchend', 'mouseup']
|
|
29
|
+
]
|
|
30
|
+
}
|
|
22
31
|
|
|
23
|
-
/**
|
|
24
|
-
* Class that represents a button
|
|
25
|
-
* @class
|
|
26
|
-
* @since 0.0.1
|
|
27
|
-
* @example
|
|
28
|
-
* var button = new Button({
|
|
29
|
-
* label: 'Button raised',
|
|
30
|
-
* type: 'raised',
|
|
31
|
-
* color: 'primary'
|
|
32
|
-
* }).on('click', function(e) {
|
|
33
|
-
* console.log('button click', e);
|
|
34
|
-
* }).insert(document.body);
|
|
35
|
-
*/
|
|
36
|
-
class Button {
|
|
37
|
-
/**
|
|
38
|
-
* The init method of the Button class
|
|
39
|
-
* @param {Object} options [description]
|
|
40
|
-
* @private
|
|
41
|
-
* @return {Object} The class instance
|
|
42
|
-
*/
|
|
43
32
|
constructor (options) {
|
|
33
|
+
super()
|
|
34
|
+
|
|
44
35
|
this.init(options)
|
|
45
36
|
this.build()
|
|
46
37
|
this.setup()
|
|
47
|
-
this.
|
|
48
|
-
|
|
49
|
-
this.emit('ready')
|
|
50
|
-
|
|
51
|
-
return this
|
|
38
|
+
this.bindEvents()
|
|
52
39
|
}
|
|
53
40
|
|
|
54
|
-
/**
|
|
55
|
-
* [init description]
|
|
56
|
-
* @param {?} options [description]
|
|
57
|
-
* @return {?} [description]
|
|
58
|
-
*/
|
|
59
41
|
init (options) {
|
|
60
|
-
this.options =
|
|
61
|
-
Object.assign(this,
|
|
62
|
-
|
|
63
|
-
this.element = this.element || {}
|
|
64
|
-
|
|
65
|
-
// init module$
|
|
66
|
-
|
|
67
|
-
this.emit('init')
|
|
42
|
+
this.options = { ...Button.defaults, ...options }
|
|
43
|
+
Object.assign(this, build, display, bindEvents)
|
|
68
44
|
}
|
|
69
45
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
*/
|
|
75
|
-
build () {
|
|
76
|
-
this.element = {}
|
|
77
|
-
|
|
78
|
-
this.element = create(this.options)
|
|
79
|
-
|
|
80
|
-
this.options.label = this.options.label || this.options.text
|
|
81
|
-
|
|
82
|
-
this.element.setAttribute('aria-label', this.options.label || this.options.name)
|
|
83
|
-
|
|
84
|
-
if (this.options.title) {
|
|
85
|
-
this.element.setAttribute('title', this.options.title)
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
this.label(this.options.label)
|
|
89
|
-
this.icon(this.options.icon)
|
|
90
|
-
|
|
91
|
-
if (this.options.tooltip) {
|
|
92
|
-
this.element.dataset.tooltip = this.options.tooltip
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
if (this.options.container) {
|
|
96
|
-
if (this.options.container.root) {
|
|
97
|
-
this.container = this.options.container.root
|
|
98
|
-
} else {
|
|
99
|
-
this.container = this.options.container
|
|
100
|
-
}
|
|
101
|
-
insert(this.element, this.options.container)
|
|
102
|
-
}
|
|
46
|
+
setup () {
|
|
47
|
+
this.setAttributes()
|
|
48
|
+
this.styleAttributes()
|
|
49
|
+
this.buildElements()
|
|
103
50
|
|
|
104
|
-
if (this.options.
|
|
105
|
-
|
|
51
|
+
if (this.options.text) {
|
|
52
|
+
this.element.innerHTML = this.element.innerHTML + this.options.text
|
|
106
53
|
}
|
|
54
|
+
}
|
|
107
55
|
|
|
108
|
-
|
|
56
|
+
buildElements () {
|
|
57
|
+
this.buildIcon()
|
|
58
|
+
this.buildLabel()
|
|
109
59
|
}
|
|
110
60
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
61
|
+
setAttributes () {
|
|
62
|
+
const { type, name, value, title, text, label, tooltip, data, case: caseOption } = this.options
|
|
63
|
+
|
|
64
|
+
this.element.setAttribute('type', type ?? DEFAULT_TYPE)
|
|
65
|
+
if (name) this.element.setAttribute('name', name)
|
|
66
|
+
if (value) this.element.setAttribute('value', value)
|
|
67
|
+
if (title) this.element.setAttribute('title', title)
|
|
68
|
+
this.element.setAttribute('aria-label', text ?? label ?? DEFAULT_CLASS)
|
|
69
|
+
if (tooltip) this.element.setAttribute('data-tooltip', tooltip)
|
|
70
|
+
if (data) dataset(this.element, data)
|
|
71
|
+
if (caseOption) this.element.classList.add(`${caseOption}-case`)
|
|
72
|
+
if (this.options.ripple) ripple(this.element)
|
|
73
|
+
}
|
|
119
74
|
|
|
120
|
-
|
|
75
|
+
styleAttributes () {
|
|
76
|
+
const { style, size, color, bold } = this.options
|
|
77
|
+
if (style) this.element.classList.add(`style-${style}`)
|
|
78
|
+
if (size) this.element.classList.add(`${size}-size`)
|
|
79
|
+
if (color) this.element.classList.add(`color-${color}`)
|
|
80
|
+
if (bold) this.element.classList.add('bold')
|
|
121
81
|
}
|
|
122
82
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
* @return {?} [description]
|
|
126
|
-
*/
|
|
127
|
-
setup () {
|
|
128
|
-
this.element.input = this.element
|
|
83
|
+
buildLabel () {
|
|
84
|
+
if (!this.options.label) return
|
|
129
85
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
86
|
+
this.label = document.createElement('label')
|
|
87
|
+
this.label.classList.add('label')
|
|
88
|
+
this.label.innerHTML = this.options.label
|
|
133
89
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
// }
|
|
90
|
+
this.element.appendChild(this.label)
|
|
91
|
+
}
|
|
137
92
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
}
|
|
93
|
+
buildIcon () {
|
|
94
|
+
if (!this.options.icon) return
|
|
141
95
|
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
96
|
+
this.icon = document.createElement('i')
|
|
97
|
+
this.icon.classList.add('icon')
|
|
98
|
+
this.icon.innerHTML = this.options.icon
|
|
99
|
+
|
|
100
|
+
this.element.appendChild(this.icon)
|
|
145
101
|
}
|
|
146
102
|
|
|
147
|
-
/**
|
|
148
|
-
* Setter
|
|
149
|
-
* @param {string} prop
|
|
150
|
-
* @param {string} value
|
|
151
|
-
* @return {Object} The class instance
|
|
152
|
-
*/
|
|
153
103
|
set (prop, value) {
|
|
104
|
+
// console.log('set', this.element, prop, value)
|
|
154
105
|
switch (prop) {
|
|
155
|
-
case 'disabled':
|
|
156
|
-
this.disable(value)
|
|
157
|
-
break
|
|
158
106
|
case 'value':
|
|
159
|
-
this.
|
|
107
|
+
this.element.value = value
|
|
160
108
|
break
|
|
161
109
|
case 'label':
|
|
162
|
-
this.
|
|
110
|
+
if (!this.label) this.buildLabel()
|
|
111
|
+
this.label.innerHTML = value
|
|
112
|
+
break
|
|
113
|
+
case 'text':
|
|
114
|
+
this.element.innerHTML = value
|
|
115
|
+
break
|
|
116
|
+
case 'icon':
|
|
117
|
+
if (this.icon) {
|
|
118
|
+
this.icon.innerHTML = value
|
|
119
|
+
}
|
|
120
|
+
break
|
|
121
|
+
case 'enable':
|
|
122
|
+
this.element.disabled = false
|
|
123
|
+
break
|
|
124
|
+
case 'disable':
|
|
125
|
+
this.element.disabled = true
|
|
163
126
|
break
|
|
164
127
|
default:
|
|
165
|
-
|
|
128
|
+
// console.log('prop', prop)
|
|
129
|
+
this.element.innerHTML = prop
|
|
166
130
|
}
|
|
167
131
|
|
|
168
132
|
return this
|
|
169
133
|
}
|
|
170
134
|
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
*/
|
|
175
|
-
setLabel (label) {
|
|
176
|
-
label = label || this.options.label
|
|
177
|
-
var text = label
|
|
178
|
-
|
|
179
|
-
if (label === null || label === false) {
|
|
180
|
-
text = ''
|
|
181
|
-
} else if (label) {
|
|
182
|
-
text = label
|
|
183
|
-
} else if (this.options.label) {
|
|
184
|
-
text = label
|
|
185
|
-
} else {
|
|
186
|
-
text = this.options.name
|
|
135
|
+
setLabel (value) {
|
|
136
|
+
if (this.label) {
|
|
137
|
+
this.label.innerHTML = value
|
|
187
138
|
}
|
|
139
|
+
}
|
|
188
140
|
|
|
189
|
-
|
|
190
|
-
|
|
141
|
+
setText (value) {
|
|
142
|
+
if (this.label) {
|
|
143
|
+
this.setLabel(value)
|
|
191
144
|
} else {
|
|
192
|
-
this.element.
|
|
145
|
+
this.element.innerHTML = value
|
|
193
146
|
}
|
|
194
147
|
}
|
|
195
148
|
|
|
196
|
-
|
|
197
|
-
|
|
149
|
+
get (prop) {
|
|
150
|
+
switch (prop) {
|
|
151
|
+
case 'value':
|
|
152
|
+
return this.element.value
|
|
153
|
+
case 'label':
|
|
154
|
+
return this.label?.innerHTML ?? this.element.value
|
|
155
|
+
default:
|
|
156
|
+
return this.element.value
|
|
157
|
+
}
|
|
198
158
|
}
|
|
199
159
|
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
* @return {void}
|
|
204
|
-
*/
|
|
205
|
-
handleClick (e) {
|
|
206
|
-
e.preventDefault()
|
|
207
|
-
|
|
208
|
-
if (this.disabled === true) return
|
|
209
|
-
if (this.options.upload) return
|
|
210
|
-
|
|
211
|
-
// this.publish('click');
|
|
212
|
-
this.emit('click', e)
|
|
160
|
+
disable () {
|
|
161
|
+
this.element.disabled = true
|
|
162
|
+
}
|
|
213
163
|
|
|
214
|
-
|
|
164
|
+
enable () {
|
|
165
|
+
this.element.disabled = false
|
|
215
166
|
}
|
|
216
167
|
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
*/
|
|
222
|
-
handleMouseOver (e) {
|
|
223
|
-
e.preventDefault()
|
|
168
|
+
click (ev) {
|
|
169
|
+
if (this.options.stopPropagation === true) {
|
|
170
|
+
ev.stopPropagation()
|
|
171
|
+
}
|
|
224
172
|
|
|
225
|
-
|
|
173
|
+
this.emit('click', ev)
|
|
174
|
+
}
|
|
226
175
|
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
176
|
+
mousedown (ev) {
|
|
177
|
+
this.element.classList.add('pushed')
|
|
178
|
+
}
|
|
230
179
|
|
|
231
|
-
|
|
180
|
+
mouseup (ev) {
|
|
181
|
+
this.element.classList.remove('pushed')
|
|
232
182
|
}
|
|
233
183
|
}
|
|
234
184
|
|
package/src/calendar.js
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
'use strict'
|
|
2
|
-
|
|
3
1
|
import create from './element/create'
|
|
4
2
|
import insert from './element/insert'
|
|
5
|
-
import css from './module/css'
|
|
3
|
+
import * as css from './module/css'
|
|
6
4
|
import attach from './module/attach'
|
|
7
5
|
import emitter from './module/emitter'
|
|
8
6
|
|
|
@@ -81,8 +79,8 @@ class Calendar {
|
|
|
81
79
|
*/
|
|
82
80
|
getFirstDayOfWeek (d) {
|
|
83
81
|
d = new Date(d)
|
|
84
|
-
|
|
85
|
-
|
|
82
|
+
const day = d.getDay()
|
|
83
|
+
const diff = d.getDate() - day + (day === 0 ? -6 : 1) // adjust when day is sunday
|
|
86
84
|
|
|
87
85
|
return new Date(d.setDate(diff))
|
|
88
86
|
}
|
|
@@ -95,8 +93,8 @@ class Calendar {
|
|
|
95
93
|
_initFunction (functions) {
|
|
96
94
|
functions = functions || []
|
|
97
95
|
|
|
98
|
-
for (
|
|
99
|
-
|
|
96
|
+
for (let i = 0; i < functions.length; i++) {
|
|
97
|
+
const name = functions[i]
|
|
100
98
|
if (this.options[name]) {
|
|
101
99
|
this[name] = this.options[name]
|
|
102
100
|
}
|
|
@@ -110,7 +108,7 @@ class Calendar {
|
|
|
110
108
|
*/
|
|
111
109
|
build () {
|
|
112
110
|
// define main tag
|
|
113
|
-
|
|
111
|
+
const tag = this.options.tag || 'div'
|
|
114
112
|
|
|
115
113
|
this.element = create(tag, this.options.prefix + '-' + this.options.class)
|
|
116
114
|
|
|
@@ -147,22 +145,22 @@ class Calendar {
|
|
|
147
145
|
|
|
148
146
|
this.buildHeadline()
|
|
149
147
|
|
|
150
|
-
|
|
148
|
+
const element = create('div')
|
|
151
149
|
insert(element, this.header)
|
|
152
150
|
css.add(element, 'header-days')
|
|
153
151
|
|
|
154
|
-
|
|
155
|
-
|
|
152
|
+
const date = new Date(this.firstDay)
|
|
153
|
+
const days = this.options.rangedays
|
|
156
154
|
|
|
157
|
-
|
|
155
|
+
const margin = create('div')
|
|
158
156
|
css.add(margin, 'margin')
|
|
159
157
|
insert(margin, element)
|
|
160
158
|
|
|
161
|
-
for (
|
|
162
|
-
|
|
163
|
-
|
|
159
|
+
for (let i = 0; i < days; i++) {
|
|
160
|
+
const dow = this.options.days[date.getDay()]
|
|
161
|
+
const dom = (date.getMonth() + 1) + '/' + date.getDate()
|
|
164
162
|
|
|
165
|
-
|
|
163
|
+
const cell = create('div')
|
|
166
164
|
cell.innerHTML = '<div class="first">' + dow + '</div><div class="second">' + dom + '</div>'
|
|
167
165
|
css.add(cell, 'date')
|
|
168
166
|
insert(cell, element)
|
|
@@ -180,11 +178,11 @@ class Calendar {
|
|
|
180
178
|
|
|
181
179
|
insert(this.headline, this.header)
|
|
182
180
|
|
|
183
|
-
|
|
181
|
+
const year = this.firstDay.getFullYear()
|
|
184
182
|
|
|
185
|
-
|
|
183
|
+
const month = this.options.months[this.firstDay.getMonth()]
|
|
186
184
|
|
|
187
|
-
|
|
185
|
+
const monthIndex = create('div', 'month-year')
|
|
188
186
|
monthIndex.innerHTML = '<b>' + month + '</b> ' + year
|
|
189
187
|
insert(monthIndex, this.headline)
|
|
190
188
|
|
|
@@ -196,10 +194,10 @@ class Calendar {
|
|
|
196
194
|
* @return {?} [description]
|
|
197
195
|
*/
|
|
198
196
|
buildNavigation () {
|
|
199
|
-
|
|
197
|
+
const navigation = create('div', this.options.prefix + '-toolbar')
|
|
200
198
|
insert(navigation, this.headline)
|
|
201
199
|
|
|
202
|
-
|
|
200
|
+
const back = new Button({
|
|
203
201
|
icon: iconBack,
|
|
204
202
|
style: 'dense'
|
|
205
203
|
}).on('click', () => {
|
|
@@ -208,7 +206,7 @@ class Calendar {
|
|
|
208
206
|
|
|
209
207
|
css.add(back.root, 'compact')
|
|
210
208
|
|
|
211
|
-
|
|
209
|
+
const today = new Button({
|
|
212
210
|
style: 'dense',
|
|
213
211
|
label: 'today'
|
|
214
212
|
}).on('click', () => {
|
|
@@ -217,7 +215,7 @@ class Calendar {
|
|
|
217
215
|
|
|
218
216
|
css.add(today.root, 'compact')
|
|
219
217
|
|
|
220
|
-
|
|
218
|
+
const next = new Button({
|
|
221
219
|
icon: iconForward,
|
|
222
220
|
style: 'dense'
|
|
223
221
|
}).on('click', () => {
|
|
@@ -233,18 +231,18 @@ class Calendar {
|
|
|
233
231
|
* @return {?} [description]
|
|
234
232
|
*/
|
|
235
233
|
buildAllDay () {
|
|
236
|
-
|
|
234
|
+
const allday = create('div', 'allday')
|
|
237
235
|
insert(allday, this.header)
|
|
238
236
|
|
|
239
|
-
|
|
240
|
-
|
|
237
|
+
const dow = new Date(this.firstDay)
|
|
238
|
+
const days = this.options.rangedays
|
|
241
239
|
|
|
242
|
-
|
|
240
|
+
const label = create('label', 'label')
|
|
243
241
|
label.innerHTML = 'all-day'
|
|
244
242
|
insert(label, allday)
|
|
245
243
|
|
|
246
|
-
for (
|
|
247
|
-
|
|
244
|
+
for (let i = 0; i < days; i++) {
|
|
245
|
+
const day = create('div', 'date')
|
|
248
246
|
day.setAttribute('data-date', this.dateToString(dow))
|
|
249
247
|
insert(day, allday)
|
|
250
248
|
|
|
@@ -258,33 +256,33 @@ class Calendar {
|
|
|
258
256
|
* @return {?} [description]
|
|
259
257
|
*/
|
|
260
258
|
buildBody () {
|
|
261
|
-
|
|
259
|
+
const cells = []
|
|
262
260
|
|
|
263
|
-
|
|
261
|
+
const firstDay = this.firstDay
|
|
264
262
|
|
|
265
|
-
|
|
263
|
+
const days = this.options.rangedays
|
|
266
264
|
|
|
267
265
|
this.body = create('div')
|
|
268
266
|
css.add(this.body, this.options.class + '-body')
|
|
269
267
|
insert(this.body, this.element)
|
|
270
268
|
|
|
271
|
-
|
|
269
|
+
const hours = create('div')
|
|
272
270
|
css.add(hours, 'hours')
|
|
273
271
|
insert(hours, this.body)
|
|
274
272
|
|
|
275
273
|
this.initCanvas()
|
|
276
274
|
|
|
277
|
-
for (
|
|
278
|
-
|
|
275
|
+
for (let i = 0; i < 24; i++) {
|
|
276
|
+
const hour = create('div')
|
|
279
277
|
css.add(hour, 'hour')
|
|
280
278
|
insert(hour, hours)
|
|
281
279
|
|
|
282
280
|
hour.innerHTML = i + ':00'
|
|
283
281
|
}
|
|
284
282
|
|
|
285
|
-
|
|
286
|
-
for (
|
|
287
|
-
|
|
283
|
+
const sday = new Date(firstDay)
|
|
284
|
+
for (let k = 0; k < days; k++) {
|
|
285
|
+
const day = create('div')
|
|
288
286
|
css.add(day, 'week-day')
|
|
289
287
|
day.setAttribute('data-date', this.dateToString(sday))
|
|
290
288
|
insert(day, this.body)
|
|
@@ -303,9 +301,9 @@ class Calendar {
|
|
|
303
301
|
* @return {Date}
|
|
304
302
|
*/
|
|
305
303
|
dateToString (d) {
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
304
|
+
let day = d.getDate()
|
|
305
|
+
let month = d.getMonth() + 1
|
|
306
|
+
const year = d.getFullYear()
|
|
309
307
|
|
|
310
308
|
if (day < 10) {
|
|
311
309
|
day = '0' + day
|
|
@@ -314,7 +312,7 @@ class Calendar {
|
|
|
314
312
|
month = '0' + month
|
|
315
313
|
}
|
|
316
314
|
|
|
317
|
-
|
|
315
|
+
const date = year + '-' + month + '-' + day
|
|
318
316
|
|
|
319
317
|
return date
|
|
320
318
|
}
|
|
@@ -325,19 +323,19 @@ class Calendar {
|
|
|
325
323
|
* @return {?} [description]
|
|
326
324
|
*/
|
|
327
325
|
initCanvas () {
|
|
328
|
-
|
|
326
|
+
const canvas = create('canvas')
|
|
329
327
|
css.add(canvas, 'canvas')
|
|
330
328
|
canvas.width = '2000'
|
|
331
329
|
canvas.height = '1440'
|
|
332
330
|
insert(canvas, this.body)
|
|
333
331
|
|
|
334
|
-
|
|
332
|
+
const ctx = canvas.getContext('2d')
|
|
335
333
|
ctx.lineWidth = 0.5
|
|
336
334
|
ctx.strokeStyle = '#dedbdb'
|
|
337
335
|
|
|
338
|
-
|
|
336
|
+
const offset = 6
|
|
339
337
|
|
|
340
|
-
for (
|
|
338
|
+
for (let j = 0; j <= 24; j++) {
|
|
341
339
|
ctx.beginPath()
|
|
342
340
|
|
|
343
341
|
if (j < this.options.range[0] - 1 || j > this.options.range[1] - 1) {
|
|
@@ -346,7 +344,7 @@ class Calendar {
|
|
|
346
344
|
ctx.strokeStyle = '#D9D9D9'
|
|
347
345
|
}
|
|
348
346
|
|
|
349
|
-
|
|
347
|
+
const y = j * 60 + 0.5
|
|
350
348
|
|
|
351
349
|
ctx.moveTo(0, y + 60 + offset)
|
|
352
350
|
ctx.lineTo(2000, y + 60 + offset)
|
|
@@ -361,16 +359,16 @@ class Calendar {
|
|
|
361
359
|
*/
|
|
362
360
|
add (e) {
|
|
363
361
|
if (e.target && e.target.matches(this.options.target)) {
|
|
364
|
-
|
|
362
|
+
const data = e.target.getAttribute('data-date')
|
|
365
363
|
|
|
366
|
-
|
|
364
|
+
const d = data.split(/-/)
|
|
367
365
|
|
|
368
|
-
|
|
366
|
+
const time = this.roundTime(e.offsetY / 60)
|
|
369
367
|
|
|
370
|
-
|
|
371
|
-
|
|
368
|
+
const h = parseInt(time)
|
|
369
|
+
const m = (time - h) * 60
|
|
372
370
|
|
|
373
|
-
|
|
371
|
+
const date = new Date(d[0], d[1], d[2], h, m)
|
|
374
372
|
|
|
375
373
|
this.emit('add', date)
|
|
376
374
|
}
|
|
@@ -382,8 +380,8 @@ class Calendar {
|
|
|
382
380
|
* @return {?} [description]
|
|
383
381
|
*/
|
|
384
382
|
roundTime (value) {
|
|
385
|
-
|
|
386
|
-
|
|
383
|
+
const step = 0.5
|
|
384
|
+
const inv = 1.0 / step
|
|
387
385
|
return Math.round(value * inv) / inv
|
|
388
386
|
}
|
|
389
387
|
|
package/src/card.js
CHANGED
|
@@ -1,12 +1,10 @@
|
|
|
1
|
-
'use strict'
|
|
2
|
-
|
|
3
1
|
// import modules
|
|
4
2
|
import create from './mixin/create'
|
|
5
3
|
import insert from './mixin/insert'
|
|
6
4
|
// import components
|
|
7
5
|
import Layout from './layout'
|
|
8
6
|
|
|
9
|
-
|
|
7
|
+
const defaults = {
|
|
10
8
|
prefix: 'material',
|
|
11
9
|
class: 'card',
|
|
12
10
|
tag: 'div'
|