diff --git a/README.md b/README.md
index 7e51d8d158860fb8429db3e0a915991e7060cf96..b9150e60b3e240b77ca118639959b3b5340ced2b 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 e555e231953693f04b4f46a8efb83ecdb5002f94..1d962933c206382b945f935515bf7ee1c92cd41b 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 810cb2edb9cffffefb065c8c47d7a65beb39360a..0730e397ae383f0cf2e2cb30b64d36ec6ba1332f 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 d656338395fe09beca9fdf245a842fadec06123e..753cf11aeb66ba68cc0fbc539ea782fd0254a23e 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 4a94bd320a2bf02102fc40028b05ef94e8eb4810..915ea06994f9938a9b8b83df70d622d90d2ae677 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 0000000000000000000000000000000000000000..a8e53255c1940d9d560050da3ed52d715a885498
--- /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 0000000000000000000000000000000000000000..645d1bd394536f2201df99678447a65d995f9e8a
--- /dev/null
+++ b/src/views/tool/variableConversion.vue
@@ -0,0 +1,58 @@
+
+
+
+
\ No newline at end of file