mirror of
https://github.com/logseq/logseq.git
synced 2026-02-01 14:43:56 +00:00
fix: rm whiteboard and tldraw from graph-parser
Also disable test block which is causing an intermittent ref issue to investigate later
This commit is contained in:
6
deps/graph-parser/.carve/ignore
vendored
6
deps/graph-parser/.carve/ignore
vendored
@@ -10,8 +10,4 @@ logseq.graph-parser.text/get-file-basename
|
||||
logseq.graph-parser.mldoc/mldoc-link?
|
||||
;; API
|
||||
logseq.graph-parser.text/get-page-name
|
||||
logseq.graph-parser.text/get-namespace-last-part
|
||||
;; API
|
||||
logseq.graph-parser.whiteboard/shape->block
|
||||
;; API
|
||||
logseq.graph-parser.test.docs-graph-helper/clone-docs-repo-if-not-exists
|
||||
logseq.graph-parser.text/get-namespace-last-part
|
||||
@@ -378,7 +378,7 @@
|
||||
"Support DB or file graphs because of exporter"
|
||||
[entity]
|
||||
(or (entity-util/page? entity)
|
||||
(contains? #{"page" "journal" "whiteboard"} (:block/type entity))))
|
||||
(contains? #{"page" "journal"} (:block/type entity))))
|
||||
|
||||
;; TODO: refactor
|
||||
(defn page-name->map
|
||||
|
||||
@@ -35,10 +35,9 @@
|
||||
[logseq.db.sqlite.util :as sqlite-util]
|
||||
[logseq.graph-parser.block :as gp-block]
|
||||
[logseq.graph-parser.extract :as extract]
|
||||
[logseq.graph-parser.property :as gp-property]
|
||||
[logseq.graph-parser.text :as text]
|
||||
[logseq.graph-parser.utf8 :as utf8]
|
||||
[promesa.core :as p]
|
||||
[logseq.graph-parser.text :as text]))
|
||||
[promesa.core :as p]))
|
||||
|
||||
(defn- add-missing-timestamps
|
||||
"Add updated-at or created-at timestamps if they doesn't exist"
|
||||
@@ -323,17 +322,6 @@
|
||||
(:date-formatter config)
|
||||
"MMM do, yyyy"))
|
||||
|
||||
(defn- config-whiteboard?
|
||||
[path]
|
||||
(and path
|
||||
(string/includes? path (str "whiteboards" "/"))
|
||||
(string/ends-with? path ".edn")))
|
||||
|
||||
(defn- whiteboard-entity?
|
||||
[entity]
|
||||
(or (entity-util/whiteboard? entity)
|
||||
(identical? "whiteboard" (:block/type entity))))
|
||||
|
||||
(defn- journal-entity?
|
||||
[entity]
|
||||
(or (entity-util/journal? entity)
|
||||
@@ -342,7 +330,7 @@
|
||||
(defn- page-entity?
|
||||
[entity]
|
||||
(or (entity-util/page? entity)
|
||||
(contains? #{"page" "journal" "whiteboard"} (:block/type entity))))
|
||||
(contains? #{"page" "journal"} (:block/type entity))))
|
||||
|
||||
(defn- find-or-create-deadline-scheduled-value
|
||||
"Given a :block/scheduled or :block/deadline value, creates the datetime property value
|
||||
@@ -457,8 +445,6 @@
|
||||
[db-ident]
|
||||
;; Map of unique cases where the db graph keyword name is different than the file graph id
|
||||
(let [unique-file-ids {:logseq.property/order-list-type :logseq.order-list-type
|
||||
:logseq.property.tldraw/page :logseq.tldraw.page
|
||||
:logseq.property.tldraw/shape :logseq.tldraw.shape
|
||||
:logseq.property/publishing-public? :public}]
|
||||
(or (get unique-file-ids db-ident)
|
||||
(keyword (name db-ident)))))
|
||||
@@ -492,8 +478,7 @@
|
||||
#{:alias :tags :background-color :heading
|
||||
:query-table :query-properties :query-sort-by :query-sort-desc
|
||||
:ls-type :hl-type :hl-color :hl-page :hl-stamp :hl-value :file :file-path
|
||||
:logseq.order-list-type :logseq.tldraw.page :logseq.tldraw.shape
|
||||
:icon :public :exclude-from-graph-view :filters})
|
||||
:logseq.order-list-type :icon :public :exclude-from-graph-view :filters})
|
||||
|
||||
(assert (set/subset? file-built-in-property-names all-built-in-property-file-ids)
|
||||
"All file-built-in properties are used in db graph")
|
||||
@@ -1039,35 +1024,31 @@
|
||||
(defn- update-block-refs
|
||||
"Updates the attributes of a block ref as this is where a new page is defined. Also
|
||||
updates block content effected by refs"
|
||||
[block page-names-to-uuids {:keys [whiteboard?]}]
|
||||
(let [ref-to-ignore? (if whiteboard?
|
||||
#(and (map? %) (:block/uuid %))
|
||||
#(and (vector? %) (= :block/uuid (first %))))]
|
||||
(if (seq (:block/refs block))
|
||||
(cond-> block
|
||||
true
|
||||
(update
|
||||
:block/refs
|
||||
(fn [refs]
|
||||
(mapv (fn [ref]
|
||||
;; Only keep :block/uuid as we don't want to re-transact page refs
|
||||
(if (map? ref)
|
||||
;; a new page's uuid can change across blocks so rely on consistent one from pages-tx
|
||||
(if-let [existing-uuid (some->> (:block/name ref) (get @page-names-to-uuids))]
|
||||
[:block/uuid existing-uuid]
|
||||
[:block/uuid (:block/uuid ref)])
|
||||
ref))
|
||||
refs)))
|
||||
(:block/title block)
|
||||
(assoc :block/title
|
||||
;; TODO: Handle refs for whiteboard block which has none
|
||||
(let [refs (->> (:block/refs block)
|
||||
(remove #(or (ref-to-ignore? %)
|
||||
;; ignore deadline related refs that don't affect content
|
||||
(and (keyword? %) (db-malli-schema/internal-ident? %))))
|
||||
(map #(add-uuid-to-page-map % page-names-to-uuids)))]
|
||||
(db-content/title-ref->id-ref (:block/title block) refs {:replace-tag? false}))))
|
||||
block)))
|
||||
[block page-names-to-uuids]
|
||||
(if (seq (:block/refs block))
|
||||
(cond-> block
|
||||
true
|
||||
(update
|
||||
:block/refs
|
||||
(fn [refs]
|
||||
(mapv (fn [ref]
|
||||
;; Only keep :block/uuid as we don't want to re-transact page refs
|
||||
(if (map? ref)
|
||||
;; a new page's uuid can change across blocks so rely on consistent one from pages-tx
|
||||
(if-let [existing-uuid (some->> (:block/name ref) (get @page-names-to-uuids))]
|
||||
[:block/uuid existing-uuid]
|
||||
[:block/uuid (:block/uuid ref)])
|
||||
ref))
|
||||
refs)))
|
||||
(:block/title block)
|
||||
(assoc :block/title
|
||||
(let [refs (->> (:block/refs block)
|
||||
(remove #(or (and (vector? %) (= :block/uuid (first %)))
|
||||
;; ignore deadline related refs that don't affect content
|
||||
(and (keyword? %) (db-malli-schema/internal-ident? %))))
|
||||
(map #(add-uuid-to-page-map % page-names-to-uuids)))]
|
||||
(db-content/title-ref->id-ref (:block/title block) refs {:replace-tag? false}))))
|
||||
block))
|
||||
|
||||
(defn- fix-pre-block-references
|
||||
"Point pre-block children to parents since pre blocks don't exist in db graphs"
|
||||
@@ -1378,15 +1359,14 @@
|
||||
block' (-> prepared-block
|
||||
(fix-pre-block-references pre-blocks page-names-to-uuids)
|
||||
(fix-block-name-lookup-ref page-names-to-uuids)
|
||||
(update-block-refs page-names-to-uuids options)
|
||||
(update-block-refs page-names-to-uuids)
|
||||
(update-block-tags db (:user-options options) per-file-state (:all-idents import-state))
|
||||
(handle-embeds page-names-to-uuids walked-ast-blocks (select-keys options [:log-fn]))
|
||||
(handle-quotes (select-keys options [:log-fn]))
|
||||
(update-block-marker options)
|
||||
(update-block-priority options)
|
||||
add-missing-timestamps
|
||||
;; old whiteboards may have :block/left
|
||||
(dissoc :block/left :block/format :block.temp/ast-blocks)
|
||||
(dissoc :block/format :block.temp/ast-blocks)
|
||||
;; ((fn [x] (prn ::block-out x) x))
|
||||
)]
|
||||
;; Order matters as previous txs are referenced in block
|
||||
@@ -1409,7 +1389,6 @@
|
||||
(journal-created-ats (:block/name m))
|
||||
(assoc :block/created-at (journal-created-ats (:block/name m))))
|
||||
add-missing-timestamps
|
||||
(dissoc :block/whiteboard?)
|
||||
(update-page-tags db user-options per-file-state all-idents)))
|
||||
|
||||
(defn- get-page-parents
|
||||
@@ -1505,7 +1484,7 @@
|
||||
|
||||
(defn- build-pages-tx
|
||||
"Given all the pages and blocks parsed from a file, return a map containing
|
||||
all non-whiteboard pages to be transacted, pages' properties and additional
|
||||
all pages to be transacted, pages' properties and additional
|
||||
data for subsequent steps"
|
||||
[conn pages blocks {:keys [import-state user-options]
|
||||
:as options}]
|
||||
@@ -1722,16 +1701,6 @@
|
||||
:property-pages-tx (concat property-pages-tx converted-property-pages-tx retract-page-tag-from-properties-tx)
|
||||
:property-page-properties-tx property-page-properties-tx}))
|
||||
|
||||
(defn- update-whiteboard-blocks [blocks format]
|
||||
(map (fn [b]
|
||||
(if (seq (:block/properties b))
|
||||
(-> (dissoc b :block/content)
|
||||
(update :block/title #(gp-property/remove-properties format %)))
|
||||
(cond-> (dissoc b :block/content)
|
||||
(:block/content b)
|
||||
(assoc :block/title (:block/content b)))))
|
||||
blocks))
|
||||
|
||||
(defn- fix-extracted-block-tags-and-refs
|
||||
"A tag or ref can have different :block/uuid's across extracted blocks. This makes
|
||||
sense for most in-app uses but not for importing where we want consistent identity.
|
||||
@@ -1791,20 +1760,10 @@
|
||||
(map #(dissoc % :block.temp/original-page-name) pages)))
|
||||
(update :blocks fix-extracted-block-tags-and-refs))
|
||||
|
||||
(config-whiteboard? file)
|
||||
(-> (extract/extract-whiteboard-edn file content extract-options')
|
||||
(update :pages (fn [pages]
|
||||
(->> pages
|
||||
;; migrate previous attribute for :block/title
|
||||
(map #(-> %
|
||||
(assoc :block/title (or (:block/original-name %) (:block/title %))
|
||||
:block/tags #{:logseq.class/Whiteboard})
|
||||
(dissoc :block/type :block/original-name))))))
|
||||
(update :blocks update-whiteboard-blocks format))
|
||||
|
||||
:else
|
||||
(swap! (:ignored-files import-state) conj
|
||||
{:path file :reason :unsupported-file-format}))]
|
||||
(when-not (re-find #"whiteboards/.*\.edn$" (str file))
|
||||
(swap! (:ignored-files import-state) conj
|
||||
{:path file :reason :unsupported-file-format})))]
|
||||
;; Annotation markdown pages are saved for later as they are dependant on the asset being annotated
|
||||
(if (string/starts-with? (str (path/basename file)) "hls__")
|
||||
(do
|
||||
@@ -1893,16 +1852,8 @@
|
||||
old-properties (keys @(get-in options [:import-state :property-schemas]))
|
||||
;; Build page and block txs
|
||||
{:keys [pages-tx page-properties-tx per-file-state existing-pages]} (build-pages-tx conn pages blocks tx-options)
|
||||
whiteboard-pages (->> pages-tx
|
||||
;; support old and new whiteboards
|
||||
(filter whiteboard-entity?)
|
||||
(map (fn [page-block]
|
||||
(-> page-block
|
||||
(assoc :logseq.property/ls-type :whiteboard-page)))))
|
||||
pre-blocks (->> blocks (keep #(when (:block/pre-block? %) (:block/uuid %))) set)
|
||||
|
||||
blocks-tx (let [tx-options' (assoc tx-options :whiteboard? (some? (seq whiteboard-pages)))]
|
||||
(<build-blocks-tx conn blocks pre-blocks per-file-state tx-options'))
|
||||
blocks-tx (<build-blocks-tx conn blocks pre-blocks per-file-state tx-options)
|
||||
{:keys [property-pages-tx property-page-properties-tx] pages-tx' :pages-tx}
|
||||
(split-pages-and-properties-tx pages-tx old-properties existing-pages (:import-state options) @(:upstream-properties tx-options))
|
||||
;; _ (when (seq property-pages-tx) (cljs.pprint/pprint {:property-pages-tx property-pages-tx}))
|
||||
@@ -1927,12 +1878,12 @@
|
||||
blocks-index (set/union (set block-ids) (set block-refs-ids))
|
||||
;; Order matters. pages-index and blocks-index needs to come before their corresponding tx for
|
||||
;; uuids to be valid. Also upstream-properties-tx comes after blocks-tx to possibly override blocks
|
||||
tx (concat whiteboard-pages pages-index page-properties-tx property-page-properties-tx pages-tx'' classes-tx' blocks-index blocks-tx)
|
||||
tx (concat pages-index page-properties-tx property-page-properties-tx pages-tx'' classes-tx' blocks-index blocks-tx)
|
||||
tx' (common-util/fast-remove-nils tx)
|
||||
;; (prn :tx-counts (map #(vector %1 (count %2))
|
||||
;; [:whiteboard-pages :pages-index :page-properties-tx :property-page-properties-tx :pages-tx' :classes-tx :blocks-index :blocks-tx]
|
||||
;; [whiteboard-pages pages-index page-properties-tx property-page-properties-tx pages-tx' classes-tx blocks-index blocks-tx]))
|
||||
;; _ (when (not (seq whiteboard-pages)) (cljs.pprint/pprint {#_:property-pages-tx #_property-pages-tx :pages-tx pages-tx :tx tx'}))
|
||||
;; _ (prn :tx-counts (map #(vector %1 (count %2))
|
||||
;; [:pages-index :page-properties-tx :property-page-properties-tx :pages-tx' :classes-tx :blocks-index :blocks-tx]
|
||||
;; [pages-index page-properties-tx property-page-properties-tx pages-tx' classes-tx blocks-index blocks-tx]))
|
||||
;; _ (cljs.pprint/pprint {#_:property-pages-tx #_property-pages-tx :pages-tx pages-tx :tx tx'})
|
||||
main-tx-report (d/transact! conn tx' {::new-graph? true ::path file})
|
||||
_ (save-from-tx tx' options)
|
||||
|
||||
|
||||
@@ -15,23 +15,12 @@
|
||||
[logseq.graph-parser.block :as gp-block]
|
||||
[logseq.graph-parser.mldoc :as gp-mldoc]
|
||||
[logseq.graph-parser.property :as gp-property]
|
||||
[logseq.graph-parser.text :as text]
|
||||
[logseq.graph-parser.whiteboard :as gp-whiteboard]
|
||||
[medley.core :as medley]))
|
||||
[logseq.graph-parser.text :as text]))
|
||||
|
||||
(defn- mldoc-support?
|
||||
[format']
|
||||
(contains? #{:org :markdown :md} (keyword format')))
|
||||
|
||||
(defn- filepath->page-name
|
||||
[filepath]
|
||||
(when-let [file-name (last (string/split filepath #"/"))]
|
||||
(let [result (first (common-util/split-last "." file-name))
|
||||
ext (string/lower-case (common-util/get-file-ext filepath))]
|
||||
(if (or (mldoc-support? ext) (= "edn" ext))
|
||||
(common-util/safe-decode-uri-component (string/replace result "." "/"))
|
||||
result))))
|
||||
|
||||
(defn- path->file-name
|
||||
;; Only for internal paths, as they are converted to POXIS already
|
||||
;; https://github.com/logseq/logseq/blob/48b8e54e0fdd8fbd2c5d25b7f1912efef8814714/deps/graph-parser/src/logseq/graph_parser/extract.cljc#L32
|
||||
@@ -306,42 +295,6 @@
|
||||
:blocks blocks
|
||||
:ast ast}))))
|
||||
|
||||
(defn extract-whiteboard-edn
|
||||
"Extracts whiteboard page from given edn file
|
||||
Whiteboard page edn is a subset of page schema
|
||||
- it will only contain a single page (for now). The page properties are stored under :logseq.tldraw.* properties and contain 'bindings' etc
|
||||
- blocks will be adapted to tldraw shapes. All blocks's parent is the given page."
|
||||
[file content {:keys [verbose] :or {verbose true}}]
|
||||
(let [_ (when verbose (println "Parsing start: " file))
|
||||
{:keys [pages blocks]} (common-util/safe-read-map-string content)
|
||||
blocks (map
|
||||
(fn [block]
|
||||
(-> block
|
||||
(medley/dissoc-in [:block/parent :block/name])
|
||||
;; :block/left here for backward compatibility
|
||||
(medley/dissoc-in [:block/left :block/name])))
|
||||
blocks)
|
||||
serialized-page (first pages)
|
||||
;; whiteboard edn file should normally have valid :block/title, :block/name, :block/uuid
|
||||
page-name (-> (or (:block/name serialized-page)
|
||||
(filepath->page-name file))
|
||||
(common-util/page-name-sanity-lc))
|
||||
title (or (:block/title serialized-page)
|
||||
page-name)
|
||||
page-block (merge {:block/name page-name
|
||||
:block/title title
|
||||
:block/file {:file/path (common-util/path-normalize file)}}
|
||||
serialized-page
|
||||
;; Ensure old whiteboards have correct type
|
||||
{:block/type "whiteboard"})
|
||||
page-block (gp-whiteboard/migrate-page-block page-block)
|
||||
blocks (->> blocks
|
||||
(map gp-whiteboard/migrate-shape-block)
|
||||
(map #(merge % (gp-whiteboard/with-whiteboard-block-props % [:block/uuid (:block/uuid page-block)]))))
|
||||
_ (when verbose (println "Parsing finished: " file))]
|
||||
{:pages (list page-block)
|
||||
:blocks blocks}))
|
||||
|
||||
(defn- with-block-uuid
|
||||
[pages]
|
||||
(->> (common-util/distinct-by :block/name pages)
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
:created-at :updated-at :last-modified-at
|
||||
:query-table :query-properties :query-sort-by :query-sort-desc :ls-type
|
||||
:hl-type :hl-page :hl-stamp :hl-color :hl-value :logseq.macro-name :logseq.macro-arguments
|
||||
:logseq.order-list-type :logseq.tldraw.page :logseq.tldraw.shape
|
||||
:logseq.order-list-type
|
||||
; task markers
|
||||
:todo :doing :now :later :done})
|
||||
|
||||
|
||||
@@ -1,74 +0,0 @@
|
||||
(ns logseq.graph-parser.whiteboard
|
||||
"Whiteboard related parser utilities")
|
||||
|
||||
(defn block->shape [block]
|
||||
(get-in block [:block/properties :logseq.tldraw.shape]))
|
||||
|
||||
(defn shape-block? [block]
|
||||
(= :whiteboard-shape (get-in block [:block/properties :ls-type])))
|
||||
|
||||
;; tldraw shape props is now saved into [:block/properties :logseq.tldraw.shape]
|
||||
;; migrate
|
||||
(defn shape-block-needs-migrate? [block]
|
||||
(let [properties (:block/properties block)]
|
||||
(and (seq properties)
|
||||
(and (= :whiteboard-shape (:ls-type properties))
|
||||
(not (seq (get properties :logseq.tldraw.shape)))))))
|
||||
|
||||
(defn page-block-needs-migrate? [block]
|
||||
(let [properties (:block/properties block)]
|
||||
(and (seq properties)
|
||||
(and (= :whiteboard-page (:ls-type properties))
|
||||
(not (seq (get properties :logseq.tldraw.page)))))))
|
||||
|
||||
(defn migrate-shape-block [block]
|
||||
(if (shape-block-needs-migrate? block)
|
||||
(let [properties (:block/properties block)
|
||||
properties (assoc properties :logseq.tldraw.shape properties)]
|
||||
(assoc block :block/properties properties))
|
||||
block))
|
||||
|
||||
(defn migrate-page-block [block]
|
||||
(if (page-block-needs-migrate? block)
|
||||
(let [properties (:block/properties block)
|
||||
properties (assoc properties :logseq.tldraw.page properties)]
|
||||
(assoc block :block/properties properties))
|
||||
block))
|
||||
|
||||
(defn- get-shape-refs [shape]
|
||||
(let [portal-refs (when (= "logseq-portal" (:type shape))
|
||||
[{:block/uuid (uuid (:pageId shape))}])
|
||||
shape-link-refs (->> (:refs shape)
|
||||
(filter (complement empty?))
|
||||
(keep (fn [ref] (when (parse-uuid ref)
|
||||
{:block/uuid (parse-uuid ref)}))))]
|
||||
(concat portal-refs shape-link-refs)))
|
||||
|
||||
(defn- with-whiteboard-block-refs
|
||||
[shape]
|
||||
(let [refs (or (get-shape-refs shape) [])]
|
||||
{:block/refs (if (seq refs) refs [])}))
|
||||
|
||||
(defn- with-whiteboard-content
|
||||
"Main purpose of this function is to populate contents when shapes are used as references in outliner."
|
||||
[shape]
|
||||
{:block/title (case (:type shape)
|
||||
"text" (:text shape)
|
||||
"logseq-portal" ""
|
||||
"line" (str "whiteboard arrow" (when-let [label (:label shape)] (str ": " label)))
|
||||
(str "whiteboard " (:type shape)))})
|
||||
|
||||
(defn with-whiteboard-block-props
|
||||
"Builds additional block attributes for a whiteboard block. Expects :block/properties
|
||||
to be in file graph format"
|
||||
[block page-id]
|
||||
(let [shape? (shape-block? block)
|
||||
shape (block->shape block)]
|
||||
(merge (when shape?
|
||||
(merge
|
||||
{:block/uuid (uuid (:id shape))}
|
||||
(with-whiteboard-block-refs shape)
|
||||
(with-whiteboard-content shape)))
|
||||
(when (nil? (:block/parent block)) {:block/parent page-id})
|
||||
(when (nil? (:block/format block)) {:block/format :markdown}) ;; TODO: read from config
|
||||
{:block/page page-id})))
|
||||
@@ -231,12 +231,11 @@
|
||||
#_(map #(select-keys % [:block/title :block/tags]))
|
||||
count))
|
||||
"Correct number of pages with block content")
|
||||
(is (= 15 (->> @conn
|
||||
(is (= 14 (->> @conn
|
||||
(d/q '[:find [?ident ...]
|
||||
:where [?b :block/tags :logseq.class/Tag] [?b :db/ident ?ident] (not [?b :logseq.property/built-in?])])
|
||||
count))
|
||||
"Correct number of user classes")
|
||||
(is (= 4 (count (d/datoms @conn :avet :block/tags :logseq.class/Whiteboard))))
|
||||
(is (= 0 (count @(:ignored-properties import-state))) "No ignored properties")
|
||||
(is (= 0 (count @(:ignored-assets import-state))) "No ignored assets")
|
||||
(is (= 1 (count @(:ignored-files import-state))) "Ignore .edn for now")
|
||||
@@ -607,13 +606,7 @@
|
||||
:block/refs
|
||||
(map #(:db/ident (d/entity @conn (:db/id %))))
|
||||
set))
|
||||
"Block has correct task tag and property :block/refs")))
|
||||
|
||||
(testing "whiteboards"
|
||||
(let [block-with-props (db-test/find-block-by-content @conn #"block with props")]
|
||||
(is (= {:user.property/prop-num 10}
|
||||
(db-test/readable-properties block-with-props)))
|
||||
(is (= "block with props" (:block/title block-with-props)))))))
|
||||
"Block has correct task tag and property :block/refs")))))
|
||||
|
||||
(deftest-async export-basic-graph-with-convert-all-tags-option-disabled
|
||||
(p/let [file-graph-dir "test/resources/exporter-test-graph"
|
||||
|
||||
@@ -128,26 +128,4 @@
|
||||
"- line1
|
||||
- line2
|
||||
- line3
|
||||
- line4"))))
|
||||
|
||||
(def foo-edn
|
||||
"Example exported whiteboard page as an edn exportable."
|
||||
'{:blocks
|
||||
({:block/title "foo content a",
|
||||
:block/format :markdown},
|
||||
{:block/title "foo content b",
|
||||
:block/format :markdown}),
|
||||
:pages
|
||||
({:block/format :markdown,
|
||||
:block/title "Foo"
|
||||
:block/uuid #uuid "a846e3b4-c41d-4251-80e1-be6978c36d8c"
|
||||
:block/properties {:title "my whiteboard foo"}})})
|
||||
|
||||
(deftest test-extract-whiteboard-edn
|
||||
(let [{:keys [pages blocks]} (extract/extract-whiteboard-edn "/whiteboards/foo.edn" (pr-str foo-edn) {})
|
||||
page (first pages)]
|
||||
(is (= (get-in page [:block/file :file/path]) "/whiteboards/foo.edn"))
|
||||
(is (= (:block/name page) "foo"))
|
||||
(is (= (:block/type page) "whiteboard"))
|
||||
(is (= (:block/title page) "Foo"))
|
||||
(is (every? #(= (:block/parent %) [:block/uuid #uuid "a846e3b4-c41d-4251-80e1-be6978c36d8c"]) blocks))))
|
||||
- line4"))))
|
||||
@@ -7,4 +7,5 @@
|
||||
card-last-reviewed:: 2024-11-26T20:27:33.373Z
|
||||
- card 2 with cloze {{cloze surprise!}} #card
|
||||
card-next-schedule:: 2024-11-27T05:00:00.000Z
|
||||
- This block references a page with a future parent class #Property
|
||||
- This block should test a page with a future parent class `#Property`
|
||||
FIXME: Property tag triggers an intermittent, invalid hanging block ref
|
||||
File diff suppressed because one or more lines are too long
@@ -1,67 +0,0 @@
|
||||
{:blocks ({:block/title "fix/published-embeds"
|
||||
:block/format :markdown
|
||||
:block/left
|
||||
{:block/uuid #uuid "64551487-ffab-406c-adcf-a4e8f00db19c"}
|
||||
:block/parent
|
||||
{:block/uuid #uuid "64551487-ffab-406c-adcf-a4e8f00db19c"}
|
||||
:block/uuid #uuid "645514a0-85c2-43db-ac08-12836ae3d147"}
|
||||
{:block/created-at 1683639741650
|
||||
:block/properties
|
||||
{:ls-type :whiteboard-shape
|
||||
:logseq.tldraw.shape
|
||||
{:index 0
|
||||
:scale [1 1]
|
||||
:type "youtube"
|
||||
:size [853 480]
|
||||
:id "e694caf0-eb52-11ed-a877-89e9886a62fe"
|
||||
:url "https://www.youtube.com/watch?v=C5m5dIiJMD0"
|
||||
:isLocked false
|
||||
:point [475.04503224455124 300.94676141866057]
|
||||
:parentId "64551487-ffab-406c-adcf-a4e8f00db19c"
|
||||
:nonce 1683297680671}}
|
||||
:block/updated-at 1683639741650}
|
||||
{:block/created-at 1683639741650
|
||||
:block/properties
|
||||
{:ls-type :whiteboard-shape
|
||||
:logseq.tldraw.shape
|
||||
{:isSizeLocked true
|
||||
:stroke ""
|
||||
:borderRadius 0
|
||||
:index 1
|
||||
:scale [1 1]
|
||||
:scaleLevel "md"
|
||||
:fill ""
|
||||
:type "text"
|
||||
:size [78 34]
|
||||
:fontFamily "var(--ls-font-family)"
|
||||
:strokeType "line"
|
||||
:strokeWidth 2
|
||||
:opacity 1
|
||||
:id "51851490-ee6f-11ed-9c5e-21b9b3de5563"
|
||||
:padding 4
|
||||
:fontWeight 400
|
||||
:noFill true
|
||||
:point [719.5019628453911 862.2621018969135]
|
||||
:lineHeight 1.2
|
||||
:fontSize 20
|
||||
:parentId "64551487-ffab-406c-adcf-a4e8f00db19c"
|
||||
:nonce 1683639739496
|
||||
:italic false
|
||||
:text "fsdfsdf"}}
|
||||
:block/updated-at 1683639741650})
|
||||
:pages ({:block/uuid #uuid "64551487-ffab-406c-adcf-a4e8f00db19c"
|
||||
:block/properties
|
||||
{:ls-type :whiteboard-page
|
||||
:logseq.tldraw.page
|
||||
{:id "64551487-ffab-406c-adcf-a4e8f00db19c"
|
||||
:name "page 9322"
|
||||
:bindings
|
||||
{}
|
||||
:nonce 1
|
||||
:assets []
|
||||
:shapes-index ("e694caf0-eb52-11ed-a877-89e9886a62fe" "51851490-ee6f-11ed-9c5e-21b9b3de5563")}}
|
||||
:block/updated-at 1683639741650
|
||||
:block/created-at 1683297415382
|
||||
:block/type "whiteboard"
|
||||
:block/name "page 9322"
|
||||
:block/title "page 9322"})}
|
||||
@@ -1,443 +0,0 @@
|
||||
{:blocks ({:block/created-at 1682011775882
|
||||
:block/properties
|
||||
{:ls-type :whiteboard-shape
|
||||
:logseq.tldraw.shape
|
||||
{:stroke ""
|
||||
:index 6
|
||||
:scale [1 1]
|
||||
:scaleLevel "md"
|
||||
:fill ""
|
||||
:type "highlighter"
|
||||
:points [[58.92632216254492 0 0.5] [53.13546991923272 1.6664622322829246 0.5] [51.16419903897088 4.158826603346142 0.5] [49.32568186217577 9.035316911257496 0.5] [47.53632324095554 29.88347313229167 0.5] [49.71895030677524 46.759643666286024 0.5] [60.469888005890425 87.63005396957408 0.5] [72.73494762183498 119.53395653770247 0.5] [86.45018462723999 145.1504926495047 0.5] [106.48229602402319 174.53745156878244 0.5] [124.72504879958615 197.64197268899875 0.5] [131.47942153387396 213.25967139856766 0.5] [137.26048047119286 232.93288693453246 0.5] [136.6459985265061 251.89829608046125 0.5] [132.4970292376894 258.34786016677026 0.5] [122.82265110395804 269.37909124461294 0.5] [118.486840898835 272.63827787581613 0.5] [115.13913046247524 273.69518682067724 0.5] [99.9885020394039 274.4620730893532 0.5] [35.95948340305995 261.2727942234785 0.5] [15.160485737600652 250.60052301499036 0.5] [5.879312039932756 244.79981345714873 0.5] [2.2121350008718537 241.820792187601 0.5] [0.5308867967949027 237.77993331592756 0.5] [0.5308867967949027 228.9461792842344 0.5] [27.872901010984265 190.86794933418787 0.5] [31.771148864661768 186.2716243879322 0.5] [45.1472046383069 174.41455517984514 0.5] [82.42904038462518 149.37812842894857 0.5] [96.39007016790481 141.92567860208226 0.5] [116.70241093487948 131.92684119984904 0.5] [157.62690845100713 114.78522726745723 0.5] [186.61074161115596 100.98153046543177 0.5] [186.61074161115596 100.98153046543177 0.5]]
|
||||
:strokeType "line"
|
||||
:strokeWidth 2
|
||||
:opacity 0.5
|
||||
:id "ce9d5c40-dad2-11ed-b0d8-ef9040ba205f"
|
||||
:noFill true
|
||||
:point [896.1992792676562 872.0662892939717]
|
||||
:parentId "6421db79-4e2f-4101-9758-4aef5320cc67"
|
||||
:nonce 1681483446343
|
||||
:isComplete true}}
|
||||
:block/updated-at 1682011775882}
|
||||
{:block/title "wut"
|
||||
:block/format :markdown
|
||||
:block/left
|
||||
{:block/uuid #uuid "6421db79-4e2f-4101-9758-4aef5320cc67"}
|
||||
:block/parent
|
||||
{:block/uuid #uuid "6421db79-4e2f-4101-9758-4aef5320cc67"}
|
||||
:block/uuid #uuid "6421db96-5f44-4d56-b77e-598550b62fab"}
|
||||
{:block/created-at 1682011775881
|
||||
:block/properties
|
||||
{:ls-type :whiteboard-shape
|
||||
:logseq.tldraw.shape
|
||||
{:stroke ""
|
||||
:index 5
|
||||
:scale [1 1]
|
||||
:scaleLevel "md"
|
||||
:fill ""
|
||||
:type "pencil"
|
||||
:points [[201.61895104183895 25.070863343213432 0.5] [191.7232953994844 25.070863343213432 0.5] [176.66605543029823 23.81239151878799 0.5] [160.10455085881222 23.81239151878799 0.5] [131.80887346817633 23.81239151878799 0.5] [113.42843833188203 24.741539425982864 0.5] [87.44327706180366 29.43125282612391 0.5] [59.14759967116788 39.13513889490753 0.5] [37.49325594041204 51.96059324269902 0.5] [28.12855110338819 60.46502335716161 0.5] [24.987332203857477 65.50870396085645 0.5] [22.431087313961257 73.05454224160792 0.5] [22.431087313961257 78.94371159606999 0.5] [30.453725178667924 93.28821651795556 0.5] [32.52331317007963 96.04602428741612 0.5] [41.558630081337014 110.6313293213758 0.5] [48.56865290802898 118.49176955609971 0.5] [52.707828890852284 124.70053353033461 0.5] [57.85469125442569 131.3074305978979 0.5] [64.1764943030687 139.86101926793538 0.5] [66.45743848003815 143.89202082507938 0.5] [68.05022688749455 147.07746962292038 0.5] [69.64295128641504 150.26298242929727 0.5] [70.78339137063188 154.2939839864415 0.5] [71.84522897275747 157.47943278428227 0.5] [72.37617977808827 160.66494559065916 0.5] [72.37617977808827 163.1572459531866 0.5] [72.37617977808827 170.63920371510505 0.5] [71.39300866658971 173.13150407763226 0.5] [69.87395809249563 175.6238684486956 0.5] [66.44271651678002 178.51436591308686 0.5] [59.132813699373855 183.66129228519628 0.5] [55.09201883623632 185.41134966537095 0.5] [51.051159964562885 186.02090295279288 0.5] [45.1521332955715 184.79686772068442 0.5] [37.07047956076053 181.17878522866238 0.5] [27.25841906629762 175.54027330080373 0.5] [19.545454498298568 168.35825953813548 0.5] [9.905448948348067 155.76381199642458 0.5] [5.274751418311325 146.34994860382574 0.5] [0 126.98147770730418 0.5] [0.6882197780489605 114.41653810064543 0.5] [3.7655581587466713 110.5625201452782 0.5] [14.226473181676965 101.4681873639164 0.5] [27.951567501611294 95.10215441696323 0.5] [37.35557357968071 92.01502273027211 0.5] [47.9295916855549 90.38786173903475 0.5] [58.5036097914292 89.61604681309404 0.5] [67.9076158694985 90.46652822966178 0.5] [72.78417018594575 91.68563480450564 0.5] [77.82785078964059 91.68563480450564 0.5] [82.87153139333543 92.37385458255471 0.5] [88.76070074779739 92.37385458255471 0.5] [95.66254914881017 91.68070614724104 0.5] [107.2050164029248 90.05354515600368 0.5] [114.68691015630736 89.3604607292259 0.5] [117.17927452737058 89.3604607292259 0.5] [117.91665286099453 89.3604607292259 0.5] [118.28534202780645 89.3604607292259 0.5] [118.65403119461837 89.3604607292259 0.5] [119.0227203614304 88.61322508107264 0.5] [119.47007601886935 87.33510263612459 0.5] [120.00096281566425 84.83294495906785 0.5] [120.44831847310331 82.33078728201122 0.5] [120.44831847310331 79.13548116964091 0.5] [120.44831847310331 73.23645450064953 0.5] [121.05787176052525 68.35004286967296 0.5] [121.66742504794718 63.463695247232295 0.5] [122.19837585327787 59.42290038409476 0.5] [121.7460915385742 56.920678698502115 0.5] [121.37247371449757 55.26900243801333 0.5] [121.37247371449757 54.8953846139367 0.5] [121.37247371449757 54.52176678986007 0.5] [121.37247371449757 54.14814896578332 0.5] [120.92025340832981 52.87002652083527 0.5] [120.46796909362604 51.0610172790922 0.5] [120.46796909362604 49.25194402881334 0.5] [120.46796909362604 47.442934787070385 0.5] [120.01568477892238 44.940777110013755 0.5] [119.56346447275462 41.59306667365388 0.5] [118.41803172273717 37.552207801980444 0.5] [116.33865042533216 27.027412260217034 0.5] [114.02326965604584 16.119077571311777 0.5] [113.25151873864104 8.037423836500807 0.5] [113.25151873864104 3.996628973363272 0.5] [113.25151873864104 1.4944072877706276 0.5] [113.62020790545296 0.7472356481532643 0.5] [113.62020790545296 0.37361782407663213 0.5] [113.62020790545296 0 0.5]]
|
||||
:strokeType "line"
|
||||
:strokeWidth 2
|
||||
:opacity 1
|
||||
:id "cae02d30-dad2-11ed-b0d8-ef9040ba205f"
|
||||
:noFill true
|
||||
:point [700.3564585058713 924.9854743703819]
|
||||
:parentId "6421db79-4e2f-4101-9758-4aef5320cc67"
|
||||
:nonce 1681483440104
|
||||
:isComplete true}}
|
||||
:block/updated-at 1682011775881}
|
||||
{:block/created-at 1682011775882
|
||||
:block/properties
|
||||
{:ls-type :whiteboard-shape
|
||||
:logseq.tldraw.shape
|
||||
{:stroke ""
|
||||
:index 11
|
||||
:scale [1 1]
|
||||
:scaleLevel "sm"
|
||||
:fill ""
|
||||
:type "ellipse"
|
||||
:size [20.46875 107.09686279296875]
|
||||
:strokeType "line"
|
||||
:strokeWidth 1.6
|
||||
:opacity 1
|
||||
:label "fff"
|
||||
:id "46999ba0-dad3-11ed-b0d8-ef9040ba205f"
|
||||
:fontWeight 400
|
||||
:noFill false
|
||||
:point [1350.6775150473263 1172.7983609232979]
|
||||
:fontSize 16
|
||||
:parentId "6421db79-4e2f-4101-9758-4aef5320cc67"
|
||||
:nonce 1681483647622
|
||||
:italic false}}
|
||||
:block/updated-at 1682011775882}
|
||||
{:block/title "fff"
|
||||
:block/format :markdown
|
||||
:block/left
|
||||
{:block/uuid #uuid "643966c4-fd32-4702-b85c-46b636668091"}
|
||||
:block/parent
|
||||
{:block/uuid #uuid "6421db79-4e2f-4101-9758-4aef5320cc67"}
|
||||
:block/properties
|
||||
{}
|
||||
:block/uuid #uuid "6439673e-b0d3-43c6-b0f6-b79eedd209c8"}
|
||||
{:block/title "fix/internal-paste"
|
||||
:block/format :markdown
|
||||
:block/left
|
||||
{:block/uuid #uuid "6421db96-5f44-4d56-b77e-598550b62fab"}
|
||||
:block/parent
|
||||
{:block/uuid #uuid "6421db79-4e2f-4101-9758-4aef5320cc67"}
|
||||
:block/uuid #uuid "6423420b-b2d9-4d2d-8add-d9da287cdc87"}
|
||||
{:block/created-at 1682011775880
|
||||
:block/properties
|
||||
{:ls-type :whiteboard-shape
|
||||
:logseq.tldraw.shape
|
||||
{:stroke "green"
|
||||
:index 2
|
||||
:scale [1 1]
|
||||
:fill "green"
|
||||
:type "line"
|
||||
:strokeType "line"
|
||||
:strokeWidth 1
|
||||
:opacity 1
|
||||
:label ""
|
||||
:id "08b11d80-cda0-11ed-8356-d36ee09ec21e"
|
||||
:fontWeight 400
|
||||
:noFill true
|
||||
:point [703.1713114575059 767.7419665166876]
|
||||
:fontSize 20
|
||||
:handles
|
||||
{:start
|
||||
{:id "start"
|
||||
:canBind true
|
||||
:point [0 90.77]}
|
||||
:end
|
||||
{:id "end"
|
||||
:canBind true
|
||||
:point [334.06 0]}}
|
||||
:decorations
|
||||
{:end "arrow"}
|
||||
:parentId "6421db79-4e2f-4101-9758-4aef5320cc67"
|
||||
:nonce 1679940523034
|
||||
:italic false}}
|
||||
:block/updated-at 1682011775880}
|
||||
{:block/created-at 1682011775882
|
||||
:block/properties
|
||||
{:ls-type :whiteboard-shape
|
||||
:logseq.tldraw.shape
|
||||
{:stroke ""
|
||||
:index 4
|
||||
:scale [1 1]
|
||||
:scaleLevel "xl"
|
||||
:fill ""
|
||||
:type "pencil"
|
||||
:points [[348.65219076644905 0 0.5] [348.65219076644905 0.36868916681203245 0.5] [348.2785729423724 0.7373783336239512 0.5] [347.00045049742437 1.5534231578749313 0.5] [345.0291796171625 2.452999121481753 0.5] [341.8338735047922 2.9839499268125564 0.5] [336.780399595104 3.5148367236073454 0.5] [323.369907229142 5.294402038834164 0.5] [306.80840265765585 6.2234859374931375 0.5] [279.51068235031266 9.984115438975095 0.5] [258.6871054070659 13.341619181328383 0.5] [236.66896916249482 19.89449304458776 0.5] [208.37329177185904 31.584371956891346 0.5] [194.6384041459313 37.9406115978511 0.5] [180.83467533963778 45.46673524954383 0.5] [151.89011141626656 68.93508088784324 0.5] [141.1588243376741 81.51967111502483 0.5] [134.87635453434473 94.92024215792162 0.5] [131.223867454274 108.32087720935431 0.5] [131.223867454274 121.72151226078688 0.5] [135.10246468742855 138.2732235262796 0.5] [140.92775352305762 154.82487078323618 0.5] [147.7657214052373 171.3765820487289 0.5] [151.1674870501687 181.26238037655423 0.5] [154.08259579661558 189.33417679683578 0.5] [154.08259579661558 197.40603722565345 0.5] [152.858560564507 202.28252753356458 0.5] [147.11683487250184 209.39086747140652 0.5] [137.22121123441514 212.46820585210423 0.5] [127.96957747606734 214.0019783894562 0.5] [117.38573405993168 214.0019783894562 0.5] [102.31863677621618 214.0019783894562 0.5] [90.24038607231 214.0019783894562 0.5] [71.85998294028354 210.88041011044845 0.5] [45.14723664257474 199.91312355997468 0.5] [32.424996058929764 192.5344115664708 0.5] [26.20151012143674 189.15232854633007 0.5] [22.534301078107887 186.17330727678234 0.5] [22.160683254031255 185.42607162862907 0.5] [21.787097434222574 184.6788999890117 0.5] [21.41347961014594 183.93166434085845 0.5] [19.4422087298841 181.42950666380182 0.5] [11.23765860613571 168.27959304750846 0.5] [6.12516882634327 156.20131033933433 0.5] [1.7058274818643895 142.79088198190823 0.5] [0 130.7125992737341 0.5] [0 122.6309455389229 0.5] [0 116.73191886993152 0.5] [0.6882197780489605 110.83289220094014 0.5] [2.7528791121959557 103.92118648539815 0.5] [10.082432550124963 94.95960740750309 0.5] [15.59801608477835 90.1224183406373 0.5] [20.47453839695754 88.28383715530629 0.5] [25.351092713404796 88.28383715530629 0.5] [32.41024209140369 88.28383715530629 0.5] [40.482070515953296 91.19897790602101 0.5] [58.16442855966932 100.78982490039675 0.5] [106.01535375459719 124.08605158564808 0.5] [141.80278221314495 139.26125928650674 0.5] [183.93659299812293 158.82636440532826 0.5] [211.53419329618043 173.87873972578552 0.5] [230.43565791474032 184.80666102667772 0.5] [239.83972800134563 188.0462610458943 0.5] [244.716218309257 188.65581433331624 0.5] [248.05407143108744 188.65581433331624 0.5] [254.955983840636 185.89307790659075 0.5] [263.02778026091767 182.1963929324778 0.5] [267.0587818180618 180.44140689503854 0.5] [271.0897833752059 178.15060540353954 0.5] [274.2752961815828 176.55295234735456 0.5] [276.9298581826289 173.88859704031495 0.5] [279.8203556470204 170.45729145606344 0.5] [281.32954890658505 166.3574807228216 0.5] [282.39132250017474 163.1621746104512 0.5] [282.92227330550554 159.12131573877775 0.5] [284.22004637097643 153.22228906978637 0.5] [285.59648592707435 146.3106473627803 0.5] [288.034763085298 141.4242357318036 0.5] [291.32345765155355 136.218357498126 0.5] [294.45488324509085 131.85803202375143 0.5] [296.57849444080614 128.66272591138102 0.5] [296.9471836076182 128.2891080873045 0.5] [296.9471836076182 127.91549026322775 0.5]]
|
||||
:strokeType "line"
|
||||
:strokeWidth 4.8
|
||||
:opacity 1
|
||||
:id "c80e4880-dad2-11ed-b0d8-ef9040ba205f"
|
||||
:noFill true
|
||||
:point [343.33751998569096 922.4538087582731]
|
||||
:parentId "6421db79-4e2f-4101-9758-4aef5320cc67"
|
||||
:nonce 1681483435368
|
||||
:isComplete true}}
|
||||
:block/updated-at 1682011775882}
|
||||
{:block/created-at 1682011775882
|
||||
:block/properties
|
||||
{:ls-type :whiteboard-shape
|
||||
:logseq.tldraw.shape
|
||||
{:stroke ""
|
||||
:borderRadius 2
|
||||
:index 9
|
||||
:scale [1 1]
|
||||
:scaleLevel "sm"
|
||||
:fill ""
|
||||
:type "box"
|
||||
:size [34.60626220703125 83.96405029296875]
|
||||
:strokeType "line"
|
||||
:strokeWidth 1.6
|
||||
:opacity 1
|
||||
:label "ffff"
|
||||
:id "17a61b70-dad3-11ed-b0d8-ef9040ba205f"
|
||||
:fontWeight 400
|
||||
:noFill false
|
||||
:point [1051.7181339438107 1173.3045865092354]
|
||||
:fontSize 16
|
||||
:parentId "6421db79-4e2f-4101-9758-4aef5320cc67"
|
||||
:nonce 1681483568842
|
||||
:italic false}}
|
||||
:block/updated-at 1682011775882}
|
||||
{:block/created-at 1682011775881
|
||||
:block/properties
|
||||
{:ls-type :whiteboard-shape
|
||||
:logseq.tldraw.shape
|
||||
{:stroke ""
|
||||
:borderRadius 2
|
||||
:index 13
|
||||
:scale [1 1]
|
||||
:scaleLevel "xl"
|
||||
:fill ""
|
||||
:type "box"
|
||||
:size [142.61874389648438 118.97967529296875]
|
||||
:strokeType "line"
|
||||
:strokeWidth 4.8
|
||||
:opacity 1
|
||||
:label "wut"
|
||||
:id "3f1d1b80-cdaa-11ed-8356-d36ee09ec21e"
|
||||
:fontWeight 400
|
||||
:noFill false
|
||||
:point [473.0882555996159 772.5590689866208]
|
||||
:fontSize 48
|
||||
:parentId "6421db79-4e2f-4101-9758-4aef5320cc67"
|
||||
:nonce 1679940538286
|
||||
:italic false}}
|
||||
:block/updated-at 1682011775881}
|
||||
{:block/created-at 1682011775881
|
||||
:block/properties
|
||||
{:ls-type :whiteboard-shape
|
||||
:logseq.tldraw.shape
|
||||
{:stroke ""
|
||||
:index 1
|
||||
:scale [1 1]
|
||||
:scaleLevel "lg"
|
||||
:fill ""
|
||||
:type "line"
|
||||
:strokeType "line"
|
||||
:strokeWidth 1
|
||||
:opacity 1
|
||||
:label ""
|
||||
:id "689db722-ccca-11ed-8c36-cd64b4f8676b"
|
||||
:fontWeight 400
|
||||
:noFill true
|
||||
:point [254.33 344.68]
|
||||
:fontSize 20
|
||||
:handles
|
||||
{:start
|
||||
{:id "start"
|
||||
:canBind true
|
||||
:point [0 90.77]
|
||||
:bindingId nil}
|
||||
:end
|
||||
{:id "end"
|
||||
:canBind true
|
||||
:point [334.06 0]
|
||||
:bindingId nil}}
|
||||
:decorations
|
||||
{:end "arrow"}
|
||||
:parentId "6421db79-4e2f-4101-9758-4aef5320cc67"
|
||||
:nonce 1679940522990
|
||||
:italic false}}
|
||||
:block/updated-at 1682011775881}
|
||||
{:block/created-at 1707842738589
|
||||
:block/properties
|
||||
{:ls-type :whiteboard-shape
|
||||
:logseq.tldraw.shape
|
||||
{:blockType "B"
|
||||
:stroke ""
|
||||
:collapsed false
|
||||
:borderRadius 8
|
||||
:index 10
|
||||
:scale [1 1]
|
||||
:pageId "6439673e-b0d3-43c6-b0f6-b79eedd209c8"
|
||||
:scaleLevel "md"
|
||||
:fill ""
|
||||
:compact true
|
||||
:isAutoResizing true
|
||||
:type "logseq-portal"
|
||||
:size [400 40]
|
||||
:strokeType "line"
|
||||
:strokeWidth 2
|
||||
:opacity 1
|
||||
:id "1ee6f300-dad3-11ed-b0d8-ef9040ba205f"
|
||||
:noFill false
|
||||
:point [1184.2603397543576 993.6701870951728]
|
||||
:parentId "6421db79-4e2f-4101-9758-4aef5320cc67"
|
||||
:collapsedHeight 0
|
||||
:nonce 1681483580997}}
|
||||
:block/updated-at 1707842738589}
|
||||
{:block/created-at 1682011775882
|
||||
:block/properties
|
||||
{:ls-type :whiteboard-shape
|
||||
:logseq.tldraw.shape
|
||||
{:stroke ""
|
||||
:index 12
|
||||
:scale [1 1]
|
||||
:scaleLevel "md"
|
||||
:fill ""
|
||||
:type "line"
|
||||
:strokeType "line"
|
||||
:strokeWidth 1
|
||||
:opacity 1
|
||||
:label ""
|
||||
:id "4ac3e461-dad3-11ed-b0d8-ef9040ba205f"
|
||||
:fontWeight 400
|
||||
:noFill true
|
||||
:point [1248.21 1241.85]
|
||||
:fontSize 20
|
||||
:handles
|
||||
{:start
|
||||
{:id "start"
|
||||
:canBind true
|
||||
:point [100.18 0]}
|
||||
:end
|
||||
{:id "end"
|
||||
:canBind true
|
||||
:point [0 0.64]
|
||||
:bindingId nil}}
|
||||
:decorations
|
||||
{:end "arrow"}
|
||||
:parentId "6421db79-4e2f-4101-9758-4aef5320cc67"
|
||||
:nonce 1681483654602
|
||||
:italic false}}
|
||||
:block/updated-at 1682011775882}
|
||||
{:block/properties
|
||||
{:ls-type :whiteboard-shape
|
||||
:logseq.tldraw.shape
|
||||
{:stroke ""
|
||||
:borderRadius 2
|
||||
:index 14
|
||||
:scale [1 1]
|
||||
:fill ""
|
||||
:type "box"
|
||||
:size [142.61874389648438 118.97967529296875]
|
||||
:strokeType "line"
|
||||
:strokeWidth 2
|
||||
:opacity 1
|
||||
:label "wut"
|
||||
:id "eb97f800-dfa0-11ed-8d23-dd2d2525f6dc"
|
||||
:fontWeight 400
|
||||
:noFill false
|
||||
:isLocked false
|
||||
:point [618.9763945576193 604.0079150616748]
|
||||
:fontSize 20
|
||||
:parentId "6421db79-4e2f-4101-9758-4aef5320cc67"
|
||||
:nonce 1679940538286
|
||||
:italic false}}
|
||||
:block/updated-at 1682011775882}
|
||||
{:block/created-at 1682011775882
|
||||
:block/properties
|
||||
{:ls-type :whiteboard-shape
|
||||
:logseq.tldraw.shape
|
||||
{:stroke ""
|
||||
:index 7
|
||||
:scale [1 1]
|
||||
:scaleLevel "xl"
|
||||
:fill ""
|
||||
:type "highlighter"
|
||||
:points [[211.77019276806163 8.076789086082158 0.5] [161.5153629986911 8.927206494114102 0.5] [129.88676114348948 11.955386319236823 0.5] [110.20368829299548 15.229358922234269 0.5] [98.12540558482124 18.626163905633007 0.5] [91.50865120272874 23.773090277742426 0.5] [89.45877784037577 29.450903446646635 0.5] [90.99741502645668 38.10280922783397 0.5] [96.34097562086572 51.82790354776819 0.5] [101.72876611358504 60.29789706991403 0.5] [120.00096281566425 83.03372902331841 0.5] [130.73717855152142 100.01800997445605 0.5] [138.0520100261923 114.81473520250927 0.5] [141.1785069624649 130.62413947711332 0.5] [140.80488913838826 137.929113637255 0.5] [134.79275938645299 146.72849508516708 0.5] [128.62336066179955 152.34729238396687 0.5] [105.45003036548553 167.99443502005226 0.5] [94.66465607405348 173.02832231775358 0.5] [86.58300233924251 173.71654209580254 0.5] [72.70550369531873 173.71654209580254 0.5] [58.72482329151637 170.17219743714315 0.5] [29.9621396229187 157.5580992749093 0.5] [21.000560545023745 150.218752530987 0.5] [12.486273116031725 140.85404769396325 0.5] [7.005094169427252 132.29060170939636 0.5] [4.557023705210213 127.40425408695558 0.5] [0 112.09136402536558 0.5] [0 100.3965564557974 0.5] [3.077338380697711 91.14489069318154 0.5] [14.246187810735705 79.80398631863125 0.5] [37.67510419091775 62.559190626360646 0.5] [90.86958998025466 33.46225438326792 0.5] [136.55760273842168 14.565718421972747 0.5] [183.01730240545749 1.5829310929269695 0.5] [225.67220668123696 0 0.5] [313.65129919710023 8.769873512859931 0.5] [335.6349668450865 8.769873512859931 0.5] [350.6922068142725 6.901848401012671 0.5] [359.3884065023061 3.9966289733631584 0.5] [359.3884065023061 2.7185065284149914 0.5] [359.3884065023061 2.7185065284149914 0.5]]
|
||||
:strokeType "line"
|
||||
:strokeWidth 4.8
|
||||
:opacity 0.5
|
||||
:id "d0eb6af0-dad2-11ed-b0d8-ef9040ba205f"
|
||||
:noFill true
|
||||
:point [783.606472372012 980.2396908366012]
|
||||
:parentId "6421db79-4e2f-4101-9758-4aef5320cc67"
|
||||
:nonce 1681483450226
|
||||
:isComplete true}}
|
||||
:block/updated-at 1682011775882}
|
||||
{:block/created-at 1682011775881
|
||||
:block/properties
|
||||
{:ls-type :whiteboard-shape
|
||||
:logseq.tldraw.shape
|
||||
{:stroke ""
|
||||
:borderRadius 2
|
||||
:index 0
|
||||
:scale [1 1]
|
||||
:fill ""
|
||||
:type "box"
|
||||
:size [184.88128662109375 159.4093780517578]
|
||||
:strokeType "line"
|
||||
:strokeWidth 2
|
||||
:opacity 1
|
||||
:label ""
|
||||
:id "665eeab0-ccca-11ed-8c36-cd64b4f8676b"
|
||||
:fontWeight 400
|
||||
:noFill false
|
||||
:point [389.85938718914986 200.99062728881836]
|
||||
:fontSize 20
|
||||
:parentId "6421db79-4e2f-4101-9758-4aef5320cc67"
|
||||
:nonce 1679940519184
|
||||
:italic false}}
|
||||
:block/updated-at 1682011775881}
|
||||
{:block/title "huh"
|
||||
:block/format :markdown
|
||||
:block/left
|
||||
{:block/uuid #uuid "6423420b-b2d9-4d2d-8add-d9da287cdc87"}
|
||||
:block/parent
|
||||
{:block/uuid #uuid "6421db79-4e2f-4101-9758-4aef5320cc67"}
|
||||
:block/uuid #uuid "643966c4-fd32-4702-b85c-46b636668091"}
|
||||
{:block/created-at 1682011775881
|
||||
:block/properties
|
||||
{:ls-type :whiteboard-shape
|
||||
:logseq.tldraw.shape
|
||||
{:stroke ""
|
||||
:borderRadius 2
|
||||
:index 3
|
||||
:scale [1 1]
|
||||
:fill ""
|
||||
:type "box"
|
||||
:size [142.61874389648438 118.97967529296875]
|
||||
:strokeType "line"
|
||||
:strokeWidth 2
|
||||
:opacity 1
|
||||
:label "wut"
|
||||
:id "a5ced1d0-d3cb-11ed-84d2-d9f3e7dd8e6d"
|
||||
:fontWeight 400
|
||||
:noFill false
|
||||
:isLocked true
|
||||
:point [389.51708629533925 571.3437222173457]
|
||||
:fontSize 20
|
||||
:parentId "6421db79-4e2f-4101-9758-4aef5320cc67"
|
||||
:nonce 1679940538286
|
||||
:italic false}}
|
||||
:block/updated-at 1682011775881}
|
||||
{:block/created-at 1707842738589
|
||||
:block/properties
|
||||
{:ls-type :whiteboard-shape
|
||||
:logseq.tldraw.shape
|
||||
{:blockType "B"
|
||||
:stroke ""
|
||||
:collapsed false
|
||||
:borderRadius 8
|
||||
:index 8
|
||||
:scale [1 1]
|
||||
:pageId "643966c4-fd32-4702-b85c-46b636668091"
|
||||
:scaleLevel "lg"
|
||||
:fill ""
|
||||
:compact true
|
||||
:isAutoResizing true
|
||||
:type "logseq-portal"
|
||||
:size [400 60]
|
||||
:strokeType "line"
|
||||
:strokeWidth 2
|
||||
:opacity 1
|
||||
:id "d51c4360-dad2-11ed-b0d8-ef9040ba205f"
|
||||
:noFill false
|
||||
:point [953.350964772239 864.4811497721747]
|
||||
:parentId "6421db79-4e2f-4101-9758-4aef5320cc67"
|
||||
:collapsedHeight 0
|
||||
:nonce 1681483457197}}
|
||||
:block/updated-at 1707842738589})
|
||||
:pages ({:block/tx-id 536870974
|
||||
:block/uuid #uuid "6421db79-4e2f-4101-9758-4aef5320cc67"
|
||||
:block/properties
|
||||
{:ls-type :whiteboard-page
|
||||
:logseq.tldraw.page
|
||||
{:id "6421db79-4e2f-4101-9758-4aef5320cc67"
|
||||
:name "publishing test"
|
||||
:bindings
|
||||
{:689db721-ccca-11ed-8c36-cd64b4f8676b
|
||||
{:id "689db721-ccca-11ed-8c36-cd64b4f8676b"
|
||||
:type "line"
|
||||
:fromId "689db722-ccca-11ed-8c36-cd64b4f8676b"
|
||||
:toId "665eeab0-ccca-11ed-8c36-cd64b4f8676b"
|
||||
:handleId "end"
|
||||
:point [1 0.94]
|
||||
:distance 4}}
|
||||
:nonce 1
|
||||
:assets []
|
||||
:shapes-index ("665eeab0-ccca-11ed-8c36-cd64b4f8676b" "689db722-ccca-11ed-8c36-cd64b4f8676b" "08b11d80-cda0-11ed-8356-d36ee09ec21e" "a5ced1d0-d3cb-11ed-84d2-d9f3e7dd8e6d" "c80e4880-dad2-11ed-b0d8-ef9040ba205f" "cae02d30-dad2-11ed-b0d8-ef9040ba205f" "ce9d5c40-dad2-11ed-b0d8-ef9040ba205f" "d0eb6af0-dad2-11ed-b0d8-ef9040ba205f" "d51c4360-dad2-11ed-b0d8-ef9040ba205f" "17a61b70-dad3-11ed-b0d8-ef9040ba205f" "1ee6f300-dad3-11ed-b0d8-ef9040ba205f" "46999ba0-dad3-11ed-b0d8-ef9040ba205f" "4ac3e461-dad3-11ed-b0d8-ef9040ba205f" "3f1d1b80-cdaa-11ed-8356-d36ee09ec21e" "eb97f800-dfa0-11ed-8d23-dd2d2525f6dc")}}
|
||||
:block/updated-at 1707842737378
|
||||
:block/created-at 1679940473374
|
||||
:block/type "whiteboard"
|
||||
:block/name "publishing test"
|
||||
:block/title "publishing test"})}
|
||||
Reference in New Issue
Block a user