diff --git a/.clj-kondo/config.edn b/.clj-kondo/config.edn index e21adf0490..a2d6132893 100644 --- a/.clj-kondo/config.edn +++ b/.clj-kondo/config.edn @@ -3,7 +3,17 @@ :config-in-ns ;; :used-underscored-binding is turned off for components because of false positive ;; for rum/defcs and _state. - {all-components {:linters {:used-underscored-binding {:level :off}}} + {all-components + {:linters {:used-underscored-binding {:level :off} + ;; TODO: Apply this to all of frontend + :shadowed-var {:level :warning + ;; FIXME: Remove most of these as shadowing core fns isn't a good practice + :exclude [t name binding type uuid key val time fn ex-data list + keys vals sort-by namespace count parents int? hash subs + load-file exists? rest object? min max class array range string? delay? + new var re-pattern update iter ns char resolve sequence identity + dispatch-fn identity comp max-key vec meta next delay str vector list? chars + chunk test]}}} ;; false positive with match/match and _ frontend.handler.paste {:linters {:used-underscored-binding {:level :off}}} frontend.db {:linters {:aliased-namespace-symbol diff --git a/.github/workflows/deploy-stage-to-master.yml b/.github/workflows/deploy-stage-to-master.yml index 518211f79a..924239b6f9 100644 --- a/.github/workflows/deploy-stage-to-master.yml +++ b/.github/workflows/deploy-stage-to-master.yml @@ -2,7 +2,17 @@ name: Deploy master to cloudflare pages for test on: push: - branches: ["master"] + branches: [ "master" ] + workflow_dispatch: + inputs: + git-ref: + description: "Release Git Ref (Which branch or tag to build?)" + required: true + default: "master" + cloudflare-project-name: + description: "Cloudflare pages project name" + required: true + default: "logseq-dev" env: CLOJURE_VERSION: "1.10.1.763" @@ -47,6 +57,6 @@ jobs: apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }} accountId: 2553ea8236c11ea0f88de28fce1cbfee projectName: "logseq-dev" - directory: "static" + directory: "public" gitHubToken: ${{ secrets.GITHUB_TOKEN }} branch: "production" diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index 62e9893287..3c2626b324 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -9,14 +9,11 @@ on: branches: [master] paths: - 'e2e-tests/**' - pull_request: - branches: [master] - paths: - - 'e2e-tests/**' - -# TODO: Re-enable when ready to enable tests for file graphs -defaults: - if: false + # TODO: Re-enable when ready to enable tests for file graphs + # pull_request: + # branches: [master] + # paths: + # - 'e2e-tests/**' env: CLOJURE_VERSION: '1.11.1.1413' diff --git a/deps/common/.clj-kondo/config.edn b/deps/common/.clj-kondo/config.edn index 0c823f5a51..b609a047b8 100644 --- a/deps/common/.clj-kondo/config.edn +++ b/deps/common/.clj-kondo/config.edn @@ -2,6 +2,7 @@ {:aliased-namespace-symbol {:level :warning} :namespace-name-mismatch {:level :warning} :used-underscored-binding {:level :warning} + :shadowed-var {:level :warning} :consistent-alias {:aliases {clojure.string string}}} diff --git a/deps/common/src/logseq/common/util/date_time.cljs b/deps/common/src/logseq/common/util/date_time.cljs index 2338a29ee6..3b6b246095 100644 --- a/deps/common/src/logseq/common/util/date_time.cljs +++ b/deps/common/src/logseq/common/util/date_time.cljs @@ -14,16 +14,16 @@ (defn journal-title-> [journal-title then-fn formatters] (when-not (string/blank? journal-title) - (when-let [time (->> (map - (fn [formatter] - (try - (tf/parse (tf/formatter formatter) (common-util/capitalize-all journal-title)) - (catch :default _e - nil))) - formatters) - (filter some?) - first)] - (then-fn time)))) + (when-let [time' (->> (map + (fn [formatter] + (try + (tf/parse (tf/formatter formatter) (common-util/capitalize-all journal-title)) + (catch :default _e + nil))) + formatters) + (filter some?) + first)] + (then-fn time')))) (defn journal-title->int [journal-title formatters] diff --git a/deps/common/src/logseq/common/util/macro.cljs b/deps/common/src/logseq/common/util/macro.cljs index c910de7f7a..c91bb209c6 100644 --- a/deps/common/src/logseq/common/util/macro.cljs +++ b/deps/common/src/logseq/common/util/macro.cljs @@ -25,13 +25,13 @@ (defn- macro-expand-value "Checks a string for a macro and expands it if there's a macro entry for it. This is a slimmer version of macro-else-cp" - [val macros] - (if-let [[_ macro args] (and (string? val) - (seq (re-matches #"\{\{(\S+)\s+(.*)\}\}" val)))] + [value macros] + (if-let [[_ macro args] (and (string? value) + (seq (re-matches #"\{\{(\S+)\s+(.*)\}\}" value)))] (if-let [content (get macros macro)] (macro-subs content (string/split args #"\s+")) - val) - val)) + value) + value)) (defn expand-value-if-macro [s macros] diff --git a/deps/common/src/logseq/common/uuid.cljs b/deps/common/src/logseq/common/uuid.cljs index 32fd05d067..3c4406d0e2 100644 --- a/deps/common/src/logseq/common/uuid.cljs +++ b/deps/common/src/logseq/common/uuid.cljs @@ -35,7 +35,7 @@ the remaining chars for data of this type" - :journal-page-uuid - :db-ident-block-uuid" ([] (d/squuid)) - ([type v] - (case type + ([type' v] + (case type' :journal-page-uuid (gen-journal-page-uuid v) :db-ident-block-uuid (gen-db-ident-block-uuid v)))) diff --git a/deps/db/.clj-kondo/config.edn b/deps/db/.clj-kondo/config.edn index 37856d3947..54efa9a16c 100644 --- a/deps/db/.clj-kondo/config.edn +++ b/deps/db/.clj-kondo/config.edn @@ -2,6 +2,9 @@ {:aliased-namespace-symbol {:level :warning} :namespace-name-mismatch {:level :warning} :used-underscored-binding {:level :warning} + :shadowed-var {:level :warning + ;; FIXME: Remove these as shadowing core fns isn't a good practice + :exclude [val key]} :consistent-alias {:aliases {clojure.string string diff --git a/deps/db/src/logseq/db.cljs b/deps/db/src/logseq/db.cljs index d2f91476b6..ae45b8b50e 100644 --- a/deps/db/src/logseq/db.cljs +++ b/deps/db/src/logseq/db.cljs @@ -189,11 +189,11 @@ (defn page-exists? "Whether a page exists with the `type`." - [db page-name type] + [db page-name type'] (when page-name (if (db-based-graph? db) ;; Classes and properties are case sensitive - (if (#{"class" "property"} type) + (if (#{"class" "property"} type') (seq (d/q '[:find [?p ...] @@ -203,7 +203,7 @@ [?p :block/type ?type]] db page-name - type)) + type')) ;; TODO: Decouple db graphs from file specific :block/name (seq (d/q @@ -214,7 +214,7 @@ [?p :block/type ?type]] db (common-util/page-name-sanity-lc page-name) - type))) + type'))) (d/entity db [:block/name (common-util/page-name-sanity-lc page-name)])))) (defn get-page @@ -260,7 +260,7 @@ (map (fn [page] (when-let [page (get-page db page)] - (let [name (:block/name page)] + (let [name' (:block/name page)] (and (empty-ref-f page) (or @@ -271,13 +271,14 @@ first-child (= 1 (count children)) (contains? #{"" "-" "*"} (string/trim (:block/title first-child)))))) - (not (contains? built-in-pages name)) + (not (contains? built-in-pages name')) (not (whiteboard? page)) (not (:block/_namespace 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 "/") + (not (and (string/includes? name' "/") (not (journal? page)))) + (not (:block/properties page)) page)))) pages) (remove false?) @@ -322,13 +323,13 @@ (defn get-block-parents [db block-id {:keys [depth] :or {depth 100}}] (loop [block-id block-id - parents (list) + parents' (list) d 1] (if (> d depth) - parents + parents' (if-let [parent (:block/parent (d/entity db [:block/uuid block-id]))] - (recur (:block/uuid parent) (conj parents parent) (inc d)) - parents)))) + (recur (:block/uuid parent) (conj parents' parent) (inc d)) + parents')))) (def get-block-children-ids sqlite-common-db/get-block-children-ids) (def get-block-children sqlite-common-db/get-block-children) @@ -532,9 +533,9 @@ ;; File based fns (defn get-namespace-pages "Accepts both sanitized and unsanitized namespaces" - [db namespace {:keys [db-graph?]}] - (assert (string? namespace)) - (let [namespace (common-util/page-name-sanity-lc namespace) + [db namespace' {:keys [db-graph?]}] + (assert (string? namespace')) + (let [namespace'' (common-util/page-name-sanity-lc namespace') pull-attrs (cond-> [:db/id :block/name :block/title :block/namespace] (not db-graph?) (conj {:block/file [:db/id :file/path]}))] @@ -546,16 +547,16 @@ (list 'namespace '?p '?c)] db (:namespace rules/rules) - namespace))) + namespace''))) (defn get-pages-by-name-partition - [db partition] - (when-not (string/blank? partition) - (let [partition (common-util/page-name-sanity-lc (string/trim partition)) + [db partition'] + (when-not (string/blank? partition') + (let [partition'' (common-util/page-name-sanity-lc (string/trim partition')) ids (->> (d/datoms db :aevt :block/name) (filter (fn [datom] (let [page (:v datom)] - (string/includes? page partition)))) + (string/includes? page partition'')))) (map :e))] (when (seq ids) (d/pull-many db diff --git a/deps/db/src/logseq/db/frontend/class.cljs b/deps/db/src/logseq/db/frontend/class.cljs index 9bee123214..30f04fdbba 100644 --- a/deps/db/src/logseq/db/frontend/class.cljs +++ b/deps/db/src/logseq/db/frontend/class.cljs @@ -28,4 +28,4 @@ {:pre [(string? (:block/title page-m))]} (let [db-ident (create-user-class-ident-from-name (:block/title page-m)) db-ident' (db-ident/ensure-unique-db-ident db db-ident)] - (sqlite-util/build-new-class (assoc page-m :db/ident db-ident')))) \ No newline at end of file + (sqlite-util/build-new-class (assoc page-m :db/ident db-ident')))) diff --git a/deps/db/src/logseq/db/frontend/inputs.cljs b/deps/db/src/logseq/db/frontend/inputs.cljs index 5843c909dc..ee2c4212ca 100644 --- a/deps/db/src/logseq/db/frontend/inputs.cljs +++ b/deps/db/src/logseq/db/frontend/inputs.cljs @@ -17,10 +17,10 @@ it will return 1622433600000, which is equivalent to Mon May 31 2021 00 :00:00." (.setHours (js/Date. date) hours mins secs millisecs))) (defn- old->new-relative-date-format [input] - (let [count (re-find #"^\d+" (name input)) + (let [count' (re-find #"^\d+" (name input)) plus-minus (if (re-find #"after" (name input)) "+" "-") ms? (string/ends-with? (name input) "-ms")] - (keyword :today (str plus-minus count "d" (if ms? "-ms" ""))))) + (keyword :today (str plus-minus count' "d" (if ms? "-ms" ""))))) (comment (old->new-relative-date-format "1d") diff --git a/deps/db/src/logseq/db/frontend/property/build.cljs b/deps/db/src/logseq/db/frontend/property/build.cljs index 2fe1c5caac..3b47274b83 100644 --- a/deps/db/src/logseq/db/frontend/property/build.cljs +++ b/deps/db/src/logseq/db/frontend/property/build.cljs @@ -43,10 +43,10 @@ :ref-type? true}) property-attributes)] (into [property-tx] - (map (fn [{:keys [db-ident value icon uuid]}] + (map (fn [{uuid' :uuid :keys [db-ident value icon]}] (cond-> (build-closed-value-block - uuid + uuid' value property {:db-ident db-ident :icon icon}) diff --git a/deps/db/src/logseq/db/frontend/rules.cljc b/deps/db/src/logseq/db/frontend/rules.cljc index c01bb321ad..2f62a4d951 100644 --- a/deps/db/src/logseq/db/frontend/rules.cljc +++ b/deps/db/src/logseq/db/frontend/rules.cljc @@ -234,10 +234,10 @@ * :deps - A map of rule names to their dependencies. Only one-level of dependencies are resolved. No dependencies are detected by default though we could add it later e.g. find-rules-in-where" ([rules-m] (extract-rules rules-m (keys rules-m))) - ([rules-m rules & {:keys [deps]}] - (let [rules-with-deps (concat rules + ([rules-m rules' & {:keys [deps]}] + (let [rules-with-deps (concat rules' (when (map? deps) - (mapcat deps rules)))] + (mapcat deps rules')))] (vec (mapcat #(let [val (rules-m %)] ;; if vector?, rule has multiple clauses diff --git a/deps/db/src/logseq/db/sqlite/common_db.cljs b/deps/db/src/logseq/db/sqlite/common_db.cljs index 7a7a57bbed..efea16dd82 100644 --- a/deps/db/src/logseq/db/sqlite/common_db.cljs +++ b/deps/db/src/logseq/db/sqlite/common_db.cljs @@ -213,8 +213,8 @@ (defn get-structured-datoms [db] - (mapcat (fn [type] - (->> (d/datoms db :avet :block/type type) + (mapcat (fn [type'] + (->> (d/datoms db :avet :block/type type') (mapcat (fn [d] (d/datoms db :eavt (:e d)))))) [ diff --git a/deps/db/src/logseq/db/sqlite/create_graph.cljs b/deps/db/src/logseq/db/sqlite/create_graph.cljs index 6187045b8b..d466209046 100644 --- a/deps/db/src/logseq/db/sqlite/create_graph.cljs +++ b/deps/db/src/logseq/db/sqlite/create_graph.cljs @@ -61,9 +61,9 @@ (defn kv "Creates a key-value pair tx with the key and value respectively stored under :db/ident and :kv/value. The key must be under the namespace :logseq.kv" - [key value] - {:pre [(= "logseq.kv" (namespace key))]} - {:db/ident key + [k value] + {:pre [(= "logseq.kv" (namespace k))]} + {:db/ident k :kv/value value}) (def built-in-pages-names diff --git a/deps/db/src/logseq/db/sqlite/util.cljs b/deps/db/src/logseq/db/sqlite/util.cljs index 4d0a4cda0f..e817a583ee 100644 --- a/deps/db/src/logseq/db/sqlite/util.cljs +++ b/deps/db/src/logseq/db/sqlite/util.cljs @@ -24,8 +24,8 @@ (transit/write transit-w data)) (defn transit-read - [str] - (transit/read transit-r str)) + [s] + (transit/read transit-r s)) (def write-transit-str (let [write-handlers (->> (assoc dt/write-handlers diff --git a/deps/graph-parser/.clj-kondo/config.edn b/deps/graph-parser/.clj-kondo/config.edn index 2e043e92da..a48b63cfe2 100644 --- a/deps/graph-parser/.clj-kondo/config.edn +++ b/deps/graph-parser/.clj-kondo/config.edn @@ -2,6 +2,9 @@ {:aliased-namespace-symbol {:level :warning} :namespace-name-mismatch {:level :warning} :used-underscored-binding {:level :warning} + :shadowed-var {:level :warning + ;; FIXME: Remove these as shadowing core fns isn't a good practice + :exclude [val format key name alias type parents exists?]} :consistent-alias {:aliases {clojure.string string diff --git a/deps/graph-parser/src/logseq/graph_parser.cljs b/deps/graph-parser/src/logseq/graph_parser.cljs index 97d22ce7c7..93022fcbb6 100644 --- a/deps/graph-parser/src/logseq/graph_parser.cljs +++ b/deps/graph-parser/src/logseq/graph_parser.cljs @@ -12,8 +12,8 @@ (defn- retract-blocks-tx [blocks retain-uuids] - (mapcat (fn [{uuid :block/uuid eid :db/id}] - (if (and uuid (contains? retain-uuids uuid)) + (mapcat (fn [{uuid' :block/uuid eid :db/id}] + (if (and uuid' (contains? retain-uuids uuid')) (map (fn [attr] [:db.fn/retractAttribute eid attr]) db-schema/retract-attributes) (when eid [[:db.fn/retractEntity eid]]))) blocks)) diff --git a/deps/graph-parser/src/logseq/graph_parser/block.cljs b/deps/graph-parser/src/logseq/graph_parser/block.cljs index 57b3a39c35..1197a93b9a 100644 --- a/deps/graph-parser/src/logseq/graph_parser/block.cljs +++ b/deps/graph-parser/src/logseq/graph_parser/block.cljs @@ -341,9 +341,9 @@ new-uuid*))] {:block/uuid new-uuid})) (when namespace? - (let [namespace (first (common-util/split-last "/" original-page-name))] - (when-not (string/blank? namespace) - {:block/namespace {:block/name (common-util/page-name-sanity-lc namespace)}}))) + (let [namespace' (first (common-util/split-last "/" original-page-name))] + (when-not (string/blank? namespace') + {:block/namespace {:block/name (common-util/page-name-sanity-lc namespace')}}))) (when (and with-timestamp? (or skip-existing-page-check? (not page-entity))) ;; Only assign timestamp on creating new entity (let [current-ms (common-util/time-ms)] {:block/created-at current-ms @@ -414,8 +414,9 @@ (let [macro? (and (map? item) (= "macro" (:type item)))] (when-not macro? - (let [result (cond->> (page-name->map item db true date-formatter {:class? tag?}) - tag? + (let [m (page-name->map item db true date-formatter {:class? tag?}) + result (cond->> m + (and tag? (not (:db/ident m))) (db-class/build-new-class db)) page-name (:block/name result) id (get @*name->id page-name)] @@ -462,13 +463,13 @@ blocks)) (defn get-block-content - [utf8-content block format meta block-pattern] - (let [content (if-let [end-pos (:end_pos meta)] + [utf8-content block format meta' block-pattern] + (let [content (if-let [end-pos (:end_pos meta')] (utf8/substring utf8-content - (:start_pos meta) + (:start_pos meta') end-pos) (utf8/substring utf8-content - (:start_pos meta))) + (:start_pos meta'))) content (when content (let [content (text/remove-level-spaces content format block-pattern)] (if (or (:pre-block? block) @@ -598,7 +599,7 @@ (-> (assoc block :collapsed? true) (update :properties (fn [m] (dissoc m :collapsed))) (update :properties-text-values dissoc :collapsed) - (update :properties-order (fn [keys] (vec (remove #{:collapsed} keys))))) + (update :properties-order (fn [keys'] (vec (remove #{:collapsed} keys'))))) block) title (cond->> (get-block-content encoded-content block format pos-meta block-pattern) remove-properties? @@ -741,7 +742,7 @@ (map #(dissoc % :block/level-spaces) result) (let [[block & others] blocks level-spaces (:block/level-spaces block) - {:block/keys [uuid level parent] :as last-parent} (last parents) + {uuid' :block/uuid :block/keys [level parent] :as last-parent} (last parents) parent-spaces (:block/level-spaces last-parent) [blocks parents result] (cond @@ -754,7 +755,7 @@ [others parents' result']) (> level-spaces parent-spaces) ; child - (let [parent (if uuid [:block/uuid uuid] (:page/id last-parent)) + (let [parent (if uuid' [:block/uuid uuid'] (:page/id last-parent)) block (cond-> (assoc block :block/parent parent) diff --git a/deps/graph-parser/src/logseq/graph_parser/db.cljs b/deps/graph-parser/src/logseq/graph_parser/db.cljs index dcaf03df43..0445f25ac4 100644 --- a/deps/graph-parser/src/logseq/graph_parser/db.cljs +++ b/deps/graph-parser/src/logseq/graph_parser/db.cljs @@ -31,12 +31,12 @@ (defn- build-pages-tx [pages] - (let [time (common-util/time-ms)] + (let [time' (common-util/time-ms)] (map (fn [m] (-> m - (assoc :block/created-at time) - (assoc :block/updated-at time))) + (assoc :block/created-at time') + (assoc :block/updated-at time'))) pages))) (defn create-default-pages! @@ -44,8 +44,8 @@ fn is idempotent" [db-conn] (when-not (ldb/get-page @db-conn "card") - (let [built-in-pages (build-pages-tx built-in-pages)] - (ldb/transact! db-conn built-in-pages)))) + (let [built-in-pages' (build-pages-tx built-in-pages)] + (ldb/transact! db-conn built-in-pages')))) (defn start-conn "Create datascript conn with schema and default data" diff --git a/deps/graph-parser/src/logseq/graph_parser/exporter.cljs b/deps/graph-parser/src/logseq/graph_parser/exporter.cljs index d0dbd761e7..8fa4a5256b 100644 --- a/deps/graph-parser/src/logseq/graph_parser/exporter.cljs +++ b/deps/graph-parser/src/logseq/graph_parser/exporter.cljs @@ -210,7 +210,7 @@ (defn- text-with-refs? "Detects if a property value has text with refs e.g. `#Logseq is #awesome` instead of `#Logseq #awesome`. If so the property type is :default instead of :page" - [vals val-text] + [prop-vals val-text] (let [replace-regex (re-pattern ;; Regex removes all characters of a tag or page-ref ;; so that only ref chars are left @@ -219,7 +219,7 @@ ;; Sorts ref names in descending order so that longer names ;; come first. Order matters since (foo-bar|foo) correctly replaces ;; "foo-bar" whereas (foo|foo-bar) does not - (->> vals (sort >) (map common-util/escape-regex-chars) (string/join "|")) + (->> prop-vals (sort >) (map common-util/escape-regex-chars) (string/join "|")) ")")) remaining-text (string/replace val-text replace-regex "$1") non-ref-char (some #(if (or (string/blank? %) (#{"[" "]" "," "#"} %)) @@ -839,11 +839,11 @@ ;; _ (when (seq new-properties) (prn :new-properties new-properties)) [properties-tx pages-tx'] ((juxt filter remove) #(contains? new-properties (keyword (:block/name %))) pages-tx) - property-pages-tx (map (fn [{:block/keys [title uuid]}] + property-pages-tx (map (fn [{block-uuid :block/uuid :block/keys [title]}] (let [db-ident (get @(:all-idents import-state) (keyword (string/lower-case title)))] (sqlite-util/build-new-property db-ident (get @(:property-schemas import-state) (keyword title)) - {:title title :block-uuid uuid}))) + {:title title :block-uuid block-uuid}))) properties-tx) converted-property-pages-tx (map (fn [kw-name] diff --git a/deps/outliner/.clj-kondo/config.edn b/deps/outliner/.clj-kondo/config.edn index 19d4a1eed2..07ec627c42 100644 --- a/deps/outliner/.clj-kondo/config.edn +++ b/deps/outliner/.clj-kondo/config.edn @@ -2,6 +2,7 @@ {:aliased-namespace-symbol {:level :warning} :namespace-name-mismatch {:level :warning} :used-underscored-binding {:level :warning} + :shadowed-var {:level :warning} :consistent-alias {:aliases {clojure.string string diff --git a/deps/outliner/src/logseq/outliner/core.cljs b/deps/outliner/src/logseq/outliner/core.cljs index 3e72cfe217..90bb002382 100644 --- a/deps/outliner/src/logseq/outliner/core.cljs +++ b/deps/outliner/src/logseq/outliner/core.cljs @@ -445,10 +445,10 @@ (if-let [list-type (and target-block (list-type-fn target-block))] (mapv (fn [{:block/keys [title format] :as block}] - (let [list? (and (some? (:block/uuid block)) - (nil? (list-type-fn block)))] + (let [list?' (and (some? (:block/uuid block)) + (nil? (list-type-fn block)))] (cond-> block - list? + list?' ((fn [b] (if db-based? (assoc b :logseq.property/order-list-type list-type) @@ -493,10 +493,10 @@ get-new-id (fn [block lookup] (cond (or (map? lookup) (vector? lookup) (de/entity? lookup)) - (when-let [uuid (if (and (vector? lookup) (= (first lookup) :block/uuid)) + (when-let [uuid' (if (and (vector? lookup) (= (first lookup) :block/uuid)) (get uuids (last lookup)) (get id->new-uuid (:db/id lookup)))] - [:block/uuid uuid]) + [:block/uuid uuid']) (integer? lookup) lookup @@ -505,14 +505,14 @@ (throw (js/Error. (str "[insert-blocks] illegal lookup: " lookup ", block: " block))))) orders (get-block-orders blocks target-block sibling? keep-block-order?)] (map-indexed (fn [idx {:block/keys [parent] :as block}] - (when-let [uuid (get uuids (:block/uuid block))] + (when-let [uuid' (get uuids (:block/uuid block))] (let [top-level? (= (:block/level block) 1) parent (compute-block-parent block parent target-block top-level? sibling? get-new-id outliner-op replace-empty-target? idx) order (nth orders idx) _ (assert (and parent order) (str "Parent or order is nil: " {:parent parent :order order})) m {:db/id (:db/id block) - :block/uuid uuid + :block/uuid uuid' :block/page target-page :block/parent parent :block/order order}] @@ -647,7 +647,7 @@ :target-block target-block})) (let [uuids-tx (->> (map :block/uuid tx') (remove nil?) - (map (fn [uuid] {:block/uuid uuid}))) + (map (fn [uuid'] {:block/uuid uuid'}))) tx (assign-temp-id tx' replace-empty-target? target-block) from-property (:logseq.property/created-from-property target-block) property-values-tx (when (and sibling? from-property) @@ -776,10 +776,10 @@ original-position? (move-to-original-position? blocks target-block sibling? non-consecutive?)] (when (and (not (contains? (set (map :db/id blocks)) (:db/id target-block))) (not original-position?)) - (let [parents (->> (ldb/get-block-parents db (:block/uuid target-block) {}) - (map :db/id) - (set)) - move-parents-to-child? (some parents (map :db/id blocks))] + (let [parents' (->> (ldb/get-block-parents db (:block/uuid target-block) {}) + (map :db/id) + (set)) + move-parents-to-child? (some parents' (map :db/id blocks))] (when-not move-parents-to-child? (batch-tx/with-batch-tx-mode conn {:outliner-op :move-blocks} (doseq [[idx block] (map vector (range (count blocks)) blocks)] diff --git a/deps/outliner/src/logseq/outliner/pipeline.cljs b/deps/outliner/src/logseq/outliner/pipeline.cljs index 9486b6db56..8b342076fc 100644 --- a/deps/outliner/src/logseq/outliner/pipeline.cljs +++ b/deps/outliner/src/logseq/outliner/pipeline.cljs @@ -74,10 +74,10 @@ (when-not (@*computed-ids (:block/uuid block)) (let [page? (ldb/page? block) from-property (:logseq.property/created-from-property block) - parents (when-not page? + parents' (when-not page? (ldb/get-block-parents db-after (:block/uuid block) {})) parents-refs (->> (cond->> - (mapcat :block/path-refs parents) + (mapcat :block/path-refs parents') from-property (remove (fn [parent] (and (ldb/property? parent) (not= (:db/id parent) (:db/id from-property)))))) (map :db/id)) @@ -151,9 +151,14 @@ (into {})) property-key-refs (->> (keys properties) (remove private-built-in-props)) - page-or-object? (fn [block] (and (de/entity? block) - (or (ldb/page? block) - (seq (:block/tags block))))) + page-or-object? (fn [block] + (and (de/entity? block) + (or (ldb/page? block) + (seq (:block/tags block))) + ;; Don't allow :default property value objects to reference their + ;; parent block as they are dependent on their block for display + ;; and look weirdly recursive - https://github.com/logseq/db-test/issues/36 + (not (:logseq.property/created-from-property block)))) property-value-refs (->> (vals properties) (mapcat (fn [v] (cond diff --git a/deps/outliner/src/logseq/outliner/property.cljs b/deps/outliner/src/logseq/outliner/property.cljs index 8ca61b005b..a03bdd6ec0 100644 --- a/deps/outliner/src/logseq/outliner/property.cljs +++ b/deps/outliner/src/logseq/outliner/property.cljs @@ -71,12 +71,12 @@ v-str)) (defn- update-datascript-schema - [property {:keys [type cardinality]}] + [property {type' :type :keys [cardinality]}] (let [ident (:db/ident property) cardinality (if (= cardinality :many) :db.cardinality/many :db.cardinality/one) old-type (get-in property [:block/schema :type]) old-ref-type? (db-property-type/ref-property-types old-type) - ref-type? (db-property-type/ref-property-types type)] + ref-type? (db-property-type/ref-property-types type')] [(cond-> {:db/ident ident :db/cardinality cardinality} diff --git a/deps/publishing/.clj-kondo/config.edn b/deps/publishing/.clj-kondo/config.edn index 24a43335cd..47e13e72f5 100644 --- a/deps/publishing/.clj-kondo/config.edn +++ b/deps/publishing/.clj-kondo/config.edn @@ -2,6 +2,7 @@ {:aliased-namespace-symbol {:level :warning} :namespace-name-mismatch {:level :warning} :used-underscored-binding {:level :warning} + :shadowed-var {:level :warning} :consistent-alias {:aliases {clojure.string string}}} diff --git a/deps/publishing/src/logseq/publishing/db.cljs b/deps/publishing/src/logseq/publishing/db.cljs index 650e531937..28f30d34bc 100644 --- a/deps/publishing/src/logseq/publishing/db.cljs +++ b/deps/publishing/src/logseq/publishing/db.cljs @@ -16,13 +16,13 @@ (let [prop-lookup-fn (if (entity-util/db-based-graph? db) #(db-property/property-value-content (get %1 %2)) #(get %1 (keyword (name %2))))] - (when-some [uuid (:block/uuid block)] + (when-some [uuid' (:block/uuid block)] (when-some [stamp (prop-lookup-fn props :logseq.property.pdf/hl-stamp)] (let [group-key (string/replace-first (:block/title page) #"^hls__" "") hl-page (prop-lookup-fn props :logseq.property.pdf/hl-page) encoded-chars? (boolean (re-find #"(?i)%[0-9a-f]{2}" group-key)) group-key (if encoded-chars? (js/encodeURI group-key) group-key)] - (str "./assets/" group-key "/" (str hl-page "_" uuid "_" stamp ".png")))))))) + (str "./assets/" group-key "/" (str hl-page "_" uuid' "_" stamp ".png")))))))) (defn- clean-asset-path-prefix [path] @@ -170,8 +170,8 @@ (set (concat (get-public-false-pages db) (get-public-false-block-ids db)))) filtered-db (d/filter db (fn [_db datom] - (let [ns (namespace (:a datom))] - (and (not (remove? ns)) + (let [ns' (namespace (:a datom))] + (and (not (remove? ns')) (not (contains? #{:block/file} (:a datom))) (not (contains? non-public-datom-ids (:e datom))))))) datoms (d/datoms filtered-db :eavt) @@ -189,13 +189,13 @@ exported-namespace? #(contains? #{"block" "recent"} %) filtered-db (d/filter db (fn [db datom] - (let [ns (namespace (:a datom))] + (let [ns' (namespace (:a datom))] (and (not (contains? #{:block/file} (:a datom))) - (not= ns "file") + (not= ns' "file") (or - (not (exported-namespace? ns)) - (and (= ns "block") + (not (exported-namespace? ns')) + (and (= ns' "block") (or (contains? public-pages (:e datom)) (contains? public-pages (:db/id (:block/page (d/entity db (:e datom)))))))))))) diff --git a/deps/publishing/src/logseq/publishing/html.cljs b/deps/publishing/src/logseq/publishing/html.cljs index e1c08482ae..405699cb44 100644 --- a/deps/publishing/src/logseq/publishing/html.cljs +++ b/deps/publishing/src/logseq/publishing/html.cljs @@ -42,9 +42,9 @@ necessary db filtering" (defn- ^:large-vars/html publishing-html [transit-db app-state options] - (let [{:keys [icon name alias title description url]} options + (let [{name' :name :keys [icon alias title description url]} options icon (or icon "static/img/logo.png") - project (or alias name)] + project (or alias name')] (str "\n" (html (list @@ -138,8 +138,8 @@ necessary db filtering" "Given the graph's db, filters the db using the given options and returns the generated index.html string and assets used by the html" [db* {:keys [app-state repo-config html-options db-graph?]}] - (let [all-pages-public? (if-let [val (:publishing/all-pages-public? repo-config)] - val + (let [all-pages-public? (if-let [value (:publishing/all-pages-public? repo-config)] + value (:all-pages-public? repo-config)) [db asset-filenames'] (if all-pages-public? (db/clean-export! db* {:db-graph? db-graph?}) diff --git a/deps/publishing/test/logseq/publishing/test/helper.clj b/deps/publishing/test/logseq/publishing/test/helper.clj index 8607d386be..2cd339b009 100644 --- a/deps/publishing/test/logseq/publishing/test/helper.clj +++ b/deps/publishing/test/logseq/publishing/test/helper.clj @@ -5,12 +5,12 @@ "A wrapper around deftest that handles async and done in all cases. Importantly, it prevents unexpected failures in an async test from abruptly ending a test suite" - [name opts & body] + [name' opts & body] (let [[opts body] (if (map? opts) [opts body] [nil (cons opts body)])] - `(cljs.test/deftest ~name + `(cljs.test/deftest ~name' ~@(when-let [pre (:before opts)] [pre]) (cljs.test/async diff --git a/docs/contributing-to-translations.md b/docs/contributing-to-translations.md index c052ab6aac..ffffa18ead 100644 --- a/docs/contributing-to-translations.md +++ b/docs/contributing-to-translations.md @@ -78,7 +78,7 @@ $ bb lang:missing es --copy ... ``` -Almost all translations are small. The only exceptions to this are the keys `:tutorial/text` and `:tutorial/dummy-notes`. These translations are files that are part of the onboarding tutorial and can be found under [src/resources/tutorials/](https://github.com/logseq/logseq/blob/master/src/resources/tutorials/). +Almost all translations are small. The only exceptions to this are keys that point to files e.g. their value is prefixed with `#resource`. TODO: Update when new tutorials are written ### Editing Tips diff --git a/src/electron/electron/core.cljs b/src/electron/electron/core.cljs index 5ff0c11d26..f245f6ca17 100644 --- a/src/electron/electron/core.cljs +++ b/src/electron/electron/core.cljs @@ -58,8 +58,8 @@ (when (= (str LSP_SCHEME ":") (.-protocol parsed-url)) (logseq-url-handler win parsed-url)))) -(defn setup-interceptor! [^js app] - (.setAsDefaultProtocolClient app LSP_SCHEME) +(defn setup-interceptor! [^js app'] + (.setAsDefaultProtocolClient app' LSP_SCHEME) (.registerFileProtocol protocol FILE_ASSETS_SCHEME @@ -242,13 +242,13 @@ (open-url-handler win url)))))) (defn- on-app-ready! - [^js app] - (.on app "ready" + [^js app'] + (.on app' "ready" (fn [] - (let [t0 (setup-interceptor! app) + (let [t0 (setup-interceptor! app') ^js win (win/create-main-window!) _ (reset! *win win)] - (logger/info (str "Logseq App(" (.getVersion app) ") Starting... ")) + (logger/info (str "Logseq App(" (.getVersion app') ") Starting... ")) (utils/> (tree->file-content-aux repo db tree opts context) (string/join "\n"))) -(def init-level 1) - (defn- transact-file-tx-if-not-exists! [conn page-block ok-handler context] (when (:block/name page-block) @@ -163,6 +161,7 @@ (defn- save-tree-aux! [repo db page-block tree blocks-just-deleted? context request-id] (let [page-block (d/pull db '[*] (:db/id page-block)) + init-level 1 file-db-id (-> page-block :block/file :db/id) file-path (-> (d/entity db file-db-id) :file/path) result (if (and (string? file-path) (not-empty file-path)) diff --git a/src/main/frontend/common/missionary_util.cljs b/src/main/frontend/common/missionary_util.cljs index 4d6a844854..1c9e1e6564 100644 --- a/src/main/frontend/common/missionary_util.cljs +++ b/src/main/frontend/common/missionary_util.cljs @@ -11,9 +11,9 @@ (def ^:private retry-sentinel (js-obj)) (defn backoff "Retry task when it throw exception `(get ex-data :missionary/retry)`" - [delays task] + [delays-seq task] (m/sp - (loop [[delay & delays] (seq delays)] + (loop [[delay & rest-delays] (seq delays-seq)] (let [r (try (m/? task) (catch :default e @@ -24,7 +24,7 @@ retry-sentinel) (throw e))))] (if (identical? r retry-sentinel) - (recur delays) + (recur rest-delays) r))))) (defn mix diff --git a/src/main/frontend/common/search_fuzzy.cljs b/src/main/frontend/common/search_fuzzy.cljs index 8c1453f3c6..fb08b45d5f 100644 --- a/src/main/frontend/common/search_fuzzy.cljs +++ b/src/main/frontend/common/search_fuzzy.cljs @@ -36,11 +36,11 @@ s (seq (char-array str)) mult 1 idx MAX-STRING-LENGTH - score 0] + score' 0] (cond ;; add str-len-distance to score, so strings with matches in same position get sorted by length ;; boost score if we have an exact match including punctuation - (empty? q) (+ score + (empty? q) (+ score' (str-len-distance query str) (if (<= 0 (.indexOf ostr oquery)) MAX-STRING-LENGTH 0)) (empty? s) 0 @@ -49,12 +49,12 @@ (rest s) (inc mult) ;; increase the multiplier as more query chars are matched (dec idx) ;; decrease idx so score gets lowered the further into the string we match - (+ mult score)) ;; score for this match is current multiplier * idx + (+ mult score')) ;; score for this match is current multiplier * idx (recur q (rest s) 1 ;; when there is no match, reset multiplier to one (dec idx) - (- score 0.1))))))) + (- score' 0.1))))))) (defn search-normalize "Normalize string for searching (loose)" diff --git a/src/main/frontend/components/all_pages.cljs b/src/main/frontend/components/all_pages.cljs index d0613ae5c5..00fc6ab8cb 100644 --- a/src/main/frontend/components/all_pages.cljs +++ b/src/main/frontend/components/all_pages.cljs @@ -46,8 +46,8 @@ [] (let [db (db/get-db) [data set-data!] (rum/use-state (get-all-pages)) - columns (views/build-columns {} (columns db) - {:with-object-name? false}) + columns' (views/build-columns {} (columns db) + {:with-object-name? false}) view-entity (first (ldb/get-all-pages-views db))] (rum/use-effect! (fn [] @@ -61,7 +61,7 @@ (views/view view-entity {:data data :set-data! set-data! :title-key :all-pages/table-title - :columns columns + :columns columns' :on-delete-rows (fn [table selected-rows] (shui/dialog-open! (component-page/batch-delete-dialog diff --git a/src/main/frontend/components/block.cljs b/src/main/frontend/components/block.cljs index d5b86247e5..87bfddaa55 100644 --- a/src/main/frontend/components/block.cljs +++ b/src/main/frontend/components/block.cljs @@ -1637,8 +1637,8 @@ (youtube/youtube-video youtube-id nil)))) (= name "youtube-timestamp") - (when-let [timestamp (first arguments)] - (when-let [seconds (youtube/parse-timestamp timestamp)] + (when-let [timestamp' (first arguments)] + (when-let [seconds (youtube/parse-timestamp timestamp')] (youtube/timestamp seconds))) (= name "zotero-imported-file") @@ -2370,12 +2370,12 @@ "Tags without inline tags" [config block hover?] (when (:block/raw-title block) - (let [tags (->> + (let [tags' (->> (:block/tags block) (remove (fn [t] (ldb/inline-tag? (:block/raw-title block) t)))) - block-tags (if (and (not hover?) (= [:logseq.class/Task] (map :db/ident tags))) - (remove (fn [t] (= (:db/ident t) :logseq.class/Task)) tags) - tags)] + block-tags (if (and (not hover?) (= [:logseq.class/Task] (map :db/ident tags'))) + (remove (fn [t] (= (:db/ident t) :logseq.class/Task)) tags') + tags')] (when (seq block-tags) [:div.block-tags.flex.flex-row.flex-wrap.items-center.gap-1 (for [tag block-tags] @@ -2504,8 +2504,8 @@ nil)]])) (rum/defc block-refs-count < rum/static - [block block-refs-count *hide-block-refs?] - (when (> block-refs-count 0) + [block block-refs-count' *hide-block-refs?] + (when (> block-refs-count' 0) (shui/button {:variant :ghost :title "Open block references" :class "px-2 py-0 w-6 h-6 opacity-70 hover:opacity-100" @@ -2517,7 +2517,7 @@ (:db/id block) :block-ref) (swap! *hide-block-refs? not)))} - [:span.text-sm block-refs-count]))) + [:span.text-sm block-refs-count']))) (rum/defc block-left-menu < rum/reactive [_config {:block/keys [uuid] :as _block}] @@ -2544,7 +2544,8 @@ current-block-page? (= (str (:block/uuid block)) (state/get-current-page)) embed-self? (and (:embed? config) (= (:block/uuid block) (:block/uuid (:block config)))) - default-hide? (not (and current-block-page? (not embed-self?) (state/auto-expand-block-refs?))) + default-hide? (or (not (and current-block-page? (not embed-self?) (state/auto-expand-block-refs?))) + (= (str (:id config)) (str (:block/uuid block)))) *refs-count (atom nil)] (p/let [count (db-async/ refs-count 0) - (not= (str (:id config)) (str (:block/uuid block)))) + (> refs-count 0)) (when-let [refs-cp (state/get-component :block/linked-references)] (refs-cp uuid)))]])) @@ -2747,7 +2747,7 @@ (if (seq ast-title) (->elem :span.inline-wrap (map-inline config ast-title)) (->elem :div (markup-elements-cp config ast-body))))])))) - breadcrumb (->> (into [] parents-props) + breadcrumbs (->> (into [] parents-props) (concat [page-name-props] (when more? [:more])) (filterv identity) (map (fn [x] @@ -2756,9 +2756,9 @@ (rum/with-key (breadcrumb-fragment config block label opts) (:block/uuid block))) [:span.opacity-70 "⋯"]))) (interpose (breadcrumb-separator)))] - (when (seq breadcrumb) + (when (seq breadcrumbs) [:div.breadcrumb.block-parents - {:class (when (seq breadcrumb) + {:class (when (seq breadcrumbs) (str (when-not (:search? config) " my-2") (when indent? @@ -2766,11 +2766,11 @@ (when (and (false? (:top-level? config)) (seq parents)) (breadcrumb-separator)) - breadcrumb + breadcrumbs (when end-separator? (breadcrumb-separator))])))))) (defn- block-drag-over - [event uuid top? block-id *move-to] + [event uuid top? block-id *move-to'] (util/stop event) (when-not (dnd-same-block? uuid) (let [over-block (gdom/getElement block-id) @@ -2789,25 +2789,25 @@ :else :sibling)] (reset! *drag-to-block block-id) - (reset! *move-to move-to-value)))) + (reset! *move-to' move-to-value)))) (defn- block-drag-leave - [*move-to] - (reset! *move-to nil)) + [*move-to'] + (reset! *move-to' nil)) (defn block-drag-end ([_event] (block-drag-end _event *move-to)) - ([_event *move-to] + ([_event *move-to'] (reset! *dragging? false) (reset! *dragging-block nil) (reset! *drag-to-block nil) - (reset! *move-to nil) + (reset! *move-to' nil) (editor-handler/unhighlight-blocks!))) (defn- block-drop "Block on-drop handler" - [^js event uuid target-block original-block *move-to] + [^js event uuid target-block original-block *move-to'] (util/stop event) (when-not (dnd-same-block? uuid) (let [block-uuids (state/get-selection-block-ids) @@ -2817,7 +2817,7 @@ blocks (remove-nils blocks)] (if (seq blocks) ;; dnd block moving in current Logseq instance - (dnd/move-blocks event blocks target-block original-block @*move-to) + (dnd/move-blocks event blocks target-block original-block @*move-to') ;; handle DataTransfer (let [repo (state/get-current-repo) data-transfer (.-dataTransfer event) @@ -2829,8 +2829,8 @@ text {:block-uuid uuid :edit-block? false - :sibling? (= @*move-to :sibling) - :before? (= @*move-to :top)})) + :sibling? (= @*move-to' :sibling) + :before? (= @*move-to' :top)})) (contains? transfer-types "Files") (let [files (.-files data-transfer) @@ -2862,7 +2862,7 @@ :else (prn ::unhandled-drop-data-transfer-type transfer-types)))))) - (block-drag-end event *move-to)) + (block-drag-end event *move-to')) (defn- block-mouse-over [e *control-show? block-id doc-mode?] @@ -2893,15 +2893,15 @@ (state/into-selection-mode!))) (defn- on-drag-and-mouse-attrs - [block original-block uuid top? block-id *move-to] + [block original-block uuid top? block-id *move-to'] {:on-drag-over (fn [event] - (block-drag-over event uuid top? block-id *move-to)) + (block-drag-over event uuid top? block-id *move-to')) :on-drag-leave (fn [_event] - (block-drag-leave *move-to)) + (block-drag-leave *move-to')) :on-drop (fn [event] - (block-drop event uuid block original-block *move-to)) + (block-drop event uuid block original-block *move-to')) :on-drag-end (fn [event] - (block-drag-end event *move-to))}) + (block-drag-end event *move-to'))}) (defn- root-block? [config block] diff --git a/src/main/frontend/components/cmdk/core.cljs b/src/main/frontend/components/cmdk/core.cljs index 787b6f804f..4149cd4bae 100644 --- a/src/main/frontend/components/cmdk/core.cljs +++ b/src/main/frontend/components/cmdk/core.cljs @@ -86,8 +86,8 @@ (let [sidebar? (:sidebar? (last (:rum/args state))) results @(::results state) input @(::input state) - filter @(::filter state) - filter-group (:group filter) + filter' @(::filter state) + filter-group (:group filter') index (volatile! -1) visible-items (fn [group] (let [{:keys [items show]} (get results group)] @@ -556,7 +556,7 @@ highlighted-item (or @(::highlighted-item state) first-item) highlighted-group @(::highlighted-group state) *mouse-active? (::mouse-active? state') - filter @(::filter state) + filter' @(::filter state) can-show-less? (< GROUP-LIMIT (count visible-items)) can-show-more? (< (count visible-items) (count items)) show-less #(swap! (::results state) assoc-in [group :show] :less) @@ -586,7 +586,7 @@ (when (and (= group highlighted-group) (or can-show-more? can-show-less?) - (empty? filter) + (empty? filter') (not sidebar?)) [:a.text-link.select-node.opacity-50.hover:opacity-90 {:on-click (if (= show :more) show-less show-more)} @@ -737,11 +737,11 @@ (and enter? (not composing?)) (do (handle-action :default state e) (util/stop-propagation e)) - esc? (let [filter @(::filter state)] + esc? (let [filter' @(::filter state)] (when-not (string/blank? input) (util/stop e) (handle-input-change state nil "")) - (when (and filter (string/blank? input)) + (when (and filter' (string/blank? input)) (util/stop e) (reset! (::filter state) nil) (load-results :default state))) @@ -830,9 +830,9 @@ {:init (fn [state] (assoc state ::rand-tip (rand-tip)))} [inner-state state] - (let [filter @(::filter state)] + (let [filter' @(::filter state)] (cond - filter + filter' [:div.flex.flex-row.gap-1.items-center.opacity-50.hover:opacity-100 [:div "Type"] (shui/shortcut "esc" {:tiled false}) diff --git a/src/main/frontend/components/container.cljs b/src/main/frontend/components/container.cljs index f9b67bde96..2dbc8a823a 100644 --- a/src/main/frontend/components/container.cljs +++ b/src/main/frontend/components/container.cljs @@ -167,16 +167,16 @@ (rfe/push-state :page {:name "Favorites"}) (util/stop e))} (when (seq favorite-entities) - (let [favorites (map - (fn [e] - (let [icon (icon/get-node-icon e {})] - {:id (str (:db/id e)) - :value (:block/uuid e) - :content [:li.favorite-item (page-name e icon false)]})) - favorite-entities)] - (dnd-component/items favorites - {:on-drag-end (fn [favorites] - (page-handler/js ids) id->item (zipmap ids col) - [items set-items] (rum/use-state items') + [items-state set-items] (rum/use-state items') _ (rum/use-effect! (fn [] (set-items items')) [col]) [_active-id set-active-id] (rum/use-state nil) sensors (useSensors (useSensor PointerSensor (bean/->js {:activationConstraint {:distance 8}}))) @@ -55,7 +55,7 @@ (when-not (= active-id over-id) (let [old-index (.indexOf ids active-id) new-index (.indexOf ids over-id) - new-items (arrayMove items old-index new-index)] + new-items (arrayMove items-state old-index new-index)] (when (fn? on-drag-end) (let [new-values (->> (map (fn [id] (let [item (id->item id)] @@ -66,7 +66,7 @@ (if (not= (count new-values) (count ids)) (do (js/console.error "Dnd length not matched: ") - {:old-items items + {:old-items items-state :new-items new-items}) (do (set-items new-items) @@ -76,7 +76,7 @@ :down :up)})))))))) (set-active-id nil)))} - sortable-opts {:items items + sortable-opts {:items items-state :strategy (if vertical? verticalListSortingStrategy horizontalListSortingStrategy)} diff --git a/src/main/frontend/components/editor.cljs b/src/main/frontend/components/editor.cljs index e0cd7c6f51..894df581f6 100644 --- a/src/main/frontend/components/editor.cljs +++ b/src/main/frontend/components/editor.cljs @@ -180,8 +180,8 @@ [:div (ui/icon "whiteboard" {:extension? true})] (db/page? block) [:div (ui/icon "page" {:extension? true})] - (or (string/starts-with? (:block/title block) (t :new-tag)) - (string/starts-with? (:block/title block) (t :new-page))) + (or (string/starts-with? (str (:block/title block)) (t :new-tag)) + (string/starts-with? (str (:block/title block)) (t :new-page))) nil :else [:div (ui/icon "letter-n" {:size 14})])) @@ -501,11 +501,11 @@ {:not-matched-handler (editor-handler/keydown-not-matched-handler format)})) (defn- set-up-key-up! - [state input input-id] + [state input' input-id] (mixins/on-key-up state {} - (editor-handler/keyup-handler state input input-id))) + (editor-handler/keyup-handler state input' input-id))) (def search-timeout (atom nil)) @@ -513,9 +513,9 @@ [state] (let [{:keys [id format]} (get-state) input-id id - input (gdom/getElement input-id)] + input' (gdom/getElement input-id)] (set-up-key-down! state format) - (set-up-key-up! state input input-id))) + (set-up-key-up! state input' input-id))) (defn get-editor-style-class "Get textarea css class according to it's content" diff --git a/src/main/frontend/components/icon.cljs b/src/main/frontend/components/icon.cljs index 12b3e34f97..a8e70c3d69 100644 --- a/src/main/frontend/components/icon.cljs +++ b/src/main/frontend/components/icon.cljs @@ -21,14 +21,14 @@ (defonce emojis (vals (bean/->clj (gobj/get emoji-data "emojis")))) (defn icon - [icon & [opts]] + [icon' & [opts]] (cond - (and (= :emoji (:type icon)) (:id icon)) - [:em-emoji (merge {:id (:id icon)} + (and (= :emoji (:type icon')) (:id icon')) + [:em-emoji (merge {:id (:id icon')} opts)] - (and (= :tabler-icon (:type icon)) (:id icon)) - (ui/icon (:id icon) opts))) + (and (= :tabler-icon (:type icon')) (:id icon')) + (ui/icon (:id icon') opts))) (defn get-node-icon [node-entity opts] @@ -76,9 +76,9 @@ (defn- search [q tab] (p/let [icons (when (not= tab :emoji) (search-tabler-icons q)) - emojis (when (not= tab :icon) (search-emojis q))] + emojis' (when (not= tab :icon) (search-emojis q))] {:icons icons - :emojis emojis})) + :emojis emojis'})) (rum/defc icons-row [items] @@ -136,38 +136,38 @@ [:em-emoji {:id id}]]) (rum/defc emojis-cp < rum/static - [emojis {:keys [searching?] :as opts}] + [emojis' {:keys [searching?] :as opts}] (pane-section - (util/format "Emojis (%s)" (count emojis)) - (for [emoji emojis] + (util/format "Emojis (%s)" (count emojis')) + (for [emoji emojis'] (rum/with-key (emoji-cp emoji opts) (:id emoji))) {:virtual-list? true :searching? searching?})) (rum/defc icon-cp < rum/static - [icon {:keys [on-chosen hover]}] + [icon' {:keys [on-chosen hover]}] [:button.w-9.h-9.transition-opacity - (when-let [icon (cond-> icon (string? icon) (string/replace " " ""))] - {:key icon + (when-let [icon' (cond-> icon' (string? icon') (string/replace " " ""))] + {:key icon' :tabIndex "0" - :title icon + :title icon' :on-click (fn [e] (on-chosen e {:type :tabler-icon - :id icon - :name icon})) + :id icon' + :name icon'})) :on-mouse-over #(reset! hover {:type :tabler-icon - :id icon - :name icon - :icon icon}) + :id icon' + :name icon' + :icon icon'}) :on-mouse-out #()}) - (ui/icon icon {:size 24})]) + (ui/icon icon' {:size 24})]) (rum/defc icons-cp < rum/static [icons {:keys [searching?] :as opts}] (pane-section (util/format "Icons (%s)" (count icons)) - (for [icon icons] - (icon-cp icon opts)) + (for [icon' icons] + (icon-cp icon' opts)) {:virtual-list? true :searching? searching?})) diff --git a/src/main/frontend/components/journal.cljs b/src/main/frontend/components/journal.cljs index d1650579e3..a75eddde98 100644 --- a/src/main/frontend/components/journal.cljs +++ b/src/main/frontend/components/journal.cljs @@ -13,7 +13,7 @@ [page] [:div.journal-item.content {:key (:db/id page)} (let [repo (state/sub :git/current-repo)] - (page/page {:repo repo + (page/page-cp {:repo repo :page-name (str (:block/uuid page))}))]) (defn on-scroll diff --git a/src/main/frontend/components/lazy_editor.cljs b/src/main/frontend/components/lazy_editor.cljs index eaae15f86f..f9ff7680dc 100644 --- a/src/main/frontend/components/lazy_editor.cljs +++ b/src/main/frontend/components/lazy_editor.cljs @@ -32,10 +32,10 @@ (reset! loaded? true)))) state)} [config id attr code options] - (let [loaded? (rum/react loaded?) + (let [loaded?' (rum/react loaded?) theme (state/sub :ui/theme) code (or code "") code (string/replace-first code #"\n$" "")] ;; See-also: #3410 - (if loaded? + (if loaded?' (@lazy-editor config id attr code theme options) (ui/loading "CodeMirror")))) diff --git a/src/main/frontend/components/page.cljs b/src/main/frontend/components/page.cljs index 3ddae29826..544853733b 100644 --- a/src/main/frontend/components/page.cljs +++ b/src/main/frontend/components/page.cljs @@ -104,7 +104,7 @@ :sidebar? sidebar?}) (str (:block/uuid page-e) "-hiccup"))]))) -(declare page) +(declare page-cp) (if config/publishing? (rum/defc dummy-block @@ -245,7 +245,7 @@ (query/custom-query (component-block/wrap-query-components {:attr {:class "mt-10"} :editor-box editor/box - :page page}) + :page page-cp}) query)) (str repo "-custom-query-" (:query query))))])))) @@ -653,7 +653,7 @@ [state option] (page-inner (assoc option :*loading? (::loading? state)))) -(rum/defcs page +(rum/defcs page-cp [state option] (rum/with-key (page-aux option) diff --git a/src/main/frontend/components/plugins.cljs b/src/main/frontend/components/plugins.cljs index 7f1cf0b29b..3181792beb 100644 --- a/src/main/frontend/components/plugins.cljs +++ b/src/main/frontend/components/plugins.cljs @@ -802,8 +802,7 @@ (rum/local 1 ::current-page) [state] (let [*list-node-ref (rum/create-ref) - installed-plugins (state/sub [:plugin/installed-plugins]) - installed-plugins (vals installed-plugins) + installed-plugins' (vals (state/sub [:plugin/installed-plugins])) updating (state/sub :plugin/installing) develop-mode? (state/sub :ui/developer-mode?) selected-unpacked-pkg (state/sub :plugin/selected-unpacked-pkg) @@ -816,9 +815,9 @@ *cached-query-flag (::cached-query-flag state) *current-page (::current-page state) default-filter-by? (= :default @*filter-by) - theme-plugins (filter #(:theme %) installed-plugins) - normal-plugins (filter #(not (:theme %)) installed-plugins) - filtered-plugins (when (seq installed-plugins) + theme-plugins (filter #(:theme %) installed-plugins') + normal-plugins (filter #(not (:theme %)) installed-plugins') + filtered-plugins (when (seq installed-plugins') (if (= @*category :themes) theme-plugins normal-plugins)) total-nums [(count normal-plugins) (count theme-plugins)] filtered-plugins (if-not default-filter-by? diff --git a/src/main/frontend/components/property.cljs b/src/main/frontend/components/property.cljs index 15ae18e86f..0d09151f53 100644 --- a/src/main/frontend/components/property.cljs +++ b/src/main/frontend/components/property.cljs @@ -162,7 +162,7 @@ (db/entity (:db/id result)))) (notification/show! "This is an invalid property name. A property name cannot start with page reference characters '#' or '[['." :error))))) -(rum/defcs property-type < +(rum/defcs property-type-select < shortcut/disable-all-shortcuts [state property {:keys [*property *property-name *property-schema built-in? disabled? show-type-change-hints? block *show-new-property-config? @@ -343,12 +343,12 @@ :interactive true :disabled false} (svg/help-circle))] - (property-type property {:*property-name *property-name - :*property-schema *property-schema - :built-in? built-in? - :disabled? disabled? - :show-type-change-hints? true - :*show-class-select? *show-class-select?}))] + (property-type-select property {:*property-name *property-name + :*property-schema *property-schema + :built-in? built-in? + :disabled? disabled? + :show-type-change-hints? true + :*show-class-select? *show-class-select?}))] (when (db-property-type/property-type-allows-schema-attribute? (:type @*property-schema) :classes) (case (:type @*property-schema) @@ -581,14 +581,14 @@ (when (not= @*show-new-property-config? :adding-property) (cond @*show-new-property-config? - (property-type property (merge opts - {:*property *property - :*property-name *property-key - :*property-schema *property-schema - :default-open? true - :block block - :*show-new-property-config? *show-new-property-config? - :*show-class-select? *show-class-select?})) + (property-type-select property (merge opts + {:*property *property + :*property-name *property-key + :*property-schema *property-schema + :default-open? true + :block block + :*show-new-property-config? *show-new-property-config? + :*show-class-select? *show-class-select?})) (and property @*show-class-select?) (class-select property (assoc opts @@ -673,7 +673,7 @@ (util/stop e) (shui/popup-show! (.-target e) (fn [{:keys [id]}] - (property-v2/dropdown-editor id property + (property-v2/dropdown-editor id property block {:debug? (.-altKey e)})) {:content-props {:class "ls-property-dropdown-editor as-root"} diff --git a/src/main/frontend/components/property/closed_value.cljs b/src/main/frontend/components/property/closed_value.cljs index fbd00f6103..e4354c9244 100644 --- a/src/main/frontend/components/property/closed_value.cljs +++ b/src/main/frontend/components/property/closed_value.cljs @@ -200,15 +200,15 @@ dropdown-opts {:modal-class (util/hiccup->class "origin-top-right.absolute.left-0.rounded-md.shadow-lg")}] [:div.closed-values.flex.flex-col - (let [choices (doall - (keep (fn [value] - (when-let [block (db/sub-block (:db/id value))] - (let [id (:block/uuid block)] - {:id (str id) - :value id - :content (choice-item-content property block (merge opts dropdown-opts))}))) - values))] - (dnd/items choices + (let [choice-items (doall + (keep (fn [value] + (when-let [block (db/sub-block (:db/id value))] + (let [id (:block/uuid block)] + {:id (str id) + :value id + :content (choice-item-content property block (merge opts dropdown-opts))}))) + values))] + (dnd/items choice-items {:on-drag-end (fn [_ {:keys [active-id over-id direction]}] (let [move-down? (= direction :down) over (db/entity [:block/uuid (uuid over-id)]) diff --git a/src/main/frontend/components/property/value.cljs b/src/main/frontend/components/property/value.cljs index 8256e41c89..c6dffe22b9 100644 --- a/src/main/frontend/components/property/value.cljs +++ b/src/main/frontend/components/property/value.cljs @@ -767,7 +767,7 @@ editing? (or editing? (and (state/sub-editing? [container-id (:block/uuid block)]) (= (:db/id property) (:db/id (:property (state/get-editor-action-data)))))) - select-type? (select-type? property type) + select-type?' (select-type? property type) closed-values? (seq (:property/closed-values property)) select-opts {:on-chosen on-chosen} value (if (and (de/entity? value*) (= (:db/ident value*) :logseq.property/empty-placeholder)) @@ -775,7 +775,7 @@ value*)] (if (= :logseq.property/icon (:db/ident property)) (icon-row block) - (if (and select-type? + (if (and select-type?' (not (and (not closed-values?) (= type :date)))) (single-value-select block property value (fn [] (select-item property type value opts)) diff --git a/src/main/frontend/components/property_v2.cljs b/src/main/frontend/components/property_v2.cljs index 5b61d6dc74..f155faf73e 100644 --- a/src/main/frontend/components/property_v2.cljs +++ b/src/main/frontend/components/property_v2.cljs @@ -1,6 +1,7 @@ (ns frontend.components.property-v2 (:require [clojure.string :as string] [frontend.components.icon :as icon-component] + [frontend.config :as config] [frontend.handler.common.developer :as dev-common-handler] [frontend.handler.db-based.property :as db-property-handler] [frontend.db :as db] @@ -8,6 +9,7 @@ [frontend.handler.route :as route-handler] [frontend.state :as state] [frontend.util :as util] + [logseq.db :as ldb] [logseq.db.frontend.property :as db-property] [logseq.db.frontend.property.type :as db-property-type] [logseq.outliner.core :as outliner-core] @@ -59,11 +61,12 @@ :logseq.property/description description)))) (rum/defc name-edit-pane - [property {:keys [set-sub-open!]}] + [property {:keys [set-sub-open! disabled?]}] (let [*form-data (rum/use-ref {:icon (:logseq.property/icon property) :title (or (:block/title property) "") :description (or (db-property/property-value-content (:logseq.property/description property)) "")}) [form-data, set-form-data!] (rum/use-state (rum/deref *form-data)) + [saving?, set-saving!] (rum/use-state false) *el (rum/use-ref nil) *input-ref (rum/use-ref nil) title (util/trim-safe (:title form-data)) @@ -85,19 +88,20 @@ :popup-opts {:align "start"} :empty-label "?"}) (shui/input {:ref *input-ref :size "sm" :default-value title :placeholder "name" - :on-change (fn [^js e] (set-form-data! (assoc form-data :title (util/trim-safe (util/evalue e)))))})] + :disabled disabled? :on-change (fn [^js e] (set-form-data! (assoc form-data :title (util/trim-safe (util/evalue e)))))})] [:div.pt-2 (shui/textarea {:placeholder "description" :default-value description - :on-change (fn [^js e] (set-form-data! (assoc form-data :description (util/trim-safe (util/evalue e)))))})] + :disabled disabled? :on-change (fn [^js e] (set-form-data! (assoc form-data :description (util/trim-safe (util/evalue e)))))})] (let [dirty? (not= (rum/deref *form-data) form-data)] [:div.pt-2.flex.justify-end - (shui/button {:size "sm" :disabled (not dirty?) + (shui/button {:size "sm" :disabled (or saving? (not dirty?)) :variant (if dirty? :default :secondary) :on-click (fn [] (when (string/blank? title) (some-> (rum/deref *input-ref) (.focus)) (throw (js/Error. "property name is empty"))) + (set-saving! true) (-> [(db-property-handler/upsert-property! (:db/ident property) (:block/schema property) @@ -107,7 +111,8 @@ (set-property-description! property description))] (p/all) (p/then #(set-sub-open! false)) - (p/catch #(shui/toast! (str %) :error))))} + (p/catch #(shui/toast! (str %) :error)) + (p/finally #(set-saving! false))))} "Save")])])) (rum/defc base-edit-form @@ -197,7 +202,7 @@ (if (fn? desc) (desc) (if (boolean? toggle-checked?) [:span.scale-90.flex.items-center - (shui/switch {:id id2 :size "sm" :default-checked toggle-checked? + (shui/switch {:id id2 :size "sm" :checked toggle-checked? :disabled disabled? :on-click #(util/stop-propagation %) :on-checked-change (or on-toggle-checked-change identity)})] [:label [:span desc] @@ -244,9 +249,10 @@ :content (choice-item-content property block)}))) values))] [:div.ls-property-dropdown-editor.ls-property-choices-sub-pane - [:ul.choices-list - (for [c choices] - (:content c))] + (when (seq choices) + [:ul.choices-list + (for [c choices] + (:content c))]) ;; add choice (dropdown-editor-menuitem @@ -258,18 +264,26 @@ {:id :ls-base-edit-form :align "start"}))}})])) +(def position-labels + {:properties {:icon :layout-distribute-horizontal :title "Block properties"} + :block-left {:icon :layout-align-right :title "Beginning of the block"} + :block-right {:icon :layout-align-left :title "End of the block"} + :block-below {:icon :layout-align-top :title "Below of the block"}}) + (rum/defc ui-position-sub-pane - [_property {:keys [id set-sub-open!]}] + [property {:keys [id set-sub-open! _position]}] (let [handle-select! (fn [^js e] - (shui/toast! (.-innerText (.-target e))) - (set-sub-open! false) - (restore-root-highlight-item! id)) + (when-let [v (some-> (.-target e) (.-dataset) (.-value))] + (db-property-handler/upsert-property! + (:db/ident property) + (assoc (:block/schema property) :position (keyword v)) + {:property-name (:block/title property)}) + (set-sub-open! false) + (restore-root-highlight-item! id))) item-props {:on-select handle-select!}] [:div.ls-property-dropdown-editor.ls-property-ui-position-sub-pane - (dropdown-editor-menuitem {:icon :layout-distribute-horizontal :title "Block properties" :item-props item-props}) - (dropdown-editor-menuitem {:icon :layout-align-right :title "Beginning of the block" :item-props item-props}) - (dropdown-editor-menuitem {:icon :layout-align-left :title "End of the block" :item-props item-props}) - (dropdown-editor-menuitem {:icon :layout-align-top :title "Below of the block" :item-props item-props})])) + (for [[k v] position-labels] + (dropdown-editor-menuitem (assoc v :item-props (assoc item-props :data-value k))))])) (defn- property-type-label [property-type] @@ -278,22 +292,39 @@ "Text" ((comp string/capitalize name) property-type))) +(defn- handle-delete-property! + [block property & {:keys [class? class-schema?]}] + (let [class? (or class? (ldb/class? block)) + remove! #(let [repo (state/get-current-repo)] + (if (and class? class-schema?) + (db-property-handler/class-remove-property! (:db/id block) (:db/id property)) + (property-handler/remove-block-property! repo (:block/uuid block) (:db/ident property))))] + (if (and class? class-schema?) + (-> (shui/dialog-confirm! + ;; Only ask for confirmation on class schema properties + [:p (str "Are you sure you want to delete this property?")]) + (p/then remove!)) + (remove!)))) + (rum/defc dropdown-editor-impl "popup-id: dropdown popup id property: block entity" - [_popup-id property opts] + [_popup-id property owner-block opts] (let [title (:block/title property) - property-type (get-in property [:block/schema :type]) - property-type-label (some-> property-type (property-type-label)) + property-schema (:block/schema property) + property-type (get property-schema :type) + property-type-label' (some-> property-type (property-type-label)) enable-closed-values? (contains? db-property-type/closed-value-property-types (or property-type :default)) icon (:logseq.property/icon property) icon (when icon [:span.float-left.w-4.h-4.overflow-hidden.leading-4.relative - (icon-component/icon icon {:size 15})])] + (icon-component/icon icon {:size 15})]) + built-in? (ldb/built-in? property) + disabled? (or built-in? config/publishing?)] [:<> (dropdown-editor-menuitem {:icon :edit :title "Property name" :desc [:span.flex.items-center.gap-1 icon title] - :submenu-content (fn [ops] (name-edit-pane property ops))}) - (dropdown-editor-menuitem {:icon :hash :title "Property type" :desc (str property-type-label) :disabled? true}) + :submenu-content (fn [ops] (name-edit-pane property (assoc ops :disabled? disabled?)))}) + (dropdown-editor-menuitem {:icon :hash :title "Property type" :desc (str property-type-label') :disabled? true}) (when enable-closed-values? (empty? (:property/schema.classes property)) (let [values (:property/closed-values property)] @@ -301,15 +332,21 @@ :desc (when (seq values) (str (count values) " choices")) :submenu-content (fn [] (choices-sub-pane property))}))) - (dropdown-editor-menuitem {:icon :checks :title "Multiple values" :toggle-checked? true :disabled? true - :on-toggle-checked-change (fn [v] (shui/toast! (str title ": " v)))}) + (let [many? (db-property/many? property)] + (dropdown-editor-menuitem {:icon :checks :title "Multiple values" + :toggle-checked? many? :disabled? disabled? + :on-toggle-checked-change #(db-property-handler/upsert-property! (:db/ident property) + (assoc property-schema :cardinality (if many? :one :many)) {})})) (shui/dropdown-menu-separator) - (dropdown-editor-menuitem {:icon :float-left :title "UI position" :desc "beginning of the block" - :item-props {:class "ui__position-trigger-item"} - :submenu-content (fn [ops] (ui-position-sub-pane property ops))}) - (dropdown-editor-menuitem {:icon :eye-off :title "Hide by default" :toggle-checked? false - :on-toggle-checked-change (fn [v] (shui/toast! (str title ": " v)))}) + (let [position (:position property-schema)] + (dropdown-editor-menuitem {:icon :float-left :title "UI position" :desc (some->> position (get position-labels) (:title)) + :item-props {:class "ui__position-trigger-item"} + :submenu-content (fn [ops] (ui-position-sub-pane property (assoc ops :position position)))})) + + (dropdown-editor-menuitem {:icon :eye-off :title "Hide by default" :toggle-checked? (boolean (:hide? property-schema)) + :on-toggle-checked-change #(db-property-handler/upsert-property! (:db/ident property) + (assoc property-schema :hide? %) {})}) (shui/dropdown-menu-separator) (dropdown-editor-menuitem @@ -320,11 +357,13 @@ (route-handler/redirect-to-page! (:block/uuid property)))}}) (dropdown-editor-menuitem {:id :remove-property :icon :square-x :title "Remove property" :desc "" :disabled? false - :item-props {:class "opacity-60 focus:opacity-100 focus:!text-red-rx-08" + :item-props {:class "opacity-60 focus:opacity-100 focus:!text-red-rx-09" :on-select (fn [^js e] (util/stop e) - (-> (shui/dialog-confirm! "remove?") - (p/then (fn [] (shui/popup-hide-all!))) + (-> (shui/dialog-confirm! "Are you sure you want to delete property from this node?") + (p/then (fn [] + (handle-delete-property! owner-block property {:class-schema? false}) + (shui/popup-hide-all!))) (p/catch (fn [] (restore-root-highlight-item! :remove-property)))))}}) (when (:debug? opts) [:<> @@ -337,6 +376,6 @@ (shui/popup-hide!))}})])])) (rum/defc dropdown-editor < rum/reactive - [popup-id property opts] + [popup-id property owner-block opts] (let [property1 (db/sub-block (:db/id property))] - (dropdown-editor-impl popup-id property1 opts))) + (dropdown-editor-impl popup-id property1 owner-block opts))) diff --git a/src/main/frontend/components/query/builder.cljs b/src/main/frontend/components/query/builder.cljs index 6d2eb48935..92f6ed034c 100644 --- a/src/main/frontend/components/query/builder.cljs +++ b/src/main/frontend/components/query/builder.cljs @@ -449,16 +449,16 @@ "origin-top-right.absolute.left-0.mt-2.ml-2.rounded-md.shadow-lg.w-64")})) (rum/defc clause - [*tree *find loc clause] - (when (seq clause) + [*tree *find loc clauses] + (when (seq clauses) [:div.query-builder-clause - (let [kind (keyword (first clause))] + (let [kind (keyword (first clauses))] (if (query-builder/operators-set kind) [:div.operator-clause.flex.flex-row.items-center {:data-level (count loc)} [:div.clause-bracket "("] - (clauses-group *tree *find (conj loc 0) kind (rest clause)) + (clauses-group *tree *find (conj loc 0) kind (rest clauses)) [:div.clause-bracket ")"]] - (clause-inner *tree loc clause)))])) + (clause-inner *tree loc clauses)))])) (rum/defc clauses-group [*tree *find loc kind clauses] diff --git a/src/main/frontend/components/query_table.cljs b/src/main/frontend/components/query_table.cljs index b679428525..c6cba0d77e 100644 --- a/src/main/frontend/components/query_table.cljs +++ b/src/main/frontend/components/query_table.cljs @@ -219,11 +219,11 @@ (rum/defcs result-table-v1 < rum/reactive (rum/local false ::select?) (rum/local false ::mouse-down?) - [state config current-block sort-result sort-state columns {:keys [page?]} map-inline page-cp ->elem inline-text] + [state config current-block sort-result' sort-state columns {:keys [page?]} map-inline page-cp ->elem inline-text] (let [select? (get state ::select?) *mouse-down? (::mouse-down? state) clock-time-total (when-not page? - (->> (map #(get-in % [:block/properties :clock-time] 0) sort-result) + (->> (map #(get-in % [:block/properties :clock-time] 0) sort-result') (apply +))) property-separated-by-commas? (partial text/separated-by-commas? (state/get-config)) db-graph? (config/db-based-graph? (state/get-current-repo)) @@ -243,7 +243,7 @@ (name column)))] (sortable-title title column sort-state (:block/uuid current-block) {:db-graph? db-graph?})))]] [:tbody - (for [row sort-result] + (for [row sort-result'] (let [format (:block/format row)] [:tr.cursor (for [column columns] @@ -297,5 +297,5 @@ ;; Sort state needs to be in sync between final result and sortable title ;; as user needs to know if there result is sorted sort-state (get-sort-state current-block {:db-graph? db-graph?}) - sort-result (sort-result result' (assoc sort-state :page? page? :db-graph? db-graph?))] - (result-table-v1 config current-block sort-result sort-state columns options map-inline page-cp ->elem inline-text)))) + sort-result' (sort-result result' (assoc sort-state :page? page? :db-graph? db-graph?))] + (result-table-v1 config current-block sort-result' sort-state columns options map-inline page-cp ->elem inline-text)))) diff --git a/src/main/frontend/components/repo.cljs b/src/main/frontend/components/repo.cljs index fd736af731..48f737ffa9 100644 --- a/src/main/frontend/components/repo.cljs +++ b/src/main/frontend/components/repo.cljs @@ -144,7 +144,7 @@ (unlink-or-remote-fn!))))} (if only-cloud? "Remove (server)" "Unlink (local)")]))]]])) -(rum/defc repos < rum/reactive +(rum/defc repos-cp < rum/reactive [] (let [login? (boolean (state/sub :auth/id-token)) repos (state/sub [:me :repos]) diff --git a/src/main/frontend/components/right_sidebar.cljs b/src/main/frontend/components/right_sidebar.cljs index 394437a8ea..56e2674c94 100644 --- a/src/main/frontend/components/right_sidebar.cljs +++ b/src/main/frontend/components/right_sidebar.cljs @@ -37,22 +37,22 @@ (rum/defc block-cp < rum/reactive [repo idx block] (let [id (:block/uuid block)] - (page/page {:parameters {:path {:name (str id)}} + (page/page-cp {:parameters {:path {:name (str id)}} :sidebar? true :sidebar/idx idx :repo repo}))) (rum/defc page-cp < rum/reactive [repo page-name] - (page/page {:parameters {:path {:name page-name}} + (page/page-cp {:parameters {:path {:name page-name}} :sidebar? true :repo repo})) (rum/defc contents < rum/reactive db-mixins/query [] [:div.contents.flex-col.flex.ml-3 - (when-let [contents (db/get-page "contents")] - (page/contents-page contents))]) + (when-let [contents-page (db/get-page "contents")] + (page/contents-page contents-page))]) (rum/defc shortcut-settings [] diff --git a/src/main/frontend/components/rtc/indicator.cljs b/src/main/frontend/components/rtc/indicator.cljs index 5354aa53fa..38c135c35a 100644 --- a/src/main/frontend/components/rtc/indicator.cljs +++ b/src/main/frontend/components/rtc/indicator.cljs @@ -108,19 +108,19 @@ (let [detail-info (rum/react *detail-info) _ (state/sub :auth/id-token) online? (state/sub :network/online?) - uploading? (uploading? detail-info) - downloading? (downloading? detail-info) + uploading?' (uploading? detail-info) + downloading?' (downloading? detail-info) rtc-state (:rtc-state detail-info) unpushed-block-update-count (:pending-local-ops detail-info)] [:div.cp__rtc-sync [:div.cp__rtc-sync-indicator.flex.flex-row.items-center.gap-1 - (when downloading? + (when downloading?' (shui/button {:class "opacity-50" :variant :ghost :size :sm} "Downloading...")) - (when uploading? + (when uploading?' (shui/button {:class "opacity-50" :variant :ghost diff --git a/src/main/frontend/components/settings.cljs b/src/main/frontend/components/settings.cljs index 8e9362bdb9..32b2ab2839 100644 --- a/src/main/frontend/components/settings.cljs +++ b/src/main/frontend/components/settings.cljs @@ -29,7 +29,7 @@ [frontend.storage :as storage] [frontend.ui :as ui] [frontend.util :refer [classnames web-platform?] :as util] - [frontend.version :refer [version]] + [frontend.version :as fv] [goog.object :as gobj] [goog.string :as gstring] [promesa.core :as p] @@ -718,7 +718,7 @@ (let [preferred-language (state/sub [:preferred-language]) show-radix-themes? true] [:div.panel-wrap.is-general - (version-row t version) + (version-row t fv/version) (language-row t preferred-language) (theme-modes-row t) (when (and (util/electron?) (not util/mac?)) (native-titlebar-row t)) diff --git a/src/main/frontend/components/user/login.cljs b/src/main/frontend/components/user/login.cljs index 0a52d1013b..7394e30389 100644 --- a/src/main/frontend/components/user/login.cljs +++ b/src/main/frontend/components/user/login.cljs @@ -86,13 +86,13 @@ (LSAuthenticator {:termsLink "https://blog.logseq.com/terms/"} (fn [^js op] - (let [sign-out! (.-signOut op) + (let [sign-out!' (.-signOut op) ^js user-proxy (.-user op) ^js user (try (js/JSON.parse (js/JSON.stringify user-proxy)) (catch js/Error e (js/console.error "Error: Amplify user payload:" e))) user' (bean/->clj user)] - (user-pane sign-out! user')))))])) + (user-pane sign-out!' user')))))])) (rum/defcs modal-inner < shortcut/disable-all-shortcuts diff --git a/src/main/frontend/components/views.cljs b/src/main/frontend/components/views.cljs index 37505f3a45..8acfc4787e 100644 --- a/src/main/frontend/components/views.cljs +++ b/src/main/frontend/components/views.cljs @@ -734,8 +734,8 @@ (when (seq filters) [:div.filters-row.flex.flex-row.items-center.gap-4.flex-wrap.pb-2 (map-indexed - (fn [idx filter] - (let [[property-ident operator value] filter + (fn [idx filter'] + (let [[property-ident operator value] filter' property (if (= property-ident :block/title) {:db/ident property-ident :block/title "Name"} @@ -757,7 +757,7 @@ :variant "ghost" :size :sm :on-click (fn [_e] - (let [new-filters (vec (remove #{filter} filters))] + (let [new-filters (vec (remove #{filter'} filters))] (set-filters! new-filters)))} (ui/icon "x"))])) filters)]))) diff --git a/src/main/frontend/config.cljs b/src/main/frontend/config.cljs index 9251301397..d9e5c4221a 100644 --- a/src/main/frontend/config.cljs +++ b/src/main/frontend/config.cljs @@ -162,17 +162,17 @@ ([s] (ext-of-video? s true)) ([s html5?] (when-let [s (and (string? s) (util/get-file-ext s))] - (let [video-formats (cond-> video-formats - html5? (disj :mkv))] - (extname-of-supported? s [video-formats]))))) + (let [video-formats' (cond-> video-formats + html5? (disj :mkv))] + (extname-of-supported? s [video-formats']))))) (defn ext-of-audio? ([s] (ext-of-audio? s true)) ([s html5?] (when-let [s (and (string? s) (util/get-file-ext s))] - (let [audio-formats (cond-> audio-formats - html5? (disj :wma :ogg))] - (extname-of-supported? s [audio-formats]))))) + (let [audio-formats' (cond-> audio-formats + html5? (disj :wma :ogg))] + (extname-of-supported? s [audio-formats']))))) (defn ext-of-image? [s] diff --git a/src/main/frontend/db/model.cljs b/src/main/frontend/db/model.cljs index beecb573b5..2b82daa0e6 100644 --- a/src/main/frontend/db/model.cljs +++ b/src/main/frontend/db/model.cljs @@ -613,7 +613,6 @@ independent of format as format specific heading characters are stripped" (when repo (when (conn/get-db repo) (let [entity (db-utils/entity eid) - page? (ldb/page? entity) ids (page-alias-set repo eid)] (->> (react/q repo diff --git a/src/main/frontend/db/query_dsl.cljs b/src/main/frontend/db/query_dsl.cljs index 523e419eb7..ad116f6eeb 100644 --- a/src/main/frontend/db/query_dsl.cljs +++ b/src/main/frontend/db/query_dsl.cljs @@ -661,10 +661,10 @@ Some bindings in this fn: (query repo query-string {})) ([repo query-string query-opts] (when (and (string? query-string) (not= "\"\"" query-string)) - (let [{:keys [query rules sort-by blocks? sample]} (parse-query query-string)] - (when-let [query' (some-> query (query-wrapper {:blocks? blocks? - :block-attrs (when (config/db-based-graph? repo) - db-block-attrs)}))] + (let [{query* :query :keys [rules sort-by blocks? sample]} (parse-query query-string)] + (when-let [query' (some-> query* (query-wrapper {:blocks? blocks? + :block-attrs (when (config/db-based-graph? repo) + db-block-attrs)}))] (let [random-samples (if @sample (fn [col] (take @sample (shuffle col))) @@ -690,9 +690,9 @@ Some bindings in this fn: (when (seq (:query query-m)) (let [query-string (template/resolve-dynamic-template! (pr-str (:query query-m))) db-graph? (config/db-based-graph? repo) - {:keys [query sort-by blocks? rules]} (parse query-string {:db-graph? db-graph?})] - (when-let [query' (some-> query (query-wrapper {:blocks? blocks? - :block-attrs (when db-graph? db-block-attrs)}))] + {query* :query :keys [sort-by blocks? rules]} (parse query-string {:db-graph? db-graph?})] + (when-let [query' (some-> query* (query-wrapper {:blocks? blocks? + :block-attrs (when db-graph? db-block-attrs)}))] (query-react/react-query repo (merge query-m diff --git a/src/main/frontend/extensions/tldraw.cljs b/src/main/frontend/extensions/tldraw.cljs index edcc553f3f..a325a59ca2 100644 --- a/src/main/frontend/extensions/tldraw.cljs +++ b/src/main/frontend/extensions/tldraw.cljs @@ -36,7 +36,7 @@ (rum/defc page-cp [props] - (page/page {:page-name (gobj/get props "pageName") :whiteboard? true})) + (page/page-cp {:page-name (gobj/get props "pageName") :whiteboard? true})) (rum/defc block-cp [props] diff --git a/src/main/frontend/handler.cljs b/src/main/frontend/handler.cljs index cc6578b1fd..ffb2692bca 100644 --- a/src/main/frontend/handler.cljs +++ b/src/main/frontend/handler.cljs @@ -130,7 +130,7 @@ (defn- register-components-fns! [] - (state/set-page-blocks-cp! page/page) + (state/set-page-blocks-cp! page/page-cp) (state/set-component! :block/linked-references reference/block-linked-references) (state/set-component! :whiteboard/tldraw-preview whiteboard/tldraw-preview) (state/set-component! :block/single-block block/single-block-cp) diff --git a/src/main/frontend/handler/editor.cljs b/src/main/frontend/handler/editor.cljs index 2090e8e9f0..95f32a010f 100644 --- a/src/main/frontend/handler/editor.cljs +++ b/src/main/frontend/handler/editor.cljs @@ -3814,10 +3814,12 @@ ([] (escape-editing true)) ([select?] - (if select? - (when-let [node (some-> (state/get-input) (util/rec-get-node "ls-block"))] - (state/exit-editing-and-set-selected-blocks! [node])) - (state/clear-edit!)))) + (p/do! + (save-current-block!) + (if select? + (when-let [node (some-> (state/get-input) (util/rec-get-node "ls-block"))] + (state/exit-editing-and-set-selected-blocks! [node])) + (state/clear-edit!))))) (defn replace-block-reference-with-content-at-point [] diff --git a/src/main/frontend/handler/page.cljs b/src/main/frontend/handler/page.cljs index 4defbc3fd6..2cb1886894 100644 --- a/src/main/frontend/handler/page.cljs +++ b/src/main/frontend/handler/page.cljs @@ -395,8 +395,6 @@ chosen' (string/replace-first chosen (str (t :new-page) " ") "") ref-text (if (and (de/entity? chosen-result) (not (ldb/page? chosen-result))) (cond - (and db-based? (seq (:block/tags chosen-result))) - (page-ref/->page-ref (:block/title chosen-result)) db-based? (page-ref/->page-ref (:block/uuid chosen-result)) :else diff --git a/src/main/frontend/modules/shortcut/config.cljs b/src/main/frontend/modules/shortcut/config.cljs index 39a52fc7ed..e5b0d1b62c 100644 --- a/src/main/frontend/modules/shortcut/config.cljs +++ b/src/main/frontend/modules/shortcut/config.cljs @@ -32,7 +32,7 @@ (defn- search [mode] - (editor-handler/escape-editing false) + (editor-handler/escape-editing true) (if (state/get-search-mode) (js/setTimeout #(route-handler/go-to-search! mode) 128) (route-handler/go-to-search! mode))) @@ -454,7 +454,7 @@ :command/run {:binding "mod+shift+1" :inactive (not (util/electron?)) :fn #(do - (editor-handler/escape-editing) + (editor-handler/escape-editing true) (state/pub-event! [:command/run]))} :go/home {:binding "g h" diff --git a/src/main/frontend/publishing.cljs b/src/main/frontend/publishing.cljs index 431239bbb3..73c7ab3154 100644 --- a/src/main/frontend/publishing.cljs +++ b/src/main/frontend/publishing.cljs @@ -87,7 +87,7 @@ (defn- register-components-fns! [] - (state/set-page-blocks-cp! page-component/page) + (state/set-page-blocks-cp! page-component/page-cp) (state/set-component! :block/linked-references reference/block-linked-references) (state/set-component! :whiteboard/tldraw-preview whiteboard/tldraw-preview) (state/set-component! :block/single-block block/single-block-cp) diff --git a/src/main/frontend/routes.cljs b/src/main/frontend/routes.cljs index ef6e203c0d..7f9f31106f 100644 --- a/src/main/frontend/routes.cljs +++ b/src/main/frontend/routes.cljs @@ -27,7 +27,7 @@ ["/graphs" {:name :graphs - :view repo/repos}] + :view repo/repos-cp}] ["/whiteboards" {:name :whiteboards @@ -40,11 +40,11 @@ whiteboard? (ldb/whiteboard? (db/get-page page-name))] (if whiteboard? (whiteboard/whiteboard-route route-match) - (page/page route-match))))}] + (page/page-cp route-match))))}] ["/page/:name/block/:block-route-name" {:name :page-block - :view page/page}] + :view page/page-cp}] ["/all-pages" {:name :all-pages diff --git a/src/main/frontend/worker/search.cljs b/src/main/frontend/worker/search.cljs index 238a0c8966..1b561743c6 100644 --- a/src/main/frontend/worker/search.cljs +++ b/src/main/frontend/worker/search.cljs @@ -9,7 +9,8 @@ [frontend.common.search-fuzzy :as fuzzy] [logseq.db.sqlite.util :as sqlite-util] [logseq.common.util :as common-util] - [logseq.db :as ldb])) + [logseq.db :as ldb] + [clojure.set :as set])) ;; TODO: use sqlite for fuzzy search ;; maybe https://github.com/nalgeon/sqlean/blob/main/docs/fuzzy.md? @@ -412,7 +413,12 @@ DROP TRIGGER IF EXISTS blocks_au; ;; update block indice (when (or (seq blocks-to-add) (seq blocks-to-remove)) - (let [blocks-to-add (keep block->index blocks-to-add) - blocks-to-remove (set (map (comp str :block/uuid) blocks-to-remove))] + (let [blocks-to-add' (keep block->index blocks-to-add) + blocks-to-remove (set (concat (map (comp str :block/uuid) blocks-to-remove) + (->> + (set/difference + (set (map :block/uuid blocks-to-add)) + (set (map :block/uuid blocks-to-add'))) + (map str))))] {:blocks-to-remove-set blocks-to-remove - :blocks-to-add blocks-to-add})))) + :blocks-to-add blocks-to-add'})))) diff --git a/src/main/frontend/worker/undo_redo2.cljs b/src/main/frontend/worker/undo_redo2.cljs index 8f6ab9f0e0..56cf5fe731 100644 --- a/src/main/frontend/worker/undo_redo2.cljs +++ b/src/main/frontend/worker/undo_redo2.cljs @@ -333,7 +333,8 @@ (defmethod db-listener/listen-db-changes :gen-undo-ops [_ {:keys [repo tx-data tx-meta db-after db-before]}] (let [{:keys [outliner-op]} tx-meta] - (when (and outliner-op (not (false? (:gen-undo-ops? tx-meta)))) + (when (and outliner-op (not (false? (:gen-undo-ops? tx-meta))) + (not (:create-today-journal? tx-meta))) (let [editor-info (:editor-info tx-meta) all-ids (distinct (map :e tx-data)) retracted-ids (set diff --git a/src/main/logseq/sdk/experiments.cljs b/src/main/logseq/sdk/experiments.cljs index d7e8c26271..c11ff815d3 100644 --- a/src/main/logseq/sdk/experiments.cljs +++ b/src/main/logseq/sdk/experiments.cljs @@ -13,7 +13,7 @@ unlinked-refs? (some-> props1 :include-unlinked-refs) config (some-> props1 (dissoc :page :include-linked-refs :include-unlinked-refs))] (when-let [_entity (page/get-page-entity page-name)] - (page/page + (page/page-cp {:repo (state/get-current-repo) :page-name page-name :preview? false diff --git a/src/resources/tutorials/.gitignore b/src/resources/tutorials/.gitignore new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/resources/tutorials/dummy-notes-de.md b/src/resources/tutorials/dummy-notes-de.md deleted file mode 100644 index 3df18117ab..0000000000 --- a/src/resources/tutorials/dummy-notes-de.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Wie macht man Notizen? ---- - -- Hallo, ich bin ein Block! -:PROPERTIES: -:id: 5f713e91-8a3c-4b04-a33a-c39482428e2d -:END: -- Und ich? Ich bin auch ein Block! -:PROPERTIES: -:id: 5f713ea8-8cba-403d-ac00-9964b1ec7190 -:END: - - Man kann uns auch einrücken (mit TAB)! - - Wir sind jetzt unserem Elternblock untergeordnet. diff --git a/src/resources/tutorials/dummy-notes-en.md b/src/resources/tutorials/dummy-notes-en.md deleted file mode 100644 index a586632b46..0000000000 --- a/src/resources/tutorials/dummy-notes-en.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: How to take dummy notes? ---- - -- Hello, I'm a block! -:PROPERTIES: -:id: 5f713e91-8a3c-4b04-a33a-c39482428e2d -:END: - - I'm a child block! - - I'm another child block! -- Hey, I'm another block! -:PROPERTIES: -:id: 5f713ea8-8cba-403d-ac00-9964b1ec7190 -:END: diff --git a/src/resources/tutorials/dummy-notes-es.md b/src/resources/tutorials/dummy-notes-es.md deleted file mode 100644 index a7414a0936..0000000000 --- a/src/resources/tutorials/dummy-notes-es.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: ¿Cómo tomar notas ficticias? ---- - -- Hola, ¡yo soy un bloque! -:PROPERTIES: -:id: 5f713e91-8a3c-4b04-a33a-c39482428e2d -:END: - - ¡Yo soy un bloque hijo! - - ¡Yo soy otro bloque hijo! -- ¡Oye!, ¡yo soy otro bloque! -:PROPERTIES: -:id: 5f713ea8-8cba-403d-ac00-9964b1ec7190 -:END: diff --git a/src/resources/tutorials/dummy-notes-fa.md b/src/resources/tutorials/dummy-notes-fa.md deleted file mode 100644 index bcdebae424..0000000000 --- a/src/resources/tutorials/dummy-notes-fa.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: چگونه یادداشت‌برداری کنیم؟ ---- - -- درود. من یک بلوک هستم! -:PROPERTIES: -:id: 5f713e91-8a3c-4b04-a33a-c39482428e2d -:END: - - من یک زیربلوک هستم! - - من هم یک زیر بلوک دیگه هستم! -- آهای! من هم یک بلوک هستم! -:PROPERTIES: -:id: 5f713ea8-8cba-403d-ac00-9964b1ec7190 -:END: diff --git a/src/resources/tutorials/dummy-notes-fr.md b/src/resources/tutorials/dummy-notes-fr.md deleted file mode 100644 index 162fd68cbd..0000000000 --- a/src/resources/tutorials/dummy-notes-fr.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Comment prendre des notes factices ? ---- - -- Bonjour, je suis un bloc ! -:PROPERTIES: -:id: 5f713e91-8a3c-4b04-a33a-c39482428e2d -:END: - - Je suis un bloc enfant ! - - Je suis un autre bloc enfant ! -- Coucou, je suis un autre bloc ! -:PROPERTIES: -:id: 5f713ea8-8cba-403d-ac00-9964b1ec7190 -:END: diff --git a/src/resources/tutorials/dummy-notes-id.md b/src/resources/tutorials/dummy-notes-id.md deleted file mode 100644 index 122230fee6..0000000000 --- a/src/resources/tutorials/dummy-notes-id.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Bagaimana cara mengambil catatan dummy? ---- - -- Halo, saya blok! -:PROPERTIES: -:id: 5f713e91-8a3c-4b04-a33a-c39482428e2d -:END: - - Aku adalah blok anak! - - Aku blok anak lain! -- Hei, saya blok lain! -:PROPERTIES: -:id: 5f713ea8-8cba-403d-ac00-9964b1ec7190 -:END: diff --git a/src/resources/tutorials/dummy-notes-it.md b/src/resources/tutorials/dummy-notes-it.md deleted file mode 100644 index 3d0a9ff50b..0000000000 --- a/src/resources/tutorials/dummy-notes-it.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Come prendere appunti fittizi? ---- - -- Ciao, io sono un blocco! -:PROPERTIES: -:id: 5f713e91-8a3c-4b04-a33a-c39482428e2d -:END: - - Io sono un blocco figlio! - - Io sono un altro blocco figlio! -- Hey, io sono un altro blocco! -:PROPERTIES: -:id: 5f713ea8-8cba-403d-ac00-9964b1ec7190 -:END: \ No newline at end of file diff --git a/src/resources/tutorials/dummy-notes-ja.md b/src/resources/tutorials/dummy-notes-ja.md deleted file mode 100644 index dc59fd6c0b..0000000000 --- a/src/resources/tutorials/dummy-notes-ja.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: 見本のノートの作り方 ---- - -- これはブロックです! -:PROPERTIES: -:id: 5f713e91-8a3c-4b04-a33a-c39482428e2d -:END: - - これは子ブロックです! - - これは別の子ブロックです! -- これは別のブロックです! -:PROPERTIES: -:id: 5f713ea8-8cba-403d-ac00-9964b1ec7190 -:END: diff --git a/src/resources/tutorials/dummy-notes-ko.md b/src/resources/tutorials/dummy-notes-ko.md deleted file mode 100644 index df3ce1746d..0000000000 --- a/src/resources/tutorials/dummy-notes-ko.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: 예시 노트 작성하는 방법 ---- - -- 안녕하세요, 이것은 블록입니다! -:PROPERTIES: -:id: 5f713e91-8a3c-4b04-a33a-c39482428e2d -:END: - - 이것은 하위 블록입니다. - - 이것은 다른 하위 블록입니다! -- 이것은 또다른 블록입니다! -:PROPERTIES: -:id: 5f713ea8-8cba-403d-ac00-9964b1ec7190 -:END: diff --git a/src/resources/tutorials/dummy-notes-no.md b/src/resources/tutorials/dummy-notes-no.md deleted file mode 100644 index 452d18812a..0000000000 --- a/src/resources/tutorials/dummy-notes-no.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Hvordan ta dummy notater? ---- - -- Hallo, jeg er en blokk! -:PROPERTIES: -:id: 5f713e91-8a3c-4b04-a33a-c39482428e2d -:END: - - Jeg er en underblokk! - - Jeg er enda en underblokk! -- Hei, jeg er enda en blokk! -:PROPERTIES: -:id: 5f713ea8-8cba-403d-ac00-9964b1ec7190 -:END: diff --git a/src/resources/tutorials/dummy-notes-pl.md b/src/resources/tutorials/dummy-notes-pl.md deleted file mode 100644 index e0ffa30ff2..0000000000 --- a/src/resources/tutorials/dummy-notes-pl.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Jak pisać zwykłe notatki? ---- - -- Cześć, Jestem blokiem! -:PROPERTIES: -:id: 5f713e91-8a3c-4b04-a33a-c39482428e2d -:END: - - Jestem blokiem - dzieckiem! - - Jestem innym blokiem - dzieckiem! -- A ja jestem kolejnym blokiem! -:PROPERTIES: -:id: 5f713ea8-8cba-403d-ac00-9964b1ec7190 -:END: diff --git a/src/resources/tutorials/dummy-notes-pt-br.md b/src/resources/tutorials/dummy-notes-pt-br.md deleted file mode 100644 index 5226f4ce1b..0000000000 --- a/src/resources/tutorials/dummy-notes-pt-br.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Como fazer anotações fictícias? ---- - -- Olá, sou um bloco! -:PROPERTIES: -:id: 5f713e91-8a3c-4b04-a33a-c39482428e2d -:END: - - Eu sou um bloco filho! - - Eu sou outro bloco filho! -- Ei, eu sou outro bloco! -:PROPERTIES: -:id: 5f713ea8-8cba-403d-ac00-9964b1ec7190 -:END: diff --git a/src/resources/tutorials/dummy-notes-ru.md b/src/resources/tutorials/dummy-notes-ru.md deleted file mode 100644 index 5eec82758d..0000000000 --- a/src/resources/tutorials/dummy-notes-ru.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Как создать образец заметки? ---- - -- Привет, я блок! -:PROPERTIES: -:id: 5f713e91-8a3c-4b04-a33a-c39482428e2d -:END: - - Я дочерний блок! - - Я следующий дочерний блок! -- Эй, а я другой блок! -:PROPERTIES: -:id: 5f713ea8-8cba-403d-ac00-9964b1ec7190 -:END: diff --git a/src/resources/tutorials/dummy-notes-sk.md b/src/resources/tutorials/dummy-notes-sk.md deleted file mode 100644 index a667e7db6b..0000000000 --- a/src/resources/tutorials/dummy-notes-sk.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Ako vytvoriť poznámky? ---- - -- Ahoj, som blok! - :PROPERTIES: - :id: 5f713e91-8a3c-4b04-a33a-c39482428e2d - :END: - - Ja som podradený blok! - - Ja som ďalší podradený blok! -- Ja som ďalší blok! - :PROPERTIES: - :id: 5f713ea8-8cba-403d-ac00-9964b1ec7190 - :END: \ No newline at end of file diff --git a/src/resources/tutorials/dummy-notes-tr.md b/src/resources/tutorials/dummy-notes-tr.md deleted file mode 100644 index fa63000ca3..0000000000 --- a/src/resources/tutorials/dummy-notes-tr.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Nasıl not alınır? ---- - -- Merhaba, ben bir bloğum! -:PROPERTIES: -:id: 5f713e91-8a3c-4b04-a33a-c39482428e2d -:END: - - Ben bir alt bloğum! - - Ben başka bir alt bloğum! -- Hey, Ben başka bir bloğum! -:PROPERTIES: -:id: 5f713ea8-8cba-403d-ac00-9964b1ec7190 -:END: diff --git a/src/resources/tutorials/dummy-notes-uk.md b/src/resources/tutorials/dummy-notes-uk.md deleted file mode 100644 index 2b06d5b9fe..0000000000 --- a/src/resources/tutorials/dummy-notes-uk.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Як робити фіктивні нотатки? ---- - -- Привіт, я блок! -:PROPERTIES: -:id: 5f713e91-8a3c-4b04-a33a-c39482428e2d -:END: - - Я дочірній блок! - - Я інший дочірній блок! -- Гей, я інший блок! -:PROPERTIES: -:id: 5f713ea8-8cba-403d-ac00-9964b1ec7190 -:END: diff --git a/src/resources/tutorials/tutorial-de.md b/src/resources/tutorials/tutorial-de.md deleted file mode 100644 index 6660c1bd63..0000000000 --- a/src/resources/tutorials/tutorial-de.md +++ /dev/null @@ -1,34 +0,0 @@ -## Hi, Willkommen bei Logseq ! - -Logseq ist eine privacy-first, [Open-Source](https://github.com/logseq/logseq)-Plattform für Wissen und Zusammenarbeit. -Das hier ist ein 3-Minuten-Tutorial über die Verwendung von Logseq. Los geht's! -- --- -- Das Wichtigste: - - Ein Stichpunkt heisst in Logseq **Block**. - - Klicken, um einen Block zu bearbeiten. - - `Enter`, um einen neuen Block zu erstellen. - - `Umschalt+Enter`, - um eine neue Zeile im gleichen Block zu beginnen. -- --- -- Erstellen wir eine Seite namens [[Wie macht man Notizen?]]. Klicken Sie darauf, um zu dieser Seite zu gelangen. Wenn Sie dabei `Umschalt` gedrückt halten, wird die Seite rechts neben diesem Text angezeigt. Jetzt sollten Sie _Verknüpfte_ und _Nicht verknüpfte Referenzen_ sehen. -- --- -- Verknüpfen wir einige Blöcke aus [[Wie macht man Notizen?]]. Auch hier kann man den Block mit `Umschalt+Klicken` in der rechten Seitenleiste zeigen. Bearbeiten Sie den Text dort! Die Änderungen gehen direkt auf die verknüpfte Seite. - - ((5f713e91-8a3c-4b04-a33a-c39482428e2d)) : Das ist eine Blockreferenz. - - ((5f713ea8-8cba-403d-ac00-9964b1ec7190)) : Hier ist noch eine. -- --- -- Gibt es so etwas wie Tags? - - Natürlich, hier ist ein #dummy Tag. -- --- -- Was ist mit Aufgaben? Gibt es TODO/DOING/DONE? Und ein System für Prioritäten? - - Ja, geben Sie `/` ein und wählen Sie ihr bevorzugtes TODO-Schlagwort. Setzen Sie mit `/A`, `/B`, `/C` Prioritäten. - - NOW [#A] Ein Crashkurs über "Wie macht man Notizen?" - - LATER [#A] Ein Video von [:a {:href "https://twitter.com/shuomi3" :target "_blank"} "@shuomi3"] schauen, wie man mit Logseq Notizen macht und sich organisiert: - {{youtube https://www.youtube.com/watch?v=BhHfF0P9A80&ab_channel=ShuOmi}} - - DONE Eine Seite erstellen - - CANCELED [#C] Eine Seite mit über 1000 Blöcken schreiben -- --- -- Das war's! Erstellen Sie mehr Stichpunkte oder öffnen Sie einen lokalen Ordner, um Notizen zu importieren! - --- - #+BEGIN_TIP - Logseq läuft auf PCs genauso wie auf Smartphones. Sie können die App von [https://logseq.com/downloads](https://logseq.com/downloads) auf Ihre anderen Geräte holen. - #+END_TIP diff --git a/src/resources/tutorials/tutorial-en.md b/src/resources/tutorials/tutorial-en.md deleted file mode 100644 index ddf367a9ef..0000000000 --- a/src/resources/tutorials/tutorial-en.md +++ /dev/null @@ -1,27 +0,0 @@ -## Hi, welcome to Logseq! -- Logseq is a _privacy-first_, [open-source](https://github.com/logseq/logseq) platform for _knowledge_ management and collaboration. -- This is a 3 minute tutorial on how to use Logseq. Let's get started! -- Here are some tips that might be useful. -#+BEGIN_TIP -Click to edit any block. -Type `Enter` to create a new block. -Type `Shift+Enter` to create a new line. -Type `/` to show all the commands. -#+END_TIP -- 1. Let's create a page called [[How to take dummy notes?]]. You can click it to go to that page, or you can `Shift+Click` to open it in the right sidebar! Now you should see both _Linked References_ and _Unlinked References_. -- 2. Let's reference some blocks on [[How to take dummy notes?]], you can `Shift+Click` any block reference to open it in the right sidebar. Try making -some changes on the right sidebar, those referenced blocks will be changed too! - - ((5f713e91-8a3c-4b04-a33a-c39482428e2d)) : This is a block reference. - - ((5f713ea8-8cba-403d-ac00-9964b1ec7190)) : This is another block reference. -- 3. Do you support tags? - - Of course, this is a #dummy tag. -- 4. Do you support tasks like todo/doing/done and priorities? - - Yes, type `/` and pick your favorite todo keyword or priority (A/B/C). - - NOW [#A] A dummy tutorial on "How to take dummy notes?" - - LATER [#A] Check out this awesome video by [:a {:href "https://twitter.com/shuomi3" :target "_blank"} "@shuomi3"] on how to use Logseq to take notes and organize your life! - {{youtube https://www.youtube.com/watch?v=BhHfF0P9A80&ab_channel=ShuOmi}} - - - DONE Create a page - - CANCELED [#C] Write a page with more than 1000 blocks -- That's it! You can create more bullets or open a local directory to import some notes now! -- You can also download our desktop app at https://github.com/logseq/logseq/releases diff --git a/src/resources/tutorials/tutorial-es.md b/src/resources/tutorials/tutorial-es.md deleted file mode 100644 index 6de2c50fa8..0000000000 --- a/src/resources/tutorials/tutorial-es.md +++ /dev/null @@ -1,26 +0,0 @@ -## Hola, ¡bienvenido a Logseq! -- Logseq es una plataforma _privacidad-primero_, [open-source](https://github.com/logseq/logseq) para la gestión del _conocimiento_ y colaboración. -- Este es un tutorial de 3 minutos acerca de cómo usar Logseq. ¡Empecemos! -- Éstos son algunos consejos que pueden ser útiles. -#+BEGIN_TIP -Presione clic para editar un bloque. -Presione `Enter` para crear un nuevo bloque. -Presione `Shift+Enter` para crear una nueva línea. -Escriba `/` para mostrar todos los comandos. -#+END_TIP -- 1. Creamos una página llamada [[¿Cómo tomar notas ficticias?]]. Puede presionar clic en el enlace para ir a la página, o puede presionar `Shift+Clic` para abrirla en la barra lateral derecha. Ahora debería ver tanto _Referencias Enlazadas_ como _Referencias sin enlazar_. -- 2. Referenciemos algunos bloques de [[¿Cómo tomar notas ficticias?]], puede presionar `Shift+Click` sobre cualquier referencia de bloque para abrirla en la barra lateral derecha. Pruebe a hacer algunos cambios en la barra lateral derecha, ¡los bloques referenciados cambiarán también! - - ((5f713e91-8a3c-4b04-a33a-c39482428e2d)) : Ésta es una referencia de bloque. - - ((5f713ea8-8cba-403d-ac00-9964b1ec7190)) : Ésta es otra referencia de bloque. -- 3. Logseq soporta etiquetas? - - Por supuesto, esta es una etiqueta #ficticia. -- 4. Logseq soporta tareas como porhacer/haciendo/terminado y prioridades? - - Sí, escriba `/` y seleccione su palabra clave favorita (TODO, DOING, DONE, WAITING, CANCELED, NOW, LATER) o prioridad (A/B/C). - - NOW [#A] Un tutorial ficticio acerca de "¿Cómo tomar notas ficticias?" - - LATER [#A] Revisar este asombroso video de [:a {:href "https://twitter.com/shuomi3" :target "_blank"} "@shuomi3"] acerca de cómo usar Logseq para tomar notas y organizar su vida! - {{youtube https://www.youtube.com/watch?v=BhHfF0P9A80&ab_channel=ShuOmi}} - - - DONE Crear una página - - CANCELED [#C] Escribir una página con más de 1000 bloques -- ¡Eso es todo! ¡Ahora puede crear más viñetas o abrir un directorio locar para importar algunas notas! -- Puede descargar nuestra aplicación de escritorio de https://github.com/logseq/logseq/releases diff --git a/src/resources/tutorials/tutorial-fa.md b/src/resources/tutorials/tutorial-fa.md deleted file mode 100644 index 069fec8651..0000000000 --- a/src/resources/tutorials/tutorial-fa.md +++ /dev/null @@ -1,25 +0,0 @@ -## درود. به لاگ‌سیک خوش آمدید! -- لاگ‌سیک یک سکوی [آزاد](https://github.com/logseq/logseq) برای مدیریت _دانش_ و همکاری است که _حریم شخصی_ را در اولویت اول قرار می‌دهد. -- این مطلب، یک آموزش ۳ دقیقه‌ای برای شروع کار با لاگ‌سیک است. بگذارید شروع کنیم! -- بگذارید سه نکته که می‌توانند مفید باشند را ببینیم. -#+BEGIN_TIP -برای ویرایش هر بلوک، روی آن کلید کنید. -با فشردن دکمه `Enter‍` یک بلوک جدید بسازید. -با فشردن `Shift+Enter` یک خط جدید بسازید. -با فشردن `/` همه دستورات را ببینید. -#+END_TIP -- 1. بیایید برگه‌ای به نام [[چگونه یادداشت‌برداری کنیم؟]] بسازیم. می‌توانید روی آن کلید کنید تا به برگه مربوطه بروید و یا می‌توانید با فشردن `Shift+Click`، آن را در نوار کناری باز کنید! حالا باید بتوانید هم _ارجاعات پیوندی_ و هم _ارجاعات غیر پیوندی_ را ببینید. -- 2. بیایید به چند بلوک در [[چگونه یادداشت‌برداری کنیم؟]] ارجاع دهیم. می‌توانید با `Shift-Click` روی هر ارجاع، آن را در نوار کناری باز کنید. سعی کنید تغییراتی در نوار کناری بدهید. می‌بینید که تغییرات در بلوک‌های ارجاع داده شده نیز تغییر مي‌کنند! - - ((5f713e91-8a3c-4b04-a33a-c39482428e2d)) : این یک ارجاع بوک است. - - ((5f713ea8-8cba-403d-ac00-9964b1ec7190)) : این یک ارجاع بلوک دیگر است. -- 3. آیا از برچسب‌ها پشتیبانی مي‌کنید؟ - - قطعا! این یک برچسب #dummy است. -- 4. آیا از کلمات کلیدی تعریف وظایف مثل todo/doing/done و اولویت‌بندی‌ها پیشتیبانی می‌کنید؟ - - بله. `/` را بنویسید و کلیدواژه وظایف یا اولویت‌بندی (A/B/C) مورد نظرتان را انتخاب کنید. - - NOW [#A] آموزشی درباره «چگونه یادداشت برداری کنیم؟» بسازم. - - LATER [#A] این ویدئوی فوق‌العاده، ساختهٔ [:a {:href "https://twitter.com/shuomi3" :target "_blank"} "@shuomi3"] درباره این که چگونه از لاگ‌سیک برای یادداشت برداری و سازمان‌دهی زندگی را ببینم. - {{youtube https://www.youtube.com/watch?v=BhHfF0P9A80&ab_channel=ShuOmi}} - - DONE ساخت یک برگه - - CANCELED [#C] نوشتن یک برگه با بیش از هزار بلوک -- همین و بس! می‌توانید مواردی دیگری را اضافه کنید و یا پوشه محلی را برای وارد کردن تعدادی یادداشت جدید باز کنید! -- همچنین می‌توانید برنامهٔ میزکار را از این نشانی دریافت کنید: https://github.com/logseq/logseq/releases diff --git a/src/resources/tutorials/tutorial-fr.md b/src/resources/tutorials/tutorial-fr.md deleted file mode 100644 index 17c1d31c65..0000000000 --- a/src/resources/tutorials/tutorial-fr.md +++ /dev/null @@ -1,26 +0,0 @@ -## Salut, bienvenue dans Logseq! -- Logseq est une plateforme [open-source](https://github.com/logseq/logseq) de gestion de _connaissance_ orientée _vie privée_. -- Voici un tutoriel de 3 minutes pour apprendre à utiliser Logseq. Commençons ! -- Voici quelques astuces pratiques : -#+BEGIN_TIP -Cliquez pour modifier ce bloc. -Appuyez sur `Entrée` pour créer un nouveau bloc. -Appuyez sur `Maj+Entrée` pour créer une nouvelle ligne. -Tapez `/` pour afficher toutes les commandes. -#+END_TIP -- 1. Créons une page appelée [[Comment prendre des notes factices ?]]. Vous pouvez cliquer pour aller sur cette page, ou vous pouvez faire `Maj+clic` pour l'ouvrir dans la barre latérale droite. Maintenant, vous devriez voir les _Références liées_ et les _Références non-liées_. -- 2. Maintenant, référençons quelques blocs sur [[Comment prendre des notes factices ?]], vous pouvez faire `Maj+clic` sur la référence de n'importe quel bloc pour l'ouvrir dans la barre latérale droite. Essayez de faire quelques changements depuis la barre latérale droite, les blocs référencés devraient changer également ! - - ((5f713e91-8a3c-4b04-a33a-c39482428e2d)) : Il s'agit d'une référence de bloc. - - ((5f713ea8-8cba-403d-ac00-9964b1ec7190)) : Voici une autre référence de bloc. -- 3. Est-ce que vous gérez les tags ? - - Bien entendu, voici un tag #factice. -- 4. Est-ce que vous gérez les tâches du style todo/doing/done et les priorités ? - - Oui, tapez `/` et choisissez votre terme préféré pour les "todo" ou une priorité (A/B/C). - - NOW [#A] Un tutoriel sur "Comment prendre des notes factices ?" - - LATER [#A] Regarder cette formidable vidéo par [:a {:href "https://twitter.com/shuomi3" :target "_blank"} "@shuomi3"] sur l'utilisation de Logseq pour la prise de notes et l'organisation de sa vie ! - {{youtube https://www.youtube.com/watch?v=BhHfF0P9A80&ab_channel=ShuOmi}} - - - DONE Créer une page - - CANCELED [#C] Écrire une page de plus 100 blocs -- C'est tout ! Vous pouvez créer plus de puces, ou ouvrir un dossier local pour importer vos premières notes ! -- Vous pouvez également télécharger notre application pour ordinateur depuis : https://github.com/logseq/logseq/releases diff --git a/src/resources/tutorials/tutorial-id.md b/src/resources/tutorials/tutorial-id.md deleted file mode 100644 index 5ef7e68dab..0000000000 --- a/src/resources/tutorials/tutorial-id.md +++ /dev/null @@ -1,25 +0,0 @@ -## Hai, selamat datang di Logseq! -- Logseq adalah platform yang _mengedepankan privasi_, [sumber-terbuka](https://github.com/logseq/logseq) untuk manajemen pengetahuan dan kolaborasi. -- Ini adalah tutorial 3 menit tentang cara menggunakan Logseq. Mari kita mulai! -- Berikut beberapa tips yang mungkin berguna: -#+BEGIN_TIP -Klik untuk mengedit blok apa pun. -Ketik `Enter` untuk membuat blok baru. -Ketik `Shift+Enter` untuk membuat baris baru. -Ketik `/` untuk menampilkan semua perintah. -#+END_TIP -- 1. Mari kita buat halaman bernama [[Bagaimana cara mengambil catatan dummy?]]. Anda dapat mengkliknya untuk pergi ke halaman tersebut, atau Anda dapat `Shift+Klik` untuk membukanya di panel samping kanan! Sekarang Anda seharusnya dapat melihat _Referensi Tertaut_ dan _Referensi tak tertaut_. -- 2. Mari kita merujuk beberapa blok di [[Bagaimana cara mengambil catatan dummy?]]. Anda dapat `Shift+Klik` pada referensi blok apa pun untuk membukanya di panel samping kanan. Cobalah membuat beberapa perubahan di panel samping kanan; blok yang dirujuk tersebut juga akan berubah! - - ((5f713e91-8a3c-4b04-a33a-c39482428e2d)): Ini adalah referensi blok. - - ((5f713ea8-8cba-403d-ac00-9964b1ec7190)): Ini adalah referensi blok lainnya. -- 3. Apakah Anda mendukung tag? - - Tentu, ini adalah tag #dummy. -- 4. Apakah Anda mendukung tugas seperti todo/doing/done dan prioritas? - - Ya, ketik `/` dan pilih kata kunci todo atau prioritas (A/B/C) favorit Anda. - - SEKARANG [#A] Tutorial dummy tentang "Cara mengambil catatan dummy?" - - KEMUDIAN [#A] Cek video keren ini oleh [@shuomi3](https://twitter.com/shuomi3) tentang cara menggunakan Logseq untuk membuat catatan dan mengatur hidup Anda! - - ![Video YouTube](https://www.youtube.com/watch?v=BhHfF0P9A80&ab_channel=ShuOmi) - - SELESAI Membuat halaman - - DIBATALKAN [#C] Menulis halaman dengan lebih dari 1000 blok -- Itu dia! Anda dapat membuat lebih banyak poin atau membuka direktori lokal untuk mengimpor beberapa catatan sekarang! -- Anda juga dapat mengunduh aplikasi desktop kami [di sini](https://github.com/logseq/logseq/releases). \ No newline at end of file diff --git a/src/resources/tutorials/tutorial-it.md b/src/resources/tutorials/tutorial-it.md deleted file mode 100644 index bfe2f04667..0000000000 --- a/src/resources/tutorials/tutorial-it.md +++ /dev/null @@ -1,27 +0,0 @@ -## Ciao, benvenuto su Logseq -- Logseq è una piattaforma con la _privacy come priorità_, [open-source](https://github.com/logseq/logseq) per la gestione della _conoscenza_ e la collaborazione. -- Questo è un tutorial di 3 minuti su come utilizzare Logseq. Iniziamo! -- Ecco alcuni suggerimenti che potrebbero essere utili. -#+BEGIN_TIP -Fare clic per modificare qualsiasi blocco. -Digita "Invio" per creare un nuovo blocco. -Digita `Maiusc+Invio` per creare una nuova riga. -Digita `/` per mostrare tutti i comandi. -#+END_TIP -- 1. Creiamo una pagina chiamata [[Come prendere appunti fittizi?]]. Puoi fare clic su di esso per andare a quella pagina, oppure puoi "Maiusc + clic" per aprirlo nella barra laterale destra! Ora dovresti vedere sia _Riferimenti collegati_ che _Riferimenti non collegati_. -- 2. Facciamo riferimento ad alcuni blocchi su [[Come prendere appunti fittizi?]], puoi fare `Maiusc+Clic` su qualsiasi riferimento di blocco per aprirlo nella barra laterale destra. Prova a fare -alcune modifiche sulla barra laterale destra, verranno modificati anche quei blocchi di riferimento! - - ((5f713e91-8a3c-4b04-a33a-c39482428e2d)) : Questo è un riferimento ad un blocco. - - ((5f713ea8-8cba-403d-ac00-9964b1ec7190)) : Questo è un altro riferimento ad un blocco. -- 3. Supportate i tag? - - Naturalmente, questo è un tag #falso. -- 4. Supportate le azioni come todo/doing/done e le priorità? - - Si, digita `/` e scegli la tua parola chiave todo o la tua priorità preferita (A/B/C). - - NOW [#A] Un tutorial fittizio su "Come prendere appunti fittizi?" - - LATER [#A] Guarda questo fantastico video di [:a {:href "https://twitter.com/shuomi3" :target "_blank"} "@shuomi3"] su come usare Logseq per prendere appunti e organizzare la tua vita! - {{youtube }} - - - DONE Crea una pagina - - CANCELED [#C] Scrivi una pagina con più di 1000 blocchi -- Questo è tutto! Puoi creare più blocchi o aprire una directory locale per importare alcune note adesso! -- Puoi anche scaricare la nostra app desktop su diff --git a/src/resources/tutorials/tutorial-ja.md b/src/resources/tutorials/tutorial-ja.md deleted file mode 100644 index 5ac00068e2..0000000000 --- a/src/resources/tutorials/tutorial-ja.md +++ /dev/null @@ -1,30 +0,0 @@ -## こんにちは、Logseq へようこそ! -- Logseq はプライバシーファーストで知識管理とコラボレーションを実現する[オープンソース](https://github.com/logseq/logseq)プラットフォームです。 -- 以下は Logseq の使い方が3分で判るチュートリアルです。ぜひやってみましょう! -- 役に立つヒントがありますよ。 -#+BEGIN_TIP -・ブロック(段落)を編集するにはクリックしてください。 -・編集中に新しいブロックを作成するには `Enter` キーを押してください。 -・ブロック内で新しい行を入力するには、`Shift+Enter` キーを押してください。 -・`/` キーを押すと全てのコマンドが表示されます。 -#+END_TIP -- 1. [[見本のノートの作り方]]というページへ書き込んでみましょう。左のリンクをクリックすると開くことができます。`Shift+クリック` すると右のサイドバーで開くことができます! -「Linked References」と「Unlinked References」も表示されているはずです。Linked References はこのページへリンクしているページのリストです。Unlinked References はこのページのタイトルを本文中に含むページのリストです。 - -- 2. [[見本のノートの作り方]]上で「参照」をやってみましょう。下のブロック参照(リンク)を `Shift+クリック` して、右のサイドバーで開いてください。サイドバー側でブロックを修正すると、ブロック参照の側も同じように修正されます! - - ((5f713e91-8a3c-4b04-a33a-c39482428e2d)) : これはブロック参照です。 - - ((5f713ea8-8cba-403d-ac00-9964b1ec7190)) : これは別のブロック参照です。 - -- 3. タグは使えますか? - - もちろん。これは #ダミー のタグです。 - -- 4. todo/doing/done(ToDo/作業中/完了)や優先度といったタスク管理はサポートしていますか? - - はい。キーボードで`/`とタイプし、表示されるメニューからToDo管理のための TODO、DOING、DONE、NOW、LATER や優先度の A、B、Cという語をタイプするか選んでください。(下はその例です) - - NOW [#A] "見本のノートの作り方" のチュートリアル - - LATER [#A] [:a {:href "https://twitter.com/shuomi3" :target "_blank"} "@shuomi3"] の作ったこちらのビデオを見てください(※ビデオは英語です。)これは Logseq でノートをとって暮らしの計画を立てる方法を示しています。 - {{youtube https://www.youtube.com/watch?v=BhHfF0P9A80&ab_channel=ShuOmi}} - - - DONE ページ作成 - - CANCELED [#C] 1000ブロック以上のページを作成する -- 以上です!ここから、さらにブロックを作成したり、ローカルディレクトリを開いてノートをインポートすることができます! -- デスクトップアプリのダウンロードはこちらから: https://github.com/logseq/logseq/releases diff --git a/src/resources/tutorials/tutorial-ko.md b/src/resources/tutorials/tutorial-ko.md deleted file mode 100644 index bba7c51e32..0000000000 --- a/src/resources/tutorials/tutorial-ko.md +++ /dev/null @@ -1,26 +0,0 @@ -## 안녕하세요, Logseq에 오신 것을 환영합니다! -- Logseq은 _개인 정보 보호를 최우선에 둔_, _지식_ 관리와 협업을 위한 [오픈소스](https://github.com/logseq/logseq) 플랫폼입니다. -- 이 글은 Logseq을 사용하는 법에 대한 3분 튜토리얼입니다. 시작해볼까요! -- 다음은 유용할만한 팁입니다. -#+BEGIN_TIP -블록을 클릭하여 블록을 변경하세요. -`Enter`키를 누르면 새로운 블록을 생성합니다. -`Shift+Enter` 키를 누르면 새로운 줄을 생성합니다. -`/`키를 누르면 모든 명령을 보여줍니다. -#+END_TIP -- 1. [[예시 노트 작성하는 방법]]이라는 페이지를 생성해봅시다. 이 링크를 클릭하여 페이지로 이동하거나, `Shift+Click`하여 오른쪽 사이드바에서 열 수 있습니다. 이제 이 페이지에서 _링크된 레퍼런스_와 _링크되지 않은 레퍼런스_를 모두 볼 수 있습니다. -- 2. [[예시 노트 작성하는 방법]]에 몇 가지 레퍼런스를 추가해봅시다. 블록 레퍼런스를 `Shift+Click`하여 오른쪽 사이드바에서 열 수 있습니다. 오른측 사이드 바에서 변경 사항을 만들면 레퍼런스하고 있는 블록도 업데이트됩니다. - - ((5f713e91-8a3c-4b04-a33a-c39482428e2d)) : 이것은 블록 레퍼런스입니다. - - ((5f713ea8-8cba-403d-ac00-9964b1ec7190)) : 이것은 또다른 블록 레퍼런스입니다. -- 3. 태그를 지원하나요? - - 물론입니다. 이것은 #dummy 태그입니다. -- 4. todo/doing/done와 우선순위 같은 태스크 기능을 지원하나요? - - 네, `/`를 입력하고 가장 좋아하는 todo 키워드 또는 우선순위(A/B/C)를 선택하십시오. - - NOW [#A] "예시 노트 작성하는 방법"에 대한 예시 튜토리얼 작성하기 - - LATER [#A] [:a {:href "https://twitter.com/shuomi3" :target "_blank"} "@shuomi3"]의 Logseq을 활용하여 노트를 정리하고 삶을 계획하는 방법에 대한 멋진 유튜브 동영상 확인하기 - {{youtube https://www.youtube.com/watch?v=BhHfF0P9A80&ab_channel=ShuOmi}} - - - DONE 페이지 만들기 - - CANCELED [#C] 1000 블록 이상의 페이지 만들기 -- 끝입니다! 더 많은 글머리를 만들거나 로컬 디렉토리를 열어서 새 노트를 불러오세요! -- 또한 https://github.com/logseq/logseq/releases 에서 데스크톱 앱을 다운 받을 수 있습니다. diff --git a/src/resources/tutorials/tutorial-no.md b/src/resources/tutorials/tutorial-no.md deleted file mode 100644 index b64d56007e..0000000000 --- a/src/resources/tutorials/tutorial-no.md +++ /dev/null @@ -1,27 +0,0 @@ -## Hei, og velkommen til Logseq! -- Logseq er en _personvern-først_, [åpen kildekode](https://github.com/logseq/logseq) platform for _kunnskapsforvaltning_ og samarbeid. -- Dette er en 3 minutters innføring i hvordan du bruker Logseq. La oss komme i gang! -- Her er noen tips som kan være nyttige. -#+BEGIN_TIP -Klikk for å redigere en blokk. -Trykk `Enter` for å lage en ny blokk. -Trykk `Shift+Enter` for å lage en ny linje. -Skriv `/` for å vise alle kommandoer. -#+END_TIP -- 1. La oss lage en side som heter [[Hvordan ta dummy notater?]]. Du kan klikke på den for å gå til den siden, eller du kan `Shift+Klikk` for å åpne den i høyre sidestolpe! Nå burde du se både _Linked References_ og _Unlinked References_. -- 2. La oss lage noen blokkreferanser til [[Hvordan ta dummy notater?]], du kan `Shift+Klikk` en blokkreferanse for å åpne den i høyre sidestolpe. Prøv å lage -noen endringer i høyre sidestolpe, og de refererte blokken vil også endre seg! - - ((5f713e91-8a3c-4b04-a33a-c39482428e2d)) : Dette er en blokkreferanse. - - ((5f713ea8-8cba-403d-ac00-9964b1ec7190)) : Dette er en annen blokkreferanse. -- 3. Støtter dere tagger? - - Selvsagt, dette er en #dummy tag. -- 4. Støtter dere oppgaver som todo/doing/done og priorieter? - - Ja, skriv `/` og velg ditt favoritt todo-nøkkelord eller prioritet (A/B/C). - - NOW [#A] En dummy veiledning om "Hvordan ta dummy notater?" - - LATER [#A] Sjekk ut denne fantastiske videoen av [:a {:href "https://twitter.com/shuomi3" :target "_blank"} "@shuomi3"] om hvordan bruke Logseq til å ta notater og organisere livet ditt! - {{youtube https://www.youtube.com/watch?v=BhHfF0P9A80&ab_channel=ShuOmi}} - - - DONE Lag en side - - CANCELED [#C] Skriv en side med mer enn 1000 blokker -- Det var det hele! Du kan lage flere kulepunkter eller åpne en lokal mappe for å importere noen notater nå! -- Du kan også laste ned vår desktop app på https://github.com/logseq/logseq/releases diff --git a/src/resources/tutorials/tutorial-pl.md b/src/resources/tutorials/tutorial-pl.md deleted file mode 100644 index 30355bfaad..0000000000 --- a/src/resources/tutorials/tutorial-pl.md +++ /dev/null @@ -1,27 +0,0 @@ -## Cześć! Witamy w Logseq! -- Logseq to _skupiona na prywatności_, [otwarto źródłowa](https://github.com/logseq/logseq) platforma do zarządzania _wiedzą_ i współpracą. -- To jest 3 minutowy samouczek jak używać Logseq. Rozpoczynajmy! -- Masz tutaj kilka podpowiedzi, które mogą być przydatne podczas pracy z programem. -#+BEGIN_TIP -Kliknij, aby rozpocząć edycję bloku. -Każdorazowe naciśnięcie `Enter` tworzy nowy blok. -Zaś `Shift+Enter` tworzy nową linię w tym samym bloku. -Napisanie `/` pokazuje wszystkie dostępne komendy. -#+END_TIP -- 1. Stwórzmy stronę [[Jak pisać zwykłe notatki?]].Możesz kliknąć ten link, aby otworzyć wybraną stronę albo kliknąć z wciśniętym klawiszem `Shift`, aby otworzyć go w panelu bocznym! Powinieneś widzieć teraz zarówno _Powiązane referencje_ jak i _Niepowiązane referencje_. -- 2. Odwołajmy się do niektórych bloków strony [[Jak pisać zwykłe notatki?]], możesz kliknąć z `Shift` dowolne odwołanie, aby otworzyć je w panelu bocznym. Spróbuj zmienić cokolwiek -w prawym panelu. Zmiany powinny być widoczne w wybranych blokach w centralnej części edytora! - - ((5f713e91-8a3c-4b04-a33a-c39482428e2d)) : To jest odwołanie do wybranegoo bloku. - - ((5f713ea8-8cba-403d-ac00-9964b1ec7190)) : To jest odwołanie do innego bloku. -- 3. Czy Logseq wspiera tagi? - - Oczywiście! To jest #przyład tagu. -- 4. Czy Logseq wspiera todosy np. todo/doing/done oraz priorytety? - - Tak jest! Wciśnij `/` i wybierz ulubione słowo todo lub priorytet z listy (A/B/C). - - NOW [#A] Zwykły samouczek nt. "Jak pisać zwykłe notatki?" - - LATER [#A] Sprawdzić to wideo [:a {:href "https://twitter.com/shuomi3" :target "_blank"} "@shuomi3"] na temat jak używać Logseq do robienia notatek i organizacji swojego życia! - {{youtube https://www.youtube.com/watch?v=BhHfF0P9A80&ab_channel=ShuOmi}} - - - DONE Stworzyć nową stronę - - CANCELED [#C] Stworzyć stronę z przynajmniej tysiącem innych bloków -- To by było na tyle! Możesz dodać więcej treści do tego grafu lub otworzyć lokalny katalog, aby zaimportować swoje notatki! -- Możesz także ściągnąć naszą aplikację desktopową na [Github](https://github.com/logseq/logseq/releases) diff --git a/src/resources/tutorials/tutorial-pt-br.md b/src/resources/tutorials/tutorial-pt-br.md deleted file mode 100644 index 1674ad8895..0000000000 --- a/src/resources/tutorials/tutorial-pt-br.md +++ /dev/null @@ -1,26 +0,0 @@ -## Olá, bem-vindo ao Logseq! -- Logseq é uma plataforma de código aberto, com o foco na privacidade, para gerenciamento de conhecimento e colaboração. -- Este é um tutorial de 3 minutos sobre como usar o Logseq. Vamos começar! -- Aqui estão algumas dicas que podem ser úteis. -#+BEGIN_TIP -Clique para editar qualquer bloco. -Digite `Enter` para criar um novo bloco. -Digite `Shift+Enter` para criar uma nova linha. -Digite `/` para mostrar todos os comandos. -#+END_TIP -- 1. Vamos criar uma página chamada [[Como fazer anotações fictícias?]]. Você pode clicar nela para ir para a página, ou pode `Shift+Clicar` para abri-la na barra lateral direita! Agora você deve ver tanto as _Referências Conectadas_ quanto as _Referências Desconectadas_. -- 2. Vamos referenciar alguns blocos em [[Como fazer anotações fictícias?]], você pode `Shift+Clicar` em qualquer bloco de referência para abri-lo na barra lateral direita. Tente fazer algumas alterações na barra lateral direita, esses blocos referenciados também serão alterados! - - ((5f713e91-8a3c-4b04-a33a-c39482428e2d)) : Esta é uma referência de bloco. - - ((5f713ea8-8cba-403d-ac00-9964b1ec7190)) : Esta é outra referência de bloco. -- 3. Você suporta tags? - - Claro, esta é uma #tag fictícia. -- 4. Você suporta tarefas como pendente/em andamento/concluído e prioridades? - - Sim, digite `/` e escolha sua palavra-chave de tarefa ou prioridade favorita (A/B/C). - - AGORA [#A] Um tutorial fictício sobre "Como fazer anotações fictícias?" - - MAIS TARDE [#A] Confira este vídeo incrível de [:a {:href "https://twitter.com/shuomi3" :target "_blank"} "@shuomi3"] sobre como usar o Logseq para fazer anotações e organizar sua vida! - {{youtube https://www.youtube.com/watch?v=BhHfF0P9A80&ab_channel=ShuOmi}} - - - CONCLUÍDO Criar uma página - - CANCELADO [#C] Escrever uma página com mais de 1000 blocos -- É isso! Você pode criar mais marcadores ou abrir um diretório local para importar algumas anotações agora! -- Você também pode baixar nosso aplicativo para desktop em https://github.com/logseq/logseq/releases diff --git a/src/resources/tutorials/tutorial-ru.md b/src/resources/tutorials/tutorial-ru.md deleted file mode 100644 index 3081ecfcdb..0000000000 --- a/src/resources/tutorials/tutorial-ru.md +++ /dev/null @@ -1,27 +0,0 @@ -## Привет и добро пожаловать в Logseq! -- Logseq - это платформа с [открытым исходным кодом](https://github.com/logseq/logseq), _ориентированная на конфиденциальность_, для управления _знаниями_ и совместной работы. -- Это 3-минутное руководство по использованию Logseq. Приступим! -- Вот несколько советов, которые могут оказаться полезными. -#+BEGIN_TIP -Кликните, чтобы отредактировать любой блок. -Нажмите `Enter`, чтобы создать новый блок. -Нажмите `Shift+Enter`, чтобы начать писать с новой строки в блоке. -Введите `/` для просмотра всех доступных команд. -#+END_TIP -- 1. Давайте создадим страницу под названием [[Как создать образец заметки?]]. Вы можете кликнуть на неё, чтобы перейти на эту страницу, или кликнуть, удерживая нажатой клавишу `Shift`, чтобы открыть её на правой боковой панели! После этого вы увидите как _связанные ссылки_, так и _несвязанные ссылки_. -- 2. Давайте обратимся к некоторым блокам страницы [[Как создать образец заметки?]]. Кликните, удерживая нажатой клавишу `Shift`, на любые ссылки на блоки, чтобы открыть их на правой боковой панели. Попробуйте внести некоторые изменения на правой боковой панели, эти блоки также будут изменены! - - ((5f713e91-8a3c-4b04-a33a-c39482428e2d)) : Это ссылка на блок. - - ((5f713ea8-8cba-403d-ac00-9964b1ec7190)) : Это ещё одна ссылка на блок. -- 3. Поддерживаются ли теги? - - Разумеется! Например, добавим тег #образец. -- 4. Поддерживаются ли задачи todo/doing/done и их приоритеты? - - Да, введите `/` и выберите подходящее ключевое todo-слово или приоритет (A/B/C). - - NOW [#A] Руководство для начинающих "Как создать образец заметки?" - - LATER [#A] Посмотреть это замечательное видео от [:a {:href "https://twitter.com/shuomi3" :target "_blank"} "@shuomi3"] о том, как использовать Logseq для ведения заметок и организации своей жизни! - {{youtube https://www.youtube.com/watch?v=BhHfF0P9A80&ab_channel=ShuOmi}} - - - DONE Создать страницу - - CANCELED [#C] Создать страницу с более чем тысячью блоков -- Вот и всё! Теперь вы можете создать больше пунктов нумерованного списка или открыть локальный каталог, чтобы импортировать заметки! -- Вы также можете загрузить наше приложение для настольных компьютеров -по адресу https://github.com/logseq/logseq/releases \ No newline at end of file diff --git a/src/resources/tutorials/tutorial-sk.md b/src/resources/tutorials/tutorial-sk.md deleted file mode 100644 index 1915902c33..0000000000 --- a/src/resources/tutorials/tutorial-sk.md +++ /dev/null @@ -1,26 +0,0 @@ -## Ahoj, vitaj v Logseq! -- Logseq je [open-source](https://github.com/logseq/logseq) platforma určená na zdieľanie _znalostí_ a spoluprácu s dôrazom na _ochranu súkromia_. -- Toto je trojminútový návod ako používať Logseq. Poďme na to! -- Tu je niekoľko tipov, ktoré môžu byť užitočné. - #+BEGIN_TIP - Kliknutím upravíte ľubovoľný blok. - Stlačením klávesu `Enter` vytvoríte nový blok. - Stlačením klávesovej kombinácie `Shift+Enter` vytvoríte nový riadok. - Stlačením `/` zobrazíte všetky príkazy. - #+END_TIP -- 1. Vytvorme stránku [[Ako vytvoriť poznámky?]]. Môžete na ňu kliknúť a prejsť na danú stránku, alebo ju môžete otvoriť pomocou klávesovej skratky `Shift+Click` na pravom bočnom paneli! Teraz by ste mali vidieť _Prepojené referencie_ aj _Neprepojené referencie_. -- 2. Vytvorme referenciu na nejaké bloky na stránke [[Ako vytvoriť poznámky?]]. Pomocou klávesovej skratky `Shift+Click` môžete otvoriť referenciu na ľubovoľný blok na pravom bočnom paneli. Skúste čokoľvek zmeniť v pravom paneli a tieto zmeny sa premietnu do referencovaného bloku! - - ((5f713e91-8a3c-4b04-a33a-c39482428e2d)) : Toto je referencia na blok. - - ((5f713ea8-8cba-403d-ac00-9964b1ec7190)) : Toto je referencia na ďalší blok. -- 3. Podporuje Logseq tagy? - - Samozrejme, toto je #ukážkový tag. -- 4. Podporujete úlohy ako todo/do/done a priority? - - Áno, stlačte `/` a vyberte svoje obľúbené todo kľúčové slovo alebo prioritu úlohy zo zoznamu (A/B/C). - - NOW [#A] Ukážkový návod "Ako vytvoriť poznámky?" - - LATER [#A] Pozrite si toto úžasné video od [:a {:href "https://twitter.com/shuomi3" :target "_blank"} "@shuomi3"] o tom, ako používať Logseq na robenie poznámok a organizovanie svojho života! - {{youtube https://www.youtube.com/watch?v=BhHfF0P9A80&ab_channel=ShuOmi}} - - - DONE Vytvoriť stránku - - CANCELED [#C] Napísať stránku s viac ako tisíc blokmi -- A to je všetko! Teraz môžete vytvoriť viac odrážok alebo otvoriť lokálny adresár a importovať nejaké poznámky! -- Môžete si tiež stiahnúť našu desktopovú aplikáciu z https://github.com/logseq/logseq/releases diff --git a/src/resources/tutorials/tutorial-tr.md b/src/resources/tutorials/tutorial-tr.md deleted file mode 100644 index 223a696766..0000000000 --- a/src/resources/tutorials/tutorial-tr.md +++ /dev/null @@ -1,26 +0,0 @@ -## Merhaba, Logseq'e hoş geldiniz! -- Logseq, _bilgi_ yönetimi ve işbirliği için _gizlilik öncelikli_, [açık kaynaklı](https://github.com/logseq/logseq) bir platformdur. -- Bu, Logseq'in nasıl kullanılacağına dair 3 dakikalık bir eğitimdir. Başlayalım! -- İşte yararlı olabilecek bazı ipuçları. -#+BEGIN_TIP -Herhangi bir bloğu düzenlemek için tıklayın. -Yeni bir blok oluşturmak için `Enter` tuşuna basın. -Yeni bir satır oluşturmak için `Shift+Enter` tuşuna basın. -Tüm komutları göstermek için `/` tuşuna basın. -#+END_TIP -- 1. [[Nasıl not alınır?]] adında bir sayfa oluşturalım. O sayfaya gitmek için üzerine tıklayabilir veya sağ kenar çubuğunda açmak için `Shift+Tıkla` yapabilirsiniz! Şimdi hem _Bağlantılı Referanslar_ hem de _Bağlantısız Referanslar_ görmelisiniz. -- 2. [[Nasıl not alınır?]] sayfasındaki bazı bloklara referans verelim. Sağ kenar çubuğunda açmak için herhangi bir blok referansını 'Shift+Tıkla' yapabilirsiniz. Sağ kenar çubuğunda bazı değişiklikler yapmayı deneyin, referans verilen bloklar da değişecek! - - ((5f713e91-8a3c-4b04-a33a-c39482428e2d)) : Bu bir blok referansıdır. - - ((5f713ea8-8cba-403d-ac00-9964b1ec7190)) : Bu başka bir blok referansıdır. -- 3. Etiketleri destekliyor musunuz? - - Tabii ki, bu bir #test etiketi. -- 4. Yapılacak işler ve öncelikler (todo/doing/done) gibi görevleri destekliyor musunuz? - - Evet, `/` tuşuna basın ve favori yapılacaklar anahtar kelimenizi veya önceliğinizi (A/B/C) seçin. - - NOW [#A] "Nasıl not alınır?" adlı bir sayfa yarat. - - LATER [#A] Not almak ve hayatınızı düzenlemek için Logseq'i nasıl kullanacağınıza dair [:a {:href "https://twitter.com/shuomi3" :target "_blank"} "@shuomi3"] kullanıcısının bu harika videosunu izleyin! - {{youtube https://www.youtube.com/watch?v=BhHfF0P9A80&ab_channel=ShuOmi}} - - - DONE Bir sayfa yarat - - CANCELED [#C] 1000'den fazla blok içeren bir sayfa yazın -- Bu kadar! Şimdi bazı notları içe aktarmak için daha fazla madde işareti oluşturabilir veya yerel bir dizin açabilirsiniz! -- Masaüstü uygulamamızı https://github.com/logseq/logseq/releases adresinden indirebilirsiniz. diff --git a/src/resources/tutorials/tutorial-uk.md b/src/resources/tutorials/tutorial-uk.md deleted file mode 100644 index 25f85be90c..0000000000 --- a/src/resources/tutorials/tutorial-uk.md +++ /dev/null @@ -1,26 +0,0 @@ -## Привіт, ласкаво просимо до Logseq! -- Logseq — це платформа з [відкритим кодом](https://github.com/logseq/logseq) для керування _знаннями_ та співпраці, орієнтована на _конфіденційності_. -- Це 3-х хвилинний туторіал як працювати з Logseq. Тож, почнімо! -- Ці кілька підказок можуть бути корисними. -#+BEGIN_TIP -Клацніть щоб відредагувати любий блок. -Натисніть `Enter` щоб створити новий блок. -Натисніть `Shift+Enter` щоб створити нову лінію. -Натисніть `/` щоб показати всі команди. -#+END_TIP -- 1. Тож, давайте своримо сторінку, яка називається [[Як робити фіктивні нотатки?]]. Ви можете клацнути по цьому, або натиснути `Shift+Click` щоб відкрити у правій бічній панелі! Зараз ви повині побачити як _Зв'язані посилання_ так і _Незв'язані посилання_. -- 2. Давайте посилатимемося на деякі блоки у [[Як робити фіктивні нотатки?]], ви можете `Shift+Click` будь-яке посилання на блок, щоб відкрити його на правій бічній панелі. Спробуйте внести деякі зміни на правій бічній панелі, ці блоки, на які посилаються, також будуть змінені! - - ((5f713e91-8a3c-4b04-a33a-c39482428e2d)) : Це посилання на блок. - - ((5f713ea8-8cba-403d-ac00-9964b1ec7190)) : Це посилання на інший блок. -- 3. Чи підтримаються теги? - - Звісно, наприклад #dummy. -- 4. Чи підтримуються завдання як todo/doing/done і пріоритети? - - Так, введіть `/` і виберіть ваше улюблене ключове слово або пріоритет todo (A/B/C). - - NOW [#A] Фіктивний туторіал на тему "Як робити фіктивні нотатки?" - - LATER [#A] Перегляньте це чудове відео від [:a {:href "https://twitter.com/shuomi3" :target "_blank"} "@shuomi3"] про те, як використовувати Logseq для нотаток і організації свого життя! - {{youtube https://www.youtube.com/watch?v=BhHfF0P9A80&ab_channel=ShuOmi}} - - - DONE Створити сторінку - - CANCELED [#C] Написати сторінку з 1000 або більше блоків -- Це все! Ви можете створити більше маркерів або відкрити локальний каталог, щоб імпортувати деякі нотатки зараз! -- Ви також можете завантажити наш настільний додаток за адресою https://github.com/logseq/logseq/releases