From b1149309df2e15fa29d1ade4c837a46a85ae917e Mon Sep 17 00:00:00 2001 From: Martin Klepsch Date: Sun, 21 Mar 2021 10:42:55 +0100 Subject: [PATCH 01/16] add configuration files for clj-kondo + rum defc --- .clj-kondo/config.edn | 9 ++++++ .clj-kondo/hooks/rum.clj | 68 ++++++++++++++++++++++++++++++++++++++++ .gitignore | 2 +- 3 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 .clj-kondo/config.edn create mode 100644 .clj-kondo/hooks/rum.clj diff --git a/.clj-kondo/config.edn b/.clj-kondo/config.edn new file mode 100644 index 000000000..ecbf20997 --- /dev/null +++ b/.clj-kondo/config.edn @@ -0,0 +1,9 @@ +{:linters {:unresolved-symbol {:exclude [goog.DEBUG]}} + :hooks {:analyze-call {rum.core/defc hooks.rum/defc + rum.core/defcs hooks.rum/defcs}} + :lint-as {promesa.core/let clojure.core/let + garden.def/defstyles clojure.core/def + garden.def/defkeyframes clojure.core/def + rum.core/defcc rum.core/defc + clojure.test.check.clojure-test/defspec clojure.core/def + clojure.test.check.properties/for-all clojure.core/for}} diff --git a/.clj-kondo/hooks/rum.clj b/.clj-kondo/hooks/rum.clj new file mode 100644 index 000000000..e3959c309 --- /dev/null +++ b/.clj-kondo/hooks/rum.clj @@ -0,0 +1,68 @@ +(ns hooks.rum + (:require [clj-kondo.hooks-api :as api])) + +(defn fn-body? [x] + (and (seq? x) + (vector? (first x)))) + +(defn rewrite-body [mixins body defcs?] + (if defcs? + (let [[binding-vec & body] (:children body) + [state-arg & rest-args] (:children binding-vec) + ;; the original vector without the state argument + fn-args (assoc binding-vec :children rest-args) + body (api/list-node + (list* (api/token-node 'let*) + (api/vector-node [state-arg (api/token-node nil)]) + state-arg + (concat mixins body))) + body (api/list-node [fn-args body])] + body) + (let [[binding-vec & body] (:children body)] + (api/list-node (cons binding-vec (concat mixins body)))))) + +(defn rewrite + ([node] (rewrite node false)) + ([node defcs?] + (let [args (rest (:children node)) + component-name (first args) + ?docstring (when (string? (api/sexpr (second args))) + (second args)) + args (if ?docstring + (nnext args) + (next args)) + bodies + (loop [args* (seq args) + mixins [] + bodies []] + (if args* + (let [a (first args*) + a-sexpr (api/sexpr a)] + (cond (vector? a-sexpr) ;; a-sexpr is a binding vec and the rest is the body of the function + [(rewrite-body mixins (api/list-node args*) defcs?)] + (fn-body? a-sexpr) + (recur (next args*) + mixins + (conj bodies (rewrite-body mixins a defcs?))) + ;; assume mixin + :else (recur (next args*) + (conj mixins a) + bodies))) + bodies)) + new-node (with-meta + (api/list-node + (list* (api/token-node 'defn) + component-name + (if ?docstring + (cons ?docstring bodies) + bodies))) + (meta node))] + new-node))) + +(defn defc [{:keys [:node]}] + (let [new-node (rewrite node)] + {:node new-node})) + +(defn defcs [{:keys [:node]}] + (let [new-node (rewrite node true)] + {:node new-node})) diff --git a/.gitignore b/.gitignore index 904dc1ac8..f6300c842 100644 --- a/.gitignore +++ b/.gitignore @@ -29,5 +29,5 @@ strings.csv .calva resources/electron.js -.clj-kondo/ +.clj-kondo/.cache .lsp/ From 86bf129b333a9ba5cfb769a787f1c5658095a5c7 Mon Sep 17 00:00:00 2001 From: Tienson Qin Date: Mon, 22 Mar 2021 11:16:25 +0800 Subject: [PATCH 02/16] chore: bump is-svg --- package.json | 3 ++- yarn.lock | 9 ++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index cf41d0a77..3f8c0dbd4 100644 --- a/package.json +++ b/package.json @@ -81,6 +81,7 @@ "react-textarea-autosize": "^8.0.1", "react-transition-group": "^4.3.0", "url": "^0.11.0", - "yargs-parser": "^20.2.4" + "yargs-parser": "^20.2.4", + "is-svg": "4.2.2" } } diff --git a/yarn.lock b/yarn.lock index 820020d36..87692e5c7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2794,7 +2794,7 @@ hsla-regex@^1.0.0: resolved "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38" integrity sha1-wc56MWjIxmFAM6S194d/OyJfnDg= -html-comment-regex@^1.1.0: +html-comment-regex@^1.1.0, html-comment-regex@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7" integrity sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ== @@ -3221,6 +3221,13 @@ is-stream@^1.1.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= +is-svg@4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-4.2.2.tgz#a4ea0f3f78dada7085db88f1e85b6f845626cfae" + integrity sha512-JlA7Mc7mfWjdxxTkJ094oUK9amGD7gQaj5xA/NCY0vlVvZ1stmj4VX+bRuwOMN93IHRZ2ctpPH/0FO6DqvQ5Rw== + dependencies: + html-comment-regex "^1.1.2" + is-svg@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-3.0.0.tgz#9321dbd29c212e5ca99c4fa9794c714bcafa2f75" From b98e2e1dc813d094b4ae8aa4f1f148fee5f8ff79 Mon Sep 17 00:00:00 2001 From: Tienson Qin Date: Mon, 22 Mar 2021 15:59:21 +0800 Subject: [PATCH 03/16] chore: bump mldoc --- package.json | 2 +- src/main/frontend/components/block.cljs | 29 +++++++++++-------------- yarn.lock | 8 +++---- 3 files changed, 18 insertions(+), 21 deletions(-) diff --git a/package.json b/package.json index 3f8c0dbd4..ed5e66b30 100644 --- a/package.json +++ b/package.json @@ -72,7 +72,7 @@ "gulp-cached": "^1.1.1", "ignore": "^5.1.8", "jszip": "^3.5.0", - "mldoc": "0.5.5", + "mldoc": "0.5.6", "mousetrap": "^1.6.5", "path": "^0.12.7", "react": "^17.0.1", diff --git a/src/main/frontend/components/block.cljs b/src/main/frontend/components/block.cljs index 05775b887..3bafe790d 100644 --- a/src/main/frontend/components/block.cljs +++ b/src/main/frontend/components/block.cljs @@ -572,22 +572,19 @@ ["Subscript" l] (->elem :sub (map-inline config l)) ["Tag" s] - (if (and s (util/tag-valid? s)) - [:a.tag {:data-ref s - :href (rfe/href :page {:name s}) - :on-click (fn [e] - (let [repo (state/get-current-repo) - page (db/pull repo '[*] [:page/name (string/lower-case (util/url-decode s))])] - (when (gobj/get e "shiftKey") - (state/sidebar-add-block! - repo - (:db/id page) - :page - {:page page}) - (.preventDefault e))))} - (str "#" s)] - [:span.warning.mr-1 {:title "Invalid tag, tags only accept alphanumeric characters, \"-\", \"_\", \"@\" and \"%\"."} - (str "#" s)]) + [:a.tag {:data-ref s + :href (rfe/href :page {:name s}) + :on-click (fn [e] + (let [repo (state/get-current-repo) + page (db/pull repo '[*] [:page/name (string/lower-case (util/url-decode s))])] + (when (gobj/get e "shiftKey") + (state/sidebar-add-block! + repo + (:db/id page) + :page + {:page page}) + (.preventDefault e))))} + (str "#" s)] ["Emphasis" [[kind] data]] (let [elem (case kind "Bold" :b diff --git a/yarn.lock b/yarn.lock index 87692e5c7..9ef37fa52 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3853,10 +3853,10 @@ mkdirp@^0.5.4, mkdirp@~0.5.1: dependencies: minimist "^1.2.5" -mldoc@0.5.5: - version "0.5.5" - resolved "https://registry.yarnpkg.com/mldoc/-/mldoc-0.5.5.tgz#cb7eea471adc94e1c7858d4ae772ddabe0a75753" - integrity sha512-acseZvvwzLNlvp6/fZzqP5rqS80keWOK1XCreem5eXJNxLtJm+xIqzEJVcsmeyFS1Leya1gPT7dMcCUOhEr26g== +mldoc@0.5.6: + version "0.5.6" + resolved "https://registry.yarnpkg.com/mldoc/-/mldoc-0.5.6.tgz#aa4351791e11b9c8a8df359a9d87619d7ff02e5d" + integrity sha512-iRTuTmLUdR8OKiRrrM4dl+51jxAmOJ92+B3rsYuKZERaYcU0B9jiJBT9S2nDZldARNEwjhj8DKITdnJZMxArGQ== dependencies: yargs "^12.0.2" From a1f5c715d05cba202b18f16bbcb51a8bbbd9920c Mon Sep 17 00:00:00 2001 From: Tienson Qin Date: Mon, 22 Mar 2021 16:00:59 +0800 Subject: [PATCH 04/16] fix: don't show brackets for tags --- src/main/frontend/components/block.cljs | 28 +++++++++++++------------ 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/src/main/frontend/components/block.cljs b/src/main/frontend/components/block.cljs index 3bafe790d..1f5b40acc 100644 --- a/src/main/frontend/components/block.cljs +++ b/src/main/frontend/components/block.cljs @@ -572,19 +572,21 @@ ["Subscript" l] (->elem :sub (map-inline config l)) ["Tag" s] - [:a.tag {:data-ref s - :href (rfe/href :page {:name s}) - :on-click (fn [e] - (let [repo (state/get-current-repo) - page (db/pull repo '[*] [:page/name (string/lower-case (util/url-decode s))])] - (when (gobj/get e "shiftKey") - (state/sidebar-add-block! - repo - (:db/id page) - :page - {:page page}) - (.preventDefault e))))} - (str "#" s)] + (when s + (let [s (text/page-ref-un-brackets! s)] + [:a.tag {:data-ref s + :href (rfe/href :page {:name s}) + :on-click (fn [e] + (let [repo (state/get-current-repo) + page (db/pull repo '[*] [:page/name (string/lower-case (util/url-decode s))])] + (when (gobj/get e "shiftKey") + (state/sidebar-add-block! + repo + (:db/id page) + :page + {:page page}) + (.preventDefault e))))} + (str "#" s)])) ["Emphasis" [[kind] data]] (let [elem (case kind "Bold" :b From ba5259feb9fbac3267cacf631f61594df0c1a0cb Mon Sep 17 00:00:00 2001 From: Tienson Qin Date: Mon, 22 Mar 2021 16:16:55 +0800 Subject: [PATCH 05/16] fix: keep copy-paste buffer intact when deleting blocks Related to #1507 --- src/main/frontend/components/content.cljs | 12 ++++++------ src/main/frontend/handler/editor.cljs | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main/frontend/components/content.cljs b/src/main/frontend/components/content.cljs index 97002187a..a521dde50 100644 --- a/src/main/frontend/components/content.cljs +++ b/src/main/frontend/components/content.cljs @@ -51,7 +51,7 @@ [:div.py-1.rounded-md.bg-base-3.shadow-xs (ui/menu-link {:key "cut" - :on-click editor-handler/cut-selection-blocks} + :on-click #(editor-handler/cut-selection-blocks true)} "Cut") (ui/menu-link {:key "copy" @@ -254,8 +254,8 @@ (defn- cut-blocks-and-clear-selections! - [_] - (editor-handler/cut-selection-blocks) + [copy?] + (editor-handler/cut-selection-blocks copy?) (editor-handler/clear-selection! nil)) (rum/defc hidden-selection < rum/reactive @@ -264,11 +264,11 @@ (editor-handler/copy-selection-blocks) (editor-handler/clear-selection! nil))) (mixins/keyboard-mixin (util/->system-modifier "ctrl+x") - cut-blocks-and-clear-selections!) + (fn [] (cut-blocks-and-clear-selections! true))) (mixins/keyboard-mixin "backspace" - cut-blocks-and-clear-selections!) + (fn [] (cut-blocks-and-clear-selections! false))) (mixins/keyboard-mixin "delete" - cut-blocks-and-clear-selections!) + (fn [] (cut-blocks-and-clear-selections! false))) [] [:div#selection.hidden]) diff --git a/src/main/frontend/handler/editor.cljs b/src/main/frontend/handler/editor.cljs index fef329a14..585aa42d0 100644 --- a/src/main/frontend/handler/editor.cljs +++ b/src/main/frontend/handler/editor.cljs @@ -1219,8 +1219,8 @@ (common-handler/copy-to-clipboard-without-id-property! content))))) (defn cut-selection-blocks - [] - (copy-selection-blocks) + [copy?] + (when copy? (copy-selection-blocks)) (when-let [blocks (seq (get-selected-blocks-with-children))] (let [repo (dom/attr (first blocks) "repo") ids (distinct (map #(uuid (dom/attr % "blockid")) blocks))] From 5bf0e2923904eff89a911ba9c1e0c47ede7d7546 Mon Sep 17 00:00:00 2001 From: rcmerci Date: Sun, 21 Mar 2021 17:28:00 +0800 Subject: [PATCH 06/16] fix(export): also take :page/original-name into exporting markdown --- src/main/frontend/handler/export.cljs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main/frontend/handler/export.cljs b/src/main/frontend/handler/export.cljs index 28365f141..5b6b4c973 100644 --- a/src/main/frontend/handler/export.cljs +++ b/src/main/frontend/handler/export.cljs @@ -178,11 +178,17 @@ (db/pull-many repo '[*] block-ids) pages-name-and-content (->> page-ids - (d/q '[:find ?n (pull ?p [:file/path]) + (d/q '[:find ?n ?n2 (pull ?p [:file/path]) :in $ [?e ...] :where [?e :page/file ?p] - [?e :page/name ?n]] (db/get-conn repo)) + [?e :page/name ?n] + [?e :page/original-name ?n2]] (db/get-conn repo)) + (mapv (fn [[name origin-name file-path]] + (if (= name origin-name) + [[name file-path]] + [[name file-path] [origin-name file-path]]))) + (apply concat) (mapv (fn [[page-name file-path]] [page-name (:file/path file-path)])) (d/q '[:find ?n ?c :in $ [[?n ?p] ...] From 097989ee6f6ca0feb6d00112ea80409401e992af Mon Sep 17 00:00:00 2001 From: charlie Date: Sat, 20 Mar 2021 17:37:08 +0800 Subject: [PATCH 07/16] improve(dev): live the std out/err when watch CSS bulid --- gulpfile.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/gulpfile.js b/gulpfile.js index 4594d7f48..fce8f5fa1 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -14,7 +14,10 @@ const resourceFilePath = path.join(resourcesPath, '**') const css = { watchCSS () { - return exec(`yarn css:watch`, {}) + return cp.spawn(`yarn css:watch`, { + shell: true, + stdio: 'inherit' + }) }, buildCSS (...params) { From eaf64478a9a1ddf1d43cf928b5b45a21ac15f326 Mon Sep 17 00:00:00 2001 From: Tienson Qin Date: Tue, 23 Mar 2021 13:15:45 +0800 Subject: [PATCH 08/16] fix: react key warnings --- src/main/frontend/components/block.cljs | 45 +++++++++++++++---------- 1 file changed, 28 insertions(+), 17 deletions(-) diff --git a/src/main/frontend/components/block.cljs b/src/main/frontend/components/block.cljs index 1f5b40acc..00c76e9d0 100644 --- a/src/main/frontend/components/block.cljs +++ b/src/main/frontend/components/block.cljs @@ -326,7 +326,7 @@ (declare page-reference) -(defn page-cp +(rum/defc page-cp [{:keys [html-export? label children contents-page?] :as config} page] (when-let [page-name (:page/name page)] (let [source-page (model/get-alias-source-page (state/get-current-repo) @@ -741,9 +741,10 @@ [:br] ["Timestamp" ["Scheduled" t]] - (timestamp t "Scheduled") + nil ["Timestamp" ["Deadline" t]] - (timestamp t "Deadline") + nil + ["Timestamp" ["Date" t]] (timestamp t "Date") ["Timestamp" ["Closed" t]] @@ -1255,26 +1256,36 @@ [:div [:h1 (:page-name config)]] block-cp)))) +(rum/defc span-comma + [] + [:span ", "]) + +(rum/defc property-cp + [config block k v] + [:div.my-1 + [:b k] + [:span.mr-1 ":"] + (if (coll? v) + (let [v (->> (remove string/blank? v) + (filter string?)) + vals (for [v-item v] + (page-cp config {:page/name v-item})) + elems (interpose (span-comma) vals)] + (for [elem elems] + (rum/with-key elem (str (random-uuid))))) + (let [page-name (string/lower-case (str v))] + (if (db/entity [:page/name page-name]) + (page-cp config {:page/name page-name}) + (inline-text (:block/format block) (str v)))))]) + (rum/defc properties-cp [config block] (let [properties (apply dissoc (:block/properties block) text/hidden-properties)] (when (seq properties) [:div.blocks-properties.text-sm.opacity-80.my-1.p-2 (for [[k v] properties] - ^{:key (str (:block/uuid block) "-" k)} - [:div.my-1 - [:b k] - [:span.mr-1 ":"] - (if (coll? v) - (let [v (->> (remove string/blank? v) - (filter string?)) - vals (for [v-item v] - (page-cp config {:page/name v-item}))] - (interpose [:span ", "] vals)) - (let [page-name (string/lower-case (str v))] - (if (db/entity [:page/name page-name]) - (page-cp config {:page/name page-name}) - (inline-text (:block/format block) (str v)))))])]))) + (rum/with-key (property-cp config block k v) + (str (:block/uuid block) "-" k)))]))) (rum/defcs timestamp-cp < rum/reactive (rum/local false ::show?) From 9eab95786b4fd848fda497562852ef35f28a1e7e Mon Sep 17 00:00:00 2001 From: rcmerci Date: Tue, 23 Mar 2021 13:49:40 +0800 Subject: [PATCH 09/16] feat: support exporting single page to markdown --- src/main/frontend/components/export.cljs | 14 +++++++++ src/main/frontend/components/page.cljs | 5 +++ src/main/frontend/db/model.cljs | 5 ++- src/main/frontend/handler/export.cljs | 39 +++++++++++++++++++----- 4 files changed, 54 insertions(+), 9 deletions(-) diff --git a/src/main/frontend/components/export.cljs b/src/main/frontend/components/export.cljs index c11a51af4..6809346c1 100644 --- a/src/main/frontend/components/export.cljs +++ b/src/main/frontend/components/export.cljs @@ -28,3 +28,17 @@ [:a#download-as-html.hidden] [:a#download-as-zip.hidden] [:a#export-as-markdown.hidden]]))) + + +(rum/defc export-page + [] + (when-let [current-repo (state/get-current-repo)] + (when-let [page (state/get-current-page)] + (rum/with-context [[t] i18n/*tongue-context*] + [:div.export.w-96 + [:h1.title "Export"] + [:ul.mr-1 + [:li.mb-4 + [:a.font-medium {:on-click #(export/export-page-as-markdown! page)} + (t :export-markdown)]]] + [:a#export-page-as-markdown.hidden]])))) diff --git a/src/main/frontend/components/page.cljs b/src/main/frontend/components/page.cljs index 596ea6b7c..4ce78442e 100644 --- a/src/main/frontend/components/page.cljs +++ b/src/main/frontend/components/page.cljs @@ -16,6 +16,7 @@ [frontend.components.editor :as editor] [frontend.components.reference :as reference] [frontend.components.svg :as svg] + [frontend.components.export :as export] [frontend.extensions.graph-2d :as graph-2d] [frontend.ui :as ui] [frontend.components.content :as content] @@ -313,6 +314,10 @@ {:title (t :page/delete) :options {:on-click #(state/set-modal! (delete-page-dialog page-name))}}) + (when (state/get-current-page) + {:title (t :export) + :options {:on-click #(state/set-modal! export/export-page)}}) + (when (util/electron?) {:title (t (if public? :page/make-private :page/make-public)) :options {:on-click diff --git a/src/main/frontend/db/model.cljs b/src/main/frontend/db/model.cljs index f8f2bfc2c..5d11edaae 100644 --- a/src/main/frontend/db/model.cljs +++ b/src/main/frontend/db/model.cljs @@ -271,6 +271,7 @@ @conn) (into {})))) + (defn get-files-full [repo] (when-let [conn (conn/get-files-conn repo)] @@ -705,9 +706,11 @@ (defn get-page-file [page-name] - (some-> (db-utils/entity [:page/name page-name]) + (some-> (or (db-utils/entity [:page/name page-name]) + (db-utils/entity [:page/original-name page-name])) :page/file)) + (defn get-block-file [block-id] (let [page-id (some-> (db-utils/entity [:block/uuid block-id]) diff --git a/src/main/frontend/handler/export.cljs b/src/main/frontend/handler/export.cljs index 5b6b4c973..ce13461fe 100644 --- a/src/main/frontend/handler/export.cljs +++ b/src/main/frontend/handler/export.cljs @@ -205,23 +205,46 @@ {:embed_blocks embed-blocks :embed_pages pages-name-and-content})) +(defn- export-files-as-markdown + [repo files heading-to-list?] + (->> files + (mapv (fn [{:keys [path content names format]}] + (when (first names) + [path (fp/exportMarkdown f/mldoc-record content + (f/get-default-config format heading-to-list?) + (js/JSON.stringify + (clj->js (get-embed-and-refs-blocks-pages repo (first names)))))]))) + (remove nil?))) + (defn export-repo-as-markdown! [repo] (when-let [repo (state/get-current-repo)] (when-let [files (get-file-contents-with-suffix repo)] (let [heading-to-list? (state/export-heading-to-list?) files - (->> files - (mapv (fn [{:keys [path content names format]}] - (when (first names) - [path (fp/exportMarkdown f/mldoc-record content - (f/get-default-config format heading-to-list?) - (js/JSON.stringify - (clj->js (get-embed-and-refs-blocks-pages repo (first names)))))]))) - (remove nil?)) + (export-files-as-markdown repo files heading-to-list?) zip-file-name (str repo "_markdown_" (quot (util/time-ms) 1000))] (p/let [zipfile (zip/make-zip zip-file-name files)] (when-let [anchor (gdom/getElement "export-as-markdown")] (.setAttribute anchor "href" (js/window.URL.createObjectURL zipfile)) (.setAttribute anchor "download" (.-name zipfile)) (.click anchor))))))) + +(defn export-page-as-markdown! + [page-name] + (when-let [repo (state/get-current-repo)] + (when-let [file (db/get-page-file page-name)] + (when-let [path (:file/path file)] + (when-let [content (db/get-file path)] + (let [names [page-name] + format (f/get-format path) + files [{:path path :content content :names names :format format}]] + (let [files + (export-files-as-markdown repo files (state/export-heading-to-list?))] + (let [data (js/Blob. [(second (first files))] + (clj->js {:type "text/plain;charset=utf-8,"}))] + (let [anchor (gdom/getElement "export-page-as-markdown") + url (js/window.URL.createObjectURL data)] + (.setAttribute anchor "href" url) + (.setAttribute anchor "download" path) + (.click anchor)))))))))) From c4ffbac1071fdc73f0b9ab880ec3d29297be6704 Mon Sep 17 00:00:00 2001 From: Tienson Qin Date: Tue, 23 Mar 2021 20:35:17 +0800 Subject: [PATCH 10/16] feat: markdown underline command --- src/main/frontend/commands.cljs | 5 +++++ src/main/frontend/state.cljs | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/src/main/frontend/commands.cljs b/src/main/frontend/commands.cljs index 5ab2989f6..0aff4337d 100644 --- a/src/main/frontend/commands.cljs +++ b/src/main/frontend/commands.cljs @@ -147,6 +147,11 @@ ["Embed Vimeo Video" [[:editor/input "{{vimeo }}" {:last-pattern slash :backward-pos 2}]]] + (when (state/markdown?) + ["Underline" [[:editor/input "" + {:last-pattern slash + :backward-pos 6}]]]) + ["Html Inline " (->inline "html")] ;; TODO: diff --git a/src/main/frontend/state.cljs b/src/main/frontend/state.cljs index 4c07f6bfe..e085aae46 100644 --- a/src/main/frontend/state.cljs +++ b/src/main/frontend/state.cljs @@ -250,6 +250,11 @@ (get-in @state [:me :preferred_format] "markdown"))))) +(defn markdown? + [] + (= (keyword (get-preferred-format)) + :markdown)) + (defn get-pages-directory [] (or From f8d1e901187735289420931e87b275fb0f71f5bb Mon Sep 17 00:00:00 2001 From: Tienson Qin Date: Tue, 23 Mar 2021 20:56:23 +0800 Subject: [PATCH 11/16] feat: render Inline_Html --- src/main/frontend/components/block.cljs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/frontend/components/block.cljs b/src/main/frontend/components/block.cljs index 00c76e9d0..8d55c8254 100644 --- a/src/main/frontend/components/block.cljs +++ b/src/main/frontend/components/block.cljs @@ -735,6 +735,12 @@ (-> (safe-read-string s) (security/remove-javascript-links-in-href))) + ["Inline_Html" s] + (when (not html-export?) + ;; TODO: how to remove span and only export the content of `s`? + [:span {:dangerouslySetInnerHTML + {:__html s}}]) + ["Break_Line"] [:br] ["Hard_Break_Line"] From f0911f43b1dcc6715d7536d6072eb254067abe1a Mon Sep 17 00:00:00 2001 From: Weihua Date: Wed, 24 Mar 2021 12:34:07 +0800 Subject: [PATCH 12/16] fix: use qualified lib --- deps.edn | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deps.edn b/deps.edn index 686b080ed..7890712ac 100755 --- a/deps.edn +++ b/deps.edn @@ -12,7 +12,7 @@ ;; datascript {:mvn/version "1.0.1"} datascript-transit/datascript-transit {:mvn/version "0.3.0" - :exclusions [datascript]} + :exclusions [datascript/datascript]} borkdude/rewrite-edn {:git/url "https://github.com/borkdude/rewrite-edn" :sha "edd87dc7f045f28d7afcbfc44bc0f0a2683dde62"} funcool/promesa {:mvn/version "4.0.2"} From 7f51f667bb08b4069b098f48ac74311cac1d4eb9 Mon Sep 17 00:00:00 2001 From: Weihua Date: Wed, 24 Mar 2021 13:01:52 +0800 Subject: [PATCH 13/16] use logseq fork of datascript cherry-picked one commit from upstream to deprecate qualified lib warning everything else is same --- deps.edn | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/deps.edn b/deps.edn index 7890712ac..177d2eb1f 100755 --- a/deps.edn +++ b/deps.edn @@ -7,8 +7,8 @@ ;; persistent-sorted-set {:mvn/version "0.1.2"} ;; FIXME: doesn't work on my archlinux laptop (tienson) ;; The required namespace "datascript.core" is not available, it was required by "frontend/db.cljs". - datascript/datascript {:git/url "https://github.com/tiensonqin/datascript", - :sha "efde8d389e6703b6f60ca3538f484a579b0d6de0"} + datascript/datascript {:git/url "https://github.com/logseq/datascript", + :sha "5c1983cdfbdaa4ba6f8410b54853ea3a78a0cd8c"} ;; datascript {:mvn/version "1.0.1"} datascript-transit/datascript-transit {:mvn/version "0.3.0" From 35ccd5b4033e106a3c36a9c1e03335d38ac3adb7 Mon Sep 17 00:00:00 2001 From: ahonn Date: Wed, 24 Mar 2021 19:49:32 +0800 Subject: [PATCH 14/16] feat: add electron-window-state to remember the window state --- package.json | 5 +++-- src/electron/electron/core.cljs | 7 +++++-- yarn.lock | 10 +++++++++- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index ed5e66b30..7bc970859 100644 --- a/package.json +++ b/package.json @@ -66,11 +66,13 @@ "diff": "5.0.0", "diff-match-patch": "^1.0.5", "electron": "^11.2.0", + "electron-window-state": "^5.0.3", "fs": "^0.0.1-security", "fs-extra": "^9.1.0", "fuse.js": "^6.4.6", "gulp-cached": "^1.1.1", "ignore": "^5.1.8", + "is-svg": "4.2.2", "jszip": "^3.5.0", "mldoc": "0.5.6", "mousetrap": "^1.6.5", @@ -81,7 +83,6 @@ "react-textarea-autosize": "^8.0.1", "react-transition-group": "^4.3.0", "url": "^0.11.0", - "yargs-parser": "^20.2.4", - "is-svg": "4.2.2" + "yargs-parser": "^20.2.4" } } diff --git a/src/electron/electron/core.cljs b/src/electron/electron/core.cljs index 85d483bb5..0680e975c 100644 --- a/src/electron/electron/core.cljs +++ b/src/electron/electron/core.cljs @@ -7,6 +7,7 @@ ["fs-extra" :as fs] ["path" :as path] ["electron" :refer [BrowserWindow app protocol ipcMain dialog] :as electron] + ["electron-window-state" :as windowStateKeeper] [clojure.core.async :as async] [electron.state :as state])) @@ -22,8 +23,9 @@ (defn create-main-window "Creates main app window" [] - (let [win-opts {:width 980 - :height 700 + (let [win-state (windowStateKeeper (clj->js {:defaultWidth 980 :defaultHeight 700})) + win-opts {:width (.-width win-state) + :height (.-height win-state) :frame (not mac?) :autoHideMenuBar (not mac?) :titleBarStyle (if mac? "hidden" nil) @@ -35,6 +37,7 @@ :preload (path/join js/__dirname "js/preload.js")}} url MAIN_WINDOW_ENTRY win (BrowserWindow. (clj->js win-opts))] + (.manage win-state win) (.loadURL win url) (when dev? (.. win -webContents (openDevTools))) win)) diff --git a/yarn.lock b/yarn.lock index 9ef37fa52..9d76a7945 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1854,6 +1854,14 @@ electron-to-chromium@^1.3.649: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.657.tgz#a9c307f2612681245738bb8d36d997cbb568d481" integrity sha512-/9ROOyvEflEbaZFUeGofD+Tqs/WynbSTbNgNF+/TJJxH1ePD/e6VjZlDJpW3FFFd3nj5l3Hd8ki2vRwy+gyRFw== +electron-window-state@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/electron-window-state/-/electron-window-state-5.0.3.tgz#4f36d09e3f953d87aff103bf010f460056050aa8" + integrity sha512-1mNTwCfkolXl3kMf50yW3vE2lZj0y92P/HYWFBrb+v2S/pCka5mdwN3cagKm458A7NjndSwijynXgcLWRodsVg== + dependencies: + jsonfile "^4.0.0" + mkdirp "^0.5.1" + electron@^11.2.0: version "11.2.3" resolved "https://registry.yarnpkg.com/electron/-/electron-11.2.3.tgz#8ad1d9858436cfca0e2e5ea7fea326794ae58ebb" @@ -3846,7 +3854,7 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp@^0.5.4, mkdirp@~0.5.1: +mkdirp@^0.5.1, mkdirp@^0.5.4, mkdirp@~0.5.1: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== From 0670c5466127ea7f07aae515d5bd629af87a7c47 Mon Sep 17 00:00:00 2001 From: Tienson Qin Date: Wed, 24 Mar 2021 20:13:57 +0800 Subject: [PATCH 15/16] fix: move electron-window-state to resources/package.json --- package.json | 1 - resources/package.json | 3 ++- yarn.lock | 10 +--------- 3 files changed, 3 insertions(+), 11 deletions(-) diff --git a/package.json b/package.json index 7bc970859..729d7a96a 100644 --- a/package.json +++ b/package.json @@ -66,7 +66,6 @@ "diff": "5.0.0", "diff-match-patch": "^1.0.5", "electron": "^11.2.0", - "electron-window-state": "^5.0.3", "fs": "^0.0.1-security", "fs-extra": "^9.1.0", "fuse.js": "^6.4.6", diff --git a/resources/package.json b/resources/package.json index b59df68c1..48ddbbf7a 100644 --- a/resources/package.json +++ b/resources/package.json @@ -20,7 +20,8 @@ "node-fetch": "^2.6.1", "open": "^7.3.1", "chokidar": "^3.5.1", - "fs-extra": "^9.1.0" + "fs-extra": "^9.1.0", + "electron-window-state": "^5.0.3" }, "devDependencies": { "@electron-forge/cli": "^6.0.0-beta.54", diff --git a/yarn.lock b/yarn.lock index 9d76a7945..9ef37fa52 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1854,14 +1854,6 @@ electron-to-chromium@^1.3.649: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.657.tgz#a9c307f2612681245738bb8d36d997cbb568d481" integrity sha512-/9ROOyvEflEbaZFUeGofD+Tqs/WynbSTbNgNF+/TJJxH1ePD/e6VjZlDJpW3FFFd3nj5l3Hd8ki2vRwy+gyRFw== -electron-window-state@^5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/electron-window-state/-/electron-window-state-5.0.3.tgz#4f36d09e3f953d87aff103bf010f460056050aa8" - integrity sha512-1mNTwCfkolXl3kMf50yW3vE2lZj0y92P/HYWFBrb+v2S/pCka5mdwN3cagKm458A7NjndSwijynXgcLWRodsVg== - dependencies: - jsonfile "^4.0.0" - mkdirp "^0.5.1" - electron@^11.2.0: version "11.2.3" resolved "https://registry.yarnpkg.com/electron/-/electron-11.2.3.tgz#8ad1d9858436cfca0e2e5ea7fea326794ae58ebb" @@ -3854,7 +3846,7 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp@^0.5.1, mkdirp@^0.5.4, mkdirp@~0.5.1: +mkdirp@^0.5.4, mkdirp@~0.5.1: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== From cecc240d9a2f3b3bc5b7b6aad0f9be83ca05cd1a Mon Sep 17 00:00:00 2001 From: Tienson Qin Date: Wed, 24 Mar 2021 21:06:24 +0800 Subject: [PATCH 16/16] chore: bump mldoc --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 729d7a96a..1e0f85304 100644 --- a/package.json +++ b/package.json @@ -73,7 +73,7 @@ "ignore": "^5.1.8", "is-svg": "4.2.2", "jszip": "^3.5.0", - "mldoc": "0.5.6", + "mldoc": "0.5.8", "mousetrap": "^1.6.5", "path": "^0.12.7", "react": "^17.0.1",