From 602e0231eaab980fffd936bcc0155acc40e49052 Mon Sep 17 00:00:00 2001 From: charlie Date: Fri, 5 May 2023 13:06:46 +0800 Subject: [PATCH 001/190] enhance(ux): support the keymap manager within modal container --- .../frontend/components/right_sidebar.cljs | 2 +- src/main/frontend/components/settings.css | 3 +- src/main/frontend/components/shortcut.cljs | 32 +++++++++++++++---- src/main/frontend/components/shortcut.css | 13 ++++++++ src/main/frontend/handler/events.cljs | 6 ++++ .../frontend/modules/shortcut/config.cljs | 2 +- src/main/frontend/routes.cljs | 2 +- 7 files changed, 48 insertions(+), 12 deletions(-) create mode 100644 src/main/frontend/components/shortcut.css diff --git a/src/main/frontend/components/right_sidebar.cljs b/src/main/frontend/components/right_sidebar.cljs index 892bd08f177..6991b76d32c 100644 --- a/src/main/frontend/components/right_sidebar.cljs +++ b/src/main/frontend/components/right_sidebar.cljs @@ -56,7 +56,7 @@ (rum/defc shortcut-settings [] [:div.contents.flex-col.flex.ml-3 - (shortcut/shortcut {:show-title? false})]) + (shortcut/shortcut-page {:show-title? false})]) (defn- block-with-breadcrumb [repo block idx sidebar-key ref?] diff --git a/src/main/frontend/components/settings.css b/src/main/frontend/components/settings.css index 96c7762048d..9da8e11fd6c 100644 --- a/src/main/frontend/components/settings.css +++ b/src/main/frontend/components/settings.css @@ -2,8 +2,7 @@ &-main { > header { - padding: 10px; - padding-top: 0; + padding: 0 10px 10px; border-bottom: 1px solid var(--ls-quaternary-background-color); h1 { diff --git a/src/main/frontend/components/shortcut.cljs b/src/main/frontend/components/shortcut.cljs index bc57ab7fb83..57205f11508 100644 --- a/src/main/frontend/components/shortcut.cljs +++ b/src/main/frontend/components/shortcut.cljs @@ -167,13 +167,9 @@ [:td.text-right (get rendered name)]]) list)]])) -(rum/defc shortcut - [{:keys [show-title?] - :or {show-title? true}}] - [:div - (when show-title? [:h1.title (t :help/shortcut-page-title)]) - (trigger-table) - (markdown-and-orgmode-syntax) +(rum/defc keymap-tables + [] + [:div.cp__keymap-tables (shortcut-table :shortcut.category/basics true) (shortcut-table :shortcut.category/navigating true) (shortcut-table :shortcut.category/block-editing true) @@ -183,3 +179,25 @@ (shortcut-table :shortcut.category/toggle true) (when (state/enable-whiteboards?) (shortcut-table :shortcut.category/whiteboard true)) (shortcut-table :shortcut.category/others true)]) + +(rum/defc keymap-pane + [] + (let [[ready?, set-ready!] (rum/use-state false)] + (rum/use-effect! + (fn [] (js/setTimeout #(set-ready! true) 32)) + []) + + [:div.cp__keymap-pane + [:h1.pb-2.text-3xl "Keymap"] + (if ready? + (keymap-tables) + [:p.flex.justify-center.py-20 (ui/loading "")])])) + +(rum/defc shortcut-page + [{:keys [show-title?] + :or {show-title? true}}] + [:div.cp__shortcut-page + (when show-title? [:h1.title (t :help/shortcut-page-title)]) + (trigger-table) + (markdown-and-orgmode-syntax) + (keymap-tables)]) diff --git a/src/main/frontend/components/shortcut.css b/src/main/frontend/components/shortcut.css new file mode 100644 index 00000000000..5e942abc3d3 --- /dev/null +++ b/src/main/frontend/components/shortcut.css @@ -0,0 +1,13 @@ +.ui__modal { + &[label="keymap-manager"] { + .panel-content { + @apply m-[-8px]; + } + + @screen lg { + .panel-content { + width: 920px; + } + } + } +} \ No newline at end of file diff --git a/src/main/frontend/handler/events.cljs b/src/main/frontend/handler/events.cljs index 98a5700f278..27ca7d72952 100644 --- a/src/main/frontend/handler/events.cljs +++ b/src/main/frontend/handler/events.cljs @@ -23,6 +23,7 @@ [frontend.components.shell :as shell] [frontend.components.whiteboard :as whiteboard] [frontend.components.user.login :as login] + [frontend.components.shortcut :as shortcut] [frontend.config :as config] [frontend.context.i18n :refer [t]] [frontend.db :as db] @@ -948,6 +949,11 @@ (defmethod handle :editor/quick-capture [[_ args]] (quick-capture/quick-capture args)) +(defmethod handle :modal/keymap-manager [[_]] + (state/set-modal! + #(shortcut/keymap-pane) + {:label "keymap-manager"})) + (defn run! [] (let [chan (state/get-events-chan)] diff --git a/src/main/frontend/modules/shortcut/config.cljs b/src/main/frontend/modules/shortcut/config.cljs index 272d9e65331..ecf9c1faef7 100644 --- a/src/main/frontend/modules/shortcut/config.cljs +++ b/src/main/frontend/modules/shortcut/config.cljs @@ -435,7 +435,7 @@ :fn route-handler/redirect-to-whiteboard-dashboard!} :go/keyboard-shortcuts {:binding "g s" - :fn #(route-handler/redirect! {:to :shortcut-setting})} + :fn #(state/pub-event! [:modal/keymap-manager])} :go/tomorrow {:binding "g t" :fn journal-handler/go-to-tomorrow!} diff --git a/src/main/frontend/routes.cljs b/src/main/frontend/routes.cljs index 58c5752d125..58b62cce0f8 100644 --- a/src/main/frontend/routes.cljs +++ b/src/main/frontend/routes.cljs @@ -71,7 +71,7 @@ ["/settings/shortcut" {:name :shortcut-setting - :view shortcut/shortcut}] + :view shortcut/shortcut-page}] ["/settings/zotero" {:name :zotero-setting From 39f529b20b7b6fd6c617733286c6cc493b6ded25 Mon Sep 17 00:00:00 2001 From: charlie Date: Fri, 5 May 2023 16:31:34 +0800 Subject: [PATCH 002/190] enhance(ui): layout of the recording shortcut modal --- src/main/frontend/components/shortcut.cljs | 8 +++++--- tailwind.config.js | 5 +++++ 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/main/frontend/components/shortcut.cljs b/src/main/frontend/components/shortcut.cljs index 57205f11508..fa715181a27 100644 --- a/src/main/frontend/components/shortcut.cljs +++ b/src/main/frontend/components/shortcut.cljs @@ -17,8 +17,8 @@ [state k action-name current-binding] (let [keypress (:rum/local state) keyboard-shortcut (if (= "" @keypress) current-binding @keypress)] - [:div - [:div + [:<> + [:div.sm:w-lsm [:p.mb-4 "Press any sequence of keys to set the shortcut for the " [:b action-name] " action."] [:p.mb-4.mt-4 (ui/render-keyboard-shortcut (-> keyboard-shortcut @@ -61,7 +61,9 @@ (if disabled? "Cannot override system default" "Click to modify")) :background (if conflict? "pink" (when disabled? "gray")) :on-click (when-not disabled? - #(state/set-modal! (customize-shortcut-dialog k action-name displayed-binding))))]))) + #(state/set-sub-modal! + (customize-shortcut-dialog k action-name displayed-binding) + {:center? true})))]))) (rum/defc shortcut-table < rum/reactive ([name] diff --git a/tailwind.config.js b/tailwind.config.js index a60ba9ba0f8..cc10679ada6 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -56,6 +56,11 @@ module.exports = { '250': '2.5', '300': '3', '400': '4', + }, + width: { + 'lsm': '600px', + 'lmd': '728px', + 'llg': '960px' } }, colors: { From c4c9be91e877e58d9250069c9e38efdf85c16969 Mon Sep 17 00:00:00 2001 From: charlie Date: Mon, 8 May 2023 17:17:31 +0800 Subject: [PATCH 003/190] fix(plugin): normalize plugin keybindings to adapt for the closure lib legal keynames --- src/main/frontend/handler/plugin.cljs | 5 +++-- src/main/frontend/modules/shortcut/config.cljs | 10 +++++----- src/main/frontend/modules/shortcut/core.cljs | 4 ++-- src/main/frontend/modules/shortcut/data_helper.cljs | 13 ------------- src/main/frontend/util.cljc | 12 ++++++++++++ src/main/logseq/api.cljs | 4 ++-- 6 files changed, 24 insertions(+), 24 deletions(-) diff --git a/src/main/frontend/handler/plugin.cljs b/src/main/frontend/handler/plugin.cljs index 121450b7e7f..6223c9d0e40 100644 --- a/src/main/frontend/handler/plugin.cljs +++ b/src/main/frontend/handler/plugin.cljs @@ -297,9 +297,10 @@ [pid key keybinding] (let [id (keyword (str "plugin." pid "/" key)) binding (:binding keybinding) + binding (some->> (if (string? binding) [binding] (seq binding)) + (map util/normalize-user-keyname)) binding (if util/mac? - (or (:mac keybinding) binding) - binding) + (or (:mac keybinding) binding) binding) mode (or (:mode keybinding) :global) mode (get keybinding-mode-handler-map (keyword mode))] [mode id {:binding binding}])) diff --git a/src/main/frontend/modules/shortcut/config.cljs b/src/main/frontend/modules/shortcut/config.cljs index 186e2115f7b..58e2f1fb7b9 100644 --- a/src/main/frontend/modules/shortcut/config.cljs +++ b/src/main/frontend/modules/shortcut/config.cljs @@ -113,19 +113,19 @@ :whiteboard/zoom-out {:binding "shift+dash" :fn #(.zoomOut (.-api ^js (state/active-tldraw-app)) false)} - :whiteboard/zoom-in {:binding "shift+=" + :whiteboard/zoom-in {:binding "shift+equals" :fn #(.zoomIn (.-api ^js (state/active-tldraw-app)) false)} - :whiteboard/send-backward {:binding "[" + :whiteboard/send-backward {:binding "open-square-bracket" :fn #(.sendBackward ^js (state/active-tldraw-app))} - :whiteboard/send-to-back {:binding "shift+[" + :whiteboard/send-to-back {:binding "shift+open-square-bracket" :fn #(.sendToBack ^js (state/active-tldraw-app))} - :whiteboard/bring-forward {:binding "]" + :whiteboard/bring-forward {:binding "close-square-bracket" :fn #(.bringForward ^js (state/active-tldraw-app))} - :whiteboard/bring-to-front {:binding "shift+]" + :whiteboard/bring-to-front {:binding "shift+close-square-bracket" :fn #(.bringToFront ^js (state/active-tldraw-app))} :whiteboard/lock {:binding "mod+l" diff --git a/src/main/frontend/modules/shortcut/core.cljs b/src/main/frontend/modules/shortcut/core.cljs index d45f1fc2d24..7b51c6dcb12 100644 --- a/src/main/frontend/modules/shortcut/core.cljs +++ b/src/main/frontend/modules/shortcut/core.cljs @@ -66,7 +66,7 @@ (doseq [k (dh/shortcut-binding id)] (try (log/debug :shortcut/register-shortcut {:id id :binding k}) - (.registerShortcut handler (util/keyname id) (dh/normalize-user-keyname k)) + (.registerShortcut handler (util/keyname id) (util/normalize-user-keyname k)) (catch :default e (log/error :shortcut/register-shortcut {:id id :binding k @@ -81,7 +81,7 @@ (when-let [handler (get-handler-by-id handler-id)] (when-let [ks (dh/shortcut-binding shortcut-id)] (doseq [k ks] - (.unregisterShortcut ^js handler (dh/normalize-user-keyname k)))) + (.unregisterShortcut ^js handler (util/normalize-user-keyname k)))) (shortcut-config/remove-shortcut! handler-id shortcut-id))) (defn uninstall-shortcut! diff --git a/src/main/frontend/modules/shortcut/data_helper.cljs b/src/main/frontend/modules/shortcut/data_helper.cljs index 3be8271e30c..291b46e62e6 100644 --- a/src/main/frontend/modules/shortcut/data_helper.cljs +++ b/src/main/frontend/modules/shortcut/data_helper.cljs @@ -52,19 +52,6 @@ shortcut) (mapv mod-key))))) -(defn normalize-user-keyname - [k] - (let [keynames {";" "semicolon" - "=" "equals" - "-" "dash" - "[" "open-square-bracket" - "]" "close-square-bracket" - "'" "single-quote"}] - (some-> k - (util/safe-lower-case) - (str/replace #"[;=-\[\]']" (fn [s] - (get keynames s)))))) - ;; returns a vector to preserve order (defn binding-by-category [name] (let [dict (->> (vals @shortcut-config/config) diff --git a/src/main/frontend/util.cljc b/src/main/frontend/util.cljc index a7e17965982..5130c0ac20e 100644 --- a/src/main/frontend/util.cljc +++ b/src/main/frontend/util.cljc @@ -67,6 +67,18 @@ [parts] (string/join "/" parts)) +(defn normalize-user-keyname + [k] + (let [keynames {";" "semicolon" + "=" "equals" + "-" "dash" + "[" "open-square-bracket" + "]" "close-square-bracket" + "'" "single-quote"}] + (some-> (str k) + (string/lower-case) + (string/replace #"[;=-\[\]']" (fn [s] + (get keynames s)))))) #?(:cljs (defn safe-re-find diff --git a/src/main/logseq/api.cljs b/src/main/logseq/api.cljs index 3c14830b53f..997b4908ad7 100644 --- a/src/main/logseq/api.cljs +++ b/src/main/logseq/api.cljs @@ -367,7 +367,7 @@ (palette-handler/invoke-command palette-cmd) (action'))) [handler-id id shortcut-map] (update shortcut-args 2 assoc :fn dispatch-cmd)] - (js/console.debug :shortcut/register-shortcut [handler-id id shortcut-map]) + (println :shortcut/register-shortcut [handler-id id shortcut-map]) (st/register-shortcut! handler-id id shortcut-map))))))) (defn ^:export unregister_plugin_simple_command @@ -383,7 +383,7 @@ (palette-handler/unregister (:id cmd)) ;; remove keybinding commands (when (seq (:shortcut cmd)) - (js/console.debug :shortcut/unregister-shortcut cmd) + (println :shortcut/unregister-shortcut cmd) (st/unregister-shortcut! (:handler-id cmd) (:id cmd))))))) (defn ^:export register_search_service From df578a4db00646fe84e9cbd1f276a1364a623223 Mon Sep 17 00:00:00 2001 From: charlie Date: Wed, 10 May 2023 14:22:44 +0800 Subject: [PATCH 004/190] fix(shortcuts): incorrect validation for removing shortcut --- .../frontend/modules/shortcut/data_helper.cljs | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/main/frontend/modules/shortcut/data_helper.cljs b/src/main/frontend/modules/shortcut/data_helper.cljs index 291b46e62e6..511e2aee257 100644 --- a/src/main/frontend/modules/shortcut/data_helper.cljs +++ b/src/main/frontend/modules/shortcut/data_helper.cljs @@ -135,13 +135,14 @@ (defn remove-shortcut [k] (let [repo (state/get-current-repo) path (config/get-repo-config-path)] - (when-let [content (db/get-file path)] - (let [result (config-handler/parse-repo-config content) - new-result (rewrite/update - result - :shortcuts - #(dissoc (rewrite/sexpr %) k)) - new-content (str new-result)] + (when-let [result (some-> (db/get-file path) + (config-handler/parse-repo-config))] + (when-let [new-content (and (:shortcuts result) + (-> (rewrite/update + result + :shortcuts + #(dissoc (rewrite/sexpr %) k)) + (str)))] (repo-config-handler/set-repo-config-state! repo new-content) (file/set-file-content! repo path new-content))))) From e19527286217f7983b801169d58a952c3ac84f2c Mon Sep 17 00:00:00 2001 From: charlie Date: Wed, 10 May 2023 15:19:20 +0800 Subject: [PATCH 005/190] enhance(ux): shortcut recorder actions impl --- src/main/frontend/components/shortcut.cljs | 31 ++++++++++++-------- src/main/frontend/modules/shortcut/core.cljs | 16 +++++----- 2 files changed, 28 insertions(+), 19 deletions(-) diff --git a/src/main/frontend/components/shortcut.cljs b/src/main/frontend/components/shortcut.cljs index fa715181a27..d7b1c844ff9 100644 --- a/src/main/frontend/components/shortcut.cljs +++ b/src/main/frontend/components/shortcut.cljs @@ -13,10 +13,13 @@ (rum/defcs customize-shortcut-dialog-inner < (rum/local "") + (rum/local nil :rum/action) (shortcut/record!) [state k action-name current-binding] - (let [keypress (:rum/local state) - keyboard-shortcut (if (= "" @keypress) current-binding @keypress)] + (let [*keypress (:rum/local state) + *action (:rum/action state) + keypressed? (not= "" @*keypress) + keyboard-shortcut (if-not keypressed? current-binding @*keypress)] [:<> [:div.sm:w-lsm [:p.mb-4 "Press any sequence of keys to set the shortcut for the " [:b action-name] " action."] @@ -26,19 +29,23 @@ (str/lower-case) (str/split #" |\+"))) " " - [:a.text-sm - {:style {:margin-left "12px"} - :on-click (fn [] - (dh/remove-shortcut k) - (shortcut/refresh!) - (swap! keypress (fn [] "")) ;; Clear local state - )} - "Reset"]]] + (when keypressed? + [:a.text-sm + {:style {:margin-left "12px"} + :on-click (fn [] + (dh/remove-shortcut k) + (shortcut/refresh!) + (swap! *keypress (fn [] "")) ;; Clear local state + )} + "Reset"])]] [:div.cancel-save-buttons.text-right.mt-4 - (ui/button "Save" :on-click state/close-modal!) + (ui/button "Save" :on-click (fn [] + (reset! *action :save) + (state/close-modal!))) [:a.ml-4 {:on-click (fn [] - (reset! keypress (dh/binding-for-storage current-binding)) + (reset! *keypress (dh/binding-for-storage current-binding)) + (reset! *action :cancel) (state/close-modal!))} "Cancel"]]])) (defn customize-shortcut-dialog [k action-name displayed-binding] diff --git a/src/main/frontend/modules/shortcut/core.cljs b/src/main/frontend/modules/shortcut/core.cljs index 7b51c6dcb12..2357d629e26 100644 --- a/src/main/frontend/modules/shortcut/core.cljs +++ b/src/main/frontend/modules/shortcut/core.cljs @@ -226,17 +226,19 @@ (assoc state ::key-record-handler handler))) :will-unmount - (fn [{:rum/keys [args local] :as state}] + (fn [{:rum/keys [args local action] :as state}] (let [k (first args) keystroke (str/trim @local)] - (when-not (empty? keystroke) - (config-handler/set-config! :shortcuts (merge - (:shortcuts (state/get-config)) - {k keystroke})))) + (when (and (= @action :save) + (not (empty? keystroke))) + (config-handler/set-config! + :shortcuts + (merge + (:shortcuts (state/get-config)) + {k keystroke})) + (js/setTimeout #(refresh!) 500))) (when-let [^js handler (::key-record-handler state)] (.dispose handler)) - (js/setTimeout #(refresh!) 500) - (dissoc state ::key-record-handler))}) From c33aa2c9f2d8576019b39dd8e2996e9c75fe72ce Mon Sep 17 00:00:00 2001 From: charlie Date: Wed, 10 May 2023 16:49:49 +0800 Subject: [PATCH 006/190] fix(shortcuts): restore all shortcuts when the shortcuts recorder closed --- src/main/frontend/modules/shortcut/core.cljs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/frontend/modules/shortcut/core.cljs b/src/main/frontend/modules/shortcut/core.cljs index 2357d629e26..cabb41b2980 100644 --- a/src/main/frontend/modules/shortcut/core.cljs +++ b/src/main/frontend/modules/shortcut/core.cljs @@ -235,10 +235,11 @@ :shortcuts (merge (:shortcuts (state/get-config)) - {k keystroke})) - (js/setTimeout #(refresh!) 500))) + {k keystroke})))) (when-let [^js handler (::key-record-handler state)] (.dispose handler)) + (js/setTimeout #(refresh!) 500) + (dissoc state ::key-record-handler))}) From 6bed0326899e7a07ad5b099150405cbdeb045d0a Mon Sep 17 00:00:00 2001 From: charlie Date: Wed, 10 May 2023 18:05:50 +0800 Subject: [PATCH 007/190] refactor: rename install-shortcut! with more semantic --- src/main/frontend/modules/shortcut/core.cljs | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/main/frontend/modules/shortcut/core.cljs b/src/main/frontend/modules/shortcut/core.cljs index cabb41b2980..a3a7bd4509f 100644 --- a/src/main/frontend/modules/shortcut/core.cljs +++ b/src/main/frontend/modules/shortcut/core.cljs @@ -84,21 +84,21 @@ (.unregisterShortcut ^js handler (util/normalize-user-keyname k)))) (shortcut-config/remove-shortcut! handler-id shortcut-id))) -(defn uninstall-shortcut! +(defn uninstall-shortcut-handler! [install-id] (when-let [handler (-> (get @*installed install-id) :handler)] (.dispose ^js handler) (swap! *installed dissoc install-id))) -(defn install-shortcut! +(defn install-shortcut-handler! [handler-id {:keys [set-global-keys? prevent-default? state] :or {set-global-keys? true prevent-default? false}}] (when-let [install-id (get-handler-by-id handler-id)] - (uninstall-shortcut! install-id)) + (uninstall-shortcut-handler! install-id)) (let [shortcut-map (dh/shortcut-map handler-id state) handler (new KeyboardShortcutHandler js/window)] @@ -136,23 +136,23 @@ :shortcut.handler/editor-global :shortcut.handler/global-non-editing-only :shortcut.handler/global-prevent-default] - (map #(install-shortcut! % {})) + (map #(install-shortcut-handler! % {})) doall)) (defn mixin [handler-id] {:did-mount (fn [state] - (let [install-id (install-shortcut! handler-id {:state state})] + (let [install-id (install-shortcut-handler! handler-id {:state state})] (assoc state ::install-id install-id))) :did-remount (fn [old-state new-state] - (uninstall-shortcut! (::install-id old-state)) - (when-let [install-id (install-shortcut! handler-id {:state new-state})] + (uninstall-shortcut-handler! (::install-id old-state)) + (when-let [install-id (install-shortcut-handler! handler-id {:state new-state})] (assoc new-state ::install-id install-id))) :will-unmount (fn [state] (when-let [install-id (::install-id state)] - (uninstall-shortcut! install-id)) + (uninstall-shortcut-handler! install-id)) state)}) (defn unlisten-all [] @@ -183,7 +183,7 @@ (state/set-state! :ui/shortcut-handler-refreshing? true) (doseq [id (keys @*installed)] - (uninstall-shortcut! id)) + (uninstall-shortcut-handler! id)) (install-shortcuts!) (state/pub-event! [:shortcut-handler-refreshed]) (state/set-state! :ui/shortcut-handler-refreshing? false))) @@ -216,7 +216,7 @@ keystroke (:rum/local state)] (doseq [id (keys @*installed)] - (uninstall-shortcut! id)) + (uninstall-shortcut-handler! id)) (events/listen handler "key" (fn [e] From 82c36b7dea992e973a400d7bd2d666d9eaebb2fe Mon Sep 17 00:00:00 2001 From: charlie Date: Thu, 11 May 2023 15:59:10 +0800 Subject: [PATCH 008/190] enhance(shortcuts): plugins shortcuts tables --- src/main/frontend/components/shortcut.cljs | 43 ++++++++++--------- src/main/frontend/components/shortcut.css | 11 +++++ .../frontend/modules/shortcut/config.cljs | 5 ++- src/main/frontend/modules/shortcut/dicts.cljc | 1 + 4 files changed, 39 insertions(+), 21 deletions(-) diff --git a/src/main/frontend/components/shortcut.cljs b/src/main/frontend/components/shortcut.cljs index d7b1c844ff9..ba39f8f50f0 100644 --- a/src/main/frontend/components/shortcut.cljs +++ b/src/main/frontend/components/shortcut.cljs @@ -72,26 +72,28 @@ (customize-shortcut-dialog k action-name displayed-binding) {:center? true})))]))) -(rum/defc shortcut-table < rum/reactive - ([name] - (shortcut-table name false)) - ([name configurable?] - (let [shortcut-config (rum/cursor-in - state/state - [:config (state/get-current-repo) :shortcuts]) - _ (rum/react shortcut-config)] - [:div - [:table - [:thead - [:tr - [:th.text-left [:b (t name)]] - [:th.text-right]]] - [:tbody - (map (fn [[k {:keys [binding]}]] - [:tr {:key (str k)} - [:td.text-left (t (dh/decorate-namespace k))] - (shortcut-col k binding configurable? (t (dh/decorate-namespace k)))]) - (dh/binding-by-category name))]]]))) +(rum/defcs shortcut-table + < rum/reactive + (rum/local true ::folded?) + [state name configurable?] + (let [*folded? (::folded? state) + _ (state/sub [:config (state/get-current-repo) :shortcuts])] + [:div.cp__shortcut-table-wrap + [:a.fold + {:on-click #(reset! *folded? (not @*folded?))} + (ui/icon (if @*folded? "chevron-left" "chevron-down"))] + [:table + [:thead + [:tr + [:th.text-left [:b (t name)]] + [:th.text-right]]] + (when-not @*folded? + [:tbody + (map (fn [[k {:keys [binding]}]] + [:tr {:key (str k)} + [:td.text-left (t (dh/decorate-namespace k))] + (shortcut-col k binding configurable? (t (dh/decorate-namespace k)))]) + (dh/binding-by-category name))])]])) (rum/defc trigger-table [] [:table @@ -187,6 +189,7 @@ (shortcut-table :shortcut.category/formatting true) (shortcut-table :shortcut.category/toggle true) (when (state/enable-whiteboards?) (shortcut-table :shortcut.category/whiteboard true)) + (shortcut-table :shortcut.category/plugins true) (shortcut-table :shortcut.category/others true)]) (rum/defc keymap-pane diff --git a/src/main/frontend/components/shortcut.css b/src/main/frontend/components/shortcut.css index 5e942abc3d3..1d6f43892e5 100644 --- a/src/main/frontend/components/shortcut.css +++ b/src/main/frontend/components/shortcut.css @@ -10,4 +10,15 @@ } } } +} + +.cp__shortcut { + &-table-wrap { + @apply relative; + + a.fold { + @apply absolute right-0 top-0 w-full pt-3 pr-3 + flex items-center justify-end select-none; + } + } } \ No newline at end of file diff --git a/src/main/frontend/modules/shortcut/config.cljs b/src/main/frontend/modules/shortcut/config.cljs index c862030e2fb..3e1681f8945 100644 --- a/src/main/frontend/modules/shortcut/config.cljs +++ b/src/main/frontend/modules/shortcut/config.cljs @@ -926,7 +926,10 @@ :dev/show-block-ast :dev/show-page-data :dev/show-page-ast - :ui/clear-all-notifications]}) + :ui/clear-all-notifications] + + :shortcut.category/plugins + []}) (let [category-maps {::category (set (keys category*)) ::dicts/category (set (keys dicts/category))}] diff --git a/src/main/frontend/modules/shortcut/dicts.cljc b/src/main/frontend/modules/shortcut/dicts.cljc index 5ebbd485862..ca57400f683 100644 --- a/src/main/frontend/modules/shortcut/dicts.cljc +++ b/src/main/frontend/modules/shortcut/dicts.cljc @@ -171,6 +171,7 @@ :shortcut.category/block-selection "Block selection (press Esc to quit selection)" :shortcut.category/toggle "Toggle" :shortcut.category/whiteboard "Whiteboard" + :shortcut.category/plugins "Plugins" :shortcut.category/others "Others"}) (def ^:large-vars/data-var dicts From b791a9ce749a0525d386759358d4f7788bd8fd8f Mon Sep 17 00:00:00 2001 From: charlie Date: Thu, 11 May 2023 16:08:27 +0800 Subject: [PATCH 009/190] enhance(ui): active state for shortcut table fold marker --- src/main/frontend/components/shortcut.css | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/frontend/components/shortcut.css b/src/main/frontend/components/shortcut.css index 1d6f43892e5..599a63af5b0 100644 --- a/src/main/frontend/components/shortcut.css +++ b/src/main/frontend/components/shortcut.css @@ -19,6 +19,10 @@ a.fold { @apply absolute right-0 top-0 w-full pt-3 pr-3 flex items-center justify-end select-none; + + &:active { + @apply bg-white/50 opacity-60; + } } } } \ No newline at end of file From be94f6886ac2702ec55e42f25baf3cbfd485620c Mon Sep 17 00:00:00 2001 From: charlie Date: Mon, 15 May 2023 10:13:45 +0800 Subject: [PATCH 010/190] enhance(shortcuts): list plugins shortcuts in keymaps manage pane --- src/main/frontend/components/shortcut.cljs | 22 +++++++++++++------ .../modules/shortcut/data_helper.cljs | 15 ++++++++----- 2 files changed, 24 insertions(+), 13 deletions(-) diff --git a/src/main/frontend/components/shortcut.cljs b/src/main/frontend/components/shortcut.cljs index ba39f8f50f0..ca12d8b8229 100644 --- a/src/main/frontend/components/shortcut.cljs +++ b/src/main/frontend/components/shortcut.cljs @@ -52,7 +52,7 @@ (fn [_] (customize-shortcut-dialog-inner k action-name displayed-binding))) -(rum/defc shortcut-col [k binding configurable? action-name] +(rum/defc shortcut-col [_category k binding configurable? action-name] (let [conflict? (dh/potential-conflict? k) displayed-binding (dh/binding-for-display k binding) disabled? (str/includes? displayed-binding "system default")] @@ -75,8 +75,16 @@ (rum/defcs shortcut-table < rum/reactive (rum/local true ::folded?) - [state name configurable?] + {:will-mount (fn [state] + (let [name (first (:rum/args state))] + (cond-> state + (contains? #{:shortcut.category/basics + :shortcut.category/plugins} + name) + (-> ::folded? (reset! false) (do state)))))} + [state category configurable?] (let [*folded? (::folded? state) + plugin? (= category :shortcut.category/plugins) _ (state/sub [:config (state/get-current-repo) :shortcuts])] [:div.cp__shortcut-table-wrap [:a.fold @@ -85,15 +93,15 @@ [:table [:thead [:tr - [:th.text-left [:b (t name)]] + [:th.text-left [:b (t category)]] [:th.text-right]]] (when-not @*folded? [:tbody (map (fn [[k {:keys [binding]}]] [:tr {:key (str k)} - [:td.text-left (t (dh/decorate-namespace k))] - (shortcut-col k binding configurable? (t (dh/decorate-namespace k)))]) - (dh/binding-by-category name))])]])) + [:td.text-left (str (cond-> k (not plugin?) (-> (dh/decorate-namespace) (t))))] + (shortcut-col category k binding configurable? (t (dh/decorate-namespace k)))]) + (dh/binding-by-category category))])]])) (rum/defc trigger-table [] [:table @@ -181,6 +189,7 @@ (rum/defc keymap-tables [] [:div.cp__keymap-tables + (shortcut-table :shortcut.category/plugins true) (shortcut-table :shortcut.category/basics true) (shortcut-table :shortcut.category/navigating true) (shortcut-table :shortcut.category/block-editing true) @@ -189,7 +198,6 @@ (shortcut-table :shortcut.category/formatting true) (shortcut-table :shortcut.category/toggle true) (when (state/enable-whiteboards?) (shortcut-table :shortcut.category/whiteboard true)) - (shortcut-table :shortcut.category/plugins true) (shortcut-table :shortcut.category/others true)]) (rum/defc keymap-pane diff --git a/src/main/frontend/modules/shortcut/data_helper.cljs b/src/main/frontend/modules/shortcut/data_helper.cljs index 511e2aee257..c5377aeddc9 100644 --- a/src/main/frontend/modules/shortcut/data_helper.cljs +++ b/src/main/frontend/modules/shortcut/data_helper.cljs @@ -54,12 +54,15 @@ ;; returns a vector to preserve order (defn binding-by-category [name] - (let [dict (->> (vals @shortcut-config/config) - (apply merge) - (map (fn [[k _]] - {k {:binding (shortcut-binding k)}})) - (into {}))] - (->> (shortcut-config/category name) + (let [dict (->> (vals @shortcut-config/config) + (apply merge) + (map (fn [[k _]] + {k {:binding (shortcut-binding k)}})) + (into {})) + plugin? (= name :shortcut.category/plugins)] + (->> (if plugin? + (->> (keys dict) (filter #(str/starts-with? (str %) ":plugin."))) + (shortcut-config/category name)) (mapv (fn [k] [k (k dict)]))))) (defn shortcut-map From 7d5f4e62c10d51faabd71312a8faf0e3a113062d Mon Sep 17 00:00:00 2001 From: charlie Date: Mon, 15 May 2023 11:32:47 +0800 Subject: [PATCH 011/190] enhance(shortcuts): expose shortcut cmd map from the pallette cmd to display more information for plugin shortcut col --- src/main/frontend/components/shortcut.cljs | 14 +++++++++++--- src/main/frontend/modules/shortcut/config.cljs | 8 ++++++-- .../frontend/modules/shortcut/data_helper.cljs | 4 ++++ src/main/logseq/api.cljs | 2 +- 4 files changed, 22 insertions(+), 6 deletions(-) diff --git a/src/main/frontend/components/shortcut.cljs b/src/main/frontend/components/shortcut.cljs index ca12d8b8229..b6b774508a8 100644 --- a/src/main/frontend/components/shortcut.cljs +++ b/src/main/frontend/components/shortcut.cljs @@ -98,9 +98,17 @@ (when-not @*folded? [:tbody (map (fn [[k {:keys [binding]}]] - [:tr {:key (str k)} - [:td.text-left (str (cond-> k (not plugin?) (-> (dh/decorate-namespace) (t))))] - (shortcut-col category k binding configurable? (t (dh/decorate-namespace k)))]) + (let [cmd (dh/shortcut-cmd k)] + [:tr {:key (str k)} + [:td.text-left (cond + (string? (:desc cmd)) + [:span.flex.items-center + [:code.text-xs (namespace k)] + [:small.pl-1 (:desc cmd)]] + + (not plugin?) (-> k (dh/decorate-namespace) (t)) + :else (str k))] + (shortcut-col category k binding configurable? (t (dh/decorate-namespace k)))])) (dh/binding-by-category category))])]])) (rum/defc trigger-table [] diff --git a/src/main/frontend/modules/shortcut/config.cljs b/src/main/frontend/modules/shortcut/config.cljs index 3e1681f8945..d59badb578a 100644 --- a/src/main/frontend/modules/shortcut/config.cljs +++ b/src/main/frontend/modules/shortcut/config.cljs @@ -944,10 +944,14 @@ (fn [v] (vec (remove #(:inactive (get all-default-keyboard-shortcuts %)) v))))) +(def *shortcut-cmds (atom {})) + (defn add-shortcut! [handler-id id shortcut-map] - (swap! config assoc-in [handler-id id] shortcut-map)) + (swap! config assoc-in [handler-id id] shortcut-map) + (swap! *shortcut-cmds assoc id (:cmd shortcut-map))) (defn remove-shortcut! [handler-id id] - (swap! config medley/dissoc-in [handler-id id])) + (swap! config medley/dissoc-in [handler-id id]) + (swap! *shortcut-cmds dissoc id)) diff --git a/src/main/frontend/modules/shortcut/data_helper.cljs b/src/main/frontend/modules/shortcut/data_helper.cljs index c5377aeddc9..8acff61041e 100644 --- a/src/main/frontend/modules/shortcut/data_helper.cljs +++ b/src/main/frontend/modules/shortcut/data_helper.cljs @@ -52,6 +52,10 @@ shortcut) (mapv mod-key))))) +(defn shortcut-cmd + [id] + (get @shortcut-config/*shortcut-cmds id)) + ;; returns a vector to preserve order (defn binding-by-category [name] (let [dict (->> (vals @shortcut-config/config) diff --git a/src/main/logseq/api.cljs b/src/main/logseq/api.cljs index 7a559eead37..73c824a0b96 100644 --- a/src/main/logseq/api.cljs +++ b/src/main/logseq/api.cljs @@ -367,7 +367,7 @@ (if palette? (palette-handler/invoke-command palette-cmd) (action'))) - [handler-id id shortcut-map] (update shortcut-args 2 assoc :fn dispatch-cmd)] + [handler-id id shortcut-map] (update shortcut-args 2 assoc :fn dispatch-cmd :cmd palette-cmd)] (println :shortcut/register-shortcut [handler-id id shortcut-map]) (st/register-shortcut! handler-id id shortcut-map))))))) From a686517b174fc4ef400f24ae1d11243a2fd1fa2b Mon Sep 17 00:00:00 2001 From: charlie Date: Mon, 15 May 2023 16:50:49 +0800 Subject: [PATCH 012/190] fix(shortcuts): action name of the custom editing shortcut for plugin shortcuts --- src/main/frontend/components/shortcut.cljs | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/main/frontend/components/shortcut.cljs b/src/main/frontend/components/shortcut.cljs index b6b774508a8..4c11aad0a95 100644 --- a/src/main/frontend/components/shortcut.cljs +++ b/src/main/frontend/components/shortcut.cljs @@ -98,17 +98,18 @@ (when-not @*folded? [:tbody (map (fn [[k {:keys [binding]}]] - (let [cmd (dh/shortcut-cmd k)] + (let [cmd (dh/shortcut-cmd k) + label (cond + (string? (:desc cmd)) + [:<> + [:code.text-xs (namespace k)] + [:small.pl-1 (:desc cmd)]] + + (not plugin?) (-> k (dh/decorate-namespace) (t)) + :else (str k))] [:tr {:key (str k)} - [:td.text-left (cond - (string? (:desc cmd)) - [:span.flex.items-center - [:code.text-xs (namespace k)] - [:small.pl-1 (:desc cmd)]] - - (not plugin?) (-> k (dh/decorate-namespace) (t)) - :else (str k))] - (shortcut-col category k binding configurable? (t (dh/decorate-namespace k)))])) + [:td.text-left.flex.items-center label] + (shortcut-col category k binding configurable? label)])) (dh/binding-by-category category))])]])) (rum/defc trigger-table [] From 978ea0faa1d2cebc137b47880bbedd5c136f32be Mon Sep 17 00:00:00 2001 From: MrWillCom Date: Tue, 12 Apr 2022 20:08:35 +0800 Subject: [PATCH 013/190] Hide window frame and move header down for Win32 --- resources/css/common.css | 1 + src/electron/electron/window.cljs | 2 +- src/main/frontend/components/header.css | 9 +++++---- src/main/frontend/components/win32_title_bar.cljs | 8 ++++++++ src/main/frontend/components/win32_title_bar.css | 3 +++ 5 files changed, 18 insertions(+), 5 deletions(-) create mode 100644 src/main/frontend/components/win32_title_bar.cljs create mode 100644 src/main/frontend/components/win32_title_bar.css diff --git a/resources/css/common.css b/resources/css/common.css index bf5103e4db3..9c52bdedc81 100644 --- a/resources/css/common.css +++ b/resources/css/common.css @@ -19,6 +19,7 @@ --ls-warning-color: var(--color-orange-500); --ls-success-color: var(--color-green-500); --ls-highlight-color-default: var(--ls-secondary-background-color); + --ls-win32-title-bar-height: 0px; } @media (prefers-color-scheme: dark) { diff --git a/src/electron/electron/window.cljs b/src/electron/electron/window.cljs index 2e0f8c5c4d6..bf659498a94 100644 --- a/src/electron/electron/window.cljs +++ b/src/electron/electron/window.cljs @@ -29,7 +29,7 @@ win-opts (cond-> {:width (.-width win-state) :height (.-height win-state) - :frame true + :frame (not win32?) :titleBarStyle "hiddenInset" :trafficLightPosition {:x 16 :y 16} :autoHideMenuBar (not mac?) diff --git a/src/main/frontend/components/header.css b/src/main/frontend/components/header.css index 17a3640bdcc..3792ff28fb2 100644 --- a/src/main/frontend/components/header.css +++ b/src/main/frontend/components/header.css @@ -1,8 +1,9 @@ .cp__header { - @apply z-10; - - padding-top: var(--ls-headbar-inner-top-padding); - height: calc(var(--ls-headbar-height) + var(--ls-headbar-inner-top-padding)); + @apply shadow z-10; + -webkit-app-region: drag; + + padding-top: calc(var(--ls-headbar-inner-top-padding) + var(--ls-win32-title-bar-height)); + height: calc(var(--ls-headbar-height) + var(--ls-headbar-inner-top-padding) + var(--ls-win32-title-bar-height)); display: flex; align-items: center; justify-content: space-between; diff --git a/src/main/frontend/components/win32_title_bar.cljs b/src/main/frontend/components/win32_title_bar.cljs new file mode 100644 index 00000000000..c9562539a82 --- /dev/null +++ b/src/main/frontend/components/win32_title_bar.cljs @@ -0,0 +1,8 @@ +(ns frontend.components.win32-title-bar + (:require [rum.core :as rum])) + +(rum/defc container + [] + [:p + {} + ["Hello, World!"]]) diff --git a/src/main/frontend/components/win32_title_bar.css b/src/main/frontend/components/win32_title_bar.css new file mode 100644 index 00000000000..de0665a1925 --- /dev/null +++ b/src/main/frontend/components/win32_title_bar.css @@ -0,0 +1,3 @@ +.is-win32.is-electron { + --ls-win32-title-bar-height: 30px; +} From 48de4a5571d837eae1da3c18cb051e996efa2b5c Mon Sep 17 00:00:00 2001 From: MrWillCom Date: Tue, 12 Apr 2022 20:43:35 +0800 Subject: [PATCH 014/190] Add app icon to title bar --- .../frontend/components/win32_title_bar.cljs | 9 ++++++--- .../frontend/components/win32_title_bar.css | 20 ++++++++++++++++++- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/src/main/frontend/components/win32_title_bar.cljs b/src/main/frontend/components/win32_title_bar.cljs index c9562539a82..fcd234bf0c8 100644 --- a/src/main/frontend/components/win32_title_bar.cljs +++ b/src/main/frontend/components/win32_title_bar.cljs @@ -1,8 +1,11 @@ (ns frontend.components.win32-title-bar - (:require [rum.core :as rum])) + (:require [rum.core :as rum] + [frontend.components.svg :as svg])) (rum/defc container [] - [:p + [:div.cp__win32-title-bar#win32-title-bar {} - ["Hello, World!"]]) + [:div.logo + {} + (svg/logo)]]) diff --git a/src/main/frontend/components/win32_title_bar.css b/src/main/frontend/components/win32_title_bar.css index de0665a1925..de08d8e1f14 100644 --- a/src/main/frontend/components/win32_title_bar.css +++ b/src/main/frontend/components/win32_title_bar.css @@ -1,3 +1,21 @@ +.cp__win32-title-bar { + z-index: 100; + position: fixed; + left: 0; + right: 0; + top: 0; + height: var(--ls-win32-title-bar-height); + display: flex; + + > .logo { + width: 50px; + height: var(--ls-win32-title-bar-height); + display: flex; + align-items: flex-end; + justify-content: center; + } +} + .is-win32.is-electron { - --ls-win32-title-bar-height: 30px; + --ls-win32-title-bar-height: 36px; } From ecda94a3944e21c1c77cbbddd1ccd5d7200bdb31 Mon Sep 17 00:00:00 2001 From: MrWillCom Date: Tue, 12 Apr 2022 21:57:37 +0800 Subject: [PATCH 015/190] Add window title to title bar --- .../frontend/components/win32_title_bar.cljs | 12 ++++++++++-- .../frontend/components/win32_title_bar.css | 19 +++++++++++++++---- 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/src/main/frontend/components/win32_title_bar.cljs b/src/main/frontend/components/win32_title_bar.cljs index fcd234bf0c8..7777f3b82cf 100644 --- a/src/main/frontend/components/win32_title_bar.cljs +++ b/src/main/frontend/components/win32_title_bar.cljs @@ -6,6 +6,14 @@ [] [:div.cp__win32-title-bar#win32-title-bar {} - [:div.logo + [:div.left-side {} - (svg/logo)]]) + [:div.logo + {} + (svg/logo)] + [:div.title + {} + "Logseq"]] + [:div.right-side + {} + []]]) diff --git a/src/main/frontend/components/win32_title_bar.css b/src/main/frontend/components/win32_title_bar.css index de08d8e1f14..22ab879f011 100644 --- a/src/main/frontend/components/win32_title_bar.css +++ b/src/main/frontend/components/win32_title_bar.css @@ -6,13 +6,24 @@ top: 0; height: var(--ls-win32-title-bar-height); display: flex; + justify-content: space-between; + user-select: none; - > .logo { - width: 50px; - height: var(--ls-win32-title-bar-height); + > .left-side { display: flex; align-items: flex-end; - justify-content: center; + + > .logo { + width: 50px; + height: var(--ls-win32-title-bar-height); + display: flex; + align-items: flex-end; + justify-content: center; + } + + > .title { + font-size: 12px; + } } } From 355e7c1d3e6290e51b284442bbd938372657ca08 Mon Sep 17 00:00:00 2001 From: MrWillCom Date: Tue, 12 Apr 2022 23:07:08 +0800 Subject: [PATCH 016/190] Add traffic lights to title bar --- src/main/frontend/components/header.css | 5 ++-- .../frontend/components/win32_title_bar.cljs | 4 ++- .../frontend/components/win32_title_bar.css | 30 ++++++++++++++++++- 3 files changed, 35 insertions(+), 4 deletions(-) diff --git a/src/main/frontend/components/header.css b/src/main/frontend/components/header.css index 3792ff28fb2..5507cd5a802 100644 --- a/src/main/frontend/components/header.css +++ b/src/main/frontend/components/header.css @@ -2,8 +2,9 @@ @apply shadow z-10; -webkit-app-region: drag; - padding-top: calc(var(--ls-headbar-inner-top-padding) + var(--ls-win32-title-bar-height)); - height: calc(var(--ls-headbar-height) + var(--ls-headbar-inner-top-padding) + var(--ls-win32-title-bar-height)); + padding-top: calc(var(--ls-headbar-inner-top-padding)); + margin-top: var(--ls-win32-title-bar-height); + height: calc(var(--ls-headbar-height) + var(--ls-headbar-inner-top-padding)); display: flex; align-items: center; justify-content: space-between; diff --git a/src/main/frontend/components/win32_title_bar.cljs b/src/main/frontend/components/win32_title_bar.cljs index 7777f3b82cf..31238b381ee 100644 --- a/src/main/frontend/components/win32_title_bar.cljs +++ b/src/main/frontend/components/win32_title_bar.cljs @@ -16,4 +16,6 @@ "Logseq"]] [:div.right-side {} - []]]) + [:div.minimize] + [:div.max-restore] + [:div.close]]]) diff --git a/src/main/frontend/components/win32_title_bar.css b/src/main/frontend/components/win32_title_bar.css index 22ab879f011..884bbf1b954 100644 --- a/src/main/frontend/components/win32_title_bar.css +++ b/src/main/frontend/components/win32_title_bar.css @@ -8,6 +8,7 @@ display: flex; justify-content: space-between; user-select: none; + -webkit-app-region: drag; > .left-side { display: flex; @@ -15,7 +16,6 @@ > .logo { width: 50px; - height: var(--ls-win32-title-bar-height); display: flex; align-items: flex-end; justify-content: center; @@ -25,6 +25,34 @@ font-size: 12px; } } + + > .right-side { + display: flex; + width: 138px; + -webkit-app-region: no-drag; + + > * { + width: 100%; + + &:hover { + background: var(--ls-tertiary-background-color); + } + + &:active { + background: var(--ls-secondary-background-color); + } + } + + > .close { + &:hover { + background: #c42b1c; + } + + &:active { + background: #b3271c; + } + } + } } .is-win32.is-electron { From 33224e36dbe8dd3378815860a7a841135c5b9097 Mon Sep 17 00:00:00 2001 From: MrWillCom Date: Wed, 13 Apr 2022 08:40:31 +0800 Subject: [PATCH 017/190] Add icons to traffic lights for title bar --- src/main/frontend/components/svg.cljs | 27 +++++++++++++++++++ .../frontend/components/win32_title_bar.cljs | 12 ++++++--- .../frontend/components/win32_title_bar.css | 5 ++++ 3 files changed, 41 insertions(+), 3 deletions(-) diff --git a/src/main/frontend/components/svg.cljs b/src/main/frontend/components/svg.cljs index 7b5c145a5d7..fd0c79c0181 100644 --- a/src/main/frontend/components/svg.cljs +++ b/src/main/frontend/components/svg.cljs @@ -386,3 +386,30 @@ [:path {:d "M256 0C114.6 0 0 114.6 0 256c0 141.4 114.6 256 256 256s256-114.6 256-256C512 114.6 397.4 0 256 0zM352 328c0 13.2-10.8 24-24 24h-144C170.8 352 160 341.2 160 328v-144C160 170.8 170.8 160 184 160h144C341.2 160 352 170.8 352 184V328z"}]]) + +;; the icons for Win32 title bar, from: +;; https://github.com/microsoft/vscode-codicons +(defn chrome-minimize + ([] (chrome-minimize 16)) + ([size] + [:svg.icon {:width size :height size :viewBox "0 0 16 16" :fill "currentColor"} + [:path {:d "M14 8v1H3V8h11z"}]])) + +(defn chrome-maximize + ([] (chrome-maximize 16)) + ([size] + [:svg.icon {:width size :height size :viewBox "0 0 16 16" :fill "currentColor"} + [:path {:d "M3 3v10h10V3H3zm9 9H4V4h8v8z"}]])) + +(defn chrome-restore + ([] (chrome-restore 16)) + ([size] + [:svg.icon {:width size :height size :viewBox "0 0 16 16" :fill "currentColor"} + [:path {:d "M3 5v9h9V5H3zm8 8H4V6h7v7z"}] + [:path {:fill-rule "evenodd" :clip-rule "evenodd" :d "M5 5h1V4h7v7h-1v1h2V3H5v2z"}]])) + +(defn chrome-close + ([] (chrome-close 16)) + ([size] + [:svg.icon {:width size :height size :viewBox "0 0 16 16" :fill "currentColor"} + [:path {:fill-rule "evenodd" :clip-rule "evenodd" :d "M7.116 8l-4.558 4.558.884.884L8 8.884l4.558 4.558.884-.884L8.884 8l4.558-4.558-.884-.884L8 7.116 3.442 2.558l-.884.884L7.116 8z"}]])) diff --git a/src/main/frontend/components/win32_title_bar.cljs b/src/main/frontend/components/win32_title_bar.cljs index 31238b381ee..36a113aaa58 100644 --- a/src/main/frontend/components/win32_title_bar.cljs +++ b/src/main/frontend/components/win32_title_bar.cljs @@ -16,6 +16,12 @@ "Logseq"]] [:div.right-side {} - [:div.minimize] - [:div.max-restore] - [:div.close]]]) + [:div.minimize + {} + (svg/chrome-minimize)] + [:div.max-restore + {} + (svg/chrome-maximize)] + [:div.close + {} + (svg/chrome-close)]]]) diff --git a/src/main/frontend/components/win32_title_bar.css b/src/main/frontend/components/win32_title_bar.css index 884bbf1b954..63a4154b5ab 100644 --- a/src/main/frontend/components/win32_title_bar.css +++ b/src/main/frontend/components/win32_title_bar.css @@ -33,6 +33,9 @@ > * { width: 100%; + display: flex; + justify-content: center; + align-items: center; &:hover { background: var(--ls-tertiary-background-color); @@ -45,10 +48,12 @@ > .close { &:hover { + color: #fff; background: #c42b1c; } &:active { + color: #fff; background: #b3271c; } } From 151fc24e81a70e3dd82b48ed1dc06b1aa063b47a Mon Sep 17 00:00:00 2001 From: MrWillCom Date: Wed, 13 Apr 2022 22:47:40 +0800 Subject: [PATCH 018/190] Update traffic lights to get window state from state (WIP) --- .../frontend/components/win32_title_bar.cljs | 25 +++++++++++++++---- .../frontend/components/win32_title_bar.css | 3 ++- src/main/frontend/state.cljs | 4 +++ 3 files changed, 26 insertions(+), 6 deletions(-) diff --git a/src/main/frontend/components/win32_title_bar.cljs b/src/main/frontend/components/win32_title_bar.cljs index 36a113aaa58..7591e2d915d 100644 --- a/src/main/frontend/components/win32_title_bar.cljs +++ b/src/main/frontend/components/win32_title_bar.cljs @@ -1,6 +1,7 @@ (ns frontend.components.win32-title-bar (:require [rum.core :as rum] - [frontend.components.svg :as svg])) + [frontend.components.svg :as svg] + [frontend.state :as state])) (rum/defc container [] @@ -17,11 +18,25 @@ [:div.right-side {} [:div.minimize - {} + {:on-click ()} (svg/chrome-minimize)] [:div.max-restore - {} - (svg/chrome-maximize)] + {:on-click ()} + (if (state/sub :win32-title-bar/window-is-maximized?) + (svg/chrome-restore) + (svg/chrome-maximize))] [:div.close - {} + {:on-click ()} (svg/chrome-close)]]]) + +(defn minimize + [] + ()) + +(defn max-restore + [] + ()) + +(defn close + [] + ()) diff --git a/src/main/frontend/components/win32_title_bar.css b/src/main/frontend/components/win32_title_bar.css index 63a4154b5ab..3354aa337fc 100644 --- a/src/main/frontend/components/win32_title_bar.css +++ b/src/main/frontend/components/win32_title_bar.css @@ -1,5 +1,5 @@ .cp__win32-title-bar { - z-index: 100; + z-index: var(--ls-z-index-level-5); position: fixed; left: 0; right: 0; @@ -32,6 +32,7 @@ -webkit-app-region: no-drag; > * { + color: var(--ls-link-text-color); width: 100%; display: flex; justify-content: center; diff --git a/src/main/frontend/state.cljs b/src/main/frontend/state.cljs index ef059673343..0e09f494ddb 100644 --- a/src/main/frontend/state.cljs +++ b/src/main/frontend/state.cljs @@ -278,6 +278,10 @@ :whiteboard/last-persisted-at {} :whiteboard/pending-tx-data {} :history/page-only-mode? false + + ;; win32 title bar + ;; TODO: get window info from ipc + :win32-title-bar/window-is-maximized? false ;; db tx-id -> editor cursor :history/tx->editor-cursor {}}))) From ff13060a04a8262f11c966071d839000fca46d94 Mon Sep 17 00:00:00 2001 From: MrWillCom Date: Thu, 14 Apr 2022 08:05:16 +0800 Subject: [PATCH 019/190] Fix traffic lights icon color --- src/main/frontend/components/win32_title_bar.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/frontend/components/win32_title_bar.css b/src/main/frontend/components/win32_title_bar.css index 3354aa337fc..725c28774ee 100644 --- a/src/main/frontend/components/win32_title_bar.css +++ b/src/main/frontend/components/win32_title_bar.css @@ -32,7 +32,7 @@ -webkit-app-region: no-drag; > * { - color: var(--ls-link-text-color); + color: var(--ls-primary-text-color); width: 100%; display: flex; justify-content: center; From 425dc801b73daa17deb86a2086f537192d4c233a Mon Sep 17 00:00:00 2001 From: Aitor Gamarra Date: Tue, 16 May 2023 18:41:42 +0200 Subject: [PATCH 020/190] Add support for win32 custom titleBar --- src/electron/electron/handler.cljs | 11 +++ src/electron/electron/window.cljs | 4 +- src/main/frontend/components/container.cljs | 18 +++-- src/main/frontend/components/container.css | 1 + src/main/frontend/components/header.cljs | 2 +- .../frontend/components/win32_title_bar.cljs | 70 +++++++++++-------- .../frontend/components/win32_title_bar.css | 46 ++++++++---- src/main/frontend/dicts.cljc | 8 +++ src/main/frontend/handler/route.cljs | 13 +++- src/main/frontend/state.cljs | 2 +- src/main/frontend/ui.cljs | 4 +- 11 files changed, 125 insertions(+), 54 deletions(-) diff --git a/src/electron/electron/handler.cljs b/src/electron/electron/handler.cljs index 4f40cfd7edf..fbcc1139305 100644 --- a/src/electron/electron/handler.cljs +++ b/src/electron/electron/handler.cljs @@ -629,6 +629,17 @@ (when-let [web-content (.-webContents win)] (.reload web-content))) +(defmethod handle :window-minimize [^js win] + (.minimize win)) + +(defmethod handle :window-maximize-restore [^js win] + (if (.isMaximized win) + (.unmaximize win) + (.maximize win))) + +(defmethod handle :window-close [^js win] + (.close win)) + ;;;;;;;;;;;;;;;;;;;;;;; ;; file-sync-rs-apis ;; ;;;;;;;;;;;;;;;;;;;;;;; diff --git a/src/electron/electron/window.cljs b/src/electron/electron/window.cljs index bf659498a94..b32853541c0 100644 --- a/src/electron/electron/window.cljs +++ b/src/electron/electron/window.cljs @@ -187,7 +187,9 @@ (doto win (.on "enter-full-screen" #(.send web-contents "full-screen" "enter")) - (.on "leave-full-screen" #(.send web-contents "full-screen" "leave"))) + (.on "leave-full-screen" #(.send web-contents "full-screen" "leave")) + (.on "maximize" #(if win32? (.send web-contents "maximize" true) ())) + (.on "unmaximize" #(if win32? (.send web-contents "maximize" false) ()))) ;; clear (fn [] diff --git a/src/main/frontend/components/container.cljs b/src/main/frontend/components/container.cljs index d030a80b6d3..caf175f0cc3 100644 --- a/src/main/frontend/components/container.cljs +++ b/src/main/frontend/components/container.cljs @@ -12,6 +12,7 @@ [frontend.components.svg :as svg] [frontend.components.theme :as theme] [frontend.components.widgets :as widgets] + [frontend.components.win32-title-bar :as win32-title-bar] [frontend.config :as config] [frontend.context.i18n :refer [t]] [frontend.db :as db] @@ -33,14 +34,14 @@ [frontend.modules.shortcut.data-helper :as shortcut-dh] [frontend.state :as state] [frontend.ui :as ui] - [frontend.util :as util] + [frontend.util :as util :refer [win32?]] [frontend.util.cursor :as cursor] [goog.dom :as gdom] [goog.object :as gobj] + [logseq.common.path :as path] [react-draggable] [reitit.frontend.easy :as rfe] - [rum.core :as rum] - [logseq.common.path :as path])) + [rum.core :as rum])) (rum/defc nav-content-item < rum/reactive [name {:keys [class]} child] @@ -284,8 +285,8 @@ (when (< touching-x-offset 0) (max touching-x-offset (- 0 (:width el-rect)))))) offset-ratio (and (number? touching-x-offset) - (some->> (:width el-rect) - (/ touching-x-offset)))] + (some->> (:width el-rect) + (/ touching-x-offset)))] (rum/use-effect! #(js/setTimeout @@ -725,6 +726,7 @@ onboarding-state (state/sub :file-sync/onboarding-state) right-sidebar-blocks (state/sub-right-sidebar-blocks) route-name (get-in route-match [:data :name]) + fullscreen? (state/sub :win32-title-bar/window-is-fullscreen?) margin-less-pages? (boolean (#{:graph :whiteboard} route-name)) db-restoring? (state/sub :db/restoring?) indexeddb-support? (state/sub :indexeddb/support?) @@ -771,6 +773,12 @@ [:div.#app-container [:div#left-container {:class (if (state/sub :ui/sidebar-open?) "overflow-hidden" "w-full")} + + (if win32? + (if fullscreen? + () + (win32-title-bar/container)) ()) + (header/header {:open-fn open-fn :light? light? :current-repo current-repo diff --git a/src/main/frontend/components/container.css b/src/main/frontend/components/container.css index 6f8c4385477..44ec0c24a1a 100644 --- a/src/main/frontend/components/container.css +++ b/src/main/frontend/components/container.css @@ -93,6 +93,7 @@ height: calc(100vh - var(--ls-headbar-inner-top-padding) - 50px); margin-top: 30px; width: 100%; + padding-top: var(--ls-win32-title-bar-height); > .fake-bar { @apply w-full px-5 pt-1 sm:hidden; diff --git a/src/main/frontend/components/header.cljs b/src/main/frontend/components/header.cljs index 4bf901d3da0..9aedd9d2084 100644 --- a/src/main/frontend/components/header.cljs +++ b/src/main/frontend/components/header.cljs @@ -29,7 +29,7 @@ [] (ui/with-shortcut :go/home "left" [:button.button.icon.inline - {:title "Home" + {:title (t :home) :on-click #(do (when (mobile-util/native-iphone?) (state/set-left-sidebar-open! false)) diff --git a/src/main/frontend/components/win32_title_bar.cljs b/src/main/frontend/components/win32_title_bar.cljs index 7591e2d915d..67a99ea2148 100644 --- a/src/main/frontend/components/win32_title_bar.cljs +++ b/src/main/frontend/components/win32_title_bar.cljs @@ -1,42 +1,50 @@ (ns frontend.components.win32-title-bar - (:require [rum.core :as rum] + (:require [electron.ipc :as ipc] [frontend.components.svg :as svg] - [frontend.state :as state])) - -(rum/defc container - [] - [:div.cp__win32-title-bar#win32-title-bar - {} - [:div.left-side - {} - [:div.logo - {} - (svg/logo)] - [:div.title - {} - "Logseq"]] - [:div.right-side - {} - [:div.minimize - {:on-click ()} - (svg/chrome-minimize)] - [:div.max-restore - {:on-click ()} - (if (state/sub :win32-title-bar/window-is-maximized?) - (svg/chrome-restore) - (svg/chrome-maximize))] - [:div.close - {:on-click ()} - (svg/chrome-close)]]]) + [frontend.state :as state] + [goog.string :as gstring] + [rum.core :as rum])) (defn minimize [] - ()) + (ipc/ipc "window-minimize")) (defn max-restore [] - ()) + (ipc/ipc "window-maximize-restore")) (defn close [] - ()) + (ipc/ipc "window-close")) + +(rum/defc container < rum/reactive + [] + (let [maximized? (state/sub :win32-title-bar/window-is-maximized?)] + [:div.cp__win32-title-bar#win32-title-bar + {} + [:div.left-side + {} + [:div.logo + {} + (svg/logo)]] + [:div.middle + {} + [:span#win32-title-bar-page-title + {} + (.-title js/document)] + [:span#win32-title-bar-logseq-text + {} + (gstring/unescapeEntities " ") "-" (gstring/unescapeEntities " ") "Logseq"]] + [:div.right-side + {} + [:div.minimize + {:on-click minimize} + (svg/chrome-minimize)] + [:div.max-restore + {:on-click max-restore} + (if maximized? + (svg/chrome-restore) + (svg/chrome-maximize))] + [:div.close + {:on-click close} + (svg/chrome-close)]]])) diff --git a/src/main/frontend/components/win32_title_bar.css b/src/main/frontend/components/win32_title_bar.css index 725c28774ee..a0befbb33c3 100644 --- a/src/main/frontend/components/win32_title_bar.css +++ b/src/main/frontend/components/win32_title_bar.css @@ -1,37 +1,57 @@ -.cp__win32-title-bar { +.cp__win32-title-bar:not(:fullscreen) { z-index: var(--ls-z-index-level-5); position: fixed; left: 0; right: 0; top: 0; height: var(--ls-win32-title-bar-height); + background-color: var(--ls-secondary-background-color); display: flex; justify-content: space-between; user-select: none; -webkit-app-region: drag; - > .left-side { + >.left-side { display: flex; - align-items: flex-end; + align-items: center; + margin-left: 0.5rem; + margin-right: 0.5rem; + width: 28px; - > .logo { - width: 50px; + >.logo { + width: 24px; display: flex; - align-items: flex-end; + align-items: center; justify-content: center; + padding-left: 4px; } + } + + >.middle { + display: flex; + align-items: center; + flex-wrap: nowrap; + overflow: hidden; - > .title { - font-size: 12px; + >span#win32-title-bar-page-title { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + min-width: 0; + } + + >span#win32-title-bar-logseq-text { + flex-shrink: 0; + flex-wrap: nowrap; } } - > .right-side { + >.right-side { display: flex; width: 138px; -webkit-app-region: no-drag; - > * { + >* { color: var(--ls-primary-text-color); width: 100%; display: flex; @@ -47,7 +67,7 @@ } } - > .close { + >.close { &:hover { color: #fff; background: #c42b1c; @@ -61,6 +81,6 @@ } } -.is-win32.is-electron { +.is-win32.is-electron:not(.is-fullscreen) { --ls-win32-title-bar-height: 36px; -} +} \ No newline at end of file diff --git a/src/main/frontend/dicts.cljc b/src/main/frontend/dicts.cljc index c20e2028970..69ccad0bcee 100644 --- a/src/main/frontend/dicts.cljc +++ b/src/main/frontend/dicts.cljc @@ -256,7 +256,11 @@ :whiteboard/link-whiteboard-or-block "Link whiteboard/page/block" :page-search "Search in the current page" :graph-search "Search graph" + :home "Home" + :page "Page" :new-page "New page" + :whiteboard "Whiteboard" + :whiteboards "Whiteboards" :new-whiteboard "New whiteboard" :new-graph "Add new graph" :graph "Graph" @@ -2289,7 +2293,11 @@ :search "Buscar o Crear Página" :page-search "Buscar en la página actual" :graph-search "Buscar grafo" + :home "Inicio" + :page "Página" :new-page "Nueva página" + :whiteboard "Pizarra" + :whiteboards "Pizarras" :new-graph "Añadir nuevo grafo" :graph "Grafo" :graph/persist "Logseq está sincronizando su estado interno, por favor espere unos segundos." diff --git a/src/main/frontend/handler/route.cljs b/src/main/frontend/handler/route.cljs index fb6eb8bad81..875fa47251f 100644 --- a/src/main/frontend/handler/route.cljs +++ b/src/main/frontend/handler/route.cljs @@ -98,7 +98,9 @@ [name path-params] (case name :home - "Logseq" + (t :home) + :whiteboards + (t :whiteboards) :repos "Repos" :repo-add @@ -129,6 +131,15 @@ (let [page (db/pull [:block/name (util/page-name-sanity-lc name)])] (or (util/get-page-original-name page) "Logseq")))) + :whiteboard + (let [name (:name path-params) + block? (util/uuid-string? name)] + (str + (if block? + (t :untitled) + (let [page (db/pull [:block/name (util/page-name-sanity-lc name)])] + (or (util/get-page-original-name page) + "Logseq"))) " - " (t :whiteboard))) :tag (str "#" (:name path-params)) :diff diff --git a/src/main/frontend/state.cljs b/src/main/frontend/state.cljs index 0e09f494ddb..f559fe6fd5a 100644 --- a/src/main/frontend/state.cljs +++ b/src/main/frontend/state.cljs @@ -280,8 +280,8 @@ :history/page-only-mode? false ;; win32 title bar - ;; TODO: get window info from ipc :win32-title-bar/window-is-maximized? false + :win32-title-bar/window-is-fullscreen? false ;; db tx-id -> editor cursor :history/tx->editor-cursor {}}))) diff --git a/src/main/frontend/ui.cljs b/src/main/frontend/ui.cljs index cf32b7eecd4..001189cfb3a 100644 --- a/src/main/frontend/ui.cljs +++ b/src/main/frontend/ui.cljs @@ -367,7 +367,9 @@ (doseq [[event function] [["persist-zoom-level" #(storage/set :zoom-level %)] ["restore-zoom-level" #(when-let [zoom-level (storage/get :zoom-level)] (js/window.apis.setZoomLevel zoom-level))] - ["full-screen" #(js-invoke cl (if (= % "enter") "add" "remove") "is-fullscreen")]]] + ["full-screen" #((js-invoke cl (if (= % "enter") "add" "remove") "is-fullscreen") + (state/set-state! :win32-title-bar/window-is-fullscreen? (if (= % "enter") true false)))] + ["maximize" #(state/set-state! :win32-title-bar/window-is-maximized? %)]]] (.on js/window.apis event function)) (p/then (ipc/ipc :getAppBaseInfo) #(let [{:keys [isFullScreen]} (js->clj % :keywordize-keys true)] From 58c051cd590991bc4362ec05ef4067eb602a748f Mon Sep 17 00:00:00 2001 From: charlie Date: Thu, 18 May 2023 10:03:34 +0800 Subject: [PATCH 021/190] enhance(ui): polish style of keymap modal --- src/main/frontend/components/shortcut.cljs | 2 +- src/main/frontend/components/shortcut.css | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/frontend/components/shortcut.cljs b/src/main/frontend/components/shortcut.cljs index 4c11aad0a95..d513ffe4971 100644 --- a/src/main/frontend/components/shortcut.cljs +++ b/src/main/frontend/components/shortcut.cljs @@ -217,7 +217,7 @@ []) [:div.cp__keymap-pane - [:h1.pb-2.text-3xl "Keymap"] + [:h1.pb-2.text-3xl.pt-2 "Keymap"] (if ready? (keymap-tables) [:p.flex.justify-center.py-20 (ui/loading "")])])) diff --git a/src/main/frontend/components/shortcut.css b/src/main/frontend/components/shortcut.css index 599a63af5b0..3b2041ad4f1 100644 --- a/src/main/frontend/components/shortcut.css +++ b/src/main/frontend/components/shortcut.css @@ -1,12 +1,12 @@ .ui__modal { &[label="keymap-manager"] { .panel-content { - @apply m-[-8px]; + @apply m-[-16px]; } @screen lg { .panel-content { - width: 920px; + width: 980px; } } } @@ -18,7 +18,7 @@ a.fold { @apply absolute right-0 top-0 w-full pt-3 pr-3 - flex items-center justify-end select-none; + pb-3 flex items-center justify-end select-none; &:active { @apply bg-white/50 opacity-60; From b6a7b814416caa3bf00e9ff89a9c95052204dc03 Mon Sep 17 00:00:00 2001 From: charlie Date: Thu, 18 May 2023 17:59:09 +0800 Subject: [PATCH 022/190] enhance(shortcuts): polish list for the plugins shortcuts --- src/main/frontend/components/shortcut.cljs | 5 ++--- src/main/frontend/ui.css | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/main/frontend/components/shortcut.cljs b/src/main/frontend/components/shortcut.cljs index d513ffe4971..d4b481b7af5 100644 --- a/src/main/frontend/components/shortcut.cljs +++ b/src/main/frontend/components/shortcut.cljs @@ -78,8 +78,7 @@ {:will-mount (fn [state] (let [name (first (:rum/args state))] (cond-> state - (contains? #{:shortcut.category/basics - :shortcut.category/plugins} + (contains? #{:shortcut.category/basics} name) (-> ::folded? (reset! false) (do state)))))} [state category configurable?] @@ -198,7 +197,6 @@ (rum/defc keymap-tables [] [:div.cp__keymap-tables - (shortcut-table :shortcut.category/plugins true) (shortcut-table :shortcut.category/basics true) (shortcut-table :shortcut.category/navigating true) (shortcut-table :shortcut.category/block-editing true) @@ -207,6 +205,7 @@ (shortcut-table :shortcut.category/formatting true) (shortcut-table :shortcut.category/toggle true) (when (state/enable-whiteboards?) (shortcut-table :shortcut.category/whiteboard true)) + (shortcut-table :shortcut.category/plugins true) (shortcut-table :shortcut.category/others true)]) (rum/defc keymap-pane diff --git a/src/main/frontend/ui.css b/src/main/frontend/ui.css index 0fe11001f49..74ca8160dd9 100644 --- a/src/main/frontend/ui.css +++ b/src/main/frontend/ui.css @@ -150,7 +150,7 @@ hover:opacity-100; &-wrap { - @apply absolute top-0 right-0 pt-2 pr-2; + @apply z-10 absolute top-0 right-0 pt-2 pr-2; } } From 87907c780062b71602d1e636cbd230b8ec8ea357 Mon Sep 17 00:00:00 2001 From: charlie Date: Fri, 19 May 2023 10:48:05 +0800 Subject: [PATCH 023/190] fix(shortcuts): conflicts --- src/main/frontend/dicts/en.cljc | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/frontend/dicts/en.cljc b/src/main/frontend/dicts/en.cljc index 24b428e3bff..1a7300b5a0d 100644 --- a/src/main/frontend/dicts/en.cljc +++ b/src/main/frontend/dicts/en.cljc @@ -383,6 +383,7 @@ :shortcut.category/block-selection "Block selection (press Esc to quit selection)" :shortcut.category/toggle "Toggle" :shortcut.category/whiteboard "Whiteboard" + :shortcut.category/plugins "Plugins" :shortcut.category/others "Others" ;; Commands are nested for now to stay in sync with the shortcuts system. From 596cdafbf58017831142ed5470e2aadd5eae8640 Mon Sep 17 00:00:00 2001 From: charlie Date: Fri, 19 May 2023 10:54:45 +0800 Subject: [PATCH 024/190] fix: lint --- src/main/frontend/modules/shortcut/core.cljs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/frontend/modules/shortcut/core.cljs b/src/main/frontend/modules/shortcut/core.cljs index a3a7bd4509f..ff9a73a6417 100644 --- a/src/main/frontend/modules/shortcut/core.cljs +++ b/src/main/frontend/modules/shortcut/core.cljs @@ -230,7 +230,7 @@ (let [k (first args) keystroke (str/trim @local)] (when (and (= @action :save) - (not (empty? keystroke))) + (seq keystroke)) (config-handler/set-config! :shortcuts (merge From 63b1463150d0239cc66eccd011b2f6529fe72f5e Mon Sep 17 00:00:00 2001 From: Konstantinos Kaloutas Date: Fri, 19 May 2023 11:57:39 +0300 Subject: [PATCH 025/190] fix: conflicts --- src/main/frontend/dicts/en.cljc | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/frontend/dicts/en.cljc b/src/main/frontend/dicts/en.cljc index 24b428e3bff..6c77be823a9 100644 --- a/src/main/frontend/dicts/en.cljc +++ b/src/main/frontend/dicts/en.cljc @@ -256,7 +256,11 @@ :whiteboard/link-whiteboard-or-block "Link whiteboard/page/block" :page-search "Search in the current page" :graph-search "Search graph" + :home "Home" + :page "Page" :new-page "New page" + :whiteboard "Whiteboard" + :whiteboards "Whiteboards" :new-whiteboard "New whiteboard" :new-graph "Add new graph" :graph "Graph" @@ -541,4 +545,4 @@ :dev/show-block-data "(Dev) Show block data" :dev/show-block-ast "(Dev) Show block AST" :dev/show-page-data "(Dev) Show page data" - :dev/show-page-ast "(Dev) Show page AST"}}) \ No newline at end of file + :dev/show-page-ast "(Dev) Show page AST"}}) From 1fd22623e06c70dec94c58688fb49cc38dfc5042 Mon Sep 17 00:00:00 2001 From: Konstantinos Kaloutas Date: Fri, 19 May 2023 12:26:58 +0300 Subject: [PATCH 026/190] resolve conflicts --- src/main/frontend/dicts/es.cljc | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/frontend/dicts/es.cljc b/src/main/frontend/dicts/es.cljc index 4ae0d72bf94..0eaa9e7617a 100644 --- a/src/main/frontend/dicts/es.cljc +++ b/src/main/frontend/dicts/es.cljc @@ -178,7 +178,11 @@ :search "Buscar o Crear Página" :page-search "Buscar en la página actual" :graph-search "Buscar grafo" + :home "Inicio" + :page "Página" :new-page "Nueva página" + :whiteboard "Pizarra" + :whiteboards "Pizarras" :new-graph "Añadir nuevo grafo" :graph "Grafo" :graph/persist "Logseq está sincronizando su estado interno, por favor espere unos segundos." @@ -497,4 +501,4 @@ :command.ui/install-plugins-from-file "Instalar extensiones de plugins.edn" :command.ui/select-theme-color "Seleccionar temas de colores disponibles" :command.ui/toggle-cards "Alternar tarjetas" - :command.ui/toggle-left-sidebar "Alternar barra lateral izquierda"}) \ No newline at end of file + :command.ui/toggle-left-sidebar "Alternar barra lateral izquierda"}) From d7f8eda84604682847effda1244fb2e56ab10d2b Mon Sep 17 00:00:00 2001 From: Konstantinos Kaloutas Date: Fri, 19 May 2023 18:23:15 +0300 Subject: [PATCH 027/190] enhance: window title bar --- e2e-tests/window.spec.ts | 22 +++++ src/electron/electron/handler.cljs | 2 +- src/electron/electron/window.cljs | 10 ++- src/main/frontend/components/container.cljs | 16 ++-- src/main/frontend/components/container.css | 19 +++- src/main/frontend/components/header.cljs | 3 +- .../frontend/components/right_sidebar.cljs | 27 +++--- src/main/frontend/components/settings.cljs | 14 +++ src/main/frontend/components/svg.cljs | 19 ++-- src/main/frontend/components/theme.css | 2 - .../frontend/components/win32_title_bar.cljs | 50 ----------- .../frontend/components/win32_title_bar.css | 86 ------------------- .../frontend/components/window_controls.cljs | 40 +++++++++ .../frontend/components/window_controls.css | 14 +++ src/main/frontend/dicts/en.cljc | 6 ++ src/main/frontend/handler/route.cljs | 2 +- src/main/frontend/handler/ui.cljs | 16 +--- src/main/frontend/page.cljs | 1 + src/main/frontend/state.cljs | 8 +- src/main/frontend/ui.cljs | 4 +- 20 files changed, 166 insertions(+), 195 deletions(-) create mode 100644 e2e-tests/window.spec.ts delete mode 100644 src/main/frontend/components/win32_title_bar.cljs delete mode 100644 src/main/frontend/components/win32_title_bar.css create mode 100644 src/main/frontend/components/window_controls.cljs create mode 100644 src/main/frontend/components/window_controls.css diff --git a/e2e-tests/window.spec.ts b/e2e-tests/window.spec.ts new file mode 100644 index 00000000000..fd4fff946ec --- /dev/null +++ b/e2e-tests/window.spec.ts @@ -0,0 +1,22 @@ +import { expect } from '@playwright/test' +import { test } from './fixtures' + +import { IsMac } from './utils'; + +if (!IsMac) { + test('Window should not be maximized on first launch', async ({ page }) => { + await expect(page.locator('.window-controls .maximize-toggle.maximize')).toHaveCount(1) + }) + + test('Window should be maximized and icon should change on maximize-toggle click', async ({ page }) => { + await page.click('.window-controls .maximize-toggle') + + await expect(page.locator('.window-controls .maximize-toggle.restore')).toHaveCount(1) + }) + + test('Window should be restored and icon should change on maximize-toggle click', async ({ page }) => { + await page.click('.window-controls .maximize-toggle') + + await expect(page.locator('.window-controls .maximize-toggle.maximize')).toHaveCount(1) + }) +} diff --git a/src/electron/electron/handler.cljs b/src/electron/electron/handler.cljs index d3fac98d6e6..ee4b73eae96 100644 --- a/src/electron/electron/handler.cljs +++ b/src/electron/electron/handler.cljs @@ -602,7 +602,7 @@ (defmethod handle :window-minimize [^js win] (.minimize win)) -(defmethod handle :window-maximize-restore [^js win] +(defmethod handle :window-toggle-maximized [^js win] (if (.isMaximized win) (.unmaximize win) (.maximize win))) diff --git a/src/electron/electron/window.cljs b/src/electron/electron/window.cljs index b32853541c0..c04982cb96a 100644 --- a/src/electron/electron/window.cljs +++ b/src/electron/electron/window.cljs @@ -26,10 +26,11 @@ (create-main-window! url nil)) ([url opts] (let [win-state (windowStateKeeper (clj->js {:defaultWidth 980 :defaultHeight 700})) + native-titlebar? (cfgs/get-item :window/native-titlebar?) win-opts (cond-> {:width (.-width win-state) :height (.-height win-state) - :frame (not win32?) + :frame (or mac? native-titlebar?) :titleBarStyle "hiddenInset" :trafficLightPosition {:x 16 :y 16} :autoHideMenuBar (not mac?) @@ -182,14 +183,15 @@ (doto web-contents (.on "will-navigate" will-navigate-handler) (.on "did-start-navigation" #(.send web-contents "persist-zoom-level" (.getZoomLevel web-contents))) - (.on "page-title-updated" #(.send web-contents "restore-zoom-level")) + (.on "page-title-updated" #(do (.send web-contents "maximize" (.isMaximized win)) + (.send web-contents "restore-zoom-level"))) (.setWindowOpenHandler window-open-handler)) (doto win (.on "enter-full-screen" #(.send web-contents "full-screen" "enter")) (.on "leave-full-screen" #(.send web-contents "full-screen" "leave")) - (.on "maximize" #(if win32? (.send web-contents "maximize" true) ())) - (.on "unmaximize" #(if win32? (.send web-contents "maximize" false) ()))) + (.on "maximize" #(.send web-contents "maximize" true)) + (.on "unmaximize" #(.send web-contents "maximize" false))) ;; clear (fn [] diff --git a/src/main/frontend/components/container.cljs b/src/main/frontend/components/container.cljs index caf175f0cc3..30e44e81037 100644 --- a/src/main/frontend/components/container.cljs +++ b/src/main/frontend/components/container.cljs @@ -12,7 +12,6 @@ [frontend.components.svg :as svg] [frontend.components.theme :as theme] [frontend.components.widgets :as widgets] - [frontend.components.win32-title-bar :as win32-title-bar] [frontend.config :as config] [frontend.context.i18n :refer [t]] [frontend.db :as db] @@ -34,8 +33,9 @@ [frontend.modules.shortcut.data-helper :as shortcut-dh] [frontend.state :as state] [frontend.ui :as ui] - [frontend.util :as util :refer [win32?]] + [frontend.util :as util] [frontend.util.cursor :as cursor] + [frontend.components.window-controls :as window-controls] [goog.dom :as gdom] [goog.object :as gobj] [logseq.common.path :as path] @@ -726,12 +726,14 @@ onboarding-state (state/sub :file-sync/onboarding-state) right-sidebar-blocks (state/sub-right-sidebar-blocks) route-name (get-in route-match [:data :name]) - fullscreen? (state/sub :win32-title-bar/window-is-fullscreen?) margin-less-pages? (boolean (#{:graph :whiteboard} route-name)) db-restoring? (state/sub :db/restoring?) indexeddb-support? (state/sub :indexeddb/support?) page? (= :page route-name) home? (= :home route-name) + fullscreen? (state/sub :electron/window-fullscreen?) + native-titlebar? (state/sub [:electron/user-cfgs :window/native-titlebar?]) + window-controls? (and (util/electron?) (not util/mac?) (not fullscreen?) (not native-titlebar?)) edit? (:editor/editing? @state/state) default-home (get-default-home-if-valid) logged? (user-handler/logged-in?) @@ -761,6 +763,7 @@ {:class (util/classnames [{:ls-left-sidebar-open left-sidebar-open? :ls-right-sidebar-open sidebar-open? :ls-wide-mode wide-mode? + :ls-window-controls window-controls? :ls-fold-button-on-right fold-button-on-right? :ls-hl-colored ls-block-hl-colored?}])} @@ -774,10 +777,6 @@ [:div#left-container {:class (if (state/sub :ui/sidebar-open?) "overflow-hidden" "w-full")} - (if win32? - (if fullscreen? - () - (win32-title-bar/container)) ()) (header/header {:open-fn open-fn :light? light? @@ -803,6 +802,9 @@ :show-action-bar? show-action-bar? :show-recording-bar? show-recording-bar?})] + (when window-controls? + (window-controls/container)) + (right-sidebar/sidebar) [:div#app-single-container]] diff --git a/src/main/frontend/components/container.css b/src/main/frontend/components/container.css index 44ec0c24a1a..94c64e012a9 100644 --- a/src/main/frontend/components/container.css +++ b/src/main/frontend/components/container.css @@ -451,6 +451,20 @@ } } +.ls-window-controls { + &.ls-right-sidebar-open { + .cp__right-sidebar-topbar { + margin-right: 144px; + } + } + + &:not(.ls-right-sidebar-open) { + .cp__header > .r { + margin-right: 144px; + } + } +} + .ls-wide-mode { .cp__sidebar-main-content { max-width: var(--ls-main-content-max-width-wide); @@ -538,7 +552,6 @@ html[data-theme='dark'] { } &.open { - width: var(--ls-right-sidebar-width); max-width: 60vw; } @@ -574,7 +587,9 @@ html[data-theme='dark'] { user-select: none; -webkit-app-region: drag; - a, svg { + a, + svg, + button { -webkit-app-region: no-drag; } } diff --git a/src/main/frontend/components/header.cljs b/src/main/frontend/components/header.cljs index 9aedd9d2084..c06ab1cb825 100644 --- a/src/main/frontend/components/header.cljs +++ b/src/main/frontend/components/header.cljs @@ -269,7 +269,6 @@ :current-repo current-repo :default-home default-home}) - (when (not (state/sub :ui/sidebar-open?)) - (sidebar/toggle)) + (sidebar/toggle) (updater-tips-new-version t)]])) diff --git a/src/main/frontend/components/right_sidebar.cljs b/src/main/frontend/components/right_sidebar.cljs index 892bd08f177..706d704bc2c 100644 --- a/src/main/frontend/components/right_sidebar.cljs +++ b/src/main/frontend/components/right_sidebar.cljs @@ -220,6 +220,7 @@ (rum/defc sidebar-resizer [sidebar-open? sidebar-id handler-position] (let [el-ref (rum/use-ref nil) + min-px-width 144 ; Custom window controls width min-ratio 0.1 max-ratio 0.7 keyboard-step 5 @@ -227,12 +228,12 @@ remove-resizing-class (fn [] (.. js/document.documentElement -classList (remove "is-resizing-buf")) (reset! ui-handler/*right-sidebar-resized-at (js/Date.now))) - set-width! (fn [ratio element] - (when (and el-ref element) - (let [width (str (* ratio 100) "%")] - (#(.setProperty (.-style element) "width" width) - (.setAttribute (rum/deref el-ref) "aria-valuenow" ratio) - (ui-handler/persist-right-sidebar-width!)))))] + set-width! (fn [ratio] + (when el-ref + (let [value (* ratio 100) + width (str value "%")] + (.setAttribute (rum/deref el-ref) "aria-valuenow" value) + (ui-handler/persist-right-sidebar-width! width))))] (rum/use-effect! (fn [] (when-let [el (and (fn? js/window.interact) (rum/deref el-ref))] @@ -243,6 +244,7 @@ {:move (fn [^js/MouseEvent e] (let [width js/document.documentElement.clientWidth + min-ratio (max min-ratio (/ min-px-width width)) sidebar-el (js/document.getElementById sidebar-id) offset (.-pageX e) ratio (.toFixed (/ offset width) 6) @@ -259,7 +261,7 @@ (and (< ratio max-ratio) sidebar-el) (when sidebar-el (#(.. js/document.documentElement -classList (remove cursor-class)) - (set-width! ratio sidebar-el))) + (set-width! ratio))) :else #(.. js/document.documentElement -classList (remove cursor-class))) (when (> ratio (/ min-ratio 2)) (state/open-right-sidebar!)))))}})) @@ -269,6 +271,7 @@ (.on "keydown" (fn [e] (when-let [sidebar-el (js/document.getElementById sidebar-id)] (let [width js/document.documentElement.clientWidth + min-ratio (max min-ratio (/ min-px-width width)) keyboard-step (case (.-code e) "ArrowLeft" (- keyboard-step) "ArrowRight" keyboard-step @@ -278,7 +281,7 @@ 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 sidebar-el))))))) + (set-width! ratio))))))) (.on "keyup" remove-resizing-class))) #()) []) @@ -333,9 +336,7 @@ (when config/dev? [: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)]])] - - (toggle)] + (t :right-side-bar/history)]])]] [:.sidebar-item-list.flex-1.scrollbar-spacing.flex.flex-col.gap-2 (if @*anim-finished? @@ -353,9 +354,11 @@ [[(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)] [:div#right-sidebar.cp__right-sidebar.h-screen - {:class (if sidebar-open? "open" "closed")} + {:class (if sidebar-open? "open" "closed") + :style {:width width}} (sidebar-resizer sidebar-open? "right-sidebar" :west) (when sidebar-open? (sidebar-inner repo t blocks))])) diff --git a/src/main/frontend/components/settings.cljs b/src/main/frontend/components/settings.cljs index fa22c986dfc..ee3cd75a1dc 100644 --- a/src/main/frontend/components/settings.cljs +++ b/src/main/frontend/components/settings.cljs @@ -610,6 +610,19 @@ (fn [_] (conversion-component/files-breaking-changed)) {:id :filename-format-panel :center? true})})) +(rum/defcs native-titlebar-row < rum/reactive + [state t] + (let [enabled? (state/sub [:electron/user-cfgs :window/native-titlebar?])] + (toggle + "native-titlebar" + (t :settings-page/native-titlebar) + enabled? + #(when (js/confirm (t :relaunch-confirm-to-work)) + (state/set-state! [:electron/user-cfgs :window/native-titlebar?] (not enabled?)) + (ipc/ipc :userAppCfgs :window/native-titlebar? (not enabled?)) + (js/logseq.api.relaunch)) + [:span.text-sm.opacity-50 (t :settings-page/native-titlebar-desc)]))) + (rum/defcs settings-general < rum/reactive [_state current-repo] (let [preferred-language (state/sub [:preferred-language]) @@ -621,6 +634,7 @@ (version-row t version) (language-row t preferred-language) (theme-modes-row t switch-theme system-theme? dark?) + (when (and (util/electron?) (not util/mac?)) (native-titlebar-row t)) (when (config/global-config-enabled?) (edit-global-config-edn)) (when current-repo (edit-config-edn)) (when current-repo (edit-custom-css)) diff --git a/src/main/frontend/components/svg.cljs b/src/main/frontend/components/svg.cljs index fd0c79c0181..74a565a6548 100644 --- a/src/main/frontend/components/svg.cljs +++ b/src/main/frontend/components/svg.cljs @@ -387,29 +387,28 @@ {:d "M256 0C114.6 0 0 114.6 0 256c0 141.4 114.6 256 256 256s256-114.6 256-256C512 114.6 397.4 0 256 0zM352 328c0 13.2-10.8 24-24 24h-144C170.8 352 160 341.2 160 328v-144C160 170.8 170.8 160 184 160h144C341.2 160 352 170.8 352 184V328z"}]]) -;; the icons for Win32 title bar, from: -;; https://github.com/microsoft/vscode-codicons -(defn chrome-minimize - ([] (chrome-minimize 16)) +;; Titlebar icons from https://github.com/microsoft/vscode-codicons +(defn window-minimize + ([] (window-minimize 16)) ([size] [:svg.icon {:width size :height size :viewBox "0 0 16 16" :fill "currentColor"} [:path {:d "M14 8v1H3V8h11z"}]])) -(defn chrome-maximize - ([] (chrome-maximize 16)) +(defn window-maximize + ([] (window-maximize 16)) ([size] [:svg.icon {:width size :height size :viewBox "0 0 16 16" :fill "currentColor"} [:path {:d "M3 3v10h10V3H3zm9 9H4V4h8v8z"}]])) -(defn chrome-restore - ([] (chrome-restore 16)) +(defn window-restore + ([] (window-restore 16)) ([size] [:svg.icon {:width size :height size :viewBox "0 0 16 16" :fill "currentColor"} [:path {:d "M3 5v9h9V5H3zm8 8H4V6h7v7z"}] [:path {:fill-rule "evenodd" :clip-rule "evenodd" :d "M5 5h1V4h7v7h-1v1h2V3H5v2z"}]])) -(defn chrome-close - ([] (chrome-close 16)) +(defn window-close + ([] (window-close 16)) ([size] [:svg.icon {:width size :height size :viewBox "0 0 16 16" :fill "currentColor"} [:path {:fill-rule "evenodd" :clip-rule "evenodd" :d "M7.116 8l-4.558 4.558.884.884L8 8.884l4.558 4.558.884-.884L8.884 8l4.558-4.558-.884-.884L8 7.116 3.442 2.558l-.884.884L7.116 8z"}]])) diff --git a/src/main/frontend/components/theme.css b/src/main/frontend/components/theme.css index d9c9bdbe3eb..f35d65c38a3 100644 --- a/src/main/frontend/components/theme.css +++ b/src/main/frontend/components/theme.css @@ -8,8 +8,6 @@ --ls-z-index-level-3: 999; --ls-z-index-level-4: 9999; --ls-z-index-level-5: 99999; - - --ls-right-sidebar-width: 40%; } html { diff --git a/src/main/frontend/components/win32_title_bar.cljs b/src/main/frontend/components/win32_title_bar.cljs deleted file mode 100644 index 67a99ea2148..00000000000 --- a/src/main/frontend/components/win32_title_bar.cljs +++ /dev/null @@ -1,50 +0,0 @@ -(ns frontend.components.win32-title-bar - (:require [electron.ipc :as ipc] - [frontend.components.svg :as svg] - [frontend.state :as state] - [goog.string :as gstring] - [rum.core :as rum])) - -(defn minimize - [] - (ipc/ipc "window-minimize")) - -(defn max-restore - [] - (ipc/ipc "window-maximize-restore")) - -(defn close - [] - (ipc/ipc "window-close")) - -(rum/defc container < rum/reactive - [] - (let [maximized? (state/sub :win32-title-bar/window-is-maximized?)] - [:div.cp__win32-title-bar#win32-title-bar - {} - [:div.left-side - {} - [:div.logo - {} - (svg/logo)]] - [:div.middle - {} - [:span#win32-title-bar-page-title - {} - (.-title js/document)] - [:span#win32-title-bar-logseq-text - {} - (gstring/unescapeEntities " ") "-" (gstring/unescapeEntities " ") "Logseq"]] - [:div.right-side - {} - [:div.minimize - {:on-click minimize} - (svg/chrome-minimize)] - [:div.max-restore - {:on-click max-restore} - (if maximized? - (svg/chrome-restore) - (svg/chrome-maximize))] - [:div.close - {:on-click close} - (svg/chrome-close)]]])) diff --git a/src/main/frontend/components/win32_title_bar.css b/src/main/frontend/components/win32_title_bar.css deleted file mode 100644 index a0befbb33c3..00000000000 --- a/src/main/frontend/components/win32_title_bar.css +++ /dev/null @@ -1,86 +0,0 @@ -.cp__win32-title-bar:not(:fullscreen) { - z-index: var(--ls-z-index-level-5); - position: fixed; - left: 0; - right: 0; - top: 0; - height: var(--ls-win32-title-bar-height); - background-color: var(--ls-secondary-background-color); - display: flex; - justify-content: space-between; - user-select: none; - -webkit-app-region: drag; - - >.left-side { - display: flex; - align-items: center; - margin-left: 0.5rem; - margin-right: 0.5rem; - width: 28px; - - >.logo { - width: 24px; - display: flex; - align-items: center; - justify-content: center; - padding-left: 4px; - } - } - - >.middle { - display: flex; - align-items: center; - flex-wrap: nowrap; - overflow: hidden; - - >span#win32-title-bar-page-title { - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - min-width: 0; - } - - >span#win32-title-bar-logseq-text { - flex-shrink: 0; - flex-wrap: nowrap; - } - } - - >.right-side { - display: flex; - width: 138px; - -webkit-app-region: no-drag; - - >* { - color: var(--ls-primary-text-color); - width: 100%; - display: flex; - justify-content: center; - align-items: center; - - &:hover { - background: var(--ls-tertiary-background-color); - } - - &:active { - background: var(--ls-secondary-background-color); - } - } - - >.close { - &:hover { - color: #fff; - background: #c42b1c; - } - - &:active { - color: #fff; - background: #b3271c; - } - } - } -} - -.is-win32.is-electron:not(.is-fullscreen) { - --ls-win32-title-bar-height: 36px; -} \ No newline at end of file diff --git a/src/main/frontend/components/window_controls.cljs b/src/main/frontend/components/window_controls.cljs new file mode 100644 index 00000000000..92615883a1b --- /dev/null +++ b/src/main/frontend/components/window_controls.cljs @@ -0,0 +1,40 @@ +(ns frontend.components.window-controls + (:require [electron.ipc :as ipc] + [frontend.components.svg :as svg] + [frontend.context.i18n :refer [t]] + [frontend.state :as state] + [rum.core :as rum])) + +(defn minimize + [] + (ipc/ipc "window-minimize")) + +(defn toggle-maximized + [] + (ipc/ipc "window-toggle-maximized")) + +(defn close + [] + (ipc/ipc "window-close")) + +(rum/defc container < rum/reactive + [] + (let [maximized? (state/sub :electron/window-maximized?)] + [:div.window-controls.flex + [:button.button.icon.minimize + {:title (t :window/minimize) + :on-click minimize} + (svg/window-minimize)] + + [:button.button.icon.maximize-toggle + {:title (t (if maximized? :window/restore :window/maximize)) + :class (if maximized? "restore" "maximize") + :on-click toggle-maximized} + (if maximized? + (svg/window-restore) + (svg/window-maximize))] + + [:button.button.icon.close + {:title (t :window/close) + :on-click close} + (svg/window-close)]])) diff --git a/src/main/frontend/components/window_controls.css b/src/main/frontend/components/window_controls.css new file mode 100644 index 00000000000..04b313cd455 --- /dev/null +++ b/src/main/frontend/components/window_controls.css @@ -0,0 +1,14 @@ +.window-controls { + position: fixed; + top: 0; + right: 0; + z-index: 10; + + .button { + -webkit-app-region: no-drag; + background: transparent; + border-radius: 0; + width: 48px; + height: 48px; + } +} diff --git a/src/main/frontend/dicts/en.cljc b/src/main/frontend/dicts/en.cljc index 6c77be823a9..6e679ef8e38 100644 --- a/src/main/frontend/dicts/en.cljc +++ b/src/main/frontend/dicts/en.cljc @@ -232,6 +232,8 @@ :settings-page/login-prompt "To access new features before anyone else you must be an Open Collective Sponsor or Backer of Logseq and therefore log in first." :settings-page/sync "Sync" :settings-page/enable-whiteboards "Whiteboards" + :settings-page/native-titlebar "Native title bar" + :settings-page/native-titlebar-desc "Enables the native window title bar on Windows and Linux, and hides the custom window controls." :yes "Yes" :submit "Submit" @@ -388,6 +390,10 @@ :shortcut.category/toggle "Toggle" :shortcut.category/whiteboard "Whiteboard" :shortcut.category/others "Others" + :window/minimize "Minimize" + :window/maximize "Maximize" + :window/restore "Restore" + :window/close "Close" ;; Commands are nested for now to stay in sync with the shortcuts system. ;; Other languages should not nest keys under :commands diff --git a/src/main/frontend/handler/route.cljs b/src/main/frontend/handler/route.cljs index 875fa47251f..9d25fea0bae 100644 --- a/src/main/frontend/handler/route.cljs +++ b/src/main/frontend/handler/route.cljs @@ -98,7 +98,7 @@ [name path-params] (case name :home - (t :home) + "Logseq" :whiteboards (t :whiteboards) :repos diff --git a/src/main/frontend/handler/ui.cljs b/src/main/frontend/handler/ui.cljs index 8d4ad4f933b..409be7e8c95 100644 --- a/src/main/frontend/handler/ui.cljs +++ b/src/main/frontend/handler/ui.cljs @@ -17,26 +17,18 @@ [promesa.core :as p] [logseq.common.path :as path])) -(defn- get-css-var-value - [var-name] - (.getPropertyValue (js/getComputedStyle (.-documentElement js/document)) var-name)) - ;; sidebars (def *right-sidebar-resized-at (atom (js/Date.now))) -(defn- get-right-sidebar-width - [] - (or (.. (js/document.getElementById "right-sidebar") -style -width) - (get-css-var-value "--right-sidebar-width"))) - (defn persist-right-sidebar-width! - [] - (storage/set "ls-right-sidebar-width" (get-right-sidebar-width))) + [width] + (state/set-state! :ui/sidebar-width width) + (storage/set "ls-right-sidebar-width" width)) (defn restore-right-sidebar-width! [] (when-let [width (storage/get "ls-right-sidebar-width")] - (.setProperty (.-style (js/document.getElementById "right-sidebar")) "width" width))) + (state/set-state! :ui/sidebar-width width))) (defn close-left-sidebar! [] diff --git a/src/main/frontend/page.cljs b/src/main/frontend/page.cljs index 967b485c318..a44bbf7b4b1 100644 --- a/src/main/frontend/page.cljs +++ b/src/main/frontend/page.cljs @@ -88,6 +88,7 @@ {:did-mount (fn [state] (state/set-root-component! (:rum/react-component state)) (state/setup-electron-updater!) + (state/load-app-user-cfgs) (ui/inject-document-devices-envs!) (ui/inject-dynamic-style-node!) (quick-tour/init) diff --git a/src/main/frontend/state.cljs b/src/main/frontend/state.cljs index f559fe6fd5a..05c6a82b2c8 100644 --- a/src/main/frontend/state.cljs +++ b/src/main/frontend/state.cljs @@ -76,6 +76,7 @@ :ui/fullscreen? false :ui/settings-open? false :ui/sidebar-open? false + :ui/sidebar-width "40%" :ui/left-sidebar-open? (boolean (storage/get "ls-left-sidebar-open?")) :ui/theme (or (storage/get :ui/theme) "light") :ui/system-theme? ((fnil identity (or util/mac? util/win32? false)) (storage/get :ui/system-theme?)) @@ -160,6 +161,8 @@ :electron/updater {} :electron/user-cfgs nil :electron/server nil + :electron/window-maximized? false + :electron/window-fullscreen? false ;; assets :assets/alias-enabled? (or (storage/get :assets/alias-enabled?) false) @@ -261,7 +264,7 @@ ;; :file-sync/last-synced-at {}} :file-sync/graph-state {:current-graph-uuid nil} ;; graph-uuid -> ... - + :user/info {:UserGroups (storage/get :user-groups)} :encryption/graph-parsing? false @@ -279,9 +282,6 @@ :whiteboard/pending-tx-data {} :history/page-only-mode? false - ;; win32 title bar - :win32-title-bar/window-is-maximized? false - :win32-title-bar/window-is-fullscreen? false ;; db tx-id -> editor cursor :history/tx->editor-cursor {}}))) diff --git a/src/main/frontend/ui.cljs b/src/main/frontend/ui.cljs index 001189cfb3a..65516f1ac02 100644 --- a/src/main/frontend/ui.cljs +++ b/src/main/frontend/ui.cljs @@ -368,8 +368,8 @@ [["persist-zoom-level" #(storage/set :zoom-level %)] ["restore-zoom-level" #(when-let [zoom-level (storage/get :zoom-level)] (js/window.apis.setZoomLevel zoom-level))] ["full-screen" #((js-invoke cl (if (= % "enter") "add" "remove") "is-fullscreen") - (state/set-state! :win32-title-bar/window-is-fullscreen? (if (= % "enter") true false)))] - ["maximize" #(state/set-state! :win32-title-bar/window-is-maximized? %)]]] + (state/set-state! :electron/window-fullscreen? (= % "enter")))] + ["maximize" #(state/set-state! :electron/window-maximized? %)]]] (.on js/window.apis event function)) (p/then (ipc/ipc :getAppBaseInfo) #(let [{:keys [isFullScreen]} (js->clj % :keywordize-keys true)] From 2044f6150ec5c9acc0ef962a67e0433cfc289a2b Mon Sep 17 00:00:00 2001 From: Konstantinos Kaloutas Date: Fri, 19 May 2023 18:36:11 +0300 Subject: [PATCH 028/190] remove unneeded css var --- resources/css/common.css | 1 - 1 file changed, 1 deletion(-) diff --git a/resources/css/common.css b/resources/css/common.css index 9c52bdedc81..bf5103e4db3 100644 --- a/resources/css/common.css +++ b/resources/css/common.css @@ -19,7 +19,6 @@ --ls-warning-color: var(--color-orange-500); --ls-success-color: var(--color-green-500); --ls-highlight-color-default: var(--ls-secondary-background-color); - --ls-win32-title-bar-height: 0px; } @media (prefers-color-scheme: dark) { From 04dc1dc772ce86c58dc823a9237d8f1e30abba0c Mon Sep 17 00:00:00 2001 From: Konstantinos Kaloutas Date: Fri, 19 May 2023 18:53:15 +0300 Subject: [PATCH 029/190] fix: linter errors --- src/main/frontend/components/window_controls.cljs | 2 +- src/main/frontend/dicts/en.cljc | 1 - src/main/frontend/dicts/es.cljc | 1 - 3 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/frontend/components/window_controls.cljs b/src/main/frontend/components/window_controls.cljs index 92615883a1b..ba2d97de0b4 100644 --- a/src/main/frontend/components/window_controls.cljs +++ b/src/main/frontend/components/window_controls.cljs @@ -27,7 +27,7 @@ (svg/window-minimize)] [:button.button.icon.maximize-toggle - {:title (t (if maximized? :window/restore :window/maximize)) + {:title (if maximized? (t :window/restore) (t :window/maximize)) :class (if maximized? "restore" "maximize") :on-click toggle-maximized} (if maximized? diff --git a/src/main/frontend/dicts/en.cljc b/src/main/frontend/dicts/en.cljc index 6e679ef8e38..931acd5e825 100644 --- a/src/main/frontend/dicts/en.cljc +++ b/src/main/frontend/dicts/en.cljc @@ -259,7 +259,6 @@ :page-search "Search in the current page" :graph-search "Search graph" :home "Home" - :page "Page" :new-page "New page" :whiteboard "Whiteboard" :whiteboards "Whiteboards" diff --git a/src/main/frontend/dicts/es.cljc b/src/main/frontend/dicts/es.cljc index 6a0d3dddc49..fde0584e1b5 100644 --- a/src/main/frontend/dicts/es.cljc +++ b/src/main/frontend/dicts/es.cljc @@ -179,7 +179,6 @@ :page-search "Buscar en la página actual" :graph-search "Buscar grafo" :home "Inicio" - :page "Página" :new-page "Nueva página" :whiteboard "Pizarra" :whiteboards "Pizarras" From 8c51ed214f96e79e968b90f0aa922a52f9af80ea Mon Sep 17 00:00:00 2001 From: Konstantinos Kaloutas Date: Mon, 22 May 2023 12:41:31 +0300 Subject: [PATCH 030/190] fluxbox test --- .github/workflows/build.yml | 7 +++++-- .github/workflows/e2e.yml | 8 +++++--- e2e-tests/window.spec.ts | 7 +++---- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c9d15bd620a..17c232ae19d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -182,15 +182,18 @@ jobs: - name: Ensure static yarn.lock is up to date run: git diff --exit-code static/yarn.lock + - name: Install fluxbox + run: apt-get update && apt-get install -y fluxbox + - name: Run Playwright test - 1/2 - run: xvfb-run -- npx playwright test --reporter github --shard=1/2 + run: Xvfb :1 -screen 0 "1280x720x24" >/dev/null 2>&1 & export DISPLAY=:1.0 fluxbox >/dev/null 2>&1 & npx playwright test --reporter github --shard=1/2 env: LOGSEQ_CI: true DEBUG: "pw:api" RELEASE: true # skip dev only test - name: Run Playwright test - 2/2 - run: xvfb-run -- npx playwright test --reporter github --shard=2/2 + run: Xvfb :1 -screen 0 "1280x720x24" >/dev/null 2>&1 & export DISPLAY=:1.0 fluxbox >/dev/null 2>&1 & npx playwright test --reporter github --shard=2/2 env: LOGSEQ_CI: true DEBUG: "pw:api" diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index f3aa8eb3921..60ac1a4617c 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -33,7 +33,6 @@ jobs: uses: actions/setup-node@v3 with: node-version: ${{ env.NODE_VERSION }} - cache: 'yarn' cache-dependency-path: | yarn.lock static/yarn.lock @@ -74,7 +73,7 @@ jobs: ${{ runner.os }}-shadow-cljs- - name: Fetch yarn deps - run: yarn install + run: npm install -g yarn && yarn install env: PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: true @@ -137,8 +136,11 @@ jobs: - name: Ensure static yarn.lock is up to date run: git diff --exit-code static/yarn.lock + - name: Install fluxbox + run: apt-get update && apt-get install -y fluxbox + - name: Run Playwright test - run: xvfb-run -- npx playwright test --reporter github --shard=${{ matrix.shard }}/3 + run: Xvfb :1 -screen 0 "1280x720x24" >/dev/null 2>&1 & export DISPLAY=:1.0 fluxbox >/dev/null 2>&1 & npx playwright test --reporter github --shard=${{ matrix.shard }}/3 env: LOGSEQ_CI: true DEBUG: "pw:api" diff --git a/e2e-tests/window.spec.ts b/e2e-tests/window.spec.ts index fd4fff946ec..c508971f759 100644 --- a/e2e-tests/window.spec.ts +++ b/e2e-tests/window.spec.ts @@ -1,21 +1,20 @@ import { expect } from '@playwright/test' import { test } from './fixtures' - import { IsMac } from './utils'; if (!IsMac) { - test('Window should not be maximized on first launch', async ({ page }) => { + test('Window should not be maximized on first launch', async ({ page, app }) => { await expect(page.locator('.window-controls .maximize-toggle.maximize')).toHaveCount(1) }) test('Window should be maximized and icon should change on maximize-toggle click', async ({ page }) => { - await page.click('.window-controls .maximize-toggle') + await page.click('.window-controls .maximize-toggle.maximize') await expect(page.locator('.window-controls .maximize-toggle.restore')).toHaveCount(1) }) test('Window should be restored and icon should change on maximize-toggle click', async ({ page }) => { - await page.click('.window-controls .maximize-toggle') + await page.click('.window-controls .maximize-toggle.restore') await expect(page.locator('.window-controls .maximize-toggle.maximize')).toHaveCount(1) }) From a16cab826a96a44df7d51afa7e5bbf4cb503efce Mon Sep 17 00:00:00 2001 From: Konstantinos Kaloutas Date: Mon, 22 May 2023 12:43:40 +0300 Subject: [PATCH 031/190] revert yarn changes --- .github/workflows/e2e.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index 60ac1a4617c..dc5771630eb 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -33,6 +33,7 @@ jobs: uses: actions/setup-node@v3 with: node-version: ${{ env.NODE_VERSION }} + cache: 'yarn' cache-dependency-path: | yarn.lock static/yarn.lock @@ -73,7 +74,7 @@ jobs: ${{ runner.os }}-shadow-cljs- - name: Fetch yarn deps - run: npm install -g yarn && yarn install + run: yarn install env: PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: true From 71c56e70c6c0ab32ceb11c077990c71e7fb4336f Mon Sep 17 00:00:00 2001 From: Konstantinos Kaloutas Date: Mon, 22 May 2023 12:55:29 +0300 Subject: [PATCH 032/190] fix install --- .github/workflows/build.yml | 2 +- .github/workflows/e2e.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 17c232ae19d..dd2e1a6ad38 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -183,7 +183,7 @@ jobs: run: git diff --exit-code static/yarn.lock - name: Install fluxbox - run: apt-get update && apt-get install -y fluxbox + run: sudo apt-get update && apt-get install -y fluxbox - name: Run Playwright test - 1/2 run: Xvfb :1 -screen 0 "1280x720x24" >/dev/null 2>&1 & export DISPLAY=:1.0 fluxbox >/dev/null 2>&1 & npx playwright test --reporter github --shard=1/2 diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index dc5771630eb..8e3b949a0f1 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -138,7 +138,7 @@ jobs: run: git diff --exit-code static/yarn.lock - name: Install fluxbox - run: apt-get update && apt-get install -y fluxbox + run: sudo apt-get update && apt-get install -y fluxbox - name: Run Playwright test run: Xvfb :1 -screen 0 "1280x720x24" >/dev/null 2>&1 & export DISPLAY=:1.0 fluxbox >/dev/null 2>&1 & npx playwright test --reporter github --shard=${{ matrix.shard }}/3 From e679b08aa1de413d8f86e0d99255951ae297d3c1 Mon Sep 17 00:00:00 2001 From: Konstantinos Kaloutas Date: Mon, 22 May 2023 13:11:11 +0300 Subject: [PATCH 033/190] fix: initial state --- src/electron/electron/handler.cljs | 3 ++- src/electron/electron/window.cljs | 3 +-- src/main/frontend/ui.cljs | 6 ++++-- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/electron/electron/handler.cljs b/src/electron/electron/handler.cljs index ee4b73eae96..805d15c7fbd 100644 --- a/src/electron/electron/handler.cljs +++ b/src/electron/electron/handler.cljs @@ -422,7 +422,8 @@ js/__dirname) (defmethod handle :getAppBaseInfo [^js win [_ _opts]] - {:isFullScreen (.isFullScreen win)}) + {:isFullScreen (.isFullScreen win) + :isMaximized (.isMaximized win)}) (defmethod handle :getAssetsFiles [^js win [_ {:keys [exts]}]] (when-let [graph-path (state/get-window-graph-path win)] diff --git a/src/electron/electron/window.cljs b/src/electron/electron/window.cljs index c04982cb96a..a8f59ecdb5b 100644 --- a/src/electron/electron/window.cljs +++ b/src/electron/electron/window.cljs @@ -183,8 +183,7 @@ (doto web-contents (.on "will-navigate" will-navigate-handler) (.on "did-start-navigation" #(.send web-contents "persist-zoom-level" (.getZoomLevel web-contents))) - (.on "page-title-updated" #(do (.send web-contents "maximize" (.isMaximized win)) - (.send web-contents "restore-zoom-level"))) + (.on "page-title-updated" #(.send web-contents "restore-zoom-level")) (.setWindowOpenHandler window-open-handler)) (doto win diff --git a/src/main/frontend/ui.cljs b/src/main/frontend/ui.cljs index 65516f1ac02..a20dd83ada3 100644 --- a/src/main/frontend/ui.cljs +++ b/src/main/frontend/ui.cljs @@ -372,8 +372,10 @@ ["maximize" #(state/set-state! :electron/window-maximized? %)]]] (.on js/window.apis event function)) - (p/then (ipc/ipc :getAppBaseInfo) #(let [{:keys [isFullScreen]} (js->clj % :keywordize-keys true)] - (and isFullScreen (.add cl "is-fullscreen"))))))) + (p/then (ipc/ipc :getAppBaseInfo) #(let [{:keys [isFullScreen isMaximized]} (js->clj % :keywordize-keys true)] + (when isFullScreen ((.add cl "is-fullscreen") + (state/set-state! :electron/window-fullscreen? true))) + (when isMaximized (state/set-state! :electron/window-maximized? true))))))) (defn inject-dynamic-style-node! [] From 03d83ac807486c79cf4dee3c2c556cb4996dac98 Mon Sep 17 00:00:00 2001 From: Konstantinos Kaloutas Date: Mon, 22 May 2023 13:11:46 +0300 Subject: [PATCH 034/190] fix install --- .github/workflows/build.yml | 2 +- .github/workflows/e2e.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index dd2e1a6ad38..8952e3b1439 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -183,7 +183,7 @@ jobs: run: git diff --exit-code static/yarn.lock - name: Install fluxbox - run: sudo apt-get update && apt-get install -y fluxbox + run: sudo apt-get update && sudo apt-get install -y fluxbox - name: Run Playwright test - 1/2 run: Xvfb :1 -screen 0 "1280x720x24" >/dev/null 2>&1 & export DISPLAY=:1.0 fluxbox >/dev/null 2>&1 & npx playwright test --reporter github --shard=1/2 diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index 8e3b949a0f1..d1f42a3532d 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -138,7 +138,7 @@ jobs: run: git diff --exit-code static/yarn.lock - name: Install fluxbox - run: sudo apt-get update && apt-get install -y fluxbox + run: sudo apt-get update && sudo apt-get install -y fluxbox - name: Run Playwright test run: Xvfb :1 -screen 0 "1280x720x24" >/dev/null 2>&1 & export DISPLAY=:1.0 fluxbox >/dev/null 2>&1 & npx playwright test --reporter github --shard=${{ matrix.shard }}/3 From 2dff7336c9c4260d841f356645db9ffdae14aa3f Mon Sep 17 00:00:00 2001 From: Konstantinos Kaloutas Date: Mon, 22 May 2023 14:10:08 +0300 Subject: [PATCH 035/190] test Xvfb --- .github/workflows/build.yml | 7 +++++-- .github/workflows/e2e.yml | 5 ++++- src/main/frontend/components/container.cljs | 2 -- src/main/frontend/state.cljs | 1 - 4 files changed, 9 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8952e3b1439..11ee3204d1a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -185,15 +185,18 @@ jobs: - name: Install fluxbox run: sudo apt-get update && sudo apt-get install -y fluxbox + - name: Export display + run: export DISPLAY=:99 + - name: Run Playwright test - 1/2 - run: Xvfb :1 -screen 0 "1280x720x24" >/dev/null 2>&1 & export DISPLAY=:1.0 fluxbox >/dev/null 2>&1 & npx playwright test --reporter github --shard=1/2 + run: Xvfb :99 -screen 0 1024x768x16 & fluxbox & npx playwright test --reporter github --shard=1/2 env: LOGSEQ_CI: true DEBUG: "pw:api" RELEASE: true # skip dev only test - name: Run Playwright test - 2/2 - run: Xvfb :1 -screen 0 "1280x720x24" >/dev/null 2>&1 & export DISPLAY=:1.0 fluxbox >/dev/null 2>&1 & npx playwright test --reporter github --shard=2/2 + run: Xvfb :99 -screen 0 1024x768x16 & fluxbox & npx playwright test --reporter github --shard=2/2 env: LOGSEQ_CI: true DEBUG: "pw:api" diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index d1f42a3532d..49ead9491a6 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -140,8 +140,11 @@ jobs: - name: Install fluxbox run: sudo apt-get update && sudo apt-get install -y fluxbox + - name: Export display + run: export DISPLAY=:99 + - name: Run Playwright test - run: Xvfb :1 -screen 0 "1280x720x24" >/dev/null 2>&1 & export DISPLAY=:1.0 fluxbox >/dev/null 2>&1 & npx playwright test --reporter github --shard=${{ matrix.shard }}/3 + run: Xvfb :99 -screen 0 1024x768x16 & fluxbox & npx playwright test --reporter github --shard=${{ matrix.shard }}/3 env: LOGSEQ_CI: true DEBUG: "pw:api" diff --git a/src/main/frontend/components/container.cljs b/src/main/frontend/components/container.cljs index 30e44e81037..6598128efb2 100644 --- a/src/main/frontend/components/container.cljs +++ b/src/main/frontend/components/container.cljs @@ -776,8 +776,6 @@ [:div.#app-container [:div#left-container {:class (if (state/sub :ui/sidebar-open?) "overflow-hidden" "w-full")} - - (header/header {:open-fn open-fn :light? light? :current-repo current-repo diff --git a/src/main/frontend/state.cljs b/src/main/frontend/state.cljs index 05c6a82b2c8..c315082eee1 100644 --- a/src/main/frontend/state.cljs +++ b/src/main/frontend/state.cljs @@ -281,7 +281,6 @@ :whiteboard/last-persisted-at {} :whiteboard/pending-tx-data {} :history/page-only-mode? false - ;; db tx-id -> editor cursor :history/tx->editor-cursor {}}))) From a30a308ed0e05e14847813c9f419fbd8361874f8 Mon Sep 17 00:00:00 2001 From: Konstantinos Kaloutas Date: Mon, 22 May 2023 14:22:13 +0300 Subject: [PATCH 036/190] e2e fix --- .github/workflows/build.yml | 15 +++++++++------ .github/workflows/e2e.yml | 13 ++++++++----- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 11ee3204d1a..6676feae206 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -182,21 +182,24 @@ jobs: - name: Ensure static yarn.lock is up to date run: git diff --exit-code static/yarn.lock - - name: Install fluxbox - run: sudo apt-get update && sudo apt-get install -y fluxbox - - name: Export display - run: export DISPLAY=:99 + run: export DISPLAY=:1 + + - name: Start XVFB + run: Xvfb $DISPLAY -screen 0 1024x768x16 + + - name: Install and start fluxbox + run: sudo apt-get update && sudo apt-get install -y fluxbox && fluxbox - name: Run Playwright test - 1/2 - run: Xvfb :99 -screen 0 1024x768x16 & fluxbox & npx playwright test --reporter github --shard=1/2 + run: xvfb-run -- npx playwright test --reporter github --shard=1/2 env: LOGSEQ_CI: true DEBUG: "pw:api" RELEASE: true # skip dev only test - name: Run Playwright test - 2/2 - run: Xvfb :99 -screen 0 1024x768x16 & fluxbox & npx playwright test --reporter github --shard=2/2 + run: xvfb-run -- npx playwright test --reporter github --shard=2/2 env: LOGSEQ_CI: true DEBUG: "pw:api" diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index 49ead9491a6..1b5674df215 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -137,14 +137,17 @@ jobs: - name: Ensure static yarn.lock is up to date run: git diff --exit-code static/yarn.lock - - name: Install fluxbox - run: sudo apt-get update && sudo apt-get install -y fluxbox - - name: Export display - run: export DISPLAY=:99 + run: export DISPLAY=:1 + + - name: Start XVFB + run: Xvfb $DISPLAY -screen 0 1024x768x16 + + - name: Install and start fluxbox + run: sudo apt-get update && sudo apt-get install -y fluxbox && fluxbox - name: Run Playwright test - run: Xvfb :99 -screen 0 1024x768x16 & fluxbox & npx playwright test --reporter github --shard=${{ matrix.shard }}/3 + run: xvfb-run -- npx playwright test --reporter github --shard=${{ matrix.shard }}/3 env: LOGSEQ_CI: true DEBUG: "pw:api" From 3a9c448d92f38d7357f77bffd9780965a5185589 Mon Sep 17 00:00:00 2001 From: Konstantinos Kaloutas Date: Mon, 22 May 2023 14:54:19 +0300 Subject: [PATCH 037/190] fix: e2e --- .github/workflows/build.yml | 6 +++--- .github/workflows/e2e.yml | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6676feae206..cfa784a0615 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -186,13 +186,13 @@ jobs: run: export DISPLAY=:1 - name: Start XVFB - run: Xvfb $DISPLAY -screen 0 1024x768x16 + run: Xvfb :1 -screen 0 1024x768x16 && - name: Install and start fluxbox - run: sudo apt-get update && sudo apt-get install -y fluxbox && fluxbox + run: sudo apt-get update && sudo apt-get install -y fluxbox && fluxbox && - name: Run Playwright test - 1/2 - run: xvfb-run -- npx playwright test --reporter github --shard=1/2 + run: npx playwright test --reporter github --shard=1/2 env: LOGSEQ_CI: true DEBUG: "pw:api" diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index 1b5674df215..cf8462be64f 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -141,10 +141,10 @@ jobs: run: export DISPLAY=:1 - name: Start XVFB - run: Xvfb $DISPLAY -screen 0 1024x768x16 + run: Xvfb $DISPLAY -screen 0 1024x768x16 && - name: Install and start fluxbox - run: sudo apt-get update && sudo apt-get install -y fluxbox && fluxbox + run: sudo apt-get update && sudo apt-get install -y fluxbox && fluxbox && - name: Run Playwright test run: xvfb-run -- npx playwright test --reporter github --shard=${{ matrix.shard }}/3 From 956d789737b49f7479607645a3bde0de1ca64430 Mon Sep 17 00:00:00 2001 From: Konstantinos Kaloutas Date: Mon, 22 May 2023 15:30:06 +0300 Subject: [PATCH 038/190] e2e test --- .github/workflows/build.yml | 15 +++++++-------- .github/workflows/e2e.yml | 16 +++++++++------- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index cfa784a0615..a39d4b617aa 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -182,14 +182,13 @@ jobs: - name: Ensure static yarn.lock is up to date run: git diff --exit-code static/yarn.lock - - name: Export display - run: export DISPLAY=:1 + - name: Install fluxbox + run: sudo apt-get update && sudo apt-get install -y fluxbox - - name: Start XVFB - run: Xvfb :1 -screen 0 1024x768x16 && - - - name: Install and start fluxbox - run: sudo apt-get update && sudo apt-get install -y fluxbox && fluxbox && + - name: Run Xvfb + run: | + Xvfb :1 -screen 0 1024x768x24 >/dev/null 2>&1 & + export DISPLAY=:1.0 - name: Run Playwright test - 1/2 run: npx playwright test --reporter github --shard=1/2 @@ -199,7 +198,7 @@ jobs: RELEASE: true # skip dev only test - name: Run Playwright test - 2/2 - run: xvfb-run -- npx playwright test --reporter github --shard=2/2 + run: npx playwright test --reporter github --shard=2/2 env: LOGSEQ_CI: true DEBUG: "pw:api" diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index cf8462be64f..70bef3a3758 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -137,17 +137,19 @@ jobs: - name: Ensure static yarn.lock is up to date run: git diff --exit-code static/yarn.lock - - name: Export display - run: export DISPLAY=:1 + - name: Install fluxbox + run: sudo apt-get update && sudo apt-get install -y fluxbox - - name: Start XVFB - run: Xvfb $DISPLAY -screen 0 1024x768x16 && + - name: Run Xvfb + run: | + Xvfb :1 -screen 0 1024x768x24 >/dev/null 2>&1 & + export DISPLAY=:1.0 - - name: Install and start fluxbox - run: sudo apt-get update && sudo apt-get install -y fluxbox && fluxbox && + - name: Run fluxbox + run: fluxbox >/dev/null 2>&1 - name: Run Playwright test - run: xvfb-run -- npx playwright test --reporter github --shard=${{ matrix.shard }}/3 + run: npx playwright test --reporter github --shard=${{ matrix.shard }}/3 env: LOGSEQ_CI: true DEBUG: "pw:api" From 2969d777ef3062fbde90505f5d1c0c2db7842f07 Mon Sep 17 00:00:00 2001 From: Konstantinos Kaloutas Date: Mon, 22 May 2023 15:31:10 +0300 Subject: [PATCH 039/190] run fluxbox --- .github/workflows/build.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a39d4b617aa..17bc1ead295 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -190,6 +190,9 @@ jobs: Xvfb :1 -screen 0 1024x768x24 >/dev/null 2>&1 & export DISPLAY=:1.0 + - name: Run fluxbox + run: fluxbox >/dev/null 2>&1 + - name: Run Playwright test - 1/2 run: npx playwright test --reporter github --shard=1/2 env: From ba8c8d6f7bbb6544df9899e11cea7a805ff3b890 Mon Sep 17 00:00:00 2001 From: Konstantinos Kaloutas Date: Mon, 22 May 2023 15:45:01 +0300 Subject: [PATCH 040/190] e2e fix --- .github/workflows/build.yml | 6 +++--- .github/workflows/e2e.yml | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 17bc1ead295..69d20427b60 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -191,17 +191,17 @@ jobs: export DISPLAY=:1.0 - name: Run fluxbox - run: fluxbox >/dev/null 2>&1 + run: DISPLAY=:1.0 fluxbox >/dev/null 2>&1 - name: Run Playwright test - 1/2 - run: npx playwright test --reporter github --shard=1/2 + run: DISPLAY=:1.0 npx playwright test --reporter github --shard=1/2 env: LOGSEQ_CI: true DEBUG: "pw:api" RELEASE: true # skip dev only test - name: Run Playwright test - 2/2 - run: npx playwright test --reporter github --shard=2/2 + run: DISPLAY=:1.0 npx playwright test --reporter github --shard=2/2 env: LOGSEQ_CI: true DEBUG: "pw:api" diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index 70bef3a3758..a9bfcd40c95 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -146,10 +146,10 @@ jobs: export DISPLAY=:1.0 - name: Run fluxbox - run: fluxbox >/dev/null 2>&1 + run: DISPLAY=:1.0 fluxbox >/dev/null 2>&1 - name: Run Playwright test - run: npx playwright test --reporter github --shard=${{ matrix.shard }}/3 + run: DISPLAY=:1.0 npx playwright test --reporter github --shard=${{ matrix.shard }}/3 env: LOGSEQ_CI: true DEBUG: "pw:api" From 478c21cb9227f678e2e11cca2eadaedb24e8aca7 Mon Sep 17 00:00:00 2001 From: Konstantinos Kaloutas Date: Mon, 22 May 2023 16:03:05 +0300 Subject: [PATCH 041/190] e2e --- .github/workflows/build.yml | 8 +++----- .github/workflows/e2e.yml | 8 +++----- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 69d20427b60..6b651634dff 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -182,16 +182,14 @@ jobs: - name: Ensure static yarn.lock is up to date run: git diff --exit-code static/yarn.lock - - name: Install fluxbox + - name: Install Fluxbox run: sudo apt-get update && sudo apt-get install -y fluxbox - - name: Run Xvfb + - name: Run Xvfb and Fluxbox run: | Xvfb :1 -screen 0 1024x768x24 >/dev/null 2>&1 & export DISPLAY=:1.0 - - - name: Run fluxbox - run: DISPLAY=:1.0 fluxbox >/dev/null 2>&1 + fluxbox >/dev/null 2>&1 - name: Run Playwright test - 1/2 run: DISPLAY=:1.0 npx playwright test --reporter github --shard=1/2 diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index a9bfcd40c95..1621d3357e7 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -137,16 +137,14 @@ jobs: - name: Ensure static yarn.lock is up to date run: git diff --exit-code static/yarn.lock - - name: Install fluxbox + - name: Install Fluxbox run: sudo apt-get update && sudo apt-get install -y fluxbox - - name: Run Xvfb + - name: Run Xvfb and Fluxbox run: | Xvfb :1 -screen 0 1024x768x24 >/dev/null 2>&1 & export DISPLAY=:1.0 - - - name: Run fluxbox - run: DISPLAY=:1.0 fluxbox >/dev/null 2>&1 + fluxbox >/dev/null 2>&1 - name: Run Playwright test run: DISPLAY=:1.0 npx playwright test --reporter github --shard=${{ matrix.shard }}/3 From b24e173a1280e17fd8bb0a285e5a4b54033c4c4b Mon Sep 17 00:00:00 2001 From: Konstantinos Kaloutas Date: Mon, 22 May 2023 16:32:47 +0300 Subject: [PATCH 042/190] test --- .github/workflows/build.yml | 5 ++--- .github/workflows/e2e.yml | 5 ++--- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6b651634dff..82422fbfbcf 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -189,17 +189,16 @@ jobs: run: | Xvfb :1 -screen 0 1024x768x24 >/dev/null 2>&1 & export DISPLAY=:1.0 - fluxbox >/dev/null 2>&1 - name: Run Playwright test - 1/2 - run: DISPLAY=:1.0 npx playwright test --reporter github --shard=1/2 + run: DISPLAY=:1.0 fluxbox >/dev/null 2>&1 && npx playwright test --reporter github --shard=1/2 env: LOGSEQ_CI: true DEBUG: "pw:api" RELEASE: true # skip dev only test - name: Run Playwright test - 2/2 - run: DISPLAY=:1.0 npx playwright test --reporter github --shard=2/2 + run: DISPLAY=:1.0 fluxbox >/dev/null 2>&1 && npx playwright test --reporter github --shard=2/2 env: LOGSEQ_CI: true DEBUG: "pw:api" diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index 1621d3357e7..1f943ea1ccc 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -140,14 +140,13 @@ jobs: - name: Install Fluxbox run: sudo apt-get update && sudo apt-get install -y fluxbox - - name: Run Xvfb and Fluxbox + - name: Run Xvfb run: | Xvfb :1 -screen 0 1024x768x24 >/dev/null 2>&1 & export DISPLAY=:1.0 - fluxbox >/dev/null 2>&1 - name: Run Playwright test - run: DISPLAY=:1.0 npx playwright test --reporter github --shard=${{ matrix.shard }}/3 + run: DISPLAY=:1.0 fluxbox >/dev/null 2>&1 && npx playwright test --reporter github --shard=${{ matrix.shard }}/3 env: LOGSEQ_CI: true DEBUG: "pw:api" From 57c8bfe6c595090d0d2195c22fe4b1f3666e90f7 Mon Sep 17 00:00:00 2001 From: Konstantinos Kaloutas Date: Mon, 22 May 2023 17:23:59 +0300 Subject: [PATCH 043/190] e2e test fix --- .github/workflows/build.yml | 9 ++++++--- .github/workflows/e2e.yml | 7 +++++-- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 82422fbfbcf..9c27132b66c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -185,20 +185,23 @@ jobs: - name: Install Fluxbox run: sudo apt-get update && sudo apt-get install -y fluxbox - - name: Run Xvfb and Fluxbox + - name: Run XVFB run: | Xvfb :1 -screen 0 1024x768x24 >/dev/null 2>&1 & export DISPLAY=:1.0 + - name: Start Fluxbox + run: fluxbox >/dev/null 2>&1 & + - name: Run Playwright test - 1/2 - run: DISPLAY=:1.0 fluxbox >/dev/null 2>&1 && npx playwright test --reporter github --shard=1/2 + run: npx playwright test --reporter github --shard=1/2 env: LOGSEQ_CI: true DEBUG: "pw:api" RELEASE: true # skip dev only test - name: Run Playwright test - 2/2 - run: DISPLAY=:1.0 fluxbox >/dev/null 2>&1 && npx playwright test --reporter github --shard=2/2 + run: npx playwright test --reporter github --shard=2/2 env: LOGSEQ_CI: true DEBUG: "pw:api" diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index 1f943ea1ccc..0c0ffeee9b5 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -140,13 +140,16 @@ jobs: - name: Install Fluxbox run: sudo apt-get update && sudo apt-get install -y fluxbox - - name: Run Xvfb + - name: Run XVFB run: | Xvfb :1 -screen 0 1024x768x24 >/dev/null 2>&1 & export DISPLAY=:1.0 + - name: Start Fluxbox + run: fluxbox >/dev/null 2>&1 & + - name: Run Playwright test - run: DISPLAY=:1.0 fluxbox >/dev/null 2>&1 && npx playwright test --reporter github --shard=${{ matrix.shard }}/3 + run: npx playwright test --reporter github --shard=${{ matrix.shard }}/3 env: LOGSEQ_CI: true DEBUG: "pw:api" From 1b787b279fb9cd81e709535ceacfe8c7e510fcd2 Mon Sep 17 00:00:00 2001 From: Konstantinos Kaloutas Date: Mon, 22 May 2023 17:51:42 +0300 Subject: [PATCH 044/190] add display --- .github/workflows/build.yml | 6 +++--- .github/workflows/e2e.yml | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 9c27132b66c..2a52d23c1e8 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -191,17 +191,17 @@ jobs: export DISPLAY=:1.0 - name: Start Fluxbox - run: fluxbox >/dev/null 2>&1 & + run: DISPLAY=:1.0 fluxbox >/dev/null 2>&1 & - name: Run Playwright test - 1/2 - run: npx playwright test --reporter github --shard=1/2 + run: DISPLAY=:1.0 npx playwright test --reporter github --shard=1/2 env: LOGSEQ_CI: true DEBUG: "pw:api" RELEASE: true # skip dev only test - name: Run Playwright test - 2/2 - run: npx playwright test --reporter github --shard=2/2 + run: DISPLAY=:1.0 npx playwright test --reporter github --shard=2/2 env: LOGSEQ_CI: true DEBUG: "pw:api" diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index 0c0ffeee9b5..cefcd402faa 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -146,10 +146,10 @@ jobs: export DISPLAY=:1.0 - name: Start Fluxbox - run: fluxbox >/dev/null 2>&1 & + run: DISPLAY=:1.0 fluxbox >/dev/null 2>&1 & - name: Run Playwright test - run: npx playwright test --reporter github --shard=${{ matrix.shard }}/3 + run: DISPLAY=:1.0 npx playwright test --reporter github --shard=${{ matrix.shard }}/3 env: LOGSEQ_CI: true DEBUG: "pw:api" From d7f4f5943fbbde6a0a7a7c2e41afe670b4b9f8c6 Mon Sep 17 00:00:00 2001 From: Konstantinos Kaloutas Date: Tue, 23 May 2023 11:31:37 +0300 Subject: [PATCH 045/190] add test --- .github/workflows/build.yml | 4 +--- .github/workflows/e2e.yml | 4 +--- e2e-tests/window.spec.ts | 15 ++++++++++++--- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 2a52d23c1e8..d51fadad4d4 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -186,9 +186,7 @@ jobs: run: sudo apt-get update && sudo apt-get install -y fluxbox - name: Run XVFB - run: | - Xvfb :1 -screen 0 1024x768x24 >/dev/null 2>&1 & - export DISPLAY=:1.0 + run: Xvfb :1 -screen 0 1024x768x24 >/dev/null 2>&1 & - name: Start Fluxbox run: DISPLAY=:1.0 fluxbox >/dev/null 2>&1 & diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index cefcd402faa..dbb0138c5ba 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -141,9 +141,7 @@ jobs: run: sudo apt-get update && sudo apt-get install -y fluxbox - name: Run XVFB - run: | - Xvfb :1 -screen 0 1024x768x24 >/dev/null 2>&1 & - export DISPLAY=:1.0 + run: Xvfb :1 -screen 0 1024x768x24 >/dev/null 2>&1 & - name: Start Fluxbox run: DISPLAY=:1.0 fluxbox >/dev/null 2>&1 & diff --git a/e2e-tests/window.spec.ts b/e2e-tests/window.spec.ts index c508971f759..97eb50f7ff5 100644 --- a/e2e-tests/window.spec.ts +++ b/e2e-tests/window.spec.ts @@ -3,19 +3,28 @@ import { test } from './fixtures' import { IsMac } from './utils'; if (!IsMac) { - test('Window should not be maximized on first launch', async ({ page, app }) => { + test('window should not be maximized on first launch', async ({ page, app }) => { await expect(page.locator('.window-controls .maximize-toggle.maximize')).toHaveCount(1) }) - test('Window should be maximized and icon should change on maximize-toggle click', async ({ page }) => { + test('window should be maximized and icon should change on maximize-toggle click', async ({ page }) => { await page.click('.window-controls .maximize-toggle.maximize') await expect(page.locator('.window-controls .maximize-toggle.restore')).toHaveCount(1) }) - test('Window should be restored and icon should change on maximize-toggle click', async ({ page }) => { + test('window should be restored and icon should change on maximize-toggle click', async ({ page }) => { await page.click('.window-controls .maximize-toggle.restore') await expect(page.locator('.window-controls .maximize-toggle.maximize')).toHaveCount(1) }) + + test('window controls should be hidden on fullscreen mode', async ({ page }) => { + // Keyboard press F11 won't work, probably because it's a chromium shortcut (not a document event) + await page.evaluate(`window.document.body.requestFullscreen()`) + + await expect(page.locator('.window-controls')).toHaveCount(0) + await page.evaluate(`window.document.exitFullscreen()`) + }) + } From 8b4bfe0d2039bf3087c0b36bb40a89ce779e5e9f Mon Sep 17 00:00:00 2001 From: Konstantinos Kaloutas Date: Tue, 23 May 2023 12:13:29 +0300 Subject: [PATCH 046/190] fix: history stack --- src/main/frontend/components/right_sidebar.cljs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/frontend/components/right_sidebar.cljs b/src/main/frontend/components/right_sidebar.cljs index 706d704bc2c..d12705e5bbe 100644 --- a/src/main/frontend/components/right_sidebar.cljs +++ b/src/main/frontend/components/right_sidebar.cljs @@ -73,6 +73,9 @@ (when v [:.ml-4 (ui/foldable [:div (str k)] [:.ml-4 (case k + :tx-id + [:.my-1 [:pre.code.pre-wrap-white-space.bg-base-4 (str v)]] + :blocks (map (fn [block] [:.my-1 [:pre.code.pre-wrap-white-space.bg-base-4 (str block)]]) v) From c6ed305439aa7d120e77a0c901fbaa7d61e94de2 Mon Sep 17 00:00:00 2001 From: Konstantinos Kaloutas Date: Tue, 23 May 2023 12:14:46 +0300 Subject: [PATCH 047/190] update description --- src/main/frontend/dicts/en.cljc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/frontend/dicts/en.cljc b/src/main/frontend/dicts/en.cljc index 931acd5e825..cfe26066a50 100644 --- a/src/main/frontend/dicts/en.cljc +++ b/src/main/frontend/dicts/en.cljc @@ -233,7 +233,7 @@ :settings-page/sync "Sync" :settings-page/enable-whiteboards "Whiteboards" :settings-page/native-titlebar "Native title bar" - :settings-page/native-titlebar-desc "Enables the native window title bar on Windows and Linux, and hides the custom window controls." + :settings-page/native-titlebar-desc "Enables the native window title bar on Windows and Linux." :yes "Yes" :submit "Submit" From 766e4844e78b112de82f6d5a443bf3d685c00419 Mon Sep 17 00:00:00 2001 From: Konstantinos Kaloutas Date: Fri, 26 May 2023 10:38:45 +0300 Subject: [PATCH 048/190] chore: document fluxbox and xvfb --- .github/workflows/build.yml | 2 ++ .github/workflows/e2e.yml | 2 ++ 2 files changed, 4 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d51fadad4d4..632ae35ca41 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -185,9 +185,11 @@ jobs: - name: Install Fluxbox run: sudo apt-get update && sudo apt-get install -y fluxbox + # Emulate a virtual framebuffer on machines with no display hardware - name: Run XVFB run: Xvfb :1 -screen 0 1024x768x24 >/dev/null 2>&1 & + # Start a lightweight window manager to simulate window actions (maximize,restore etc) - name: Start Fluxbox run: DISPLAY=:1.0 fluxbox >/dev/null 2>&1 & diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index dbb0138c5ba..cf220e2c08e 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -140,9 +140,11 @@ jobs: - name: Install Fluxbox run: sudo apt-get update && sudo apt-get install -y fluxbox + # Emulate a virtual framebuffer on machines with no display hardware - name: Run XVFB run: Xvfb :1 -screen 0 1024x768x24 >/dev/null 2>&1 & + # Start a lightweight window manager to simulate window actions (maximize,restore etc) - name: Start Fluxbox run: DISPLAY=:1.0 fluxbox >/dev/null 2>&1 & From 675639576317fbeeb0d0c241a52c6e3a1ae7d308 Mon Sep 17 00:00:00 2001 From: Konstantinos Kaloutas Date: Fri, 26 May 2023 13:25:41 +0300 Subject: [PATCH 049/190] enhance: introduce exit full-screen button --- e2e-tests/window.spec.ts | 8 +++- src/electron/electron/handler.cljs | 3 ++ src/main/frontend/components/container.cljs | 3 +- src/main/frontend/components/container.css | 8 ++++ .../frontend/components/window_controls.cljs | 44 ++++++++++++------- src/main/frontend/state.cljs | 1 - src/main/frontend/ui.cljs | 4 +- src/resources/dicts/en.edn | 1 + 8 files changed, 49 insertions(+), 23 deletions(-) diff --git a/e2e-tests/window.spec.ts b/e2e-tests/window.spec.ts index 97eb50f7ff5..3e9adc3d647 100644 --- a/e2e-tests/window.spec.ts +++ b/e2e-tests/window.spec.ts @@ -23,8 +23,12 @@ if (!IsMac) { // Keyboard press F11 won't work, probably because it's a chromium shortcut (not a document event) await page.evaluate(`window.document.body.requestFullscreen()`) - await expect(page.locator('.window-controls')).toHaveCount(0) - await page.evaluate(`window.document.exitFullscreen()`) + await expect(page.locator('.window-controls .maximize-toggle')).toHaveCount(0) }) + test('window controls should be visible when we exit fullscreen mode', async ({ page }) => { + await page.click('.window-controls .fullscreen-toggle') + + await expect(page.locator('.window-controls')).toHaveCount(1) + }) } diff --git a/src/electron/electron/handler.cljs b/src/electron/electron/handler.cljs index 805d15c7fbd..68410b4b1df 100644 --- a/src/electron/electron/handler.cljs +++ b/src/electron/electron/handler.cljs @@ -608,6 +608,9 @@ (.unmaximize win) (.maximize win))) +(defmethod handle :window-toggle-fullscreen [^js win] + (.setFullScreen win (not (.isFullScreen win)))) + (defmethod handle :window-close [^js win] (.close win)) diff --git a/src/main/frontend/components/container.cljs b/src/main/frontend/components/container.cljs index 6598128efb2..c36a996a9ed 100644 --- a/src/main/frontend/components/container.cljs +++ b/src/main/frontend/components/container.cljs @@ -731,9 +731,8 @@ indexeddb-support? (state/sub :indexeddb/support?) page? (= :page route-name) home? (= :home route-name) - fullscreen? (state/sub :electron/window-fullscreen?) native-titlebar? (state/sub [:electron/user-cfgs :window/native-titlebar?]) - window-controls? (and (util/electron?) (not util/mac?) (not fullscreen?) (not native-titlebar?)) + window-controls? (and (util/electron?) (not util/mac?) (not native-titlebar?)) edit? (:editor/editing? @state/state) default-home (get-default-home-if-valid) logged? (user-handler/logged-in?) diff --git a/src/main/frontend/components/container.css b/src/main/frontend/components/container.css index 94c64e012a9..ed8d157ca05 100644 --- a/src/main/frontend/components/container.css +++ b/src/main/frontend/components/container.css @@ -455,12 +455,20 @@ &.ls-right-sidebar-open { .cp__right-sidebar-topbar { margin-right: 144px; + + .is-fullscreen & { + margin-right: 48px; + } } } &:not(.ls-right-sidebar-open) { .cp__header > .r { margin-right: 144px; + + .is-fullscreen & { + margin-right: 48px; + } } } } diff --git a/src/main/frontend/components/window_controls.cljs b/src/main/frontend/components/window_controls.cljs index ba2d97de0b4..8506dc8f3e8 100644 --- a/src/main/frontend/components/window_controls.cljs +++ b/src/main/frontend/components/window_controls.cljs @@ -3,6 +3,7 @@ [frontend.components.svg :as svg] [frontend.context.i18n :refer [t]] [frontend.state :as state] + [frontend.ui :as ui] [rum.core :as rum])) (defn minimize @@ -17,24 +18,35 @@ [] (ipc/ipc "window-close")) +(defn toggle-fullscreen + [] + (ipc/ipc "window-toggle-fullscreen")) + (rum/defc container < rum/reactive [] - (let [maximized? (state/sub :electron/window-maximized?)] + (let [maximized? (state/sub :electron/window-maximized?) + fullscreen? (state/sub :electron/window-fullscreen?)] [:div.window-controls.flex - [:button.button.icon.minimize - {:title (t :window/minimize) - :on-click minimize} - (svg/window-minimize)] + (if fullscreen? + [:button.button.icon.fullscreen-toggle + {:title (t :window/exit-fullscreen) + :on-click toggle-fullscreen} + (ui/icon "arrows-minimize")] + [:<> + [:button.button.icon.minimize + {:title (t :window/minimize) + :on-click minimize} + (svg/window-minimize)] - [:button.button.icon.maximize-toggle - {:title (if maximized? (t :window/restore) (t :window/maximize)) - :class (if maximized? "restore" "maximize") - :on-click toggle-maximized} - (if maximized? - (svg/window-restore) - (svg/window-maximize))] + [:button.button.icon.maximize-toggle + {:title (if maximized? (t :window/restore) (t :window/maximize)) + :class (if maximized? "restore" "maximize") + :on-click toggle-maximized} + (if maximized? + (svg/window-restore) + (svg/window-maximize))] - [:button.button.icon.close - {:title (t :window/close) - :on-click close} - (svg/window-close)]])) + [:button.button.icon.close + {:title (t :window/close) + :on-click close} + (svg/window-close)]])])) diff --git a/src/main/frontend/state.cljs b/src/main/frontend/state.cljs index 0245283b816..f87c3c29824 100644 --- a/src/main/frontend/state.cljs +++ b/src/main/frontend/state.cljs @@ -73,7 +73,6 @@ :ui/navigation-item-collapsed? {} ;; right sidebar - :ui/fullscreen? false :ui/settings-open? false :ui/sidebar-open? false :ui/sidebar-width "40%" diff --git a/src/main/frontend/ui.cljs b/src/main/frontend/ui.cljs index a20dd83ada3..592299481ac 100644 --- a/src/main/frontend/ui.cljs +++ b/src/main/frontend/ui.cljs @@ -367,8 +367,8 @@ (doseq [[event function] [["persist-zoom-level" #(storage/set :zoom-level %)] ["restore-zoom-level" #(when-let [zoom-level (storage/get :zoom-level)] (js/window.apis.setZoomLevel zoom-level))] - ["full-screen" #((js-invoke cl (if (= % "enter") "add" "remove") "is-fullscreen") - (state/set-state! :electron/window-fullscreen? (= % "enter")))] + ["full-screen" #(do (js-invoke cl (if (= % "enter") "add" "remove") "is-fullscreen") + (state/set-state! :electron/window-fullscreen? (= % "enter")))] ["maximize" #(state/set-state! :electron/window-maximized? %)]]] (.on js/window.apis event function)) diff --git a/src/resources/dicts/en.edn b/src/resources/dicts/en.edn index 36b4e619054..bb832f3b6bb 100644 --- a/src/resources/dicts/en.edn +++ b/src/resources/dicts/en.edn @@ -386,6 +386,7 @@ :window/maximize "Maximize" :window/restore "Restore" :window/close "Close" + :window/exit-fullscreen "Exit full screen" ;; Commands are nested for now to stay in sync with the shortcuts system. ;; Other languages should not nest keys under :commands From f98ee65b8af4e5111f1ec3ca7d19566a7431e357 Mon Sep 17 00:00:00 2001 From: charlie Date: Sun, 28 May 2023 23:23:41 +0800 Subject: [PATCH 050/190] fix(query): missing :block/properties-order attr for the custom query blocks --- src/main/frontend/db/model.cljs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/frontend/db/model.cljs b/src/main/frontend/db/model.cljs index 1ea8f8a13c6..d60bcf154e9 100644 --- a/src/main/frontend/db/model.cljs +++ b/src/main/frontend/db/model.cljs @@ -49,6 +49,7 @@ :block/marker :block/priority :block/properties + :block/properties-order :block/properties-text-values :block/pre-block? :block/scheduled From 607345fa873c7b43bfc544509dede1f7c4e716c7 Mon Sep 17 00:00:00 2001 From: Bad3r Date: Sun, 28 May 2023 02:05:11 -0400 Subject: [PATCH 051/190] fix: Ensure space rendering in menu item titles --- src/main/frontend/components/plugins.cljs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/frontend/components/plugins.cljs b/src/main/frontend/components/plugins.cljs index 82df11102da..dfadc2a5707 100644 --- a/src/main/frontend/components/plugins.cljs +++ b/src/main/frontend/components/plugins.cljs @@ -589,7 +589,7 @@ :options {:on-click #(p/let [root (plugin-handler/get-ls-dotdir-root)] (js/apis.openPath (str root "/preferences.json")))}} - {:title [:span.flex.items-center (ui/icon "bug") "Open " [:code " ~/.logseq"]] + {:title [:span.flex.items-center (ui/icon "bug") "Open\u00A0" [:code "~/.logseq"]] :options {:on-click #(p/let [root (plugin-handler/get-ls-dotdir-root)] (js/apis.openPath root))}}])) From ec643111dcaef5c29935acb6f61a9dd3a7e34073 Mon Sep 17 00:00:00 2001 From: Steven Allen Date: Sun, 28 May 2023 21:13:51 -0700 Subject: [PATCH 052/190] fix: substitute date/text in all quick-capture templates (#9529) * fix: substitute date/text in all quick-capture templates Previously, sharing media to logseq via an android intent only substituted the url/time. Now it substitutes the date and replaces the text with nothing (which seems like a reasonable default when there is no text). --------- Co-authored-by: Andelf --- src/main/frontend/mobile/intent.cljs | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/main/frontend/mobile/intent.cljs b/src/main/frontend/mobile/intent.cljs index d44da915b56..74c3366ce4c 100644 --- a/src/main/frontend/mobile/intent.cljs +++ b/src/main/frontend/mobile/intent.cljs @@ -65,6 +65,7 @@ (p/let [basename (node-path/basename url) label (-> basename util/node-path.name) time (date/get-current-time) + date-ref-name (date/today) path (editor-handler/get-asset-path basename) _file (p/catch (.copy Filesystem (clj->js {:from url :to path})) @@ -75,21 +76,25 @@ template (get-in (state/get-config) [:quick-capture-templates :media] "**{time}** [[quick capture]]: {url}")] - (-> (string/replace template "{time}" time) + (-> template + (string/replace "{time}" time) + (string/replace "{date}" date-ref-name) + (string/replace "{text}" "") (string/replace "{url}" (or url ""))))) (defn- embed-text-file "Store external content with url into Logseq repo" [url title] (p/let [time (date/get-current-time) + date-ref-name (date/today) title (some-> (or title (node-path/basename url)) gp-util/safe-decode-uri-component util/node-path.name ;; make the title more user friendly gp-util/page-name-sanity) path (node-path/join (config/get-repo-dir (state/get-current-repo)) - (config/get-pages-directory) - (str (js/encodeURI (fs-util/file-name-sanity title)) (node-path/extname url))) + (config/get-pages-directory) + (str (js/encodeURI (fs-util/file-name-sanity title)) (node-path/extname url))) _ (p/catch (.copy Filesystem (clj->js {:from url :to path})) (fn [error] @@ -98,7 +103,10 @@ template (get-in (state/get-config) [:quick-capture-templates :text] "**{time}** [[quick capture]]: {url}")] - (-> (string/replace template "{time}" time) + (-> template + (string/replace "{time}" time) + (string/replace "{date}" date-ref-name) + (string/replace "{text}" "") (string/replace "{url}" (or url ""))))) (defn- handle-received-media [result] From 144754f4302bbae2afe801da15845952b8948c38 Mon Sep 17 00:00:00 2001 From: charlie Date: Thu, 25 May 2023 13:10:09 +0800 Subject: [PATCH 053/190] fix(ux): drop assets not working within the right sidebar --- src/main/frontend/components/container.cljs | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/main/frontend/components/container.cljs b/src/main/frontend/components/container.cljs index d030a80b6d3..7c371221c81 100644 --- a/src/main/frontend/components/container.cljs +++ b/src/main/frontend/components/container.cljs @@ -481,7 +481,7 @@ (rum/defc main < {:did-mount (fn [state] - (when-let [element (gdom/getElement "main-content-container")] + (when-let [element (gdom/getElement "app-container")] (dnd/subscribe! element :upload-files @@ -492,19 +492,23 @@ (common-handler/listen-to-scroll! element) (when (:margin-less-pages? (first (:rum/args state))) ;; makes sure full screen pages displaying without scrollbar (set! (.. element -scrollTop) 0))) - state)} + state) + :will-unmount (fn [state] + (when-let [el (gdom/getElement "app-container")] + (dnd/unsubscribe! el :upload-files)) + state)} [{:keys [route-match margin-less-pages? route-name indexeddb-support? db-restoring? main-content show-action-bar? show-recording-bar?]}] - (let [left-sidebar-open? (state/sub :ui/left-sidebar-open?) + (let [left-sidebar-open? (state/sub :ui/left-sidebar-open?) onboarding-and-home? (and (or (nil? (state/get-current-repo)) (config/demo-graph?)) (not config/publishing?) (= :home route-name)) - margin-less-pages? (or (and (mobile-util/native-platform?) onboarding-and-home?) margin-less-pages?)] + margin-less-pages? (or (and (mobile-util/native-platform?) onboarding-and-home?) margin-less-pages?)] [:div#main-container.cp__sidebar-main-layout.flex-1.flex {:class (util/classnames [{:is-left-sidebar-open left-sidebar-open?}])} ;; desktop left sidebar layout (left-sidebar {:left-sidebar-open? left-sidebar-open? - :route-match route-match}) + :route-match route-match}) [:div#main-content-container.scrollbar-spacing.w-full.flex.justify-center.flex-row.outline-none.relative From 5074d36d0977b044eb7b44cc17ec0cd64b68097e Mon Sep 17 00:00:00 2001 From: charlie Date: Wed, 24 May 2023 21:41:04 +0800 Subject: [PATCH 054/190] enhance(ux): resize restriction for the area highlight region --- src/main/frontend/extensions/pdf/core.cljs | 202 +++++++++++---------- 1 file changed, 107 insertions(+), 95 deletions(-) diff --git a/src/main/frontend/extensions/pdf/core.cljs b/src/main/frontend/extensions/pdf/core.cljs index 762331cc02c..85fe6a3de40 100644 --- a/src/main/frontend/extensions/pdf/core.cljs +++ b/src/main/frontend/extensions/pdf/core.cljs @@ -347,9 +347,8 @@ (.setAttribute target "data-x" ax) (.setAttribute target "data-y" ay)) ))} - :modifiers [;; minimum - (js/interact.modifiers.restrictSize - (bean/->js {:min {:width 60 :height 25}}))] + :modifiers [(js/interact.modifiers.restrictRect + (bean/->js {:restriction ".page"}))] :inertia true}) ))] ;; destroy @@ -376,10 +375,10 @@ (for [hl page-hls] (let [vw-hl (update-in hl [:position] #(pdf-utils/scaled-to-vw-pos viewer %))] (rum/with-key - (if (get-in hl [:content :image]) - (pdf-highlight-area-region viewer vw-hl hl ops) - (pdf-highlights-text-region viewer vw-hl hl ops)) - (:id hl)) + (if (get-in hl [:content :image]) + (pdf-highlight-area-region viewer vw-hl hl ops) + (pdf-highlights-text-region viewer vw-hl hl ops)) + (:id hl)) ))]) (rum/defc ^:large-vars/cleanup-todo pdf-highlight-area-selection @@ -388,41 +387,59 @@ (let [^js viewer-clt (.. viewer -viewer -classList) ^js cnt-el (.-container viewer) *el (rum/use-ref nil) - *sta-el (rum/use-ref nil) + *start-el (rum/use-ref nil) *cnt-rect (rum/use-ref nil) + *page-el (rum/use-ref nil) + *page-rect (rum/use-ref nil) + *start-xy (rum/use-ref nil) - [start-coord, set-start-coord!] (rum/use-state nil) - [end-coord, set-end-coord!] (rum/use-state nil) + [start, set-start!] (rum/use-state nil) + [end, set-end!] (rum/use-state nil) [_ set-area-mode!] (use-atom *area-mode?) should-start (fn [^js e] (let [^js target (.-target e)] - (when (and (not - (.contains (.-classList target) "extensions__pdf-hls-area-region")) + (when (and (not (.contains (.-classList target) "extensions__pdf-hls-area-region")) (.closest target ".page")) (and e (or (.-metaKey e) (and util/win32? (.-shiftKey e)) @*area-mode?))))) - reset-coords #(do - (set-start-coord! nil) - (set-end-coord! nil) - (rum/set-ref! *sta-el nil)) + reset-coords! #(do + (set-start! nil) + (set-end! nil) + (rum/set-ref! *start-xy nil) + (rum/set-ref! *start-el nil) + (rum/set-ref! *cnt-rect nil) + (rum/set-ref! *page-el nil) + (rum/set-ref! *page-rect nil)) - calc-coords (fn [page-x page-y] + calc-coords! (fn [page-x page-y] (when cnt-el - (let [cnt-rect (rum/deref *cnt-rect) - cnt-rect (or cnt-rect (bean/->clj (.toJSON (.getBoundingClientRect cnt-el)))) - _ (rum/set-ref! *cnt-rect cnt-rect)] + (let [cnt-rect (rum/deref *cnt-rect) + cnt-rect (or cnt-rect (bean/->clj (.toJSON (.getBoundingClientRect cnt-el)))) + page-rect (rum/deref *page-rect) + [start-x, start-y] (rum/deref *start-xy) + dx-left? (> start-x page-x) + dy-top? (> start-y page-y) + page-left (:left page-rect) + page-right (:right page-rect) + page-top (:top page-rect) + page-bottom (:bottom page-rect) + _ (rum/set-ref! *cnt-rect cnt-rect)] {:x (-> page-x - (- (:left cnt-rect)) + (#(if dx-left? + (if (< % page-left) page-left %) + (if (> % page-right) page-right %))) (+ (.-scrollLeft cnt-el))) :y (-> page-y - (- (:top cnt-rect)) + (#(if dy-top? + (if (< % page-top) page-top %) + (if (> % page-bottom) page-bottom %))) (+ (.-scrollTop cnt-el)))}))) - calc-pos (fn [start end] + calc-rect (fn [start end] {:left (min (:x start) (:x end)) :top (min (:y start) (:y end)) :width (js/Math.abs (- (:x end) (:x start))) @@ -431,81 +448,78 @@ disable-text-selection! #(js-invoke viewer-clt (if % "add" "remove") "disabled-text-selection") fn-move (rum/use-callback - (fn [^js/MouseEvent e] - (set-end-coord! (calc-coords (.-pageX e) (.-pageY e)))) - [])] + (fn [^js/MouseEvent e] + (set-end! (calc-coords! (.-pageX e) (.-pageY e)))) + [])] (rum/use-effect! - (fn [] - (when-let [^js/HTMLElement root cnt-el] - (let [fn-start (fn [^js/MouseEvent e] - (if (should-start e) - (do - (rum/set-ref! *sta-el (.-target e)) - (set-start-coord! (calc-coords (.-pageX e) (.-pageY e))) - (disable-text-selection! true) - - (.addEventListener root "mousemove" fn-move)) - - ;; reset - (reset-coords))) - - fn-end (fn [^js/MouseEvent e] - (when-let [start-el (rum/deref *sta-el)] - (let [end (calc-coords (.-pageX e) (.-pageY e)) - pos (calc-pos start-coord end)] - - (if (and (> (:width pos) 10) - (> (:height pos) 10)) - - (when-let [^js page-el (.closest start-el ".page")] - (let [page-number (int (.-pageNumber (.-dataset page-el))) - page-pos (merge pos {:top (- (:top pos) (.-offsetTop page-el)) - :left (- (:left pos) (.-offsetLeft page-el))}) - vw-pos {:bounding page-pos :rects [] :page page-number} - sc-pos (pdf-utils/vw-to-scaled-pos viewer vw-pos) - - point {:x (.-clientX e) :y (.-clientY e)} - hl {:id nil - :page page-number - :position sc-pos - :content {:text "[:span]" :image (js/Date.now)} - :properties {}}] - - ;; ctx tips - (show-ctx-menu! viewer hl point {:reset-fn #(reset-coords)}) - - ;; export area highlight - ;;(dd "[selection end] :start" - ;; start-coord ":end" end ":pos" pos - ;; ":page" page-number - ;; ":offset" page-pos - ;; ":vw-pos" vw-pos - ;; ":sc-pos" sc-pos) - ) - - (set-area-mode! false)) - - ;; reset - (reset-coords))) - - (disable-text-selection! false) - (.removeEventListener root "mousemove" fn-move)))] - - (doto root - (.addEventListener "mousedown" fn-start) - (.addEventListener "mouseup" fn-end #js {:once true})) - - ;; destroy - #(doto root - (.removeEventListener "mousedown" fn-start) - (.removeEventListener "mouseup" fn-end))))) - [start-coord]) + (fn [] + (when-let [^js/HTMLElement root cnt-el] + (let [fn-start (fn [^js/MouseEvent e] + (if (should-start e) + (let [target (.-target e) + page-el (.closest target ".page") + [x y] [(.-pageX e) (.-pageY e)]] + (rum/set-ref! *start-el target) + (rum/set-ref! *start-xy [x y]) + (rum/set-ref! *page-el page-el) + (rum/set-ref! *page-rect (some-> page-el (.getBoundingClientRect) (.toJSON) (bean/->clj))) + (set-start! (calc-coords! x y)) + (disable-text-selection! true) + + (.addEventListener root "mousemove" fn-move)) + + ;; reset + (do (reset-coords!) + (disable-text-selection! false)))) + + fn-end (fn [^js/MouseEvent e] + (when-let [start-el (rum/deref *start-el)] + (let [end (calc-coords! (.-pageX e) (.-pageY e)) + rect (calc-rect start end)] + + (if (and (> (:width rect) 10) + (> (:height rect) 10)) + + (when-let [^js page-el (.closest start-el ".page")] + (let [page-number (int (.-pageNumber (.-dataset page-el))) + page-pos (merge rect {:top (- (:top rect) (.-offsetTop page-el)) + :left (- (:left rect) (.-offsetLeft page-el))}) + vw-pos {:bounding page-pos :rects [] :page page-number} + sc-pos (pdf-utils/vw-to-scaled-pos viewer vw-pos) + + point {:x (.-clientX e) :y (.-clientY e)} + hl {:id nil + :page page-number + :position sc-pos + :content {:text "[:span]" :image (js/Date.now)} + :properties {}}] + + ;; ctx tips + (show-ctx-menu! viewer hl point {:reset-fn #(reset-coords!)})) + + (set-area-mode! false)) + + ;; reset + (reset-coords!))) + + (disable-text-selection! false) + (.removeEventListener root "mousemove" fn-move)))] + + (doto root + (.addEventListener "mousedown" fn-start) + (.addEventListener "mouseup" fn-end #js {:once true})) + + ;; destroy + #(doto root + (.removeEventListener "mousedown" fn-start) + (.removeEventListener "mouseup" fn-end))))) + [start]) [:div.extensions__pdf-area-selection {:ref *el} - (when (and start-coord end-coord) - [:div.shadow-rect {:style (calc-pos start-coord end-coord)}])])) + (when (and start end) + [:div.shadow-rect {:style (calc-rect start end)}])])) (rum/defc ^:large-vars/cleanup-todo pdf-highlights [^js el ^js viewer initial-hls loaded-pages {:keys [set-dirty-hls!]}] @@ -641,8 +655,6 @@ ;; render hls (rum/use-effect! (fn [] - ;;(dd "=== rebuild highlights ===" (count highlights)) - (when-let [grouped-hls (and (sequential? highlights) (group-by :page highlights))] (doseq [page loaded-pages] (when-let [^js/HTMLDivElement hls-layer (pdf-utils/resolve-hls-layer! viewer page)] From 96b9b9e4f31881f29a779c27cde9a9745d81d66e Mon Sep 17 00:00:00 2001 From: charlie Date: Wed, 24 May 2023 22:19:33 +0800 Subject: [PATCH 055/190] enhance(ux): dom element as restrict container --- src/main/frontend/extensions/pdf/core.cljs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/frontend/extensions/pdf/core.cljs b/src/main/frontend/extensions/pdf/core.cljs index 85fe6a3de40..c5920bdbce4 100644 --- a/src/main/frontend/extensions/pdf/core.cljs +++ b/src/main/frontend/extensions/pdf/core.cljs @@ -347,8 +347,8 @@ (.setAttribute target "data-x" ax) (.setAttribute target "data-y" ay)) ))} - :modifiers [(js/interact.modifiers.restrictRect - (bean/->js {:restriction ".page"}))] + :modifiers [(js/interact.modifiers.restrict + (bean/->js {:restriction (.closest el ".page")}))] :inertia true}) ))] ;; destroy From 368ad5b8cfe215ac7a9aa2124d8a0dbe962bef4a Mon Sep 17 00:00:00 2001 From: charlie Date: Sat, 27 May 2023 16:13:44 +0800 Subject: [PATCH 056/190] enhance(ui): add more semantic class to the order-list block element --- src/main/frontend/components/block.cljs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/frontend/components/block.cljs b/src/main/frontend/components/block.cljs index e9638728e07..0b60a55dd7d 100644 --- a/src/main/frontend/components/block.cljs +++ b/src/main/frontend/components/block.cljs @@ -2818,6 +2818,8 @@ edit? (state/sub [:editor/editing? edit-input-id]) card? (string/includes? data-refs-self "\"card\"") review-cards? (:review-cards? config) + own-number-list? (:own-order-number-list? config) + order-list? (boolean own-number-list?) selected? (when-not slide? (state/sub-block-selected? blocks-container-id uuid))] [:div.ls-block @@ -2830,6 +2832,7 @@ (when pre-block? " pre-block") (when (and card? (not review-cards?)) " shadow-md") (when selected? " selected noselect") + (when order-list? " is-order-list") (when (string/blank? content) " is-blank")) :blockid (str uuid) :haschild (str (boolean has-child?))} @@ -2858,7 +2861,7 @@ (when top? (dnd-separator-wrapper block block-id slide? true false)) - [:div.flex.flex-row.pr-2 + [:div.block-main-container.flex.flex-row.pr-2 {:class (if (and heading? (seq (:block/title block))) "items-baseline" "") :on-touch-start (fn [event uuid] (block-handler/on-touch-start event uuid)) :on-touch-move (fn [event] From db70c14f8578e0206a31465a70c7e024f317e9d6 Mon Sep 17 00:00:00 2001 From: Tienson Qin Date: Mon, 29 May 2023 23:01:04 +0800 Subject: [PATCH 057/190] Bump mldoc to 1.5.5 --- package.json | 4 ++-- yarn.lock | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 21c0ffe44c7..a4cac0a3a4d 100644 --- a/package.json +++ b/package.json @@ -117,7 +117,7 @@ "highlight.js": "10.4.1", "ignore": "5.1.8", "jszip": "3.8.0", - "mldoc": "^1.5.1", + "mldoc": "^1.5.5", "path": "0.12.7", "path-complete-extname": "1.0.0", "pixi-graph-fork": "0.2.0", @@ -158,4 +158,4 @@ "pixi-graph-fork/@pixi/mixin-get-child-by-name": "6.2.0", "pixi-graph-fork/@pixi/math": "6.2.0" } -} \ No newline at end of file +} diff --git a/yarn.lock b/yarn.lock index feb45f1dd6b..25976fe9808 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4667,10 +4667,10 @@ mkdirp@^1.0.3: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -mldoc@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/mldoc/-/mldoc-1.5.1.tgz#570ae860d621e167e9a586f5be2b1bb96faf8bb7" - integrity sha512-FlmspawzeYjIegvHlUxx2VoZx2ExHKS5h+f80yCFjhuW3yeqdvq4zFP19GJGVGbAWnyTL0DfUoROf84IMAL8Fw== +mldoc@^1.5.5: + version "1.5.5" + resolved "https://registry.yarnpkg.com/mldoc/-/mldoc-1.5.5.tgz#2f18439740cbcf474bf7d59266d4d98bbbc89412" + integrity sha512-hBVLgzlh/648l0b0Y2rkQ9KK65EBf4T+IINNFGERpn2MccXwIAiXTCZXuMIe4xfhWQ2C8KHb+k4Wb2Nw5O1TKQ== dependencies: yargs "^12.0.2" From e8ed9d025d44ca2c70fc9ba12b7cbf992d6b7bbe Mon Sep 17 00:00:00 2001 From: Tienson Qin Date: Tue, 30 May 2023 12:00:33 +0800 Subject: [PATCH 058/190] Remove file path from captured errors --- src/main/frontend/modules/file/core.cljs | 2 +- src/main/frontend/modules/outliner/core.cljs | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/frontend/modules/file/core.cljs b/src/main/frontend/modules/file/core.cljs index f5ee06e5820..373d66d266d 100644 --- a/src/main/frontend/modules/file/core.cljs +++ b/src/main/frontend/modules/file/core.cljs @@ -156,7 +156,7 @@ (if (and (string/blank? new-content) (not blocks-just-deleted?)) (state/pub-event! [:capture-error {:error (js/Error. "Empty content") - :payload {:file-path file-path}}]) + :payload {}}]) (let [files [[file-path new-content]] repo (state/get-current-repo)] (file-handler/alter-files-handler! repo files {} {})))) diff --git a/src/main/frontend/modules/outliner/core.cljs b/src/main/frontend/modules/outliner/core.cljs index 8e37915e56f..512b05af0e2 100644 --- a/src/main/frontend/modules/outliner/core.cljs +++ b/src/main/frontend/modules/outliner/core.cljs @@ -564,8 +564,6 @@ (do (state/pub-event! [:capture-error {:error "Outliner invalid structure" :payload {:type :outliner/invalid-structure - :blocks blocks - :target-block target-block' :opt opts :data (mapv #(dissoc % :block/content) tx)}}]) (throw (ex-info "Invalid outliner data" From be9654da948cfce2b1bd060a50c6cdc67db0a51e Mon Sep 17 00:00:00 2001 From: Giuseppe D'Andrea Date: Sun, 21 May 2023 11:45:15 +0200 Subject: [PATCH 059/190] enhance: delete selected text when pressing enter --- src/main/frontend/handler/editor.cljs | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/main/frontend/handler/editor.cljs b/src/main/frontend/handler/editor.cljs index fe254dc6c01..cc4555e5366 100644 --- a/src/main/frontend/handler/editor.cljs +++ b/src/main/frontend/handler/editor.cljs @@ -407,10 +407,10 @@ (save-block-inner! block value opts))))))) (defn- compute-fst-snd-block-text - [value pos] + [value selection-start selection-end] (when (string? value) - (let [fst-block-text (subs value 0 pos) - snd-block-text (string/triml (subs value pos))] + (let [fst-block-text (subs value 0 selection-start) + snd-block-text (string/triml (subs value selection-end))] [fst-block-text snd-block-text]))) (declare save-current-block!) @@ -471,8 +471,9 @@ :as _opts}] (let [block-self? (block-self-alone-when-insert? config uuid) input (gdom/getElement (state/get-edit-input-id)) - pos (cursor/pos input) - [fst-block-text snd-block-text] (compute-fst-snd-block-text value pos) + selection-start (util/get-selection-start input) + selection-end (util/get-selection-end input) + [fst-block-text snd-block-text] (compute-fst-snd-block-text value selection-start selection-end) current-block (assoc block :block/content fst-block-text) current-block (apply dissoc current-block db-schema/retract-attributes) current-block (wrap-parse-block current-block) @@ -526,8 +527,9 @@ block) block-self? (block-self-alone-when-insert? config block-id) input (gdom/getElement (state/get-edit-input-id)) - pos (cursor/pos input) - [fst-block-text snd-block-text] (compute-fst-snd-block-text value pos) + selection-start (util/get-selection-start input) + selection-end (util/get-selection-end input) + [fst-block-text snd-block-text] (compute-fst-snd-block-text value selection-start selection-end) insert-fn (cond block-self? insert-new-block-aux! From 4c0583ce278f99bafe8aa8ba50054edb6a53e97a Mon Sep 17 00:00:00 2001 From: Giuseppe D'Andrea Date: Tue, 23 May 2023 22:23:08 +0200 Subject: [PATCH 060/190] fix: delete selected text at the beginning --- src/main/frontend/handler/editor.cljs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/main/frontend/handler/editor.cljs b/src/main/frontend/handler/editor.cljs index cc4555e5366..88ea15d52a3 100644 --- a/src/main/frontend/handler/editor.cljs +++ b/src/main/frontend/handler/editor.cljs @@ -448,13 +448,21 @@ (= uuid block-id))) (defn insert-new-block-before-block-aux! - [config block _value {:keys [ok-handler]}] - (let [new-m {:block/uuid (db/new-block-id) + [config block value {:keys [ok-handler]}] + (let [edit-input-id (state/get-edit-input-id) + input (gdom/getElement edit-input-id) + input-text-selected? (util/input-text-selected? input) + new-m {:block/uuid (db/new-block-id) :block/content ""} prev-block (-> (merge (select-keys block [:block/parent :block/left :block/format :block/page :block/journal?]) new-m) (wrap-parse-block)) left-block (db/pull (:db/id (:block/left block)))] + (when input-text-selected? + (let [selection-start (util/get-selection-start input) + selection-end (util/get-selection-end input) + [_ new-content] (compute-fst-snd-block-text value selection-start selection-end)] + (state/set-edit-content! edit-input-id new-content))) (profile "outliner insert block" (let [sibling? (not= (:db/id left-block) (:db/id (:block/parent block)))] From 5f44d9bdf20bf0a058156512d54446f1c98aa4da Mon Sep 17 00:00:00 2001 From: Gabriel Horner Date: Fri, 26 May 2023 14:49:40 -0400 Subject: [PATCH 061/190] Cleanup remaining clj(s) resources * Move template files into a more organized resources templates dir except for zotero-items.edn which isn't a template * Remove unused favorites templates * Move grammar file which should be in a resource path and not a standard source path --- deps.edn | 2 +- src/main/frontend/config.cljs | 2 +- src/main/frontend/handler/global_config.cljs | 2 +- src/main/frontend/handler/repo.cljs | 4 ++-- src/{main => resources}/grammar/calc.bnf | 0 {templates => src/resources/templates}/config.edn | 0 {templates => src/resources/templates}/contents.md | 0 {templates => src/resources/templates}/contents.org | 0 {templates => src/resources/templates}/global-config.edn | 0 {templates => src/resources}/zotero-items.edn | 0 templates/favorites.md | 1 - templates/favorites.org | 1 - typos.toml | 2 +- 13 files changed, 6 insertions(+), 8 deletions(-) rename src/{main => resources}/grammar/calc.bnf (100%) rename {templates => src/resources/templates}/config.edn (100%) rename {templates => src/resources/templates}/contents.md (100%) rename {templates => src/resources/templates}/contents.org (100%) rename {templates => src/resources/templates}/global-config.edn (100%) rename {templates => src/resources}/zotero-items.edn (100%) delete mode 100644 templates/favorites.md delete mode 100644 templates/favorites.org diff --git a/deps.edn b/deps.edn index 4e16e63f407..580bb9894d8 100644 --- a/deps.edn +++ b/deps.edn @@ -1,4 +1,4 @@ -{:paths ["src/main" "src/electron" "templates" "src/resources"] +{:paths ["src/main" "src/electron" "src/resources"] :deps {org.clojure/clojure {:mvn/version "1.11.1"} rum/rum {:mvn/version "0.12.9"} diff --git a/src/main/frontend/config.cljs b/src/main/frontend/config.cljs index 8aff2d4411c..c275ec33c52 100644 --- a/src/main/frontend/config.cljs +++ b/src/main/frontend/config.cljs @@ -339,7 +339,7 @@ (def custom-css-file "custom.css") (def export-css-file "export.css") (def custom-js-file "custom.js") -(def config-default-content (rc/inline "config.edn")) +(def config-default-content (rc/inline "templates/config.edn")) (def config-default-content-md5 (let [md5 (new crypt/Md5)] (.update md5 (crypt/stringToUtf8ByteArray config-default-content)) (crypt/byteArrayToHex (.digest md5)))) diff --git a/src/main/frontend/handler/global_config.cljs b/src/main/frontend/handler/global_config.cljs index b1f2f6e3a78..e366fa61875 100644 --- a/src/main/frontend/handler/global_config.cljs +++ b/src/main/frontend/handler/global_config.cljs @@ -41,7 +41,7 @@ (state/set-global-config! config) config)) -(def default-content (rc/inline "global-config.edn")) +(def default-content (rc/inline "templates/global-config.edn")) (defn- create-global-config-file-if-not-exists [repo-url] diff --git a/src/main/frontend/handler/repo.cljs b/src/main/frontend/handler/repo.cljs index 63ca24150d5..6cfcd35a97e 100644 --- a/src/main/frontend/handler/repo.cljs +++ b/src/main/frontend/handler/repo.cljs @@ -48,8 +48,8 @@ (let [format (state/get-preferred-format) file-rpath (str "pages/" "contents." (config/get-file-extension format)) default-content (case (name format) - "org" (rc/inline "contents.org") - "markdown" (rc/inline "contents.md") + "org" (rc/inline "templates/contents.org") + "markdown" (rc/inline "templates/contents.md") "")] (p/let [_ (fs/mkdir-if-not-exists (path/path-join repo-dir pages-dir)) file-exists? (fs/create-if-not-exists repo-url repo-dir file-rpath default-content)] diff --git a/src/main/grammar/calc.bnf b/src/resources/grammar/calc.bnf similarity index 100% rename from src/main/grammar/calc.bnf rename to src/resources/grammar/calc.bnf diff --git a/templates/config.edn b/src/resources/templates/config.edn similarity index 100% rename from templates/config.edn rename to src/resources/templates/config.edn diff --git a/templates/contents.md b/src/resources/templates/contents.md similarity index 100% rename from templates/contents.md rename to src/resources/templates/contents.md diff --git a/templates/contents.org b/src/resources/templates/contents.org similarity index 100% rename from templates/contents.org rename to src/resources/templates/contents.org diff --git a/templates/global-config.edn b/src/resources/templates/global-config.edn similarity index 100% rename from templates/global-config.edn rename to src/resources/templates/global-config.edn diff --git a/templates/zotero-items.edn b/src/resources/zotero-items.edn similarity index 100% rename from templates/zotero-items.edn rename to src/resources/zotero-items.edn diff --git a/templates/favorites.md b/templates/favorites.md deleted file mode 100644 index 39cdd0ded6d..00000000000 --- a/templates/favorites.md +++ /dev/null @@ -1 +0,0 @@ -- diff --git a/templates/favorites.org b/templates/favorites.org deleted file mode 100644 index 72e8ffc0db8..00000000000 --- a/templates/favorites.org +++ /dev/null @@ -1 +0,0 @@ -* diff --git a/typos.toml b/typos.toml index d4b51e95373..4ec321e7c29 100644 --- a/typos.toml +++ b/typos.toml @@ -13,4 +13,4 @@ fo = "fo" aks = "aks" Mannor = "Mannor" [files] -extend-exclude = ["resources/*", "templates/*", "src/resources/*"] +extend-exclude = ["resources/*", "src/resources/*"] From 562fd739b0e6e0f1653cdf89e7843f8337403725 Mon Sep 17 00:00:00 2001 From: Konstantinos Kaloutas Date: Tue, 30 May 2023 10:18:43 +0300 Subject: [PATCH 062/190] chore: add fluxbox to desktop build --- .github/workflows/build-desktop-release.yml | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build-desktop-release.yml b/.github/workflows/build-desktop-release.yml index b856e1ef347..26c8cd79765 100644 --- a/.github/workflows/build-desktop-release.yml +++ b/.github/workflows/build-desktop-release.yml @@ -204,8 +204,19 @@ jobs: env: PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: true + - name: Install Fluxbox + run: sudo apt-get update && sudo apt-get install -y fluxbox + + # Emulate a virtual framebuffer on machines with no display hardware + - name: Run XVFB + run: Xvfb :1 -screen 0 1024x768x24 >/dev/null 2>&1 & + + # Start a lightweight window manager to simulate window actions (maximize,restore etc) + - name: Start Fluxbox + run: DISPLAY=:1.0 fluxbox >/dev/null 2>&1 & + - name: Run Playwright test - run: xvfb-run -- npx playwright test --reporter github --shard=${{ matrix.shard }}/3 + run: DISPLAY=:1.0 npx playwright test --reporter github --shard=${{ matrix.shard }}/3 env: LOGSEQ_CI: true DEBUG: "pw:api" From 66bac62a906d1e22ae03794c67d547dc639f742e Mon Sep 17 00:00:00 2001 From: Charlie Date: Tue, 30 May 2023 16:08:45 +0800 Subject: [PATCH 063/190] enhance(e2e): add e2e tests for the logseq APIs (#9512) * improve(e2e): tests for logseq apis --- e2e-tests/editor.spec.ts | 3 +- e2e-tests/logseq-api.spec.ts | 105 +++++++++++++++++++++++++++++++++++ e2e-tests/plugins.spec.ts | 12 +--- e2e-tests/utils.ts | 1 + src/main/logseq/api.cljs | 2 +- 5 files changed, 110 insertions(+), 13 deletions(-) create mode 100644 e2e-tests/logseq-api.spec.ts diff --git a/e2e-tests/editor.spec.ts b/e2e-tests/editor.spec.ts index a79d0cdd886..2181992f845 100644 --- a/e2e-tests/editor.spec.ts +++ b/e2e-tests/editor.spec.ts @@ -152,6 +152,7 @@ test( // This test requires dev mode test.skip(process.env.RELEASE === 'true', 'not available for release version') + // @ts-ignore for (let [idx, events] of [ kb_events.win10_pinyin_left_full_square_bracket, kb_events.macos_pinyin_left_full_square_bracket @@ -168,7 +169,7 @@ test( expect(await page.inputValue(':nth-match(textarea, 1)')).toBe(check_text + '[[]]') }; - // dont trigger RIME #3440 + // @ts-ignore dont trigger RIME #3440 for (let [idx, events] of [ kb_events.macos_pinyin_selecting_candidate_double_left_square_bracket, kb_events.win10_RIME_selecting_candidate_double_left_square_bracket diff --git a/e2e-tests/logseq-api.spec.ts b/e2e-tests/logseq-api.spec.ts new file mode 100644 index 00000000000..69a533cdc33 --- /dev/null +++ b/e2e-tests/logseq-api.spec.ts @@ -0,0 +1,105 @@ +import { test } from './fixtures' +import { expect } from '@playwright/test' + +test('block related apis', + async ({ page }) => { + const callAPI = callPageAPI.bind(null, page) + + const bPageName = 'block-test-page' + await callAPI('create_page', bPageName, null, { createFirstBlock: false }) + + await page.waitForSelector(`span[data-ref="${bPageName}"]`) + + let p = await callAPI('get_current_page') + const bp = await callAPI('append_block_in_page', bPageName, 'tests') + + expect(p.name).toBe(bPageName) + + p = await callAPI('get_page', bPageName) + + expect(p.name).toBe(bPageName) + + await callAPI('edit_block', bp.uuid) + + const b = (await callAPI('get_current_block')) + expect(Object.keys(b)).toContain('uuid') + + await page.waitForSelector('.block-editor > textarea') + await page.locator('.block-editor > textarea').fill('') + const content = 'test api' + await page.type('.block-editor > textarea', content) + + const editingContent = await callAPI('get_editing_block_content') + expect(editingContent).toBe(content) + + // create + let b1 = await callAPI('insert_block', b.uuid, content) + b1 = await callAPI('get_block', b1.uuid) + + expect(b1.parent.id).toBe(b.id) + + // update + const content1 = content + '+ update!' + await callAPI('update_block', b1.uuid, content1) + await page.waitForTimeout(1000) + b1 = await callAPI('get_block', b1.uuid) + + expect(b1.content).toBe(content1) + + // remove + await callAPI('remove_block', b1.uuid) + b1 = await callAPI('get_block', b1.uuid) + + expect(b1).toBeNull() + + // traverse + b1 = await callAPI('insert_block', b.uuid, content1, { sibling: true }) + const nb = await callAPI('get_next_sibling_block', b.uuid) + const pb = await callAPI('get_previous_sibling_block', b1.uuid) + + expect(nb.uuid).toBe(b1.uuid) + expect(pb.uuid).toBe(b.uuid) + + // move + await callAPI('move_block', b.uuid, b1.uuid) + const mb = await callAPI('get_next_sibling_block', b1.uuid) + + expect(mb.uuid).toBe(b.uuid) + + // properties + await callAPI('upsert_block_property', b1.uuid, 'a', 1) + let prop1 = await callAPI('get_block_property', b1.uuid, 'a') + + expect(prop1).toBe(1) + + await callAPI('upsert_block_property', b1.uuid, 'a', 2) + prop1 = await callAPI('get_block_property', b1.uuid, 'a') + + expect(prop1).toBe(2) + + await callAPI('remove_block_property', b1.uuid, 'a') + prop1 = await callAPI('get_block_property', b1.uuid, 'a') + + expect(prop1).toBeNull() + + await callAPI('upsert_block_property', b1.uuid, 'a', 1) + await callAPI('upsert_block_property', b1.uuid, 'b', 1) + + prop1 = await callAPI('get_block_properties', b1.uuid) + + expect(prop1).toEqual({ a: 1, b: 1 }) + + // await page.pause() + }) + +/** + * @param page + * @param method + * @param args + */ +export async function callPageAPI(page, method, ...args) { + return await page.evaluate(([method, args]) => { + // @ts-ignore + return window.logseq.api[method]?.(...args) + }, [method, args]) +} diff --git a/e2e-tests/plugins.spec.ts b/e2e-tests/plugins.spec.ts index 30a47f9f692..8011ba55bab 100644 --- a/e2e-tests/plugins.spec.ts +++ b/e2e-tests/plugins.spec.ts @@ -1,5 +1,6 @@ import { expect } from '@playwright/test' import { test } from './fixtures' +import { callPageAPI } from './logseq-api.spec' test.skip('enabled plugin system default', async ({ page }) => { const callAPI = callPageAPI.bind(null, page) @@ -59,14 +60,3 @@ test.skip('play a plugin from the Marketplace', async await expect(page.locator('body[data-page="page"]')).toBeVisible() }) -/** - * @param page - * @param method - * @param args - */ -async function callPageAPI(page, method, ...args) { - return await page.evaluate(([method, args]) => { - // @ts-ignore - return window.logseq.api[method]?.(...args) - }, [method, args]) -} diff --git a/e2e-tests/utils.ts b/e2e-tests/utils.ts index 22472a74b31..1cf13f84c88 100644 --- a/e2e-tests/utils.ts +++ b/e2e-tests/utils.ts @@ -2,6 +2,7 @@ import { Page, Locator } from 'playwright' import { expect, ConsoleMessage } from '@playwright/test' import * as pathlib from 'path' import { modKey } from './util/basic' +import { Block } from './types' // TODO: The file should be a facade of utils in the /util folder // No more additional functions should be added to this file diff --git a/src/main/logseq/api.cljs b/src/main/logseq/api.cljs index 65b6c9d3289..fde6312ac94 100644 --- a/src/main/logseq/api.cljs +++ b/src/main/logseq/api.cljs @@ -700,7 +700,7 @@ (fn [block-uuid] (when-let [block (db-model/query-block-by-uuid (sdk-utils/uuid-or-throw-error block-uuid))] (when-let [right-sibling (outliner/get-right-sibling (:db/id block))] - (let [block (db/pull (:id right-sibling))] + (let [block (db/pull (:db/id right-sibling))] (bean/->js (sdk-utils/normalize-keyword-for-json block))))))) (def ^:export set_block_collapsed From 7b709373971f149fd320c5b4b107c152118e5b4d Mon Sep 17 00:00:00 2001 From: Konstantinos Kaloutas Date: Tue, 30 May 2023 13:56:41 +0300 Subject: [PATCH 064/190] fix: did-remount deprecation --- src/main/frontend/handler/editor/lifecycle.cljs | 4 ++-- src/main/frontend/mixins.cljs | 2 +- src/main/frontend/modules/shortcut/core.cljs | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/frontend/handler/editor/lifecycle.cljs b/src/main/frontend/handler/editor/lifecycle.cljs index 1014d062fa3..90e5c68a1b3 100644 --- a/src/main/frontend/handler/editor/lifecycle.cljs +++ b/src/main/frontend/handler/editor/lifecycle.cljs @@ -27,7 +27,7 @@ (js/setTimeout #(util/scroll-editor-cursor element) 50))) state) -(defn did-remount! +(defn will-remount! [_old-state state] (keyboards-handler/esc-save! state) state) @@ -45,5 +45,5 @@ (def lifecycle {:did-mount did-mount! - :did-remount did-remount! + :will-remount will-remount! :will-unmount will-unmount}) diff --git a/src/main/frontend/mixins.cljs b/src/main/frontend/mixins.cljs index 40fdc76bec8..3b8d3dcf381 100644 --- a/src/main/frontend/mixins.cljs +++ b/src/main/frontend/mixins.cljs @@ -99,7 +99,7 @@ :did-mount (fn [state] (attach-listeners state) state) - :did-remount (fn [old-state new-state] + :will-remount (fn [old-state new-state] (detach old-state) (attach-listeners new-state) new-state)}))) diff --git a/src/main/frontend/modules/shortcut/core.cljs b/src/main/frontend/modules/shortcut/core.cljs index d45f1fc2d24..163daaefd18 100644 --- a/src/main/frontend/modules/shortcut/core.cljs +++ b/src/main/frontend/modules/shortcut/core.cljs @@ -145,7 +145,7 @@ (let [install-id (install-shortcut! handler-id {:state state})] (assoc state ::install-id install-id))) - :did-remount (fn [old-state new-state] + :will-remount (fn [old-state new-state] (uninstall-shortcut! (::install-id old-state)) (when-let [install-id (install-shortcut! handler-id {:state new-state})] (assoc new-state ::install-id install-id))) From a114f0547f79b6327f6fbc180461771ab6a74be9 Mon Sep 17 00:00:00 2001 From: Konstantinos Kaloutas Date: Tue, 30 May 2023 13:57:27 +0300 Subject: [PATCH 065/190] fix: interact.js touch-action warning --- src/main/frontend/components/container.css | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/frontend/components/container.css b/src/main/frontend/components/container.css index ed8d157ca05..3f2b22e7081 100644 --- a/src/main/frontend/components/container.css +++ b/src/main/frontend/components/container.css @@ -536,6 +536,7 @@ html[data-theme='dark'] { .resizer { @apply absolute top-0 bottom-0; + touch-action: none; left: 0; width: 4px; user-select: none; From ede076a50113458e21307d5a08cfae32dc9a2693 Mon Sep 17 00:00:00 2001 From: Konstantinos Kaloutas Date: Tue, 30 May 2023 13:57:57 +0300 Subject: [PATCH 066/190] fix: invalid DOM property `for` --- tldraw/apps/tldraw-logseq/src/components/inputs/ColorInput.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tldraw/apps/tldraw-logseq/src/components/inputs/ColorInput.tsx b/tldraw/apps/tldraw-logseq/src/components/inputs/ColorInput.tsx index 2c708d55152..0d3bcdae89a 100644 --- a/tldraw/apps/tldraw-logseq/src/components/inputs/ColorInput.tsx +++ b/tldraw/apps/tldraw-logseq/src/components/inputs/ColorInput.tsx @@ -85,7 +85,7 @@ export function ColorInput({ /> -