Merge pull request '#1 Add monaco editor' (#2) from stuzer05/random-web-tools#1 into master

Reviewed-on: #2
This commit is contained in:
Illya Marchenko 2024-03-07 13:42:16 +02:00
commit 005ac4225b
Signed by: Gitea
GPG Key ID: 81CE9C258E973E3A
14 changed files with 334 additions and 197 deletions

233
package-lock.json generated

@ -9,6 +9,13 @@
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.4.tgz", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.4.tgz",
"integrity": "sha512-FDge0dFazETFcxGw/EXzOkN8uJp0PC7Qbm+Pe9T+av2zlBpOgunFHkQPPn+eRuClU73JF+98D531UgayY89tow==" "integrity": "sha512-FDge0dFazETFcxGw/EXzOkN8uJp0PC7Qbm+Pe9T+av2zlBpOgunFHkQPPn+eRuClU73JF+98D531UgayY89tow=="
}, },
"@esbuild/linux-loong64": {
"version": "0.14.54",
"resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz",
"integrity": "sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==",
"dev": true,
"optional": true
},
"@eslint/eslintrc": { "@eslint/eslintrc": {
"version": "1.3.0", "version": "1.3.0",
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz",
@ -43,6 +50,14 @@
"integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
"dev": true "dev": true
}, },
"@monaco-editor/loader": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/@monaco-editor/loader/-/loader-1.4.0.tgz",
"integrity": "sha512-00ioBig0x642hytVspPl7DbQyaSWRaolYie/UFNjoTdvoKPzo6xrXLhTk9ixgIKcLH5b5vDOjVNiGyY+uDCUlg==",
"requires": {
"state-local": "^1.0.6"
}
},
"@nodelib/fs.scandir": { "@nodelib/fs.scandir": {
"version": "2.1.5", "version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@ -521,170 +536,171 @@
"integrity": "sha512-MP3oBer0X7ZeS9GJ0H6lmkn561UxiwOIY9TTkdxVY7lI9G6GVCKfgJaHaDcakwdKxBXA4T3ybeswH/WBIN/KTA==" "integrity": "sha512-MP3oBer0X7ZeS9GJ0H6lmkn561UxiwOIY9TTkdxVY7lI9G6GVCKfgJaHaDcakwdKxBXA4T3ybeswH/WBIN/KTA=="
}, },
"esbuild": { "esbuild": {
"version": "0.14.43", "version": "0.14.54",
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.43.tgz", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.54.tgz",
"integrity": "sha512-Uf94+kQmy/5jsFwKWiQB4hfo/RkM9Dh7b79p8yqd1tshULdr25G2szLz631NoH3s2ujnKEKVD16RmOxvCNKRFA==", "integrity": "sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA==",
"dev": true, "dev": true,
"requires": { "requires": {
"esbuild-android-64": "0.14.43", "@esbuild/linux-loong64": "0.14.54",
"esbuild-android-arm64": "0.14.43", "esbuild-android-64": "0.14.54",
"esbuild-darwin-64": "0.14.43", "esbuild-android-arm64": "0.14.54",
"esbuild-darwin-arm64": "0.14.43", "esbuild-darwin-64": "0.14.54",
"esbuild-freebsd-64": "0.14.43", "esbuild-darwin-arm64": "0.14.54",
"esbuild-freebsd-arm64": "0.14.43", "esbuild-freebsd-64": "0.14.54",
"esbuild-linux-32": "0.14.43", "esbuild-freebsd-arm64": "0.14.54",
"esbuild-linux-64": "0.14.43", "esbuild-linux-32": "0.14.54",
"esbuild-linux-arm": "0.14.43", "esbuild-linux-64": "0.14.54",
"esbuild-linux-arm64": "0.14.43", "esbuild-linux-arm": "0.14.54",
"esbuild-linux-mips64le": "0.14.43", "esbuild-linux-arm64": "0.14.54",
"esbuild-linux-ppc64le": "0.14.43", "esbuild-linux-mips64le": "0.14.54",
"esbuild-linux-riscv64": "0.14.43", "esbuild-linux-ppc64le": "0.14.54",
"esbuild-linux-s390x": "0.14.43", "esbuild-linux-riscv64": "0.14.54",
"esbuild-netbsd-64": "0.14.43", "esbuild-linux-s390x": "0.14.54",
"esbuild-openbsd-64": "0.14.43", "esbuild-netbsd-64": "0.14.54",
"esbuild-sunos-64": "0.14.43", "esbuild-openbsd-64": "0.14.54",
"esbuild-windows-32": "0.14.43", "esbuild-sunos-64": "0.14.54",
"esbuild-windows-64": "0.14.43", "esbuild-windows-32": "0.14.54",
"esbuild-windows-arm64": "0.14.43" "esbuild-windows-64": "0.14.54",
"esbuild-windows-arm64": "0.14.54"
} }
}, },
"esbuild-android-64": { "esbuild-android-64": {
"version": "0.14.43", "version": "0.14.54",
"resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.43.tgz", "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz",
"integrity": "sha512-kqFXAS72K6cNrB6RiM7YJ5lNvmWRDSlpi7ZuRZ1hu1S3w0zlwcoCxWAyM23LQUyZSs1PbjHgdbbfYAN8IGh6xg==", "integrity": "sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==",
"dev": true, "dev": true,
"optional": true "optional": true
}, },
"esbuild-android-arm64": { "esbuild-android-arm64": {
"version": "0.14.43", "version": "0.14.54",
"resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.43.tgz", "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz",
"integrity": "sha512-bKS2BBFh+7XZY9rpjiHGRNA7LvWYbZWP87pLehggTG7tTaCDvj8qQGOU/OZSjCSKDYbgY7Q+oDw8RlYQ2Jt2BA==", "integrity": "sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg==",
"dev": true, "dev": true,
"optional": true "optional": true
}, },
"esbuild-darwin-64": { "esbuild-darwin-64": {
"version": "0.14.43", "version": "0.14.54",
"resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.43.tgz", "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz",
"integrity": "sha512-/3PSilx011ttoieRGkSZ0XV8zjBf2C9enV4ScMMbCT4dpx0mFhMOpFnCHkOK0pWGB8LklykFyHrWk2z6DENVUg==", "integrity": "sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug==",
"dev": true, "dev": true,
"optional": true "optional": true
}, },
"esbuild-darwin-arm64": { "esbuild-darwin-arm64": {
"version": "0.14.43", "version": "0.14.54",
"resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.43.tgz", "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz",
"integrity": "sha512-1HyFUKs8DMCBOvw1Qxpr5Vv/ThNcVIFb5xgXWK3pyT40WPvgYIiRTwJCvNs4l8i5qWF8/CK5bQxJVDjQvtv0Yw==", "integrity": "sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw==",
"dev": true, "dev": true,
"optional": true "optional": true
}, },
"esbuild-freebsd-64": { "esbuild-freebsd-64": {
"version": "0.14.43", "version": "0.14.54",
"resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.43.tgz", "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz",
"integrity": "sha512-FNWc05TPHYgaXjbPZO5/rJKSBslfG6BeMSs8GhwnqAKP56eEhvmzwnIz1QcC9cRVyO+IKqWNfmHFkCa1WJTULA==", "integrity": "sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg==",
"dev": true, "dev": true,
"optional": true "optional": true
}, },
"esbuild-freebsd-arm64": { "esbuild-freebsd-arm64": {
"version": "0.14.43", "version": "0.14.54",
"resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.43.tgz", "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz",
"integrity": "sha512-amrYopclz3VohqisOPR6hA3GOWA3LZC1WDLnp21RhNmoERmJ/vLnOpnrG2P/Zao+/erKTCUqmrCIPVtj58DRoA==", "integrity": "sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q==",
"dev": true, "dev": true,
"optional": true "optional": true
}, },
"esbuild-linux-32": { "esbuild-linux-32": {
"version": "0.14.43", "version": "0.14.54",
"resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.43.tgz", "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz",
"integrity": "sha512-KoxoEra+9O3AKVvgDFvDkiuddCds6q71owSQEYwjtqRV7RwbPzKxJa6+uyzUulHcyGVq0g15K0oKG5CFBcvYDw==", "integrity": "sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw==",
"dev": true, "dev": true,
"optional": true "optional": true
}, },
"esbuild-linux-64": { "esbuild-linux-64": {
"version": "0.14.43", "version": "0.14.54",
"resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.43.tgz", "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz",
"integrity": "sha512-EwINwGMyiJMgBby5/SbMqKcUhS5AYAZ2CpEBzSowsJPNBJEdhkCTtEjk757TN/wxgbu3QklqDM6KghY660QCUw==", "integrity": "sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg==",
"dev": true, "dev": true,
"optional": true "optional": true
}, },
"esbuild-linux-arm": { "esbuild-linux-arm": {
"version": "0.14.43", "version": "0.14.54",
"resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.43.tgz", "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz",
"integrity": "sha512-e6YzQUoDxxtyamuF12eVzzRC7bbEFSZohJ6igQB9tBqnNmIQY3fI6Cns3z2wxtbZ3f2o6idkD2fQnlvs2902Dg==", "integrity": "sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw==",
"dev": true, "dev": true,
"optional": true "optional": true
}, },
"esbuild-linux-arm64": { "esbuild-linux-arm64": {
"version": "0.14.43", "version": "0.14.54",
"resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.43.tgz", "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz",
"integrity": "sha512-UlSpjMWllAc70zYbHxWuDS3FJytyuR/gHJYBr8BICcTNb/TSOYVBg6U7b3jZ3mILTrgzwJUHwhEwK18FZDouUQ==", "integrity": "sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig==",
"dev": true, "dev": true,
"optional": true "optional": true
}, },
"esbuild-linux-mips64le": { "esbuild-linux-mips64le": {
"version": "0.14.43", "version": "0.14.54",
"resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.43.tgz", "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz",
"integrity": "sha512-f+v8cInPEL1/SDP//CfSYzcDNgE4CY3xgDV81DWm3KAPWzhvxARrKxB1Pstf5mB56yAslJDxu7ryBUPX207EZA==", "integrity": "sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw==",
"dev": true, "dev": true,
"optional": true "optional": true
}, },
"esbuild-linux-ppc64le": { "esbuild-linux-ppc64le": {
"version": "0.14.43", "version": "0.14.54",
"resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.43.tgz", "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz",
"integrity": "sha512-5wZYMDGAL/K2pqkdIsW+I4IR41kyfHr/QshJcNpUfK3RjB3VQcPWOaZmc+74rm4ZjVirYrtz+jWw0SgxtxRanA==", "integrity": "sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ==",
"dev": true, "dev": true,
"optional": true "optional": true
}, },
"esbuild-linux-riscv64": { "esbuild-linux-riscv64": {
"version": "0.14.43", "version": "0.14.54",
"resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.43.tgz", "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz",
"integrity": "sha512-lYcAOUxp85hC7lSjycJUVSmj4/9oEfSyXjb/ua9bNl8afonaduuqtw7hvKMoKuYnVwOCDw4RSfKpcnIRDWq+Bw==", "integrity": "sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg==",
"dev": true, "dev": true,
"optional": true "optional": true
}, },
"esbuild-linux-s390x": { "esbuild-linux-s390x": {
"version": "0.14.43", "version": "0.14.54",
"resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.43.tgz", "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz",
"integrity": "sha512-27e43ZhHvhFE4nM7HqtUbMRu37I/4eNSUbb8FGZWszV+uLzMIsHDwLoBiJmw7G9N+hrehNPeQ4F5Ujad0DrUKQ==", "integrity": "sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA==",
"dev": true, "dev": true,
"optional": true "optional": true
}, },
"esbuild-netbsd-64": { "esbuild-netbsd-64": {
"version": "0.14.43", "version": "0.14.54",
"resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.43.tgz", "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz",
"integrity": "sha512-2mH4QF6hHBn5zzAfxEI/2eBC0mspVsZ6UVo821LpAJKMvLJPBk3XJO5xwg7paDqSqpl7p6IRrAenW999AEfJhQ==", "integrity": "sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w==",
"dev": true, "dev": true,
"optional": true "optional": true
}, },
"esbuild-openbsd-64": { "esbuild-openbsd-64": {
"version": "0.14.43", "version": "0.14.54",
"resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.43.tgz", "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz",
"integrity": "sha512-ZhQpiZjvqCqO8jKdGp9+8k9E/EHSA+zIWOg+grwZasI9RoblqJ1QiZqqi7jfd6ZrrG1UFBNGe4m0NFxCFbMVbg==", "integrity": "sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw==",
"dev": true, "dev": true,
"optional": true "optional": true
}, },
"esbuild-sunos-64": { "esbuild-sunos-64": {
"version": "0.14.43", "version": "0.14.54",
"resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.43.tgz", "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz",
"integrity": "sha512-DgxSi9DaHReL9gYuul2rrQCAapgnCJkh3LSHPKsY26zytYppG0HgkgVF80zjIlvEsUbGBP/GHQzBtrezj/Zq1Q==", "integrity": "sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw==",
"dev": true, "dev": true,
"optional": true "optional": true
}, },
"esbuild-windows-32": { "esbuild-windows-32": {
"version": "0.14.43", "version": "0.14.54",
"resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.43.tgz", "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz",
"integrity": "sha512-Ih3+2O5oExiqm0mY6YYE5dR0o8+AspccQ3vIAtRodwFvhuyGLjb0Hbmzun/F3Lw19nuhPMu3sW2fqIJ5xBxByw==", "integrity": "sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w==",
"dev": true, "dev": true,
"optional": true "optional": true
}, },
"esbuild-windows-64": { "esbuild-windows-64": {
"version": "0.14.43", "version": "0.14.54",
"resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.43.tgz", "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz",
"integrity": "sha512-8NsuNfI8xwFuJbrCuI+aBqNTYkrWErejFO5aYM+yHqyHuL8mmepLS9EPzAzk8rvfaJrhN0+RvKWAcymViHOKEw==", "integrity": "sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ==",
"dev": true, "dev": true,
"optional": true "optional": true
}, },
"esbuild-windows-arm64": { "esbuild-windows-arm64": {
"version": "0.14.43", "version": "0.14.54",
"resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.43.tgz", "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz",
"integrity": "sha512-7ZlD7bo++kVRblJEoG+cepljkfP8bfuTPz5fIXzptwnPaFwGS6ahvfoYzY7WCf5v/1nX2X02HDraVItTgbHnKw==", "integrity": "sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg==",
"dev": true, "dev": true,
"optional": true "optional": true
}, },
@ -938,9 +954,9 @@
"dev": true "dev": true
}, },
"follow-redirects": { "follow-redirects": {
"version": "1.15.1", "version": "1.15.5",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz",
"integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==" "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw=="
}, },
"form-data": { "form-data": {
"version": "4.0.0", "version": "4.0.0",
@ -1237,9 +1253,9 @@
"dev": true "dev": true
}, },
"nanoid": { "nanoid": {
"version": "3.3.4", "version": "3.3.7",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
"integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g=="
}, },
"natural-compare": { "natural-compare": {
"version": "1.4.0", "version": "1.4.0",
@ -1356,11 +1372,11 @@
} }
}, },
"postcss": { "postcss": {
"version": "8.4.14", "version": "8.4.35",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz",
"integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==",
"requires": { "requires": {
"nanoid": "^3.3.4", "nanoid": "^3.3.7",
"picocolors": "^1.0.0", "picocolors": "^1.0.0",
"source-map-js": "^1.0.2" "source-map-js": "^1.0.2"
} }
@ -1505,9 +1521,9 @@
} }
}, },
"rollup": { "rollup": {
"version": "2.75.6", "version": "2.77.3",
"resolved": "https://registry.npmjs.org/rollup/-/rollup-2.75.6.tgz", "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.77.3.tgz",
"integrity": "sha512-OEf0TgpC9vU6WGROJIk1JA3LR5vk/yvqlzxqdrE2CzzXnqKXNzbAwlWUXis8RS3ZPe7LAq+YUxsRa0l3r27MLA==", "integrity": "sha512-/qxNTG7FbmefJWoeeYJFbHehJ2HNWnjkAFRKzWN/45eNBBF/r8lo992CwcJXEzyVxs5FmfId+vTSTQDb+bxA+g==",
"dev": true, "dev": true,
"requires": { "requires": {
"fsevents": "~2.3.2" "fsevents": "~2.3.2"
@ -1533,9 +1549,9 @@
} }
}, },
"semver": { "semver": {
"version": "7.3.7", "version": "7.6.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
"integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
"dev": true, "dev": true,
"requires": { "requires": {
"lru-cache": "^6.0.0" "lru-cache": "^6.0.0"
@ -1581,6 +1597,11 @@
"nearley": "^2.20.1" "nearley": "^2.20.1"
} }
}, },
"state-local": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/state-local/-/state-local-1.0.7.tgz",
"integrity": "sha512-HTEHMNieakEnoe33shBYcZ7NX83ACUjCu8c40iOGEZsngj9zRnkqS9j1pqQPXwobB0ZcVTk27REb7COQ0UR59w=="
},
"strip-ansi": { "strip-ansi": {
"version": "6.0.1", "version": "6.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
@ -1688,16 +1709,16 @@
"dev": true "dev": true
}, },
"vite": { "vite": {
"version": "2.9.10", "version": "2.9.17",
"resolved": "https://registry.npmjs.org/vite/-/vite-2.9.10.tgz", "resolved": "https://registry.npmjs.org/vite/-/vite-2.9.17.tgz",
"integrity": "sha512-TwZRuSMYjpTurLqXspct+HZE7ONiW9d+wSWgvADGxhDPPyoIcNywY+RX4ng+QpK30DCa1l/oZgi2PLZDibhzbQ==", "integrity": "sha512-XxcRzra6d7xrKXH66jZUgb+srThoPu+TLJc06GifUyKq9JmjHkc1Numc8ra0h56rju2jfVWw3B3fs5l3OFMvUw==",
"dev": true, "dev": true,
"requires": { "requires": {
"esbuild": "^0.14.27", "esbuild": "^0.14.27",
"fsevents": "~2.3.2", "fsevents": "~2.3.2",
"postcss": "^8.4.13", "postcss": "^8.4.13",
"resolve": "^1.22.0", "resolve": "^1.22.0",
"rollup": "^2.59.0" "rollup": ">=2.59.0 <2.78.0"
} }
}, },
"vue": { "vue": {
@ -1761,9 +1782,9 @@
} }
}, },
"word-wrap": { "word-wrap": {
"version": "1.2.3", "version": "1.2.5",
"resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
"integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
"dev": true "dev": true
}, },
"wrappy": { "wrappy": {

@ -8,12 +8,13 @@
"preview": "vite preview --port 3000" "preview": "vite preview --port 3000"
}, },
"dependencies": { "dependencies": {
"@monaco-editor/loader": "^1.4.0",
"autoprefixer": "^10", "autoprefixer": "^10",
"axios": "^0.27.2", "axios": "^0.27.2",
"cronstrue": "^2.47.0", "cronstrue": "^2.47.0",
"mitt": "^3.0.0", "mitt": "^3.0.0",
"pinia": "^2.0.14", "pinia": "^2.0.14",
"postcss": "^8", "postcss": "^8.4.35",
"sql-formatter": "^15.0.2", "sql-formatter": "^15.0.2",
"tailwindcss": "^3", "tailwindcss": "^3",
"vue": "^3.2.36", "vue": "^3.2.36",
@ -29,7 +30,7 @@
"eslint-plugin-vue": "^8.2.0", "eslint-plugin-vue": "^8.2.0",
"prettier": "^2.5.1", "prettier": "^2.5.1",
"sass": "^1.52.3", "sass": "^1.52.3",
"vite": "^2.9.9", "vite": "^2.9.17",
"vue-cli-plugin-tailwind": "~3.0.0" "vue-cli-plugin-tailwind": "~3.0.0"
} }
} }

