diff --git a/.github/actions/build-server/action.yml b/.github/actions/build-server/action.yml index faa3c0752..b92b3875f 100644 --- a/.github/actions/build-server/action.yml +++ b/.github/actions/build-server/action.yml @@ -12,7 +12,7 @@ runs: - name: Set up node & dependencies uses: actions/setup-node@v6 with: - node-version: 22 + node-version: 24 cache: "pnpm" - name: Install dependencies shell: bash diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml index 62e04d48d..503e13909 100644 --- a/.github/workflows/deploy-docs.yml +++ b/.github/workflows/deploy-docs.yml @@ -74,7 +74,7 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v6 with: - node-version: '22' + node-version: '24' cache: 'pnpm' # Install Node.js dependencies for the TypeScript script diff --git a/.github/workflows/dev.yml b/.github/workflows/dev.yml index ec4aeda0e..f9174fb42 100644 --- a/.github/workflows/dev.yml +++ b/.github/workflows/dev.yml @@ -30,7 +30,7 @@ jobs: - name: Set up node & dependencies uses: actions/setup-node@v6 with: - node-version: 22 + node-version: 24 cache: "pnpm" - run: pnpm install --frozen-lockfile diff --git a/.github/workflows/main-docker.yml b/.github/workflows/main-docker.yml index 407272a99..f020a04a1 100644 --- a/.github/workflows/main-docker.yml +++ b/.github/workflows/main-docker.yml @@ -46,7 +46,7 @@ jobs: - name: Set up node & dependencies uses: actions/setup-node@v6 with: - node-version: 22 + node-version: 24 cache: "pnpm" - name: Install npm dependencies @@ -86,12 +86,12 @@ jobs: - name: Upload Playwright trace if: failure() - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v5 with: name: Playwright trace (${{ matrix.dockerfile }}) path: test-output/playwright/output - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@v5 if: ${{ !cancelled() }} with: name: Playwright report (${{ matrix.dockerfile }}) @@ -146,7 +146,7 @@ jobs: - name: Set up node & dependencies uses: actions/setup-node@v6 with: - node-version: 22 + node-version: 24 cache: 'pnpm' - name: Install dependencies @@ -209,7 +209,7 @@ jobs: touch "/tmp/digests/${digest#sha256:}" - name: Upload digest - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v5 with: name: digests-${{ env.PLATFORM_PAIR }}-${{ matrix.dockerfile }} path: /tmp/digests/* @@ -223,7 +223,7 @@ jobs: - build steps: - name: Download digests - uses: actions/download-artifact@v5 + uses: actions/download-artifact@v6 with: path: /tmp/digests pattern: digests-* diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 0d0205f32..ddce68d42 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -52,7 +52,7 @@ jobs: - name: Set up node & dependencies uses: actions/setup-node@v6 with: - node-version: 22 + node-version: 24 cache: 'pnpm' - name: Install dependencies run: pnpm install --frozen-lockfile @@ -89,7 +89,7 @@ jobs: name: Nightly Build - name: Publish artifacts - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v5 if: ${{ github.event_name == 'pull_request' }} with: name: TriliumNotes ${{ matrix.os.name }} ${{ matrix.arch }} diff --git a/.github/workflows/playwright.yml b/.github/workflows/playwright.yml index 886b46d61..a33d24283 100644 --- a/.github/workflows/playwright.yml +++ b/.github/workflows/playwright.yml @@ -24,7 +24,7 @@ jobs: - uses: pnpm/action-setup@v4 - uses: actions/setup-node@v6 with: - node-version: 22 + node-version: 24 cache: 'pnpm' - name: Install dependencies @@ -35,7 +35,7 @@ jobs: - name: Upload test report if: failure() - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v5 with: name: e2e report path: apps/server-e2e/test-output diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3ee30040d..3d48cb80d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -50,7 +50,7 @@ jobs: - name: Set up node & dependencies uses: actions/setup-node@v6 with: - node-version: 22 + node-version: 24 cache: 'pnpm' - name: Install dependencies run: pnpm install --frozen-lockfile @@ -73,7 +73,7 @@ jobs: GPG_SIGNING_KEY: ${{ secrets.GPG_SIGN_KEY }} - name: Upload the artifact - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v5 with: name: release-desktop-${{ matrix.os.name }}-${{ matrix.arch }} path: apps/desktop/upload/*.* @@ -100,7 +100,7 @@ jobs: arch: ${{ matrix.arch }} - name: Upload the artifact - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v5 with: name: release-server-linux-${{ matrix.arch }} path: upload/*.* @@ -120,7 +120,7 @@ jobs: docs/Release Notes - name: Download all artifacts - uses: actions/download-artifact@v5 + uses: actions/download-artifact@v6 with: merge-multiple: true pattern: release-* diff --git a/.github/workflows/website.yml b/.github/workflows/website.yml index fe94c987a..7a87cc192 100644 --- a/.github/workflows/website.yml +++ b/.github/workflows/website.yml @@ -30,7 +30,7 @@ jobs: - name: Set up node & dependencies uses: actions/setup-node@v6 with: - node-version: 22 + node-version: 24 cache: "pnpm" - name: Install dependencies diff --git a/_regroup/package.json b/_regroup/package.json index 4cec178aa..0b2a759a9 100644 --- a/_regroup/package.json +++ b/_regroup/package.json @@ -37,9 +37,9 @@ "devDependencies": { "@playwright/test": "1.56.1", "@stylistic/eslint-plugin": "5.5.0", - "@types/express": "5.0.3", - "@types/node": "22.18.12", - "@types/yargs": "17.0.33", + "@types/express": "5.0.5", + "@types/node": "24.9.1", + "@types/yargs": "17.0.34", "@vitest/coverage-v8": "3.2.4", "eslint": "9.38.0", "eslint-plugin-simple-import-sort": "12.1.1", diff --git a/apps/client/package.json b/apps/client/package.json index 71957e495..6bc7f10f2 100644 --- a/apps/client/package.json +++ b/apps/client/package.json @@ -54,12 +54,12 @@ "leaflet-gpx": "2.2.0", "mark.js": "8.11.1", "marked": "16.4.1", - "mermaid": "11.12.0", - "mind-elixir": "5.3.3", + "mermaid": "11.12.1", + "mind-elixir": "5.3.4", "normalize.css": "8.0.1", "panzoom": "9.4.3", "preact": "10.27.2", - "react-i18next": "16.1.2", + "react-i18next": "16.2.1", "reveal.js": "5.2.1", "svg-pan-zoom": "3.6.2", "tabulator-tables": "6.3.1", @@ -74,9 +74,9 @@ "@types/leaflet-gpx": "1.3.8", "@types/mark.js": "8.11.12", "@types/reveal.js": "5.2.1", - "@types/tabulator-tables": "6.2.11", + "@types/tabulator-tables": "6.3.0", "copy-webpack-plugin": "13.0.1", - "happy-dom": "20.0.7", + "happy-dom": "20.0.8", "script-loader": "0.7.2", "vite-plugin-static-copy": "3.1.4" } diff --git a/apps/client/src/components/app_context.ts b/apps/client/src/components/app_context.ts index ce33d1447..5727032e6 100644 --- a/apps/client/src/components/app_context.ts +++ b/apps/client/src/components/app_context.ts @@ -218,12 +218,12 @@ export type CommandMappings = { /** Works only in the electron context menu. */ replaceMisspelling: CommandData; - importMarkdownInline: CommandData; showPasswordNotSet: CommandData; showProtectedSessionPasswordDialog: CommandData; showUploadAttachmentsDialog: CommandData & { noteId: string }; showIncludeNoteDialog: CommandData & { textTypeWidget: EditableTextTypeWidget }; showAddLinkDialog: CommandData & { textTypeWidget: EditableTextTypeWidget, text: string }; + showPasteMarkdownDialog: CommandData & { textTypeWidget: EditableTextTypeWidget }; closeProtectedSessionPasswordDialog: CommandData; copyImageReferenceToClipboard: CommandData; copyImageToClipboard: CommandData; diff --git a/apps/client/src/print.tsx b/apps/client/src/print.tsx index de11d581a..3dbdf1de0 100644 --- a/apps/client/src/print.tsx +++ b/apps/client/src/print.tsx @@ -56,7 +56,20 @@ function SingleNoteRenderer({ note, onReady }: RendererProps) { await import("@triliumnext/ckeditor5/src/theme/ck-content.css"); } const { $renderedContent } = await content_renderer.getRenderedContent(note, { noChildrenList: true }); - containerRef.current?.replaceChildren(...$renderedContent); + const container = containerRef.current!; + container.replaceChildren(...$renderedContent); + + // Wait for all images to load. + const images = Array.from(container.querySelectorAll("img")); + await Promise.all( + images.map(img => { + if (img.complete) return Promise.resolve(); + return new Promise(resolve => { + img.addEventListener("load", () => resolve(), { once: true }); + img.addEventListener("error", () => resolve(), { once: true }); + }); + }) + ); } load().then(() => requestAnimationFrame(onReady)) diff --git a/apps/client/src/services/glob.ts b/apps/client/src/services/glob.ts index 48d0d29a7..44ce64309 100644 --- a/apps/client/src/services/glob.ts +++ b/apps/client/src/services/glob.ts @@ -20,9 +20,6 @@ function setupGlobs() { window.glob.froca = froca; window.glob.treeCache = froca; // compatibility for CKEditor builds for a while - // for CKEditor integration (button on block toolbar) - window.glob.importMarkdownInline = async () => appContext.triggerCommand("importMarkdownInline"); - window.onerror = function (msg, url, lineNo, columnNo, error) { const string = String(msg).toLowerCase(); diff --git a/apps/client/src/stylesheets/style.css b/apps/client/src/stylesheets/style.css index 7f67e4827..1f4152792 100644 --- a/apps/client/src/stylesheets/style.css +++ b/apps/client/src/stylesheets/style.css @@ -2034,9 +2034,9 @@ body.zen #right-pane, body.zen #mobile-sidebar-wrapper, body.zen .tab-row-container, body.zen .tab-row-widget, -body.zen .ribbon-container:not(:has(.classic-toolbar-widget.visible)), -body.zen .ribbon-container:has(.classic-toolbar-widget.visible) .ribbon-top-row, -body.zen .ribbon-container .ribbon-body:not(:has(.classic-toolbar-widget.visible)), +body.zen .ribbon-container:not(:has(.classic-toolbar-widget)), +body.zen .ribbon-container:has(.classic-toolbar-widget) .ribbon-top-row, +body.zen .ribbon-container .ribbon-body:not(:has(.classic-toolbar-widget)), body.zen .note-icon-widget, body.zen .title-row .icon-action, body.zen .floating-buttons-children > *:not(.bx-edit-alt), diff --git a/apps/client/src/translations/ar/translation.json b/apps/client/src/translations/ar/translation.json index 2e11116fb..b04472d7c 100644 --- a/apps/client/src/translations/ar/translation.json +++ b/apps/client/src/translations/ar/translation.json @@ -12,6 +12,9 @@ "toast": { "critical-error": { "title": "خطأ فادح" + }, + "widget-error": { + "title": "فشل في البدء بعنصر الواجهة" } }, "add_link": { @@ -26,7 +29,8 @@ "edit_branch_prefix": "تعديل بادئة الفرع", "prefix": "البادئة: ", "save": "حفظ", - "help_on_tree_prefix": "مساعدة حول بادئة الشجرة" + "help_on_tree_prefix": "مساعدة حول بادئة الشجرة", + "branch_prefix_saved": "تم حفظ بادئة الفرع." }, "bulk_actions": { "bulk_actions": "اجراءات جماعية", @@ -83,7 +87,8 @@ "workspace_calendar_root": "‎تحديد جذر التقويم لكل مساحة عمل", "hide_highlight_widget": "اخفاء عنصر واجهة قائمة التمييزات", "is_owned_by_note": "تخص الملاحظة", - "and_more": "... و {{count}}مرات اكثر." + "and_more": "... و {{count}}مرات اكثر.", + "related_notes_title": "ملاحظات اخرى بنفس التسمية" }, "rename_label": { "to": "الى", @@ -127,7 +132,9 @@ "delete_attachment": "حذف المرفق", "upload_new_revision": "رفع مراجعة جديدة", "copy_link_to_clipboard": "نسخ الرابط الى الحافظة", - "convert_attachment_into_note": "تحويل المرفق الى ملاحظة" + "convert_attachment_into_note": "تحويل المرفق الى ملاحظة", + "delete_success": "تم حذف المرفق \"{{title}}\" .", + "enter_new_name": "ادخل اسم مرفق جديد" }, "calendar": { "week": "أسبوع", @@ -259,7 +266,8 @@ "note_paths": { "search": "بحث", "archived": "مؤرشف", - "title": "مسارات الملاحظة" + "title": "مسارات الملاحظة", + "clone_button": "جار نسخ الملاحظة الى مكان جديد..." }, "script_executor": { "query": "استعلام", @@ -372,7 +380,8 @@ "export_note_title": "تصدير الملاحظة", "export_status": "حالة التصدير", "export_finished_successfully": "اكتمل التصدير بنجاح.", - "export_in_progress": "جار التصدير: {{progressCount}}" + "export_in_progress": "جار التصدير: {{progressCount}}", + "choose_export_type": "اختر نوع التصدير اولا من فضلك" }, "help": { "troubleshooting": "أستكشاف الاخطاء واصلاحها", @@ -402,7 +411,10 @@ "movingCloningNotes": "نقل/ استنساخ الملاحظات", "deleteNotes": "حذف الملاحظة/ الشجرة الفرعية", "collapseWholeTree": "طي شجرة الملاحظة باكملها", - "followLink": "اتبع تلرابط تحت المؤشر" + "followLink": "اتبع تلرابط تحت المؤشر", + "onlyInDesktop": "في سطح المكتب فقط(Electron build)", + "createEditLink": "انشاء/ تحرير رابط خارجي", + "quickSearch": "الانتقال الى مربع البحث السريع" }, "import": { "options": "خيارات", @@ -465,7 +477,13 @@ "delete_all_button": "حذف كل المراجعات", "settings": "اعدادات مراجعة الملاحظة", "diff_not_available": "المقارنة غير متوفرة.", - "help_title": "مساعدة حول مراجعات الملاحظة" + "help_title": "مساعدة حول مراجعات الملاحظة", + "diff_off_hint": "انقر لعرض محتويات الملاحظة", + "revisions_deleted": "تم حذف جميع نسخ المراجعات للملاحظة.", + "revision_restored": "تم استعادة نسخ المراجعة للملاحظة.", + "revision_deleted": "تم حذف مراجعة الملاحظة.", + "snapshot_interval": "فاصل زمني لحفظ لقطات اصدارات المراجعة: {{seconds}}", + "maximum_revisions": "حد عدد لقطات اصدارات الملاحظة: {{number}}" }, "sort_child_notes": { "title": "عنوان", @@ -479,13 +497,15 @@ "sorting_direction": "اتجاه الترتيب", "natural_sort": "الترتيب الطبيعي", "natural_sort_language": "لغات الترتيب الطبيعي", - "sort_children_by": "ترتيب العناصر الفرعية حسب..." + "sort_children_by": "ترتيب العناصر الفرعية حسب...", + "sort_folders_at_top": "ترتيب المجلدات في الاعلى" }, "recent_changes": { "undelete_link": "الغاء الحذف", "title": "التغيرات الاخيرة", "no_changes_message": "لايوجد تغيير لحد الان...", - "erase_notes_button": "مسح الملاحظات المحذوفة الان" + "erase_notes_button": "مسح الملاحظات المحذوفة الان", + "deleted_notes_message": "تم حذف الملاحظات نهائيا." }, "edited_notes": { "deleted": "(حذف)", @@ -705,7 +725,9 @@ "default_token_name": "رمز جديد", "rename_token_title": "اعادة تسمية الرمز", "rename_token": "اعادة تسمية هذا الرمز", - "create_token": "انشاء رمز PEAPI جديد" + "create_token": "انشاء رمز PEAPI جديد", + "new_token_title": "رمز ETAPI جديد", + "token_created_title": "انشاء رمز ETAPI" }, "password": { "heading": "كلمة المرور", @@ -811,7 +833,8 @@ "help_on_links": "مساعدة حول الارتباطات التشعبية", "notes_to_clone": "ملاحظات للنسخ", "target_parent_note": "الملاحظة الاصلية الهدف", - "clone_to_selected_note": "استنساخ الى الملاحظة المحددة" + "clone_to_selected_note": "استنساخ الى الملاحظة المحددة", + "no_path_to_clone_to": "لايوجد مسار لنسخ المحتوى الية." }, "table_of_contents": { "unit": "عناوين", @@ -1029,7 +1052,8 @@ }, "delete_note": { "delete_note": "حذف الملاحظة", - "delete_matched_notes": "حف الملاحظات المطابقة" + "delete_matched_notes": "حف الملاحظات المطابقة", + "delete_matched_notes_description": "سوف يؤدي هذا الى حذف الملاحظات المطابقة." }, "rename_note": { "rename_note": "اعادة تسمية الملاحظة", @@ -1312,7 +1336,8 @@ "notes_to_move": "الملاحظات المراد نقلها", "target_parent_note": "ملاحظة الاصل الهدف", "dialog_title": "انقل الملاحظات الى...", - "move_button": "نقل الىالملاحظة المحددة" + "move_button": "نقل الىالملاحظة المحددة", + "error_no_path": "لايوجد مسار لنقل العنصر الية." }, "delete_revisions": { "delete_note_revisions": "حذف مراجعات الملاحظة" @@ -1363,7 +1388,8 @@ "save_attributes": "حفظ السمات ", "add_a_new_attribute": "اضافة سمة جديدة", "add_new_label_definition": "اضافة تعريف لتسمية جديدة", - "add_new_relation_definition": "اضافة تعريف لعلاقة جديدة" + "add_new_relation_definition": "اضافة تعريف لعلاقة جديدة", + "add_new_relation": "اضافة علاقة جديدة " }, "zen_mode": { "button_exit": "الخروج من وضع Zen" @@ -1434,5 +1460,8 @@ }, "png_export_button": { "button_title": "تصدير المخطط كملف PNG" + }, + "protected_session_status": { + "inactive": "انقر للدخول الى جلسة محمية" } } diff --git a/apps/client/src/translations/de/translation.json b/apps/client/src/translations/de/translation.json index ca0e40d69..e6ac98813 100644 --- a/apps/client/src/translations/de/translation.json +++ b/apps/client/src/translations/de/translation.json @@ -4,7 +4,7 @@ "homepage": "Startseite:", "app_version": "App-Version:", "db_version": "DB-Version:", - "sync_version": "Synch-version:", + "sync_version": "Sync-Version:", "build_date": "Build-Datum:", "build_revision": "Build-Revision:", "data_directory": "Datenverzeichnis:" @@ -184,7 +184,8 @@ }, "import-status": "Importstatus", "in-progress": "Import läuft: {{progress}}", - "successful": "Import erfolgreich abgeschlossen." + "successful": "Import erfolgreich abgeschlossen.", + "importZipRecommendation": "Beim Import einer ZIP-Datei wird die Notizhierarchie aus der Ordnerstruktur im Archiv übernommen." }, "include_note": { "dialog_title": "Notiz beifügen", @@ -647,7 +648,8 @@ "logout": "Abmelden", "show-cheatsheet": "Cheatsheet anzeigen", "toggle-zen-mode": "Zen Modus", - "new-version-available": "Neues Update verfügbar" + "new-version-available": "Neues Update verfügbar", + "download-update": "Version {{latestVersion}} herunterladen" }, "sync_status": { "unknown": "

