diff --git a/.github/assets/DO.svg b/.github/assets/DO.svg new file mode 100644 index 00000000..f9752c2e --- /dev/null +++ b/.github/assets/DO.svg @@ -0,0 +1,30 @@ + diff --git a/.github/assets/MySigMail.svg b/.github/assets/MySigMail.svg new file mode 100644 index 00000000..e34a7c21 --- /dev/null +++ b/.github/assets/MySigMail.svg @@ -0,0 +1,8 @@ + diff --git a/.github/assets/subscribe.gif b/.github/assets/subscribe.gif new file mode 100644 index 00000000..43a5e006 Binary files /dev/null and b/.github/assets/subscribe.gif differ diff --git a/CHANGELOG.md b/CHANGELOG.md index b510204a..aeebfd6a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,12 @@ +## [3.4.1](https://github.com/massCodeIO/massCode/compare/v3.4.0...v3.4.1) (2022-08-29) + + +### Bug Fixes + +* **grammars:** update xml & xsl [#263](https://github.com/massCodeIO/massCode/issues/263) ([#268](https://github.com/massCodeIO/massCode/issues/268)) ([fa79043](https://github.com/massCodeIO/massCode/commit/fa7904344f1261bcba5f2b711fd290d33275afc8)) + + + # [3.4.0](https://github.com/massCodeIO/massCode/compare/v3.3.0...v3.4.0) (2022-08-22) diff --git a/README.md b/README.md index 601870e2..c6618421 100644 --- a/README.md +++ b/README.md @@ -31,6 +31,19 @@ Alfred
++ SPONSORS +
+ + ## Support @@ -89,6 +102,8 @@ The goal of creating this application was mostly my own growth as a developer. A - News and updates on [Twitter](https://twitter.com/anton_reshetov). - [Discussions](https://github.com/massCodeIO/massCode/discussions). + + ## Other You can also [download](https://github.com/antonreshetov/massCode) massCode v1. diff --git a/package.json b/package.json index 42daf251..45f45f3d 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "masscode", "productName": "massCode", - "version": "3.4.1", + "version": "3.5.0", "description": "A free and open source code snippets manager for developers", "license": "AGPL-3.0", "main": "build/src/main/index.js", @@ -50,11 +50,11 @@ "codemirror": "^5.65.7", "codemirror-textmate": "^1.1.0", "date-fns": "^2.28.0", + "dom-to-image": "^2.6.0", "electron-store": "^8.0.1", "floating-vue": "^2.0.0-beta.17", "fs-extra": "^10.0.1", "highlight.js": "^11.5.1", - "html2canvas": "^1.4.1", "i18next": "^21.8.14", "i18next-fs-backend": "^1.1.4", "interactjs": "^1.10.11", @@ -83,6 +83,7 @@ "@commitlint/config-conventional": "^15.0.0", "@tsconfig/node14": "^1.0.1", "@types/codemirror": "^5.60.5", + "@types/dom-to-image": "^2.6.4", "@types/estree": "^0.0.51", "@types/i18next-fs-backend": "^1.1.2", "@types/lowdb": "^1.0.11", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3600af11..d9cda0be 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11,6 +11,7 @@ specifiers: '@sipec/vue3-tags-input': ^3.0.4 '@tsconfig/node14': ^1.0.1 '@types/codemirror': ^5.60.5 + '@types/dom-to-image': ^2.6.4 '@types/estree': ^0.0.51 '@types/i18next-fs-backend': ^1.1.2 '@types/lowdb': ^1.0.11 @@ -36,6 +37,7 @@ specifiers: codemirror-textmate: ^1.1.0 copyfiles: ^2.4.1 date-fns: ^2.28.0 + dom-to-image: ^2.6.0 dotenv: ^16.0.1 electron: ^16.2.3 electron-builder: ^23.1.0 @@ -52,7 +54,6 @@ specifiers: fs-extra: ^10.0.1 handlebars: ^4.7.7 highlight.js: ^11.5.1 - html2canvas: ^1.4.1 husky: ^7.0.0 i18next: ^21.8.14 i18next-fs-backend: ^1.1.4 @@ -100,11 +101,11 @@ dependencies: codemirror: 5.65.7 codemirror-textmate: 1.1.0_codemirror@5.65.7+onigasm@2.2.5 date-fns: 2.28.0 + dom-to-image: 2.6.0 electron-store: 8.0.1 floating-vue: 2.0.0-beta.17_vue@3.2.33 fs-extra: 10.0.1 highlight.js: 11.5.1 - html2canvas: 1.4.1 i18next: 21.8.14 i18next-fs-backend: 1.1.4 interactjs: 1.10.11 @@ -133,6 +134,7 @@ devDependencies: '@commitlint/config-conventional': 15.0.0 '@tsconfig/node14': 1.0.1 '@types/codemirror': 5.60.5 + '@types/dom-to-image': 2.6.4 '@types/estree': 0.0.51 '@types/i18next-fs-backend': 1.1.2 '@types/lowdb': 1.0.11 @@ -2111,6 +2113,10 @@ packages: '@types/ms': 0.7.31 dev: true + /@types/dom-to-image/2.6.4: + resolution: {integrity: sha512-UddUdGF1qulrSDulkz3K2Ypq527MR6ixlgAzqLbxSiQ0icx0XDlIV+h4+edmjq/1dqn0KgN0xGSe1kI9t+vGuw==} + dev: true + /@types/ejs/2.7.0: resolution: {integrity: sha512-kM2g9Fdk/du24fKuuQhA/LBleFR4Z4JP2MVKpLxQQSzofF1uJ06D+c05zfLDAkkDO55aEeNwJih0gHrE/Ci20A==} dev: true @@ -3682,11 +3688,6 @@ packages: pascalcase: 0.1.1 dev: true - /base64-arraybuffer/1.0.2: - resolution: {integrity: sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==} - engines: {node: '>= 0.6.0'} - dev: false - /base64-js/1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} dev: true @@ -4724,12 +4725,6 @@ packages: timsort: 0.3.0 dev: false - /css-line-break/2.1.0: - resolution: {integrity: sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==} - dependencies: - utrie: 1.0.2 - dev: false - /css-select-base-adapter/0.1.1: resolution: {integrity: sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==} dev: false @@ -5722,6 +5717,10 @@ packages: domhandler: 4.3.0 entities: 2.2.0 + /dom-to-image/2.6.0: + resolution: {integrity: sha512-Dt0QdaHmLpjURjU7Tnu3AgYSF2LuOmksSGsUcE6ItvJoCWTBEmiMXcqBdNSAm9+QbbwD7JMoVsuuKX6ZVQv1qA==} + dev: false + /domelementtype/1.3.1: resolution: {integrity: sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==} dev: false @@ -7869,14 +7868,6 @@ packages: resolution: {integrity: sha1-wc56MWjIxmFAM6S194d/OyJfnDg=} dev: false - /html2canvas/1.4.1: - resolution: {integrity: sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==} - engines: {node: '>=8.0.0'} - dependencies: - css-line-break: 2.1.0 - text-segmentation: 1.0.3 - dev: false - /htmlparser2/6.1.0: resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==} dependencies: @@ -12114,12 +12105,6 @@ packages: engines: {node: '>=0.10'} dev: true - /text-segmentation/1.0.3: - resolution: {integrity: sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==} - dependencies: - utrie: 1.0.2 - dev: false - /text-table/0.2.0: resolution: {integrity: sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=} dev: true @@ -12759,12 +12744,6 @@ packages: resolution: {integrity: sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=} engines: {node: '>= 0.4.0'} - /utrie/1.0.2: - resolution: {integrity: sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==} - dependencies: - base64-arraybuffer: 1.0.2 - dev: false - /uuid/3.4.0: resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==} deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. diff --git a/src/main/services/i18n/language.ts b/src/main/services/i18n/language.ts index 9cc30910..e6100bf5 100644 --- a/src/main/services/i18n/language.ts +++ b/src/main/services/i18n/language.ts @@ -1,8 +1,10 @@ export const language = { de_DE: 'Deutsch', + el: 'Ελληνικά', en: 'English', es_ES: 'Español', pt_BR: 'Português (Brasil)', + uk_UA: 'Українська', ru: 'Русский', zh_CN: '中文 (简体)', zh_TW: '中文 (繁體)', diff --git a/src/main/services/i18n/locales/el/common.json b/src/main/services/i18n/locales/el/common.json new file mode 100644 index 00000000..14a7c988 --- /dev/null +++ b/src/main/services/i18n/locales/el/common.json @@ -0,0 +1,64 @@ +{ + "button": { + "moveStorage": "Μετακίνηση Αποθηκευτικού Χώρου", + "openStorage": "Άνοιγμα Αποθηκευτικού Χώρου", + "newStorage": "Νέος Αποθηκευτικός Χώρος", + "fromMassCodeV1": "Από massCode v1.0", + "fromSnippetsLab": "Από SnippetsLab", + "confirm": "Επιβεβαίωση", + "cancel": "Ακύρωση", + "update": ["Μετάβαση στο GitHub", "Εντάξει"], + "ok": "Εντάξει" + }, + "newFolder": "Νέος Φάκελος", + "newSnippet": "Νέο Απόσπασμα", + "newFragment": "Νέο Τμήμα", + "addDescription": "Προσθήκη Περιγραφής", + "addToFavorites": "Προσθήκη στα Αγαπημένα", + "addTag": "Προσθήκη Ετικέτας", + "exportToHtml": "Εξαγωγή σε HTML", + "saveScreenshot": "Αποθήκευση Στιγμιοτύπου Οθόνης", + "rename": "Μετονομασία", + "duplicate": "Αντίγραφο", + "delete": "Διαγραφή", + "deleteNow": "Διαγραφή Τώρα", + "defaultLanguage": "Προεπιλεγμένη Γλώσσα", + "removeFromFavorites": "Αφαίρεση από τα Αγαπημένα", + "emptyTrash": "Άδειασμα Κάδου", + "close": "Κλείσιμο", + "folder": { + "untitled": "Άτιτλος φάκελος", + "plural": "Φάκελοι" + }, + "snippet": { + "untitled": "Άτιτλο Απόσπασμα", + "plural": "Αποσπάσματα", + "emptyName": "Πληκτρολογήστε ονομασία αποσπάσματος", + "selectedMultiple": "{{count}} Αποσπάσματα Επιλέχθηκαν", + "noSelected": "Δεν Επιλέχθηκε Απόσπασμα" + }, + "fragment": "Τμήμα", + "search": "Αναζήτηση", + "line": "Γραμμή", + "column": "Στήλη", + "sidebar": { + "inbox": "Εισερχόμενα", + "favorites": "Αγαπημένα", + "allSnippets": "Όλα τα Αποσπάσματα", + "trash": "Κάδος", + "untitled": "Άτιτλος φάκελος", + "folders": "Φάκελοι", + "library": "Βιβλιοθήκη", + "tags": "Ετικέτες" + }, + "darkMode": "Σκοτεινή Λειτουργία", + "background": "Φόντο", + "restartApp": "Επανεκκίνηση του massCode", + "updateAvailable": "Διαθέσιμη Ενημέρωση", + "hide": "Απόκρυψη", + "show": "Εμφάνιση", + "collapse-all": "Απόκρυψη Όλων", + "expand-all": "Εμφάνιση Όλων", + "restore": "Επαναφορά", + "copy-snippet-link": "Αντιγραφή Συνδέσμου Αποσπάσματος" +} diff --git a/src/main/services/i18n/locales/el/dialog.json b/src/main/services/i18n/locales/el/dialog.json new file mode 100644 index 00000000..6850a52f --- /dev/null +++ b/src/main/services/i18n/locales/el/dialog.json @@ -0,0 +1,13 @@ +{ + "deleteConfirm": "Είστε σίγουροι ότι θέλετε να διαγράψετε οριστικά το {{name}};", + "deleteConfirmMultipleSnippets": "Είστε σίγουροι ότι θέλετε να διαγράψετε οριστικά {{count}} επιλεγμένα αποσπάσματα;", + "noUndo": "Δεν μπορείτε να αναιρέσετε αυτήν την ενέργεια.", + "allSnippetsMoveToTrash": "Όλα τα αποσπάσματα σε αυτόν τον φάκελο θα μετακινηθούν στον Κάδο.", + "deleteTag": "Αυτό θα προκαλέσει επίσης την αφαίρεση αυτής της ετικέτας από όλα τα αποσπάσματα.", + "emptyTrash": "Είστε σίγουροι ότι θέλετε να διαγράψετε οριστικά όλα τα αποσπάσματα στον Κάδο;", + "migrateConfirm": [ + "Θέλετε σίγουρα να μεταφέρετε από το {{name}};", + "Κατά την μεταφορά, η παρούσα βιβλιοθήκη θα αντικατασταθεί." + ], + "createDb": "Παρακαλούμε επιλέξτε άλλο φάκελο" +} diff --git a/src/main/services/i18n/locales/el/menu.json b/src/main/services/i18n/locales/el/menu.json new file mode 100644 index 00000000..6981fec0 --- /dev/null +++ b/src/main/services/i18n/locales/el/menu.json @@ -0,0 +1,85 @@ +{ + "app": { + "label": "massCode", + "preferences": "Προτιμήσεις", + "update": { + "label": "Έλεγχος για Ενημερώσεις....", + "message": "Η έκδοση {{newVersion}} είναι διαθέσιμη για λήψη.\nΗ έκδοσή σας είναι {{oldVersion}}.", + "button": ["Μεταβείτε στην Λήψη", "Εντάξει"], + "noUpdate": "Δεν υπάρχουν διαθέσιμες ενημερώσεις." + }, + "quit": "Έξοδος από το massCode", + "about": "Σχετικά με το massCode", + "hide": "Απόκρυψη του massCode", + "hideOther": "Απόκρυψη Υπολοίπων", + "showAll": "Εμφάνιση Όλων" + }, + "help": { + "label": "Βοήθεια", + "website": "Ιστότοπος", + "documentation": "Τεκμηρίωση", + "viewInGitHub": "Προβολή στο GitHub", + "changeLog": "Αρχείο Καταγραφής Αλλαγών", + "reportIssue": "Αναφορά Προβλήματος", + "giveStar": "Δώστε ένα Αστέρι", + "extension": { + "vscode": "Επέκταση VS Code", + "raycast": "Επέκταση Raycast", + "alfred": "Επέκταση Alfred" + }, + "donate": { + "openCollective": "Συνεισφέρετε στο Open Collective", + "payPal": "Συνεισφέρετε μέσω PayPal", + "gumroad": "Συνεισφέρετε μέσω Gumroad (Visa, Mastercard, κλπ.)" + }, + "twitter": "Twitter", + "devTools": "Εναλλαγή των Developer Tools", + "links": { + "snippets": "Συλλογή Αποσπασμάτων" + } + }, + "file": { + "label": "Αρχείο", + "find": "Εύρεση" + }, + "view": { + "label": "Προβολή", + "sortBy": { + "label": "Ταξινόμηση Αποκομμάτων Κατά", + "dateModified": "Ημερομηνία Τροποποίησης", + "dateCreated": "Ημερομηνία Δημιουργίας", + "name": "Ονομασία" + } + }, + "edit": { + "label": "Επεξεργασία", + "undo": "Αναίρεση", + "redo": "Επανάληψη", + "cut": "Αποκοπή", + "copy": "Αντιγραφή", + "paste": "Επικόλληση", + "delete": "Διαγραφή", + "selectAll": "Επιλογή Όλων" + }, + "editor": { + "label": "Διορθωτής", + "copy": "Αντιγραφή Αποσπάσματος στο Πρόχειρο", + "format": "Μορφοποίηση", + "previewCode": "Προεπισκόπηση Κώδικα", + "previewScreenshot": "Προεπισκόπηση Στιγμιοτύπου Οθόνης", + "previewMarkdown": "Προεπισκόπηση Markdown", + "fontSizeIncrease": "Μέγεθος Γραμματοσειράς Αύξηση", + "fontSizeDecrease": "Μέγεθος Γραμματοσειράς Μείωση", + "fontSizeReset": "Μέγεθος Γραμματοσειράς Επαναφορά" + }, + "markdown": { + "label": "Markdown", + "presentationMode": "Λειτουργία Παρουσίασης", + "preview": "Προεπισκόπηση" + }, + "history": { + "label": "Ιστορικό", + "back": "Πίσω", + "forward": "Μπροστά" + } +} diff --git a/src/main/services/i18n/locales/el/preferences.json b/src/main/services/i18n/locales/el/preferences.json new file mode 100644 index 00000000..1799f8d2 --- /dev/null +++ b/src/main/services/i18n/locales/el/preferences.json @@ -0,0 +1,49 @@ +{ + "title": "Προτιμήσεις", + "storage": { + "label": "Αποθηκευτικός Χώρος", + "migrate": "Μετακίνηση", + "count": "Καταμέτρηση" + }, + "editor": { + "label": "Διορθωτής", + "fontSize": "Μέγεθος Γραμματοσειράς", + "fontFamily": "Γραμματοσειρά", + "wrap": { + "label": "Αναδίπλωση", + "wordWrap": "Αναδίπλωση Λέξεων", + "off": "Ανενεργό" + }, + "tabSize": "Μέγεθος Tab", + "showInvisibles": "Εμφάνιση Κρυφών", + "highlightLine": "Επισήμανση Γραμμής", + "highlightGutter": "Επισήμανση Περιθωρίου", + "matchBrackets": "Αντιστοίχιση Αγκύλων", + "prettier": { + "label": "Prettier", + "trailingComma": { + "label": "Κόμμα Ουράς", + "none": "Καθόλου", + "all": "Όλα", + "es6": "ES6" + }, + "semi": "Semi", + "singleQuote": "Μονά Εισαγωγικά" + } + }, + "appearance": { + "label": "Εμφάνιση", + "theme": { + "label": "Θέμα", + "light": "Φωτεινό", + "dark": "Σκοτεινό" + } + }, + "language": { + "label": "Γλώσσα" + }, + "markdown": { + "label": "Markdown", + "codeRenderer": "Απεικόνιση Μπλοκ Κώδικα" + } +} diff --git a/src/main/services/i18n/locales/el/special.json b/src/main/services/i18n/locales/el/special.json new file mode 100644 index 00000000..c6c1c030 --- /dev/null +++ b/src/main/services/i18n/locales/el/special.json @@ -0,0 +1,29 @@ +{ + "description": { + "storage": "Για να χρησιμοποιήσετε υπηρεσίες συγχρονισμού όπως iCloud Drive, Google Drive ή Dropbox, απλώς μεταφέρετε τον αποθηκευτικό χώρο στους αντίστοιχους συγχρονισμένους φακέλους", + "migrate": { + "1": "Για μεταφορά από το massCode v1.0 επιλέξτε τον φάκελο που περιέχει τα αρχεία της βάσης δεδομένων.", + "2": "Για μεταφορά από το SnippetsLab επιλέξτε αρχείο JSON.", + "3": [ + "Ορισμένοι Περιορισμοί. Κατά την μεταφορά από το SnippetsLab:", + "Όλοι οι φάκελοι θα είναι πρώτου επιπέδου καθώς το αρχείο JSON (κάτω από την έκδοση 2.1) δεν αντιπροσωπεύει ένθετους φακέλους.", + "Αποσπάσματα με μη υποστηριζόμενες γλώσσες θα ορίζονται ως Απλό Κείμενο (προεπιλογή)." + ] + }, + "htmlCssPreview": "Προσθέστε τμήματα με γλώσσες HTML & CSS για να δείτε αποτέλεσμα.", + "codeBlockRenderer": [ + "Όταν χρησιμοποιείτε το Codemirror, η γλώσσα που θα οριστεί για το μπλοκ κώδικα πρέπει να αντιστοιχεί σε μία από τις τιμές των", + "γλωσσών" + ] + }, + "success": { + "migrate": "Η DB μετακινήθηκε επιτυχώς." + }, + "error": { + "folderContainDb": "Ο φάκελος περιέχει ήδη το \"db.json\".", + "folderNotContainDb": "Ο φάκελος δεν περιέχει το \"db.json\"." + }, + "unsponsored": "Χωρίς Χορηγία", + "supportMessage": "Γειά, Anton εδώ 👋