Merge branch 'feat/db' into chore/whiteboards-cleanup

This commit is contained in:
Konstantinos Kaloutas
2024-01-25 10:36:59 +02:00
22 changed files with 604 additions and 330 deletions

31
bb.edn
View File

@@ -32,15 +32,32 @@
dev:app-watch
logseq.tasks.dev.mobile/app-watch
dev:build-publishing
logseq.tasks.dev/build-publishing
-dev:build-publishing-frontend
logseq.tasks.dev/build-publishing-frontend
dev:publishing-backend
logseq.tasks.dev/publishing-backend
-dev:publishing-release
{:depends [-dev:build-publishing-frontend]
:doc "Build release publishing spa app given graph and output dirs"
:task (run 'dev:publishing-backend)}
-dev:watch-publishing-frontend
logseq.tasks.dev/watch-publishing-frontend
-dev:watch-publishing-backend
logseq.tasks.dev/watch-publishing-backend
-dev:publishing-dev
{:depends [-dev:watch-publishing-frontend -dev:watch-publishing-backend]
:doc "Watch dev publishing spa app given graph and output dirs"}
dev:publishing
{:depends [dev:build-publishing]
:doc "Build publishing spa app given graph and output dirs"
:task (apply shell {:dir "scripts"}
"yarn -s nbb-logseq -cp src -m logseq.tasks.dev.publishing"
(into ["static"] *command-line-args*))}
{:doc "Builds full publishing app given graph and output dirs. Append --dev to watch frontend"
:task (if ((set *command-line-args*) "--dev")
(run '-dev:publishing-dev {:parallel true})
(run '-dev:publishing-release))}
dev:validate-db
{:doc "Validate a DB graph's datascript schema"

View File

@@ -3,5 +3,6 @@
logseq.common.util.page-ref
logseq.common.util.block-ref
logseq.common.util
logseq.common.marker
logseq.common.config]
:report {:format :ignore}}

View File

@@ -51,8 +51,12 @@
:schema
{:type :default}
:closed-values
(mapv #(hash-map :value % :uuid (random-uuid))
["Backlog" "Todo" "Doing" "In Review" "Done" "Canceled"])
(mapv (fn [[status icon]]
{:value status
:uuid (random-uuid)
:icon {:type :tabler-icon :id icon :name icon}})
[["Backlog" "Backlog"] ["Todo" "Todo"] ["Doing" "In Progress 50"]
["In Review" "In Review"] ["Done" "Done"] ["Canceled" "Cancelled"]])
:visible true}
:priority {:original-name "Priority"
:schema

View File

@@ -9,6 +9,25 @@
[datascript.core :as d]
[logseq.db :as ldb]))
(defn- build-initial-properties
[]
(let [;; Some uuids need to be pre-defined since they are referenced by other properties
default-property-uuids {:icon (d/squuid)}]
(mapcat
(fn [[k-keyword {:keys [schema original-name closed-values]}]]
(let [k-name (name k-keyword)]
(if closed-values
(db-property-util/build-closed-values
(or original-name k-name)
{:block/schema schema :block/uuid (d/squuid) :closed-values closed-values}
{:icon-id (get default-property-uuids :icon)})
[(sqlite-util/build-new-property
{:block/schema schema
:block/original-name (or original-name k-name)
:block/name (common-util/page-name-sanity-lc k-name)
:block/uuid (get default-property-uuids k-keyword (d/squuid))})])))
db-property/built-in-properties)))
(defn build-db-initial-data
[config-content]
(let [initial-data [{:db/ident :db/type :db/type "db"}
@@ -26,20 +45,7 @@
:file/content ""
:file/last-modified-at (js/Date.)}]
default-pages (ldb/build-default-pages-tx)
default-properties (mapcat
(fn [[k-keyword {:keys [schema original-name closed-values]}]]
(let [k-name (name k-keyword)]
(if closed-values
(db-property-util/build-closed-values
(or original-name k-name)
{:block/schema schema :block/uuid (d/squuid) :closed-values closed-values}
{})
[(sqlite-util/build-new-property
{:block/schema schema
:block/original-name (or original-name k-name)
:block/name (common-util/page-name-sanity-lc k-name)
:block/uuid (d/squuid)})])))
db-property/built-in-properties)
default-properties (build-initial-properties)
name->properties (zipmap
(map :block/name default-properties)
default-properties)
@@ -58,4 +64,4 @@
id))
(:properties schema))}})))
db-class/built-in-classes)]
(concat initial-data initial-files default-pages default-classes default-properties)))
(vec (concat initial-data initial-files default-pages default-classes default-properties))))

View File

@@ -366,7 +366,8 @@
m)
m (cond->> m'
db-based?
(db-marker-handle conn))]
(db-marker-handle conn))
m (if db-based? (dissoc m :block/tags) m)]
;; Ensure block UUID never changes
(when (and db-id block-uuid)

View File

@@ -42,10 +42,7 @@
(fs/symlinkSync (node-path/join source-static-dir "js" "publishing" "cljs-runtime")
(node-path/join output-static-dir "js" "cljs-runtime")))
;; remove publishing-dir
_ (when-not dev? (p/all (map (fn [file]
(fs/rmSync (node-path/join publishing-dir file)))
(fs/readdirSync publishing-dir))))
_ (when-not dev? (fs/rmdirSync publishing-dir))
_ (when-not dev? (fse/remove publishing-dir))
;; remove source map files
_ (p/all (map (fn [file]
(fs/rmSync (node-path/join output-static-dir "js" (str file ".map")) #js {:force true}))

View File

@@ -320,13 +320,20 @@ point out:
```sh
# One time setup
$ cd scripts && yarn install && cd -
# Build a release export
# Build a release publishing app
$ bb dev:publishing /path/to/graph-dir tmp/publish
# OR build a dev export with `clojure -M:cljs watch publishing` and then
# OR build a dev publishing app that watches frontend changes
$ bb dev:publishing /path/to/graph-dir tmp/publish --dev
# View the app in a browser
$ python3 -m http.server 8080 -d tmp/db-publish &; open http://localhost:8080
# View the publishing app in a browser
$ python3 -m http.server 8080 -d tmp/publish &; open http://localhost:8080
# Rebuild the publishing backend for dev/release.
# Handy when making backend changes in deps/publishing or
# to test a different graph
$ bb dev:publishing-backend /path/graph-dir tmp/publish
```

View File

@@ -161,14 +161,6 @@
"yargs-parser": "20.2.4"
},
"resolutions": {
"**/postcss": "8.4.17",
"**/postcss-colormin": "5.3.0",
"**/postcss-convert-values": "5.1.2",
"**/postcss-js": "4.0.0",
"**/postcss-merge-longhand": "5.1.6",
"**/postcss-merge-rules": "5.1.2",
"**/postcss-minify-params": "5.1.3",
"**/postcss-reduce-initial": "5.1.0",
"pixi-graph-fork/@pixi/app": "6.2.0",
"pixi-graph-fork/@pixi/constants": "6.2.0",
"pixi-graph-fork/@pixi/core": "6.2.0",

View File

@@ -4,6 +4,7 @@
(:require [babashka.process :refer [shell]]
[babashka.fs :as fs]
[babashka.cli :as cli]
[logseq.tasks.util :as task-util]
[clojure.java.io :as io]
[clojure.pprint :as pp]
[clojure.edn :as edn]
@@ -41,17 +42,6 @@
(pp/pprint (edn/read-string (:out (shell {:out :string} "node ./static/gen-malli-kondo-config.js")))))]
(spit config-edn config))))
(defn build-publishing
"Builds release publishing asset when files have changed"
[& _args]
(if-let [_files (and (not (System/getenv "SKIP_ASSET"))
(seq (set (fs/modified-since (fs/file "static/js/publishing/main.js")
(fs/glob "." "{src/main,deps/graph-parser/src}/**")))))]
(do
(println "Building publishing js asset...")
(shell "clojure -M:cljs release publishing"))
(println "Publishing js asset is up to date")))
(defn diff-datoms
"Runs data/diff on two edn files written by dev:db-datoms"
[file1 file2 & args]
@@ -66,4 +56,39 @@
drop-last
;; Remove nils as we're only interested in diffs
(mapv #(vec (remove nil? %))))]
(pp/pprint data-diff)))
(pp/pprint data-diff)))
(defn build-publishing-frontend
"Builds frontend release publishing asset when files have changed"
[& _args]
(if-let [_files (and (not (System/getenv "SKIP_ASSET"))
(seq (set (fs/modified-since (fs/file "static/js/publishing/main.js")
(fs/glob "." "{src/main,deps/graph-parser/src}/**")))))]
(do
(println "Building publishing js asset...")
(shell "clojure -M:cljs release publishing"))
(println "Publishing js asset is up to date")))
(defn publishing-backend
"Builds publishing backend and copies over supporting frontend assets"
[& args]
(apply shell {:dir "scripts"}
"yarn -s nbb-logseq -cp src -m logseq.tasks.dev.publishing"
(into ["static"] args)))
(defn watch-publishing-frontend
[& _args]
(shell "clojure -M:cljs watch publishing"))
(defn watch-publishing-backend
"Builds publishing backend once watch-publishing-frontend has built initial frontend"
[& args]
(let [start-time (java.time.Instant/now)]
(Thread/sleep 3000)
(loop [n 1000]
(if (and (fs/exists? "static/js/publishing/main.js")
(task-util/file-modified-later-than? "static/js/publishing/main.js" start-time))
(apply publishing-backend args)
(do (println "Waiting for publishing frontend to build...")
(Thread/sleep 1000)
(recur (inc n)))))))

