iov-design 2.15.60 → 2.15.62
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 +148 -148
- package/lib/alert.js +24 -105
- package/lib/aside.js +24 -34
- package/lib/autocomplete.js +36 -240
- package/lib/avatar.js +21 -20
- package/lib/backtop.js +27 -52
- package/lib/badge.js +30 -58
- package/lib/breadcrumb-item.js +24 -53
- package/lib/breadcrumb.js +24 -37
- package/lib/button-group.js +24 -29
- package/lib/button.js +38 -60
- package/lib/calendar.js +29 -146
- package/lib/card.js +24 -51
- package/lib/carousel-item.js +30 -68
- package/lib/carousel.js +27 -159
- package/lib/cascader-panel.js +41 -64
- package/lib/cascader.js +37 -470
- package/lib/checkbox-button.js +28 -164
- package/lib/checkbox-group.js +24 -37
- package/lib/checkbox.js +35 -189
- package/lib/col.js +1 -0
- package/lib/collapse-item.js +27 -125
- package/lib/collapse.js +24 -37
- package/lib/color-picker.js +104 -424
- package/lib/container.js +24 -34
- package/lib/date-picker.js +126 -1981
- package/lib/descriptions-item.js +1 -0
- package/lib/descriptions.js +1 -0
- package/lib/dialog.js +24 -137
- package/lib/divider.js +29 -64
- package/lib/drawer.js +24 -139
- package/lib/dropdown-item.js +27 -45
- package/lib/dropdown-menu.js +24 -51
- package/lib/dropdown.js +21 -20
- package/lib/empty.js +24 -61
- package/lib/footer.js +24 -34
- package/lib/form-item.js +42 -128
- package/lib/form.js +27 -40
- package/lib/header.js +24 -34
- package/lib/icon.js +24 -29
- package/lib/image.js +36 -220
- package/lib/index.js +1 -1
- package/lib/infinite-scroll.js +1 -0
- package/lib/input-number.js +30 -163
- package/lib/input.js +42 -274
- package/lib/iov-design.common.js +1635 -11132
- package/lib/link.js +31 -56
- package/lib/loading.js +24 -77
- package/lib/locale/format.js +10 -10
- package/lib/main.js +24 -29
- package/lib/menu-item-group.js +24 -40
- package/lib/menu-item.js +27 -83
- package/lib/menu.js +21 -20
- package/lib/message-box.js +24 -321
- package/lib/message.js +30 -82
- package/lib/mixins/migrating.js +20 -20
- package/lib/notification.js +24 -109
- package/lib/option-group.js +24 -50
- package/lib/option.js +27 -76
- package/lib/page-header.js +24 -56
- package/lib/pagination.js +24 -97
- package/lib/popconfirm.js +24 -97
- package/lib/popover.js +24 -89
- package/lib/progress.js +30 -133
- package/lib/radio-button.js +29 -111
- package/lib/radio-group.js +24 -39
- package/lib/radio.js +36 -152
- package/lib/rate.js +24 -94
- package/lib/result.js +72 -187
- package/lib/row.js +1 -0
- package/lib/scrollbar.js +1 -0
- package/lib/select.js +48 -637
- package/lib/skeleton-item.js +36 -68
- package/lib/skeleton.js +28 -70
- package/lib/slider.js +36 -267
- package/lib/spinner.js +24 -51
- package/lib/statistic.js +24 -76
- package/lib/step.js +29 -118
- package/lib/steps.js +27 -40
- package/lib/submenu.js +21 -20
- package/lib/switch.js +24 -130
- package/lib/tab-pane.js +24 -52
- package/lib/table-column.js +1 -0
- package/lib/table.js +93 -633
- package/lib/tabs.js +34 -49
- package/lib/tag.js +21 -20
- package/lib/theme-chalk/autocomplete.css +1 -1
- package/lib/theme-chalk/base.css +1 -1
- package/lib/theme-chalk/cascader.css +1 -1
- package/lib/theme-chalk/date-picker.css +1 -1
- package/lib/theme-chalk/index.css +1 -1
- package/lib/theme-chalk/input-number.css +1 -1
- package/lib/theme-chalk/input.css +1 -1
- package/lib/theme-chalk/iovfont.css +1 -1
- package/lib/theme-chalk/link.css +1 -1
- package/lib/theme-chalk/message-box.css +1 -1
- package/lib/theme-chalk/pagination.css +1 -1
- package/lib/theme-chalk/select.css +1 -1
- package/lib/theme-chalk/slider.css +1 -1
- package/lib/theme-chalk/time-picker.css +1 -1
- package/lib/theme-chalk/transfer.css +1 -1
- package/lib/time-picker.js +58 -820
- package/lib/time-select.js +42 -303
- package/lib/timeline-item.js +29 -75
- package/lib/timeline.js +21 -20
- package/lib/tooltip.js +1 -0
- package/lib/transfer.js +36 -299
- package/lib/tree.js +54 -243
- package/lib/upload.js +86 -654
- package/lib/utils/clickoutside.js +7 -7
- package/lib/utils/vue-popper.js +7 -7
- package/package.json +154 -154
- package/packages/autocomplete/src/autocomplete-suggestions.vue +76 -76
- package/packages/autocomplete/src/autocomplete.vue +285 -285
- package/packages/button/src/button.vue +90 -90
- package/packages/calendar/src/date-table.vue +200 -200
- package/packages/calendar/src/main.vue +280 -280
- package/packages/carousel/src/item.vue +138 -138
- package/packages/carousel/src/main.vue +315 -315
- package/packages/cascader/src/cascader.vue +776 -776
- package/packages/cascader-panel/src/cascader-menu.vue +138 -138
- package/packages/cascader-panel/src/cascader-node.vue +246 -246
- package/packages/cascader-panel/src/cascader-panel.vue +391 -391
- package/packages/cascader-panel/src/node.js +166 -166
- package/packages/cascader-panel/src/store.js +58 -58
- package/packages/checkbox/src/checkbox-button.vue +199 -199
- package/packages/checkbox/src/checkbox-group.vue +49 -49
- package/packages/checkbox/src/checkbox.vue +225 -225
- package/packages/collapse/src/collapse-item.vue +114 -114
- package/packages/color-picker/src/components/picker-dropdown.vue +121 -121
- package/packages/color-picker/src/main.vue +188 -188
- package/packages/date-picker/src/basic/date-table.vue +441 -441
- package/packages/date-picker/src/basic/month-table.vue +269 -269
- package/packages/date-picker/src/basic/time-spinner.vue +304 -304
- package/packages/date-picker/src/basic/year-table.vue +111 -111
- package/packages/date-picker/src/panel/date-range.vue +680 -680
- package/packages/date-picker/src/panel/date.vue +609 -609
- package/packages/date-picker/src/panel/month-range.vue +289 -289
- package/packages/date-picker/src/panel/time-range.vue +248 -248
- package/packages/date-picker/src/panel/time-select.vue +178 -178
- package/packages/date-picker/src/panel/time.vue +186 -186
- package/packages/date-picker/src/picker.vue +967 -967
- package/packages/descriptions/src/index.js +180 -180
- package/packages/dialog/src/component.vue +262 -262
- package/packages/drawer/src/main.vue +205 -205
- package/packages/dropdown/src/dropdown-item.vue +37 -37
- package/packages/dropdown/src/dropdown-menu.vue +63 -63
- package/packages/dropdown/src/dropdown.vue +293 -293
- package/packages/empty/src/index.vue +70 -70
- package/packages/form/src/form-item.vue +324 -324
- package/packages/form/src/form.vue +182 -182
- package/packages/image/src/image-viewer.vue +330 -330
- package/packages/image/src/main.vue +249 -249
- package/packages/infinite-scroll/src/main.js +150 -150
- package/packages/input/src/input.vue +477 -477
- package/packages/input-number/src/input-number.vue +283 -283
- package/packages/loading/src/directive.js +133 -133
- package/packages/loading/src/index.js +106 -106
- package/packages/menu/src/menu-item.vue +112 -112
- package/packages/menu/src/menu.vue +325 -325
- package/packages/menu/src/submenu.vue +349 -349
- package/packages/message/src/main.js +91 -91
- package/packages/message-box/src/main.js +216 -216
- package/packages/message-box/src/main.vue +333 -333
- package/packages/notification/src/main.js +94 -94
- package/packages/page-header/src/main.vue +30 -30
- package/packages/pagination/src/pagination.js +390 -390
- package/packages/popconfirm/src/main.vue +104 -104
- package/packages/popover/src/main.vue +239 -239
- package/packages/radio/src/radio-button.vue +115 -115
- package/packages/radio/src/radio-group.vue +115 -115
- package/packages/radio/src/radio.vue +148 -148
- package/packages/rate/src/main.vue +348 -348
- package/packages/scrollbar/src/bar.js +92 -92
- package/packages/scrollbar/src/main.js +130 -130
- package/packages/select/src/option-group.vue +60 -60
- package/packages/select/src/option.vue +171 -171
- package/packages/select/src/select-dropdown.vue +74 -74
- package/packages/select/src/select.vue +979 -979
- package/packages/slider/src/button.vue +238 -238
- package/packages/slider/src/main.vue +427 -427
- package/packages/statistic/src/main.vue +204 -204
- package/packages/steps/src/steps.vue +68 -68
- package/packages/switch/src/component.vue +182 -182
- package/packages/table/src/config.js +153 -153
- package/packages/table/src/filter-panel.vue +194 -194
- package/packages/table/src/store/current.js +76 -76
- package/packages/table/src/store/helper.js +41 -41
- package/packages/table/src/store/index.js +147 -147
- package/packages/table/src/store/watcher.js +502 -502
- package/packages/table/src/table-body.js +469 -469
- package/packages/table/src/table-column.js +328 -328
- package/packages/table/src/table-header.js +571 -571
- package/packages/table/src/table-layout.js +249 -249
- package/packages/table/src/table-row.js +101 -101
- package/packages/table/src/table.vue +740 -740
- package/packages/table/src/util.js +273 -273
- package/packages/tabs/src/tab-bar.vue +57 -57
- package/packages/tabs/src/tab-nav.vue +294 -294
- package/packages/tabs/src/tabs.vue +201 -201
- package/packages/theme-chalk/src/button.scss +416 -416
- package/packages/theme-chalk/src/cascader.scss +252 -252
- package/packages/theme-chalk/src/checkbox.scss +419 -419
- package/packages/theme-chalk/src/common/var.scss +795 -795
- package/packages/theme-chalk/src/form.scss +201 -201
- package/packages/theme-chalk/src/input.scss +591 -591
- package/packages/theme-chalk/src/iovfont.scss +818 -803
- package/packages/theme-chalk/src/link.scss +8 -8
- package/packages/theme-chalk/src/message-box.scss +207 -207
- package/packages/theme-chalk/src/mixins/_button.scss +136 -136
- package/packages/theme-chalk/src/mixins/mixins.scss +190 -190
- package/packages/theme-chalk/src/radio-button.scss +115 -115
- package/packages/theme-chalk/src/select.scss +270 -270
- package/packages/theme-chalk/src/tabs.scss +755 -755
- package/packages/theme-chalk/src/upload.scss +568 -568
- package/packages/tooltip/src/main.js +242 -242
- package/packages/transfer/src/main.vue +231 -231
- package/packages/transfer/src/transfer-panel.vue +251 -251
- package/packages/tree/src/model/node.js +484 -484
- package/packages/tree/src/tree-node.vue +279 -279
- package/packages/tree/src/tree.vue +496 -496
- package/packages/upload/src/index.vue +420 -420
- package/packages/upload/src/upload-file.vue +98 -98
- package/packages/upload/src/upload-list.vue +115 -115
- package/packages/upload/src/upload-picture.vue +98 -98
- package/packages/upload/src/upload.vue +231 -231
- package/packages/upload/src/utils.js +31 -31
- package/src/directives/repeat-click.js +26 -26
- package/src/index.js +259 -259
- package/src/locale/format.js +46 -46
- package/src/locale/index.js +48 -48
- package/src/locale/lang/lo-LA.js +126 -126
- package/src/mixins/locale.js +9 -9
- package/src/mixins/migrating.js +54 -54
- package/src/transitions/collapse-transition.js +77 -77
- package/src/utils/clickoutside.js +76 -76
- package/src/utils/date-util.js +282 -282
- package/src/utils/popup/index.js +218 -218
- package/src/utils/popup/popup-manager.js +194 -194
- package/src/utils/util.js +245 -245
- package/src/utils/vdom.js +5 -5
- package/src/utils/vue-popper.js +198 -198
package/src/utils/util.js
CHANGED
|
@@ -1,245 +1,245 @@
|
|
|
1
|
-
import Vue from 'vue';
|
|
2
|
-
import { isString, isObject } from 'iov-design/src/utils/types';
|
|
3
|
-
|
|
4
|
-
const hasOwnProperty = Object.prototype.hasOwnProperty;
|
|
5
|
-
|
|
6
|
-
export function noop() {};
|
|
7
|
-
|
|
8
|
-
export function hasOwn(obj, key) {
|
|
9
|
-
return hasOwnProperty.call(obj, key);
|
|
10
|
-
};
|
|
11
|
-
|
|
12
|
-
function extend(to, _from) {
|
|
13
|
-
for (let key in _from) {
|
|
14
|
-
to[key] = _from[key];
|
|
15
|
-
}
|
|
16
|
-
return to;
|
|
17
|
-
};
|
|
18
|
-
|
|
19
|
-
export function toObject(arr) {
|
|
20
|
-
var res = {};
|
|
21
|
-
for (let i = 0; i < arr.length; i++) {
|
|
22
|
-
if (arr[i]) {
|
|
23
|
-
extend(res, arr[i]);
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
return res;
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
export const getValueByPath = function(object, prop) {
|
|
30
|
-
prop = prop || '';
|
|
31
|
-
const paths = prop.split('.');
|
|
32
|
-
let current = object;
|
|
33
|
-
let result = null;
|
|
34
|
-
for (let i = 0, j = paths.length; i < j; i++) {
|
|
35
|
-
const path = paths[i];
|
|
36
|
-
if (!current) break;
|
|
37
|
-
|
|
38
|
-
if (i === j - 1) {
|
|
39
|
-
result = current[path];
|
|
40
|
-
break;
|
|
41
|
-
}
|
|
42
|
-
current = current[path];
|
|
43
|
-
}
|
|
44
|
-
return result;
|
|
45
|
-
};
|
|
46
|
-
|
|
47
|
-
export function getPropByPath(obj, path, strict) {
|
|
48
|
-
let tempObj = obj;
|
|
49
|
-
path = path.replace(/\[(\w+)\]/g, '.$1');
|
|
50
|
-
path = path.replace(/^\./, '');
|
|
51
|
-
|
|
52
|
-
let keyArr = path.split('.');
|
|
53
|
-
let i = 0;
|
|
54
|
-
for (let len = keyArr.length; i < len - 1; ++i) {
|
|
55
|
-
if (!tempObj && !strict) break;
|
|
56
|
-
let key = keyArr[i];
|
|
57
|
-
if (key in tempObj) {
|
|
58
|
-
tempObj = tempObj[key];
|
|
59
|
-
} else {
|
|
60
|
-
if (strict) {
|
|
61
|
-
throw new Error('please transfer a valid prop path to form item!');
|
|
62
|
-
}
|
|
63
|
-
break;
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
return {
|
|
67
|
-
o: tempObj,
|
|
68
|
-
k: keyArr[i],
|
|
69
|
-
v: tempObj ? tempObj[keyArr[i]] : null
|
|
70
|
-
};
|
|
71
|
-
};
|
|
72
|
-
|
|
73
|
-
export const generateId = function() {
|
|
74
|
-
return Math.floor(Math.random() * 10000);
|
|
75
|
-
};
|
|
76
|
-
|
|
77
|
-
export const valueEquals = (a, b) => {
|
|
78
|
-
// see: https://stackoverflow.com/questions/3115982/how-to-check-if-two-arrays-are-equal-with-javascript
|
|
79
|
-
if (a === b) return true;
|
|
80
|
-
if (!(a instanceof Array)) return false;
|
|
81
|
-
if (!(b instanceof Array)) return false;
|
|
82
|
-
if (a.length !== b.length) return false;
|
|
83
|
-
for (let i = 0; i !== a.length; ++i) {
|
|
84
|
-
if (a[i] !== b[i]) return false;
|
|
85
|
-
}
|
|
86
|
-
return true;
|
|
87
|
-
};
|
|
88
|
-
|
|
89
|
-
export const escapeRegexpString = (value = '') => String(value).replace(/[|\\{}()[\]^$+*?.]/g, '\\$&');
|
|
90
|
-
|
|
91
|
-
// TODO: use native Array.find, Array.findIndex when IE support is dropped
|
|
92
|
-
export const arrayFindIndex = function(arr, pred) {
|
|
93
|
-
for (let i = 0; i !== arr.length; ++i) {
|
|
94
|
-
if (pred(arr[i])) {
|
|
95
|
-
return i;
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
return -1;
|
|
99
|
-
};
|
|
100
|
-
|
|
101
|
-
export const arrayFind = function(arr, pred) {
|
|
102
|
-
const idx = arrayFindIndex(arr, pred);
|
|
103
|
-
return idx !== -1 ? arr[idx] : undefined;
|
|
104
|
-
};
|
|
105
|
-
|
|
106
|
-
// coerce truthy value to array
|
|
107
|
-
export const coerceTruthyValueToArray = function(val) {
|
|
108
|
-
if (Array.isArray(val)) {
|
|
109
|
-
return val;
|
|
110
|
-
} else if (val) {
|
|
111
|
-
return [val];
|
|
112
|
-
} else {
|
|
113
|
-
return [];
|
|
114
|
-
}
|
|
115
|
-
};
|
|
116
|
-
|
|
117
|
-
export const isIE = function() {
|
|
118
|
-
return !Vue.prototype.$isServer && !isNaN(Number(document.documentMode));
|
|
119
|
-
};
|
|
120
|
-
|
|
121
|
-
export const isEdge = function() {
|
|
122
|
-
return !Vue.prototype.$isServer && navigator.userAgent.indexOf('Edge') > -1;
|
|
123
|
-
};
|
|
124
|
-
|
|
125
|
-
export const isFirefox = function() {
|
|
126
|
-
return !Vue.prototype.$isServer && !!window.navigator.userAgent.match(/firefox/i);
|
|
127
|
-
};
|
|
128
|
-
|
|
129
|
-
export const autoprefixer = function(style) {
|
|
130
|
-
if (typeof style !== 'object') return style;
|
|
131
|
-
const rules = ['transform', 'transition', 'animation'];
|
|
132
|
-
const prefixes = ['ms-', 'webkit-'];
|
|
133
|
-
rules.forEach(rule => {
|
|
134
|
-
const value = style[rule];
|
|
135
|
-
if (rule && value) {
|
|
136
|
-
prefixes.forEach(prefix => {
|
|
137
|
-
style[prefix + rule] = value;
|
|
138
|
-
});
|
|
139
|
-
}
|
|
140
|
-
});
|
|
141
|
-
return style;
|
|
142
|
-
};
|
|
143
|
-
|
|
144
|
-
export const kebabCase = function(str) {
|
|
145
|
-
const hyphenateRE = /([^-])([A-Z])/g;
|
|
146
|
-
return str
|
|
147
|
-
.replace(hyphenateRE, '$1-$2')
|
|
148
|
-
.replace(hyphenateRE, '$1-$2')
|
|
149
|
-
.toLowerCase();
|
|
150
|
-
};
|
|
151
|
-
|
|
152
|
-
export const capitalize = function(str) {
|
|
153
|
-
if (!isString(str)) return str;
|
|
154
|
-
return str.charAt(0).toUpperCase() + str.slice(1);
|
|
155
|
-
};
|
|
156
|
-
|
|
157
|
-
export const looseEqual = function(a, b) {
|
|
158
|
-
const isObjectA = isObject(a);
|
|
159
|
-
const isObjectB = isObject(b);
|
|
160
|
-
if (isObjectA && isObjectB) {
|
|
161
|
-
return JSON.stringify(a) === JSON.stringify(b);
|
|
162
|
-
} else if (!isObjectA && !isObjectB) {
|
|
163
|
-
return String(a) === String(b);
|
|
164
|
-
} else {
|
|
165
|
-
return false;
|
|
166
|
-
}
|
|
167
|
-
};
|
|
168
|
-
|
|
169
|
-
export const arrayEquals = function(arrayA, arrayB) {
|
|
170
|
-
arrayA = arrayA || [];
|
|
171
|
-
arrayB = arrayB || [];
|
|
172
|
-
|
|
173
|
-
if (arrayA.length !== arrayB.length) {
|
|
174
|
-
return false;
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
for (let i = 0; i < arrayA.length; i++) {
|
|
178
|
-
if (!looseEqual(arrayA[i], arrayB[i])) {
|
|
179
|
-
return false;
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
return true;
|
|
184
|
-
};
|
|
185
|
-
|
|
186
|
-
export const isEqual = function(value1, value2) {
|
|
187
|
-
if (Array.isArray(value1) && Array.isArray(value2)) {
|
|
188
|
-
return arrayEquals(value1, value2);
|
|
189
|
-
}
|
|
190
|
-
return looseEqual(value1, value2);
|
|
191
|
-
};
|
|
192
|
-
|
|
193
|
-
export const isEmpty = function(val) {
|
|
194
|
-
// null or undefined
|
|
195
|
-
if (val == null) return true;
|
|
196
|
-
|
|
197
|
-
if (typeof val === 'boolean') return false;
|
|
198
|
-
|
|
199
|
-
if (typeof val === 'number') return !val;
|
|
200
|
-
|
|
201
|
-
if (val instanceof Error) return val.message === '';
|
|
202
|
-
|
|
203
|
-
switch (Object.prototype.toString.call(val)) {
|
|
204
|
-
// String or Array
|
|
205
|
-
case '[object String]':
|
|
206
|
-
case '[object Array]':
|
|
207
|
-
return !val.length;
|
|
208
|
-
|
|
209
|
-
// Map or Set or File
|
|
210
|
-
case '[object File]':
|
|
211
|
-
case '[object Map]':
|
|
212
|
-
case '[object Set]': {
|
|
213
|
-
return !val.size;
|
|
214
|
-
}
|
|
215
|
-
// Plain Object
|
|
216
|
-
case '[object Object]': {
|
|
217
|
-
return !Object.keys(val).length;
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
return false;
|
|
222
|
-
};
|
|
223
|
-
|
|
224
|
-
export function rafThrottle(fn) {
|
|
225
|
-
let locked = false;
|
|
226
|
-
return function(...args) {
|
|
227
|
-
if (locked) return;
|
|
228
|
-
locked = true;
|
|
229
|
-
window.requestAnimationFrame(_ => {
|
|
230
|
-
fn.apply(this, args);
|
|
231
|
-
locked = false;
|
|
232
|
-
});
|
|
233
|
-
};
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
export function objToArray(obj) {
|
|
237
|
-
if (Array.isArray(obj)) {
|
|
238
|
-
return obj;
|
|
239
|
-
}
|
|
240
|
-
return isEmpty(obj) ? [] : [obj];
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
export const isMac = function() {
|
|
244
|
-
return !Vue.prototype.$isServer && /macintosh|mac os x/i.test(navigator.userAgent);
|
|
245
|
-
};
|
|
1
|
+
import Vue from 'vue';
|
|
2
|
+
import { isString, isObject } from 'iov-design/src/utils/types';
|
|
3
|
+
|
|
4
|
+
const hasOwnProperty = Object.prototype.hasOwnProperty;
|
|
5
|
+
|
|
6
|
+
export function noop() {};
|
|
7
|
+
|
|
8
|
+
export function hasOwn(obj, key) {
|
|
9
|
+
return hasOwnProperty.call(obj, key);
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
function extend(to, _from) {
|
|
13
|
+
for (let key in _from) {
|
|
14
|
+
to[key] = _from[key];
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
export function toObject(arr) {
|
|
20
|
+
var res = {};
|
|
21
|
+
for (let i = 0; i < arr.length; i++) {
|
|
22
|
+
if (arr[i]) {
|
|
23
|
+
extend(res, arr[i]);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return res;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
export const getValueByPath = function(object, prop) {
|
|
30
|
+
prop = prop || '';
|
|
31
|
+
const paths = prop.split('.');
|
|
32
|
+
let current = object;
|
|
33
|
+
let result = null;
|
|
34
|
+
for (let i = 0, j = paths.length; i < j; i++) {
|
|
35
|
+
const path = paths[i];
|
|
36
|
+
if (!current) break;
|
|
37
|
+
|
|
38
|
+
if (i === j - 1) {
|
|
39
|
+
result = current[path];
|
|
40
|
+
break;
|
|
41
|
+
}
|
|
42
|
+
current = current[path];
|
|
43
|
+
}
|
|
44
|
+
return result;
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
export function getPropByPath(obj, path, strict) {
|
|
48
|
+
let tempObj = obj;
|
|
49
|
+
path = path.replace(/\[(\w+)\]/g, '.$1');
|
|
50
|
+
path = path.replace(/^\./, '');
|
|
51
|
+
|
|
52
|
+
let keyArr = path.split('.');
|
|
53
|
+
let i = 0;
|
|
54
|
+
for (let len = keyArr.length; i < len - 1; ++i) {
|
|
55
|
+
if (!tempObj && !strict) break;
|
|
56
|
+
let key = keyArr[i];
|
|
57
|
+
if (key in tempObj) {
|
|
58
|
+
tempObj = tempObj[key];
|
|
59
|
+
} else {
|
|
60
|
+
if (strict) {
|
|
61
|
+
throw new Error('please transfer a valid prop path to form item!');
|
|
62
|
+
}
|
|
63
|
+
break;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return {
|
|
67
|
+
o: tempObj,
|
|
68
|
+
k: keyArr[i],
|
|
69
|
+
v: tempObj ? tempObj[keyArr[i]] : null
|
|
70
|
+
};
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
export const generateId = function() {
|
|
74
|
+
return Math.floor(Math.random() * 10000);
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
export const valueEquals = (a, b) => {
|
|
78
|
+
// see: https://stackoverflow.com/questions/3115982/how-to-check-if-two-arrays-are-equal-with-javascript
|
|
79
|
+
if (a === b) return true;
|
|
80
|
+
if (!(a instanceof Array)) return false;
|
|
81
|
+
if (!(b instanceof Array)) return false;
|
|
82
|
+
if (a.length !== b.length) return false;
|
|
83
|
+
for (let i = 0; i !== a.length; ++i) {
|
|
84
|
+
if (a[i] !== b[i]) return false;
|
|
85
|
+
}
|
|
86
|
+
return true;
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
export const escapeRegexpString = (value = '') => String(value).replace(/[|\\{}()[\]^$+*?.]/g, '\\$&');
|
|
90
|
+
|
|
91
|
+
// TODO: use native Array.find, Array.findIndex when IE support is dropped
|
|
92
|
+
export const arrayFindIndex = function(arr, pred) {
|
|
93
|
+
for (let i = 0; i !== arr.length; ++i) {
|
|
94
|
+
if (pred(arr[i])) {
|
|
95
|
+
return i;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return -1;
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
export const arrayFind = function(arr, pred) {
|
|
102
|
+
const idx = arrayFindIndex(arr, pred);
|
|
103
|
+
return idx !== -1 ? arr[idx] : undefined;
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
// coerce truthy value to array
|
|
107
|
+
export const coerceTruthyValueToArray = function(val) {
|
|
108
|
+
if (Array.isArray(val)) {
|
|
109
|
+
return val;
|
|
110
|
+
} else if (val) {
|
|
111
|
+
return [val];
|
|
112
|
+
} else {
|
|
113
|
+
return [];
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
export const isIE = function() {
|
|
118
|
+
return !Vue.prototype.$isServer && !isNaN(Number(document.documentMode));
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
export const isEdge = function() {
|
|
122
|
+
return !Vue.prototype.$isServer && navigator.userAgent.indexOf('Edge') > -1;
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
export const isFirefox = function() {
|
|
126
|
+
return !Vue.prototype.$isServer && !!window.navigator.userAgent.match(/firefox/i);
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
export const autoprefixer = function(style) {
|
|
130
|
+
if (typeof style !== 'object') return style;
|
|
131
|
+
const rules = ['transform', 'transition', 'animation'];
|
|
132
|
+
const prefixes = ['ms-', 'webkit-'];
|
|
133
|
+
rules.forEach(rule => {
|
|
134
|
+
const value = style[rule];
|
|
135
|
+
if (rule && value) {
|
|
136
|
+
prefixes.forEach(prefix => {
|
|
137
|
+
style[prefix + rule] = value;
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
return style;
|
|
142
|
+
};
|
|
143
|
+
|
|
144
|
+
export const kebabCase = function(str) {
|
|
145
|
+
const hyphenateRE = /([^-])([A-Z])/g;
|
|
146
|
+
return str
|
|
147
|
+
.replace(hyphenateRE, '$1-$2')
|
|
148
|
+
.replace(hyphenateRE, '$1-$2')
|
|
149
|
+
.toLowerCase();
|
|
150
|
+
};
|
|
151
|
+
|
|
152
|
+
export const capitalize = function(str) {
|
|
153
|
+
if (!isString(str)) return str;
|
|
154
|
+
return str.charAt(0).toUpperCase() + str.slice(1);
|
|
155
|
+
};
|
|
156
|
+
|
|
157
|
+
export const looseEqual = function(a, b) {
|
|
158
|
+
const isObjectA = isObject(a);
|
|
159
|
+
const isObjectB = isObject(b);
|
|
160
|
+
if (isObjectA && isObjectB) {
|
|
161
|
+
return JSON.stringify(a) === JSON.stringify(b);
|
|
162
|
+
} else if (!isObjectA && !isObjectB) {
|
|
163
|
+
return String(a) === String(b);
|
|
164
|
+
} else {
|
|
165
|
+
return false;
|
|
166
|
+
}
|
|
167
|
+
};
|
|
168
|
+
|
|
169
|
+
export const arrayEquals = function(arrayA, arrayB) {
|
|
170
|
+
arrayA = arrayA || [];
|
|
171
|
+
arrayB = arrayB || [];
|
|
172
|
+
|
|
173
|
+
if (arrayA.length !== arrayB.length) {
|
|
174
|
+
return false;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
for (let i = 0; i < arrayA.length; i++) {
|
|
178
|
+
if (!looseEqual(arrayA[i], arrayB[i])) {
|
|
179
|
+
return false;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
return true;
|
|
184
|
+
};
|
|
185
|
+
|
|
186
|
+
export const isEqual = function(value1, value2) {
|
|
187
|
+
if (Array.isArray(value1) && Array.isArray(value2)) {
|
|
188
|
+
return arrayEquals(value1, value2);
|
|
189
|
+
}
|
|
190
|
+
return looseEqual(value1, value2);
|
|
191
|
+
};
|
|
192
|
+
|
|
193
|
+
export const isEmpty = function(val) {
|
|
194
|
+
// null or undefined
|
|
195
|
+
if (val == null) return true;
|
|
196
|
+
|
|
197
|
+
if (typeof val === 'boolean') return false;
|
|
198
|
+
|
|
199
|
+
if (typeof val === 'number') return !val;
|
|
200
|
+
|
|
201
|
+
if (val instanceof Error) return val.message === '';
|
|
202
|
+
|
|
203
|
+
switch (Object.prototype.toString.call(val)) {
|
|
204
|
+
// String or Array
|
|
205
|
+
case '[object String]':
|
|
206
|
+
case '[object Array]':
|
|
207
|
+
return !val.length;
|
|
208
|
+
|
|
209
|
+
// Map or Set or File
|
|
210
|
+
case '[object File]':
|
|
211
|
+
case '[object Map]':
|
|
212
|
+
case '[object Set]': {
|
|
213
|
+
return !val.size;
|
|
214
|
+
}
|
|
215
|
+
// Plain Object
|
|
216
|
+
case '[object Object]': {
|
|
217
|
+
return !Object.keys(val).length;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
return false;
|
|
222
|
+
};
|
|
223
|
+
|
|
224
|
+
export function rafThrottle(fn) {
|
|
225
|
+
let locked = false;
|
|
226
|
+
return function(...args) {
|
|
227
|
+
if (locked) return;
|
|
228
|
+
locked = true;
|
|
229
|
+
window.requestAnimationFrame(_ => {
|
|
230
|
+
fn.apply(this, args);
|
|
231
|
+
locked = false;
|
|
232
|
+
});
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
export function objToArray(obj) {
|
|
237
|
+
if (Array.isArray(obj)) {
|
|
238
|
+
return obj;
|
|
239
|
+
}
|
|
240
|
+
return isEmpty(obj) ? [] : [obj];
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
export const isMac = function() {
|
|
244
|
+
return !Vue.prototype.$isServer && /macintosh|mac os x/i.test(navigator.userAgent);
|
|
245
|
+
};
|
package/src/utils/vdom.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { hasOwn } from 'iov-design/src/utils/util';
|
|
2
|
-
|
|
3
|
-
export function isVNode(node) {
|
|
4
|
-
return node !== null && typeof node === 'object' && hasOwn(node, 'componentOptions');
|
|
5
|
-
};
|
|
1
|
+
import { hasOwn } from 'iov-design/src/utils/util';
|
|
2
|
+
|
|
3
|
+
export function isVNode(node) {
|
|
4
|
+
return node !== null && typeof node === 'object' && hasOwn(node, 'componentOptions');
|
|
5
|
+
};
|