diff --git a/.gitignore b/.gitignore index 15ab49f168..ebc7ee6326 100644 --- a/.gitignore +++ b/.gitignore @@ -52,7 +52,6 @@ ios/App/App/public startup.png -/src/main/frontend/tldraw-logseq.js /src/test/docs* ~*~ diff --git a/.projectile b/.projectile index cf172babfc..ffdfd0752c 100644 --- a/.projectile +++ b/.projectile @@ -12,7 +12,6 @@ -/resources/static/js/mhchem.min.js -/resources/static/js/mldoc.min.js -/resources/static/js/sci.min.js --/resources/static/js/excalidraw.min.js -/resources/static/js/react-force-graph.min.js -/resources/js/lsplugin.user.js -/resources/js/pdf_viewer2.js diff --git a/CODEBASE_OVERVIEW.md b/CODEBASE_OVERVIEW.md index ddecefdfca..4b110139e7 100644 --- a/CODEBASE_OVERVIEW.md +++ b/CODEBASE_OVERVIEW.md @@ -60,7 +60,6 @@ This is overview of this repository's most important directories and files. - `packages/` contains JavaScript dependencies used by the frontend - `packages/ui/` - The frontend's component system based on shadcn - - `packags/tldraw/` - Custom fork of tldraw which powers whiteboards - `scripts` - Dev scripts - `clj-e2e/` - end to end clj frontend tests - `android/` - Android app diff --git a/README.md b/README.md index 61d57878d5..72f4244426 100644 --- a/README.md +++ b/README.md @@ -83,8 +83,6 @@ To get started with the DB version: [Logseq](https://logseq.com) is a **knowledge management** and **collaboration** platform. It focuses on **privacy**, **longevity**, and [**user control**](https://www.gnu.org/philosophy/free-sw.en.html). Logseq offers a range of **powerful tools** for **knowledge management**, **collaboration**, **PDF annotation**, and **task management** with support for multiple file formats, including **Markdown** and **Org-mode**, and **various features** for organizing and structuring your notes. -Logseq's **Whiteboard** feature lets you organize your knowledge and ideas using a spatial **canvas** with **shapes**, **drawings**, **website embeds**, and **connectors**. You can **visually group** and **link** your **notes** and external media (such as **videos** and **images**), enabling visual thinkers to compose, remix, **annotate**, and connect content from their knowledge base and emerging thoughts in a new way. - In addition to its core features, Logseq has a growing ecosystem of **plugins** and **themes** that enable a wide range of workflows and **customization** options. **Mobile apps** are also available, providing access to most of the features of the desktop application. Whether you're a student, a professional, or anyone who values a clear and organized approach to managing your ideas and notes, Logseq is an excellent choice for anyone looking to improve their productivity and streamline their workflow. ![logseq-demo](https://user-images.githubusercontent.com/25513724/221387376-4dc419c2-0d0a-460c-a920-2d211e78b456.gif) diff --git a/deps/common/resources/templates/config.edn b/deps/common/resources/templates/config.edn index 74e2448fae..34680d6e55 100644 --- a/deps/common/resources/templates/config.edn +++ b/deps/common/resources/templates/config.edn @@ -1,7 +1,6 @@ {:meta/version 1 ;; Hide empty block properties - ;; This is _only_ for DB graphs. ;; Default value: false ;; :ui/hide-empty-properties? false @@ -34,10 +33,6 @@ ;; Default value: true ;; :feature/enable-flashcards? true - ;; Enable whiteboards. - ;; Default value: true - ;; :feature/enable-whiteboards? true - ;; Disable the journal's built-in 'Scheduled tasks and deadlines' query. ;; Default value: false ;; :feature/disable-scheduled-and-deadline-query? false diff --git a/deps/common/src/logseq/common/config.cljs b/deps/common/src/logseq/common/config.cljs index f8f388cbae..f1b297a624 100644 --- a/deps/common/src/logseq/common/config.cljs +++ b/deps/common/src/logseq/common/config.cljs @@ -66,12 +66,6 @@ (string/replace-first asset-protocol "file://")) s)) -(defonce default-draw-directory "draws") - -(defn draw? - [path] - (string/starts-with? path default-draw-directory)) - (defn text-formats [] #{:json :org :md :yml :dat :asciidoc :rst :txt :markdown :adoc :html :js :ts :edn :clj :ml :rb :ex :erl :java :php :c :css @@ -103,7 +97,8 @@ :property-pages/excludelist :srs/learning-fraction :srs/initial-interval - :whiteboards-directory] + :whiteboards-directory + :feature/enable-whiteboards?] (repeat "is not used in DB graphs")) {:preferred-format "is not used in DB graphs as there is only markdown mode." diff --git a/deps/db/src/logseq/db.cljs b/deps/db/src/logseq/db.cljs index f48f8a8a50..d3573ebfbe 100644 --- a/deps/db/src/logseq/db.cljs +++ b/deps/db/src/logseq/db.cljs @@ -207,7 +207,6 @@ (def class? entity-util/class?) (def property? entity-util/property?) (def closed-value? entity-util/closed-value?) -(def whiteboard? entity-util/whiteboard?) (def journal? entity-util/journal?) (def hidden? entity-util/hidden?) (def object? entity-util/object?) @@ -412,7 +411,6 @@ (= 1 (count children)) (contains? #{"" "-" "*"} (string/trim (:block/title first-child)))))) (not (contains? built-in-pages name')) - (not (whiteboard? page)) (not (property? page)) ;; a/b/c might be deleted but a/b/c/d still exists (for backward compatibility) (not (and (string/includes? name' "/") diff --git a/deps/db/src/logseq/db/frontend/class.cljs b/deps/db/src/logseq/db/frontend/class.cljs index 05c2b5cdf7..ef1c2f831f 100644 --- a/deps/db/src/logseq/db/frontend/class.cljs +++ b/deps/db/src/logseq/db/frontend/class.cljs @@ -32,6 +32,7 @@ :properties {:logseq.property.class/extends :logseq.class/Page :logseq.property.journal/title-format "MMM do, yyyy"}} + ;; TODO: Remove deprecated :logseq.class/Whiteboard {:title "Whiteboard" :properties {:logseq.property.class/extends :logseq.class/Page}} diff --git a/deps/db/src/logseq/db/frontend/db.cljs b/deps/db/src/logseq/db/frontend/db.cljs index 2cc6b5012b..4f875b5e4f 100644 --- a/deps/db/src/logseq/db/frontend/db.cljs +++ b/deps/db/src/logseq/db/frontend/db.cljs @@ -29,7 +29,7 @@ (or (entity-util/class? page) (entity-util/internal-page? page)) false ;; Default to true for closed value and future internal types. - ;; Other types like whiteboard are not considered because they aren't built-in + ;; Other types are not considered because they aren't built-in :else true)) diff --git a/deps/db/src/logseq/db/frontend/entity_util.cljs b/deps/db/src/logseq/db/frontend/entity_util.cljs index 122ca6ebc9..5368e34830 100644 --- a/deps/db/src/logseq/db/frontend/entity_util.cljs +++ b/deps/db/src/logseq/db/frontend/entity_util.cljs @@ -33,11 +33,6 @@ [entity] (has-tag? entity :logseq.class/Property)) -(defn whiteboard? - "Given a page entity or map, check if it is a whiteboard page" - [entity] - (has-tag? entity :logseq.class/Whiteboard)) - (defn closed-value? [entity] (some? (:block/closed-value-property entity))) @@ -52,8 +47,7 @@ (or (internal-page? entity) (journal? entity) (class? entity) - (property? entity) - (whiteboard? entity))) + (property? entity))) (defn asset? "Given an entity or map, check if it is an asset block" @@ -80,7 +74,6 @@ (let [ident->type {:logseq.class/Tag :class :logseq.class/Property :property :logseq.class/Journal :journal - :logseq.class/Whiteboard :whiteboard :logseq.class/Page :page}] (set (map #(ident->type (:db/ident %)) (:block/tags entity))))) diff --git a/deps/db/src/logseq/db/frontend/malli_schema.cljs b/deps/db/src/logseq/db/frontend/malli_schema.cljs index 0f9be898b3..a9b571375d 100644 --- a/deps/db/src/logseq/db/frontend/malli_schema.cljs +++ b/deps/db/src/logseq/db/frontend/malli_schema.cljs @@ -3,6 +3,7 @@ (:require [clojure.set :as set] [clojure.string :as string] [datascript.core :as d] + [datascript.impl.entity :as de] [logseq.db.common.entity-plus :as entity-plus] [logseq.db.common.order :as db-order] [logseq.db.frontend.class :as db-class] @@ -408,6 +409,7 @@ [:block/link {:optional true} :int] [:logseq.property/created-from-property {:optional true} :int]]) +;; TODO: Remove deprecated (def whiteboard-block "A (shape) block for whiteboard" (vec @@ -526,6 +528,14 @@ [:block/created-at {:optional true} :int] [:block/updated-at {:optional true} :int]]) +(defn- whiteboard? + [entity] + (when (or (map? entity) (de/entity? entity)) + (some (fn [t] + (or (keyword-identical? (:db/ident t) :logseq.class/Whiteboard) + (keyword-identical? t :logseq.class/Whiteboard))) + (:block/tags entity)))) + (defn entity-dispatch-key [db ent] (let [d (if (:block/uuid ent) (d/entity db [:block/uuid (:block/uuid ent)]) ent) ;; order matters as some block types are a subset of others e.g. :whiteboard @@ -536,7 +546,8 @@ :class (entity-util/hidden? d) :hidden - (entity-util/whiteboard? d) + ;; TODO: Remove deprecated + (whiteboard? d) :normal-page (entity-util/page? d) :normal-page diff --git a/deps/db/src/logseq/db/frontend/property.cljs b/deps/db/src/logseq/db/frontend/property.cljs index f046ecb1c1..4a4ee3999a 100644 --- a/deps/db/src/logseq/db/frontend/property.cljs +++ b/deps/db/src/logseq/db/frontend/property.cljs @@ -229,7 +229,7 @@ :logseq.property/asset {:title "Asset" :schema {:type :entity :hide? true}} - ;; used by pdf and whiteboard + ;; used by pdf ;; TODO: remove ls-type :logseq.property/ls-type {:schema {:type :keyword :hide? true}} @@ -268,9 +268,11 @@ :schema {:type :node :cardinality :many :hide? true}} + ;; TODO: Remove deprecated :logseq.property.tldraw/page {:title "Tldraw Page" :schema {:type :map :hide? true}} + ;; TODO: Remove deprecated :logseq.property.tldraw/shape {:title "Tldraw Shape" :schema {:type :map :hide? true}} @@ -892,8 +894,4 @@ [db block db-ident] (when db (let [block (or (d/entity db (:db/id block)) block)] - (lookup block db-ident)))) - -(defn shape-block? - [db block] - (= :whiteboard-shape (get-block-property-value db block :logseq.property/ls-type))) + (lookup block db-ident)))) \ No newline at end of file diff --git a/deps/graph-parser/src/logseq/graph_parser/block.cljs b/deps/graph-parser/src/logseq/graph_parser/block.cljs index 700705b5a1..f58e14187f 100644 --- a/deps/graph-parser/src/logseq/graph_parser/block.cljs +++ b/deps/graph-parser/src/logseq/graph_parser/block.cljs @@ -53,8 +53,7 @@ (and (= url-type "Page_ref") (and (string? value) - (not (or (common-config/local-relative-asset? value) - (common-config/draw? value)))) + (not (common-config/local-relative-asset? value))) value) (and diff --git a/deps/graph-parser/src/logseq/graph_parser/mldoc.cljc b/deps/graph-parser/src/logseq/graph_parser/mldoc.cljc index deb3be13ab..f6fdd91249 100644 --- a/deps/graph-parser/src/logseq/graph_parser/mldoc.cljc +++ b/deps/graph-parser/src/logseq/graph_parser/mldoc.cljc @@ -194,12 +194,7 @@ (not (contains? #{"Page_ref" "Block_ref"} ref-type)) (and (contains? #{"Page_ref"} ref-type) - (or - ;; 2. excalidraw link - (common-config/draw? ref-value) - - ;; 3. local asset link - (boolean (common-config/local-relative-asset? ref-value)))))))) + (boolean (common-config/local-relative-asset? ref-value))))))) (defn mldoc-link? "Check whether s is a link (including page/block refs)." diff --git a/deps/outliner/src/logseq/outliner/page.cljs b/deps/outliner/src/logseq/outliner/page.cljs index 92c7f9e016..dafe897a70 100644 --- a/deps/outliner/src/logseq/outliner/page.cljs +++ b/deps/outliner/src/logseq/outliner/page.cljs @@ -86,11 +86,9 @@ (assoc :real-outliner-op :rename-page))) true)))))) -(defn- build-page-tx [db properties page {:keys [whiteboard? class? tags class-ident-namespace]}] +(defn- build-page-tx [db properties page {:keys [class? tags class-ident-namespace]}] (when (:block/uuid page) - (let [type-tag (cond class? :logseq.class/Tag - whiteboard? :logseq.class/Whiteboard - :else :logseq.class/Page) + (let [type-tag (if class? :logseq.class/Tag :logseq.class/Page) tags' (if (:block/journal-day page) tags (conj tags type-tag)) page' (update page :block/tags (fnil into []) @@ -237,7 +235,7 @@ "Pure function without side effects" [db title* {uuid' :uuid - :keys [tags properties persist-op? whiteboard? + :keys [tags properties persist-op? class? today-journal? split-namespace? class-ident-namespace] :or {properties nil persist-op? true} @@ -251,8 +249,6 @@ title (sanitize-title title*) types (cond class? #{:logseq.class/Tag} - whiteboard? - #{:logseq.class/Whiteboard} today-journal? #{:logseq.class/Journal} (seq tags) @@ -306,7 +302,7 @@ (outliner-validate/validate-page-title-characters (str (:block/title parent)) {:node parent}))) (let [page-uuid (:block/uuid page) - page-txs (build-page-tx db properties page (select-keys options [:whiteboard? :class? :tags :class-ident-namespace])) + page-txs (build-page-tx db properties page (select-keys options [:class? :tags :class-ident-namespace])) txs (concat ;; transact doesn't support entities (remove de/entity? parents') diff --git a/deps/outliner/src/logseq/outliner/tree.cljs b/deps/outliner/src/logseq/outliner/tree.cljs index 5f03567930..287dd0465f 100644 --- a/deps/outliner/src/logseq/outliner/tree.cljs +++ b/deps/outliner/src/logseq/outliner/tree.cljs @@ -2,18 +2,16 @@ "Provides tree fns and INode protocol" (:require [datascript.core :as d] [datascript.impl.entity :as de] - [logseq.db :as ldb] - [logseq.db.frontend.property :as db-property])) + [logseq.db :as ldb])) (defprotocol INode (-save [this *txs-state conn opts]) (-del [this *txs-state db])) (defn- blocks->vec-tree-aux - [db blocks root] + [blocks root] (let [root-id (:db/id root) - blocks (remove #(db-property/shape-block? db %) blocks) - parent-blocks (group-by #(get-in % [:block/parent :db/id]) blocks) ;; exclude whiteboard shapes + parent-blocks (group-by #(get-in % [:block/parent :db/id]) blocks) sort-fn (fn [parent] (when-let [children (get parent-blocks parent)] (ldb/sort-by-order children))) @@ -60,7 +58,7 @@ [page? root] (get-root-and-page db root-id)] (if-not root ; custom query blocks - (let [result (blocks->vec-tree-aux db blocks root)] + (let [result (blocks->vec-tree-aux blocks root)] (if (and page? (not (:link option))) result ;; include root block diff --git a/docs/contributing-to-translations.md b/docs/contributing-to-translations.md index 2201b73635..b2360c5570 100644 --- a/docs/contributing-to-translations.md +++ b/docs/contributing-to-translations.md @@ -59,8 +59,6 @@ $ bb lang:missing es | :translation-key | :string-to-translate | :file | |---------------------------------------+-------------------------------------------------------+---------------| | :command.editor/toggle-number-list | Toggle number list | dicts/es.edn | -| :command.whiteboard/bring-forward | Move forward | dicts/es.edn | -| :command.whiteboard/bring-to-front | Move to front | dicts/es.edn | ... ``` @@ -73,8 +71,6 @@ $ bb lang:missing es --copy ;; For dicts/es.edn :command.editor/toggle-number-list "Toggle number list" -:command.whiteboard/bring-forward "Move forward" -:command.whiteboard/bring-to-front "Move to front" ... ``` diff --git a/scripts/src/logseq/tasks/lang.clj b/scripts/src/logseq/tasks/lang.clj index 4d6f29688b..c534875d94 100644 --- a/scripts/src/logseq/tasks/lang.clj +++ b/scripts/src/logseq/tasks/lang.clj @@ -184,31 +184,27 @@ "Allows certain keys in a language to have the same translation as English. Happens more in romance languages but pretty rare otherwise" {:fr #{:port :type :help/docs :search-item/page :shortcut.category/navigating :text/image - :settings-of-plugins :code :shortcut.category/plugins :whiteboard/rectangle :whiteboard/triangle} - :de #{:graph :host :plugins :port :right-side-bar/whiteboards + :settings-of-plugins :code :shortcut.category/plugins} + :de #{:graph :host :plugins :port :settings-of-plugins :shortcut.category/navigating - :settings-page/enable-tooltip :settings-page/enable-whiteboards :settings-page/plugin-system} - :ca #{:port :settings-page/tab-editor :settings-page/tab-general - :whiteboard/color :whiteboard/connector :whiteboard/text :whiteboard/triangle} - :es #{:settings-page/tab-general :settings-page/tab-editor :whiteboard/color} + :settings-page/enable-tooltip :settings-page/plugin-system} + :ca #{:port :settings-page/tab-editor :settings-page/tab-general} + :es #{:settings-page/tab-general :settings-page/tab-editor} :it #{:home :handbook/home :host :help/awesome-logseq - :settings-page/tab-account :settings-page/tab-editor :whiteboard/link} + :settings-page/tab-account :settings-page/tab-editor} :nl #{:plugins :type :left-side-bar/nav-recent-pages :plugin/update} - :pl #{:port :home :host :plugin/marketplace :whiteboard/link} + :pl #{:port :home :host :plugin/marketplace} :pt-BR #{:plugins :right-side-bar/flashcards :settings-page/enable-flashcards :page/backlinks - :host :settings-page/tab-editor :shortcut.category/plugins :whiteboard/link :settings-of-plugins :whiteboard - :whiteboards :on-boarding/quick-tour-journal-page-desc-2 :plugin/downloads :plugin/popular - :right-side-bar/whiteboards :settings-page/enable-whiteboards :settings-page/plugin-system - :shortcut.category/whiteboard :command.whiteboard/zoom-in :command.whiteboard/zoom-out} + :host :settings-page/tab-editor :shortcut.category/plugins :settings-of-plugins + :on-boarding/quick-tour-journal-page-desc-2 :plugin/downloads :plugin/popular + :settings-page/plugin-system} :pt-PT #{:plugins :settings-of-plugins :plugin/downloads :right-side-bar/flashcards :settings-page/enable-flashcards :settings-page/plugin-system} - :nb-NO #{:port :type :whiteboard :right-side-bar/flashcards :right-side-bar/whiteboards - :settings-page/enable-flashcards :settings-page/enable-whiteboards - :settings-page/tab-editor :shortcut.category/whiteboard :whiteboard/medium - :whiteboard/twitter-url :whiteboard/youtube-url :linked-references/filter-heading} + :nb-NO #{:port :type :right-side-bar/flashcards :settings-page/enable-flashcards + :settings-page/tab-editor :linked-references/filter-heading} :tr #{:help/awesome-logseq} :id #{:host :port} - :cs #{:host :port :help/blog :settings-page/tab-editor :whiteboard/text}}) + :cs #{:host :port :help/blog :settings-page/tab-editor}}) (defn- validate-languages-dont-have-duplicates "Looks up duplicates for all languages" diff --git a/src/main/electron/listener.cljs b/src/main/electron/listener.cljs index 90f3a25ab3..23079bacd1 100644 --- a/src/main/electron/listener.cljs +++ b/src/main/electron/listener.cljs @@ -8,7 +8,6 @@ [frontend.db :as db] [frontend.db.async :as db-async] [frontend.handler.notification :as notification] - [frontend.handler.property.util :as pu] [frontend.handler.route :as route-handler] [frontend.handler.search :as search-handler] [frontend.handler.ui :as ui-handler] @@ -67,9 +66,7 @@ block-id (p/let [block (db-async/= width 1024) - (let [draws (d/by-class "draw-iframe") - width (- width 200)] - (doseq [draw draws] - (d/set-style! draw :width (str width "px")) - (let [height (max 700 (/ width 2))] - (d/set-style! draw :height (str height "px"))) - (d/set-style! draw :margin-left (str (- (/ (- width 570) 2)) "px"))))))) - (rum/defcs content < rum/reactive - {:did-mount (fn [state] - (set-draw-iframe-style!) - state) - :did-update (fn [state] - (set-draw-iframe-style!) - state)} + {} [state id {:keys [format config hiccup diff --git a/src/main/frontend/components/export.cljs b/src/main/frontend/components/export.cljs index 1542c05d88..a7be95299d 100644 --- a/src/main/frontend/components/export.cljs +++ b/src/main/frontend/components/export.cljs @@ -227,7 +227,7 @@ (rum/local nil ::content) {:will-mount (fn [state] (let [top-level-uuids (get-top-level-uuids (first (:rum/args state)))] - (reset! *export-block-type (if (:whiteboard? (last (:rum/args state))) :png :text)) + (reset! *export-block-type :text) (if (= @*export-block-type :png) (do (reset! (::content state) nil) (get-image-blob top-level-uuids @@ -238,7 +238,7 @@ (reset! (::text-indent-style state) (state/get-export-block-text-indent-style)) (reset! (::text-other-options state) (state/get-export-block-text-other-options)) (assoc state ::top-level-uuids top-level-uuids)))} - [state _selection-ids {:keys [whiteboard? export-type] :as options}] + [state _selection-ids {:keys [export-type] :as options}] (let [top-level-uuids (::top-level-uuids state) tp @*export-block-type *text-other-options (::text-other-options state) @@ -249,34 +249,34 @@ [:div.export.resize {:class "-m-5"} [:div.p-6 - (when-not whiteboard? - [:div.flex.pb-3 - (ui/button "Text" + [:div.flex.pb-3 + (ui/button "Text" + :class "mr-4 w-20" + :on-click #(do (reset! *export-block-type :text) + (reset! *content (export-helper top-level-uuids)))) + (ui/button "OPML" + :class "mr-4 w-20" + :on-click #(do (reset! *export-block-type :opml) + (reset! *content (export-helper top-level-uuids)))) + (ui/button "HTML" + :class "mr-4 w-20" + :on-click #(do (reset! *export-block-type :html) + (reset! *content (export-helper top-level-uuids)))) + ;; TODO: Remove if this is no longer used after whiteboard removal + (when-not (seq? top-level-uuids) + (ui/button "PNG" :class "mr-4 w-20" - :on-click #(do (reset! *export-block-type :text) - (reset! *content (export-helper top-level-uuids)))) - (ui/button "OPML" - :class "mr-4 w-20" - :on-click #(do (reset! *export-block-type :opml) - (reset! *content (export-helper top-level-uuids)))) - (ui/button "HTML" - :class "mr-4 w-20" - :on-click #(do (reset! *export-block-type :html) - (reset! *content (export-helper top-level-uuids)))) - (when-not (seq? top-level-uuids) - (ui/button "PNG" - :class "mr-4 w-20" - :on-click #(do (reset! *export-block-type :png) - (reset! *content nil) - (get-image-blob top-level-uuids (merge options {:transparent-bg? false}) (fn [blob] (reset! *content blob)))))) - (ui/button "EDN" - :class "w-20" - :on-click #(do (reset! *export-block-type :edn) - (p/let [result ((.*)" - (common-util/safe-decode-uri-component text))] - (try-parse-as-json (second matched-text)))) - (defn- selection-within-link? [selection-and-format] (let [{:keys [selection-start selection-end selection value]} selection-and-format] @@ -125,17 +112,10 @@ (commands/simple-insert! input-id text nil))) text (string/replace *text "\r\n" "\n") ;; Fix for Windows platform input-id (state/get-edit-input-id) - shape-refs-text (when (and (not (string/blank? html)) - (get-whiteboard-tldr-from-text html)) - ;; text should always be prepared block-ref generated in tldr - text) {:keys [selection] :as selection-and-format} (editor-handler/get-selection-and-format) text-url? (common-util/url? text) selection-url? (common-util/url? selection)] (cond - (not (string/blank? shape-refs-text)) - (commands/simple-insert! input-id shape-refs-text nil) - ;; When a url is selected in a formatted link, replaces it with pasted text (or (and (or text-url? selection-url?) (selection-within-link? selection-and-format)) @@ -178,7 +158,6 @@ (replace-text-f text')))))) (defn- paste-copied-blocks-or-text - ;; todo: logseq/whiteboard-shapes is now text/html [input text e html] (util/stop e) (let [repo (state/get-current-repo)] @@ -258,7 +237,6 @@ - pastes file if it exists - wraps certain urls with macros - wraps selected urls with link formatting -- whiteboard friendly pasting - paste replaces selected text" [id] (fn [e] diff --git a/src/main/frontend/handler/property/util.cljs b/src/main/frontend/handler/property/util.cljs index 016ba58081..03a6c62354 100644 --- a/src/main/frontend/handler/property/util.cljs +++ b/src/main/frontend/handler/property/util.cljs @@ -12,10 +12,4 @@ "Get the value of a built-in block's property by its db-ident" [block db-ident] (let [db (conn/get-db (state/get-current-repo))] - (db-property/get-block-property-value db block db-ident))) - -(defn shape-block? - [block] - (let [repo (state/get-current-repo) - db (conn/get-db repo)] - (db-property/shape-block? db block))) + (db-property/get-block-property-value db block db-ident))) \ No newline at end of file diff --git a/src/main/frontend/handler/route.cljs b/src/main/frontend/handler/route.cljs index 88377d220e..89b434c220 100644 --- a/src/main/frontend/handler/route.cljs +++ b/src/main/frontend/handler/route.cljs @@ -146,8 +146,6 @@ (str "#" (:name path-params)) :diff "Git diff" - :draw - "Draw" :settings "Settings" :import diff --git a/src/main/frontend/mixins.cljs b/src/main/frontend/mixins.cljs index a46b3ab1f1..f44cc8e7df 100644 --- a/src/main/frontend/mixins.cljs +++ b/src/main/frontend/mixins.cljs @@ -131,10 +131,10 @@ (swap! open? not))))))) (def container-id - "Notice: the first parameter needs to be a `config` with `id`, optional `sidebar?`, `whiteboard?`" + "Notice: the first parameter needs to be a `config` with `id`, optional `sidebar?`" {:init (fn [state] (let [config (first (:rum/args state)) - key (select-keys config [:id :sidebar? :whiteboard? :embed? :custom-query? :query :current-block :table? :block? :db/id :page-name]) + key (select-keys config [:id :sidebar? :embed? :custom-query? :query :current-block :table? :block? :db/id :page-name]) container-id (or (:container-id config) (state/get-container-id key))] (assoc state :container-id container-id)))}) diff --git a/src/main/frontend/page.cljs b/src/main/frontend/page.cljs index 73c2ea1533..ef5e999ac6 100644 --- a/src/main/frontend/page.cljs +++ b/src/main/frontend/page.cljs @@ -126,16 +126,13 @@ (teardown)))} [] (if-let [route-match (state/sub :route-match)] - (let [route-name (get-in route-match [:data :name])] - (when-let [view (:view (:data route-match))] - (ui/catch-error-and-notify - (helpful-default-error-screen) - [:<> - (if (= :draw route-name) - (view route-match) - (container/root-container - route-match - (view route-match))) - (when config/lsp-enabled? - (plugin/hook-daemon-renderers))]))) + (when-let [view (:view (:data route-match))] + (ui/catch-error-and-notify + (helpful-default-error-screen) + [:<> + (container/root-container + route-match + (view route-match)) + (when config/lsp-enabled? + (plugin/hook-daemon-renderers))])) (not-found))) diff --git a/src/main/frontend/schema/handler/common_config.cljc b/src/main/frontend/schema/handler/common_config.cljc index de61b547c3..ed9bf78d90 100644 --- a/src/main/frontend/schema/handler/common_config.cljc +++ b/src/main/frontend/schema/handler/common_config.cljc @@ -11,7 +11,6 @@ [:feature/enable-search-remove-accents? :boolean] [:feature/enable-journals? :boolean] [:feature/enable-flashcards? :boolean] - [:feature/enable-whiteboards? :boolean] [:feature/disable-scheduled-and-deadline-query? :boolean] [:scheduled/future-days :int] [:start-of-week [:enum 0 1 2 3 4 5 6]] diff --git a/src/main/frontend/state.cljs b/src/main/frontend/state.cljs index 0faea5d75d..ab560ddeba 100644 --- a/src/main/frontend/state.cljs +++ b/src/main/frontend/state.cljs @@ -82,7 +82,6 @@ :network/online? true :me nil :git/current-repo current-graph - :draw? false :db/restoring? nil :search/q "" @@ -148,7 +147,6 @@ :editor/start-pos (atom nil) :editor/async-unsaved-chars (atom nil) :editor/hidden-editors #{} ;; page names - :editor/draw-mode? false :editor/action (atom nil) :editor/action-data nil diff --git a/src/main/frontend/worker/db_worker.cljs b/src/main/frontend/worker/db_worker.cljs index 28509c7fad..07f459734d 100644 --- a/src/main/frontend/worker/db_worker.cljs +++ b/src/main/frontend/worker/db_worker.cljs @@ -513,8 +513,7 @@ tx-data) _ (when context (worker-state/set-context! context)) tx-meta' (cond-> tx-meta - (and (not (:whiteboard/transact? tx-meta)) - (not (:rtc-download-graph? tx-meta))) ; delay writes to the disk + (not (:rtc-download-graph? tx-meta)) ; delay writes to the disk (assoc :skip-store? true) true diff --git a/src/main/frontend/worker/handler/page.cljs b/src/main/frontend/worker/handler/page.cljs index 583b1505ad..ee7cb3eb1a 100644 --- a/src/main/frontend/worker/handler/page.cljs +++ b/src/main/frontend/worker/handler/page.cljs @@ -25,7 +25,6 @@ * :uuid - when set, use this uuid instead of generating a new one. * :class? - when true, adds a :block/tags ':logseq.class/Tag' - * :whiteboard? - when true, adds a :block/tags ':logseq.class/Whiteboard' * :tags - tag uuids that are added to :block/tags * :persist-op? - when true, add an update-page op * :properties - properties to add to the page diff --git a/src/main/frontend/worker/pipeline.cljs b/src/main/frontend/worker/pipeline.cljs index 7dd8fddedd..3b335acc8f 100644 --- a/src/main/frontend/worker/pipeline.cljs +++ b/src/main/frontend/worker/pipeline.cljs @@ -126,7 +126,7 @@ [:db/add eid :logseq.property.class/extends :logseq.class/Root] [:db/retract eid :block/tags :logseq.class/Page]]) - ;; remove #Page from tags/journals/whiteboards, etc. + ;; remove #Page from tags/journals etc. (= (:db/id page-tag) (:v datom)) (let [tags (->> entity :block/tags diff --git a/src/main/frontend/worker/rtc/remote_update.cljs b/src/main/frontend/worker/rtc/remote_update.cljs index 444f85b2e7..cf2f820032 100644 --- a/src/main/frontend/worker/rtc/remote_update.cljs +++ b/src/main/frontend/worker/rtc/remote_update.cljs @@ -123,27 +123,6 @@ :gen-undo-ops? false :rtc-op? true})) -(defmethod transact-db! :delete-whiteboard-blocks [_ conn block-uuids] - (ldb/transact! conn - (mapv (fn [block-uuid] [:db/retractEntity [:block/uuid block-uuid]]) block-uuids) - {:persist-op? false - :gen-undo-ops? false - :rtc-op? true})) - -(defmethod transact-db! :upsert-whiteboard-block [_ conn blocks] - (ldb/transact! conn blocks {:persist-op? false - :gen-undo-ops? false - :rtc-op? true})) - -(defn- group-remote-remove-ops-by-whiteboard-block - "return {true [], false []}" - [db remote-remove-ops] - (group-by (fn [{:keys [block-uuid]}] - (boolean - (when-let [block (d/entity db [:block/uuid block-uuid])] - (ldb/whiteboard? (:block/parent block))))) - remote-remove-ops)) - (defn- apply-remote-remove-ops-helper [conn remove-ops] (let [block-uuid->entity (into {} @@ -164,32 +143,28 @@ :block-uuids-to-remove block-uuid-set})) (defn- apply-remote-remove-ops - [conn remove-ops] - (let [{whiteboard-block-ops true other-ops false} (group-remote-remove-ops-by-whiteboard-block @conn remove-ops)] - (transact-db! :delete-whiteboard-blocks conn (map :block-uuid whiteboard-block-ops)) - - (let [{:keys [block-uuids-need-move block-uuids-to-remove]} - (apply-remote-remove-ops-helper conn other-ops)] + [conn other-ops] + (let [{:keys [block-uuids-need-move block-uuids-to-remove]} + (apply-remote-remove-ops-helper conn other-ops)] ;; move to page-block's first child - (doseq [block-uuid block-uuids-need-move] - (when-let [b (d/entity @conn [:block/uuid block-uuid])] - (when-let [target-b - (d/entity @conn (:db/id (:block/page (d/entity @conn [:block/uuid block-uuid]))))] - (transact-db! :move-blocks&persist-op conn [b] target-b {:sibling? false})))) - (let [deleting-blocks (keep (fn [block-uuid] - (d/entity @conn [:block/uuid block-uuid])) - block-uuids-to-remove)] - (when (seq deleting-blocks) - (transact-db! :delete-blocks conn deleting-blocks {})))))) + (doseq [block-uuid block-uuids-need-move] + (when-let [b (d/entity @conn [:block/uuid block-uuid])] + (when-let [target-b + (d/entity @conn (:db/id (:block/page (d/entity @conn [:block/uuid block-uuid]))))] + (transact-db! :move-blocks&persist-op conn [b] target-b {:sibling? false})))) + (let [deleting-blocks (keep (fn [block-uuid] + (d/entity @conn [:block/uuid block-uuid])) + block-uuids-to-remove)] + (when (seq deleting-blocks) + (transact-db! :delete-blocks conn deleting-blocks {}))))) (defn- insert-or-move-block [conn block-uuid remote-parents remote-block-order move? op-value] (when (or (seq remote-parents) remote-block-order) ;at least one of parent|order exists (let [first-remote-parent (first remote-parents) local-parent (when first-remote-parent (d/entity @conn [:block/uuid first-remote-parent])) - whiteboard-page-block? (boolean (ldb/whiteboard? local-parent)) b (d/entity @conn [:block/uuid block-uuid])] - (case [whiteboard-page-block? (some? local-parent) (some? remote-block-order)] + (case [false (some? local-parent) (some? remote-block-order)] [false true true] (do (if move? @@ -209,9 +184,6 @@ (when (and (empty? remote-parents) move?) (transact-db! :update-block-order-directly conn block-uuid nil remote-block-order)) - ([true false false] [true false true] [true true false] [true true true]) - (throw (ex-info "Not implemented yet for whiteboard" {:op-value op-value})) - (let [e (ex-info "Don't know where to insert" {:block-uuid block-uuid :remote-parents remote-parents :remote-block-order remote-block-order diff --git a/src/test/frontend/handler/paste_test.cljs b/src/test/frontend/handler/paste_test.cljs index 8f3360139c..95046958f5 100644 --- a/src/test/frontend/handler/paste_test.cljs +++ b/src/test/frontend/handler/paste_test.cljs @@ -1,7 +1,6 @@ (ns frontend.handler.paste-test (:require [cljs.test :refer [deftest are is testing]] [frontend.test.helper :as test-helper :include-macros true :refer [deftest-async]] - [goog.object :as gobj] ["/frontend/utils" :as utils] [frontend.state :as state] [frontend.commands :as commands] @@ -12,34 +11,6 @@ [frontend.handler.editor :as editor-handler] [frontend.handler.paste :as paste-handler])) -(deftest try-parse-as-json-result-parse-test - (are [x y] (let [result (#'paste-handler/try-parse-as-json x) - obj-result (if (object? result) result #js{})] - (gobj/get obj-result "foo") ;; This op shouldn't throw - (gobj/getValueByKeys obj-result "foo" "bar") ;; This op shouldn't throw - (gobj/equals result y)) - "{\"number\": 1234}" #js{:number 1234} - "1234" 1234 - "null" nil - "true" true - "[1234, 5678]" #js[1234 5678] - ;; invalid JSON - "{number: 1234}" #js{})) - -(deftest try-parse-as-json-result-get-test - (are [x y z] (let [result (#'paste-handler/try-parse-as-json x) - obj-result (if (object? result) result #js{})] - (and (gobj/equals (gobj/get obj-result "foo") y) - (gobj/equals (gobj/getValueByKeys obj-result "foo" "bar") z))) - "{\"foo\": {\"bar\": 1234}}" #js{:bar 1234} 1234 - "{\"number\": 1234}" nil nil - "1234" nil nil - "null" nil nil - "true" nil nil - "[{\"number\": 1234}]" nil nil - ;; invalid JSON - "{number: 1234}" nil nil)) - (deftest selection-within-link-test (are [x y] (= (#'paste-handler/selection-within-link? x) y) {:format :markdown