View File

@@ -13,13 +13,13 @@
(defn- get-db [graph-dir]
(let [{:keys [conn]} (gp-cli/parse-graph graph-dir {:verbose false})] @conn))
(defn- publish-file-graph [static-dir graph-dir output-path]
(defn- publish-file-graph [static-dir graph-dir output-path options]
(let [repo-config (-> (node-path/join graph-dir "logseq" "config.edn") fs/readFileSync str edn/read-string)]
(publishing/export (get-db graph-dir)
static-dir
graph-dir
output-path
{:repo-config repo-config :ui/theme "dark" :ui/radix-color :purple})))
(merge options {:repo-config repo-config :ui/theme "dark" :ui/radix-color :purple}))))
(defn- publish-db-graph [static-dir graph-dir output-path opts]
(let [db-name (node-path/basename graph-dir)
@@ -42,7 +42,8 @@
(js/process.exit 1))
(let [[static-dir graph-dir output-path]
;; Offset relative paths since they are run in a different directory than user is in
(map #(if (node-path/isAbsolute %) % (node-path/resolve ".." %)) args)]
(map #(if (node-path/isAbsolute %) % (node-path/resolve ".." %)) args)
options {:dev? (contains? (set args) "--dev")}]
(if (sqlite-cli/db-graph-directory? graph-dir)
(publish-db-graph static-dir graph-dir output-path {:dev? (contains? (set args) "--dev")})
(publish-file-graph static-dir graph-dir output-path))))
(publish-db-graph static-dir graph-dir output-path options)
(publish-file-graph static-dir graph-dir output-path options))))

View File

@@ -172,7 +172,10 @@
:nl #{:plugins :type :left-side-bar/nav-recent-pages :plugin/update}
:pl #{:port}
:pt-BR #{:plugins :right-side-bar/flashcards :settings-page/enable-flashcards :page/backlinks
:host :settings-page/tab-editor :shortcut.category/plugins :whiteboard/link}
:host :settings-page/tab-editor :shortcut.category/plugins :whiteboard/link :settings-of-plugins :whiteboard
:whiteboards :on-boarding/quick-tour-journal-page-desc-2 :plugin/downloads :right-side-bar/history-global
:right-side-bar/whiteboards :search-item/whiteboard :settings-page/enable-whiteboards :settings-page/plugin-system
:shortcut.category/whiteboard :command.whiteboard/zoom-in :command.whiteboard/zoom-out}
:pt-PT #{:plugins :settings-of-plugins :plugin/downloads :right-side-bar/flashcards
:settings-page/enable-flashcards :settings-page/plugin-system}
:nb-NO #{:port :type :whiteboard :right-side-bar/flashcards :right-side-bar/whiteboards

View File

