1
0
mirror of https://github.com/laurent22/joplin.git synced 2025-08-24 20:19:10 +02:00

Compare commits

...

23 Commits

Author SHA1 Message Date
Laurent Cozic
26fc26c9fe CLI v1.0.109 2018-06-28 20:49:26 +01:00
Laurent Cozic
df4c07d204 CLI: Added way to decrypt string 2018-06-28 20:48:39 +01:00
Laurent Cozic
cf565d1563 Android release v1.0.129 2018-06-27 22:02:15 +01:00
Laurent Cozic
6b425cf543 Electron release v1.0.104 2018-06-27 22:00:38 +01:00
Laurent Cozic
6188e7a0fa Updated translations 2018-06-27 22:00:02 +01:00
Laurent Cozic
310afb0ad6 Electron: Resolves #612: Allow duplicating a note 2018-06-27 21:45:31 +01:00
Laurent Cozic
7d7e1e1637 Electron: Resolves #647: Allow specifying text editor path and arguments in setting 2018-06-27 21:34:41 +01:00
Laurent Cozic
424c8a2723 Clipper: Support 'author' property 2018-06-27 20:14:20 +01:00
Laurent Cozic
187fb1b85d Electron: Resolves #619: Context menu to cut, copy and paste. Also added menu to copy link in web view 2018-06-26 00:52:46 +01:00
Laurent Cozic
595fd7a9aa All: Resolves #644: Added support for .markdown extension when importing files 2018-06-26 00:07:53 +01:00
Laurent Cozic
0027cb9036 All: Fixes #646: Mentioned that TLS settings must be saved before checking sync config 2018-06-25 23:54:28 +01:00
Laurent Cozic
db6878b978 Electron: Fixes #639: Make sure text wraps when printing or exporting as PDF 2018-06-25 23:32:23 +01:00
Laurent Cozic
1c78722573 CLI: Upgraded Turndown plugins 2018-06-25 18:19:27 +01:00
Laurent Cozic
fea83e28c4 All: Optimised encryption and decryption of items so that it doesn't freeze the UI, especially on mobile 2018-06-25 18:14:57 +01:00
Laurent Cozic
84adf64271 Electron: Set PDF default file name 2018-06-22 18:36:15 +00:00
Laurent Cozic
74e2b0d15d Electron: Fixes #634: Press ESC to dismiss dialog in non-English languages 2018-06-22 18:31:55 +00:00
Laurent Cozic
df302206dd Electron: Allow HTML in Markdown documents in a secure way 2018-06-22 18:18:15 +00:00
Laurent Cozic
6d8941c005 Update website 2018-06-21 22:14:47 +01:00
Laurent Cozic
971b20062f Electron release v1.0.103 2018-06-21 19:13:10 +01:00
Laurent Cozic
936f334b61 Electron: Remove 'New notebook' shortcut 2018-06-21 19:12:08 +01:00
Laurent Cozic
7e3a290939 Merge pull request #628 from Abijeet/master
Adds a shortcut to insert the date and time.
2018-06-21 19:09:36 +01:00
Abijeet Patro
01d032261c Merge branch 'master' into master 2018-06-18 23:32:10 +05:30
Abijeet
07b85388fc Adds a shortcut to insert the date and time.
Closes #521
2018-06-16 20:46:27 +05:30
97 changed files with 1096 additions and 531 deletions

View File

