mirror of
https://github.com/logseq/logseq.git
synced 2026-06-01 19:01:22 +00:00
Merge branch 'master' into feat/pdf-shape
This commit is contained in:
@@ -278,7 +278,7 @@
|
||||
[["Query" [[:editor/input "{{query }}" {:backward-pos 2}]
|
||||
[:editor/exit]] query-doc]
|
||||
["Zotero" (zotero-steps) "Import Zotero journal article"]
|
||||
["Query table function" [[:editor/input "{{function }}" {:backward-pos 2}]] "Create a query table function"]
|
||||
["Query function" [[:editor/input "{{function }}" {:backward-pos 2}]] "Create a query function"]
|
||||
["Calculator" [[:editor/input "```calc\n\n```" {:type "block"
|
||||
:backward-pos 4}]
|
||||
[:codemirror/focus]] "Insert a calculator"]
|
||||
|
||||
@@ -2707,16 +2707,27 @@
|
||||
(= (:id config)
|
||||
(str (:block/uuid block)))))
|
||||
|
||||
(rum/defc ^:large-vars/cleanup-todo block-container-inner < rum/reactive db-mixins/query
|
||||
[state repo config block]
|
||||
(let [ref? (:ref? config)
|
||||
custom-query? (boolean (:custom-query? config))
|
||||
ref-or-custom-query? (or ref? custom-query?)
|
||||
*navigating-block (get state ::navigating-block)
|
||||
navigating-block (rum/react *navigating-block)
|
||||
navigated? (and (not= (:block/uuid block) navigating-block) navigating-block)
|
||||
block (if (or (and custom-query?
|
||||
(empty? (:block/children block))
|
||||
(defn- build-config [config block {:keys [navigating-block navigated?]}]
|
||||
(cond-> config
|
||||
navigated?
|
||||
(assoc :id (str navigating-block))
|
||||
|
||||
true
|
||||
(update :block merge block)
|
||||
|
||||
;; Each block might have multiple queries, but we store only the first query's result.
|
||||
;; This :query-result atom is used by the query function feature to share results between
|
||||
;; the parent's query block and the children blocks. This works because config is shared
|
||||
;; between parent and children blocks
|
||||
(nil? (:query-result config))
|
||||
(assoc :query-result (atom nil))
|
||||
|
||||
(:ref? config)
|
||||
(block-handler/attach-order-list-state block)))
|
||||
|
||||
(defn- build-block [repo config block* {:keys [navigating-block navigated?]}]
|
||||
(let [block (if (or (and (:custom-query? config)
|
||||
(empty? (:block/children block*))
|
||||
(not (and (:dsl-query? config)
|
||||
(string/includes? (:query config) "not"))))
|
||||
navigated?)
|
||||
@@ -2725,21 +2736,26 @@
|
||||
{:scoped-block-id (:db/id block)})
|
||||
tree (tree/blocks->vec-tree blocks (:block/uuid (first blocks)))]
|
||||
(first tree))
|
||||
block)
|
||||
block (if ref?
|
||||
(merge block (db/sub-block (:db/id block)))
|
||||
block)
|
||||
{:block/keys [uuid children pre-block? refs level format content properties]} block
|
||||
block*)
|
||||
{:block/keys [pre-block? format content] :as block'}
|
||||
(if (:ref? config)
|
||||
(merge block (db/sub-block (:db/id block)))
|
||||
block)]
|
||||
(merge block' (block/parse-title-and-body uuid format pre-block? content))))
|
||||
|
||||
(rum/defc ^:large-vars/cleanup-todo block-container-inner < rum/reactive db-mixins/query
|
||||
[state repo config* block*]
|
||||
(let [ref? (:ref? config*)
|
||||
custom-query? (boolean (:custom-query? config*))
|
||||
ref-or-custom-query? (or ref? custom-query?)
|
||||
*navigating-block (get state ::navigating-block)
|
||||
navigating-block (rum/react *navigating-block)
|
||||
navigated? (and (not= (:block/uuid block*) navigating-block) navigating-block)
|
||||
block (build-block repo config* block* {:navigating-block navigating-block :navigated? navigated?})
|
||||
{:block/keys [uuid children pre-block? refs level content properties]} block
|
||||
{:block.temp/keys [top?]} block
|
||||
config (if navigated? (assoc config :id (str navigating-block)) config)
|
||||
block (merge block (block/parse-title-and-body uuid format pre-block? content))
|
||||
config (build-config config* block {:navigated? navigated? :navigating-block navigating-block})
|
||||
blocks-container-id (:blocks-container-id config)
|
||||
config (update config :block merge block)
|
||||
;; Each block might have multiple queries, but we store only the first query's result
|
||||
config (if (nil? (:query-result config))
|
||||
(assoc config :query-result (atom nil))
|
||||
config)
|
||||
config (if ref? (block-handler/attach-order-list-state config block) config)
|
||||
heading? (:heading properties)
|
||||
*control-show? (get state ::control-show?)
|
||||
db-collapsed? (util/collapsed? block)
|
||||
@@ -2773,18 +2789,18 @@
|
||||
(state/sub-block-selected? blocks-container-id uuid))]
|
||||
[:div.ls-block
|
||||
(cond->
|
||||
{:id block-id
|
||||
:data-refs data-refs
|
||||
:data-refs-self data-refs-self
|
||||
:data-collapsed (and collapsed? has-child?)
|
||||
:class (str uuid
|
||||
(when pre-block? " pre-block")
|
||||
(when (and card? (not review-cards?)) " shadow-md")
|
||||
(when selected? " selected noselect")
|
||||
(when order-list? " is-order-list")
|
||||
(when (string/blank? content) " is-blank"))
|
||||
:blockid (str uuid)
|
||||
:haschild (str (boolean has-child?))}
|
||||
{:id block-id
|
||||
:data-refs data-refs
|
||||
:data-refs-self data-refs-self
|
||||
:data-collapsed (and collapsed? has-child?)
|
||||
:class (str uuid
|
||||
(when pre-block? " pre-block")
|
||||
(when (and card? (not review-cards?)) " shadow-md")
|
||||
(when selected? " selected noselect")
|
||||
(when order-list? " is-order-list")
|
||||
(when (string/blank? content) " is-blank"))
|
||||
:blockid (str uuid)
|
||||
:haschild (str (boolean has-child?))}
|
||||
|
||||
level
|
||||
(assoc :level level)
|
||||
|
||||
@@ -5,7 +5,8 @@
|
||||
[frontend.util :as util]
|
||||
[reitit.frontend.easy :as rfe]
|
||||
[clojure.string :as string]
|
||||
[frontend.handler.notification :as notification]))
|
||||
[frontend.handler.notification :as notification]
|
||||
[frontend.context.i18n :refer [t]]))
|
||||
|
||||
(defn parse-clipboard-data-transfer
|
||||
"parse dataTransfer
|
||||
@@ -42,7 +43,7 @@
|
||||
|
||||
copy-result-to-clipboard! (fn [result]
|
||||
(util/copy-to-clipboard! result)
|
||||
(notification/show! "Copied to clipboard!"))
|
||||
(notification/show! (t :bug-report/inspector-page-copy-notif)))
|
||||
|
||||
reset-step! (fn []
|
||||
(set-step! 0)
|
||||
@@ -56,26 +57,26 @@
|
||||
|
||||
[:div.flex.flex-col
|
||||
(when (= step 0)
|
||||
(list [:div.mx-auto "Press Ctrl+V / ⌘+V to inspect your clipboard data"]
|
||||
[:div.mx-auto "or click here to paste if you are using the mobile version"]
|
||||
(list [:div.mx-auto (t :bug-report/inspector-page-desc-1)]
|
||||
[:div.mx-auto (t :bug-report/inspector-page-desc-2)]
|
||||
;; for mobile
|
||||
[:input.form-input.is-large.transition.duration-150.ease-in-out {:type "text" :placeholder "Long press here to paste if you are on mobile"}]
|
||||
[:input.form-input.is-large.transition.duration-150.ease-in-out {:type "text" :placeholder (t :bug-report/inspector-page-placeholder)}]
|
||||
[:div.flex.justify-between.items-center.mt-2
|
||||
[:div "Something wrong? No problem, click to go back to the previous step."]
|
||||
(ui/button "Go back" :on-click #(util/open-url (rfe/href :bug-report)))]))
|
||||
[:div (t :bug-report/inspector-page-tip)]
|
||||
(ui/button (t :bug-report/inspector-page-btn-back) :on-click #(util/open-url (rfe/href :bug-report)))]))
|
||||
|
||||
(when (= step 1)
|
||||
(list
|
||||
[:div "Here is the data read from clipboard."]
|
||||
[:div (t :bug-report/inspector-page-desc-clipboard)]
|
||||
[:div.flex.justify-between.items-center.mt-2
|
||||
[:div "If this is okay to share, click the copy button."]
|
||||
(ui/button "Copy the result" :on-click #(copy-result-to-clipboard! (js/JSON.stringify (clj->js result) nil 2)))]
|
||||
[:div (t :bug-report/inspector-page-desc-copy)]
|
||||
(ui/button (t :bug-report/inspector-page-btn-copy) :on-click #(copy-result-to-clipboard! (js/JSON.stringify (clj->js result) nil 2)))]
|
||||
[:div.flex.justify-between.items-center.mt-2
|
||||
[:div "Now you can report the result pasted to your clipboard. Please paste the result in the 'Additional Context' section and state where you copied the original content from. Thanks!"]
|
||||
(ui/button "Create an issue" :href header/bug-report-url)]
|
||||
[:div (t :bug-report/inspector-page-desc-create-issue)]
|
||||
(ui/button (t :bug-report/inspector-page-btn-create-issue) :href header/bug-report-url)]
|
||||
[:div.flex.justify-between.items-center.mt-2
|
||||
[:div "Something wrong? No problem, click to go back to the previous step."]
|
||||
(ui/button "Go back" :on-click reset-step!)]
|
||||
[:div (t :bug-report/inspector-page-tip)]
|
||||
(ui/button (t :bug-report/inspector-page-btn-back) :on-click reset-step!)]
|
||||
|
||||
[:pre.whitespace-pre-wrap [:code (js/JSON.stringify (clj->js result) nil 2)]]))]))
|
||||
|
||||
@@ -102,17 +103,17 @@
|
||||
[:div.flex.flex-col.items-center
|
||||
[:div.flex.items-center.mb-2
|
||||
(ui/icon "bug")
|
||||
[:h1.text-3xl.ml-2 "Bug report"]]
|
||||
[:div.opacity-60 "Can you help us out by submitting a bug report? We'll get it sorted out as soon as we can."]]
|
||||
[:h1.text-3xl.ml-2 (t :bug-report/main-title)]]
|
||||
[:div.opacity-60 (t :bug-report/main-desc)]]
|
||||
[:div.cp__bug-report-reporter.rounded-lg.p-8.mt-8
|
||||
[:h1.text-2xl "Is the bug you encountered related to these features?"]
|
||||
[:div.opacity-60 "You can use these handy tools to give us additional information."]
|
||||
(report-item-button "Clipboard helper"
|
||||
"Inspect and collect clipboard data"
|
||||
[:h1.text-2xl (t :bug-report/section-clipboard-title)]
|
||||
[:div.opacity-60 (t :bug-report/section-clipboard-desc)]
|
||||
(report-item-button (t :bug-report/section-clipboard-btn-title)
|
||||
(t :bug-report/section-clipboard-btn-desc)
|
||||
"clipboard"
|
||||
{:on-click #(util/open-url (rfe/href :bug-report-tools {:tool "clipboard-data-inspector"}))})
|
||||
[:div.py-2] ;; divider
|
||||
[:div.flex.flex-col
|
||||
[:h1.text-2xl "Or..."]
|
||||
[:div.opacity-60 "If there are no tools available for you to gather additional information, please report the bug directly."]
|
||||
(report-item-button "Submit a bug report" "Help Make Logseq Better!" "message-report" {:on-click #(util/open-url header/bug-report-url)})]]])
|
||||
[:h1.text-2xl (t :bug-report/section-issues-title)]
|
||||
[:div.opacity-60 (t :bug-report/section-issues-desc)]
|
||||
(report-item-button (t :bug-report/section-issues-btn-title) (t :bug-report/section-issues-btn-desc) "message-report" {:on-click #(util/open-url header/bug-report-url)})]]])
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
[^js jsTour]
|
||||
(let [^js el (js/document.createElement "button")]
|
||||
(.add (.-classList el) "cp__onboarding-skip-quick-tour")
|
||||
(set! (.-innerHTML el) (h/render-html [:span [:i.ti.ti-player-skip-forward] "Skip Quick Tour"]))
|
||||
(set! (.-innerHTML el) (h/render-html [:span [:i.ti.ti-player-skip-forward] (t :on-boarding/quick-tour-btn-skip)]))
|
||||
(.addEventListener el "click" #(.cancel jsTour))
|
||||
[#(.appendChild js/document.body el)
|
||||
#(.removeChild js/document.body el)]))
|
||||
@@ -36,21 +36,21 @@
|
||||
|
||||
(h/render-html
|
||||
[:div.steps
|
||||
[:strong (str "STEP " current)]
|
||||
[:strong (str (t :on-boarding/quick-tour-steps) current)]
|
||||
[:ul (for [i (range total)] [:li {:class (when (= current (inc i)) "active")} i])]]))
|
||||
|
||||
(defn- create-steps! [^js jsTour]
|
||||
[
|
||||
;; step 1
|
||||
{:id "nav-help"
|
||||
:text (h/render-html [:section [:h2 "❓ Help"]
|
||||
[:p "You can always click here for help and other information about Logseq."]])
|
||||
:text (h/render-html [:section [:h2 (t :on-boarding/quick-tour-help-title)]
|
||||
[:p (t :on-boarding/quick-tour-help-desc)]])
|
||||
:attachTo {:element ".cp__sidebar-help-btn" :on "top"}
|
||||
:beforeShowPromise #(if (state/sub :ui/sidebar-open?)
|
||||
(wait-target state/hide-right-sidebar! 700)
|
||||
(p/resolved true))
|
||||
:canClickTarget true
|
||||
:buttons [{:text "Next" :action (.-next jsTour)}]
|
||||
:buttons [{:text (t :on-boarding/quick-tour-btn-next) :action (.-next jsTour)}]
|
||||
:popperOptions {:modifiers [{:name "preventOverflow"
|
||||
:options {:padding 20}}
|
||||
{:name "offset"
|
||||
@@ -58,11 +58,11 @@
|
||||
|
||||
;; step 2
|
||||
{:id "nav-journal-page"
|
||||
:text (h/render-html [:section [:h2 "📆 Daily Journal Page"]
|
||||
:text (h/render-html [:section [:h2 (t :on-boarding/quick-tour-journal-page-title)]
|
||||
[:p
|
||||
[:span "This is today’s daily journal page. Here you can dump your thoughts, learnings and ideas. Don’t worry about organizing. Just write and"]
|
||||
[:a "[[link]]"]
|
||||
[:span "your thoughts."]]])
|
||||
[:span (t :on-boarding/quick-tour-journal-page-desc-1)]
|
||||
[:a (t :on-boarding/quick-tour-journal-page-desc-2)]
|
||||
[:span (t :on-boarding/quick-tour-journal-page-desc-3)]]])
|
||||
|
||||
:attachTo {:element ".page.is-journals .page-title" :on "top-end"}
|
||||
:beforeShowPromise #(if-not (= (util/safe-lower-case (state/get-current-page))
|
||||
@@ -71,8 +71,8 @@
|
||||
(route-handler/redirect-to-page! (date/today))
|
||||
(util/scroll-to-top)) 200)
|
||||
(p/resolved true))
|
||||
:buttons [{:text "Back" :classes "back" :action (.-back jsTour)}
|
||||
{:text "Next" :action (.-next jsTour)}]
|
||||
:buttons [{:text (t :on-boarding/quick-tour-btn-back) :classes "back" :action (.-back jsTour)}
|
||||
{:text (t :on-boarding/quick-tour-btn-next) :action (.-next jsTour)}]
|
||||
:popperOptions {:modifiers [{:name "preventOverflow"
|
||||
:options {:padding 63}}
|
||||
{:name "offset"
|
||||
@@ -80,13 +80,13 @@
|
||||
|
||||
;; step 3
|
||||
{:id "nav-left-sidebar"
|
||||
:text (h/render-html [:section [:h2 "👀 Left Sidebar"]
|
||||
[:p [:span "Open the left sidebar to explore important menu items in Logseq."]]])
|
||||
:text (h/render-html [:section [:h2 (t :on-boarding/quick-tour-left-sidebar-title)]
|
||||
[:p [:span (t :on-boarding/quick-tour-left-sidebar-desc)]]])
|
||||
|
||||
:attachTo {:element "#left-menu" :on "top"}
|
||||
:beforeShowPromise #(p/resolved true)
|
||||
:buttons [{:text "Back" :classes "back" :action (.-back jsTour)}
|
||||
{:text "Next" :action (.-next jsTour)}]
|
||||
:buttons [{:text (t :on-boarding/quick-tour-btn-back) :classes "back" :action (.-back jsTour)}
|
||||
{:text (t :on-boarding/quick-tour-btn-next) :action (.-next jsTour)}]
|
||||
:popperOptions {:modifiers [{:name "preventOverflow"
|
||||
:options {:padding 20}}
|
||||
{:name "offset"
|
||||
@@ -94,15 +94,15 @@
|
||||
|
||||
;; step 4
|
||||
{:id "nav-favorites"
|
||||
:text (h/render-html [:section [:h2 "⭐️ Favorites"]
|
||||
[:p "Pin your favorite pages via the `... `menu on any page."]
|
||||
[:p "We’ve also added some template pages here to help you get started. You can remove these once you start writing your own notes."]])
|
||||
:text (h/render-html [:section [:h2 (t :on-boarding/quick-tour-favorites-title)]
|
||||
[:p (t :on-boarding/quick-tour-favorites-desc-1)]
|
||||
[:p (t :on-boarding/quick-tour-favorites-desc-2)]])
|
||||
:beforeShowPromise #(if-not (state/sub :ui/left-sidebar-open?)
|
||||
(wait-target state/toggle-left-sidebar! 500)
|
||||
(p/resolved true))
|
||||
:attachTo {:element ".nav-content-item.favorites" :on "right"}
|
||||
:buttons [{:text "Back" :classes "back" :action (.-back jsTour)}
|
||||
{:text "Finish" :action (.-complete jsTour)}]}
|
||||
:buttons [{:text (t :on-boarding/quick-tour-btn-back) :classes "back" :action (.-back jsTour)}
|
||||
{:text (t :on-boarding/quick-tour-btn-finish) :action (.-complete jsTour)}]}
|
||||
])
|
||||
|
||||
(defn- create-steps-file-sync! [^js jsTour]
|
||||
@@ -164,7 +164,7 @@
|
||||
(wait-target ".nav-header .whiteboard" 500)
|
||||
(util/scroll-to-top))
|
||||
:canClickTarget true
|
||||
:buttons [{:text "Next" :action (.-next jsTour)}]
|
||||
:buttons [{:text (t :on-boarding/tour-whiteboard-btn-next) :action (.-next jsTour)}]
|
||||
:popperOptions {:modifiers [{:name "preventOverflow"
|
||||
:options {:padding 20}}
|
||||
{:name "offset"
|
||||
@@ -178,8 +178,8 @@
|
||||
(route-handler/redirect-to-whiteboard-dashboard!)
|
||||
(wait-target ".dashboard-create-card" 500))
|
||||
:attachTo {:element ".dashboard-create-card" :on "bottom"}
|
||||
:buttons [{:text "Back" :classes "back" :action (.-back jsTour)}
|
||||
{:text "Finish" :action (.-complete jsTour)}]
|
||||
:buttons [{:text (t :on-boarding/tour-whiteboard-btn-back) :classes "back" :action (.-back jsTour)}
|
||||
{:text (t :on-boarding/tour-whiteboard-btn-finish) :action (.-complete jsTour)}]
|
||||
:popperOptions {:modifiers [{:name "preventOverflow"
|
||||
:options {:padding 20}}
|
||||
{:name "offset"
|
||||
@@ -277,7 +277,7 @@
|
||||
|
||||
(defn init []
|
||||
(command-palette/register {:id :document/quick-tour
|
||||
:desc "Quick tour for onboarding"
|
||||
:desc (t :on-boarding/command-palette-quick-tour)
|
||||
:action #(ready start)})
|
||||
|
||||
;; TODO: fix logic
|
||||
|
||||
@@ -30,13 +30,13 @@
|
||||
|
||||
[:h1.text-xl
|
||||
(if picker?
|
||||
[:span [:strong (ui/icon "heart")] "Welcome to " [:strong "Logseq!"]]
|
||||
[:span [:strong (ui/icon "file-import")] "Import existing notes"])]
|
||||
[:span [:strong (ui/icon "heart")] (t :on-boarding/main-title) [:strong "Logseq!"]]
|
||||
[:span [:strong (ui/icon "file-import")] (t :on-boarding/importing-main-title)])]
|
||||
|
||||
[:h2
|
||||
(if picker?
|
||||
"First you need to choose a folder where Logseq will store your thoughts, ideas, notes."
|
||||
"You can also do this later in the app.")]
|
||||
(t :on-boarding/main-desc)
|
||||
(t :on-boarding/importing-main-desc))]
|
||||
|
||||
content])])
|
||||
|
||||
@@ -93,8 +93,8 @@
|
||||
|
||||
(if parsing?
|
||||
(ui/loading "")
|
||||
[[:strong "Choose a folder"]
|
||||
[:small "Open existing directory or Create a new one"]])]]]
|
||||
[[:strong (t :on-boarding/section-btn-title)]
|
||||
[:small (t :on-boarding/section-btn-desc)]])]]]
|
||||
[:div.px-5
|
||||
(ui/admonition :warning
|
||||
(widgets/native-fs-api-alert))]))]
|
||||
@@ -102,22 +102,22 @@
|
||||
[:p.flex
|
||||
[:i.as-flex-center (ui/icon "zoom-question" {:style {:fontSize "22px"}})]
|
||||
[:span.flex-1.flex.flex-col
|
||||
[:strong "How Logseq saves your work"]
|
||||
[:small.opacity-60 "Inside the directory you choose, Logseq will create 4 folders."]]]
|
||||
[:strong (t :on-boarding/section-title)]
|
||||
[:small.opacity-60 (t :on-boarding/section-desc)]]]
|
||||
|
||||
[:p.text-sm.pt-5.tracking-wide
|
||||
[:span (str "Each page is a file stored only on your " DEVICE ".")]
|
||||
[:span (str (t :on-boarding/section-tip-1) DEVICE ".")]
|
||||
[:br]
|
||||
[:span "You may choose to sync it later."]]
|
||||
[:span (t :on-boarding/section-tip-2)]]
|
||||
|
||||
[:ul
|
||||
(for [[title label icon]
|
||||
[["Graphics & Documents" "/assets" "whiteboard"]
|
||||
["Daily notes" "/journals" "calendar-plus"]
|
||||
["PAGES" "/pages" "page"]
|
||||
[[(t :on-boarding/section-assets) "/assets" "whiteboard"]
|
||||
[(t :on-boarding/section-journals) "/journals" "calendar-plus"]
|
||||
[(t :on-boarding/section-pages) "/pages" "page"]
|
||||
[]
|
||||
["APP Internal" "/logseq" "tool"]
|
||||
["Config File" "/logseq/config.edn"]]]
|
||||
[(t :on-boarding/section-app) "/logseq" "tool"]
|
||||
[(t :on-boarding/section-config) "/logseq/config.edn"]]]
|
||||
(if-not title
|
||||
[:li.hr]
|
||||
[:li
|
||||
@@ -221,14 +221,14 @@
|
||||
:importer
|
||||
[:article.flex.flex-col.items-center.importer.py-16.px-8
|
||||
[:section.c.text-center
|
||||
[:h1 "Do you already have notes that you want to import?"]
|
||||
[:h2 "If they are in a JSON, EDN or Markdown format Logseq can work with them."]]
|
||||
[:h1 (t :on-boarding/importing-title)]
|
||||
[:h2 (t :on-boarding/importing-desc)]]
|
||||
[:section.d.md:flex
|
||||
[:label.action-input.flex.items-center.mx-2.my-2
|
||||
[:span.as-flex-center [:i (svg/roam-research 28)]]
|
||||
[:div.flex.flex-col
|
||||
[[:strong "RoamResearch"]
|
||||
[:small "Import a JSON Export of your Roam graph"]]]
|
||||
[:small (t :on-boarding/importing-roam-desc)]]]
|
||||
[:input.absolute.hidden
|
||||
{:id "import-roam"
|
||||
:type "file"
|
||||
@@ -238,7 +238,7 @@
|
||||
[:span.as-flex-center [:i (svg/logo 28)]]
|
||||
[:span.flex.flex-col
|
||||
[[:strong "EDN / JSON"]
|
||||
[:small "Import an EDN or a JSON Export of your Logseq graph"]]]
|
||||
[:small (t :on-boarding/importing-lsq-desc)]]]
|
||||
[:input.absolute.hidden
|
||||
{:id "import-lsq"
|
||||
:type "file"
|
||||
@@ -248,7 +248,7 @@
|
||||
[:span.as-flex-center (ui/icon "sitemap" {:style {:fontSize "26px"}})]
|
||||
[:span.flex.flex-col
|
||||
[[:strong "OPML"]
|
||||
[:small " Import OPML files"]]]
|
||||
[:small (t :on-boarding/importing-opml-desc)]]]
|
||||
|
||||
[:input.absolute.hidden
|
||||
{:id "import-opml"
|
||||
|
||||
@@ -141,10 +141,8 @@
|
||||
(when-not (or built-in? dsl-query?)
|
||||
(when collapsed?
|
||||
(editor-handler/collapse-block! current-block-uuid))))
|
||||
state)}
|
||||
(rum/local nil ::query-result)
|
||||
{:init (fn [state] (assoc state :query-error (atom nil)))}
|
||||
[state config {:keys [title builder query view collapsed? table-view?] :as q} *query-triggered?]
|
||||
(assoc state :query-error (atom nil)))}
|
||||
[state config {:keys [title builder query view collapsed? table-view?] :as q}]
|
||||
(let [*query-error (:query-error state)
|
||||
built-in? (built-in-custom-query? title)
|
||||
dsl-query? (:dsl-query? config)
|
||||
@@ -165,11 +163,12 @@
|
||||
view-f (and view-fn (sci/eval-string (pr-str view-fn)))
|
||||
dsl-page-query? (and dsl-query?
|
||||
(false? (:blocks? (query-dsl/parse-query query))))
|
||||
;; FIXME: This isn't getting set for full-text searches
|
||||
full-text-search? (and dsl-query?
|
||||
(util/electron?)
|
||||
(symbol? (gp-util/safe-read-string query)))
|
||||
result (when (or built-in-collapsed? (not collapsed?'))
|
||||
(query-result/get-query-result state config *query-error *query-triggered? current-block-uuid q {:table? table?}))
|
||||
(query-result/get-query-result config q *query-error current-block-uuid {:table? table?}))
|
||||
query-time (:query-time (meta result))
|
||||
page-list? (and (seq result)
|
||||
(some? (:block/name (first result))))
|
||||
@@ -208,13 +207,13 @@
|
||||
(if table?
|
||||
[:a.flex.ml-1.fade-link {:title "Switch to list view"
|
||||
:on-click (fn [] (editor-property/set-block-property! current-block-uuid
|
||||
"query-table"
|
||||
false))}
|
||||
"query-table"
|
||||
false))}
|
||||
(ui/icon "list" {:style {:font-size 20}})]
|
||||
[:a.flex.ml-1.fade-link {:title "Switch to table view"
|
||||
:on-click (fn [] (editor-property/set-block-property! current-block-uuid
|
||||
"query-table"
|
||||
true))}
|
||||
"query-table"
|
||||
true))}
|
||||
(ui/icon "table" {:style {:font-size 20}})]))
|
||||
|
||||
[:a.flex.ml-1.fade-link
|
||||
@@ -230,7 +229,7 @@
|
||||
(query-refresh-button query-time {:full-text-search? full-text-search?
|
||||
:on-mouse-down (fn [e]
|
||||
(util/stop e)
|
||||
(query-result/trigger-custom-query! state *query-error *query-triggered?))}))]])])
|
||||
(query-result/trigger-custom-query! config q *query-error))}))]])])
|
||||
|
||||
(when dsl-query? builder)
|
||||
|
||||
@@ -247,11 +246,10 @@
|
||||
(custom-query-inner config q opts))])]))))
|
||||
|
||||
(rum/defcs custom-query < rum/static
|
||||
(rum/local false ::query-triggered?)
|
||||
[state config q]
|
||||
(ui/catch-error
|
||||
(ui/block-error "Query Error:" {:content (:query q)})
|
||||
(ui/lazy-visible
|
||||
(fn []
|
||||
(custom-query* config q (::query-triggered? state)))
|
||||
(custom-query* config q))
|
||||
{:debug-id q})))
|
||||
|
||||
@@ -13,9 +13,8 @@
|
||||
[frontend.modules.outliner.tree :as tree]))
|
||||
|
||||
(defn trigger-custom-query!
|
||||
[state *query-error *query-triggered?]
|
||||
(let [[config query] (:rum/args state)
|
||||
repo (state/get-current-repo)
|
||||
[config query *query-error]
|
||||
(let [repo (state/get-current-repo)
|
||||
result-atom (atom nil)
|
||||
current-block-uuid (or (:block/uuid (:block config))
|
||||
(:block/uuid config))
|
||||
@@ -45,42 +44,41 @@
|
||||
(catch :default e
|
||||
(reset! *query-error e)
|
||||
(atom nil)))]
|
||||
(when *query-triggered?
|
||||
(reset! *query-triggered? true))
|
||||
(if (instance? Atom query-atom)
|
||||
query-atom
|
||||
result-atom)))
|
||||
|
||||
(defn get-group-by-page [{:keys [result-transform query] :as q}
|
||||
(defn get-group-by-page [{:keys [result-transform query] :as query-m}
|
||||
{:keys [table?]}]
|
||||
(if table?
|
||||
false ;; Immediately return false as table view can't handle grouping
|
||||
(get q :group-by-page?
|
||||
(get query-m :group-by-page?
|
||||
(and (not result-transform)
|
||||
(not (and (string? query) (string/includes? query "(by-page false)")))))))
|
||||
|
||||
(defn get-query-result
|
||||
[state config *query-error *query-triggered? current-block-uuid q options]
|
||||
(or (when-let [*result (:query-result config)] @*result)
|
||||
(let [query-atom (trigger-custom-query! state *query-error *query-triggered?)
|
||||
query-result (and query-atom (rum/react query-atom))
|
||||
;; exclude the current one, otherwise it'll loop forever
|
||||
remove-blocks (if current-block-uuid [current-block-uuid] nil)
|
||||
transformed-query-result (when query-result
|
||||
(let [result (db/custom-query-result-transform query-result remove-blocks q)]
|
||||
(if (and query-result (coll? result) (:block/uuid (first result)))
|
||||
(cond-> result
|
||||
(get q :remove-block-children? true)
|
||||
tree/filter-top-level-blocks)
|
||||
result)))
|
||||
group-by-page? (get-group-by-page q options)
|
||||
result (if (and group-by-page? (:block/uuid (first transformed-query-result)))
|
||||
(let [result (db-utils/group-by-page transformed-query-result)]
|
||||
(if (map? result)
|
||||
(dissoc result nil)
|
||||
result))
|
||||
transformed-query-result)]
|
||||
(when-let [query-result (:query-result config)]
|
||||
(reset! query-result result))
|
||||
(when query-atom
|
||||
(util/safe-with-meta result (meta @query-atom))))))
|
||||
"Fetches a query's result, transforms it as needed and saves the result into
|
||||
an atom that is passed in as an argument"
|
||||
[config query-m *query-error current-block-uuid options]
|
||||
(let [query-atom (trigger-custom-query! config query-m *query-error)
|
||||
query-result (and query-atom (rum/react query-atom))
|
||||
;; exclude the current one, otherwise it'll loop forever
|
||||
remove-blocks (if current-block-uuid [current-block-uuid] nil)
|
||||
transformed-query-result (when query-result
|
||||
(let [result (db/custom-query-result-transform query-result remove-blocks query-m)]
|
||||
(if (and query-result (coll? result) (:block/uuid (first result)))
|
||||
(cond-> result
|
||||
(get query-m :remove-block-children? true)
|
||||
tree/filter-top-level-blocks)
|
||||
result)))
|
||||
group-by-page? (get-group-by-page query-m options)
|
||||
result (if (and group-by-page? (:block/uuid (first transformed-query-result)))
|
||||
(let [result (db-utils/group-by-page transformed-query-result)]
|
||||
(if (map? result)
|
||||
(dissoc result nil)
|
||||
result))
|
||||
transformed-query-result)]
|
||||
(when-let [query-result (:query-result config)]
|
||||
(reset! query-result result))
|
||||
(when query-atom
|
||||
(util/safe-with-meta result (meta @query-atom)))))
|
||||
@@ -114,7 +114,7 @@
|
||||
|
||||
(defn build-sidebar-item
|
||||
[repo idx db-id block-type]
|
||||
(case block-type
|
||||
(case (keyword block-type)
|
||||
:contents
|
||||
[(t :right-side-bar/contents)
|
||||
(contents)]
|
||||
|
||||
@@ -408,7 +408,7 @@
|
||||
true)]
|
||||
(ui/tippy {:html [:div
|
||||
;; TODO: fetch from config
|
||||
"Tip: " [:code (util/->platform-shortcut "Ctrl + Shift + p")] " to open the commands palette"]
|
||||
(t :search/command-palette-tip-1) [:code (util/->platform-shortcut "Ctrl + Shift + p")] (t :search/command-palette-tip-2)]
|
||||
:interactive true
|
||||
:arrow true
|
||||
:theme "monospace"}
|
||||
|
||||
@@ -104,7 +104,7 @@
|
||||
|
||||
"update-available"
|
||||
(let [{:keys [name url]} payload]
|
||||
[:p (str "Found new release ")
|
||||
[:p (str (t :settings-page/update-available))
|
||||
[:a.link
|
||||
{:on-click
|
||||
(fn [e]
|
||||
@@ -113,7 +113,7 @@
|
||||
svg/external-link name " 🎉"]])
|
||||
|
||||
"error"
|
||||
[:p "⚠️ Oops, Something Went Wrong!" [:br] " Please check out the "
|
||||
[:p (t :settings-page/update-error-1) [:br] (t :settings-page/update-error-2)
|
||||
[:a.link
|
||||
{:on-click
|
||||
(fn [e]
|
||||
@@ -295,12 +295,12 @@
|
||||
|
||||
(defn theme-modes-row [t switch-theme system-theme? dark?]
|
||||
(let [pick-theme [:ul.theme-modes-options
|
||||
[:li {:on-click (partial state/use-theme-mode! "light")
|
||||
:class (classnames [{:active (and (not system-theme?) (not dark?))}])} [:i.mode-light] [:strong "light"]]
|
||||
[:li {:on-click (partial state/use-theme-mode! "dark")
|
||||
:class (classnames [{:active (and (not system-theme?) dark?)}])} [:i.mode-dark] [:strong "dark"]]
|
||||
[:li {:on-click (partial state/use-theme-mode! "system")
|
||||
:class (classnames [{:active system-theme?}])} [:i.mode-system] [:strong "system"]]]]
|
||||
[:li {:on-click (partial state/use-theme-mode! (t :settings-page/theme-light))
|
||||
:class (classnames [{:active (and (not system-theme?) (not dark?))}])} [:i.mode-light] [:strong (t :settings-page/theme-light)]]
|
||||
[:li {:on-click (partial state/use-theme-mode! (t :settings-page/theme-dark))
|
||||
:class (classnames [{:active (and (not system-theme?) dark?)}])} [:i.mode-dark] [:strong (t :settings-page/theme-dark)]]
|
||||
[:li {:on-click (partial state/use-theme-mode! (t :settings-page/theme-system))
|
||||
:class (classnames [{:active system-theme?}])} [:i.mode-system] [:strong (t :settings-page/theme-system)]]]]
|
||||
(row-with-button-action {:left-label (t :right-side-bar/switch-theme (string/capitalize switch-theme))
|
||||
:-for "toggle_theme"
|
||||
:action pick-theme
|
||||
@@ -342,7 +342,7 @@
|
||||
(when-not (string/blank? format)
|
||||
(config-handler/set-config! :journal/page-title-format format)
|
||||
(notification/show!
|
||||
[:div "You must re-index your graph for this change to take effect"]
|
||||
[:div (t :settings-page/custom-date-format-notification)]
|
||||
:warning false)
|
||||
(state/close-modal!)
|
||||
(route-handler/redirect! {:to :repos}))))}
|
||||
@@ -690,18 +690,16 @@
|
||||
[:div.text-sm.my-4
|
||||
(ui/admonition
|
||||
:tip
|
||||
[:p "If you have Logseq Sync enabled, you can view a page's edit history directly. This section is for tech-savvy only."])
|
||||
[:p (t :settings-page/git-tip)])
|
||||
[:span.text-sm.opacity-50.my-4
|
||||
"To view page's edit history, click the three horizontal dots in the top-right corner and select \"View page history\"."]
|
||||
(t :settings-page/git-desc-1)]
|
||||
[:br][:br]
|
||||
[:span.text-sm.opacity-50.my-4
|
||||
"For professional users, Logseq also supports using "]
|
||||
(t :settings-page/git-desc-2)]
|
||||
[:a {:href "https://git-scm.com/" :target "_blank"}
|
||||
"Git"]
|
||||
[:span.text-sm.opacity-50.my-4
|
||||
" for version control."]
|
||||
[:span.text-sm.opacity-50.my-4
|
||||
"Use Git at your own risk as general Git issues are not supported by the Logseq team"]]
|
||||
(t :settings-page/git-desc-3)]]
|
||||
[:br]
|
||||
(switch-git-auto-commit-row t)
|
||||
(git-auto-commit-seconds t)
|
||||
@@ -997,11 +995,11 @@
|
||||
{:class (when-not user-handler/alpha-or-beta-user? "opacity-50 pointer-events-none cursor-not-allowed")}
|
||||
(sync-switcher-row enable-sync?)
|
||||
[:div.text-sm
|
||||
"Click"
|
||||
(t :settings-page/sync-desc-1)
|
||||
[:a.mx-1 {:href "https://blog.logseq.com/how-to-setup-and-use-logseq-sync/"
|
||||
:target "_blank"}
|
||||
"here"]
|
||||
"for instructions on how to set up and use Sync."]]])]))
|
||||
(t :settings-page/sync-desc-2)]
|
||||
(t :settings-page/sync-desc-3)]]])]))
|
||||
|
||||
;; (when-not web-platform?
|
||||
;; [:<>
|
||||
|
||||
@@ -146,7 +146,7 @@
|
||||
[page-name]
|
||||
(let [page-entity (model/get-page page-name)
|
||||
{:block/keys [updated-at created-at]} page-entity]
|
||||
(str (if (= created-at updated-at) "Created " "Edited ")
|
||||
(str (if (= created-at updated-at) (t :whiteboard/dashboard-card-created) (t :whiteboard/dashboard-card-edited))
|
||||
(util/time-ago (js/Date. updated-at)))))
|
||||
|
||||
(rum/defc dashboard-preview-card
|
||||
@@ -190,7 +190,7 @@
|
||||
(whiteboard-handler/create-new-whiteboard-and-redirect!))}
|
||||
(ui/icon "plus")
|
||||
[:span.dashboard-create-card-caption.select-none
|
||||
"New whiteboard"]])
|
||||
(t :whiteboard/dashboard-card-new-whiteboard)]])
|
||||
|
||||
(rum/defc whiteboard-dashboard
|
||||
[]
|
||||
|
||||
@@ -28,7 +28,8 @@
|
||||
[clojure.string :as string]
|
||||
[rum.core :as rum]
|
||||
[frontend.modules.shortcut.core :as shortcut]
|
||||
[medley.core :as medley]))
|
||||
[medley.core :as medley]
|
||||
[frontend.context.i18n :refer [t]]))
|
||||
|
||||
;;; ================================================================
|
||||
;;; Commentary
|
||||
@@ -409,7 +410,7 @@
|
||||
(reset! *phase 1)))
|
||||
|
||||
(def review-finished
|
||||
[:p.p-2 "Congrats, you've reviewed all the cards for this query, see you next time! 💯"])
|
||||
[:p.p-2 (t :flashcards/modal-finished)])
|
||||
|
||||
(defn- btn-with-shortcut [{:keys [shortcut id btn-text background on-click class]}]
|
||||
(ui/button
|
||||
@@ -457,9 +458,9 @@
|
||||
[:div.flex.my-4.justify-between
|
||||
(when-not (and (not preview?) (= next-phase 1))
|
||||
(btn-with-shortcut {:btn-text (case next-phase
|
||||
1 "Hide answers"
|
||||
2 "Show answers"
|
||||
3 "Show clozes")
|
||||
1 (t :flashcards/modal-btn-hide-answers)
|
||||
2 (t :flashcards/modal-btn-show-answers)
|
||||
3 (t :flashcards/modal-btn-show-clozes))
|
||||
:shortcut "s"
|
||||
:id "card-answers"
|
||||
:class "mr-2"
|
||||
@@ -467,7 +468,7 @@
|
||||
(when (and (not= @card-index (count blocks))
|
||||
cards?
|
||||
preview?)
|
||||
(btn-with-shortcut {:btn-text "Next"
|
||||
(btn-with-shortcut {:btn-text (t :flashcards/modal-btn-next-card)
|
||||
:shortcut "n"
|
||||
:id "card-next"
|
||||
:class "mr-2"
|
||||
@@ -477,7 +478,7 @@
|
||||
|
||||
(when (and (not preview?) (= 1 next-phase))
|
||||
[:<>
|
||||
(btn-with-shortcut {:btn-text "Forgotten"
|
||||
(btn-with-shortcut {:btn-text (t :flashcards/modal-btn-forgotten)
|
||||
:shortcut "f"
|
||||
:id "card-forgotten"
|
||||
:background "red"
|
||||
@@ -486,12 +487,12 @@
|
||||
(let [tomorrow (tc/to-string (t/plus (t/today) (t/days 1)))]
|
||||
(editor-property/set-block-property! root-block-id card-next-schedule-property tomorrow)))})
|
||||
|
||||
(btn-with-shortcut {:btn-text (if (util/mobile?) "Hard" "Took a while to recall")
|
||||
(btn-with-shortcut {:btn-text (if (util/mobile?) "Hard" (t :flashcards/modal-btn-recall))
|
||||
:shortcut "t"
|
||||
:id "card-recall"
|
||||
:on-click #(score-and-next-card 3 card card-index finished? phase review-records cb)})
|
||||
|
||||
(btn-with-shortcut {:btn-text "Remembered"
|
||||
(btn-with-shortcut {:btn-text (t :flashcards/modal-btn-remembered)
|
||||
:shortcut "r"
|
||||
:id "card-remembered"
|
||||
:background "green"
|
||||
@@ -499,10 +500,10 @@
|
||||
|
||||
(when preview?
|
||||
(ui/tippy {:html [:div.text-sm
|
||||
"Reset this card so that you can review it immediately."]
|
||||
(t :flashcards/modal-btn-reset-tip)]
|
||||
:class "tippy-hover"
|
||||
:interactive true}
|
||||
(ui/button [:span "Reset"]
|
||||
(ui/button [:span (t :flashcards/modal-btn-reset)]
|
||||
:id "card-reset"
|
||||
:class (util/hiccup->class "opacity-60.hover:opacity-100.card-reset")
|
||||
:on-click (fn [e]
|
||||
@@ -590,11 +591,11 @@
|
||||
(let [cards (db-model/get-macro-blocks (state/get-current-repo) "cards")
|
||||
items (->> (map (comp :logseq.macro-arguments :block/properties) cards)
|
||||
(map (fn [col] (string/join " " col))))
|
||||
items (concat items ["All"])]
|
||||
items (concat items [(t :flashcards/modal-select-all)])]
|
||||
(component-select/select {:items items
|
||||
:on-chosen on-chosen
|
||||
:close-modal? false
|
||||
:input-default-placeholder "Switch to"
|
||||
:input-default-placeholder (t :flashcards/modal-select-switch)
|
||||
:extract-fn nil})))
|
||||
|
||||
;;; register cards macro
|
||||
@@ -627,12 +628,12 @@
|
||||
{:on-mouse-down (fn [e]
|
||||
(util/stop e)
|
||||
(toggle-fn))}
|
||||
[:span.flex (if (string/blank? query-string) "All" query-string)
|
||||
[:span.flex (if (string/blank? query-string) (t :flashcards/modal-select-all) query-string)
|
||||
[:span {:style {:margin-top 2}}
|
||||
(svg/caret-down)]]])
|
||||
(fn [{:keys [toggle-fn]}]
|
||||
(cards-select {:on-chosen (fn [query]
|
||||
(let [query' (if (= query "All") "" query)]
|
||||
(let [query' (if (= query (t :flashcards/modal-select-all)) "" query)]
|
||||
(reset! query-atom query')
|
||||
(toggle-fn)))}))
|
||||
{:modal-class (util/hiccup->class
|
||||
@@ -642,13 +643,13 @@
|
||||
|
||||
;; FIXME: CSS issue
|
||||
(if @*preview-mode?
|
||||
(ui/tippy {:html [:div.text-sm "current/total"]
|
||||
(ui/tippy {:html [:div.text-sm (t :flashcards/modal-current-total)]
|
||||
:interactive true}
|
||||
[:div.opacity-60.text-sm.mr-3
|
||||
@*card-index
|
||||
[:span "/"]
|
||||
total])
|
||||
(ui/tippy {:html [:div.text-sm "overdue/total"]
|
||||
(ui/tippy {:html [:div.text-sm (t :flashcards/modal-overdue-total)]
|
||||
;; :class "tippy-hover"
|
||||
:interactive true}
|
||||
[:div.opacity-60.text-sm.mr-3
|
||||
@@ -657,7 +658,7 @@
|
||||
total]))
|
||||
|
||||
(ui/tippy
|
||||
{:html [:div.text-sm "Toggle preview mode"]
|
||||
{:html [:div.text-sm (t :flashcards/modal-toggle-preview-mode)]
|
||||
:delay [1000, 100]
|
||||
:class "tippy-hover"
|
||||
:interactive true
|
||||
@@ -672,7 +673,7 @@
|
||||
"A"])
|
||||
|
||||
(ui/tippy
|
||||
{:html [:div.text-sm "Toggle random mode"]
|
||||
{:html [:div.text-sm (t :flashcards/modal-toggle-random-mode)]
|
||||
:delay [1000, 100]
|
||||
:class "tippy-hover"
|
||||
:interactive true}
|
||||
@@ -702,15 +703,15 @@
|
||||
*card-index))]])
|
||||
(if (:global? config)
|
||||
[:div.ls-card.content
|
||||
[:h1.title "Time to create a card!"]
|
||||
[:h1.title (t :flashcards/modal-welcome-title)]
|
||||
|
||||
[:div
|
||||
[:p "You can add \"#card\" to any block to turn it into a card or trigger \"/cloze\" to add some clozes."]
|
||||
[:p (t :flashcards/modal-welcome-desc-1)]
|
||||
[:img.my-4 {:src "https://docs.logseq.com/assets/2021-07-22_22.28.02_1626964258528_0.gif"}]
|
||||
[:p "You can "
|
||||
[:a {:href "https://docs.logseq.com/#/page/cards" :target "_blank"}
|
||||
"click this link"]
|
||||
" to check the documentation."]]]
|
||||
[:p (t :flashcards/modal-welcome-desc-2)
|
||||
[:a {:href "https://docs.logseq.com/#/page/Flashcards" :target "_blank"}
|
||||
(t :flashcards/modal-welcome-desc-3)]
|
||||
(t :flashcards/modal-welcome-desc-4)]]]
|
||||
[:div.opacity-60.custom-query-title.ls-card.content
|
||||
[:div.w-full.flex-1
|
||||
[:code.p-1 (str "Cards: " query-string)]]
|
||||
@@ -808,4 +809,4 @@
|
||||
(when (nil? @*due-cards-interval)
|
||||
;; refresh every hour
|
||||
(let [interval (js/setInterval f (* 3600 1000))]
|
||||
(reset! *due-cards-interval interval))))))
|
||||
(reset! *due-cards-interval interval))))))
|
||||
@@ -3616,7 +3616,7 @@
|
||||
edit-block (state/get-edit-block)
|
||||
target-element (.-nodeName (.-target e))]
|
||||
(cond
|
||||
(whiteboard?)
|
||||
(and (whiteboard?) (not edit-input))
|
||||
(do
|
||||
(util/stop e)
|
||||
(.selectAll (.-api ^js (state/active-tldraw-app))))
|
||||
|
||||
@@ -17,6 +17,67 @@
|
||||
:on-boarding/tour-whiteboard-home-description "Whiteboards have their own section in the app where you can see them at a glance, create new ones or delete them easily."
|
||||
:on-boarding/tour-whiteboard-new "{1} Create new whiteboard"
|
||||
:on-boarding/tour-whiteboard-new-description "There are multiple ways of creating a new whiteboard. One of them is always right here in the dashboard."
|
||||
:on-boarding/tour-whiteboard-btn-next "Next"
|
||||
:on-boarding/tour-whiteboard-btn-back "Back"
|
||||
:on-boarding/tour-whiteboard-btn-finish "Finish"
|
||||
:on-boarding/quick-tour-btn-next "Next"
|
||||
:on-boarding/quick-tour-btn-back "Back"
|
||||
:on-boarding/quick-tour-btn-finish "Finish"
|
||||
:on-boarding/quick-tour-btn-skip "Skip Quick Tour"
|
||||
:on-boarding/quick-tour-steps "STEP "
|
||||
:on-boarding/quick-tour-help-title "❓ Help"
|
||||
:on-boarding/quick-tour-help-desc "You can always click here for help and other information about Logseq."
|
||||
:on-boarding/quick-tour-journal-page-title "📆 Daily Journal Page"
|
||||
:on-boarding/quick-tour-journal-page-desc-1 "This is today’s daily journal page. Here you can dump your thoughts, learnings and ideas. Don’t worry about organizing. Just write and"
|
||||
:on-boarding/quick-tour-journal-page-desc-2 "[[link]]"
|
||||
:on-boarding/quick-tour-journal-page-desc-3 "your thoughts."
|
||||
:on-boarding/quick-tour-left-sidebar-title "👀 Left Sidebar"
|
||||
:on-boarding/quick-tour-left-sidebar-desc "Open the left sidebar to explore important menu items in Logseq."
|
||||
:on-boarding/quick-tour-favorites-title "⭐️ Favorites"
|
||||
:on-boarding/quick-tour-favorites-desc-1 "Pin your favorite pages via the `... `menu on any page."
|
||||
:on-boarding/quick-tour-favorites-desc-2 "We’ve also added some template pages here to help you get started. You can remove these once you start writing your own notes."
|
||||
:on-boarding/command-palette-quick-tour "Quick tour for onboarding"
|
||||
:on-boarding/importing-main-title "Import existing notes"
|
||||
:on-boarding/importing-main-desc "You can also do this later in the app."
|
||||
:on-boarding/importing-title "Do you already have notes that you want to import?"
|
||||
:on-boarding/importing-desc "If they are in a JSON, EDN or Markdown format Logseq can work with them."
|
||||
:on-boarding/importing-roam-desc "Import a JSON Export of your Roam graph"
|
||||
:on-boarding/importing-lsq-desc "Import an EDN or a JSON Export of your Logseq graph"
|
||||
:on-boarding/importing-opml-desc " Import OPML files"
|
||||
:on-boarding/main-title "Welcome to "
|
||||
:on-boarding/main-desc "First you need to choose a folder where Logseq will store your thoughts, ideas, notes."
|
||||
:on-boarding/section-btn-title "Choose a folder"
|
||||
:on-boarding/section-btn-desc "Open existing directory or Create a new one"
|
||||
:on-boarding/section-title "How Logseq saves your work"
|
||||
:on-boarding/section-desc "Inside the directory you choose, Logseq will create 4 folders."
|
||||
:on-boarding/section-tip-1 "Each page is a file stored only on your "
|
||||
:on-boarding/section-tip-2 "You may choose to sync it later."
|
||||
:on-boarding/section-assets "Graphics & Documents"
|
||||
:on-boarding/section-journals "Daily notes"
|
||||
:on-boarding/section-pages "PAGES"
|
||||
:on-boarding/section-app "APP Internal"
|
||||
:on-boarding/section-config "Config File"
|
||||
:bug-report/main-title "Bug report"
|
||||
:bug-report/main-desc "Can you help us out by submitting a bug report? We'll get it sorted out as soon as we can."
|
||||
:bug-report/section-clipboard-title "Is the bug you encountered related to these features?"
|
||||
:bug-report/section-clipboard-desc "You can use these handy tools to give us additional information."
|
||||
:bug-report/section-clipboard-btn-title "Clipboard helper"
|
||||
:bug-report/section-clipboard-btn-desc "Inspect and collect clipboard data"
|
||||
:bug-report/section-issues-title "Or..."
|
||||
:bug-report/section-issues-desc "If there are no tools available for you to gather additional information, please report the bug directly."
|
||||
:bug-report/section-issues-btn-title "Submit a bug report"
|
||||
:bug-report/section-issues-btn-desc "Help Make Logseq Better!"
|
||||
:bug-report/inspector-page-desc-1 "Press Ctrl+V / ⌘+V to inspect your clipboard data"
|
||||
:bug-report/inspector-page-desc-2 "or click here to paste if you are using the mobile version"
|
||||
:bug-report/inspector-page-placeholder "Long press here to paste if you are on mobile"
|
||||
:bug-report/inspector-page-tip "Something wrong? No problem, click to go back to the previous step."
|
||||
:bug-report/inspector-page-btn-back "Go back"
|
||||
:bug-report/inspector-page-btn-copy "Copy the result"
|
||||
:bug-report/inspector-page-copy-notif "Copied to clipboard!"
|
||||
:bug-report/inspector-page-btn-create-issue "Create an issue"
|
||||
:bug-report/inspector-page-desc-clipboard "Here is the data read from clipboard."
|
||||
:bug-report/inspector-page-desc-copy "If this is okay to share, click the copy button."
|
||||
:bug-report/inspector-page-desc-create-issue "Now you can report the result pasted to your clipboard. Please paste the result in the 'Additional Context' section and state where you copied the original content from. Thanks!"
|
||||
:help/title-usage "Usage"
|
||||
:help/title-community "Community"
|
||||
:help/title-development "Development"
|
||||
@@ -48,6 +109,8 @@
|
||||
:search/page-names "Search page names"
|
||||
:search/recent "Recent search:"
|
||||
:search/blocks-in-page "Search blocks in page:"
|
||||
:search/command-palette-tip-1 "Tip: "
|
||||
:search/command-palette-tip-2 " to open the commands palette"
|
||||
:search/cache-outdated "Cache is outdated. Please click the 'Re-index' button in the graph's dropdown menu."
|
||||
:search-item/whiteboard "Whiteboard"
|
||||
:search-item/page "Page"
|
||||
@@ -182,9 +245,13 @@
|
||||
:context-menu/input-template-name "What's the template's name?"
|
||||
:context-menu/template-include-parent-block "Including the parent block in the template?"
|
||||
:context-menu/template-exists-warning "Template already exists!"
|
||||
:settings-page/git-confirm "You need to restart the app after updating the Git settings."
|
||||
:settings-page/git-tip "If you have Logseq Sync enabled, you can view a page's edit history directly. This section is for tech-savvy only."
|
||||
:settings-page/git-desc-1 "To view page's edit history, click the three horizontal dots in the top-right corner and select \"View page history\"."
|
||||
:settings-page/git-desc-2 "For professional users, Logseq also supports using "
|
||||
:settings-page/git-desc-3 " for version control. Use Git at your own risk as general Git issues are not supported by the Logseq team."
|
||||
:settings-page/git-switcher-label "Enable Git auto commit"
|
||||
:settings-page/git-commit-delay "Git auto commit seconds"
|
||||
:settings-page/git-confirm "You need to restart the app after updating the Git settings."
|
||||
:settings-page/edit-config-edn "Edit config.edn"
|
||||
:settings-page/edit-global-config-edn "Edit global config.edn"
|
||||
:settings-page/edit-custom-css "Edit custom.css"
|
||||
@@ -192,6 +259,9 @@
|
||||
:settings-page/edit-setting "Edit"
|
||||
:settings-page/custom-configuration "Custom configuration"
|
||||
:settings-page/custom-global-configuration "Custom global configuration"
|
||||
:settings-page/theme-light "light"
|
||||
:settings-page/theme-dark "dark"
|
||||
:settings-page/theme-system "system"
|
||||
:settings-page/custom-theme "Custom theme"
|
||||
:settings-page/export-theme "Export theme"
|
||||
:settings-page/show-brackets "Show brackets"
|
||||
@@ -207,6 +277,7 @@
|
||||
:settings-page/auto-expand-block-refs-tip "This option controls whether to expand the block references automatically when zoom-in."
|
||||
:settings-page/custom-date-format "Preferred date format"
|
||||
:settings-page/custom-date-format-warning "Re-index required! Existing journal references would be broken!"
|
||||
:settings-page/custom-date-format-notification "You must re-index your graph for this change to take effect"
|
||||
:settings-page/preferred-pasting-file-hint "When enabled, pasting an image from the internet will download and insert the image. When disabled, it will paste the link to the image."
|
||||
:settings-page/preferred-file-format "Preferred file format"
|
||||
:settings-page/preferred-workflow "Preferred workflow"
|
||||
@@ -241,6 +312,9 @@
|
||||
:settings-page/beta-features "Beta features"
|
||||
:settings-page/login-prompt "To access new features before anyone else you must be an Open Collective Sponsor or Backer of Logseq and therefore log in first."
|
||||
:settings-page/sync "Sync"
|
||||
:settings-page/sync-desc-1 "Click"
|
||||
:settings-page/sync-desc-2 "here"
|
||||
:settings-page/sync-desc-3 "for instructions on how to set up and use Sync."
|
||||
:settings-page/enable-whiteboards "Whiteboards"
|
||||
:settings-page/native-titlebar "Native title bar"
|
||||
:settings-page/native-titlebar-desc "Enables the native window title bar on Windows and Linux."
|
||||
@@ -249,6 +323,9 @@
|
||||
:settings-page/revision "Revision: "
|
||||
:settings-page/changelog "What's new?"
|
||||
:settings-page/app-updated "Your app is up-to-date 🎉"
|
||||
:settings-page/update-available "Found new release "
|
||||
:settings-page/update-error-1 "⚠️ Oops, Something Went Wrong!"
|
||||
:settings-page/update-error-2 " Please check out the "
|
||||
:yes "Yes"
|
||||
|
||||
:submit "Submit"
|
||||
@@ -355,6 +432,33 @@
|
||||
:whiteboard/cache-outdated "Cache is outdated. Please click the 'Re-index' button in the graph's dropdown menu."
|
||||
:whiteboard/shape-quick-links "Shape Quick Links"
|
||||
:whiteboard/edit-pdf "Edit PDF"
|
||||
:whiteboard/dashboard-card-new-whiteboard "New whiteboard"
|
||||
:whiteboard/dashboard-card-created "Created "
|
||||
:whiteboard/dashboard-card-edited "Edited "
|
||||
:whiteboard/toggle-grid "Toggle grid"
|
||||
:whiteboard/snap-to-grid "Snap to grid"
|
||||
:flashcards/modal-welcome-title "Time to create a card!"
|
||||
:flashcards/modal-welcome-desc-1 "You can add \"#card\" to any block to turn it into a card or trigger \"/cloze\" to add some clozes."
|
||||
:flashcards/modal-welcome-desc-2 "You can "
|
||||
:flashcards/modal-welcome-desc-3 "click this link"
|
||||
:flashcards/modal-welcome-desc-4 " to check the documentation."
|
||||
:flashcards/modal-btn-show-answers "Show answers"
|
||||
:flashcards/modal-btn-hide-answers "Hide answers"
|
||||
:flashcards/modal-btn-show-clozes "Show clozes"
|
||||
:flashcards/modal-btn-next-card "Next"
|
||||
:flashcards/modal-btn-reset "Reset"
|
||||
:flashcards/modal-btn-reset-tip "Reset this card so that you can review it immediately."
|
||||
:flashcards/modal-btn-forgotten "Forgotten"
|
||||
:flashcards/modal-btn-remembered "Remembered"
|
||||
:flashcards/modal-btn-recall "Took a while to recall"
|
||||
:flashcards/modal-finished "Congrats, you've reviewed all the cards for this query, see you next time! 💯"
|
||||
:flashcards/modal-select-all "All"
|
||||
:flashcards/modal-select-switch "Switch to"
|
||||
:flashcards/modal-current-total "Current/Total"
|
||||
:flashcards/modal-overdue-total "Overdue/Total"
|
||||
:flashcards/modal-toggle-preview-mode "Toggle preview mode"
|
||||
:flashcards/modal-toggle-random-mode "Toggle random mode"
|
||||
|
||||
:page-search "Search in the current page"
|
||||
:graph-search "Search graph"
|
||||
:home "Home"
|
||||
|
||||
@@ -17,6 +17,11 @@
|
||||
:on-boarding/tour-whiteboard-home-description "Beyaz tahtalar uygulamada kendi bölümlerine sahiptir ve onları bir bakışta görebilir, kolayca yenilerini oluşturabilir veya silebilirsiniz."
|
||||
:on-boarding/tour-whiteboard-new "{1} Yeni beyaz tahta oluştur"
|
||||
:on-boarding/tour-whiteboard-new-description "Yeni bir beyaz tahta oluşturmanın birçok yolu vardır. Bunlardan biri her zaman tam burada bu panodadır."
|
||||
:help/title-usage "Kullanım"
|
||||
:help/title-community "Topluluk"
|
||||
:help/title-development "Geliştirme"
|
||||
:help/title-about "Hakkında"
|
||||
:help/title-terms "Koşullar"
|
||||
:help/start "Başlarken"
|
||||
:help/about "Logseq hakkında"
|
||||
:help/roadmap "Yol haritası"
|
||||
@@ -28,6 +33,7 @@
|
||||
:help/privacy "Gizlilik ilkesi"
|
||||
:help/terms "Koşullar"
|
||||
:help/forum-community "Forum topluluğu"
|
||||
:help/awesome-logseq "Awesome Logseq"
|
||||
:help/shortcuts "Klavye kısayolları"
|
||||
:help/shortcuts-triggers "Tetikleyiciler"
|
||||
:help/shortcut "Kısayol"
|
||||
@@ -40,6 +46,9 @@
|
||||
:search/result-for "Arama sonucu: "
|
||||
:search/items "öğe"
|
||||
:search/page-names "Sayfa adlarında ara"
|
||||
:search/recent "Son arama:"
|
||||
:search/blocks-in-page "Blokları sayfada ara:"
|
||||
:search/cache-outdated "Önbellek eski. Lütfen grafın açılır menüsündeki 'Yeniden dizin oluştur' düğmesini tıklayın."
|
||||
:search-item/whiteboard "Beyaz tahta"
|
||||
:search-item/page "Sayfa"
|
||||
:search-item/file "Dosya"
|
||||
@@ -66,6 +75,7 @@
|
||||
:right-side-bar/new-page "Yeni sayfa"
|
||||
:right-side-bar/show-journals "Günlükleri Göster"
|
||||
:right-side-bar/separator "Sağ kenar çubuğu yeniden boyutlandırma işleyicisi"
|
||||
:right-side-bar/toggle-right-sidebar "Sağ kenar çubuğunu aç/kapat"
|
||||
:left-side-bar/journals "Günlük"
|
||||
:left-side-bar/create "Oluştur"
|
||||
:left-side-bar/new-page "Yeni sayfa"
|
||||
@@ -92,6 +102,9 @@
|
||||
:block/name "Sayfa adı"
|
||||
:page/earlier "Daha önce"
|
||||
:page/copy-page-url "Sayfa URL adresini kopyala"
|
||||
:page/illegal-page-name "Geçersiz sayfa adı!"
|
||||
:page/page-already-exists "“{1}” sayfası zaten var!"
|
||||
:page/whiteboard-to-journal-error "Beyaz tahta sayfaları, günlük başlıkları olarak yeniden adlandırılamaz!"
|
||||
:file/name "Dosya adı"
|
||||
:file/last-modified-at "Son değiştirilme tarihi"
|
||||
:file/no-data "Veri yok"
|
||||
@@ -103,6 +116,7 @@
|
||||
:file-rn/or-select-actions-2 ". Bu paneli kapattığınızda bu eylemler kullanılamaz."
|
||||
:file-rn/legend "🟢 İsteğe bağlı yeniden adlandırma eylemleri; 🟡 Başlık değişikliğini önlemek için gereken yeniden adlandırma eylemi; 🔴 Hataya neden olan değişiklik."
|
||||
:file-rn/close-panel "Paneli Kapat"
|
||||
:file-rn/all-action "Tüm Eylemleri Uygula! ({1})"
|
||||
:file-rn/select-format "(Geliştirici Modu Seçeneği, Tehlikeli!) Dosya adı biçimini seçin"
|
||||
:file-rn/rename "\"{1}\" dosyasını \"{2}\" olarak yeniden adlandır"
|
||||
:file-rn/apply-rename "Dosya yeniden adlandırma işlemini uygula"
|
||||
@@ -186,10 +200,14 @@
|
||||
:settings-page/disable-sentry "Kullanım verilerini ve tanılamayı Logseq'e gönderin"
|
||||
:settings-page/disable-sentry-desc "Logseq asla yerel graf veritabanınızı toplamayacak veya verilerinizi satmayacaktır."
|
||||
:settings-page/preferred-outdenting "Mantıksal girinti"
|
||||
:settings-page/preferred-outdenting-tip "Sol taraf varsayılan ayar ile olan girintiyi, sağ taraf ise mantıksal girinti etkinken olan girintiyi gösterir. "
|
||||
:settings-page/preferred-outdenting-tip-more "→ Daha fazla bilgi edinin"
|
||||
:settings-page/show-full-blocks "Blok referansındaki tüm satırları göster"
|
||||
:settings-page/auto-expand-block-refs "Yakınlaştırdığınızda blok referanslarını otomatik olarak genişletin"
|
||||
:settings-page/auto-expand-block-refs-tip "Bu seçenek, yakınlaştırma yapıldığında blok referanslarının otomatik olarak genişletilip genişletilmeyeceğini kontrol eder."
|
||||
:settings-page/custom-date-format "Tercih edilen tarih biçimi"
|
||||
:settings-page/custom-date-format-warning "Yeniden dizin oluşturma gerekli! Mevcut günlük referansları bozulabilir!"
|
||||
:settings-page/preferred-pasting-file-hint "Etkinleştirildiğinde, internetten bir resim yapıştırmak görüntüyü indirir ve ekler. Devre dışı bırakıldığında, bağlantıyı görüntüye yapıştırır."
|
||||
:settings-page/preferred-file-format "Tercih edilen dosya biçimi"
|
||||
:settings-page/preferred-workflow "Tercih edilen iş akışı"
|
||||
:settings-page/preferred-pasting-file "Dosya yapıştırmayı tercih et"
|
||||
@@ -211,6 +229,7 @@
|
||||
:settings-page/tab-general "Genel"
|
||||
:settings-page/tab-editor "Düzenleyici"
|
||||
:settings-page/tab-version-control "Sürüm denetimi"
|
||||
:settings-page/tab-account "Hesap"
|
||||
:settings-page/tab-advanced "Gelişmiş"
|
||||
:settings-page/tab-assets "Varlıklar"
|
||||
:settings-page/tab-features "Özellikler"
|
||||
@@ -223,7 +242,15 @@
|
||||
:settings-page/login-prompt "Yeni özelliklere herkesten önce erişmek için bir Open Collective Sponsoru veya Logseq'in Destekçisi olmanız ve oturum açmanız gerekir."
|
||||
:settings-page/sync "Eşitle"
|
||||
:settings-page/enable-whiteboards "Beyaz tahtalar"
|
||||
:settings-page/native-titlebar "Yerel başlık çubuğu"
|
||||
:settings-page/native-titlebar-desc "Windows ve Linux'ta yerel pencere başlık çubuğunu etkinleştirir."
|
||||
:settings-page/check-for-updates "Güncellemeleri kontrol et"
|
||||
:settings-page/checking "Kontrol ediliyor ..."
|
||||
:settings-page/revision "Revizyon: "
|
||||
:settings-page/changelog "Yenilikler nelerdir?"
|
||||
:settings-page/app-updated "Uygulamanız güncel 🎉"
|
||||
:yes "Evet"
|
||||
|
||||
:submit "Onayla"
|
||||
:cancel "İptal"
|
||||
:close "Kapat"
|
||||
@@ -233,9 +260,9 @@
|
||||
:host "Ana Bilgisayar"
|
||||
:port "Bağlantı Noktası"
|
||||
:re-index "Yeniden dizin oluştur"
|
||||
:re-index-detail "Grafiği yeniden oluştur"
|
||||
:re-index-detail "Grafı yeniden oluştur"
|
||||
:re-index-multiple-windows-warning "Bu graf için yeniden dizin oluşturmadan önce diğer pencereleri kapatmanız gerekiyor."
|
||||
:re-index-discard-unsaved-changes-warning "Yeniden dizin oluşturmak mevcut grafiği siler ve ardından tüm dosyaları o anda diskte depolandıkları şekilde yeniden işler. Kaydedilmemiş değişiklikleri kaybedeceksiniz ve bu biraz zaman alabilir. Devam edilsin mi?"
|
||||
:re-index-discard-unsaved-changes-warning "Yeniden dizin oluşturmak mevcut grafı siler ve ardından tüm dosyaları o anda diskte depolandıkları şekilde yeniden işler. Kaydedilmemiş değişiklikleri kaybedeceksiniz ve bu biraz zaman alabilir. Devam edilsin mi?"
|
||||
:open-new-window "Yeni pencere"
|
||||
:sync-from-local-files "Yenile"
|
||||
:sync-from-local-files-detail "Yerel dosyalardan değişiklikleri içeri aktarın"
|
||||
@@ -244,16 +271,106 @@
|
||||
:search/publishing "Ara"
|
||||
:search "Ara veya sayfa oluştur"
|
||||
:whiteboard/link-whiteboard-or-block "Beyaz tahta/sayfa/blok bağlantısı"
|
||||
:whiteboard/align-left "Sola hizala"
|
||||
:whiteboard/align-center-horizontally "Merkeze yatay olarak hizala"
|
||||
:whiteboard/align-right "Sağa hizala"
|
||||
:whiteboard/distribute-horizontally "Yatay olarak dağıt"
|
||||
:whiteboard/align-top "Üste hizala"
|
||||
:whiteboard/align-center-vertically "Merkeze dikey olarak hizala"
|
||||
:whiteboard/align-bottom "Alta hizala"
|
||||
:whiteboard/distribute-vertically "Dikey olarak dağıt"
|
||||
:whiteboard/pack-into-rectangle "Dikdörtgen halinde paketleyin"
|
||||
:whiteboard/zoom-to-fit "Sığdırmak için yakınlaştır"
|
||||
:whiteboard/ungroup "Grubu çöz"
|
||||
:whiteboard/group "Grupla"
|
||||
:whiteboard/cut "Kes"
|
||||
:whiteboard/copy "Kopyala"
|
||||
:whiteboard/paste "Yapıştır"
|
||||
:whiteboard/paste-as-link "Bağlantı olarak yapıştır"
|
||||
:whiteboard/export "Dışarı aktar"
|
||||
:whiteboard/select-all "Tümünü seç"
|
||||
:whiteboard/deselect-all "Tümünün seçimini kaldır"
|
||||
:whiteboard/lock "Kilitle"
|
||||
:whiteboard/unlock "Kilidi aç"
|
||||
:whiteboard/delete "Sil"
|
||||
:whiteboard/flip-horizontally "Yatay olarak çevir"
|
||||
:whiteboard/flip-vertically "Dikey olarak çevir"
|
||||
:whiteboard/move-to-front "Öne taşı"
|
||||
:whiteboard/move-to-back "Geriye taşı"
|
||||
:whiteboard/dev-print-shape-props "(Dev) Şekil aksesuarlarını yazdır"
|
||||
:whiteboard/auto-resize "Otomatik yeniden boyutlandır"
|
||||
:whiteboard/expand "Genişlet"
|
||||
:whiteboard/collapse "Daralt"
|
||||
:whiteboard/website-url "Web sitesi bağlantısı"
|
||||
:whiteboard/reload "Yeniden yükle"
|
||||
:whiteboard/open-website-url "Web sitesi bağlantısını aç"
|
||||
:whiteboard/youtube-url "YouTube bağlantısı"
|
||||
:whiteboard/open-youtube-url "YouTube bağlantısını aç"
|
||||
:whiteboard/twitter-url "Twitter bağlantısı"
|
||||
:whiteboard/open-twitter-url "Twitter bağlantısını aç"
|
||||
:whiteboard/fill "Doldur"
|
||||
:whiteboard/stroke-type "Vuruş türü"
|
||||
:whiteboard/arrow-head "Ok başı"
|
||||
:whiteboard/bold "Kalın"
|
||||
:whiteboard/italic "İtalik"
|
||||
:whiteboard/undo "Geri al"
|
||||
:whiteboard/redo "Yinele"
|
||||
:whiteboard/zoom-in "Yakınlaştır"
|
||||
:whiteboard/zoom-out "Uzaklaştır"
|
||||
:whiteboard/select "Seç"
|
||||
:whiteboard/pan "Kaydır"
|
||||
:whiteboard/add-block-or-page "Blok veya sayfa ekle"
|
||||
:whiteboard/draw "Çiz"
|
||||
:whiteboard/highlight "Vurgula"
|
||||
:whiteboard/eraser "Silgi"
|
||||
:whiteboard/connector "Bağlayıcı"
|
||||
:whiteboard/text "Metin"
|
||||
:whiteboard/color "Renk"
|
||||
:whiteboard/select-custom-color "Özel renk seç"
|
||||
:whiteboard/opacity "Opaklık"
|
||||
:whiteboard/extra-small "Çok Küçük"
|
||||
:whiteboard/small "Küçük"
|
||||
:whiteboard/medium "Orta"
|
||||
:whiteboard/large "Büyük"
|
||||
:whiteboard/extra-large "Çok Büyük"
|
||||
:whiteboard/huge "Kocaman"
|
||||
:whiteboard/scale-level "Ölçek düzeyi"
|
||||
:whiteboard/rectangle "Dikdörtgen"
|
||||
:whiteboard/circle "Daire"
|
||||
:whiteboard/triangle "Üçgen"
|
||||
:whiteboard/shape "Şekil"
|
||||
:whiteboard/open-page "Sayfayı aç"
|
||||
:whiteboard/open-page-in-sidebar "Sayfayı kenar çubuğunda aç"
|
||||
:whiteboard/remove-link "Bağlantıyı kaldır"
|
||||
:whiteboard/link "Bağlantı"
|
||||
:whiteboard/references "Referanslar"
|
||||
:whiteboard/link-to-any-page-or-block "Herhangi bir sayfaya veya bloğa bağlantı ver"
|
||||
:whiteboard/start-typing-to-search "Aramak için yazmaya başlayın..."
|
||||
:whiteboard/new-block-no-colon "Yeni blok"
|
||||
:whiteboard/new-block "Yeni blok:"
|
||||
:whiteboard/new-page "Yeni sayfa:"
|
||||
:whiteboard/new-whiteboard "Yeni beyaz tahta"
|
||||
:whiteboard/search-only-blocks "Yalnızca blokları ara"
|
||||
:whiteboard/search-only-pages "Yalnızca sayfaları ara"
|
||||
:whiteboard/cache-outdated "Önbellek eski. Lütfen grafın açılır menüsündeki 'Yeniden dizin oluştur' düğmesini tıklayın."
|
||||
:whiteboard/shape-quick-links "Hızlı Bağlantıları Şekillendir"
|
||||
:page-search "Geçerli sayfada ara"
|
||||
:graph-search "Grafta ara"
|
||||
:home "Başlangıç"
|
||||
:new-page "Yeni sayfa:"
|
||||
:whiteboard "Beyaz tahta"
|
||||
:whiteboards "Beyaz tahtalar"
|
||||
:new-whiteboard "Yeni beyaz tahta:"
|
||||
:new-graph "Yeni graf ekle"
|
||||
:graph "Graf"
|
||||
:graph/persist "Logseq dahili durumu senkronize ediyor, lütfen birkaç saniye bekleyin."
|
||||
:graph/persist-error "Dahili durum senkronize edilemedi."
|
||||
:graph/persist "Logseq dahili durumu eşitlenemiyor, lütfen birkaç saniye bekleyin."
|
||||
:graph/persist-error "Dahili durum eşitlenemedi."
|
||||
:graph/save "Kaydediliyor..."
|
||||
:graph/save-success "Başarıyla Kaydedildi"
|
||||
:graph/save-error "Kaydedilemedi"
|
||||
:graph/all-graphs "Tüm graflar"
|
||||
:graph/local-graphs "Yerel graflar:"
|
||||
:graph/remote-graphs "Uzak graflar:"
|
||||
:export "Dışarı aktar"
|
||||
:export-graph "Grafı dışarı aktar"
|
||||
:export-page "Sayfayı dışarı aktar"
|
||||
@@ -267,6 +384,7 @@
|
||||
:all-pages "Tüm sayfalar"
|
||||
:all-whiteboards "Tüm beyaz tahtalar"
|
||||
:all-files "Tüm dosyalar"
|
||||
:remove-orphaned-pages "Yalnız bırakılmış sayfalar kaldırılsın mı?"
|
||||
:all-journals "Bütün günlükler"
|
||||
:settings "Ayarlar"
|
||||
:settings-of-plugins "Eklenti ayarları"
|
||||
@@ -278,10 +396,12 @@
|
||||
:join-community "Topluluğa katıl"
|
||||
:discourse-title "Forum sayfamız!"
|
||||
:help-shortcut-title "Kısayolları ve diğer ipuçlarını kontrol etmek için tıklayın"
|
||||
:loading "Yükleniyor..."
|
||||
:parsing-files "Dosyalar ayrıştırılıyor"
|
||||
:loading-files "Dosyalar yükleniyor"
|
||||
:login "Oturum aç"
|
||||
:logout "Oturumu kapat"
|
||||
:logout-user "Oturumu kapat ({1})"
|
||||
:download "İndir"
|
||||
:language "Dil"
|
||||
:remove-background "Arka planı kaldır"
|
||||
@@ -289,20 +409,24 @@
|
||||
:heading "Başlık {1}"
|
||||
:auto-heading "Otomatik başlık"
|
||||
:open-a-directory "Yerel bir dizin aç"
|
||||
:toggle-theme "Temayı değiştir"
|
||||
|
||||
:help/shortcut-page-title "Klavye kısayolları"
|
||||
|
||||
:plugin/installed "Yüklü"
|
||||
:plugin/installed-plugin "Yüklü eklenti: {1}"
|
||||
:plugin/not-installed "Yüklü olmayan"
|
||||
:plugin/installing "Yükleniyor"
|
||||
:plugin/install "Yükle"
|
||||
:plugin/reload "Yeniden yükle"
|
||||
:plugin/update "Güncelle"
|
||||
:plugin/update-plugin "Eklentiyi güncelle: {1} - {2}"
|
||||
:plugin/check-update "Güncellemeyi denetle"
|
||||
:plugin/check-all-updates "Tüm güncellemeleri denetle"
|
||||
:plugin/found-updates "Yeni güncellemeler"
|
||||
:plugin/found-n-updates "{1} güncelleme bulundu"
|
||||
:plugin/update-all-selected "Seçilenlerin hepsini güncelle"
|
||||
:plugin/all-updated "Hepsi güncellendi!"
|
||||
:plugin/updates-downloading "Güncellemeler indiriliyor"
|
||||
:plugin/refresh-lists "Listeleri yenile"
|
||||
:plugin/enabled "Etkin"
|
||||
@@ -313,6 +437,7 @@
|
||||
:plugin/marketplace "Market"
|
||||
:plugin/downloads "İndirilme"
|
||||
:plugin/stars "Yıldızlar"
|
||||
:plugin/title "Başlık ({1})"
|
||||
:plugin/all "Tümü"
|
||||
:plugin/unpacked "Çıkarılmamış"
|
||||
:plugin/delete-alert "[{1}] eklentisini kaldırmak istediğinizden emin misiniz?"
|
||||
@@ -322,7 +447,18 @@
|
||||
:plugin/restart "Uygulamayı Yeniden Başlat"
|
||||
:plugin/unpacked-tips "Eklenti dizinini seçin"
|
||||
:plugin/contribute "✨ Yeni eklenti yaz ve gönder"
|
||||
:plugin/up-to-date "Güncel {1}"
|
||||
:plugin/custom-js-alert "custom.js dosyası bulundu, çalıştırılmasına izin veriliyor mu? (Bu dosyanın içeriğini anlamadıysanız, belirli güvenlik riskleri olduğu için çalıştırmaya izin vermemeniz önerilir.)"
|
||||
:plugin/security-warning "Eklentiler grafınıza ve yerel dosyalarınıza erişebilir, ağ istekleri yayınlayabilir.
|
||||
Ayrıca veri bozulmasına veya kaybına neden olabilirler. Graflarınız için uygun erişim kuralları üzerinde çalışıyoruz.
|
||||
Bu arada, graflarınızı düzenli olarak yedeklediğinizden emin olun ve eklentileri yalnızca okuyabildiğiniz ve
|
||||
kaynak kodunu anlayabildiğiniz zaman yükleyin."
|
||||
:plugin/search-plugin "Eklenti ara"
|
||||
:plugin/open-preferences "Tercihleri aç"
|
||||
:plugin/open-logseq-dir "Aç"
|
||||
:plugin/remote-error "Uzak hata: "
|
||||
:plugin/checking-for-updates "Eklenti güncellemeleri kontrol ediliyor ..."
|
||||
:plugin/list-of-updates "Eklenti güncellemeleri: "
|
||||
:plugin.install-from-file/menu-title "plugins.edn dosyasından yükle"
|
||||
:plugin.install-from-file/title "Eklentileri plugins.edn dosyasından yükle"
|
||||
:plugin.install-from-file/notice "Aşağıdaki eklentiler yüklü olan eklentilerinizin yerini alacak:"
|
||||
@@ -341,6 +477,8 @@
|
||||
:paginates/pages "Toplam {1} sayfa"
|
||||
:paginates/prev "Önceki"
|
||||
:paginates/next "Sonraki"
|
||||
|
||||
:tips/all-done "Tamamlandı!"
|
||||
|
||||
:command-palette/prompt "Bir komut yazın"
|
||||
:select/default-prompt "Birini seçin"
|
||||
@@ -349,8 +487,9 @@
|
||||
:select.graph/empty-placeholder-description "Eşleşen graf yok. Bir tane daha eklemek ister misin?"
|
||||
:select.graph/add-graph "Evet, başka bir graf ekle"
|
||||
|
||||
:file-sync/other-user-graph "Geçerli yerel graf, diğer kullanıcının uzak grafına bağlıdır. Bu yüzden senkronizasyon başlatılamıyor."
|
||||
:file-sync/other-user-graph "Geçerli yerel graf, diğer kullanıcının uzak grafına bağlıdır. Bu yüzden eşitleme başlatılamıyor."
|
||||
:file-sync/graph-deleted "Geçerli uzak graf silindi"
|
||||
:file-sync/rsapi-cannot-upload-err "Eşitleme başlatılamıyor, lütfen yerel saatin doğru olup olmadığını kontrol edin."
|
||||
|
||||
:notification/clear-all "Tümünü temizle"
|
||||
|
||||
@@ -363,6 +502,19 @@
|
||||
:shortcut.category/toggle "Aç/Kapat"
|
||||
:shortcut.category/whiteboard "Beyaz tahta"
|
||||
:shortcut.category/others "Diğer"
|
||||
:shortcut.category/plugins "Eklentiler"
|
||||
:window/minimize "Simge durumuna küçült"
|
||||
:window/maximize "Ekranı kapla"
|
||||
:window/restore "Pencere durumuna dön"
|
||||
:window/close "Kapat"
|
||||
:window/exit-fullscreen "Tam ekrandan çık"
|
||||
|
||||
:header/toggle-left-sidebar "Sol kenar çubuğunu aç/kapat"
|
||||
:header/search "Ara"
|
||||
:header/more "Diğer"
|
||||
:header/go-back "Geri git"
|
||||
:header/go-forward "İleri git"
|
||||
|
||||
:command.date-picker/complete "Tarih seçici: Seçilen günü seç"
|
||||
:command.date-picker/prev-day "Tarih seçici: Önceki günü seç"
|
||||
:command.date-picker/next-day "Tarih seçici: Sonraki günü seç"
|
||||
@@ -428,7 +580,7 @@
|
||||
:command.editor/copy-text "Seçimleri metin olarak kopyala"
|
||||
:command.editor/cut "Kes"
|
||||
:command.editor/undo "Geri al"
|
||||
:command.editor/redo "Tinele"
|
||||
:command.editor/redo "Yinele"
|
||||
:command.editor/insert-link "HTML Bağlantısı"
|
||||
:command.editor/select-all-blocks "Tüm blokları seç"
|
||||
:command.editor/zoom-in "Düzenlenen bloğu yakınlaştır / Aksi takdirde ileri git"
|
||||
@@ -472,6 +624,7 @@
|
||||
:command.sidebar/open-today-page "Sağ kenar çubuğunda bugünün sayfasını açın"
|
||||
:command.sidebar/close-top "Sağ kenar çubuğunun en üst öğesini kapatır"
|
||||
:command.sidebar/clear "Sağ kenar çubuğundaki herşeyi temizle"
|
||||
:command.misc/copy "Kopyala"
|
||||
:command.command-palette/toggle "Komut paletini aç"
|
||||
:command.graph/export-as-html "Herkese açık graf sayfalarını html olarak dışarı aktar"
|
||||
:command.graph/open "Açılacak grafı seçin"
|
||||
@@ -514,4 +667,4 @@
|
||||
:command.dev/show-block-data "(Dev) Blok verilerini göster"
|
||||
:command.dev/show-block-ast "(Dev) Blok AST'sini göster"
|
||||
:command.dev/show-page-data "(Dev) Sayfa verilerini göster"
|
||||
:command.dev/show-page-ast "(Dev) Sayfa AST'sini göster"}
|
||||
:command.dev/show-page-ast "(Dev) Sayfa AST'sini göster"}
|
||||
|
||||
@@ -8,11 +8,11 @@
|
||||
(defn- mock-get-query-result
|
||||
"Mocks get-query-result assuming custom queries are being tested. Db calls are
|
||||
mocked to minimize setup"
|
||||
[result query {:keys [table? current-block-uuid config] :or {config {}}}]
|
||||
[result query-m {:keys [table? current-block-uuid config] :or {config {}}}]
|
||||
(with-redefs [db/custom-query (constantly (atom result))
|
||||
model/with-pages identity]
|
||||
(binding [rum/*reactions* (volatile! #{})]
|
||||
(#'query-result/get-query-result {} config (atom nil) (atom nil) current-block-uuid query {:table? table?}))))
|
||||
(#'query-result/get-query-result config query-m (atom nil) current-block-uuid {:table? table?}))))
|
||||
|
||||
(deftest get-query-result-with-transforms-and-grouping
|
||||
(let [result (mapv
|
||||
@@ -22,8 +22,8 @@
|
||||
{:block/uuid (random-uuid) :block/scheduled 20230417}])
|
||||
sorted-result (sort-by :block/scheduled result)]
|
||||
(testing "For list view"
|
||||
(are [query expected]
|
||||
(= expected (mock-get-query-result result query {:table? false}))
|
||||
(are [query-m expected]
|
||||
(= expected (mock-get-query-result result query-m {:table? false}))
|
||||
|
||||
;; Default list behavior is to group result
|
||||
{}
|
||||
|
||||
Reference in New Issue
Block a user