@@ -98,11 +98,12 @@
:publishing {:target :browser
:module-loader true
:js-options {:ignore-asset-requires true
:js-options {;; handle `require(xxx.css)`
:ignore-asset-requires true
:resolve {"react" {:target :global
:global "React"}
"react-dom" {:target :global
:global "ReactDOM"}}} ;; handle `require(xxx.css)`
:global "ReactDOM"}}}
:modules {:shared
{:entries []}
:main

View File

@@ -142,8 +142,7 @@
(empty? matched-pages)
(when-not (db/page-exists? q)
(if db-tag?
(concat [(str (t :new-page) " " q)
(str (t :new-class) " " q)]
(concat [(str (t :new-class) " " q)]
matched-pages)
(cons q matched-pages)))

View File

@@ -721,13 +721,7 @@
(not (:page-configure? opts)))
[:div.ls-properties-area (cond-> (if in-block-container?
{}
{:class [(cond
class-schema?
"class-properties"
(config/db-based-graph? (state/get-current-repo))
nil
:else
"page-properties")]})
{:class (when class-schema? "class-properties")})
(:selected? opts)
(update :class conj "select-none"))
(properties-section block (if class-schema? properties own-properties) opts)

View File

@@ -79,11 +79,17 @@
:db/ident key
key value})
(defn transact!
([repo tx-data]
(transact! repo tx-data nil))
([repo tx-data tx-meta]
(ldb/transact! repo tx-data tx-meta)))
(if util/node-test?
(defn transact!
([repo tx-data]
(transact! repo tx-data nil))
([repo tx-data tx-meta]
(ldb/transact! (get-db repo false) tx-data tx-meta)))
(defn transact!
([repo tx-data]
(transact! repo tx-data nil))
([repo tx-data tx-meta]
(ldb/transact! repo tx-data tx-meta))))
(defn start!
([repo]

View File

@@ -300,15 +300,21 @@
true
(dissoc :insert-blocks?)))]
(when-not (and (:create-today-journal? tx-meta)
(:today-journal-name tx-meta)
(seq tx-data)
(d/entity @conn [:block/name (:today-journal-name tx-meta)])) ; today journal created already
(if (and (:create-today-journal? tx-meta)
(:today-journal-name tx-meta)
(seq tx-data)
(d/entity @conn [:block/name (:today-journal-name tx-meta)])) ; today journal created already
;; (prn :debug :transact :tx-data tx-data :tx-meta tx-meta')
(worker-util/profile "Worker db transact"
(ldb/transact! conn tx-data tx-meta')))
;; remove task from ldb/*request-id->response
(worker-util/post-message :sync-db-changes (pr-str
{:request-id (:request-id tx-meta)
:repo repo
:tx-data []
:tx-meta nil}))
(do
;; (prn :debug :transact :tx-data tx-data :tx-meta tx-meta')
(worker-util/profile "Worker db transact"
(ldb/transact! conn tx-data tx-meta'))))
nil)
(catch :default e
(prn :debug :error)

View File

@@ -1300,37 +1300,37 @@
(save-current-block! {}))
([{:keys [force? skip-properties? current-block] :as opts}]
;; non English input method
(let [result (when-not (state/editor-in-composition?)
(when (state/get-current-repo)
(try
(let [input-id (state/get-edit-input-id)
block (state/get-edit-block)
db-block (when-let [block-id (:block/uuid block)]
(db/pull [:block/uuid block-id]))
elem (and input-id (gdom/getElement input-id))
db-content (:block/content db-block)
db-content-without-heading (and db-content
(common-util/safe-subs db-content (:block/level db-block)))
value (if (= (:block/uuid current-block) (:block/uuid block))
(:block/content current-block)
(and elem (gobj/get elem "value")))]
(when value
(cond
force?
(save-block-aux! db-block value opts)
(when-not (or (state/editor-in-composition?)
(state/get-editor-action))
(when (state/get-current-repo)
(try
(let [input-id (state/get-edit-input-id)
block (state/get-edit-block)
db-block (when-let [block-id (:block/uuid block)]
(db/pull [:block/uuid block-id]))
elem (and input-id (gdom/getElement input-id))
db-content (:block/content db-block)
db-content-without-heading (and db-content
(common-util/safe-subs db-content (:block/level db-block)))
value (if (= (:block/uuid current-block) (:block/uuid block))
(:block/content current-block)
(and elem (gobj/get elem "value")))]
(when value
(cond
force?
(save-block-aux! db-block value opts)
(and skip-properties?
(db-model/top-block? block)
(when elem (thingatpt/properties-at-point elem)))
nil
(and skip-properties?
(db-model/top-block? block)
(when elem (thingatpt/properties-at-point elem)))
nil
(and block value db-content-without-heading
(not= (string/trim db-content-without-heading)
(string/trim value)))
(save-block-aux! db-block value opts))))
(catch :default error
(log/error :save-block-failed error)))))]
result)))
(and block value db-content-without-heading
(not= (string/trim db-content-without-heading)
(string/trim value)))
(save-block-aux! db-block value opts))))
(catch :default error
(log/error :save-block-failed error)))))))
(defn- clean-content!
[repo format content]

View File

@@ -72,6 +72,7 @@
[logseq.db.frontend.schema :as db-schema]
[logseq.common.config :as common-config]
[promesa.core :as p]
[lambdaisland.glogi :as log]
[rum.core :as rum]
[frontend.persist-db.browser :as db-browser]
[frontend.db.rtc.debug-ui :as rtc-debug-ui]
@@ -191,9 +192,15 @@
(p/let [writes-finished? (when sqlite (.file-writes-finished? sqlite))
request-finished? (ldb/request-finished?)]
(if (or (not request-finished?) (not writes-finished?)) ; TODO: test (:sync-graph/init? @state/state)
(notification/show!
"Please wait seconds until all changes are saved for the current graph."
:warning)
(do
(log/info :graph/switch (cond->
{:request-finished? request-finished?
:file-writes-finished? writes-finished?}
(false? request-finished?)
(assoc :unfinished-requests? @ldb/*request-id->response)))
(notification/show!
"Please wait seconds until all changes are saved for the current graph."
:warning))
(graph-switch-on-persisted graph opts)))))
(defmethod handle :graph/pull-down-remote-graph [[_ graph dir-name]]

View File

@@ -218,7 +218,7 @@
(fn [chosen e]
(util/stop e)
(state/clear-editor-action!)
(let [class? (string/starts-with? chosen (t :new-class))
(let [class? (and db-based? hashtag?)
chosen (-> chosen
(string/replace-first (str (t :new-class) " ") "")
(string/replace-first (str (t :new-page) " ") ""))
@@ -242,11 +242,14 @@
_ (when-not tag-entity
(<create! tag {:redirect? false
:create-first-block? false
:class? class?}))]
:class? class?}))
tag-entity (db/entity [:block/name (util/page-name-sanity-lc tag)])]
(when class?
(let [repo (state/get-current-repo)
tag-entity (or tag-entity (db/entity [:block/name (util/page-name-sanity-lc tag)]))
tx-data [[:db/add [:block/uuid (:block/uuid edit-block)] :block/tags (:db/id tag-entity)]
tx-data [[:db/add (:db/id tag-entity) :block/type "class"]
[:db/add [:block/uuid (:block/uuid edit-block)] :block/tags (:db/id tag-entity)]
;; TODO: Should classes counted as refs
[:db/add [:block/uuid (:block/uuid edit-block)] :block/refs (:db/id tag-entity)]]]
(db/transact! repo tx-data {:outliner-op :save-block})))))))
(editor-handler/insert-command! id

View File

@@ -63,50 +63,50 @@
:on-boarding/section-computer "computador"
:on-boarding/section-journals "Notas diárias"
:on-boarding/section-pages "PÁGINAS"
:on-boarding/section-phone "telefone"
:on-boarding/section-app "Aplicativo interno"
:on-boarding/section-config "Arquivo de configuração"
:query/config-property-settings "Configurações de propriedades para esta consulta:"
:bug-report/main-title "Relatório de bug"
:bug-report/clipboard-inspector-title "Inspetor de dados da área de transferência"
:bug-report/main-desc "Você pode nos ajudar enviando um relatório de bug? Vamos resolver isso o mais rápido possível."
:bug-report/section-clipboard-title "O bug que você encontrou está relacionado a esses recursos?"
:bug-report/section-clipboard-desc "Você pode usar essas ferramentas úteis para nos fornecer informações adicionais."
:bug-report/section-clipboard-btn-title "Auxiliar da área de transferência"
:bug-report/section-clipboard-btn-desc "Inspetar e coletar dados da área de transferência"
:bug-report/section-issues-title "Ou..."
:bug-report/section-issues-desc "Se não houver ferramentas disponíveis para coletar informações adicionais, relate o bug diretamente."
:bug-report/section-issues-btn-title "Enviar um relatório de bug"
:bug-report/section-issues-btn-desc "Ajude a melhorar o Logseq!"
:bug-report/inspector-page-desc-1 "Pressione Ctrl+V / ⌘+V para inspecionar os dados da área de transferência"
:bug-report/inspector-page-desc-2 "ou clique aqui para colar se estiver usando a versão mobile"
:bug-report/inspector-page-placeholder "Pressione e segure aqui para colar se estiver no mobile"
:bug-report/inspector-page-tip "Algum problema? Sem problemas, clique para voltar para o passo anterior."
:bug-report/inspector-page-btn-back "Voltar"
:bug-report/inspector-page-btn-copy "Copiar o resultado"
:bug-report/inspector-page-copy-notif "Copiado para a área de transferência!"
:bug-report/inspector-page-btn-create-issue "Criar uma issue"
:bug-report/inspector-page-desc-clipboard "Aqui estão os dados lidos da área de transferência."
:bug-report/inspector-page-desc-copy "Se for seguro compartilhar, clique no botão de cópia."
:bug-report/inspector-page-desc-create-issue "Agora você pode relatar o resultado colado na sua área de transferência. Cole o resultado na seção 'Contexto Adicional' e indique de onde você copiou o conteúdo original. Obrigado!"
:help/title-usage "Uso"
:help/title-community "Comunidade"
:help/title-development "Desenvolvimento"
:help/title-about "Sobre"
:help/title-terms "Termos"
:help/start "Começando"
:help/about "Sobre o Logseq"
:help/roadmap "Roteiro"
:help/bug "Relatório de bug"
:help/feature "Solicitação de recurso"
:help/changelog "Registro de alterações"
:help/blog "Blog do Logseq"
:help/docs "Documentação"
:help/privacy "Política de privacidade"
:help/terms "Termos"
:help/forum-community "Comunidade do Fórum"
:help/awesome-logseq "Incrível Logseq"
:help/shortcuts "Atalhos de teclado"
:on-boarding/section-phone "telefone"
:on-boarding/section-app "Aplicativo interno"
:on-boarding/section-config "Arquivo de configuração"
:query/config-property-settings "Configurações de propriedades para esta consulta:"
:bug-report/main-title "Relatório de bug"
:bug-report/clipboard-inspector-title "Inspetor de dados da área de transferência"
:bug-report/main-desc "Você pode nos ajudar enviando um relatório de bug? Vamos resolver isso o mais rápido possível."
:bug-report/section-clipboard-title "O bug que você encontrou está relacionado a esses recursos?"
:bug-report/section-clipboard-desc "Você pode usar essas ferramentas úteis para nos fornecer informações adicionais."
:bug-report/section-clipboard-btn-title "Auxiliar da área de transferência"
:bug-report/section-clipboard-btn-desc "Inspetar e coletar dados da área de transferência"
:bug-report/section-issues-title "Ou..."
:bug-report/section-issues-desc "Se não houver ferramentas disponíveis para coletar informações adicionais, relate o bug diretamente."
:bug-report/section-issues-btn-title "Enviar um relatório de bug"
:bug-report/section-issues-btn-desc "Ajude a melhorar o Logseq!"
:bug-report/inspector-page-desc-1 "Pressione Ctrl+V / ⌘+V para inspecionar os dados da área de transferência"
:bug-report/inspector-page-desc-2 "ou clique aqui para colar se estiver usando a versão mobile"
:bug-report/inspector-page-placeholder "Pressione e segure aqui para colar se estiver no mobile"
:bug-report/inspector-page-tip "Algum problema? Sem problemas, clique para voltar para o passo anterior."
:bug-report/inspector-page-btn-back "Voltar"
:bug-report/inspector-page-btn-copy "Copiar o resultado"
:bug-report/inspector-page-copy-notif "Copiado para a área de transferência!"
:bug-report/inspector-page-btn-create-issue "Criar uma issue"
:bug-report/inspector-page-desc-clipboard "Aqui estão os dados lidos da área de transferência."
:bug-report/inspector-page-desc-copy "Se for seguro compartilhar, clique no botão de cópia."
:bug-report/inspector-page-desc-create-issue "Agora você pode relatar o resultado colado na sua área de transferência. Cole o resultado na seção 'Contexto Adicional' e indique de onde você copiou o conteúdo original. Obrigado!"
:help/title-usage "Uso"
:help/title-community "Comunidade"
:help/title-development "Desenvolvimento"
:help/title-about "Sobre"
:help/title-terms "Termos"
:help/start "Começando"
:help/about "Sobre o Logseq"
:help/roadmap "Roteiro"
:help/bug "Relatório de bug"
:help/feature "Solicitação de recurso"
:help/changelog "Registro de alterações"
:help/blog "Blog do Logseq"
:help/docs "Documentação"
:help/privacy "Política de privacidade"
:help/terms "Termos"
:help/forum-community "Comunidade do Fórum"
:help/awesome-logseq "Incrível Logseq"
:help/shortcuts "Atalhos de teclado"
:help/shortcuts-triggers "Gatilhos"
:help/shortcut "Atalho"
:help/slash-autocomplete "Barra de preenchimento automático"
@@ -374,116 +374,116 @@
:whiteboard/arrow-head "Cabeça da seta"
:whiteboard/bold "Negrito"
:whiteboard/italic "Itálico"
:whiteboard/undo "Desfazer"
:whiteboard/redo "Refazer"
:whiteboard/zoom-in "Aumentar zoom"
:whiteboard/zoom-out "Diminuir zoom"
:whiteboard/select "Selecionar"
:whiteboard/pan "Arrastar"
:whiteboard/add-block-or-page "Adicionar bloco ou página"
:whiteboard/draw "Desenhar"
:whiteboard/highlight "Destacar"
:whiteboard/eraser "Borracha"
:whiteboard/connector "Conector"
:whiteboard/text "Texto"
:whiteboard/color "Cor"
:whiteboard/select-custom-color "Selecionar cor personalizada"
:whiteboard/opacity "Opacidade"
:whiteboard/extra-small "Extra Pequeno"
:whiteboard/small "Pequeno"
:whiteboard/medium "Médio"
:whiteboard/large "Grande"
:whiteboard/extra-large "Extra Grande"
:whiteboard/huge "Enorme"
:whiteboard/scale-level "Nível de escala"
:whiteboard/rectangle "Retângulo"
:whiteboard/circle "Círculo"
:whiteboard/triangle "Triângulo"
:whiteboard/shape "Forma"
:whiteboard/open-page "Abrir página"
:whiteboard/open-page-in-sidebar "Abrir página na barra lateral"
:whiteboard/remove-link "Remover link"
:whiteboard/link "Link"
:whiteboard/references "Referências"
:whiteboard/link-to-any-page-or-block "Link para qualquer página ou bloco"
:whiteboard/start-typing-to-search "Comece a digitar para pesquisar..."
:whiteboard/new-block-no-colon "Novo bloco"
:whiteboard/new-block "Novo bloco:"
:whiteboard/new-page "Nova página:"
:whiteboard/new-whiteboard "Novo whiteboard"
:whiteboard/search-only-blocks "Pesquisar apenas blocos"
:whiteboard/search-only-pages "Pesquisar apenas páginas"
:whiteboard/cache-outdated "O cache está desatualizado. Clique no botão 'Re-indexar' no menu suspenso do grafo."
:whiteboard/shape-quick-links "Links Rápidos de Forma"
:whiteboard/edit-pdf "Editar PDF"
:whiteboard/dashboard-card-new-whiteboard "Novo whiteboard"
:whiteboard/dashboard-card-created "Criado "
:whiteboard/dashboard-card-edited "Editado "
:whiteboard/toggle-grid "Alternar grade"
:whiteboard/snap-to-grid "Encaixar na grade"
:whiteboard/toggle-pen-mode "Alternar modo de caneta"
:flashcards/modal-welcome-title "Hora de criar um cartão!"
:flashcards/modal-welcome-desc-1 "Você pode adicionar \"#card\" a qualquer bloco para transformá-lo em um cartão ou acionar \"/cloze\" para adicionar algumas partes ocultas."
:flashcards/modal-welcome-desc-2 "Você pode "
:flashcards/modal-welcome-desc-3 "clique neste link"
:flashcards/modal-welcome-desc-4 " para verificar a documentação."
:flashcards/modal-btn-show-answers "Mostrar respostas"
:flashcards/modal-btn-hide-answers "Esconder respostas"
:flashcards/modal-btn-show-clozes "Mostrar partes ocultas"
:flashcards/modal-btn-next-card "Próximo"
:flashcards/modal-btn-reset "Redefinir"
:flashcards/modal-btn-reset-tip "Redefina este cartão para que você possa revisá-lo imediatamente."
:flashcards/modal-btn-forgotten "Esquecido"
:flashcards/modal-btn-remembered "Lembrado"
:flashcards/modal-btn-recall "Levou um tempo para lembrar"
:flashcards/modal-finished "Parabéns, você revisou todos os cartões para esta consulta, nos vemos na próxima vez! 💯"
:flashcards/modal-select-all "Todos"
:flashcards/modal-select-switch "Alternar para"
:flashcards/modal-current-total "Atual/Total"
:flashcards/modal-overdue-total "Atrasado/Total"
:flashcards/modal-toggle-preview-mode "Alternar modo de pré-visualização"
:flashcards/modal-toggle-random-mode "Alternar modo aleatório"
:whiteboard/undo "Desfazer"
:whiteboard/redo "Refazer"
:whiteboard/zoom-in "Aumentar zoom"
:whiteboard/zoom-out "Diminuir zoom"
:whiteboard/select "Selecionar"
:whiteboard/pan "Arrastar"
:whiteboard/add-block-or-page "Adicionar bloco ou página"
:whiteboard/draw "Desenhar"
:whiteboard/highlight "Destacar"
:whiteboard/eraser "Borracha"
:whiteboard/connector "Conector"
:whiteboard/text "Texto"
:whiteboard/color "Cor"
:whiteboard/select-custom-color "Selecionar cor personalizada"
:whiteboard/opacity "Opacidade"
:whiteboard/extra-small "Extra Pequeno"
:whiteboard/small "Pequeno"
:whiteboard/medium "Médio"
:whiteboard/large "Grande"
:whiteboard/extra-large "Extra Grande"
:whiteboard/huge "Enorme"
:whiteboard/scale-level "Nível de escala"
:whiteboard/rectangle "Retângulo"
:whiteboard/circle "Círculo"
:whiteboard/triangle "Triângulo"
:whiteboard/shape "Forma"
:whiteboard/open-page "Abrir página"
:whiteboard/open-page-in-sidebar "Abrir página na barra lateral"
:whiteboard/remove-link "Remover link"
:whiteboard/link "Link"
:whiteboard/references "Referências"
:whiteboard/link-to-any-page-or-block "Link para qualquer página ou bloco"
:whiteboard/start-typing-to-search "Comece a digitar para pesquisar..."
:whiteboard/new-block-no-colon "Novo bloco"
:whiteboard/new-block "Novo bloco:"
:whiteboard/new-page "Nova página:"
:whiteboard/new-whiteboard "Novo whiteboard"
:whiteboard/search-only-blocks "Pesquisar apenas blocos"
:whiteboard/search-only-pages "Pesquisar apenas páginas"
:whiteboard/cache-outdated "O cache está desatualizado. Clique no botão 'Re-indexar' no menu suspenso do grafo."
:whiteboard/shape-quick-links "Links Rápidos de Forma"
:whiteboard/edit-pdf "Editar PDF"
:whiteboard/dashboard-card-new-whiteboard "Novo whiteboard"
:whiteboard/dashboard-card-created "Criado "
:whiteboard/dashboard-card-edited "Editado "
:whiteboard/toggle-grid "Alternar grade"
:whiteboard/snap-to-grid "Encaixar na grade"
:whiteboard/toggle-pen-mode "Alternar modo de caneta"
:flashcards/modal-welcome-title "Hora de criar um cartão!"
:flashcards/modal-welcome-desc-1 "Você pode adicionar \"#card\" a qualquer bloco para transformá-lo em um cartão ou acionar \"/cloze\" para adicionar algumas partes ocultas."
:flashcards/modal-welcome-desc-2 "Você pode "
:flashcards/modal-welcome-desc-3 "clique neste link"
:flashcards/modal-welcome-desc-4 " para verificar a documentação."
:flashcards/modal-btn-show-answers "Mostrar respostas"
:flashcards/modal-btn-hide-answers "Esconder respostas"
:flashcards/modal-btn-show-clozes "Mostrar partes ocultas"
:flashcards/modal-btn-next-card "Próximo"
:flashcards/modal-btn-reset "Redefinir"
:flashcards/modal-btn-reset-tip "Redefina este cartão para que você possa revisá-lo imediatamente."
:flashcards/modal-btn-forgotten "Esquecido"
:flashcards/modal-btn-remembered "Lembrado"
:flashcards/modal-btn-recall "Levou um tempo para lembrar"
:flashcards/modal-finished "Parabéns, você revisou todos os cartões para esta consulta, nos vemos na próxima vez! 💯"
:flashcards/modal-select-all "Todos"
:flashcards/modal-select-switch "Alternar para"
:flashcards/modal-current-total "Atual/Total"
:flashcards/modal-overdue-total "Atrasado/Total"
:flashcards/modal-toggle-preview-mode "Alternar modo de pré-visualização"
:flashcards/modal-toggle-random-mode "Alternar modo aleatório"
:home "Início"
:new-page "Nova página:"
:new-graph "Adicionar novo grafo"
:graph "Grafo"
:graph/all-graphs "Todos os grafos"
:graph/local-graphs "Grafos locais:"
:graph/remote-graphs "Grafos remotos:"
:export "Exportar"
:export-graph "Exportar grafo"
:export-page "Exportar página"
:export-markdown "Exportar como Markdown padrão (sem propriedades de bloco)"
:export-opml "Exportar como OPML"
:export-public-pages "Exportar páginas públicas"
:export-json "Exportar como JSON"
:export-roam-json "Exportar como Roam JSON"
:export-edn "Exportar como EDN"
:export-transparent-background "Fundo transparente"
:export-copy-to-clipboard "Copiar para a área de transferência"
:export-copied-to-clipboard "Copiado para a área de transferência!"
:export-save-to-file "Salvar em arquivo"
:all-graphs "Todos os grafos"
:all-pages "Todas as páginas"
:all-whiteboards "Todos os whiteboards"
:all-files "Todos os arquivos"
:remove-orphaned-pages "Remover páginas órfãs?"
:all-journals "Todos os diários"
:settings "Configurações"
:plugins "Plugins"
:themes "Temas"
:relaunch-confirm-to-work "Necessita reiniciar o aplicativo para funcionar. Deseja reiniciá-lo agora?"
:import "Importar"
:importing "Importando"
:join-community "Junte-se à comunidade"
:discourse-title "Nosso fórum!"
:help-shortcut-title "Clique para verificar os atalhos e outras dicas"
:loading "Carregando..."
:parsing-files "Analisando arquivos"
:loading-files "Carregando arquivos"
:login "Entrar"
:logout "Sair"
:home "Início"
:new-page "Nova página:"
:new-graph "Adicionar novo grafo"
:graph "Grafo"
:graph/all-graphs "Todos os grafos"
:graph/local-graphs "Grafos locais:"
:graph/remote-graphs "Grafos remotos:"
:export "Exportar"
:export-graph "Exportar grafo"
:export-page "Exportar página"
:export-markdown "Exportar como Markdown padrão (sem propriedades de bloco)"
:export-opml "Exportar como OPML"
:export-public-pages "Exportar páginas públicas"
:export-json "Exportar como JSON"
:export-roam-json "Exportar como Roam JSON"
:export-edn "Exportar como EDN"
:export-transparent-background "Fundo transparente"
:export-copy-to-clipboard "Copiar para a área de transferência"
:export-copied-to-clipboard "Copiado para a área de transferência!"
:export-save-to-file "Salvar em arquivo"
:all-graphs "Todos os grafos"
:all-pages "Todas as páginas"
:all-whiteboards "Todos os whiteboards"
:all-files "Todos os arquivos"
:remove-orphaned-pages "Remover páginas órfãs?"
:all-journals "Todos os diários"
:settings "Configurações"
:plugins "Plugins"
:themes "Temas"
:relaunch-confirm-to-work "Necessita reiniciar o aplicativo para funcionar. Deseja reiniciá-lo agora?"
:import "Importar"
:importing "Importando"
:join-community "Junte-se à comunidade"
:discourse-title "Nosso fórum!"
:help-shortcut-title "Clique para verificar os atalhos e outras dicas"
:loading "Carregando..."
:parsing-files "Analisando arquivos"
:loading-files "Carregando arquivos"
:login "Entrar"
:logout "Sair"
:logout-user "Sair ({1})"
:download "Baixar"
:language "Idioma"
@@ -496,7 +496,7 @@
:help/shortcut-page-title "Atalhos de teclado"
:plugin/installed "Instalado"
:plugin/installed "Instalado"
:plugin/installed-plugin "Plugin instalado: {1}"
:plugin/not-installed "Não instalado"
:plugin/installing "Instalando"
@@ -530,22 +530,22 @@
:plugin/unpacked-tips "Selecione o diretório do plugin"
:plugin/contribute "✨ Escreva e envie um novo plugin"
:plugin/up-to-date "Está atualizado {1}"
:plugin/custom-js-alert "Encontrado o arquivo custom.js, permitir a execução? (Se você não entende o conteúdo deste arquivo, é recomendável não permitir a execução, pois isso tem certos riscos de segurança.)"
:plugin/security-warning "Os plugins podem acessar o seu grafo e os seus arquivos locais, fazer requisições de rede.
:plugin/custom-js-alert "Encontrado o arquivo custom.js, permitir a execução? (Se você não entende o conteúdo deste arquivo, é recomendável não permitir a execução, pois isso tem certos riscos de segurança.)"
:plugin/security-warning "Os plugins podem acessar o seu grafo e os seus arquivos locais, fazer requisições de rede.
Eles também podem causar corrupção ou perda de dados. Estamos trabalhando em regras de acesso adequadas para os seus grafos.
Enquanto isso, certifique-se de fazer backups regulares dos seus grafos e só instale os plugins quando puder ler e
entender o código-fonte."
:plugin/search-plugin "Pesquisar plugins"
:plugin/open-preferences "Abrir Preferências"
:plugin/open-logseq-dir "Abrir"
:plugin/remote-error "Erro remoto: "
:plugin/checking-for-updates "Verificando atualizações de plugins ..."
:plugin/list-of-updates "Atualizações de plugins: "
:plugin/auto-check-for-updates "Verificação automática de atualizações"
:plugin.install-from-file/menu-title "Instalar a partir de plugins.edn"
:plugin.install-from-file/title "Instalar plugins a partir de plugins.edn"
:plugin.install-from-file/notice "Os seguintes plugins substituirão os seus plugins:"
:plugin.install-from-file/success "Todos os plugins foram instalados!"
:plugin/search-plugin "Pesquisar plugins"
:plugin/open-preferences "Abrir Preferências"
:plugin/open-logseq-dir "Abrir"
:plugin/remote-error "Erro remoto: "
:plugin/checking-for-updates "Verificando atualizações de plugins ..."
:plugin/list-of-updates "Atualizações de plugins: "
:plugin/auto-check-for-updates "Verificação automática de atualizações"
:plugin.install-from-file/menu-title "Instalar a partir de plugins.edn"
:plugin.install-from-file/title "Instalar plugins a partir de plugins.edn"
:plugin.install-from-file/notice "Os seguintes plugins substituirão os seus plugins:"
:plugin.install-from-file/success "Todos os plugins foram instalados!"
:pdf/copy-ref "Copiar referência"
:pdf/copy-text "Copiar texto"
@@ -612,6 +612,188 @@
:header/go-back "Voltar"
:header/go-forward "Avançar"
:command.auto-complete/complete "Auto-completar: Escolher item selecionado"
:command.auto-complete/next "Auto-completar: Selecionar próximo item"
:command.auto-complete/open-link "Auto-completar: Abrir item selecionado no navegador"
:command.auto-complete/prev "Auto-completar: Selecionar item anterior"
:command.auto-complete/shift-complete "Auto-completar: Abrir item selecionado na barra lateral"
:command.cards/forgotten "Cartões: esquecidos"
:command.cards/next-card "Cartões: próximo cartão"
:command.cards/recall "Cartões: lembrar em algum tempo"
:command.cards/remembered "Cartões: lembrados"
:command.cards/toggle-answers "Cartões: mostrar/ocultar respostas/ocultados"
:command.command/run "Executar comando git"
:command.command/toggle-favorite "Adicionar/remover dos favoritos"
:command.command-palette/toggle "Pesquisar comandos"
:command.date-picker/complete "Seletor de data: Escolher dia selecionado"
:command.date-picker/next-day "Seletor de data: Selecionar próximo dia"
:command.date-picker/next-week "Seletor de data: Selecionar próxima semana"
:command.date-picker/prev-day "Seletor de data: Selecionar dia anterior"
:command.date-picker/prev-week "Seletor de data: Selecionar semana anterior"
:command.dev/show-block-ast "(Dev) Mostrar AST do bloco"
:command.dev/show-block-data "(Dev) Mostrar dados do bloco"
:command.dev/show-page-ast "(Dev) Mostrar AST da página"
:command.dev/show-page-data "(Dev) Mostrar dados da página"
:command.editor/backspace "Backspace / Apagar"
:command.editor/backward-kill-word "Excluir uma palavra com backspace"
:command.editor/backward-word "Mover cursor para trás da palavra"
:command.editor/beginning-of-block "Mover cursor para o início de um bloco"
:command.editor/bold "Negrito"
:command.editor/clear-block "Excluir conteúdo inteiro do bloco"
:command.editor/collapse-block-children "Contrair"
:command.editor/copy "Copiar (copia seleção ou referência de bloco)"
:command.editor/copy-current-file "Copiar arquivo atual"
:command.editor/copy-embed "Copiar incorporação de bloco apontando para o bloco atual"
:command.editor/copy-page-url "Copiar URL da página"
:command.editor/copy-text "Copiar seleções como texto"
:command.editor/cut "Cortar"
:command.editor/cycle-todo "Rotacionar o estado TODO do item atual"
:command.editor/delete "Delete / Tecla Excluir"
:command.editor/delete-selection "Excluir blocos selecionados"
:command.editor/down "Mover cursor para baixo / Selecionar para baixo"
:command.editor/end-of-block "Mover cursor para o final de um bloco"
:command.editor/escape-editing "Sair da edição"
:command.editor/expand-block-children "Expandir"
:command.editor/follow-link "Seguir link sob o cursor"
:command.editor/forward-kill-word "Excluir uma palavra com tecla delete"
:command.editor/forward-word "Mover cursor para frente da palavra"
:command.editor/highlight "Destacar"
:command.editor/indent "Indentar bloco"
:command.editor/insert-link "Link de HTML"
:command.editor/insert-youtube-timestamp "Inserir timestamp do YouTube"
:command.editor/italics "Itálico"
:command.editor/kill-line-after "Excluir linha após a posição do cursor"
:command.editor/kill-line-before "Excluir linha antes da posição do cursor"
:command.editor/left "Mover cursor para a esquerda / Abrir bloco selecionado no início"
:command.editor/move-block-down "Mover bloco para baixo"
:command.editor/move-block-up "Mover bloco para cima"
:command.editor/new-block "Criar novo bloco"
:command.editor/new-line "Nova linha no bloco atual"
:command.editor/new-whiteboard "Novo whiteboard"
:command.editor/open-edit "Editar bloco selecionado"
:command.editor/open-file-in-default-app "Abrir arquivo no aplicativo padrão"
:command.editor/open-file-in-directory "Abrir arquivo no diretório pai"
:command.editor/open-link-in-sidebar "Abrir link na barra lateral"
:command.editor/outdent "Diminuir recuo do bloco"
:command.editor/paste-text-in-one-block-at-point "Colar texto em um bloco no lugar"
:command.editor/redo "Refazer"
:command.editor/replace-block-reference-at-point "Substituir referência de bloco pelo seu conteúdo no lugar"
:command.editor/right "Mover cursor para a direita / Abrir bloco selecionado no final"
:command.editor/select-all-blocks "Selecionar todos os blocos"
:command.editor/select-block-down "Selecionar bloco abaixo"
:command.editor/select-block-up "Selecionar bloco acima"
:command.editor/select-down "Selecionar conteúdo abaixo"
:command.editor/select-parent "Selecionar bloco pai"
:command.editor/select-up "Selecionar conteúdo acima"
:command.editor/strike-through "Riscar"
:command.editor/toggle-number-list "Alternar lista numerada"
:command.editor/toggle-open-blocks "Alternar blocos abertos (contrair ou expandir todos os blocos)"
:command.editor/toggle-undo-redo-mode "Alternar modo desfazer/refazer (global ou apenas nesta página)"
:command.editor/undo "Desfazer"
:command.editor/up "Mover cursor para cima / Selecionar para cima"
:command.editor/zoom-in "Dar zoom no bloco em edição / Avançar caso contrário"
:command.editor/zoom-out "Dar zoom out no bloco em edição / Retroceder caso contrário"
:command.git/commit "Criar commit git com mensagem"
:command.go/all-graphs "Ir para todos os grafos"
:command.go/all-pages "Ir para todas as páginas"
:command.go/backward "Retroceder"
:command.go/electron-find-in-page "Encontrar texto na página"
:command.go/electron-jump-to-the-next "Pular para a próxima correspondência na sua busca na barra de pesquisa"
:command.go/electron-jump-to-the-previous "Pular para a correspondência anterior na sua busca na barra de pesquisa"
:command.go/flashcards "Alternar cartões de memorização"
:command.go/forward "Avançar"
:command.go/graph-view "Ir para visualização de grafo"
:command.go/home "Ir para a página inicial"
:command.go/journals "Ir para diários"
:command.go/keyboard-shortcuts "Ir para atalhos de teclado"
:command.go/next-journal "Ir para o próximo diário"
:command.go/prev-journal "Ir para o diário anterior"
:command.go/search "Pesquisar páginas e blocos"
:command.go/search-in-page "Pesquisar blocos na página"
:command.go/tomorrow "Ir para amanhã"
:command.go/whiteboards "Ir para whiteboards"
:command.graph/add "Adicionar um grafo"
:command.graph/export-as-html "Exportar páginas de grafos públicos como HTML"
:command.graph/open "Selecionar grafo para abrir"
:command.graph/re-index "Reindexar grafo atual"
:command.graph/remove "Remover um grafo"
:command.misc/copy "Copiar"
:command.pdf/close "PDF: Fechar documento PDF atual"
:command.pdf/find "PDF: Pesquisar texto do documento PDF atual"
:command.pdf/next-page "PDF: Próxima página do documento PDF atual"
:command.pdf/previous-page "PDF: Página anterior do documento PDF atual"
:command.search/re-index "Reconstruir índice de pesquisa"
:command.sidebar/clear "Limpar todos na barra lateral direita"
:command.sidebar/close-top "Fechar o item superior na barra lateral direita"
:command.sidebar/open-today-page "Abrir a página de hoje na barra lateral direita"
:command.ui/clear-all-notifications "Limpar todas as notificações"
:command.ui/cycle-color "Mudar cor"
:command.ui/cycle-color-off "Desativar mudança de cor"
:command.ui/goto-plugins "Ir para o painel de plugins"
:command.ui/install-plugins-from-file "Instalar plugins do arquivo plugins.edn"
:command.ui/select-theme-color "Selecionar cores de tema disponíveis"
:command.ui/toggle-brackets "Alternar se deve exibir colchetes"
:command.ui/toggle-contents "Alternar conteúdo na barra lateral"
:command.ui/toggle-document-mode "Alternar modo de documento"
:command.ui/toggle-help "Alternar ajuda"
:command.ui/toggle-left-sidebar "Alternar barra lateral esquerda"
:command.ui/toggle-right-sidebar "Alternar barra lateral direita"
:command.ui/toggle-settings "Alternar configurações"
:command.ui/toggle-theme "Alternar entre tema escuro/claro"
:command.ui/toggle-wide-mode "Alternar modo amplo"
:command.whiteboard/bring-forward "Mover para frente"
:command.whiteboard/bring-to-front "Mover para a frente"
:command.whiteboard/clone-down "Clonar para baixo"
:command.whiteboard/clone-left "Clonar para a esquerda"
:command.whiteboard/clone-right "Clonar para a direita"
:command.whiteboard/clone-up "Clonar para cima"
:command.whiteboard/connector "Ferramenta de conexão"
:command.whiteboard/ellipse "Ferramenta de elipse"
:command.whiteboard/eraser "Ferramenta de borracha"
:command.whiteboard/group "Seleção de grupo"
:command.whiteboard/highlighter "Ferramenta de marca-texto"
:command.whiteboard/lock "Travar seleção"
:command.whiteboard/pan "Ferramenta de movimentação"
:command.whiteboard/pencil "Ferramenta de lápis"
:command.whiteboard/portal "Ferramenta de portal"
:command.whiteboard/rectangle "Ferramenta de retângulo"
:command.whiteboard/reset-zoom "Redefinir zoom"
:command.whiteboard/select "Ferramenta de seleção"
:command.whiteboard/send-backward "Mover para trás"
:command.whiteboard/send-to-back "Mover para trás"
:command.whiteboard/text "Ferramenta de texto"
:command.whiteboard/toggle-grid "Alternar grade do canvas"
:command.whiteboard/ungroup "Desagrupar seleção"
:command.whiteboard/unlock "Destravar seleção"
:command.whiteboard/zoom-to-fit "Zoom para desenho"
:command.whiteboard/zoom-to-selection "Zoom para ajustar à seleção"
:command.window/close "Fechar janela"
:help/search "Pesquisar páginas/blocos/comandos"
:linked-references/filter-directions "Clique para incluir e shift-clique para excluir. Clique novamente para remover."
:linked-references/filter-excludes "Excluir: "
:linked-references/filter-heading "Filtrar"
:linked-references/filter-includes "Incluir: "
:linked-references/reference-count (fn [filtered-count total] (str (when filtered-count (str filtered-count " de ")) total (if (= total 1) " Referência Vinculada" " Referências Vinculadas")))
:settings-page/git-commit-on-close "Commitar mudanças no Git ao fechar a janela"
:unlinked-references/reference-count (fn [total] (str total (if (= total 1) " Referência Não-Vinculada" " Referências Não-Vinculadas")))
:whiteboard/reference-count (fn [refs-count] (if (= refs-count 1) "Referência" "Referências"))
;; Allowed duplicates - start
:settings-of-plugins "Plugins"
:whiteboard "Whiteboard"
:whiteboards "Whiteboards"
:on-boarding/quick-tour-journal-page-desc-2 "[[link]]"
:plugin/downloads "Downloads"
:right-side-bar/history-global "global"
:right-side-bar/whiteboards "Whiteboards"
:search-item/whiteboard "Whiteboard"
:settings-page/enable-whiteboards "Whiteboards"
:settings-page/plugin-system "Plugins"
:shortcut.category/whiteboard "Whiteboard"
:command.whiteboard/zoom-in "Zoom in"
:command.whiteboard/zoom-out "Zoom out"
;; Allowed duplicates - end
;; Os comandos estão aninhados por enquanto para permanecerem sincronizados com o sistema de atalhos.
;; Outras linguagens não devem aninhar chaves em :commands

View File

@@ -204,11 +204,12 @@
(testing "Add classes to a block"
(editor-handler/save-block! repo fbid "Block 1 #class1 #class2 #class3")
(is (= 3 (count (:block/tags (db/entity [:block/uuid fbid]))))))
(testing "Remove a class from a block"
;; FIXME: @tiensonqin https://github.com/logseq/logseq/commit/575624c650b2b7e919033a79aa5d14b97507d86f
#_(testing "Remove a class from a block"
;; make sure class2 will not be deleted when removing it from the first block
(editor-handler/save-block! repo sbid "Block 2 #class2")
(editor-handler/save-block! repo fbid "Block 1 #class1 #class3")
(is (= 2 (count (:block/tags (db/entity [:block/uuid fbid]))))))
(editor-handler/save-block! repo sbid "Block 2 #class2")
(editor-handler/save-block! repo fbid "Block 1 #class1 #class3")
(is (= 2 (count (:block/tags (db/entity [:block/uuid fbid]))))))
(testing "Get block's classes properties"
;; set c2 as parent of c3
(let [c3 (db/entity [:block/name "class3"])]
@@ -300,8 +301,8 @@
(testing "Convert property input string according to its schema type"
(let [test-uuid (random-uuid)]
(are [x y]
(= (let [[schema-type value] x]
(db-property-handler/convert-property-input-string schema-type value)) y)
(= (let [[schema-type value] x]
(db-property-handler/convert-property-input-string schema-type value)) y)
[:number "1"] 1
[:number "1.2"] 1.2
[:page (str test-uuid)] test-uuid
@@ -317,8 +318,7 @@
(testing "Replace property key with its uuid"
(let [result (db-property-handler/replace-key-with-id {"property 1" "value 1"
"property 2" "value 2"})]
(is (every? uuid? (keys result))))
)
(is (every? uuid? (keys result)))))
(testing "Throw an error if a property doesn't exists"
(is (thrown? js/Error (db-property-handler/replace-key-with-id {"property not exists yet" "value 1"})))))

View File

@@ -1654,7 +1654,7 @@ browserify-zlib@^0.2.0:
dependencies:
pako "~1.0.5"
browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.16.6, browserslist@^4.20.3, browserslist@^4.21.10, browserslist@^4.21.4, browserslist@^4.21.9:
browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.21.10, browserslist@^4.21.4, browserslist@^4.21.9:
version "4.21.11"
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.11.tgz#35f74a3e51adc4d193dcd76ea13858de7b8fecb8"
integrity sha512-xn1UXOKUz7DjdGlg9RrUr0GGiWzI97UQJnugHtH0OLDfJB7jMgoIkYvRIEO1l9EeEERVqeqLYOcFBW9ldjypbQ==
@@ -5100,6 +5100,11 @@ nanoid@^3.3.4:
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c"
integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==
nanoid@^3.3.7:
version "3.3.7"
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8"
integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==
nanomatch@^1.2.9:
version "1.2.13"
resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"
@@ -5901,22 +5906,22 @@ postcss-cli@10.0.0:
slash "^4.0.0"
yargs "^17.0.0"
postcss-colormin@5.3.0, postcss-colormin@^5.3.1:
version "5.3.0"
resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-5.3.0.tgz#3cee9e5ca62b2c27e84fce63affc0cfb5901956a"
integrity sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg==
postcss-colormin@^5.3.1:
version "5.3.1"
resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-5.3.1.tgz#86c27c26ed6ba00d96c79e08f3ffb418d1d1988f"
integrity sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==
dependencies:
browserslist "^4.16.6"
browserslist "^4.21.4"
caniuse-api "^3.0.0"
colord "^2.9.1"
postcss-value-parser "^4.2.0"
postcss-convert-values@5.1.2, postcss-convert-values@^5.1.3:
version "5.1.2"
resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-5.1.2.tgz#31586df4e184c2e8890e8b34a0b9355313f503ab"
integrity sha512-c6Hzc4GAv95B7suy4udszX9Zy4ETyMCgFPUDtWjdFTKH1SE9eFY/jEpHSwTH1QPuwxHpWslhckUQWbNRM4ho5g==
postcss-convert-values@^5.1.3:
version "5.1.3"
resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz#04998bb9ba6b65aa31035d669a6af342c5f9d393"
integrity sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==
dependencies:
browserslist "^4.20.3"
browserslist "^4.21.4"
postcss-value-parser "^4.2.0"
postcss-discard-comments@^5.1.2:
@@ -5980,10 +5985,10 @@ postcss-import@^15.1.0:
read-cache "^1.0.0"
resolve "^1.1.7"
postcss-js@4.0.0, postcss-js@^4.0.1:
version "4.0.0"
resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-4.0.0.tgz#31db79889531b80dc7bc9b0ad283e418dce0ac00"
integrity sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==
postcss-js@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-4.0.1.tgz#61598186f3703bab052f1c4f7d805f3991bee9d2"
integrity sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==
dependencies:
camelcase-css "^2.0.1"
@@ -6007,20 +6012,20 @@ postcss-media-query-parser@^0.2.3:
resolved "https://registry.yarnpkg.com/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz#27b39c6f4d94f81b1a73b8f76351c609e5cef244"
integrity sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==
postcss-merge-longhand@5.1.6, postcss-merge-longhand@^5.1.7:
version "5.1.6"
resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-5.1.6.tgz#f378a8a7e55766b7b644f48e5d8c789ed7ed51ce"
integrity sha512-6C/UGF/3T5OE2CEbOuX7iNO63dnvqhGZeUnKkDeifebY0XqkkvrctYSZurpNE902LDf2yKwwPFgotnfSoPhQiw==
postcss-merge-longhand@^5.1.7:
version "5.1.7"
resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz#24a1bdf402d9ef0e70f568f39bdc0344d568fb16"
integrity sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==
dependencies:
postcss-value-parser "^4.2.0"
stylehacks "^5.1.0"
stylehacks "^5.1.1"
postcss-merge-rules@5.1.2, postcss-merge-rules@^5.1.4:
version "5.1.2"
resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-5.1.2.tgz#7049a14d4211045412116d79b751def4484473a5"
integrity sha512-zKMUlnw+zYCWoPN6yhPjtcEdlJaMUZ0WyVcxTAmw3lkkN/NDMRkOkiuctQEoWAOvH7twaxUUdvBWl0d4+hifRQ==
postcss-merge-rules@^5.1.4:
version "5.1.4"
resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz#2f26fa5cacb75b1402e213789f6766ae5e40313c"
integrity sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==
dependencies:
browserslist "^4.16.6"
browserslist "^4.21.4"
caniuse-api "^3.0.0"
cssnano-utils "^3.1.0"
postcss-selector-parser "^6.0.5"
@@ -6041,12 +6046,12 @@ postcss-minify-gradients@^5.1.1:
cssnano-utils "^3.1.0"
postcss-value-parser "^4.2.0"
postcss-minify-params@5.1.3, postcss-minify-params@^5.1.4:
version "5.1.3"
resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-5.1.3.tgz#ac41a6465be2db735099bbd1798d85079a6dc1f9"
integrity sha512-bkzpWcjykkqIujNL+EVEPOlLYi/eZ050oImVtHU7b4lFS82jPnsCb44gvC6pxaNt38Els3jWYDHTjHKf0koTgg==
postcss-minify-params@^5.1.4:
version "5.1.4"
resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz#c06a6c787128b3208b38c9364cfc40c8aa5d7352"
integrity sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==
dependencies:
browserslist "^4.16.6"
browserslist "^4.21.4"
cssnano-utils "^3.1.0"
postcss-value-parser "^4.2.0"
@@ -6142,12 +6147,12 @@ postcss-ordered-values@^5.1.3:
cssnano-utils "^3.1.0"
postcss-value-parser "^4.2.0"
postcss-reduce-initial@5.1.0, postcss-reduce-initial@^5.1.2:
version "5.1.0"
resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-5.1.0.tgz#fc31659ea6e85c492fb2a7b545370c215822c5d6"
integrity sha512-5OgTUviz0aeH6MtBjHfbr57tml13PuedK/Ecg8szzd4XRMbYxH4572JFG067z+FqBIf6Zp/d+0581glkvvWMFw==
postcss-reduce-initial@^5.1.2:
version "5.1.2"
resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz#798cd77b3e033eae7105c18c9d371d989e1382d6"
integrity sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==
dependencies:
browserslist "^4.16.6"
browserslist "^4.21.4"
caniuse-api "^3.0.0"
postcss-reduce-transforms@^5.1.0:
@@ -6233,7 +6238,7 @@ postcss-value-parser@^4.0.0, postcss-value-parser@^4.1.0, postcss-value-parser@^
resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514"
integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
postcss@8.4.17, postcss@^7.0.14, postcss@^7.0.2, postcss@^7.0.21, postcss@^7.0.26, postcss@^7.0.32, postcss@^7.0.35, postcss@^7.0.6, postcss@^8.2.1, postcss@^8.4.23:
postcss@8.4.17, postcss@^8.2.1:
version "8.4.17"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.17.tgz#f87863ec7cd353f81f7ab2dec5d67d861bbb1be5"
integrity sha512-UNxNOLQydcOFi41yHNMcKRZ39NeXlr8AxGuZJsdub8vIb12fHzcq37DTU/QtbI6WLxNg2gF9Z+8qtRwTj1UI1Q==
@@ -6242,6 +6247,23 @@ postcss@8.4.17, postcss@^7.0.14, postcss@^7.0.2, postcss@^7.0.21, postcss@^7.0.2
picocolors "^1.0.0"
source-map-js "^1.0.2"
postcss@^7.0.14, postcss@^7.0.2, postcss@^7.0.21, postcss@^7.0.26, postcss@^7.0.32, postcss@^7.0.35, postcss@^7.0.6:
version "7.0.39"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.39.tgz#9624375d965630e2e1f2c02a935c82a59cb48309"
integrity sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==
dependencies:
picocolors "^0.2.1"
source-map "^0.6.1"
postcss@^8.4.23:
version "8.4.33"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.33.tgz#1378e859c9f69bf6f638b990a0212f43e2aaa742"
integrity sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==
dependencies:
nanoid "^3.3.7"
picocolors "^1.0.0"
source-map-js "^1.0.2"
posthog-js@1.10.2:
version "1.10.2"
resolved "https://registry.yarnpkg.com/posthog-js/-/posthog-js-1.10.2.tgz#74d6c84f9675b65dfd4ff6f4051ed8d3cb974076"
@@ -7426,7 +7448,7 @@ style-search@^0.1.0:
resolved "https://registry.yarnpkg.com/style-search/-/style-search-0.1.0.tgz#7958c793e47e32e07d2b5cafe5c0bf8e12e77902"
integrity sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==
stylehacks@^5.1.0:
stylehacks@^5.1.1:
version "5.1.1"
resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-5.1.1.tgz#7934a34eb59d7152149fa69d6e9e56f2fc34bcc9"
integrity sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==