@@ -47,30 +47,35 @@ class Command extends BaseCommand {
}
if (args.command === 'decrypt') {
this.stdout(_('Starting decryption... Please wait as it may take several minutes depending on how much there is to decrypt.'));
if (args.path) {
const plainText = await EncryptionService.instance().decryptString(args.path);
this.stdout(plainText);
} else {
this.stdout(_('Starting decryption... Please wait as it may take several minutes depending on how much there is to decrypt.'));
while (true) {
try {
await DecryptionWorker.instance().start();
break;
} catch (error) {
if (error.code === 'masterKeyNotLoaded') {
const masterKeyId = error.masterKeyId;
const password = await this.prompt(_('Enter master password:'), { type: 'string', secure: true });
if (!password) {
this.stdout(_('Operation cancelled'));
return;
while (true) {
try {
await DecryptionWorker.instance().start();
break;
} catch (error) {
if (error.code === 'masterKeyNotLoaded') {
const masterKeyId = error.masterKeyId;
const password = await this.prompt(_('Enter master password:'), { type: 'string', secure: true });
if (!password) {
this.stdout(_('Operation cancelled'));
return;
}
Setting.setObjectKey('encryption.passwordCache', masterKeyId, password);
await EncryptionService.instance().loadMasterKeysFromSettings();
continue;
}
Setting.setObjectKey('encryption.passwordCache', masterKeyId, password);
await EncryptionService.instance().loadMasterKeysFromSettings();
continue;
throw error;
}
throw error;
}
}
this.stdout(_('Completed decryption.'));
this.stdout(_('Completed decryption.'));
}
return;
}

View File

@@ -638,6 +638,9 @@ msgstr ""
msgid "Italic"
msgstr ""
msgid "Insert Date Time"
msgstr ""
msgid "Edit in external editor"
msgstr ""
@@ -769,12 +772,15 @@ msgstr "Comprova la configuració de la sincronització"
msgid "Notes and settings are stored in: %s"
msgstr "Les notes i la configuració es desen a: %s"
msgid "Save"
msgstr "Desa"
msgid "Apply"
msgstr ""
msgid "Submit"
msgstr "Tramet"
msgid "Save"
msgstr "Desa"
msgid ""
"Disabling encryption means *all* your notes and attachments are going to be "
"re-synchronised and sent unencrypted to the sync target. Do you wish to "
@@ -913,6 +919,13 @@ msgstr "Establiu la contrasenya"
msgid "Add or remove tags"
msgstr "Afegeix o suprimeix etiquetes"
msgid "Duplicate"
msgstr ""
#, fuzzy, javascript-format
msgid "%s - Copy"
msgstr "Copia"
msgid "Switch between note and to-do type"
msgstr "Alterna entre el tipus nota i tasques pendents"
@@ -947,6 +960,9 @@ msgstr "Anomena i desa..."
msgid "Copy path to clipboard"
msgstr "Copia el camí al porta-retalls"
msgid "Copy Link Address"
msgstr ""
#, javascript-format
msgid "Unsupported link or message: %s"
msgstr "Missatge o enllaç no suportat: %s"
@@ -1220,16 +1236,6 @@ msgstr "No es pot copiar la nota al bloc de notes «%s»"
msgid "Cannot move note to \"%s\" notebook"
msgstr "No es pot moure la nota al bloc de notes «%s»"
msgid "Text editor"
msgstr "Editor de text"
msgid ""
"The editor that will be used to open a note. If none is provided it will try "
"to auto-detect the default editor."
msgstr ""
"L'editor que s'usarà per a obrir una nota. Si no s'indica cap, intentarà "
"detectar automàticament l'editor predeterminat."
msgid "Language"
msgstr "Llengua"
@@ -1313,6 +1319,18 @@ msgstr "%d hora"
msgid "%d hours"
msgstr "%d hores"
#, fuzzy
msgid "Text editor command"
msgstr "Editor de text"
#, fuzzy
msgid ""
"The editor command (may include arguments) that will be used to open a note. "
"If none is provided it will try to auto-detect the default editor."
msgstr ""
"L'editor que s'usarà per a obrir una nota. Si no s'indica cap, intentarà "
"detectar automàticament l'editor predeterminat."
msgid "Show advanced options"
msgstr "Mostra les opcions avançades"
@@ -1360,7 +1378,8 @@ msgstr ""
msgid ""
"Comma-separated list of paths to directories to load the certificates from, "
"or path to individual cert files. For example: /my/cert_dir, /other/custom."
"pem"
"pem. Note that if you make changes to the TLS settings, you must save your "
"changes before clicking on \"Check synchronisation configuration\"."
msgstr ""
msgid "Ignore TLS certificate errors"

View File

@@ -620,6 +620,9 @@ msgstr ""
msgid "Italic"
msgstr ""
msgid "Insert Date Time"
msgstr ""
msgid "Edit in external editor"
msgstr ""
@@ -744,12 +747,15 @@ msgstr "Zkontrolujte nastavení synchronizace"
msgid "Notes and settings are stored in: %s"
msgstr "Poznámky a nastavení uloženo v: %s"
msgid "Save"
msgstr "Uložit"
msgid "Apply"
msgstr ""
msgid "Submit"
msgstr ""
msgid "Save"
msgstr "Uložit"
msgid ""
"Disabling encryption means *all* your notes and attachments are going to be "
"re-synchronised and sent unencrypted to the sync target. Do you wish to "
@@ -885,6 +891,13 @@ msgstr "Nastavit heslo"
msgid "Add or remove tags"
msgstr "Přidat či odebrat tagy"
msgid "Duplicate"
msgstr ""
#, fuzzy, javascript-format
msgid "%s - Copy"
msgstr "Kopírovat"
msgid "Switch between note and to-do type"
msgstr "Přepnout mezi poznámkou a to-do"
@@ -918,6 +931,9 @@ msgstr "Uložit jako..."
msgid "Copy path to clipboard"
msgstr ""
msgid "Copy Link Address"
msgstr ""
#, javascript-format
msgid "Unsupported link or message: %s"
msgstr "Nepodporovaný link či zpráva: %s"
@@ -1194,16 +1210,6 @@ msgstr "Poznámku \"%s\" nelze zkopírovat do zápisníku"
msgid "Cannot move note to \"%s\" notebook"
msgstr "Poznámku nelze přesunout do zápisníku \"%s\""
msgid "Text editor"
msgstr "Textový editor"
msgid ""
"The editor that will be used to open a note. If none is provided it will try "
"to auto-detect the default editor."
msgstr ""
"Editor ve kterém budou otvírány poznámky. Pokud není specifikováno, aplikace "
"se pokusí o autodetekci defaultního editoru."
msgid "Language"
msgstr "Jazyk"
@@ -1288,6 +1294,18 @@ msgstr "%d hodina"
msgid "%d hours"
msgstr "%d hodin"
#, fuzzy
msgid "Text editor command"
msgstr "Textový editor"
#, fuzzy
msgid ""
"The editor command (may include arguments) that will be used to open a note. "
"If none is provided it will try to auto-detect the default editor."
msgstr ""
"Editor ve kterém budou otvírány poznámky. Pokud není specifikováno, aplikace "
"se pokusí o autodetekci defaultního editoru."
msgid "Show advanced options"
msgstr "Ukázat pokročilé volby"
@@ -1335,7 +1353,8 @@ msgstr ""
msgid ""
"Comma-separated list of paths to directories to load the certificates from, "
"or path to individual cert files. For example: /my/cert_dir, /other/custom."
"pem"
"pem. Note that if you make changes to the TLS settings, you must save your "
"changes before clicking on \"Check synchronisation configuration\"."
msgstr ""
msgid "Ignore TLS certificate errors"

View File

@@ -625,6 +625,9 @@ msgstr ""
msgid "Italic"
msgstr ""
msgid "Insert Date Time"
msgstr ""
msgid "Edit in external editor"
msgstr ""
@@ -749,12 +752,15 @@ msgstr "Check synkroniserings Indstillinger"
msgid "Notes and settings are stored in: %s"
msgstr "Noter og indstillinger er gemt i: %s"
msgid "Save"
msgstr "Gem"
msgid "Apply"
msgstr ""
msgid "Submit"
msgstr "Gem"
msgid "Save"
msgstr "Gem"
msgid ""
"Disabling encryption means *all* your notes and attachments are going to be "
"re-synchronised and sent unencrypted to the sync target. Do you wish to "
@@ -894,6 +900,13 @@ msgstr "Indstil kodeord"
msgid "Add or remove tags"
msgstr "Tilføj eller slet mærker"
msgid "Duplicate"
msgstr ""
#, fuzzy, javascript-format
msgid "%s - Copy"
msgstr "Kopier"
msgid "Switch between note and to-do type"
msgstr "Skift mellem note- og opgave type"
@@ -927,6 +940,9 @@ msgstr "Gem som..."
msgid "Copy path to clipboard"
msgstr ""
msgid "Copy Link Address"
msgstr ""
#, javascript-format
msgid "Unsupported link or message: %s"
msgstr "Ugyldigt- eller ulovligt link eller besked: %s"
@@ -1203,16 +1219,6 @@ msgstr "Kan ikke kopiere note til \"%s\" notesbog"
msgid "Cannot move note to \"%s\" notebook"
msgstr "Kan ikke flytte note til \"%s\" notesbog"
msgid "Text editor"
msgstr "Tekst editor"
msgid ""
"The editor that will be used to open a note. If none is provided it will try "
"to auto-detect the default editor."
msgstr ""
"Editor der bruges til at åbne note. Hvis ingen valgt/udfyldt, vil auto-"
"funktion søge efter standard editor."
msgid "Language"
msgstr "Sprog"
@@ -1297,6 +1303,18 @@ msgstr "%d time"
msgid "%d hours"
msgstr "%d timer"
#, fuzzy
msgid "Text editor command"
msgstr "Tekst editor"
#, fuzzy
msgid ""
"The editor command (may include arguments) that will be used to open a note. "
"If none is provided it will try to auto-detect the default editor."
msgstr ""
"Editor der bruges til at åbne note. Hvis ingen valgt/udfyldt, vil auto-"
"funktion søge efter standard editor."
msgid "Show advanced options"
msgstr "Vis avancerede indstillinger"
@@ -1344,7 +1362,8 @@ msgstr ""
msgid ""
"Comma-separated list of paths to directories to load the certificates from, "
"or path to individual cert files. For example: /my/cert_dir, /other/custom."
"pem"
"pem. Note that if you make changes to the TLS settings, you must save your "
"changes before clicking on \"Check synchronisation configuration\"."
msgstr ""
msgid "Ignore TLS certificate errors"

View File

@@ -649,6 +649,9 @@ msgstr ""
msgid "Italic"
msgstr ""
msgid "Insert Date Time"
msgstr ""
msgid "Edit in external editor"
msgstr ""
@@ -782,12 +785,15 @@ msgstr "Überprüfen der Synchronisationseinstellungen"
msgid "Notes and settings are stored in: %s"
msgstr "Notizen und Einstellungen werden gespeichert in: %s"
msgid "Save"
msgstr "Speichern"
msgid "Apply"
msgstr ""
msgid "Submit"
msgstr "Absenden"
msgid "Save"
msgstr "Speichern"
msgid ""
"Disabling encryption means *all* your notes and attachments are going to be "
"re-synchronised and sent unencrypted to the sync target. Do you wish to "
@@ -926,6 +932,13 @@ msgstr "Setze ein Passwort"
msgid "Add or remove tags"
msgstr "Markierungen hinzufügen oder entfernen"
msgid "Duplicate"
msgstr ""
#, fuzzy, javascript-format
msgid "%s - Copy"
msgstr "Kopieren"
msgid "Switch between note and to-do type"
msgstr "Zwischen Notiz und To-Do Typ wechseln"
@@ -962,6 +975,9 @@ msgstr "Sichern unter..."
msgid "Copy path to clipboard"
msgstr "Pfad in Zwischenablage kopieren"
msgid "Copy Link Address"
msgstr ""
#, javascript-format
msgid "Unsupported link or message: %s"
msgstr "Nicht unterstützter Link oder Nachricht: %s"
@@ -1240,17 +1256,6 @@ msgstr "Kann Notiz nicht zu Notizbuch \"%s\" kopieren"
msgid "Cannot move note to \"%s\" notebook"
msgstr "Kann Notiz nicht zu Notizbuch \"%s\" verschieben"
msgid "Text editor"
msgstr "Textverarbeitungsprogramm"
msgid ""
"The editor that will be used to open a note. If none is provided it will try "
"to auto-detect the default editor."
msgstr ""
"Das Textverarbeitungsprogramm, mit dem Notizen geöffnet werden. Wenn keines "
"ausgewählt wurde, wird Joplin versuchen das standard-"
"Textverarbeitungsprogramm zu erkennen."
msgid "Language"
msgstr "Sprache"
@@ -1334,6 +1339,19 @@ msgstr "%d Stunde"
msgid "%d hours"
msgstr "%d Stunden"
#, fuzzy
msgid "Text editor command"
msgstr "Textverarbeitungsprogramm"
#, fuzzy
msgid ""
"The editor command (may include arguments) that will be used to open a note. "
"If none is provided it will try to auto-detect the default editor."
msgstr ""
"Das Textverarbeitungsprogramm, mit dem Notizen geöffnet werden. Wenn keines "
"ausgewählt wurde, wird Joplin versuchen das standard-"
"Textverarbeitungsprogramm zu erkennen."
msgid "Show advanced options"
msgstr "Erweiterte Optionen anzeigen"
@@ -1382,7 +1400,8 @@ msgstr ""
msgid ""
"Comma-separated list of paths to directories to load the certificates from, "
"or path to individual cert files. For example: /my/cert_dir, /other/custom."
"pem"
"pem. Note that if you make changes to the TLS settings, you must save your "
"changes before clicking on \"Check synchronisation configuration\"."
msgstr ""
msgid "Ignore TLS certificate errors"

View File

@@ -558,6 +558,9 @@ msgstr ""
msgid "Italic"
msgstr ""
msgid "Insert Date Time"
msgstr ""
msgid "Edit in external editor"
msgstr ""
@@ -682,12 +685,15 @@ msgstr ""
msgid "Notes and settings are stored in: %s"
msgstr ""
msgid "Save"
msgid "Apply"
msgstr ""
msgid "Submit"
msgstr ""
msgid "Save"
msgstr ""
msgid ""
"Disabling encryption means *all* your notes and attachments are going to be "
"re-synchronised and sent unencrypted to the sync target. Do you wish to "
@@ -810,6 +816,13 @@ msgstr ""
msgid "Add or remove tags"
msgstr ""
msgid "Duplicate"
msgstr ""
#, javascript-format
msgid "%s - Copy"
msgstr ""
msgid "Switch between note and to-do type"
msgstr ""
@@ -842,6 +855,9 @@ msgstr ""
msgid "Copy path to clipboard"
msgstr ""
msgid "Copy Link Address"
msgstr ""
#, javascript-format
msgid "Unsupported link or message: %s"
msgstr ""
@@ -1104,14 +1120,6 @@ msgstr ""
msgid "Cannot move note to \"%s\" notebook"
msgstr ""
msgid "Text editor"
msgstr ""
msgid ""
"The editor that will be used to open a note. If none is provided it will try "
"to auto-detect the default editor."
msgstr ""
msgid "Language"
msgstr ""
@@ -1192,6 +1200,14 @@ msgstr ""
msgid "%d hours"
msgstr ""
msgid "Text editor command"
msgstr ""
msgid ""
"The editor command (may include arguments) that will be used to open a note. "
"If none is provided it will try to auto-detect the default editor."
msgstr ""
msgid "Show advanced options"
msgstr ""
@@ -1235,7 +1251,8 @@ msgstr ""
msgid ""
"Comma-separated list of paths to directories to load the certificates from, "
"or path to individual cert files. For example: /my/cert_dir, /other/custom."
"pem"
"pem. Note that if you make changes to the TLS settings, you must save your "
"changes before clicking on \"Check synchronisation configuration\"."
msgstr ""
msgid "Ignore TLS certificate errors"

View File

@@ -634,6 +634,9 @@ msgstr ""
msgid "Italic"
msgstr ""
msgid "Insert Date Time"
msgstr ""
msgid "Edit in external editor"
msgstr ""
@@ -766,12 +769,15 @@ msgstr "Comprobar sincronización"
msgid "Notes and settings are stored in: %s"
msgstr "Las notas y los ajustes se guardan en: %s"
msgid "Save"
msgstr "Guardar"
msgid "Apply"
msgstr ""
msgid "Submit"
msgstr "Aceptar"
msgid "Save"
msgstr "Guardar"
msgid ""
"Disabling encryption means *all* your notes and attachments are going to be "
"re-synchronised and sent unencrypted to the sync target. Do you wish to "
@@ -909,6 +915,13 @@ msgstr "Establecer la contraseña"
msgid "Add or remove tags"
msgstr "Añadir o borrar etiquetas"
msgid "Duplicate"
msgstr ""
#, fuzzy, javascript-format
msgid "%s - Copy"
msgstr "Copiar"
msgid "Switch between note and to-do type"
msgstr "Cambiar entre nota y lista de tareas"
@@ -941,6 +954,9 @@ msgstr "Guardar como..."
msgid "Copy path to clipboard"
msgstr "Copiar la ruta en el portapapeles"
msgid "Copy Link Address"
msgstr ""
#, javascript-format
msgid "Unsupported link or message: %s"
msgstr "Enlace o mensaje no soportado: %s"
@@ -1218,16 +1234,6 @@ msgstr "No se ha podido copiar la nota a la libreta «%s»"
msgid "Cannot move note to \"%s\" notebook"
msgstr "No se ha podido mover la nota a la libreta «%s»"
msgid "Text editor"
msgstr "Editor de texto"
msgid ""
"The editor that will be used to open a note. If none is provided it will try "
"to auto-detect the default editor."
msgstr ""
"El editor que se usará para abrir una nota. Se intentará auto-detectar el "
"editor predeterminado si no se proporciona ninguno."
msgid "Language"
msgstr "Idioma"
@@ -1311,6 +1317,18 @@ msgstr "%d hora"
msgid "%d hours"
msgstr "%d horas"
#, fuzzy
msgid "Text editor command"
msgstr "Editor de texto"
#, fuzzy
msgid ""
"The editor command (may include arguments) that will be used to open a note. "
"If none is provided it will try to auto-detect the default editor."
msgstr ""
"El editor que se usará para abrir una nota. Se intentará auto-detectar el "
"editor predeterminado si no se proporciona ninguno."
msgid "Show advanced options"
msgstr "Mostrar opciones avanzadas"
@@ -1359,7 +1377,8 @@ msgstr ""
msgid ""
"Comma-separated list of paths to directories to load the certificates from, "
"or path to individual cert files. For example: /my/cert_dir, /other/custom."
"pem"
"pem. Note that if you make changes to the TLS settings, you must save your "
"changes before clicking on \"Check synchronisation configuration\"."
msgstr ""
msgid "Ignore TLS certificate errors"

View File

@@ -633,6 +633,9 @@ msgstr ""
msgid "Italic"
msgstr ""
msgid "Insert Date Time"
msgstr ""
msgid "Edit in external editor"
msgstr ""
@@ -760,12 +763,15 @@ msgstr "Sinkronizazioa utzi"
msgid "Notes and settings are stored in: %s"
msgstr "Oharrak eta ezarpenak hemen daude gordeta: %s"
msgid "Save"
msgstr "Gorde"
msgid "Apply"
msgstr ""
msgid "Submit"
msgstr ""
msgid "Save"
msgstr "Gorde"
msgid ""
"Disabling encryption means *all* your notes and attachments are going to be "
"re-synchronised and sent unencrypted to the sync target. Do you wish to "
@@ -904,6 +910,13 @@ msgstr "Ezarri pasahitza"
msgid "Add or remove tags"
msgstr "Gehitu edo ezabatu etiketak"
msgid "Duplicate"
msgstr ""
#, fuzzy, javascript-format
msgid "%s - Copy"
msgstr "Kopiatu"
msgid "Switch between note and to-do type"
msgstr "Aldatu oharra eta zeregin eren artean."
@@ -937,6 +950,9 @@ msgstr "Gorde aldaketak"
msgid "Copy path to clipboard"
msgstr ""
msgid "Copy Link Address"
msgstr ""
#, javascript-format
msgid "Unsupported link or message: %s"
msgstr "Esteka edo mezu ez dago onartua: %s"
@@ -1219,16 +1235,6 @@ msgstr "Ezin kopia daiteke oharra \"%s\" koadernora"
msgid "Cannot move note to \"%s\" notebook"
msgstr "Ezin eraman daiteke oharra \"%s\" koadernora"
msgid "Text editor"
msgstr "Testu editorea"
msgid ""
"The editor that will be used to open a note. If none is provided it will try "
"to auto-detect the default editor."
msgstr ""
"Editorea erabiliko da oharra zabaltzeko. Ez badago zehaztutakorik lehenetsia "
"igartzen ahaleginduko da."
msgid "Language"
msgstr "Hizkuntza"
@@ -1315,6 +1321,18 @@ msgstr "% ordua"
msgid "%d hours"
msgstr "% orduak"
#, fuzzy
msgid "Text editor command"
msgstr "Testu editorea"
#, fuzzy
msgid ""
"The editor command (may include arguments) that will be used to open a note. "
"If none is provided it will try to auto-detect the default editor."
msgstr ""
"Editorea erabiliko da oharra zabaltzeko. Ez badago zehaztutakorik lehenetsia "
"igartzen ahaleginduko da."
msgid "Show advanced options"
msgstr "Erakutsi aukera aurreratuak"
@@ -1365,7 +1383,8 @@ msgstr ""
msgid ""
"Comma-separated list of paths to directories to load the certificates from, "
"or path to individual cert files. For example: /my/cert_dir, /other/custom."
"pem"
"pem. Note that if you make changes to the TLS settings, you must save your "
"changes before clicking on \"Check synchronisation configuration\"."
msgstr ""
msgid "Ignore TLS certificate errors"

View File

@@ -633,6 +633,9 @@ msgstr "Gras"
msgid "Italic"
msgstr "Italique"
msgid "Insert Date Time"
msgstr "Insérer la date et l'heure"
msgid "Edit in external editor"
msgstr "Ouvrir dans un éditeur externe"
@@ -765,12 +768,15 @@ msgstr "Vérifier config synchronisation"
msgid "Notes and settings are stored in: %s"
msgstr "Les notes et paramètres se trouve dans : %s"
msgid "Save"
msgstr "Enregistrer"
msgid "Apply"
msgstr "Appliquer"
msgid "Submit"
msgstr "Envoyer"
msgid "Save"
msgstr "Enregistrer"
msgid ""
"Disabling encryption means *all* your notes and attachments are going to be "
"re-synchronised and sent unencrypted to the sync target. Do you wish to "
@@ -912,6 +918,13 @@ msgstr "Définir le mot de passe"
msgid "Add or remove tags"
msgstr "Gérer les étiquettes"
msgid "Duplicate"
msgstr "Dupliquer"
#, javascript-format
msgid "%s - Copy"
msgstr "%s - Copie"
msgid "Switch between note and to-do type"
msgstr "Alterner entre note et tâche"
@@ -947,6 +960,9 @@ msgstr "Enregistrer sous..."
msgid "Copy path to clipboard"
msgstr "Copier le chemin"
msgid "Copy Link Address"
msgstr "Copier l'adresse du lien"
#, javascript-format
msgid "Unsupported link or message: %s"
msgstr "Lien ou message non géré : %s"
@@ -1187,7 +1203,7 @@ msgid "Conflicts"
msgstr "Conflits"
msgid "Cannot move notebook to this location"
msgstr "Impossible de déplacer le carnet vers le carnet \"%s\""
msgstr "Impossible de déplacer le carnet à cet endroit"
#, javascript-format
msgid "A notebook with this title already exists: \"%s\""
@@ -1201,10 +1217,10 @@ msgid "title"
msgstr "titre"
msgid "updated date"
msgstr "Date modification"
msgstr "date de modification"
msgid "created date"
msgstr "Date création"
msgstr "date de création"
msgid "Untitled"
msgstr "Sans titre"
@@ -1220,16 +1236,6 @@ msgstr "Impossible de copier la note vers le carnet \"%s\""
msgid "Cannot move note to \"%s\" notebook"
msgstr "Impossible de déplacer la note vers le carnet \"%s\""
msgid "Text editor"
msgstr "Éditeur de texte"
msgid ""
"The editor that will be used to open a note. If none is provided it will try "
"to auto-detect the default editor."
msgstr ""
"L'éditeur de texte pour ouvrir et modifier les notes. Si aucun n'est "
"spécifié, il sera détecté automatiquement."
msgid "Language"
msgstr "Langue"
@@ -1313,6 +1319,16 @@ msgstr "%d heure"
msgid "%d hours"
msgstr "%d heures"
msgid "Text editor command"
msgstr "Commande de l'éditeur de texte"
msgid ""
"The editor command (may include arguments) that will be used to open a note. "
"If none is provided it will try to auto-detect the default editor."
msgstr ""
"La commande de l'éditeur de texte (peut inclure des options) pour ouvrir et "
"modifier les notes. Si non-spécifiée, elle sera détectée automatiquement."
msgid "Show advanced options"
msgstr "Montrer les options avancées"
@@ -1361,11 +1377,14 @@ msgstr "Certificats TLS personnalisés"
msgid ""
"Comma-separated list of paths to directories to load the certificates from, "
"or path to individual cert files. For example: /my/cert_dir, /other/custom."
"pem"
"pem. Note that if you make changes to the TLS settings, you must save your "
"changes before clicking on \"Check synchronisation configuration\"."
msgstr ""
"Liste séparée par des virgules contenant les chemins des répertoires "
"contenants des certificats, ou les chemins de certificats individuels. Par "
"exemple : /my/cert_dir, /other/custom.pem"
"exemple : /my/cert_dir, /other/custom.pem. Remarquez que si vous changez les "
"paramètres TLS, vous devez enregistrer vos changements avant de cliquer sur "
"\"Vérifier config synchronisation\"."
msgid "Ignore TLS certificate errors"
msgstr "Ignorer les erreurs de certificats TLS"
@@ -1504,7 +1523,7 @@ msgstr "Annuler synchronisation"
#, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Décryptage des objets : %d/%d."
msgstr "Décryptage des objets : %d/%d"
msgid "New tags:"
msgstr "Nouvelles étiquettes :"

View File

@@ -625,6 +625,9 @@ msgstr ""
msgid "Italic"
msgstr ""
msgid "Insert Date Time"
msgstr ""
msgid "Edit in external editor"
msgstr ""
@@ -749,12 +752,15 @@ msgstr "Comprobar a configuración da sincronización"
msgid "Notes and settings are stored in: %s"
msgstr "As notas e axustes gardáronse en: %s"
msgid "Save"
msgstr "Gardar"
msgid "Apply"
msgstr ""
msgid "Submit"
msgstr ""
msgid "Save"
msgstr "Gardar"
msgid ""
"Disabling encryption means *all* your notes and attachments are going to be "
"re-synchronised and sent unencrypted to the sync target. Do you wish to "
@@ -891,6 +897,13 @@ msgstr "Estabelecer un contrasinal"
msgid "Add or remove tags"
msgstr "Engadir ou eliminar etiquetas"
msgid "Duplicate"
msgstr ""
#, fuzzy, javascript-format
msgid "%s - Copy"
msgstr "Copiar"
msgid "Switch between note and to-do type"
msgstr "Cambiar entre notas e tarefas"
@@ -924,6 +937,9 @@ msgstr "Gardar como…"
msgid "Copy path to clipboard"
msgstr ""
msgid "Copy Link Address"
msgstr ""
#, javascript-format
msgid "Unsupported link or message: %s"
msgstr "Ligazón ou mensaxe incompatíbeis: %s"
@@ -1202,16 +1218,6 @@ msgstr "Non é posíbel copiar a nota ao caderno «%s»"
msgid "Cannot move note to \"%s\" notebook"
msgstr "Non é posíbel mover a nota ao caderno «%s»"
msgid "Text editor"
msgstr "Editor de texto"
msgid ""
"The editor that will be used to open a note. If none is provided it will try "
"to auto-detect the default editor."
msgstr ""
"Editor a usar para abrir unha nota. Se non se indica ningún tentará detectar "
"automaticamente o editor predeterminado."
msgid "Language"
msgstr "Idioma"
@@ -1296,6 +1302,18 @@ msgstr "%d hora"
msgid "%d hours"
msgstr "%d horas"
#, fuzzy
msgid "Text editor command"
msgstr "Editor de texto"
#, fuzzy
msgid ""
"The editor command (may include arguments) that will be used to open a note. "
"If none is provided it will try to auto-detect the default editor."
msgstr ""
"Editor a usar para abrir unha nota. Se non se indica ningún tentará detectar "
"automaticamente o editor predeterminado."
msgid "Show advanced options"
msgstr "Mostrar opcións avanzadas"
@@ -1343,7 +1361,8 @@ msgstr ""
msgid ""
"Comma-separated list of paths to directories to load the certificates from, "
"or path to individual cert files. For example: /my/cert_dir, /other/custom."
"pem"
"pem. Note that if you make changes to the TLS settings, you must save your "
"changes before clicking on \"Check synchronisation configuration\"."
msgstr ""
msgid "Ignore TLS certificate errors"

View File

@@ -631,6 +631,9 @@ msgstr ""
msgid "Italic"
msgstr ""
msgid "Insert Date Time"
msgstr ""
msgid "Edit in external editor"
msgstr ""
@@ -759,12 +762,15 @@ msgstr "Prekini sinkronizaciju"
msgid "Notes and settings are stored in: %s"
msgstr "Bilješke i postavke su pohranjene u: %s"
msgid "Save"
msgstr "Spremi"
msgid "Apply"
msgstr ""
msgid "Submit"
msgstr ""
msgid "Save"
msgstr "Spremi"
msgid ""
"Disabling encryption means *all* your notes and attachments are going to be "
"re-synchronised and sent unencrypted to the sync target. Do you wish to "
@@ -892,6 +898,13 @@ msgstr ""
msgid "Add or remove tags"
msgstr "Dodaj ili makni oznake"
msgid "Duplicate"
msgstr ""
#, fuzzy, javascript-format
msgid "%s - Copy"
msgstr "Kopiraj"
msgid "Switch between note and to-do type"
msgstr "Zamijeni bilješku i zadatak"
@@ -925,6 +938,9 @@ msgstr "Spremi promjene"
msgid "Copy path to clipboard"
msgstr ""
msgid "Copy Link Address"
msgstr ""
#, javascript-format
msgid "Unsupported link or message: %s"
msgstr "Nepodržana poveznica ili poruka: %s"
@@ -1202,16 +1218,6 @@ msgstr "Ne mogu kopirati bilješku u bilježnicu %s"
msgid "Cannot move note to \"%s\" notebook"
msgstr "Ne mogu premjestiti bilješku u bilježnicu %s"
msgid "Text editor"
msgstr "Uređivač teksta"
msgid ""
"The editor that will be used to open a note. If none is provided it will try "
"to auto-detect the default editor."
msgstr ""
"Program za uređivanje koji će biti korišten za uređivanje bilješki. Ako ni "
"jedan nije odabran, pokušati će se sa default programom."
msgid "Language"
msgstr "Jezik"
@@ -1298,6 +1304,18 @@ msgstr "%d sat"
msgid "%d hours"
msgstr "%d sati"
#, fuzzy
msgid "Text editor command"
msgstr "Uređivač teksta"
#, fuzzy
msgid ""
"The editor command (may include arguments) that will be used to open a note. "
"If none is provided it will try to auto-detect the default editor."
msgstr ""
"Program za uređivanje koji će biti korišten za uređivanje bilješki. Ako ni "
"jedan nije odabran, pokušati će se sa default programom."
msgid "Show advanced options"
msgstr "Prikaži napredne opcije"
@@ -1343,7 +1361,8 @@ msgstr ""
msgid ""
"Comma-separated list of paths to directories to load the certificates from, "
"or path to individual cert files. For example: /my/cert_dir, /other/custom."
"pem"
"pem. Note that if you make changes to the TLS settings, you must save your "
"changes before clicking on \"Check synchronisation configuration\"."
msgstr ""
msgid "Ignore TLS certificate errors"

View File

@@ -616,6 +616,9 @@ msgstr ""
msgid "Italic"
msgstr ""
msgid "Insert Date Time"
msgstr ""
msgid "Edit in external editor"
msgstr ""
@@ -744,12 +747,15 @@ msgstr "Cancella la sincronizzazione"
msgid "Notes and settings are stored in: %s"
msgstr ""
msgid "Save"
msgid "Apply"
msgstr ""
msgid "Submit"
msgstr ""
msgid "Save"
msgstr ""
msgid ""
"Disabling encryption means *all* your notes and attachments are going to be "
"re-synchronised and sent unencrypted to the sync target. Do you wish to "
@@ -877,6 +883,13 @@ msgstr ""
msgid "Add or remove tags"
msgstr "Aggiungi o rimuovi etichetta"
msgid "Duplicate"
msgstr ""
#, fuzzy, javascript-format
msgid "%s - Copy"
msgstr "Copia"
msgid "Switch between note and to-do type"
msgstr "Passa da un tipo di nota a un elenco di attività"
@@ -911,6 +924,9 @@ msgstr "Salva i cambiamenti"
msgid "Copy path to clipboard"
msgstr ""
msgid "Copy Link Address"
msgstr ""
#, javascript-format
msgid "Unsupported link or message: %s"
msgstr "Collegamento o messaggio non supportato: %s"
@@ -1191,16 +1207,6 @@ msgstr "Non posso copiare la nota nel blocco note \"%s\""
msgid "Cannot move note to \"%s\" notebook"
msgstr "Non posso spostare la nota nel blocco note \"%s\""
msgid "Text editor"
msgstr "Editor di testo"
msgid ""
"The editor that will be used to open a note. If none is provided it will try "
"to auto-detect the default editor."
msgstr ""
"L'editor che sarà usato per aprire la nota. Se nessun editor è specificato "
"si cercherà di individuare automaticamente l'editor predefinito."
msgid "Language"
msgstr "Linguaggio"
@@ -1287,6 +1293,18 @@ msgstr "%d ora"
msgid "%d hours"
msgstr "%d ore"
#, fuzzy
msgid "Text editor command"
msgstr "Editor di testo"
#, fuzzy
msgid ""
"The editor command (may include arguments) that will be used to open a note. "
"If none is provided it will try to auto-detect the default editor."
msgstr ""
"L'editor che sarà usato per aprire la nota. Se nessun editor è specificato "
"si cercherà di individuare automaticamente l'editor predefinito."
msgid "Show advanced options"
msgstr "Mostra opzioni avanzate"
@@ -1332,7 +1350,8 @@ msgstr ""
msgid ""
"Comma-separated list of paths to directories to load the certificates from, "
"or path to individual cert files. For example: /my/cert_dir, /other/custom."
"pem"
"pem. Note that if you make changes to the TLS settings, you must save your "
"changes before clicking on \"Check synchronisation configuration\"."
msgstr ""
msgid "Ignore TLS certificate errors"

View File

@@ -618,6 +618,9 @@ msgstr ""
msgid "Italic"
msgstr ""
msgid "Insert Date Time"
msgstr ""
msgid "Edit in external editor"
msgstr ""
@@ -745,12 +748,15 @@ msgstr "同期の中止"
msgid "Notes and settings are stored in: %s"
msgstr "ノートと設定は、%sに保存されます。"
msgid "Save"
msgstr "保存"
msgid "Apply"
msgstr ""
msgid "Submit"
msgstr ""
msgid "Save"
msgstr "保存"
msgid ""
"Disabling encryption means *all* your notes and attachments are going to be "
"re-synchronised and sent unencrypted to the sync target. Do you wish to "
@@ -882,6 +888,13 @@ msgstr ""
msgid "Add or remove tags"
msgstr "タグの追加・削除"
msgid "Duplicate"
msgstr ""
#, fuzzy, javascript-format
msgid "%s - Copy"
msgstr "コピー"
msgid "Switch between note and to-do type"
msgstr "ノートとToDoを切り替え"
@@ -915,6 +928,9 @@ msgstr "変更を保存"
msgid "Copy path to clipboard"
msgstr ""
msgid "Copy Link Address"
msgstr ""
#, javascript-format
msgid "Unsupported link or message: %s"
msgstr ""
@@ -1196,16 +1212,6 @@ msgstr "ノートをノートブック \"%s\"にコピーできませんでし
msgid "Cannot move note to \"%s\" notebook"
msgstr "ノートをノートブック \"%s\"に移動できませんでした。"
msgid "Text editor"
msgstr "テキストエディタ"
msgid ""
"The editor that will be used to open a note. If none is provided it will try "
"to auto-detect the default editor."
msgstr ""
"ノートを開くために使用されるエディタです。特に指定がなければ、デフォルトのエ"
"ディタの検出を試みます。"
msgid "Language"
msgstr "言語"
@@ -1292,6 +1298,18 @@ msgstr "%d 時間"
msgid "%d hours"
msgstr "%d 時間"
#, fuzzy
msgid "Text editor command"
msgstr "テキストエディタ"
#, fuzzy
msgid ""
"The editor command (may include arguments) that will be used to open a note. "
"If none is provided it will try to auto-detect the default editor."
msgstr ""
"ノートを開くために使用されるエディタです。特に指定がなければ、デフォルトのエ"
"ディタの検出を試みます。"
msgid "Show advanced options"
msgstr "詳細な設定の表示"
@@ -1337,7 +1355,8 @@ msgstr ""
msgid ""
"Comma-separated list of paths to directories to load the certificates from, "
"or path to individual cert files. For example: /my/cert_dir, /other/custom."
"pem"
"pem. Note that if you make changes to the TLS settings, you must save your "
"changes before clicking on \"Check synchronisation configuration\"."
msgstr ""
msgid "Ignore TLS certificate errors"

View File

@@ -558,6 +558,9 @@ msgstr ""
msgid "Italic"
msgstr ""
msgid "Insert Date Time"
msgstr ""
msgid "Edit in external editor"
msgstr ""
@@ -682,12 +685,15 @@ msgstr ""
msgid "Notes and settings are stored in: %s"
msgstr ""
msgid "Save"
msgid "Apply"
msgstr ""
msgid "Submit"
msgstr ""
msgid "Save"
msgstr ""
msgid ""
"Disabling encryption means *all* your notes and attachments are going to be "
"re-synchronised and sent unencrypted to the sync target. Do you wish to "
@@ -810,6 +816,13 @@ msgstr ""
msgid "Add or remove tags"
msgstr ""
msgid "Duplicate"
msgstr ""
#, javascript-format
msgid "%s - Copy"
msgstr ""
msgid "Switch between note and to-do type"
msgstr ""
@@ -842,6 +855,9 @@ msgstr ""
msgid "Copy path to clipboard"
msgstr ""
msgid "Copy Link Address"
msgstr ""
#, javascript-format
msgid "Unsupported link or message: %s"
msgstr ""
@@ -1104,14 +1120,6 @@ msgstr ""
msgid "Cannot move note to \"%s\" notebook"
msgstr ""
msgid "Text editor"
msgstr ""
msgid ""
"The editor that will be used to open a note. If none is provided it will try "
"to auto-detect the default editor."
msgstr ""
msgid "Language"
msgstr ""
@@ -1192,6 +1200,14 @@ msgstr ""
msgid "%d hours"
msgstr ""
msgid "Text editor command"
msgstr ""
msgid ""
"The editor command (may include arguments) that will be used to open a note. "
"If none is provided it will try to auto-detect the default editor."
msgstr ""
msgid "Show advanced options"
msgstr ""
@@ -1235,7 +1251,8 @@ msgstr ""
msgid ""
"Comma-separated list of paths to directories to load the certificates from, "
"or path to individual cert files. For example: /my/cert_dir, /other/custom."
"pem"
"pem. Note that if you make changes to the TLS settings, you must save your "
"changes before clicking on \"Check synchronisation configuration\"."
msgstr ""
msgid "Ignore TLS certificate errors"

View File

@@ -635,6 +635,9 @@ msgstr ""
msgid "Italic"
msgstr ""
msgid "Insert Date Time"
msgstr ""
msgid "Edit in external editor"
msgstr ""
@@ -762,12 +765,15 @@ msgstr "Annuleer synchronisatie"
msgid "Notes and settings are stored in: %s"
msgstr "Notities en instellingen zijn opgeslaan in %s"
msgid "Save"
msgstr "Sla op"
msgid "Apply"
msgstr ""
msgid "Submit"
msgstr ""
msgid "Save"
msgstr "Sla op"
msgid ""
"Disabling encryption means *all* your notes and attachments are going to be "
"re-synchronised and sent unencrypted to the sync target. Do you wish to "
@@ -906,6 +912,13 @@ msgstr "Stel wachtwoord in"
msgid "Add or remove tags"
msgstr "Voeg tag toe of verwijder tag"
msgid "Duplicate"
msgstr ""
#, fuzzy, javascript-format
msgid "%s - Copy"
msgstr "Kopieer"
msgid "Switch between note and to-do type"
msgstr "Wissel tussen notitie en to-do type"
@@ -941,6 +954,9 @@ msgstr "Sla wijzigingen op"
msgid "Copy path to clipboard"
msgstr ""
msgid "Copy Link Address"
msgstr ""
#, javascript-format
msgid "Unsupported link or message: %s"
msgstr "Link of bericht \"%s\" wordt niet ondersteund"
@@ -1222,17 +1238,6 @@ msgstr "Kan notitie niet naar notitieboek \"%s\" kopiëren."
msgid "Cannot move note to \"%s\" notebook"
msgstr "Kan notitie niet naar notitieboek \"%s\" verplaatsen."
msgid "Text editor"
msgstr "Tekst editor"
msgid ""
"The editor that will be used to open a note. If none is provided it will try "
"to auto-detect the default editor."
msgstr ""
"De editor die zal gebruikt worden bij het openen van een notitie. Als er "
"geen meegegeven wordt, zal het programma de standaard editor proberen te "
"detecteren. "
msgid "Language"
msgstr "Taal"
@@ -1318,6 +1323,19 @@ msgstr "%d uur"
msgid "%d hours"
msgstr "%d uren"
#, fuzzy
msgid "Text editor command"
msgstr "Tekst editor"
#, fuzzy
msgid ""
"The editor command (may include arguments) that will be used to open a note. "
"If none is provided it will try to auto-detect the default editor."
msgstr ""
"De editor die zal gebruikt worden bij het openen van een notitie. Als er "
"geen meegegeven wordt, zal het programma de standaard editor proberen te "
"detecteren. "
msgid "Show advanced options"
msgstr "Toon geavanceerde opties"
@@ -1365,7 +1383,8 @@ msgstr ""
msgid ""
"Comma-separated list of paths to directories to load the certificates from, "
"or path to individual cert files. For example: /my/cert_dir, /other/custom."
"pem"
"pem. Note that if you make changes to the TLS settings, you must save your "
"changes before clicking on \"Check synchronisation configuration\"."
msgstr ""
msgid "Ignore TLS certificate errors"

View File

@@ -632,6 +632,9 @@ msgstr ""
msgid "Italic"
msgstr ""
msgid "Insert Date Time"
msgstr ""
msgid "Edit in external editor"
msgstr ""
@@ -756,12 +759,15 @@ msgstr "Verificar a configuração da sincronização"
msgid "Notes and settings are stored in: %s"
msgstr "Notas e configurações estão armazenadas em: %s"
msgid "Save"
msgstr "Salvar"
msgid "Apply"
msgstr ""
msgid "Submit"
msgstr "Enviar"
msgid "Save"
msgstr "Salvar"
msgid ""
"Disabling encryption means *all* your notes and attachments are going to be "
"re-synchronised and sent unencrypted to the sync target. Do you wish to "
@@ -901,6 +907,13 @@ msgstr "Configurar a senha"
msgid "Add or remove tags"
msgstr "Adicionar ou remover tags"
msgid "Duplicate"
msgstr ""
#, fuzzy, javascript-format
msgid "%s - Copy"
msgstr "Copiar"
msgid "Switch between note and to-do type"
msgstr "Alternar entre os tipos Nota e Tarefa"
@@ -934,6 +947,9 @@ msgstr "Salvar como..."
msgid "Copy path to clipboard"
msgstr ""
msgid "Copy Link Address"
msgstr ""
#, javascript-format
msgid "Unsupported link or message: %s"
msgstr "Link ou mensagem não suportada: %s"
@@ -1215,16 +1231,6 @@ msgstr "Não é possível copiar a nota para o caderno \"%s\""
msgid "Cannot move note to \"%s\" notebook"
msgstr "Não é possível mover a nota para o caderno \"%s\""
msgid "Text editor"
msgstr "Editor de texto"
msgid ""
"The editor that will be used to open a note. If none is provided it will try "
"to auto-detect the default editor."
msgstr ""
"O editor que será usado para abrir uma nota. Se nenhum for indicado, ele "
"tentará detectar automaticamente o editor padrão."
msgid "Language"
msgstr "Idioma"
@@ -1309,6 +1315,18 @@ msgstr "%d hora"
msgid "%d hours"
msgstr "%d horas"
#, fuzzy
msgid "Text editor command"
msgstr "Editor de texto"
#, fuzzy
msgid ""
"The editor command (may include arguments) that will be used to open a note. "
"If none is provided it will try to auto-detect the default editor."
msgstr ""
"O editor que será usado para abrir uma nota. Se nenhum for indicado, ele "
"tentará detectar automaticamente o editor padrão."
msgid "Show advanced options"
msgstr "Mostrar opções avançadas"
@@ -1356,7 +1374,8 @@ msgstr ""
msgid ""
"Comma-separated list of paths to directories to load the certificates from, "
"or path to individual cert files. For example: /my/cert_dir, /other/custom."
"pem"
"pem. Note that if you make changes to the TLS settings, you must save your "
"changes before clicking on \"Check synchronisation configuration\"."
msgstr ""
msgid "Ignore TLS certificate errors"

View File

@@ -632,6 +632,9 @@ msgstr ""
msgid "Italic"
msgstr ""
msgid "Insert Date Time"
msgstr ""
msgid "Edit in external editor"
msgstr ""
@@ -756,12 +759,15 @@ msgstr "Проверить настройки синхронизации"
msgid "Notes and settings are stored in: %s"
msgstr "Заметки и настройки сохранены в: %s"
msgid "Save"
msgstr "Сохранить"
msgid "Apply"
msgstr ""
msgid "Submit"
msgstr ""
msgid "Save"
msgstr "Сохранить"
msgid ""
"Disabling encryption means *all* your notes and attachments are going to be "
"re-synchronised and sent unencrypted to the sync target. Do you wish to "
@@ -901,6 +907,13 @@ msgstr "Установить пароль"
msgid "Add or remove tags"
msgstr "Добавить или удалить теги"
msgid "Duplicate"
msgstr ""
#, fuzzy, javascript-format
msgid "%s - Copy"
msgstr "Копировать"
msgid "Switch between note and to-do type"
msgstr "Переключить тип между заметкой и задачей"
@@ -934,6 +947,9 @@ msgstr "Сохранить как..."
msgid "Copy path to clipboard"
msgstr ""
msgid "Copy Link Address"
msgstr ""
#, javascript-format
msgid "Unsupported link or message: %s"
msgstr "Неподдерживаемая ссыка или сообщение: %s"
@@ -1212,16 +1228,6 @@ msgstr "Не удалось скопировать заметку в блокн
msgid "Cannot move note to \"%s\" notebook"
msgstr "Не удалось переместить заметку в блокнот «%s»"
msgid "Text editor"
msgstr "Текстовый редактор"
msgid ""
"The editor that will be used to open a note. If none is provided it will try "
"to auto-detect the default editor."
msgstr ""
"Редактор, в котором будут открываться заметки. Если не задан, будет "
"произведена попытка автоматического определения редактора по умолчанию."
msgid "Language"
msgstr "Язык"
@@ -1306,6 +1312,18 @@ msgstr "%d час"
msgid "%d hours"
msgstr "%d часов"
#, fuzzy
msgid "Text editor command"
msgstr "Текстовый редактор"
#, fuzzy
msgid ""
"The editor command (may include arguments) that will be used to open a note. "
"If none is provided it will try to auto-detect the default editor."
msgstr ""
"Редактор, в котором будут открываться заметки. Если не задан, будет "
"произведена попытка автоматического определения редактора по умолчанию."
msgid "Show advanced options"
msgstr "Показывать расширенные настройки"
@@ -1353,7 +1371,8 @@ msgstr ""
msgid ""
"Comma-separated list of paths to directories to load the certificates from, "
"or path to individual cert files. For example: /my/cert_dir, /other/custom."
"pem"
"pem. Note that if you make changes to the TLS settings, you must save your "
"changes before clicking on \"Check synchronisation configuration\"."
msgstr ""
msgid "Ignore TLS certificate errors"

View File

@@ -631,6 +631,9 @@ msgstr ""
msgid "Italic"
msgstr ""
msgid "Insert Date Time"
msgstr ""
msgid "Edit in external editor"
msgstr ""
@@ -755,12 +758,15 @@ msgstr "Preveri nastavitve sinhronizacije"
msgid "Notes and settings are stored in: %s"
msgstr "Zabeležke in nastavitve so shranjene v: %s"
msgid "Save"
msgstr "Shrani"
msgid "Apply"
msgstr ""
msgid "Submit"
msgstr ""
msgid "Save"
msgstr "Shrani"
msgid ""
"Disabling encryption means *all* your notes and attachments are going to be "
"re-synchronised and sent unencrypted to the sync target. Do you wish to "
@@ -901,6 +907,13 @@ msgstr "Nastavi geslo"
msgid "Add or remove tags"
msgstr "Dodaj ali odstrani oznake"
msgid "Duplicate"
msgstr ""
#, fuzzy, javascript-format
msgid "%s - Copy"
msgstr "Kopiraj"
msgid "Switch between note and to-do type"
msgstr "Menjaj med zabeležko in seznamom opravil"
@@ -938,6 +951,9 @@ msgstr "Shrani kot..."
msgid "Copy path to clipboard"
msgstr ""
msgid "Copy Link Address"
msgstr ""
#, javascript-format
msgid "Unsupported link or message: %s"
msgstr "Nepodprta povezava ali sporočilo: %s"
@@ -1216,16 +1232,6 @@ msgstr "Ni moč kopirati zabeležke v \"%s\" beležnico"
msgid "Cannot move note to \"%s\" notebook"
msgstr "Ni moč premakniti zabeležke v \"%s\" beležnico"
msgid "Text editor"
msgstr "Urejevalnik besedila"
msgid ""
"The editor that will be used to open a note. If none is provided it will try "
"to auto-detect the default editor."
msgstr ""
"Urejevalnik, ki bo uporabljen za odpiranje zabeležk. Če noben ni izbran, bo "
"avtomatsko zaznan privzeti urejevalnik."
msgid "Language"
msgstr "Jezik"
@@ -1310,6 +1316,18 @@ msgstr "Števil ur: %d"
msgid "%d hours"
msgstr "Število ur: %d"
#, fuzzy
msgid "Text editor command"
msgstr "Urejevalnik besedila"
#, fuzzy
msgid ""
"The editor command (may include arguments) that will be used to open a note. "
"If none is provided it will try to auto-detect the default editor."
msgstr ""
"Urejevalnik, ki bo uporabljen za odpiranje zabeležk. Če noben ni izbran, bo "
"avtomatsko zaznan privzeti urejevalnik."
msgid "Show advanced options"
msgstr "Pokaži napredne možnosti"
@@ -1357,7 +1375,8 @@ msgstr ""
msgid ""
"Comma-separated list of paths to directories to load the certificates from, "
"or path to individual cert files. For example: /my/cert_dir, /other/custom."
"pem"
"pem. Note that if you make changes to the TLS settings, you must save your "
"changes before clicking on \"Check synchronisation configuration\"."
msgstr ""
msgid "Ignore TLS certificate errors"

View File

@@ -596,6 +596,9 @@ msgstr "粗体"
msgid "Italic"
msgstr "斜体"
msgid "Insert Date Time"
msgstr ""
#, fuzzy
msgid "Edit in external editor"
msgstr "在外部编辑器中打开"
@@ -723,12 +726,15 @@ msgstr "检查同步配置"
msgid "Notes and settings are stored in: %s"
msgstr "笔记与设置文件储存目录为:%s"
msgid "Save"
msgstr "保存"
msgid "Apply"
msgstr ""
msgid "Submit"
msgstr "提交"
msgid "Save"
msgstr "保存"
msgid ""
"Disabling encryption means *all* your notes and attachments are going to be "
"re-synchronised and sent unencrypted to the sync target. Do you wish to "
@@ -860,6 +866,13 @@ msgstr "设置密码"
msgid "Add or remove tags"
msgstr "添加或删除标签"
msgid "Duplicate"
msgstr ""
#, fuzzy, javascript-format
msgid "%s - Copy"
msgstr "复制"
msgid "Switch between note and to-do type"
msgstr "在笔记和待办事项类型之间切换"
@@ -892,6 +905,9 @@ msgstr "另存为…"
msgid "Copy path to clipboard"
msgstr "复制路径到剪切板"
msgid "Copy Link Address"
msgstr ""
#, javascript-format
msgid "Unsupported link or message: %s"
msgstr "不支持的链接或信息:%s"
@@ -1161,14 +1177,6 @@ msgstr "无法复制笔记至 \"%s\" 笔记本"
msgid "Cannot move note to \"%s\" notebook"
msgstr "无法移动笔记至 \"%s\" 笔记本"
msgid "Text editor"
msgstr "文本编辑器"
msgid ""
"The editor that will be used to open a note. If none is provided it will try "
"to auto-detect the default editor."
msgstr "此编辑器将会被用于打开笔记。若未提供将自动检测默认编辑器。"
msgid "Language"
msgstr "语言"
@@ -1251,6 +1259,16 @@ msgstr "%d小时"
msgid "%d hours"
msgstr "%d小时"
#, fuzzy
msgid "Text editor command"
msgstr "文本编辑器"
#, fuzzy
msgid ""
"The editor command (may include arguments) that will be used to open a note. "
"If none is provided it will try to auto-detect the default editor."
msgstr "此编辑器将会被用于打开笔记。若未提供将自动检测默认编辑器。"
msgid "Show advanced options"
msgstr "显示高级选项"
@@ -1296,7 +1314,8 @@ msgstr ""
msgid ""
"Comma-separated list of paths to directories to load the certificates from, "
"or path to individual cert files. For example: /my/cert_dir, /other/custom."
"pem"
"pem. Note that if you make changes to the TLS settings, you must save your "
"changes before clicking on \"Check synchronisation configuration\"."
msgstr ""
msgid "Ignore TLS certificate errors"

View File

@@ -567,6 +567,9 @@ msgstr ""
msgid "Italic"
msgstr ""
msgid "Insert Date Time"
msgstr ""
msgid "Edit in external editor"
msgstr ""
@@ -691,13 +694,16 @@ msgstr "檢測同步設置"
msgid "Notes and settings are stored in: %s"
msgstr ""
msgid "Save"
msgstr "儲存"
msgid "Apply"
msgstr ""
#, fuzzy
msgid "Submit"
msgstr "提交 / 送出"
msgid "Save"
msgstr "儲存"
msgid ""
"Disabling encryption means *all* your notes and attachments are going to be "
"re-synchronised and sent unencrypted to the sync target. Do you wish to "
@@ -821,6 +827,13 @@ msgstr "設置密碼"
msgid "Add or remove tags"
msgstr "新增或移除標籤"
msgid "Duplicate"
msgstr ""
#, fuzzy, javascript-format
msgid "%s - Copy"
msgstr "複製"
msgid "Switch between note and to-do type"
msgstr ""
@@ -853,6 +866,9 @@ msgstr "另存為..."
msgid "Copy path to clipboard"
msgstr "複製路徑到剪貼板"
msgid "Copy Link Address"
msgstr ""
#, javascript-format
msgid "Unsupported link or message: %s"
msgstr ""
@@ -1119,14 +1135,6 @@ msgstr "無法複製此記事到 \"%s\" 記事本"
msgid "Cannot move note to \"%s\" notebook"
msgstr "無法移動此記事到 \"%s\" 記事本"
msgid "Text editor"
msgstr "文字編輯器"
msgid ""
"The editor that will be used to open a note. If none is provided it will try "
"to auto-detect the default editor."
msgstr ""
msgid "Language"
msgstr "語言"
@@ -1209,6 +1217,15 @@ msgstr "%d 小時"
msgid "%d hours"
msgstr "%d 小時"
#, fuzzy
msgid "Text editor command"
msgstr "文字編輯器"
msgid ""
"The editor command (may include arguments) that will be used to open a note. "
"If none is provided it will try to auto-detect the default editor."
msgstr ""
msgid "Show advanced options"
msgstr "顯示進階選項"
@@ -1254,7 +1271,8 @@ msgstr ""
msgid ""
"Comma-separated list of paths to directories to load the certificates from, "
"or path to individual cert files. For example: /my/cert_dir, /other/custom."
"pem"
"pem. Note that if you make changes to the TLS settings, you must save your "
"changes before clicking on \"Check synchronisation configuration\"."
msgstr ""
msgid "Ignore TLS certificate errors"

View File

@@ -1,6 +1,6 @@
{
"name": "joplin",
"version": "1.0.108",
"version": "1.0.109",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@@ -10,9 +10,9 @@
"integrity": "sha1-X6rZwsB/YN12dw9xzwJbYqY8/U4="
},
"acorn": {
"version": "5.5.3",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz",
"integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ=="
"version": "5.7.1",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.1.tgz",
"integrity": "sha512-d+nbxBUGKg7Arpsvbnlq61mc12ek3EY8EQldM3GPAhWJ1UVxC6TDGbIvUMNU6obBX3i1+ptCIzV4vq0gFPEGVQ=="
},
"acorn-globals": {
"version": "4.1.0",
@@ -316,9 +316,9 @@
"integrity": "sha1-uANhcMefB6kP8vFuIihAJ6JDhIs="
},
"cssstyle": {
"version": "0.2.37",
"resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-0.2.37.tgz",
"integrity": "sha1-VBCXI0yyUTyDzu06zdwn/yeYfVQ=",
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-0.3.1.tgz",
"integrity": "sha512-tNvaxM5blOnxanyxI6panOsnfiyLRj3HV4qjqqS45WPNS1usdYWRUQjqTEEELK73lpeP/1KoIGYUwrBn/VcECA==",
"requires": {
"cssom": "0.3.x"
}
@@ -468,9 +468,9 @@
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
},
"escodegen": {
"version": "1.9.1",
"resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz",
"integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==",
"version": "1.10.0",
"resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.10.0.tgz",
"integrity": "sha512-fjUOf8johsv23WuIKdNQU4P9t9jhQ4Qzx6pC2uW890OloK3Zs1ZAoCNpg/2larNF501jLl3UNy0kIRcF6VI22g==",
"requires": {
"esprima": "^3.1.3",
"estraverse": "^4.2.0",
@@ -904,17 +904,17 @@
"dev": true
},
"joplin-turndown": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/joplin-turndown/-/joplin-turndown-4.0.3.tgz",
"integrity": "sha512-WbAXje8wq4/ZLNtPDUFBEtG5zKEbz7Wth5N3vB4Nw7k+PUs3mMF49LVEPP7Kc6H4Ui671qdjpSShvdsmiLY2gA==",
"version": "4.0.7",
"resolved": "https://registry.npmjs.org/joplin-turndown/-/joplin-turndown-4.0.7.tgz",
"integrity": "sha512-dOUzNg0nt1Sgz5LO/6CvZmgGLk3q0BCelZ+CDTb/UOBn7reqUl7R0B4yAfiqDtO8p0/wzY/N87RzXeEawbPvFA==",
"requires": {
"jsdom": "^11.9.0"
}
},
"joplin-turndown-plugin-gfm": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/joplin-turndown-plugin-gfm/-/joplin-turndown-plugin-gfm-1.0.2.tgz",
"integrity": "sha512-GRXmjHFrEyUnXOYzOZvUGGtKxPm5LuK98+73ZADqQYdGzMWp/o8Qx22YYAeIBsOV2WtVsRxe2IpUGBG4foSRyQ=="
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/joplin-turndown-plugin-gfm/-/joplin-turndown-plugin-gfm-1.0.7.tgz",
"integrity": "sha512-z0SveNcchtWwglkO7SgvDzPnVHYk1WumD0QRcWvUchIihqXwDVlve3G8AHkIhM69LY1YdC0HCZJlSMp2spBe/g=="
},
"jpeg-js": {
"version": "0.1.2",
@@ -933,22 +933,22 @@
"optional": true
},
"jsdom": {
"version": "11.10.0",
"resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.10.0.tgz",
"integrity": "sha512-x5No5FpJgBg3j5aBwA8ka6eGuS5IxbC8FOkmyccKvObtFT0bDMict/LOxINZsZGZSfGdNomLZ/qRV9Bpq/GIBA==",
"version": "11.11.0",
"resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.11.0.tgz",
"integrity": "sha512-ou1VyfjwsSuWkudGxb03FotDajxAto6USAlmMZjE2lc0jCznt7sBWkhfRBRaWwbnmDqdMSTKTLT5d9sBFkkM7A==",
"requires": {
"abab": "^1.0.4",
"acorn": "^5.3.0",
"acorn-globals": "^4.1.0",
"array-equal": "^1.0.0",
"cssom": ">= 0.3.2 < 0.4.0",
"cssstyle": ">= 0.2.37 < 0.3.0",
"cssstyle": ">= 0.3.1 < 0.4.0",
"data-urls": "^1.0.0",
"domexception": "^1.0.0",
"escodegen": "^1.9.0",
"html-encoding-sniffer": "^1.0.2",
"left-pad": "^1.2.0",
"nwmatcher": "^1.4.3",
"nwsapi": "^2.0.0",
"parse5": "4.0.0",
"pn": "^1.1.0",
"request": "^2.83.0",
@@ -960,7 +960,7 @@
"webidl-conversions": "^4.0.2",
"whatwg-encoding": "^1.0.3",
"whatwg-mimetype": "^2.1.0",
"whatwg-url": "^6.4.0",
"whatwg-url": "^6.4.1",
"ws": "^4.0.0",
"xml-name-validator": "^3.0.0"
}
@@ -1223,10 +1223,10 @@
"pify": "^3.0.0"
}
},
"nwmatcher": {
"version": "1.4.4",
"resolved": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.4.4.tgz",
"integrity": "sha512-3iuY4N5dhgMpCUrOVnuAdGrgxVqV2cJpM+XNccjR2DKOB1RUP0aA+wGXEiNziG/UKboFyGBIoKOaNlJxx8bciQ=="
"nwsapi": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.0.4.tgz",
"integrity": "sha512-Zt6HRR6RcJkuj5/N9zeE7FN6YitRW//hK2wTOwX274IBphbY3Zf5+yn5mZ9v/SzAOTMjQNxZf9KkmPLWn0cV4g=="
},
"oauth-sign": {
"version": "0.8.2",
@@ -2379,6 +2379,11 @@
"resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz",
"integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY="
},
"syswide-cas": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/syswide-cas/-/syswide-cas-5.2.0.tgz",
"integrity": "sha512-I81xC4l8ECPonkPyYPYUw+IO1ebE4W3fMV9KeavvF/5Snlg3T1DLhWFTm9C32YVOHU70VdONPlGCotaBMG2cFA=="
},
"tar": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/tar/-/tar-4.4.0.tgz",
@@ -2439,6 +2444,7 @@
"requires": {
"chalk": "^2.1.0",
"emphasize": "^1.5.0",
"node-emoji": "git+https://github.com/laurent22/node-emoji.git#9fa01eac463e94dde1316ef8c53089eeef4973b5",
"slice-ansi": "^1.0.0",
"string-width": "^2.1.1",
"terminal-kit": "^1.13.11",
@@ -2447,7 +2453,7 @@
"dependencies": {
"node-emoji": {
"version": "git+https://github.com/laurent22/node-emoji.git#9fa01eac463e94dde1316ef8c53089eeef4973b5",
"from": "git+https://github.com/laurent22/node-emoji.git#9fa01eac463e94dde1316ef8c53089eeef4973b5",
"from": "git+https://github.com/laurent22/node-emoji.git",
"requires": {
"lodash.toarray": "^4.4.0"
}
@@ -2471,9 +2477,9 @@
},
"dependencies": {
"punycode": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz",
"integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0="
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
"integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
}
}
},
@@ -2606,9 +2612,9 @@
"integrity": "sha512-FKxhYLytBQiUKjkYteN71fAUA3g6KpNXoho1isLiLSB3N1G4F35Q5vUxWfKFhBwi5IWF27VE6WxhrnnC+m0Mew=="
},
"whatwg-url": {
"version": "6.4.1",
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.4.1.tgz",
"integrity": "sha512-FwygsxsXx27x6XXuExA/ox3Ktwcbf+OAvrKmLulotDAiO1Q6ixchPFaHYsis2zZBZSJTR0+dR+JVtf7MlbqZjw==",
"version": "6.5.0",
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz",
"integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==",
"requires": {
"lodash.sortby": "^4.7.0",
"tr46": "^1.0.1",

View File

@@ -19,7 +19,7 @@
],
"owner": "Laurent Cozic"
},
"version": "1.0.108",
"version": "1.0.109",
"bin": {
"joplin": "./main.js"
},
@@ -38,8 +38,8 @@
"html-entities": "^1.2.1",
"html-minifier": "^3.5.15",
"image-type": "^3.0.0",
"joplin-turndown": "^4.0.3",
"joplin-turndown-plugin-gfm": "^1.0.2",
"joplin-turndown": "^4.0.7",
"joplin-turndown-plugin-gfm": "^1.0.7",
"jssha": "^2.3.0",
"levenshtein": "^1.0.5",
"lodash": "^4.17.4",
@@ -62,6 +62,7 @@
"string-padding": "^1.0.2",
"string-to-stream": "^1.1.0",
"strip-ansi": "^4.0.0",
"syswide-cas": "^5.2.0",
"tar": "^4.4.0",
"tcp-port-used": "^0.1.2",
"tkwidgets": "^0.5.26",

