@penggy/element-ui 2.4.11 → 2.4.12

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 (334) hide show
  1. package/lib/autocomplete.js +8 -8
  2. package/lib/carousel.js +1 -1
  3. package/lib/cascader.js +9 -9
  4. package/lib/checkbox-button.js +1 -1
  5. package/lib/checkbox-group.js +1 -1
  6. package/lib/checkbox.js +1 -1
  7. package/lib/collapse-item.js +3 -3
  8. package/lib/color-picker.js +6 -6
  9. package/lib/date-picker.js +17 -17
  10. package/lib/dialog.js +3 -3
  11. package/lib/directives/repeat-click.js +1 -1
  12. package/lib/dropdown-item.js +1 -1
  13. package/lib/dropdown-menu.js +1 -1
  14. package/lib/dropdown.js +6 -6
  15. package/lib/element-ui.common.js +443 -91
  16. package/lib/form-item.js +3 -3
  17. package/lib/form.js +1 -1
  18. package/lib/index.js +1 -1
  19. package/lib/input-number.js +3 -3
  20. package/lib/input.js +4 -4
  21. package/lib/loading.js +4 -4
  22. package/lib/locale/format.js +11 -11
  23. package/lib/locale/index.js +1 -1
  24. package/lib/menu-item.js +2 -2
  25. package/lib/menu.js +28 -28
  26. package/lib/message-box.js +9 -9
  27. package/lib/message.js +2 -2
  28. package/lib/mixins/locale.js +1 -1
  29. package/lib/mixins/migrating.js +20 -20
  30. package/lib/notification.js +2 -2
  31. package/lib/option-group.js +1 -1
  32. package/lib/option.js +2 -2
  33. package/lib/pagination.js +5 -5
  34. package/lib/popover.js +3 -3
  35. package/lib/radio-button.js +1 -1
  36. package/lib/radio-group.js +1 -1
  37. package/lib/radio.js +1 -1
  38. package/lib/rate.js +2 -2
  39. package/lib/scrollbar.js +4 -4
  40. package/lib/select.js +13 -13
  41. package/lib/slider.js +3 -3
  42. package/lib/steps.js +1 -1
  43. package/lib/submenu.js +3 -3
  44. package/lib/switch.js +2 -2
  45. package/lib/table-column.js +4 -4
  46. package/lib/table.js +14 -14
  47. package/lib/tabs.js +1 -1
  48. package/lib/time-picker.js +15 -15
  49. package/lib/time-select.js +14 -14
  50. package/lib/tooltip.js +4 -4
  51. package/lib/transfer.js +7 -7
  52. package/lib/transitions/collapse-transition.js +1 -1
  53. package/lib/tree.js +6 -6
  54. package/lib/upload.js +3 -3
  55. package/lib/utils/after-leave.js +7 -7
  56. package/lib/utils/aria-dialog.js +16 -16
  57. package/lib/utils/aria-utils.js +25 -25
  58. package/lib/utils/clickoutside.js +8 -8
  59. package/lib/utils/date.js +37 -37
  60. package/lib/utils/popper.js +321 -321
  61. package/lib/utils/popup/index.js +2 -2
  62. package/lib/utils/popup/popup-manager.js +1 -1
  63. package/lib/utils/vdom.js +1 -1
  64. package/lib/utils/vue-popper.js +8 -8
  65. package/package.json +1 -1
  66. package/packages/alert/index.js +8 -8
  67. package/packages/alert/src/main.vue +88 -88
  68. package/packages/aside/index.js +8 -8
  69. package/packages/aside/src/main.vue +20 -20
  70. package/packages/autocomplete/index.js +8 -8
  71. package/packages/autocomplete/src/autocomplete-suggestions.vue +76 -76
  72. package/packages/autocomplete/src/autocomplete.vue +269 -269
  73. package/packages/badge/index.js +8 -8
  74. package/packages/badge/src/main.vue +53 -53
  75. package/packages/breadcrumb/index.js +8 -8
  76. package/packages/breadcrumb/src/breadcrumb-item.vue +41 -41
  77. package/packages/breadcrumb/src/breadcrumb.vue +34 -34
  78. package/packages/breadcrumb-item/index.js +8 -8
  79. package/packages/button/index.js +8 -8
  80. package/packages/button/src/button-group.vue +10 -10
  81. package/packages/button/src/button.vue +78 -78
  82. package/packages/button-group/index.js +8 -8
  83. package/packages/card/index.js +8 -8
  84. package/packages/card/src/main.vue +23 -23
  85. package/packages/carousel/index.js +8 -8
  86. package/packages/carousel/src/item.vue +114 -114
  87. package/packages/carousel/src/main.vue +262 -262
  88. package/packages/carousel-item/index.js +8 -8
  89. package/packages/cascader/index.js +8 -8
  90. package/packages/cascader/src/main.vue +456 -456
  91. package/packages/cascader/src/menu.vue +376 -376
  92. package/packages/checkbox/index.js +8 -8
  93. package/packages/checkbox/src/checkbox-button.vue +191 -191
  94. package/packages/checkbox/src/checkbox-group.vue +48 -48
  95. package/packages/checkbox/src/checkbox.vue +219 -219
  96. package/packages/checkbox-button/index.js +8 -8
  97. package/packages/checkbox-group/index.js +8 -8
  98. package/packages/col/index.js +9 -9
  99. package/packages/col/src/col.js +71 -71
  100. package/packages/collapse/index.js +9 -9
  101. package/packages/collapse/src/collapse-item.vue +113 -113
  102. package/packages/collapse/src/collapse.vue +73 -73
  103. package/packages/collapse-item/index.js +8 -8
  104. package/packages/color-picker/index.js +8 -8
  105. package/packages/color-picker/src/color.js +316 -316
  106. package/packages/color-picker/src/components/alpha-slider.vue +132 -132
  107. package/packages/color-picker/src/components/hue-slider.vue +123 -123
  108. package/packages/color-picker/src/components/picker-dropdown.vue +121 -121
  109. package/packages/color-picker/src/components/predefine.vue +60 -60
  110. package/packages/color-picker/src/components/sv-panel.vue +100 -100
  111. package/packages/color-picker/src/draggable.js +36 -36
  112. package/packages/color-picker/src/main.vue +188 -188
  113. package/packages/container/index.js +8 -8
  114. package/packages/container/src/main.vue +33 -33
  115. package/packages/date-picker/index.js +8 -8
  116. package/packages/date-picker/src/basic/date-table.vue +437 -437
  117. package/packages/date-picker/src/basic/month-table.vue +105 -105
  118. package/packages/date-picker/src/basic/time-spinner.vue +301 -301
  119. package/packages/date-picker/src/basic/year-table.vue +101 -101
  120. package/packages/date-picker/src/panel/date-range.vue +640 -640
  121. package/packages/date-picker/src/panel/date.vue +579 -579
  122. package/packages/date-picker/src/panel/time-range.vue +248 -248
  123. package/packages/date-picker/src/panel/time-select.vue +177 -177
  124. package/packages/date-picker/src/panel/time.vue +186 -186
  125. package/packages/date-picker/src/picker/date-picker.js +40 -40
  126. package/packages/date-picker/src/picker/time-picker.js +39 -39
  127. package/packages/date-picker/src/picker/time-select.js +21 -21
  128. package/packages/date-picker/src/picker.vue +924 -924
  129. package/packages/date-picker/src/util/index.js +273 -273
  130. package/packages/dialog/index.js +8 -8
  131. package/packages/dialog/src/component.vue +201 -201
  132. package/packages/dropdown/index.js +8 -8
  133. package/packages/dropdown/src/dropdown-item.vue +35 -35
  134. package/packages/dropdown/src/dropdown-menu.vue +60 -60
  135. package/packages/dropdown/src/dropdown.vue +271 -271
  136. package/packages/dropdown-item/index.js +8 -8
  137. package/packages/dropdown-menu/index.js +8 -8
  138. package/packages/footer/index.js +8 -8
  139. package/packages/footer/src/main.vue +20 -20
  140. package/packages/form/index.js +8 -8
  141. package/packages/form/src/form-item.vue +290 -290
  142. package/packages/form/src/form.vue +148 -148
  143. package/packages/form-item/index.js +8 -8
  144. package/packages/header/index.js +8 -8
  145. package/packages/header/src/main.vue +20 -20
  146. package/packages/icon/index.js +8 -8
  147. package/packages/icon/src/icon.vue +13 -13
  148. package/packages/input/index.js +8 -8
  149. package/packages/input/src/calcTextareaHeight.js +104 -104
  150. package/packages/input/src/input.vue +349 -349
  151. package/packages/input-number/index.js +8 -8
  152. package/packages/input-number/src/input-number.vue +255 -255
  153. package/packages/loading/index.js +11 -11
  154. package/packages/loading/src/directive.js +128 -128
  155. package/packages/loading/src/index.js +106 -106
  156. package/packages/loading/src/loading.vue +41 -41
  157. package/packages/main/index.js +8 -8
  158. package/packages/main/src/main.vue +12 -12
  159. package/packages/menu/index.js +8 -8
  160. package/packages/menu/src/menu-item-group.vue +45 -45
  161. package/packages/menu/src/menu-item.vue +112 -112
  162. package/packages/menu/src/menu-mixin.js +44 -44
  163. package/packages/menu/src/menu.vue +311 -311
  164. package/packages/menu/src/submenu.vue +335 -335
  165. package/packages/menu-item/index.js +8 -8
  166. package/packages/menu-item-group/index.js +8 -8
  167. package/packages/message/index.js +2 -2
  168. package/packages/message/src/main.js +72 -72
  169. package/packages/message/src/main.vue +112 -112
  170. package/packages/message-box/index.js +2 -2
  171. package/packages/message-box/src/main.js +216 -216
  172. package/packages/message-box/src/main.vue +327 -327
  173. package/packages/notification/index.js +2 -2
  174. package/packages/notification/src/main.js +93 -93
  175. package/packages/notification/src/main.vue +152 -152
  176. package/packages/option/index.js +8 -8
  177. package/packages/option-group/index.js +8 -8
  178. package/packages/pagination/index.js +8 -8
  179. package/packages/pagination/src/pager.vue +163 -163
  180. package/packages/pagination/src/pagination.js +430 -430
  181. package/packages/popover/index.js +14 -14
  182. package/packages/popover/src/directive.js +20 -20
  183. package/packages/popover/src/main.vue +207 -207
  184. package/packages/progress/index.js +8 -8
  185. package/packages/progress/src/progress.vue +138 -138
  186. package/packages/radio/index.js +8 -8
  187. package/packages/radio/src/radio-button.vue +114 -114
  188. package/packages/radio/src/radio-group.vue +100 -100
  189. package/packages/radio/src/radio.vue +126 -126
  190. package/packages/radio-button/index.js +8 -8
  191. package/packages/radio-group/index.js +8 -8
  192. package/packages/rate/index.js +8 -8
  193. package/packages/rate/src/main.vue +350 -350
  194. package/packages/row/index.js +9 -9
  195. package/packages/row/src/row.js +47 -47
  196. package/packages/scrollbar/index.js +8 -8
  197. package/packages/scrollbar/src/bar.js +88 -88
  198. package/packages/scrollbar/src/main.js +130 -130
  199. package/packages/scrollbar/src/util.js +34 -34
  200. package/packages/select/index.js +8 -8
  201. package/packages/select/src/navigation-mixin.js +54 -54
  202. package/packages/select/src/option-group.vue +60 -60
  203. package/packages/select/src/option.vue +159 -159
  204. package/packages/select/src/select-dropdown.vue +74 -74
  205. package/packages/select/src/select.vue +878 -878
  206. package/packages/slider/index.js +8 -8
  207. package/packages/slider/src/button.vue +235 -235
  208. package/packages/slider/src/main.vue +385 -385
  209. package/packages/spinner/index.js +8 -8
  210. package/packages/spinner/src/spinner.vue +27 -27
  211. package/packages/step/index.js +8 -8
  212. package/packages/steps/index.js +8 -8
  213. package/packages/steps/src/step.vue +180 -180
  214. package/packages/steps/src/steps.vue +68 -68
  215. package/packages/submenu/index.js +8 -8
  216. package/packages/switch/index.js +9 -9
  217. package/packages/switch/src/component.vue +163 -163
  218. package/packages/tab-pane/index.js +8 -8
  219. package/packages/table/index.js +8 -8
  220. package/packages/table/src/dropdown.js +28 -28
  221. package/packages/table/src/filter-panel.vue +203 -203
  222. package/packages/table/src/layout-observer.js +68 -68
  223. package/packages/table/src/table-body.js +392 -392
  224. package/packages/table/src/table-column.js +462 -462
  225. package/packages/table/src/table-footer.js +147 -147
  226. package/packages/table/src/table-header.js +522 -522
  227. package/packages/table/src/table-layout.js +231 -231
  228. package/packages/table/src/table-store.js +657 -657
  229. package/packages/table/src/table.vue +660 -660
  230. package/packages/table/src/util.js +122 -122
  231. package/packages/table-column/index.js +8 -8
  232. package/packages/tabs/index.js +8 -8
  233. package/packages/tabs/src/tab-bar.vue +57 -57
  234. package/packages/tabs/src/tab-nav.vue +280 -280
  235. package/packages/tabs/src/tab-pane.vue +58 -58
  236. package/packages/tabs/src/tabs.vue +185 -185
  237. package/packages/tag/index.js +8 -8
  238. package/packages/tag/src/tag.vue +39 -39
  239. package/packages/time-picker/index.js +8 -8
  240. package/packages/time-select/index.js +8 -8
  241. package/packages/tooltip/index.js +8 -8
  242. package/packages/tooltip/src/main.js +216 -216
  243. package/packages/transfer/index.js +8 -8
  244. package/packages/transfer/src/main.vue +231 -231
  245. package/packages/transfer/src/transfer-panel.vue +251 -251
  246. package/packages/tree/index.js +8 -8
  247. package/packages/tree/src/model/node.js +481 -481
  248. package/packages/tree/src/model/tree-store.js +333 -333
  249. package/packages/tree/src/model/util.js +27 -27
  250. package/packages/tree/src/tree-node.vue +277 -277
  251. package/packages/tree/src/tree.vue +495 -495
  252. package/packages/upload/index.js +8 -8
  253. package/packages/upload/src/ajax.js +85 -85
  254. package/packages/upload/src/index.vue +315 -315
  255. package/packages/upload/src/upload-dragger.vue +70 -70
  256. package/packages/upload/src/upload-list.vue +103 -103
  257. package/packages/upload/src/upload.vue +211 -211
  258. package/src/directives/mousewheel.js +18 -18
  259. package/src/directives/repeat-click.js +24 -24
  260. package/src/index.js +1 -1
  261. package/src/locale/format.js +46 -46
  262. package/src/locale/index.js +48 -48
  263. package/src/locale/lang/af-ZA.js +109 -109
  264. package/src/locale/lang/ar.js +108 -108
  265. package/src/locale/lang/bg.js +109 -109
  266. package/src/locale/lang/ca.js +108 -108
  267. package/src/locale/lang/cs-CZ.js +111 -111
  268. package/src/locale/lang/da.js +108 -108
  269. package/src/locale/lang/de.js +110 -110
  270. package/src/locale/lang/ee.js +109 -109
  271. package/src/locale/lang/el.js +109 -109
  272. package/src/locale/lang/en.js +109 -109
  273. package/src/locale/lang/es.js +108 -108
  274. package/src/locale/lang/eu.js +109 -109
  275. package/src/locale/lang/fa.js +109 -109
  276. package/src/locale/lang/fi.js +109 -109
  277. package/src/locale/lang/fr.js +108 -108
  278. package/src/locale/lang/he.js +109 -109
  279. package/src/locale/lang/hu.js +108 -108
  280. package/src/locale/lang/id.js +109 -109
  281. package/src/locale/lang/it.js +108 -108
  282. package/src/locale/lang/ja.js +109 -109
  283. package/src/locale/lang/km.js +109 -109
  284. package/src/locale/lang/ko.js +109 -109
  285. package/src/locale/lang/ku.js +109 -109
  286. package/src/locale/lang/kz.js +109 -109
  287. package/src/locale/lang/lt.js +109 -109
  288. package/src/locale/lang/lv.js +109 -109
  289. package/src/locale/lang/mn.js +109 -109
  290. package/src/locale/lang/nb-NO.js +108 -108
  291. package/src/locale/lang/nl.js +109 -109
  292. package/src/locale/lang/pl.js +109 -109
  293. package/src/locale/lang/pt-br.js +109 -109
  294. package/src/locale/lang/pt.js +109 -109
  295. package/src/locale/lang/ro.js +109 -109
  296. package/src/locale/lang/ru-RU.js +109 -109
  297. package/src/locale/lang/sk.js +111 -111
  298. package/src/locale/lang/sl.js +109 -109
  299. package/src/locale/lang/sr.js +109 -109
  300. package/src/locale/lang/sv-SE.js +109 -109
  301. package/src/locale/lang/ta.js +108 -108
  302. package/src/locale/lang/th.js +109 -109
  303. package/src/locale/lang/tk.js +109 -109
  304. package/src/locale/lang/tr-TR.js +109 -109
  305. package/src/locale/lang/ua.js +109 -109
  306. package/src/locale/lang/ug-CN.js +109 -109
  307. package/src/locale/lang/vi.js +109 -109
  308. package/src/locale/lang/zh-CN.js +109 -109
  309. package/src/locale/lang/zh-TW.js +109 -109
  310. package/src/mixins/emitter.js +33 -33
  311. package/src/mixins/focus.js +9 -9
  312. package/src/mixins/locale.js +9 -9
  313. package/src/mixins/migrating.js +51 -51
  314. package/src/transitions/collapse-transition.js +77 -77
  315. package/src/utils/after-leave.js +27 -27
  316. package/src/utils/aria-dialog.js +90 -90
  317. package/src/utils/aria-utils.js +121 -121
  318. package/src/utils/clickoutside.js +76 -76
  319. package/src/utils/date.js +344 -344
  320. package/src/utils/dom.js +174 -174
  321. package/src/utils/menu/aria-menubar.js +14 -14
  322. package/src/utils/menu/aria-menuitem.js +49 -49
  323. package/src/utils/menu/aria-submenu.js +59 -59
  324. package/src/utils/merge.js +15 -15
  325. package/src/utils/popper.js +1276 -1276
  326. package/src/utils/popup/index.js +226 -226
  327. package/src/utils/popup/popup-manager.js +194 -194
  328. package/src/utils/resize-event.js +35 -35
  329. package/src/utils/scroll-into-view.js +27 -27
  330. package/src/utils/scrollbar-width.js +29 -29
  331. package/src/utils/shared.js +7 -7
  332. package/src/utils/util.js +122 -122
  333. package/src/utils/vdom.js +9 -9
  334. package/src/utils/vue-popper.js +200 -200
