xdesign-vue-next
Version:
XDesign Component for vue-next
1 lines • 10.8 kB
Source Map (JSON)
{"version":3,"file":"helper.mjs","sources":["../../../../src/_common/js/utils/helper.ts"],"sourcesContent":["import isString from 'lodash/isString';\nimport isNull from 'lodash/isNull';\nimport isUndefined from 'lodash/isUndefined';\nimport isNumber from 'lodash/isNumber';\nimport isArray from 'lodash/isArray';\n\nexport function omit(obj: object, fields: string[]): object {\n const shallowCopy = {\n ...obj,\n };\n for (let i = 0; i < fields.length; i++) {\n const key = fields[i];\n delete shallowCopy[key];\n }\n return shallowCopy;\n}\n\nexport function removeEmptyAttrs<T>(obj: T): Partial<T> {\n const newObj = {};\n\n Object.keys(obj).forEach((key) => {\n if (!isUndefined(obj[key]) || isNull(obj[key])) {\n newObj[key] = obj[key];\n }\n });\n\n return newObj;\n}\n\nexport function getTabElementByValue(tabs: [] = [], value: string): object {\n const [result] = tabs.filter((item) => {\n const { id } = item as any;\n return id === value;\n });\n return result || null;\n}\n\nexport function firstUpperCase(str: string): string {\n return str.toLowerCase().replace(/( |^)[a-z]/g, (char: string) => char.toUpperCase());\n}\n\nexport type Gradients = { [percent: string]: string };\nexport type FromTo = { from: string; to: string };\nexport type LinearGradient = { direction?: string } & (Gradients | FromTo);\nexport function getBackgroundColor(color: string | string[] | LinearGradient): string {\n if (isString(color)) {\n return color;\n }\n if (isArray(color)) {\n if (color[0] && color[0][0] === '#') {\n color.unshift('90deg');\n }\n return `linear-gradient( ${color.join(',')} )`;\n }\n const {\n from, to, direction = 'to right', ...rest\n } = color;\n let keys = Object.keys(rest);\n if (keys.length) {\n keys = keys.sort((a, b) => {\n const c = parseFloat(a.substr(0, a.length - 1)) - parseFloat(b.substr(0, b.length - 1));\n return c;\n });\n const tempArr = keys.map((key: any) => `${rest[key]} ${key}`);\n return `linear-gradient(${direction}, ${tempArr.join(',')})`;\n }\n return `linear-gradient(${direction}, ${from}, ${to})`;\n}\n\n/**\n *\n * @returns 获取 ie 浏览器版本\n */\nexport function getIEVersion() {\n if (typeof navigator === 'undefined' || !navigator) return Number.MAX_SAFE_INTEGER;\n\n const { userAgent } = navigator;\n // 判断是否IE<11浏览器\n const isIE = userAgent.indexOf('compatible') > -1 && userAgent.indexOf('MSIE') > -1;\n // 判断是否IE11浏览器\n const isIE11 = userAgent.indexOf('Trident') > -1 && userAgent.indexOf('rv:11.0') > -1;\n if (isIE) {\n const reIE = new RegExp('MSIE (\\\\d+\\\\.\\\\d+);');\n const match = userAgent.match(reIE);\n if (!match) return -1;\n const fIEVersion = parseFloat(match[1]);\n return fIEVersion < 7 ? 6 : fIEVersion;\n }\n if (isIE11) {\n // IE11\n return 11;\n }\n // 不是ie浏览器\n return Number.MAX_SAFE_INTEGER;\n}\n\n/**\n * 计算字符串字符的长度并可以截取字符串。\n * @param str 传入字符串\n * @param maxCharacter 规定最大字符串长度\n * @returns 当没有传入maxCharacter时返回字符串字符长度,当传入maxCharacter时返回截取之后的字符串和长度。\n */\nexport function getCharacterLength(str: string, maxCharacter?: number) {\n const hasMaxCharacter = isNumber(maxCharacter);\n if (!str || str.length === 0) {\n if (hasMaxCharacter) {\n return {\n length: 0,\n characters: str,\n };\n }\n return 0;\n }\n let len = 0;\n for (let i = 0; i < str.length; i++) {\n let currentStringLength = 0;\n if (str.charCodeAt(i) > 127 || str.charCodeAt(i) === 94) {\n currentStringLength = 2;\n } else {\n currentStringLength = 1;\n }\n if (hasMaxCharacter && len + currentStringLength > maxCharacter) {\n return {\n length: len,\n characters: str.slice(0, i),\n };\n }\n len += currentStringLength;\n }\n if (hasMaxCharacter) {\n return {\n length: len,\n characters: str,\n };\n }\n return len;\n}\n\n/**\n * 返回 Unicode 字符长度\n * '👨'.length === 2\n * getUnicodeLength('👨') === 1\n * @param str\n * @returns {number}\n */\nexport function getUnicodeLength(str?: string): number {\n return [...(str ?? '')].length;\n}\n\n/**\n * 修正 Unicode 最大字符长度\n * '👨👨👨'.slice(0, 2) === '👨'\n * limitUnicodeMaxLength('👨👨👨', 2) === '👨👨'\n * @param str\n * @param maxLength\n * @param oldStr\n * @returns {string}\n */\nexport function limitUnicodeMaxLength(\n str?: string,\n maxLength?: number,\n oldStr?: string\n): string {\n // 旧字符满足字数要求则返回\n if ([...(oldStr ?? '')].slice().length === maxLength) return oldStr || '';\n return [...(str ?? '')].slice(0, maxLength).join('');\n}\n\n/**\n * 兼容样式中支持number/string类型的传值 得出最后的结果。\n * @param param number或string类型的可用于样式上的值\n * @returns 可使用的样式值。\n */\nexport function pxCompat(param: string | number) {\n return isNumber(param) ? `${param}px` : param;\n}\n\n/**\n * 计算dom元素盒模型尺寸\n * @param targetElement 需要计算盒模型尺寸的元素\n * @returns 计算出各维度尺寸。\n */\nconst DOM_STYLE_PROPS = [\n 'padding-top',\n 'padding-bottom',\n 'padding-left',\n 'padding-right',\n 'font-family',\n 'font-weight',\n 'font-size',\n 'font-variant',\n 'text-rendering',\n 'text-transform',\n 'width',\n 'text-indent',\n 'border-width',\n 'box-sizing',\n 'line-height',\n 'letter-spacing',\n];\n\nexport function calculateNodeSize(targetElement: HTMLElement) {\n if (typeof window === 'undefined') {\n return {\n paddingSize: 0,\n borderSize: 0,\n boxSizing: 0,\n sizingStyle: '',\n };\n }\n\n const style = window.getComputedStyle(targetElement);\n\n const boxSizing = style.getPropertyValue('box-sizing')\n || style.getPropertyValue('-moz-box-sizing')\n || style.getPropertyValue('-webkit-box-sizing');\n\n const paddingSize = (\n parseFloat(style.getPropertyValue('padding-bottom'))\n + parseFloat(style.getPropertyValue('padding-top'))\n );\n\n const borderSize = (\n parseFloat(style.getPropertyValue('border-bottom-width'))\n + parseFloat(style.getPropertyValue('border-top-width'))\n );\n\n const sizingStyle = DOM_STYLE_PROPS\n .map((name) => `${name}:${style.getPropertyValue(name)}`)\n .join(';');\n\n return {\n paddingSize, borderSize, boxSizing, sizingStyle,\n };\n}\n"],"names":["isUndefined","isNull","newObj","result","isString","isArray","color","direction","rest","isNumber","length","characters","currentStringLength","len","paddingSize","borderSize","boxSizing","sizingStyle"],"mappings":"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"}