@zkwq/business 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (231) hide show
  1. package/dist/index.css +1 -0
  2. package/dist/index.js +21861 -0
  3. package/dist/index.umd.cjs +46 -0
  4. package/package.json +27 -0
  5. package/src/components/base/ui/alert/Alert.vue +94 -0
  6. package/src/components/base/ui/autocomplete/autocomplete-suggestions.vue +77 -0
  7. package/src/components/base/ui/autocomplete/autocomplete.vue +305 -0
  8. package/src/components/base/ui/backtop/main.vue +112 -0
  9. package/src/components/base/ui/button/Button.vue +84 -0
  10. package/src/components/base/ui/button/ButtonGroup.vue +10 -0
  11. package/src/components/base/ui/carousel/Carousel.vue +304 -0
  12. package/src/components/base/ui/carousel/CarouselItem.vue +137 -0
  13. package/src/components/base/ui/cascader/cascader.vue +650 -0
  14. package/src/components/base/ui/cascader-panel/cascader-menu.vue +138 -0
  15. package/src/components/base/ui/cascader-panel/cascader-node.vue +246 -0
  16. package/src/components/base/ui/cascader-panel/cascader-panel.vue +382 -0
  17. package/src/components/base/ui/cascader-panel/node.js +166 -0
  18. package/src/components/base/ui/cascader-panel/store.js +62 -0
  19. package/src/components/base/ui/checkbox/checkbox-button.vue +199 -0
  20. package/src/components/base/ui/checkbox/checkbox-group.vue +48 -0
  21. package/src/components/base/ui/checkbox/checkbox.vue +222 -0
  22. package/src/components/base/ui/col/col.js +71 -0
  23. package/src/components/base/ui/collapse/collapse-item.vue +180 -0
  24. package/src/components/base/ui/collapse/collapse.vue +73 -0
  25. package/src/components/base/ui/color-picker/color.js +317 -0
  26. package/src/components/base/ui/color-picker/components/alpha-slider.vue +132 -0
  27. package/src/components/base/ui/color-picker/components/hue-slider.vue +123 -0
  28. package/src/components/base/ui/color-picker/components/picker-dropdown.vue +119 -0
  29. package/src/components/base/ui/color-picker/components/predefine.vue +61 -0
  30. package/src/components/base/ui/color-picker/components/sv-panel.vue +100 -0
  31. package/src/components/base/ui/color-picker/draggable.js +36 -0
  32. package/src/components/base/ui/color-picker/index.js +2 -0
  33. package/src/components/base/ui/color-picker/main.vue +188 -0
  34. package/src/components/base/ui/date-picker/basic/date-table.vue +441 -0
  35. package/src/components/base/ui/date-picker/basic/month-table.vue +254 -0
  36. package/src/components/base/ui/date-picker/basic/time-spinner.vue +304 -0
  37. package/src/components/base/ui/date-picker/basic/year-table.vue +101 -0
  38. package/src/components/base/ui/date-picker/panel/date-range.vue +680 -0
  39. package/src/components/base/ui/date-picker/panel/date.vue +597 -0
  40. package/src/components/base/ui/date-picker/panel/month-range.vue +289 -0
  41. package/src/components/base/ui/date-picker/panel/time-range.vue +248 -0
  42. package/src/components/base/ui/date-picker/panel/time-select.vue +178 -0
  43. package/src/components/base/ui/date-picker/panel/time.vue +186 -0
  44. package/src/components/base/ui/date-picker/picker/date-picker.js +43 -0
  45. package/src/components/base/ui/date-picker/picker/time-picker.js +39 -0
  46. package/src/components/base/ui/date-picker/picker/time-select.js +21 -0
  47. package/src/components/base/ui/date-picker/picker.vue +942 -0
  48. package/src/components/base/ui/dialog/Index.vue +212 -0
  49. package/src/components/base/ui/directive/repeat-click.js +24 -0
  50. package/src/components/base/ui/directive/ripple.js +303 -0
  51. package/src/components/base/ui/divider/Divider.vue +37 -0
  52. package/src/components/base/ui/drawer/Drawer.vue +202 -0
  53. package/src/components/base/ui/dropdown/dropdown-item.vue +39 -0
  54. package/src/components/base/ui/dropdown/dropdown-menu.vue +63 -0
  55. package/src/components/base/ui/dropdown/dropdown.vue +308 -0
  56. package/src/components/base/ui/form/Form.vue +167 -0
  57. package/src/components/base/ui/form/FormItem.vue +334 -0
  58. package/src/components/base/ui/form/LabelWrap.vue +69 -0
  59. package/src/components/base/ui/icon/icon.vue +13 -0
  60. package/src/components/base/ui/image/image-viewer.vue +302 -0
  61. package/src/components/base/ui/image/main.vue +248 -0
  62. package/src/components/base/ui/index.js +189 -0
  63. package/src/components/base/ui/input/Input.vue +438 -0
  64. package/src/components/base/ui/input/calcTextareaHeight.js +104 -0
  65. package/src/components/base/ui/input-number/input-number.vue +285 -0
  66. package/src/components/base/ui/locale/format.js +32 -0
  67. package/src/components/base/ui/locale/index.js +48 -0
  68. package/src/components/base/ui/locale/lang/zh-CN.js +120 -0
  69. package/src/components/base/ui/menu/menu-item-group.vue +45 -0
  70. package/src/components/base/ui/menu/menu-item.vue +112 -0
  71. package/src/components/base/ui/menu/menu-mixin.js +44 -0
  72. package/src/components/base/ui/menu/menu.vue +312 -0
  73. package/src/components/base/ui/menu/submenu.vue +408 -0
  74. package/src/components/base/ui/message/index.js +2 -0
  75. package/src/components/base/ui/message/main.js +87 -0
  76. package/src/components/base/ui/message/main.vue +110 -0
  77. package/src/components/base/ui/message-box/main.js +216 -0
  78. package/src/components/base/ui/message-box/main.vue +323 -0
  79. package/src/components/base/ui/mixin/emitter.js +31 -0
  80. package/src/components/base/ui/mixin/focus.js +9 -0
  81. package/src/components/base/ui/mixin/locale.js +9 -0
  82. package/src/components/base/ui/mixin/migrating.js +33 -0
  83. package/src/components/base/ui/pagination/pager.vue +163 -0
  84. package/src/components/base/ui/pagination/pagination.jsx +391 -0
  85. package/src/components/base/ui/popover/directive.js +20 -0
  86. package/src/components/base/ui/popover/index.js +14 -0
  87. package/src/components/base/ui/popover/main.vue +236 -0
  88. package/src/components/base/ui/progress/Progress.vue +227 -0
  89. package/src/components/base/ui/radio/radio-button.vue +114 -0
  90. package/src/components/base/ui/radio/radio-group.vue +111 -0
  91. package/src/components/base/ui/radio/radio.vue +134 -0
  92. package/src/components/base/ui/row/row.js +47 -0
  93. package/src/components/base/ui/scrollbar/bar.jsx +91 -0
  94. package/src/components/base/ui/scrollbar/index.jsx +203 -0
  95. package/src/components/base/ui/scrollbar/util.js +32 -0
  96. package/src/components/base/ui/select/Option.vue +168 -0
  97. package/src/components/base/ui/select/OptionGroup.vue +60 -0
  98. package/src/components/base/ui/select/Select.vue +920 -0
  99. package/src/components/base/ui/select/SelectDropdown.vue +74 -0
  100. package/src/components/base/ui/select/navigation-mixin.js +54 -0
  101. package/src/components/base/ui/skeleton/index.js +8 -0
  102. package/src/components/base/ui/skeleton/src/img-placeholder.vue +16 -0
  103. package/src/components/base/ui/skeleton/src/index.vue +80 -0
  104. package/src/components/base/ui/skeleton/src/item.vue +22 -0
  105. package/src/components/base/ui/skeleton-item/index.js +8 -0
  106. package/src/components/base/ui/slider/button.vue +238 -0
  107. package/src/components/base/ui/slider/main.vue +427 -0
  108. package/src/components/base/ui/slider/marker.js +18 -0
  109. package/src/components/base/ui/style/alert.scss +147 -0
  110. package/src/components/base/ui/style/animations.scss +65 -0
  111. package/src/components/base/ui/style/autocomplete.scss +81 -0
  112. package/src/components/base/ui/style/backtop.scss +20 -0
  113. package/src/components/base/ui/style/button-group.scss +0 -0
  114. package/src/components/base/ui/style/button.scss +380 -0
  115. package/src/components/base/ui/style/carousel-item.scss +50 -0
  116. package/src/components/base/ui/style/carousel.scss +161 -0
  117. package/src/components/base/ui/style/cascader-panel.scss +120 -0
  118. package/src/components/base/ui/style/cascader.scss +185 -0
  119. package/src/components/base/ui/style/checkbox-button.scss +0 -0
  120. package/src/components/base/ui/style/checkbox-group.scss +0 -0
  121. package/src/components/base/ui/style/checkbox.scss +360 -0
  122. package/src/components/base/ui/style/col.scss +156 -0
  123. package/src/components/base/ui/style/collapse-item.scss +0 -0
  124. package/src/components/base/ui/style/collapse.scss +114 -0
  125. package/src/components/base/ui/style/color-picker.scss +387 -0
  126. package/src/components/base/ui/style/config.scss +4 -0
  127. package/src/components/base/ui/style/date-picker/date-picker.scss +97 -0
  128. package/src/components/base/ui/style/date-picker/date-range-picker.scss +101 -0
  129. package/src/components/base/ui/style/date-picker/date-table.scss +151 -0
  130. package/src/components/base/ui/style/date-picker/month-table.scss +82 -0
  131. package/src/components/base/ui/style/date-picker/picker-panel.scss +117 -0
  132. package/src/components/base/ui/style/date-picker/picker.scss +197 -0
  133. package/src/components/base/ui/style/date-picker/time-picker.scss +85 -0
  134. package/src/components/base/ui/style/date-picker/time-range-picker.scss +31 -0
  135. package/src/components/base/ui/style/date-picker/time-spinner.scss +110 -0
  136. package/src/components/base/ui/style/date-picker/year-table.scss +51 -0
  137. package/src/components/base/ui/style/date-picker.scss +12 -0
  138. package/src/components/base/ui/style/dialog.scss +123 -0
  139. package/src/components/base/ui/style/divider.scss +47 -0
  140. package/src/components/base/ui/style/drawer.scss +218 -0
  141. package/src/components/base/ui/style/dropdown-item.scss +0 -0
  142. package/src/components/base/ui/style/dropdown-menu.scss +0 -0
  143. package/src/components/base/ui/style/dropdown.scss +185 -0
  144. package/src/components/base/ui/style/form-item.scss +0 -0
  145. package/src/components/base/ui/style/form.scss +203 -0
  146. package/src/components/base/ui/style/function.scss +43 -0
  147. package/src/components/base/ui/style/icon.scss +1167 -0
  148. package/src/components/base/ui/style/image.scss +184 -0
  149. package/src/components/base/ui/style/index.scss +57 -0
  150. package/src/components/base/ui/style/input-number.scss +187 -0
  151. package/src/components/base/ui/style/input.scss +477 -0
  152. package/src/components/base/ui/style/menu-item-group.scss +0 -0
  153. package/src/components/base/ui/style/menu-item.scss +0 -0
  154. package/src/components/base/ui/style/menu.scss +294 -0
  155. package/src/components/base/ui/style/message-box.scss +231 -0
  156. package/src/components/base/ui/style/message.scss +120 -0
  157. package/src/components/base/ui/style/mixins.scss +196 -0
  158. package/src/components/base/ui/style/option-group.scss +42 -0
  159. package/src/components/base/ui/style/option.scss +36 -0
  160. package/src/components/base/ui/style/pagination.scss +295 -0
  161. package/src/components/base/ui/style/popover.scss +40 -0
  162. package/src/components/base/ui/style/popper.scss +102 -0
  163. package/src/components/base/ui/style/popup.scss +42 -0
  164. package/src/components/base/ui/style/progress.scss +141 -0
  165. package/src/components/base/ui/style/radio-button.scss +113 -0
  166. package/src/components/base/ui/style/radio-group.scss +9 -0
  167. package/src/components/base/ui/style/radio.scss +203 -0
  168. package/src/components/base/ui/style/ripple.scss +35 -0
  169. package/src/components/base/ui/style/row.scss +39 -0
  170. package/src/components/base/ui/style/scrollbar.scss +75 -0
  171. package/src/components/base/ui/style/select-dropdown.scss +59 -0
  172. package/src/components/base/ui/style/select.scss +154 -0
  173. package/src/components/base/ui/style/skeleton-item.scss +84 -0
  174. package/src/components/base/ui/style/skeleton.scss +40 -0
  175. package/src/components/base/ui/style/slider.scss +250 -0
  176. package/src/components/base/ui/style/switch.scss +116 -0
  177. package/src/components/base/ui/style/tabs.scss +602 -0
  178. package/src/components/base/ui/style/tag.scss +174 -0
  179. package/src/components/base/ui/style/tooltip.scss +146 -0
  180. package/src/components/base/ui/style/transition.scss +138 -0
  181. package/src/components/base/ui/style/upload.scss +603 -0
  182. package/src/components/base/ui/style/utils.scss +39 -0
  183. package/src/components/base/ui/style/var.scss +1007 -0
  184. package/src/components/base/ui/switch/index.vue +174 -0
  185. package/src/components/base/ui/tabs/tab-bar.vue +57 -0
  186. package/src/components/base/ui/tabs/tab-nav.vue +294 -0
  187. package/src/components/base/ui/tabs/tab-pane.vue +56 -0
  188. package/src/components/base/ui/tabs/tabs.vue +191 -0
  189. package/src/components/base/ui/tag/Tag.vue +60 -0
  190. package/src/components/base/ui/tooltip/tooltip.jsx +234 -0
  191. package/src/components/base/ui/upload/Index.vue +340 -0
  192. package/src/components/base/ui/upload/Upload.vue +216 -0
  193. package/src/components/base/ui/upload/UploadDragger.vue +70 -0
  194. package/src/components/base/ui/upload/UploadList.vue +100 -0
  195. package/src/components/base/ui/upload/ajax.js +85 -0
  196. package/src/components/base/ui/util/aria-dialog.js +90 -0
  197. package/src/components/base/ui/util/aria-utils.js +122 -0
  198. package/src/components/base/ui/util/clickoutside.js +76 -0
  199. package/src/components/base/ui/util/date-util.js +292 -0
  200. package/src/components/base/ui/util/date.js +370 -0
  201. package/src/components/base/ui/util/debounce.js +21 -0
  202. package/src/components/base/ui/util/deepmerge.js +100 -0
  203. package/src/components/base/ui/util/dom.js +215 -0
  204. package/src/components/base/ui/util/index.js +262 -0
  205. package/src/components/base/ui/util/menu/aria-menubar.js +14 -0
  206. package/src/components/base/ui/util/menu/aria-menuitem.js +49 -0
  207. package/src/components/base/ui/util/menu/aria-submenu.js +59 -0
  208. package/src/components/base/ui/util/merge.js +14 -0
  209. package/src/components/base/ui/util/popper.js +1235 -0
  210. package/src/components/base/ui/util/popup/index.js +218 -0
  211. package/src/components/base/ui/util/popup/popup-manager.js +194 -0
  212. package/src/components/base/ui/util/resize-events.js +32 -0
  213. package/src/components/base/ui/util/scroll-into-view.js +27 -0
  214. package/src/components/base/ui/util/scrollbar-width.js +29 -0
  215. package/src/components/base/ui/util/shared.js +7 -0
  216. package/src/components/base/ui/util/throttle.js +91 -0
  217. package/src/components/base/ui/util/types.js +24 -0
  218. package/src/components/base/ui/util/vdom.js +5 -0
  219. package/src/components/base/ui/util/vue-popper.js +188 -0
  220. package/src/components/normal/AggsItemH.vue +139 -0
  221. package/src/index.js +10 -0
  222. package/src/static/base-icons.ttf +0 -0
  223. package/src/static/base-icons.woff +0 -0
  224. package/src/static/label_bg.png +0 -0
  225. package/src/static/term-label-bg.png +0 -0
  226. package/src/style/app-article.scss +698 -0
  227. package/src/style/app-comment.scss +259 -0
  228. package/src/style/app-recommend.scss +48 -0
  229. package/src/style/app-richtext.scss +176 -0
  230. package/src/style/index.scss +523 -0
  231. package/vite.config.js +38 -0