@@ -1,385 +1,385 @@
1
- <template>
2
- <div class="el-slider"
3
- :class="{ 'is-vertical': vertical, 'el-slider--with-input': showInput }"
4
- role="slider"
5
- :aria-valuemin="min"
6
- :aria-valuemax="max"
7
- :aria-orientation="vertical ? 'vertical': 'horizontal'"
8
- :aria-disabled="sliderDisabled"
9
- >
10
- <el-input-number
11
- v-model="firstValue"
12
- v-if="showInput && !range"
13
- class="el-slider__input"
14
- ref="input"
15
- @change="$nextTick(emitChange)"
16
- :step="step"
17
- :disabled="sliderDisabled"
18
- :controls="showInputControls"
19
- :min="min"
20
- :max="max"
21
- :debounce="debounce"
22
- :size="inputSize">
23
- </el-input-number>
24
- <div class="el-slider__runway"
25
- :class="{ 'show-input': showInput, 'disabled': sliderDisabled }"
26
- :style="runwayStyle"
27
- @click="onSliderClick"
28
- ref="slider">
29
- <div
30
- class="el-slider__bar"
31
- :style="barStyle">
32
- </div>
33
- <slider-button
34
- :vertical="vertical"
35
- v-model="firstValue"
36
- :tooltip-class="tooltipClass"
37
- ref="button1">
38
- </slider-button>
39
- <slider-button
40
- :vertical="vertical"
41
- v-model="secondValue"
42
- :tooltip-class="tooltipClass"
43
- ref="button2"
44
- v-if="range">
45
- </slider-button>
46
- <div
47
- class="el-slider__stop"
48
- v-for="(item, key) in stops"
49
- :key="key"
50
- :style="vertical ? { 'bottom': item + '%' } : { 'left': item + '%' }"
51
- v-if="showStops">
52
- </div>
53
- </div>
54
- </div>
55
- </template>
56
-
57
- <script type="text/babel">
58
- import ElInputNumber from 'element-ui/packages/input-number';
59
- import SliderButton from './button.vue';
60
- import Emitter from 'element-ui/src/mixins/emitter';
61
-
62
- export default {
63
- name: 'ElSlider',
64
-
65
- mixins: [Emitter],
66
-
67
- inject: {
68
- elForm: {
69
- default: ''
70
- }
71
- },
72
-
73
- props: {
74
- min: {
75
- type: Number,
76
- default: 0
77
- },
78
- max: {
79
- type: Number,
80
- default: 100
81
- },
82
- step: {
83
- type: Number,
84
- default: 1
85
- },
86
- value: {
87
- type: [Number, Array],
88
- default: 0
89
- },
90
- showInput: {
91
- type: Boolean,
92
- default: false
93
- },
94
- showInputControls: {
95
- type: Boolean,
96
- default: true
97
- },
98
- inputSize: {
99
- type: String,
100
- default: 'small'
101
- },
102
- showStops: {
103
- type: Boolean,
104
- default: false
105
- },
106
- showTooltip: {
107
- type: Boolean,
108
- default: true
109
- },
110
- formatTooltip: Function,
111
- disabled: {
112
- type: Boolean,
113
- default: false
114
- },
115
- range: {
116
- type: Boolean,
117
- default: false
118
- },
119
- vertical: {
120
- type: Boolean,
121
- default: false
122
- },
123
- height: {
124
- type: String
125
- },
126
- debounce: {
127
- type: Number,
128
- default: 300
129
- },
130
- label: {
131
- type: String
132
- },
133
- tooltipClass: String
134
- },
135
-
136
- components: {
137
- ElInputNumber,
138
- SliderButton
139
- },
140
-
141
- data() {
142
- return {
143
- firstValue: null,
144
- secondValue: null,
145
- oldValue: null,
146
- dragging: false,
147
- sliderSize: 1
148
- };
149
- },
150
-
151
- watch: {
152
- value(val, oldVal) {
153
- if (this.dragging ||
154
- Array.isArray(val) &&
155
- Array.isArray(oldVal) &&
156
- val.every((item, index) => item === oldVal[index])) {
157
- return;
158
- }
159
- this.setValues();
160
- },
161
-
162
- dragging(val) {
163
- if (!val) {
164
- this.setValues();
165
- }
166
- },
167
-
168
- firstValue(val) {
169
- if (this.range) {
170
- this.$emit('input', [this.minValue, this.maxValue]);
171
- } else {
172
- this.$emit('input', val);
173
- }
174
- },
175
-
176
- secondValue() {
177
- if (this.range) {
178
- this.$emit('input', [this.minValue, this.maxValue]);
179
- }
180
- },
181
-
182
- min() {
183
- this.setValues();
184
- },
185
-
186
- max() {
187
- this.setValues();
188
- }
189
- },
190
-
191
- methods: {
192
- valueChanged() {
193
- if (this.range) {
194
- return ![this.minValue, this.maxValue]
195
- .every((item, index) => item === this.oldValue[index]);
196
- } else {
197
- return this.value !== this.oldValue;
198
- }
199
- },
200
- setValues() {
201
- if (this.min > this.max) {
202
- console.error('[Element Error][Slider]min should not be greater than max.');
203
- return;
204
- }
205
- const val = this.value;
206
- if (this.range && Array.isArray(val)) {
207
- if (val[1] < this.min) {
208
- this.$emit('input', [this.min, this.min]);
209
- } else if (val[0] > this.max) {
210
- this.$emit('input', [this.max, this.max]);
211
- } else if (val[0] < this.min) {
212
- this.$emit('input', [this.min, val[1]]);
213
- } else if (val[1] > this.max) {
214
- this.$emit('input', [val[0], this.max]);
215
- } else {
216
- this.firstValue = val[0];
217
- this.secondValue = val[1];
218
- if (this.valueChanged()) {
219
- this.dispatch('ElFormItem', 'el.form.change', [this.minValue, this.maxValue]);
220
- this.oldValue = val.slice();
221
- }
222
- }
223
- } else if (!this.range && typeof val === 'number' && !isNaN(val)) {
224
- if (val < this.min) {
225
- this.$emit('input', this.min);
226
- } else if (val > this.max) {
227
- this.$emit('input', this.max);
228
- } else {
229
- this.firstValue = val;
230
- if (this.valueChanged()) {
231
- this.dispatch('ElFormItem', 'el.form.change', val);
232
- this.oldValue = val;
233
- }
234
- }
235
- }
236
- },
237
-
238
- setPosition(percent) {
239
- const targetValue = this.min + percent * (this.max - this.min) / 100;
240
- if (!this.range) {
241
- this.$refs.button1.setPosition(percent);
242
- return;
243
- }
244
- let button;
245
- if (Math.abs(this.minValue - targetValue) < Math.abs(this.maxValue - targetValue)) {
246
- button = this.firstValue < this.secondValue ? 'button1' : 'button2';
247
- } else {
248
- button = this.firstValue > this.secondValue ? 'button1' : 'button2';
249
- }
250
- this.$refs[button].setPosition(percent);
251
- },
252
-
253
- onSliderClick(event) {
254
- if (this.sliderDisabled || this.dragging) return;
255
- this.resetSize();
256
- if (this.vertical) {
257
- const sliderOffsetBottom = this.$refs.slider.getBoundingClientRect().bottom;
258
- this.setPosition((sliderOffsetBottom - event.clientY) / this.sliderSize * 100);
259
- } else {
260
- const sliderOffsetLeft = this.$refs.slider.getBoundingClientRect().left;
261
- this.setPosition((event.clientX - sliderOffsetLeft) / this.sliderSize * 100);
262
- }
263
- this.emitChange();
264
- },
265
-
266
- resetSize() {
267
- if (this.$refs.slider) {
268
- this.sliderSize = this.$refs.slider[`client${ this.vertical ? 'Height' : 'Width' }`];
269
- }
270
- },
271
-
272
- emitChange() {
273
- this.$nextTick(() => {
274
- this.$emit('change', this.range ? [this.minValue, this.maxValue] : this.value);
275
- });
276
- }
277
- },
278
-
279
- computed: {
280
- stops() {
281
- if (!this.showStops || this.min > this.max) return [];
282
- if (this.step === 0) {
283
- process.env.NODE_ENV !== 'production' &&
284
- console.warn('[Element Warn][Slider]step should not be 0.');
285
- return [];
286
- }
287
- const stopCount = (this.max - this.min) / this.step;
288
- const stepWidth = 100 * this.step / (this.max - this.min);
289
- const result = [];
290
- for (let i = 1; i < stopCount; i++) {
291
- result.push(i * stepWidth);
292
- }
293
- if (this.range) {
294
- return result.filter(step => {
295
- return step < 100 * (this.minValue - this.min) / (this.max - this.min) ||
296
- step > 100 * (this.maxValue - this.min) / (this.max - this.min);
297
- });
298
- } else {
299
- return result.filter(step => step > 100 * (this.firstValue - this.min) / (this.max - this.min));
300
- }
301
- },
302
-
303
- minValue() {
304
- return Math.min(this.firstValue, this.secondValue);
305
- },
306
-
307
- maxValue() {
308
- return Math.max(this.firstValue, this.secondValue);
309
- },
310
-
311
- barSize() {
312
- return this.range
313
- ? `${ 100 * (this.maxValue - this.minValue) / (this.max - this.min) }%`
314
- : `${ 100 * (this.firstValue - this.min) / (this.max - this.min) }%`;
315
- },
316
-
317
- barStart() {
318
- return this.range
319
- ? `${ 100 * (this.minValue - this.min) / (this.max - this.min) }%`
320
- : '0%';
321
- },
322
-
323
- precision() {
324
- let precisions = [this.min, this.max, this.step].map(item => {
325
- let decimal = ('' + item).split('.')[1];
326
- return decimal ? decimal.length : 0;
327
- });
328
- return Math.max.apply(null, precisions);
329
- },
330
-
331
- runwayStyle() {
332
- return this.vertical ? { height: this.height } : {};
333
- },
334
-
335
- barStyle() {
336
- return this.vertical
337
- ? {
338
- height: this.barSize,
339
- bottom: this.barStart
340
- } : {
341
- width: this.barSize,
342
- left: this.barStart
343
- };
344
- },
345
-
346
- sliderDisabled() {
347
- return this.disabled || (this.elForm || {}).disabled;
348
- }
349
- },
350
-
351
- mounted() {
352
- let valuetext;
353
- if (this.range) {
354
- if (Array.isArray(this.value)) {
355
- this.firstValue = Math.max(this.min, this.value[0]);
356
- this.secondValue = Math.min(this.max, this.value[1]);
357
- } else {
358
- this.firstValue = this.min;
359
- this.secondValue = this.max;
360
- }
361
- this.oldValue = [this.firstValue, this.secondValue];
362
- valuetext = `${this.firstValue}-${this.secondValue}`;
363
- } else {
364
- if (typeof this.value !== 'number' || isNaN(this.value)) {
365
- this.firstValue = this.min;
366
- } else {
367
- this.firstValue = Math.min(this.max, Math.max(this.min, this.value));
368
- }
369
- this.oldValue = this.firstValue;
370
- valuetext = this.firstValue;
371
- }
372
- this.$el.setAttribute('aria-valuetext', valuetext);
373
-
374
- // label screen reader
375
- this.$el.setAttribute('aria-label', this.label ? this.label : `slider between ${this.min} and ${this.max}`);
376
-
377
- this.resetSize();
378
- window.addEventListener('resize', this.resetSize);
379
- },
380
-
381
- beforeDestroy() {
382
- window.removeEventListener('resize', this.resetSize);
383
- }
384
- };
385
- </script>
1
+ <template>
2
+ <div class="el-slider"
3
+ :class="{ 'is-vertical': vertical, 'el-slider--with-input': showInput }"
4
+ role="slider"
5
+ :aria-valuemin="min"
6
+ :aria-valuemax="max"
7
+ :aria-orientation="vertical ? 'vertical': 'horizontal'"
8
+ :aria-disabled="sliderDisabled"
9
+ >
10
+ <el-input-number
11
+ v-model="firstValue"
12
+ v-if="showInput && !range"
13
+ class="el-slider__input"
14
+ ref="input"
15
+ @change="$nextTick(emitChange)"
16
+ :step="step"
17
+ :disabled="sliderDisabled"
18
+ :controls="showInputControls"
19
+ :min="min"
20
+ :max="max"
21
+ :debounce="debounce"
22
+ :size="inputSize">
23
+ </el-input-number>
24
+ <div class="el-slider__runway"
25
+ :class="{ 'show-input': showInput, 'disabled': sliderDisabled }"
26
+ :style="runwayStyle"
27
+ @click="onSliderClick"
28
+ ref="slider">
29
+ <div
30
+ class="el-slider__bar"
31
+ :style="barStyle">
32
+ </div>
33
+ <slider-button
34
+ :vertical="vertical"
35
+ v-model="firstValue"
36
+ :tooltip-class="tooltipClass"
37
+ ref="button1">
38
+ </slider-button>
39
+ <slider-button
40
+ :vertical="vertical"
41
+ v-model="secondValue"
42
+ :tooltip-class="tooltipClass"
43
+ ref="button2"
44
+ v-if="range">
45
+ </slider-button>
46
+ <div
47
+ class="el-slider__stop"
48
+ v-for="(item, key) in stops"
49
+ :key="key"
50
+ :style="vertical ? { 'bottom': item + '%' } : { 'left': item + '%' }"
51
+ v-if="showStops">
52
+ </div>
53
+ </div>
54
+ </div>
55
+ </template>
56
+
57
+ <script type="text/babel">
58
+ import ElInputNumber from '@penggy/element-ui/packages/input-number';
59
+ import SliderButton from './button.vue';
60
+ import Emitter from '@penggy/element-ui/src/mixins/emitter';
61
+
62
+ export default {
63
+ name: 'ElSlider',
64
+
65
+ mixins: [Emitter],
66
+
67
+ inject: {
68
+ elForm: {
69
+ default: ''
70
+ }
71
+ },
72
+
73
+ props: {
74
+ min: {
75
+ type: Number,
76
+ default: 0
77
+ },
78
+ max: {
79
+ type: Number,
80
+ default: 100
81
+ },
82
+ step: {
83
+ type: Number,
84
+ default: 1
85
+ },
86
+ value: {
87
+ type: [Number, Array],
88
+ default: 0
89
+ },
90
+ showInput: {
91
+ type: Boolean,
92
+ default: false
93
+ },
94
+ showInputControls: {
95
+ type: Boolean,
96
+ default: true
97
+ },
98
+ inputSize: {
99
+ type: String,
100
+ default: 'small'
101
+ },
102
+ showStops: {
103
+ type: Boolean,
104
+ default: false
105
+ },
106
+ showTooltip: {
107
+ type: Boolean,
108
+ default: true
109
+ },
110
+ formatTooltip: Function,
111
+ disabled: {
112
+ type: Boolean,
113
+ default: false
114
+ },
115
+ range: {
116
+ type: Boolean,
117
+ default: false
118
+ },
119
+ vertical: {
120
+ type: Boolean,
121
+ default: false
122
+ },
123
+ height: {
124
+ type: String
125
+ },
126
+ debounce: {
127
+ type: Number,
128
+ default: 300
129
+ },
130
+ label: {
131
+ type: String
132
+ },
133
+ tooltipClass: String
134
+ },
135
+
136
+ components: {
137
+ ElInputNumber,
138
+ SliderButton
139
+ },
140
+
141
+ data() {
142
+ return {
143
+ firstValue: null,
144
+ secondValue: null,
145
+ oldValue: null,
146
+ dragging: false,
147
+ sliderSize: 1
148
+ };
149
+ },
150
+
151
+ watch: {
152
+ value(val, oldVal) {
153
+ if (this.dragging ||
154
+ Array.isArray(val) &&
155
+ Array.isArray(oldVal) &&
156
+ val.every((item, index) => item === oldVal[index])) {
157
+ return;
158
+ }
159
+ this.setValues();
160
+ },
161
+
162
+ dragging(val) {
163
+ if (!val) {
164
+ this.setValues();
165
+ }
166
+ },
167
+
168
+ firstValue(val) {
169
+ if (this.range) {
170
+ this.$emit('input', [this.minValue, this.maxValue]);
171
+ } else {
172
+ this.$emit('input', val);
173
+ }
174
+ },
175
+
176
+ secondValue() {
177
+ if (this.range) {
178
+ this.$emit('input', [this.minValue, this.maxValue]);
179
+ }
180
+ },
181
+
182
+ min() {
183
+ this.setValues();
184
+ },
185
+
186
+ max() {
187
+ this.setValues();
188
+ }
189
+ },
190
+
191
+ methods: {
192
+ valueChanged() {
193
+ if (this.range) {
194
+ return ![this.minValue, this.maxValue]
195
+ .every((item, index) => item === this.oldValue[index]);
196
+ } else {
197
+ return this.value !== this.oldValue;
198
+ }
199
+ },
200
+ setValues() {
201
+ if (this.min > this.max) {
202
+ console.error('[Element Error][Slider]min should not be greater than max.');
203
+ return;
204
+ }
205
+ const val = this.value;
206
+ if (this.range && Array.isArray(val)) {
207
+ if (val[1] < this.min) {
208
+ this.$emit('input', [this.min, this.min]);
209
+ } else if (val[0] > this.max) {
210
+ this.$emit('input', [this.max, this.max]);
211
+ } else if (val[0] < this.min) {
212
+ this.$emit('input', [this.min, val[1]]);
213
+ } else if (val[1] > this.max) {
214
+ this.$emit('input', [val[0], this.max]);
215
+ } else {
216
+ this.firstValue = val[0];
217
+ this.secondValue = val[1];
218
+ if (this.valueChanged()) {
219
+ this.dispatch('ElFormItem', 'el.form.change', [this.minValue, this.maxValue]);
220
+ this.oldValue = val.slice();
221
+ }
222
+ }
223
+ } else if (!this.range && typeof val === 'number' && !isNaN(val)) {
224
+ if (val < this.min) {
225
+ this.$emit('input', this.min);
226
+ } else if (val > this.max) {
227
+ this.$emit('input', this.max);
228
+ } else {
229
+ this.firstValue = val;
230
+ if (this.valueChanged()) {
231
+ this.dispatch('ElFormItem', 'el.form.change', val);
232
+ this.oldValue = val;
233
+ }
234
+ }
235
+ }
236
+ },
237
+
238
+ setPosition(percent) {
239
+ const targetValue = this.min + percent * (this.max - this.min) / 100;
240
+ if (!this.range) {
241
+ this.$refs.button1.setPosition(percent);
242
+ return;
243
+ }
244
+ let button;
245
+ if (Math.abs(this.minValue - targetValue) < Math.abs(this.maxValue - targetValue)) {
246
+ button = this.firstValue < this.secondValue ? 'button1' : 'button2';
247
+ } else {
248
+ button = this.firstValue > this.secondValue ? 'button1' : 'button2';
249
+ }
250
+ this.$refs[button].setPosition(percent);
251
+ },
252
+
253
+ onSliderClick(event) {
254
+ if (this.sliderDisabled || this.dragging) return;
255
+ this.resetSize();
256
+ if (this.vertical) {
257
+ const sliderOffsetBottom = this.$refs.slider.getBoundingClientRect().bottom;
258
+ this.setPosition((sliderOffsetBottom - event.clientY) / this.sliderSize * 100);
259
+ } else {
260
+ const sliderOffsetLeft = this.$refs.slider.getBoundingClientRect().left;
261
+ this.setPosition((event.clientX - sliderOffsetLeft) / this.sliderSize * 100);
262
+ }
263
+ this.emitChange();
264
+ },
265
+
266
+ resetSize() {
267
+ if (this.$refs.slider) {
268
+ this.sliderSize = this.$refs.slider[`client${ this.vertical ? 'Height' : 'Width' }`];
269
+ }
270
+ },
271
+
272
+ emitChange() {
273
+ this.$nextTick(() => {
274
+ this.$emit('change', this.range ? [this.minValue, this.maxValue] : this.value);
275
+ });
276
+ }
277
+ },
278
+
279
+ computed: {
280
+ stops() {
281
+ if (!this.showStops || this.min > this.max) return [];
282
+ if (this.step === 0) {
283
+ process.env.NODE_ENV !== 'production' &&
284
+ console.warn('[Element Warn][Slider]step should not be 0.');
285
+ return [];
286
+ }
287
+ const stopCount = (this.max - this.min) / this.step;
288
+ const stepWidth = 100 * this.step / (this.max - this.min);
289
+ const result = [];
290
+ for (let i = 1; i < stopCount; i++) {
291
+ result.push(i * stepWidth);
292
+ }
293
+ if (this.range) {
294
+ return result.filter(step => {
295
+ return step < 100 * (this.minValue - this.min) / (this.max - this.min) ||
296
+ step > 100 * (this.maxValue - this.min) / (this.max - this.min);
297
+ });
298
+ } else {
299
+ return result.filter(step => step > 100 * (this.firstValue - this.min) / (this.max - this.min));
300
+ }
301
+ },
302
+
303
+ minValue() {
304
+ return Math.min(this.firstValue, this.secondValue);
305
+ },
306
+
307
+ maxValue() {
308
+ return Math.max(this.firstValue, this.secondValue);
309
+ },
310
+
311
+ barSize() {
312
+ return this.range
313
+ ? `${ 100 * (this.maxValue - this.minValue) / (this.max - this.min) }%`
314
+ : `${ 100 * (this.firstValue - this.min) / (this.max - this.min) }%`;
315
+ },
316
+
317
+ barStart() {
318
+ return this.range
319
+ ? `${ 100 * (this.minValue - this.min) / (this.max - this.min) }%`
320
+ : '0%';
321
+ },
322
+
323
+ precision() {
324
+ let precisions = [this.min, this.max, this.step].map(item => {
325
+ let decimal = ('' + item).split('.')[1];
326
+ return decimal ? decimal.length : 0;
327
+ });
328
+ return Math.max.apply(null, precisions);
329
+ },
330
+
331
+ runwayStyle() {
332
+ return this.vertical ? { height: this.height } : {};
333
+ },
334
+
335
+ barStyle() {
336
+ return this.vertical
337
+ ? {
338
+ height: this.barSize,
339
+ bottom: this.barStart
340
+ } : {
341
+ width: this.barSize,
342
+ left: this.barStart
343
+ };
344
+ },
345
+
346
+ sliderDisabled() {
347
+ return this.disabled || (this.elForm || {}).disabled;
348
+ }
349
+ },
350
+
351
+ mounted() {
352
+ let valuetext;
353
+ if (this.range) {
354
+ if (Array.isArray(this.value)) {
355
+ this.firstValue = Math.max(this.min, this.value[0]);
356
+ this.secondValue = Math.min(this.max, this.value[1]);
357
+ } else {
358
+ this.firstValue = this.min;
359
+ this.secondValue = this.max;
360
+ }
361
+ this.oldValue = [this.firstValue, this.secondValue];
362
+ valuetext = `${this.firstValue}-${this.secondValue}`;
363
+ } else {
364
+ if (typeof this.value !== 'number' || isNaN(this.value)) {
365
+ this.firstValue = this.min;
366
+ } else {
367
+ this.firstValue = Math.min(this.max, Math.max(this.min, this.value));
368
+ }
369
+ this.oldValue = this.firstValue;
370
+ valuetext = this.firstValue;
371
+ }
372
+ this.$el.setAttribute('aria-valuetext', valuetext);
373
+
374
+ // label screen reader
375
+ this.$el.setAttribute('aria-label', this.label ? this.label : `slider between ${this.min} and ${this.max}`);
376
+
377
+ this.resetSize();
378
+ window.addEventListener('resize', this.resetSize);
379
+ },
380
+
381
+ beforeDestroy() {
382
+ window.removeEventListener('resize', this.resetSize);
383
+ }
384
+ };
385
+ </script>