Merge remote-tracking branch 'upstream/master' into feature-exif
commit
71796e3dbf
|
@ -73,6 +73,7 @@
|
||||||
"jquery": "^3.1.1",
|
"jquery": "^3.1.1",
|
||||||
"jsbn": "^1.1.0",
|
"jsbn": "^1.1.0",
|
||||||
"jsrsasign": "^7.1.0",
|
"jsrsasign": "^7.1.0",
|
||||||
|
"lodash": "^4.17.4",
|
||||||
"moment": "^2.17.1",
|
"moment": "^2.17.1",
|
||||||
"moment-timezone": "^0.5.11",
|
"moment-timezone": "^0.5.11",
|
||||||
"sladex-blowfish": "^0.8.1",
|
"sladex-blowfish": "^0.8.1",
|
||||||
|
|
|
@ -272,6 +272,9 @@ const Categories = [
|
||||||
"CSS selector",
|
"CSS selector",
|
||||||
"Strip HTML tags",
|
"Strip HTML tags",
|
||||||
"Diff",
|
"Diff",
|
||||||
|
"To Snake case",
|
||||||
|
"To Camel case",
|
||||||
|
"To Kebab case",
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
|
@ -3250,6 +3250,69 @@ const OperationConfig = {
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"To Snake case": {
|
||||||
|
description: [
|
||||||
|
"Converts the input string to snake case.",
|
||||||
|
"<br><br>",
|
||||||
|
"Snake case is all lower case with underscores as word boundaries.",
|
||||||
|
"<br><br>",
|
||||||
|
"e.g. this_is_snake_case",
|
||||||
|
"<br><br>",
|
||||||
|
"'Attempt to be context aware' will make the operation attempt to nicely transform variable and function names.",
|
||||||
|
].join("\n"),
|
||||||
|
run: Code.runToSnakeCase,
|
||||||
|
inputType: "string",
|
||||||
|
outputType: "string",
|
||||||
|
args: [
|
||||||
|
{
|
||||||
|
name: "Attempt to be context aware",
|
||||||
|
type: "boolean",
|
||||||
|
value: false,
|
||||||
|
},
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"To Camel case": {
|
||||||
|
description: [
|
||||||
|
"Converts the input string to camel case.",
|
||||||
|
"<br><br>",
|
||||||
|
"Camel case is all lower case except letters after word boundaries which are uppercase.",
|
||||||
|
"<br><br>",
|
||||||
|
"e.g. thisIsCamelCase",
|
||||||
|
"<br><br>",
|
||||||
|
"'Attempt to be context aware' will make the operation attempt to nicely transform variable and function names.",
|
||||||
|
].join("\n"),
|
||||||
|
run: Code.runToCamelCase,
|
||||||
|
inputType: "string",
|
||||||
|
outputType: "string",
|
||||||
|
args: [
|
||||||
|
{
|
||||||
|
name: "Attempt to be context aware",
|
||||||
|
type: "boolean",
|
||||||
|
value: false,
|
||||||
|
},
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"To Kebab case": {
|
||||||
|
description: [
|
||||||
|
"Converts the input string to kebab case.",
|
||||||
|
"<br><br>",
|
||||||
|
"Kebab case is all lower case with dashes as word boundaries.",
|
||||||
|
"<br><br>",
|
||||||
|
"e.g. this-is-kebab-case",
|
||||||
|
"<br><br>",
|
||||||
|
"'Attempt to be context aware' will make the operation attempt to nicely transform variable and function names.",
|
||||||
|
].join("\n"),
|
||||||
|
run: Code.runToKebabCase,
|
||||||
|
inputType: "string",
|
||||||
|
outputType: "string",
|
||||||
|
args: [
|
||||||
|
{
|
||||||
|
name: "Attempt to be context aware",
|
||||||
|
type: "boolean",
|
||||||
|
value: false,
|
||||||
|
},
|
||||||
|
]
|
||||||
|
},
|
||||||
"Extract EXIF": {
|
"Extract EXIF": {
|
||||||
description: [
|
description: [
|
||||||
].join("\n"),
|
].join("\n"),
|
||||||
|
@ -3257,7 +3320,7 @@ const OperationConfig = {
|
||||||
inputType: "byteArray",
|
inputType: "byteArray",
|
||||||
outputType: "string",
|
outputType: "string",
|
||||||
args: [
|
args: [
|
||||||
]
|
],
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
import {camelCase, kebabCase, snakeCase} from "lodash";
|
||||||
|
|
||||||
import Utils from "../Utils.js";
|
import Utils from "../Utils.js";
|
||||||
import vkbeautify from "vkbeautify";
|
import vkbeautify from "vkbeautify";
|
||||||
import {DOMParser as dom} from "xmldom";
|
import {DOMParser as dom} from "xmldom";
|
||||||
|
@ -415,6 +417,84 @@ const Code = {
|
||||||
.join(delimiter);
|
.join(delimiter);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This tries to rename variable names in a code snippet according to a function.
|
||||||
|
*
|
||||||
|
* @param {string} input
|
||||||
|
* @param {function} replacer - this function will be fed the token which should be renamed.
|
||||||
|
* @returns {string}
|
||||||
|
*/
|
||||||
|
_replaceVariableNames(input, replacer) {
|
||||||
|
let tokenRegex = /\\"|"(?:\\"|[^"])*"|(\b[a-z0-9\-_]+\b)/ig;
|
||||||
|
|
||||||
|
return input.replace(tokenRegex, (...args) => {
|
||||||
|
let match = args[0],
|
||||||
|
quotes = args[1];
|
||||||
|
|
||||||
|
if (!quotes) {
|
||||||
|
return match;
|
||||||
|
} else {
|
||||||
|
return replacer(match);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts to snake_case.
|
||||||
|
*
|
||||||
|
* @param {string} input
|
||||||
|
* @param {Object[]} args
|
||||||
|
* @returns {string}
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
runToSnakeCase(input, args) {
|
||||||
|
let smart = args[0];
|
||||||
|
|
||||||
|
if (smart) {
|
||||||
|
return Code._replaceVariableNames(input, snakeCase);
|
||||||
|
} else {
|
||||||
|
return snakeCase(input);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts to camelCase.
|
||||||
|
*
|
||||||
|
* @param {string} input
|
||||||
|
* @param {Object[]} args
|
||||||
|
* @returns {string}
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
runToCamelCase(input, args) {
|
||||||
|
let smart = args[0];
|
||||||
|
|
||||||
|
if (smart) {
|
||||||
|
return Code._replaceVariableNames(input, camelCase);
|
||||||
|
} else {
|
||||||
|
return camelCase(input);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts to kebab-case.
|
||||||
|
*
|
||||||
|
* @param {string} input
|
||||||
|
* @param {Object[]} args
|
||||||
|
* @returns {string}
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
runToKebabCase(input, args) {
|
||||||
|
let smart = args[0];
|
||||||
|
|
||||||
|
if (smart) {
|
||||||
|
return Code._replaceVariableNames(input, kebabCase);
|
||||||
|
} else {
|
||||||
|
return kebabCase(input);
|
||||||
|
}
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
export default Code;
|
export default Code;
|
||||||
|
|
|
@ -592,7 +592,6 @@ const StrUtils = {
|
||||||
|
|
||||||
return output;
|
return output;
|
||||||
},
|
},
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
export default StrUtils;
|
export default StrUtils;
|
||||||
|
|
|
@ -13,6 +13,7 @@ import "babel-polyfill";
|
||||||
import TestRegister from "./TestRegister.js";
|
import TestRegister from "./TestRegister.js";
|
||||||
import "./tests/operations/Base58.js";
|
import "./tests/operations/Base58.js";
|
||||||
import "./tests/operations/ByteRepr.js";
|
import "./tests/operations/ByteRepr.js";
|
||||||
|
import "./tests/operations/Code.js";
|
||||||
import "./tests/operations/Compress.js";
|
import "./tests/operations/Compress.js";
|
||||||
import "./tests/operations/FlowControl.js";
|
import "./tests/operations/FlowControl.js";
|
||||||
import "./tests/operations/Image.js";
|
import "./tests/operations/Image.js";
|
||||||
|
|
|
@ -0,0 +1,132 @@
|
||||||
|
/**
|
||||||
|
* Code tests.
|
||||||
|
*
|
||||||
|
* @author tlwr [toby@toby.codes]
|
||||||
|
*
|
||||||
|
* @copyright Crown Copyright 2017
|
||||||
|
* @license Apache-2.0
|
||||||
|
*/
|
||||||
|
import TestRegister from "../../TestRegister.js";
|
||||||
|
|
||||||
|
TestRegister.addTests([
|
||||||
|
{
|
||||||
|
name: "To Camel case (dumb)",
|
||||||
|
input: "hello world",
|
||||||
|
expectedOutput: "helloWorld",
|
||||||
|
recipeConfig: [
|
||||||
|
{
|
||||||
|
"op": "To Camel case",
|
||||||
|
"args": [false]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "To Snake case (dumb)",
|
||||||
|
input: "hello world",
|
||||||
|
expectedOutput: "hello_world",
|
||||||
|
recipeConfig: [
|
||||||
|
{
|
||||||
|
"op": "To Snake case",
|
||||||
|
"args": [false]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "To Kebab case (dumb)",
|
||||||
|
input: "hello world",
|
||||||
|
expectedOutput: "hello-world",
|
||||||
|
recipeConfig: [
|
||||||
|
{
|
||||||
|
"op": "To Kebab case",
|
||||||
|
"args": [false]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "To Camel case (smart)",
|
||||||
|
input: [
|
||||||
|
"test='hello'",
|
||||||
|
"echo $test",
|
||||||
|
"a_camel_case_function",
|
||||||
|
"$a_camel_case_variable;",
|
||||||
|
"function function_name() {",
|
||||||
|
" console.log('things inside quotes do not get broken');",
|
||||||
|
" console.log(\"things inside quotes do not get broken\");",
|
||||||
|
"}",
|
||||||
|
].join("\n"),
|
||||||
|
expectedOutput: [
|
||||||
|
"test='hello'",
|
||||||
|
"echo $test",
|
||||||
|
"aCamelCaseFunction",
|
||||||
|
"$aCamelCaseVariable;",
|
||||||
|
"function functionName() {",
|
||||||
|
" console.log('things inside quotes do not get broken');",
|
||||||
|
" console.log(\"things inside quotes do not get broken\");",
|
||||||
|
"}",
|
||||||
|
].join("\n"),
|
||||||
|
recipeConfig: [
|
||||||
|
{
|
||||||
|
"op": "To Camel case",
|
||||||
|
"args": [true]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "To Snake case (smart)",
|
||||||
|
input: [
|
||||||
|
"test='hello'",
|
||||||
|
"echo $test",
|
||||||
|
"aSnakeCaseFunction",
|
||||||
|
"$aSnakeCaseVariable;",
|
||||||
|
"function functionName() {",
|
||||||
|
" console.log('things inside quotes do not get broken');",
|
||||||
|
" console.log(\"things inside quotes do not get broken\");",
|
||||||
|
"}",
|
||||||
|
].join("\n"),
|
||||||
|
expectedOutput: [
|
||||||
|
"test='hello'",
|
||||||
|
"echo $test",
|
||||||
|
"a_snake_case_function",
|
||||||
|
"$a_snake_case_variable;",
|
||||||
|
"function function_name() {",
|
||||||
|
" console.log('things inside quotes do not get broken');",
|
||||||
|
" console.log(\"things inside quotes do not get broken\");",
|
||||||
|
"}",
|
||||||
|
].join("\n"),
|
||||||
|
recipeConfig: [
|
||||||
|
{
|
||||||
|
"op": "To Snake case",
|
||||||
|
"args": [true]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "To Kebab case (smart)",
|
||||||
|
input: [
|
||||||
|
"test='hello'",
|
||||||
|
"echo $test",
|
||||||
|
"aKebabCaseFunction",
|
||||||
|
"$aKebabCaseVariable;",
|
||||||
|
"function functionName() {",
|
||||||
|
" console.log('things inside quotes do not get broken');",
|
||||||
|
" console.log(\"things inside quotes do not get broken\");",
|
||||||
|
"}",
|
||||||
|
].join("\n"),
|
||||||
|
expectedOutput: [
|
||||||
|
"test='hello'",
|
||||||
|
"echo $test",
|
||||||
|
"a-kebab-case-function",
|
||||||
|
"$a-kebab-case-variable;",
|
||||||
|
"function function-name() {",
|
||||||
|
" console.log('things inside quotes do not get broken');",
|
||||||
|
" console.log(\"things inside quotes do not get broken\");",
|
||||||
|
"}",
|
||||||
|
].join("\n"),
|
||||||
|
recipeConfig: [
|
||||||
|
{
|
||||||
|
"op": "To Kebab case",
|
||||||
|
"args": [true]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
},
|
||||||
|
]);
|
Loading…
Reference in New Issue