@@ -0,0 +1,262 @@
1
+ import Vue from 'vue'
2
+
3
+ const hasOwnProperty = Object.prototype.hasOwnProperty
4
+
5
+ export function noop() {}
6
+
7
+ export function hasOwn(obj, key) {
8
+ return hasOwnProperty.call(obj, key)
9
+ }
10
+
11
+ function extend(to, _from) {
12
+ for (let key in _from) {
13
+ to[key] = _from[key]
14
+ }
15
+ return to
16
+ }
17
+
18
+ export function toObject(arr) {
19
+ var res = {}
20
+ for (let i = 0; i < arr.length; i++) {
21
+ if (arr[i]) {
22
+ extend(res, arr[i])
23
+ }
24
+ }
25
+ return res
26
+ }
27
+
28
+ export const getValueByPath = function(object, prop) {
29
+ prop = prop || ''
30
+ const paths = prop.split('.')
31
+ let current = object
32
+ let result = null
33
+ for (let i = 0, j = paths.length; i < j; i++) {
34
+ const path = paths[i]
35
+ if (!current) break
36
+
37
+ if (i === j - 1) {
38
+ result = current[path]
39
+ break
40
+ }
41
+ current = current[path]
42
+ }
43
+ return result
44
+ }
45
+
46
+ export function getPropByPath(obj, path, strict) {
47
+ let tempObj = obj
48
+ path = path.replace(/\[(\w+)\]/g, '.$1')
49
+ path = path.replace(/^\./, '')
50
+
51
+ let keyArr = path.split('.')
52
+ let i = 0
53
+ for (let len = keyArr.length; i < len - 1; ++i) {
54
+ if (!tempObj && !strict) break
55
+ let key = keyArr[i]
56
+ if (key in tempObj) {
57
+ tempObj = tempObj[key]
58
+ } else {
59
+ if (strict) {
60
+ throw new Error('please transfer a valid prop path to form item!')
61
+ }
62
+ break
63
+ }
64
+ }
65
+ return {
66
+ o: tempObj,
67
+ k: keyArr[i],
68
+ v: tempObj ? tempObj[keyArr[i]] : null
69
+ }
70
+ }
71
+
72
+ export const generateId = function() {
73
+ return Math.floor(Math.random() * 10000)
74
+ }
75
+
76
+ export const valueEquals = (a, b) => {
77
+ if (a === b) return true
78
+ if (!(a instanceof Array)) return false
79
+ if (!(b instanceof Array)) return false
80
+ if (a.length !== b.length) return false
81
+ for (let i = 0; i !== a.length; ++i) {
82
+ if (a[i] !== b[i]) return false
83
+ }
84
+ return true
85
+ }
86
+
87
+ export const escapeRegexpString = (value = '') => String(value).replace(/[|\\{}()[\]^$+*?.]/g, '\\$&')
88
+
89
+ export const arrayFindIndex = function(arr, pred) {
90
+ for (let i = 0; i !== arr.length; ++i) {
91
+ if (pred(arr[i])) {
92
+ return i
93
+ }
94
+ }
95
+ return -1
96
+ }
97
+
98
+ export const arrayFind = function(arr, pred) {
99
+ const idx = arrayFindIndex(arr, pred)
100
+ return idx !== -1 ? arr[idx] : undefined
101
+ }
102
+
103
+ export const coerceTruthyValueToArray = function(val) {
104
+ if (Array.isArray(val)) {
105
+ return val
106
+ } else if (val) {
107
+ return [val]
108
+ } else {
109
+ return []
110
+ }
111
+ }
112
+
113
+ export const isIE = function() {
114
+ return !Vue.prototype.$isServer && !isNaN(Number(document.documentMode))
115
+ }
116
+
117
+ export const isEdge = function() {
118
+ return !Vue.prototype.$isServer && navigator.userAgent.indexOf('Edge') > -1
119
+ }
120
+
121
+ export const isFirefox = function() {
122
+ return !Vue.prototype.$isServer && !!window.navigator.userAgent.match(/firefox/i)
123
+ }
124
+
125
+ export const autoprefixer = function(style) {
126
+ if (typeof style !== 'object') return style
127
+ const rules = ['transform', 'transition', 'animation']
128
+ const prefixes = ['ms-', 'webkit-']
129
+ rules.forEach(rule => {
130
+ const value = style[rule]
131
+ if (rule && value) {
132
+ prefixes.forEach(prefix => {
133
+ style[prefix + rule] = value
134
+ })
135
+ }
136
+ })
137
+ return style
138
+ }
139
+
140
+ export const kebabCase = function(str) {
141
+ const hyphenateRE = /([^-])([A-Z])/g
142
+ return str
143
+ .replace(hyphenateRE, '$1-$2')
144
+ .replace(hyphenateRE, '$1-$2')
145
+ .toLowerCase()
146
+ }
147
+
148
+ export const capitalize = function(str) {
149
+ if (!isString(str)) return str
150
+ return str.charAt(0).toUpperCase() + str.slice(1)
151
+ }
152
+
153
+ export const looseEqual = function(a, b) {
154
+ const isObjectA = isObject(a)
155
+ const isObjectB = isObject(b)
156
+ if (isObjectA && isObjectB) {
157
+ return JSON.stringify(a) === JSON.stringify(b)
158
+ } else if (!isObjectA && !isObjectB) {
159
+ return String(a) === String(b)
160
+ } else {
161
+ return false
162
+ }
163
+ }
164
+
165
+ export const arrayEquals = function(arrayA, arrayB) {
166
+ arrayA = arrayA || []
167
+ arrayB = arrayB || []
168
+
169
+ if (arrayA.length !== arrayB.length) {
170
+ return false
171
+ }
172
+
173
+ for (let i = 0; i < arrayA.length; i++) {
174
+ if (!looseEqual(arrayA[i], arrayB[i])) {
175
+ return false
176
+ }
177
+ }
178
+
179
+ return true
180
+ }
181
+
182
+ export const isEqual = function(value1, value2) {
183
+ if (Array.isArray(value1) && Array.isArray(value2)) {
184
+ return arrayEquals(value1, value2)
185
+ }
186
+ return looseEqual(value1, value2)
187
+ }
188
+
189
+ export const isEmpty = function(val) {
190
+ // null or undefined
191
+ if (val == null) return true
192
+
193
+ if (typeof val === 'boolean') return false
194
+
195
+ if (typeof val === 'number') return !val
196
+
197
+ if (val instanceof Error) return val.message === ''
198
+
199
+ switch (Object.prototype.toString.call(val)) {
200
+ // String or Array
201
+ case '[object String]':
202
+ case '[object Array]':
203
+ return !val.length
204
+
205
+ // Map or Set or File
206
+ case '[object File]':
207
+ case '[object Map]':
208
+ case '[object Set]': {
209
+ return !val.size
210
+ }
211
+ // Plain Object
212
+ case '[object Object]': {
213
+ return !Object.keys(val).length
214
+ }
215
+ }
216
+
217
+ return false
218
+ }
219
+
220
+ export function rafThrottle(fn) {
221
+ let locked = false
222
+ return function(...args) {
223
+ if (locked) return
224
+ locked = true
225
+ window.requestAnimationFrame(_ => {
226
+ fn.apply(this, args)
227
+ locked = false
228
+ })
229
+ }
230
+ }
231
+
232
+ export function objToArray(obj) {
233
+ if (Array.isArray(obj)) {
234
+ return obj
235
+ }
236
+ return isEmpty(obj) ? [] : [obj]
237
+ }
238
+
239
+ export const isString = (obj) => {
240
+ return Object.prototype.toString.call(obj) === '[object String]'
241
+ }
242
+
243
+ export const isObject = (obj) => {
244
+ return Object.prototype.toString.call(obj) === '[object Object]'
245
+ }
246
+
247
+ export const isHtmlElement = (node) => {
248
+ return node && node.nodeType === Node.ELEMENT_NODE
249
+ }
250
+
251
+ export const isFunction = (functionToCheck) => {
252
+ var getType = {}
253
+ return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]'
254
+ }
255
+
256
+ export const isUndefined = (val)=> {
257
+ return val === void 0
258
+ }
259
+
260
+ export const isDefined = (val) => {
261
+ return val !== undefined && val !== null
262
+ }
@@ -0,0 +1,14 @@
1
+ import MenuItem from './aria-menuitem';
2
+
3
+ const Menu = function(domNode) {
4
+ this.domNode = domNode;
5
+ this.init();
6
+ };
7
+
8
+ Menu.prototype.init = function() {
9
+ let menuChildren = this.domNode.childNodes;
10
+ [].filter.call(menuChildren, child => child.nodeType === 1).forEach(child => {
11
+ new MenuItem(child); // eslint-disable-line
12
+ });
13
+ };
14
+ export default Menu;
@@ -0,0 +1,49 @@
1
+ import Utils from '../aria-utils';
2
+ import SubMenu from './aria-submenu';
3
+
4
+ const MenuItem = function(domNode) {
5
+ this.domNode = domNode;
6
+ this.submenu = null;
7
+ this.init();
8
+ };
9
+
10
+ MenuItem.prototype.init = function() {
11
+ this.domNode.setAttribute('tabindex', '0');
12
+ let menuChild = this.domNode.querySelector('.el-menu');
13
+ if (menuChild) {
14
+ this.submenu = new SubMenu(this, menuChild);
15
+ }
16
+ this.addListeners();
17
+ };
18
+
19
+ MenuItem.prototype.addListeners = function() {
20
+ const keys = Utils.keys;
21
+ this.domNode.addEventListener('keydown', event => {
22
+ let prevDef = false;
23
+ switch (event.keyCode) {
24
+ case keys.down:
25
+ Utils.triggerEvent(event.currentTarget, 'mouseenter');
26
+ this.submenu && this.submenu.gotoSubIndex(0);
27
+ prevDef = true;
28
+ break;
29
+ case keys.up:
30
+ Utils.triggerEvent(event.currentTarget, 'mouseenter');
31
+ this.submenu && this.submenu.gotoSubIndex(this.submenu.subMenuItems.length - 1);
32
+ prevDef = true;
33
+ break;
34
+ case keys.tab:
35
+ Utils.triggerEvent(event.currentTarget, 'mouseleave');
36
+ break;
37
+ case keys.enter:
38
+ case keys.space:
39
+ prevDef = true;
40
+ event.currentTarget.click();
41
+ break;
42
+ }
43
+ if (prevDef) {
44
+ event.preventDefault();
45
+ }
46
+ });
47
+ };
48
+
49
+ export default MenuItem;
@@ -0,0 +1,59 @@
1
+ import Utils from '../aria-utils';
2
+
3
+ const SubMenu = function(parent, domNode) {
4
+ this.domNode = domNode;
5
+ this.parent = parent;
6
+ this.subMenuItems = [];
7
+ this.subIndex = 0;
8
+ this.init();
9
+ };
10
+
11
+ SubMenu.prototype.init = function() {
12
+ this.subMenuItems = this.domNode.querySelectorAll('li');
13
+ this.addListeners();
14
+ };
15
+
16
+ SubMenu.prototype.gotoSubIndex = function(idx) {
17
+ if (idx === this.subMenuItems.length) {
18
+ idx = 0;
19
+ } else if (idx < 0) {
20
+ idx = this.subMenuItems.length - 1;
21
+ }
22
+ this.subMenuItems[idx].focus();
23
+ this.subIndex = idx;
24
+ };
25
+
26
+ SubMenu.prototype.addListeners = function() {
27
+ const keys = Utils.keys;
28
+ const parentNode = this.parent.domNode;
29
+ Array.prototype.forEach.call(this.subMenuItems, el => {
30
+ el.addEventListener('keydown', event => {
31
+ let prevDef = false;
32
+ switch (event.keyCode) {
33
+ case keys.down:
34
+ this.gotoSubIndex(this.subIndex + 1);
35
+ prevDef = true;
36
+ break;
37
+ case keys.up:
38
+ this.gotoSubIndex(this.subIndex - 1);
39
+ prevDef = true;
40
+ break;
41
+ case keys.tab:
42
+ Utils.triggerEvent(parentNode, 'mouseleave');
43
+ break;
44
+ case keys.enter:
45
+ case keys.space:
46
+ prevDef = true;
47
+ event.currentTarget.click();
48
+ break;
49
+ }
50
+ if (prevDef) {
51
+ event.preventDefault();
52
+ event.stopPropagation();
53
+ }
54
+ return false;
55
+ });
56
+ });
57
+ };
58
+
59
+ export default SubMenu;
@@ -0,0 +1,14 @@
1
+ export default function(target) {
2
+ for (let i = 1, j = arguments.length; i < j; i++) {
3
+ let source = arguments[i] || {}
4
+ for (let prop in source) {
5
+ if (source.hasOwnProperty(prop)) {
6
+ let value = source[prop]
7
+ if (value !== undefined) {
8
+ target[prop] = value
9
+ }
10
+ }
11
+ }
12
+ }
13
+ return target
14
+ }