Merge branch 'dev' into next

This commit is contained in:
chenjiahan
2020-05-28 14:14:28 +08:00
253 changed files with 9524 additions and 5523 deletions
+28
View File
@@ -1,3 +1,31 @@
export function range(num: number, min: number, max: number): number {
return Math.min(Math.max(num, min), max);
}
function trimExtraChar(value: string, char: string, regExp: RegExp) {
const index = value.indexOf(char);
if (index === -1) {
return value;
}
if (char === '-' && index !== 0) {
return value.slice(0, index);
}
return value.slice(0, index + 1) + value.slice(index).replace(regExp, '');
}
export function formatNumber(value: string, allowDot?: boolean) {
if (allowDot) {
value = trimExtraChar(value, '.', /\./g);
} else {
value = value.split('.')[0];
}
value = trimExtraChar(value, '-', /-/g);
const regExp = allowDot ? /[^-0-9.]/g : /[^-0-9]/g;
return value.replace(regExp, '');
}
+2 -2
View File
@@ -8,7 +8,7 @@ export const isServer: boolean = Vue.prototype.$isServer;
// eslint-disable-next-line @typescript-eslint/no-empty-function
export function noop() {}
export function isDef(val: any): boolean {
export function isDef(val: unknown): boolean {
return val !== undefined && val !== null;
}
@@ -16,7 +16,7 @@ export function isFunction(val: unknown): val is Function {
return typeof val === 'function';
}
export function isObject(val: any): val is Record<any, any> {
export function isObject(val: unknown): val is Record<any, any> {
return val !== null && typeof val === 'object';
}
+20
View File
@@ -8,6 +8,7 @@ import { isMobile } from '../validate/mobile';
import { isNumeric } from '../validate/number';
import { isAndroid } from '../validate/system';
import { camelize } from '../format/string';
import { formatNumber } from '../format/number';
test('deepClone', () => {
const a = { foo: 0 };
@@ -95,3 +96,22 @@ test('isNumeric', () => {
expect(isNumeric('abc')).toBeFalsy();
expect(isNumeric('1b2')).toBeFalsy();
});
test('formatNumber', () => {
expect(formatNumber('abc')).toEqual('');
expect(formatNumber('1.2')).toEqual('1');
expect(formatNumber('abc1.2')).toEqual('1');
expect(formatNumber('123.4.')).toEqual('123');
// with dot
expect(formatNumber('abc', true)).toEqual('');
expect(formatNumber('1.2', true)).toEqual('1.2');
expect(formatNumber('abc1.2', true)).toEqual('1.2');
expect(formatNumber('123.4.', true)).toEqual('123.4');
// minus
expect(formatNumber('-1.2')).toEqual('-1');
expect(formatNumber('-1.2', true)).toEqual('-1.2');
expect(formatNumber('-1.2-', true)).toEqual('-1.2');
expect(formatNumber('123-')).toEqual('123');
});
+8 -9
View File
@@ -7,6 +7,10 @@ function flattenVNodes(vnodes: VNode[]) {
vnodes.forEach((vnode) => {
result.push(vnode);
if (vnode.componentInstance) {
traverse(vnode.componentInstance.$children.map((item) => item.$vnode));
}
if (vnode.children) {
traverse(vnode.children);
}
@@ -17,18 +21,13 @@ function flattenVNodes(vnodes: VNode[]) {
return result;
}
type VueInstance = {
_vnode: VNode;
$vnode: VNode;
};
// sort children instances by vnodes order
export function sortChildren(children: VueInstance[], parent: VueInstance) {
// null on SSR
if (!parent._vnode) {
export function sortChildren(children: Vue[], parent: Vue) {
const { componentOptions } = parent.$vnode;
if (!componentOptions || !componentOptions.children) {
return;
}
const vnodes = flattenVNodes(parent._vnode.children!);
const vnodes = flattenVNodes(componentOptions.children);
children.sort((a, b) => vnodes.indexOf(a.$vnode) - vnodes.indexOf(b.$vnode));
}