Compare commits
46 Commits
Author | SHA1 | Date | |
---|---|---|---|
5efcad4d3f | |||
0a872e7023 | |||
0e425a9c6d | |||
434711a360 | |||
854472c7a3 | |||
9a7cd90d5c | |||
026400d242 | |||
4bd8cbbf6c | |||
1382bc9300 | |||
ae103e5477 | |||
6b0b8b19d7 | |||
475397ca34 | |||
7a62131cc7 | |||
c7663be338 | |||
496490b14a | |||
|
672573d8c2 | ||
d923453919 | |||
0435279604 | |||
79cef61fea | |||
dec334737f | |||
84c3692e95 | |||
5dc0b0bea4 | |||
19d16e46bb | |||
3baf6fa173 | |||
29e2d92b5b | |||
bebba64d06 | |||
9dfe7cca22 | |||
35ef070725 | |||
370ad6a536 | |||
5822b3df43 | |||
5208ec171b | |||
6e332da425 | |||
bf3367b41d | |||
ecfb732c26 | |||
fd4f032a6f | |||
1b09909126 | |||
04cd806954 | |||
773cb36ca1 | |||
ccacd3e2c3 | |||
15948b30c9 | |||
3dcb5d4f14 | |||
|
64d93d7c40 | ||
|
2d85295093 | ||
|
cd58e2d8ca | ||
d87495822e | |||
|
8720bcdad6 |
44
.eslintrc
@@ -9,22 +9,25 @@
|
|||||||
"plugin:vue/recommended"
|
"plugin:vue/recommended"
|
||||||
],
|
],
|
||||||
"parserOptions": {
|
"parserOptions": {
|
||||||
"parser": "babel-eslint",
|
"parser": "@babel/eslint-parser",
|
||||||
"ecmaVersion": 9,
|
"ecmaVersion": 9,
|
||||||
"sourceType": "module"
|
"sourceType": "module",
|
||||||
|
"requireConfigFile": false
|
||||||
},
|
},
|
||||||
"rules": {
|
"rules": {
|
||||||
"indent": [
|
"indent": [
|
||||||
"error",
|
"error",
|
||||||
3,
|
3,
|
||||||
{ "SwitchCase": 1 }
|
{
|
||||||
|
"SwitchCase": 1
|
||||||
|
}
|
||||||
],
|
],
|
||||||
"linebreak-style": [
|
"linebreak-style": [
|
||||||
"error",
|
"error",
|
||||||
"unix"
|
"unix"
|
||||||
],
|
],
|
||||||
"brace-style": [
|
"brace-style": [
|
||||||
"error",
|
"error",
|
||||||
"stroustrup"
|
"stroustrup"
|
||||||
],
|
],
|
||||||
"quotes": [
|
"quotes": [
|
||||||
@@ -36,7 +39,7 @@
|
|||||||
"always"
|
"always"
|
||||||
],
|
],
|
||||||
"curly": [
|
"curly": [
|
||||||
"error",
|
"error",
|
||||||
"multi-or-nest"
|
"multi-or-nest"
|
||||||
],
|
],
|
||||||
"no-console": "off",
|
"no-console": "off",
|
||||||
@@ -44,18 +47,25 @@
|
|||||||
"vue/no-side-effects-in-computed-properties": "off",
|
"vue/no-side-effects-in-computed-properties": "off",
|
||||||
"vue/require-default-prop": "off",
|
"vue/require-default-prop": "off",
|
||||||
"vue/no-v-html": "off",
|
"vue/no-v-html": "off",
|
||||||
"vue/html-indent": ["error", 3, {
|
"vue/html-indent": [
|
||||||
"attribute": 1,
|
"error",
|
||||||
"baseIndent": 1,
|
3,
|
||||||
"closeBracket": 0,
|
{
|
||||||
"ignores": []
|
"attribute": 1,
|
||||||
}],
|
"baseIndent": 1,
|
||||||
"vue/max-attributes-per-line": ["error", {
|
"closeBracket": 0,
|
||||||
"singleline": 2,
|
"ignores": []
|
||||||
"multiline": {
|
|
||||||
"max": 1,
|
|
||||||
"allowFirstLine": false
|
|
||||||
}
|
}
|
||||||
}]
|
],
|
||||||
|
"vue/max-attributes-per-line": [
|
||||||
|
"error",
|
||||||
|
{
|
||||||
|
"singleline": 2,
|
||||||
|
"multiline": {
|
||||||
|
"max": 1,
|
||||||
|
"allowFirstLine": false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
11
.github/ISSUE_TEMPLATE/bug_report.md
vendored
@@ -12,6 +12,7 @@ A clear and concise description of what the bug is.
|
|||||||
|
|
||||||
**To Reproduce**
|
**To Reproduce**
|
||||||
Steps to reproduce the behavior:
|
Steps to reproduce the behavior:
|
||||||
|
|
||||||
1. Go to '...'
|
1. Go to '...'
|
||||||
2. Click on '....'
|
2. Click on '....'
|
||||||
3. Scroll down to '....'
|
3. Scroll down to '....'
|
||||||
@@ -23,9 +24,15 @@ A clear and concise description of what you expected to happen.
|
|||||||
**Screenshots**
|
**Screenshots**
|
||||||
If applicable, add screenshots to help explain your problem.
|
If applicable, add screenshots to help explain your problem.
|
||||||
|
|
||||||
|
**Application (please complete the following information):**
|
||||||
|
|
||||||
|
- Version [e.g. 0.14.0]
|
||||||
|
- Distribution: [e.g. exe, Linux Store, AppImage, dmg]
|
||||||
|
|
||||||
**Desktop (please complete the following information):**
|
**Desktop (please complete the following information):**
|
||||||
- OS: [e.g. iOS]
|
|
||||||
- Version [e.g. 22]
|
- OS: [e.g. iOS]
|
||||||
|
- Version [e.g. 22]
|
||||||
|
|
||||||
**Additional context**
|
**Additional context**
|
||||||
Add any other context about the problem here.
|
Add any other context about the problem here.
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
name: Build/release
|
name: Build/release [linux]
|
||||||
|
|
||||||
on: push
|
on: push
|
||||||
|
|
||||||
@@ -8,7 +8,7 @@ jobs:
|
|||||||
|
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
os: [macos-latest, ubuntu-latest, windows-latest]
|
os: [ubuntu-latest]
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Check out Git repository
|
- name: Check out Git repository
|
||||||
@@ -17,10 +17,10 @@ jobs:
|
|||||||
- name: Install Node.js, NPM and Yarn
|
- name: Install Node.js, NPM and Yarn
|
||||||
uses: actions/setup-node@v1
|
uses: actions/setup-node@v1
|
||||||
with:
|
with:
|
||||||
node-version: 10
|
node-version: 12
|
||||||
|
|
||||||
- name: Build/release Electron app
|
- name: Build/release Electron app
|
||||||
uses: samuelmeuli/action-electron-builder@v1
|
uses: samuelmeuli/action-electron-builder@v1
|
||||||
with:
|
with:
|
||||||
github_token: ${{ secrets.github_token }}
|
github_token: ${{ secrets.github_token }}
|
||||||
release: ${{ startsWith(github.ref, 'refs/tags/v') }}
|
release: ${{ startsWith(github.ref, 'refs/tags/v') }}
|
26
.github/workflows/build-mac.yml
vendored
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
name: Build/release [mac]
|
||||||
|
|
||||||
|
on: push
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
release:
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
os: [macos-latest]
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Check out Git repository
|
||||||
|
uses: actions/checkout@v1
|
||||||
|
|
||||||
|
- name: Install Node.js, NPM and Yarn
|
||||||
|
uses: actions/setup-node@v1
|
||||||
|
with:
|
||||||
|
node-version: 12
|
||||||
|
|
||||||
|
- name: Build/release Electron app
|
||||||
|
uses: samuelmeuli/action-electron-builder@v1
|
||||||
|
with:
|
||||||
|
github_token: ${{ secrets.github_token }}
|
||||||
|
release: ${{ startsWith(github.ref, 'refs/tags/v') }}
|
26
.github/workflows/build-win.yml
vendored
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
name: Build/release [windows]
|
||||||
|
|
||||||
|
on: push
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
release:
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
os: [windows-latest]
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Check out Git repository
|
||||||
|
uses: actions/checkout@v1
|
||||||
|
|
||||||
|
- name: Install Node.js, NPM and Yarn
|
||||||
|
uses: actions/setup-node@v1
|
||||||
|
with:
|
||||||
|
node-version: 12
|
||||||
|
|
||||||
|
- name: Build/release Electron app
|
||||||
|
uses: samuelmeuli/action-electron-builder@v1
|
||||||
|
with:
|
||||||
|
github_token: ${{ secrets.github_token }}
|
||||||
|
release: ${{ startsWith(github.ref, 'refs/tags/v') }}
|
51
CHANGELOG.md
@@ -2,6 +2,57 @@
|
|||||||
|
|
||||||
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
||||||
|
|
||||||
|
### [0.1.7](https://github.com/Fabio286/antares/compare/v0.1.6...v0.1.7) (2021-05-16)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* row loses internal id after cell update ([854472c](https://github.com/Fabio286/antares/commit/854472c7a3d8442b1eede12f978cad5aa684094e))
|
||||||
|
* **MySQL:** connection loses schema in some conditions ([6b0b8b1](https://github.com/Fabio286/antares/commit/6b0b8b19d7176ef8647d6f401a33315f8732fdf3))
|
||||||
|
* issue with ENUM and SET fields on table filler modal ([475397c](https://github.com/Fabio286/antares/commit/475397ca34c5b7d8925e2d97d32216d5b80d8211))
|
||||||
|
* issue with ENUM and SET length when creating a new field ([7a62131](https://github.com/Fabio286/antares/commit/7a62131cc707aa1c98bb12513de76229472b7c38))
|
||||||
|
* multiple row select on sorted tables not work properly ([c7663be](https://github.com/Fabio286/antares/commit/c7663be338ccb5ff31e241e824593531ad95bd32))
|
||||||
|
|
||||||
|
|
||||||
|
### Improvements
|
||||||
|
|
||||||
|
* **core:** increased connection pool size to improve performance ([ae103e5](https://github.com/Fabio286/antares/commit/ae103e5477ad190c541d0f29e277c41de6947063))
|
||||||
|
* **MySQL:** improved connections pool handling ([434711a](https://github.com/Fabio286/antares/commit/434711a360bd7539d2ec3adec92e7ccc96fa828e))
|
||||||
|
|
||||||
|
### [0.1.6](https://github.com/Fabio286/antares/compare/v0.1.5...v0.1.6) (2021-05-08)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **MySQL:** ENUM and SET fields support, closes [#61](https://github.com/Fabio286/antares/issues/61) ([bebba64](https://github.com/Fabio286/antares/commit/bebba64d06532990405763284e27cb768dc050f7))
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* better detection and handling of field default type ([3baf6fa](https://github.com/Fabio286/antares/commit/3baf6fa1736a405c95fb02d17c11514861ca9e04))
|
||||||
|
* no quotes around strings in field default custom value ([29e2d92](https://github.com/Fabio286/antares/commit/29e2d92b5bf66ff9e80bb1fee1274967c4418601))
|
||||||
|
* **UI:** data type figure twice on type select ([9dfe7cc](https://github.com/Fabio286/antares/commit/9dfe7cca2234ce6de512bb4c21205c2217e7f765))
|
||||||
|
* support to mDNS/zeroconf in snap build, closes [#58](https://github.com/Fabio286/antares/issues/58) ([35ef070](https://github.com/Fabio286/antares/commit/35ef070725f5779923bf3ad428b44accddf22dbe))
|
||||||
|
|
||||||
|
|
||||||
|
### Improvements
|
||||||
|
|
||||||
|
* italian translation updated ([5dc0b0b](https://github.com/Fabio286/antares/commit/5dc0b0bea40f9d5a5944af2f1c5dc6ff3e60c396))
|
||||||
|
|
||||||
|
### [0.1.5](https://github.com/Fabio286/antares/compare/v0.1.4...v0.1.5) (2021-04-30)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **MySQL:** multiple queries non properly split in some cases ([5208ec1](https://github.com/Fabio286/antares/commit/5208ec171b44da0e6bfa93f15bfedd03ef2aa868))
|
||||||
|
* % character not properly escaped, closes [#60](https://github.com/Fabio286/antares/issues/60) ([ecfb732](https://github.com/Fabio286/antares/commit/ecfb732c265a5485e131e75f3d20ff07d9409753))
|
||||||
|
* semicolon inside strings breaks queries, closes [#59](https://github.com/Fabio286/antares/issues/59) ([1b09909](https://github.com/Fabio286/antares/commit/1b0990912627a3a4a4e8d62b4593f8a7aa3a7fe5))
|
||||||
|
|
||||||
|
|
||||||
|
### Improvements
|
||||||
|
|
||||||
|
* **UI:** new application icon ([5822b3d](https://github.com/Fabio286/antares/commit/5822b3df432e0a2b305d0ff37a20dc466c3a3992))
|
||||||
|
|
||||||
### [0.1.4](https://github.com/Fabio286/antares/compare/v0.1.3...v0.1.4) (2021-04-22)
|
### [0.1.4](https://github.com/Fabio286/antares/compare/v0.1.3...v0.1.4) (2021-04-22)
|
||||||
|
|
||||||
|
|
||||||
|
25
README.md
@@ -45,7 +45,6 @@ A modern application created with minimalism and semplicity in mind, with featur
|
|||||||
- Scratchpad.
|
- Scratchpad.
|
||||||
- Multi language.
|
- Multi language.
|
||||||
- Secure password storage.
|
- Secure password storage.
|
||||||
- Auto updates.
|
|
||||||
|
|
||||||
## Coming soon
|
## Coming soon
|
||||||
|
|
||||||
@@ -62,17 +61,6 @@ This is a roadmap with major features will come in near future.
|
|||||||
- Query logs console.
|
- Query logs console.
|
||||||
- Import/export and migration.
|
- Import/export and migration.
|
||||||
|
|
||||||
## Troubleshooting
|
|
||||||
|
|
||||||
### **Linux**
|
|
||||||
|
|
||||||
With KDE may need necessary installation of the additional `gnome-keyring` package.
|
|
||||||
Depending on your distribution, you will need to run the following command:
|
|
||||||
|
|
||||||
- Debian/Ubuntu: `sudo apt-get install gnome-keyring`
|
|
||||||
- Red Hat-based: `sudo yum install gnome-keyring`
|
|
||||||
- Arch Linux: `sudo pacman -S gnome-keyring`
|
|
||||||
|
|
||||||
## Currently supported
|
## Currently supported
|
||||||
|
|
||||||
### Databases
|
### Databases
|
||||||
@@ -95,15 +83,16 @@ Depending on your distribution, you will need to run the following command:
|
|||||||
#### • ARM
|
#### • ARM
|
||||||
|
|
||||||
- [ ] Windows
|
- [ ] Windows
|
||||||
- [ ] Linux
|
- [x] Linux
|
||||||
- [ ] MacOS
|
- [x] MacOS
|
||||||
|
|
||||||
## Translations
|
## Translations
|
||||||
|
|
||||||
**Italian Translation** (46%) / [Giuseppe Gigliotti](https://github.com/ReverbOD) [[#20](https://github.com/Fabio286/antares/pull/20)]
|
**Italian Translation** / [Giuseppe Gigliotti](https://github.com/ReverbOD) [[#20](https://github.com/Fabio286/antares/pull/20)]
|
||||||
**Arabic Translation** (45%) / [Mohd-PH](https://github.com/Mohd-PH) [[#29](https://github.com/Fabio286/antares/pull/29)]
|
**Arabic Translation** / [Mohd-PH](https://github.com/Mohd-PH) [[#29](https://github.com/Fabio286/antares/pull/29)]
|
||||||
**Spanish Translation** (46%) / [hongkfui](https://github.com/hongkfui) [[#32](https://github.com/Fabio286/antares/pull/32)]
|
**Spanish Translation** / [hongkfui](https://github.com/hongkfui) [[#32](https://github.com/Fabio286/antares/pull/32)]
|
||||||
**French Translation** (100%) / [MrAnyx](https://github.com/MrAnyx) [[#44](https://github.com/Fabio286/antares/pull/44)]
|
**French Translation** / [MrAnyx](https://github.com/MrAnyx) [[#44](https://github.com/Fabio286/antares/pull/44)]
|
||||||
|
**Portugues (Brasil)** / [Daniel Eduardo](https://github.com/daeleduardo) [[#54](https://github.com/Fabio286/antares/pull/54)]
|
||||||
|
|
||||||
## Reviews
|
## Reviews
|
||||||
|
|
||||||
|
BIN
build/appx/LargeTile.png
Normal file
After Width: | Height: | Size: 54 KiB |
BIN
build/appx/SmallTile.png
Normal file
After Width: | Height: | Size: 7.4 KiB |
Before Width: | Height: | Size: 8.4 KiB After Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 4.0 KiB |
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 42 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 17 KiB |
BIN
build/icon.icns
BIN
build/icon.ico
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 50 KiB |
BIN
docs/gh-logo.png
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 43 KiB |
BIN
docs/logo.png
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 172 KiB |
86
package.json
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "antares",
|
"name": "antares",
|
||||||
"productName": "Antares",
|
"productName": "Antares",
|
||||||
"version": "0.1.4",
|
"version": "0.1.7",
|
||||||
"description": "A cross-platform easy to use SQL client.",
|
"description": "A cross-platform easy to use SQL client.",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"repository": "https://github.com/Fabio286/antares.git",
|
"repository": "https://github.com/Fabio286/antares.git",
|
||||||
@@ -14,7 +14,8 @@
|
|||||||
"release:pre": "npm run release -- --prerelease alpha",
|
"release:pre": "npm run release -- --prerelease alpha",
|
||||||
"test": "npm run lint",
|
"test": "npm run lint",
|
||||||
"lint": "eslint . --ext .js,.vue && stylelint \"./src/**/*.{css,scss,sass,vue}\"",
|
"lint": "eslint . --ext .js,.vue && stylelint \"./src/**/*.{css,scss,sass,vue}\"",
|
||||||
"lint:fix": "eslint . --ext .js,.vue --fix && stylelint \"./src/**/*.{css,scss,sass,vue}\" --fix"
|
"lint:fix": "eslint . --ext .js,.vue --fix && stylelint \"./src/**/*.{css,scss,sass,vue}\" --fix",
|
||||||
|
"postinstall": "electron-builder install-app-deps"
|
||||||
},
|
},
|
||||||
"author": "Fabio Di Stasio <fabio286@gmail.com>",
|
"author": "Fabio Di Stasio <fabio286@gmail.com>",
|
||||||
"build": {
|
"build": {
|
||||||
@@ -26,24 +27,28 @@
|
|||||||
"portable"
|
"portable"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"dmg": {
|
"mac": {
|
||||||
"contents": [
|
"target": {
|
||||||
{
|
"target": "default",
|
||||||
"x": 130,
|
"arch": [
|
||||||
"y": 220
|
"x64",
|
||||||
},
|
"arm64"
|
||||||
{
|
]
|
||||||
"x": 410,
|
}
|
||||||
"y": 220,
|
|
||||||
"type": "link",
|
|
||||||
"path": "/Applications"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
"linux": {
|
"linux": {
|
||||||
"target": [
|
"target": [
|
||||||
"deb",
|
{
|
||||||
"AppImage"
|
"target": "deb",
|
||||||
|
"arch": "x64"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"target": "AppImage",
|
||||||
|
"arch": [
|
||||||
|
"x64",
|
||||||
|
"armv7l"
|
||||||
|
]
|
||||||
|
}
|
||||||
],
|
],
|
||||||
"category": "Development"
|
"category": "Development"
|
||||||
},
|
},
|
||||||
@@ -59,6 +64,20 @@
|
|||||||
"identityName": "62514FabioDiStasio.AntaresSQLClient",
|
"identityName": "62514FabioDiStasio.AntaresSQLClient",
|
||||||
"publisher": "CN=1A2729ED-865C-41D2-9038-39AE2A63AA52",
|
"publisher": "CN=1A2729ED-865C-41D2-9038-39AE2A63AA52",
|
||||||
"applicationId": "FabioDiStasio.AntaresSQLClient"
|
"applicationId": "FabioDiStasio.AntaresSQLClient"
|
||||||
|
},
|
||||||
|
"dmg": {
|
||||||
|
"contents": [
|
||||||
|
{
|
||||||
|
"x": 130,
|
||||||
|
"y": 220
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 410,
|
||||||
|
"y": 220,
|
||||||
|
"type": "link",
|
||||||
|
"path": "/Applications"
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"electronWebpack": {
|
"electronWebpack": {
|
||||||
@@ -67,46 +86,45 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@electron/remote": "^1.1.0",
|
||||||
"@mdi/font": "^5.9.55",
|
"@mdi/font": "^5.9.55",
|
||||||
"ace-builds": "^1.4.12",
|
"ace-builds": "^1.4.12",
|
||||||
"electron-log": "^4.3.0",
|
"electron-log": "^4.3.5",
|
||||||
"electron-store": "^7.0.0",
|
"electron-store": "^8.0.0",
|
||||||
"electron-updater": "^4.3.5",
|
"electron-updater": "^4.3.9",
|
||||||
"faker": "^5.3.1",
|
"faker": "^5.3.1",
|
||||||
"marked": "^2.0.2",
|
"marked": "^2.0.2",
|
||||||
"moment": "^2.29.1",
|
"moment": "^2.29.1",
|
||||||
"mssql": "^6.2.3",
|
|
||||||
"mysql2": "^2.2.5",
|
"mysql2": "^2.2.5",
|
||||||
"node-sql-parser": "^3.1.0",
|
|
||||||
"pg": "^8.5.1",
|
"pg": "^8.5.1",
|
||||||
"pgsql-ast-parser": "^7.0.2",
|
"pgsql-ast-parser": "^7.2.1",
|
||||||
"source-map-support": "^0.5.16",
|
"source-map-support": "^0.5.16",
|
||||||
"spectre.css": "^0.5.9",
|
"spectre.css": "^0.5.9",
|
||||||
"sql-formatter": "^4.0.2",
|
"sql-formatter": "^4.0.2",
|
||||||
"v-mask": "^2.2.4",
|
"v-mask": "^2.2.4",
|
||||||
"vue-i18n": "^8.22.4",
|
"vue-i18n": "^8.24.4",
|
||||||
"vuedraggable": "^2.24.3",
|
"vuedraggable": "^2.24.3",
|
||||||
"vuex": "^3.6.0"
|
"vuex": "^3.6.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"babel-eslint": "^10.1.0",
|
"@babel/eslint-parser": "^7.13.14",
|
||||||
"cross-env": "^7.0.2",
|
"cross-env": "^7.0.2",
|
||||||
"electron": "^11.4.3",
|
"electron": "^12.0.7",
|
||||||
"electron-builder": "^22.9.1",
|
"electron-builder": "22.10.5",
|
||||||
"electron-devtools-installer": "^3.1.1",
|
"electron-devtools-installer": "^3.2.0",
|
||||||
"electron-webpack": "^2.8.2",
|
"electron-webpack": "^2.8.2",
|
||||||
"electron-webpack-vue": "^2.4.0",
|
"electron-webpack-vue": "^2.4.0",
|
||||||
"eslint": "^7.24.0",
|
"eslint": "^7.26.0",
|
||||||
"eslint-config-standard": "^16.0.2",
|
"eslint-config-standard": "^16.0.2",
|
||||||
"eslint-plugin-import": "^2.22.1",
|
"eslint-plugin-import": "^2.22.1",
|
||||||
"eslint-plugin-node": "^11.1.0",
|
"eslint-plugin-node": "^11.1.0",
|
||||||
"eslint-plugin-promise": "^5.1.0",
|
"eslint-plugin-promise": "^5.1.0",
|
||||||
"eslint-plugin-vue": "^7.9.0",
|
"eslint-plugin-vue": "^7.9.0",
|
||||||
"node-sass": "^5.0.0",
|
"sass": "^1.32.13",
|
||||||
"sass-loader": "^10.1.1",
|
"sass-loader": "^10.2.0",
|
||||||
"standard-version": "^9.2.0",
|
"standard-version": "^9.3.0",
|
||||||
"stylelint": "^13.12.0",
|
"stylelint": "^13.13.1",
|
||||||
"stylelint-config-standard": "^21.0.0",
|
"stylelint-config-standard": "^22.0.0",
|
||||||
"stylelint-scss": "^3.19.0",
|
"stylelint-scss": "^3.19.0",
|
||||||
"vue": "^2.6.12",
|
"vue": "^2.6.12",
|
||||||
"vue-template-compiler": "^2.6.12",
|
"vue-template-compiler": "^2.6.12",
|
||||||
|
@@ -14,6 +14,9 @@ confinement: strict
|
|||||||
architectures:
|
architectures:
|
||||||
- build-on: amd64
|
- build-on: amd64
|
||||||
compression: lzo
|
compression: lzo
|
||||||
|
layout:
|
||||||
|
/etc/nsswitch.conf:
|
||||||
|
bind-file: $SNAP/etc/nsswitch.conf
|
||||||
|
|
||||||
parts:
|
parts:
|
||||||
antares:
|
antares:
|
||||||
@@ -71,11 +74,28 @@ parts:
|
|||||||
cleanup:
|
cleanup:
|
||||||
after: [antares]
|
after: [antares]
|
||||||
plugin: nil
|
plugin: nil
|
||||||
build-snaps: [ gnome-3-28-1804 ]
|
build-snaps: [gnome-3-28-1804]
|
||||||
override-prime: |
|
override-prime: |
|
||||||
set -eux
|
set -eux
|
||||||
cd /snap/gnome-3-28-1804/current
|
cd /snap/gnome-3-28-1804/current
|
||||||
find . -type f,l -exec rm -f $SNAPCRAFT_PRIME/{} \;
|
find . -type f,l -exec rm -f $SNAPCRAFT_PRIME/{} \;
|
||||||
|
|
||||||
|
mdns-lookup:
|
||||||
|
# Make resolution of ".local" host names (Zero-Conf/mDNS/DNS-SD)
|
||||||
|
# working: Take the original nsswitch.conf file from the base
|
||||||
|
# Snap and add "mdns4_minimal [NOTFOUND=return]" to its "hosts:" line
|
||||||
|
# Also install corresponding mdns4_minimal plug-in
|
||||||
|
# See: https://forum.snapcraft.io/t/no-mdns-support-in-snaps-should-core-have-a-modified-nsswitch-conf/
|
||||||
|
plugin: nil
|
||||||
|
stage-packages:
|
||||||
|
- libnss-mdns
|
||||||
|
override-prime: |
|
||||||
|
set -eux
|
||||||
|
sed -Ee 's/^\s*hosts:(\s+)files/hosts:\1files mdns4_minimal \[NOTFOUND=return\]/' /snap/core18/current/etc/nsswitch.conf > $SNAPCRAFT_STAGE/etc/nsswitch.conf
|
||||||
|
snapcraftctl prime
|
||||||
|
prime:
|
||||||
|
- lib/$SNAPCRAFT_ARCH_TRIPLET/libnss_mdns4_minimal*
|
||||||
|
- etc/nsswitch.conf
|
||||||
|
|
||||||
apps:
|
apps:
|
||||||
antares:
|
antares:
|
||||||
@@ -93,4 +113,4 @@ apps:
|
|||||||
- opengl
|
- opengl
|
||||||
- pulseaudio
|
- pulseaudio
|
||||||
- removable-media
|
- removable-media
|
||||||
- unity7
|
- unity7
|
||||||
|
@@ -277,13 +277,6 @@ module.exports = [
|
|||||||
{
|
{
|
||||||
group: 'other',
|
group: 'other',
|
||||||
types: [
|
types: [
|
||||||
{
|
|
||||||
name: 'UNKNOWN',
|
|
||||||
length: false,
|
|
||||||
collation: false,
|
|
||||||
unsigned: false,
|
|
||||||
zerofill: false
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
name: 'ENUM',
|
name: 'ENUM',
|
||||||
length: true,
|
length: true,
|
||||||
@@ -299,5 +292,17 @@ module.exports = [
|
|||||||
zerofill: false
|
zerofill: false
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
group: 'unknown',
|
||||||
|
types: [
|
||||||
|
{
|
||||||
|
name: 'UNKNOWN',
|
||||||
|
length: false,
|
||||||
|
collation: false,
|
||||||
|
unsigned: false,
|
||||||
|
zerofill: false
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
@@ -12,7 +12,7 @@ const regex = new RegExp(pattern);
|
|||||||
function sqlEscaper (string) {
|
function sqlEscaper (string) {
|
||||||
return string.replace(regex, char => {
|
return string.replace(regex, char => {
|
||||||
const m = ['\\0', '\\x08', '\\x09', '\\x1a', '\\n', '\\r', '\'', '\"', '\\', '\\\\', '%'];
|
const m = ['\\0', '\\x08', '\\x09', '\\x1a', '\\n', '\\r', '\'', '\"', '\\', '\\\\', '%'];
|
||||||
const r = ['\\\\0', '\\\\b', '\\\\t', '\\\\z', '\\\\n', '\\\\r', '\\\'', '\\\"', '\\\\', '\\\\\\\\', '\\%'];
|
const r = ['\\\\0', '\\\\b', '\\\\t', '\\\\z', '\\\\n', '\\\\r', '\\\'', '\\\"', '\\\\', '\\\\\\\\', '\%'];
|
||||||
return r[m.indexOf(char)] || char;
|
return r[m.indexOf(char)] || char;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@@ -29,6 +29,7 @@ async function createMainWindow () {
|
|||||||
icon: nativeImage.createFromDataURL(icon.default),
|
icon: nativeImage.createFromDataURL(icon.default),
|
||||||
webPreferences: {
|
webPreferences: {
|
||||||
nodeIntegration: true,
|
nodeIntegration: true,
|
||||||
|
contextIsolation: false,
|
||||||
'web-security': false,
|
'web-security': false,
|
||||||
enableRemoteModule: true,
|
enableRemoteModule: true,
|
||||||
spellcheck: false
|
spellcheck: false
|
||||||
@@ -37,26 +38,25 @@ async function createMainWindow () {
|
|||||||
backgroundColor: '#1d1d1d'
|
backgroundColor: '#1d1d1d'
|
||||||
});
|
});
|
||||||
|
|
||||||
if (isDevelopment) {
|
try {
|
||||||
await window.loadURL(`http://localhost:${process.env.ELECTRON_WEBPACK_WDS_PORT}`);
|
if (isDevelopment) {
|
||||||
|
await window.loadURL(`http://localhost:${process.env.ELECTRON_WEBPACK_WDS_PORT}`);
|
||||||
|
|
||||||
const { default: installExtension, VUEJS_DEVTOOLS } = require('electron-devtools-installer');
|
const { default: installExtension, VUEJS_DEVTOOLS } = require('electron-devtools-installer');
|
||||||
window.webContents.openDevTools();
|
|
||||||
|
|
||||||
installExtension(VUEJS_DEVTOOLS)
|
const toolName = await installExtension(VUEJS_DEVTOOLS);
|
||||||
.then(name => {
|
console.log(toolName, 'installed');
|
||||||
console.log(name, 'installed');
|
}
|
||||||
})
|
else {
|
||||||
.catch(err => {
|
await window.loadURL(formatUrl({
|
||||||
console.log(err);
|
pathname: path.join(__dirname, 'index.html'),
|
||||||
});
|
protocol: 'file',
|
||||||
|
slashes: true
|
||||||
|
}));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
catch (err) {
|
||||||
await window.loadURL(formatUrl({
|
console.log(err);
|
||||||
pathname: path.join(__dirname, 'index.html'),
|
|
||||||
protocol: 'file',
|
|
||||||
slashes: true
|
|
||||||
}));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
window.on('closed', () => {
|
window.on('closed', () => {
|
||||||
@@ -76,6 +76,8 @@ async function createMainWindow () {
|
|||||||
if (!gotTheLock)
|
if (!gotTheLock)
|
||||||
app.quit();
|
app.quit();
|
||||||
else {
|
else {
|
||||||
|
require('@electron/remote/main').initialize();
|
||||||
|
|
||||||
// Initialize ipcHandlers
|
// Initialize ipcHandlers
|
||||||
ipcHandlers();
|
ipcHandlers();
|
||||||
|
|
||||||
@@ -86,14 +88,19 @@ else {
|
|||||||
app.quit();
|
app.quit();
|
||||||
});
|
});
|
||||||
|
|
||||||
app.on('activate', () => {
|
app.on('activate', async () => {
|
||||||
// on macOS it is common to re-create a window even after all windows have been closed
|
// on macOS it is common to re-create a window even after all windows have been closed
|
||||||
if (mainWindow === null)
|
if (mainWindow === null) {
|
||||||
mainWindow = createMainWindow();
|
mainWindow = await createMainWindow();
|
||||||
|
if (isDevelopment)
|
||||||
|
mainWindow.webContents.openDevTools();
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// create main BrowserWindow when electron is ready
|
// create main BrowserWindow when electron is ready
|
||||||
app.on('ready', async () => {
|
app.on('ready', async () => {
|
||||||
mainWindow = createMainWindow();
|
mainWindow = await createMainWindow();
|
||||||
|
if (isDevelopment)
|
||||||
|
mainWindow.webContents.openDevTools();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@@ -71,7 +71,7 @@ export default connections => {
|
|||||||
const connection = ClientsFactory.getConnection({
|
const connection = ClientsFactory.getConnection({
|
||||||
client: conn.client,
|
client: conn.client,
|
||||||
params,
|
params,
|
||||||
poolSize: 1
|
poolSize: 5
|
||||||
});
|
});
|
||||||
|
|
||||||
await connection.connect();
|
await connection.connect();
|
||||||
|
@@ -128,7 +128,7 @@ export default connections => {
|
|||||||
if (!query) return;
|
if (!query) return;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const result = await connections[uid].raw(query, { nest: true, details: true });
|
const result = await connections[uid].raw(query, { nest: true, details: true, schema });
|
||||||
|
|
||||||
return { status: 'success', response: result };
|
return { status: 'success', response: result };
|
||||||
}
|
}
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
import mysql from 'mysql2';
|
import mysql from 'mysql2/promise';
|
||||||
import { AntaresCore } from '../AntaresCore';
|
import { AntaresCore } from '../AntaresCore';
|
||||||
import dataTypes from 'common/data-types/mysql';
|
import dataTypes from 'common/data-types/mysql';
|
||||||
|
|
||||||
@@ -102,8 +102,10 @@ export class MySQLClient extends AntaresCore {
|
|||||||
* @memberof MySQLClient
|
* @memberof MySQLClient
|
||||||
*/
|
*/
|
||||||
async connect () {
|
async connect () {
|
||||||
|
delete this._params.application_name;
|
||||||
|
|
||||||
if (!this._poolSize)
|
if (!this._poolSize)
|
||||||
this._connection = mysql.createConnection(this._params);
|
this._connection = await mysql.createConnection(this._params);
|
||||||
else {
|
else {
|
||||||
this._connection = mysql.createPool({
|
this._connection = mysql.createPool({
|
||||||
...this._params,
|
...this._params,
|
||||||
@@ -310,6 +312,9 @@ export class MySQLClient extends AntaresCore {
|
|||||||
return rows.map(field => {
|
return rows.map(field => {
|
||||||
let numLength = field.COLUMN_TYPE.match(/int\(([^)]+)\)/);
|
let numLength = field.COLUMN_TYPE.match(/int\(([^)]+)\)/);
|
||||||
numLength = numLength ? +numLength.pop() : null;
|
numLength = numLength ? +numLength.pop() : null;
|
||||||
|
const enumValues = /(enum|set)/.test(field.COLUMN_TYPE)
|
||||||
|
? field.COLUMN_TYPE.match(/\(([^)]+)\)/)[0].slice(1, -1)
|
||||||
|
: null;
|
||||||
|
|
||||||
return {
|
return {
|
||||||
name: field.COLUMN_NAME,
|
name: field.COLUMN_NAME,
|
||||||
@@ -319,13 +324,14 @@ export class MySQLClient extends AntaresCore {
|
|||||||
table: field.TABLE_NAME,
|
table: field.TABLE_NAME,
|
||||||
numPrecision: field.NUMERIC_PRECISION,
|
numPrecision: field.NUMERIC_PRECISION,
|
||||||
numLength,
|
numLength,
|
||||||
|
enumValues,
|
||||||
datePrecision: field.DATETIME_PRECISION,
|
datePrecision: field.DATETIME_PRECISION,
|
||||||
charLength: field.CHARACTER_MAXIMUM_LENGTH,
|
charLength: field.CHARACTER_MAXIMUM_LENGTH,
|
||||||
nullable: field.IS_NULLABLE.includes('YES'),
|
nullable: field.IS_NULLABLE.includes('YES'),
|
||||||
unsigned: field.COLUMN_TYPE.includes('unsigned'),
|
unsigned: field.COLUMN_TYPE.includes('unsigned'),
|
||||||
zerofill: field.COLUMN_TYPE.includes('zerofill'),
|
zerofill: field.COLUMN_TYPE.includes('zerofill'),
|
||||||
order: field.ORDINAL_POSITION,
|
order: field.ORDINAL_POSITION,
|
||||||
default: field.COLUMN_DEFAULT,
|
default: field.COLUMN_DEFAULT, // TODO: get from show create table
|
||||||
charset: field.CHARACTER_SET_NAME,
|
charset: field.CHARACTER_SET_NAME,
|
||||||
collation: field.COLLATION_NAME,
|
collation: field.COLLATION_NAME,
|
||||||
autoIncrement: field.EXTRA.includes('auto_increment'),
|
autoIncrement: field.EXTRA.includes('auto_increment'),
|
||||||
@@ -484,7 +490,7 @@ export class MySQLClient extends AntaresCore {
|
|||||||
* @memberof MySQLClient
|
* @memberof MySQLClient
|
||||||
*/
|
*/
|
||||||
async dropView (params) {
|
async dropView (params) {
|
||||||
const sql = `DROP VIEW \`${params.view}\``;
|
const sql = `DROP VIEW \`${this._schema}\`.\`${params.view}\``;
|
||||||
return await this.raw(sql);
|
return await this.raw(sql);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -496,10 +502,10 @@ export class MySQLClient extends AntaresCore {
|
|||||||
*/
|
*/
|
||||||
async alterView (params) {
|
async alterView (params) {
|
||||||
const { view } = params;
|
const { view } = params;
|
||||||
let sql = `ALTER ALGORITHM = ${view.algorithm}${view.definer ? ` DEFINER=${view.definer}` : ''} SQL SECURITY ${view.security} VIEW \`${view.oldName}\` AS ${view.sql} ${view.updateOption ? `WITH ${view.updateOption} CHECK OPTION` : ''}`;
|
let sql = `ALTER ALGORITHM = ${view.algorithm}${view.definer ? ` DEFINER=${view.definer}` : ''} SQL SECURITY ${view.security} VIEW \`${this._schema}\`.\`${view.oldName}\` AS ${view.sql} ${view.updateOption ? `WITH ${view.updateOption} CHECK OPTION` : ''}`;
|
||||||
|
|
||||||
if (view.name !== view.oldName)
|
if (view.name !== view.oldName)
|
||||||
sql += `; RENAME TABLE \`${view.oldName}\` TO \`${view.name}\``;
|
sql += `; RENAME TABLE \`${this._schema}\`.\`${view.oldName}\` TO \`${this._schema}\`.\`${view.name}\``;
|
||||||
|
|
||||||
return await this.raw(sql);
|
return await this.raw(sql);
|
||||||
}
|
}
|
||||||
@@ -511,7 +517,7 @@ export class MySQLClient extends AntaresCore {
|
|||||||
* @memberof MySQLClient
|
* @memberof MySQLClient
|
||||||
*/
|
*/
|
||||||
async createView (view) {
|
async createView (view) {
|
||||||
const sql = `CREATE ALGORITHM = ${view.algorithm} ${view.definer ? `DEFINER=${view.definer} ` : ''}SQL SECURITY ${view.security} VIEW \`${view.name}\` AS ${view.sql} ${view.updateOption ? `WITH ${view.updateOption} CHECK OPTION` : ''}`;
|
const sql = `CREATE ALGORITHM = ${view.algorithm} ${view.definer ? `DEFINER=${view.definer} ` : ''}SQL SECURITY ${view.security} VIEW \`${this._schema}\`.\`${view.name}\` AS ${view.sql} ${view.updateOption ? `WITH ${view.updateOption} CHECK OPTION` : ''}`;
|
||||||
return await this.raw(sql);
|
return await this.raw(sql);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -544,7 +550,7 @@ export class MySQLClient extends AntaresCore {
|
|||||||
* @memberof MySQLClient
|
* @memberof MySQLClient
|
||||||
*/
|
*/
|
||||||
async dropTrigger (params) {
|
async dropTrigger (params) {
|
||||||
const sql = `DROP TRIGGER \`${params.trigger}\``;
|
const sql = `DROP TRIGGER \`${this._schema}\`.\`${params.trigger}\``;
|
||||||
return await this.raw(sql);
|
return await this.raw(sql);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -577,7 +583,7 @@ export class MySQLClient extends AntaresCore {
|
|||||||
* @memberof MySQLClient
|
* @memberof MySQLClient
|
||||||
*/
|
*/
|
||||||
async createTrigger (trigger) {
|
async createTrigger (trigger) {
|
||||||
const sql = `CREATE ${trigger.definer ? `DEFINER=${trigger.definer} ` : ''}TRIGGER \`${trigger.name}\` ${trigger.event1} ${trigger.event2} ON \`${trigger.table}\` FOR EACH ROW ${trigger.sql}`;
|
const sql = `CREATE ${trigger.definer ? `DEFINER=${trigger.definer} ` : ''}TRIGGER \`${this._schema}\`.\`${trigger.name}\` ${trigger.event1} ${trigger.event2} ON \`${trigger.table}\` FOR EACH ROW ${trigger.sql}`;
|
||||||
return await this.raw(sql, { split: false });
|
return await this.raw(sql, { split: false });
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -651,7 +657,7 @@ export class MySQLClient extends AntaresCore {
|
|||||||
* @memberof MySQLClient
|
* @memberof MySQLClient
|
||||||
*/
|
*/
|
||||||
async dropRoutine (params) {
|
async dropRoutine (params) {
|
||||||
const sql = `DROP PROCEDURE \`${params.routine}\``;
|
const sql = `DROP PROCEDURE \`${this._schema}\`.\`${params.routine}\``;
|
||||||
return await this.raw(sql);
|
return await this.raw(sql);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -691,7 +697,7 @@ export class MySQLClient extends AntaresCore {
|
|||||||
}, []).join(',')
|
}, []).join(',')
|
||||||
: '';
|
: '';
|
||||||
|
|
||||||
const sql = `CREATE ${routine.definer ? `DEFINER=${routine.definer} ` : ''}PROCEDURE \`${routine.name}\`(${parameters})
|
const sql = `CREATE ${routine.definer ? `DEFINER=${routine.definer} ` : ''}PROCEDURE \`${this._schema}\`.\`${routine.name}\`(${parameters})
|
||||||
LANGUAGE SQL
|
LANGUAGE SQL
|
||||||
${routine.deterministic ? 'DETERMINISTIC' : 'NOT DETERMINISTIC'}
|
${routine.deterministic ? 'DETERMINISTIC' : 'NOT DETERMINISTIC'}
|
||||||
${routine.dataAccess}
|
${routine.dataAccess}
|
||||||
@@ -778,7 +784,7 @@ export class MySQLClient extends AntaresCore {
|
|||||||
* @memberof MySQLClient
|
* @memberof MySQLClient
|
||||||
*/
|
*/
|
||||||
async dropFunction (params) {
|
async dropFunction (params) {
|
||||||
const sql = `DROP FUNCTION \`${params.func}\``;
|
const sql = `DROP FUNCTION \`${this._schema}\`.\`${params.func}\``;
|
||||||
return await this.raw(sql);
|
return await this.raw(sql);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -818,7 +824,7 @@ export class MySQLClient extends AntaresCore {
|
|||||||
|
|
||||||
const body = func.returns ? func.sql : 'BEGIN\n RETURN 0;\nEND';
|
const body = func.returns ? func.sql : 'BEGIN\n RETURN 0;\nEND';
|
||||||
|
|
||||||
const sql = `CREATE ${func.definer ? `DEFINER=${func.definer} ` : ''}FUNCTION \`${func.name}\`(${parameters}) RETURNS ${func.returns || 'SMALLINT'}${func.returnsLength ? `(${func.returnsLength})` : ''}
|
const sql = `CREATE ${func.definer ? `DEFINER=${func.definer} ` : ''}FUNCTION \`${this._schema}\`.\`${func.name}\`(${parameters}) RETURNS ${func.returns || 'SMALLINT'}${func.returnsLength ? `(${func.returnsLength})` : ''}
|
||||||
LANGUAGE SQL
|
LANGUAGE SQL
|
||||||
${func.deterministic ? 'DETERMINISTIC' : 'NOT DETERMINISTIC'}
|
${func.deterministic ? 'DETERMINISTIC' : 'NOT DETERMINISTIC'}
|
||||||
${func.dataAccess}
|
${func.dataAccess}
|
||||||
@@ -870,7 +876,7 @@ export class MySQLClient extends AntaresCore {
|
|||||||
* @memberof MySQLClient
|
* @memberof MySQLClient
|
||||||
*/
|
*/
|
||||||
async dropEvent (params) {
|
async dropEvent (params) {
|
||||||
const sql = `DROP EVENT \`${params.scheduler}\``;
|
const sql = `DROP EVENT \`${this._schema}\`.\`${params.scheduler}\``;
|
||||||
return await this.raw(sql);
|
return await this.raw(sql);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -886,13 +892,13 @@ export class MySQLClient extends AntaresCore {
|
|||||||
if (scheduler.execution === 'EVERY' && scheduler.every[0].includes('-'))
|
if (scheduler.execution === 'EVERY' && scheduler.every[0].includes('-'))
|
||||||
scheduler.every[0] = `'${scheduler.every[0]}'`;
|
scheduler.every[0] = `'${scheduler.every[0]}'`;
|
||||||
|
|
||||||
const sql = `ALTER ${scheduler.definer ? ` DEFINER=${scheduler.definer}` : ''} EVENT \`${scheduler.oldName}\`
|
const sql = `ALTER ${scheduler.definer ? ` DEFINER=${scheduler.definer}` : ''} EVENT \`${this._schema}\`.\`${scheduler.oldName}\`
|
||||||
ON SCHEDULE
|
ON SCHEDULE
|
||||||
${scheduler.execution === 'EVERY'
|
${scheduler.execution === 'EVERY'
|
||||||
? `EVERY ${scheduler.every.join(' ')}${scheduler.starts ? ` STARTS '${scheduler.starts}'` : ''}${scheduler.ends ? ` ENDS '${scheduler.ends}'` : ''}`
|
? `EVERY ${scheduler.every.join(' ')}${scheduler.starts ? ` STARTS '${scheduler.starts}'` : ''}${scheduler.ends ? ` ENDS '${scheduler.ends}'` : ''}`
|
||||||
: `AT '${scheduler.at}'`}
|
: `AT '${scheduler.at}'`}
|
||||||
ON COMPLETION${!scheduler.preserve ? ' NOT' : ''} PRESERVE
|
ON COMPLETION${!scheduler.preserve ? ' NOT' : ''} PRESERVE
|
||||||
${scheduler.name !== scheduler.oldName ? `RENAME TO \`${scheduler.name}\`` : ''}
|
${scheduler.name !== scheduler.oldName ? `RENAME TO \`${this._schema}\`.\`${scheduler.name}\`` : ''}
|
||||||
${scheduler.state}
|
${scheduler.state}
|
||||||
COMMENT '${scheduler.comment}'
|
COMMENT '${scheduler.comment}'
|
||||||
DO ${scheduler.sql}`;
|
DO ${scheduler.sql}`;
|
||||||
@@ -907,7 +913,7 @@ export class MySQLClient extends AntaresCore {
|
|||||||
* @memberof MySQLClient
|
* @memberof MySQLClient
|
||||||
*/
|
*/
|
||||||
async createEvent (scheduler) {
|
async createEvent (scheduler) {
|
||||||
const sql = `CREATE ${scheduler.definer ? ` DEFINER=${scheduler.definer}` : ''} EVENT \`${scheduler.name}\`
|
const sql = `CREATE ${scheduler.definer ? ` DEFINER=${scheduler.definer}` : ''} EVENT \`${this._schema}\`.\`${scheduler.name}\`
|
||||||
ON SCHEDULE
|
ON SCHEDULE
|
||||||
${scheduler.execution === 'EVERY'
|
${scheduler.execution === 'EVERY'
|
||||||
? `EVERY ${scheduler.every.join(' ')}${scheduler.starts ? ` STARTS '${scheduler.starts}'` : ''}${scheduler.ends ? ` ENDS '${scheduler.ends}'` : ''}`
|
? `EVERY ${scheduler.every.join(' ')}${scheduler.starts ? ` STARTS '${scheduler.starts}'` : ''}${scheduler.ends ? ` ENDS '${scheduler.ends}'` : ''}`
|
||||||
@@ -1044,7 +1050,7 @@ export class MySQLClient extends AntaresCore {
|
|||||||
engine
|
engine
|
||||||
} = params;
|
} = params;
|
||||||
|
|
||||||
const sql = `CREATE TABLE \`${name}\` (\`${name}_ID\` INT NULL) COMMENT='${comment}', COLLATE='${collation}', ENGINE=${engine}`;
|
const sql = `CREATE TABLE \`${this._schema}\`.\`${name}\` (\`${name}_ID\` INT NULL) COMMENT='${comment}', COLLATE='${collation}', ENGINE=${engine}`;
|
||||||
|
|
||||||
return await this.raw(sql);
|
return await this.raw(sql);
|
||||||
}
|
}
|
||||||
@@ -1116,7 +1122,7 @@ export class MySQLClient extends AntaresCore {
|
|||||||
// CHANGE FIELDS
|
// CHANGE FIELDS
|
||||||
changes.forEach(change => {
|
changes.forEach(change => {
|
||||||
const typeInfo = this._getTypeInfo(change.type);
|
const typeInfo = this._getTypeInfo(change.type);
|
||||||
const length = typeInfo.length ? change.numLength || change.charLength || change.datePrecision : false;
|
const length = typeInfo.length ? change.enumValues || change.numLength || change.charLength || change.datePrecision : false;
|
||||||
|
|
||||||
alterColumns.push(`CHANGE COLUMN \`${change.orgName}\` \`${change.name}\`
|
alterColumns.push(`CHANGE COLUMN \`${change.orgName}\` \`${change.name}\`
|
||||||
${change.type.toUpperCase()}${length ? `(${length})` : ''}
|
${change.type.toUpperCase()}${length ? `(${length})` : ''}
|
||||||
@@ -1178,7 +1184,7 @@ export class MySQLClient extends AntaresCore {
|
|||||||
sql += alterColumns.join(', ');
|
sql += alterColumns.join(', ');
|
||||||
|
|
||||||
// RENAME
|
// RENAME
|
||||||
if (options.name) sql += `; RENAME TABLE \`${table}\` TO \`${options.name}\``;
|
if (options.name) sql += `; RENAME TABLE \`${this._schema}\`.\`${table}\` TO \`${this._schema}\`.\`${options.name}\``;
|
||||||
|
|
||||||
return await this.raw(sql);
|
return await this.raw(sql);
|
||||||
}
|
}
|
||||||
@@ -1190,7 +1196,7 @@ export class MySQLClient extends AntaresCore {
|
|||||||
* @memberof MySQLClient
|
* @memberof MySQLClient
|
||||||
*/
|
*/
|
||||||
async truncateTable (params) {
|
async truncateTable (params) {
|
||||||
const sql = `TRUNCATE TABLE \`${params.table}\``;
|
const sql = `TRUNCATE TABLE \`${this._schema}\`.\`${params.table}\``;
|
||||||
return await this.raw(sql);
|
return await this.raw(sql);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1201,7 +1207,7 @@ export class MySQLClient extends AntaresCore {
|
|||||||
* @memberof MySQLClient
|
* @memberof MySQLClient
|
||||||
*/
|
*/
|
||||||
async dropTable (params) {
|
async dropTable (params) {
|
||||||
const sql = `DROP TABLE \`${params.table}\``;
|
const sql = `DROP TABLE \`${this._schema}\`.\`${params.table}\``;
|
||||||
return await this.raw(sql);
|
return await this.raw(sql);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1269,18 +1275,24 @@ export class MySQLClient extends AntaresCore {
|
|||||||
* @memberof MySQLClient
|
* @memberof MySQLClient
|
||||||
*/
|
*/
|
||||||
async raw (sql, args) {
|
async raw (sql, args) {
|
||||||
|
if (process.env.NODE_ENV === 'development') this._logger(sql);// TODO: replace BLOB content with a placeholder
|
||||||
|
|
||||||
args = {
|
args = {
|
||||||
nest: false,
|
nest: false,
|
||||||
details: false,
|
details: false,
|
||||||
split: true,
|
split: true,
|
||||||
...args
|
...args
|
||||||
};
|
};
|
||||||
|
|
||||||
const nestTables = args.nest ? '.' : false;
|
const nestTables = args.nest ? '.' : false;
|
||||||
const resultsArr = [];
|
const resultsArr = [];
|
||||||
let paramsArr = [];
|
let paramsArr = [];
|
||||||
const queries = args.split ? sql.split(';') : [sql];
|
const queries = args.split ? sql.split(/((?:[^;'"]*(?:"(?:\\.|[^"])*"|'(?:\\.|[^'])*')[^;'"]*)+)|;/gm) : [sql];
|
||||||
|
const isPool = typeof this._connection.getConnection === 'function';
|
||||||
|
const connection = isPool ? await this._connection.getConnection() : this._connection;
|
||||||
|
|
||||||
if (process.env.NODE_ENV === 'development') this._logger(sql);// TODO: replace BLOB content with a placeholder
|
if (args.schema)
|
||||||
|
await connection.query(`USE \`${args.schema}\``);
|
||||||
|
|
||||||
for (const query of queries) {
|
for (const query of queries) {
|
||||||
if (!query) continue;
|
if (!query) continue;
|
||||||
@@ -1289,87 +1301,85 @@ export class MySQLClient extends AntaresCore {
|
|||||||
let keysArr = [];
|
let keysArr = [];
|
||||||
|
|
||||||
const { rows, report, fields, keys, duration } = await new Promise((resolve, reject) => {
|
const { rows, report, fields, keys, duration } = await new Promise((resolve, reject) => {
|
||||||
this._connection.query({ sql: query, nestTables }, async (err, response, fields) => {
|
connection.query({ sql: query, nestTables }).then(async ([response, fields]) => {
|
||||||
timeStop = new Date();
|
timeStop = new Date();
|
||||||
const queryResult = response;
|
const queryResult = response;
|
||||||
|
|
||||||
if (err)
|
let remappedFields = fields
|
||||||
reject(err);
|
? fields.map(field => {
|
||||||
else {
|
if (!field || Array.isArray(field))
|
||||||
let remappedFields = fields
|
return false;
|
||||||
? fields.map(field => {
|
|
||||||
if (!field || Array.isArray(field))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
const type = this._getType(field);
|
const type = this._getType(field);
|
||||||
|
|
||||||
|
return {
|
||||||
|
name: field.orgName,
|
||||||
|
alias: field.name,
|
||||||
|
orgName: field.orgName,
|
||||||
|
schema: field.schema,
|
||||||
|
table: field.table,
|
||||||
|
tableAlias: field.table,
|
||||||
|
orgTable: field.orgTable,
|
||||||
|
type: type.name,
|
||||||
|
length: type.length
|
||||||
|
};
|
||||||
|
}).filter(Boolean)
|
||||||
|
: [];
|
||||||
|
|
||||||
|
if (args.details) {
|
||||||
|
let cachedTable;
|
||||||
|
|
||||||
|
if (remappedFields.length) {
|
||||||
|
paramsArr = remappedFields.map(field => {
|
||||||
|
if (field.orgTable) cachedTable = field.orgTable;// Needed for some queries on information_schema
|
||||||
return {
|
return {
|
||||||
name: field.orgName,
|
table: field.orgTable || cachedTable,
|
||||||
alias: field.name,
|
schema: field.schema || 'INFORMATION_SCHEMA'
|
||||||
orgName: field.orgName,
|
|
||||||
schema: field.schema,
|
|
||||||
table: field.table,
|
|
||||||
tableAlias: field.table,
|
|
||||||
orgTable: field.orgTable,
|
|
||||||
type: type.name,
|
|
||||||
length: type.length
|
|
||||||
};
|
};
|
||||||
}).filter(Boolean)
|
}).filter((val, i, arr) => arr.findIndex(el => el.schema === val.schema && el.table === val.table) === i);
|
||||||
: [];
|
|
||||||
|
|
||||||
if (args.details) {
|
for (const paramObj of paramsArr) {
|
||||||
let cachedTable;
|
if (!paramObj.table || !paramObj.schema) continue;
|
||||||
|
|
||||||
if (remappedFields.length) {
|
try { // Column details
|
||||||
paramsArr = remappedFields.map(field => {
|
const response = await this.getTableColumns(paramObj);
|
||||||
if (field.orgTable) cachedTable = field.orgTable;// Needed for some queries on information_schema
|
remappedFields = remappedFields.map(field => {
|
||||||
return {
|
const detailedField = response.find(f => f.name === field.name);
|
||||||
table: field.orgTable || cachedTable,
|
if (detailedField && field.orgTable === paramObj.table && field.schema === paramObj.schema)
|
||||||
schema: field.schema || 'INFORMATION_SCHEMA'
|
field = { ...field, ...detailedField };
|
||||||
};
|
return field;
|
||||||
}).filter((val, i, arr) => arr.findIndex(el => el.schema === val.schema && el.table === val.table) === i);
|
});
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
reject(err);
|
||||||
|
}
|
||||||
|
|
||||||
for (const paramObj of paramsArr) {
|
try { // Key usage (foreign keys)
|
||||||
if (!paramObj.table || !paramObj.schema) continue;
|
const response = await this.getKeyUsage(paramObj);
|
||||||
|
keysArr = keysArr ? [...keysArr, ...response] : response;
|
||||||
try { // Column details
|
}
|
||||||
const response = await this.getTableColumns(paramObj);
|
catch (err) {
|
||||||
remappedFields = remappedFields.map(field => {
|
reject(err);
|
||||||
const detailedField = response.find(f => f.name === field.name);
|
|
||||||
if (detailedField && field.orgTable === paramObj.table && field.schema === paramObj.schema)
|
|
||||||
field = { ...detailedField, ...field };
|
|
||||||
return field;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
catch (err) {
|
|
||||||
reject(err);
|
|
||||||
}
|
|
||||||
|
|
||||||
try { // Key usage (foreign keys)
|
|
||||||
const response = await this.getKeyUsage(paramObj);
|
|
||||||
keysArr = keysArr ? [...keysArr, ...response] : response;
|
|
||||||
}
|
|
||||||
catch (err) {
|
|
||||||
reject(err);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
resolve({
|
|
||||||
duration: timeStop - timeStart,
|
|
||||||
rows: Array.isArray(queryResult) ? queryResult.some(el => Array.isArray(el)) ? [] : queryResult : false,
|
|
||||||
report: !Array.isArray(queryResult) ? queryResult : false,
|
|
||||||
fields: remappedFields,
|
|
||||||
keys: keysArr
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
});
|
|
||||||
|
resolve({
|
||||||
|
duration: timeStop - timeStart,
|
||||||
|
rows: Array.isArray(queryResult) ? queryResult.some(el => Array.isArray(el)) ? [] : queryResult : false,
|
||||||
|
report: !Array.isArray(queryResult) ? queryResult : false,
|
||||||
|
fields: remappedFields,
|
||||||
|
keys: keysArr
|
||||||
|
});
|
||||||
|
}).catch(reject);
|
||||||
});
|
});
|
||||||
|
|
||||||
resultsArr.push({ rows, report, fields, keys, duration });
|
resultsArr.push({ rows, report, fields, keys, duration });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isPool) connection.release();
|
||||||
|
|
||||||
return resultsArr.length === 1 ? resultsArr[0] : resultsArr;
|
return resultsArr.length === 1 ? resultsArr[0] : resultsArr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -816,97 +816,6 @@ export class PostgreSQLClient extends AntaresCore {
|
|||||||
return await this.raw(sql, { split: false });
|
return await this.raw(sql, { split: false });
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* SHOW CREATE EVENT
|
|
||||||
*
|
|
||||||
* @returns {Array.<Object>} view informations
|
|
||||||
* @memberof PostgreSQLClient
|
|
||||||
*/
|
|
||||||
// async getEventInformations ({ schema, scheduler }) {
|
|
||||||
// const sql = `SHOW CREATE EVENT \`${schema}\`.\`${scheduler}\``;
|
|
||||||
// const results = await this.raw(sql);
|
|
||||||
|
|
||||||
// return results.rows.map(row => {
|
|
||||||
// const schedule = row['Create Event'];
|
|
||||||
// const execution = schedule.includes('EVERY') ? 'EVERY' : 'ONCE';
|
|
||||||
// const every = execution === 'EVERY' ? row['Create Event'].match(/(?<=EVERY )(\s*([^\s]+)){0,2}/gs)[0].replaceAll('\'', '').split(' ') : [];
|
|
||||||
// const starts = execution === 'EVERY' && schedule.includes('STARTS') ? schedule.match(/(?<=STARTS ').*?(?='\s)/gs)[0] : '';
|
|
||||||
// const ends = execution === 'EVERY' && schedule.includes('ENDS') ? schedule.match(/(?<=ENDS ').*?(?='\s)/gs)[0] : '';
|
|
||||||
// const at = execution === 'ONCE' && schedule.includes('AT') ? schedule.match(/(?<=AT ').*?(?='\s)/gs)[0] : '';
|
|
||||||
|
|
||||||
// return {
|
|
||||||
// definer: row['Create Event'].match(/(?<=DEFINER=).*?(?=\s)/gs)[0],
|
|
||||||
// sql: row['Create Event'].match(/(?<=DO )(.*)/gs)[0],
|
|
||||||
// name: row.Event,
|
|
||||||
// comment: row['Create Event'].match(/(?<=COMMENT ').*?(?=')/gs) ? row['Create Event'].match(/(?<=COMMENT ').*?(?=')/gs)[0] : '',
|
|
||||||
// state: row['Create Event'].includes('ENABLE') ? 'ENABLE' : row['Create Event'].includes('DISABLE ON SLAVE') ? 'DISABLE ON SLAVE' : 'DISABLE',
|
|
||||||
// preserve: row['Create Event'].includes('ON COMPLETION PRESERVE'),
|
|
||||||
// execution,
|
|
||||||
// every,
|
|
||||||
// starts,
|
|
||||||
// ends,
|
|
||||||
// at
|
|
||||||
// };
|
|
||||||
// })[0];
|
|
||||||
// }
|
|
||||||
|
|
||||||
/**
|
|
||||||
* DROP EVENT
|
|
||||||
*
|
|
||||||
* @returns {Array.<Object>} parameters
|
|
||||||
* @memberof PostgreSQLClient
|
|
||||||
*/
|
|
||||||
// async dropEvent (params) {
|
|
||||||
// const sql = `DROP EVENT \`${params.scheduler}\``;
|
|
||||||
// return await this.raw(sql);
|
|
||||||
// }
|
|
||||||
|
|
||||||
/**
|
|
||||||
* ALTER EVENT
|
|
||||||
*
|
|
||||||
* @returns {Array.<Object>} parameters
|
|
||||||
* @memberof PostgreSQLClient
|
|
||||||
*/
|
|
||||||
// async alterEvent (params) {
|
|
||||||
// const { scheduler } = params;
|
|
||||||
|
|
||||||
// if (scheduler.execution === 'EVERY' && scheduler.every[0].includes('-'))
|
|
||||||
// scheduler.every[0] = `'${scheduler.every[0]}'`;
|
|
||||||
|
|
||||||
// const sql = `ALTER ${scheduler.definer ? ` DEFINER=${scheduler.definer}` : ''} EVENT \`${scheduler.oldName}\`
|
|
||||||
// ON SCHEDULE
|
|
||||||
// ${scheduler.execution === 'EVERY'
|
|
||||||
// ? `EVERY ${scheduler.every.join(' ')}${scheduler.starts ? ` STARTS '${scheduler.starts}'` : ''}${scheduler.ends ? ` ENDS '${scheduler.ends}'` : ''}`
|
|
||||||
// : `AT '${scheduler.at}'`}
|
|
||||||
// ON COMPLETION${!scheduler.preserve ? ' NOT' : ''} PRESERVE
|
|
||||||
// ${scheduler.name !== scheduler.oldName ? `RENAME TO \`${scheduler.name}\`` : ''}
|
|
||||||
// ${scheduler.state}
|
|
||||||
// COMMENT '${scheduler.comment}'
|
|
||||||
// DO ${scheduler.sql}`;
|
|
||||||
|
|
||||||
// return await this.raw(sql, { split: false });
|
|
||||||
// }
|
|
||||||
|
|
||||||
/**
|
|
||||||
* CREATE EVENT
|
|
||||||
*
|
|
||||||
* @returns {Array.<Object>} parameters
|
|
||||||
* @memberof PostgreSQLClient
|
|
||||||
*/
|
|
||||||
// async createEvent (scheduler) {
|
|
||||||
// const sql = `CREATE ${scheduler.definer ? ` DEFINER=${scheduler.definer}` : ''} EVENT \`${scheduler.name}\`
|
|
||||||
// ON SCHEDULE
|
|
||||||
// ${scheduler.execution === 'EVERY'
|
|
||||||
// ? `EVERY ${scheduler.every.join(' ')}${scheduler.starts ? ` STARTS '${scheduler.starts}'` : ''}${scheduler.ends ? ` ENDS '${scheduler.ends}'` : ''}`
|
|
||||||
// : `AT '${scheduler.at}'`}
|
|
||||||
// ON COMPLETION${!scheduler.preserve ? ' NOT' : ''} PRESERVE
|
|
||||||
// ${scheduler.state}
|
|
||||||
// COMMENT '${scheduler.comment}'
|
|
||||||
// DO ${scheduler.sql}`;
|
|
||||||
|
|
||||||
// return await this.raw(sql, { split: false });
|
|
||||||
// }
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* SELECT * FROM pg_collation
|
* SELECT * FROM pg_collation
|
||||||
*
|
*
|
||||||
@@ -1250,12 +1159,12 @@ export class PostgreSQLClient extends AntaresCore {
|
|||||||
...args
|
...args
|
||||||
};
|
};
|
||||||
|
|
||||||
if (args.nest && this._schema !== 'public')
|
if (args.schema && args.schema !== 'public')
|
||||||
await this.use(this._schema);
|
await this.use(args.schema);
|
||||||
|
|
||||||
const resultsArr = [];
|
const resultsArr = [];
|
||||||
let paramsArr = [];
|
let paramsArr = [];
|
||||||
const queries = args.split ? sql.split(';') : [sql];
|
const queries = args.split ? sql.split(/(?!\B'[^']*);(?![^']*'\B)/gm) : [sql];
|
||||||
|
|
||||||
if (process.env.NODE_ENV === 'development') this._logger(sql);// TODO: replace BLOB content with a placeholder
|
if (process.env.NODE_ENV === 'development') this._logger(sql);// TODO: replace BLOB content with a placeholder
|
||||||
|
|
||||||
|
@@ -25,7 +25,8 @@
|
|||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { mapActions, mapGetters } from 'vuex';
|
import { mapActions, mapGetters } from 'vuex';
|
||||||
import { ipcRenderer, remote } from 'electron';
|
import { ipcRenderer } from 'electron';
|
||||||
|
import { Menu, getCurrentWindow } from '@electron/remote';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'App',
|
name: 'App',
|
||||||
@@ -60,8 +61,6 @@ export default {
|
|||||||
ipcRenderer.send('check-for-updates');
|
ipcRenderer.send('check-for-updates');
|
||||||
this.checkVersionUpdate();
|
this.checkVersionUpdate();
|
||||||
|
|
||||||
const Menu = remote.Menu;
|
|
||||||
|
|
||||||
const InputMenu = Menu.buildFromTemplate([
|
const InputMenu = Menu.buildFromTemplate([
|
||||||
{
|
{
|
||||||
label: this.$t('word.cut'),
|
label: this.$t('word.cut'),
|
||||||
@@ -92,7 +91,7 @@ export default {
|
|||||||
|
|
||||||
while (node) {
|
while (node) {
|
||||||
if (node.nodeName.match(/^(input|textarea)$/i) || node.isContentEditable) {
|
if (node.nodeName.match(/^(input|textarea)$/i) || node.isContentEditable) {
|
||||||
InputMenu.popup(remote.getCurrentWindow());
|
InputMenu.popup(getCurrentWindow());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
node = node.parentNode;
|
node = node.parentNode;
|
||||||
|
@@ -66,6 +66,21 @@
|
|||||||
:type="inputProps().type"
|
:type="inputProps().type"
|
||||||
:disabled="!isChecked"
|
:disabled="!isChecked"
|
||||||
>
|
>
|
||||||
|
<select
|
||||||
|
v-else-if="enumArray"
|
||||||
|
v-model="selectedValue"
|
||||||
|
class="form-select"
|
||||||
|
:disabled="!isChecked"
|
||||||
|
@change="onChange"
|
||||||
|
>
|
||||||
|
<option
|
||||||
|
v-for="val in enumArray"
|
||||||
|
:key="val"
|
||||||
|
:value="val"
|
||||||
|
>
|
||||||
|
{{ val }}
|
||||||
|
</option>
|
||||||
|
</select>
|
||||||
<input
|
<input
|
||||||
v-else
|
v-else
|
||||||
ref="formInput"
|
ref="formInput"
|
||||||
@@ -121,7 +136,8 @@ export default {
|
|||||||
selectedMethod: '',
|
selectedMethod: '',
|
||||||
selectedValue: '',
|
selectedValue: '',
|
||||||
debounceTimeout: null,
|
debounceTimeout: null,
|
||||||
methodParams: {}
|
methodParams: {},
|
||||||
|
enumArray: null
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
@@ -150,8 +166,14 @@ export default {
|
|||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
fieldObj () {
|
fieldObj () {
|
||||||
if (this.fieldObj)
|
if (this.fieldObj) {
|
||||||
this.selectedValue = this.fieldObj.value;
|
if (Array.isArray(this.fieldObj.value)) {
|
||||||
|
this.enumArray = this.fieldObj.value;
|
||||||
|
this.selectedValue = this.fieldObj.value[0];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
this.selectedValue = this.fieldObj.value;
|
||||||
|
}
|
||||||
},
|
},
|
||||||
selectedGroup () {
|
selectedGroup () {
|
||||||
if (this.fakerMethods.length)
|
if (this.fakerMethods.length)
|
||||||
|
@@ -269,6 +269,9 @@ export default {
|
|||||||
fieldDefault = moment().format(`YYYY-MM-DD HH:mm:ss${datePrecision}`);
|
fieldDefault = moment().format(`YYYY-MM-DD HH:mm:ss${datePrecision}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (field.enumValues)
|
||||||
|
fieldDefault = field.enumValues.replaceAll('\'', '').split(',');
|
||||||
}
|
}
|
||||||
|
|
||||||
rowObj[field.name] = { value: fieldDefault };
|
rowObj[field.name] = { value: fieldDefault };
|
||||||
|
@@ -37,15 +37,16 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { remote, ipcRenderer } from 'electron';
|
import { ipcRenderer } from 'electron';
|
||||||
|
import { getCurrentWindow } from '@electron/remote';
|
||||||
import { mapGetters } from 'vuex';
|
import { mapGetters } from 'vuex';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'TheTitleBar',
|
name: 'TheTitleBar',
|
||||||
data () {
|
data () {
|
||||||
return {
|
return {
|
||||||
w: remote.getCurrentWindow(),
|
w: getCurrentWindow(),
|
||||||
isMaximized: remote.getCurrentWindow().isMaximized(),
|
isMaximized: getCurrentWindow().isMaximized(),
|
||||||
isDevelopment: process.env.NODE_ENV === 'development'
|
isDevelopment: process.env.NODE_ENV === 'development'
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
@@ -132,7 +133,7 @@ export default {
|
|||||||
|
|
||||||
.titlebar-logo {
|
.titlebar-logo {
|
||||||
height: $titlebar-height;
|
height: $titlebar-height;
|
||||||
padding: 0 0.4rem;
|
padding: 0.3rem 0.4rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.titlebar-element {
|
.titlebar-element {
|
||||||
|
@@ -233,6 +233,20 @@ export default {
|
|||||||
const { status, response } = await Tables.getTableColumns(params);
|
const { status, response } = await Tables.getTableColumns(params);
|
||||||
if (status === 'success') {
|
if (status === 'success') {
|
||||||
this.originalFields = response.map(field => {
|
this.originalFields = response.map(field => {
|
||||||
|
if (field.autoIncrement)
|
||||||
|
field.defaultType = 'autoincrement';
|
||||||
|
else if (field.default === null)
|
||||||
|
field.defaultType = 'noval';
|
||||||
|
else if (field.default === 'NULL')
|
||||||
|
field.defaultType = 'null';
|
||||||
|
else if (field.default.match(/^\s*(\w+)\s*\((.*)\)$/))
|
||||||
|
field.defaultType = 'expression';
|
||||||
|
else {
|
||||||
|
field.defaultType = 'custom';
|
||||||
|
if (isNaN(field.default) && !field.default.includes('\''))
|
||||||
|
field.default = `'${field.default}'`;
|
||||||
|
}
|
||||||
|
|
||||||
return { ...field, _id: uidGen() };
|
return { ...field, _id: uidGen() };
|
||||||
});
|
});
|
||||||
this.localFields = JSON.parse(JSON.stringify(this.originalFields));
|
this.localFields = JSON.parse(JSON.stringify(this.originalFields));
|
||||||
|
@@ -98,6 +98,15 @@
|
|||||||
>
|
>
|
||||||
{{ localLength }}
|
{{ localLength }}
|
||||||
</span>
|
</span>
|
||||||
|
<input
|
||||||
|
v-else-if="localRow.enumValues"
|
||||||
|
ref="editField"
|
||||||
|
v-model="editingContent"
|
||||||
|
type="text"
|
||||||
|
autofocus
|
||||||
|
class="editable-field px-2"
|
||||||
|
@blur="editOFF"
|
||||||
|
>
|
||||||
<input
|
<input
|
||||||
v-else
|
v-else
|
||||||
ref="editField"
|
ref="editField"
|
||||||
@@ -352,7 +361,7 @@ export default {
|
|||||||
getWorkspace: 'workspaces/getWorkspace'
|
getWorkspace: 'workspaces/getWorkspace'
|
||||||
}),
|
}),
|
||||||
localLength () {
|
localLength () {
|
||||||
return this.localRow.numLength || this.localRow.charLength || this.localRow.datePrecision || this.localRow.numPrecision || 0;
|
return this.localRow.enumValues || this.localRow.numLength || this.localRow.charLength || this.localRow.datePrecision || this.localRow.numPrecision || 0;
|
||||||
},
|
},
|
||||||
fieldType () {
|
fieldType () {
|
||||||
const fieldType = this.dataTypes.reduce((acc, group) => [...acc, ...group.types], []).filter(type =>
|
const fieldType = this.dataTypes.reduce((acc, group) => [...acc, ...group.types], []).filter(type =>
|
||||||
@@ -381,10 +390,12 @@ export default {
|
|||||||
isInDataTypes () {
|
isInDataTypes () {
|
||||||
let typeNames = [];
|
let typeNames = [];
|
||||||
for (const group of this.dataTypes) {
|
for (const group of this.dataTypes) {
|
||||||
typeNames = group.types.reduce((acc, curr) => {
|
const groupTypeNames = group.types.reduce((acc, curr) => {
|
||||||
acc.push(curr.name);
|
acc.push(curr.name);
|
||||||
return acc;
|
return acc;
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
|
typeNames = [...groupTypeNames, ...typeNames];
|
||||||
}
|
}
|
||||||
return typeNames.includes(this.row.type);
|
return typeNames.includes(this.row.type);
|
||||||
}
|
}
|
||||||
@@ -433,37 +444,30 @@ export default {
|
|||||||
});
|
});
|
||||||
|
|
||||||
this.defaultValue.onUpdate = this.localRow.onUpdate;
|
this.defaultValue.onUpdate = this.localRow.onUpdate;
|
||||||
|
this.defaultValue.type = this.localRow.defaultType;
|
||||||
if (this.localRow.autoIncrement)
|
if (this.defaultValue.type === 'custom')
|
||||||
this.defaultValue.type = 'autoincrement';
|
|
||||||
else if (this.localRow.default === null)
|
|
||||||
this.defaultValue.type = 'noval';
|
|
||||||
else if (this.localRow.default === 'NULL')
|
|
||||||
this.defaultValue.type = 'null';
|
|
||||||
else if (this.localRow.default.match(/^'.*'$/g)) {
|
|
||||||
this.defaultValue.type = 'custom';
|
|
||||||
this.defaultValue.custom = this.localRow.default.replace(/(^')|('$)/g, '');
|
|
||||||
}
|
|
||||||
else if (!isNaN(this.localRow.default.replace(/[:.-\s]/g, ''))) {
|
|
||||||
this.defaultValue.type = 'custom';
|
|
||||||
this.defaultValue.custom = this.localRow.default;
|
this.defaultValue.custom = this.localRow.default;
|
||||||
}
|
if (this.defaultValue.type === 'expression')
|
||||||
else {
|
|
||||||
this.defaultValue.type = 'expression';
|
|
||||||
this.defaultValue.expression = this.localRow.default;
|
this.defaultValue.expression = this.localRow.default;
|
||||||
}
|
|
||||||
},
|
},
|
||||||
editON (event, content, field) {
|
editON (event, content, field) {
|
||||||
if (field === 'length') {
|
if (field === 'length') {
|
||||||
if (['integer', 'float', 'binary', 'spatial'].includes(this.fieldType.group)) this.editingField = 'numLength';
|
if (['integer', 'float', 'binary', 'spatial'].includes(this.fieldType.group)) this.editingField = 'numLength';
|
||||||
if (['string', 'other'].includes(this.fieldType.group)) this.editingField = 'charLength';
|
else if (['string', 'unknown'].includes(this.fieldType.group)) this.editingField = 'charLength';
|
||||||
if (['time'].includes(this.fieldType.group)) this.editingField = 'datePrecision';
|
else if (['other'].includes(this.fieldType.group)) this.editingField = 'enumValues';
|
||||||
|
else if (['time'].includes(this.fieldType.group)) this.editingField = 'datePrecision';
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
this.editingField = field;
|
this.editingField = field;
|
||||||
|
|
||||||
this.editingContent = content;
|
if (this.localRow.enumValues && field === 'length') {
|
||||||
this.originalContent = content;
|
this.editingContent = this.localRow.enumValues;
|
||||||
|
this.originalContent = this.localRow.enumValues;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.editingContent = content;
|
||||||
|
this.originalContent = content;
|
||||||
|
}
|
||||||
|
|
||||||
const obj = { [field]: true };
|
const obj = { [field]: true };
|
||||||
this.isInlineEditor = { ...this.isInlineEditor, ...obj };
|
this.isInlineEditor = { ...this.isInlineEditor, ...obj };
|
||||||
@@ -488,11 +492,13 @@ export default {
|
|||||||
this.localRow.numLength = null;
|
this.localRow.numLength = null;
|
||||||
this.localRow.charLength = null;
|
this.localRow.charLength = null;
|
||||||
this.localRow.datePrecision = null;
|
this.localRow.datePrecision = null;
|
||||||
|
this.localRow.enumValues = '';
|
||||||
|
|
||||||
if (this.fieldType.length) {
|
if (this.fieldType.length) {
|
||||||
if (['integer', 'float', 'binary', 'spatial'].includes(this.fieldType.group)) this.localRow.numLength = 11;
|
if (['integer', 'float', 'binary', 'spatial'].includes(this.fieldType.group)) this.localRow.numLength = 11;
|
||||||
if (['string', 'other'].includes(this.fieldType.group)) this.localRow.charLength = 15;
|
if (['string'].includes(this.fieldType.group)) this.localRow.charLength = 15;
|
||||||
if (['time'].includes(this.fieldType.group)) this.localRow.datePrecision = 0;
|
if (['time'].includes(this.fieldType.group)) this.localRow.datePrecision = 0;
|
||||||
|
if (['other'].includes(this.fieldType.group)) this.localRow.enumValues = '\'valA\',\'valB\'';
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!this.fieldType.collation)
|
if (!this.fieldType.collation)
|
||||||
@@ -519,7 +525,7 @@ export default {
|
|||||||
break;
|
break;
|
||||||
case 'custom':
|
case 'custom':
|
||||||
this.localRow.autoIncrement = false;
|
this.localRow.autoIncrement = false;
|
||||||
this.localRow.default = `'${this.defaultValue.custom}'`;
|
this.localRow.default = this.defaultValue.custom;
|
||||||
break;
|
break;
|
||||||
case 'expression':
|
case 'expression':
|
||||||
this.localRow.autoIncrement = false;
|
this.localRow.autoIncrement = false;
|
||||||
|
@@ -319,8 +319,6 @@ export default {
|
|||||||
},
|
},
|
||||||
updateField (payload, row) {
|
updateField (payload, row) {
|
||||||
const orgRow = this.localResults.find(lr => lr._id === row._id);
|
const orgRow = this.localResults.find(lr => lr._id === row._id);
|
||||||
delete row._id;
|
|
||||||
delete orgRow._id;
|
|
||||||
|
|
||||||
Object.keys(orgRow).forEach(key => { // remap the row
|
Object.keys(orgRow).forEach(key => { // remap the row
|
||||||
if (orgRow[key] instanceof Date && moment(orgRow[key]).isValid()) { // if datetime
|
if (orgRow[key] instanceof Date && moment(orgRow[key]).isValid()) { // if datetime
|
||||||
@@ -370,7 +368,6 @@ export default {
|
|||||||
},
|
},
|
||||||
setNull () {
|
setNull () {
|
||||||
const row = this.localResults.find(row => this.selectedRows.includes(row._id));
|
const row = this.localResults.find(row => this.selectedRows.includes(row._id));
|
||||||
delete row._id;
|
|
||||||
|
|
||||||
const params = {
|
const params = {
|
||||||
primary: this.primaryField.name,
|
primary: this.primaryField.name,
|
||||||
@@ -408,15 +405,15 @@ export default {
|
|||||||
this.selectedRows.push(row);
|
this.selectedRows.push(row);
|
||||||
else {
|
else {
|
||||||
const lastID = this.selectedRows.slice(-1)[0];
|
const lastID = this.selectedRows.slice(-1)[0];
|
||||||
const lastIndex = this.localResults.findIndex(el => el._id === lastID);
|
const lastIndex = this.sortedResults.findIndex(el => el._id === lastID);
|
||||||
const clickedIndex = this.localResults.findIndex(el => el._id === row);
|
const clickedIndex = this.sortedResults.findIndex(el => el._id === row);
|
||||||
if (lastIndex > clickedIndex) {
|
if (lastIndex > clickedIndex) {
|
||||||
for (let i = clickedIndex; i < lastIndex; i++)
|
for (let i = clickedIndex; i < lastIndex; i++)
|
||||||
this.selectedRows.push(this.localResults[i]._id);
|
this.selectedRows.push(this.sortedResults[i]._id);
|
||||||
}
|
}
|
||||||
else if (lastIndex < clickedIndex) {
|
else if (lastIndex < clickedIndex) {
|
||||||
for (let i = clickedIndex; i > lastIndex; i--)
|
for (let i = clickedIndex; i > lastIndex; i--)
|
||||||
this.selectedRows.push(this.localResults[i]._id);
|
this.selectedRows.push(this.sortedResults[i]._id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -435,6 +432,8 @@ export default {
|
|||||||
sort (field) {
|
sort (field) {
|
||||||
if (!this.isSortable) return;
|
if (!this.isSortable) return;
|
||||||
|
|
||||||
|
this.selectedRows = [];
|
||||||
|
|
||||||
if (this.mode === 'query')
|
if (this.mode === 'query')
|
||||||
field = `${this.getTable(this.resultsetIndex)}.${field}`;
|
field = `${this.getTable(this.resultsetIndex)}.${field}`;
|
||||||
|
|
||||||
|
@@ -43,6 +43,16 @@
|
|||||||
<option>true</option>
|
<option>true</option>
|
||||||
<option>false</option>
|
<option>false</option>
|
||||||
</select>
|
</select>
|
||||||
|
<select
|
||||||
|
v-else-if="enumArray"
|
||||||
|
v-model="editingContent"
|
||||||
|
class="form-select small-select editable-field"
|
||||||
|
@blur="editOFF"
|
||||||
|
>
|
||||||
|
<option v-for="value in enumArray" :key="value">
|
||||||
|
{{ value }}
|
||||||
|
</option>
|
||||||
|
</select>
|
||||||
<input
|
<input
|
||||||
v-else
|
v-else
|
||||||
ref="editField"
|
ref="editField"
|
||||||
@@ -336,6 +346,11 @@ export default {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
},
|
||||||
|
enumArray () {
|
||||||
|
if (this.fields[this.editingField].enumValues)
|
||||||
|
return this.fields[this.editingField].enumValues.replaceAll('\'', '').split(',');
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
|
@@ -9,7 +9,8 @@ const i18n = new VueI18n({
|
|||||||
'it-IT': require('./it-IT'),
|
'it-IT': require('./it-IT'),
|
||||||
'ar-SA': require('./ar-SA'),
|
'ar-SA': require('./ar-SA'),
|
||||||
'es-ES': require('./es-ES'),
|
'es-ES': require('./es-ES'),
|
||||||
'fr-FR': require('./fr-FR')
|
'fr-FR': require('./fr-FR'),
|
||||||
|
'pt-BR': require('./pt-BR')
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
export default i18n;
|
export default i18n;
|
||||||
|
@@ -39,7 +39,73 @@ module.exports = {
|
|||||||
data: 'Dati',
|
data: 'Dati',
|
||||||
properties: 'Proprietà',
|
properties: 'Proprietà',
|
||||||
insert: 'Inserisci',
|
insert: 'Inserisci',
|
||||||
connecting: 'Connessione in corso'
|
connecting: 'Connessione in corso',
|
||||||
|
name: 'Nome',
|
||||||
|
collation: 'Confronto',
|
||||||
|
clear: 'Scarta',
|
||||||
|
options: 'Opzioni',
|
||||||
|
autoRefresh: 'Auto-aggiorna',
|
||||||
|
indexes: 'Indici',
|
||||||
|
foreignKeys: 'Chiavi esterne',
|
||||||
|
length: 'Lunghezza',
|
||||||
|
unsigned: 'Senza segno',
|
||||||
|
default: 'Default',
|
||||||
|
comment: 'Commento',
|
||||||
|
key: 'Chiave | Chiavi',
|
||||||
|
order: 'Ordine',
|
||||||
|
expression: 'Espressione',
|
||||||
|
autoIncrement: 'Auto Incremento',
|
||||||
|
engine: 'Motore',
|
||||||
|
field: 'Campo | Campi',
|
||||||
|
approximately: 'Approssimativamente',
|
||||||
|
total: 'Totali',
|
||||||
|
table: 'Tabella',
|
||||||
|
discard: 'Scarta',
|
||||||
|
stay: 'Resta',
|
||||||
|
author: 'Autore',
|
||||||
|
light: 'Chiaro',
|
||||||
|
dark: 'Scuro',
|
||||||
|
autoCompletion: 'Auto Completamento',
|
||||||
|
application: 'Applicazione',
|
||||||
|
editor: 'Editor',
|
||||||
|
view: 'Vista',
|
||||||
|
definer: 'Definer',
|
||||||
|
algorithm: 'Algoritmo',
|
||||||
|
trigger: 'Trigger | Triggers',
|
||||||
|
storedRoutine: 'Stored routine | Stored routines',
|
||||||
|
scheduler: 'Scheduler | Schedulers',
|
||||||
|
event: 'Evento',
|
||||||
|
parameters: 'Parametri',
|
||||||
|
function: 'Funzione | Funzioni',
|
||||||
|
deterministic: 'Deterministico',
|
||||||
|
context: 'Contesto',
|
||||||
|
export: 'Esporta',
|
||||||
|
returns: 'Ritorna',
|
||||||
|
timing: 'Temporizzazione',
|
||||||
|
state: 'Stato',
|
||||||
|
execution: 'Esecuzione',
|
||||||
|
starts: 'Inizia',
|
||||||
|
ends: 'Finisce',
|
||||||
|
ssl: 'SSL',
|
||||||
|
privateKey: 'Chiave privata',
|
||||||
|
certificate: 'Certificato',
|
||||||
|
caCertificate: 'Certificato CA',
|
||||||
|
ciphers: 'Ciphers',
|
||||||
|
upload: 'Carica',
|
||||||
|
browse: 'Sfoglia',
|
||||||
|
faker: 'Faker',
|
||||||
|
content: 'Contenuto',
|
||||||
|
cut: 'Taglia',
|
||||||
|
copy: 'Copia',
|
||||||
|
paste: 'Incolla',
|
||||||
|
tools: 'Strumenti',
|
||||||
|
variables: 'Variabili',
|
||||||
|
processes: 'Processi',
|
||||||
|
database: 'Database',
|
||||||
|
scratchpad: 'Blocco appunti',
|
||||||
|
array: 'Array',
|
||||||
|
changelog: 'Changelog',
|
||||||
|
format: 'Formatta'
|
||||||
},
|
},
|
||||||
message: {
|
message: {
|
||||||
appWelcome: 'Benvenuto in Antares SQL Client!',
|
appWelcome: 'Benvenuto in Antares SQL Client!',
|
||||||
@@ -71,6 +137,243 @@ module.exports = {
|
|||||||
addNewRow: 'Aggiungi nuova riga',
|
addNewRow: 'Aggiungi nuova riga',
|
||||||
numberOfInserts: 'Numero di insert',
|
numberOfInserts: 'Numero di insert',
|
||||||
openNewTab: 'Apri nuova scheda',
|
openNewTab: 'Apri nuova scheda',
|
||||||
affectedRows: 'Righe interessate'
|
affectedRows: 'Righe interessate',
|
||||||
|
createNewDatabase: 'Crea nuovo database',
|
||||||
|
databaseName: 'Nome database',
|
||||||
|
serverDefault: 'Default del server',
|
||||||
|
deleteDatabase: 'Cancella database',
|
||||||
|
editDatabase: 'Modifica database',
|
||||||
|
clearChanges: 'Scarta modifiche',
|
||||||
|
addNewField: 'Aggiungi nuovo campo',
|
||||||
|
manageIndexes: 'Gestisci indici',
|
||||||
|
manageForeignKeys: 'Gestisci chiavi esterne',
|
||||||
|
allowNull: 'Permetti NULL',
|
||||||
|
zeroFill: 'Riempimento con zero',
|
||||||
|
customValue: 'Varore personalizzato',
|
||||||
|
onUpdate: 'All\'aggiornamento',
|
||||||
|
deleteField: 'Cancella campo',
|
||||||
|
createNewIndex: 'Crea nuovo indice',
|
||||||
|
addToIndex: 'Aggiungi a indice',
|
||||||
|
createNewTable: 'Crea nuova tabella',
|
||||||
|
emptyTable: 'Svuota tabella',
|
||||||
|
deleteTable: 'Cancella tabella',
|
||||||
|
emptyCorfirm: 'Confermi di voler svuotare',
|
||||||
|
unsavedChanges: 'Modifiche non salvate',
|
||||||
|
discardUnsavedChanges: 'Hai modifiche non salvate. Lasciando questa scheda le modifiche saranno scartate.',
|
||||||
|
thereAreNoIndexes: 'Non ci sono indici',
|
||||||
|
thereAreNoForeign: 'Non ci sono chiavi esterne',
|
||||||
|
createNewForeign: 'Crea nuova chiave esterna',
|
||||||
|
referenceTable: 'Tabella di rif.',
|
||||||
|
referenceField: 'Campo di rif.',
|
||||||
|
foreignFields: 'Campi esterni',
|
||||||
|
invalidDefault: 'Default non valido',
|
||||||
|
onDelete: 'All\'eliminazione',
|
||||||
|
applicationTheme: 'Tema applicazione',
|
||||||
|
editorTheme: 'Tema editor',
|
||||||
|
wrapLongLines: 'A capo righe lunghe',
|
||||||
|
selectStatement: 'Dichiarazione select',
|
||||||
|
triggerStatement: 'Dichiarazione trigger',
|
||||||
|
sqlSecurity: 'Sicurezza SQL',
|
||||||
|
updateOption: 'Update option',
|
||||||
|
deleteView: 'Elimina vista',
|
||||||
|
createNewView: 'Crea nuova vista',
|
||||||
|
deleteTrigger: 'Elimina trigger',
|
||||||
|
createNewTrigger: 'Crea nuovo trigger',
|
||||||
|
currentUser: 'Utente attuale',
|
||||||
|
routineBody: 'Corpo della routine',
|
||||||
|
dataAccess: 'Accesso dati',
|
||||||
|
thereAreNoParameters: 'Non ci sono parametri',
|
||||||
|
createNewParameter: 'Crea nuovo parametro',
|
||||||
|
createNewRoutine: 'Crea nuova stored routine',
|
||||||
|
deleteRoutine: 'Elimina stored routine',
|
||||||
|
functionBody: 'Corpo della funzione',
|
||||||
|
createNewFunction: 'Crea nuova funzione',
|
||||||
|
deleteFunction: 'Elimina funzione',
|
||||||
|
schedulerBody: 'Corpo dello scheduler',
|
||||||
|
createNewScheduler: 'Crea nuovo scheduler',
|
||||||
|
deleteScheduler: 'Elimina scheduler',
|
||||||
|
preserveOnCompletion: 'Preserva al completamento',
|
||||||
|
enableSsl: 'Abilita SSL',
|
||||||
|
manualValue: 'Valore manuale',
|
||||||
|
tableFiller: 'Riempitore Tabella',
|
||||||
|
fakeDataLanguage: 'Lingua dati falsi',
|
||||||
|
searchForElements: 'Cerca elementi',
|
||||||
|
selectAll: 'Seleziona tutto',
|
||||||
|
queryDuration: 'Durata query',
|
||||||
|
includeBetaUpdates: 'Includi aggiornamenti beta',
|
||||||
|
setNull: 'Imposta NULL',
|
||||||
|
processesList: 'Lista processi',
|
||||||
|
processInfo: 'Info processo',
|
||||||
|
manageUsers: 'Gestisci utenti',
|
||||||
|
createNewSchema: 'Crea nuovo schema',
|
||||||
|
schemaName: 'Nome schema',
|
||||||
|
editSchema: 'Modifica schema',
|
||||||
|
deleteSchema: 'Elimina schema',
|
||||||
|
markdownSupported: 'Markdown supportato',
|
||||||
|
plantATree: 'Pianta un albero'
|
||||||
|
},
|
||||||
|
faker: {
|
||||||
|
address: 'Indirizzo',
|
||||||
|
commerce: 'Commercio',
|
||||||
|
company: 'Compagnia',
|
||||||
|
database: 'Database',
|
||||||
|
date: 'Data',
|
||||||
|
finance: 'Finanza',
|
||||||
|
git: 'Git',
|
||||||
|
hacker: 'Hacker',
|
||||||
|
internet: 'Internet',
|
||||||
|
lorem: 'Lorem',
|
||||||
|
name: 'Nome',
|
||||||
|
music: 'Musica',
|
||||||
|
phone: 'Telefono',
|
||||||
|
random: 'Casuale',
|
||||||
|
system: 'Sistema',
|
||||||
|
time: 'Tempo',
|
||||||
|
vehicle: 'Veicolo',
|
||||||
|
zipCode: 'Codice zip',
|
||||||
|
zipCodeByState: 'Codice zip per stato',
|
||||||
|
city: 'Città',
|
||||||
|
cityPrefix: 'Prefisso città',
|
||||||
|
citySuffix: 'Suffisso città',
|
||||||
|
streetName: 'Nome strada',
|
||||||
|
streetAddress: 'Indirizzo strada',
|
||||||
|
streetSuffix: 'Suffisso strada',
|
||||||
|
streetPrefix: 'Prefisso strada',
|
||||||
|
secondaryAddress: 'Indirizzo secondario',
|
||||||
|
county: 'Contea',
|
||||||
|
country: 'Nazione',
|
||||||
|
countryCode: 'Codice nazione',
|
||||||
|
state: 'Stato',
|
||||||
|
stateAbbr: 'Abbreviazione stato',
|
||||||
|
latitude: 'Latitudine',
|
||||||
|
longitude: 'Longitudine',
|
||||||
|
direction: 'Direzione',
|
||||||
|
cardinalDirection: 'Direzione cardinale',
|
||||||
|
ordinalDirection: 'Direzione ordinale',
|
||||||
|
nearbyGPSCoordinate: 'Coordinate GPS vicine',
|
||||||
|
timeZone: 'Time zone',
|
||||||
|
color: 'Colore',
|
||||||
|
department: 'Dipartimento',
|
||||||
|
productName: 'Nome prodotto',
|
||||||
|
price: 'Prezzo',
|
||||||
|
productAdjective: 'Aggettivo prodotto',
|
||||||
|
productMaterial: 'Materiale prodotto',
|
||||||
|
product: 'Prodotto',
|
||||||
|
productDescription: 'Descrizione prodotto',
|
||||||
|
suffixes: 'Suffissi',
|
||||||
|
companyName: 'Nome compagnia',
|
||||||
|
companySuffix: 'Suffisso compagnia',
|
||||||
|
catchPhrase: 'Slogan',
|
||||||
|
bs: 'BS',
|
||||||
|
catchPhraseAdjective: 'Aggettivo slogan',
|
||||||
|
catchPhraseDescriptor: 'Descrittore slogan',
|
||||||
|
catchPhraseNoun: 'Sostantivo slogan',
|
||||||
|
bsAdjective: 'Aggettivo BS',
|
||||||
|
bsBuzz: 'Buzz BS',
|
||||||
|
bsNoun: 'Sostantivo BS',
|
||||||
|
column: 'Colonna',
|
||||||
|
type: 'Tipo',
|
||||||
|
collation: 'Confronto',
|
||||||
|
engine: 'Motore',
|
||||||
|
past: 'Passato',
|
||||||
|
future: 'Futuro',
|
||||||
|
between: 'Tra',
|
||||||
|
recent: 'Recente',
|
||||||
|
soon: 'Presto',
|
||||||
|
month: 'Mese',
|
||||||
|
weekday: 'Giorno della settimana',
|
||||||
|
account: 'Account',
|
||||||
|
accountName: 'Nome account',
|
||||||
|
routingNumber: 'Numero di instradamento',
|
||||||
|
mask: 'Maschera',
|
||||||
|
amount: 'Ammontare',
|
||||||
|
transactionType: 'Tipo transazione',
|
||||||
|
currencyCode: 'Codice valuta',
|
||||||
|
currencyName: 'Nome valuta',
|
||||||
|
currencySymbol: 'Simbolo valuta',
|
||||||
|
bitcoinAddress: 'Indirizzo Bitcoin',
|
||||||
|
litecoinAddress: 'Indirizzo Litecoin',
|
||||||
|
creditCardNumber: 'Numero carta di credito',
|
||||||
|
creditCardCVV: 'CVV carta di credito',
|
||||||
|
ethereumAddress: 'Indirizzo Ethereum',
|
||||||
|
iban: 'Iban',
|
||||||
|
bic: 'Bic',
|
||||||
|
transactionDescription: 'Descrizione transazione',
|
||||||
|
branch: 'Ramo',
|
||||||
|
commitEntry: 'Commit entry',
|
||||||
|
commitMessage: 'Messaggio di commit',
|
||||||
|
commitSha: 'SHA del commit',
|
||||||
|
shortSha: 'SHA breve',
|
||||||
|
abbreviation: 'Abbreviazione',
|
||||||
|
adjective: 'Aggettivo',
|
||||||
|
noun: 'Sostantivo',
|
||||||
|
verb: 'Verbo',
|
||||||
|
ingverb: 'Ingverb',
|
||||||
|
phrase: 'Frase',
|
||||||
|
avatar: 'Avatar',
|
||||||
|
email: 'Email',
|
||||||
|
exampleEmail: 'Email di esempio',
|
||||||
|
userName: 'Username',
|
||||||
|
protocol: 'Protocollo',
|
||||||
|
url: 'Url',
|
||||||
|
domainName: 'Nome dominio',
|
||||||
|
domainSuffix: 'Suffisso dominio',
|
||||||
|
domainWord: 'Parola dominio',
|
||||||
|
ip: 'Ip',
|
||||||
|
ipv6: 'Ipv6',
|
||||||
|
userAgent: 'User agent',
|
||||||
|
mac: 'Mac',
|
||||||
|
password: 'Password',
|
||||||
|
word: 'Parola',
|
||||||
|
words: 'Parole',
|
||||||
|
sentence: 'Sentenza',
|
||||||
|
slug: 'Slug',
|
||||||
|
sentences: 'Sentenze',
|
||||||
|
paragraph: 'Paragrafo',
|
||||||
|
paragraphs: 'Paragrafi',
|
||||||
|
text: 'Testo',
|
||||||
|
lines: 'Righe',
|
||||||
|
genre: 'Genere',
|
||||||
|
firstName: 'Nome',
|
||||||
|
lastName: 'Cognome',
|
||||||
|
middleName: 'Secondo nome',
|
||||||
|
findName: 'Nome completo',
|
||||||
|
jobTitle: 'Titolo di lavoro',
|
||||||
|
gender: 'Genere',
|
||||||
|
prefix: 'Prefisso',
|
||||||
|
suffix: 'Suffisso',
|
||||||
|
title: 'Titolo',
|
||||||
|
jobDescriptor: 'Descrittore del lavoro',
|
||||||
|
jobArea: 'Area di lavoro',
|
||||||
|
jobType: 'Tipo di lavoro',
|
||||||
|
phoneNumber: 'Numero di telefono',
|
||||||
|
phoneNumberFormat: 'Formato numeri di telefono',
|
||||||
|
phoneFormats: 'Formati di telefono',
|
||||||
|
number: 'Numero',
|
||||||
|
float: 'Float',
|
||||||
|
arrayElement: 'Elemento array',
|
||||||
|
arrayElements: 'Elementi array',
|
||||||
|
objectElement: 'Elemento object',
|
||||||
|
uuid: 'Uuid',
|
||||||
|
boolean: 'Booleano',
|
||||||
|
image: 'Immagine',
|
||||||
|
locale: 'Localizzazione',
|
||||||
|
alpha: 'Alfabetico',
|
||||||
|
alphaNumeric: 'Alfanumerico',
|
||||||
|
hexaDecimal: 'Esadecimale',
|
||||||
|
fileName: 'Nome file',
|
||||||
|
commonFileName: 'Nome file comune',
|
||||||
|
mimeType: 'Mime type',
|
||||||
|
commonFileType: 'Tipo file comune',
|
||||||
|
commonFileExt: 'Estensione file comune',
|
||||||
|
fileType: 'Tipo file',
|
||||||
|
fileExt: 'Estensione file',
|
||||||
|
directoryPath: 'Percorso directory',
|
||||||
|
filePath: 'Percorso file',
|
||||||
|
semver: 'Semver',
|
||||||
|
manufacturer: 'Produttore',
|
||||||
|
model: 'Modello',
|
||||||
|
fuel: 'Carburante',
|
||||||
|
vin: 'Vin'
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
379
src/renderer/i18n/pt-BR.js
Normal file
@@ -0,0 +1,379 @@
|
|||||||
|
module.exports = {
|
||||||
|
word: {
|
||||||
|
edit: 'Editar',
|
||||||
|
save: 'Salvar',
|
||||||
|
close: 'Fechar',
|
||||||
|
delete: 'Apagar',
|
||||||
|
confirm: 'Confirmar',
|
||||||
|
cancel: 'Cancelar',
|
||||||
|
send: 'Enviar',
|
||||||
|
connectionName: 'Nome da Conexão',
|
||||||
|
client: 'Cliente',
|
||||||
|
hostName: 'Nome do Host',
|
||||||
|
port: 'Porta',
|
||||||
|
user: 'Usuário',
|
||||||
|
password: 'Senha',
|
||||||
|
credentials: 'Credenciais',
|
||||||
|
connect: 'Conectar',
|
||||||
|
connected: 'Conectado',
|
||||||
|
disconnect: 'Desconectar',
|
||||||
|
disconnected: 'Desconectado',
|
||||||
|
refresh: 'Atualizar',
|
||||||
|
settings: 'Opções',
|
||||||
|
general: 'Geral',
|
||||||
|
themes: 'Temas',
|
||||||
|
update: 'Atualizar',
|
||||||
|
about: 'Sobre',
|
||||||
|
language: 'Linguagem',
|
||||||
|
version: 'Versão',
|
||||||
|
donate: 'Doação',
|
||||||
|
run: 'Executar',
|
||||||
|
schema: 'Schema',
|
||||||
|
results: 'Resultados',
|
||||||
|
size: 'Tamanho',
|
||||||
|
seconds: 'Segundos',
|
||||||
|
type: 'Tipo',
|
||||||
|
mimeType: 'Mime-Type',
|
||||||
|
download: 'Download',
|
||||||
|
add: 'Adicionar',
|
||||||
|
data: 'Data',
|
||||||
|
properties: 'Propriedades',
|
||||||
|
insert: 'Inserção',
|
||||||
|
connecting: 'Connectando',
|
||||||
|
name: 'Nome',
|
||||||
|
collation: 'Collation',
|
||||||
|
clear: 'Limpar',
|
||||||
|
options: 'Opções',
|
||||||
|
autoRefresh: 'Atualização Automática',
|
||||||
|
indexes: 'Indices',
|
||||||
|
foreignKeys: 'Chaves Estrangeiras',
|
||||||
|
length: 'Tamanho',
|
||||||
|
unsigned: 'Sem sinal (Unsigned)',
|
||||||
|
default: 'Padrão',
|
||||||
|
comment: 'Comente',
|
||||||
|
key: 'Chave | Chaves',
|
||||||
|
order: 'Ordem',
|
||||||
|
expression: 'Expressão',
|
||||||
|
autoIncrement: 'Auto Incremental',
|
||||||
|
engine: 'Engine',
|
||||||
|
field: 'Campo | Campos',
|
||||||
|
approximately: 'Aproximadamente',
|
||||||
|
total: 'Total',
|
||||||
|
table: 'Tabela',
|
||||||
|
discard: 'Descartar',
|
||||||
|
stay: 'Stay',
|
||||||
|
author: 'Autor',
|
||||||
|
light: 'Claro',
|
||||||
|
dark: 'Escuro',
|
||||||
|
autoCompletion: 'Auto Complemento',
|
||||||
|
application: 'Aplicação',
|
||||||
|
editor: 'Editor',
|
||||||
|
view: 'Visão',
|
||||||
|
definer: 'Definidor',
|
||||||
|
algorithm: 'Algoritmo',
|
||||||
|
trigger: 'Trigger | Triggers',
|
||||||
|
storedRoutine: 'Stored routine | Stored routines',
|
||||||
|
scheduler: 'Scheduler | Schedulers',
|
||||||
|
event: 'Event',
|
||||||
|
parameters: 'Parametros',
|
||||||
|
function: 'Função | Funções',
|
||||||
|
deterministic: 'Deterministico',
|
||||||
|
context: 'Contexto',
|
||||||
|
export: 'Exportar',
|
||||||
|
returns: 'Retornos',
|
||||||
|
timing: 'Tempo',
|
||||||
|
state: 'Estado',
|
||||||
|
execution: 'Execução',
|
||||||
|
starts: 'Começa',
|
||||||
|
ends: 'Termina',
|
||||||
|
ssl: 'SSL',
|
||||||
|
privateKey: 'Chave Privada',
|
||||||
|
certificate: 'Certificado',
|
||||||
|
caCertificate: 'Certificado CA',
|
||||||
|
ciphers: 'Cifras (ciphers)',
|
||||||
|
upload: 'Upload',
|
||||||
|
browse: 'Navegar',
|
||||||
|
faker: 'Faker',
|
||||||
|
content: 'Conteúdo',
|
||||||
|
cut: 'Cortar',
|
||||||
|
copy: 'Copiar',
|
||||||
|
paste: 'Colar',
|
||||||
|
tools: 'Ferramentas',
|
||||||
|
variables: 'Variaveis',
|
||||||
|
processes: 'Processos',
|
||||||
|
database: 'Banco de Dados',
|
||||||
|
scratchpad: 'Rascunho',
|
||||||
|
array: 'Array',
|
||||||
|
changelog: 'Logs de alteração',
|
||||||
|
format: 'Formato'
|
||||||
|
},
|
||||||
|
message: {
|
||||||
|
appWelcome: 'Bem vindo ao Antares SQL Client!',
|
||||||
|
appFirstStep: 'Seu primeiro passo: criar uma nova conexão de banco de dados.',
|
||||||
|
addConnection: 'Adicionar Conexão',
|
||||||
|
createConnection: 'Criar Conexão',
|
||||||
|
createNewConnection: 'Criar Nova Conexão',
|
||||||
|
askCredentials: 'Pedir Credenciais',
|
||||||
|
testConnection: 'Testar Conexão',
|
||||||
|
editConnection: 'Editar Conexão',
|
||||||
|
deleteConnection: 'Apagar Conexão',
|
||||||
|
deleteCorfirm: 'Você confirma o cancelamento de',
|
||||||
|
connectionSuccessfullyMade: 'Conexão feita com sucesso!',
|
||||||
|
madeWithJS: 'Feito com 💛 e JavaScript!',
|
||||||
|
checkForUpdates: 'Verificar se há novas atualizações',
|
||||||
|
noUpdatesAvailable: 'Sem atualizações disponíveis',
|
||||||
|
checkingForUpdate: 'Verificando se há novas atualizações',
|
||||||
|
checkFailure: 'Erro na verificação, por favor, tente mais tarde',
|
||||||
|
updateAvailable: 'Atualização disponível',
|
||||||
|
downloadingUpdate: 'Baixando a atualização',
|
||||||
|
updateDownloaded: 'Atualização baixada',
|
||||||
|
restartToInstall: 'Reinicie o Antares para instalar',
|
||||||
|
unableEditFieldWithoutPrimary: 'Indisponível a edição de um campo sem a chave primária na tabela de resultados',
|
||||||
|
editCell: 'Editar celula',
|
||||||
|
deleteRows: 'Apgar linha | Apagar {count} linhas',
|
||||||
|
confirmToDeleteRows: 'Você confirma a exclusão de uma linha? | Você confirma a exclusão de {count} linhas?',
|
||||||
|
notificationsTimeout: 'Notificações de timeout',
|
||||||
|
uploadFile: 'Upload de arquivo',
|
||||||
|
addNewRow: 'Adicionar nova linha',
|
||||||
|
numberOfInserts: 'Número de inserções',
|
||||||
|
openNewTab: 'Abrir nova aba',
|
||||||
|
affectedRows: 'Linhas afetadas',
|
||||||
|
createNewDatabase: 'Criar novo banco de dados',
|
||||||
|
databaseName: 'Nome do banco de dados',
|
||||||
|
serverDefault: 'Servidor padrão',
|
||||||
|
deleteDatabase: 'Apagar banco de dados',
|
||||||
|
editDatabase: 'Editar banco de dados',
|
||||||
|
clearChanges: 'Limpar alterações',
|
||||||
|
addNewField: 'Adicionar novo campo',
|
||||||
|
manageIndexes: 'Gerenciar índices',
|
||||||
|
manageForeignKeys: 'Gerenciar chaes estrangeiras',
|
||||||
|
allowNull: 'Permitir NULL',
|
||||||
|
zeroFill: 'Preenchimento zero',
|
||||||
|
customValue: 'Valor personalizado',
|
||||||
|
onUpdate: 'Quando atualizar',
|
||||||
|
deleteField: 'Apagar campo',
|
||||||
|
createNewIndex: 'Criar novo índice',
|
||||||
|
addToIndex: 'Adicionar ao índice',
|
||||||
|
createNewTable: 'Criar nova tabela',
|
||||||
|
emptyTable: 'Tabela vazia',
|
||||||
|
deleteTable: 'Apagar tabela',
|
||||||
|
emptyCorfirm: 'Você confirma o esvaziamento',
|
||||||
|
unsavedChanges: 'Alterações não salvas',
|
||||||
|
discardUnsavedChanges: 'Você tem algumas alterações não salvas. Ao sair desta guia, essas alterações serão descartadas.',
|
||||||
|
thereAreNoIndexes: 'Não há índices',
|
||||||
|
thereAreNoForeign: 'Não há chaves estrangeiras',
|
||||||
|
createNewForeign: 'Criar nova chave estrangeira',
|
||||||
|
referenceTable: 'Ref. tabela',
|
||||||
|
referenceField: 'Ref. campo',
|
||||||
|
foreignFields: 'Campos estrangeiros',
|
||||||
|
invalidDefault: 'Padrão inválido',
|
||||||
|
onDelete: 'Quando apagar',
|
||||||
|
applicationTheme: 'Tema da aplicação',
|
||||||
|
editorTheme: 'Editor de tema',
|
||||||
|
wrapLongLines: 'Quebrar linhas longas',
|
||||||
|
selectStatement: 'Select statement',
|
||||||
|
triggerStatement: 'Trigger statement',
|
||||||
|
sqlSecurity: 'Segurança SQL',
|
||||||
|
updateOption: 'Opção de atualização',
|
||||||
|
deleteView: 'Apagar view',
|
||||||
|
createNewView: 'Criar nova view',
|
||||||
|
deleteTrigger: 'Apgar trigger',
|
||||||
|
createNewTrigger: 'Criar nova trigger',
|
||||||
|
currentUser: 'Usuário atual',
|
||||||
|
routineBody: 'Corpo da rotina',
|
||||||
|
dataAccess: 'Acesso de dados',
|
||||||
|
thereAreNoParameters: 'Não há parametros',
|
||||||
|
createNewParameter: 'Criar novo parametro',
|
||||||
|
createNewRoutine: 'Criar nova stored routine',
|
||||||
|
deleteRoutine: 'Apgar stored routine',
|
||||||
|
functionBody: 'Corpo da função',
|
||||||
|
createNewFunction: 'Criar nova função',
|
||||||
|
deleteFunction: 'Apagar função',
|
||||||
|
schedulerBody: 'Corpo do agendador',
|
||||||
|
createNewScheduler: 'Criar novo agendador',
|
||||||
|
deleteScheduler: 'Apagar agendador',
|
||||||
|
preserveOnCompletion: 'Preservar na conclusão',
|
||||||
|
enableSsl: 'Habilitar SSL',
|
||||||
|
manualValue: 'Valor manual',
|
||||||
|
tableFiller: 'Preenchedor de tabela',
|
||||||
|
fakeDataLanguage: 'Linguagem de dados fake',
|
||||||
|
searchForElements: 'Buscar por elementos',
|
||||||
|
selectAll: 'Selecionar todos',
|
||||||
|
queryDuration: 'Tempo de Consulta',
|
||||||
|
includeBetaUpdates: 'Incluir atualizações beta',
|
||||||
|
setNull: 'Setar NULL',
|
||||||
|
processesList: 'Lista de processos',
|
||||||
|
processInfo: 'Informação de processos',
|
||||||
|
manageUsers: 'Gerenciar usuários',
|
||||||
|
createNewSchema: 'Criar novo schema',
|
||||||
|
schemaName: 'Nome schema',
|
||||||
|
editSchema: 'Editar schema',
|
||||||
|
deleteSchema: 'Apagar schema',
|
||||||
|
markdownSupported: 'Markdown suportado',
|
||||||
|
plantATree: 'Plante uma árvore'
|
||||||
|
},
|
||||||
|
faker: {
|
||||||
|
address: 'Endereço',
|
||||||
|
commerce: 'Comércio',
|
||||||
|
company: 'Empresa',
|
||||||
|
database: 'Banco de dados',
|
||||||
|
date: 'Data',
|
||||||
|
finance: 'Finança',
|
||||||
|
git: 'Git',
|
||||||
|
hacker: 'Hacker',
|
||||||
|
internet: 'Internet',
|
||||||
|
lorem: 'Lorem',
|
||||||
|
name: 'Nome',
|
||||||
|
music: 'Música',
|
||||||
|
phone: 'Telefone',
|
||||||
|
random: 'Randomico',
|
||||||
|
system: 'Sistema',
|
||||||
|
time: 'Tempo',
|
||||||
|
vehicle: 'Veículo',
|
||||||
|
zipCode: 'Código postal',
|
||||||
|
zipCodeByState: 'Código postal por estado',
|
||||||
|
city: 'Cidade',
|
||||||
|
cityPrefix: 'Cidade prefixo',
|
||||||
|
citySuffix: 'Cidade sufixo',
|
||||||
|
streetName: 'Nome da rua',
|
||||||
|
streetAddress: 'Endereço rua',
|
||||||
|
streetSuffix: 'Rua sufixo',
|
||||||
|
streetPrefix: 'Rua prefixo',
|
||||||
|
secondaryAddress: 'Endereço secundário',
|
||||||
|
county: 'Município',
|
||||||
|
country: 'País',
|
||||||
|
countryCode: 'Código do País',
|
||||||
|
state: 'Estado',
|
||||||
|
stateAbbr: 'Sigla estado',
|
||||||
|
latitude: 'Latitude',
|
||||||
|
longitude: 'Longitude',
|
||||||
|
direction: 'Direção',
|
||||||
|
cardinalDirection: 'Direção cardinal',
|
||||||
|
ordinalDirection: 'Direção Ordinal',
|
||||||
|
nearbyGPSCoordinate: 'Coordenadas de GPS próximas',
|
||||||
|
timeZone: 'Fuso Horário',
|
||||||
|
color: 'Cor',
|
||||||
|
department: 'Departamento',
|
||||||
|
productName: 'Nome produto',
|
||||||
|
price: 'Preço',
|
||||||
|
productAdjective: 'Adjetivo produto',
|
||||||
|
productMaterial: 'Material de produto',
|
||||||
|
product: 'Produto',
|
||||||
|
productDescription: 'Descrição do produto',
|
||||||
|
suffixes: 'Sufixos',
|
||||||
|
companyName: 'Nome da empresa',
|
||||||
|
companySuffix: 'Sufixo empresa',
|
||||||
|
catchPhrase: 'Frase de efeito',
|
||||||
|
bs: 'BS',
|
||||||
|
catchPhraseAdjective: 'Adjetivo frase de efeito',
|
||||||
|
catchPhraseDescriptor: 'Descritor de frase de efeito',
|
||||||
|
catchPhraseNoun: 'Frase de efeito sinônimo',
|
||||||
|
bsAdjective: 'BS adjetivo',
|
||||||
|
bsBuzz: 'Rumor BS',
|
||||||
|
bsNoun: 'Sinônimo BS',
|
||||||
|
column: 'Coluna',
|
||||||
|
type: 'Tipo',
|
||||||
|
collation: 'Colação',
|
||||||
|
engine: 'Engine',
|
||||||
|
past: 'Passado',
|
||||||
|
future: 'Futuro',
|
||||||
|
between: 'Entre',
|
||||||
|
recent: 'Recente',
|
||||||
|
soon: 'Em breve',
|
||||||
|
month: 'Mês',
|
||||||
|
weekday: 'Semana',
|
||||||
|
account: 'Conta',
|
||||||
|
accountName: 'Nome conta',
|
||||||
|
routingNumber: 'Número de roteamento',
|
||||||
|
mask: 'Máscara',
|
||||||
|
amount: 'Soma',
|
||||||
|
transactionType: 'Tipo transição',
|
||||||
|
currencyCode: 'Código moeda',
|
||||||
|
currencyName: 'Código nome',
|
||||||
|
currencySymbol: 'Código simbolo',
|
||||||
|
bitcoinAddress: 'Endereço Bitcoin',
|
||||||
|
litecoinAddress: 'Endereço Litecoin',
|
||||||
|
creditCardNumber: 'Número cartão de crédito',
|
||||||
|
creditCardCVV: 'CVV cartão de crédito',
|
||||||
|
ethereumAddress: 'Endereço Ethereum',
|
||||||
|
iban: 'Iban',
|
||||||
|
bic: 'Bic',
|
||||||
|
transactionDescription: 'Descrição transação',
|
||||||
|
branch: 'Branch',
|
||||||
|
commitEntry: 'Inserção commit',
|
||||||
|
commitMessage: 'Mensagem commit',
|
||||||
|
commitSha: 'SHA Commit',
|
||||||
|
shortSha: 'SHA Curto',
|
||||||
|
abbreviation: 'Abreviação',
|
||||||
|
adjective: 'Adjetivo',
|
||||||
|
noun: 'Sinônimo',
|
||||||
|
verb: 'Verbo',
|
||||||
|
ingverb: 'Ingverb',
|
||||||
|
phrase: 'Frase',
|
||||||
|
avatar: 'Avatar',
|
||||||
|
email: 'Email',
|
||||||
|
exampleEmail: 'Exemplo email',
|
||||||
|
userName: 'Nome de usuário',
|
||||||
|
protocol: 'Protocolo',
|
||||||
|
url: 'Url',
|
||||||
|
domainName: 'Nome domínio',
|
||||||
|
domainSuffix: 'Sufixo domíno',
|
||||||
|
domainWord: 'Palavra de domínio',
|
||||||
|
ip: 'Ip',
|
||||||
|
ipv6: 'Ipv6',
|
||||||
|
userAgent: 'Agente usuário',
|
||||||
|
mac: 'Mac',
|
||||||
|
password: 'Senha',
|
||||||
|
word: 'Palavra',
|
||||||
|
words: 'Palavras',
|
||||||
|
sentence: 'Sentença',
|
||||||
|
slug: 'Slug',
|
||||||
|
sentences: 'Sentenças',
|
||||||
|
paragraph: 'Paragrafo',
|
||||||
|
paragraphs: 'Paragrafos',
|
||||||
|
text: 'Texto',
|
||||||
|
lines: 'Linhas',
|
||||||
|
genre: 'Genero',
|
||||||
|
firstName: 'Primeiro nome',
|
||||||
|
lastName: 'Ultimo nome',
|
||||||
|
middleName: 'Nome do meio',
|
||||||
|
findName: 'Nome completo',
|
||||||
|
jobTitle: 'Cargo',
|
||||||
|
gender: 'Genero',
|
||||||
|
prefix: 'Prefixo',
|
||||||
|
suffix: 'Sufixo',
|
||||||
|
title: 'Titulo',
|
||||||
|
jobDescriptor: 'Descrição cargo',
|
||||||
|
jobArea: 'Area de trabalho',
|
||||||
|
jobType: 'Tipo de trabalho',
|
||||||
|
phoneNumber: 'Número telefone',
|
||||||
|
phoneNumberFormat: 'Formato número de telefone',
|
||||||
|
phoneFormats: 'Formatos de telefone',
|
||||||
|
number: 'Número',
|
||||||
|
float: 'Flutuante',
|
||||||
|
arrayElement: 'Elemento array',
|
||||||
|
arrayElements: 'Elementos Array',
|
||||||
|
objectElement: 'Elemento object',
|
||||||
|
uuid: 'Uuid',
|
||||||
|
boolean: 'Booleano',
|
||||||
|
image: 'Imagem',
|
||||||
|
locale: 'Localidade',
|
||||||
|
alpha: 'Alpha',
|
||||||
|
alphaNumeric: 'Alphanumerico',
|
||||||
|
hexaDecimal: 'Hexadecimal',
|
||||||
|
fileName: 'Nome arquivo',
|
||||||
|
commonFileName: 'Nome de arquivo comum',
|
||||||
|
mimeType: 'Mime type',
|
||||||
|
commonFileType: 'Tipo de arquivo comum',
|
||||||
|
commonFileExt: 'Extensão de arquivo comum',
|
||||||
|
fileType: 'Tipo de arquivo',
|
||||||
|
fileExt: 'Extensão de arquivo',
|
||||||
|
directoryPath: 'Caminho do diretório',
|
||||||
|
filePath: 'Caminho do arquivo',
|
||||||
|
semver: 'Semver',
|
||||||
|
manufacturer: 'Fabricante',
|
||||||
|
model: 'Modelo',
|
||||||
|
fuel: 'Combusível',
|
||||||
|
vin: 'Vin'
|
||||||
|
}
|
||||||
|
};
|
@@ -3,5 +3,6 @@ export default {
|
|||||||
'it-IT': 'Italiano',
|
'it-IT': 'Italiano',
|
||||||
'ar-SA': 'العربية',
|
'ar-SA': 'العربية',
|
||||||
'es-ES': 'Español',
|
'es-ES': 'Español',
|
||||||
'fr-FR': 'Français'
|
'fr-FR': 'Français',
|
||||||
|
'pt-BR': 'Português (Brasil)'
|
||||||
};
|
};
|
||||||
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 889 B |
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 172 KiB |
@@ -1,6 +1,154 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 210 210">
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<defs/>
|
<!-- Generator: Adobe Illustrator 20.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
<path fill="#e36929" d="M180.088 107.51a72.967 69.474 0 01-72.858 69.473 72.967 69.474 0 01-73.075-69.266 72.967 69.474 0 0172.639-69.68 72.967 69.474 0 0173.292 69.056"/>
|
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
<path fill="#f8d163" d="M82.985 102.48a17.02 21.735 21.455 01-23.767 14.012 17.02 21.735 21.455 01-7.938-26.403 17.02 21.735 21.455 0123.744-14.091 17.02 21.735 21.455 018.009 26.36m74.797 16.204a17.472 11.51-52.488 01-1.695 20.917 17.472 11.51-52.488 01-19.742 6.678 17.472 11.51-52.488 011.635-20.897 17.472 11.51-52.488 0119.747-6.74"/>
|
viewBox="0 0 1024 1024" style="enable-background:new 0 0 1024 1024;" xml:space="preserve">
|
||||||
<path fill="#fbfcf7" d="M72.979 98.717a9.143 10.562 0 01-9.13 10.562 9.143 10.562 0 01-9.156-10.53 9.143 10.562 0 019.102-10.594 9.143 10.562 0 019.184 10.499m82.68 32.078a6.21 6.986 0 01-6.2 6.987 6.21 6.986 0 01-6.22-6.966 6.21 6.986 0 016.182-7.007 6.21 6.986 0 016.238 6.945"/>
|
<style type="text/css">
|
||||||
|
.st0{fill:url(#SVGID_1_);}
|
||||||
|
.st1{fill:url(#XMLID_15_);}
|
||||||
|
.st2{opacity:0.5;fill:#FFBC00;}
|
||||||
|
.st3{fill:#FFBC00;}
|
||||||
|
.st4{fill:url(#XMLID_16_);}
|
||||||
|
.st5{fill:url(#XMLID_17_);}
|
||||||
|
.st6{fill:url(#XMLID_18_);}
|
||||||
|
.st7{fill:url(#XMLID_19_);}
|
||||||
|
.st8{fill:url(#XMLID_20_);}
|
||||||
|
.st9{fill:url(#XMLID_21_);}
|
||||||
|
.st10{opacity:0.46;}
|
||||||
|
.st11{fill:url(#XMLID_23_);}
|
||||||
|
.st12{fill:url(#XMLID_24_);}
|
||||||
|
.st13{fill:url(#XMLID_25_);}
|
||||||
|
.st14{fill:url(#XMLID_27_);}
|
||||||
|
.st15{fill:url(#XMLID_28_);}
|
||||||
|
.st16{fill:url(#XMLID_29_);}
|
||||||
|
.st17{fill:url(#XMLID_30_);}
|
||||||
|
.st18{opacity:0.75;}
|
||||||
|
.st19{opacity:0.44;clip-path:url(#XMLID_31_);}
|
||||||
|
.st20{fill:url(#XMLID_32_);}
|
||||||
|
.st21{fill:url(#XMLID_33_);}
|
||||||
|
.st22{fill:url(#XMLID_34_);}
|
||||||
|
.st23{fill:url(#XMLID_35_);}
|
||||||
|
.st24{fill:url(#XMLID_37_);}
|
||||||
|
.st25{fill:url(#XMLID_38_);}
|
||||||
|
.st26{opacity:0.43;fill:#FFBC00;}
|
||||||
|
.st27{opacity:0.58;fill:#FFBC00;}
|
||||||
|
.st28{fill:#FFBE06;}
|
||||||
|
.st29{fill:none;}
|
||||||
|
.st30{fill:url(#XMLID_42_);}
|
||||||
|
.st31{fill:url(#XMLID_43_);}
|
||||||
|
.st32{fill:url(#XMLID_44_);}
|
||||||
|
.st33{fill:url(#XMLID_45_);}
|
||||||
|
.st34{fill:url(#XMLID_46_);}
|
||||||
|
.st35{fill:url(#SVGID_4_);}
|
||||||
|
.st36{fill:url(#SVGID_5_);}
|
||||||
|
.st37{fill:url(#SVGID_6_);}
|
||||||
|
.st38{fill:url(#SVGID_7_);}
|
||||||
|
.st39{fill:url(#SVGID_8_);}
|
||||||
|
.st40{fill:url(#SVGID_11_);}
|
||||||
|
.st41{fill:url(#SVGID_12_);}
|
||||||
|
.st42{fill:url(#SVGID_13_);}
|
||||||
|
.st43{fill:url(#SVGID_14_);}
|
||||||
|
.st44{fill:#C68D00;}
|
||||||
|
.st45{fill:#CE000F;}
|
||||||
|
</style>
|
||||||
|
<g>
|
||||||
|
<radialGradient id="XMLID_15_" cx="358.2692" cy="227.2655" r="830.0055" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0" style="stop-color:#F6971E"/>
|
||||||
|
<stop offset="0.6338" style="stop-color:#F4592D"/>
|
||||||
|
<stop offset="0.7025" style="stop-color:#EF4F29"/>
|
||||||
|
<stop offset="0.8178" style="stop-color:#E1351D"/>
|
||||||
|
<stop offset="0.9647" style="stop-color:#CA0B0B"/>
|
||||||
|
<stop offset="1" style="stop-color:#C40006"/>
|
||||||
|
</radialGradient>
|
||||||
|
<circle id="XMLID_124_" class="st1" cx="510.3" cy="511.9" r="502.8"/>
|
||||||
|
<linearGradient id="XMLID_16_" gradientUnits="userSpaceOnUse" x1="505.4734" y1="-52.674" x2="505.4734" y2="155.1105">
|
||||||
|
<stop offset="0" style="stop-color:#FFFFFF;stop-opacity:0.4"/>
|
||||||
|
<stop offset="1" style="stop-color:#FFFFFF;stop-opacity:0"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_59_" class="st4" d="M861.5,198.8c0,87.2-170.7-23.4-344.5-23.4S149.4,294.2,149.4,207S336.5,9,510.3,9
|
||||||
|
S861.5,111.7,861.5,198.8z"/>
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_17_" gradientUnits="userSpaceOnUse" x1="503.3253" y1="-583.7885" x2="503.3253" y2="-376.4571" gradientTransform="matrix(-1 0 0 -1 1017 456.5313)">
|
||||||
|
<stop offset="5.263158e-03" style="stop-color:#9E3A1D;stop-opacity:0.4"/>
|
||||||
|
<stop offset="1" style="stop-color:#9E3A1D;stop-opacity:0"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_61_" class="st5" d="M149.4,825.2c0-87.2,170.7,23.4,344.5,23.4s384.1-118.2,384.1-31S674.4,1015,500.7,1015
|
||||||
|
S149.4,912.3,149.4,825.2z"/>
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_18_" gradientUnits="userSpaceOnUse" x1="506.1886" y1="-38.7551" x2="506.1886" y2="169.0294" gradientTransform="matrix(4.489700e-11 1 -1 4.489700e-11 1026.6101 -2.3899)">
|
||||||
|
<stop offset="5.263158e-03" style="stop-color:#9E3A1D;stop-opacity:0.4"/>
|
||||||
|
<stop offset="1" style="stop-color:#9E3A1D;stop-opacity:0"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_63_" class="st6" d="M826.8,859.9c-87.2,0,23.4-170.7,23.4-344.5s-118.8-367.7-31.6-367.7s198,187.1,198,360.9
|
||||||
|
S914,859.9,826.8,859.9z"/>
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_19_" gradientUnits="userSpaceOnUse" x1="502.6101" y1="-660.7308" x2="502.6101" y2="-450.373" gradientTransform="matrix(-4.489700e-11 -1 1 -4.489700e-11 570.0789 1014.6101)">
|
||||||
|
<stop offset="0" style="stop-color:#FFFFFF;stop-opacity:0.4"/>
|
||||||
|
<stop offset="1" style="stop-color:#FFFFFF;stop-opacity:0"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_62_" class="st7" d="M200.5,147.7c87.2,0-23.4,170.7-23.4,344.5s118.2,384.1,31,384.1S11.3,701,7.4,512
|
||||||
|
C3.9,338.3,113.3,147.7,200.5,147.7z"/>
|
||||||
|
<g id="XMLID_39_" class="st10">
|
||||||
|
<defs>
|
||||||
|
|
||||||
|
<ellipse id="XMLID_36_" transform="matrix(0.8019 -0.5974 0.5974 0.8019 -204.724 406.2339)" class="st10" cx="510.3" cy="511.9" rx="502.8" ry="502.8"/>
|
||||||
|
</defs>
|
||||||
|
<clipPath id="XMLID_20_">
|
||||||
|
<use xlink:href="#XMLID_36_" style="overflow:visible;"/>
|
||||||
|
</clipPath>
|
||||||
|
</g>
|
||||||
|
<g id="XMLID_41_">
|
||||||
|
<linearGradient id="XMLID_21_" gradientUnits="userSpaceOnUse" x1="64.4989" y1="234.8705" x2="401.1502" y2="480.7042">
|
||||||
|
<stop offset="0" style="stop-color:#F4592D"/>
|
||||||
|
<stop offset="1" style="stop-color:#FFD900"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_7_" class="st9" d="M20.9,474.4c15.5-101.8,66.6-201.8,147-275.9c45.6-41.1,90.9-61.6,137.3-67.8
|
||||||
|
c81.7-8,131.9,63.4,129.6,168.8c0.2,3.6,1.9,4.5,3.6,5.4c8.1-23.2,13-44.6,13.2-65.2c-0.1-117-75.3-177.7-169-155.4
|
||||||
|
c39.7-9.8,77-7.1,110.5,10.7c27.1,17.9,46.5,42,61.9,77.7c10.4,33,14.3,66.1,10.8,108.9c-8.1,92-54.7,187.5-124.6,250
|
||||||
|
c-28.9,25.9-56.8,42-84.7,58l0.2,3.6c22.7,1.8,44.7-7.1,69.5-21.4c89.7-55.3,157.3-174.1,178.5-286.6
|
||||||
|
c-9.2,53.6-26.5,106.2-55,159.8c-25.9,44.6-52.4,82.1-90.3,117c-59.4,50.9-120.5,76.8-176.3,64.3C122.4,611,90.4,545.8,92.6,461
|
||||||
|
c-0.2-3.6-0.5-7.1-3.6-5.4c-1.4,2.7-4.3,8-5.7,10.7C69,517.3,77.1,562.8,91,601.2c25.5,65.2,86.8,87.5,153.7,75
|
||||||
|
c-39.7,9.8-77,7.1-110.5-10.7c-27.1-17.9-49.6-40.2-63.6-78.6c-14.7-49.1-19.9-100-0.2-165.2c24.9-83,69.1-166.1,136.9-212.5
|
||||||
|
c20-13.4,38.7-24.1,60.4-36.6c3.1-1.8,2.9-5.4,1.2-6.2C159.4,170,46.5,333.3,20.9,474.4L20.9,474.4z"/>
|
||||||
|
<linearGradient id="XMLID_22_" gradientUnits="userSpaceOnUse" x1="438.1351" y1="490.0881" x2="196.6566" y2="356.1772">
|
||||||
|
<stop offset="0" style="stop-color:#F64626"/>
|
||||||
|
<stop offset="1" style="stop-color:#FFD900"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_40_" style="fill:url(#XMLID_22_);" d="M86.7,460.9C98,387.2,135,314.8,193.2,261.1c33-29.7,65.9-44.6,99.4-49.1
|
||||||
|
c59.2-5.8,95.5,45.9,93.8,122.2c0.2,2.6,1.4,3.2,2.6,3.9c5.8-16.8,9.4-32.3,9.6-47.2c-0.1-84.7-54.6-128.7-122.4-112.5
|
||||||
|
c28.7-7.1,55.7-5.2,80,7.8c19.6,12.9,33.7,30.4,44.8,56.3c7.5,23.9,10.3,47.9,7.8,78.9c-5.9,66.6-39.6,135.8-90.2,181.1
|
||||||
|
c-20.9,18.8-41.1,30.4-61.4,42l0.2,2.6c16.5,1.3,32.4-5.2,50.3-15.5c65-40.1,113.9-126.1,129.3-207.6
|
||||||
|
c-6.6,38.8-19.2,77-39.9,115.8c-18.8,32.3-37.9,59.5-65.4,84.7c-43,36.9-87.3,55.6-127.7,46.6c-44-11-67.2-58.2-65.6-119.6
|
||||||
|
c-0.2-2.6-0.4-5.2-2.6-3.9c-1,1.9-3.1,5.8-4.1,7.8c-10.3,36.9-4.5,69.8,5.6,97.7c18.5,47.2,62.9,63.4,111.3,54.3
|
||||||
|
c-28.7,7.1-55.7,5.2-80-7.8c-19.6-12.9-35.9-29.1-46-56.9c-10.7-35.6-14.4-72.4-0.2-119.6c18-60.1,50.1-120.3,99.1-153.9
|
||||||
|
c14.5-9.7,28-17.5,43.7-26.5c2.2-1.3,2.1-3.9,0.9-4.5C187.1,240.4,105.3,358.8,86.7,460.9L86.7,460.9z"/>
|
||||||
|
</g>
|
||||||
|
<g id="XMLID_11_">
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_23_" gradientUnits="userSpaceOnUse" x1="-316.9261" y1="9.5862" x2="-92.0354" y2="173.8087" gradientTransform="matrix(-0.9998 -2.148304e-02 2.148304e-02 -0.9998 625.9278 811.8477)">
|
||||||
|
<stop offset="0" style="stop-color:#F4592D"/>
|
||||||
|
<stop offset="1" style="stop-color:#FFD900"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_13_" class="st11" d="M975.6,649.7c-11.8,67.8-47.4,133.8-102.1,182.1c-31,26.8-61.6,39.8-92.7,43.3
|
||||||
|
c-54.7,4.2-87.2-44.2-84.1-114.6c-0.1-2.4-1.2-3-2.3-3.6c-5.7,15.4-9.3,29.6-9.8,43.3c-1.6,78.1,47.8,119.8,110.6,106.2
|
||||||
|
c-26.6,6-51.5,3.7-73.6-8.7c-17.8-12.3-30.5-28.7-40.2-52.8c-6.5-22.2-8.6-44.3-5.7-72.9c6.7-61.3,39.2-124.4,86.8-165.2
|
||||||
|
c19.6-16.9,38.5-27.2,57.4-37.5l-0.1-2.4c-15.1-1.5-29.9,4.1-46.7,13.3c-60.7,35.7-107.6,114-123.3,188.8
|
||||||
|
c6.9-35.6,19.2-70.6,39-105.9c18-29.4,36.2-54.1,62-76.8c40.4-33.1,81.6-49.5,118.6-40.4c40.4,11,60.8,55,58.1,111.6
|
||||||
|
c0.1,2.4,0.2,4.8,2.3,3.6c1-1.8,3-5.3,4-7.1c10.2-33.8,5.5-64.3-3.3-90.2c-16.1-43.9-56.7-59.7-101.6-52.3
|
||||||
|
c26.6-6,51.5-3.7,73.6,8.7c17.8,12.3,32.6,27.5,41.3,53.4c9.1,33,11.8,67.1-2.2,110.3c-17.8,55.1-48.5,109.9-94.5,140
|
||||||
|
c-13.6,8.7-26.2,15.5-40.9,23.6c-2.1,1.1-2,3.5-0.9,4.2C878.7,851.1,956.4,743.6,975.6,649.7L975.6,649.7z"/>
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_24_" gradientUnits="userSpaceOnUse" x1="-52.9013" y1="188.0779" x2="-214.2144" y2="98.6225" gradientTransform="matrix(-0.9998 -2.148304e-02 2.148304e-02 -0.9998 625.9278 811.8477)">
|
||||||
|
<stop offset="0" style="stop-color:#F42C2D"/>
|
||||||
|
<stop offset="1" style="stop-color:#FFD900"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_12_" class="st12" d="M931.4,657.8c-8.6,49.1-34.3,96.9-74,131.9c-22.5,19.4-44.6,28.9-67.1,31.4
|
||||||
|
c-39.6,3-63.2-32-60.9-83c-0.1-1.7-0.9-2.2-1.7-2.6c-4.1,11.1-6.8,21.5-7.1,31.4c-1.2,56.6,34.6,86.7,80.1,76.9
|
||||||
|
c-19.3,4.3-37.3,2.7-53.3-6.3c-12.9-8.9-22.1-20.8-29.1-38.2c-4.7-16.1-6.2-32.1-4.1-52.8c4.9-44.4,28.4-90.1,62.9-119.6
|
||||||
|
c14.2-12.2,27.9-19.7,41.6-27.2l-0.1-1.7c-11-1.1-21.7,3-33.8,9.6c-44,25.8-77.9,82.6-89.3,136.8c5-25.8,13.9-51.1,28.3-76.7
|
||||||
|
c13-21.3,26.2-39.2,44.9-55.6c29.3-24,59.1-35.9,85.9-29.3c29.2,8,44,39.8,42.1,80.8c0.1,1.7,0.2,3.5,1.7,2.6
|
||||||
|
c0.7-1.3,2.2-3.8,2.9-5.1c7.4-24.5,4-46.6-2.4-65.3c-11.7-31.8-41.1-43.2-73.6-37.9c19.3-4.3,37.3-2.7,53.3,6.3
|
||||||
|
c12.9,8.9,23.6,20,29.9,38.7c6.6,23.9,8.6,48.6-1.6,79.9c-12.9,39.9-35.2,79.6-68.4,101.4c-9.8,6.3-19,11.3-29.6,17.1
|
||||||
|
c-1.5,0.8-1.4,2.6-0.6,3C861.2,803.6,917.5,725.7,931.4,657.8L931.4,657.8z"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 880 B After Width: | Height: | Size: 9.1 KiB |
@@ -23,6 +23,8 @@ export default class {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static deleteTableRows (params) {
|
static deleteTableRows (params) {
|
||||||
|
delete params.row._id;
|
||||||
|
delete params.orgRow._id;
|
||||||
return ipcRenderer.invoke('delete-table-rows', params);
|
return ipcRenderer.invoke('delete-table-rows', params);
|
||||||
}
|
}
|
||||||
|
|
||||||
|