Der Synchronisations-Status wird bekannt, sobald der nächste Synchronisierungsversuch gestartet wird.

Klicke, um eine Synchronisierung jetzt auszulösen.

", @@ -989,7 +991,7 @@ "enter_password_instruction": "Um die geschützte Notiz anzuzeigen, musst du dein Passwort eingeben:", "start_session_button": "Starte eine geschützte Sitzung Eingabetaste", "started": "Geschützte Sitzung gestartet.", - "wrong_password": "Passwort flasch.", + "wrong_password": "Passwort falsch.", "protecting-finished-successfully": "Geschützt erfolgreich beendet.", "unprotecting-finished-successfully": "Ungeschützt erfolgreich beendet.", "protecting-in-progress": "Schützen läuft: {{count}}", @@ -1521,7 +1523,9 @@ "window-on-top": "Dieses Fenster immer oben halten" }, "note_detail": { - "could_not_find_typewidget": "Konnte typeWidget für Typ ‚{{type}}‘ nicht finden" + "could_not_find_typewidget": "Konnte typeWidget für Typ ‚{{type}}‘ nicht finden", + "printing": "Druckvorgang läuft…", + "printing_pdf": "PDF-Export läuft…" }, "note_title": { "placeholder": "Titel der Notiz hier eingeben…" @@ -1654,7 +1658,7 @@ "add-term-to-dictionary": "Begriff \"{{term}}\" zum Wörterbuch hinzufügen", "cut": "Ausschneiden", "copy": "Kopieren", - "copy-link": "Link opieren", + "copy-link": "Link kopieren", "paste": "Einfügen", "paste-as-plain-text": "Als unformatierten Text einfügen", "search_online": "Suche nach \"{{term}}\" mit {{searchEngine}} starten" @@ -2079,6 +2083,7 @@ }, "presentation_view": { "edit-slide": "Folie bearbeiten", - "start-presentation": "Präsentation starten" + "start-presentation": "Präsentation starten", + "slide-overview": "Übersicht der Folien ein-/ausblenden" } } diff --git a/apps/client/src/translations/hi/translation.json b/apps/client/src/translations/hi/translation.json new file mode 100644 index 000000000..2d1c3b9f1 --- /dev/null +++ b/apps/client/src/translations/hi/translation.json @@ -0,0 +1,5 @@ +{ + "about": { + "title": "ट्रिलियम नोट्स के बारें में" + } +} diff --git a/apps/client/src/translations/hu/translation.json b/apps/client/src/translations/hu/translation.json index 0967ef424..042fbb281 100644 --- a/apps/client/src/translations/hu/translation.json +++ b/apps/client/src/translations/hu/translation.json @@ -1 +1,50 @@ -{} +{ + "about": { + "title": "A Trilium Notes-ról", + "homepage": "Kezdőlap:", + "app_version": "Alkalmazás verziója:", + "db_version": "Adatbázis verzió:", + "sync_version": "Verzió szinkronizálás :", + "build_revision": "Build revízió:", + "data_directory": "Adatkönyvtár:", + "build_date": "Build dátum:" + }, + "toast": { + "critical-error": { + "title": "Kritikus hiba", + "message": "Kritikus hiba történt, amely megakadályozza a kliensalkalmazás indítását:\n\n{{message}}\n\nEzt valószínűleg egy váratlan szkripthiba okozza. Próbálja meg biztonságos módban elindítani az alkalmazást, és hárítsa el a problémát." + }, + "widget-error": { + "title": "Nem sikerült inicializálni egy widgetet", + "message-custom": "A(z) \"{{id}}\" azonosítójú, \"{{title}}\" című jegyzetből származó egyéni widget inicializálása sikertelen volt a következő ok miatt:\n\n{{message}}", + "message-unknown": "Ismeretlen widget inicializálása sikertelen volt a következő ok miatt:\n\n{{message}}" + }, + "bundle-error": { + "title": "Nem sikerült betölteni az egyéni szkriptet", + "message": "A(z) \"{{id}}\" azonosítójú, \"{{title}}\" című jegyzetből származó szkript nem hajtható végre a következő ok miatt:\n\n{{message}}" + } + }, + "add_link": { + "add_link": "Link hozzáadása", + "help_on_links": "Segítség a linkekhez", + "note": "Jegyzet", + "search_note": "név szerinti jegyzetkeresés", + "link_title_mirrors": "A link cím tükrözi a jegyzet aktuális címét", + "link_title_arbitrary": "link cím önkényesen módosítható", + "link_title": "Link cím", + "button_add_link": "Link hozzáadása" + }, + "branch_prefix": { + "edit_branch_prefix": "Az elágazás előtagjának szerkesztése", + "help_on_tree_prefix": "Segítség a fa előtagján", + "prefix": "Az előtag: ", + "save": "Mentés" + }, + "bulk_actions": { + "bulk_actions": "Tömeges akciók", + "affected_notes": "Érintett jegyzetek", + "labels": "Címkék", + "relations": "Kapcsolatok", + "notes": "Jegyzetek" + } +} diff --git a/apps/website/public/translations/ca/translation.json b/apps/client/src/translations/mr/translation.json similarity index 100% rename from apps/website/public/translations/ca/translation.json rename to apps/client/src/translations/mr/translation.json diff --git a/apps/client/src/translations/nl/translation.json b/apps/client/src/translations/nl/translation.json index d07df69e5..de5cfb6c7 100644 --- a/apps/client/src/translations/nl/translation.json +++ b/apps/client/src/translations/nl/translation.json @@ -13,6 +13,13 @@ "critical-error": { "title": "Kritische Error", "message": "Een kritieke fout heeft plaatsgevonden waardoor de cliënt zich aanmeldt vanaf het begin:\n\n84X\n\nDit is waarschijnlijk veroorzaakt door een script dat op een onverwachte manier faalt. Probeer de sollicitatie in veilige modus te starten en de kwestie aan te spreken." + }, + "widget-error": { + "title": "Starten widget mislukt", + "message-unknown": "Onbekende widget kan niet gestart worden omdat:\n\n{{message}}" + }, + "bundle-error": { + "title": "Custom script laden mislukt" } }, "add_link": { diff --git a/apps/client/src/translations/ru/translation.json b/apps/client/src/translations/ru/translation.json index 2dc068850..eeee4b28f 100644 --- a/apps/client/src/translations/ru/translation.json +++ b/apps/client/src/translations/ru/translation.json @@ -320,7 +320,8 @@ "explodeArchivesTooltip": "Если этот флажок установлен, Trilium будет читать файлы .zip, .enex и .opml и создавать заметки из файлов внутри этих архивов. Если флажок не установлен, Trilium будет прикреплять сами архивы к заметке.", "explodeArchives": "Прочитать содержимое архивов .zip, .enex и .opml.", "shrinkImagesTooltip": "

Если этот параметр включен, Trilium попытается уменьшить размер импортируемых изображений путём масштабирования и оптимизации, что может повлиять на воспринимаемое качество изображения. Если этот параметр не установлен, изображения будут импортированы без изменений.

Это не относится к импорту файлов .zip с метаданными, поскольку предполагается, что эти файлы уже оптимизированы.

", - "codeImportedAsCode": "Импортировать распознанные файлы кода (например, .json) в виде заметок типа \"код\", если это неясно из метаданных" + "codeImportedAsCode": "Импортировать распознанные файлы кода (например, .json) в виде заметок типа \"код\", если это неясно из метаданных", + "importZipRecommendation": "При импорте ZIP файла иерархия заметок будет отражена в структуре папок внутри архива." }, "markdown_import": { "dialog_title": "Импорт Markdown", @@ -980,7 +981,8 @@ "open_sql_console_history": "Открыть историю консоли SQL", "show_shared_notes_subtree": "Поддерево общедоступных заметок", "switch_to_mobile_version": "Перейти на мобильную версию", - "switch_to_desktop_version": "Переключиться на версию для ПК" + "switch_to_desktop_version": "Переключиться на версию для ПК", + "new-version-available": "Доступно обновление" }, "zpetne_odkazy": { "backlink": "{{count}} ссылки", diff --git a/apps/client/src/types.d.ts b/apps/client/src/types.d.ts index c5a93bd0a..d283983b4 100644 --- a/apps/client/src/types.d.ts +++ b/apps/client/src/types.d.ts @@ -26,7 +26,6 @@ interface CustomGlobals { appContext: AppContext; froca: Froca; treeCache: Froca; - importMarkdownInline: () => Promise; SEARCH_HELP_TEXT: string; activeDialog: JQuery | null; componentId: string; diff --git a/apps/client/src/widgets/dialogs/markdown_import.tsx b/apps/client/src/widgets/dialogs/markdown_import.tsx index d14d6fb11..43b20d378 100644 --- a/apps/client/src/widgets/dialogs/markdown_import.tsx +++ b/apps/client/src/widgets/dialogs/markdown_import.tsx @@ -7,6 +7,7 @@ import utils from "../../services/utils"; import Modal from "../react/Modal"; import Button from "../react/Button"; import { useTriliumEvent } from "../react/hooks"; +import EditableTextTypeWidget from "../type_widgets/editable_text"; interface RenderMarkdownResponse { htmlContent: string; @@ -14,39 +15,34 @@ interface RenderMarkdownResponse { export default function MarkdownImportDialog() { const markdownImportTextArea = useRef(null); + const [textTypeWidget, setTextTypeWidget] = useState(); const [ text, setText ] = useState(""); const [ shown, setShown ] = useState(false); - const triggerImport = useCallback(() => { - if (appContext.tabManager.getActiveContextNoteType() !== "text") { - return; - } - + useTriliumEvent("showPasteMarkdownDialog", ({ textTypeWidget }) => { + setTextTypeWidget(textTypeWidget); if (utils.isElectron()) { const { clipboard } = utils.dynamicRequire("electron"); const text = clipboard.readText(); - convertMarkdownToHtml(text); + convertMarkdownToHtml(text, textTypeWidget); } else { setShown(true); } - }, []); - - useTriliumEvent("importMarkdownInline", triggerImport); - useTriliumEvent("pasteMarkdownIntoText", triggerImport); - - async function sendForm() { - await convertMarkdownToHtml(text); - setText(""); - setShown(false); - } + }); return ( } + footer={