@ -39,3 +39,6 @@ textarea[id=data] {
textarea[id=result] { textarea[id=result] {
height: 350px; height: 350px;
} }
div[id=result] {
height: 350px;
}

@ -0,0 +1,60 @@
<template>
<div :id="name"></div>
</template>
<script>
import loader from '@monaco-editor/loader';
let monacoResultInst = null;
export default {
name: "monacoEditor",
props: {
name: {
type: String,
required: true,
},
language: {
type: String,
default: 'text',
},
value: {
type: String,
default: '',
},
readonly: {
type: Boolean,
default: true,
},
},
mounted() {
loader.init().then((monaco) => {
monacoResultInst = monaco;
monaco.editor.create(document.querySelector(`#${this.name}`), {
value: '',
language: this.language,
readOnly: this.readonly,
});
});
},
watch: {
value: {
// the callback will be called immediately after the start of the observation
immediate: true,
deep: true,
async handler(value, oldValue) {
while (!monacoResultInst) {
await new Promise(r => setTimeout(r, 10));
}
monacoResultInst.editor.getModels()[0].setValue(value.toString());
}
}
}
};
</script>
<style scoped>
</style>

@ -4,15 +4,15 @@
<div class="input-group"> <div class="input-group">
<label for="data">Data</label> <label for="data">Data</label>
<textarea id="data" v-model="toolData.data"></textarea> <textarea id="data" v-model="toolData.data" v-on:keyup="result"></textarea>
</div> </div>
<div class="input-group"> <div class="input-group">
<label>Mode</label> <label>Mode</label>
<div> <div>
<input id="keyboard_mode_en_ru" value="en-ru" name="keyboard_mode" v-model="toolData.keyboardMode" type="radio"> <label for="keyboard_mode_en_ru">en -> ru</label><br> <input id="keyboard_mode_en_ru" value="en-ru" name="keyboard_mode" v-model="toolData.keyboardMode" v-on:change="result" type="radio"> <label for="keyboard_mode_en_ru">en -> ru</label><br>
<input id="keyboard_mode_ru_en" value="ru-en" name="keyboard_mode" v-model="toolData.keyboardMode" type="radio"> <label for="keyboard_mode_ru_en">ru -> en</label> <input id="keyboard_mode_ru_en" value="ru-en" name="keyboard_mode" v-model="toolData.keyboardMode" v-on:change="result" type="radio"> <label for="keyboard_mode_ru_en">ru -> en</label>
</div> </div>
</div> </div>
@ -20,15 +20,18 @@
<div class="input-group"> <div class="input-group">
<label for="result">Result</label> <label for="result">Result</label>
<textarea id="result" v-model="toolResult"></textarea> <MonacoEditor name="result" language="text" :value="toolResult"></MonacoEditor>
</div> </div>
</template> </template>
<script> <script>
import { unproxy } from "@/utils/unproxy"; import { unproxy } from "@/utils/unproxy";
import MonacoEditor from "@/components/MonacoEditor.vue";
export default { export default {
components: {
MonacoEditor
},
data() { data() {
return { return {
toolData: { toolData: {
@ -39,10 +42,11 @@ export default {
'en-ru': '`~!@#$%^&qwertyuiop[]asdfghjkl;\'zxcvbnm,./QWERTYUIOP{}ASDFGHJKL:"ZXCVBNM<>?', 'en-ru': '`~!@#$%^&qwertyuiop[]asdfghjkl;\'zxcvbnm,./QWERTYUIOP{}ASDFGHJKL:"ZXCVBNM<>?',
'ru-en': 'ёЁ!"№;%:?йцукенгшщзхъфывапролджэячсмитьбю.ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ,', 'ru-en': 'ёЁ!"№;%:?йцукенгшщзхъфывапролджэячсмитьбю.ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ,',
}, },
toolResult: '',
}; };
}, },
computed: { methods: {
toolResult() { result() {
let data = unproxy(this.toolData.data).split(''); let data = unproxy(this.toolData.data).split('');
const dict = this.dictionary[this.toolData.keyboardMode]; const dict = this.dictionary[this.toolData.keyboardMode];
@ -55,7 +59,7 @@ export default {
data[i] = unproxy(dictOpposite[dictPos]); data[i] = unproxy(dictOpposite[dictPos]);
} }
return data.join(''); this.toolResult = data.join('');
}, },
}, },
} }

@ -11,12 +11,17 @@
<div class="input-group"> <div class="input-group">
<label for="result">Result</label> <label for="result">Result</label>
<textarea id="result" v-model="toolResult"></textarea> <MonacoEditor name="result" language="json" :value="toolResult"></MonacoEditor>
</div> </div>
</template> </template>
<script> <script>
import MonacoEditor from "@/components/MonacoEditor.vue";
export default { export default {
components: {
MonacoEditor
},
data() { data() {
return { return {
toolData: { toolData: {
@ -26,22 +31,19 @@ export default {
toolResult: '', toolResult: '',
}; };
}, },
mounted() {
this.result();
},
methods: { methods: {
result() { result() {
if (!this.toolData.data.length) { if (!this.toolData.data.length) {
return ''; this.toolResult = '';
} } else {
try {
try { this.toolResult = JSON.stringify(JSON.parse(this.toolData.data), null, 4);
this.toolResult = JSON.stringify(JSON.parse(this.toolData.data), null, 4); } catch (e) {
} catch (e) { this.toolResult = 'invalid syntax';
this.toolResult = 'invalid syntax'; }
} }
} }
} },
} }
</script> </script>

@ -11,14 +11,18 @@
<div class="input-group"> <div class="input-group">
<label for="result">Result</label> <label for="result">Result</label>
<textarea id="result" v-model="toolResult"></textarea> <MonacoEditor name="result" language="sql" :value="toolResult"></MonacoEditor>
</div> </div>
</template> </template>
<script> <script>
import { format } from 'sql-formatter'; import { format } from 'sql-formatter';
import MonacoEditor from "@/components/MonacoEditor.vue";
export default { export default {
components: {
MonacoEditor
},
data() { data() {
return { return {
toolData: { toolData: {
@ -28,9 +32,6 @@ export default {
toolResult: '', toolResult: '',
}; };
}, },
mounted() {
this.result();
},
methods: { methods: {
result() { result() {
try { try {

@ -4,43 +4,45 @@
<div class="input-group"> <div class="input-group">
<label for="field_name">Field name</label> <label for="field_name">Field name</label>
<input id="field_name" v-model="toolData.fieldName" placeholder="D.ID" type="text"> <input id="field_name" v-model="toolData.fieldName" v-on:keyup="result" placeholder="D.ID" type="text">
</div> </div>
<div class="input-group"> <div class="input-group">
<label for="data">Data</label> <label for="data">Data</label>
<textarea id="data" v-model="toolData.data"></textarea> <textarea id="data" v-model="toolData.data" v-on:keyup="result"></textarea>
</div> </div>
<div class="input-group"> <div class="input-group">
<label for="data_delimiter">Delimiter</label> <label for="data_delimiter">Delimiter</label>
<input id="data_delimiter" v-model="toolData.dataDelimiter" placeholder="," type="text"> <input id="data_delimiter" v-model="toolData.dataDelimiter" v-on:keyup="result" placeholder="," type="text">
</div> </div>
<div class="input-group"> <div class="input-group">
<label>Wrap in quotes</label> <label>Wrap in quotes</label>
<div> <div>
<input id="wrap_in_quotes_no" value="" name="wrap_in_quotes" v-model="toolData.wrapInQuotes" type="radio"> <label for="wrap_in_quotes_no">No</label><br> <input id="wrap_in_quotes_no" value="" name="wrap_in_quotes" v-model="toolData.wrapInQuotes" v-on:change="result" type="radio"> <label for="wrap_in_quotes_no">No</label><br>
<input id="wrap_in_quotes_single" value="single" name="wrap_in_quotes" v-model="toolData.wrapInQuotes" type="radio"> <label for="wrap_in_quotes_single">Single</label><br> <input id="wrap_in_quotes_single" value="single" name="wrap_in_quotes" v-model="toolData.wrapInQuotes" v-on:change="result" type="radio"> <label for="wrap_in_quotes_single">Single</label><br>
<input id="wrap_in_quotes_double" value="double" name="wrap_in_quotes" v-model="toolData.wrapInQuotes" type="radio"> <label for="wrap_in_quotes_double">Double</label> <input id="wrap_in_quotes_double" value="double" name="wrap_in_quotes" v-model="toolData.wrapInQuotes" v-on:change="result" type="radio"> <label for="wrap_in_quotes_double">Double</label>
</div> </div>
</div> </div>
<div class="input-group"> <div class="input-group">
<label for="chunk_by">Chunk by</label> <label for="chunk_by">Chunk by</label>
<input id="chunk_by" v-model="toolData.chunkBy" placeholder="900" min="1" type="number"> <input id="chunk_by" v-model="toolData.chunkBy" v-on:keyup="result" placeholder="900" min="1" type="number">
</div> </div>
<hr class="mt-5 mb-5"> <hr class="mt-5 mb-5">
<div class="input-group"> <div class="input-group">
<label for="result">Result</label> <label for="result">Result</label>
<textarea id="result" v-model="toolResult"></textarea> <MonacoEditor name="result" language="sql" :value="toolResult"></MonacoEditor>
</div> </div>
</template> </template>
<script> <script>
import MonacoEditor from "@/components/MonacoEditor.vue";
function arrayChunk(arr, chunkSize) { function arrayChunk(arr, chunkSize) {
const res = []; const res = [];
while (arr.length > 0) { while (arr.length > 0) {
@ -51,6 +53,9 @@ function arrayChunk(arr, chunkSize) {
} }
export default { export default {
components: {
MonacoEditor
},
data() { data() {
return { return {
toolData: { toolData: {
@ -60,10 +65,11 @@ export default {
wrapInQuotes: '', wrapInQuotes: '',
chunkBy: 900, chunkBy: 900,
}, },
toolResult: '',
}; };
}, },
computed: { methods: {
toolResult() { result() {
let data = this.toolData.data let data = this.toolData.data
.split(this.toolData.dataDelimiter ? this.toolData.dataDelimiter : '\n'); .split(this.toolData.dataDelimiter ? this.toolData.dataDelimiter : '\n');
@ -91,7 +97,7 @@ export default {
data[i] = '(' + chunk.join(',') + ')'; data[i] = '(' + chunk.join(',') + ')';
} }
return '(' + this.toolData.fieldName + ' IN ' + data.join(' OR ' + this.toolData.fieldName + ' IN ') + ')'; this.toolResult = '(' + this.toolData.fieldName + ' IN ' + data.join(' OR ' + this.toolData.fieldName + ' IN ') + ')';
}, },
}, },
} }

@ -4,17 +4,17 @@
<div class="input-group"> <div class="input-group">
<label for="data">Data</label> <label for="data">Data</label>
<textarea id="data" v-model="toolData.data"></textarea> <textarea id="data" v-model="toolData.data" v-on:keyup="result"></textarea>
</div> </div>
<div class="input-group"> <div class="input-group">
<label for="data_delimiter">Delimiter</label> <label for="data_delimiter">Delimiter</label>
<input id="data_delimiter" v-model="toolData.dataDelimiter" placeholder="," type="text"> <input id="data_delimiter" v-model="toolData.dataDelimiter" v-on:keyup="result" placeholder="," type="text">
<div> <div>
<input id="count_mode_characters" value="characters" name="count_mode" v-model="toolData.countMode" :disabled="toolData.dataDelimiter.length" type="radio"> <label for="count_mode_characters">characters</label><br> <input id="count_mode_characters" value="characters" name="count_mode" v-model="toolData.countMode" v-on:change="result" :disabled="toolData.dataDelimiter.length" type="radio"> <label for="count_mode_characters">characters</label><br>
<input id="count_mode_words" value="words" name="count_mode" v-model="toolData.countMode" :disabled="toolData.dataDelimiter.length" type="radio"> <label for="count_mode_words">words</label><br> <input id="count_mode_words" value="words" name="count_mode" v-model="toolData.countMode" v-on:change="result" :disabled="toolData.dataDelimiter.length" type="radio"> <label for="count_mode_words">words</label><br>
<input id="count_mode_lines" value="lines" name="count_mode" v-model="toolData.countMode" :disabled="toolData.dataDelimiter.length" type="radio"> <label for="count_mode_lines">lines</label> <input id="count_mode_lines" value="lines" name="count_mode" v-model="toolData.countMode" v-on:change="result" :disabled="toolData.dataDelimiter.length" type="radio"> <label for="count_mode_lines">lines</label>
</div> </div>
</div> </div>
@ -22,12 +22,17 @@
<div class="input-group"> <div class="input-group">
<label for="result">Result</label> <label for="result">Result</label>
<textarea id="result" v-model="toolResult"></textarea> <MonacoEditor name="result" language="text" :value="toolResult"></MonacoEditor>
</div> </div>
</template> </template>
<script> <script>
import MonacoEditor from "@/components/MonacoEditor.vue";
export default { export default {
components: {
MonacoEditor
},
data() { data() {
return { return {
toolData: { toolData: {
@ -35,25 +40,27 @@ export default {
dataDelimiter: '', dataDelimiter: '',
countMode: 'characters', countMode: 'characters',
}, },
toolResult: '',
}; };
}, },
computed: { methods: {
toolResult() { result() {
if (!this.toolData.data.length) { if (!this.toolData.data.length) {
return 0; this.toolResult = 0;
} }else if (this.toolData.dataDelimiter.length) {
this.toolResult = this.toolData.data.split(this.toolData.dataDelimiter).length;
if (this.toolData.dataDelimiter.length) { } else {
return this.toolData.data.split(this.toolData.dataDelimiter).length; switch (this.toolData.countMode) {
} case 'characters':
this.toolResult = this.toolData.data.length;
switch (this.toolData.countMode) { break;
case 'characters': case 'words':
return this.toolData.data.length; this.toolResult = this.toolData.data.trim().split(/\s+/).length;
case 'words': break;
return this.toolData.data.trim().split(/\s+/).length; case 'lines':
case 'lines': this.toolResult = this.toolData.data.split('\n').length;
return this.toolData.data.split('\n').length; break;
}
} }
}, },
}, },

@ -4,33 +4,39 @@
<div class="input-group"> <div class="input-group">
<label for="data">Data</label> <label for="data">Data</label>
<textarea id="data" v-model="toolData.data"></textarea> <textarea id="data" v-model="toolData.data" v-on:keyup="result"></textarea>
</div> </div>
<hr class="mt-5 mb-5"> <hr class="mt-5 mb-5">
<div class="input-group"> <div class="input-group">
<label for="result">Result</label> <label for="result">Result</label>
<textarea id="result" v-model="toolResult"></textarea> <MonacoEditor name="result" language="text" :value="toolResult"></MonacoEditor>
</div> </div>
</template> </template>
<script> <script>
import MonacoEditor from "@/components/MonacoEditor.vue";
function arrayUnique(value, index, array) { function arrayUnique(value, index, array) {
return array.indexOf(value) === index; return array.indexOf(value) === index;
} }
export default { export default {
components: {
MonacoEditor
},
data() { data() {
return { return {
toolData: { toolData: {
data: '', data: '',
}, },
toolResult: '',
}; };
}, },
computed: { methods: {
toolResult() { result() {
return this.toolData.data.split('\n').filter(arrayUnique).join('\n'); this.toolResult = this.toolData.data.split('\n').filter(arrayUnique).join('\n');
}, },
}, },
} }

@ -4,19 +4,19 @@
<div class="input-group"> <div class="input-group">
<label for="data">Data</label> <label for="data">Data</label>
<textarea id="data" v-model="toolData.data"></textarea> <textarea id="data" v-model="toolData.data" v-on:keyup="result"></textarea>
</div> </div>
<div class="input-group"> <div class="input-group">
<label>Mode</label> <label>Mode</label>
<div> <div>
<input id="sort_mode_alpha" value="alpha" name="sort_mode" v-model="toolData.sortMode" type="radio"> <label for="sort_mode_alpha">alphabetically</label><br> <input id="sort_mode_alpha" value="alpha" name="sort_mode" v-model="toolData.sortMode" v-on:change="result" type="radio"> <label for="sort_mode_alpha">alphabetically</label><br>
<input id="sort_mode_numerically" value="numerically" name="sort_mode" v-model="toolData.sortMode" type="radio"> <label for="sort_mode_numerically">numerically</label><br> <input id="sort_mode_numerically" value="numerically" name="sort_mode" v-model="toolData.sortMode" v-on:change="result" type="radio"> <label for="sort_mode_numerically">numerically</label><br>
<input id="sort_mode_by_length" value="by_length" name="sort_mode" v-model="toolData.sortMode" type="radio"> <label for="sort_mode_by_length">by length</label><br> <input id="sort_mode_by_length" value="by_length" name="sort_mode" v-model="toolData.sortMode" v-on:change="result" type="radio"> <label for="sort_mode_by_length">by length</label><br>
<input id="sort_mode_random" value="random" name="sort_mode" v-model="toolData.sortMode" type="radio"> <label for="sort_mode_random">random</label><br> <input id="sort_mode_random" value="random" name="sort_mode" v-model="toolData.sortMode" v-on:change="result" type="radio"> <label for="sort_mode_random">random</label><br>
<br> <br>
<input id="sort_mode_reverse" value="random" name="sort_mode_reverse" v-model="toolData.sortModeReverse" type="checkbox"> <label for="sort_mode_reverse">reverse</label> <input id="sort_mode_reverse" value="random" name="sort_mode_reverse" v-model="toolData.sortModeReverse" v-on:change="result" type="checkbox"> <label for="sort_mode_reverse">reverse</label>
</div> </div>
</div> </div>
@ -24,12 +24,17 @@
<div class="input-group"> <div class="input-group">
<label for="result">Result</label> <label for="result">Result</label>
<textarea id="result" v-model="toolResult"></textarea> <MonacoEditor name="result" language="text" :value="toolResult"></MonacoEditor>
</div> </div>
</template> </template>
<script> <script>
import MonacoEditor from "@/components/MonacoEditor.vue";
export default { export default {
components: {
MonacoEditor
},
data() { data() {
return { return {
toolData: { toolData: {
@ -37,10 +42,11 @@ export default {
sortMode: 'alpha', sortMode: 'alpha',
sortModeReverse: false, sortModeReverse: false,
}, },
toolResult: '',
}; };
}, },
computed: { methods: {
toolResult() { result() {
let result = [] let result = []
const data = this.toolData.data.split('\n'); const data = this.toolData.data.split('\n');
@ -73,7 +79,7 @@ export default {
result = result.reverse(); result = result.reverse();
} }
return result.join('\n'); this.toolResult = result.join('\n');
}, },
}, },
} }

@ -4,15 +4,15 @@
<div class="input-group"> <div class="input-group">
<label for="data">Data</label> <label for="data">Data</label>
<textarea id="data" v-model="toolData.data"></textarea> <textarea id="data" v-model="toolData.data" v-on:keyup="result"></textarea>
</div> </div>
<div class="input-group"> <div class="input-group">
<label>Mode</label> <label>Mode</label>
<div> <div>
<input id="case_mode_lower" value="lower" name="case_mode" v-model="toolData.caseMode" type="radio"> <label for="case_mode_lower">to lower</label><br> <input id="case_mode_lower" value="lower" name="case_mode" v-model="toolData.caseMode" v-on:change="result" type="radio"> <label for="case_mode_lower">to lower</label><br>
<input id="case_mode_upper" value="upper" name="case_mode" v-model="toolData.caseMode" type="radio"> <label for="case_mode_upper">to upper</label> <input id="case_mode_upper" value="upper" name="case_mode" v-model="toolData.caseMode" v-on:change="result" type="radio"> <label for="case_mode_upper">to upper</label>
</div> </div>
</div> </div>
@ -20,27 +20,35 @@
<div class="input-group"> <div class="input-group">
<label for="result">Result</label> <label for="result">Result</label>
<textarea id="result" v-model="toolResult"></textarea> <MonacoEditor name="result" language="text" :value="toolResult"></MonacoEditor>
</div> </div>
</template> </template>
<script> <script>
import MonacoEditor from "@/components/MonacoEditor.vue";
export default { export default {
components: {
MonacoEditor
},
data() { data() {
return { return {
toolData: { toolData: {
data: '', data: '',
caseMode: 'upper', caseMode: 'upper',
}, },
toolResult: '',
}; };
}, },
computed: { methods: {
toolResult() { result() {
switch (this.toolData.caseMode) { switch (this.toolData.caseMode) {
case 'lower': case 'lower':
return this.toolData.data.toLocaleLowerCase(); this.toolResult = this.toolData.data.toLocaleLowerCase();
break;
case 'upper': case 'upper':
return this.toolData.data.toLocaleUpperCase(); this.toolResult = this.toolData.data.toLocaleUpperCase();
break;
} }
}, },
}, },

@ -20,15 +20,19 @@
<div class="input-group"> <div class="input-group">
<label for="result">Result</label> <label for="result">Result</label>
<textarea id="result" v-model="toolResult"></textarea> <MonacoEditor name="result" language="php" :value="toolResult"></MonacoEditor>
</div> </div>
</template> </template>
<script> <script>
import axios from 'axios' import axios from 'axios'
import { config } from '../../config'; import { config } from '../../config';
import MonacoEditor from "@/components/MonacoEditor.vue";
export default { export default {
components: {
MonacoEditor
},
data() { data() {
return { return {
toolData: { toolData: {

@ -4,15 +4,15 @@
<div class="input-group"> <div class="input-group">
<label for="data">Data</label> <label for="data">Data</label>
<textarea id="data" v-model="toolData.data"></textarea> <textarea id="data" v-model="toolData.data" v-on:keyup="result"></textarea>
</div> </div>
<div class="input-group"> <div class="input-group">
<label>Mode</label> <label>Mode</label>
<div> <div>
<input id="encode_mode_encode" value="encode" name="encode_mode" v-model="toolData.encodeMode" type="radio"> <label for="encode_mode_encode">endode</label><br> <input id="encode_mode_encode" value="encode" name="encode_mode" v-model="toolData.encodeMode" v-on:change="result" type="radio"> <label for="encode_mode_encode">encode</label><br>
<input id="encode_mode_decode" value="decode" name="encode_mode" v-model="toolData.encodeMode" type="radio"> <label for="encode_mode_decode">decode</label> <input id="encode_mode_decode" value="decode" name="encode_mode" v-model="toolData.encodeMode" v-on:change="result" type="radio"> <label for="encode_mode_decode">decode</label>
</div> </div>
</div> </div>
@ -20,27 +20,35 @@
<div class="input-group"> <div class="input-group">
<label for="result">Result</label> <label for="result">Result</label>
<textarea id="result" v-model="toolResult"></textarea> <MonacoEditor name="result" language="text" :value="toolResult"></MonacoEditor>
</div> </div>
</template> </template>
<script> <script>
import MonacoEditor from "@/components/MonacoEditor.vue";
export default { export default {
components: {
MonacoEditor
},
data() { data() {
return { return {
toolData: { toolData: {
data: '', data: '',
encodeMode: 'decode', encodeMode: 'decode',
}, },
toolResult: '',
}; };
}, },
computed: { methods: {
toolResult() { result() {
switch (this.toolData.encodeMode) { switch (this.toolData.encodeMode) {
case 'encode': case 'encode':
return this.toolData.data.split('\n').map(encodeURIComponent).join('\n'); this.toolResult = this.toolData.data.split('\n').map(encodeURIComponent).join('\n');
break;
case 'decode': case 'decode':
return this.toolData.data.split('\n').map(decodeURIComponent).join('\n'); this.toolResult = this.toolData.data.split('\n').map(decodeURIComponent).join('\n');
break;
} }
}, },
}, },