From 6d49be866cceefe96b9a1626029aaefedbfec237 Mon Sep 17 00:00:00 2001 From: baiy Date: Mon, 21 Jun 2021 17:10:43 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=8F=98=E9=87=8F=E5=90=8D?= =?UTF-8?q?=E8=BD=AC=E6=8D=A2=E5=B7=A5=E5=85=B7=20#44?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + src/config.js | 17 ++- src/tool.router.js | 4 + src/tool.vue | 2 +- src/tool/adapter.js | 2 +- src/views/tool/library/varCamelCase.js | 177 +++++++++++++++++++++++++ src/views/tool/variableConversion.vue | 58 ++++++++ 7 files changed, 254 insertions(+), 7 deletions(-) create mode 100644 src/views/tool/library/varCamelCase.js create mode 100644 src/views/tool/variableConversion.vue diff --git a/README.md b/README.md index 7e51d8d..b9150e6 100644 --- a/README.md +++ b/README.md @@ -89,6 +89,7 @@ npm run serve -adapter=utools - [moment](https://momentjs.com/) - [vue-codemirror](https://www.npmjs.com/package/vue-codemirror) - [sm-crypto](https://github.com/JuneAndGreen/sm-crypto) +- [camelcaseplugin](https://github.com/netnexus/camelcaseplugin) > 当然项目中还使用很多不知道姓名的大神的代码, 在这里就不一一感谢 diff --git a/src/config.js b/src/config.js index e555e23..1d96293 100644 --- a/src/config.js +++ b/src/config.js @@ -10,14 +10,12 @@ const tool = [ { 'name': 'hash', 'title': '哈希(hash)', - 'cat': ['encryption'], - 'keyword': ['md5', 'sha1', 'sha256', 'sha512', 'sm3'] + 'cat': ['encryption'] }, { 'name': 'encrypt', 'title': '加密/解密', - 'cat': ['encryption'], - 'keyword': ['AES', 'DES', 'RC4', 'Rabbit', 'TripleDes', 'sm2'] + 'cat': ['encryption'] }, {'name': 'base64', 'title': 'BASE64编码', 'cat': ['encryption']}, {'name': 'json', 'title': 'JSON工具', 'cat': ['conversion', 'serialize']}, @@ -40,9 +38,18 @@ const tool = [ {'name': 'uuid', 'title': 'UUID生成', 'cat': ['other']}, {'name': 'jsonToObject', 'title': 'JSON转实体类', 'cat': ['conversion', 'serialize']}, {'name': 'ascii', 'title': 'ascii转换', 'cat': ['conversion']}, + {'name': 'variableConversion', 'title': '变量名转换', 'cat': ['conversion']}, ] +const utools = { + keyword: { + hash: ['md5', 'sha1', 'sha256', 'sha512', 'sm3'], + encrypt: ['AES', 'DES', 'RC4', 'Rabbit', 'TripleDes', 'sm2'] + } +} + module.exports = { category, - tool + tool, + utools } \ No newline at end of file diff --git a/src/tool.router.js b/src/tool.router.js index 810cb2e..0730e39 100644 --- a/src/tool.router.js +++ b/src/tool.router.js @@ -97,6 +97,10 @@ const routes = [ { path: '/tool/ascii', component: r => require(['./views/tool/ascii.vue'], r) + }, + { + path: '/tool/variableConversion', + component: r => require(['./views/tool/variableConversion.vue'], r) } ] diff --git a/src/tool.vue b/src/tool.vue index d656338..753cf11 100644 --- a/src/tool.vue +++ b/src/tool.vue @@ -193,7 +193,7 @@ export default { return h('Input', { props: { type:"textarea", - rows:"10", + rows:10, value: JSON.stringify(historyFactory(this.currentTool).get(index), null, "\t"), } }) diff --git a/src/tool/adapter.js b/src/tool/adapter.js index 4a94bd3..915ea06 100644 --- a/src/tool/adapter.js +++ b/src/tool/adapter.js @@ -47,7 +47,7 @@ const utoolsConfigWrite = () => { "cmds": ['ctool', '程序开发常用工具'] }, ...toolConfig.tool.map((item) => { - let keyword = item.hasOwnProperty("keyword") ? item['keyword'] : []; + let keyword = toolConfig['keyword'].hasOwnProperty(item.name) ? toolConfig['keyword'][item.name] : []; return { "code": "ctool-" + item.name, "explain": item.title, diff --git a/src/views/tool/library/varCamelCase.js b/src/views/tool/library/varCamelCase.js new file mode 100644 index 0000000..a8e5325 --- /dev/null +++ b/src/views/tool/library/varCamelCase.js @@ -0,0 +1,177 @@ +// 算法来源 https://github.com/netnexus/camelcaseplugin + +const SPACE_CASE = 'spaceCaseToPascalCaseSpace' // 转换过程 space case to Camel Case +const PASCAL_CASE_SPACE = 'pascalCaseSpaceToKebabCase' // 转换过程 Camel Case to kebab-case +const KEBAB_CASE = 'kebabCaseToUpperSnakeCase' // 转换过程 kebab-case to SNAKE_CASE +const UPPER_SNAKE_CASE = 'upperSnakeCaseToPascalCase' // 转换过程 SNAKE_CASE to CamelCase +const PASCAL_CASE = 'pascalCaseToCamelCase' // 转换过程 CamelCase to camelCase +const CAMEL_CASE = 'camelCaseToLowerSnakeCase' // 转换过程 camelCase to snake_case +const LOWER_SNAKE_CASE = 'lowerSnakeCaseToSpaceCase' // 转换过程 snake_case to space case + +const isUpperCase = (str, first = false) => { + if (first === false) { + return str.toUpperCase() === str; + } + return str.substr(0, 1).toUpperCase() === str.substr(0, 1) + && (str.length === 1 || str.substr(1, 1).toLowerCase() === str.substr(1, 1)); +} + +const isLowerCase = (str, first = false) => { + if (first === false) { + return str.toLowerCase() === str; + } + return str.substr(0, 1).toLowerCase() === str.substr(0, 1); +} +const firstToUpper = (str) => { + return str.replace(str[0], str[0].toUpperCase()); +} +const firstToLower = (str) => { + return str.replace(str[0], str[0].toLowerCase()); +} + +const getMethodName = (str) => { + str = str.trim(); + if (isLowerCase(str) && str.indexOf('_') !== -1) { + return LOWER_SNAKE_CASE; + } + if (isLowerCase(str) && str.indexOf('-') !== -1) { + return KEBAB_CASE; + } + if (isLowerCase(str) && str.indexOf(' ') !== -1) { + return SPACE_CASE; + } + if (isUpperCase(str, true) && str.indexOf(' ') !== -1) { + return PASCAL_CASE_SPACE; + } + if (isUpperCase(str) && str.indexOf('_') !== -1) { + return UPPER_SNAKE_CASE; + } + if (isUpperCase(str, true) && str.indexOf('_') === -1 && str.indexOf(' ') === -1 && str.indexOf('0') === -1) { + return PASCAL_CASE; + } + return CAMEL_CASE; +} + +class Conversion { + constructor(str) { + this.setStr(str); + + } + + setStr(str) { + this.str = str.trim() + return this; + } + + // space case to Camel Case + spaceCaseToPascalCaseSpace() { + return this.str.split(' ').map((str) => { + return firstToUpper(str) + }).join(' ').trim() + } + + // Camel Case to kebab-case + pascalCaseSpaceToKebabCase() { + return this.str.replace(/ /g, "-").toLowerCase().trim(); + } + + // kebab-case to SNAKE_CASE + kebabCaseToUpperSnakeCase() { + return this.str.toUpperCase().replace(/-/g, "_").trim() + } + + // SNAKE_CASE to PascalCase + upperSnakeCaseToPascalCase() { + return this.str.split('_').map((str) => { + return firstToUpper(str.toLowerCase()) + }).join('').trim() + } + + // PascalCase to camelCase + pascalCaseToCamelCase() { + return firstToLower(this.str).trim() + } + + // camelCase to snake_case + camelCaseToLowerSnakeCase() { + let temp = ""; + for (let i = 0; i < this.str.length; i++) { + let c = this.str.substr(i, 1); + if (isUpperCase(this.str.substr(i, 1))) { + temp = temp + '_'; + } + temp = temp + c.toLowerCase(); + } + return temp.trim(); + } + + + // snake_case to space case + lowerSnakeCaseToSpaceCase() { + return this.str.replace(/_/g, " ").trim(); + } + + get() { + let methods = [ + SPACE_CASE, + PASCAL_CASE_SPACE, + KEBAB_CASE, + UPPER_SNAKE_CASE, + PASCAL_CASE, + CAMEL_CASE, + LOWER_SNAKE_CASE, + ]; + let current = methods.indexOf(getMethodName(this.str)); + let executeMethods; + if (current === 0) { + executeMethods = methods; + } else { + executeMethods = [...methods.slice(current), ...methods.slice(0, current)] + } + let result = {}; + let str = this.str; + for (let i = 0; i < executeMethods.length; i++) { + str = this.setStr(str)[executeMethods[i]](str); + result[executeMethods[i]] = str; + } + return result; + } +} + +const resultKey = [ + {key: SPACE_CASE, name: 'Var Name'}, + {key: PASCAL_CASE_SPACE, name: 'var-name'}, + {key: KEBAB_CASE, name: 'VAR_NAME'}, + {key: UPPER_SNAKE_CASE, name: 'VarName'}, + {key: PASCAL_CASE, name: 'varName'}, + {key: CAMEL_CASE, name: 'var_name'}, + {key: LOWER_SNAKE_CASE, name: 'var name'}, +] +export default { + resultKey, + convent: (str) => { + let result = { + [SPACE_CASE]: [], + [PASCAL_CASE_SPACE]: [], + [KEBAB_CASE]: [], + [UPPER_SNAKE_CASE]: [], + [PASCAL_CASE]: [], + [CAMEL_CASE]: [], + [LOWER_SNAKE_CASE]: [], + }; + let list = str.split("\n").map((_str) => { + return _str.trim() + }).filter((_str) => !!_str); + for (let item of list) { + let conversion = new Conversion(item) + let conversionResult = conversion.get() + for (let key of Object.keys(conversionResult)) { + result[key].push(conversionResult[key]) + } + } + for (let key of Object.keys(result)) { + result[key] = result[key].join("\n"); + } + return result; + } +} \ No newline at end of file diff --git a/src/views/tool/variableConversion.vue b/src/views/tool/variableConversion.vue new file mode 100644 index 0000000..645d1bd --- /dev/null +++ b/src/views/tool/variableConversion.vue @@ -0,0 +1,58 @@ + + \ No newline at end of file -- GitLab