View File

@@ -60,6 +60,12 @@ class ElectronAppWrapper {
// Fix: https://github.com/electron-userland/electron-builder/issues/2269
if (shim.isLinux()) windowOptions.icon = __dirname + '/build/icons/128x128.png';
require('electron-context-menu')({
shouldShowMenu: (event, params) => {
return params.isEditable;
},
});
this.win_ = new BrowserWindow(windowOptions)
this.win_.loadURL(url.format({

View File

@@ -11,7 +11,7 @@ class InteropServiceHelper {
if (module.target === 'file') {
path = bridge().showSaveDialog({
filters: [{ name: module.description, extensions: [module.fileExtension]}]
filters: [{ name: module.description, extensions: module.fileExtension}]
});
} else {
path = bridge().showOpenDialog({

View File

@@ -183,7 +183,7 @@ class Application extends BaseApplication {
if (action.type == 'SETTING_UPDATE_ONE' && action.key == 'locale' || action.type == 'SETTING_UPDATE_ALL') {
setLocale(Setting.value('locale'));
// The bridge runs within the main process, with its own instance of locale.js
// so it needs to be set too here.
// so it needs to be set too here.
bridge().setLocale(Setting.value('locale'));
this.refreshMenu();
}
@@ -285,7 +285,7 @@ class Application extends BaseApplication {
if (moduleSource === 'file') {
path = bridge().showOpenDialog({
filters: [{ name: module.description, extensions: [module.fileExtension]}]
filters: [{ name: module.description, extensions: module.fileExtensions}]
});
} else {
path = bridge().showOpenDialog({
@@ -362,7 +362,6 @@ class Application extends BaseApplication {
}
}, {
label: _('New notebook'),
accelerator: 'CommandOrControl+B',
screens: ['Main'],
click: () => {
this.dispatch({
@@ -442,6 +441,17 @@ class Application extends BaseApplication {
name: 'textItalic',
});
},
}, {
label: _('Insert Date Time'),
screens: ['Main'],
visible: false,
accelerator: 'CommandOrControl+Shift+T',
click: () => {
this.dispatch({
type: 'WINDOW_COMMAND',
name: 'insertDateTime',
});
},
}, {
type: 'separator',
screens: ['Main'],

View File

@@ -87,6 +87,7 @@ class Bridge {
const result = this.showMessageBox_(this.window(), {
type: 'question',
message: message,
cancelId: 1,
buttons: [_('OK'), _('Cancel')],
});
return result === 0;

View File

@@ -63,6 +63,7 @@ class ConfigScreenComponent extends React.Component {
color: theme.colorFaded,
marginTop: 5,
fontStyle: 'italic',
maxWidth: '70em',
});
const updateSettingValue = (key, value) => {
@@ -148,6 +149,10 @@ class ConfigScreenComponent extends React.Component {
return output;
}
onApplyClick() {
shared.saveSettings(this);
}
onSaveClick() {
shared.saveSettings(this);
this.props.dispatch({ type: 'NAV_BACK' });
@@ -203,8 +208,9 @@ class ConfigScreenComponent extends React.Component {
{_('Notes and settings are stored in: %s', pathUtils.toSystemSlashes(Setting.value('profileDir'), process.platform))}
</div>
{ settingComps }
<button onClick={() => {this.onSaveClick()}} style={buttonStyle}>{_('Save')}</button>
<button onClick={() => {this.onSaveClick()}} style={buttonStyle}>{_('OK')}</button>
<button onClick={() => {this.onCancelClick()}} style={buttonStyle}>{_('Cancel')}</button>
<button onClick={() => {this.onApplyClick()}} style={buttonStyle}>{_('Apply')}</button>
</div>
</div>
);

View File

@@ -59,7 +59,7 @@ class ImportScreenComponent extends React.Component {
async doImport() {
const filePath = this.props.filePath;
const folderTitle = await Folder.findUniqueFolderTitle(filename(filePath));
const folderTitle = await Folder.findUniqueItemTitle(filename(filePath));
const messages = this.state.messages.slice();
this.addMessage('start', _('New notebook "%s" will be created and file "%s" will be imported into it', folderTitle, basename(filePath)));

View File

@@ -88,6 +88,15 @@ class NoteListComponent extends React.Component {
});
}}));
menu.append(new MenuItem({label: _('Duplicate'), click: async () => {
for (let i = 0; i < noteIds.length; i++) {
const note = await Note.load(noteIds[i]);
await Note.duplicate(noteIds[i], {
uniqueTitle: _('%s - Copy', note.title),
});
}
}}));
menu.append(new MenuItem({label: _('Switch between note and to-do type'), click: async () => {
for (let i = 0; i < noteIds.length; i++) {
const note = await Note.load(noteIds[i]);

View File

@@ -20,7 +20,6 @@ const MenuItem = bridge().MenuItem;
const { shim } = require('lib/shim.js');
const eventManager = require('../eventManager');
const fs = require('fs-extra');
const {clipboard} = require('electron')
const md5 = require('md5');
const mimeUtils = require('lib/mime-utils.js').mime;
const ArrayUtils = require('lib/ArrayUtils');
@@ -28,6 +27,8 @@ const urlUtils = require('lib/urlUtils');
const dialogs = require('./dialogs');
const markdownUtils = require('lib/markdownUtils');
const ExternalEditWatcher = require('lib/services/ExternalEditWatcher');
const { toSystemSlashes, safeFilename } = require('lib/path-utils');
const { clipboard } = require('electron');
require('brace/mode/markdown');
// https://ace.c9.io/build/kitchen-sink.html
@@ -187,7 +188,7 @@ class NoteTextComponent extends React.Component {
}
}
return pos;
return pos;
}
textOffsetToCursorPosition(offset, body) {
@@ -466,7 +467,9 @@ class NoteTextComponent extends React.Component {
const menu = new Menu()
if (itemType === "image" || itemType === "link") {
console.info(itemType);
if (itemType === "image" || itemType === "resource") {
const resource = await Resource.load(arg0.resourceId);
const resourcePath = Resource.fullPath(resource);
@@ -484,10 +487,16 @@ class NoteTextComponent extends React.Component {
}}));
menu.append(new MenuItem({label: _('Copy path to clipboard'), click: async () => {
const { clipboard } = require('electron');
const { toSystemSlashes } = require('lib/path-utils.js');
clipboard.writeText(toSystemSlashes(resourcePath));
}}));
} else if (itemType === "text") {
menu.append(new MenuItem({label: _('Copy'), click: async () => {
clipboard.writeText(arg0.textToCopy);
}}));
} else if (itemType === "link") {
menu.append(new MenuItem({label: _('Copy Link Address'), click: async () => {
clipboard.writeText(arg0.textToCopy);
}}));
} else {
reg.logger().error('Unhandled item type: ' + itemType);
return;
@@ -597,8 +606,8 @@ class NoteTextComponent extends React.Component {
const letters = ['F', 'T', 'P', 'Q', 'L', ','];
for (let i = 0; i < letters.length; i++) {
const l = letters[i];
cancelledKeys.push('Ctrl+' + l);
cancelledKeys.push('Command+' + l);
cancelledKeys.push('Ctrl+' + l);
cancelledKeys.push('Command+' + l);
}
for (let i = 0; i < cancelledKeys.length; i++) {
@@ -727,13 +736,14 @@ class NoteTextComponent extends React.Component {
}
async doCommand(command) {
if (!command) return;
if (!command || !this.state.note) return;
let commandProcessed = true;
if (command.name === 'exportPdf' && this.webview_) {
const path = bridge().showSaveDialog({
filters: [{ name: _('PDF File'), extensions: ['pdf']}]
filters: [{ name: _('PDF File'), extensions: ['pdf']}],
defaultPath: safeFilename(this.state.note.title),
});
if (path) {
@@ -751,6 +761,8 @@ class NoteTextComponent extends React.Component {
this.commandTextBold();
} else if (command.name === 'textItalic') {
this.commandTextItalic();
} else if (command.name === 'insertDateTime' ) {
this.commandDateTime();
} else if (command.name === 'commandStartExternalEditing') {
this.commandStartExternalEditing();
} else {
@@ -828,15 +840,17 @@ class NoteTextComponent extends React.Component {
destroyExternalEditWatcher() {
if (!this.externalEditWatcher_) return;
console.info(this.externalEditWatcher_);
this.externalEditWatcher_.off('noteChange', this.externalEditWatcher_noteChange);
this.externalEditWatcher_.stopWatchingAll();
this.externalEditWatcher_ = null;
}
async commandStartExternalEditing() {
this.externalEditWatcher().openAndWatch(this.state.note);
try {
await this.externalEditWatcher().openAndWatch(this.state.note);
} catch (error) {
bridge().showErrorMessageBox(_('Error opening note in editor: %s', error.message));
}
}
async commandStopExternalEditing() {
@@ -924,8 +938,6 @@ class NoteTextComponent extends React.Component {
end: { row: p.row, column: p.column + defaultText.length },
};
console.info('DDDDD', defaultText, newRange);
this.updateEditorWithDelay((editor) => {
if (defaultText && newRange) {
const range = this.selectionRange_;
@@ -954,6 +966,10 @@ class NoteTextComponent extends React.Component {
this.wrapSelectionWithStrings('*', '*', _('emphasized text'));
}
commandDateTime() {
this.wrapSelectionWithStrings(time.formatMsToLocal(new Date().getTime()));
}
commandTextCode() {
this.wrapSelectionWithStrings('`', '`');
}
@@ -1046,7 +1062,7 @@ class NoteTextComponent extends React.Component {
tooltip: _('Hyperlink'),
iconName: 'fa-link',
onClick: () => { return this.commandTextLink(); },
});
});
toolbarItems.push({
tooltip: _('Code'),
@@ -1094,6 +1110,12 @@ class NoteTextComponent extends React.Component {
onClick: () => { return this.commandTextHorizontalRule(); },
});
toolbarItems.push({
tooltip: _('Insert Date Time'),
iconName: 'fa-calendar-plus-o',
onClick: () => { return this.commandDateTime(); },
});
toolbarItems.push({
type: 'separator',
});
@@ -1274,7 +1296,7 @@ class NoteTextComponent extends React.Component {
const viewer = <webview
style={viewerStyle}
nodeintegration="1"
preload="gui/note-viewer/preload.js"
src="gui/note-viewer/index.html"
ref={(elem) => { this.webview_ref(elem); } }
/>
@@ -1325,7 +1347,7 @@ class NoteTextComponent extends React.Component {
editorProps={{$blockScrolling: true}}
// This is buggy (gets outside the container)
highlightActiveLine={false}
highlightActiveLine={false}
/>
return (

View File

@@ -34,7 +34,6 @@
<div id="content" ondragstart="return false;" ondrop="return false;"></div>
<script>
const { ipcRenderer } = require('electron');
const contentElement = document.getElementById('content');
// ----------------------------------------------------------------------
@@ -230,9 +229,23 @@
if (element && element.getAttribute('data-resource-id')) {
ipcRenderer.sendToHost('contextMenu', {
type: element.getAttribute('src') ? 'image' : 'link',
type: element.getAttribute('src') ? 'image' : 'resource',
resourceId: element.getAttribute('data-resource-id'),
});
} else {
const selectedText = window.getSelection().toString();
if (selectedText) {
ipcRenderer.sendToHost('contextMenu', {
type: 'text',
textToCopy: selectedText,
});
} else if (event.target.getAttribute('href')) {
ipcRenderer.sendToHost('contextMenu', {
type: 'link',
textToCopy: event.target.getAttribute('href'),
});
}
}
});

View File

@@ -0,0 +1,4 @@
// Define here Electron objects that need to be accessed from the WebView
// https://github.com/electron/electron/blob/master/docs/tutorial/security.md#2-disable-nodejs-integration-for-remote-content
window.ipcRenderer = require('electron').ipcRenderer;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,6 +1,6 @@
{
"name": "Joplin",
"version": "1.0.102",
"version": "1.0.104",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@@ -2051,9 +2051,9 @@
}
},
"electron-dl": {
"version": "1.10.0",
"resolved": "https://registry.npmjs.org/electron-dl/-/electron-dl-1.10.0.tgz",
"integrity": "sha1-+UQWBkBW/G8qhq5JhhTJNSaJCvk=",
"version": "1.12.0",
"resolved": "https://registry.npmjs.org/electron-dl/-/electron-dl-1.12.0.tgz",
"integrity": "sha512-UMc2CL45Ybpvu66LDPYzwmDRmYK4Ivz+wdnTM0eXcNMztvQwhixAk2UPme1c7McqG8bAlKEkQpZn3epmQy4EWg==",
"requires": {
"ext-name": "^5.0.0",
"pupa": "^1.0.0",
@@ -4345,9 +4345,9 @@
"integrity": "sha512-OEUllcVoydBHGN1z84yfQDimn58pZNNNXgZlHXSboxMlFvgI6MXSWpWKpFRra7H1HxpVhHTkrghfRW49k6yjeg=="
},
"mime-db": {
"version": "1.31.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.31.0.tgz",
"integrity": "sha512-oB3w9lx50CMd6nfonoV5rBRUbJtjMifUHaFb5MfzjC8ksAIfVjT0BsX46SjjqBz7n9JGTrTX3paIeLSK+rS5fQ=="
"version": "1.34.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.34.0.tgz",
"integrity": "sha1-RS0Oz/XDA0am3B5kseruDTcZ/5o="
},
"mime-types": {
"version": "2.1.18",

View File

@@ -1,6 +1,6 @@
{
"name": "Joplin",
"version": "1.0.102",
"version": "1.0.104",
"description": "Joplin for Desktop",
"main": "main.js",
"scripts": {

View File

@@ -20,9 +20,9 @@ Three types of applications are available: for the **desktop** (Windows, macOS a
Operating System | Download | Alternative
-----------------|--------|-------------------
Windows (32 and 64-bit) | <a href='https://github.com/laurent22/joplin/releases/download/v1.0.101/Joplin-Setup-1.0.101.exe'><img alt='Get it on Windows' height="40px" src='https://joplin.cozic.net/images/BadgeWindows.png'/></a> | or Get the <a href='https://github.com/laurent22/joplin/releases/download/v1.0.101/JoplinPortable.exe'>Portable version</a><br>(to run from a USB key, etc.)
macOS | <a href='https://github.com/laurent22/joplin/releases/download/v1.0.101/Joplin-1.0.101.dmg'><img alt='Get it on macOS' height="40px" src='https://joplin.cozic.net/images/BadgeMacOS.png'/></a> |
Linux | <a href='https://github.com/laurent22/joplin/releases/download/v1.0.101/Joplin-1.0.101-x86_64.AppImage'><img alt='Get it on Linux' height="40px" src='https://joplin.cozic.net/images/BadgeLinux.png'/></a> | An Arch Linux package<br>[is also available](#terminal-application).
Windows (32 and 64-bit) | <a href='https://github.com/laurent22/joplin/releases/download/v1.0.103/Joplin-Setup-1.0.103.exe'><img alt='Get it on Windows' height="40px" src='https://joplin.cozic.net/images/BadgeWindows.png'/></a> | or Get the <a href='https://github.com/laurent22/joplin/releases/download/v1.0.103/JoplinPortable.exe'>Portable version</a><br>(to run from a USB key, etc.)
macOS | <a href='https://github.com/laurent22/joplin/releases/download/v1.0.103/Joplin-1.0.103.dmg'><img alt='Get it on macOS' height="40px" src='https://joplin.cozic.net/images/BadgeMacOS.png'/></a> |
Linux | <a href='https://github.com/laurent22/joplin/releases/download/v1.0.103/Joplin-1.0.103-x86_64.AppImage'><img alt='Get it on Linux' height="40px" src='https://joplin.cozic.net/images/BadgeLinux.png'/></a> | An Arch Linux package<br>[is also available](#terminal-application).
The [portable application](https://en.wikipedia.org/wiki/Portable_application) allows installing the software on a portable device such as a USB key. Simply copy the file JoplinPortable.exe in any directory on that USB key ; the application will then create a directory called "JoplinProfile" next to the executable file.
@@ -30,7 +30,7 @@ The [portable application](https://en.wikipedia.org/wiki/Portable_application) a
Operating System | Download | Alt. Download
-----------------|----------|----------------
Android | <a href='https://play.google.com/store/apps/details?id=net.cozic.joplin&utm_source=GitHub&utm_campaign=README&pcampaignid=MKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1'><img alt='Get it on Google Play' height="40px" src='https://joplin.cozic.net/images/BadgeAndroid.png'/></a> | or [Download APK File](https://github.com/laurent22/joplin-android/releases/download/android-v1.0.128/joplin-v1.0.128.apk)
Android | <a href='https://play.google.com/store/apps/details?id=net.cozic.joplin&utm_source=GitHub&utm_campaign=README&pcampaignid=MKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1'><img alt='Get it on Google Play' height="40px" src='https://joplin.cozic.net/images/BadgeAndroid.png'/></a> | or [Download APK File](https://github.com/laurent22/joplin-android/releases/download/android-v1.0.129/joplin-v1.0.129.apk)
iOS | <a href='https://itunes.apple.com/us/app/joplin/id1315599797'><img alt='Get it on the App Store' height="40px" src='https://joplin.cozic.net/images/BadgeIOS.png'/></a> | -
## Terminal application
@@ -304,24 +304,24 @@ Current translations:
<!-- LOCALE-TABLE-AUTO-GENERATED -->
&nbsp; | Language | Po File | Last translator | Percent done
---|---|---|---|---
![](https://joplin.cozic.net/images/flags/es/basque_country.png) | Basque | [eu](https://github.com/laurent22/joplin/blob/master/CliClient/locales/eu.po) | juan.abasolo@ehu.eus | 66%
![](https://joplin.cozic.net/images/flags/es/catalonia.png) | Catalan | [ca](https://github.com/laurent22/joplin/blob/master/CliClient/locales/ca.po) | jmontane, 2018 | 95%
![](https://joplin.cozic.net/images/flags/country-4x3/hr.png) | Croatian | [hr_HR](https://github.com/laurent22/joplin/blob/master/CliClient/locales/hr_HR.po) | Hrvoje Mandić (trbuhom@net.hr) | 54%
![](https://joplin.cozic.net/images/flags/country-4x3/cz.png) | Czech | [cs_CZ](https://github.com/laurent22/joplin/blob/master/CliClient/locales/cs_CZ.po) | Lukas Helebrandt (lukas@aiya.cz) | 84%
![](https://joplin.cozic.net/images/flags/country-4x3/dk.png) | Dansk | [da_DK](https://github.com/laurent22/joplin/blob/master/CliClient/locales/da_DK.po) | Morten Juhl-Johansen Zölde-Fejér (mjjzf@syntaktisk. | 86%
![](https://joplin.cozic.net/images/flags/country-4x3/de.png) | Deutsch | [de_DE](https://github.com/laurent22/joplin/blob/master/CliClient/locales/de_DE.po) | Philipp Zumstein (zuphilip@gmail.com) | 93%
![](https://joplin.cozic.net/images/flags/es/basque_country.png) | Basque | [eu](https://github.com/laurent22/joplin/blob/master/CliClient/locales/eu.po) | juan.abasolo@ehu.eus | 65%
![](https://joplin.cozic.net/images/flags/es/catalonia.png) | Catalan | [ca](https://github.com/laurent22/joplin/blob/master/CliClient/locales/ca.po) | jmontane, 2018 | 93%
![](https://joplin.cozic.net/images/flags/country-4x3/hr.png) | Croatian | [hr_HR](https://github.com/laurent22/joplin/blob/master/CliClient/locales/hr_HR.po) | Hrvoje Mandić (trbuhom@net.hr) | 53%
![](https://joplin.cozic.net/images/flags/country-4x3/cz.png) | Czech | [cs_CZ](https://github.com/laurent22/joplin/blob/master/CliClient/locales/cs_CZ.po) | Lukas Helebrandt (lukas@aiya.cz) | 82%
![](https://joplin.cozic.net/images/flags/country-4x3/dk.png) | Dansk | [da_DK](https://github.com/laurent22/joplin/blob/master/CliClient/locales/da_DK.po) | Morten Juhl-Johansen Zölde-Fejér (mjjzf@syntaktisk. | 84%
![](https://joplin.cozic.net/images/flags/country-4x3/de.png) | Deutsch | [de_DE](https://github.com/laurent22/joplin/blob/master/CliClient/locales/de_DE.po) | Philipp Zumstein (zuphilip@gmail.com) | 92%
![](https://joplin.cozic.net/images/flags/country-4x3/gb.png) | English | [en_GB](https://github.com/laurent22/joplin/blob/master/CliClient/locales/en_GB.po) | | 100%
![](https://joplin.cozic.net/images/flags/country-4x3/es.png) | Español | [es_ES](https://github.com/laurent22/joplin/blob/master/CliClient/locales/es_ES.po) | Fernando Martín (f@mrtn.es) | 93%
![](https://joplin.cozic.net/images/flags/country-4x3/es.png) | Español | [es_ES](https://github.com/laurent22/joplin/blob/master/CliClient/locales/es_ES.po) | Fernando Martín (f@mrtn.es) | 92%
![](https://joplin.cozic.net/images/flags/country-4x3/fr.png) | Français | [fr_FR](https://github.com/laurent22/joplin/blob/master/CliClient/locales/fr_FR.po) | Laurent Cozic | 100%
![](https://joplin.cozic.net/images/flags/es/galicia.png) | Galician | [gl_ES](https://github.com/laurent22/joplin/blob/master/CliClient/locales/gl_ES.po) | Marcos Lans (marcoslansgarza@gmail.com) | 84%
![](https://joplin.cozic.net/images/flags/country-4x3/it.png) | Italiano | [it_IT](https://github.com/laurent22/joplin/blob/master/CliClient/locales/it_IT.po) | | 56%
![](https://joplin.cozic.net/images/flags/country-4x3/be.png) | Nederlands | [nl_BE](https://github.com/laurent22/joplin/blob/master/CliClient/locales/nl_BE.po) | | 67%
![](https://joplin.cozic.net/images/flags/country-4x3/br.png) | Português (Brasil) | [pt_BR](https://github.com/laurent22/joplin/blob/master/CliClient/locales/pt_BR.po) | Renato Nunes Bastos (rnbastos@gmail.com) | 86%
![](https://joplin.cozic.net/images/flags/country-4x3/si.png) | Slovenian | [sl_SI](https://github.com/laurent22/joplin/blob/master/CliClient/locales/sl_SI.po) | | 83%
![](https://joplin.cozic.net/images/flags/country-4x3/ru.png) | Русский | [ru_RU](https://github.com/laurent22/joplin/blob/master/CliClient/locales/ru_RU.po) | Artyom Karlov (artyom.karlov@gmail.com) | 83%
![](https://joplin.cozic.net/images/flags/country-4x3/cn.png) | 中文 (简体) | [zh_CN](https://github.com/laurent22/joplin/blob/master/CliClient/locales/zh_CN.po) | | 98%
![](https://joplin.cozic.net/images/flags/country-4x3/tw.png) | 中文 (繁體) | [zh_TW](https://github.com/laurent22/joplin/blob/master/CliClient/locales/zh_TW.po) | penguinsam (samliu@gmail.com) | 72%
![](https://joplin.cozic.net/images/flags/country-4x3/jp.png) | 日本語 | [ja_JP](https://github.com/laurent22/joplin/blob/master/CliClient/locales/ja_JP.po) | | 54%
![](https://joplin.cozic.net/images/flags/es/galicia.png) | Galician | [gl_ES](https://github.com/laurent22/joplin/blob/master/CliClient/locales/gl_ES.po) | Marcos Lans (marcoslansgarza@gmail.com) | 83%
![](https://joplin.cozic.net/images/flags/country-4x3/it.png) | Italiano | [it_IT](https://github.com/laurent22/joplin/blob/master/CliClient/locales/it_IT.po) | | 55%
![](https://joplin.cozic.net/images/flags/country-4x3/be.png) | Nederlands | [nl_BE](https://github.com/laurent22/joplin/blob/master/CliClient/locales/nl_BE.po) | | 66%
![](https://joplin.cozic.net/images/flags/country-4x3/br.png) | Português (Brasil) | [pt_BR](https://github.com/laurent22/joplin/blob/master/CliClient/locales/pt_BR.po) | Renato Nunes Bastos (rnbastos@gmail.com) | 85%
![](https://joplin.cozic.net/images/flags/country-4x3/si.png) | Slovenian | [sl_SI](https://github.com/laurent22/joplin/blob/master/CliClient/locales/sl_SI.po) | | 82%
![](https://joplin.cozic.net/images/flags/country-4x3/ru.png) | Русский | [ru_RU](https://github.com/laurent22/joplin/blob/master/CliClient/locales/ru_RU.po) | Artyom Karlov (artyom.karlov@gmail.com) | 82%
![](https://joplin.cozic.net/images/flags/country-4x3/cn.png) | 中文 (简体) | [zh_CN](https://github.com/laurent22/joplin/blob/master/CliClient/locales/zh_CN.po) | | 96%
![](https://joplin.cozic.net/images/flags/country-4x3/tw.png) | 中文 (繁體) | [zh_TW](https://github.com/laurent22/joplin/blob/master/CliClient/locales/zh_TW.po) | penguinsam (samliu@gmail.com) | 71%
![](https://joplin.cozic.net/images/flags/country-4x3/jp.png) | 日本語 | [ja_JP](https://github.com/laurent22/joplin/blob/master/CliClient/locales/ja_JP.po) | | 53%
<!-- LOCALE-TABLE-AUTO-GENERATED -->
# Known bugs

View File

@@ -90,8 +90,8 @@ android {
applicationId "net.cozic.joplin"
minSdkVersion 16
targetSdkVersion 26
versionCode 2097306
versionName "1.0.128"
versionCode 2097307
versionName "1.0.129"
ndk {
abiFilters "armeabi-v7a", "x86"
}

View File

@@ -94,6 +94,7 @@ class ClipperServer {
}
if (requestNote.source_url) output.source_url = requestNote.source_url;
if (requestNote.author) output.author = requestNote.author;
return output;
}

View File

@@ -216,7 +216,7 @@ class MdToHtml {
if (isInlineCode) {
openTag = null;
} else if (tag && t.type.indexOf('html_inline') >= 0) {
} else if (tag && (t.type.indexOf('html_inline') >= 0 || t.type.indexOf('html_block') >= 0)) {
openTag = null;
} else if (tag && t.type.indexOf('_open') >= 0) {
openTag = tag;
@@ -277,7 +277,7 @@ class MdToHtml {
if (t.type === 'image') {
if (tokenContent) attrs.push(['title', tokenContent]);
output.push(this.renderImage_(attrs, options));
} else if (t.type === 'html_inline') {
} else if (t.type === 'html_inline' || t.type === 'html_block') {
output.push(t.content);
} else if (t.type === 'softbreak') {
output.push('<br/>');
@@ -392,7 +392,7 @@ class MdToHtml {
const md = new MarkdownIt({
breaks: true,
linkify: true,
html: false, // For security, HTML tags are not supported - https://github.com/laurent22/joplin/issues/500
html: true,
});
// This is currently used only so that the $expression$ and $$\nexpression\n$$ blocks are translated
@@ -558,6 +558,10 @@ class MdToHtml {
left: -0.02em;
color: ` + style.htmlColor + `;
}
pre {
white-space: pre-wrap;
}
}
`;

View File

@@ -29,6 +29,19 @@ class BaseItem extends BaseModel {
throw new Error('Invalid class name: ' + className);
}
static async findUniqueItemTitle(title) {
let counter = 1;
let titleToTry = title;
while (true) {
const item = await this.loadByField('title', titleToTry);
if (!item) return titleToTry;
titleToTry = title + ' (' + counter + ')';
counter++;
if (counter >= 100) titleToTry = title + ' (' + ((new Date()).getTime()) + ')';
if (counter >= 1000) throw new Error('Cannot find unique title');
}
}
// Need to dynamically load the classes like this to avoid circular dependencies
static getClass(name) {
for (let i = 0; i < BaseItem.syncItemDefinitions_.length; i++) {

View File

@@ -33,19 +33,6 @@ class Folder extends BaseItem {
}
}
static async findUniqueFolderTitle(title) {
let counter = 1;
let titleToTry = title;
while (true) {
const folder = await this.loadByField('title', titleToTry);
if (!folder) return titleToTry;
titleToTry = title + ' (' + counter + ')';
counter++;
if (counter >= 100) titleToTry = title + ' (' + ((new Date()).getTime()) + ')';
if (counter >= 1000) throw new Error('Cannot find unique title');
}
}
static noteIds(parentId) {
return this.db().selectAll('SELECT id FROM notes WHERE is_conflict = 0 AND parent_id = ?', [parentId]).then((rows) => {
let output = [];

View File

@@ -420,6 +420,7 @@ class Note extends BaseItem {
static async duplicate(noteId, options = null) {
const changes = options && options.changes;
const uniqueTitle = options && options.uniqueTitle;
const originalNote = await Note.load(noteId);
if (!originalNote) throw new Error('Unknown note: ' + noteId);
@@ -432,6 +433,11 @@ class Note extends BaseItem {
newNote[n] = changes[n];
}
if (uniqueTitle) {
const title = await Note.findUniqueItemTitle(uniqueTitle);
newNote.title = title;
}
return this.save(newNote);
}

View File

@@ -73,7 +73,12 @@ class Resource extends BaseItem {
}
try {
await this.encryptionService().decryptFile(encryptedPath, plainTextPath);
// const stat = await this.fsDriver().stat(encryptedPath);
await this.encryptionService().decryptFile(encryptedPath, plainTextPath, {
// onProgress: (progress) => {
// console.info('Decryption: ', progress.doneSize / stat.size);
// },
});
} catch (error) {
if (error.code === 'invalidIdentifier') {
// As the identifier is invalid it most likely means that this is not encrypted data
@@ -108,7 +113,12 @@ class Resource extends BaseItem {
if (resource.encryption_blob_encrypted) return { path: encryptedPath, resource: resource };
try {
await this.encryptionService().encryptFile(plainTextPath, encryptedPath);
// const stat = await this.fsDriver().stat(plainTextPath);
await this.encryptionService().encryptFile(plainTextPath, encryptedPath, {
// onProgress: (progress) => {
// console.info(progress.doneSize / stat.size);
// },
});
} catch (error) {
if (error.code === 'ENOENT') throw new JoplinError('File not found:' + error.toString(), 'fileNotFound');
throw error;

View File

@@ -32,7 +32,6 @@ class Setting extends BaseModel {
this.metadata_ = {
'activeFolderId': { value: '', type: Setting.TYPE_STRING, public: false },
'firstStart': { value: true, type: Setting.TYPE_BOOL, public: false },
'editor': { value: '', type: Setting.TYPE_STRING, public: true, appTypes: ['cli'], label: () => _('Text editor'), description: () => _('The editor that will be used to open a note. If none is provided it will try to auto-detect the default editor.') },
'locale': { value: defaultLocale(), type: Setting.TYPE_STRING, isEnum: true, public: true, label: () => _('Language'), options: () => {
return ObjectUtils.sortByValue(supportedLocalesToLanguages());
}},
@@ -116,6 +115,7 @@ class Setting extends BaseModel {
}},
'noteVisiblePanes': { value: ['editor', 'viewer'], type: Setting.TYPE_ARRAY, public: false, appTypes: ['desktop'] },
'sidebarVisibility': { value: true, type: Setting.TYPE_BOOL, public: false, appTypes: ['desktop'] },
'editor': { value: '', type: Setting.TYPE_STRING, public: true, appTypes: ['cli', 'desktop'], label: () => _('Text editor command'), description: () => _('The editor command (may include arguments) that will be used to open a note. If none is provided it will try to auto-detect the default editor.') },
'showAdvancedOptions': { value: false, type: Setting.TYPE_BOOL, public: true, appTypes: ['mobile' ], label: () => _('Show advanced options') },
'sync.target': { value: SyncTargetRegistry.nameToId('dropbox'), type: Setting.TYPE_INT, isEnum: true, public: true, label: () => _('Synchronisation target'), description: (appType) => { return appType !== 'cli' ? null : _('The target to synchonise to. Each sync target may have additional parameters which are named as `sync.NUM.NAME` (all documented below).') }, options: () => {
return SyncTargetRegistry.idAndLabelPlainObject();
@@ -150,7 +150,7 @@ class Setting extends BaseModel {
'sync.6.context': { value: '', type: Setting.TYPE_STRING, public: false },
'sync.7.context': { value: '', type: Setting.TYPE_STRING, public: false },
'net.customCertificates': { value: '', type: Setting.TYPE_STRING, show: (settings) => { return [SyncTargetRegistry.nameToId('nextcloud'), SyncTargetRegistry.nameToId('webdav')].indexOf(settings['sync.target']) >= 0 }, public: true, appTypes: ['desktop', 'cli'], label: () => _('Custom TLS certificates'), description: () => _('Comma-separated list of paths to directories to load the certificates from, or path to individual cert files. For example: /my/cert_dir, /other/custom.pem') },
'net.customCertificates': { value: '', type: Setting.TYPE_STRING, show: (settings) => { return [SyncTargetRegistry.nameToId('nextcloud'), SyncTargetRegistry.nameToId('webdav')].indexOf(settings['sync.target']) >= 0 }, public: true, appTypes: ['desktop', 'cli'], label: () => _('Custom TLS certificates'), description: () => _('Comma-separated list of paths to directories to load the certificates from, or path to individual cert files. For example: /my/cert_dir, /other/custom.pem. Note that if you make changes to the TLS settings, you must save your changes before clicking on "Check synchronisation configuration".') },
'net.ignoreTlsErrors': { value: false, type: Setting.TYPE_BOOL, show: (settings) => { return [SyncTargetRegistry.nameToId('nextcloud'), SyncTargetRegistry.nameToId('webdav')].indexOf(settings['sync.target']) >= 0 }, public: true, appTypes: ['desktop', 'cli'], label: () => _('Ignore TLS certificate errors') },
};

View File

@@ -14,9 +14,20 @@ function hexPad(s, length) {
class EncryptionService {
constructor() {
// Note: 1 MB is very slow with Node and probably even worse on mobile. 50 KB seems to work well
// and doesn't produce too much overhead in terms of headers.
this.chunkSize_ = 50000;
// Note: 1 MB is very slow with Node and probably even worse on mobile.
//
// On mobile the time it takes to decrypt increases exponentially for some reason, so it's important
// to have a relatively small size so as not to freeze the app. For example, on Android 7.1 simulator
// with 4.1 GB RAM, it takes this much to decrypt a block;
//
// 50KB => 1000 ms
// 25KB => 250ms
// 10KB => 200ms
// 5KB => 10ms
//
// So making the block 10 times smaller make it 100 times faster! So for now using 5KB. This can be
// changed easily since the chunk size is incorporated into the encrypted data.
this.chunkSize_ = 5000;
this.loadedMasterKeys_ = {};
this.activeMasterKeyId_ = null;
this.defaultEncryptionMethod_ = EncryptionService.METHOD_SJCL;
@@ -299,7 +310,9 @@ class EncryptionService {
throw new Error('Unknown decryption method: ' + method);
}
async encryptAbstract_(source, destination) {
async encryptAbstract_(source, destination, options = null) {
if (!options) options = {};
const method = this.defaultEncryptionMethod();
const masterKeyId = this.activeMasterKeyId();
const masterKeyPlainText = this.loadedMasterKey(masterKeyId);
@@ -311,17 +324,29 @@ class EncryptionService {
await destination.append(this.encodeHeader_(header));
let doneSize = 0;
while (true) {
const block = await source.read(this.chunkSize_);
if (!block) break;
doneSize += this.chunkSize_;
if (options.onProgress) options.onProgress({ doneSize: doneSize });
// Wait for a frame so that the app remains responsive in mobile.
// https://corbt.com/posts/2015/12/22/breaking-up-heavy-processing-in-react-native.html
await shim.waitForFrame();
const encrypted = await this.encrypt(method, masterKeyPlainText, block);
await destination.append(padLeft(encrypted.length.toString(16), 6, '0'));
await destination.append(encrypted);
}
}
async decryptAbstract_(source, destination) {
async decryptAbstract_(source, destination, options = null) {
if (!options) options = {};
const identifier = await source.read(5);
if (!this.isValidHeaderIdentifier(identifier)) throw new JoplinError('Invalid encryption identifier. Data is not actually encrypted? ID was: ' + identifier, 'invalidIdentifier');
const mdSizeHex = await source.read(6);
@@ -331,6 +356,8 @@ class EncryptionService {
const header = this.decodeHeader_(identifier + mdSizeHex + md);
const masterKeyPlainText = this.loadedMasterKey(header.masterKeyId);
let doneSize = 0;
while (true) {
const lengthHex = await source.read(6);
if (!lengthHex) break;
@@ -338,6 +365,11 @@ class EncryptionService {
const length = parseInt(lengthHex, 16);
if (!length) continue; // Weird but could be not completely invalid (block of size 0) so continue decrypting
doneSize += length;
if (options.onProgress) options.onProgress({ doneSize: doneSize });
await shim.waitForFrame();
const block = await source.read(length);
const plainText = await this.decrypt(header.encryptionMethod, masterKeyPlainText, block);
@@ -395,21 +427,21 @@ class EncryptionService {
};
}
async encryptString(plainText) {
async encryptString(plainText, options = null) {
const source = this.stringReader_(plainText);
const destination = this.stringWriter_();
await this.encryptAbstract_(source, destination);
await this.encryptAbstract_(source, destination, options);
return destination.result();
}
async decryptString(cipherText) {
async decryptString(cipherText, options = null) {
const source = this.stringReader_(cipherText);
const destination = this.stringWriter_();
await this.decryptAbstract_(source, destination);
await this.decryptAbstract_(source, destination, options);
return destination.data.join('');
}
async encryptFile(srcPath, destPath) {
async encryptFile(srcPath, destPath, options = null) {
let source = await this.fileReader_(srcPath, 'base64');
let destination = await this.fileWriter_(destPath, 'ascii');
@@ -422,7 +454,7 @@ class EncryptionService {
try {
await this.fsDriver().unlink(destPath);
await this.encryptAbstract_(source, destination);
await this.encryptAbstract_(source, destination, options);
} catch (error) {
cleanUp();
await this.fsDriver().unlink(destPath);
@@ -432,7 +464,7 @@ class EncryptionService {
await cleanUp();
}
async decryptFile(srcPath, destPath) {
async decryptFile(srcPath, destPath, options = null) {
let source = await this.fileReader_(srcPath, 'ascii');
let destination = await this.fileWriter_(destPath, 'base64');
@@ -445,7 +477,7 @@ class EncryptionService {
try {
await this.fsDriver().unlink(destPath);
await this.decryptAbstract_(source, destination);
await this.decryptAbstract_(source, destination, options);
} catch (error) {
cleanUp();
await this.fsDriver().unlink(destPath);

View File

@@ -4,6 +4,8 @@ const Setting = require('lib/models/Setting');
const { shim } = require('lib/shim');
const chokidar = require('chokidar');
const EventEmitter = require('events');
const { splitCommandString } = require('lib/string-utils');
const spawn = require('child_process').spawn;
class ExternalEditWatcher {
@@ -115,6 +117,40 @@ class ExternalEditWatcher {
return false;
}
textEditorCommand() {
const editorCommand = Setting.value('editor');
if (!editorCommand) return null;
const s = splitCommandString(editorCommand);
const path = s.splice(0, 1);
if (!path.length) throw new Error('Invalid editor command: ' + editorCommand);
return {
path: path[0],
args: s,
};
}
async spawnCommand(path, args, options) {
return new Promise((resolve, reject) => {
const subProcess = spawn(path, args, options);
const iid = setInterval(() => {
if (subProcess && subProcess.pid) {
this.logger().debug('Started editor with PID ' + subProcess.pid);
clearInterval(iid);
resolve();
}
}, 100);
subProcess.on('error', (error) => {
clearInterval(iid);
reject(error);
});
});
}
async openAndWatch(note) {
if (!note || !note.id) {
this.logger().warn('ExternalEditWatcher: Cannot open note: ', note);
@@ -123,7 +159,14 @@ class ExternalEditWatcher {
const filePath = await this.writeNoteToFile_(note);
this.watch(filePath);
bridge().openExternal('file://' + filePath);
const cmd = this.textEditorCommand();
if (!cmd) {
bridge().openExternal('file://' + filePath);
} else {
cmd.args.push(filePath);
await this.spawnCommand(cmd.path, cmd.args, { detached: true });
}
this.dispatch({
type: 'NOTE_FILE_WATCHER_ADD',

View File

@@ -27,12 +27,12 @@ class InteropService {
let importModules = [
{
format: 'jex',
fileExtension: 'jex',
fileExtensions: ['jex'],
sources: ['file'],
description: _('Joplin Export File'),
}, {
format: 'md',
fileExtension: 'md',
fileExtensions: ['md', 'markdown'],
sources: ['file', 'directory'],
isNoteArchive: false, // Tells whether the file can contain multiple notes (eg. Enex or Jex format)
description: _('Markdown'),
@@ -42,7 +42,7 @@ class InteropService {
description: _('Joplin Export Directory'),
}, {
format: 'enex',
fileExtension: 'enex',
fileExtensions: ['enex'],
sources: ['file'],
description: _('Evernote Export File'),
},
@@ -51,7 +51,7 @@ class InteropService {
let exportModules = [
{
format: 'jex',
fileExtension: 'jex',
fileExtensions: ['jex'],
target: 'file',
description: _('Joplin Export File'),
}, {
@@ -108,7 +108,9 @@ class InteropService {
const module = this.moduleByFormat_(type, format);
if (!module) throw new Error(_('Cannot load "%s" module for format "%s"', type, format));
const ModuleClass = require(module.path);
return new ModuleClass();
const output = new ModuleClass();
output.setMetadata(module);
return output;
}
moduleByFileExtension_(type, ext) {
@@ -119,7 +121,7 @@ class InteropService {
for (let i = 0; i < modules.length; i++) {
const m = modules[i];
if (type !== m.type) continue;
if (m.fileExtension === ext) return m;
if (m.fileExtensions.indexOf(ext) >= 0) return m;
}
return null;

View File

@@ -5,6 +5,14 @@ class InteropService_Exporter_Base {
async processResource(resource, filePath) {}
async close() {}
setMetadata(md) {
this.metadata_ = md;
}
metadata() {
return this.metadata_;
}
async temporaryDirectory_(createIt) {
const md5 = require('md5');
const tempDir = require('os').tmpdir() + '/' + md5(Math.random() + Date.now());

View File

@@ -1,5 +1,13 @@
class InteropService_Importer_Base {
setMetadata(md) {
this.metadata_ = md;
}
metadata() {
return this.metadata_;
}
async init(sourcePath, options) {
this.sourcePath_ = sourcePath;
this.options_ = options;

View File

@@ -23,7 +23,7 @@ class InteropService_Importer_Enex extends InteropService_Importer_Base {
let folder = this.options_.destinationFolder;
if (!folder) {
const folderTitle = await Folder.findUniqueFolderTitle(filename(this.sourcePath_));
const folderTitle = await Folder.findUniqueItemTitle(filename(this.sourcePath_));
folder = await Folder.save({ title: folderTitle });
}

View File

@@ -21,18 +21,20 @@ class InteropService_Importer_Md extends InteropService_Importer_Base {
async exec(result) {
let parentFolderId = null;
const supportedFileExtension = this.metadata().fileExtensions;
const filePaths = [];
if (await shim.fsDriver().isDirectory(this.sourcePath_)) {
const stats = await shim.fsDriver().readDirStats(this.sourcePath_);
for (let i = 0; i < stats.length; i++) {
const stat = stats[i];
if (fileExtension(stat.path).toLowerCase() === 'md') {
if (supportedFileExtension.indexOf(fileExtension(stat.path).toLowerCase()) >= 0) {
filePaths.push(this.sourcePath_ + '/' + stat.path);
}
}
if (!this.options_.destinationFolder) {
const folderTitle = await Folder.findUniqueFolderTitle(basename(rtrimSlashes(this.sourcePath_)));
const folderTitle = await Folder.findUniqueItemTitle(basename(rtrimSlashes(this.sourcePath_)));
const folder = await Folder.save({ title: folderTitle });
parentFolderId = folder.id;
} else {

View File

@@ -51,7 +51,7 @@ class InteropService_Importer_Raw extends InteropService_Importer_Base {
let defaultFolder_ = null;
const defaultFolder = async () => {
if (defaultFolder_) return defaultFolder_;
const folderTitle = await Folder.findUniqueFolderTitle(this.options_.defaultFolderTitle ? this.options_.defaultFolderTitle : 'Imported');
const folderTitle = await Folder.findUniqueItemTitle(this.options_.defaultFolderTitle ? this.options_.defaultFolderTitle : 'Imported');
defaultFolder_ = await Folder.save({ title: folderTitle });
return defaultFolder_;
}
@@ -100,7 +100,7 @@ class InteropService_Importer_Raw extends InteropService_Importer_Base {
if (!itemIdMap[item.id]) itemIdMap[item.id] = uuid.create();
item.id = itemIdMap[item.id];
item.title = await Folder.findUniqueFolderTitle(item.title);
item.title = await Folder.findUniqueItemTitle(item.title);
if (item.parent_id) {
await setFolderToImportTo(item.parent_id);

View File

@@ -300,6 +300,8 @@ function shimInit() {
bridge().openExternal(url)
}
shim.waitForFrame = () => {}
}
module.exports = { shimInit };

View File

@@ -123,6 +123,12 @@ function shimInit() {
shim.openUrl = (url) => {
Linking.openURL(url);
}
shim.waitForFrame = () => {
return new Promise(function(resolve, reject) {
requestAnimationFrame(function() { resolve(); });
});
}
}
module.exports = { shimInit };

View File

@@ -139,5 +139,6 @@ shim.attachFileToNote = async (note, filePath) => {}
shim.imageFromDataUrl = async function(imageDataUrl, filePath, options = null) { throw new Error('Not implemented') }
shim.Buffer = null;
shim.openUrl = () => { throw new Error('Not implemented'); }
shim.waitForFrame = () => { throw new Error('Not implemented'); }
module.exports = { shim };

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -250,6 +250,16 @@
</ul>
</div>
<h1 id="joplin-changelog">Joplin changelog</h1>
<h2 id="-v1-0-103-https-github-com-laurent22-joplin-releases-tag-v1-0-103-2018-06-21t19-38-13z"><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.103">v1.0.103</a> - 2018-06-21T19:38:13Z</h2>
<ul>
<li>New: Resolves <a href="https://github.com/laurent22/joplin/issues/611">#611</a>: Allow opening and editing note in external editor</li>
<li>New: <a href="https://github.com/laurent22/joplin/issues/628">#628</a>: Adds a shortcut to insert the date and time.</li>
<li>New: Fixes <a href="https://github.com/laurent22/joplin/issues/343">#343</a>, Fixes <a href="https://github.com/laurent22/joplin/issues/191">#191</a>: Added options to specify custom TLS certificates</li>
<li>New: Fixes <a href="https://github.com/laurent22/joplin/issues/343">#343</a>, Fixes <a href="https://github.com/laurent22/joplin/issues/191">#191</a>: Added options to ignore TLS cert errors to allow self-signed certificates on desktop and CLI</li>
<li>Fixes <a href="https://github.com/laurent22/joplin/issues/626">#626</a>: Auto-completion for indented items</li>
<li>Fixes <a href="https://github.com/laurent22/joplin/issues/632">#632</a>: Handle restricted_content error in Dropbox</li>
<li>Fix: Revert <a href="https://github.com/laurent22/joplin/issues/554">#554</a> to try to fix <a href="https://github.com/laurent22/joplin/issues/624">#624</a>: WebDAV error when syncing with SeaFile</li>
</ul>
<h2 id="-v1-0-101-https-github-com-laurent22-joplin-releases-tag-v1-0-101-2018-06-17t18-35-11z"><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.101">v1.0.101</a> - 2018-06-17T18:35:11Z</h2>
<p>This is a bug-fix release following v100 with the following fixes:</p>
<ul>
@@ -471,18 +481,6 @@
<li>Fixed: Attaching images in Linux was no longer working</li>
<li>Fixed crash in macOS</li>
</ul>
<h2 id="-v0-10-54-https-github-com-laurent22-joplin-releases-tag-v0-10-54-2018-01-31t20-21-30z"><a href="https://github.com/laurent22/joplin/releases/tag/v0.10.54">v0.10.54</a> - 2018-01-31T20:21:30Z</h2>
<ul>
<li>Optimised Nextcloud functionality so that it is faster and consumes less resources</li>
<li>Fixed Nextcloud sync issue when processing many items.</li>
<li>Fixed: Handle case where file is left half-uploaded on Nextcloud instance (possibly an ocloud.de issue only)</li>
<li>Fixed: Allow decryption of other items to continue even if an item cannot be decrypted</li>
<li>Add Content-Size header for WebDAV, which is required by some services</li>
<li>Fixed auto-title when title is manually entered first</li>
<li>Improved auto-update process to avoid random crashes</li>
<li>New: Allow focusing either title or body when creating a new note or to-do</li>
<li>Fixed crash when having invalid UTF-8 string in text editor</li>
</ul>
<script>
function stickyHeader() {

View File

@@ -327,6 +327,10 @@ for (let portToTest = 41184; portToTest &lt;= 41194; portToTest++) {
<td>The URL the note comes from</td>
</tr>
<tr>
<td>author</td>
<td>The note author</td>
</tr>
<tr>
<td>parent_id</td>
<td>The notebook (ID) to move the note to</td>
</tr>

View File

@@ -270,17 +270,17 @@
<tbody>
<tr>
<td>Windows (32 and 64-bit)</td>
<td><a href='https://github.com/laurent22/joplin/releases/download/v1.0.101/Joplin-Setup-1.0.101.exe'><img alt='Get it on Windows' height="40px" src='https://joplin.cozic.net/images/BadgeWindows.png'/></a></td>
<td>or Get the <a href='https://github.com/laurent22/joplin/releases/download/v1.0.101/JoplinPortable.exe'>Portable version</a><br>(to run from a USB key, etc.)</td>
<td><a href='https://github.com/laurent22/joplin/releases/download/v1.0.103/Joplin-Setup-1.0.103.exe'><img alt='Get it on Windows' height="40px" src='https://joplin.cozic.net/images/BadgeWindows.png'/></a></td>
<td>or Get the <a href='https://github.com/laurent22/joplin/releases/download/v1.0.103/JoplinPortable.exe'>Portable version</a><br>(to run from a USB key, etc.)</td>
</tr>
<tr>
<td>macOS</td>
<td><a href='https://github.com/laurent22/joplin/releases/download/v1.0.101/Joplin-1.0.101.dmg'><img alt='Get it on macOS' height="40px" src='https://joplin.cozic.net/images/BadgeMacOS.png'/></a></td>
<td><a href='https://github.com/laurent22/joplin/releases/download/v1.0.103/Joplin-1.0.103.dmg'><img alt='Get it on macOS' height="40px" src='https://joplin.cozic.net/images/BadgeMacOS.png'/></a></td>
<td></td>
</tr>
<tr>
<td>Linux</td>
<td><a href='https://github.com/laurent22/joplin/releases/download/v1.0.101/Joplin-1.0.101-x86_64.AppImage'><img alt='Get it on Linux' height="40px" src='https://joplin.cozic.net/images/BadgeLinux.png'/></a></td>
<td><a href='https://github.com/laurent22/joplin/releases/download/v1.0.103/Joplin-1.0.103-x86_64.AppImage'><img alt='Get it on Linux' height="40px" src='https://joplin.cozic.net/images/BadgeLinux.png'/></a></td>
<td>An Arch Linux package<br><a href="#terminal-application">is also available</a>.</td>
</tr>
</tbody>
@@ -299,7 +299,7 @@
<tr>
<td>Android</td>
<td><a href='https://play.google.com/store/apps/details?id=net.cozic.joplin&utm_source=GitHub&utm_campaign=README&pcampaignid=MKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1'><img alt='Get it on Google Play' height="40px" src='https://joplin.cozic.net/images/BadgeAndroid.png'/></a></td>
<td>or <a href="https://github.com/laurent22/joplin-android/releases/download/android-v1.0.128/joplin-v1.0.128.apk">Download APK File</a></td>
<td>or <a href="https://github.com/laurent22/joplin-android/releases/download/android-v1.0.129/joplin-v1.0.129.apk">Download APK File</a></td>
</tr>
<tr>
<td>iOS</td>
@@ -506,42 +506,42 @@ $$
<td>Basque</td>
<td><a href="https://github.com/laurent22/joplin/blob/master/CliClient/locales/eu.po">eu</a></td>
<td>juan.abasolo@ehu.eus</td>
<td>66%</td>
<td>65%</td>
</tr>
<tr>
<td><img src="https://joplin.cozic.net/images/flags/es/catalonia.png" alt=""></td>
<td>Catalan</td>
<td><a href="https://github.com/laurent22/joplin/blob/master/CliClient/locales/ca.po">ca</a></td>
<td>jmontane, 2018</td>
<td>95%</td>
<td>93%</td>
</tr>
<tr>
<td><img src="https://joplin.cozic.net/images/flags/country-4x3/hr.png" alt=""></td>
<td>Croatian</td>
<td><a href="https://github.com/laurent22/joplin/blob/master/CliClient/locales/hr_HR.po">hr_HR</a></td>
<td>Hrvoje Mandić (trbuhom@net.hr)</td>
<td>54%</td>
<td>53%</td>
</tr>
<tr>
<td><img src="https://joplin.cozic.net/images/flags/country-4x3/cz.png" alt=""></td>
<td>Czech</td>
<td><a href="https://github.com/laurent22/joplin/blob/master/CliClient/locales/cs_CZ.po">cs_CZ</a></td>
<td>Lukas Helebrandt (lukas@aiya.cz)</td>
<td>84%</td>
<td>82%</td>
</tr>
<tr>
<td><img src="https://joplin.cozic.net/images/flags/country-4x3/dk.png" alt=""></td>
<td>Dansk</td>
<td><a href="https://github.com/laurent22/joplin/blob/master/CliClient/locales/da_DK.po">da_DK</a></td>
<td>Morten Juhl-Johansen Zölde-Fejér (mjjzf@syntaktisk.</td>
<td>86%</td>
<td>84%</td>
</tr>
<tr>
<td><img src="https://joplin.cozic.net/images/flags/country-4x3/de.png" alt=""></td>
<td>Deutsch</td>
<td><a href="https://github.com/laurent22/joplin/blob/master/CliClient/locales/de_DE.po">de_DE</a></td>
<td>Philipp Zumstein (zuphilip@gmail.com)</td>
<td>93%</td>
<td>92%</td>
</tr>
<tr>
<td><img src="https://joplin.cozic.net/images/flags/country-4x3/gb.png" alt=""></td>
@@ -555,7 +555,7 @@ $$
<td>Español</td>
<td><a href="https://github.com/laurent22/joplin/blob/master/CliClient/locales/es_ES.po">es_ES</a></td>
<td>Fernando Martín (f@mrtn.es)</td>
<td>93%</td>
<td>92%</td>
</tr>
<tr>
<td><img src="https://joplin.cozic.net/images/flags/country-4x3/fr.png" alt=""></td>
@@ -569,63 +569,63 @@ $$
<td>Galician</td>
<td><a href="https://github.com/laurent22/joplin/blob/master/CliClient/locales/gl_ES.po">gl_ES</a></td>
<td>Marcos Lans (marcoslansgarza@gmail.com)</td>
<td>84%</td>
<td>83%</td>
</tr>
<tr>
<td><img src="https://joplin.cozic.net/images/flags/country-4x3/it.png" alt=""></td>
<td>Italiano</td>
<td><a href="https://github.com/laurent22/joplin/blob/master/CliClient/locales/it_IT.po">it_IT</a></td>
<td></td>
<td>56%</td>
<td>55%</td>
</tr>
<tr>
<td><img src="https://joplin.cozic.net/images/flags/country-4x3/be.png" alt=""></td>
<td>Nederlands</td>
<td><a href="https://github.com/laurent22/joplin/blob/master/CliClient/locales/nl_BE.po">nl_BE</a></td>
<td></td>
<td>67%</td>
<td>66%</td>
</tr>
<tr>
<td><img src="https://joplin.cozic.net/images/flags/country-4x3/br.png" alt=""></td>
<td>Português (Brasil)</td>
<td><a href="https://github.com/laurent22/joplin/blob/master/CliClient/locales/pt_BR.po">pt_BR</a></td>
<td>Renato Nunes Bastos (rnbastos@gmail.com)</td>
<td>86%</td>
<td>85%</td>
</tr>
<tr>
<td><img src="https://joplin.cozic.net/images/flags/country-4x3/si.png" alt=""></td>
<td>Slovenian</td>
<td><a href="https://github.com/laurent22/joplin/blob/master/CliClient/locales/sl_SI.po">sl_SI</a></td>
<td></td>
<td>83%</td>
<td>82%</td>
</tr>
<tr>
<td><img src="https://joplin.cozic.net/images/flags/country-4x3/ru.png" alt=""></td>
<td>Русский</td>
<td><a href="https://github.com/laurent22/joplin/blob/master/CliClient/locales/ru_RU.po">ru_RU</a></td>
<td>Artyom Karlov (artyom.karlov@gmail.com)</td>
<td>83%</td>
<td>82%</td>
</tr>
<tr>
<td><img src="https://joplin.cozic.net/images/flags/country-4x3/cn.png" alt=""></td>
<td>中文 (简体)</td>
<td><a href="https://github.com/laurent22/joplin/blob/master/CliClient/locales/zh_CN.po">zh_CN</a></td>
<td></td>
<td>98%</td>
<td>96%</td>
</tr>
<tr>
<td><img src="https://joplin.cozic.net/images/flags/country-4x3/tw.png" alt=""></td>
<td>中文 (繁體)</td>
<td><a href="https://github.com/laurent22/joplin/blob/master/CliClient/locales/zh_TW.po">zh_TW</a></td>
<td>penguinsam (samliu@gmail.com)</td>
<td>72%</td>
<td>71%</td>
</tr>
<tr>
<td><img src="https://joplin.cozic.net/images/flags/country-4x3/jp.png" alt=""></td>
<td>日本語</td>
<td><a href="https://github.com/laurent22/joplin/blob/master/CliClient/locales/ja_JP.po">ja_JP</a></td>
<td></td>
<td>54%</td>
<td>53%</td>
</tr>
</tbody>
</table>

View File

@@ -260,19 +260,19 @@
<tbody>
<tr>
<td>Total Windows downloads</td>
<td>29744</td>
<td>28753</td>
</tr>
<tr>
<td>Total macOs downloads</td>
<td>15319</td>
<td>14879</td>
</tr>
<tr>
<td>Total Linux downloads</td>
<td>13383</td>
<td>13366</td>
</tr>
<tr>
<td>Windows %</td>
<td>51%</td>
<td>50%</td>
</tr>
<tr>
<td>macOS %</td>
@@ -297,44 +297,52 @@
</thead>
<tbody>
<tr>
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.103">v1.0.103</a></td>
<td>2018-06-21T19:38:13Z</td>
<td>14</td>
<td>5</td>
<td>2</td>
<td>21 </td>
</tr>
<tr>
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.101">v1.0.101</a></td>
<td>2018-06-17T18:35:11Z</td>
<td>472</td>
<td>185</td>
<td>85</td>
<td>742</td>
<td>1252</td>
<td>564</td>
<td>365</td>
<td>2181</td>
</tr>
<tr>
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.100">v1.0.100</a></td>
<td>2018-06-14T17:41:43Z</td>
<td>823</td>
<td>829</td>
<td>401</td>
<td>214</td>
<td>1438</td>
<td>217</td>
<td>1447</td>
</tr>
<tr>
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.99">v1.0.99</a></td>
<td>2018-06-10T13:18:23Z</td>
<td>1210</td>
<td>571</td>
<td>1211</td>
<td>573</td>
<td>367</td>
<td>2148</td>
<td>2151</td>
</tr>
<tr>
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.97">v1.0.97</a></td>
<td>2018-06-09T19:23:34Z</td>
<td>270</td>
<td>128</td>
<td>271</td>
<td>129</td>
<td>50</td>
<td>448</td>
<td>450</td>
</tr>
<tr>
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.96">v1.0.96</a></td>
<td>2018-05-26T16:36:39Z</td>
<td>2650</td>
<td>1190</td>
<td>2653</td>
<td>1191</td>
<td>1124</td>
<td>4964</td>
<td>4968</td>
</tr>
<tr>
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.95">v1.0.95</a></td>
@@ -357,8 +365,8 @@
<td>2018-05-14T11:36:01Z</td>
<td>1751</td>
<td>824</td>
<td>713</td>
<td>3288</td>
<td>714</td>
<td>3289</td>
</tr>
<tr>
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.91">v1.0.91</a></td>
@@ -387,10 +395,10 @@
<tr>
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.83">v1.0.83</a></td>
<td>2018-04-04T19:43:58Z</td>
<td>4393</td>
<td>4396</td>
<td>2367</td>
<td>2625</td>
<td>9385</td>
<td>9388</td>
</tr>
<tr>
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.82">v1.0.82</a></td>
@@ -405,8 +413,8 @@
<td>2018-03-28T08:13:58Z</td>
<td>977</td>
<td>563</td>
<td>738</td>
<td>2278</td>
<td>740</td>
<td>2280</td>
</tr>
<tr>
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.79">v1.0.79</a></td>
@@ -451,10 +459,10 @@
<tr>
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.67">v1.0.67</a></td>
<td>2018-02-19T22:51:08Z</td>
<td>1726</td>
<td>1732</td>
<td>577</td>
<td></td>
<td>2303</td>
<td>2309</td>
</tr>
<tr>
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.66">v1.0.66</a></td>
@@ -512,14 +520,6 @@
<td>538</td>
<td>1739</td>
</tr>
<tr>
<td><a href="https://github.com/laurent22/joplin/releases/tag/v0.10.54">v0.10.54</a></td>
<td>2018-01-31T20:21:30Z</td>
<td>1805</td>
<td>828</td>
<td>305</td>
<td>2938</td>
</tr>
</tbody>
</table>

View File

@@ -1,5 +1,15 @@
# Joplin changelog
## [v1.0.103](https://github.com/laurent22/joplin/releases/tag/v1.0.103) - 2018-06-21T19:38:13Z
- New: Resolves [#611](https://github.com/laurent22/joplin/issues/611): Allow opening and editing note in external editor
- New: [#628](https://github.com/laurent22/joplin/issues/628): Adds a shortcut to insert the date and time.
- New: Fixes [#343](https://github.com/laurent22/joplin/issues/343), Fixes [#191](https://github.com/laurent22/joplin/issues/191): Added options to specify custom TLS certificates
- New: Fixes [#343](https://github.com/laurent22/joplin/issues/343), Fixes [#191](https://github.com/laurent22/joplin/issues/191): Added options to ignore TLS cert errors to allow self-signed certificates on desktop and CLI
- Fixes [#626](https://github.com/laurent22/joplin/issues/626): Auto-completion for indented items
- Fixes [#632](https://github.com/laurent22/joplin/issues/632): Handle restricted_content error in Dropbox
- Fix: Revert [#554](https://github.com/laurent22/joplin/issues/554) to try to fix [#624](https://github.com/laurent22/joplin/issues/624): WebDAV error when syncing with SeaFile
## [v1.0.101](https://github.com/laurent22/joplin/releases/tag/v1.0.101) - 2018-06-17T18:35:11Z
This is a bug-fix release following v100 with the following fixes:
@@ -229,16 +239,4 @@ IMPORTANT: If you use Nextcloud it is recommended to sync all your notes before
- Updated: French translation
- New: List missing master keys in encryption screen
- Fixed: Attaching images in Linux was no longer working
- Fixed crash in macOS
## [v0.10.54](https://github.com/laurent22/joplin/releases/tag/v0.10.54) - 2018-01-31T20:21:30Z
- Optimised Nextcloud functionality so that it is faster and consumes less resources
- Fixed Nextcloud sync issue when processing many items.
- Fixed: Handle case where file is left half-uploaded on Nextcloud instance (possibly an ocloud.de issue only)
- Fixed: Allow decryption of other items to continue even if an item cannot be decrypted
- Add Content-Size header for WebDAV, which is required by some services
- Fixed auto-title when title is manually entered first
- Improved auto-update process to avoid random crashes
- New: Allow focusing either title or body when creating a new note or to-do
- Fixed crash when having invalid UTF-8 string in text editor
- Fixed crash in macOS

View File

@@ -84,6 +84,7 @@ title | Note title
body | Note body, in Markdown
body_html | Note body, in HTML format
source_url | The URL the note comes from
author | The note author
parent_id | The notebook (ID) to move the note to
base_url | If `body_html` is provided and contains relative URLs, provide the `base_url` parameter too so that all the URLs can be converted to absolute ones. The base URL is basically where the HTML was fetched from, minus the query (everything after the '?'). For example if the original page was `https://stackoverflow.com/search?q=%5Bjava%5D+test`, the base URL is `https://stackoverflow.com/search`.
image_data_url | An image to attach to the note, in [Data URL](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs) format.

View File

@@ -2,40 +2,40 @@
Name | Value
--- | ---
Total Windows downloads | 29744
Total macOs downloads | 15319
Total Linux downloads | 13383
Windows % | 51%
Total Windows downloads | 28753
Total macOs downloads | 14879
Total Linux downloads | 13366
Windows % | 50%
macOS % | 26%
Linux % | 23%
Version | Date | Windows | macOS | Linux | Total
--- | --- | --- | --- | --- | ---
[v1.0.101](https://github.com/laurent22/joplin/releases/tag/v1.0.101) | 2018-06-17T18:35:11Z | 472 | 185 | 85 | 742
[v1.0.100](https://github.com/laurent22/joplin/releases/tag/v1.0.100) | 2018-06-14T17:41:43Z | 823 | 401 | 214 | 1438
[v1.0.99](https://github.com/laurent22/joplin/releases/tag/v1.0.99) | 2018-06-10T13:18:23Z | 1210 | 571 | 367 | 2148
[v1.0.97](https://github.com/laurent22/joplin/releases/tag/v1.0.97) | 2018-06-09T19:23:34Z | 270 | 128 | 50 | 448
[v1.0.96](https://github.com/laurent22/joplin/releases/tag/v1.0.96) | 2018-05-26T16:36:39Z | 2650 | 1190 | 1124 | 4964
[v1.0.103](https://github.com/laurent22/joplin/releases/tag/v1.0.103) | 2018-06-21T19:38:13Z | 14 | 5 | 2 | 21
[v1.0.101](https://github.com/laurent22/joplin/releases/tag/v1.0.101) | 2018-06-17T18:35:11Z | 1252 | 564 | 365 | 2181
[v1.0.100](https://github.com/laurent22/joplin/releases/tag/v1.0.100) | 2018-06-14T17:41:43Z | 829 | 401 | 217 | 1447
[v1.0.99](https://github.com/laurent22/joplin/releases/tag/v1.0.99) | 2018-06-10T13:18:23Z | 1211 | 573 | 367 | 2151
[v1.0.97](https://github.com/laurent22/joplin/releases/tag/v1.0.97) | 2018-06-09T19:23:34Z | 271 | 129 | 50 | 450
[v1.0.96](https://github.com/laurent22/joplin/releases/tag/v1.0.96) | 2018-05-26T16:36:39Z | 2653 | 1191 | 1124 | 4968
[v1.0.95](https://github.com/laurent22/joplin/releases/tag/v1.0.95) | 2018-05-25T13:04:30Z | 366 | 184 | 79 | 629
[v1.0.94](https://github.com/laurent22/joplin/releases/tag/v1.0.94) | 2018-05-21T20:52:59Z | 1078 | 551 | 352 | 1981
[v1.0.93](https://github.com/laurent22/joplin/releases/tag/v1.0.93) | 2018-05-14T11:36:01Z | 1751 | 824 | 713 | 3288
[v1.0.93](https://github.com/laurent22/joplin/releases/tag/v1.0.93) | 2018-05-14T11:36:01Z | 1751 | 824 | 714 | 3289
[v1.0.91](https://github.com/laurent22/joplin/releases/tag/v1.0.91) | 2018-05-10T14:48:04Z | 803 | 528 | 284 | 1615
[v1.0.89](https://github.com/laurent22/joplin/releases/tag/v1.0.89) | 2018-05-09T13:05:05Z | 459 | 204 | 87 | 750
[v1.0.85](https://github.com/laurent22/joplin/releases/tag/v1.0.85) | 2018-05-01T21:08:24Z | 1626 | 927 | 605 | 3158
[v1.0.83](https://github.com/laurent22/joplin/releases/tag/v1.0.83) | 2018-04-04T19:43:58Z | 4393 | 2367 | 2625 | 9385
[v1.0.83](https://github.com/laurent22/joplin/releases/tag/v1.0.83) | 2018-04-04T19:43:58Z | 4396 | 2367 | 2625 | 9388
[v1.0.82](https://github.com/laurent22/joplin/releases/tag/v1.0.82) | 2018-03-31T19:16:31Z | 682 | 381 | 90 | 1153
[v1.0.81](https://github.com/laurent22/joplin/releases/tag/v1.0.81) | 2018-03-28T08:13:58Z | 977 | 563 | 738 | 2278
[v1.0.81](https://github.com/laurent22/joplin/releases/tag/v1.0.81) | 2018-03-28T08:13:58Z | 977 | 563 | 740 | 2280
[v1.0.79](https://github.com/laurent22/joplin/releases/tag/v1.0.79) | 2018-03-23T18:00:11Z | 912 | 506 | 351 | 1769
[v1.0.78](https://github.com/laurent22/joplin/releases/tag/v1.0.78) | 2018-03-17T15:27:18Z | 1295 | 832 | 839 | 2966
[v1.0.77](https://github.com/laurent22/joplin/releases/tag/v1.0.77) | 2018-03-16T15:12:35Z | 164 | 85 | 23 | 272
[v1.0.72](https://github.com/laurent22/joplin/releases/tag/v1.0.72) | 2018-03-14T09:44:35Z | 395 | 229 | 30 | 654
[v1.0.70](https://github.com/laurent22/joplin/releases/tag/v1.0.70) | 2018-02-28T20:04:30Z | 1836 | 1020 | 1218 | 4074
[v1.0.67](https://github.com/laurent22/joplin/releases/tag/v1.0.67) | 2018-02-19T22:51:08Z | 1726 | 577 | | 2303
[v1.0.67](https://github.com/laurent22/joplin/releases/tag/v1.0.67) | 2018-02-19T22:51:08Z | 1732 | 577 | | 2309
[v1.0.66](https://github.com/laurent22/joplin/releases/tag/v1.0.66) | 2018-02-18T23:09:09Z | 312 | 105 | 71 | 488
[v1.0.65](https://github.com/laurent22/joplin/releases/tag/v1.0.65) | 2018-02-17T20:02:25Z | 184 | 102 | 113 | 399
[v1.0.64](https://github.com/laurent22/joplin/releases/tag/v1.0.64) | 2018-02-16T00:58:20Z | 1066 | 526 | 1115 | 2707
[v1.0.63](https://github.com/laurent22/joplin/releases/tag/v1.0.63) | 2018-02-14T19:40:36Z | 284 | 141 | 82 | 507
[v1.0.62](https://github.com/laurent22/joplin/releases/tag/v1.0.62) | 2018-02-12T20:19:58Z | 540 | 272 | 345 | 1157
[v0.10.61](https://github.com/laurent22/joplin/releases/tag/v0.10.61) | 2018-02-08T18:27:39Z | 955 | 601 | 940 | 2496
[v0.10.60](https://github.com/laurent22/joplin/releases/tag/v0.10.60) | 2018-02-06T13:09:56Z | 710 | 491 | 538 | 1739
[v0.10.54](https://github.com/laurent22/joplin/releases/tag/v0.10.54) | 2018-01-31T20:21:30Z | 1805 | 828 | 305 | 2938
[v0.10.60](https://github.com/laurent22/joplin/releases/tag/v0.10.60) | 2018-02-06T13:09:56Z | 710 | 491 | 538 | 1739