From 6276e182b20b623ddc3c41f040d9fba6710f20aa Mon Sep 17 00:00:00 2001
From: Konstantinos Kaloutas
Date: Mon, 31 Jul 2023 13:05:20 +0300
Subject: [PATCH 01/63] fix: setting default sidebar pages on config #9950
---
src/main/frontend/components/container.cljs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/main/frontend/components/container.cljs b/src/main/frontend/components/container.cljs
index 126e7d8d2b92..725a1302c27c 100644
--- a/src/main/frontend/components/container.cljs
+++ b/src/main/frontend/components/container.cljs
@@ -587,7 +587,7 @@
(let [page (util/safe-page-name-sanity-lc page)
[db-id block-type] (if (= page "contents")
["contents" :contents]
- [page :page])]
+ [(:db/id (db/pull [:block/name page])) :page])]
(state/sidebar-add-block! current-repo db-id block-type)))
(reset! sidebar-inited? true))))
(when (state/mobile?)
From f2d1de9e9988913dd77193d8005e8bf733977d94 Mon Sep 17 00:00:00 2001
From: einmeterhecht <119974780+einmeterhecht@users.noreply.github.com>
Date: Fri, 28 Jul 2023 17:40:01 +0200
Subject: [PATCH 02/63] Translate all missing entries to german
---
src/resources/dicts/de.edn | 369 ++++++++++++++++++++++++++++++++++---
1 file changed, 347 insertions(+), 22 deletions(-)
diff --git a/src/resources/dicts/de.edn b/src/resources/dicts/de.edn
index 50abf8081e74..a8f0f4b52c19 100644
--- a/src/resources/dicts/de.edn
+++ b/src/resources/dicts/de.edn
@@ -12,6 +12,8 @@
:discourse-title "Unser Forum!"
:download "Herunterladen"
:export "Exportieren"
+ :export-copied-to-clipboard "In die Zwischenablage kopiert!"
+ :export-copy-to-clipboard "Kopieren"
:export-edn "Als EDN exportieren"
:export-graph "Graph exportieren"
:export-json "Als JSON exportieren"
@@ -20,21 +22,28 @@
:export-page "Seite exportieren"
:export-public-pages "Öffentliche Seiten exportieren"
:export-roam-json "Als Roam JSON exportieren"
+ :export-save-to-file "Als Datei speichern"
+ :export-transparent-background "Transparenter Hintergrund"
:graph "Graph"
:graph-search "Graph durchsuchen"
:heading "Überschrift {1}"
:highlight "Hervorhebung"
+ :home "Startseite"
:host "Host"
:import "Importieren"
:importing "Importiere"
:italics "Kursiv"
:join-community "Treten Sie der Community bei"
:language "Sprache"
+ :loading "Lädt..."
:loading-files "Dateien laden"
:login "Einloggen"
:logout "Ausloggen"
+ :logout-user "Ausloggen ({1})"
:more "Mehr"
:new-graph "Neuen Graphen hinzufügen"
+ :new-page "Neue Seite:"
+ :new-whiteboard "Neues Whiteboard:"
:open-a-directory "Öffne ein lokales Verzeichnis"
:open-new-window "Neues Fenster"
:page-search "In der aktuellen Seite suchen"
@@ -48,6 +57,7 @@
:relaunch-confirm-to-work "Sie sollten die App neu starten, damit sie funktioniert. Möchten Sie sie jetzt neu starten?"
:remove-background "Hintergrund entfernen"
:remove-heading "Überschrift entfernen"
+ :remove-orphaned-pages "Nie referenzierte Seiten löschen?"
:save "Speichern"
:search "Suchen oder Seite erstellen"
:settings "Einstellungen"
@@ -58,8 +68,11 @@
:sync-from-local-files "Aktualisieren"
:sync-from-local-files-detail "Änderungen aus lokalen Dateien importieren"
:themes "Themen"
+ :toggle-theme "Thema umschalten"
:type "Typ"
:untitled "Ohne Titel"
+ :whiteboard "Whiteboard"
+ :whiteboards "Whiteboards"
:yes "Ja"
:accessibility/skip-to-main-content "Zum Hauptinhalt springen"
@@ -73,6 +86,29 @@
:asset/show-in-folder "Bild im Ordner anzeigen"
:block/name "Seitenname"
+
+ :bug-report/main-title "Bug melden"
+ :bug-report/clipboard-inspector-title "Untersuchung der Zwischenablage"
+ :bug-report/main-desc "Können Sie uns mit einer Fehlermeldung helfen? Wir werden es schnellstmöglich beheben."
+ :bug-report/section-clipboard-title "Steht der Fehler in Zusammenhang mit einer dieser Funktionen?"
+ :bug-report/section-clipboard-desc "Sie können diese praktischen Werkzeuge verwenden, um uns zusätzliche Informationen zu geben."
+ :bug-report/section-clipboard-btn-title "Zwischenablagenhelfer"
+ :bug-report/section-clipboard-btn-desc "Daten der Zwischenablage sammeln und einsehen"
+ :bug-report/section-issues-title "Oder..."
+ :bug-report/section-issues-desc "Wenn Ihnen keine Werkzeuge zum Sammeln zusätzlicher Information zur Verfügung stehen, melden Sie den Fehler bitte direkt."
+ :bug-report/section-issues-btn-title "Fehlerbericht einsenden"
+ :bug-report/section-issues-btn-desc "Helfen Sie, Logseq zu verbessern!"
+ :bug-report/inspector-page-desc-1 "Drücken Sie Ctrl+V / ⌘+V, um Ihre Zwischenablage einzusehen"
+ :bug-report/inspector-page-desc-2 "oder klicken Sie hier zum Einfügen, wenn Sie die mobile Version nutzen"
+ :bug-report/inspector-page-placeholder "Auf Mobilgeräten hier lang gedrückt halten"
+ :bug-report/inspector-page-tip "Etwas stimmt nicht? Kein Problem, klicken Sie hier, um zum letzten Schritt zurückzugehen."
+ :bug-report/inspector-page-btn-back "Zurück"
+ :bug-report/inspector-page-btn-copy "Ergebnis kopieren"
+ :bug-report/inspector-page-copy-notif "In die Zwischenablage kopiert!"
+ :bug-report/inspector-page-btn-create-issue "Issue erstellen"
+ :bug-report/inspector-page-desc-clipboard "Hier sind die Daten aus der Zwischenablage."
+ :bug-report/inspector-page-desc-copy "Wenn Sie das teilen wollen, drücken Sie den \"Kopieren\"-Knopf."
+ :bug-report/inspector-page-desc-create-issue "Sie können nun die Ergebnisse melden. Bitte fügen Sie den Inhalt der Zwischenablage im Abschnitt 'Additional Context' ein und beschreiben Sie, woher Sie ihn ursprünglich kopiert haben. Danke viel Mal!"
:color/gray "Grau"
:color/red "Rot"
@@ -95,6 +131,7 @@
:file-sync/graph-deleted "Der aktuelle Remote-Graph wurde gelöscht"
:file-sync/other-user-graph "Aktueller lokaler Graph ist an den Remote-Graph des anderen Benutzers gebunden. Kann also nicht mit der Synchronisierung beginnen."
+ :file-sync/rsapi-cannot-upload-err "Konnte nicht mit der Synchronisierung beginnen; bitte überprüfen Sie, ob die lokale Zeit korrekt ist."
:file/format-not-supported "Format .{1} wird nicht unterstützt."
:file/last-modified-at "Zuletzt geändert am"
@@ -102,6 +139,7 @@
:file/no-data "Keine Daten"
:file/validate-existing-file-error "Seite existiert bereits mit einer anderen Datei: {1}, aktuelle Datei: {2}. Bitte behalten Sie nur eine davon und indizieren Sie Ihren Graphen neu."
+ :file-rn/all-action "Alle Aktionen anwenden! ({1})"
:file-rn/apply-rename "Anwenden des Vorgangs zur Datei-Umbenennung"
:file-rn/close-panel "Das Panel schließen"
:file-rn/confirm-proceed "Format aktualisieren!"
@@ -127,32 +165,73 @@
:file-rn/suggest-rename "Aktion erforderlich: "
:file-rn/unreachable-title "Warnung! Der Seitenname wird unter dem aktuellen Dateinamenformat zu {1}, es sei denn, die Eigenschaft `title::` wird manuell gesetzt"
+ :flashcards/modal-btn-forgotten "Vergessen"
+ :flashcards/modal-btn-hide-answers "Antworten verstecken"
+ :flashcards/modal-btn-next-card "Nächste"
+ :flashcards/modal-btn-recall "Erinnern ging eine Weile"
+ :flashcards/modal-btn-remembered "Gewusst"
+ :flashcards/modal-btn-reset "Zurücksetzen"
+ :flashcards/modal-btn-reset-tip "Setzen Sie diese Karte zurück, um sie sofort wieder zu prüfen."
+ :flashcards/modal-btn-show-answers "Antworten zeigen"
+ :flashcards/modal-btn-show-clozes "Clozes zeigen"
+ :flashcards/modal-current-total "Aktuell/Total"
+ :flashcards/modal-finished "Gratulation, alle Karten für diese Runde sind geschafft, bis zum nächsten Mal! 💯"
+ :flashcards/modal-overdue-total "Überfällig/Total"
+ :flashcards/modal-select-all "Alle"
+ :flashcards/modal-select-switch "Wechseln zu"
+ :flashcards/modal-toggle-preview-mode "Vorschau-Modus umschalten"
+ :flashcards/modal-toggle-random-mode "Zufall-Modus umschalten"
+ :flashcards/modal-welcome-desc-1 "Fügen Sie \"#card\" zu einem beliebigen Block hinzu, um daraus eine Karte zu machen, oder nutzen Sie \"/cloze\", um Clozes zu erstellen."
+ :flashcards/modal-welcome-desc-2 "Sie können "
+ :flashcards/modal-welcome-desc-3 "diesen Link öffnen"
+ :flashcards/modal-welcome-desc-4 " um die Dokumentation einzusehen."
+ :flashcards/modal-welcome-title "Zeit, eine Karte zu erstellen!"
+
:graph/all-graphs "Alle Graphen"
+ :graph/local-graphs "Lokale Graphen:"
:graph/persist "Logseq synchronisiert gerade den internen Status, bitte warten Sie einige Sekunden."
:graph/persist-error "Synchronisation des internen Status fehlgeschlagen."
+ :graph/remote-graphs "Remote-Graphen:"
:graph/save "Speichern..."
:graph/save-error "Speichern fehlgeschlagen"
:graph/save-success "Erfolgreich gespeichert"
+
+ :header/go-back "Zurück"
+ :header/go-forward "Vorwärts"
+ :header/more "Weitere Optionen"
+ :header/search "Suchen"
+ :header/toggle-left-sidebar "Linke Seitenleiste umschalten"
- :help-shortcut-title "Hier klicken, um Tastenkombinationen und weitere Tipps zu sehen"
:help/about "Über Logseq"
+ :help/awesome-logseq "Awesome Logseq"
:help/block-content-autocomplete "Blockinhalt (Quelltext, Zitate, Abfragen, etc.) Autovervollständigung"
:help/block-reference "Blockverweis"
+ :help/blog "Logseq Blog"
:help/bug "Fehlerbericht"
:help/changelog "Änderungsprotokoll"
:help/context-menu "Kontextmenü"
:help/docs "Dokumentation"
:help/feature "Feature-Anfrage"
+ :help/forum-community "Forum"
+ :help/markdown-syntax "Syntax von Markdown"
+ :help/open-link-in-sidebar "Link in Seitenleiste öffnen"
+ :help/org-mode-syntax "Syntax von Org-mode"
:help/privacy "Datenschutzrichtlinie"
:help/reference-autocomplete "Seitenverweis Autovervollständigung"
+ :help/roadmap "Roadmap"
:help/shortcut "Tastaturkürzel"
:help/shortcut-page-title "Tastaturbefehl"
:help/shortcuts "Tastaturkürzel"
+ :help-shortcut-title "Hier klicken, um Tastenkombinationen und weitere Tipps zu sehen"
:help/shortcuts-triggers "Auslöser"
:help/slash-autocomplete "/-Autovervollständigung"
:help/start "Einstieg"
:help/terms "Nutzungsbedingungen"
- :help/open-link-in-sidebar "Link in Seitenleiste öffnen"
+ :help/title-about "About"
+ :help/title-community "Community"
+ :help/title-development "Entwicklung"
+ :help/title-terms "Rechtliches"
+ :help/title-usage "Bedienung"
:left-side-bar/create "Erstellen"
:left-side-bar/journals "Journale"
@@ -160,44 +239,103 @@
:left-side-bar/nav-recent-pages "Neuste"
:left-side-bar/new-page "Neue Seite"
:left-side-bar/new-whiteboard "Neues Whiteboard"
+ :left-side-bar/switch "Wechseln zu:"
:linked-references/filter-search "Suche in verknüpften Seiten"
:notification/clear-all "Alles löschen"
:on-boarding/add-graph "Graph hinzufügen"
+ :on-boarding/command-palette-quick-tour "Kurze Tour für Neueinsteiger"
:on-boarding/demo-graph "Dies ist ein Demo-Graph. Änderungen werden nicht gespeichert, solange Sie kein lokales Verzeichnis öffnen."
- :on-boarding/new-graph-desc-1 "Logseq unterstützt sowohl Markdown als auch Org-mode. Sie können ein bestehendes Verzeichnis öffnen oder auf Ihrem Rechner ein neues Verzeichnis anlegen. Ein Verzeichnis wird auch als Ordner bezeichnet. Ihre Daten werden nur auf diesem Gerät gespeichert."
- :on-boarding/new-graph-desc-2 "Nachdem Sie ein Verzeichnis geöffnet haben, werden darin drei Ordner angelegt:"
+
+ :on-boarding/importing-desc "Logseq importiert JSON, EDN und Markdown."
+ :on-boarding/importing-lsq-desc "Ein früheres Backup eines Logseq-Graphen aus EDN oder JSON importieren"
+ :on-boarding/importing-main-desc "Sie können dies auch später in der App tun."
+ :on-boarding/importing-main-title "Vorhandene Notizen importieren"
+ :on-boarding/importing-opml-desc " OPML-Dateien importieren"
+ :on-boarding/importing-roam-desc "Einen Roam JSON Export importieren"
+ :on-boarding/importing-title "Möchten Sie bestehende Notizen importieren?"
+
+ :on-boarding/main-desc "Wählen Sie zunächst einen Verzeichnis, wo Logseq Ihre Gedanken, Ideen und Notizen aufbewahren kann."
+ :on-boarding/main-title (fn [] ["Willkommen bei " [:strong "Logseq!"]])
+ :on-boarding/new-graph-desc-1 "Zur Textformatierung unterstützt Logseq sowohl Markdown als auch Org-mode. Ihre Daten werden nur auf diesem Gerät gespeichert. Sie können ein bestehendes Verzeichnis auf Ihrem Rechner öffnen ein neues anlegen. Ein Verzeichnis wird auch als Ordner bezeichnet."
+ :on-boarding/new-graph-desc-2 "Nachdem Sie ein Verzeichnis geöffnet haben, werden darin Unterordner angelegt:"
:on-boarding/new-graph-desc-3 "/journals - enthält Ihre Journal-Seiten"
:on-boarding/new-graph-desc-4 "/pages - enthält die anderen Seiten"
- :on-boarding/new-graph-desc-5 "/logseq - enthält die Konfiguration, custom.css und Metadaten."
+ :on-boarding/new-graph-desc-5 "/logseq - enthält Einstellungen, Metadaten und die custom.css"
:on-boarding/open-local-dir "Lokales Verzeichnis öffnen"
+
+ :on-boarding/quick-tour-btn-back "Zurück"
+ :on-boarding/quick-tour-btn-finish "Beenden"
+ :on-boarding/quick-tour-btn-next "Weiter"
+ :on-boarding/quick-tour-btn-skip "Tour überspringen"
+ :on-boarding/quick-tour-favorites-desc-1 "Heften Sie Ihre Lieblingsseiten mit dem `... ` - Menu zu den Favoriten an."
+ :on-boarding/quick-tour-favorites-desc-2 "Wir haben einige Vorlagenseiten hinzugefügt, um Ihnen beim Einstieg zu helfen. Sie können diese Seiten entfernen, wenn Sie sie nicht mehr benötigen."
+ :on-boarding/quick-tour-favorites-title "⭐️ Favoriten"
+ :on-boarding/quick-tour-help-desc "Hier können Sie jederzeit Hilfe und andere Informationen zu Logseq erhalten."
+ :on-boarding/quick-tour-help-title "❓ Hilfe"
+ :on-boarding/quick-tour-journal-page-desc-1 "Das ist die heutige Seite im Journal. Hier können Sie Ihre Überlegungen, Erkenntnisse und Ideen festhalten. Sorgen Sie sich nicht um Organisation. Schreiben Sie drauflos und"
+ :on-boarding/quick-tour-journal-page-desc-2 "[[verlinken]]"
+ :on-boarding/quick-tour-journal-page-desc-3 "Sie zu früheren Gedanken."
+ :on-boarding/quick-tour-journal-page-title "📆 Seiten im täglichen Journal"
+ :on-boarding/quick-tour-left-sidebar-desc "Öffnen Sie die linke Seitenleiste, um wichtige Menus in Logseq zu erkunden."
+ :on-boarding/quick-tour-left-sidebar-title "👀 Linke Seitenleiste"
+ :on-boarding/quick-tour-steps "SCHRITT "
+
+ :on-boarding/section-app "APP Internes"
+ :on-boarding/section-assets "Eingefügte Grafiken & Dokumente"
+ :on-boarding/section-btn-desc "Vorhandenen Ordner öffnen oder Einen neuen anlegen"
+ :on-boarding/section-btn-title "Ordner auswählen"
+ :on-boarding/section-computer "Computer"
+ :on-boarding/section-config "Konfigurationsdatei"
+ :on-boarding/section-desc "Im gewählten Ordner wird Logseq 4 Unterordner anlegen."
+ :on-boarding/section-journals "Tägliche Notizen"
+ :on-boarding/section-pages "SEITEN"
+ :on-boarding/section-phone "Telefon"
+ :on-boarding/section-tip-1 "Jede Seite ist eine Datei, die nur auf ihrem {1} gespeichert ist."
+ :on-boarding/section-tip-2 "Wenn Sie möchten, können Sie Ihre Notizen später synchronisieren."
+ :on-boarding/section-title "Wie Logseq Ihre Arbeit speichert"
+
+ :on-boarding/tour-whiteboard-btn-back "Zurück"
+ :on-boarding/tour-whiteboard-btn-finish "Beenden"
+ :on-boarding/tour-whiteboard-btn-next "Weiter"
:on-boarding/tour-whiteboard-home "{1} Zuhause für Ihre Whiteboards"
:on-boarding/tour-whiteboard-home-description "Whiteboards haben einen eigenen Bereich in der App, in dem Sie sie auf einen Blick sehen, neue erstellen oder einfach löschen können."
:on-boarding/tour-whiteboard-new "{1} Erstelle neues Whiteboard"
:on-boarding/tour-whiteboard-new-description "Es gibt mehrere Möglichkeiten, ein neues Whiteboard zu erstellen. Eine davon ist immer direkt hier im Dashboard."
- :on-boarding/welcome-whiteboard-modal-title "Eine neue Leinwand für Ihre Gedanken."
+
:on-boarding/welcome-whiteboard-modal-description "Whiteboards sind ein großartiges Werkzeug für Brainstorming und Organisation. Jetzt können Sie jeden Ihrer Gedanken aus der Wissensdatenbank oder neue Gedanken nebeneinander auf einer räumlichen Leinwand platzieren, um sie zu verbinden, zu assoziieren und auf neue Weise zu verstehen."
:on-boarding/welcome-whiteboard-modal-skip "Überspringen"
:on-boarding/welcome-whiteboard-modal-start "Whiteboarding beginnen"
+ :on-boarding/welcome-whiteboard-modal-title "Eine neue Leinwand für Ihre Gedanken."
:page/add-to-favorites "Zu Favoriten hinzufügen"
+ :page/backlinks "Backlinks"
:page/copy-page-url "Seiten-URL kopieren"
:page/created-at "Erstellt am"
:page/delete "Seite löschen"
:page/delete-confirmation "Diese Seite und die zugehörige Datei löschen?"
:page/earlier "Früher"
+ :page/illegal-page-name "Seitenname nicht zulässig!"
+ :page/logseq-is-having-a-problem "Logseq hat ein Problem festgestellt. Versuche zurückzukehren ..."
:page/make-private "Privat machen"
:page/make-public "Beim Export in HTML veröffentlichen"
:page/open-backup-directory "Verzeichnis für Seiten-Backups öffnen"
:page/open-in-finder "Im Verzeichnis öffnen"
:page/open-with-default-app "Mit Standard-Anwendung öffnen"
+ :page/page-already-exists "Page “{1}” already exists!"
:page/show-journals "Journal anzeigen"
:page/show-whiteboards "Whiteboards anzeigen"
+ :page/slide-view "View as slides"
+ :page/slide-view-tip-go-fullscreen (fn [] [[:span.opacity-70 "Tip: press "] [:code "f"] [:span.opacity-70 " to go fullscreen"]])
+ :page/something-went-wrong "Es ist etwas schief gelaufen."
+ :page/step "Schritt {1}"
+ :page/try "Versuch"
:page/unfavorite "Seite aus Favoriten entfernen"
:page/updated-at "Aktualisiert am"
:page/version-history "Seitenverlauf anzeigen"
+ :page/whiteboard-to-journal-error "Whiteboard pages cannot be renamed to journal titles!"
:paginates/next "Weiter"
:paginates/pages "Total {1} Seiten"
@@ -211,36 +349,56 @@
:pdf/toggle-dashed "Gestrichelter Stil für die Hervorhebung von Bereichen"
:plugin/all "Alle"
+ :plugin/all-updated "Alle aktualisiert!"
+ :plugin/auto-check-for-updates "Automatisch Updates suchen"
:plugin/check-all-updates "Alle Updates überprüfen"
:plugin/check-update "Update überprüfen"
+ :plugin/checking-for-updates "Suche nach Aktualisierungen für Plugins ..."
:plugin/contribute "✨ Schreiben und veröffentlichen Sie ein neues Plugin"
:plugin/custom-js-alert "Datei custom.js gefunden. Darf sie ausgeführt werden? (Wenn Sie den Inhalt dieser Datei nicht verstehen, wird empfohlen, die Ausführung nicht zuzulassen, da dies gewisse Sicherheitsrisiken birgt)."
:plugin/delete-alert "Wollen Sie wirklich das Plugin [{1}] deinstallieren?"
:plugin/disabled "Deaktiviert"
+ :plugin/downloads "Downloads"
:plugin/enabled "Aktiviert"
+ :plugin/found-n-updates "{1} Aktualisierungen gefunden"
+ :plugin/found-updates "Aktualisierungen gefunden"
:plugin/install "Installieren"
:plugin/installed "Installiert"
+ :plugin/installed-plugin "Plugin installiert: {1}"
:plugin/installing "Installiere"
+ :plugin/list-of-updates "Aktualisierungen für Plugins: "
:plugin/load-unpacked "Entpacktes Plugin laden"
:plugin/marketplace "Marktplatz"
:plugin/not-installed "Nicht installiert"
+ :plugin/open-logseq-dir "Öffnen"
:plugin/open-package "Paket öffnen"
+ :plugin/open-preferences "Einstellungen öffnen"
:plugin/open-settings "Einstellungen öffnen"
:plugin/refresh-lists "Liste aktualisieren"
:plugin/reload "Neu laden"
+ :plugin/remote-error "Serverfehler: "
:plugin/restart "App neu starten"
+ :plugin/search-plugin "Plugins suchen"
+ :plugin/security-warning "Plugins haben Zugriff auf Ihre Graphen und die Dateien auf Ihrem Computer und können über Netzwerke kommunizieren."
:plugin/stars "Sterne"
+ :plugin/title "Titel ({1})"
:plugin/uninstall "Deinstallieren"
:plugin/unpacked "Entpackt"
:plugin/unpacked-tips "Plugin-Verzeichnis auswählen"
+ :plugin/up-to-date "Ist aktualisert: {1}"
:plugin/update "Aktualisierung"
+ :plugin/update-all-selected "Alle ausgewählten aktualisieren"
:plugin/update-available "Aktualisierung verfügbar"
+ :plugin/update-plugin "Aktualisiere plugin: {1} - {2}"
+ :plugin/updates-downloading "Aktualisierungen werden heruntergeladen"
:plugin/updating "Aktualisiere"
:plugin.install-from-file/menu-title "Aus plugins.edn installieren"
:plugin.install-from-file/title "Plugins aus plugins.edn installieren"
:plugin.install-from-file/notice "Die folgenden Plugins werden Ihre Plugins ersetzen:"
:plugin.install-from-file/success "Alle Plugins installiert!"
+
+ :query/config-property-settings "Einstellungen für diese Query:"
:right-side-bar/all-pages "Alle Seiten"
:right-side-bar/block-ref "Blockreferenz"
@@ -248,20 +406,170 @@
:right-side-bar/flashcards "Karteikarten"
:right-side-bar/graph-view "Graph-Ansicht"
:right-side-bar/help "Hilfe"
+ :right-side-bar/history "(Dev) Verlauf rückgängig machen / wiederherstellen"
+ :right-side-bar/history-global "global"
+ :right-side-bar/history-pageonly "nur Seite"
+ :right-side-bar/history-redos "Redos"
+ :right-side-bar/history-undos "Undos"
:right-side-bar/new-page "Neue Seite"
:right-side-bar/page-graph "Seiten-Graph"
:right-side-bar/separator "Griff zur Größenänderung der rechten Seitenleiste"
:right-side-bar/show-journals "Zeige Journale"
:right-side-bar/switch-theme "Zu {1} Thema wechseln"
+ :right-side-bar/toggle-right-sidebar "Rechte Seitenleiste umschalten"
:right-side-bar/whiteboards "Whiteboards"
-
+
+ :select/default-select-multiple "Ein oder mehrere auswählen"
+
+ :settings-page/app-updated "Ihre Version ist aktuell 🎉"
+ :settings-page/auto-expand-block-refs "Automatisch beim Heranzoomen Blockreferenzen erweitern..."
+ :settings-page/auto-expand-block-refs-tip "Diese Option steuert, ob Blockreferenzen beim Heranzoomen automatisch ausgeklappt werden."
+ :settings-page/changelog "Was ist neu?"
+ :settings-page/check-for-updates "Nach Updates suchen"
+ :settings-page/checking "Überprüfe ..."
+ :settings-page/custom-date-format-notification "Sie müssen den Graphen neu indizieren, damit diese Änderung wirksam wird."
+ :settings-page/git-desc-1 "Den Seitenverlauf können Sie über das Dreipunktemenu in der oberen rechten Ecke anzeigen."
+ :settings-page/git-desc-2 "Für professionelle Anwender unterstützt Logseq "
+ :settings-page/git-desc-3 " als Versionskontrollesystem. Verwenden Sie Git auf eigene Gefahr. Allgemeine Probleme von Git werden vom Logseq-Team nicht unterstützt."
+ :settings-page/git-tip "Wenn Sie Logseq Sync verwenden, können sie die Bearbeitungsgeschichte einer Seite direkt anzeigen. This section is for tech-savvy only."
+ :settings-page/native-titlebar "Native Titelleiste"
+ :settings-page/native-titlebar-desc "Die klassische Titelleiste auf Windows und Linux verwenden."
+ :settings-page/preferred-outdenting-tip "Linke Seite: Ausrücken mit Standardeinstellung - Rechte Seite: Ausrücken mit aktivierter Logischer Ausrückung"
+ :settings-page/preferred-outdenting-tip-more "→ Mehr erfahren"
+ :settings-page/preferred-pasting-file-hint "Wenn aktiviert, werden eingefügte Bilder aus dem Internet heruntergeladen und in assets/ gespeichert. Wenn deaktiviert, wird ein Weblink zum Bild eingefügt."
+ :settings-page/revision "Revision: "
+ :settings-page/sync-desc-1 "Klicken Sie"
+ :settings-page/sync-desc-2 "hier"
+ :settings-page/sync-desc-3 "für Anweisungen, wie Sie Synchronisation einrichten und nutzen können."
+ :settings-page/sync-diff-merge "Smart Merge bei der Synchronisation aktivieren"
+ :settings-page/sync-diff-merge-desc "Führt bei Konflikten die lokalen Änderungen automatisch mit den Dateien auf dem Server zusammen, anstatt die Dateien auf dem Server zu überschreiben."
+ :settings-page/sync-diff-merge-warn "Die Smart Merge-Fähigkeit kann auf einem Client erst nach der ersten erfolgreichen Synchronisation mit dem Server auf dem Graphen mit der neuen Logseq-Version aktiviert werden. Aktivieren Sie dies auf allen Geräten, um die beste Erfahrung zu erhalten."
+ :settings-page/tab-account "Account"
+ :settings-page/tab-editor "Editor"
+ :settings-page/theme-dark "Dunkel"
+ :settings-page/theme-light "Hell"
+ :settings-page/theme-system "System"
+ :settings-page/update-available "Neue Version gefunden: "
+ :settings-page/update-error-1 "⚠️ Ups, Etwas ist schiefgelaufen!"
+ :settings-page/update-error-2 " Überprüfen Sie den "
+
+ :settings-permission/start-granting "Erlauben"
+
+ :tips/all-done "Alles erledigt!"
+
+ :tutorial/text #resource "tutorials/tutorial-en.md"
+ :tutorial/dummy-notes #resource "tutorials/dummy-notes-en.md"
+
+ :whiteboard/add-block-or-page "Block oder Seite hinzufügen"
+ :whiteboard/align-bottom "Am unteren Rand ausrichten"
+ :whiteboard/align-center-horizontally "Horizontal mittig ausrichten"
+ :whiteboard/align-center-vertically "Vertikal mittig ausrichten"
+ :whiteboard/align-left "Am linken Rand ausrichten"
+ :whiteboard/align-right "Am rechten Rand ausrichten"
+ :whiteboard/align-top "Am oberen Rand ausrichten"
+ :whiteboard/arrow-head "Pfeilspitze"
+ :whiteboard/auto-resize "Automatisch Grösse ändern"
+ :whiteboard/bold "Fett"
+ :whiteboard/cache-outdated "Der Cache ist veraltet. Klicken Sie auf 'Neu indizieren' im Dropdown-Menu des Graphen."
+ :whiteboard/circle "Kreis"
+ :whiteboard/collapse "Einklappen"
+ :whiteboard/color "Farbe"
+ :whiteboard/connector "Verbindung"
+ :whiteboard/copy "Kopieren"
+ :whiteboard/cut "Ausschneiden"
+ :whiteboard/dashboard-card-created "Erstellt "
+ :whiteboard/dashboard-card-edited "Bearbeitet "
+ :whiteboard/dashboard-card-new-whiteboard "Neues Whiteboard"
+ :whiteboard/delete "Löschen"
+ :whiteboard/deselect-all "Auswahl zurücksetzen"
+ :whiteboard/dev-print-shape-props "(Dev) Eigenschaften anzeigen"
+ :whiteboard/distribute-horizontally "Horizontal verteilen"
+ :whiteboard/distribute-vertically "Vertikal verteilen"
+ :whiteboard/draw "Zeichnen"
+ :whiteboard/edit-pdf "PDF bearbeiten"
+ :whiteboard/eraser "Radiergummi"
+ :whiteboard/expand "Ausklappen"
+ :whiteboard/export "Exportieren"
+ :whiteboard/extra-large "Sehr Gross"
+ :whiteboard/extra-small "Sehr Klein"
+ :whiteboard/fill "Füllen"
+ :whiteboard/flip-horizontally "Horizontal spiegeln"
+ :whiteboard/flip-vertically "Vertikal spiegeln"
+ :whiteboard/group "Gruppieren"
+ :whiteboard/highlight "Hervorheben"
+ :whiteboard/huge "Gigantisch"
+ :whiteboard/italic "Kursiv"
+ :whiteboard/large "Gross"
+ :whiteboard/link "Verknüpfung"
+ :whiteboard/link-to-any-page-or-block "Auf Seiten oder Blöcke verlinken"
+ :whiteboard/link-whiteboard-or-block "Whiteboard/Seite/Block verknüpfen"
+ :whiteboard/lock "Sperren"
+ :whiteboard/medium "Normal"
+ :whiteboard/move-to-back "In den Hintergrund"
+ :whiteboard/move-to-front "In den Vordergrund"
+ :whiteboard/new-block "Neuer Block:"
+ :whiteboard/new-block-no-colon "Neuer Block"
+ :whiteboard/new-page "Neue Seite:"
+ :whiteboard/new-whiteboard "Neues Whiteboard"
+ :whiteboard/opacity "Deckkraft"
+ :whiteboard/open-page "Seite öffnen"
+ :whiteboard/open-page-in-sidebar "Seite in Seitenleiste öffnen"
+ :whiteboard/open-twitter-url "Link zu Twitter öffnen"
+ :whiteboard/open-website-url "Weblink öffnen"
+ :whiteboard/open-youtube-url "Link zu YouTube öffnen"
+ :whiteboard/pack-into-rectangle "In Rechteck packen"
+ :whiteboard/pan "Verschieben"
+ :whiteboard/paste "Einfügen"
+ :whiteboard/paste-as-link "Als Link einfügen"
+ :whiteboard/rectangle "Rechteck"
+ :whiteboard/redo "Wiederherstellen"
+ :whiteboard/references "Verweise"
+ :whiteboard/reload "Neu laden"
+ :whiteboard/remove-link "Link entfernen"
+ :whiteboard/scale-level "Grösse"
+ :whiteboard/search-only-blocks "Nur Blöcke suchen"
+ :whiteboard/search-only-pages "Nur Seiten suchen"
+ :whiteboard/select "Auswählen"
+ :whiteboard/select-all "Alle auswählen"
+ :whiteboard/select-custom-color "Benutzerdefinierte Farbe"
+ :whiteboard/shape "Form"
+ :whiteboard/shape-quick-links "Schnelllinks formen"
+ :whiteboard/small "Klein"
+ :whiteboard/snap-to-grid "Am Gitter einrasten"
+ :whiteboard/start-typing-to-search "Start typing to search..."
+ :whiteboard/stroke-type "Schriftart"
+ :whiteboard/text "Text"
+ :whiteboard/toggle-grid "Gitter anzeigen/ausblenden"
+ :whiteboard/triangle "Dreieck"
+ :whiteboard/twitter-url "Link zu Twitter"
+ :whiteboard/undo "Rückgängig"
+ :whiteboard/ungroup "Gruppierung aufheben"
+ :whiteboard/unlock "Entsperren"
+ :whiteboard/website-url "Weblink"
+ :whiteboard/youtube-url "Link zu YouTube"
+ :whiteboard/zoom-in "Heranzoomen"
+ :whiteboard/zoom-out "Herauszoomen"
+ :whiteboard/zoom-to-fit "Zoom an Zeichnung anpassen"
+
+ :window/minimize "Minimieren"
+ :window/maximize "Maximieren"
+ :window/restore "Wiederherstellen"
+ :window/close "Schliessen"
+ :window/exit-fullscreen "Vollbild verlassen"
+
+ :search/blocks-in-page "Suche nach Blöcken auf der Seite:"
+ :search/cache-outdated "Der Cache ist veraltet. Klicken Sie auf 'Neu indizieren' im Dropdown-Menu des Graphen."
+ :search/command-palette-tip-1 "Tipp: "
+ :search/command-palette-tip-2 " um die Befehlspalette zu öffnen"
:search/items "Einträge"
:search/page-names "In Seitennamen suchen"
:search/publishing "Suchen"
+ :search/recent "Kürzlich gesucht:"
:search/result-for "Suchergebnisse für"
:search-item/block "Block"
:search-item/file "Datei"
+ :search-item/no-result "Keine übereinstimmenden Treffer"
:search-item/page "Seite"
:search-item/whiteboard "Whiteboard"
@@ -342,6 +650,7 @@
:context-menu/preview-flashcard "Vorschau der Karteikarte"
:context-menu/template-exists-warning "Vorlage existiert bereits!"
:context-menu/template-include-parent-block "Einschließlich des übergeordneten Blocks in der Vorlage?"
+ :context-menu/toggle-number-list "Toggle number list"
:dev/show-block-ast "(Dev) Block-AST anzeigen"
:dev/show-block-data "(Dev) Block-Daten anzeigen"
:dev/show-page-ast "(Dev) Seiten-AST anzeigen"
@@ -350,19 +659,6 @@
:editor/cycle-todo "Den TODO-Status des aktuellen Elements rotieren"
:editor/delete-selection "Ausgewählte Blöcke entfernen"
:editor/expand-block-children "Alles ausklappen"
- :page/logseq-is-having-a-problem "Logseq hat ein Problem festgestellt. Versuche zurückzukehren ..."
- :page/something-went-wrong "Es ist etwas schief gelaufen."
- :page/step "Schritt {1}"
- :page/try "Versuch"
- :plugin/found-n-updates "{1} Aktualisierungen gefunden"
- :plugin/found-updates "Aktualisierungen gefunden"
- :plugin/update-all-selected "Alle ausgewählten aktualisieren"
- :plugin/updates-downloading "Aktualisierungen werden heruntergeladen"
- :right-side-bar/history "(Dev) Verlauf rückgängig machen / wiederherstellen"
- :select/default-select-multiple "Ein oder mehrere auswählen"
- :settings-page/auto-expand-block-refs "Automatisch beim Heranzoomen Blockreferenzen erweitern..."
-
- :whiteboard/link-whiteboard-or-block "Whiteboard/Seite/Block verknüpfen"
:command.auto-complete/complete "Automatische Vervollständigung: Ausgewähltes Element auswählen"
:command.auto-complete/next "Automatische Vervollständigung: Nächstes Element auswählen"
@@ -374,9 +670,9 @@
:command.cards/recall "Karten: Nehmen Sie sich eine Weile Zeit, um sich zu erinnern"
:command.cards/remembered "Karten: Gemerkt"
:command.cards/toggle-answers "Karten: Antworten/Lücken ein-/ausblenden"
+ :command.command-palette/toggle "Befehlspalette umschalten"
:command.command/run "Git-Befehl ausführen"
:command.command/toggle-favorite "Zu Favoriten hinzufügen/entfernen"
- :command.command-palette/toggle "Befehlspalette umschalten"
:command.date-picker/complete "Datumsauswahl: Den gewünschten Tag wählen"
:command.date-picker/next-day "Datumsauswahl: Den nächsten Tag wählen"
:command.date-picker/next-week "Datumsauswahl: Die nächste Woche wählen"
@@ -411,6 +707,7 @@
:command.editor/forward-word "Cursor ein Wort vorwärts bewegen"
:command.editor/highlight "Hervorheben"
:command.editor/indent "Block einrücken"
+ :command.editor/insert-link "HTML Link"
:command.editor/insert-youtube-timestamp "YouTube-Zeitstempel einfügen"
:command.editor/italics "Kursiv"
:command.editor/kill-line-after "Zeile nach der Cursorposition löschen"
@@ -437,6 +734,7 @@
:command.editor/select-parent "Übergeordneten Block auswählen"
:command.editor/select-up "Inhalt oben auswählen"
:command.editor/strike-through "Durchgestrichen"
+ :command.editor/toggle-number-list "Nummeriert/Unnummeriert umschalten"
:command.editor/toggle-open-blocks "Öffnen von Blöcken umschalten (alle Blöcke ein- oder ausklappen)"
:command.editor/toggle-undo-redo-mode "Rückgängig / Wiederherstellen umschalten (global oder nur die Seite)"
:command.editor/undo "Rückgängig"
@@ -468,6 +766,7 @@
:command.graph/re-index "Aktuellen Graph neu indizieren"
:command.graph/remove "Einen Graph entfernen"
:command.graph/save "Aktuellen Graph auf Festplatte speichern"
+ :command.misc/copy "Kopieren"
:command.pdf/close "PDF: Aktuelles PDF-Dokument schließen"
:command.pdf/find "PDF: Text des aktuellen PDF-Dokuments durchsuchen"
:command.pdf/next-page "PDF: Nächste Seite des aktuellen PDF-Dokuments"
@@ -488,13 +787,39 @@
:command.ui/toggle-right-sidebar "Rechte Seitenleiste umschalten"
:command.ui/toggle-left-sidebar "Linke Seitenleiste umschalten"
:command.ui/toggle-settings "Einstellungen umschalten"
- :command.ui/toggle-wide-mode "Breitbildmodus umschalten"
:command.ui/toggle-theme "Umschalten zwischen dunklem/hellem Theme"
+ :command.ui/toggle-wide-mode "Breitbildmodus umschalten"
+ :command.whiteboard/bring-forward "Eine Ebene nach vorne schieben"
+ :command.whiteboard/bring-to-front "In den Vordergrund"
+ :command.whiteboard/connector "Verknüpfungen zeichnen"
+ :command.whiteboard/ellipse "Ellipsen zeichnen"
+ :command.whiteboard/eraser "Radiergummi"
+ :command.whiteboard/group "Auswahl gruppieren"
+ :command.whiteboard/highlighter "Leuchtstift"
+ :command.whiteboard/lock "Auswahl sperren"
+ :command.whiteboard/pan "Verschiebewerkzeug"
+ :command.whiteboard/pencil "Stift"
+ :command.whiteboard/portal "Portalwerkzeug"
+ :command.whiteboard/rectangle "Rechtecke zeichnen"
+ :command.whiteboard/reset-zoom "Zoom zurücksetzen"
+ :command.whiteboard/select "Auswahlwerkzeug"
+ :command.whiteboard/send-backward "Eine Ebene nach hinten schieben"
+ :command.whiteboard/send-to-back "In den Hintergrund"
+ :command.whiteboard/text "Textwerkzeug"
+ :command.whiteboard/toggle-grid "Gitter anzeigen/ausblenden"
+ :command.whiteboard/ungroup "Gruppierung aufheben"
+ :command.whiteboard/unlock "Auswahl entsperren"
+ :command.whiteboard/zoom-in "Heranzoomen"
+ :command.whiteboard/zoom-out "Herauszoomen"
+ :command.whiteboard/zoom-to-fit "Zoom an Zeichnung anpassen"
+ :command.whiteboard/zoom-to-selection "Zoom auf Auswahl fokussieren"
:shortcut.category/basics "Grundlagen"
:shortcut.category/block-command-editing "Blockbefehl bearbeiten"
:shortcut.category/block-editing "Blockbearbeitung allgemein"
:shortcut.category/block-selection "Blockauswahl (Esc drücken, um die Auswahl zu beenden)"
:shortcut.category/formatting "Formatierung"
:shortcut.category/navigating "Navigation"
+ :shortcut.category/whiteboard "Whiteboard"
+ :shortcut.category/plugins "Plugins"
:shortcut.category/others "Sonstiges"
:shortcut.category/toggle "Umschalten"}
From 51658c16c07727136fe4c8bb290d70a547b42ab2 Mon Sep 17 00:00:00 2001
From: einmeterhecht <119974780+einmeterhecht@users.noreply.github.com>
Date: Sun, 30 Jul 2023 10:52:52 +0200
Subject: [PATCH 03/63] Update de.edn
Removed or translated german texts identical to the english ones
---
src/resources/dicts/de.edn | 46 +++++++++++---------------------------
1 file changed, 13 insertions(+), 33 deletions(-)
diff --git a/src/resources/dicts/de.edn b/src/resources/dicts/de.edn
index a8f0f4b52c19..341574721ad8 100644
--- a/src/resources/dicts/de.edn
+++ b/src/resources/dicts/de.edn
@@ -48,7 +48,6 @@
:open-new-window "Neues Fenster"
:page-search "In der aktuellen Seite suchen"
:parsing-files "Dateien analysieren"
- :plugins "Plugins"
:port "Port"
:re-index "Neu indizieren"
:re-index-detail "Graph neu aufbauen"
@@ -71,8 +70,6 @@
:toggle-theme "Thema umschalten"
:type "Typ"
:untitled "Ohne Titel"
- :whiteboard "Whiteboard"
- :whiteboards "Whiteboards"
:yes "Ja"
:accessibility/skip-to-main-content "Zum Hauptinhalt springen"
@@ -203,7 +200,6 @@
:header/toggle-left-sidebar "Linke Seitenleiste umschalten"
:help/about "Über Logseq"
- :help/awesome-logseq "Awesome Logseq"
:help/block-content-autocomplete "Blockinhalt (Quelltext, Zitate, Abfragen, etc.) Autovervollständigung"
:help/block-reference "Blockverweis"
:help/blog "Logseq Blog"
@@ -218,7 +214,6 @@
:help/org-mode-syntax "Syntax von Org-mode"
:help/privacy "Datenschutzrichtlinie"
:help/reference-autocomplete "Seitenverweis Autovervollständigung"
- :help/roadmap "Roadmap"
:help/shortcut "Tastaturkürzel"
:help/shortcut-page-title "Tastaturbefehl"
:help/shortcuts "Tastaturkürzel"
@@ -227,8 +222,6 @@
:help/slash-autocomplete "/-Autovervollständigung"
:help/start "Einstieg"
:help/terms "Nutzungsbedingungen"
- :help/title-about "About"
- :help/title-community "Community"
:help/title-development "Entwicklung"
:help/title-terms "Rechtliches"
:help/title-usage "Bedienung"
@@ -257,7 +250,7 @@
:on-boarding/importing-roam-desc "Einen Roam JSON Export importieren"
:on-boarding/importing-title "Möchten Sie bestehende Notizen importieren?"
- :on-boarding/main-desc "Wählen Sie zunächst einen Verzeichnis, wo Logseq Ihre Gedanken, Ideen und Notizen aufbewahren kann."
+ :on-boarding/main-desc "Wählen Sie ein Verzeichnis, wo Logseq Ihre Gedanken, Ideen und Notizen aufbewahren kann."
:on-boarding/main-title (fn [] ["Willkommen bei " [:strong "Logseq!"]])
:on-boarding/new-graph-desc-1 "Zur Textformatierung unterstützt Logseq sowohl Markdown als auch Org-mode. Ihre Daten werden nur auf diesem Gerät gespeichert. Sie können ein bestehendes Verzeichnis auf Ihrem Rechner öffnen ein neues anlegen. Ein Verzeichnis wird auch als Ordner bezeichnet."
:on-boarding/new-graph-desc-2 "Nachdem Sie ein Verzeichnis geöffnet haben, werden darin Unterordner angelegt:"
@@ -283,7 +276,7 @@
:on-boarding/quick-tour-left-sidebar-title "👀 Linke Seitenleiste"
:on-boarding/quick-tour-steps "SCHRITT "
- :on-boarding/section-app "APP Internes"
+ :on-boarding/section-app "App-Internes"
:on-boarding/section-assets "Eingefügte Grafiken & Dokumente"
:on-boarding/section-btn-desc "Vorhandenen Ordner öffnen oder Einen neuen anlegen"
:on-boarding/section-btn-title "Ordner auswählen"
@@ -291,7 +284,7 @@
:on-boarding/section-config "Konfigurationsdatei"
:on-boarding/section-desc "Im gewählten Ordner wird Logseq 4 Unterordner anlegen."
:on-boarding/section-journals "Tägliche Notizen"
- :on-boarding/section-pages "SEITEN"
+ :on-boarding/section-pages "Seiten"
:on-boarding/section-phone "Telefon"
:on-boarding/section-tip-1 "Jede Seite ist eine Datei, die nur auf ihrem {1} gespeichert ist."
:on-boarding/section-tip-2 "Wenn Sie möchten, können Sie Ihre Notizen später synchronisieren."
@@ -311,7 +304,6 @@
:on-boarding/welcome-whiteboard-modal-title "Eine neue Leinwand für Ihre Gedanken."
:page/add-to-favorites "Zu Favoriten hinzufügen"
- :page/backlinks "Backlinks"
:page/copy-page-url "Seiten-URL kopieren"
:page/created-at "Erstellt am"
:page/delete "Seite löschen"
@@ -324,18 +316,18 @@
:page/open-backup-directory "Verzeichnis für Seiten-Backups öffnen"
:page/open-in-finder "Im Verzeichnis öffnen"
:page/open-with-default-app "Mit Standard-Anwendung öffnen"
- :page/page-already-exists "Page “{1}” already exists!"
+ :page/page-already-exists "Die Seite “{1}” existiert bereits!"
:page/show-journals "Journal anzeigen"
:page/show-whiteboards "Whiteboards anzeigen"
- :page/slide-view "View as slides"
- :page/slide-view-tip-go-fullscreen (fn [] [[:span.opacity-70 "Tip: press "] [:code "f"] [:span.opacity-70 " to go fullscreen"]])
+ :page/slide-view "Als Slides anzeigen"
+ :page/slide-view-tip-go-fullscreen (fn [] [[:span.opacity-70 "Tipp: Drücken Sie "] [:code "f"] [:span.opacity-70 ", um zum Vollbild zu wechseln"]])
:page/something-went-wrong "Es ist etwas schief gelaufen."
:page/step "Schritt {1}"
:page/try "Versuch"
:page/unfavorite "Seite aus Favoriten entfernen"
:page/updated-at "Aktualisiert am"
:page/version-history "Seitenverlauf anzeigen"
- :page/whiteboard-to-journal-error "Whiteboard pages cannot be renamed to journal titles!"
+ :page/whiteboard-to-journal-error "Whiteboards können nicht den gleichen Namen wie ein Journal verwenden"
:paginates/next "Weiter"
:paginates/pages "Total {1} Seiten"
@@ -358,7 +350,6 @@
:plugin/custom-js-alert "Datei custom.js gefunden. Darf sie ausgeführt werden? (Wenn Sie den Inhalt dieser Datei nicht verstehen, wird empfohlen, die Ausführung nicht zuzulassen, da dies gewisse Sicherheitsrisiken birgt)."
:plugin/delete-alert "Wollen Sie wirklich das Plugin [{1}] deinstallieren?"
:plugin/disabled "Deaktiviert"
- :plugin/downloads "Downloads"
:plugin/enabled "Aktiviert"
:plugin/found-n-updates "{1} Aktualisierungen gefunden"
:plugin/found-updates "Aktualisierungen gefunden"
@@ -407,17 +398,16 @@
:right-side-bar/graph-view "Graph-Ansicht"
:right-side-bar/help "Hilfe"
:right-side-bar/history "(Dev) Verlauf rückgängig machen / wiederherstellen"
- :right-side-bar/history-global "global"
- :right-side-bar/history-pageonly "nur Seite"
- :right-side-bar/history-redos "Redos"
- :right-side-bar/history-undos "Undos"
+ :right-side-bar/history-global "Global"
+ :right-side-bar/history-pageonly "Nur Seite"
+ :right-side-bar/history-redos "Rückgängig gemacht"
+ :right-side-bar/history-undos "Wiederhergestellt"
:right-side-bar/new-page "Neue Seite"
:right-side-bar/page-graph "Seiten-Graph"
:right-side-bar/separator "Griff zur Größenänderung der rechten Seitenleiste"
:right-side-bar/show-journals "Zeige Journale"
:right-side-bar/switch-theme "Zu {1} Thema wechseln"
:right-side-bar/toggle-right-sidebar "Rechte Seitenleiste umschalten"
- :right-side-bar/whiteboards "Whiteboards"
:select/default-select-multiple "Ein oder mehrere auswählen"
@@ -437,15 +427,12 @@
:settings-page/preferred-outdenting-tip "Linke Seite: Ausrücken mit Standardeinstellung - Rechte Seite: Ausrücken mit aktivierter Logischer Ausrückung"
:settings-page/preferred-outdenting-tip-more "→ Mehr erfahren"
:settings-page/preferred-pasting-file-hint "Wenn aktiviert, werden eingefügte Bilder aus dem Internet heruntergeladen und in assets/ gespeichert. Wenn deaktiviert, wird ein Weblink zum Bild eingefügt."
- :settings-page/revision "Revision: "
:settings-page/sync-desc-1 "Klicken Sie"
:settings-page/sync-desc-2 "hier"
:settings-page/sync-desc-3 "für Anweisungen, wie Sie Synchronisation einrichten und nutzen können."
:settings-page/sync-diff-merge "Smart Merge bei der Synchronisation aktivieren"
:settings-page/sync-diff-merge-desc "Führt bei Konflikten die lokalen Änderungen automatisch mit den Dateien auf dem Server zusammen, anstatt die Dateien auf dem Server zu überschreiben."
:settings-page/sync-diff-merge-warn "Die Smart Merge-Fähigkeit kann auf einem Client erst nach der ersten erfolgreichen Synchronisation mit dem Server auf dem Graphen mit der neuen Logseq-Version aktiviert werden. Aktivieren Sie dies auf allen Geräten, um die beste Erfahrung zu erhalten."
- :settings-page/tab-account "Account"
- :settings-page/tab-editor "Editor"
:settings-page/theme-dark "Dunkel"
:settings-page/theme-light "Hell"
:settings-page/theme-system "System"
@@ -536,9 +523,8 @@
:whiteboard/shape-quick-links "Schnelllinks formen"
:whiteboard/small "Klein"
:whiteboard/snap-to-grid "Am Gitter einrasten"
- :whiteboard/start-typing-to-search "Start typing to search..."
+ :whiteboard/start-typing-to-search "Suche mit Tippen beginnen..."
:whiteboard/stroke-type "Schriftart"
- :whiteboard/text "Text"
:whiteboard/toggle-grid "Gitter anzeigen/ausblenden"
:whiteboard/triangle "Dreieck"
:whiteboard/twitter-url "Link zu Twitter"
@@ -571,7 +557,6 @@
:search-item/file "Datei"
:search-item/no-result "Keine übereinstimmenden Treffer"
:search-item/page "Seite"
- :search-item/whiteboard "Whiteboard"
:select/default-prompt "Wählen Sie einen"
@@ -608,7 +593,6 @@
:settings-page/enable-shortcut-tooltip "Tooltips für Verknüpfungen aktivieren"
:settings-page/enable-timetracking "Zeiterfassung einschalten"
:settings-page/enable-tooltip "Tooltips"
- :settings-page/enable-whiteboards "Whiteboards"
:settings-page/export-theme "Theme exportieren"
:settings-page/filename-format "Dateinamen-Format"
:settings-page/git-commit-delay "Anzahl Sekunden für Git Auto Commit"
@@ -617,7 +601,6 @@
:settings-page/home-default-page "Standard-Homepage einrichten"
:settings-page/login-prompt "Um vor allen anderen auf neue Funktionen zugreifen zu können, müssen Sie ein Open Collective Sponsor oder Backer von Logseq sein und sich daher zuerst anmelden."
:settings-page/network-proxy "Netzwerk-Proxy"
- :settings-page/plugin-system "Plugins"
:settings-page/preferred-file-format "Bevorzugtes Datei-Format"
:settings-page/preferred-outdenting "Logische Ausrückung"
:settings-page/preferred-pasting-file "Einfügen der Datei bevorzugen"
@@ -650,7 +633,7 @@
:context-menu/preview-flashcard "Vorschau der Karteikarte"
:context-menu/template-exists-warning "Vorlage existiert bereits!"
:context-menu/template-include-parent-block "Einschließlich des übergeordneten Blocks in der Vorlage?"
- :context-menu/toggle-number-list "Toggle number list"
+ :context-menu/toggle-number-list "Nummeriert/Unnummeriert umschalten"
:dev/show-block-ast "(Dev) Block-AST anzeigen"
:dev/show-block-data "(Dev) Block-Daten anzeigen"
:dev/show-page-ast "(Dev) Seiten-AST anzeigen"
@@ -707,7 +690,6 @@
:command.editor/forward-word "Cursor ein Wort vorwärts bewegen"
:command.editor/highlight "Hervorheben"
:command.editor/indent "Block einrücken"
- :command.editor/insert-link "HTML Link"
:command.editor/insert-youtube-timestamp "YouTube-Zeitstempel einfügen"
:command.editor/italics "Kursiv"
:command.editor/kill-line-after "Zeile nach der Cursorposition löschen"
@@ -819,7 +801,5 @@
:shortcut.category/block-selection "Blockauswahl (Esc drücken, um die Auswahl zu beenden)"
:shortcut.category/formatting "Formatierung"
:shortcut.category/navigating "Navigation"
- :shortcut.category/whiteboard "Whiteboard"
- :shortcut.category/plugins "Plugins"
:shortcut.category/others "Sonstiges"
:shortcut.category/toggle "Umschalten"}
From 4d2bab847178b66df1cfe0a207cfa8113859ad3b Mon Sep 17 00:00:00 2001
From: einmeterhecht <119974780+einmeterhecht@users.noreply.github.com>
Date: Sun, 30 Jul 2023 11:56:51 +0200
Subject: [PATCH 04/63] Translate the tutorial to german
---
src/resources/tutorials/dummy-notes-de.md | 14 ++++++++++
src/resources/tutorials/tutorial-de.md | 34 +++++++++++++++++++++++
2 files changed, 48 insertions(+)
create mode 100644 src/resources/tutorials/dummy-notes-de.md
create mode 100644 src/resources/tutorials/tutorial-de.md
diff --git a/src/resources/tutorials/dummy-notes-de.md b/src/resources/tutorials/dummy-notes-de.md
new file mode 100644
index 000000000000..3df18117abf8
--- /dev/null
+++ b/src/resources/tutorials/dummy-notes-de.md
@@ -0,0 +1,14 @@
+---
+title: Wie macht man Notizen?
+---
+
+- Hallo, ich bin ein Block!
+:PROPERTIES:
+:id: 5f713e91-8a3c-4b04-a33a-c39482428e2d
+:END:
+- Und ich? Ich bin auch ein Block!
+:PROPERTIES:
+:id: 5f713ea8-8cba-403d-ac00-9964b1ec7190
+:END:
+ - Man kann uns auch einrücken (mit TAB)!
+ - Wir sind jetzt unserem Elternblock untergeordnet.
diff --git a/src/resources/tutorials/tutorial-de.md b/src/resources/tutorials/tutorial-de.md
new file mode 100644
index 000000000000..6660c1bd6358
--- /dev/null
+++ b/src/resources/tutorials/tutorial-de.md
@@ -0,0 +1,34 @@
+## Hi, Willkommen bei Logseq !
+
+Logseq ist eine privacy-first, [Open-Source](https://github.com/logseq/logseq)-Plattform für Wissen und Zusammenarbeit.
+Das hier ist ein 3-Minuten-Tutorial über die Verwendung von Logseq. Los geht's!
+- ---
+- Das Wichtigste:
+ - Ein Stichpunkt heisst in Logseq **Block**.
+ - Klicken, um einen Block zu bearbeiten.
+ - `Enter`, um einen neuen Block zu erstellen.
+ - `Umschalt+Enter`,
+ um eine neue Zeile im gleichen Block zu beginnen.
+- ---
+- Erstellen wir eine Seite namens [[Wie macht man Notizen?]]. Klicken Sie darauf, um zu dieser Seite zu gelangen. Wenn Sie dabei `Umschalt` gedrückt halten, wird die Seite rechts neben diesem Text angezeigt. Jetzt sollten Sie _Verknüpfte_ und _Nicht verknüpfte Referenzen_ sehen.
+- ---
+- Verknüpfen wir einige Blöcke aus [[Wie macht man Notizen?]]. Auch hier kann man den Block mit `Umschalt+Klicken` in der rechten Seitenleiste zeigen. Bearbeiten Sie den Text dort! Die Änderungen gehen direkt auf die verknüpfte Seite.
+ - ((5f713e91-8a3c-4b04-a33a-c39482428e2d)) : Das ist eine Blockreferenz.
+ - ((5f713ea8-8cba-403d-ac00-9964b1ec7190)) : Hier ist noch eine.
+- ---
+- Gibt es so etwas wie Tags?
+ - Natürlich, hier ist ein #dummy Tag.
+- ---
+- Was ist mit Aufgaben? Gibt es TODO/DOING/DONE? Und ein System für Prioritäten?
+ - Ja, geben Sie `/` ein und wählen Sie ihr bevorzugtes TODO-Schlagwort. Setzen Sie mit `/A`, `/B`, `/C` Prioritäten.
+ - NOW [#A] Ein Crashkurs über "Wie macht man Notizen?"
+ - LATER [#A] Ein Video von [:a {:href "https://twitter.com/shuomi3" :target "_blank"} "@shuomi3"] schauen, wie man mit Logseq Notizen macht und sich organisiert:
+ {{youtube https://www.youtube.com/watch?v=BhHfF0P9A80&ab_channel=ShuOmi}}
+ - DONE Eine Seite erstellen
+ - CANCELED [#C] Eine Seite mit über 1000 Blöcken schreiben
+- ---
+- Das war's! Erstellen Sie mehr Stichpunkte oder öffnen Sie einen lokalen Ordner, um Notizen zu importieren!
+ ---
+ #+BEGIN_TIP
+ Logseq läuft auf PCs genauso wie auf Smartphones. Sie können die App von [https://logseq.com/downloads](https://logseq.com/downloads) auf Ihre anderen Geräte holen.
+ #+END_TIP
From ac1e0982b52b1a9a84e5a76887f57a1932c164e0 Mon Sep 17 00:00:00 2001
From: einmeterhecht <119974780+einmeterhecht@users.noreply.github.com>
Date: Sun, 30 Jul 2023 12:05:40 +0200
Subject: [PATCH 05/63] Link to german tutorial in de.edn
And not to the english one
---
src/resources/dicts/de.edn | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/resources/dicts/de.edn b/src/resources/dicts/de.edn
index 341574721ad8..bf9d862de5e3 100644
--- a/src/resources/dicts/de.edn
+++ b/src/resources/dicts/de.edn
@@ -444,8 +444,8 @@
:tips/all-done "Alles erledigt!"
- :tutorial/text #resource "tutorials/tutorial-en.md"
- :tutorial/dummy-notes #resource "tutorials/dummy-notes-en.md"
+ :tutorial/text #resource "tutorials/tutorial-de.md"
+ :tutorial/dummy-notes #resource "tutorials/dummy-notes-de.md"
:whiteboard/add-block-or-page "Block oder Seite hinzufügen"
:whiteboard/align-bottom "Am unteren Rand ausrichten"
From cf6333d5e4a407e187e7e35a1e8aa443535d129b Mon Sep 17 00:00:00 2001
From: Konstantinos Kaloutas
Date: Tue, 25 Jul 2023 14:08:07 +0300
Subject: [PATCH 06/63] fix persist when updating existing elements #8706
---
src/main/frontend/extensions/excalidraw.cljs | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/src/main/frontend/extensions/excalidraw.cljs b/src/main/frontend/extensions/excalidraw.cljs
index 6ff0b005704e..7527f4bbcfd8 100644
--- a/src/main/frontend/extensions/excalidraw.cljs
+++ b/src/main/frontend/extensions/excalidraw.cljs
@@ -1,6 +1,5 @@
(ns frontend.extensions.excalidraw
- (:require [cljs-bean.core :as bean]
- [clojure.string :as string]
+ (:require [clojure.string :as string]
;; NOTE: Always use production build of excalidraw
;; See-also: https://github.com/excalidraw/excalidraw/pull/3330
["@excalidraw/excalidraw/dist/excalidraw.production.min" :refer [Excalidraw serializeAsJSON]]
@@ -108,7 +107,7 @@
(gobj/get app-state "editingElement")
(gobj/get app-state "editingGroupId")
(gobj/get app-state "editingLinearElement"))
- (let [elements->clj (bean/->clj elements)]
+ (let [elements->clj (js->clj elements {:keywordize-keys true})]
(when (and (seq elements->clj)
(not= elements->clj @*elements)) ;; not= requires clj collections
(reset! *elements elements->clj)
From 401078ab183c803dc5afd12adf22c4c16fa29852 Mon Sep 17 00:00:00 2001
From: charlie
Date: Mon, 31 Jul 2023 16:48:05 +0800
Subject: [PATCH 07/63] fix(pdf): incorrect highlights state when update
hlighlight. related #9900
---
src/main/frontend/extensions/pdf/core.cljs | 36 +++++++++++++---------
1 file changed, 22 insertions(+), 14 deletions(-)
diff --git a/src/main/frontend/extensions/pdf/core.cljs b/src/main/frontend/extensions/pdf/core.cljs
index c5920bdbce4d..536607f685f0 100644
--- a/src/main/frontend/extensions/pdf/core.cljs
+++ b/src/main/frontend/extensions/pdf/core.cljs
@@ -260,11 +260,12 @@
rects)]))
(rum/defc ^:large-vars/cleanup-todo pdf-highlight-area-region
- [^js viewer vw-hl hl {:keys [show-ctx-menu! upd-hl!]}]
+ [^js viewer vw-hl hl {:keys [show-ctx-menu!] :as ops}]
- (let [{:keys [id]} hl
+ (let [{:keys [id]} hl
*el (rum/use-ref nil)
*dirty (rum/use-ref nil)
+ *ops-ref (rum/use-ref ops)
open-ctx-menu! (fn [^js/MouseEvent e]
(.preventDefault e)
(when-not (rum/deref *dirty)
@@ -275,7 +276,13 @@
dragstart-handle! (fn [^js e]
(when-let [^js dt (and id (.-dataTransfer e))]
- (.setData dt "text/plain" (str "((" id "))"))))]
+ (.setData dt "text/plain" (str "((" id "))"))))
+ update-hl! (fn [hl] (some-> (rum/deref *ops-ref) (:upd-hl!) (apply [hl])))]
+
+ (rum/use-effect!
+ (fn []
+ (rum/set-ref! *ops-ref ops))
+ [ops])
;; resizable
(rum/use-effect!
@@ -321,7 +328,7 @@
(.removeAttribute target "data-x")
(.removeAttribute target "data-y")
- (upd-hl! hl')) 200))))
+ (update-hl! hl')) 200))))
(js/setTimeout #(rum/set-ref! *dirty false))))
@@ -541,16 +548,17 @@
(let [vw-pos (pdf-utils/scaled-to-vw-pos viewer (:position hl))]
(set-ctx-menu-state! (apply merge (list* {:highlight hl :vw-pos vw-pos :point point} ops)))))
- add-hl! (fn [hl] (when (:id hl)
- ;; fix js object
- (let [highlights (pdf-utils/fix-nested-js highlights)]
- (set-highlights! (conj highlights hl)))
-
- (when-let [vw-pos (and (pdf-assets/area-highlight? hl)
- (pdf-utils/scaled-to-vw-pos viewer (:position hl)))]
- ;; exceptions
- (pdf-assets/persist-hl-area-image$ viewer (:pdf/current @state/state)
- hl nil (:bounding vw-pos)))))
+ add-hl! (fn [hl]
+ (when (:id hl)
+ ;; fix js object
+ (let [highlights (pdf-utils/fix-nested-js highlights)]
+ (set-highlights! (conj highlights hl)))
+
+ (when-let [vw-pos (and (pdf-assets/area-highlight? hl)
+ (pdf-utils/scaled-to-vw-pos viewer (:position hl)))]
+ ;; exceptions
+ (pdf-assets/persist-hl-area-image$ viewer (:pdf/current @state/state)
+ hl nil (:bounding vw-pos)))))
upd-hl! (fn [hl]
(let [highlights (pdf-utils/fix-nested-js highlights)]
From 97fad3e349c53991c18d6f8cafb44a0f955da2a3 Mon Sep 17 00:00:00 2001
From: atxulo <6602781+atxulo@users.noreply.github.com>
Date: Tue, 1 Aug 2023 15:20:19 +0200
Subject: [PATCH 08/63] Enhance: Improvements in Spanish translation (#9896)
* Improvements in Spanish translation
* Update es.edn, merged #9732
---------
Co-authored-by: Gabriel Horner <97210743+logseq-cldwalker@users.noreply.github.com>
---
src/resources/dicts/es.edn | 32 ++++++++++++++++----------------
1 file changed, 16 insertions(+), 16 deletions(-)
diff --git a/src/resources/dicts/es.edn b/src/resources/dicts/es.edn
index 7d1a5699782b..34bbc58b1eef 100644
--- a/src/resources/dicts/es.edn
+++ b/src/resources/dicts/es.edn
@@ -23,7 +23,7 @@
:export-opml "Exportar a OPML"
:export-page "Exportar página"
:export-public-pages "Exportar páginas públicas"
- :export-roam-json "Export a Roam JSON"
+ :export-roam-json "Exportar a Roam JSON"
:export-save-to-file "Guardar a archivo"
:export-transparent-background "Fondo transparente"
:graph "Grafo"
@@ -165,13 +165,13 @@
:command.editor/insert-link "Enlace html"
:command.editor/insert-youtube-timestamp "Insertar marca de tiempo de YouTube"
:command.editor/italics "Cursiva"
- :command.editor/kill-line-after "Borrar linea despues del cursor"
- :command.editor/kill-line-before "Borrar linea antes del cursor"
+ :command.editor/kill-line-after "Borrar línea despues del cursor"
+ :command.editor/kill-line-before "Borrar línea antes del cursor"
:command.editor/left "Mover cursor a la izquierda / Abrir bloque seleccionado al inicio"
:command.editor/move-block-down "Mover bloque abajo"
:command.editor/move-block-up "Mover bloque arriba"
:command.editor/new-block "Crear bloque nuevo"
- :command.editor/new-line "Nueva linea en bloque"
+ :command.editor/new-line "Nueva línea en bloque"
:command.editor/new-whiteboard "Nueva pizarra"
:command.editor/open-edit "Editar bloque seleccionado"
:command.editor/open-file-in-default-app "Abrir archivo en aplicación por defecto"
@@ -312,10 +312,10 @@
:file-rn/format-deprecated "Está utilizando un formato obsoleto. Se recomienda actualizar al formato más reciente. Realice una copia de seguridad de sus datos y cierre los clientes de Logseq en otros dispositivos antes de la operación."
:file-rn/instruct-1 "Actualizar el formato de nombre es un proceso de 2 pasos:"
:file-rn/instruct-2 "1. Clic "
- :file-rn/instruct-3 "2. Siga las intrucciones indicadas abajo para renombrar los archivos al nuevo formato: "
+ :file-rn/instruct-3 "2. Siga las instrucciones indicadas abajo para renombrar los archivos al nuevo formato: "
:file-rn/legend "🟢 Acciones de cambio de nombre opcionales; 🟡 Cambio de nombre obligatorio para evitar el cambio de título; 🔴 Cambio destructor."
:file-rn/need-action "Se sugieren acciones de cambio de nombre de archivo para que coincidan con el nuevo formato. Cuando se sincronicen los archivos renombrados se requiere volver a indexar en todos los dispositivos."
- :file-rn/no-action "¡Bien hecho! No se necesario realizar más acciones."
+ :file-rn/no-action "¡Bien hecho! No es necesario realizar más acciones."
:file-rn/optional-rename "Sugerencia: "
:file-rn/or-select-actions-2 ". Estas acciones no estarán disponibles una vez cierres este panel."
:file-rn/or-select-actions " o cambie el nombre de los archivos a continuación individualmente, luego "
@@ -327,7 +327,7 @@
:file-rn/suggest-rename "Acción necesaria: "
:file-rn/unreachable-title "¡Advertencia! El nombre de la página se convertirá en {1} en el formato de nombre de archivo actual, a no ser que la propiedad `title::` se establezca manualmente"
:file-sync/graph-deleted "El gráfico remoto actual se ha eliminado"
- :file-sync/other-user-graph "El gráfico local actual está unido al gráfico remoto de otro usuario. Así que no se puede empezar a sincronizar"
+ :file-sync/other-user-graph "El gráfico local actual está unido al gráfico remoto de otro usuario, así que no se puede empezar a sincronizar"
:file-sync/rsapi-cannot-upload-err "Incapaz de comenzar la sincronización, comprueba si el tiempo local es correcto."
:file/validate-existing-file-error "La página existe en otro archivo: {1}, archivo actual: {2}. Por favor conserva solo uno de ellos y reindexa tu grafo. "
:flashcards/modal-btn-forgotten "Olvidado"
@@ -346,7 +346,7 @@
:flashcards/modal-select-switch "Cambiar a"
:flashcards/modal-toggle-preview-mode "Alternar modo de vista previa"
:flashcards/modal-toggle-random-mode "Alternar modo aleatorio"
- :flashcards/modal-welcome-desc-1 "Puedes agregar \"#card\" a cualquier bloque para conertirlo en una tarjeta o ejecutar \"/cloze\" para agregar algunos clozes."
+ :flashcards/modal-welcome-desc-1 "Puedes agregar \"#card\" a cualquier bloque para convertirlo en una tarjeta o ejecutar \"/cloze\" para agregar algunos clozes."
:flashcards/modal-welcome-desc-2 "Puedes"
:flashcards/modal-welcome-desc-3 "dar clic en este enlace"
:flashcards/modal-welcome-desc-4 " para revisar la documentación."
@@ -453,12 +453,12 @@
:on-boarding/tour-whiteboard-btn-finish "Terminar"
:on-boarding/tour-whiteboard-btn-next "Siguiente"
:on-boarding/tour-whiteboard-home "{1} Hogar para tus pizarras"
- :on-boarding/tour-whiteboard-home-description "Las pizarras tienen su propia section en la aplicación donde puedes darles un vistazo, crear nuevas o eliminarlas fácilmente."
- :on-boarding/tour-whiteboard-new "{1} Crear una pizarra nueva"
+ :on-boarding/tour-whiteboard-home-description "Las pizarras tienen su propia sección en la aplicación donde puedes darles un vistazo, crear nuevas o eliminarlas fácilmente."
+ :on-boarding/tour-whiteboard-new "{1} Crear una pizarra nueva"
:on-boarding/tour-whiteboard-new-description "Existen muchas formas de crear una pizarra nueva. Una de ellas está siempre aquí en el panel."
:on-boarding/welcome-whiteboard-modal-description "Las pizarras son una gran herramienta para lluvia de ideas y organización. Ahora puedes colocar cualquiera de tus pensamientos de la base de conocimiento o nuevos uno al lado del otro en un lienzo espacial para conectarlos, asociarlos y entenderlos de nuevas maneras."
:on-boarding/welcome-whiteboard-modal-skip "Saltar"
- :on-boarding/welcome-whiteboard-modal-start "Comenzar a pizarrear"
+ :on-boarding/welcome-whiteboard-modal-start "Comenzar a utilizar la pizarra"
:on-boarding/welcome-whiteboard-modal-title "Un nuevo lienzo para tus pensamientos."
:page/add-to-favorites "Añadir a Favoritos"
:page/backlinks "Vínculos de retroceso"
@@ -579,12 +579,12 @@
:select/default-prompt "Seleccione uno"
:select/default-select-multiple "Seleccionar uno o varios"
:select.graph/add-graph "Sí, añadir otro grafo"
- :select.graph/empty-placeholder-description "No encontramos un grafo. Querie añadir otro?"
+ :select.graph/empty-placeholder-description "No encontramos un grafo. ¿Quiere añadir otro?"
:select.graph/prompt "Seleccione un grafo"
:settings-page/alpha-features "Características Alfa"
:settings-page/app-updated "Tu aplicación está actualizada 🎉"
- :settings-page/auto-expand-block-refs "Expandir referencias de bloque automaticamente al hacer un acercamiento"
- :settings-page/auto-expand-block-refs-tip "Esta opción controla si expandir el bloque de referencias automaticamente al hacer un acercamiento."
+ :settings-page/auto-expand-block-refs "Expandir referencias de bloque automáticamente al hacer un acercamiento"
+ :settings-page/auto-expand-block-refs-tip "Esta opción controla si expandir el bloque de referencias automáticamente al hacer un acercamiento."
:settings-page/auto-updater "Auto actualizador"
:settings-page/beta-features "Características Beta"
:settings-page/changelog "¿Qué hay de nuevo?"
@@ -648,7 +648,7 @@
:settings-page/sync-desc-1 "Clic"
:settings-page/sync-desc-2 "aquí"
:settings-page/sync-desc-3 "por instrucciones de cómo configurar y usar Sync."
- :settings-page/sync-diff-merge-desc "Unir actualizaciones locales con archivos remotos automaticamente cuando ocurre un conflicto, en lugar de sobreescribir los archivos remotos"
+ :settings-page/sync-diff-merge-desc "Unir actualizaciones locales con archivos remotos automáticamente cuando ocurre un conflicto, en lugar de sobreescribir los archivos remotos"
:settings-page/sync-diff-merge "Habilitar unión inteligente al sincronizar"
:settings-page/sync-diff-merge-warn "La capacidad de unión inteligente solo se activa en un cliente después de la primera sincronización exitosa con el servidor remoto en el grafo en la nueva versión de LogSeq. Habilita esto en todos los dispositivos para alcanzar la mejor experiencia."
:settings-page/sync "Sincronizar"
@@ -688,7 +688,7 @@
:whiteboard/align-right "Alinear a la derecha"
:whiteboard/align-top "Alinear arriba"
:whiteboard/arrow-head "Cabeza de flecha"
- :whiteboard/auto-resize "Cambiar tamaño automaticamente"
+ :whiteboard/auto-resize "Cambiar tamaño automáticamente"
:whiteboard/bold "Negrita"
:whiteboard/cache-outdated "La caché está desactualizada. Por favor da clic en el botón 'Reindexar' en el menú desplegable del grafo."
:whiteboard/circle "Círculo"
From 486edc31c06a9786ac73d47665190ca16b354846 Mon Sep 17 00:00:00 2001
From: Andelf
Date: Tue, 1 Aug 2023 15:35:12 +0800
Subject: [PATCH 09/63] chore(release): release 0.9.12
---
android/app/build.gradle | 4 ++--
resources/forge.config.js | 2 +-
resources/package.json | 2 +-
src/main/frontend/version.cljs | 2 +-
4 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/android/app/build.gradle b/android/app/build.gradle
index 3975ba2910d6..8d7ab3c193ff 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -6,8 +6,8 @@ android {
applicationId "com.logseq.app"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
- versionCode 64
- versionName "0.9.11"
+ versionCode 65
+ versionName "0.9.12"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
aaptOptions {
// Files and dirs to omit from the packaged assets dir, modified to accommodate modern web apps.
diff --git a/resources/forge.config.js b/resources/forge.config.js
index bb02f7a3227c..e8e7967450e1 100644
--- a/resources/forge.config.js
+++ b/resources/forge.config.js
@@ -4,7 +4,7 @@ module.exports = {
packagerConfig: {
name: 'Logseq',
icon: './icons/logseq_big_sur.icns',
- buildVersion: 64,
+ buildVersion: 65,
protocols: [
{
"protocol": "logseq",
diff --git a/resources/package.json b/resources/package.json
index 8f1d4057e7e5..da8b1cf462f6 100644
--- a/resources/package.json
+++ b/resources/package.json
@@ -1,7 +1,7 @@
{
"name": "Logseq",
"productName": "Logseq",
- "version": "0.9.11",
+ "version": "0.9.12",
"main": "electron.js",
"author": "Logseq",
"license": "AGPL-3.0",
diff --git a/src/main/frontend/version.cljs b/src/main/frontend/version.cljs
index 7f43f3c0b3d1..50595439b388 100644
--- a/src/main/frontend/version.cljs
+++ b/src/main/frontend/version.cljs
@@ -1,3 +1,3 @@
(ns ^:no-doc frontend.version)
-(defonce version "0.9.11")
+(defonce version "0.9.12")
From e40f595a1d255cab9661c9a15eaf5d08182b7f37 Mon Sep 17 00:00:00 2001
From: Tienson Qin
Date: Wed, 2 Aug 2023 01:02:35 +0800
Subject: [PATCH 10/63] Fix/markdown heading export (#9967)
* fix: top heading if it's the first block
---
src/main/frontend/modules/file/core.cljs | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/src/main/frontend/modules/file/core.cljs b/src/main/frontend/modules/file/core.cljs
index 59fb35662d98..17991cf86fb4 100644
--- a/src/main/frontend/modules/file/core.cljs
+++ b/src/main/frontend/modules/file/core.cljs
@@ -48,8 +48,10 @@
(str content "\n"))
:else
- (let [markdown-top-heading? (and markdown?
- (= parent page)
+ (let [
+ ;; first block is a heading, Markdown users prefer to remove the `-` before the content
+ markdown-top-heading? (and markdown?
+ (= parent page left)
heading)
[prefix spaces-tabs]
(cond
From 4b4b4e88719aff4beab63c03b4de75480aa38e8b Mon Sep 17 00:00:00 2001
From: Andelf
Date: Wed, 2 Aug 2023 01:03:25 +0800
Subject: [PATCH 11/63] chore(release): bump version 0.9.13
---
android/app/build.gradle | 4 ++--
ios/App/App.xcodeproj/project.pbxproj | 8 ++++----
resources/forge.config.js | 2 +-
resources/package.json | 2 +-
src/main/frontend/version.cljs | 2 +-
5 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/android/app/build.gradle b/android/app/build.gradle
index 8d7ab3c193ff..5fd524937875 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -6,8 +6,8 @@ android {
applicationId "com.logseq.app"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
- versionCode 65
- versionName "0.9.12"
+ versionCode 66
+ versionName "0.9.13"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
aaptOptions {
// Files and dirs to omit from the packaged assets dir, modified to accommodate modern web apps.
diff --git a/ios/App/App.xcodeproj/project.pbxproj b/ios/App/App.xcodeproj/project.pbxproj
index dd1d1752a149..83afec363d5e 100644
--- a/ios/App/App.xcodeproj/project.pbxproj
+++ b/ios/App/App.xcodeproj/project.pbxproj
@@ -519,7 +519,7 @@
INFOPLIST_FILE = App/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
- MARKETING_VERSION = 0.9.12;
+ MARKETING_VERSION = 0.9.13;
OTHER_SWIFT_FLAGS = "$(inherited) \"-D\" \"COCOAPODS\" \"-DDEBUG\"";
PRODUCT_BUNDLE_IDENTIFIER = com.logseq.logseq;
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -546,7 +546,7 @@
INFOPLIST_FILE = App/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
- MARKETING_VERSION = 0.9.12;
+ MARKETING_VERSION = 0.9.13;
PRODUCT_BUNDLE_IDENTIFIER = com.logseq.logseq;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "";
@@ -571,7 +571,7 @@
INFOPLIST_KEY_NSHumanReadableCopyright = "";
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
- MARKETING_VERSION = 0.9.12;
+ MARKETING_VERSION = 0.9.13;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = com.logseq.logseq.ShareViewController;
@@ -598,7 +598,7 @@
INFOPLIST_KEY_NSHumanReadableCopyright = "";
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
- MARKETING_VERSION = 0.9.12;
+ MARKETING_VERSION = 0.9.13;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = com.logseq.logseq.ShareViewController;
PRODUCT_NAME = "$(TARGET_NAME)";
diff --git a/resources/forge.config.js b/resources/forge.config.js
index e8e7967450e1..c27715e1a12a 100644
--- a/resources/forge.config.js
+++ b/resources/forge.config.js
@@ -4,7 +4,7 @@ module.exports = {
packagerConfig: {
name: 'Logseq',
icon: './icons/logseq_big_sur.icns',
- buildVersion: 65,
+ buildVersion: 66,
protocols: [
{
"protocol": "logseq",
diff --git a/resources/package.json b/resources/package.json
index da8b1cf462f6..f7e41ef12d75 100644
--- a/resources/package.json
+++ b/resources/package.json
@@ -1,7 +1,7 @@
{
"name": "Logseq",
"productName": "Logseq",
- "version": "0.9.12",
+ "version": "0.9.13",
"main": "electron.js",
"author": "Logseq",
"license": "AGPL-3.0",
diff --git a/src/main/frontend/version.cljs b/src/main/frontend/version.cljs
index 50595439b388..e9a54c05323f 100644
--- a/src/main/frontend/version.cljs
+++ b/src/main/frontend/version.cljs
@@ -1,3 +1,3 @@
(ns ^:no-doc frontend.version)
-(defonce version "0.9.12")
+(defonce version "0.9.13")
From bc4b09d877ee4c09552a65ae289786171a0746aa Mon Sep 17 00:00:00 2001
From: Andelf
Date: Wed, 2 Aug 2023 18:05:39 +0800
Subject: [PATCH 12/63] fix(editor): display of embedded drawing
See-also #9533
---
src/main/frontend/extensions/excalidraw.cljs | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/src/main/frontend/extensions/excalidraw.cljs b/src/main/frontend/extensions/excalidraw.cljs
index 7527f4bbcfd8..c6fdc3a8cd42 100644
--- a/src/main/frontend/extensions/excalidraw.cljs
+++ b/src/main/frontend/extensions/excalidraw.cljs
@@ -41,7 +41,10 @@
nil
(.. el -classList (contains "block-content"))
- (let [width (.-clientWidth el)]
+ (let [client-width (.-clientWidth el)
+ width (if (zero? client-width)
+ (.-width (.-getBoundingClientRect el))
+ client-width)]
(reset! (::draw-width state) width))
:else
From a254775a81964225fe08debfccff44ee41931f11 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Thu, 3 Aug 2023 21:00:34 +0800
Subject: [PATCH 13/63] chore(deps): bump word-wrap from 1.2.3 to 1.2.5 in
/tldraw (#9915)
Bumps [word-wrap](https://github.com/jonschlinkert/word-wrap) from 1.2.3 to 1.2.5.
- [Release notes](https://github.com/jonschlinkert/word-wrap/releases)
- [Commits](https://github.com/jonschlinkert/word-wrap/compare/1.2.3...1.2.5)
---
updated-dependencies:
- dependency-name: word-wrap
dependency-type: indirect
...
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
tldraw/yarn.lock | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/tldraw/yarn.lock b/tldraw/yarn.lock
index 1d88823bb2e9..1ea6196f491a 100644
--- a/tldraw/yarn.lock
+++ b/tldraw/yarn.lock
@@ -4918,9 +4918,9 @@ which@^3.0.0:
isexe "^2.0.0"
word-wrap@^1.2.3:
- version "1.2.3"
- resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
- integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
+ version "1.2.5"
+ resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34"
+ integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==
wrap-ansi@^6.2.0:
version "6.2.0"
From ade8848e4a2ae4fcbdb4a0af31e0cc29692900ad Mon Sep 17 00:00:00 2001
From: Konstantinos Kaloutas
Date: Wed, 5 Jul 2023 17:03:24 +0300
Subject: [PATCH 14/63] wip: right sidebar
---
src/main/frontend/components/container.css | 29 +++++++++++++++----
.../frontend/components/right_sidebar.cljs | 22 +++++++-------
.../frontend/components/right_sidebar.css | 7 +++--
src/main/frontend/extensions/graph.css | 5 ++++
4 files changed, 46 insertions(+), 17 deletions(-)
diff --git a/src/main/frontend/components/container.css b/src/main/frontend/components/container.css
index d8b1acb57eac..257b514791a5 100644
--- a/src/main/frontend/components/container.css
+++ b/src/main/frontend/components/container.css
@@ -531,14 +531,13 @@ html[data-theme='dark'] {
.cp__right-sidebar {
z-index: var(--ls-z-index-level-1);
transition: width 0.3s;
- background-color: var(--ls-secondary-background-color, #d8e1e8);
position: relative;
user-select: none;
.resizer {
@apply absolute top-0 bottom-0;
touch-action: none;
- left: 0;
+ left: 2px;
width: 4px;
user-select: none;
cursor: col-resize !important;
@@ -592,7 +591,6 @@ html[data-theme='dark'] {
top: 0;
left: 0;
right: 0;
- background-color: var(--ls-secondary-background-color, #d8e1e8);
z-index: 999;
user-select: none;
-webkit-app-region: drag;
@@ -622,16 +620,37 @@ html[data-theme='dark'] {
}
.sidebar-item {
- @apply p-4;
+ overflow: hidden;
+ flex: 1 1 auto;
+ min-height: 140px;
+
+ &.collapsed {
+ flex: 0;
+ overflow: initial;
+ min-height: initial;
+ }
+
+ .initial {
+ flex: 1;
+ }
.close {
transform: scale(0.8);
- transition: transform 0.1s;
+ transition: transform 0.1s, opacity 0.1s;
+ visibility: hidden;
+ opacity: 0;
&:hover {
transform: scale(1);
}
}
+
+ &:hover {
+ .close {
+ visibility: visible;
+ opacity: 1;
+ }
+ }
}
}
diff --git a/src/main/frontend/components/right_sidebar.cljs b/src/main/frontend/components/right_sidebar.cljs
index dd0cb20360e7..263d115b0b0a 100644
--- a/src/main/frontend/components/right_sidebar.cljs
+++ b/src/main/frontend/components/right_sidebar.cljs
@@ -186,19 +186,21 @@
[repo idx db-id block-type]
(let [item (build-sidebar-item repo idx db-id block-type)]
(when item
- (let [collapse? (state/sub [:ui/sidebar-collapsed-blocks db-id])]
- [:div.sidebar-item.content.color-level.px-4.shadow-md
+ (let [collapsed? (state/sub [:ui/sidebar-collapsed-blocks db-id])]
+ [:div.flex.sidebar-item.content.color-level.shadow-md {:class (when collapsed? "collapsed")}
(let [[title component] item]
- [:div.flex.flex-col
- [:div.flex.flex-row.justify-between
+ [:div.flex.flex-col.w-full
+ [:button.flex.flex-row.justify-between.p-4
+ {:on-click (fn [e]
+ (.preventDefault e)
+ (state/sidebar-block-toggle-collapse! db-id))}
[:div.flex.flex-row.justify-center
- [:a.opacity-50.hover:opacity-100.flex.items-center.pr-1
- {:on-click #(state/sidebar-block-toggle-collapse! db-id)}
- (ui/rotating-arrow collapse?)]
+ [:span.opacity-50.hover:opacity-100.flex.items-center.pr-1
+ (ui/rotating-arrow collapsed?)]
[:div.ml-1.font-medium
title]]
(close #(state/sidebar-remove-block! idx))]
- [:div {:class (if collapse? "hidden" "initial")}
+ [:div.scrollbar-spacing.p-4 {:class (if collapsed? "hidden" "initial")}
component]])]))))
(defn- get-page
@@ -336,12 +338,12 @@
(state/sidebar-add-block! repo "help" :help))}
(t :right-side-bar/help)]]
- (when config/dev? [:div.text-sm
+ (when (and config/dev? (state/sub [:ui/developer-mode?])) [:div.text-sm
[:button.button.cp__right-sidebar-settings-btn {:on-click (fn [_e]
(state/sidebar-add-block! repo "history" :history))}
(t :right-side-bar/history)]])]]
- [:.sidebar-item-list.flex-1.scrollbar-spacing.flex.flex-col.gap-2
+ [:.sidebar-item-list.flex-1.flex.flex-col.gap-2.pb-2.mx-2
(if @*anim-finished?
(for [[idx [repo db-id block-type]] (medley/indexed blocks)]
(rum/with-key
diff --git a/src/main/frontend/components/right_sidebar.css b/src/main/frontend/components/right_sidebar.css
index db1b78590035..48a23782a662 100644
--- a/src/main/frontend/components/right_sidebar.css
+++ b/src/main/frontend/components/right_sidebar.css
@@ -11,8 +11,11 @@ html[data-theme=light] {
}
}
+.cp__right-sidebar-settings-btn {
+ background-color: var(--ls-secondary-background-color);
+}
+
.sidebar-item-list {
- padding-bottom: 150px;
height: calc(100vh - 48px);
}
@@ -27,7 +30,7 @@ html[data-theme=light] a.toggle:hover {
}
html[data-theme=dark] {
- .cp__header a, .cp__header button, .cp__right-sidebar-topbar button {
+ .cp__header a, .cp__header button {
opacity: 0.7;
}
}
diff --git a/src/main/frontend/extensions/graph.css b/src/main/frontend/extensions/graph.css
index a0a163575961..0253733c84ce 100644
--- a/src/main/frontend/extensions/graph.css
+++ b/src/main/frontend/extensions/graph.css
@@ -8,6 +8,11 @@
z-index: 4;
}
+
.graph {
+ height: 500px;
+}
+
+#main-content-container.graph {
height: calc(100vh - 100px) !important;
}
From dffa2ace68844a24c48d3e3dad4265a504a2ba80 Mon Sep 17 00:00:00 2001
From: Konstantinos Kaloutas
Date: Wed, 5 Jul 2023 17:10:41 +0300
Subject: [PATCH 15/63] fix: graph height
---
src/main/frontend/extensions/graph.css | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/main/frontend/extensions/graph.css b/src/main/frontend/extensions/graph.css
index 0253733c84ce..09a61d1e88f2 100644
--- a/src/main/frontend/extensions/graph.css
+++ b/src/main/frontend/extensions/graph.css
@@ -13,6 +13,6 @@
height: 500px;
}
-#main-content-container.graph {
+#main-content-container .graph {
height: calc(100vh - 100px) !important;
}
From ee541e6f300dc13e1d88b24a02282579de7a1ef4 Mon Sep 17 00:00:00 2001
From: Konstantinos Kaloutas
Date: Wed, 5 Jul 2023 17:31:49 +0300
Subject: [PATCH 16/63] re-enable scrolling on list
---
src/main/frontend/components/right_sidebar.cljs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/main/frontend/components/right_sidebar.cljs b/src/main/frontend/components/right_sidebar.cljs
index 263d115b0b0a..9375c83c2bc5 100644
--- a/src/main/frontend/components/right_sidebar.cljs
+++ b/src/main/frontend/components/right_sidebar.cljs
@@ -343,7 +343,7 @@
(state/sidebar-add-block! repo "history" :history))}
(t :right-side-bar/history)]])]]
- [:.sidebar-item-list.flex-1.flex.flex-col.gap-2.pb-2.mx-2
+ [:.sidebar-item-list.flex-1.scrollbar-spacing.flex.flex-col.gap-2.pb-2.mx-2
(if @*anim-finished?
(for [[idx [repo db-id block-type]] (medley/indexed blocks)]
(rum/with-key
From 6b50f874bbdf171fd41a06bd39310b964d816ab7 Mon Sep 17 00:00:00 2001
From: Konstantinos Kaloutas
Date: Wed, 5 Jul 2023 19:02:49 +0300
Subject: [PATCH 17/63] style: indentation
---
src/main/frontend/components/right_sidebar.cljs | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/src/main/frontend/components/right_sidebar.cljs b/src/main/frontend/components/right_sidebar.cljs
index 9375c83c2bc5..31494576366e 100644
--- a/src/main/frontend/components/right_sidebar.cljs
+++ b/src/main/frontend/components/right_sidebar.cljs
@@ -338,10 +338,11 @@
(state/sidebar-add-block! repo "help" :help))}
(t :right-side-bar/help)]]
- (when (and config/dev? (state/sub [:ui/developer-mode?])) [:div.text-sm
- [:button.button.cp__right-sidebar-settings-btn {:on-click (fn [_e]
- (state/sidebar-add-block! repo "history" :history))}
- (t :right-side-bar/history)]])]]
+ (when (and config/dev? (state/sub [:ui/developer-mode?]))
+ [:div.text-sm
+ [:button.button.cp__right-sidebar-settings-btn {:on-click (fn [_e]
+ (state/sidebar-add-block! repo "history" :history))}
+ (t :right-side-bar/history)]])]]
[:.sidebar-item-list.flex-1.scrollbar-spacing.flex.flex-col.gap-2.pb-2.mx-2
(if @*anim-finished?
From 3bfba8fb7c09a200091af36e99a5631f0403dae1 Mon Sep 17 00:00:00 2001
From: Konstantinos Kaloutas
Date: Wed, 5 Jul 2023 19:12:00 +0300
Subject: [PATCH 18/63] fix: always expand block when added to sidebar
---
src/main/frontend/state.cljs | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/main/frontend/state.cljs b/src/main/frontend/state.cljs
index 20a1d5486bc5..d0811dd02020 100644
--- a/src/main/frontend/state.cljs
+++ b/src/main/frontend/state.cljs
@@ -1087,6 +1087,7 @@ Similar to re-frame subscriptions"
(->> (remove #(= (second %) db-id) blocks)
(cons [repo db-id block-type])
(distinct))))
+ (set-state! [:ui/sidebar-collapsed-blocks db-id] false)
(open-right-sidebar!)
(when-let [elem (gdom/getElementByClass "sidebar-item-list")]
(util/scroll-to elem 0)))))
From 99bef71704fff5d7222b1f19ef83ca602dbb87b2 Mon Sep 17 00:00:00 2001
From: Konstantinos Kaloutas
Date: Thu, 6 Jul 2023 13:13:34 +0300
Subject: [PATCH 19/63] fix: show close button on mobile
---
src/main/frontend/components/container.css | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/main/frontend/components/container.css b/src/main/frontend/components/container.css
index 257b514791a5..ad9d8e11ce3f 100644
--- a/src/main/frontend/components/container.css
+++ b/src/main/frontend/components/container.css
@@ -644,7 +644,8 @@ html[data-theme='dark'] {
transform: scale(1);
}
}
-
+
+ .is-mobile &,
&:hover {
.close {
visibility: visible;
From 775825d7298ab6f31ad45c43b447f29dccae52c6 Mon Sep 17 00:00:00 2001
From: Konstantinos Kaloutas
Date: Thu, 6 Jul 2023 18:31:15 +0300
Subject: [PATCH 20/63] wip: right sidebar
---
src/main/frontend/components/container.css | 39 +++++++++++++++++--
.../frontend/components/right_sidebar.cljs | 33 +++++++++++++---
.../frontend/components/right_sidebar.css | 6 ++-
src/main/frontend/components/theme.css | 9 ++---
4 files changed, 72 insertions(+), 15 deletions(-)
diff --git a/src/main/frontend/components/container.css b/src/main/frontend/components/container.css
index ad9d8e11ce3f..9100d1abc1b5 100644
--- a/src/main/frontend/components/container.css
+++ b/src/main/frontend/components/container.css
@@ -82,7 +82,6 @@
width: var(--ls-left-sidebar-sm-width);
overflow-y: auto;
overflow-x: hidden;
- background-color: var(--ls-primary-background-color);
transition: transform .3s;
transform: translate3d(-100%, 0, 0);
z-index: 3;
@@ -621,14 +620,48 @@ html[data-theme='dark'] {
.sidebar-item {
overflow: hidden;
- flex: 1 1 auto;
- min-height: 140px;
+ flex: 1 1;
+ min-height: 100px;
+ border: 1px solid transparent;
+ transition: border-color 0.1s;
+
+ .sidebar-item-header {
+ white-space: nowrap;
+ overflow: hidden;
+ .breadcrumb {
+ margin-top: 0;
+ margin-bottom: 0;
+ }
+ }
+
+ &.drag-over {
+ border-color: var(--ls-active-primary-color);
+ }
+
+ &.item-type-block .sidebar-item-header {
+ background: linear-gradient(0deg, var(--ls-secondary-background-color), var(--ls-tertiary-background-color));
+ }
+
&.collapsed {
flex: 0;
overflow: initial;
min-height: initial;
+
+ &.item-type-block .sidebar-item-header {
+ background: var(--ls-tertiary-background-color);
+ }
+ }
+
+ /*
+ &:not(:hover) {
+ ::-webkit-scrollbar-thumb,
+ ::-webkit-scrollbar,
+ ::-webkit-scrollbar-thumb:active {
+ background-color: transparent;
+ }
}
+ */
.initial {
flex: 1;
diff --git a/src/main/frontend/components/right_sidebar.cljs b/src/main/frontend/components/right_sidebar.cljs
index 31494576366e..9597a6bd8f37 100644
--- a/src/main/frontend/components/right_sidebar.cljs
+++ b/src/main/frontend/components/right_sidebar.cljs
@@ -182,17 +182,40 @@
(assoc :class class))
svg/close]))
+(defonce *drag-to
+ (atom nil))
+
+(defonce *drag-from
+ (atom nil))
+
(rum/defc sidebar-item < rum/reactive
[repo idx db-id block-type]
- (let [item (build-sidebar-item repo idx db-id block-type)]
+ (let [item (build-sidebar-item repo idx db-id block-type)
+ drag-to (rum/react *drag-to)
+ drag-from (rum/react *drag-from)]
(when item
(let [collapsed? (state/sub [:ui/sidebar-collapsed-blocks db-id])]
- [:div.flex.sidebar-item.content.color-level.shadow-md {:class (when collapsed? "collapsed")}
+ [:div.flex.sidebar-item.content.color-level.shadow-md.rounded
+ {:class [(str "item-type-" (name block-type))
+ (when collapsed? "collapsed")
+ (when (and (= idx drag-to) (not= drag-to drag-from)) "drag-over")]
+ :on-drag-over #(reset! *drag-to idx)}
(let [[title component] item]
[:div.flex.flex-col.w-full
- [:button.flex.flex-row.justify-between.p-4
- {:on-click (fn [e]
- (.preventDefault e)
+ [:button.flex.flex-row.justify-between.p-2.sidebar-item-header.color-level
+ {:draggable true
+ :on-drag-leave #(reset! *drag-to nil)
+ :on-drag-over #(reset! *drag-to idx)
+ :on-drag-start (fn [event]
+ (.setData (gobj/get event "dataTransfer")
+ "block-dom-id"
+ db-id)
+ (reset! *drag-from idx))
+ :on-drag-end (fn [_event]
+ (reset! *drag-to nil)
+ (reset! *drag-from nil))
+ :on-click (fn [event]
+ (.preventDefault event)
(state/sidebar-block-toggle-collapse! db-id))}
[:div.flex.flex-row.justify-center
[:span.opacity-50.hover:opacity-100.flex.items-center.pr-1
diff --git a/src/main/frontend/components/right_sidebar.css b/src/main/frontend/components/right_sidebar.css
index 48a23782a662..f9d1b44c7b9c 100644
--- a/src/main/frontend/components/right_sidebar.css
+++ b/src/main/frontend/components/right_sidebar.css
@@ -24,11 +24,15 @@ html[data-theme=light] a.toggle:hover {
color: var(--ls-primary-text-color);
}
-.cp__header a, .cp__header button, .cp__right-sidebar-topbar button {
+.cp__header a, .cp__header button {
opacity: 1;
color: var(--ls-header-button-background);
}
+.cp__right-sidebar-topbar button {
+ opacity: 1;
+}
+
html[data-theme=dark] {
.cp__header a, .cp__header button {
opacity: 0.7;
diff --git a/src/main/frontend/components/theme.css b/src/main/frontend/components/theme.css
index f35d65c38a31..e8470658dded 100644
--- a/src/main/frontend/components/theme.css
+++ b/src/main/frontend/components/theme.css
@@ -17,17 +17,14 @@ html {
::-webkit-scrollbar {
background-color: var(--ls-scrollbar-background-color);
+ width: var(--ls-scrollbar-width);
+ height: 8px;
}
::-webkit-scrollbar-thumb:active {
background-color: var(--ls-scrollbar-thumb-hover-color);
}
-
- ::-webkit-scrollbar {
- width: var(--ls-scrollbar-width);
- height: 8px;
- }
-
+
::-webkit-scrollbar-corner {
background: transparent;
}
From 553a43f370b9384f2083dabb29665d651e620b3f Mon Sep 17 00:00:00 2001
From: Konstantinos Kaloutas
Date: Fri, 7 Jul 2023 13:05:56 +0300
Subject: [PATCH 21/63] support default and custom icons
---
.../frontend/components/right_sidebar.cljs | 51 +++++++++----------
1 file changed, 23 insertions(+), 28 deletions(-)
diff --git a/src/main/frontend/components/right_sidebar.cljs b/src/main/frontend/components/right_sidebar.cljs
index 9597a6bd8f37..3eb4d0c5465a 100644
--- a/src/main/frontend/components/right_sidebar.cljs
+++ b/src/main/frontend/components/right_sidebar.cljs
@@ -61,12 +61,12 @@
(defn- block-with-breadcrumb
[repo block idx sidebar-key ref?]
(when-let [block-id (:block/uuid block)]
- [[:div.mt-1 {:class (if ref? "ml-8" "ml-1")}
+ [[:.flex.items-center {:class (when ref? "ml-8")}
+ (ui/icon "block" {:class "text-md mr-2"})
(block/breadcrumb {:id "block-parent"
:block? true
- :sidebar-key sidebar-key} repo block-id {})]
- [:div.ml-2
- (block-cp repo idx block)]]))
+ :sidebar-key sidebar-key} repo block-id {:indent? false})]
+ (block-cp repo idx block)]))
(rum/defc history-action-info
[[k v]]
@@ -116,18 +116,18 @@
[repo idx db-id block-type]
(case (keyword block-type)
:contents
- [(t :right-side-bar/contents)
+ [[:.flex.items-center (ui/icon "list-details" {:class "text-md mr-2"}) (t :right-side-bar/contents)]
(contents)]
:help
- [(t :right-side-bar/help) (onboarding/help)]
+ [[:.flex.items-center (ui/icon "help" {:class "text-md mr-2"}) (t :right-side-bar/help)] (onboarding/help)]
:page-graph
- [(t :right-side-bar/page-graph)
+ [[:.flex.items-center (ui/icon "chart-bubble" {:class "text-md mr-2"}) (t :right-side-bar/page-graph)]
(page/page-graph)]
:history
- [(t :right-side-bar/history)
+ [[:.flex.items-center (ui/icon "history" {:class "text-md mr-2"}) (t :right-side-bar/history)]
(history)]
:block-ref
@@ -144,20 +144,15 @@
(block-with-breadcrumb repo block idx [repo db-id block-type] false)))
:page
- (when-let [page-name (if (integer? db-id)
- (:block/name (db/entity db-id))
- db-id)]
- [[:a.page-title {:href (if (db-model/whiteboard-page? page-name)
- (rfe/href :whiteboard {:name page-name})
- (rfe/href :page {:name page-name}))
- :draggable true
- :on-drag-start (fn [event] (editor-handler/block->data-transfer! page-name event))
- :on-click (fn [e]
- (when (gobj/get e "shiftKey")
- (.preventDefault e)))}
+ (let [lookup (if (integer? db-id) db-id [:block/uuid db-id])
+ page (db/entity repo lookup)
+ page-name (:block/name page)]
+ [[:.flex.items-center.page-title
+ (if-let [icon (get-in page [:block/properties :icon])]
+ [:.text-md.mr-2 icon]
+ (ui/icon "page" {:class "text-md mr-2"}))
(db-model/get-page-original-name page-name)]
- [:div.ml-2
- (page-cp repo page-name)]])
+ (page-cp repo page-name)])
:page-slide-view
(let [page-name (:block/name (db/entity db-id))]
@@ -195,11 +190,10 @@
drag-from (rum/react *drag-from)]
(when item
(let [collapsed? (state/sub [:ui/sidebar-collapsed-blocks db-id])]
- [:div.flex.sidebar-item.content.color-level.shadow-md.rounded
+ [:div.flex.sidebar-item.content.color-level.shadow-md.rounded
{:class [(str "item-type-" (name block-type))
- (when collapsed? "collapsed")
- (when (and (= idx drag-to) (not= drag-to drag-from)) "drag-over")]
- :on-drag-over #(reset! *drag-to idx)}
+ (when collapsed? "collapsed")
+ (when (and (= idx drag-to) (not= drag-to drag-from)) "drag-over")]}
(let [[title component] item]
[:div.flex.flex-col.w-full
[:button.flex.flex-row.justify-between.p-2.sidebar-item-header.color-level
@@ -207,9 +201,10 @@
:on-drag-leave #(reset! *drag-to nil)
:on-drag-over #(reset! *drag-to idx)
:on-drag-start (fn [event]
- (.setData (gobj/get event "dataTransfer")
- "block-dom-id"
- db-id)
+ (when-let [page-name (if (integer? db-id)
+ (:block/name (db/entity db-id))
+ db-id)]
+ (editor-handler/block->data-transfer! page-name event))
(reset! *drag-from idx))
:on-drag-end (fn [_event]
(reset! *drag-to nil)
From d59fb99a77470a2bdb9b17a40d665753e62e4013 Mon Sep 17 00:00:00 2001
From: Konstantinos Kaloutas
Date: Fri, 7 Jul 2023 14:20:42 +0300
Subject: [PATCH 22/63] fix whiteboard icon
---
src/main/frontend/components/right_sidebar.cljs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/main/frontend/components/right_sidebar.cljs b/src/main/frontend/components/right_sidebar.cljs
index 3eb4d0c5465a..0a65e75f6c7b 100644
--- a/src/main/frontend/components/right_sidebar.cljs
+++ b/src/main/frontend/components/right_sidebar.cljs
@@ -150,7 +150,7 @@
[[:.flex.items-center.page-title
(if-let [icon (get-in page [:block/properties :icon])]
[:.text-md.mr-2 icon]
- (ui/icon "page" {:class "text-md mr-2"}))
+ (ui/icon (if (= "whiteboard" (:block/type page)) "whiteboard" "page") {:class "text-md mr-2"}))
(db-model/get-page-original-name page-name)]
(page-cp repo page-name)])
From 478f20dc9fe80914ac217bc468917c2311c71cee Mon Sep 17 00:00:00 2001
From: Konstantinos Kaloutas
Date: Fri, 7 Jul 2023 15:26:08 +0300
Subject: [PATCH 23/63] fix: header overflow
---
src/main/frontend/components/container.css | 2 ++
src/main/frontend/components/right_sidebar.cljs | 4 ++--
2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/src/main/frontend/components/container.css b/src/main/frontend/components/container.css
index 9100d1abc1b5..e51148e1884a 100644
--- a/src/main/frontend/components/container.css
+++ b/src/main/frontend/components/container.css
@@ -632,6 +632,8 @@ html[data-theme='dark'] {
.breadcrumb {
margin-top: 0;
margin-bottom: 0;
+ text-overflow: ellipsis;
+ overflow: hidden;
}
}
diff --git a/src/main/frontend/components/right_sidebar.cljs b/src/main/frontend/components/right_sidebar.cljs
index 0a65e75f6c7b..c0037f89b7e7 100644
--- a/src/main/frontend/components/right_sidebar.cljs
+++ b/src/main/frontend/components/right_sidebar.cljs
@@ -212,10 +212,10 @@
:on-click (fn [event]
(.preventDefault event)
(state/sidebar-block-toggle-collapse! db-id))}
- [:div.flex.flex-row.justify-center
+ [:div.flex.flex-row.overflow-hidden
[:span.opacity-50.hover:opacity-100.flex.items-center.pr-1
(ui/rotating-arrow collapsed?)]
- [:div.ml-1.font-medium
+ [:div.ml-1.font-medium.overflow-hidden
title]]
(close #(state/sidebar-remove-block! idx))]
[:div.scrollbar-spacing.p-4 {:class (if collapsed? "hidden" "initial")}
From 7a671d6a0ac422d089d46ce9937f2ca8295f3970 Mon Sep 17 00:00:00 2001
From: Konstantinos Kaloutas
Date: Mon, 10 Jul 2023 13:21:04 +0300
Subject: [PATCH 24/63] remove unneeded dependency
---
src/main/frontend/components/right_sidebar.cljs | 1 -
1 file changed, 1 deletion(-)
diff --git a/src/main/frontend/components/right_sidebar.cljs b/src/main/frontend/components/right_sidebar.cljs
index c0037f89b7e7..553b6c0b4223 100644
--- a/src/main/frontend/components/right_sidebar.cljs
+++ b/src/main/frontend/components/right_sidebar.cljs
@@ -19,7 +19,6 @@
[frontend.util :as util]
[frontend.config :as config]
[frontend.modules.editor.undo-redo :as undo-redo]
- [goog.object :as gobj]
[medley.core :as medley]
[reitit.frontend.easy :as rfe]
[rum.core :as rum]))
From c6db111635c16f619ffff47ccd073479af8346db Mon Sep 17 00:00:00 2001
From: Konstantinos Kaloutas
Date: Mon, 10 Jul 2023 13:21:39 +0300
Subject: [PATCH 25/63] fix graph icon
---
src/main/frontend/components/right_sidebar.cljs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/main/frontend/components/right_sidebar.cljs b/src/main/frontend/components/right_sidebar.cljs
index 553b6c0b4223..bb5a3d5f96d5 100644
--- a/src/main/frontend/components/right_sidebar.cljs
+++ b/src/main/frontend/components/right_sidebar.cljs
@@ -122,7 +122,7 @@
[[:.flex.items-center (ui/icon "help" {:class "text-md mr-2"}) (t :right-side-bar/help)] (onboarding/help)]
:page-graph
- [[:.flex.items-center (ui/icon "chart-bubble" {:class "text-md mr-2"}) (t :right-side-bar/page-graph)]
+ [[:.flex.items-center (ui/icon "hierarchy" {:class "text-md mr-2"}) (t :right-side-bar/page-graph)]
(page/page-graph)]
:history
From bf17c700c8d5d217631e342cedc085acb6e36b21 Mon Sep 17 00:00:00 2001
From: Konstantinos Kaloutas
Date: Mon, 10 Jul 2023 18:24:31 +0300
Subject: [PATCH 26/63] add middle click action and context menu
---
src/main/frontend/components/container.css | 22 +++----
.../frontend/components/right_sidebar.cljs | 59 +++++++++++++------
src/main/frontend/state.cljs | 11 ++++
3 files changed, 60 insertions(+), 32 deletions(-)
diff --git a/src/main/frontend/components/container.css b/src/main/frontend/components/container.css
index e51148e1884a..526165eb7ad5 100644
--- a/src/main/frontend/components/container.css
+++ b/src/main/frontend/components/container.css
@@ -644,7 +644,7 @@ html[data-theme='dark'] {
&.item-type-block .sidebar-item-header {
background: linear-gradient(0deg, var(--ls-secondary-background-color), var(--ls-tertiary-background-color));
}
-
+
&.collapsed {
flex: 0;
overflow: initial;
@@ -655,35 +655,31 @@ html[data-theme='dark'] {
}
}
- /*
&:not(:hover) {
::-webkit-scrollbar-thumb,
::-webkit-scrollbar,
::-webkit-scrollbar-thumb:active {
background-color: transparent;
- }
+ }
}
- */
.initial {
flex: 1;
}
- .close {
- transform: scale(0.8);
- transition: transform 0.1s, opacity 0.1s;
- visibility: hidden;
+ .item-actions {
+ @apply h-full invisible;
opacity: 0;
- &:hover {
- transform: scale(1);
+ .button {
+ @apply p-0 pl-2 flex items-center h-full;
}
}
-
+
.is-mobile &,
&:hover {
- .close {
- visibility: visible;
+ .item-actions {
+ @apply visible;
opacity: 1;
}
}
diff --git a/src/main/frontend/components/right_sidebar.cljs b/src/main/frontend/components/right_sidebar.cljs
index bb5a3d5f96d5..b67bd33ff903 100644
--- a/src/main/frontend/components/right_sidebar.cljs
+++ b/src/main/frontend/components/right_sidebar.cljs
@@ -21,7 +21,8 @@
[frontend.modules.editor.undo-redo :as undo-redo]
[medley.core :as medley]
[reitit.frontend.easy :as rfe]
- [rum.core :as rum]))
+ [rum.core :as rum]
+ [frontend.handler.common :as common-handler]))
(rum/defc toggle
[]
@@ -165,23 +166,30 @@
["" [:span]]))
-(defn close
- ([on-close]
- (close nil on-close))
- ([class on-close]
- [:a.close.flex.items-center
- (cond-> {:on-click on-close
- :style {:margin-right -4}}
- class
- (assoc :class class))
- svg/close]))
-
(defonce *drag-to
(atom nil))
(defonce *drag-from
(atom nil))
+(rum/defc context-menu-content
+ [db-id idx collapsed?]
+ [:.menu-links-wrapper
+ (ui/menu-link {:on-click #(state/sidebar-remove-block! idx)} "Close" nil)
+ (ui/menu-link {:on-click #(state/sidebar-remove-rest! db-id)} "Close others" nil)
+ (ui/menu-link {:on-click (fn []
+ (state/clear-sidebar-blocks!)
+ (state/hide-right-sidebar!))} "Close all" nil)
+ [:hr.menu-separator]
+ (ui/menu-link {:on-click #(state/sidebar-block-toggle-collapse! db-id)} (if collapsed? "Expand" "Collapse") nil)
+ (ui/menu-link {:on-click #(state/sidebar-block-collapse-rest! db-id)} "Collapse others" nil)
+ (when (integer? db-id) [:hr.menu-separator])
+ (when (integer? db-id)
+ (let [name (:block/name (db/entity db-id))]
+ (ui/menu-link {:href (if (db-model/whiteboard-page? name)
+ (rfe/href :whiteboard {:name name})
+ (rfe/href :page {:name name}))} "Open as page" nil)))])
+
(rum/defc sidebar-item < rum/reactive
[repo idx db-id block-type]
(let [item (build-sidebar-item repo idx db-id block-type)
@@ -193,30 +201,43 @@
{:class [(str "item-type-" (name block-type))
(when collapsed? "collapsed")
(when (and (= idx drag-to) (not= drag-to drag-from)) "drag-over")]}
- (let [[title component] item]
+ (let [[title component] item
+ page-name (if (integer? db-id)
+ (:block/name (db/entity db-id))
+ db-id)]
[:div.flex.flex-col.w-full
[:button.flex.flex-row.justify-between.p-2.sidebar-item-header.color-level
{:draggable true
:on-drag-leave #(reset! *drag-to nil)
:on-drag-over #(reset! *drag-to idx)
:on-drag-start (fn [event]
- (when-let [page-name (if (integer? db-id)
- (:block/name (db/entity db-id))
- db-id)]
- (editor-handler/block->data-transfer! page-name event))
+ (editor-handler/block->data-transfer! page-name event)
(reset! *drag-from idx))
:on-drag-end (fn [_event]
(reset! *drag-to nil)
(reset! *drag-from nil))
:on-click (fn [event]
(.preventDefault event)
- (state/sidebar-block-toggle-collapse! db-id))}
+ (js/console.log event.which)
+ (state/sidebar-block-toggle-collapse! db-id))
+ :on-mouse-up (fn [event]
+ (when (= (.-which (.-nativeEvent event)) 2)
+ (state/sidebar-remove-block! idx)))
+ :on-context-menu (fn [e]
+ (util/stop e)
+ (common-handler/show-custom-context-menu! e (context-menu-content db-id idx collapsed?)))}
[:div.flex.flex-row.overflow-hidden
[:span.opacity-50.hover:opacity-100.flex.items-center.pr-1
(ui/rotating-arrow collapsed?)]
[:div.ml-1.font-medium.overflow-hidden
title]]
- (close #(state/sidebar-remove-block! idx))]
+ [:.item-actions.flex
+ (ui/dropdown (fn [{:keys [toggle-fn]}]
+ [:button.button {:on-click (fn [e]
+ (util/stop e)
+ (toggle-fn))} (ui/icon "dots")])
+ #(context-menu-content db-id idx collapsed?))
+ [:button.button.close {:on-click #(state/sidebar-remove-block! idx)} (ui/icon "x")]]]
[:div.scrollbar-spacing.p-4 {:class (if collapsed? "hidden" "initial")}
component]])]))))
diff --git a/src/main/frontend/state.cljs b/src/main/frontend/state.cljs
index d0811dd02020..214da97223da 100644
--- a/src/main/frontend/state.cljs
+++ b/src/main/frontend/state.cljs
@@ -1101,6 +1101,12 @@ Similar to re-frame subscriptions"
(when (empty? (:sidebar/blocks @state))
(hide-right-sidebar!)))
+(defn sidebar-remove-rest!
+ [db-id]
+ (update-state! :sidebar/blocks (fn [blocks]
+ (remove #(not= (second %) db-id) blocks)))
+ (set-state! [:ui/sidebar-collapsed-blocks db-id] false))
+
(defn sidebar-replace-block!
[old-sidebar-key new-sidebar-key]
(update-state! :sidebar/blocks (fn [blocks]
@@ -1121,6 +1127,11 @@ Similar to re-frame subscriptions"
(when db-id
(update-state! [:ui/sidebar-collapsed-blocks db-id] not)))
+(defn sidebar-block-collapse-rest!
+ [db-id]
+ (let [items (disj (set (map second (:sidebar/blocks @state))) db-id)]
+ (for [item items] (set-state! [:ui/sidebar-collapsed-blocks item] true))))
+
(defn get-edit-block
[]
(get @state :editor/block))
From d47c4d2c28d09849e0a576002d957467f8f08e83 Mon Sep 17 00:00:00 2001
From: Konstantinos Kaloutas
Date: Mon, 10 Jul 2023 19:28:56 +0300
Subject: [PATCH 27/63] add more context menu actions
---
src/main/frontend/components/right_sidebar.cljs | 7 +++++--
src/main/frontend/state.cljs | 8 +++++++-
2 files changed, 12 insertions(+), 3 deletions(-)
diff --git a/src/main/frontend/components/right_sidebar.cljs b/src/main/frontend/components/right_sidebar.cljs
index b67bd33ff903..2a6177adf8ef 100644
--- a/src/main/frontend/components/right_sidebar.cljs
+++ b/src/main/frontend/components/right_sidebar.cljs
@@ -181,8 +181,12 @@
(state/clear-sidebar-blocks!)
(state/hide-right-sidebar!))} "Close all" nil)
[:hr.menu-separator]
- (ui/menu-link {:on-click #(state/sidebar-block-toggle-collapse! db-id)} (if collapsed? "Expand" "Collapse") nil)
+ (when-not collapsed? (ui/menu-link {:on-click #(state/sidebar-block-toggle-collapse! db-id)} "Collapse" nil))
(ui/menu-link {:on-click #(state/sidebar-block-collapse-rest! db-id)} "Collapse others" nil)
+ (ui/menu-link {:on-click #(state/sidebar-block-set-collapsed-all! true)} "Collapse all" nil)
+ [:hr.menu-separator]
+ (when collapsed? (ui/menu-link {:on-click #(state/sidebar-block-toggle-collapse! db-id)} "Expand" nil))
+ (ui/menu-link {:on-click #(state/sidebar-block-set-collapsed-all! false)} "Expand all" nil)
(when (integer? db-id) [:hr.menu-separator])
(when (integer? db-id)
(let [name (:block/name (db/entity db-id))]
@@ -218,7 +222,6 @@
(reset! *drag-from nil))
:on-click (fn [event]
(.preventDefault event)
- (js/console.log event.which)
(state/sidebar-block-toggle-collapse! db-id))
:on-mouse-up (fn [event]
(when (= (.-which (.-nativeEvent event)) 2)
diff --git a/src/main/frontend/state.cljs b/src/main/frontend/state.cljs
index 214da97223da..918b3bbddf2e 100644
--- a/src/main/frontend/state.cljs
+++ b/src/main/frontend/state.cljs
@@ -1130,7 +1130,13 @@ Similar to re-frame subscriptions"
(defn sidebar-block-collapse-rest!
[db-id]
(let [items (disj (set (map second (:sidebar/blocks @state))) db-id)]
- (for [item items] (set-state! [:ui/sidebar-collapsed-blocks item] true))))
+ (doseq [item items] (set-state! [:ui/sidebar-collapsed-blocks item] true))))
+
+(defn sidebar-block-set-collapsed-all!
+ [collapsed?]
+ (let [items (map second (:sidebar/blocks @state))]
+ (doseq [item items]
+ (set-state! [:ui/sidebar-collapsed-blocks item] collapsed?))))
(defn get-edit-block
[]
From 79bf300dcbaca11fe6768ac9fb116d6e35e8120e Mon Sep 17 00:00:00 2001
From: Konstantinos Kaloutas
Date: Tue, 11 Jul 2023 14:43:22 +0300
Subject: [PATCH 28/63] add reordering support
---
src/main/frontend/components/container.css | 24 ++-
.../frontend/components/right_sidebar.cljs | 142 ++++++++++--------
.../frontend/components/right_sidebar.css | 3 +-
src/main/frontend/state.cljs | 11 ++
4 files changed, 114 insertions(+), 66 deletions(-)
diff --git a/src/main/frontend/components/container.css b/src/main/frontend/components/container.css
index 526165eb7ad5..8f15040f97b3 100644
--- a/src/main/frontend/components/container.css
+++ b/src/main/frontend/components/container.css
@@ -618,7 +618,23 @@ html[data-theme='dark'] {
margin-left: 12px;
}
+ .sidebar-drop-area {
+ @apply relative;
+ height: 8px;
+
+ &.drag-over {
+ &::after {
+ @apply absolute block w-full;
+ top: 2px;
+ height: 4px;
+ content: " ";
+ background-color: var(--ls-active-primary-color);
+ }
+ }
+ }
+
.sidebar-item {
+ @apply relative;
overflow: hidden;
flex: 1 1;
min-height: 100px;
@@ -637,8 +653,12 @@ html[data-theme='dark'] {
}
}
- &.drag-over {
- border-color: var(--ls-active-primary-color);
+ .sidebar-item-drop-overlay-wrapper {
+ @apply flex flex-col absolute h-full w-full;
+ }
+
+ .sidebar-item-drop-overlay {
+ flex: 1 1 50%;
}
&.item-type-block .sidebar-item-header {
diff --git a/src/main/frontend/components/right_sidebar.cljs b/src/main/frontend/components/right_sidebar.cljs
index 2a6177adf8ef..dfed7707c23a 100644
--- a/src/main/frontend/components/right_sidebar.cljs
+++ b/src/main/frontend/components/right_sidebar.cljs
@@ -5,7 +5,6 @@
[frontend.components.onboarding :as onboarding]
[frontend.components.page :as page]
[frontend.components.shortcut :as shortcut]
- [frontend.components.svg :as svg]
[frontend.context.i18n :refer [t]]
[frontend.date :as date]
[frontend.db :as db]
@@ -173,20 +172,20 @@
(atom nil))
(rum/defc context-menu-content
- [db-id idx collapsed?]
+ [db-id idx collapsed? block-count]
[:.menu-links-wrapper
(ui/menu-link {:on-click #(state/sidebar-remove-block! idx)} "Close" nil)
- (ui/menu-link {:on-click #(state/sidebar-remove-rest! db-id)} "Close others" nil)
- (ui/menu-link {:on-click (fn []
- (state/clear-sidebar-blocks!)
- (state/hide-right-sidebar!))} "Close all" nil)
+ (when (> block-count 1) (ui/menu-link {:on-click #(state/sidebar-remove-rest! db-id)} "Close others" nil))
+ (when (> block-count 1) (ui/menu-link {:on-click (fn []
+ (state/clear-sidebar-blocks!)
+ (state/hide-right-sidebar!))} "Close all" nil))
[:hr.menu-separator]
(when-not collapsed? (ui/menu-link {:on-click #(state/sidebar-block-toggle-collapse! db-id)} "Collapse" nil))
- (ui/menu-link {:on-click #(state/sidebar-block-collapse-rest! db-id)} "Collapse others" nil)
- (ui/menu-link {:on-click #(state/sidebar-block-set-collapsed-all! true)} "Collapse all" nil)
- [:hr.menu-separator]
+ (when (> block-count 1) (ui/menu-link {:on-click #(state/sidebar-block-collapse-rest! db-id)} "Collapse others" nil))
+ (when (> block-count 1) (ui/menu-link {:on-click #(state/sidebar-block-set-collapsed-all! true)} "Collapse all" nil))
+ (when (or collapsed? (> block-count 1)) [:hr.menu-separator])
(when collapsed? (ui/menu-link {:on-click #(state/sidebar-block-toggle-collapse! db-id)} "Expand" nil))
- (ui/menu-link {:on-click #(state/sidebar-block-set-collapsed-all! false)} "Expand all" nil)
+ (when (> block-count 1) (ui/menu-link {:on-click #(state/sidebar-block-set-collapsed-all! false)} "Expand all" nil))
(when (integer? db-id) [:hr.menu-separator])
(when (integer? db-id)
(let [name (:block/name (db/entity db-id))]
@@ -194,55 +193,70 @@
(rfe/href :whiteboard {:name name})
(rfe/href :page {:name name}))} "Open as page" nil)))])
+(rum/defc drop-area
+ [idx drag-to]
+ [:.sidebar-drop-area {:id (str "drop-area-" idx)
+ :on-drag-over #(when (not= drag-to idx) (reset! *drag-to idx))
+ :class (when (= idx drag-to) "drag-over")}])
+
(rum/defc sidebar-item < rum/reactive
- [repo idx db-id block-type]
+ [repo idx db-id block-type block-count]
(let [item (build-sidebar-item repo idx db-id block-type)
drag-to (rum/react *drag-to)
drag-from (rum/react *drag-from)]
(when item
(let [collapsed? (state/sub [:ui/sidebar-collapsed-blocks db-id])]
- [:div.flex.sidebar-item.content.color-level.shadow-md.rounded
- {:class [(str "item-type-" (name block-type))
- (when collapsed? "collapsed")
- (when (and (= idx drag-to) (not= drag-to drag-from)) "drag-over")]}
- (let [[title component] item
- page-name (if (integer? db-id)
- (:block/name (db/entity db-id))
- db-id)]
- [:div.flex.flex-col.w-full
- [:button.flex.flex-row.justify-between.p-2.sidebar-item-header.color-level
- {:draggable true
- :on-drag-leave #(reset! *drag-to nil)
- :on-drag-over #(reset! *drag-to idx)
- :on-drag-start (fn [event]
- (editor-handler/block->data-transfer! page-name event)
- (reset! *drag-from idx))
- :on-drag-end (fn [_event]
- (reset! *drag-to nil)
- (reset! *drag-from nil))
- :on-click (fn [event]
- (.preventDefault event)
- (state/sidebar-block-toggle-collapse! db-id))
- :on-mouse-up (fn [event]
- (when (= (.-which (.-nativeEvent event)) 2)
- (state/sidebar-remove-block! idx)))
- :on-context-menu (fn [e]
- (util/stop e)
- (common-handler/show-custom-context-menu! e (context-menu-content db-id idx collapsed?)))}
- [:div.flex.flex-row.overflow-hidden
- [:span.opacity-50.hover:opacity-100.flex.items-center.pr-1
- (ui/rotating-arrow collapsed?)]
- [:div.ml-1.font-medium.overflow-hidden
- title]]
- [:.item-actions.flex
- (ui/dropdown (fn [{:keys [toggle-fn]}]
- [:button.button {:on-click (fn [e]
- (util/stop e)
- (toggle-fn))} (ui/icon "dots")])
- #(context-menu-content db-id idx collapsed?))
- [:button.button.close {:on-click #(state/sidebar-remove-block! idx)} (ui/icon "x")]]]
- [:div.scrollbar-spacing.p-4 {:class (if collapsed? "hidden" "initial")}
- component]])]))))
+ [:<>
+ (when (zero? idx) (drop-area (dec idx) drag-to))
+ [:div.flex.sidebar-item.content.color-level.shadow-md.rounded
+ {:class [(str "item-type-" (name block-type))
+ (when collapsed? "collapsed")]}
+ (let [[title component] item
+ page-name (if (integer? db-id)
+ (:block/name (db/entity db-id))
+ db-id)]
+ [:div.flex.flex-col.w-full.relative
+ [:button.flex.flex-row.justify-between.p-2.sidebar-item-header.color-level
+ {:draggable true
+ :on-drag-start (fn [event]
+ (editor-handler/block->data-transfer! page-name event)
+ (reset! *drag-from idx))
+ :on-drag-end (fn [_event]
+ (state/sidebar-move-block! idx drag-to)
+ (reset! *drag-to nil)
+ (reset! *drag-from nil))
+ :on-click (fn [event]
+ (.preventDefault event)
+ (state/sidebar-block-toggle-collapse! db-id))
+ :on-mouse-up (fn [event]
+ (when (= (.-which (.-nativeEvent event)) 2)
+ (state/sidebar-remove-block! idx)))
+ :on-context-menu (fn [e]
+ (util/stop e)
+ (common-handler/show-custom-context-menu! e (context-menu-content db-id idx collapsed? block-count)))}
+ [:div.flex.flex-row.overflow-hidden
+ [:span.opacity-50.hover:opacity-100.flex.items-center.pr-1
+ (ui/rotating-arrow collapsed?)]
+ [:div.ml-1.font-medium.overflow-hidden
+ title]]
+ [:.item-actions.flex
+ (ui/dropdown (fn [{:keys [toggle-fn]}]
+ [:button.button {:on-click (fn [e]
+ (util/stop e)
+ (toggle-fn))} (ui/icon "dots")])
+ #(context-menu-content db-id idx collapsed? block-count))
+ [:button.button.close {:on-click #(state/sidebar-remove-block! idx)} (ui/icon "x")]]]
+ [:div.scrollbar-spacing.p-4 {:class (if collapsed? "hidden" "initial")}
+ component]
+ (when drag-from
+ [:.sidebar-item-drop-overlay-wrapper
+ [:.sidebar-item-drop-overlay.top
+ {:on-drag-over #(when (not= drag-to (dec idx))
+ (reset! *drag-to (dec idx)))}]
+ [:.sidebar-item-drop-overlay.bottom
+ {:on-drag-over #(when (not= drag-to idx)
+ (reset! *drag-to idx))}]])])]
+ (drop-area idx drag-to)]))))
(defn- get-page
[match]
@@ -354,7 +368,8 @@
(js/setTimeout (fn [] (reset! (get state ::anim-finished?) true)) 300)
state)}
[state repo t blocks]
- (let [*anim-finished? (get state ::anim-finished?)]
+ (let [*anim-finished? (get state ::anim-finished?)
+ block-count (count blocks)]
[:div.cp__right-sidebar-inner.flex.flex-col.h-full#right-sidebar-container
[:div.cp__right-sidebar-scrollable
@@ -362,21 +377,21 @@
[:div.cp__right-sidebar-settings.hide-scrollbar.gap-1 {:key "right-sidebar-settings"}
[:div.text-sm
[:button.button.cp__right-sidebar-settings-btn {:on-click (fn [_e]
- (state/sidebar-add-block! repo "contents" :contents))}
+ (state/sidebar-add-block! repo "contents" :contents))}
(t :right-side-bar/contents)]]
[:div.text-sm
[:button.button.cp__right-sidebar-settings-btn {:on-click (fn []
- (when-let [page (get-current-page)]
- (state/sidebar-add-block!
- repo
- page
- :page-graph)))}
+ (when-let [page (get-current-page)]
+ (state/sidebar-add-block!
+ repo
+ page
+ :page-graph)))}
(t :right-side-bar/page-graph)]]
[:div.text-sm
[:button.button.cp__right-sidebar-settings-btn {:on-click (fn [_e]
- (state/sidebar-add-block! repo "help" :help))}
+ (state/sidebar-add-block! repo "help" :help))}
(t :right-side-bar/help)]]
(when (and config/dev? (state/sub [:ui/developer-mode?]))
@@ -385,11 +400,12 @@
(state/sidebar-add-block! repo "history" :history))}
(t :right-side-bar/history)]])]]
- [:.sidebar-item-list.flex-1.scrollbar-spacing.flex.flex-col.gap-2.pb-2.mx-2
+ [:.sidebar-item-list.flex-1.scrollbar-spacing.flex.flex-col.mx-2
+ {:on-drag-leave #(reset! *drag-to nil)}
(if @*anim-finished?
(for [[idx [repo db-id block-type]] (medley/indexed blocks)]
(rum/with-key
- (sidebar-item repo idx db-id block-type)
+ (sidebar-item repo idx db-id block-type block-count)
(str "sidebar-block-" idx)))
[:div.p-4
[:span.font-medium.opacity-50 "Loading ..."]])]]]))
diff --git a/src/main/frontend/components/right_sidebar.css b/src/main/frontend/components/right_sidebar.css
index f9d1b44c7b9c..64d154f8a1af 100644
--- a/src/main/frontend/components/right_sidebar.css
+++ b/src/main/frontend/components/right_sidebar.css
@@ -16,7 +16,8 @@ html[data-theme=light] {
}
.sidebar-item-list {
- height: calc(100vh - 48px);
+ margin-top: -8px;
+ height: calc(100vh - 40px);
}
diff --git a/src/main/frontend/state.cljs b/src/main/frontend/state.cljs
index 918b3bbddf2e..84f6615fcd41 100644
--- a/src/main/frontend/state.cljs
+++ b/src/main/frontend/state.cljs
@@ -1092,6 +1092,17 @@ Similar to re-frame subscriptions"
(when-let [elem (gdom/getElementByClass "sidebar-item-list")]
(util/scroll-to elem 0)))))
+(defn sidebar-move-block!
+ [idx move-to]
+ (update-state! :sidebar/blocks (fn [blocks]
+ (let [move-to (if (> idx move-to) (inc move-to) move-to)]
+ (if (and move-to (not= move-to idx))
+ (let [item (nth blocks idx)
+ blocks (keep-indexed #(when (not= %1 idx) %2) blocks)
+ [l r] (split-at move-to blocks)]
+ (concat l [item] r))
+ blocks)))))
+
(defn sidebar-remove-block!
[idx]
(update-state! :sidebar/blocks (fn [blocks]
From d158eb17dfc92eef866404b069995ef1e0616abb Mon Sep 17 00:00:00 2001
From: Konstantinos Kaloutas
Date: Tue, 11 Jul 2023 16:34:12 +0300
Subject: [PATCH 29/63] fix dropdown visibility
---
src/main/frontend/components/container.css | 1 -
src/main/frontend/components/right_sidebar.cljs | 10 +++++-----
2 files changed, 5 insertions(+), 6 deletions(-)
diff --git a/src/main/frontend/components/container.css b/src/main/frontend/components/container.css
index 8f15040f97b3..1214020872d4 100644
--- a/src/main/frontend/components/container.css
+++ b/src/main/frontend/components/container.css
@@ -643,7 +643,6 @@ html[data-theme='dark'] {
.sidebar-item-header {
white-space: nowrap;
- overflow: hidden;
.breadcrumb {
margin-top: 0;
diff --git a/src/main/frontend/components/right_sidebar.cljs b/src/main/frontend/components/right_sidebar.cljs
index dfed7707c23a..2e1e81482671 100644
--- a/src/main/frontend/components/right_sidebar.cljs
+++ b/src/main/frontend/components/right_sidebar.cljs
@@ -173,13 +173,14 @@
(rum/defc context-menu-content
[db-id idx collapsed? block-count]
- [:.menu-links-wrapper
+ [:.menu-links-wrapper.text-left
+ {:on-click (fn [e] (util/stop e))}
(ui/menu-link {:on-click #(state/sidebar-remove-block! idx)} "Close" nil)
(when (> block-count 1) (ui/menu-link {:on-click #(state/sidebar-remove-rest! db-id)} "Close others" nil))
(when (> block-count 1) (ui/menu-link {:on-click (fn []
(state/clear-sidebar-blocks!)
(state/hide-right-sidebar!))} "Close all" nil))
- [:hr.menu-separator]
+ (when (or (not collapsed?) (> block-count 1))[:hr.menu-separator])
(when-not collapsed? (ui/menu-link {:on-click #(state/sidebar-block-toggle-collapse! db-id)} "Collapse" nil))
(when (> block-count 1) (ui/menu-link {:on-click #(state/sidebar-block-collapse-rest! db-id)} "Collapse others" nil))
(when (> block-count 1) (ui/menu-link {:on-click #(state/sidebar-block-set-collapsed-all! true)} "Collapse all" nil))
@@ -195,8 +196,7 @@
(rum/defc drop-area
[idx drag-to]
- [:.sidebar-drop-area {:id (str "drop-area-" idx)
- :on-drag-over #(when (not= drag-to idx) (reset! *drag-to idx))
+ [:.sidebar-drop-area {:on-drag-over #(when (not= drag-to idx) (reset! *drag-to idx))
:class (when (= idx drag-to) "drag-over")}])
(rum/defc sidebar-item < rum/reactive
@@ -226,7 +226,7 @@
(reset! *drag-to nil)
(reset! *drag-from nil))
:on-click (fn [event]
- (.preventDefault event)
+ (util/stop event)
(state/sidebar-block-toggle-collapse! db-id))
:on-mouse-up (fn [event]
(when (= (.-which (.-nativeEvent event)) 2)
From 6be56c155f358085badc7d5e0be383f8de18d65a Mon Sep 17 00:00:00 2001
From: Konstantinos Kaloutas
Date: Wed, 12 Jul 2023 16:01:45 +0300
Subject: [PATCH 30/63] dnd fixes and initial state
---
.../frontend/components/right_sidebar.cljs | 21 +++++----------
src/main/frontend/state.cljs | 26 +++++++++++++------
2 files changed, 24 insertions(+), 23 deletions(-)
diff --git a/src/main/frontend/components/right_sidebar.cljs b/src/main/frontend/components/right_sidebar.cljs
index 2e1e81482671..18125a8ff743 100644
--- a/src/main/frontend/components/right_sidebar.cljs
+++ b/src/main/frontend/components/right_sidebar.cljs
@@ -196,7 +196,7 @@
(rum/defc drop-area
[idx drag-to]
- [:.sidebar-drop-area {:on-drag-over #(when (not= drag-to idx) (reset! *drag-to idx))
+ [:.sidebar-drop-area {:on-drag-enter #(when (not= drag-to idx) (reset! *drag-to idx))
:class (when (= idx drag-to) "drag-over")}])
(rum/defc sidebar-item < rum/reactive
@@ -211,18 +211,15 @@
[:div.flex.sidebar-item.content.color-level.shadow-md.rounded
{:class [(str "item-type-" (name block-type))
(when collapsed? "collapsed")]}
- (let [[title component] item
- page-name (if (integer? db-id)
- (:block/name (db/entity db-id))
- db-id)]
+ (let [[title component] item]
[:div.flex.flex-col.w-full.relative
[:button.flex.flex-row.justify-between.p-2.sidebar-item-header.color-level
{:draggable true
:on-drag-start (fn [event]
- (editor-handler/block->data-transfer! page-name event)
+ (editor-handler/block->data-transfer! (:block/name (db/entity db-id)) event)
(reset! *drag-from idx))
:on-drag-end (fn [_event]
- (state/sidebar-move-block! idx drag-to)
+ (when drag-to (state/sidebar-move-block! idx drag-to))
(reset! *drag-to nil)
(reset! *drag-from nil))
:on-click (fn [event]
@@ -251,11 +248,9 @@
(when drag-from
[:.sidebar-item-drop-overlay-wrapper
[:.sidebar-item-drop-overlay.top
- {:on-drag-over #(when (not= drag-to (dec idx))
- (reset! *drag-to (dec idx)))}]
+ {:on-drag-enter #(reset! *drag-to (dec idx))}]
[:.sidebar-item-drop-overlay.bottom
- {:on-drag-over #(when (not= drag-to idx)
- (reset! *drag-to idx))}]])])]
+ {:on-drag-enter #(reset! *drag-to idx)}]])])]
(drop-area idx drag-to)]))))
(defn- get-page
@@ -401,7 +396,6 @@
(t :right-side-bar/history)]])]]
[:.sidebar-item-list.flex-1.scrollbar-spacing.flex.flex-col.mx-2
- {:on-drag-leave #(reset! *drag-to nil)}
(if @*anim-finished?
(for [[idx [repo db-id block-type]] (medley/indexed blocks)]
(rum/with-key
@@ -413,9 +407,6 @@
(rum/defcs sidebar < rum/reactive
[state]
(let [blocks (state/sub-right-sidebar-blocks)
- blocks (if (empty? blocks)
- [[(state/get-current-repo) "contents" :contents nil]]
- blocks)
sidebar-open? (state/sub :ui/sidebar-open?)
width (state/sub :ui/sidebar-width)
repo (state/sub :git/current-repo)]
diff --git a/src/main/frontend/state.cljs b/src/main/frontend/state.cljs
index 84f6615fcd41..db9226275c10 100644
--- a/src/main/frontend/state.cljs
+++ b/src/main/frontend/state.cljs
@@ -1069,11 +1069,21 @@ Similar to re-frame subscriptions"
(defn toggle-sidebar-open?!
[]
- (swap! state update :ui/sidebar-open? not))
+ (let [current-repo (get-current-repo)
+ blocks (filter #(= (first %) current-repo) (:sidebar/blocks @state))]
+ (when (and (not (:ui/sidebar-open? @state)) (empty? blocks))
+ (swap! state assoc :sidebar/blocks [[current-repo "contents" :contents nil]])
+ (set-state! [:ui/sidebar-collapsed-blocks "contents"] false))
+ (swap! state update :ui/sidebar-open? not)))
(defn open-right-sidebar!
[]
- (swap! state assoc :ui/sidebar-open? true))
+ (let [current-repo (get-current-repo)
+ blocks (filter #(= (first %) current-repo) (:sidebar/blocks @state))]
+ (when (empty? blocks)
+ (swap! state assoc :sidebar/blocks [[current-repo "contents" :contents nil]])
+ (set-state! [:ui/sidebar-collapsed-blocks "contents"] false))
+ (swap! state assoc :ui/sidebar-open? true)))
(defn hide-right-sidebar!
[]
@@ -1093,13 +1103,13 @@ Similar to re-frame subscriptions"
(util/scroll-to elem 0)))))
(defn sidebar-move-block!
- [idx move-to]
+ [from to]
(update-state! :sidebar/blocks (fn [blocks]
- (let [move-to (if (> idx move-to) (inc move-to) move-to)]
- (if (and move-to (not= move-to idx))
- (let [item (nth blocks idx)
- blocks (keep-indexed #(when (not= %1 idx) %2) blocks)
- [l r] (split-at move-to blocks)]
+ (let [to (if (> from to) (inc to) to)]
+ (if (not= to from)
+ (let [item (nth blocks from)
+ blocks (keep-indexed #(when (not= %1 from) %2) blocks)
+ [l r] (split-at to blocks)]
(concat l [item] r))
blocks)))))
From d7998cf8b73c6a4a71e8aa1daa42426769f309b7 Mon Sep 17 00:00:00 2001
From: Konstantinos Kaloutas
Date: Wed, 12 Jul 2023 19:58:49 +0300
Subject: [PATCH 31/63] varous fixes
---
src/main/frontend/components/container.css | 15 +++++++-----
.../frontend/components/right_sidebar.cljs | 23 +++++++++++--------
2 files changed, 23 insertions(+), 15 deletions(-)
diff --git a/src/main/frontend/components/container.css b/src/main/frontend/components/container.css
index 1214020872d4..f663d6f2d8b7 100644
--- a/src/main/frontend/components/container.css
+++ b/src/main/frontend/components/container.css
@@ -635,7 +635,6 @@ html[data-theme='dark'] {
.sidebar-item {
@apply relative;
- overflow: hidden;
flex: 1 1;
min-height: 100px;
border: 1px solid transparent;
@@ -687,19 +686,23 @@ html[data-theme='dark'] {
}
.item-actions {
- @apply h-full invisible;
- opacity: 0;
+ @apply h-full;
.button {
- @apply p-0 pl-2 flex items-center h-full;
+ @apply invisible p-0 ml-2 flex items-center h-full;
+
+ &:focus {
+ @apply visible;
+ }
}
}
.is-mobile &,
&:hover {
.item-actions {
- @apply visible;
- opacity: 1;
+ .button {
+ @apply visible;
+ }
}
}
}
diff --git a/src/main/frontend/components/right_sidebar.cljs b/src/main/frontend/components/right_sidebar.cljs
index 18125a8ff743..d5e79c1dcb57 100644
--- a/src/main/frontend/components/right_sidebar.cljs
+++ b/src/main/frontend/components/right_sidebar.cljs
@@ -172,15 +172,17 @@
(atom nil))
(rum/defc context-menu-content
- [db-id idx collapsed? block-count]
+ [db-id idx collapsed? block-count toggle-fn]
[:.menu-links-wrapper.text-left
- {:on-click (fn [e] (util/stop e))}
+ {:on-click (fn [e]
+ (.stopPropagation e)
+ (toggle-fn))}
(ui/menu-link {:on-click #(state/sidebar-remove-block! idx)} "Close" nil)
(when (> block-count 1) (ui/menu-link {:on-click #(state/sidebar-remove-rest! db-id)} "Close others" nil))
(when (> block-count 1) (ui/menu-link {:on-click (fn []
(state/clear-sidebar-blocks!)
(state/hide-right-sidebar!))} "Close all" nil))
- (when (or (not collapsed?) (> block-count 1))[:hr.menu-separator])
+ (when (or (not collapsed?) (> block-count 1)) [:hr.menu-separator])
(when-not collapsed? (ui/menu-link {:on-click #(state/sidebar-block-toggle-collapse! db-id)} "Collapse" nil))
(when (> block-count 1) (ui/menu-link {:on-click #(state/sidebar-block-collapse-rest! db-id)} "Collapse others" nil))
(when (> block-count 1) (ui/menu-link {:on-click #(state/sidebar-block-set-collapsed-all! true)} "Collapse all" nil))
@@ -197,6 +199,7 @@
(rum/defc drop-area
[idx drag-to]
[:.sidebar-drop-area {:on-drag-enter #(when (not= drag-to idx) (reset! *drag-to idx))
+ :on-drag-over util/stop
:class (when (= idx drag-to) "drag-over")}])
(rum/defc sidebar-item < rum/reactive
@@ -219,7 +222,7 @@
(editor-handler/block->data-transfer! (:block/name (db/entity db-id)) event)
(reset! *drag-from idx))
:on-drag-end (fn [_event]
- (when drag-to (state/sidebar-move-block! idx drag-to))
+ (when drag-to (state/sidebar-move-block! idx drag-to))
(reset! *drag-to nil)
(reset! *drag-from nil))
:on-click (fn [event]
@@ -230,7 +233,7 @@
(state/sidebar-remove-block! idx)))
:on-context-menu (fn [e]
(util/stop e)
- (common-handler/show-custom-context-menu! e (context-menu-content db-id idx collapsed? block-count)))}
+ (common-handler/show-custom-context-menu! e (context-menu-content db-id idx collapsed? block-count #())))}
[:div.flex.flex-row.overflow-hidden
[:span.opacity-50.hover:opacity-100.flex.items-center.pr-1
(ui/rotating-arrow collapsed?)]
@@ -238,15 +241,17 @@
title]]
[:.item-actions.flex
(ui/dropdown (fn [{:keys [toggle-fn]}]
- [:button.button {:on-click (fn [e]
- (util/stop e)
- (toggle-fn))} (ui/icon "dots")])
- #(context-menu-content db-id idx collapsed? block-count))
+ [:button.button {:on-click (fn [e]
+ (util/stop e)
+ (toggle-fn))} (ui/icon "dots")])
+ (fn [{:keys [close-fn]}]
+ (context-menu-content db-id idx collapsed? block-count close-fn)))
[:button.button.close {:on-click #(state/sidebar-remove-block! idx)} (ui/icon "x")]]]
[:div.scrollbar-spacing.p-4 {:class (if collapsed? "hidden" "initial")}
component]
(when drag-from
[:.sidebar-item-drop-overlay-wrapper
+ {:on-drag-over util/stop}
[:.sidebar-item-drop-overlay.top
{:on-drag-enter #(reset! *drag-to (dec idx))}]
[:.sidebar-item-drop-overlay.bottom
From bd2a02116b0bee78ca6da61e61a82e8a56deb509 Mon Sep 17 00:00:00 2001
From: Konstantinos Kaloutas
Date: Thu, 13 Jul 2023 11:49:17 +0300
Subject: [PATCH 32/63] fix event propagation
---
src/main/frontend/components/right_sidebar.cljs | 14 ++++++--------
1 file changed, 6 insertions(+), 8 deletions(-)
diff --git a/src/main/frontend/components/right_sidebar.cljs b/src/main/frontend/components/right_sidebar.cljs
index d5e79c1dcb57..e2f24682d9f2 100644
--- a/src/main/frontend/components/right_sidebar.cljs
+++ b/src/main/frontend/components/right_sidebar.cljs
@@ -174,9 +174,7 @@
(rum/defc context-menu-content
[db-id idx collapsed? block-count toggle-fn]
[:.menu-links-wrapper.text-left
- {:on-click (fn [e]
- (.stopPropagation e)
- (toggle-fn))}
+ {:on-click toggle-fn}
(ui/menu-link {:on-click #(state/sidebar-remove-block! idx)} "Close" nil)
(when (> block-count 1) (ui/menu-link {:on-click #(state/sidebar-remove-rest! db-id)} "Close others" nil))
(when (> block-count 1) (ui/menu-link {:on-click (fn []
@@ -216,7 +214,7 @@
(when collapsed? "collapsed")]}
(let [[title component] item]
[:div.flex.flex-col.w-full.relative
- [:button.flex.flex-row.justify-between.p-2.sidebar-item-header.color-level
+ [:.flex.flex-row.justify-between.pr-2.sidebar-item-header.color-level
{:draggable true
:on-drag-start (fn [event]
(editor-handler/block->data-transfer! (:block/name (db/entity db-id)) event)
@@ -225,16 +223,16 @@
(when drag-to (state/sidebar-move-block! idx drag-to))
(reset! *drag-to nil)
(reset! *drag-from nil))
- :on-click (fn [event]
- (util/stop event)
- (state/sidebar-block-toggle-collapse! db-id))
:on-mouse-up (fn [event]
(when (= (.-which (.-nativeEvent event)) 2)
(state/sidebar-remove-block! idx)))
:on-context-menu (fn [e]
(util/stop e)
(common-handler/show-custom-context-menu! e (context-menu-content db-id idx collapsed? block-count #())))}
- [:div.flex.flex-row.overflow-hidden
+ [:button.flex.flex-row.p-2.items-center.w-full.overflow-hidden
+ {:on-click (fn [event]
+ (util/stop event)
+ (state/sidebar-block-toggle-collapse! db-id))}
[:span.opacity-50.hover:opacity-100.flex.items-center.pr-1
(ui/rotating-arrow collapsed?)]
[:div.ml-1.font-medium.overflow-hidden
From 05719505b01b5ecc3d03985b4af930a324ebb51d Mon Sep 17 00:00:00 2001
From: Konstantinos Kaloutas
Date: Thu, 13 Jul 2023 12:08:52 +0300
Subject: [PATCH 33/63] enhance accesibility
---
src/main/frontend/components/container.css | 2 +-
.../frontend/components/right_sidebar.cljs | 18 +++++++++++++-----
2 files changed, 14 insertions(+), 6 deletions(-)
diff --git a/src/main/frontend/components/container.css b/src/main/frontend/components/container.css
index f663d6f2d8b7..39a88c05aac0 100644
--- a/src/main/frontend/components/container.css
+++ b/src/main/frontend/components/container.css
@@ -689,7 +689,7 @@ html[data-theme='dark'] {
@apply h-full;
.button {
- @apply invisible p-0 ml-2 flex items-center h-full;
+ @apply invisible p-0 ml-2 flex items-center;
&:focus {
@apply visible;
diff --git a/src/main/frontend/components/right_sidebar.cljs b/src/main/frontend/components/right_sidebar.cljs
index e2f24682d9f2..06c568bb30e4 100644
--- a/src/main/frontend/components/right_sidebar.cljs
+++ b/src/main/frontend/components/right_sidebar.cljs
@@ -230,22 +230,30 @@
(util/stop e)
(common-handler/show-custom-context-menu! e (context-menu-content db-id idx collapsed? block-count #())))}
[:button.flex.flex-row.p-2.items-center.w-full.overflow-hidden
- {:on-click (fn [event]
+ {:area-expanded (not collapsed?)
+ :id (str "sidebar-panel-header-" idx)
+ :aria-controls (str "sidebar-panel-content-" idx)
+ :on-click (fn [event]
(util/stop event)
(state/sidebar-block-toggle-collapse! db-id))}
[:span.opacity-50.hover:opacity-100.flex.items-center.pr-1
(ui/rotating-arrow collapsed?)]
[:div.ml-1.font-medium.overflow-hidden
title]]
- [:.item-actions.flex
+ [:.item-actions.flex.items-center
(ui/dropdown (fn [{:keys [toggle-fn]}]
- [:button.button {:on-click (fn [e]
+ [:button.button {:title "More"
+ :on-click (fn [e]
(util/stop e)
(toggle-fn))} (ui/icon "dots")])
(fn [{:keys [close-fn]}]
(context-menu-content db-id idx collapsed? block-count close-fn)))
- [:button.button.close {:on-click #(state/sidebar-remove-block! idx)} (ui/icon "x")]]]
- [:div.scrollbar-spacing.p-4 {:class (if collapsed? "hidden" "initial")}
+ [:button.button.close {:title "Close"
+ :on-click #(state/sidebar-remove-block! idx)} (ui/icon "x")]]]
+ [:div.scrollbar-spacing.p-4 {:role "region"
+ :id (str "sidebar-panel-content-" idx)
+ :aria-labelledby (str "sidebar-panel-header-" idx)
+ :class (if collapsed? "hidden" "initial")}
component]
(when drag-from
[:.sidebar-item-drop-overlay-wrapper
From aa05d47da6403c5514d84bfa17c9c248b391ffee Mon Sep 17 00:00:00 2001
From: Konstantinos Kaloutas
Date: Thu, 13 Jul 2023 12:21:08 +0300
Subject: [PATCH 34/63] area expanded fix
---
src/main/frontend/components/right_sidebar.cljs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/main/frontend/components/right_sidebar.cljs b/src/main/frontend/components/right_sidebar.cljs
index 06c568bb30e4..66e67488c37e 100644
--- a/src/main/frontend/components/right_sidebar.cljs
+++ b/src/main/frontend/components/right_sidebar.cljs
@@ -230,7 +230,7 @@
(util/stop e)
(common-handler/show-custom-context-menu! e (context-menu-content db-id idx collapsed? block-count #())))}
[:button.flex.flex-row.p-2.items-center.w-full.overflow-hidden
- {:area-expanded (not collapsed?)
+ {:aria-expanded (str (not collapsed?))
:id (str "sidebar-panel-header-" idx)
:aria-controls (str "sidebar-panel-content-" idx)
:on-click (fn [event]
From bd868fab37614a13cdac9700ee4aee4abba1d2b7 Mon Sep 17 00:00:00 2001
From: Konstantinos Kaloutas
Date: Thu, 13 Jul 2023 12:38:11 +0300
Subject: [PATCH 35/63] add translations
---
.../frontend/components/right_sidebar.cljs | 22 +++++++++----------
src/resources/dicts/en.edn | 10 +++++++++
2 files changed, 21 insertions(+), 11 deletions(-)
diff --git a/src/main/frontend/components/right_sidebar.cljs b/src/main/frontend/components/right_sidebar.cljs
index 66e67488c37e..c10efe1a77f7 100644
--- a/src/main/frontend/components/right_sidebar.cljs
+++ b/src/main/frontend/components/right_sidebar.cljs
@@ -175,24 +175,24 @@
[db-id idx collapsed? block-count toggle-fn]
[:.menu-links-wrapper.text-left
{:on-click toggle-fn}
- (ui/menu-link {:on-click #(state/sidebar-remove-block! idx)} "Close" nil)
- (when (> block-count 1) (ui/menu-link {:on-click #(state/sidebar-remove-rest! db-id)} "Close others" nil))
+ (ui/menu-link {:on-click #(state/sidebar-remove-block! idx)} (t :right-side-bar/pane-close) nil)
+ (when (> block-count 1) (ui/menu-link {:on-click #(state/sidebar-remove-rest! db-id)} (t :right-side-bar/pane-clese-others) nil))
(when (> block-count 1) (ui/menu-link {:on-click (fn []
(state/clear-sidebar-blocks!)
- (state/hide-right-sidebar!))} "Close all" nil))
+ (state/hide-right-sidebar!))} (t :right-side-bar/pane-clese-all) nil))
(when (or (not collapsed?) (> block-count 1)) [:hr.menu-separator])
- (when-not collapsed? (ui/menu-link {:on-click #(state/sidebar-block-toggle-collapse! db-id)} "Collapse" nil))
- (when (> block-count 1) (ui/menu-link {:on-click #(state/sidebar-block-collapse-rest! db-id)} "Collapse others" nil))
- (when (> block-count 1) (ui/menu-link {:on-click #(state/sidebar-block-set-collapsed-all! true)} "Collapse all" nil))
+ (when-not collapsed? (ui/menu-link {:on-click #(state/sidebar-block-toggle-collapse! db-id)} (t :right-side-bar/pane-collapse) nil))
+ (when (> block-count 1) (ui/menu-link {:on-click #(state/sidebar-block-collapse-rest! db-id)} (t :right-side-bar/pane-collapse-others) nil))
+ (when (> block-count 1) (ui/menu-link {:on-click #(state/sidebar-block-set-collapsed-all! true)} (t :right-side-bar/pane-collapse-all) nil))
(when (or collapsed? (> block-count 1)) [:hr.menu-separator])
- (when collapsed? (ui/menu-link {:on-click #(state/sidebar-block-toggle-collapse! db-id)} "Expand" nil))
- (when (> block-count 1) (ui/menu-link {:on-click #(state/sidebar-block-set-collapsed-all! false)} "Expand all" nil))
+ (when collapsed? (ui/menu-link {:on-click #(state/sidebar-block-toggle-collapse! db-id)} (t :right-side-bar/pane-expand) nil))
+ (when (> block-count 1) (ui/menu-link {:on-click #(state/sidebar-block-set-collapsed-all! false)} (t :right-side-bar/pane-expand-all) nil))
(when (integer? db-id) [:hr.menu-separator])
(when (integer? db-id)
(let [name (:block/name (db/entity db-id))]
(ui/menu-link {:href (if (db-model/whiteboard-page? name)
(rfe/href :whiteboard {:name name})
- (rfe/href :page {:name name}))} "Open as page" nil)))])
+ (rfe/href :page {:name name}))} (t :right-side-bar/pane-open-as-page) nil)))])
(rum/defc drop-area
[idx drag-to]
@@ -242,13 +242,13 @@
title]]
[:.item-actions.flex.items-center
(ui/dropdown (fn [{:keys [toggle-fn]}]
- [:button.button {:title "More"
+ [:button.button {:title (t :right-side-bar/pane-more)
:on-click (fn [e]
(util/stop e)
(toggle-fn))} (ui/icon "dots")])
(fn [{:keys [close-fn]}]
(context-menu-content db-id idx collapsed? block-count close-fn)))
- [:button.button.close {:title "Close"
+ [:button.button.close {:title (t :right-side-bar/pane-close)
:on-click #(state/sidebar-remove-block! idx)} (ui/icon "x")]]]
[:div.scrollbar-spacing.p-4 {:role "region"
:id (str "sidebar-panel-content-" idx)
diff --git a/src/resources/dicts/en.edn b/src/resources/dicts/en.edn
index 3c5ab37aa998..656de41f8ca0 100644
--- a/src/resources/dicts/en.edn
+++ b/src/resources/dicts/en.edn
@@ -148,6 +148,16 @@
:right-side-bar/show-journals "Show Journals"
:right-side-bar/separator "Right sidebar resize handler"
:right-side-bar/toggle-right-sidebar "Toggle right sidebar"
+ :right-side-bar/pane-close "Close"
+ :right-side-bar/pane-clese-others "Close others"
+ :right-side-bar/pane-clese-all "Close all"
+ :right-side-bar/pane-collapse "Collapse"
+ :right-side-bar/pane-collapse-others "Collapse others"
+ :right-side-bar/pane-collapse-all "Collapse all"
+ :right-side-bar/pane-expand "Expand"
+ :right-side-bar/pane-expand-all "Expand all"
+ :right-side-bar/pane-open-as-page "Open as page"
+ :right-side-bar/pane-more "More"
:left-side-bar/switch "Switch to:"
:left-side-bar/journals "Journals"
:left-side-bar/create "Create"
From 49b28ab03fc19df1b8d6bd0dd7c15b44431206fa Mon Sep 17 00:00:00 2001
From: Konstantinos Kaloutas
Date: Thu, 13 Jul 2023 14:55:19 +0300
Subject: [PATCH 36/63] refactoring
---
src/main/frontend/components/container.css | 6 ++--
.../frontend/components/right_sidebar.cljs | 29 ++++++++++---------
2 files changed, 19 insertions(+), 16 deletions(-)
diff --git a/src/main/frontend/components/container.css b/src/main/frontend/components/container.css
index 39a88c05aac0..99e0b52bf902 100644
--- a/src/main/frontend/components/container.css
+++ b/src/main/frontend/components/container.css
@@ -618,7 +618,7 @@ html[data-theme='dark'] {
margin-left: 12px;
}
- .sidebar-drop-area {
+ .sidebar-drop-indicator {
@apply relative;
height: 8px;
@@ -651,11 +651,11 @@ html[data-theme='dark'] {
}
}
- .sidebar-item-drop-overlay-wrapper {
+ .sidebar-item-drop-area {
@apply flex flex-col absolute h-full w-full;
}
- .sidebar-item-drop-overlay {
+ .sidebar-item-drop-area-overlay {
flex: 1 1 50%;
}
diff --git a/src/main/frontend/components/right_sidebar.cljs b/src/main/frontend/components/right_sidebar.cljs
index c10efe1a77f7..645bd838d27f 100644
--- a/src/main/frontend/components/right_sidebar.cljs
+++ b/src/main/frontend/components/right_sidebar.cljs
@@ -194,11 +194,20 @@
(rfe/href :whiteboard {:name name})
(rfe/href :page {:name name}))} (t :right-side-bar/pane-open-as-page) nil)))])
-(rum/defc drop-area
+(rum/defc drop-indicator
[idx drag-to]
- [:.sidebar-drop-area {:on-drag-enter #(when (not= drag-to idx) (reset! *drag-to idx))
- :on-drag-over util/stop
- :class (when (= idx drag-to) "drag-over")}])
+ [:.sidebar-drop-indicator {:on-drag-enter #(when (not= drag-to idx) (reset! *drag-to idx))
+ :on-drag-over util/stop
+ :class (when (= idx drag-to) "drag-over")}])
+
+(rum/defc drop-area
+ [idx]
+ [:.sidebar-item-drop-area
+ {:on-drag-over util/stop}
+ [:.sidebar-item-drop-area-overlay.top
+ {:on-drag-enter #(reset! *drag-to (dec idx))}]
+ [:.sidebar-item-drop-area-overlay.bottom
+ {:on-drag-enter #(reset! *drag-to idx)}]])
(rum/defc sidebar-item < rum/reactive
[repo idx db-id block-type block-count]
@@ -208,7 +217,7 @@
(when item
(let [collapsed? (state/sub [:ui/sidebar-collapsed-blocks db-id])]
[:<>
- (when (zero? idx) (drop-area (dec idx) drag-to))
+ (when (zero? idx) (drop-indicator (dec idx) drag-to))
[:div.flex.sidebar-item.content.color-level.shadow-md.rounded
{:class [(str "item-type-" (name block-type))
(when collapsed? "collapsed")]}
@@ -255,14 +264,8 @@
:aria-labelledby (str "sidebar-panel-header-" idx)
:class (if collapsed? "hidden" "initial")}
component]
- (when drag-from
- [:.sidebar-item-drop-overlay-wrapper
- {:on-drag-over util/stop}
- [:.sidebar-item-drop-overlay.top
- {:on-drag-enter #(reset! *drag-to (dec idx))}]
- [:.sidebar-item-drop-overlay.bottom
- {:on-drag-enter #(reset! *drag-to idx)}]])])]
- (drop-area idx drag-to)]))))
+ (when drag-from (drop-area idx))])]
+ (drop-indicator idx drag-to)]))))
(defn- get-page
[match]
From d0f05c7667d2de1624a004c7eb4df4aa8d3eb2de Mon Sep 17 00:00:00 2001
From: Konstantinos Kaloutas
Date: Thu, 13 Jul 2023 16:53:00 +0300
Subject: [PATCH 37/63] enhance performance
---
.../frontend/components/right_sidebar.cljs | 32 +++++++++++--------
1 file changed, 19 insertions(+), 13 deletions(-)
diff --git a/src/main/frontend/components/right_sidebar.cljs b/src/main/frontend/components/right_sidebar.cljs
index 645bd838d27f..b4de87db0cc1 100644
--- a/src/main/frontend/components/right_sidebar.cljs
+++ b/src/main/frontend/components/right_sidebar.cljs
@@ -209,11 +209,17 @@
[:.sidebar-item-drop-area-overlay.bottom
{:on-drag-enter #(reset! *drag-to idx)}]])
+
+(rum/defc inner-component <
+ {:should-update (fn [_prev-state state] (last (:rum/args state)))}
+ [component _should-update?]
+ component)
+
(rum/defc sidebar-item < rum/reactive
[repo idx db-id block-type block-count]
- (let [item (build-sidebar-item repo idx db-id block-type)
+ (let [drag-from (rum/react *drag-from)
drag-to (rum/react *drag-to)
- drag-from (rum/react *drag-from)]
+ item (build-sidebar-item repo idx db-id block-type)]
(when item
(let [collapsed? (state/sub [:ui/sidebar-collapsed-blocks db-id])]
[:<>
@@ -251,19 +257,19 @@
title]]
[:.item-actions.flex.items-center
(ui/dropdown (fn [{:keys [toggle-fn]}]
- [:button.button {:title (t :right-side-bar/pane-more)
- :on-click (fn [e]
- (util/stop e)
- (toggle-fn))} (ui/icon "dots")])
- (fn [{:keys [close-fn]}]
- (context-menu-content db-id idx collapsed? block-count close-fn)))
- [:button.button.close {:title (t :right-side-bar/pane-close)
+ [:button.button {:title (t :right-side-bar/pane-more)
+ :on-click (fn [e]
+ (util/stop e)
+ (toggle-fn))} (ui/icon "dots")])
+ (fn [{:keys [close-fn]}]
+ (context-menu-content db-id idx collapsed? block-count close-fn)))
+ [:button.button.close {:title (t :right-side-bar/pane-close)
:on-click #(state/sidebar-remove-block! idx)} (ui/icon "x")]]]
[:div.scrollbar-spacing.p-4 {:role "region"
:id (str "sidebar-panel-content-" idx)
:aria-labelledby (str "sidebar-panel-header-" idx)
:class (if collapsed? "hidden" "initial")}
- component]
+ (inner-component component (not drag-from))]
(when drag-from (drop-area idx))])]
(drop-indicator idx drag-to)]))))
@@ -349,8 +355,8 @@
ratio (.toFixed (/ offset width) 6)
ratio (if (= handler-position :west) (- 1 ratio) ratio)]
(when (and (> ratio min-ratio) (< ratio max-ratio) (not (zero? keyboard-step)))
- ((add-resizing-class)
- (set-width! ratio)))))))
+ (do (add-resizing-class)
+ (set-width! ratio)))))))
(.on "keyup" remove-resizing-class)))
#())
[])
@@ -414,7 +420,7 @@
(for [[idx [repo db-id block-type]] (medley/indexed blocks)]
(rum/with-key
(sidebar-item repo idx db-id block-type block-count)
- (str "sidebar-block-" idx)))
+ (str "sidebar-block-" db-id)))
[:div.p-4
[:span.font-medium.opacity-50 "Loading ..."]])]]]))
From 20bd31d66234f66a673e3b740ea54bcb576dff23 Mon Sep 17 00:00:00 2001
From: Konstantinos Kaloutas
Date: Thu, 13 Jul 2023 17:13:46 +0300
Subject: [PATCH 38/63] enhance text overflow
---
src/main/frontend/components/container.css | 6 +++---
src/main/frontend/components/right_sidebar.cljs | 2 +-
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/src/main/frontend/components/container.css b/src/main/frontend/components/container.css
index 99e0b52bf902..787a05464498 100644
--- a/src/main/frontend/components/container.css
+++ b/src/main/frontend/components/container.css
@@ -689,10 +689,10 @@ html[data-theme='dark'] {
@apply h-full;
.button {
- @apply invisible p-0 ml-2 flex items-center;
+ @apply hidden p-0 ml-2 flex items-center;
&:focus {
- @apply visible;
+ @apply flex;
}
}
}
@@ -701,7 +701,7 @@ html[data-theme='dark'] {
&:hover {
.item-actions {
.button {
- @apply visible;
+ @apply flex;
}
}
}
diff --git a/src/main/frontend/components/right_sidebar.cljs b/src/main/frontend/components/right_sidebar.cljs
index b4de87db0cc1..653a83d9f96a 100644
--- a/src/main/frontend/components/right_sidebar.cljs
+++ b/src/main/frontend/components/right_sidebar.cljs
@@ -150,7 +150,7 @@
(if-let [icon (get-in page [:block/properties :icon])]
[:.text-md.mr-2 icon]
(ui/icon (if (= "whiteboard" (:block/type page)) "whiteboard" "page") {:class "text-md mr-2"}))
- (db-model/get-page-original-name page-name)]
+ [:span.overflow-hidden.text-ellipsis (db-model/get-page-original-name page-name)]]
(page-cp repo page-name)])
:page-slide-view
From 1ef3980f59cbdb53d46cfe4dc1d1d28abeb8f187 Mon Sep 17 00:00:00 2001
From: Konstantinos Kaloutas
Date: Thu, 13 Jul 2023 17:28:07 +0300
Subject: [PATCH 39/63] fix page link
---
src/main/frontend/components/right_sidebar.cljs | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/src/main/frontend/components/right_sidebar.cljs b/src/main/frontend/components/right_sidebar.cljs
index 653a83d9f96a..360aa71ee91c 100644
--- a/src/main/frontend/components/right_sidebar.cljs
+++ b/src/main/frontend/components/right_sidebar.cljs
@@ -172,7 +172,7 @@
(atom nil))
(rum/defc context-menu-content
- [db-id idx collapsed? block-count toggle-fn]
+ [db-id idx type collapsed? block-count toggle-fn]
[:.menu-links-wrapper.text-left
{:on-click toggle-fn}
(ui/menu-link {:on-click #(state/sidebar-remove-block! idx)} (t :right-side-bar/pane-close) nil)
@@ -187,8 +187,8 @@
(when (or collapsed? (> block-count 1)) [:hr.menu-separator])
(when collapsed? (ui/menu-link {:on-click #(state/sidebar-block-toggle-collapse! db-id)} (t :right-side-bar/pane-expand) nil))
(when (> block-count 1) (ui/menu-link {:on-click #(state/sidebar-block-set-collapsed-all! false)} (t :right-side-bar/pane-expand-all) nil))
- (when (integer? db-id) [:hr.menu-separator])
- (when (integer? db-id)
+ (when (= type :page) [:hr.menu-separator])
+ (when (= type :page)
(let [name (:block/name (db/entity db-id))]
(ui/menu-link {:href (if (db-model/whiteboard-page? name)
(rfe/href :whiteboard {:name name})
@@ -243,7 +243,7 @@
(state/sidebar-remove-block! idx)))
:on-context-menu (fn [e]
(util/stop e)
- (common-handler/show-custom-context-menu! e (context-menu-content db-id idx collapsed? block-count #())))}
+ (common-handler/show-custom-context-menu! e (context-menu-content db-id idx block-type collapsed? block-count #())))}
[:button.flex.flex-row.p-2.items-center.w-full.overflow-hidden
{:aria-expanded (str (not collapsed?))
:id (str "sidebar-panel-header-" idx)
@@ -262,7 +262,7 @@
(util/stop e)
(toggle-fn))} (ui/icon "dots")])
(fn [{:keys [close-fn]}]
- (context-menu-content db-id idx collapsed? block-count close-fn)))
+ (context-menu-content db-id idx block-type collapsed? block-count close-fn)))
[:button.button.close {:title (t :right-side-bar/pane-close)
:on-click #(state/sidebar-remove-block! idx)} (ui/icon "x")]]]
[:div.scrollbar-spacing.p-4 {:role "region"
From ff778447677500a0f22f1fed108e5c49f9dd2c79 Mon Sep 17 00:00:00 2001
From: Konstantinos Kaloutas
Date: Thu, 13 Jul 2023 17:59:41 +0300
Subject: [PATCH 40/63] drag enter fix
---
src/main/frontend/components/right_sidebar.cljs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/main/frontend/components/right_sidebar.cljs b/src/main/frontend/components/right_sidebar.cljs
index 360aa71ee91c..0e6d0cce0f47 100644
--- a/src/main/frontend/components/right_sidebar.cljs
+++ b/src/main/frontend/components/right_sidebar.cljs
@@ -196,7 +196,7 @@
(rum/defc drop-indicator
[idx drag-to]
- [:.sidebar-drop-indicator {:on-drag-enter #(when (not= drag-to idx) (reset! *drag-to idx))
+ [:.sidebar-drop-indicator {:on-drag-enter #(when drag-to (reset! *drag-to idx))
:on-drag-over util/stop
:class (when (= idx drag-to) "drag-over")}])
From ef7672de6ac9b0ee774e6aec7430bff91b469ea7 Mon Sep 17 00:00:00 2001
From: Konstantinos Kaloutas
Date: Thu, 13 Jul 2023 19:37:20 +0300
Subject: [PATCH 41/63] add rounded corners and transition
---
src/main/frontend/components/container.css | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/src/main/frontend/components/container.css b/src/main/frontend/components/container.css
index 787a05464498..28ddd40c1e40 100644
--- a/src/main/frontend/components/container.css
+++ b/src/main/frontend/components/container.css
@@ -622,12 +622,16 @@ html[data-theme='dark'] {
@apply relative;
height: 8px;
+ &::after {
+ @apply absolute block w-full rounded;
+ top: 2px;
+ height: 4px;
+ content: " ";
+ transition: background-color 200ms;
+ }
+
&.drag-over {
&::after {
- @apply absolute block w-full;
- top: 2px;
- height: 4px;
- content: " ";
background-color: var(--ls-active-primary-color);
}
}
From 59adfc2436bc45fb9062d837a1705a75baaf122f Mon Sep 17 00:00:00 2001
From: Konstantinos Kaloutas
Date: Thu, 13 Jul 2023 19:44:16 +0300
Subject: [PATCH 42/63] add keyboard shortcuts icon
---
src/main/frontend/components/right_sidebar.cljs | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/main/frontend/components/right_sidebar.cljs b/src/main/frontend/components/right_sidebar.cljs
index 0e6d0cce0f47..7fdc266a2cbd 100644
--- a/src/main/frontend/components/right_sidebar.cljs
+++ b/src/main/frontend/components/right_sidebar.cljs
@@ -161,7 +161,8 @@
(slide/slide page-name)]])
:shortcut-settings
- [(t :help/shortcuts) (shortcut-settings)]
+ [[:.flex.items-center (ui/icon "command" {:class "text-md mr-2"}) (t :help/shortcuts)]
+ (shortcut-settings)]
["" [:span]]))
From d704e3c9c15288a4d22eec32c32463aabd7cf936 Mon Sep 17 00:00:00 2001
From: Konstantinos Kaloutas
Date: Fri, 14 Jul 2023 16:09:44 +0300
Subject: [PATCH 43/63] revert left sidebar change
---
src/main/frontend/components/container.css | 1 +
src/main/frontend/components/right_sidebar.cljs | 1 -
2 files changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/main/frontend/components/container.css b/src/main/frontend/components/container.css
index 28ddd40c1e40..a97fdc816021 100644
--- a/src/main/frontend/components/container.css
+++ b/src/main/frontend/components/container.css
@@ -82,6 +82,7 @@
width: var(--ls-left-sidebar-sm-width);
overflow-y: auto;
overflow-x: hidden;
+ background-color: var(--ls-primary-background-color);
transition: transform .3s;
transform: translate3d(-100%, 0, 0);
z-index: 3;
diff --git a/src/main/frontend/components/right_sidebar.cljs b/src/main/frontend/components/right_sidebar.cljs
index 7fdc266a2cbd..1e59798b131e 100644
--- a/src/main/frontend/components/right_sidebar.cljs
+++ b/src/main/frontend/components/right_sidebar.cljs
@@ -210,7 +210,6 @@
[:.sidebar-item-drop-area-overlay.bottom
{:on-drag-enter #(reset! *drag-to idx)}]])
-
(rum/defc inner-component <
{:should-update (fn [_prev-state state] (last (:rum/args state)))}
[component _should-update?]
From 09476eff273d505a43fd659257ded5b00f3d2096 Mon Sep 17 00:00:00 2001
From: Konstantinos Kaloutas
Date: Mon, 24 Jul 2023 16:23:38 +0300
Subject: [PATCH 44/63] revert initial sidebar state changes
---
src/main/frontend/components/right_sidebar.cljs | 3 +++
src/main/frontend/state.cljs | 14 ++------------
2 files changed, 5 insertions(+), 12 deletions(-)
diff --git a/src/main/frontend/components/right_sidebar.cljs b/src/main/frontend/components/right_sidebar.cljs
index 1e59798b131e..b7e80dadf736 100644
--- a/src/main/frontend/components/right_sidebar.cljs
+++ b/src/main/frontend/components/right_sidebar.cljs
@@ -427,6 +427,9 @@
(rum/defcs sidebar < rum/reactive
[state]
(let [blocks (state/sub-right-sidebar-blocks)
+ blocks (if (empty? blocks)
+ [[(state/get-current-repo) "contents" :contents nil]]
+ blocks)
sidebar-open? (state/sub :ui/sidebar-open?)
width (state/sub :ui/sidebar-width)
repo (state/sub :git/current-repo)]
diff --git a/src/main/frontend/state.cljs b/src/main/frontend/state.cljs
index db9226275c10..85533531043f 100644
--- a/src/main/frontend/state.cljs
+++ b/src/main/frontend/state.cljs
@@ -1069,21 +1069,11 @@ Similar to re-frame subscriptions"
(defn toggle-sidebar-open?!
[]
- (let [current-repo (get-current-repo)
- blocks (filter #(= (first %) current-repo) (:sidebar/blocks @state))]
- (when (and (not (:ui/sidebar-open? @state)) (empty? blocks))
- (swap! state assoc :sidebar/blocks [[current-repo "contents" :contents nil]])
- (set-state! [:ui/sidebar-collapsed-blocks "contents"] false))
- (swap! state update :ui/sidebar-open? not)))
+ (swap! state update :ui/sidebar-open? not))
(defn open-right-sidebar!
[]
- (let [current-repo (get-current-repo)
- blocks (filter #(= (first %) current-repo) (:sidebar/blocks @state))]
- (when (empty? blocks)
- (swap! state assoc :sidebar/blocks [[current-repo "contents" :contents nil]])
- (set-state! [:ui/sidebar-collapsed-blocks "contents"] false))
- (swap! state assoc :ui/sidebar-open? true)))
+ (swap! state assoc :ui/sidebar-open? true))
(defn hide-right-sidebar!
[]
From e2206d303ac50eea4d2748b7f631fd27c5c498b0 Mon Sep 17 00:00:00 2001
From: Konstantinos Kaloutas
Date: Fri, 28 Jul 2023 13:15:02 +0300
Subject: [PATCH 45/63] fix border radius
---
src/main/frontend/components/right_sidebar.cljs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/main/frontend/components/right_sidebar.cljs b/src/main/frontend/components/right_sidebar.cljs
index b7e80dadf736..e4443b350665 100644
--- a/src/main/frontend/components/right_sidebar.cljs
+++ b/src/main/frontend/components/right_sidebar.cljs
@@ -224,7 +224,7 @@
(let [collapsed? (state/sub [:ui/sidebar-collapsed-blocks db-id])]
[:<>
(when (zero? idx) (drop-indicator (dec idx) drag-to))
- [:div.flex.sidebar-item.content.color-level.shadow-md.rounded
+ [:div.flex.sidebar-item.content.color-level.shadow-md.rounded-md.overflow-hidden
{:class [(str "item-type-" (name block-type))
(when collapsed? "collapsed")]}
(let [[title component] item]
From f7f470a4af20f5982f6f22c7de4e42f3dd7c21de Mon Sep 17 00:00:00 2001
From: Konstantinos Kaloutas
Date: Thu, 3 Aug 2023 11:00:41 +0300
Subject: [PATCH 46/63] fix: border and rounded corners
---
src/main/frontend/components/container.css | 2 --
src/main/frontend/components/right_sidebar.cljs | 5 +++--
2 files changed, 3 insertions(+), 4 deletions(-)
diff --git a/src/main/frontend/components/container.css b/src/main/frontend/components/container.css
index a97fdc816021..4b777856f8cb 100644
--- a/src/main/frontend/components/container.css
+++ b/src/main/frontend/components/container.css
@@ -642,8 +642,6 @@ html[data-theme='dark'] {
@apply relative;
flex: 1 1;
min-height: 100px;
- border: 1px solid transparent;
- transition: border-color 0.1s;
.sidebar-item-header {
white-space: nowrap;
diff --git a/src/main/frontend/components/right_sidebar.cljs b/src/main/frontend/components/right_sidebar.cljs
index e4443b350665..6ccea545552f 100644
--- a/src/main/frontend/components/right_sidebar.cljs
+++ b/src/main/frontend/components/right_sidebar.cljs
@@ -229,8 +229,9 @@
(when collapsed? "collapsed")]}
(let [[title component] item]
[:div.flex.flex-col.w-full.relative
- [:.flex.flex-row.justify-between.pr-2.sidebar-item-header.color-level
- {:draggable true
+ [:.flex.flex-row.justify-between.pr-2.sidebar-item-header.color-level.rounded-t-md
+ {:class (when collapsed? "rounded-b-md")
+ :draggable true
:on-drag-start (fn [event]
(editor-handler/block->data-transfer! (:block/name (db/entity db-id)) event)
(reset! *drag-from idx))
From 8f5cfbbfbad224f947e547dd083e56c4155008d5 Mon Sep 17 00:00:00 2001
From: Konstantinos Kaloutas
Date: Thu, 3 Aug 2023 11:14:47 +0300
Subject: [PATCH 47/63] fix: dnd delay
---
src/main/frontend/components/right_sidebar.cljs | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/main/frontend/components/right_sidebar.cljs b/src/main/frontend/components/right_sidebar.cljs
index 6ccea545552f..94b0b6b54692 100644
--- a/src/main/frontend/components/right_sidebar.cljs
+++ b/src/main/frontend/components/right_sidebar.cljs
@@ -389,6 +389,7 @@
[:div.cp__right-sidebar-inner.flex.flex-col.h-full#right-sidebar-container
[:div.cp__right-sidebar-scrollable
+ {:on-drag-over util/stop}
[:div.cp__right-sidebar-topbar.flex.flex-row.justify-between.items-center.px-2.h-12
[:div.cp__right-sidebar-settings.hide-scrollbar.gap-1 {:key "right-sidebar-settings"}
[:div.text-sm
From 56e6e934b85792f0e8324331b32f50e5241935a8 Mon Sep 17 00:00:00 2001
From: Konstantinos Kaloutas
Date: Wed, 26 Jul 2023 11:35:35 +0300
Subject: [PATCH 48/63] handle marked js
---
gulpfile.js | 3 ++-
package.json | 1 +
resources/js/marked.min.js | 6 ------
yarn.lock | 5 +++++
4 files changed, 8 insertions(+), 7 deletions(-)
delete mode 100644 resources/js/marked.min.js
diff --git a/gulpfile.js b/gulpfile.js
index 11be0ede2dfc..88b1dea89e5a 100644
--- a/gulpfile.js
+++ b/gulpfile.js
@@ -60,7 +60,8 @@ const common = {
'node_modules/interactjs/dist/interact.min.js',
'node_modules/photoswipe/dist/umd/*.js',
'node_modules/reveal.js/dist/reveal.js',
- 'node_modules/shepherd.js/dist/js/shepherd.min.js'
+ 'node_modules/shepherd.js/dist/js/shepherd.min.js',
+ 'node_modules/marked/marked.min.js'
]).pipe(gulp.dest(path.join(outputPath, 'js'))),
() => gulp.src([
'node_modules/@tabler/icons/iconfont/tabler-icons.min.css',
diff --git a/package.json b/package.json
index 71c3b49072e9..56eb9530e41f 100644
--- a/package.json
+++ b/package.json
@@ -121,6 +121,7 @@
"interactjs": "^1.10.17",
"jszip": "3.8.0",
"katex": "^0.16.7",
+ "marked": "^5.1.2",
"mldoc": "1.5.7",
"path": "0.12.7",
"path-complete-extname": "1.0.0",
diff --git a/resources/js/marked.min.js b/resources/js/marked.min.js
deleted file mode 100644
index b165759a531b..000000000000
--- a/resources/js/marked.min.js
+++ /dev/null
@@ -1,6 +0,0 @@
-/**
- * marked - a markdown parser
- * Copyright (c) 2011-2021, Christopher Jeffrey. (MIT Licensed)
- * https://github.com/markedjs/marked
- */
-!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).marked=t()}(this,function(){"use strict";function r(e,t){for(var u=0;ue.length)&&(t=e.length);for(var u=0,n=new Array(t);u=e.length?{done:!0}:{done:!1,value:e[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var t={exports:{}};function e(){return{baseUrl:null,breaks:!1,extensions:null,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1}}t.exports={defaults:e(),getDefaults:e,changeDefaults:function(e){t.exports.defaults=e}};function u(e){return D[e]}var n=/[&<>"']/,s=/[&<>"']/g,l=/[<>"']|&(?!#?\w+;)/,a=/[<>"']|&(?!#?\w+;)/g,D={"&":"&","<":"<",">":">",'"':""","'":"'"};var c=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi;function h(e){return e.replace(c,function(e,t){return"colon"===(t=t.toLowerCase())?":":"#"===t.charAt(0)?"x"===t.charAt(1)?String.fromCharCode(parseInt(t.substring(2),16)):String.fromCharCode(+t.substring(1)):""})}var p=/(^|[^\[])\^/g;var f=/[^\w:]/g,g=/^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;var F={},A=/^[^:]+:\/*[^/]*$/,C=/^([^:]+:)[\s\S]*$/,d=/^([^:]+:\/*[^/]*)[\s\S]*$/;function k(e,t){F[" "+e]||(A.test(e)?F[" "+e]=e+"/":F[" "+e]=E(e,"/",!0));var u=-1===(e=F[" "+e]).indexOf(":");return"//"===t.substring(0,2)?u?t:e.replace(C,"$1")+t:"/"===t.charAt(0)?u?t:e.replace(d,"$1")+t:e+t}function E(e,t,u){var n=e.length;if(0===n)return"";for(var r=0;rt)u.splice(t);else for(;u.length>=1,e+=e;return u+e},T=t.exports.defaults,R=_,I=y,Z=x,q=z;function O(e,t,u,n){var r=t.href,i=t.title?Z(t.title):null,t=e[1].replace(/\\([\[\]])/g,"$1");if("!"===e[0].charAt(0))return{type:"image",raw:u,href:r,title:i,text:Z(t)};n.state.inLink=!0;t={type:"link",raw:u,href:r,title:i,text:t,tokens:n.inlineTokens(t,[])};return n.state.inLink=!1,t}_=function(){function e(e){this.options=e||T}var t=e.prototype;return t.space=function(e){e=this.rules.block.newline.exec(e);if(e)return 1=u.length?e.slice(u.length):e}).join("\n")}(u,t[3]||"");return{type:"code",raw:u,lang:t[2]&&t[2].trim(),text:e}}},t.heading=function(e){var t=this.rules.block.heading.exec(e);if(t){var u=t[2].trim();/#$/.test(u)&&(e=R(u,"#"),!this.options.pedantic&&e&&!/ $/.test(e)||(u=e.trim()));u={type:"heading",raw:t[0],depth:t[1].length,text:u,tokens:[]};return this.lexer.inline(u.text,u.tokens),u}},t.hr=function(e){e=this.rules.block.hr.exec(e);if(e)return{type:"hr",raw:e[0]}},t.blockquote=function(e){var t=this.rules.block.blockquote.exec(e);if(t){e=t[0].replace(/^ *> ?/gm,"");return{type:"blockquote",raw:t[0],tokens:this.lexer.blockTokens(e,[]),text:e}}},t.list=function(e){var t=this.rules.block.list.exec(e);if(t){var u,n,r,i,s,l,a,o,D,c=1<(p=t[1].trim()).length,h={type:"list",raw:"",ordered:c,start:c?+p.slice(0,-1):"",loose:!1,items:[]},p=c?"\\d{1,9}\\"+p.slice(-1):"\\"+p;this.options.pedantic&&(p=c?p:"[*+-]");for(var f=new RegExp("^( {0,3}"+p+")((?: [^\\n]*| *)(?:\\n[^\\n]*)*(?:\\n|$))");e&&!this.rules.block.hr.test(e)&&(t=f.exec(e));){o=t[2].split("\n"),D=this.options.pedantic?(i=2,o[0].trimLeft()):(i=t[2].search(/[^ ]/),i=t[1].length+(4=i)&&a.trim()){u=t[1]+o.slice(0,F).join("\n")+"\n";break}D+="\n"+a.slice(i)}else a.trim()||(s=!0),a.search(/[^ ]/)>=i?D+="\n"+a.slice(i):D+="\n"+a}h.loose||(l?h.loose=!0:/\n *\n *$/.test(u)&&(l=!0)),this.options.gfm&&(n=/^\[[ xX]\] /.exec(D))&&(r="[ ] "!==n[0],D=D.replace(/^\[[ xX]\] +/,"")),h.items.push({type:"list_item",raw:u,task:!!n,checked:r,loose:!1,text:D}),h.raw+=u,e=e.slice(u.length)}h.items[h.items.length-1].raw=u.trimRight(),h.items[h.items.length-1].text=D.trimRight(),h.raw=h.raw.trimRight();var A=h.items.length;for(F=0;F/i.test(e[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&/^<(pre|code|kbd|script)(\s|>)/i.test(e[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(e[0])&&(this.lexer.state.inRawBlock=!1),{type:this.options.sanitize?"text":"html",raw:e[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,text:this.options.sanitize?this.options.sanitizer?this.options.sanitizer(e[0]):Z(e[0]):e[0]}},t.link=function(e){var t=this.rules.inline.link.exec(e);if(t){var u=t[2].trim();if(!this.options.pedantic&&/^$/.test(u))return;e=R(u.slice(0,-1),"\\");if((u.length-e.length)%2==0)return}else{var n=q(t[2],"()");-1$/.test(u)?n.slice(1):n.slice(1,-1):n)&&n.replace(this.rules.inline._escapes,"$1"),title:i&&i.replace(this.rules.inline._escapes,"$1")},t[0],this.lexer)}},t.reflink=function(e,t){if((u=this.rules.inline.reflink.exec(e))||(u=this.rules.inline.nolink.exec(e))){e=(u[2]||u[1]).replace(/\s+/g," ");if((e=t[e.toLowerCase()])&&e.href)return O(u,e,u[0],this.lexer);var u=u[0].charAt(0);return{type:"text",raw:u,text:u}}},t.emStrong=function(e,t,u){void 0===u&&(u="");var n=this.rules.inline.emStrong.lDelim.exec(e);if(n&&(!n[3]||!u.match(/(?:[0-9A-Za-z\xAA\xB2\xB3\xB5\xB9\xBA\xBC-\xBE\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u0660-\u0669\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07C0-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u08A0-\u08B4\u08B6-\u08C7\u0904-\u0939\u093D\u0950\u0958-\u0961\u0966-\u096F\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09E6-\u09F1\u09F4-\u09F9\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A66-\u0A6F\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AE6-\u0AEF\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B66-\u0B6F\u0B71-\u0B77\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0BE6-\u0BF2\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C66-\u0C6F\u0C78-\u0C7E\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CE6-\u0CEF\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D58-\u0D61\u0D66-\u0D78\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DE6-\u0DEF\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F20-\u0F33\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F-\u1049\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u1090-\u1099\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1369-\u137C\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u17E0-\u17E9\u17F0-\u17F9\u1810-\u1819\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A16\u1A20-\u1A54\u1A80-\u1A89\u1A90-\u1A99\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B50-\u1B59\u1B83-\u1BA0\u1BAE-\u1BE5\u1C00-\u1C23\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2070\u2071\u2074-\u2079\u207F-\u2089\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2150-\u2189\u2460-\u249B\u24EA-\u24FF\u2776-\u2793\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2CFD\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u3192-\u3195\u31A0-\u31BF\u31F0-\u31FF\u3220-\u3229\u3248-\u324F\u3251-\u325F\u3280-\u3289\u32B1-\u32BF\u3400-\u4DBF\u4E00-\u9FFC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7BF\uA7C2-\uA7CA\uA7F5-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA830-\uA835\uA840-\uA873\uA882-\uA8B3\uA8D0-\uA8D9\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA900-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF-\uA9D9\uA9E0-\uA9E4\uA9E6-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA50-\uAA59\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD07-\uDD33\uDD40-\uDD78\uDD8A\uDD8B\uDE80-\uDE9C\uDEA0-\uDED0\uDEE1-\uDEFB\uDF00-\uDF23\uDF2D-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC58-\uDC76\uDC79-\uDC9E\uDCA7-\uDCAF\uDCE0-\uDCF2\uDCF4\uDCF5\uDCFB-\uDD1B\uDD20-\uDD39\uDD80-\uDDB7\uDDBC-\uDDCF\uDDD2-\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE40-\uDE48\uDE60-\uDE7E\uDE80-\uDE9F\uDEC0-\uDEC7\uDEC9-\uDEE4\uDEEB-\uDEEF\uDF00-\uDF35\uDF40-\uDF55\uDF58-\uDF72\uDF78-\uDF91\uDFA9-\uDFAF]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDCFA-\uDD23\uDD30-\uDD39\uDE60-\uDE7E\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF27\uDF30-\uDF45\uDF51-\uDF54\uDFB0-\uDFCB\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC52-\uDC6F\uDC83-\uDCAF\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD03-\uDD26\uDD36-\uDD3F\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDD0-\uDDDA\uDDDC\uDDE1-\uDDF4\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDEF0-\uDEF9\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC50-\uDC59\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE50-\uDE59\uDE80-\uDEAA\uDEB8\uDEC0-\uDEC9\uDF00-\uDF1A\uDF30-\uDF3B]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCF2\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDD50-\uDD59\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC50-\uDC6C\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD50-\uDD59\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDDA0-\uDDA9\uDEE0-\uDEF2\uDFB0\uDFC0-\uDFD4]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF50-\uDF59\uDF5B-\uDF61\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE96\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82C[\uDC00-\uDD1E\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD834[\uDEE0-\uDEF3\uDF60-\uDF78]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD838[\uDD00-\uDD2C\uDD37-\uDD3D\uDD40-\uDD49\uDD4E\uDEC0-\uDEEB\uDEF0-\uDEF9]|\uD83A[\uDC00-\uDCC4\uDCC7-\uDCCF\uDD00-\uDD43\uDD4B\uDD50-\uDD59]|\uD83B[\uDC71-\uDCAB\uDCAD-\uDCAF\uDCB1-\uDCB4\uDD01-\uDD2D\uDD2F-\uDD3D\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD83C[\uDD00-\uDD0C]|\uD83E[\uDFF0-\uDFF9]|\uD869[\uDC00-\uDEDD\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A])/))){var r=n[1]||n[2]||"";if(!r||""===u||this.rules.inline.punctuation.exec(u)){var i,s=n[0].length-1,l=s,a=0,o="*"===n[0][0]?this.rules.inline.emStrong.rDelimAst:this.rules.inline.emStrong.rDelimUnd;for(o.lastIndex=0,t=t.slice(-1*e.length+s);null!=(n=o.exec(t));)if(i=n[1]||n[2]||n[3]||n[4]||n[5]||n[6])if(i=i.length,n[3]||n[4])l+=i;else if(!((n[5]||n[6])&&s%3)||(s+i)%3){if(!(0<(l-=i))){if(i=Math.min(i,i+l+a),Math.min(s,i)%2){var D=e.slice(1,s+n.index+i);return{type:"em",raw:e.slice(0,s+n.index+i+1),text:D,tokens:this.lexer.inlineTokens(D,[])}}D=e.slice(2,s+n.index+i-1);return{type:"strong",raw:e.slice(0,s+n.index+i+1),text:D,tokens:this.lexer.inlineTokens(D,[])}}}else a+=i}}},t.codespan=function(e){var t=this.rules.inline.code.exec(e);if(t){var u=t[2].replace(/\n/g," "),n=/[^ ]/.test(u),e=/^ /.test(u)&&/ $/.test(u);return n&&e&&(u=u.substring(1,u.length-1)),u=Z(u,!0),{type:"codespan",raw:t[0],text:u}}},t.br=function(e){e=this.rules.inline.br.exec(e);if(e)return{type:"br",raw:e[0]}},t.del=function(e){e=this.rules.inline.del.exec(e);if(e)return{type:"del",raw:e[0],text:e[2],tokens:this.lexer.inlineTokens(e[2],[])}},t.autolink=function(e,t){e=this.rules.inline.autolink.exec(e);if(e){var u,t="@"===e[2]?"mailto:"+(u=Z(this.options.mangle?t(e[1]):e[1])):u=Z(e[1]);return{type:"link",raw:e[0],text:u,href:t,tokens:[{type:"text",raw:u,text:u}]}}},t.url=function(e,t){var u,n,r,i;if(u=this.rules.inline.url.exec(e)){if("@"===u[2])r="mailto:"+(n=Z(this.options.mangle?t(u[0]):u[0]));else{for(;i=u[0],u[0]=this.rules.inline._backpedal.exec(u[0])[0],i!==u[0];);n=Z(u[0]),r="www."===u[1]?"http://"+n:n}return{type:"link",raw:u[0],text:n,href:r,tokens:[{type:"text",raw:n,text:n}]}}},t.inlineText=function(e,t){e=this.rules.inline.text.exec(e);if(e){t=this.lexer.state.inRawBlock?this.options.sanitize?this.options.sanitizer?this.options.sanitizer(e[0]):Z(e[0]):e[0]:Z(this.options.smartypants?t(e[0]):e[0]);return{type:"text",raw:e[0],text:t}}},e}(),y=w,z=b,w=v,b={newline:/^(?: *(?:\n|$))+/,code:/^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,fences:/^ {0,3}(`{3,}(?=[^`\n]*\n)|~{3,})([^\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?=\n|$)|$)/,hr:/^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/,heading:/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,blockquote:/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,list:/^( {0,3}bull)( [^\n]+?)?(?:\n|$)/,html:"^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n *)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)|(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$))",def:/^ {0,3}\[(label)\]: *\n? *([^\s>]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/,table:y,lheading:/^([^\n]+)\n {0,3}(=+|-+) *(?:\n+|$)/,_paragraph:/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html| +\n)[^\n]+)*)/,text:/^[^\n]+/,_label:/(?!\s*\])(?:\\[\[\]]|[^\[\]])+/,_title:/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/};b.def=z(b.def).replace("label",b._label).replace("title",b._title).getRegex(),b.bullet=/(?:[*+-]|\d{1,9}[.)])/,b.listItemStart=z(/^( *)(bull) */).replace("bull",b.bullet).getRegex(),b.list=z(b.list).replace(/bull/g,b.bullet).replace("hr","\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def","\\n+(?="+b.def.source+")").getRegex(),b._tag="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",b._comment=/|$)/,b.html=z(b.html,"i").replace("comment",b._comment).replace("tag",b._tag).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),b.paragraph=z(b._paragraph).replace("hr",b.hr).replace("heading"," {0,3}#{1,6} ").replace("|lheading","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",b._tag).getRegex(),b.blockquote=z(b.blockquote).replace("paragraph",b.paragraph).getRegex(),b.normal=w({},b),b.gfm=w({},b.normal,{table:"^ *([^\\n ].*\\|.*)\\n {0,3}(?:\\| *)?(:?-+:? *(?:\\| *:?-+:? *)*)\\|?(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)"}),b.gfm.table=z(b.gfm.table).replace("hr",b.hr).replace("heading"," {0,3}#{1,6} ").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",b._tag).getRegex(),b.pedantic=w({},b.normal,{html:z("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?\\1> *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",b._comment).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:y,paragraph:z(b.normal._paragraph).replace("hr",b.hr).replace("heading"," *#{1,6} *[^\n]").replace("lheading",b.lheading).replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").getRegex()});y={escape:/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,autolink:/^<(scheme:[^\s\x00-\x1f<>]*|email)>/,url:y,tag:"^comment|^[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^",link:/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/,reflink:/^!?\[(label)\]\[(?!\s*\])((?:\\[\[\]]?|[^\[\]\\])+)\]/,nolink:/^!?\[(?!\s*\])((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\](?:\[\])?/,reflinkSearch:"reflink|nolink(?!\\()",emStrong:{lDelim:/^(?:\*+(?:([punct_])|[^\s*]))|^_+(?:([punct*])|([^\s_]))/,rDelimAst:/\_\_[^_*]*?\*[^_*]*?\_\_|[punct_](\*+)(?=[\s]|$)|[^punct*_\s](\*+)(?=[punct_\s]|$)|[punct_\s](\*+)(?=[^punct*_\s])|[\s](\*+)(?=[punct_])|[punct_](\*+)(?=[punct_])|[^punct*_\s](\*+)(?=[^punct*_\s])/,rDelimUnd:/\*\*[^_*]*?\_[^_*]*?\*\*|[punct*](\_+)(?=[\s]|$)|[^punct*_\s](\_+)(?=[punct*\s]|$)|[punct*\s](\_+)(?=[^punct*_\s])|[\s](\_+)(?=[punct*])|[punct*](\_+)(?=[punct*])/},code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,br:/^( {2,}|\\)\n(?!\s*$)/,del:y,text:/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\?@\\[\\]`^{|}~"};y.punctuation=z(y.punctuation).replace(/punctuation/g,y._punctuation).getRegex(),y.blockSkip=/\[[^\]]*?\]\([^\)]*?\)|`[^`]*?`|<[^>]*?>/g,y.escapedEmSt=/\\\*|\\_/g,y._comment=z(b._comment).replace("(?:--\x3e|$)","--\x3e").getRegex(),y.emStrong.lDelim=z(y.emStrong.lDelim).replace(/punct/g,y._punctuation).getRegex(),y.emStrong.rDelimAst=z(y.emStrong.rDelimAst,"g").replace(/punct/g,y._punctuation).getRegex(),y.emStrong.rDelimUnd=z(y.emStrong.rDelimUnd,"g").replace(/punct/g,y._punctuation).getRegex(),y._escapes=/\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g,y._scheme=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/,y._email=/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/,y.autolink=z(y.autolink).replace("scheme",y._scheme).replace("email",y._email).getRegex(),y._attribute=/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/,y.tag=z(y.tag).replace("comment",y._comment).replace("attribute",y._attribute).getRegex(),y._label=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,y._href=/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/,y._title=/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/,y.link=z(y.link).replace("label",y._label).replace("href",y._href).replace("title",y._title).getRegex(),y.reflink=z(y.reflink).replace("label",y._label).getRegex(),y.reflinkSearch=z(y.reflinkSearch,"g").replace("reflink",y.reflink).replace("nolink",y.nolink).getRegex(),y.normal=w({},y),y.pedantic=w({},y.normal,{strong:{start:/^__|\*\*/,middle:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,endAst:/\*\*(?!\*)/g,endUnd:/__(?!_)/g},em:{start:/^_|\*/,middle:/^()\*(?=\S)([\s\S]*?\S)\*(?!\*)|^_(?=\S)([\s\S]*?\S)_(?!_)/,endAst:/\*(?!\*)/g,endUnd:/_(?!_)/g},link:z(/^!?\[(label)\]\((.*?)\)/).replace("label",y._label).getRegex(),reflink:z(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",y._label).getRegex()}),y.gfm=w({},y.normal,{escape:z(y.escape).replace("])","~|])").getRegex(),_extended_email:/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,url:/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,_backpedal:/(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\'+(u?e:V(e,!0))+"
\n":""+(u?e:V(e,!0))+"
\n"},t.blockquote=function(e){return"\n"+e+"
\n"},t.html=function(e){return e},t.heading=function(e,t,u,n){return this.options.headerIds?"\n":""+e+"\n"},t.hr=function(){return this.options.xhtml?"
\n":"
\n"},t.list=function(e,t,u){var n=t?"ol":"ul";return"<"+n+(t&&1!==u?' start="'+u+'"':"")+">\n"+e+""+n+">\n"},t.listitem=function(e){return""+e+"\n"},t.checkbox=function(e){return" "},t.paragraph=function(e){return""+e+"
\n"},t.table=function(e,t){return"\n\n"+e+"\n"+(t=t&&""+t+"")+"
\n"},t.tablerow=function(e){return"\n"+e+"
\n"},t.tablecell=function(e,t){var u=t.header?"th":"td";return(t.align?"<"+u+' align="'+t.align+'">':"<"+u+">")+e+""+u+">\n"},t.strong=function(e){return""+e+""},t.em=function(e){return""+e+""},t.codespan=function(e){return""+e+"
"},t.br=function(){return this.options.xhtml?"
":"
"},t.del=function(e){return""+e+""},t.link=function(e,t,u){if(null===(e=G(this.options.sanitize,this.options.baseUrl,e)))return u;e='"+u+""},t.image=function(e,t,u){if(null===(e=G(this.options.sanitize,this.options.baseUrl,e)))return u;u='":">"},t.text=function(e){return e},e}(),S=function(){function e(){}var t=e.prototype;return t.strong=function(e){return e},t.em=function(e){return e},t.codespan=function(e){return e},t.del=function(e){return e},t.html=function(e){return e},t.text=function(e){return e},t.link=function(e,t,u){return""+u},t.image=function(e,t,u){return""+u},t.br=function(){return""},e}(),B=function(){function e(){this.seen={}}var t=e.prototype;return t.serialize=function(e){return e.toLowerCase().trim().replace(/<[!\/a-z].*?>/gi,"").replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g,"").replace(/\s/g,"-")},t.getNextSafeSlug=function(e,t){var u=e,n=0;if(this.seen.hasOwnProperty(u))for(n=this.seen[e];u=e+"-"+ ++n,this.seen.hasOwnProperty(u););return t||(this.seen[e]=n,this.seen[u]=0),u},t.slug=function(e,t){void 0===t&&(t={});var u=this.serialize(e);return this.getNextSafeSlug(u,t.dryrun)},e}(),H=b,J=S,K=B,W=t.exports.defaults,Y=m,ee=y,te=function(){function u(e){this.options=e||W,this.options.renderer=this.options.renderer||new H,this.renderer=this.options.renderer,this.renderer.options=this.options,this.textRenderer=new J,this.slugger=new K}u.parse=function(e,t){return new u(t).parse(e)},u.parseInline=function(e,t){return new u(t).parseInline(e)};var e=u.prototype;return e.parse=function(e,t){void 0===t&&(t=!0);for(var u,n,r,i,s,l,a,o,D,c,h,p,f,g,F,A,C="",d=e.length,k=0;kAn error occurred:
"+se(e.message+"",!0)+"
";throw e}}return ae.options=ae.setOptions=function(e){return re(ae.defaults,e),le(ae.defaults),ae},ae.getDefaults=$,ae.defaults=x,ae.use=function(){for(var u=this,e=arguments.length,t=new Array(e),n=0;nAn error occurred:"+se(e.message+"",!0)+"
";throw e}},ae.Parser=te,ae.parser=te.parse,ae.Renderer=ne,ae.TextRenderer=S,ae.Lexer=ee,ae.lexer=ee.lex,ae.Tokenizer=ue,ae.Slugger=B,ae.parse=ae});
\ No newline at end of file
diff --git a/yarn.lock b/yarn.lock
index d78b5a4d7331..3e3a37d90405 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -4501,6 +4501,11 @@ map-visit@^1.0.0:
dependencies:
object-visit "^1.0.0"
+marked@^5.1.2:
+ version "5.1.2"
+ resolved "https://registry.npmjs.org/marked/-/marked-5.1.2.tgz#62b5ccfc75adf72ca3b64b2879b551d89e77677f"
+ integrity sha512-ahRPGXJpjMjwSOlBoTMZAK7ATXkli5qCPxZ21TG44rx1KEo44bii4ekgTDQPNRQ4Kh7JMb9Ub1PVk1NxRSsorg==
+
matchdep@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/matchdep/-/matchdep-2.0.0.tgz#c6f34834a0d8dbc3b37c27ee8bbcb27c7775582e"
From 1a9017f757a0fcb55effe176556b5f9d237a0435 Mon Sep 17 00:00:00 2001
From: Konstantinos Kaloutas
Date: Wed, 26 Jul 2023 12:01:00 +0300
Subject: [PATCH 49/63] handle highlight.js
---
gulpfile.js | 3 ++-
package.json | 2 +-
resources/js/highlight.min.js | 2 --
yarn.lock | 10 +++++-----
4 files changed, 8 insertions(+), 9 deletions(-)
delete mode 100644 resources/js/highlight.min.js
diff --git a/gulpfile.js b/gulpfile.js
index 88b1dea89e5a..18d73b17b043 100644
--- a/gulpfile.js
+++ b/gulpfile.js
@@ -61,7 +61,8 @@ const common = {
'node_modules/photoswipe/dist/umd/*.js',
'node_modules/reveal.js/dist/reveal.js',
'node_modules/shepherd.js/dist/js/shepherd.min.js',
- 'node_modules/marked/marked.min.js'
+ 'node_modules/marked/marked.min.js',
+ 'node_modules/@highlightjs/cdn-assets/highlight.min.js'
]).pipe(gulp.dest(path.join(outputPath, 'js'))),
() => gulp.src([
'node_modules/@tabler/icons/iconfont/tabler-icons.min.css',
diff --git a/package.json b/package.json
index 56eb9530e41f..76811112dc86 100644
--- a/package.json
+++ b/package.json
@@ -89,6 +89,7 @@
"@capacitor/status-bar": "^4.0.0",
"@capawesome/capacitor-background-task": "^2.0.0",
"@excalidraw/excalidraw": "0.12.0",
+ "@highlightjs/cdn-assets": "10.4.1",
"@hugotomazi/capacitor-navigation-bar": "^2.0.0",
"@logseq/capacitor-file-sync": "0.0.32",
"@logseq/diff-merge": "0.2.2",
@@ -114,7 +115,6 @@
"fuse.js": "6.4.6",
"grapheme-splitter": "1.0.4",
"graphology": "0.20.0",
- "highlight.js": "10.4.1",
"html2canvas": "^1.4.1",
"ignore": "5.1.8",
"inter-ui": "^3.19.3",
diff --git a/resources/js/highlight.min.js b/resources/js/highlight.min.js
deleted file mode 100644
index d3543ffd00ee..000000000000
--- a/resources/js/highlight.min.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/*! highlight.js v9.18.1 | BSD3 License | git.io/hljslicense */
-!function(e){var n="object"==typeof window&&window||"object"==typeof self&&self;"undefined"==typeof exports||exports.nodeType?n&&(n.hljs=e({}),"function"==typeof define&&define.amd&&define([],function(){return n.hljs})):e(exports)}(function(a){var f=[],o=Object.keys,_={},g={},C=!0,n=/^(no-?highlight|plain|text)$/i,E=/\blang(?:uage)?-([\w-]+)\b/i,t=/((^(<[^>]+>|\t|)+|(?:\n)))/gm,r={case_insensitive:"cI",lexemes:"l",contains:"c",keywords:"k",subLanguage:"sL",className:"cN",begin:"b",beginKeywords:"bK",end:"e",endsWithParent:"eW",illegal:"i",excludeBegin:"eB",excludeEnd:"eE",returnBegin:"rB",returnEnd:"rE",variants:"v",IDENT_RE:"IR",UNDERSCORE_IDENT_RE:"UIR",NUMBER_RE:"NR",C_NUMBER_RE:"CNR",BINARY_NUMBER_RE:"BNR",RE_STARTERS_RE:"RSR",BACKSLASH_ESCAPE:"BE",APOS_STRING_MODE:"ASM",QUOTE_STRING_MODE:"QSM",PHRASAL_WORDS_MODE:"PWM",C_LINE_COMMENT_MODE:"CLCM",C_BLOCK_COMMENT_MODE:"CBCM",HASH_COMMENT_MODE:"HCM",NUMBER_MODE:"NM",C_NUMBER_MODE:"CNM",BINARY_NUMBER_MODE:"BNM",CSS_NUMBER_MODE:"CSSNM",REGEXP_MODE:"RM",TITLE_MODE:"TM",UNDERSCORE_TITLE_MODE:"UTM",COMMENT:"C",beginRe:"bR",endRe:"eR",illegalRe:"iR",lexemesRe:"lR",terminators:"t",terminator_end:"tE"},m="",O="Could not find the language '{}', did you forget to load/include a language module?",B={classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:void 0},c="of and for in not or if then".split(" ");function x(e){return e.replace(/&/g,"&").replace(//g,">")}function d(e){return e.nodeName.toLowerCase()}function R(e){return n.test(e)}function i(e){var n,t={},r=Array.prototype.slice.call(arguments,1);for(n in e)t[n]=e[n];return r.forEach(function(e){for(n in e)t[n]=e[n]}),t}function p(e){var a=[];return function e(n,t){for(var r=n.firstChild;r;r=r.nextSibling)3===r.nodeType?t+=r.nodeValue.length:1===r.nodeType&&(a.push({event:"start",offset:t,node:r}),t=e(r,t),d(r).match(/br|hr|img|input/)||a.push({event:"stop",offset:t,node:r}));return t}(e,0),a}function v(e,n,t){var r=0,a="",i=[];function o(){return e.length&&n.length?e[0].offset!==n[0].offset?e[0].offset"}function l(e){a+=""+d(e)+">"}function u(e){("start"===e.event?c:l)(e.node)}for(;e.length||n.length;){var s=o();if(a+=x(t.substring(r,s[0].offset)),r=s[0].offset,s===e){for(i.reverse().forEach(l);u(s.splice(0,1)[0]),(s=o())===e&&s.length&&s[0].offset===r;);i.reverse().forEach(c)}else"start"===s[0].event?i.push(s[0].node):i.pop(),u(s.splice(0,1)[0])}return a+x(t.substr(r))}function l(n){return n.v&&!n.cached_variants&&(n.cached_variants=n.v.map(function(e){return i(n,{v:null},e)})),n.cached_variants?n.cached_variants:function e(n){return!!n&&(n.eW||e(n.starts))}(n)?[i(n,{starts:n.starts?i(n.starts):null})]:Object.isFrozen(n)?[i(n)]:[n]}function u(e){if(r&&!e.langApiRestored){for(var n in e.langApiRestored=!0,r)e[n]&&(e[r[n]]=e[n]);(e.c||[]).concat(e.v||[]).forEach(u)}}function M(n,t){var i={};return"string"==typeof n?r("keyword",n):o(n).forEach(function(e){r(e,n[e])}),i;function r(a,e){t&&(e=e.toLowerCase()),e.split(" ").forEach(function(e){var n,t,r=e.split("|");i[r[0]]=[a,(n=r[0],(t=r[1])?Number(t):function(e){return-1!=c.indexOf(e.toLowerCase())}(n)?0:1)]})}}function S(r){function s(e){return e&&e.source||e}function f(e,n){return new RegExp(s(e),"m"+(r.cI?"i":"")+(n?"g":""))}function a(a){var i,e,o={},c=[],l={},t=1;function n(e,n){o[t]=e,c.push([e,n]),t+=new RegExp(n.toString()+"|").exec("").length-1+1}for(var r=0;r')+n+(t?"":m)}function o(){p+=(null!=d.sL?function(){var e="string"==typeof d.sL;if(e&&!_[d.sL])return x(v);var n=e?T(d.sL,v,!0,R[d.sL]):w(v,d.sL.length?d.sL:void 0);return 0")+'"');if("end"===n.type){var r=s(n);if(null!=r)return r}return v+=t,t.length}var g=D(n);if(!g)throw console.error(O.replace("{}",n)),new Error('Unknown language: "'+n+'"');S(g);var E,d=t||g,R={},p="";for(E=d;E!==g;E=E.parent)E.cN&&(p=c(E.cN,"",!0)+p);var v="",M=0;try{for(var b,h,N=0;d.t.lastIndex=N,b=d.t.exec(i);)h=r(i.substring(N,b.index),b),N=b.index+h;for(r(i.substr(N)),E=d;E.parent;E=E.parent)E.cN&&(p+=m);return{relevance:M,value:p,i:!1,language:n,top:d}}catch(e){if(e.message&&-1!==e.message.indexOf("Illegal"))return{i:!0,relevance:0,value:x(i)};if(C)return{relevance:0,value:x(i),language:n,top:d,errorRaised:e};throw e}}function w(t,e){e=e||B.languages||o(_);var r={relevance:0,value:x(t)},a=r;return e.filter(D).filter(L).forEach(function(e){var n=T(e,t,!1);n.language=e,n.relevance>a.relevance&&(a=n),n.relevance>r.relevance&&(a=r,r=n)}),a.language&&(r.second_best=a),r}function b(e){return B.tabReplace||B.useBR?e.replace(t,function(e,n){return B.useBR&&"\n"===e?"
":B.tabReplace?n.replace(/\t/g,B.tabReplace):""}):e}function s(e){var n,t,r,a,i,o,c,l,u,s,f=function(e){var n,t,r,a,i=e.className+" ";if(i+=e.parentNode?e.parentNode.className:"",t=E.exec(i)){var o=D(t[1]);return o||(console.warn(O.replace("{}",t[1])),console.warn("Falling back to no-highlight mode for this block.",e)),o?t[1]:"no-highlight"}for(n=0,r=(i=i.split(/\s+/)).length;n/g,"\n"):n=e,i=n.textContent,r=f?T(f,i,!0):w(i),(t=p(n)).length&&((a=document.createElement("div")).innerHTML=r.value,r.value=v(t,p(a),i)),r.value=b(r.value),e.innerHTML=r.value,e.className=(o=e.className,c=f,l=r.language,u=c?g[c]:l,s=[o.trim()],o.match(/\bhljs\b/)||s.push("hljs"),-1===o.indexOf(u)&&s.push(u),s.join(" ").trim()),e.result={language:r.language,re:r.relevance},r.second_best&&(e.second_best={language:r.second_best.language,re:r.second_best.relevance}))}function h(){if(!h.called){h.called=!0;var e=document.querySelectorAll("pre code");f.forEach.call(e,s)}}var N={disableAutodetect:!0};function D(e){return e=(e||"").toLowerCase(),_[e]||_[g[e]]}function L(e){var n=D(e);return n&&!n.disableAutodetect}return a.highlight=T,a.highlightAuto=w,a.fixMarkup=b,a.highlightBlock=s,a.configure=function(e){B=i(B,e)},a.initHighlighting=h,a.initHighlightingOnLoad=function(){window.addEventListener("DOMContentLoaded",h,!1),window.addEventListener("load",h,!1)},a.registerLanguage=function(n,e){var t;try{t=e(a)}catch(e){if(console.error("Language definition for '{}' could not be registered.".replace("{}",n)),!C)throw e;console.error(e),t=N}u(_[n]=t),t.rawDefinition=e.bind(null,a),t.aliases&&t.aliases.forEach(function(e){g[e]=n})},a.listLanguages=function(){return o(_)},a.getLanguage=D,a.requireLanguage=function(e){var n=D(e);if(n)return n;throw new Error("The '{}' language is required, but not loaded.".replace("{}",e))},a.autoDetection=L,a.inherit=i,a.debugMode=function(){C=!1},a.IR=a.IDENT_RE="[a-zA-Z]\\w*",a.UIR=a.UNDERSCORE_IDENT_RE="[a-zA-Z_]\\w*",a.NR=a.NUMBER_RE="\\b\\d+(\\.\\d+)?",a.CNR=a.C_NUMBER_RE="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",a.BNR=a.BINARY_NUMBER_RE="\\b(0b[01]+)",a.RSR=a.RE_STARTERS_RE="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",a.BE=a.BACKSLASH_ESCAPE={b:"\\\\[\\s\\S]",relevance:0},a.ASM=a.APOS_STRING_MODE={cN:"string",b:"'",e:"'",i:"\\n",c:[a.BE]},a.QSM=a.QUOTE_STRING_MODE={cN:"string",b:'"',e:'"',i:"\\n",c:[a.BE]},a.PWM=a.PHRASAL_WORDS_MODE={b:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},a.C=a.COMMENT=function(e,n,t){var r=a.inherit({cN:"comment",b:e,e:n,c:[]},t||{});return r.c.push(a.PWM),r.c.push({cN:"doctag",b:"(?:TODO|FIXME|NOTE|BUG|XXX):",relevance:0}),r},a.CLCM=a.C_LINE_COMMENT_MODE=a.C("//","$"),a.CBCM=a.C_BLOCK_COMMENT_MODE=a.C("/\\*","\\*/"),a.HCM=a.HASH_COMMENT_MODE=a.C("#","$"),a.NM=a.NUMBER_MODE={cN:"number",b:a.NR,relevance:0},a.CNM=a.C_NUMBER_MODE={cN:"number",b:a.CNR,relevance:0},a.BNM=a.BINARY_NUMBER_MODE={cN:"number",b:a.BNR,relevance:0},a.CSSNM=a.CSS_NUMBER_MODE={cN:"number",b:a.NR+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},a.RM=a.REGEXP_MODE={cN:"regexp",b:/\//,e:/\/[gimuy]*/,i:/\n/,c:[a.BE,{b:/\[/,e:/\]/,relevance:0,c:[a.BE]}]},a.TM=a.TITLE_MODE={cN:"title",b:a.IR,relevance:0},a.UTM=a.UNDERSCORE_TITLE_MODE={cN:"title",b:a.UIR,relevance:0},a.METHOD_GUARD={b:"\\.\\s*"+a.UIR,relevance:0},[a.BE,a.ASM,a.QSM,a.PWM,a.C,a.CLCM,a.CBCM,a.HCM,a.NM,a.CNM,a.BNM,a.CSSNM,a.RM,a.TM,a.UTM,a.METHOD_GUARD].forEach(function(e){!function n(t){Object.freeze(t);var r="function"==typeof t;Object.getOwnPropertyNames(t).forEach(function(e){!t.hasOwnProperty(e)||null===t[e]||"object"!=typeof t[e]&&"function"!=typeof t[e]||r&&("caller"===e||"callee"===e||"arguments"===e)||Object.isFrozen(t[e])||n(t[e])});return t}(e)}),a});hljs.registerLanguage("http",function(e){var t="HTTP/[0-9\\.]+";return{aliases:["https"],i:"\\S",c:[{b:"^"+t,e:"$",c:[{cN:"number",b:"\\b\\d{3}\\b"}]},{b:"^[A-Z]+ (.*?) "+t+"$",rB:!0,e:"$",c:[{cN:"string",b:" ",e:" ",eB:!0,eE:!0},{b:t},{cN:"keyword",b:"[A-Z]+"}]},{cN:"attribute",b:"^\\w",e:": ",eE:!0,i:"\\n|\\s|=",starts:{e:"$",relevance:0}},{b:"\\n\\n",starts:{sL:[],eW:!0}}]}});hljs.registerLanguage("coffeescript",function(e){var c={keyword:"in if for while finally new do return else break catch instanceof throw try this switch continue typeof delete debugger super yield import export from as default await then unless until loop of by when and or is isnt not",literal:"true false null undefined yes no on off",built_in:"npm require console print module global window document"},n="[A-Za-z$_][0-9A-Za-z$_]*",r={cN:"subst",b:/#\{/,e:/}/,k:c},i=[e.BNM,e.inherit(e.CNM,{starts:{e:"(\\s*/)?",relevance:0}}),{cN:"string",v:[{b:/'''/,e:/'''/,c:[e.BE]},{b:/'/,e:/'/,c:[e.BE]},{b:/"""/,e:/"""/,c:[e.BE,r]},{b:/"/,e:/"/,c:[e.BE,r]}]},{cN:"regexp",v:[{b:"///",e:"///",c:[r,e.HCM]},{b:"//[gim]{0,3}(?=\\W)",relevance:0},{b:/\/(?![ *]).*?(?![\\]).\/[gim]{0,3}(?=\W)/}]},{b:"@"+n},{sL:"javascript",eB:!0,eE:!0,v:[{b:"```",e:"```"},{b:"`",e:"`"}]}];r.c=i;var s=e.inherit(e.TM,{b:n}),t="(\\(.*\\))?\\s*\\B[-=]>",a={cN:"params",b:"\\([^\\(]",rB:!0,c:[{b:/\(/,e:/\)/,k:c,c:["self"].concat(i)}]};return{aliases:["coffee","cson","iced"],k:c,i:/\/\*/,c:i.concat([e.C("###","###"),e.HCM,{cN:"function",b:"^\\s*"+n+"\\s*=\\s*"+t,e:"[-=]>",rB:!0,c:[s,a]},{b:/[:\(,=]\s*/,relevance:0,c:[{cN:"function",b:t,e:"[-=]>",rB:!0,c:[a]}]},{cN:"class",bK:"class",e:"$",i:/[:="\[\]]/,c:[{bK:"extends",eW:!0,i:/[:="\[\]]/,c:[s]},s]},{b:n+":",e:":",rB:!0,rE:!0,relevance:0}])}});hljs.registerLanguage("diff",function(e){return{aliases:["patch"],c:[{cN:"meta",relevance:10,v:[{b:/^@@ +\-\d+,\d+ +\+\d+,\d+ +@@$/},{b:/^\*\*\* +\d+,\d+ +\*\*\*\*$/},{b:/^\-\-\- +\d+,\d+ +\-\-\-\-$/}]},{cN:"comment",v:[{b:/Index: /,e:/$/},{b:/={3,}/,e:/$/},{b:/^\-{3}/,e:/$/},{b:/^\*{3} /,e:/$/},{b:/^\+{3}/,e:/$/},{b:/^\*{15}$/}]},{cN:"addition",b:"^\\+",e:"$"},{cN:"deletion",b:"^\\-",e:"$"},{cN:"addition",b:"^\\!",e:"$"}]}});hljs.registerLanguage("ruby",function(e){var c="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?",b={keyword:"and then defined module in return redo if BEGIN retry end for self when next until do begin unless END rescue else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor",literal:"true false nil"},r={cN:"doctag",b:"@[A-Za-z]+"},a={b:"#<",e:">"},n=[e.C("#","$",{c:[r]}),e.C("^\\=begin","^\\=end",{c:[r],relevance:10}),e.C("^__END__","\\n$")],s={cN:"subst",b:"#\\{",e:"}",k:b},t={cN:"string",c:[e.BE,s],v:[{b:/'/,e:/'/},{b:/"/,e:/"/},{b:/`/,e:/`/},{b:"%[qQwWx]?\\(",e:"\\)"},{b:"%[qQwWx]?\\[",e:"\\]"},{b:"%[qQwWx]?{",e:"}"},{b:"%[qQwWx]?<",e:">"},{b:"%[qQwWx]?/",e:"/"},{b:"%[qQwWx]?%",e:"%"},{b:"%[qQwWx]?-",e:"-"},{b:"%[qQwWx]?\\|",e:"\\|"},{b:/\B\?(\\\d{1,3}|\\x[A-Fa-f0-9]{1,2}|\\u[A-Fa-f0-9]{4}|\\?\S)\b/},{b:/<<[-~]?'?(\w+)(?:.|\n)*?\n\s*\1\b/,rB:!0,c:[{b:/<<[-~]?'?/},{b:/\w+/,endSameAsBegin:!0,c:[e.BE,s]}]}]},i={cN:"params",b:"\\(",e:"\\)",endsParent:!0,k:b},l=[t,a,{cN:"class",bK:"class module",e:"$|;",i:/=/,c:[e.inherit(e.TM,{b:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"}),{b:"<\\s*",c:[{b:"("+e.IR+"::)?"+e.IR}]}].concat(n)},{cN:"function",bK:"def",e:"$|;",c:[e.inherit(e.TM,{b:c}),i].concat(n)},{b:e.IR+"::"},{cN:"symbol",b:e.UIR+"(\\!|\\?)?:",relevance:0},{cN:"symbol",b:":(?!\\s)",c:[t,{b:c}],relevance:0},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},{b:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{cN:"params",b:/\|/,e:/\|/,k:b},{b:"("+e.RSR+"|unless)\\s*",k:"unless",c:[a,{cN:"regexp",c:[e.BE,s],i:/\n/,v:[{b:"/",e:"/[a-z]*"},{b:"%r{",e:"}[a-z]*"},{b:"%r\\(",e:"\\)[a-z]*"},{b:"%r!",e:"![a-z]*"},{b:"%r\\[",e:"\\][a-z]*"}]}].concat(n),relevance:0}].concat(n);s.c=l;var d=[{b:/^\s*=>/,starts:{e:"$",c:i.c=l}},{cN:"meta",b:"^([>?]>|[\\w#]+\\(\\w+\\):\\d+:\\d+>|(\\w+-)?\\d+\\.\\d+\\.\\d(p\\d+)?[^>]+>)",starts:{e:"$",c:l}}];return{aliases:["rb","gemspec","podspec","thor","irb"],k:b,i:/\/\*/,c:n.concat(d).concat(l)}});hljs.registerLanguage("sql",function(e){var t=e.C("--","$");return{cI:!0,i:/[<>{}*]/,c:[{bK:"begin end start commit rollback savepoint lock alter create drop rename call delete do handler insert load replace select truncate update set show pragma grant merge describe use explain help declare prepare execute deallocate release unlock purge reset change stop analyze cache flush optimize repair kill install uninstall checksum restore check backup revoke comment values with",e:/;/,eW:!0,l:/[\w\.]+/,k:{keyword:"as abort abs absolute acc acce accep accept access accessed accessible account acos action activate add addtime admin administer advanced advise aes_decrypt aes_encrypt after agent aggregate ali alia alias all allocate allow alter always analyze ancillary and anti any anydata anydataset anyschema anytype apply archive archived archivelog are as asc ascii asin assembly assertion associate asynchronous at atan atn2 attr attri attrib attribu attribut attribute attributes audit authenticated authentication authid authors auto autoallocate autodblink autoextend automatic availability avg backup badfile basicfile before begin beginning benchmark between bfile bfile_base big bigfile bin binary_double binary_float binlog bit_and bit_count bit_length bit_or bit_xor bitmap blob_base block blocksize body both bound bucket buffer_cache buffer_pool build bulk by byte byteordermark bytes cache caching call calling cancel capacity cascade cascaded case cast catalog category ceil ceiling chain change changed char_base char_length character_length characters characterset charindex charset charsetform charsetid check checksum checksum_agg child choose chr chunk class cleanup clear client clob clob_base clone close cluster_id cluster_probability cluster_set clustering coalesce coercibility col collate collation collect colu colum column column_value columns columns_updated comment commit compact compatibility compiled complete composite_limit compound compress compute concat concat_ws concurrent confirm conn connec connect connect_by_iscycle connect_by_isleaf connect_by_root connect_time connection consider consistent constant constraint constraints constructor container content contents context contributors controlfile conv convert convert_tz corr corr_k corr_s corresponding corruption cos cost count count_big counted covar_pop covar_samp cpu_per_call cpu_per_session crc32 create creation critical cross cube cume_dist curdate current current_date current_time current_timestamp current_user cursor curtime customdatum cycle data database databases datafile datafiles datalength date_add date_cache date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts day day_to_second dayname dayofmonth dayofweek dayofyear days db_role_change dbtimezone ddl deallocate declare decode decompose decrement decrypt deduplicate def defa defau defaul default defaults deferred defi defin define degrees delayed delegate delete delete_all delimited demand dense_rank depth dequeue des_decrypt des_encrypt des_key_file desc descr descri describ describe descriptor deterministic diagnostics difference dimension direct_load directory disable disable_all disallow disassociate discardfile disconnect diskgroup distinct distinctrow distribute distributed div do document domain dotnet double downgrade drop dumpfile duplicate duration each edition editionable editions element ellipsis else elsif elt empty enable enable_all enclosed encode encoding encrypt end end-exec endian enforced engine engines enqueue enterprise entityescaping eomonth error errors escaped evalname evaluate event eventdata events except exception exceptions exchange exclude excluding execu execut execute exempt exists exit exp expire explain explode export export_set extended extent external external_1 external_2 externally extract failed failed_login_attempts failover failure far fast feature_set feature_value fetch field fields file file_name_convert filesystem_like_logging final finish first first_value fixed flash_cache flashback floor flush following follows for forall force foreign form forma format found found_rows freelist freelists freepools fresh from from_base64 from_days ftp full function general generated get get_format get_lock getdate getutcdate global global_name globally go goto grant grants greatest group group_concat group_id grouping grouping_id groups gtid_subtract guarantee guard handler hash hashkeys having hea head headi headin heading heap help hex hierarchy high high_priority hosts hour hours http id ident_current ident_incr ident_seed identified identity idle_time if ifnull ignore iif ilike ilm immediate import in include including increment index indexes indexing indextype indicator indices inet6_aton inet6_ntoa inet_aton inet_ntoa infile initial initialized initially initrans inmemory inner innodb input insert install instance instantiable instr interface interleaved intersect into invalidate invisible is is_free_lock is_ipv4 is_ipv4_compat is_not is_not_null is_used_lock isdate isnull isolation iterate java join json json_exists keep keep_duplicates key keys kill language large last last_day last_insert_id last_value lateral lax lcase lead leading least leaves left len lenght length less level levels library like like2 like4 likec limit lines link list listagg little ln load load_file lob lobs local localtime localtimestamp locate locator lock locked log log10 log2 logfile logfiles logging logical logical_reads_per_call logoff logon logs long loop low low_priority lower lpad lrtrim ltrim main make_set makedate maketime managed management manual map mapping mask master master_pos_wait match matched materialized max maxextents maximize maxinstances maxlen maxlogfiles maxloghistory maxlogmembers maxsize maxtrans md5 measures median medium member memcompress memory merge microsecond mid migration min minextents minimum mining minus minute minutes minvalue missing mod mode model modification modify module monitoring month months mount move movement multiset mutex name name_const names nan national native natural nav nchar nclob nested never new newline next nextval no no_write_to_binlog noarchivelog noaudit nobadfile nocheck nocompress nocopy nocycle nodelay nodiscardfile noentityescaping noguarantee nokeep nologfile nomapping nomaxvalue nominimize nominvalue nomonitoring none noneditionable nonschema noorder nopr nopro noprom nopromp noprompt norely noresetlogs noreverse normal norowdependencies noschemacheck noswitch not nothing notice notnull notrim novalidate now nowait nth_value nullif nulls num numb numbe nvarchar nvarchar2 object ocicoll ocidate ocidatetime ociduration ociinterval ociloblocator ocinumber ociref ocirefcursor ocirowid ocistring ocitype oct octet_length of off offline offset oid oidindex old on online only opaque open operations operator optimal optimize option optionally or oracle oracle_date oradata ord ordaudio orddicom orddoc order ordimage ordinality ordvideo organization orlany orlvary out outer outfile outline output over overflow overriding package pad parallel parallel_enable parameters parent parse partial partition partitions pascal passing password password_grace_time password_lock_time password_reuse_max password_reuse_time password_verify_function patch path patindex pctincrease pctthreshold pctused pctversion percent percent_rank percentile_cont percentile_disc performance period period_add period_diff permanent physical pi pipe pipelined pivot pluggable plugin policy position post_transaction pow power pragma prebuilt precedes preceding precision prediction prediction_cost prediction_details prediction_probability prediction_set prepare present preserve prior priority private private_sga privileges procedural procedure procedure_analyze processlist profiles project prompt protection public publishingservername purge quarter query quick quiesce quota quotename radians raise rand range rank raw read reads readsize rebuild record records recover recovery recursive recycle redo reduced ref reference referenced references referencing refresh regexp_like register regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy reject rekey relational relative relaylog release release_lock relies_on relocate rely rem remainder rename repair repeat replace replicate replication required reset resetlogs resize resource respect restore restricted result result_cache resumable resume retention return returning returns reuse reverse revoke right rlike role roles rollback rolling rollup round row row_count rowdependencies rowid rownum rows rtrim rules safe salt sample save savepoint sb1 sb2 sb4 scan schema schemacheck scn scope scroll sdo_georaster sdo_topo_geometry search sec_to_time second seconds section securefile security seed segment select self semi sequence sequential serializable server servererror session session_user sessions_per_user set sets settings sha sha1 sha2 share shared shared_pool short show shrink shutdown si_averagecolor si_colorhistogram si_featurelist si_positionalcolor si_stillimage si_texture siblings sid sign sin size size_t sizes skip slave sleep smalldatetimefromparts smallfile snapshot some soname sort soundex source space sparse spfile split sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_small_result sql_variant_property sqlcode sqldata sqlerror sqlname sqlstate sqrt square standalone standby start starting startup statement static statistics stats_binomial_test stats_crosstab stats_ks_test stats_mode stats_mw_test stats_one_way_anova stats_t_test_ stats_t_test_indep stats_t_test_one stats_t_test_paired stats_wsr_test status std stddev stddev_pop stddev_samp stdev stop storage store stored str str_to_date straight_join strcmp strict string struct stuff style subdate subpartition subpartitions substitutable substr substring subtime subtring_index subtype success sum suspend switch switchoffset switchover sync synchronous synonym sys sys_xmlagg sysasm sysaux sysdate sysdatetimeoffset sysdba sysoper system system_user sysutcdatetime table tables tablespace tablesample tan tdo template temporary terminated tertiary_weights test than then thread through tier ties time time_format time_zone timediff timefromparts timeout timestamp timestampadd timestampdiff timezone_abbr timezone_minute timezone_region to to_base64 to_date to_days to_seconds todatetimeoffset trace tracking transaction transactional translate translation treat trigger trigger_nestlevel triggers trim truncate try_cast try_convert try_parse type ub1 ub2 ub4 ucase unarchived unbounded uncompress under undo unhex unicode uniform uninstall union unique unix_timestamp unknown unlimited unlock unnest unpivot unrecoverable unsafe unsigned until untrusted unusable unused update updated upgrade upped upper upsert url urowid usable usage use use_stored_outlines user user_data user_resources users using utc_date utc_timestamp uuid uuid_short validate validate_password_strength validation valist value values var var_samp varcharc vari varia variab variabl variable variables variance varp varraw varrawc varray verify version versions view virtual visible void wait wallet warning warnings week weekday weekofyear wellformed when whene whenev wheneve whenever where while whitespace window with within without work wrapped xdb xml xmlagg xmlattributes xmlcast xmlcolattval xmlelement xmlexists xmlforest xmlindex xmlnamespaces xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltype xor year year_to_month years yearweek",literal:"true false null unknown",built_in:"array bigint binary bit blob bool boolean char character date dec decimal float int int8 integer interval number numeric real record serial serial8 smallint text time timestamp tinyint varchar varchar2 varying void"},c:[{cN:"string",b:"'",e:"'",c:[{b:"''"}]},{cN:"string",b:'"',e:'"',c:[{b:'""'}]},{cN:"string",b:"`",e:"`"},e.CNM,e.CBCM,t,e.HCM]},e.CBCM,t,e.HCM]}});hljs.registerLanguage("plaintext",function(e){return{disableAutodetect:!0}});hljs.registerLanguage("bash",function(e){var t={cN:"variable",v:[{b:/\$[\w\d#@][\w\d_]*/},{b:/\$\{(.*?)}/}]},a={cN:"string",b:/"/,e:/"/,c:[e.BE,t,{cN:"variable",b:/\$\(/,e:/\)/,c:[e.BE]}]};return{aliases:["sh","zsh"],l:/\b-?[a-z\._]+\b/,k:{keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp",_:"-ne -eq -lt -gt -f -d -e -s -l -a"},c:[{cN:"meta",b:/^#![^\n]+sh\s*$/,relevance:10},{cN:"function",b:/\w[\w\d_]*\s*\(\s*\)\s*\{/,rB:!0,c:[e.inherit(e.TM,{b:/\w[\w\d_]*/})],relevance:0},e.HCM,a,{cN:"",b:/\\"/},{cN:"string",b:/'/,e:/'/},t]}});hljs.registerLanguage("shell",function(s){return{aliases:["console"],c:[{cN:"meta",b:"^\\s{0,3}[/\\w\\d\\[\\]()@-]*[>%$#]",starts:{e:"$",sL:"bash"}}]}});hljs.registerLanguage("prolog",function(e){var c={b:/\(/,e:/\)/,relevance:0},b={b:/\[/,e:/\]/},n={cN:"comment",b:/%/,e:/$/,c:[e.PWM]},r={cN:"string",b:/`/,e:/`/,c:[e.BE]},a=[{b:/[a-z][A-Za-z0-9_]*/,relevance:0},{cN:"symbol",v:[{b:/[A-Z][a-zA-Z0-9_]*/},{b:/_[A-Za-z0-9_]*/}],relevance:0},c,{b:/:-/},b,n,e.CBCM,e.QSM,e.ASM,r,{cN:"string",b:/0\'(\\\'|.)/},{cN:"string",b:/0\'\\s/},e.CNM];return c.c=a,{c:(b.c=a).concat([{b:/\.$/}])}});hljs.registerLanguage("scss",function(e){var t="@[a-z-]+",r={cN:"variable",b:"(\\$[a-zA-Z-][a-zA-Z0-9_-]*)\\b"},i={cN:"number",b:"#[0-9A-Fa-f]+"};e.CSSNM,e.QSM,e.ASM,e.CBCM;return{cI:!0,i:"[=/|']",c:[e.CLCM,e.CBCM,{cN:"selector-id",b:"\\#[A-Za-z0-9_-]+",relevance:0},{cN:"selector-class",b:"\\.[A-Za-z0-9_-]+",relevance:0},{cN:"selector-attr",b:"\\[",e:"\\]",i:"$"},{cN:"selector-tag",b:"\\b(a|abbr|acronym|address|area|article|aside|audio|b|base|big|blockquote|body|br|button|canvas|caption|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|div|dl|dt|em|embed|fieldset|figcaption|figure|footer|form|frame|frameset|(h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|keygen|label|legend|li|link|map|mark|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|samp|script|section|select|small|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video)\\b",relevance:0},{cN:"selector-pseudo",b:":(visited|valid|root|right|required|read-write|read-only|out-range|optional|only-of-type|only-child|nth-of-type|nth-last-of-type|nth-last-child|nth-child|not|link|left|last-of-type|last-child|lang|invalid|indeterminate|in-range|hover|focus|first-of-type|first-line|first-letter|first-child|first|enabled|empty|disabled|default|checked|before|after|active)"},{cN:"selector-pseudo",b:"::(after|before|choices|first-letter|first-line|repeat-index|repeat-item|selection|value)"},r,{cN:"attribute",b:"\\b(src|z-index|word-wrap|word-spacing|word-break|width|widows|white-space|visibility|vertical-align|unicode-bidi|transition-timing-function|transition-property|transition-duration|transition-delay|transition|transform-style|transform-origin|transform|top|text-underline-position|text-transform|text-shadow|text-rendering|text-overflow|text-indent|text-decoration-style|text-decoration-line|text-decoration-color|text-decoration|text-align-last|text-align|tab-size|table-layout|right|resize|quotes|position|pointer-events|perspective-origin|perspective|page-break-inside|page-break-before|page-break-after|padding-top|padding-right|padding-left|padding-bottom|padding|overflow-y|overflow-x|overflow-wrap|overflow|outline-width|outline-style|outline-offset|outline-color|outline|orphans|order|opacity|object-position|object-fit|normal|none|nav-up|nav-right|nav-left|nav-index|nav-down|min-width|min-height|max-width|max-height|mask|marks|margin-top|margin-right|margin-left|margin-bottom|margin|list-style-type|list-style-position|list-style-image|list-style|line-height|letter-spacing|left|justify-content|initial|inherit|ime-mode|image-orientation|image-resolution|image-rendering|icon|hyphens|height|font-weight|font-variant-ligatures|font-variant|font-style|font-stretch|font-size-adjust|font-size|font-language-override|font-kerning|font-feature-settings|font-family|font|float|flex-wrap|flex-shrink|flex-grow|flex-flow|flex-direction|flex-basis|flex|filter|empty-cells|display|direction|cursor|counter-reset|counter-increment|content|column-width|column-span|column-rule-width|column-rule-style|column-rule-color|column-rule|column-gap|column-fill|column-count|columns|color|clip-path|clip|clear|caption-side|break-inside|break-before|break-after|box-sizing|box-shadow|box-decoration-break|bottom|border-width|border-top-width|border-top-style|border-top-right-radius|border-top-left-radius|border-top-color|border-top|border-style|border-spacing|border-right-width|border-right-style|border-right-color|border-right|border-radius|border-left-width|border-left-style|border-left-color|border-left|border-image-width|border-image-source|border-image-slice|border-image-repeat|border-image-outset|border-image|border-color|border-collapse|border-bottom-width|border-bottom-style|border-bottom-right-radius|border-bottom-left-radius|border-bottom-color|border-bottom|border|background-size|background-repeat|background-position|background-origin|background-image|background-color|background-clip|background-attachment|background-blend-mode|background|backface-visibility|auto|animation-timing-function|animation-play-state|animation-name|animation-iteration-count|animation-fill-mode|animation-duration|animation-direction|animation-delay|animation|align-self|align-items|align-content)\\b",i:"[^\\s]"},{b:"\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\b"},{b:":",e:";",c:[r,i,e.CSSNM,e.QSM,e.ASM,{cN:"meta",b:"!important"}]},{b:"@(page|font-face)",l:t,k:"@page @font-face"},{b:"@",e:"[{;]",rB:!0,k:"and or not only",c:[{b:t,cN:"keyword"},r,e.QSM,e.ASM,i,e.CSSNM]}]}});hljs.registerLanguage("typescript",function(e){var r="[A-Za-z$_][0-9A-Za-z$_]*",t={keyword:"in if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const class public private protected get set super static implements enum export import declare type namespace abstract as from extends async await",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document any number boolean string void Promise"},n={cN:"meta",b:"@"+r},a={b:"\\(",e:/\)/,k:t,c:["self",e.QSM,e.ASM,e.NM]},c={cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,k:t,c:[e.CLCM,e.CBCM,n,a]},s={cN:"number",v:[{b:"\\b(0[bB][01]+)n?"},{b:"\\b(0[oO][0-7]+)n?"},{b:e.CNR+"n?"}],relevance:0},o={cN:"subst",b:"\\$\\{",e:"\\}",k:t,c:[]},i={b:"html`",e:"",starts:{e:"`",rE:!1,c:[e.BE,o],sL:"xml"}},l={b:"css`",e:"",starts:{e:"`",rE:!1,c:[e.BE,o],sL:"css"}},b={cN:"string",b:"`",e:"`",c:[e.BE,o]};return o.c=[e.ASM,e.QSM,i,l,b,s,e.RM],{aliases:["ts"],k:t,c:[{cN:"meta",b:/^\s*['"]use strict['"]/},e.ASM,e.QSM,i,l,b,e.CLCM,e.CBCM,s,{b:"("+e.RSR+"|\\b(case|return|throw)\\b)\\s*",k:"return throw case",c:[e.CLCM,e.CBCM,e.RM,{cN:"function",b:"(\\(.*?\\)|"+e.IR+")\\s*=>",rB:!0,e:"\\s*=>",c:[{cN:"params",v:[{b:e.IR},{b:/\(\s*\)/},{b:/\(/,e:/\)/,eB:!0,eE:!0,k:t,c:["self",e.CLCM,e.CBCM]}]}]}],relevance:0},{cN:"function",bK:"function",e:/[\{;]/,eE:!0,k:t,c:["self",e.inherit(e.TM,{b:r}),c],i:/%/,relevance:0},{bK:"constructor",e:/[\{;]/,eE:!0,c:["self",c]},{b:/module\./,k:{built_in:"module"},relevance:0},{bK:"module",e:/\{/,eE:!0},{bK:"interface",e:/\{/,eE:!0,k:"interface extends"},{b:/\$[(.]/},{b:"\\."+e.IR,relevance:0},n,a]}});hljs.registerLanguage("kotlin",function(e){var t={keyword:"abstract as val var vararg get set class object open private protected public noinline crossinline dynamic final enum if else do while for when throw try catch finally import package is in fun override companion reified inline lateinit init interface annotation data sealed internal infix operator out by constructor super tailrec where const inner suspend typealias external expect actual trait volatile transient native default",built_in:"Byte Short Char Int Long Boolean Float Double Void Unit Nothing",literal:"true false null"},a={cN:"symbol",b:e.UIR+"@"},n={cN:"subst",b:"\\${",e:"}",c:[e.CNM]},c={cN:"variable",b:"\\$"+e.UIR},r={cN:"string",v:[{b:'"""',e:'"""(?=[^"])',c:[c,n]},{b:"'",e:"'",i:/\n/,c:[e.BE]},{b:'"',e:'"',i:/\n/,c:[e.BE,c,n]}]};n.c.push(r);var i={cN:"meta",b:"@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\s*:(?:\\s*"+e.UIR+")?"},l={cN:"meta",b:"@"+e.UIR,c:[{b:/\(/,e:/\)/,c:[e.inherit(r,{cN:"meta-string"})]}]},s={cN:"number",b:"\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\d]+[\\d_]+[\\d]+|[\\d]+)(\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))?|\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))([eE][-+]?\\d+)?)[lLfF]?",relevance:0},b=e.C("/\\*","\\*/",{c:[e.CBCM]}),o={v:[{cN:"type",b:e.UIR},{b:/\(/,e:/\)/,c:[]}]},d=o;return d.v[1].c=[o],o.v[1].c=[d],{aliases:["kt"],k:t,c:[e.C("/\\*\\*","\\*/",{relevance:0,c:[{cN:"doctag",b:"@[A-Za-z]+"}]}),e.CLCM,b,{cN:"keyword",b:/\b(break|continue|return|this)\b/,starts:{c:[{cN:"symbol",b:/@\w+/}]}},a,i,l,{cN:"function",bK:"fun",e:"[(]|$",rB:!0,eE:!0,k:t,i:/fun\s+(<.*>)?[^\s\(]+(\s+[^\s\(]+)\s*=/,relevance:5,c:[{b:e.UIR+"\\s*\\(",rB:!0,relevance:0,c:[e.UTM]},{cN:"type",b:/,e:/>/,k:"reified",relevance:0},{cN:"params",b:/\(/,e:/\)/,endsParent:!0,k:t,relevance:0,c:[{b:/:/,e:/[=,\/]/,eW:!0,c:[o,e.CLCM,b],relevance:0},e.CLCM,b,i,l,r,e.CNM]},b]},{cN:"class",bK:"class interface trait",e:/[:\{(]|$/,eE:!0,i:"extends implements",c:[{bK:"public protected internal private constructor"},e.UTM,{cN:"type",b:/,e:/>/,eB:!0,eE:!0,relevance:0},{cN:"type",b:/[,:]\s*/,e:/[<\(,]|$/,eB:!0,rE:!0},i,l]},r,{cN:"meta",b:"^#!/usr/bin/env",e:"$",i:"\n"},s]}});hljs.registerLanguage("cs",function(e){var a={keyword:"abstract as base bool break byte case catch char checked const continue decimal default delegate do double enum event explicit extern finally fixed float for foreach goto if implicit in int interface internal is lock long object operator out override params private protected public readonly ref sbyte sealed short sizeof stackalloc static string struct switch this try typeof uint ulong unchecked unsafe ushort using virtual void volatile while add alias ascending async await by descending dynamic equals from get global group into join let nameof on orderby partial remove select set value var when where yield",literal:"null false true"},i={cN:"number",v:[{b:"\\b(0b[01']+)"},{b:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{b:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},c={cN:"string",b:'@"',e:'"',c:[{b:'""'}]},r=e.inherit(c,{i:/\n/}),n={cN:"subst",b:"{",e:"}",k:a},t=e.inherit(n,{i:/\n/}),s={cN:"string",b:/\$"/,e:'"',i:/\n/,c:[{b:"{{"},{b:"}}"},e.BE,t]},l={cN:"string",b:/\$@"/,e:'"',c:[{b:"{{"},{b:"}}"},{b:'""'},n]},b=e.inherit(l,{i:/\n/,c:[{b:"{{"},{b:"}}"},{b:'""'},t]});n.c=[l,s,c,e.ASM,e.QSM,i,e.CBCM],t.c=[b,s,r,e.ASM,e.QSM,i,e.inherit(e.CBCM,{i:/\n/})];var o={v:[l,s,c,e.ASM,e.QSM]},d=e.IR+"(<"+e.IR+"(\\s*,\\s*"+e.IR+")*>)?(\\[\\])?";return{aliases:["csharp","c#"],k:a,i:/::/,c:[e.C("///","$",{rB:!0,c:[{cN:"doctag",v:[{b:"///",relevance:0},{b:"\x3c!--|--\x3e"},{b:"?",e:">"}]}]}),e.CLCM,e.CBCM,{cN:"meta",b:"#",e:"$",k:{"meta-keyword":"if else elif endif define undef warning error line region endregion pragma checksum"}},o,i,{bK:"class interface",e:/[{;=]/,i:/[^\s:,]/,c:[e.TM,e.CLCM,e.CBCM]},{bK:"namespace",e:/[{;=]/,i:/[^\s:]/,c:[e.inherit(e.TM,{b:"[a-zA-Z](\\.?\\w)*"}),e.CLCM,e.CBCM]},{cN:"meta",b:"^\\s*\\[",eB:!0,e:"\\]",eE:!0,c:[{cN:"meta-string",b:/"/,e:/"/}]},{bK:"new return throw await else",relevance:0},{cN:"function",b:"("+d+"\\s+)+"+e.IR+"\\s*\\(",rB:!0,e:/\s*[{;=]/,eE:!0,k:a,c:[{b:e.IR+"\\s*\\(",rB:!0,c:[e.TM],relevance:0},{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,k:a,relevance:0,c:[o,i,e.CBCM]},e.CLCM,e.CBCM]}]}});hljs.registerLanguage("go",function(e){var n={keyword:"break default func interface select case map struct chan else goto package switch const fallthrough if range type continue for import return var go defer bool byte complex64 complex128 float32 float64 int8 int16 int32 int64 string uint8 uint16 uint32 uint64 int uint uintptr rune",literal:"true false iota nil",built_in:"append cap close complex copy imag len make new panic print println real recover delete"};return{aliases:["golang"],k:n,i:"",c:[e.CLCM,e.CBCM,{cN:"string",v:[e.QSM,e.ASM,{b:"`",e:"`"}]},{cN:"number",v:[{b:e.CNR+"[i]",relevance:1},e.CNM]},{b:/:=/},{cN:"function",bK:"func",e:"\\s*(\\{|$)",eE:!0,c:[e.TM,{cN:"params",b:/\(/,e:/\)/,k:n,i:/["']/}]}]}});hljs.registerLanguage("scala",function(e){var t={cN:"subst",v:[{b:"\\$[A-Za-z0-9_]+"},{b:"\\${",e:"}"}]},a={cN:"string",v:[{b:'"',e:'"',i:"\\n",c:[e.BE]},{b:'"""',e:'"""',relevance:10},{b:'[a-z]+"',e:'"',i:"\\n",c:[e.BE,t]},{cN:"string",b:'[a-z]+"""',e:'"""',c:[t],relevance:10}]},c={cN:"type",b:"\\b[A-Z][A-Za-z0-9_]*",relevance:0},r={cN:"title",b:/[^0-9\n\t "'(),.`{}\[\]:;][^\n\t "'(),.`{}\[\]:;]+|[^0-9\n\t "'(),.`{}\[\]:;=]/,relevance:0},n={cN:"class",bK:"class object trait type",e:/[:={\[\n;]/,eE:!0,c:[{bK:"extends with",relevance:10},{b:/\[/,e:/\]/,eB:!0,eE:!0,relevance:0,c:[c]},{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,relevance:0,c:[c]},r]},l={cN:"function",bK:"def",e:/[:={\[(\n;]/,eE:!0,c:[r]};return{k:{literal:"true false null",keyword:"type yield lazy override def with val var sealed abstract private trait object if forSome for while throw finally protected extends import final return else break new catch super class case package default try this match continue throws implicit"},c:[e.CLCM,e.CBCM,a,{cN:"symbol",b:"'\\w[\\w\\d_]*(?!')"},c,l,n,e.CNM,{cN:"meta",b:"@[A-Za-z]+"}]}});hljs.registerLanguage("rust",function(e){var t="([ui](8|16|32|64|128|size)|f(32|64))?",r="drop i8 i16 i32 i64 i128 isize u8 u16 u32 u64 u128 usize f32 f64 str char bool Box Option Result String Vec Copy Send Sized Sync Drop Fn FnMut FnOnce ToOwned Clone Debug PartialEq PartialOrd Eq Ord AsRef AsMut Into From Default Iterator Extend IntoIterator DoubleEndedIterator ExactSizeIterator SliceConcatExt ToString assert! assert_eq! bitflags! bytes! cfg! col! concat! concat_idents! debug_assert! debug_assert_eq! env! panic! file! format! format_args! include_bin! include_str! line! local_data_key! module_path! option_env! print! println! select! stringify! try! unimplemented! unreachable! vec! write! writeln! macro_rules! assert_ne! debug_assert_ne!";return{aliases:["rs"],k:{keyword:"abstract as async await become box break const continue crate do dyn else enum extern false final fn for if impl in let loop macro match mod move mut override priv pub ref return self Self static struct super trait true try type typeof unsafe unsized use virtual where while yield",literal:"true false Some None Ok Err",built_in:r},l:e.IR+"!?",i:"",c:[e.CLCM,e.C("/\\*","\\*/",{c:["self"]}),e.inherit(e.QSM,{b:/b?"/,i:null}),{cN:"string",v:[{b:/r(#*)"(.|\n)*?"\1(?!#)/},{b:/b?'\\?(x\w{2}|u\w{4}|U\w{8}|.)'/}]},{cN:"symbol",b:/'[a-zA-Z_][a-zA-Z0-9_]*/},{cN:"number",v:[{b:"\\b0b([01_]+)"+t},{b:"\\b0o([0-7_]+)"+t},{b:"\\b0x([A-Fa-f0-9_]+)"+t},{b:"\\b(\\d[\\d_]*(\\.[0-9_]+)?([eE][+-]?[0-9_]+)?)"+t}],relevance:0},{cN:"function",bK:"fn",e:"(\\(|<)",eE:!0,c:[e.UTM]},{cN:"meta",b:"#\\!?\\[",e:"\\]",c:[{cN:"meta-string",b:/"/,e:/"/}]},{cN:"class",bK:"type",e:";",c:[e.inherit(e.UTM,{endsParent:!0})],i:"\\S"},{cN:"class",bK:"trait enum struct union",e:"{",c:[e.inherit(e.UTM,{endsParent:!0})],i:"[\\w\\d]"},{b:e.IR+"::",k:{built_in:r}},{b:"->"}]}});hljs.registerLanguage("python",function(e){var r={keyword:"and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda async await nonlocal|10",built_in:"Ellipsis NotImplemented",literal:"False None True"},b={cN:"meta",b:/^(>>>|\.\.\.) /},c={cN:"subst",b:/\{/,e:/\}/,k:r,i:/#/},a={b:/\{\{/,relevance:0},l={cN:"string",c:[e.BE],v:[{b:/(u|b)?r?'''/,e:/'''/,c:[e.BE,b],relevance:10},{b:/(u|b)?r?"""/,e:/"""/,c:[e.BE,b],relevance:10},{b:/(fr|rf|f)'''/,e:/'''/,c:[e.BE,b,a,c]},{b:/(fr|rf|f)"""/,e:/"""/,c:[e.BE,b,a,c]},{b:/(u|r|ur)'/,e:/'/,relevance:10},{b:/(u|r|ur)"/,e:/"/,relevance:10},{b:/(b|br)'/,e:/'/},{b:/(b|br)"/,e:/"/},{b:/(fr|rf|f)'/,e:/'/,c:[e.BE,a,c]},{b:/(fr|rf|f)"/,e:/"/,c:[e.BE,a,c]},e.ASM,e.QSM]},n={cN:"number",relevance:0,v:[{b:e.BNR+"[lLjJ]?"},{b:"\\b(0o[0-7]+)[lLjJ]?"},{b:e.CNR+"[lLjJ]?"}]},i={cN:"params",b:/\(/,e:/\)/,c:["self",b,n,l,e.HCM]};return c.c=[l,n,b],{aliases:["py","gyp","ipython"],k:r,i:/(<\/|->|\?)|=>/,c:[b,n,{bK:"if",relevance:0},l,e.HCM,{v:[{cN:"function",bK:"def"},{cN:"class",bK:"class"}],e:/:/,i:/[${=;\n,]/,c:[e.UTM,i,{b:/->/,eW:!0,k:"None"}]},{cN:"meta",b:/^[\t ]*@/,e:/$/},{b:/\b(print|exec)\(/}]}});hljs.registerLanguage("swift",function(e){var i={keyword:"#available #colorLiteral #column #else #elseif #endif #file #fileLiteral #function #if #imageLiteral #line #selector #sourceLocation _ __COLUMN__ __FILE__ __FUNCTION__ __LINE__ Any as as! as? associatedtype associativity break case catch class continue convenience default defer deinit didSet do dynamic dynamicType else enum extension fallthrough false fileprivate final for func get guard if import in indirect infix init inout internal is lazy left let mutating nil none nonmutating open operator optional override postfix precedence prefix private protocol Protocol public repeat required rethrows return right self Self set static struct subscript super switch throw throws true try try! try? Type typealias unowned var weak where while willSet",literal:"true false nil",built_in:"abs advance alignof alignofValue anyGenerator assert assertionFailure bridgeFromObjectiveC bridgeFromObjectiveCUnconditional bridgeToObjectiveC bridgeToObjectiveCUnconditional c contains count countElements countLeadingZeros debugPrint debugPrintln distance dropFirst dropLast dump encodeBitsAsWords enumerate equal fatalError filter find getBridgedObjectiveCType getVaList indices insertionSort isBridgedToObjectiveC isBridgedVerbatimToObjectiveC isUniquelyReferenced isUniquelyReferencedNonObjC join lazy lexicographicalCompare map max maxElement min minElement numericCast overlaps partition posix precondition preconditionFailure print println quickSort readLine reduce reflect reinterpretCast reverse roundUpToAlignment sizeof sizeofValue sort split startsWith stride strideof strideofValue swap toString transcode underestimateCount unsafeAddressOf unsafeBitCast unsafeDowncast unsafeUnwrap unsafeReflect withExtendedLifetime withObjectAtPlusZero withUnsafePointer withUnsafePointerToObject withUnsafeMutablePointer withUnsafeMutablePointers withUnsafePointer withUnsafePointers withVaList zip"},t=e.C("/\\*","\\*/",{c:["self"]}),n={cN:"subst",b:/\\\(/,e:"\\)",k:i,c:[]},r={cN:"string",c:[e.BE,n],v:[{b:/"""/,e:/"""/},{b:/"/,e:/"/}]},a={cN:"number",b:"\\b([\\d_]+(\\.[\\deE_]+)?|0x[a-fA-F0-9_]+(\\.[a-fA-F0-9p_]+)?|0b[01_]+|0o[0-7_]+)\\b",relevance:0};return n.c=[a],{k:i,c:[r,e.CLCM,t,{cN:"type",b:"\\b[A-Z][\\wÀ-ʸ']*[!?]"},{cN:"type",b:"\\b[A-Z][\\wÀ-ʸ']*",relevance:0},a,{cN:"function",bK:"func",e:"{",eE:!0,c:[e.inherit(e.TM,{b:/[A-Za-z$_][0-9A-Za-z$_]*/}),{b:/,e:/>/},{cN:"params",b:/\(/,e:/\)/,endsParent:!0,k:i,c:["self",a,r,e.CBCM,{b:":"}],i:/["']/}],i:/\[|%/},{cN:"class",bK:"struct protocol class extension enum",k:i,e:"\\{",eE:!0,c:[e.inherit(e.TM,{b:/[A-Za-z$_][\u00C0-\u02B80-9A-Za-z$_]*/})]},{cN:"meta",b:"(@discardableResult|@warn_unused_result|@exported|@lazy|@noescape|@NSCopying|@NSManaged|@objc|@objcMembers|@convention|@required|@noreturn|@IBAction|@IBDesignable|@IBInspectable|@IBOutlet|@infix|@prefix|@postfix|@autoclosure|@testable|@available|@nonobjc|@NSApplicationMain|@UIApplicationMain|@dynamicMemberLookup|@propertyWrapper)"},{bK:"import",e:/$/,c:[e.CLCM,t]}]}});hljs.registerLanguage("cpp",function(e){function t(e){return"(?:"+e+")?"}var r="decltype\\(auto\\)",a="[a-zA-Z_]\\w*::",i=(t(a),t("<.*?>"),{cN:"keyword",b:"\\b[a-z\\d_]*_t\\b"}),c={cN:"string",v:[{b:'(u8?|U|L)?"',e:'"',i:"\\n",c:[e.BE]},{b:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)",e:"'",i:"."},{b:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\((?:.|\n)*?\)\1"/}]},s={cN:"number",v:[{b:"\\b(0b[01']+)"},{b:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{b:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},n={cN:"meta",b:/#\s*[a-z]+\b/,e:/$/,k:{"meta-keyword":"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include"},c:[{b:/\\\n/,relevance:0},e.inherit(c,{cN:"meta-string"}),{cN:"meta-string",b:/<.*?>/,e:/$/,i:"\\n"},e.CLCM,e.CBCM]},o={cN:"title",b:t(a)+e.IR,relevance:0},l=t(a)+e.IR+"\\s*\\(",u={keyword:"int float while private char char8_t char16_t char32_t catch import module export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using asm case typeid wchar_tshort reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignas alignof constexpr consteval constinit decltype concept co_await co_return co_yield requires noexcept static_assert thread_local restrict final override atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong new throw return and and_eq bitand bitor compl not not_eq or or_eq xor xor_eq",built_in:"std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap array shared_ptr abort terminate abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr _Bool complex _Complex imaginary _Imaginary",literal:"true false nullptr NULL"},p=[i,e.CLCM,e.CBCM,s,c],m={v:[{b:/=/,e:/;/},{b:/\(/,e:/\)/},{bK:"new throw return else",e:/;/}],k:u,c:p.concat([{b:/\(/,e:/\)/,k:u,c:p.concat(["self"]),relevance:0}]),relevance:0},d={cN:"function",b:"((decltype\\(auto\\)|(?:[a-zA-Z_]\\w*::)?[a-zA-Z_]\\w*(?:<.*?>)?)[\\*&\\s]+)+"+l,rB:!0,e:/[{;=]/,eE:!0,k:u,i:/[^\w\s\*&:<>]/,c:[{b:r,k:u,relevance:0},{b:l,rB:!0,c:[o],relevance:0},{cN:"params",b:/\(/,e:/\)/,k:u,relevance:0,c:[e.CLCM,e.CBCM,c,s,i,{b:/\(/,e:/\)/,k:u,relevance:0,c:["self",e.CLCM,e.CBCM,c,s,i]}]},i,e.CLCM,e.CBCM,n]};return{aliases:["c","cc","h","c++","h++","hpp","hh","hxx","cxx"],k:u,i:"",c:[].concat(m,d,p,[n,{b:"\\b(deque|list|queue|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array)\\s*<",e:">",k:u,c:["self",i]},{b:e.IR+"::",k:u},{cN:"class",bK:"class struct",e:/[{;:]/,c:[{b:/,e:/>/,c:["self"]},e.TM]}]),exports:{preprocessor:n,strings:c,k:u}}});hljs.registerLanguage("clojure",function(e){var t="a-zA-Z_\\-!.?+*=<>'",n="["+t+"]["+t+"0-9/;:]*",r={b:n,relevance:0},a={cN:"number",b:"[-+]?\\d+(\\.\\d+)?",relevance:0},o=e.inherit(e.QSM,{i:null}),s=e.C(";","$",{relevance:0}),c={cN:"literal",b:/\b(true|false|nil)\b/},i={b:"[\\[\\{]",e:"[\\]\\}]"},d={cN:"comment",b:"\\^"+n},l=e.C("\\^\\{","\\}"),m={cN:"symbol",b:"[:]{1,2}"+n},p={b:"\\(",e:"\\)"},u={eW:!0,relevance:0},f={k:{"builtin-name":"def defonce cond apply if-not if-let if not not= = < > <= >= == + / * - rem quot neg? pos? delay? symbol? keyword? true? false? integer? empty? coll? list? set? ifn? fn? associative? sequential? sorted? counted? reversible? number? decimal? class? distinct? isa? float? rational? reduced? ratio? odd? even? char? seq? vector? string? map? nil? contains? zero? instance? not-every? not-any? libspec? -> ->> .. . inc compare do dotimes mapcat take remove take-while drop letfn drop-last take-last drop-while while intern condp case reduced cycle split-at split-with repeat replicate iterate range merge zipmap declare line-seq sort comparator sort-by dorun doall nthnext nthrest partition eval doseq await await-for let agent atom send send-off release-pending-sends add-watch mapv filterv remove-watch agent-error restart-agent set-error-handler error-handler set-error-mode! error-mode shutdown-agents quote var fn loop recur throw try monitor-enter monitor-exit defmacro defn defn- macroexpand macroexpand-1 for dosync and or when when-not when-let comp juxt partial sequence memoize constantly complement identity assert peek pop doto proxy defstruct first rest cons defprotocol cast coll deftype defrecord last butlast sigs reify second ffirst fnext nfirst nnext defmulti defmethod meta with-meta ns in-ns create-ns import refer keys select-keys vals key val rseq name namespace promise into transient persistent! conj! assoc! dissoc! pop! disj! use class type num float double short byte boolean bigint biginteger bigdec print-method print-dup throw-if printf format load compile get-in update-in pr pr-on newline flush read slurp read-line subvec with-open memfn time re-find re-groups rand-int rand mod locking assert-valid-fdecl alias resolve ref deref refset swap! reset! set-validator! compare-and-set! alter-meta! reset-meta! commute get-validator alter ref-set ref-history-count ref-min-history ref-max-history ensure sync io! new next conj set! to-array future future-call into-array aset gen-class reduce map filter find empty hash-map hash-set sorted-map sorted-map-by sorted-set sorted-set-by vec vector seq flatten reverse assoc dissoc list disj get union difference intersection extend extend-type extend-protocol int nth delay count concat chunk chunk-buffer chunk-append chunk-first chunk-rest max min dec unchecked-inc-int unchecked-inc unchecked-dec-inc unchecked-dec unchecked-negate unchecked-add-int unchecked-add unchecked-subtract-int unchecked-subtract chunk-next chunk-cons chunked-seq? prn vary-meta lazy-seq spread list* str find-keyword keyword symbol gensym force rationalize"},l:n,cN:"name",b:n,starts:u},h=[p,o,d,l,s,m,i,a,c,r];return p.c=[e.C("comment",""),f,u],u.c=h,i.c=h,l.c=[i],{aliases:["clj"],i:/\S/,c:[p,o,d,l,s,m,i,a,c]}});hljs.registerLanguage("scheme",function(e){var t="[^\\(\\)\\[\\]\\{\\}\",'`;#|\\\\\\s]+",r="(\\-|\\+)?\\d+([./]\\d+)?",a={cN:"literal",b:"(#t|#f|#\\\\"+t+"|#\\\\.)"},i={cN:"number",v:[{b:r,relevance:0},{b:"(\\-|\\+)?\\d+([./]\\d+)?[+\\-](\\-|\\+)?\\d+([./]\\d+)?i",relevance:0},{b:"#b[0-1]+(/[0-1]+)?"},{b:"#o[0-7]+(/[0-7]+)?"},{b:"#x[0-9a-f]+(/[0-9a-f]+)?"}]},n=e.QSM,c=[e.C(";","$",{relevance:0}),e.C("#\\|","\\|#")],l={b:t,relevance:0},s={cN:"symbol",b:"'"+t},o={eW:!0,relevance:0},u={v:[{b:/'/},{b:"`"}],c:[{b:"\\(",e:"\\)",c:["self",a,n,i,l,s]}]},p={cN:"name",b:t,l:t,k:{"builtin-name":"case-lambda call/cc class define-class exit-handler field import inherit init-field interface let*-values let-values let/ec mixin opt-lambda override protect provide public rename require require-for-syntax syntax syntax-case syntax-error unit/sig unless when with-syntax and begin call-with-current-continuation call-with-input-file call-with-output-file case cond define define-syntax delay do dynamic-wind else for-each if lambda let let* let-syntax letrec letrec-syntax map or syntax-rules ' * + , ,@ - ... / ; < <= = => > >= ` abs acos angle append apply asin assoc assq assv atan boolean? caar cadr call-with-input-file call-with-output-file call-with-values car cdddar cddddr cdr ceiling char->integer char-alphabetic? char-ci<=? char-ci char-ci=? char-ci>=? char-ci>? char-downcase char-lower-case? char-numeric? char-ready? char-upcase char-upper-case? char-whitespace? char<=? char char=? char>=? char>? char? close-input-port close-output-port complex? cons cos current-input-port current-output-port denominator display eof-object? eq? equal? eqv? eval even? exact->inexact exact? exp expt floor force gcd imag-part inexact->exact inexact? input-port? integer->char integer? interaction-environment lcm length list list->string list->vector list-ref list-tail list? load log magnitude make-polar make-rectangular make-string make-vector max member memq memv min modulo negative? newline not null-environment null? number->string number? numerator odd? open-input-file open-output-file output-port? pair? peek-char port? positive? procedure? quasiquote quote quotient rational? rationalize read read-char real-part real? remainder reverse round scheme-report-environment set! set-car! set-cdr! sin sqrt string string->list string->number string->symbol string-append string-ci<=? string-ci string-ci=? string-ci>=? string-ci>? string-copy string-fill! string-length string-ref string-set! string<=? string string=? string>=? string>? string? substring symbol->string symbol? tan transcript-off transcript-on truncate values vector vector->list vector-fill! vector-length vector-ref vector-set! with-input-from-file with-output-to-file write write-char zero?"}},d={v:[{b:"\\(",e:"\\)"},{b:"\\[",e:"\\]"}],c:[{b:/lambda/,eW:!0,rB:!0,c:[p,{b:/\(/,e:/\)/,endsParent:!0,c:[l]}]},p,o]};return o.c=[a,i,n,l,s,u,d].concat(c),{i:/\S/,c:[{cN:"meta",b:"^#!",e:"$"},i,n,s,u,d].concat(c)}});hljs.registerLanguage("ini",function(e){var b={cN:"number",relevance:0,v:[{b:/([\+\-]+)?[\d]+_[\d_]+/},{b:e.NR}]},a=e.C();a.v=[{b:/;/,e:/$/},{b:/#/,e:/$/}];var c={cN:"variable",v:[{b:/\$[\w\d"][\w\d_]*/},{b:/\$\{(.*?)}/}]},r={cN:"literal",b:/\bon|off|true|false|yes|no\b/},n={cN:"string",c:[e.BE],v:[{b:"'''",e:"'''",relevance:10},{b:'"""',e:'"""',relevance:10},{b:'"',e:'"'},{b:"'",e:"'"}]};return{aliases:["toml"],cI:!0,i:/\S/,c:[a,{cN:"section",b:/\[+/,e:/\]+/},{b:/^[a-z0-9\[\]_\.-]+(?=\s*=\s*)/,cN:"attr",starts:{e:/$/,c:[a,{b:/\[/,e:/\]/,c:[a,r,c,n,b,"self"],relevance:0},r,c,n,b]}}]}});hljs.registerLanguage("objectivec",function(e){var t=/[a-zA-Z@][a-zA-Z0-9_]*/,i="@interface @class @protocol @implementation";return{aliases:["mm","objc","obj-c"],k:{keyword:"int float while char export sizeof typedef const struct for union unsigned long volatile static bool mutable if do return goto void enum else break extern asm case short default double register explicit signed typename this switch continue wchar_t inline readonly assign readwrite self @synchronized id typeof nonatomic super unichar IBOutlet IBAction strong weak copy in out inout bycopy byref oneway __strong __weak __block __autoreleasing @private @protected @public @try @property @end @throw @catch @finally @autoreleasepool @synthesize @dynamic @selector @optional @required @encode @package @import @defs @compatibility_alias __bridge __bridge_transfer __bridge_retained __bridge_retain __covariant __contravariant __kindof _Nonnull _Nullable _Null_unspecified __FUNCTION__ __PRETTY_FUNCTION__ __attribute__ getter setter retain unsafe_unretained nonnull nullable null_unspecified null_resettable class instancetype NS_DESIGNATED_INITIALIZER NS_UNAVAILABLE NS_REQUIRES_SUPER NS_RETURNS_INNER_POINTER NS_INLINE NS_AVAILABLE NS_DEPRECATED NS_ENUM NS_OPTIONS NS_SWIFT_UNAVAILABLE NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_END NS_REFINED_FOR_SWIFT NS_SWIFT_NAME NS_SWIFT_NOTHROW NS_DURING NS_HANDLER NS_ENDHANDLER NS_VALUERETURN NS_VOIDRETURN",literal:"false true FALSE TRUE nil YES NO NULL",built_in:"BOOL dispatch_once_t dispatch_queue_t dispatch_sync dispatch_async dispatch_once"},l:t,i:"",c:[{cN:"built_in",b:"\\b(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)\\w+"},e.CLCM,e.CBCM,e.CNM,e.QSM,e.ASM,{cN:"string",v:[{b:'@"',e:'"',i:"\\n",c:[e.BE]}]},{cN:"meta",b:/#\s*[a-z]+\b/,e:/$/,k:{"meta-keyword":"if else elif endif define undef warning error line pragma ifdef ifndef include"},c:[{b:/\\\n/,relevance:0},e.inherit(e.QSM,{cN:"meta-string"}),{cN:"meta-string",b:/<.*?>/,e:/$/,i:"\\n"},e.CLCM,e.CBCM]},{cN:"class",b:"("+i.split(" ").join("|")+")\\b",e:"({|$)",eE:!0,k:i,l:t,c:[e.UTM]},{b:"\\."+e.UIR,relevance:0}]}});hljs.registerLanguage("json",function(e){var i={literal:"true false null"},n=[e.CLCM,e.CBCM],c=[e.QSM,e.CNM],r={e:",",eW:!0,eE:!0,c:c,k:i},t={b:"{",e:"}",c:[{cN:"attr",b:/"/,e:/"/,c:[e.BE],i:"\\n"},e.inherit(r,{b:/:/})].concat(n),i:"\\S"},a={b:"\\[",e:"\\]",c:[e.inherit(r)],i:"\\S"};return c.push(t,a),n.forEach(function(e){c.push(e)}),{c:c,k:i,i:"\\S"}});hljs.registerLanguage("perl",function(e){var t="getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qqfileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent shutdown dump chomp connect getsockname die socketpair close flock exists index shmgetsub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller lcfirst until warn while values shift telldir getpwuid my getprotobynumber delete and sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedirioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when",r={cN:"subst",b:"[$@]\\{",e:"\\}",k:t},s={b:"->{",e:"}"},n={v:[{b:/\$\d/},{b:/[\$%@](\^\w\b|#\w+(::\w+)*|{\w+}|\w+(::\w*)*)/},{b:/[\$%@][^\s\w{]/,relevance:0}]},c=[e.BE,r,n],a=[n,e.HCM,e.C("^\\=\\w","\\=cut",{eW:!0}),s,{cN:"string",c:c,v:[{b:"q[qwxr]?\\s*\\(",e:"\\)",relevance:5},{b:"q[qwxr]?\\s*\\[",e:"\\]",relevance:5},{b:"q[qwxr]?\\s*\\{",e:"\\}",relevance:5},{b:"q[qwxr]?\\s*\\|",e:"\\|",relevance:5},{b:"q[qwxr]?\\s*\\<",e:"\\>",relevance:5},{b:"qw\\s+q",e:"q",relevance:5},{b:"'",e:"'",c:[e.BE]},{b:'"',e:'"'},{b:"`",e:"`",c:[e.BE]},{b:"{\\w+}",c:[],relevance:0},{b:"-?\\w+\\s*\\=\\>",c:[],relevance:0}]},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},{b:"(\\/\\/|"+e.RSR+"|\\b(split|return|print|reverse|grep)\\b)\\s*",k:"split return print reverse grep",relevance:0,c:[e.HCM,{cN:"regexp",b:"(s|tr|y)/(\\\\.|[^/])*/(\\\\.|[^/])*/[a-z]*",relevance:10},{cN:"regexp",b:"(m|qr)?/",e:"/[a-z]*",c:[e.BE],relevance:0}]},{cN:"function",bK:"sub",e:"(\\s*\\(.*?\\))?[;{]",eE:!0,relevance:5,c:[e.TM]},{b:"-\\w\\b",relevance:0},{b:"^__DATA__$",e:"^__END__$",sL:"mojolicious",c:[{b:"^@@.*",e:"$",cN:"comment"}]}];return r.c=a,{aliases:["pl","pm"],l:/[\w\.]+/,k:t,c:s.c=a}});hljs.registerLanguage("haskell",function(e){var i={v:[e.C("--","$"),e.C("{-","-}",{c:["self"]})]},a={cN:"meta",b:"{-#",e:"#-}"},l={cN:"meta",b:"^#",e:"$"},c={cN:"type",b:"\\b[A-Z][\\w']*",relevance:0},n={b:"\\(",e:"\\)",i:'"',c:[a,l,{cN:"type",b:"\\b[A-Z][\\w]*(\\((\\.\\.|,|\\w+)\\))?"},e.inherit(e.TM,{b:"[_a-z][\\w']*"}),i]};return{aliases:["hs"],k:"let in if then else case of where do module import hiding qualified type data newtype deriving class instance as default infix infixl infixr foreign export ccall stdcall cplusplus jvm dotnet safe unsafe family forall mdo proc rec",c:[{bK:"module",e:"where",k:"module where",c:[n,i],i:"\\W\\.|;"},{b:"\\bimport\\b",e:"$",k:"import qualified as hiding",c:[n,i],i:"\\W\\.|;"},{cN:"class",b:"^(\\s*)?(class|instance)\\b",e:"where",k:"class family instance where",c:[c,n,i]},{cN:"class",b:"\\b(data|(new)?type)\\b",e:"$",k:"data family type newtype deriving",c:[a,c,n,{b:"{",e:"}",c:n.c},i]},{bK:"default",e:"$",c:[c,n,i]},{bK:"infix infixl infixr",e:"$",c:[e.CNM,i]},{b:"\\bforeign\\b",e:"$",k:"foreign import export ccall stdcall cplusplus jvm dotnet safe unsafe",c:[c,e.QSM,i]},{cN:"meta",b:"#!\\/usr\\/bin\\/env runhaskell",e:"$"},a,l,e.QSM,e.CNM,c,e.inherit(e.TM,{b:"^[_a-z][\\w']*"}),i,{b:"->|<-"}]}});hljs.registerLanguage("smalltalk",function(e){var a="[a-z][a-zA-Z0-9_]*",s={cN:"string",b:"\\$.{1}"},l={cN:"symbol",b:"#"+e.UIR};return{aliases:["st"],k:"self super nil true false thisContext",c:[e.C('"','"'),e.ASM,{cN:"type",b:"\\b[A-Z][A-Za-z0-9_]*",relevance:0},{b:a+":",relevance:0},e.CNM,l,s,{b:"\\|[ ]*"+a+"([ ]+"+a+")*[ ]*\\|",rB:!0,e:/\|/,i:/\S/,c:[{b:"(\\|[ ]*)?"+a}]},{b:"\\#\\(",e:"\\)",c:[e.ASM,s,e.CNM,l]}]}});hljs.registerLanguage("java",function(e){var a="false synchronized int abstract float private char boolean var static null if const for true while long strictfp finally protected import native final void enum else break transient catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private module requires exports do",t={cN:"number",b:"\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\d]+[\\d_]+[\\d]+|[\\d]+)(\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))?|\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))([eE][-+]?\\d+)?)[lLfF]?",relevance:0};return{aliases:["jsp"],k:a,i:/<\/|#/,c:[e.C("/\\*\\*","\\*/",{relevance:0,c:[{b:/\w+@/,relevance:0},{cN:"doctag",b:"@[A-Za-z]+"}]}),e.CLCM,e.CBCM,e.ASM,e.QSM,{cN:"class",bK:"class interface",e:/[{;=]/,eE:!0,k:"class interface",i:/[:"\[\]]/,c:[{bK:"extends implements"},e.UTM]},{bK:"new throw return else",relevance:0},{cN:"function",b:"([À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*(<[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*(\\s*,\\s*[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*)*>)?\\s+)+"+e.UIR+"\\s*\\(",rB:!0,e:/[{;=]/,eE:!0,k:a,c:[{b:e.UIR+"\\s*\\(",rB:!0,relevance:0,c:[e.UTM]},{cN:"params",b:/\(/,e:/\)/,k:a,relevance:0,c:[e.ASM,e.QSM,e.CNM,e.CBCM]},e.CLCM,e.CBCM]},t,{cN:"meta",b:"@[A-Za-z]+"}]}});hljs.registerLanguage("ocaml",function(e){return{aliases:["ml"],k:{keyword:"and as assert asr begin class constraint do done downto else end exception external for fun function functor if in include inherit! inherit initializer land lazy let lor lsl lsr lxor match method!|10 method mod module mutable new object of open! open or private rec sig struct then to try type val! val virtual when while with parser value",built_in:"array bool bytes char exn|5 float int int32 int64 list lazy_t|5 nativeint|5 string unit in_channel out_channel ref",literal:"true false"},i:/\/\/|>>/,l:"[a-z_]\\w*!?",c:[{cN:"literal",b:"\\[(\\|\\|)?\\]|\\(\\)",relevance:0},e.C("\\(\\*","\\*\\)",{c:["self"]}),{cN:"symbol",b:"'[A-Za-z_](?!')[\\w']*"},{cN:"type",b:"`[A-Z][\\w']*"},{cN:"type",b:"\\b[A-Z][\\w']*",relevance:0},{b:"[a-z_]\\w*'[\\w']*",relevance:0},e.inherit(e.ASM,{cN:"string",relevance:0}),e.inherit(e.QSM,{i:null}),{cN:"number",b:"\\b(0[xX][a-fA-F0-9_]+[Lln]?|0[oO][0-7_]+[Lln]?|0[bB][01_]+[Lln]?|[0-9][0-9_]*([Lln]|(\\.[0-9_]*)?([eE][-+]?[0-9_]+)?)?)",relevance:0},{b:/[-=]>/}]}});hljs.registerLanguage("css",function(e){var c={b:/(?:[A-Z\_\.\-]+|--[a-zA-Z0-9_-]+)\s*:/,rB:!0,e:";",eW:!0,c:[{cN:"attribute",b:/\S/,e:":",eE:!0,starts:{eW:!0,eE:!0,c:[{b:/[\w-]+\(/,rB:!0,c:[{cN:"built_in",b:/[\w-]+/},{b:/\(/,e:/\)/,c:[e.ASM,e.QSM,e.CSSNM]}]},e.CSSNM,e.QSM,e.ASM,e.CBCM,{cN:"number",b:"#[0-9A-Fa-f]+"},{cN:"meta",b:"!important"}]}}]};return{cI:!0,i:/[=\/|'\$]/,c:[e.CBCM,{cN:"selector-id",b:/#[A-Za-z0-9_-]+/},{cN:"selector-class",b:/\.[A-Za-z0-9_-]+/},{cN:"selector-attr",b:/\[/,e:/\]/,i:"$",c:[e.ASM,e.QSM]},{cN:"selector-pseudo",b:/:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/},{b:"@(page|font-face)",l:"@[a-z-]+",k:"@page @font-face"},{b:"@",e:"[{;]",i:/:/,rB:!0,c:[{cN:"keyword",b:/@\-?\w[\w]*(\-\w+)*/},{b:/\s/,eW:!0,eE:!0,relevance:0,k:"and or not only",c:[{b:/[a-z-]+:/,cN:"attribute"},e.ASM,e.QSM,e.CSSNM]}]},{cN:"selector-tag",b:"[a-zA-Z-][a-zA-Z0-9_-]*",relevance:0},{b:"{",e:"}",i:/\S/,c:[e.CBCM,c]}]}});hljs.registerLanguage("makefile",function(e){var i={cN:"variable",v:[{b:"\\$\\("+e.UIR+"\\)",c:[e.BE]},{b:/\$[@%\^\+\*]/}]},r={cN:"string",b:/"/,e:/"/,c:[e.BE,i]},a={cN:"variable",b:/\$\([\w-]+\s/,e:/\)/,k:{built_in:"subst patsubst strip findstring filter filter-out sort word wordlist firstword lastword dir notdir suffix basename addsuffix addprefix join wildcard realpath abspath error warning shell origin flavor foreach if or and call eval file value"},c:[i]},n={b:"^"+e.UIR+"\\s*(?=[:+?]?=)"},t={cN:"section",b:/^[^\s]+:/,e:/$/,c:[i]};return{aliases:["mk","mak"],k:"define endef undefine ifdef ifndef ifeq ifneq else endif include -include sinclude override export unexport private vpath",l:/[\w-]+/,c:[e.HCM,i,r,a,n,{cN:"meta",b:/^\.PHONY:/,e:/$/,k:{"meta-keyword":".PHONY"},l:/[\.\w]+/},t]}});hljs.registerLanguage("erlang",function(e){var r="[a-z'][a-zA-Z0-9_']*",c="("+r+":"+r+"|"+r+")",n={keyword:"after and andalso|10 band begin bnot bor bsl bzr bxor case catch cond div end fun if let not of orelse|10 query receive rem try when xor",literal:"false true"},a=e.C("%","$"),b={cN:"number",b:"\\b(\\d+#[a-fA-F0-9]+|\\d+(\\.\\d+)?([eE][-+]?\\d+)?)",relevance:0},i={b:"fun\\s+"+r+"/\\d+"},l={b:c+"\\(",e:"\\)",rB:!0,relevance:0,c:[{b:c,relevance:0},{b:"\\(",e:"\\)",eW:!0,rE:!0,relevance:0}]},d={b:"{",e:"}",relevance:0},o={b:"\\b_([A-Z][A-Za-z0-9_]*)?",relevance:0},t={b:"[A-Z][a-zA-Z0-9_]*",relevance:0},v={b:"#"+e.UIR,relevance:0,rB:!0,c:[{b:"#"+e.UIR,relevance:0},{b:"{",e:"}",relevance:0}]},f={bK:"fun receive if try case",e:"end",k:n};f.c=[a,i,e.inherit(e.ASM,{cN:""}),f,l,e.QSM,b,d,o,t,v];var s=[a,i,f,l,e.QSM,b,d,o,t,v];l.c[1].c=s,d.c=s;var u={cN:"params",b:"\\(",e:"\\)",c:v.c[1].c=s};return{aliases:["erl"],k:n,i:"(|\\*=|\\+=|-=|/\\*|\\*/|\\(\\*|\\*\\))",c:[{cN:"function",b:"^"+r+"\\s*\\(",e:"->",rB:!0,i:"\\(|#|//|/\\*|\\\\|:|;",c:[u,e.inherit(e.TM,{b:r})],starts:{e:";|\\.",k:n,c:s}},a,{b:"^-",e:"\\.",relevance:0,eE:!0,rB:!0,l:"-"+e.IR,k:"-module -record -undef -export -ifdef -ifndef -author -copyright -doc -vsn -import -include -include_lib -compile -define -else -endif -file -behaviour -behavior -spec",c:[u]},b,e.QSM,v,o,t,d,{b:/\.$/}]}});hljs.registerLanguage("reasonml",function(e){var a="~?[a-z$_][0-9a-zA-Z$_]*",r="`?[A-Z$_][0-9a-zA-Z$_]*",c="("+["||","&&","++","**","+.","*","/","*.","/.","...","|>"].map(function(e){return e.split("").map(function(e){return"\\"+e}).join("")}).join("|")+"|==|===)",n="\\s+"+c+"\\s+",l={keyword:"and as asr assert begin class constraint do done downto else end exception externalfor fun function functor if in include inherit initializerland lazy let lor lsl lsr lxor match method mod module mutable new nonrecobject of open or private rec sig struct then to try type val virtual when while with",built_in:"array bool bytes char exn|5 float int int32 int64 list lazy_t|5 nativeint|5 ref string unit ",literal:"true false"},t="\\b(0[xX][a-fA-F0-9_]+[Lln]?|0[oO][0-7_]+[Lln]?|0[bB][01_]+[Lln]?|[0-9][0-9_]*([Lln]|(\\.[0-9_]*)?([eE][-+]?[0-9_]+)?)?)",i={cN:"number",relevance:0,v:[{b:t},{b:"\\(\\-"+t+"\\)"}]},s={cN:"operator",relevance:0,b:c},b=[{cN:"identifier",relevance:0,b:a},s,i],o=[e.QSM,s,{cN:"module",b:"\\b"+r,rB:!0,e:".",c:[{cN:"identifier",b:r,relevance:0}]}],v=[{cN:"module",b:"\\b"+r,rB:!0,e:".",relevance:0,c:[{cN:"identifier",b:r,relevance:0}]}],u={cN:"function",relevance:0,k:l,v:[{b:"\\s(\\(\\.?.*?\\)|"+a+")\\s*=>",e:"\\s*=>",rB:!0,relevance:0,c:[{cN:"params",v:[{b:a},{b:"~?[a-z$_][0-9a-zA-Z$_]*(s*:s*[a-z$_][0-9a-z$_]*((s*('?[a-z$_][0-9a-z$_]*s*(,'?[a-z$_][0-9a-z$_]*)*)?s*))?)?(s*:s*[a-z$_][0-9a-z$_]*((s*('?[a-z$_][0-9a-z$_]*s*(,'?[a-z$_][0-9a-z$_]*)*)?s*))?)?"},{b:/\(\s*\)/}]}]},{b:"\\s\\(\\.?[^;\\|]*\\)\\s*=>",e:"\\s=>",rB:!0,relevance:0,c:[{cN:"params",relevance:0,v:[{b:a,e:"(,|\\n|\\))",relevance:0,c:[s,{cN:"typing",b:":",e:"(,|\\n)",rB:!0,relevance:0,c:v}]}]}]},{b:"\\(\\.\\s"+a+"\\)\\s*=>"}]};o.push(u);var _={cN:"constructor",b:r+"\\(",e:"\\)",i:"\\n",k:l,c:[e.QSM,s,{cN:"params",b:"\\b"+a}]},N={cN:"pattern-match",b:"\\|",rB:!0,k:l,e:"=>",relevance:0,c:[_,s,{relevance:0,cN:"constructor",b:r}]},d={cN:"module-access",k:l,rB:!0,v:[{b:"\\b("+r+"\\.)+"+a},{b:"\\b("+r+"\\.)+\\(",e:"\\)",rB:!0,c:[u,{b:"\\(",e:"\\)",skip:!0}].concat(o)},{b:"\\b("+r+"\\.)+{",e:"}"}],c:o};return v.push(d),{aliases:["re"],k:l,i:"(:\\-|:=|\\${|\\+=)",c:[e.C("/\\*","\\*/",{i:"^(\\#,\\/\\/)"}),{cN:"character",b:"'(\\\\[^']+|[^'])'",i:"\\n",relevance:0},e.QSM,{cN:"literal",b:"\\(\\)",relevance:0},{cN:"literal",b:"\\[\\|",e:"\\|\\]",relevance:0,c:b},{cN:"literal",b:"\\[",e:"\\]",relevance:0,c:b},_,{cN:"operator",b:n,i:"\\-\\->",relevance:0},i,e.CLCM,N,u,{cN:"module-def",b:"\\bmodule\\s+"+a+"\\s+"+r+"\\s+=\\s+{",e:"}",rB:!0,k:l,relevance:0,c:[{cN:"module",relevance:0,b:r},{b:"{",e:"}",skip:!0}].concat(o)},d]}});hljs.registerLanguage("julia",function(e){var r={keyword:"in isa where baremodule begin break catch ccall const continue do else elseif end export false finally for function global if import importall let local macro module quote return true try using while type immutable abstract bitstype typealias ",literal:"true false ARGS C_NULL DevNull ENDIAN_BOM ENV I Inf Inf16 Inf32 Inf64 InsertionSort JULIA_HOME LOAD_PATH MergeSort NaN NaN16 NaN32 NaN64 PROGRAM_FILE QuickSort RoundDown RoundFromZero RoundNearest RoundNearestTiesAway RoundNearestTiesUp RoundToZero RoundUp STDERR STDIN STDOUT VERSION catalan e|0 eu|0 eulergamma golden im nothing pi γ π φ ",built_in:"ANY AbstractArray AbstractChannel AbstractFloat AbstractMatrix AbstractRNG AbstractSerializer AbstractSet AbstractSparseArray AbstractSparseMatrix AbstractSparseVector AbstractString AbstractUnitRange AbstractVecOrMat AbstractVector Any ArgumentError Array AssertionError Associative Base64DecodePipe Base64EncodePipe Bidiagonal BigFloat BigInt BitArray BitMatrix BitVector Bool BoundsError BufferStream CachingPool CapturedException CartesianIndex CartesianRange Cchar Cdouble Cfloat Channel Char Cint Cintmax_t Clong Clonglong ClusterManager Cmd CodeInfo Colon Complex Complex128 Complex32 Complex64 CompositeException Condition ConjArray ConjMatrix ConjVector Cptrdiff_t Cshort Csize_t Cssize_t Cstring Cuchar Cuint Cuintmax_t Culong Culonglong Cushort Cwchar_t Cwstring DataType Date DateFormat DateTime DenseArray DenseMatrix DenseVecOrMat DenseVector Diagonal Dict DimensionMismatch Dims DirectIndexString Display DivideError DomainError EOFError EachLine Enum Enumerate ErrorException Exception ExponentialBackOff Expr Factorization FileMonitor Float16 Float32 Float64 Function Future GlobalRef GotoNode HTML Hermitian IO IOBuffer IOContext IOStream IPAddr IPv4 IPv6 IndexCartesian IndexLinear IndexStyle InexactError InitError Int Int128 Int16 Int32 Int64 Int8 IntSet Integer InterruptException InvalidStateException Irrational KeyError LabelNode LinSpace LineNumberNode LoadError LowerTriangular MIME Matrix MersenneTwister Method MethodError MethodTable Module NTuple NewvarNode NullException Nullable Number ObjectIdDict OrdinalRange OutOfMemoryError OverflowError Pair ParseError PartialQuickSort PermutedDimsArray Pipe PollingFileWatcher ProcessExitedException Ptr QuoteNode RandomDevice Range RangeIndex Rational RawFD ReadOnlyMemoryError Real ReentrantLock Ref Regex RegexMatch RemoteChannel RemoteException RevString RoundingMode RowVector SSAValue SegmentationFault SerializationState Set SharedArray SharedMatrix SharedVector Signed SimpleVector Slot SlotNumber SparseMatrixCSC SparseVector StackFrame StackOverflowError StackTrace StepRange StepRangeLen StridedArray StridedMatrix StridedVecOrMat StridedVector String SubArray SubString SymTridiagonal Symbol Symmetric SystemError TCPSocket Task Text TextDisplay Timer Tridiagonal Tuple Type TypeError TypeMapEntry TypeMapLevel TypeName TypeVar TypedSlot UDPSocket UInt UInt128 UInt16 UInt32 UInt64 UInt8 UndefRefError UndefVarError UnicodeError UniformScaling Union UnionAll UnitRange Unsigned UpperTriangular Val Vararg VecElement VecOrMat Vector VersionNumber Void WeakKeyDict WeakRef WorkerConfig WorkerPool "},t="[A-Za-z_\\u00A1-\\uFFFF][A-Za-z_0-9\\u00A1-\\uFFFF]*",a={l:t,k:r,i:/<\//},n={cN:"subst",b:/\$\(/,e:/\)/,k:r},o={cN:"variable",b:"\\$"+t},i={cN:"string",c:[e.BE,n,o],v:[{b:/\w*"""/,e:/"""\w*/,relevance:10},{b:/\w*"/,e:/"\w*/}]},l={cN:"string",c:[e.BE,n,o],b:"`",e:"`"},c={cN:"meta",b:"@"+t};return a.c=[{cN:"number",b:/(\b0x[\d_]*(\.[\d_]*)?|0x\.\d[\d_]*)p[-+]?\d+|\b0[box][a-fA-F0-9][a-fA-F0-9_]*|(\b\d[\d_]*(\.[\d_]*)?|\.\d[\d_]*)([eEfF][-+]?\d+)?/,relevance:0},{cN:"string",b:/'(.|\\[xXuU][a-zA-Z0-9]+)'/},i,l,c,{cN:"comment",v:[{b:"#=",e:"=#",relevance:10},{b:"#",e:"$"}]},e.HCM,{cN:"keyword",b:"\\b(((abstract|primitive)\\s+)type|(mutable\\s+)?struct)\\b"},{b:/<:/}],n.c=a.c,a});hljs.registerLanguage("xml",function(e){var c={cN:"symbol",b:"&[a-z]+;|[0-9]+;|[a-f0-9]+;"},s={b:"\\s",c:[{cN:"meta-keyword",b:"#?[a-z_][a-z1-9_-]+",i:"\\n"}]},a=e.inherit(s,{b:"\\(",e:"\\)"}),t=e.inherit(e.ASM,{cN:"meta-string"}),l=e.inherit(e.QSM,{cN:"meta-string"}),r={eW:!0,i:/,relevance:0,c:[{cN:"attr",b:"[A-Za-z0-9\\._:-]+",relevance:0},{b:/=\s*/,relevance:0,c:[{cN:"string",endsParent:!0,v:[{b:/"/,e:/"/,c:[c]},{b:/'/,e:/'/,c:[c]},{b:/[^\s"'=<>`]+/}]}]}]};return{aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"],cI:!0,c:[{cN:"meta",b:"",relevance:10,c:[s,l,t,a,{b:"\\[",e:"\\]",c:[{cN:"meta",b:"",c:[s,a,l,t]}]}]},e.C("\x3c!--","--\x3e",{relevance:10}),{b:"<\\!\\[CDATA\\[",e:"\\]\\]>",relevance:10},c,{cN:"meta",b:/<\?xml/,e:/\?>/,relevance:10},{b:/<\?(php)?/,e:/\?>/,sL:"php",c:[{b:"/\\*",e:"\\*/",skip:!0},{b:'b"',e:'"',skip:!0},{b:"b'",e:"'",skip:!0},e.inherit(e.ASM,{i:null,cN:null,c:null,skip:!0}),e.inherit(e.QSM,{i:null,cN:null,c:null,skip:!0})]},{cN:"tag",b:"",rE:!0,sL:["css","xml"]}},{cN:"tag",b:"
diff --git a/src/main/frontend/handler/plugin.cljs b/src/main/frontend/handler/plugin.cljs
index 11515e8644da..781af88518a1 100644
--- a/src/main/frontend/handler/plugin.cljs
+++ b/src/main/frontend/handler/plugin.cljs
@@ -41,7 +41,7 @@
[s]
(try
(if (string? s)
- (js/window.marked s) s)
+ (js/window.marked.parse s) s)
(catch js/Error e
(js/console.error e) s)))
From 5d9861a51084c832bdffefd4e4e16684af0d2304 Mon Sep 17 00:00:00 2001
From: Konstantinos Kaloutas
Date: Wed, 2 Aug 2023 10:49:23 +0300
Subject: [PATCH 63/63] upgrade pdfjs
---
package.json | 2 +-
src/main/frontend/extensions/pdf/utils.cljs | 2 +-
yarn.lock | 245 +++++++++++++++++---
3 files changed, 209 insertions(+), 40 deletions(-)
diff --git a/package.json b/package.json
index 702d14ad5396..1f22c5acc0da 100644
--- a/package.json
+++ b/package.json
@@ -127,7 +127,7 @@
"mldoc": "1.5.7",
"path": "0.12.7",
"path-complete-extname": "1.0.0",
- "pdfjs-dist": "2.14.305",
+ "pdfjs-dist": "^3.9.179",
"photoswipe": "^5.3.7",
"pixi-graph-fork": "0.2.0",
"pixi.js": "6.2.0",
diff --git a/src/main/frontend/extensions/pdf/utils.cljs b/src/main/frontend/extensions/pdf/utils.cljs
index 969a021fbe28..85b26ead1870 100644
--- a/src/main/frontend/extensions/pdf/utils.cljs
+++ b/src/main/frontend/extensions/pdf/utils.cljs
@@ -56,7 +56,7 @@
(defn resolve-hls-layer!
[^js viewer page]
(when-let [^js text-layer (.. viewer (getPageView (dec page)) -textLayer)]
- (let [cnt (.-textLayerDiv text-layer)
+ (let [cnt (.-div text-layer)
cls "extensions__pdf-hls-layer"
doc js/document
layer (.querySelector cnt (str "." cls))]
diff --git a/yarn.lock b/yarn.lock
index fdbb258b5893..5614a30b10c9 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -526,6 +526,21 @@
resolved "https://registry.yarnpkg.com/@logseq/react-tweet-embed/-/react-tweet-embed-1.3.1-1.tgz#119d22be8234de006fc35c3fa2a36f85634c5be6"
integrity sha512-9O0oHs5depCvh6ZQvwtl1xb7B80YG5rUfY10uSUat5itOlcE3IWaYYpe6p/tcHErqHWnWgkXHitAB9M29FMbQg==
+"@mapbox/node-pre-gyp@^1.0.0":
+ version "1.0.11"
+ resolved "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz#417db42b7f5323d79e93b34a6d7a2a12c0df43fa"
+ integrity sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==
+ dependencies:
+ detect-libc "^2.0.0"
+ https-proxy-agent "^5.0.0"
+ make-dir "^3.1.0"
+ node-fetch "^2.6.7"
+ nopt "^5.0.0"
+ npmlog "^5.0.1"
+ rimraf "^3.0.2"
+ semver "^7.3.5"
+ tar "^6.1.11"
+
"@nodelib/fs.scandir@2.1.5":
version "2.1.5"
resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
@@ -1069,6 +1084,11 @@
dependencies:
"@types/node" "*"
+abbrev@1:
+ version "1.1.1"
+ resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
+ integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
+
acorn-node@^1.8.2:
version "1.8.2"
resolved "https://registry.yarnpkg.com/acorn-node/-/acorn-node-1.8.2.tgz#114c95d64539e53dede23de8b9d96df7c7ae2af8"
@@ -1088,6 +1108,13 @@ acorn@^7.0.0:
resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa"
integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==
+agent-base@6:
+ version "6.0.2"
+ resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77"
+ integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==
+ dependencies:
+ debug "4"
+
aggregate-error@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a"
@@ -1177,11 +1204,24 @@ append-buffer@^1.0.2:
dependencies:
buffer-equal "^1.0.0"
+"aproba@^1.0.3 || ^2.0.0":
+ version "2.0.0"
+ resolved "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc"
+ integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==
+
archy@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40"
integrity sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==
+are-we-there-yet@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz#372e0e7bd279d8e94c653aaa1f67200884bf3e1c"
+ integrity sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==
+ dependencies:
+ delegates "^1.0.0"
+ readable-stream "^3.6.0"
+
arg@^5.0.2:
version "5.0.2"
resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c"
@@ -1703,6 +1743,15 @@ caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001370, can
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001431.tgz#e7c59bd1bc518fae03a4656be442ce6c4887a795"
integrity sha512-zBUoFU0ZcxpvSt9IU66dXVT/3ctO1cy4y9cscs1szkPlcWb6pasYM144GqrUygUbT+k7cmUCW61cvskjcv0enQ==
+canvas@^2.11.2:
+ version "2.11.2"
+ resolved "https://registry.npmjs.org/canvas/-/canvas-2.11.2.tgz#553d87b1e0228c7ac0fc72887c3adbac4abbd860"
+ integrity sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw==
+ dependencies:
+ "@mapbox/node-pre-gyp" "^1.0.0"
+ nan "^2.17.0"
+ simple-get "^3.0.3"
+
capacitor-voice-recorder@4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/capacitor-voice-recorder/-/capacitor-voice-recorder-4.0.0.tgz#41939aa21e68eb58301e781c217ad17dd48d2a34"
@@ -1984,9 +2033,9 @@ color-space@^2.0.0:
resolved "https://registry.yarnpkg.com/color-space/-/color-space-2.0.0.tgz#ae7813abcbe3dabda9e3e2266b0675f688b24977"
integrity sha512-Bu8P/usGNuVWushjxcuaGSkhT+L2KX0cvgMGMTF0KJ7lFeqonhsntT68d6Yu3uwZzCmbF7KTB9EV67AGcUXhJw==
-color-support@^1.1.3:
+color-support@^1.1.2, color-support@^1.1.3:
version "1.1.3"
- resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2"
+ resolved "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2"
integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==
colord@^2.9.1:
@@ -2039,6 +2088,11 @@ console-browserify@^1.1.0:
resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336"
integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==
+console-control-strings@^1.0.0, console-control-strings@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
+ integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==
+
constants-browserify@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
@@ -2294,6 +2348,13 @@ dayjs@^1.10.0:
resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.5.tgz#00e8cc627f231f9499c19b38af49f56dc0ac5e93"
integrity sha512-CAdX5Q3YW3Gclyo5Vpqkgpj8fSdLQcRuzfX6mC6Phy0nfJ0eGYOeS7m4mt2plDWLAtA4TqTakvbboHvUxfe4iA==
+debug@4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.2.0, debug@^4.3.1, debug@^4.3.4:
+ version "4.3.4"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
+ integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
+ dependencies:
+ ms "2.1.2"
+
debug@^2.2.0, debug@^2.3.3:
version "2.6.9"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
@@ -2301,13 +2362,6 @@ debug@^2.2.0, debug@^2.3.3:
dependencies:
ms "2.0.0"
-debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.2.0, debug@^4.3.1, debug@^4.3.4:
- version "4.3.4"
- resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
- integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
- dependencies:
- ms "2.1.2"
-
decamelize-keys@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9"
@@ -2326,6 +2380,13 @@ decode-uri-component@^0.2.0:
resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9"
integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==
+decompress-response@^4.2.0:
+ version "4.2.1"
+ resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz#414023cc7a302da25ce2ec82d0d5238ccafd8986"
+ integrity sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==
+ dependencies:
+ mimic-response "^2.0.0"
+
decompress-response@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc"
@@ -2409,6 +2470,11 @@ del@^6.0.0:
rimraf "^3.0.2"
slash "^3.0.0"
+delegates@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
+ integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==
+
dependency-graph@^0.11.0:
version "0.11.0"
resolved "https://registry.yarnpkg.com/dependency-graph/-/dependency-graph-0.11.0.tgz#ac0ce7ed68a54da22165a85e97a01d53f5eb2e27"
@@ -2427,6 +2493,11 @@ detect-file@^1.0.0:
resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7"
integrity sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==
+detect-libc@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz#8ccf2ba9315350e1241b88d0ac3b0e1fbd99605d"
+ integrity sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==
+
detect-node@^2.0.4:
version "2.1.0"
resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1"
@@ -2526,11 +2597,6 @@ domhandler@^4.2.0, domhandler@^4.3.1:
dependencies:
domelementtype "^2.2.0"
-dommatrix@^1.0.1:
- version "1.0.3"
- resolved "https://registry.npmjs.org/dommatrix/-/dommatrix-1.0.3.tgz#e7c18e8d6f3abdd1fef3dd4aa74c4d2e620a0525"
- integrity sha512-l32Xp/TLgWb8ReqbVJAFIvXmY7go4nTxxlWiAFyhoQw9RKEOHBZNnyGvJWqDVSPmq3Y9HlM4npqF/T6VMOXhww==
-
dompurify@2.4.0:
version "2.4.0"
resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.4.0.tgz#c9c88390f024c2823332615c9e20a453cf3825dd"
@@ -3195,6 +3261,21 @@ fuse.js@6.4.6:
resolved "https://registry.yarnpkg.com/fuse.js/-/fuse.js-6.4.6.tgz#62f216c110e5aa22486aff20be7896d19a059b79"
integrity sha512-/gYxR/0VpXmWSfZOIPS3rWwU8SHgsRTwWuXhyb2O6s7aRuVtHtxCkR33bNYu3wyLyNx/Wpv0vU7FZy8Vj53VNw==
+gauge@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz#03bf4441c044383908bcfa0656ad91803259b395"
+ integrity sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==
+ dependencies:
+ aproba "^1.0.3 || ^2.0.0"
+ color-support "^1.1.2"
+ console-control-strings "^1.0.0"
+ has-unicode "^2.0.1"
+ object-assign "^4.1.1"
+ signal-exit "^3.0.0"
+ string-width "^4.2.3"
+ strip-ansi "^6.0.1"
+ wide-align "^1.1.2"
+
gensync@^1.0.0-beta.2:
version "1.0.0-beta.2"
resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
@@ -3553,6 +3634,11 @@ has-tostringtag@^1.0.0:
dependencies:
has-symbols "^1.0.2"
+has-unicode@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
+ integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==
+
has-value@^0.3.1:
version "0.3.1"
resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"
@@ -3686,6 +3772,14 @@ https-browserify@^1.0.0:
resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"
integrity sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==
+https-proxy-agent@^5.0.0:
+ version "5.0.1"
+ resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6"
+ integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==
+ dependencies:
+ agent-base "6"
+ debug "4"
+
ieee754@^1.1.4:
version "1.2.1"
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
@@ -4507,6 +4601,13 @@ lru-cache@^6.0.0:
dependencies:
yallist "^4.0.0"
+make-dir@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f"
+ integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==
+ dependencies:
+ semver "^6.0.0"
+
make-iterator@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/make-iterator/-/make-iterator-1.0.1.tgz#29b33f312aa8f547c4a5e490f56afcec99133ad6"
@@ -4707,6 +4808,11 @@ mimic-response@^1.0.0:
resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b"
integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==
+mimic-response@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz#d13763d35f613d09ec37ebb30bac0469c0ee8f43"
+ integrity sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==
+
mimic-response@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9"
@@ -4808,9 +4914,9 @@ mute-stdout@^1.0.0:
resolved "https://registry.yarnpkg.com/mute-stdout/-/mute-stdout-1.0.1.tgz#acb0300eb4de23a7ddeec014e3e96044b3472331"
integrity sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==
-nan@^2.12.1:
+nan@^2.12.1, nan@^2.17.0:
version "2.17.0"
- resolved "https://registry.yarnpkg.com/nan/-/nan-2.17.0.tgz#c0150a2368a182f033e9aa5195ec76ea41a199cb"
+ resolved "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz#c0150a2368a182f033e9aa5195ec76ea41a199cb"
integrity sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==
nanoid@^3.3.4:
@@ -4862,6 +4968,13 @@ nice-try@^1.0.4:
resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
+node-fetch@^2.6.7:
+ version "2.6.12"
+ resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.12.tgz#02eb8e22074018e3d5a83016649d04df0e348fba"
+ integrity sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==
+ dependencies:
+ whatwg-url "^5.0.0"
+
node-libs-browser@^2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425"
@@ -4896,6 +5009,13 @@ node-releases@^2.0.6:
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503"
integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==
+nopt@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88"
+ integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==
+ dependencies:
+ abbrev "1"
+
normalize-package-data@^2.3.2, normalize-package-data@^2.5.0:
version "2.5.0"
resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
@@ -4972,6 +5092,16 @@ npm-run-path@^2.0.0:
dependencies:
path-key "^2.0.0"
+npmlog@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz#f06678e80e29419ad67ab964e0fa69959c1eb8b0"
+ integrity sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==
+ dependencies:
+ are-we-there-yet "^2.0.0"
+ console-control-strings "^1.1.0"
+ gauge "^3.0.0"
+ set-blocking "^2.0.0"
+
nth-check@^2.0.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d"
@@ -5352,6 +5482,11 @@ path-type@^4.0.0:
resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
+path2d-polyfill@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.npmjs.org/path2d-polyfill/-/path2d-polyfill-2.0.1.tgz#24c554a738f42700d6961992bf5f1049672f2391"
+ integrity sha512-ad/3bsalbbWhmBo0D6FZ4RNMwsLsPpL6gnvhuSaU5Vm7b06Kr5ubSltQQ0T7YKsiJQO+g22zJ4dJKNTXIyOXtA==
+
path@0.12.7:
version "0.12.7"
resolved "https://registry.yarnpkg.com/path/-/path-0.12.7.tgz#d4dc2a506c4ce2197eb481ebfcd5b36c0140b10f"
@@ -5371,13 +5506,13 @@ pbkdf2@^3.0.3:
safe-buffer "^5.0.1"
sha.js "^2.4.8"
-pdfjs-dist@2.14.305:
- version "2.14.305"
- resolved "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-2.14.305.tgz#ed2ecb439ff8af5446c90a310ebd30bc1a91df62"
- integrity sha512-5f7i25J1dKIBczhgfxEgNxfYNIxXEdxqo6Qb4ehY7Ja+p6AI4uUmk/OcVGXfRGm2ys5iaJJhJUwBFwv6Jl/Qww==
- dependencies:
- dommatrix "^1.0.1"
- web-streams-polyfill "^3.2.1"
+pdfjs-dist@^3.9.179:
+ version "3.9.179"
+ resolved "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-3.9.179.tgz#db442d1d7359b51dd02623ea2fc5e4ad436b6945"
+ integrity sha512-AZBEIAORYDaOAlM0/A4Zg465+XF3ugYDdgrVmioVvNW5tH3xs3RpGFBYOG5PM9/vLM3M/wNncsMLTgyIKdqMKg==
+ optionalDependencies:
+ canvas "^2.11.2"
+ path2d-polyfill "^2.0.1"
pend@~1.2.0:
version "1.2.0"
@@ -6569,12 +6704,12 @@ semver-greatest-satisfied-range@^1.1.0:
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8"
integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==
-semver@^6.2.0, semver@^6.3.0:
+semver@^6.0.0, semver@^6.2.0, semver@^6.3.0:
version "6.3.1"
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
-semver@^7.3.2, semver@^7.3.4, semver@^7.3.7:
+semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7:
version "7.5.4"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e"
integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==
@@ -6704,6 +6839,20 @@ signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3:
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
+simple-concat@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f"
+ integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==
+
+simple-get@^3.0.3:
+ version "3.1.1"
+ resolved "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz#cc7ba77cfbe761036fbfce3d021af25fc5584d55"
+ integrity sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==
+ dependencies:
+ decompress-response "^4.2.0"
+ once "^1.3.1"
+ simple-concat "^1.0.0"
+
sisteransi@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed"
@@ -6929,15 +7078,7 @@ string-width@^1.0.1, string-width@^1.0.2:
is-fullwidth-code-point "^1.0.0"
strip-ansi "^3.0.0"
-string-width@^2.0.0, string-width@^2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
- integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
- dependencies:
- is-fullwidth-code-point "^2.0.0"
- strip-ansi "^4.0.0"
-
-string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3:
+"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3:
version "4.2.3"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
@@ -6946,6 +7087,14 @@ string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2
is-fullwidth-code-point "^3.0.0"
strip-ansi "^6.0.1"
+string-width@^2.0.0, string-width@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
+ integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
+ dependencies:
+ is-fullwidth-code-point "^2.0.0"
+ strip-ansi "^4.0.0"
+
string.prototype.padend@^3.0.0:
version "3.1.3"
resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.3.tgz#997a6de12c92c7cb34dc8a201a6c53d9bd88a5f1"
@@ -7368,6 +7517,11 @@ to-through@^2.0.0:
dependencies:
through2 "^2.0.3"
+tr46@~0.0.3:
+ version "0.0.3"
+ resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
+ integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==
+
tree-kill@^1.2.2:
version "1.2.2"
resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc"
@@ -7772,10 +7926,18 @@ vm-browserify@^1.0.1:
resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0"
integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==
-web-streams-polyfill@^3.2.1:
- version "3.2.1"
- resolved "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz#71c2718c52b45fd49dbeee88634b3a60ceab42a6"
- integrity sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==
+webidl-conversions@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
+ integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==
+
+whatwg-url@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d"
+ integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==
+ dependencies:
+ tr46 "~0.0.3"
+ webidl-conversions "^3.0.0"
which-boxed-primitive@^1.0.2:
version "1.0.2"
@@ -7812,6 +7974,13 @@ which@^2.0.1:
dependencies:
isexe "^2.0.0"
+wide-align@^1.1.2:
+ version "1.1.5"
+ resolved "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3"
+ integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==
+ dependencies:
+ string-width "^1.0.2 || 2 || 3 || 4"
+
wrap-ansi@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85"