diff --git a/app/core/src/main/resources/messages_ar_AR.properties b/app/core/src/main/resources/messages_ar_AR.properties index 841bdd285..71bedd8e2 100644 --- a/app/core/src/main/resources/messages_ar_AR.properties +++ b/app/core/src/main/resources/messages_ar_AR.properties @@ -1860,6 +1860,12 @@ editTableOfContents.replaceExisting=Replace existing bookmarks (uncheck to appen editTableOfContents.editorTitle=Bookmark Editor editTableOfContents.editorDesc=Add and arrange bookmarks below. Click + to add child bookmarks. editTableOfContents.addBookmark=Add New Bookmark +editTableOfContents.importBookmarksDefault=Import +editTableOfContents.importBookmarksFromJsonFile=Upload JSON file +editTableOfContents.importBookmarksFromClipboard=Paste from clipboard +editTableOfContents.exportBookmarksDefault=Export +editTableOfContents.exportBookmarksAsJson=Download as JSON +editTableOfContents.exportBookmarksAsText=Copy as text editTableOfContents.desc.1=This tool allows you to add or edit the table of contents (bookmarks) in a PDF document. editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks. editTableOfContents.desc.3=Each bookmark requires a title and target page number. diff --git a/app/core/src/main/resources/messages_az_AZ.properties b/app/core/src/main/resources/messages_az_AZ.properties index 5da8d541b..151dc0e64 100644 --- a/app/core/src/main/resources/messages_az_AZ.properties +++ b/app/core/src/main/resources/messages_az_AZ.properties @@ -1860,6 +1860,12 @@ editTableOfContents.replaceExisting=Replace existing bookmarks (uncheck to appen editTableOfContents.editorTitle=Bookmark Editor editTableOfContents.editorDesc=Add and arrange bookmarks below. Click + to add child bookmarks. editTableOfContents.addBookmark=Add New Bookmark +editTableOfContents.importBookmarksDefault=Import +editTableOfContents.importBookmarksFromJsonFile=Upload JSON file +editTableOfContents.importBookmarksFromClipboard=Paste from clipboard +editTableOfContents.exportBookmarksDefault=Export +editTableOfContents.exportBookmarksAsJson=Download as JSON +editTableOfContents.exportBookmarksAsText=Copy as text editTableOfContents.desc.1=This tool allows you to add or edit the table of contents (bookmarks) in a PDF document. editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks. editTableOfContents.desc.3=Each bookmark requires a title and target page number. diff --git a/app/core/src/main/resources/messages_bg_BG.properties b/app/core/src/main/resources/messages_bg_BG.properties index 3d3c89de0..63b0c0b85 100644 --- a/app/core/src/main/resources/messages_bg_BG.properties +++ b/app/core/src/main/resources/messages_bg_BG.properties @@ -1860,6 +1860,12 @@ editTableOfContents.replaceExisting=Replace existing bookmarks (uncheck to appen editTableOfContents.editorTitle=Bookmark Editor editTableOfContents.editorDesc=Add and arrange bookmarks below. Click + to add child bookmarks. editTableOfContents.addBookmark=Add New Bookmark +editTableOfContents.importBookmarksDefault=Import +editTableOfContents.importBookmarksFromJsonFile=Upload JSON file +editTableOfContents.importBookmarksFromClipboard=Paste from clipboard +editTableOfContents.exportBookmarksDefault=Export +editTableOfContents.exportBookmarksAsJson=Download as JSON +editTableOfContents.exportBookmarksAsText=Copy as text editTableOfContents.desc.1=This tool allows you to add or edit the table of contents (bookmarks) in a PDF document. editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks. editTableOfContents.desc.3=Each bookmark requires a title and target page number. diff --git a/app/core/src/main/resources/messages_bo_CN.properties b/app/core/src/main/resources/messages_bo_CN.properties index b5aba5f6a..5b39cdcf5 100644 --- a/app/core/src/main/resources/messages_bo_CN.properties +++ b/app/core/src/main/resources/messages_bo_CN.properties @@ -1860,6 +1860,12 @@ editTableOfContents.replaceExisting=Replace existing bookmarks (uncheck to appen editTableOfContents.editorTitle=Bookmark Editor editTableOfContents.editorDesc=Add and arrange bookmarks below. Click + to add child bookmarks. editTableOfContents.addBookmark=Add New Bookmark +editTableOfContents.importBookmarksDefault=Import +editTableOfContents.importBookmarksFromJsonFile=Upload JSON file +editTableOfContents.importBookmarksFromClipboard=Paste from clipboard +editTableOfContents.exportBookmarksDefault=Export +editTableOfContents.exportBookmarksAsJson=Download as JSON +editTableOfContents.exportBookmarksAsText=Copy as text editTableOfContents.desc.1=This tool allows you to add or edit the table of contents (bookmarks) in a PDF document. editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks. editTableOfContents.desc.3=Each bookmark requires a title and target page number. diff --git a/app/core/src/main/resources/messages_ca_CA.properties b/app/core/src/main/resources/messages_ca_CA.properties index 144c9bac1..a8f9a560f 100644 --- a/app/core/src/main/resources/messages_ca_CA.properties +++ b/app/core/src/main/resources/messages_ca_CA.properties @@ -1860,6 +1860,12 @@ editTableOfContents.replaceExisting=Replace existing bookmarks (uncheck to appen editTableOfContents.editorTitle=Bookmark Editor editTableOfContents.editorDesc=Add and arrange bookmarks below. Click + to add child bookmarks. editTableOfContents.addBookmark=Add New Bookmark +editTableOfContents.importBookmarksDefault=Import +editTableOfContents.importBookmarksFromJsonFile=Upload JSON file +editTableOfContents.importBookmarksFromClipboard=Paste from clipboard +editTableOfContents.exportBookmarksDefault=Export +editTableOfContents.exportBookmarksAsJson=Download as JSON +editTableOfContents.exportBookmarksAsText=Copy as text editTableOfContents.desc.1=This tool allows you to add or edit the table of contents (bookmarks) in a PDF document. editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks. editTableOfContents.desc.3=Each bookmark requires a title and target page number. diff --git a/app/core/src/main/resources/messages_cs_CZ.properties b/app/core/src/main/resources/messages_cs_CZ.properties index e7b60818e..a83268aa2 100644 --- a/app/core/src/main/resources/messages_cs_CZ.properties +++ b/app/core/src/main/resources/messages_cs_CZ.properties @@ -1860,6 +1860,12 @@ editTableOfContents.replaceExisting=Replace existing bookmarks (uncheck to appen editTableOfContents.editorTitle=Bookmark Editor editTableOfContents.editorDesc=Add and arrange bookmarks below. Click + to add child bookmarks. editTableOfContents.addBookmark=Add New Bookmark +editTableOfContents.importBookmarksDefault=Import +editTableOfContents.importBookmarksFromJsonFile=Upload JSON file +editTableOfContents.importBookmarksFromClipboard=Paste from clipboard +editTableOfContents.exportBookmarksDefault=Export +editTableOfContents.exportBookmarksAsJson=Download as JSON +editTableOfContents.exportBookmarksAsText=Copy as text editTableOfContents.desc.1=This tool allows you to add or edit the table of contents (bookmarks) in a PDF document. editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks. editTableOfContents.desc.3=Each bookmark requires a title and target page number. diff --git a/app/core/src/main/resources/messages_da_DK.properties b/app/core/src/main/resources/messages_da_DK.properties index 6b07c4a7d..bc06c0915 100644 --- a/app/core/src/main/resources/messages_da_DK.properties +++ b/app/core/src/main/resources/messages_da_DK.properties @@ -1860,6 +1860,12 @@ editTableOfContents.replaceExisting=Replace existing bookmarks (uncheck to appen editTableOfContents.editorTitle=Bookmark Editor editTableOfContents.editorDesc=Add and arrange bookmarks below. Click + to add child bookmarks. editTableOfContents.addBookmark=Add New Bookmark +editTableOfContents.importBookmarksDefault=Import +editTableOfContents.importBookmarksFromJsonFile=Upload JSON file +editTableOfContents.importBookmarksFromClipboard=Paste from clipboard +editTableOfContents.exportBookmarksDefault=Export +editTableOfContents.exportBookmarksAsJson=Download as JSON +editTableOfContents.exportBookmarksAsText=Copy as text editTableOfContents.desc.1=This tool allows you to add or edit the table of contents (bookmarks) in a PDF document. editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks. editTableOfContents.desc.3=Each bookmark requires a title and target page number. diff --git a/app/core/src/main/resources/messages_de_DE.properties b/app/core/src/main/resources/messages_de_DE.properties index c78fbc31c..1bb923450 100644 --- a/app/core/src/main/resources/messages_de_DE.properties +++ b/app/core/src/main/resources/messages_de_DE.properties @@ -1860,6 +1860,12 @@ editTableOfContents.replaceExisting=Vorhandene Lesezeichen ersetzen (deaktiviere editTableOfContents.editorTitle=Lesezeichen-Editor editTableOfContents.editorDesc=Fügen unten Lesezeichen hinzu und ordne sie an. Klicke auf +, um das untergeordnete Lesezeichen hinzuzufügen. editTableOfContents.addBookmark=Neues Lesezeichen hinzufügen +editTableOfContents.importBookmarksDefault=Importieren +editTableOfContents.importBookmarksFromJsonFile=JSON-Datei hochladen +editTableOfContents.importBookmarksFromClipboard=Aus Zwischenablage einfügen +editTableOfContents.exportBookmarksDefault=Exportieren +editTableOfContents.exportBookmarksAsJson=Als JSON herunterladen +editTableOfContents.exportBookmarksAsText=Als Text kopieren editTableOfContents.desc.1=Mit diesem Werkzeug können Sie das Inhaltsverzeichnis (Lesezeichen) eines PDF-Dokuments hinzufügen oder bearbeiten. editTableOfContents.desc.2=Sie können eine hierarchische Struktur erstellen, indem Sie untergeordnete Lesezeichen zu übergeordneten hinzufügen. editTableOfContents.desc.3=Jedes Lesezeichen benötigt einen Titel und eine Seitenzahl. diff --git a/app/core/src/main/resources/messages_el_GR.properties b/app/core/src/main/resources/messages_el_GR.properties index 773d873d2..e4209faf8 100644 --- a/app/core/src/main/resources/messages_el_GR.properties +++ b/app/core/src/main/resources/messages_el_GR.properties @@ -1860,6 +1860,12 @@ editTableOfContents.replaceExisting=Replace existing bookmarks (uncheck to appen editTableOfContents.editorTitle=Bookmark Editor editTableOfContents.editorDesc=Add and arrange bookmarks below. Click + to add child bookmarks. editTableOfContents.addBookmark=Add New Bookmark +editTableOfContents.importBookmarksDefault=Import +editTableOfContents.importBookmarksFromJsonFile=Upload JSON file +editTableOfContents.importBookmarksFromClipboard=Paste from clipboard +editTableOfContents.exportBookmarksDefault=Export +editTableOfContents.exportBookmarksAsJson=Download as JSON +editTableOfContents.exportBookmarksAsText=Copy as text editTableOfContents.desc.1=This tool allows you to add or edit the table of contents (bookmarks) in a PDF document. editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks. editTableOfContents.desc.3=Each bookmark requires a title and target page number. diff --git a/app/core/src/main/resources/messages_en_GB.properties b/app/core/src/main/resources/messages_en_GB.properties index a905a1f4d..37be2c06a 100644 --- a/app/core/src/main/resources/messages_en_GB.properties +++ b/app/core/src/main/resources/messages_en_GB.properties @@ -1860,6 +1860,12 @@ editTableOfContents.replaceExisting=Replace existing bookmarks (uncheck to appen editTableOfContents.editorTitle=Bookmark Editor editTableOfContents.editorDesc=Add and arrange bookmarks below. Click + to add child bookmarks. editTableOfContents.addBookmark=Add New Bookmark +editTableOfContents.importBookmarksDefault=Import +editTableOfContents.importBookmarksFromJsonFile=Upload JSON file +editTableOfContents.importBookmarksFromClipboard=Paste from clipboard +editTableOfContents.exportBookmarksDefault=Export +editTableOfContents.exportBookmarksAsJson=Download as JSON +editTableOfContents.exportBookmarksAsText=Copy as text editTableOfContents.desc.1=This tool allows you to add or edit the table of contents (bookmarks) in a PDF document. editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks. editTableOfContents.desc.3=Each bookmark requires a title and target page number. diff --git a/app/core/src/main/resources/messages_en_US.properties b/app/core/src/main/resources/messages_en_US.properties index 34d5d81c4..e6bad97d0 100644 --- a/app/core/src/main/resources/messages_en_US.properties +++ b/app/core/src/main/resources/messages_en_US.properties @@ -1860,6 +1860,12 @@ editTableOfContents.replaceExisting=Replace existing bookmarks (uncheck to appen editTableOfContents.editorTitle=Bookmark Editor editTableOfContents.editorDesc=Add and arrange bookmarks below. Click + to add child bookmarks. editTableOfContents.addBookmark=Add New Bookmark +editTableOfContents.importBookmarksDefault=Import +editTableOfContents.importBookmarksFromJsonFile=Upload JSON file +editTableOfContents.importBookmarksFromClipboard=Paste from clipboard +editTableOfContents.exportBookmarksDefault=Export +editTableOfContents.exportBookmarksAsJson=Download as JSON +editTableOfContents.exportBookmarksAsText=Copy as text editTableOfContents.desc.1=This tool allows you to add or edit the table of contents (bookmarks) in a PDF document. editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks. editTableOfContents.desc.3=Each bookmark requires a title and target page number. diff --git a/app/core/src/main/resources/messages_es_ES.properties b/app/core/src/main/resources/messages_es_ES.properties index d6ba297c3..40fe58987 100644 --- a/app/core/src/main/resources/messages_es_ES.properties +++ b/app/core/src/main/resources/messages_es_ES.properties @@ -1860,6 +1860,12 @@ editTableOfContents.replaceExisting=Replace existing bookmarks (uncheck to appen editTableOfContents.editorTitle=Bookmark Editor editTableOfContents.editorDesc=Add and arrange bookmarks below. Click + to add child bookmarks. editTableOfContents.addBookmark=Add New Bookmark +editTableOfContents.importBookmarksDefault=Import +editTableOfContents.importBookmarksFromJsonFile=Upload JSON file +editTableOfContents.importBookmarksFromClipboard=Paste from clipboard +editTableOfContents.exportBookmarksDefault=Export +editTableOfContents.exportBookmarksAsJson=Download as JSON +editTableOfContents.exportBookmarksAsText=Copy as text editTableOfContents.desc.1=This tool allows you to add or edit the table of contents (bookmarks) in a PDF document. editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks. editTableOfContents.desc.3=Each bookmark requires a title and target page number. diff --git a/app/core/src/main/resources/messages_eu_ES.properties b/app/core/src/main/resources/messages_eu_ES.properties index 58f20132a..92bb97c63 100644 --- a/app/core/src/main/resources/messages_eu_ES.properties +++ b/app/core/src/main/resources/messages_eu_ES.properties @@ -1860,6 +1860,12 @@ editTableOfContents.replaceExisting=Replace existing bookmarks (uncheck to appen editTableOfContents.editorTitle=Bookmark Editor editTableOfContents.editorDesc=Add and arrange bookmarks below. Click + to add child bookmarks. editTableOfContents.addBookmark=Add New Bookmark +editTableOfContents.importBookmarksDefault=Import +editTableOfContents.importBookmarksFromJsonFile=Upload JSON file +editTableOfContents.importBookmarksFromClipboard=Paste from clipboard +editTableOfContents.exportBookmarksDefault=Export +editTableOfContents.exportBookmarksAsJson=Download as JSON +editTableOfContents.exportBookmarksAsText=Copy as text editTableOfContents.desc.1=This tool allows you to add or edit the table of contents (bookmarks) in a PDF document. editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks. editTableOfContents.desc.3=Each bookmark requires a title and target page number. diff --git a/app/core/src/main/resources/messages_fa_IR.properties b/app/core/src/main/resources/messages_fa_IR.properties index 33a3baa7e..02e44b563 100644 --- a/app/core/src/main/resources/messages_fa_IR.properties +++ b/app/core/src/main/resources/messages_fa_IR.properties @@ -1860,6 +1860,12 @@ editTableOfContents.replaceExisting=Replace existing bookmarks (uncheck to appen editTableOfContents.editorTitle=Bookmark Editor editTableOfContents.editorDesc=Add and arrange bookmarks below. Click + to add child bookmarks. editTableOfContents.addBookmark=Add New Bookmark +editTableOfContents.importBookmarksDefault=Import +editTableOfContents.importBookmarksFromJsonFile=Upload JSON file +editTableOfContents.importBookmarksFromClipboard=Paste from clipboard +editTableOfContents.exportBookmarksDefault=Export +editTableOfContents.exportBookmarksAsJson=Download as JSON +editTableOfContents.exportBookmarksAsText=Copy as text editTableOfContents.desc.1=This tool allows you to add or edit the table of contents (bookmarks) in a PDF document. editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks. editTableOfContents.desc.3=Each bookmark requires a title and target page number. diff --git a/app/core/src/main/resources/messages_fr_FR.properties b/app/core/src/main/resources/messages_fr_FR.properties index 4087137f8..f45f94078 100644 --- a/app/core/src/main/resources/messages_fr_FR.properties +++ b/app/core/src/main/resources/messages_fr_FR.properties @@ -1860,6 +1860,12 @@ editTableOfContents.replaceExisting=Remplacer les signets existants (décocher p editTableOfContents.editorTitle=Éditeur de signets editTableOfContents.editorDesc=Ajoutez et organisez les signets ci-dessous. Cliquez sur + pour ajouter des signets enfants. editTableOfContents.addBookmark=Ajouter un nouveau signet +editTableOfContents.importBookmarksDefault=Import +editTableOfContents.importBookmarksFromJsonFile=Upload JSON file +editTableOfContents.importBookmarksFromClipboard=Paste from clipboard +editTableOfContents.exportBookmarksDefault=Export +editTableOfContents.exportBookmarksAsJson=Download as JSON +editTableOfContents.exportBookmarksAsText=Copy as text editTableOfContents.desc.1=Cet outil vous permet d'ajouter ou de modifier la table des matières (signets) dans un document PDF. editTableOfContents.desc.2=Vous pouvez créer une structure hiérarchique en ajoutant des signets enfants à des signets parents. editTableOfContents.desc.3=Chaque signet nécessite un titre et un numéro de page cible. diff --git a/app/core/src/main/resources/messages_ga_IE.properties b/app/core/src/main/resources/messages_ga_IE.properties index d90d14cc7..874c8ebca 100644 --- a/app/core/src/main/resources/messages_ga_IE.properties +++ b/app/core/src/main/resources/messages_ga_IE.properties @@ -1860,6 +1860,12 @@ editTableOfContents.replaceExisting=Replace existing bookmarks (uncheck to appen editTableOfContents.editorTitle=Bookmark Editor editTableOfContents.editorDesc=Add and arrange bookmarks below. Click + to add child bookmarks. editTableOfContents.addBookmark=Add New Bookmark +editTableOfContents.importBookmarksDefault=Import +editTableOfContents.importBookmarksFromJsonFile=Upload JSON file +editTableOfContents.importBookmarksFromClipboard=Paste from clipboard +editTableOfContents.exportBookmarksDefault=Export +editTableOfContents.exportBookmarksAsJson=Download as JSON +editTableOfContents.exportBookmarksAsText=Copy as text editTableOfContents.desc.1=This tool allows you to add or edit the table of contents (bookmarks) in a PDF document. editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks. editTableOfContents.desc.3=Each bookmark requires a title and target page number. diff --git a/app/core/src/main/resources/messages_hi_IN.properties b/app/core/src/main/resources/messages_hi_IN.properties index 188de81f8..369d9444c 100644 --- a/app/core/src/main/resources/messages_hi_IN.properties +++ b/app/core/src/main/resources/messages_hi_IN.properties @@ -1860,6 +1860,12 @@ editTableOfContents.replaceExisting=Replace existing bookmarks (uncheck to appen editTableOfContents.editorTitle=Bookmark Editor editTableOfContents.editorDesc=Add and arrange bookmarks below. Click + to add child bookmarks. editTableOfContents.addBookmark=Add New Bookmark +editTableOfContents.importBookmarksDefault=Import +editTableOfContents.importBookmarksFromJsonFile=Upload JSON file +editTableOfContents.importBookmarksFromClipboard=Paste from clipboard +editTableOfContents.exportBookmarksDefault=Export +editTableOfContents.exportBookmarksAsJson=Download as JSON +editTableOfContents.exportBookmarksAsText=Copy as text editTableOfContents.desc.1=This tool allows you to add or edit the table of contents (bookmarks) in a PDF document. editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks. editTableOfContents.desc.3=Each bookmark requires a title and target page number. diff --git a/app/core/src/main/resources/messages_hr_HR.properties b/app/core/src/main/resources/messages_hr_HR.properties index 061f08497..87a4add1d 100644 --- a/app/core/src/main/resources/messages_hr_HR.properties +++ b/app/core/src/main/resources/messages_hr_HR.properties @@ -1860,6 +1860,12 @@ editTableOfContents.replaceExisting=Replace existing bookmarks (uncheck to appen editTableOfContents.editorTitle=Bookmark Editor editTableOfContents.editorDesc=Add and arrange bookmarks below. Click + to add child bookmarks. editTableOfContents.addBookmark=Add New Bookmark +editTableOfContents.importBookmarksDefault=Import +editTableOfContents.importBookmarksFromJsonFile=Upload JSON file +editTableOfContents.importBookmarksFromClipboard=Paste from clipboard +editTableOfContents.exportBookmarksDefault=Export +editTableOfContents.exportBookmarksAsJson=Download as JSON +editTableOfContents.exportBookmarksAsText=Copy as text editTableOfContents.desc.1=This tool allows you to add or edit the table of contents (bookmarks) in a PDF document. editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks. editTableOfContents.desc.3=Each bookmark requires a title and target page number. diff --git a/app/core/src/main/resources/messages_hu_HU.properties b/app/core/src/main/resources/messages_hu_HU.properties index a4cd82005..490dbecce 100644 --- a/app/core/src/main/resources/messages_hu_HU.properties +++ b/app/core/src/main/resources/messages_hu_HU.properties @@ -1860,6 +1860,12 @@ editTableOfContents.replaceExisting=Meglévő könyvjelzők cseréje (törölje editTableOfContents.editorTitle=Könyvjelző szerkesztő editTableOfContents.editorDesc=Könyvjelzők hozzáadása és rendezése lent. Kattintson a + gombra gyermek könyvjelzők hozzáadásához. editTableOfContents.addBookmark=Új könyvjelző hozzáadása +editTableOfContents.importBookmarksDefault=Import +editTableOfContents.importBookmarksFromJsonFile=Upload JSON file +editTableOfContents.importBookmarksFromClipboard=Paste from clipboard +editTableOfContents.exportBookmarksDefault=Export +editTableOfContents.exportBookmarksAsJson=Download as JSON +editTableOfContents.exportBookmarksAsText=Copy as text editTableOfContents.desc.1=Ez az eszköz lehetővé teszi a tartalomjegyzék (könyvjelzők) hozzáadását vagy szerkesztését egy PDF dokumentumban. editTableOfContents.desc.2=Hierarchikus struktúrákat hozhat létre, ha gyermek könyvjelzőket ad a szülő könyvjelzőkhöz. editTableOfContents.desc.3=Minden könyvjelzőhöz szükséges egy cím és egy céloldalszám. diff --git a/app/core/src/main/resources/messages_id_ID.properties b/app/core/src/main/resources/messages_id_ID.properties index c75656b6e..470945372 100644 --- a/app/core/src/main/resources/messages_id_ID.properties +++ b/app/core/src/main/resources/messages_id_ID.properties @@ -1860,6 +1860,12 @@ editTableOfContents.replaceExisting=Replace existing bookmarks (uncheck to appen editTableOfContents.editorTitle=Bookmark Editor editTableOfContents.editorDesc=Add and arrange bookmarks below. Click + to add child bookmarks. editTableOfContents.addBookmark=Add New Bookmark +editTableOfContents.importBookmarksDefault=Import +editTableOfContents.importBookmarksFromJsonFile=Upload JSON file +editTableOfContents.importBookmarksFromClipboard=Paste from clipboard +editTableOfContents.exportBookmarksDefault=Export +editTableOfContents.exportBookmarksAsJson=Download as JSON +editTableOfContents.exportBookmarksAsText=Copy as text editTableOfContents.desc.1=This tool allows you to add or edit the table of contents (bookmarks) in a PDF document. editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks. editTableOfContents.desc.3=Each bookmark requires a title and target page number. diff --git a/app/core/src/main/resources/messages_it_IT.properties b/app/core/src/main/resources/messages_it_IT.properties index be48d9e6f..71c0f9ffc 100644 --- a/app/core/src/main/resources/messages_it_IT.properties +++ b/app/core/src/main/resources/messages_it_IT.properties @@ -1860,6 +1860,12 @@ editTableOfContents.replaceExisting=Sostituisci i segnalibri esistenti (deselezi editTableOfContents.editorTitle=Editor segnalibri editTableOfContents.editorDesc=Aggiungi e disponi i segnalibri qui sotto. Fai clic su + per aggiungere segnalibri secondari. editTableOfContents.addBookmark=Aggiungi nuovo segnalibro +editTableOfContents.importBookmarksDefault=Import +editTableOfContents.importBookmarksFromJsonFile=Upload JSON file +editTableOfContents.importBookmarksFromClipboard=Paste from clipboard +editTableOfContents.exportBookmarksDefault=Export +editTableOfContents.exportBookmarksAsJson=Download as JSON +editTableOfContents.exportBookmarksAsText=Copy as text editTableOfContents.desc.1=Questo strumento consente di aggiungere o modificare il sommario (segnalibri) in un documento PDF. editTableOfContents.desc.2=È possibile creare una struttura gerarchica aggiungendo segnalibri secondari a quelli principali. editTableOfContents.desc.3=Ogni segnalibro richiede un titolo e un numero di pagina di destinazione. diff --git a/app/core/src/main/resources/messages_ja_JP.properties b/app/core/src/main/resources/messages_ja_JP.properties index 12f490166..fdffa3523 100644 --- a/app/core/src/main/resources/messages_ja_JP.properties +++ b/app/core/src/main/resources/messages_ja_JP.properties @@ -1860,6 +1860,12 @@ editTableOfContents.replaceExisting=既存のしおりを置き換える(既 editTableOfContents.editorTitle=しおりエディター editTableOfContents.editorDesc=以下にしおりを追加して配置します。+をクリックして、子のしおりを追加します。 editTableOfContents.addBookmark=新しいしおりを追加 +editTableOfContents.importBookmarksDefault=Import +editTableOfContents.importBookmarksFromJsonFile=Upload JSON file +editTableOfContents.importBookmarksFromClipboard=Paste from clipboard +editTableOfContents.exportBookmarksDefault=Export +editTableOfContents.exportBookmarksAsJson=Download as JSON +editTableOfContents.exportBookmarksAsText=Copy as text editTableOfContents.desc.1=このツールを使用すると、PDFドキュメントに目次(しおり)を追加または編集できます。 editTableOfContents.desc.2=親しおりに子しおりを追加することで階層構造を作成できます。 editTableOfContents.desc.3=各しおりにはタイトルと対象のページ番号が必要です。 diff --git a/app/core/src/main/resources/messages_ko_KR.properties b/app/core/src/main/resources/messages_ko_KR.properties index 70c4178d4..b129e9c69 100644 --- a/app/core/src/main/resources/messages_ko_KR.properties +++ b/app/core/src/main/resources/messages_ko_KR.properties @@ -1860,6 +1860,12 @@ editTableOfContents.replaceExisting=Replace existing bookmarks (uncheck to appen editTableOfContents.editorTitle=Bookmark Editor editTableOfContents.editorDesc=Add and arrange bookmarks below. Click + to add child bookmarks. editTableOfContents.addBookmark=Add New Bookmark +editTableOfContents.importBookmarksDefault=Import +editTableOfContents.importBookmarksFromJsonFile=Upload JSON file +editTableOfContents.importBookmarksFromClipboard=Paste from clipboard +editTableOfContents.exportBookmarksDefault=Export +editTableOfContents.exportBookmarksAsJson=Download as JSON +editTableOfContents.exportBookmarksAsText=Copy as text editTableOfContents.desc.1=This tool allows you to add or edit the table of contents (bookmarks) in a PDF document. editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks. editTableOfContents.desc.3=Each bookmark requires a title and target page number. diff --git a/app/core/src/main/resources/messages_ml_IN.properties b/app/core/src/main/resources/messages_ml_IN.properties index 26d18fd4d..775b68792 100644 --- a/app/core/src/main/resources/messages_ml_IN.properties +++ b/app/core/src/main/resources/messages_ml_IN.properties @@ -1860,6 +1860,12 @@ editTableOfContents.replaceExisting=Replace existing bookmarks (uncheck to appen editTableOfContents.editorTitle=Bookmark Editor editTableOfContents.editorDesc=Add and arrange bookmarks below. Click + to add child bookmarks. editTableOfContents.addBookmark=Add New Bookmark +editTableOfContents.importBookmarksDefault=Import +editTableOfContents.importBookmarksFromJsonFile=Upload JSON file +editTableOfContents.importBookmarksFromClipboard=Paste from clipboard +editTableOfContents.exportBookmarksDefault=Export +editTableOfContents.exportBookmarksAsJson=Download as JSON +editTableOfContents.exportBookmarksAsText=Copy as text editTableOfContents.desc.1=This tool allows you to add or edit the table of contents (bookmarks) in a PDF document. editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks. editTableOfContents.desc.3=Each bookmark requires a title and target page number. diff --git a/app/core/src/main/resources/messages_nl_NL.properties b/app/core/src/main/resources/messages_nl_NL.properties index ac001d2a8..94b1bb020 100644 --- a/app/core/src/main/resources/messages_nl_NL.properties +++ b/app/core/src/main/resources/messages_nl_NL.properties @@ -1860,6 +1860,12 @@ editTableOfContents.replaceExisting=Replace existing bookmarks (uncheck to appen editTableOfContents.editorTitle=Bookmark Editor editTableOfContents.editorDesc=Add and arrange bookmarks below. Click + to add child bookmarks. editTableOfContents.addBookmark=Add New Bookmark +editTableOfContents.importBookmarksDefault=Import +editTableOfContents.importBookmarksFromJsonFile=Upload JSON file +editTableOfContents.importBookmarksFromClipboard=Paste from clipboard +editTableOfContents.exportBookmarksDefault=Export +editTableOfContents.exportBookmarksAsJson=Download as JSON +editTableOfContents.exportBookmarksAsText=Copy as text editTableOfContents.desc.1=This tool allows you to add or edit the table of contents (bookmarks) in a PDF document. editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks. editTableOfContents.desc.3=Each bookmark requires a title and target page number. diff --git a/app/core/src/main/resources/messages_no_NB.properties b/app/core/src/main/resources/messages_no_NB.properties index f16c1f898..dadc0bc32 100644 --- a/app/core/src/main/resources/messages_no_NB.properties +++ b/app/core/src/main/resources/messages_no_NB.properties @@ -1860,6 +1860,12 @@ editTableOfContents.replaceExisting=Replace existing bookmarks (uncheck to appen editTableOfContents.editorTitle=Bookmark Editor editTableOfContents.editorDesc=Add and arrange bookmarks below. Click + to add child bookmarks. editTableOfContents.addBookmark=Add New Bookmark +editTableOfContents.importBookmarksDefault=Import +editTableOfContents.importBookmarksFromJsonFile=Upload JSON file +editTableOfContents.importBookmarksFromClipboard=Paste from clipboard +editTableOfContents.exportBookmarksDefault=Export +editTableOfContents.exportBookmarksAsJson=Download as JSON +editTableOfContents.exportBookmarksAsText=Copy as text editTableOfContents.desc.1=This tool allows you to add or edit the table of contents (bookmarks) in a PDF document. editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks. editTableOfContents.desc.3=Each bookmark requires a title and target page number. diff --git a/app/core/src/main/resources/messages_pl_PL.properties b/app/core/src/main/resources/messages_pl_PL.properties index 442540fbb..7d553c574 100644 --- a/app/core/src/main/resources/messages_pl_PL.properties +++ b/app/core/src/main/resources/messages_pl_PL.properties @@ -1860,6 +1860,12 @@ editTableOfContents.replaceExisting=Replace existing bookmarks (uncheck to appen editTableOfContents.editorTitle=Bookmark Editor editTableOfContents.editorDesc=Add and arrange bookmarks below. Click + to add child bookmarks. editTableOfContents.addBookmark=Add New Bookmark +editTableOfContents.importBookmarksDefault=Import +editTableOfContents.importBookmarksFromJsonFile=Upload JSON file +editTableOfContents.importBookmarksFromClipboard=Paste from clipboard +editTableOfContents.exportBookmarksDefault=Export +editTableOfContents.exportBookmarksAsJson=Download as JSON +editTableOfContents.exportBookmarksAsText=Copy as text editTableOfContents.desc.1=This tool allows you to add or edit the table of contents (bookmarks) in a PDF document. editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks. editTableOfContents.desc.3=Each bookmark requires a title and target page number. diff --git a/app/core/src/main/resources/messages_pt_BR.properties b/app/core/src/main/resources/messages_pt_BR.properties index 5db475798..cde839e5e 100644 --- a/app/core/src/main/resources/messages_pt_BR.properties +++ b/app/core/src/main/resources/messages_pt_BR.properties @@ -1860,6 +1860,12 @@ editTableOfContents.replaceExisting=Replace existing bookmarks (uncheck to appen editTableOfContents.editorTitle=Bookmark Editor editTableOfContents.editorDesc=Add and arrange bookmarks below. Click + to add child bookmarks. editTableOfContents.addBookmark=Add New Bookmark +editTableOfContents.importBookmarksDefault=Import +editTableOfContents.importBookmarksFromJsonFile=Upload JSON file +editTableOfContents.importBookmarksFromClipboard=Paste from clipboard +editTableOfContents.exportBookmarksDefault=Export +editTableOfContents.exportBookmarksAsJson=Download as JSON +editTableOfContents.exportBookmarksAsText=Copy as text editTableOfContents.desc.1=This tool allows you to add or edit the table of contents (bookmarks) in a PDF document. editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks. editTableOfContents.desc.3=Each bookmark requires a title and target page number. diff --git a/app/core/src/main/resources/messages_pt_PT.properties b/app/core/src/main/resources/messages_pt_PT.properties index aad725305..49998f273 100644 --- a/app/core/src/main/resources/messages_pt_PT.properties +++ b/app/core/src/main/resources/messages_pt_PT.properties @@ -1860,6 +1860,12 @@ editTableOfContents.replaceExisting=Replace existing bookmarks (uncheck to appen editTableOfContents.editorTitle=Bookmark Editor editTableOfContents.editorDesc=Add and arrange bookmarks below. Click + to add child bookmarks. editTableOfContents.addBookmark=Add New Bookmark +editTableOfContents.importBookmarksDefault=Import +editTableOfContents.importBookmarksFromJsonFile=Upload JSON file +editTableOfContents.importBookmarksFromClipboard=Paste from clipboard +editTableOfContents.exportBookmarksDefault=Export +editTableOfContents.exportBookmarksAsJson=Download as JSON +editTableOfContents.exportBookmarksAsText=Copy as text editTableOfContents.desc.1=This tool allows you to add or edit the table of contents (bookmarks) in a PDF document. editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks. editTableOfContents.desc.3=Each bookmark requires a title and target page number. diff --git a/app/core/src/main/resources/messages_ro_RO.properties b/app/core/src/main/resources/messages_ro_RO.properties index d785d49c6..e33d01f4a 100644 --- a/app/core/src/main/resources/messages_ro_RO.properties +++ b/app/core/src/main/resources/messages_ro_RO.properties @@ -1860,6 +1860,12 @@ editTableOfContents.replaceExisting=Replace existing bookmarks (uncheck to appen editTableOfContents.editorTitle=Bookmark Editor editTableOfContents.editorDesc=Add and arrange bookmarks below. Click + to add child bookmarks. editTableOfContents.addBookmark=Add New Bookmark +editTableOfContents.importBookmarksDefault=Import +editTableOfContents.importBookmarksFromJsonFile=Upload JSON file +editTableOfContents.importBookmarksFromClipboard=Paste from clipboard +editTableOfContents.exportBookmarksDefault=Export +editTableOfContents.exportBookmarksAsJson=Download as JSON +editTableOfContents.exportBookmarksAsText=Copy as text editTableOfContents.desc.1=This tool allows you to add or edit the table of contents (bookmarks) in a PDF document. editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks. editTableOfContents.desc.3=Each bookmark requires a title and target page number. diff --git a/app/core/src/main/resources/messages_ru_RU.properties b/app/core/src/main/resources/messages_ru_RU.properties index 64bb21a2c..072e03123 100644 --- a/app/core/src/main/resources/messages_ru_RU.properties +++ b/app/core/src/main/resources/messages_ru_RU.properties @@ -1860,6 +1860,12 @@ editTableOfContents.replaceExisting=Заменить существующие з editTableOfContents.editorTitle=Редактор закладок editTableOfContents.editorDesc=Добавьте и упорядочьте закладки ниже. Нажмите «+», чтобы добавить дочерние закладки. editTableOfContents.addBookmark=Добавить новую закладку +editTableOfContents.importBookmarksDefault=Import +editTableOfContents.importBookmarksFromJsonFile=Upload JSON file +editTableOfContents.importBookmarksFromClipboard=Paste from clipboard +editTableOfContents.exportBookmarksDefault=Export +editTableOfContents.exportBookmarksAsJson=Download as JSON +editTableOfContents.exportBookmarksAsText=Copy as text editTableOfContents.desc.1=Этот инструмент позволяет вам добавлять или редактировать оглавление (закладки) в PDF-документе. editTableOfContents.desc.2=Вы можете создать иерархическую структуру, добавив дочерние закладки к родительским. editTableOfContents.desc.3=Для каждой закладки требуется название и номер целевой страницы. diff --git a/app/core/src/main/resources/messages_sk_SK.properties b/app/core/src/main/resources/messages_sk_SK.properties index 6325a85e9..10ed3d985 100644 --- a/app/core/src/main/resources/messages_sk_SK.properties +++ b/app/core/src/main/resources/messages_sk_SK.properties @@ -1860,6 +1860,12 @@ editTableOfContents.replaceExisting=Replace existing bookmarks (uncheck to appen editTableOfContents.editorTitle=Bookmark Editor editTableOfContents.editorDesc=Add and arrange bookmarks below. Click + to add child bookmarks. editTableOfContents.addBookmark=Add New Bookmark +editTableOfContents.importBookmarksDefault=Import +editTableOfContents.importBookmarksFromJsonFile=Upload JSON file +editTableOfContents.importBookmarksFromClipboard=Paste from clipboard +editTableOfContents.exportBookmarksDefault=Export +editTableOfContents.exportBookmarksAsJson=Download as JSON +editTableOfContents.exportBookmarksAsText=Copy as text editTableOfContents.desc.1=This tool allows you to add or edit the table of contents (bookmarks) in a PDF document. editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks. editTableOfContents.desc.3=Each bookmark requires a title and target page number. diff --git a/app/core/src/main/resources/messages_sl_SI.properties b/app/core/src/main/resources/messages_sl_SI.properties index 698e5aee0..8b15dcc42 100644 --- a/app/core/src/main/resources/messages_sl_SI.properties +++ b/app/core/src/main/resources/messages_sl_SI.properties @@ -1860,6 +1860,12 @@ editTableOfContents.replaceExisting=Replace existing bookmarks (uncheck to appen editTableOfContents.editorTitle=Bookmark Editor editTableOfContents.editorDesc=Add and arrange bookmarks below. Click + to add child bookmarks. editTableOfContents.addBookmark=Add New Bookmark +editTableOfContents.importBookmarksDefault=Import +editTableOfContents.importBookmarksFromJsonFile=Upload JSON file +editTableOfContents.importBookmarksFromClipboard=Paste from clipboard +editTableOfContents.exportBookmarksDefault=Export +editTableOfContents.exportBookmarksAsJson=Download as JSON +editTableOfContents.exportBookmarksAsText=Copy as text editTableOfContents.desc.1=This tool allows you to add or edit the table of contents (bookmarks) in a PDF document. editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks. editTableOfContents.desc.3=Each bookmark requires a title and target page number. diff --git a/app/core/src/main/resources/messages_sr_LATN_RS.properties b/app/core/src/main/resources/messages_sr_LATN_RS.properties index 968c277e9..305b68aa1 100644 --- a/app/core/src/main/resources/messages_sr_LATN_RS.properties +++ b/app/core/src/main/resources/messages_sr_LATN_RS.properties @@ -1860,6 +1860,12 @@ editTableOfContents.replaceExisting=Zameni postojeće obeleživače (isključi d editTableOfContents.editorTitle=Editor obeleživača editTableOfContents.editorDesc=Dodaj i rasporedi obeleživače ispod. Klikni + za dodavanje podređenih obeleživača. editTableOfContents.addBookmark=Dodaj novi obeleživač +editTableOfContents.importBookmarksDefault=Import +editTableOfContents.importBookmarksFromJsonFile=Upload JSON file +editTableOfContents.importBookmarksFromClipboard=Paste from clipboard +editTableOfContents.exportBookmarksDefault=Export +editTableOfContents.exportBookmarksAsJson=Download as JSON +editTableOfContents.exportBookmarksAsText=Copy as text editTableOfContents.desc.1=Ovaj alat omogućava dodavanje ili izmenu sadržaja (obeleživača) u PDF dokumentu. editTableOfContents.desc.2=Moguće je kreirati hijerarhijsku strukturu dodavanjem podređenih obeleživača nadređenim obeleživačima. editTableOfContents.desc.3=Svaki obeleživač zahteva naslov i broj ciljne strane. diff --git a/app/core/src/main/resources/messages_sv_SE.properties b/app/core/src/main/resources/messages_sv_SE.properties index 31c250caa..e731f6337 100644 --- a/app/core/src/main/resources/messages_sv_SE.properties +++ b/app/core/src/main/resources/messages_sv_SE.properties @@ -1860,6 +1860,12 @@ editTableOfContents.replaceExisting=Replace existing bookmarks (uncheck to appen editTableOfContents.editorTitle=Bookmark Editor editTableOfContents.editorDesc=Add and arrange bookmarks below. Click + to add child bookmarks. editTableOfContents.addBookmark=Add New Bookmark +editTableOfContents.importBookmarksDefault=Import +editTableOfContents.importBookmarksFromJsonFile=Upload JSON file +editTableOfContents.importBookmarksFromClipboard=Paste from clipboard +editTableOfContents.exportBookmarksDefault=Export +editTableOfContents.exportBookmarksAsJson=Download as JSON +editTableOfContents.exportBookmarksAsText=Copy as text editTableOfContents.desc.1=This tool allows you to add or edit the table of contents (bookmarks) in a PDF document. editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks. editTableOfContents.desc.3=Each bookmark requires a title and target page number. diff --git a/app/core/src/main/resources/messages_th_TH.properties b/app/core/src/main/resources/messages_th_TH.properties index df50423ca..7a2b20aea 100644 --- a/app/core/src/main/resources/messages_th_TH.properties +++ b/app/core/src/main/resources/messages_th_TH.properties @@ -1860,6 +1860,12 @@ editTableOfContents.replaceExisting=Replace existing bookmarks (uncheck to appen editTableOfContents.editorTitle=Bookmark Editor editTableOfContents.editorDesc=Add and arrange bookmarks below. Click + to add child bookmarks. editTableOfContents.addBookmark=Add New Bookmark +editTableOfContents.importBookmarksDefault=Import +editTableOfContents.importBookmarksFromJsonFile=Upload JSON file +editTableOfContents.importBookmarksFromClipboard=Paste from clipboard +editTableOfContents.exportBookmarksDefault=Export +editTableOfContents.exportBookmarksAsJson=Download as JSON +editTableOfContents.exportBookmarksAsText=Copy as text editTableOfContents.desc.1=This tool allows you to add or edit the table of contents (bookmarks) in a PDF document. editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks. editTableOfContents.desc.3=Each bookmark requires a title and target page number. diff --git a/app/core/src/main/resources/messages_tr_TR.properties b/app/core/src/main/resources/messages_tr_TR.properties index 01e946c56..c03d7872e 100644 --- a/app/core/src/main/resources/messages_tr_TR.properties +++ b/app/core/src/main/resources/messages_tr_TR.properties @@ -1860,6 +1860,12 @@ editTableOfContents.replaceExisting=Mevcut yer işaretlerini değiştir (var ola editTableOfContents.editorTitle=Yer İşareti Düzenleyici editTableOfContents.editorDesc=Aşağıdan yer işaretleri ekleyin ve düzenleyin. Alt yer işareti eklemek için + simgesine tıklayın. editTableOfContents.addBookmark=Yeni Yer İşareti Ekle +editTableOfContents.importBookmarksDefault=Import +editTableOfContents.importBookmarksFromJsonFile=Upload JSON file +editTableOfContents.importBookmarksFromClipboard=Paste from clipboard +editTableOfContents.exportBookmarksDefault=Export +editTableOfContents.exportBookmarksAsJson=Download as JSON +editTableOfContents.exportBookmarksAsText=Copy as text editTableOfContents.desc.1=Bu araç, bir PDF belgesine içindekiler tablosu (yer işaretleri) eklemenizi veya mevcut olanları düzenlemenizi sağlar. editTableOfContents.desc.2=Alt yer işaretleri ekleyerek hiyerarşik bir yapı oluşturabilirsiniz. editTableOfContents.desc.3=Her yer işareti bir başlık ve hedef sayfa numarası gerektirir. diff --git a/app/core/src/main/resources/messages_uk_UA.properties b/app/core/src/main/resources/messages_uk_UA.properties index 16add9977..f24d997ac 100644 --- a/app/core/src/main/resources/messages_uk_UA.properties +++ b/app/core/src/main/resources/messages_uk_UA.properties @@ -1860,6 +1860,12 @@ editTableOfContents.replaceExisting=Replace existing bookmarks (uncheck to appen editTableOfContents.editorTitle=Bookmark Editor editTableOfContents.editorDesc=Add and arrange bookmarks below. Click + to add child bookmarks. editTableOfContents.addBookmark=Add New Bookmark +editTableOfContents.importBookmarksDefault=Import +editTableOfContents.importBookmarksFromJsonFile=Upload JSON file +editTableOfContents.importBookmarksFromClipboard=Paste from clipboard +editTableOfContents.exportBookmarksDefault=Export +editTableOfContents.exportBookmarksAsJson=Download as JSON +editTableOfContents.exportBookmarksAsText=Copy as text editTableOfContents.desc.1=This tool allows you to add or edit the table of contents (bookmarks) in a PDF document. editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks. editTableOfContents.desc.3=Each bookmark requires a title and target page number. diff --git a/app/core/src/main/resources/messages_vi_VN.properties b/app/core/src/main/resources/messages_vi_VN.properties index c9e070e77..cd2e412f7 100644 --- a/app/core/src/main/resources/messages_vi_VN.properties +++ b/app/core/src/main/resources/messages_vi_VN.properties @@ -1860,6 +1860,12 @@ editTableOfContents.replaceExisting=Replace existing bookmarks (uncheck to appen editTableOfContents.editorTitle=Bookmark Editor editTableOfContents.editorDesc=Add and arrange bookmarks below. Click + to add child bookmarks. editTableOfContents.addBookmark=Add New Bookmark +editTableOfContents.importBookmarksDefault=Import +editTableOfContents.importBookmarksFromJsonFile=Upload JSON file +editTableOfContents.importBookmarksFromClipboard=Paste from clipboard +editTableOfContents.exportBookmarksDefault=Export +editTableOfContents.exportBookmarksAsJson=Download as JSON +editTableOfContents.exportBookmarksAsText=Copy as text editTableOfContents.desc.1=This tool allows you to add or edit the table of contents (bookmarks) in a PDF document. editTableOfContents.desc.2=You can create a hierarchical structure by adding child bookmarks to parent bookmarks. editTableOfContents.desc.3=Each bookmark requires a title and target page number. diff --git a/app/core/src/main/resources/messages_zh_CN.properties b/app/core/src/main/resources/messages_zh_CN.properties index 75957b1b0..252eb2768 100644 --- a/app/core/src/main/resources/messages_zh_CN.properties +++ b/app/core/src/main/resources/messages_zh_CN.properties @@ -1860,6 +1860,12 @@ editTableOfContents.replaceExisting=替换现有书签(取消勾选则追加 editTableOfContents.editorTitle=书签编辑器 editTableOfContents.editorDesc=在下方添加并排列书签,点击 + 可添加子书签 editTableOfContents.addBookmark=添加书签 +editTableOfContents.importBookmarksDefault=Import +editTableOfContents.importBookmarksFromJsonFile=Upload JSON file +editTableOfContents.importBookmarksFromClipboard=Paste from clipboard +editTableOfContents.exportBookmarksDefault=Export +editTableOfContents.exportBookmarksAsJson=Download as JSON +editTableOfContents.exportBookmarksAsText=Copy as text editTableOfContents.desc.1=此工具可用于在 PDF 文档中添加或编辑目录(书签) editTableOfContents.desc.2=您可以通过为父书签添加子书签来构建层级结构 editTableOfContents.desc.3=每个书签需填写标题和目标页码 diff --git a/app/core/src/main/resources/messages_zh_TW.properties b/app/core/src/main/resources/messages_zh_TW.properties index 3968b07d2..9f38178ac 100644 --- a/app/core/src/main/resources/messages_zh_TW.properties +++ b/app/core/src/main/resources/messages_zh_TW.properties @@ -1860,6 +1860,12 @@ editTableOfContents.replaceExisting=取代現有書籤 (取消勾選以附加到 editTableOfContents.editorTitle=書籤編輯器 editTableOfContents.editorDesc=在下方新增和排列書籤。點選 + 新增子書籤。 editTableOfContents.addBookmark=新增書籤 +editTableOfContents.importBookmarksDefault=Import +editTableOfContents.importBookmarksFromJsonFile=Upload JSON file +editTableOfContents.importBookmarksFromClipboard=Paste from clipboard +editTableOfContents.exportBookmarksDefault=Export +editTableOfContents.exportBookmarksAsJson=Download as JSON +editTableOfContents.exportBookmarksAsText=Copy as text editTableOfContents.desc.1=此工具可讓您在 PDF 文件中新增或編輯目錄 (書籤)。 editTableOfContents.desc.2=您可以透過將子書籤新增至父書籤來建立階層式結構。 editTableOfContents.desc.3=每個書籤都需要標題和目標頁碼。 diff --git a/app/core/src/main/resources/static/css/edit-table-of-contents.css b/app/core/src/main/resources/static/css/edit-table-of-contents.css index d85813a73..74ee98b3c 100644 --- a/app/core/src/main/resources/static/css/edit-table-of-contents.css +++ b/app/core/src/main/resources/static/css/edit-table-of-contents.css @@ -156,7 +156,7 @@ .bookmark-actions { margin-top: 20px; display: flex; - justify-content: flex-start; + justify-content: space-between; } /* Collapse/expand icons */ @@ -274,3 +274,25 @@ --bg-empty: var(--md-sys-color-surface-container-low, #24282e); --border-empty: var(--md-sys-color-outline, #495057); } + +.success-flash { + position: relative; +} + +.success-flash::after { + content: "✓"; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + font-weight: bold; + font-size: 1.2em; + color: white; + opacity: 0; + animation: fadeOut 1s ease-in-out; +} + +@keyframes fadeOut { + 0% { opacity: 1; } + 100% { opacity: 0; } +} diff --git a/app/core/src/main/resources/static/js/pages/edit-table-of-contents.js b/app/core/src/main/resources/static/js/pages/edit-table-of-contents.js index de7fe30db..82c92a50e 100644 --- a/app/core/src/main/resources/static/js/pages/edit-table-of-contents.js +++ b/app/core/src/main/resources/static/js/pages/edit-table-of-contents.js @@ -1,88 +1,117 @@ -document.addEventListener('DOMContentLoaded', function() { - const bookmarksContainer = document.getElementById('bookmarks-container'); - const addBookmarkBtn = document.getElementById('addBookmarkBtn'); - const bookmarkDataInput = document.getElementById('bookmarkData'); +document.addEventListener("DOMContentLoaded", function () { + const bookmarksContainer = document.getElementById("bookmarks-container"); + const errorMessageContainer = document.getElementById("error-message-container"); + const addBookmarkBtn = document.getElementById("addBookmarkBtn"); + const bookmarkDataInput = document.getElementById("bookmarkData"); let bookmarks = []; let counter = 0; // Used for generating unique IDs - // Add event listener to the file input to extract existing bookmarks - document.getElementById('fileInput-input').addEventListener('change', async function(e) { - if (!e.target.files || e.target.files.length === 0) { + // callback function on file input change to extract bookmarks from PDF + async function getBookmarkDataFromPdf(event) { + if (!event.target.files || event.target.files.length === 0) { return; } - // Reset bookmarks initially - bookmarks = []; - updateBookmarksUI(); - const formData = new FormData(); - formData.append('file', e.target.files[0]); - - // Show loading indicator - showLoadingIndicator(); + formData.append("file", event.target.files[0]); try { // Call the API to extract bookmarks using fetchWithCsrf for CSRF protection - const response = await fetchWithCsrf('/api/v1/general/extract-bookmarks', { - method: 'POST', - body: formData + const response = await fetchWithCsrf("/api/v1/general/extract-bookmarks", { + method: "POST", + body: formData, }); if (!response.ok) { - throw new Error(`Failed to extract bookmarks: ${response.status} ${response.statusText}`); + throw new Error(`Failed to fetch API: ${response.status} ${response.statusText}`); } const extractedBookmarks = await response.json(); + return extractedBookmarks; + } catch (error) { + throw new Error("Error extracting bookmark data:", error); + } + } + + // callback function on file input change to extract bookmarks from JSON + async function getBookmarkDataFromJson(event) { + if (!event.target.files || event.target.files.length === 0) { + return; + } + + const file = event.target.files[0]; + + try { + const fileText = await file.text(); + const jsonData = JSON.parse(fileText); + return jsonData; + } catch (error) { + throw new Error(`Error extracting bookmark data: error while reading or parsing JSON file: ${error.message}`); + } + } + + // display new bookmark data given by a callback function that loads or fetches the data + async function loadBookmarks(getBookmarkDataCallback) { + // reset bookmarks + bookmarks = []; + updateBookmarksUI(); + showLoadingIndicator(); + + try { + // Get new bookmarks from the callback + const newBookmarks = await getBookmarkDataCallback(); // Convert extracted bookmarks to our format with IDs - if (extractedBookmarks && extractedBookmarks.length > 0) { - bookmarks = extractedBookmarks.map(convertExtractedBookmark); - } else { - showEmptyState(); + if (newBookmarks && newBookmarks.length > 0) { + bookmarks = newBookmarks.map(convertExtractedBookmark); } } catch (error) { - // Show error message - showErrorMessage('Failed to extract bookmarks. You can still create new ones.'); - - // Add a default bookmark if no bookmarks and error - if (bookmarks.length === 0) { - showEmptyState(); - } + bookmarks = []; + throw new Error(`Error loading bookmarks: ${error}`); } finally { - // Remove loading indicator removeLoadingIndicator(); - - // Update the UI updateBookmarksUI(); } + } + + // Add event listener to the file input to extract existing bookmarks + document.getElementById("fileInput-input").addEventListener("change", async function (event) { + try { + await loadBookmarks(async function () { + return getBookmarkDataFromPdf(event); + }); + } catch { + showErrorMessage("Failed to extract bookmarks. You can still create new ones."); + } }); function showLoadingIndicator() { - const loadingEl = document.createElement('div'); - loadingEl.className = 'alert alert-info'; - loadingEl.textContent = 'Loading bookmarks from PDF...'; - loadingEl.id = 'loading-bookmarks'; - bookmarksContainer.innerHTML = ''; + const loadingEl = document.createElement("div"); + loadingEl.className = "alert alert-info"; + loadingEl.textContent = "Loading bookmarks from PDF..."; + loadingEl.id = "loading-bookmarks"; + errorMessageContainer.innerHTML = ""; + bookmarksContainer.innerHTML = ""; bookmarksContainer.appendChild(loadingEl); } function removeLoadingIndicator() { - const loadingEl = document.getElementById('loading-bookmarks'); + const loadingEl = document.getElementById("loading-bookmarks"); if (loadingEl) { loadingEl.remove(); } } function showErrorMessage(message) { - const errorEl = document.createElement('div'); - errorEl.className = 'alert alert-danger'; + const errorEl = document.createElement("div"); + errorEl.className = "alert alert-danger"; errorEl.textContent = message; - bookmarksContainer.appendChild(errorEl); + errorMessageContainer.appendChild(errorEl); } function showEmptyState() { - const emptyStateEl = document.createElement('div'); - emptyStateEl.className = 'empty-bookmarks mb-3'; + const emptyStateEl = document.createElement("div"); + emptyStateEl.className = "empty-bookmarks mb-3"; emptyStateEl.innerHTML = ` bookmark_add
No bookmarks found
@@ -93,8 +122,8 @@ document.addEventListener('DOMContentLoaded', function() { `; // Add event listener to the "Add First Bookmark" button - emptyStateEl.querySelector('.btn-add-first-bookmark').addEventListener('click', function() { - addBookmark(null, 'New Bookmark', 1); + emptyStateEl.querySelector(".btn-add-first-bookmark").addEventListener("click", function () { + addBookmark(null, "New Bookmark", 1); emptyStateEl.remove(); }); @@ -106,15 +135,15 @@ document.addEventListener('DOMContentLoaded', function() { counter++; const result = { id: Date.now() + counter, // Generate a unique ID - title: bookmark.title || 'Untitled Bookmark', + title: bookmark.title || "Untitled Bookmark", pageNumber: bookmark.pageNumber || 1, children: [], - expanded: false // All bookmarks start collapsed for better visibility + expanded: false, // All bookmarks start collapsed for better visibility }; // Convert children recursively if (bookmark.children && bookmark.children.length > 0) { - result.children = bookmark.children.map(child => { + result.children = bookmark.children.map((child) => { return convertExtractedBookmark(child); }); } @@ -123,24 +152,24 @@ document.addEventListener('DOMContentLoaded', function() { } // Add bookmark button click handler - addBookmarkBtn.addEventListener('click', function(e) { + addBookmarkBtn.addEventListener("click", function (e) { e.preventDefault(); addBookmark(); }); // Add form submit handler to update JSON data - document.getElementById('editTocForm').addEventListener('submit', function() { + document.getElementById("editTocForm").addEventListener("submit", function () { updateBookmarkData(); }); - function addBookmark(parent = null, title = '', pageNumber = 1) { + function addBookmark(parent = null, title = "", pageNumber = 1) { counter++; const newBookmark = { id: Date.now() + counter, - title: title || 'New Bookmark', + title: title || "New Bookmark", pageNumber: pageNumber || 1, children: [], - expanded: false // New bookmarks start collapsed + expanded: false, // New bookmarks start collapsed }; if (parent === null) { @@ -162,13 +191,13 @@ document.addEventListener('DOMContentLoaded', function() { setTimeout(() => { const newElement = document.querySelector(`[data-id="${newBookmark.id}"]`); if (newElement) { - const titleInput = newElement.querySelector('.bookmark-title'); + const titleInput = newElement.querySelector(".bookmark-title"); if (titleInput) { titleInput.focus(); titleInput.select(); } // Scroll to the new element - newElement.scrollIntoView({ behavior: 'smooth', block: 'center' }); + newElement.scrollIntoView({ behavior: "smooth", block: "center" }); } }, 50); } @@ -203,7 +232,7 @@ document.addEventListener('DOMContentLoaded', function() { function removeBookmark(id) { // Remove from top level - const index = bookmarks.findIndex(b => b.id === id); + const index = bookmarks.findIndex((b) => b.id === id); if (index !== -1) { bookmarks.splice(index, 1); updateBookmarksUI(); @@ -213,7 +242,7 @@ document.addEventListener('DOMContentLoaded', function() { // Remove from children function removeFromChildren(bookmarkArray, id) { for (const bookmark of bookmarkArray) { - const childIndex = bookmark.children.findIndex(b => b.id === id); + const childIndex = bookmark.children.findIndex((b) => b.id === id); if (childIndex !== -1) { bookmark.children.splice(childIndex, 1); return true; @@ -253,7 +282,7 @@ document.addEventListener('DOMContentLoaded', function() { return { title: bookmark.title, pageNumber: bookmark.pageNumber, - children: bookmark.children.map(cleanBookmark) + children: bookmark.children.map(cleanBookmark), }; } @@ -263,22 +292,22 @@ document.addEventListener('DOMContentLoaded', function() { } // Only clear the container if there are no error messages or loading indicators - if (!document.querySelector('#bookmarks-container .alert')) { - bookmarksContainer.innerHTML = ''; + if (!document.querySelector("#bookmarks-container .alert")) { + bookmarksContainer.innerHTML = ""; } // Check if there are bookmarks to display - if (bookmarks.length === 0 && !document.querySelector('.empty-bookmarks')) { + if (bookmarks.length === 0 && !document.querySelector(".empty-bookmarks")) { showEmptyState(); } else { // Remove empty state if it exists and there are bookmarks - const emptyState = document.querySelector('.empty-bookmarks'); + const emptyState = document.querySelector(".empty-bookmarks"); if (emptyState && bookmarks.length > 0) { emptyState.remove(); } // Create bookmark elements - bookmarks.forEach(bookmark => { + bookmarks.forEach((bookmark) => { const bookmarkElement = createBookmarkElement(bookmark); bookmarksContainer.appendChild(bookmarkElement); }); @@ -287,15 +316,15 @@ document.addEventListener('DOMContentLoaded', function() { updateBookmarkData(); // Initialize tooltips for dynamically added elements - if (typeof $ !== 'undefined') { + if (typeof $ !== "undefined") { $('[data-bs-toggle="tooltip"]').tooltip(); } } // Create the main bookmark element with collapsible interface function createBookmarkElement(bookmark, level = 0) { - const bookmarkEl = document.createElement('div'); - bookmarkEl.className = 'bookmark-item'; + const bookmarkEl = document.createElement("div"); + bookmarkEl.className = "bookmark-item"; bookmarkEl.dataset.id = bookmark.id; bookmarkEl.dataset.level = level; @@ -304,10 +333,10 @@ document.addEventListener('DOMContentLoaded', function() { bookmarkEl.appendChild(header); // Create the content (collapsible part) - const content = document.createElement('div'); - content.className = 'bookmark-content'; + const content = document.createElement("div"); + content.className = "bookmark-content"; if (!bookmark.expanded) { - content.style.display = 'none'; + content.style.display = "none"; } // Main input row @@ -328,48 +357,48 @@ document.addEventListener('DOMContentLoaded', function() { // Create the header that's always visible function createBookmarkHeader(bookmark, level) { - const header = document.createElement('div'); - header.className = 'bookmark-header'; + const header = document.createElement("div"); + header.className = "bookmark-header"; if (!bookmark.expanded) { - header.classList.add('collapsed'); + header.classList.add("collapsed"); } // Left side of header with expand/collapse and info - const headerLeft = document.createElement('div'); - headerLeft.className = 'd-flex align-items-center'; + const headerLeft = document.createElement("div"); + headerLeft.className = "d-flex align-items-center"; // Toggle expand/collapse icon with child count - const toggleContainer = document.createElement('div'); - toggleContainer.className = 'd-flex align-items-center'; - toggleContainer.style.marginRight = '8px'; + const toggleContainer = document.createElement("div"); + toggleContainer.className = "d-flex align-items-center"; + toggleContainer.style.marginRight = "8px"; // Only show toggle if has children if (bookmark.children && bookmark.children.length > 0) { // Create toggle icon - const toggleIcon = document.createElement('span'); - toggleIcon.className = 'material-symbols-rounded toggle-icon me-1'; - toggleIcon.textContent = 'expand_more'; - toggleIcon.style.cursor = 'pointer'; + const toggleIcon = document.createElement("span"); + toggleIcon.className = "material-symbols-rounded toggle-icon me-1"; + toggleIcon.textContent = "expand_more"; + toggleIcon.style.cursor = "pointer"; toggleContainer.appendChild(toggleIcon); // Add child count indicator - const childCount = document.createElement('span'); - childCount.className = 'badge rounded-pill'; + const childCount = document.createElement("span"); + childCount.className = "badge rounded-pill"; // Use theme-appropriate badge color - const isDarkMode = document.documentElement.getAttribute('data-bs-theme') === 'dark'; - childCount.classList.add(isDarkMode ? 'bg-info' : 'bg-secondary'); - childCount.style.fontSize = '0.7rem'; - childCount.style.padding = '0.2em 0.5em'; + const isDarkMode = document.documentElement.getAttribute("data-bs-theme") === "dark"; + childCount.classList.add(isDarkMode ? "bg-info" : "bg-secondary"); + childCount.style.fontSize = "0.7rem"; + childCount.style.padding = "0.2em 0.5em"; childCount.textContent = bookmark.children.length; - childCount.setAttribute('data-bs-toggle', 'tooltip'); - childCount.setAttribute('data-bs-placement', 'top'); - childCount.title = `${bookmark.children.length} child bookmark${bookmark.children.length > 1 ? 's' : ''}`; + childCount.setAttribute("data-bs-toggle", "tooltip"); + childCount.setAttribute("data-bs-placement", "top"); + childCount.title = `${bookmark.children.length} child bookmark${bookmark.children.length > 1 ? "s" : ""}`; toggleContainer.appendChild(childCount); } else { // Add spacer if no children - const spacer = document.createElement('span'); - spacer.style.width = '24px'; - spacer.style.display = 'inline-block'; + const spacer = document.createElement("span"); + spacer.style.width = "24px"; + spacer.style.display = "inline-block"; toggleContainer.appendChild(spacer); } @@ -378,65 +407,68 @@ document.addEventListener('DOMContentLoaded', function() { // Level indicator for nested items if (level > 0) { // Add relationship indicator visual line - const relationshipIndicator = document.createElement('div'); - relationshipIndicator.className = 'bookmark-relationship-indicator'; + const relationshipIndicator = document.createElement("div"); + relationshipIndicator.className = "bookmark-relationship-indicator"; - const line = document.createElement('div'); - line.className = 'relationship-line'; + const line = document.createElement("div"); + line.className = "relationship-line"; relationshipIndicator.appendChild(line); - const arrow = document.createElement('div'); - arrow.className = 'relationship-arrow'; + const arrow = document.createElement("div"); + arrow.className = "relationship-arrow"; relationshipIndicator.appendChild(arrow); header.appendChild(relationshipIndicator); // Text indicator - const levelIndicator = document.createElement('span'); - levelIndicator.className = 'bookmark-level-indicator'; + const levelIndicator = document.createElement("span"); + levelIndicator.className = "bookmark-level-indicator"; levelIndicator.textContent = `Child`; headerLeft.appendChild(levelIndicator); } // Title preview - const titlePreview = document.createElement('span'); - titlePreview.className = 'bookmark-title-preview'; + const titlePreview = document.createElement("span"); + titlePreview.className = "bookmark-title-preview"; titlePreview.textContent = bookmark.title; headerLeft.appendChild(titlePreview); // Page number preview - const pagePreview = document.createElement('span'); - pagePreview.className = 'bookmark-page-preview'; + const pagePreview = document.createElement("span"); + pagePreview.className = "bookmark-page-preview"; pagePreview.textContent = `Page ${bookmark.pageNumber}`; headerLeft.appendChild(pagePreview); // Right side of header with action buttons - const headerRight = document.createElement('div'); - headerRight.className = 'bookmark-actions-header'; + const headerRight = document.createElement("div"); + headerRight.className = "bookmark-actions-header"; // Quick add buttons with clear visual distinction - using Stirling-PDF's tooltip system - const quickAddChildButton = createButton('subdirectory_arrow_right', 'btn-add-child', 'Add child bookmark', function(e) { + const quickAddChildButton = createButton("subdirectory_arrow_right", "btn-add-child", "Add child bookmark", function (e) { e.preventDefault(); e.stopPropagation(); addBookmark(bookmark.id); }); - const quickAddSiblingButton = createButton('add', 'btn-add-sibling', 'Add sibling bookmark', function(e) { + const quickAddSiblingButton = createButton("add", "btn-add-sibling", "Add sibling bookmark", function (e) { e.preventDefault(); e.stopPropagation(); // Find parent of current bookmark const parentId = findParentBookmark(bookmarks, bookmark.id); - addBookmark(parentId, '', bookmark.pageNumber); // Same level as current bookmark + addBookmark(parentId, "", bookmark.pageNumber); // Same level as current bookmark }); // Quick remove button - const quickRemoveButton = createButton('delete', 'btn-outline-danger', 'Remove bookmark', function(e) { + const quickRemoveButton = createButton("delete", "btn-outline-danger", "Remove bookmark", function (e) { e.preventDefault(); e.stopPropagation(); - if (confirm('Are you sure you want to remove this bookmark' + - (bookmark.children.length > 0 ? ' and all its children?' : '?'))) { + if ( + confirm( + "Are you sure you want to remove this bookmark" + (bookmark.children.length > 0 ? " and all its children?" : "?") + ) + ) { removeBookmark(bookmark.id); } }); @@ -450,9 +482,9 @@ document.addEventListener('DOMContentLoaded', function() { header.appendChild(headerRight); // Add click handler for expansion toggle - header.addEventListener('click', function(e) { + header.addEventListener("click", function (e) { // Only toggle if not clicking on buttons - if (!e.target.closest('button')) { + if (!e.target.closest("button")) { toggleBookmarkExpanded(bookmark.id); } }); @@ -461,8 +493,8 @@ document.addEventListener('DOMContentLoaded', function() { } function createInputRow(bookmark) { - const row = document.createElement('div'); - row.className = 'row'; + const row = document.createElement("div"); + row.className = "row"; // Title input row.appendChild(createTitleInputElement(bookmark)); @@ -474,26 +506,26 @@ document.addEventListener('DOMContentLoaded', function() { } function createTitleInputElement(bookmark) { - const titleCol = document.createElement('div'); - titleCol.className = 'col-md-8'; + const titleCol = document.createElement("div"); + titleCol.className = "col-md-8"; - const titleGroup = document.createElement('div'); - titleGroup.className = 'mb-3'; + const titleGroup = document.createElement("div"); + titleGroup.className = "mb-3"; - const titleLabel = document.createElement('label'); - titleLabel.textContent = 'Title'; - titleLabel.className = 'form-label'; + const titleLabel = document.createElement("label"); + titleLabel.textContent = "Title"; + titleLabel.className = "form-label"; - const titleInput = document.createElement('input'); - titleInput.type = 'text'; - titleInput.className = 'form-control bookmark-title'; + const titleInput = document.createElement("input"); + titleInput.type = "text"; + titleInput.className = "form-control bookmark-title"; titleInput.value = bookmark.title; - titleInput.addEventListener('input', function() { + titleInput.addEventListener("input", function () { bookmark.title = this.value; updateBookmarkData(); // Also update the preview in the header - const header = titleInput.closest('.bookmark-item').querySelector('.bookmark-title-preview'); + const header = titleInput.closest(".bookmark-item").querySelector(".bookmark-title-preview"); if (header) { header.textContent = this.value; } @@ -507,27 +539,27 @@ document.addEventListener('DOMContentLoaded', function() { } function createPageInputElement(bookmark) { - const pageCol = document.createElement('div'); - pageCol.className = 'col-md-4'; + const pageCol = document.createElement("div"); + pageCol.className = "col-md-4"; - const pageGroup = document.createElement('div'); - pageGroup.className = 'mb-3'; + const pageGroup = document.createElement("div"); + pageGroup.className = "mb-3"; - const pageLabel = document.createElement('label'); - pageLabel.textContent = 'Page'; - pageLabel.className = 'form-label'; + const pageLabel = document.createElement("label"); + pageLabel.textContent = "Page"; + pageLabel.className = "form-label"; - const pageInput = document.createElement('input'); - pageInput.type = 'number'; - pageInput.className = 'form-control bookmark-page'; + const pageInput = document.createElement("input"); + pageInput.type = "number"; + pageInput.className = "form-control bookmark-page"; pageInput.value = bookmark.pageNumber; pageInput.min = 1; - pageInput.addEventListener('input', function() { + pageInput.addEventListener("input", function () { bookmark.pageNumber = parseInt(this.value) || 1; updateBookmarkData(); // Also update the preview in the header - const header = pageInput.closest('.bookmark-item').querySelector('.bookmark-page-preview'); + const header = pageInput.closest(".bookmark-item").querySelector(".bookmark-page-preview"); if (header) { header.textContent = `Page ${bookmark.pageNumber}`; } @@ -541,25 +573,25 @@ document.addEventListener('DOMContentLoaded', function() { } function createButton(icon, className, title, clickHandler) { - const button = document.createElement('button'); - button.type = 'button'; + const button = document.createElement("button"); + button.type = "button"; button.className = `btn ${className} btn-bookmark-action`; button.innerHTML = `${icon}`; // Use Bootstrap tooltips - button.setAttribute('data-bs-toggle', 'tooltip'); - button.setAttribute('data-bs-placement', 'top'); + button.setAttribute("data-bs-toggle", "tooltip"); + button.setAttribute("data-bs-placement", "top"); button.title = title; - button.addEventListener('click', clickHandler); + button.addEventListener("click", clickHandler); return button; } function createChildrenContainer(bookmark, level) { - const childrenContainer = document.createElement('div'); - childrenContainer.className = 'bookmark-children'; + const childrenContainer = document.createElement("div"); + childrenContainer.className = "bookmark-children"; - bookmark.children.forEach(child => { + bookmark.children.forEach((child) => { childrenContainer.appendChild(createBookmarkElement(child, level + 1)); }); @@ -568,24 +600,24 @@ document.addEventListener('DOMContentLoaded', function() { // Update the add bookmark button appearance with clear visual cue addBookmarkBtn.innerHTML = 'add Add Top-level Bookmark'; - addBookmarkBtn.className = 'btn btn-primary btn-add-bookmark top-level'; + addBookmarkBtn.className = "btn btn-primary btn-add-bookmark top-level"; // Use Bootstrap tooltips - addBookmarkBtn.setAttribute('data-bs-toggle', 'tooltip'); - addBookmarkBtn.setAttribute('data-bs-placement', 'top'); - addBookmarkBtn.title = 'Add a new top-level bookmark'; + addBookmarkBtn.setAttribute("data-bs-toggle", "tooltip"); + addBookmarkBtn.setAttribute("data-bs-placement", "top"); + addBookmarkBtn.title = "Add a new top-level bookmark"; // Add icon to empty state button as well - const updateEmptyStateButton = function() { - const emptyStateBtn = document.querySelector('.btn-add-first-bookmark'); + const updateEmptyStateButton = function () { + const emptyStateBtn = document.querySelector(".btn-add-first-bookmark"); if (emptyStateBtn) { emptyStateBtn.innerHTML = 'add Add First Bookmark'; - emptyStateBtn.setAttribute('data-bs-toggle', 'tooltip'); - emptyStateBtn.setAttribute('data-bs-placement', 'top'); - emptyStateBtn.title = 'Add first bookmark'; + emptyStateBtn.setAttribute("data-bs-toggle", "tooltip"); + emptyStateBtn.setAttribute("data-bs-placement", "top"); + emptyStateBtn.title = "Add first bookmark"; // Initialize tooltips for the empty state button - if (typeof $ !== 'undefined') { + if (typeof $ !== "undefined") { $('[data-bs-toggle="tooltip"]').tooltip(); } } @@ -597,14 +629,147 @@ document.addEventListener('DOMContentLoaded', function() { updateEmptyStateButton(); } + // Add bookmarks Import/Export functionality + + // Import/Export button references + const importDefaultBtn = document.getElementById("importDefaultBtn"); + const exportDefaultBtn = document.getElementById("exportDefaultBtn"); + const importUploadJsonFileInput = document.getElementById("importUploadJsonFileInput"); + const importPasteFromClipboardBtn = document.getElementById("importPasteFromClipboardBtn"); + const exportDownloadJsonFileBtn = document.getElementById("exportDownloadJsonFileBtn"); + const exportCopyToClipboardBtn = document.getElementById("exportCopyToClipboardBtn"); + + // display import/export from/to clipboard buttons if supported + if (navigator.clipboard && navigator.clipboard.readText) { + importPasteFromClipboardBtn.parentElement.classList.remove("d-none"); + } + if (navigator.clipboard && navigator.clipboard.writeText) { + exportCopyToClipboardBtn.parentElement.classList.remove("d-none"); + } + + function flashButtonSuccess(button) { + const originalClass = button.className; + + button.classList.remove("btn-outline-primary"); + button.classList.add("btn-success", "success-flash"); + + setTimeout(() => { + button.className = originalClass; + }, 1000); + } + + // Import handlers + async function handleJsonFileInputChange(event) { + try { + await loadBookmarks(async function () { + return getBookmarkDataFromJson(event); + }); + flashButtonSuccess(importDefaultBtn); + } catch (error) { + console.error(`Failed to import bookmarks from JSON file: ${error.message}`); + } + } + + async function importBookmarksFromClipboard() { + console.log("Importing bookmarks from clipboard..."); + + try { + await loadBookmarks(async function () { + const clipboardText = await navigator.clipboard.readText(); + if (!clipboardText) return []; + + return JSON.parse(clipboardText); + }); + flashButtonSuccess(importDefaultBtn); + } catch (error) { + console.error(`Failed to import bookmarks from clipboard: ${error.message}`); + } + } + + async function handleBookmarksPasteFromClipboard(event) { + // do not override normal paste behavior on input fields + if (event.target.tagName.toLowerCase() === "input") return; + + try { + await loadBookmarks(async function () { + const clipboardText = event.clipboardData?.getData("text/plain"); + if (!clipboardText) return []; + + return JSON.parse(clipboardText); + }); + flashButtonSuccess(importDefaultBtn); + } catch (error) { + console.error(`Failed to import bookmarks from clipboard (ctrl-v): ${error.message}`); + } + } + + // Export handlers + async function exportBookmarksToJson() { + console.log("Exporting bookmarks to JSON..."); + + try { + const bookmarkData = bookmarkDataInput.value; + const blob = new Blob([bookmarkData], { type: "application/json" }); + const url = URL.createObjectURL(blob); + + const a = document.createElement("a"); + a.href = url; + a.download = "bookmarks.json"; + document.body.appendChild(a); + a.click(); + + document.body.removeChild(a); + URL.revokeObjectURL(url); + flashButtonSuccess(exportDefaultBtn); + } catch (error) { + console.error(`Failed to export bookmarks to JSON: ${error.message}`); + } + } + + async function exportBookmarksToClipboard() { + const bookmarkData = bookmarkDataInput.value; + try { + await navigator.clipboard.writeText(bookmarkData); + flashButtonSuccess(exportDefaultBtn); + } catch (error) { + console.error(`Failed to export bookmarks to clipboard: ${error.message}`); + } + } + + async function handleBookmarksCopyToClipboard(event) { + // do not override normal copy behavior on input fields + if (event.target.tagName.toLowerCase() === "input") return; + + const bookmarkData = bookmarkDataInput.value; + + try { + event.clipboardData.setData("text/plain", bookmarkData); + event.preventDefault(); + flashButtonSuccess(exportDefaultBtn); + } catch (error) { + console.error(`Failed to export bookmarks to clipboard (ctrl-c): ${error.message}`); + } + } + + // register event listeners for import/export functions + importUploadJsonFileInput.addEventListener("change", handleJsonFileInputChange); + importPasteFromClipboardBtn.addEventListener("click", importBookmarksFromClipboard); + exportDownloadJsonFileBtn.addEventListener("click", exportBookmarksToJson); + exportCopyToClipboardBtn.addEventListener("click", exportBookmarksToClipboard); + document.body.addEventListener("copy", handleBookmarksCopyToClipboard); + document.body.addEventListener("paste", handleBookmarksPasteFromClipboard); + // set default actions + // importDefaultBtn is already handled by being a label for the file input + exportDefaultBtn.addEventListener("click", exportBookmarksToJson); + // Listen for theme changes to update badge colors - const observer = new MutationObserver(function(mutations) { - mutations.forEach(function(mutation) { - if (mutation.attributeName === 'data-bs-theme') { - const isDarkMode = document.documentElement.getAttribute('data-bs-theme') === 'dark'; - document.querySelectorAll('.badge').forEach(badge => { - badge.classList.remove('bg-secondary', 'bg-info'); - badge.classList.add(isDarkMode ? 'bg-info' : 'bg-secondary'); + const observer = new MutationObserver(function (mutations) { + mutations.forEach(function (mutation) { + if (mutation.attributeName === "data-bs-theme") { + const isDarkMode = document.documentElement.getAttribute("data-bs-theme") === "dark"; + document.querySelectorAll(".badge").forEach((badge) => { + badge.classList.remove("bg-secondary", "bg-info"); + badge.classList.add(isDarkMode ? "bg-info" : "bg-secondary"); }); } }); @@ -613,26 +778,26 @@ document.addEventListener('DOMContentLoaded', function() { observer.observe(document.documentElement, { attributes: true }); // Add visual enhancement to clearly show the top-level/child relationship - document.addEventListener('mouseover', function(e) { + document.addEventListener("mouseover", function (e) { // When hovering over add buttons, highlight their relationship targets - const button = e.target.closest('.btn-add-child, .btn-add-sibling'); + const button = e.target.closest(".btn-add-child, .btn-add-sibling"); if (button) { - if (button.classList.contains('btn-add-child')) { + if (button.classList.contains("btn-add-child")) { // Highlight parent-child relationship - const bookmarkItem = button.closest('.bookmark-item'); + const bookmarkItem = button.closest(".bookmark-item"); if (bookmarkItem) { - bookmarkItem.style.boxShadow = '0 0 0 2px var(--btn-add-child-border, #198754)'; + bookmarkItem.style.boxShadow = "0 0 0 2px var(--btn-add-child-border, #198754)"; } - } else if (button.classList.contains('btn-add-sibling')) { + } else if (button.classList.contains("btn-add-sibling")) { // Highlight sibling relationship - const bookmarkItem = button.closest('.bookmark-item'); + const bookmarkItem = button.closest(".bookmark-item"); if (bookmarkItem) { // Find siblings const parent = bookmarkItem.parentElement; - const siblings = parent.querySelectorAll(':scope > .bookmark-item'); - siblings.forEach(sibling => { + const siblings = parent.querySelectorAll(":scope > .bookmark-item"); + siblings.forEach((sibling) => { if (sibling !== bookmarkItem) { - sibling.style.boxShadow = '0 0 0 2px var(--btn-add-sibling-border, #0d6efd)'; + sibling.style.boxShadow = "0 0 0 2px var(--btn-add-sibling-border, #0d6efd)"; } }); } @@ -640,13 +805,13 @@ document.addEventListener('DOMContentLoaded', function() { } }); - document.addEventListener('mouseout', function(e) { + document.addEventListener("mouseout", function (e) { // Remove highlights when not hovering - const button = e.target.closest('.btn-add-child, .btn-add-sibling'); + const button = e.target.closest(".btn-add-child, .btn-add-sibling"); if (button) { // Remove all highlights - document.querySelectorAll('.bookmark-item').forEach(item => { - item.style.boxShadow = ''; + document.querySelectorAll(".bookmark-item").forEach((item) => { + item.style.boxShadow = ""; }); } }); diff --git a/app/core/src/main/resources/templates/edit-table-of-contents.html b/app/core/src/main/resources/templates/edit-table-of-contents.html index 99ab02c1d..21a7204e7 100644 --- a/app/core/src/main/resources/templates/edit-table-of-contents.html +++ b/app/core/src/main/resources/templates/edit-table-of-contents.html @@ -1,75 +1,169 @@ - - - - - - + + + + + - -
-
- -

-
-
-
-
- bookmark_add - + +
+
+ +

+
+
+
+
+ bookmark_add + +
+
+
+
+ +
+ + + +
+ +
+
+

+ +
+ +
+ +
+ +
+ +
+ + +
+ +
+ + + +
+ + +
+ + + +
+
+
+ + + +
+ +

+ +

+
+

+

+

+
+ +
+ +
+ + +
-
-
-
- -
- - - -
- -
-
-

- -
- -
- -
- -
- - - -
- -

- -

-
-

-

-

-
- -
- -
+
- -
- - + - + \ No newline at end of file