mirror of
https://github.com/logseq/logseq.git
synced 2026-04-24 14:14:55 +00:00
Merge branch 'master' into refactor/apis-types
This commit is contained in:
2
deps.edn
2
deps.edn
@@ -5,7 +5,7 @@
|
||||
:sha "5d672bf84ed944414b9f61eeb83808ead7be9127"}
|
||||
|
||||
datascript/datascript {:git/url "https://github.com/logseq/datascript" ;; fork
|
||||
:sha "36fd248dcdb2b2d427ed342c53a3ddb9cb540b33"}
|
||||
:sha "ff5a7d5326e2546f40146e4a489343f557519bc3"}
|
||||
;; datascript/datascript {:local/root "../../datascript"}
|
||||
|
||||
datascript-transit/datascript-transit {:mvn/version "0.3.0"}
|
||||
|
||||
2
deps/cli/package.json
vendored
2
deps/cli/package.json
vendored
@@ -10,7 +10,7 @@
|
||||
},
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@logseq/nbb-logseq": "github:logseq/nbb-logseq#feat-db-v30",
|
||||
"@logseq/nbb-logseq": "github:logseq/nbb-logseq#feat-db-v31",
|
||||
"@modelcontextprotocol/sdk": "^1.17.5",
|
||||
"better-sqlite3": "~11.10.0",
|
||||
"fastify": "5.3.2",
|
||||
|
||||
6
deps/cli/yarn.lock
vendored
6
deps/cli/yarn.lock
vendored
@@ -43,9 +43,9 @@
|
||||
"@fastify/forwarded" "^3.0.0"
|
||||
ipaddr.js "^2.1.0"
|
||||
|
||||
"@logseq/nbb-logseq@github:logseq/nbb-logseq#feat-db-v30":
|
||||
version "1.2.173-feat-db-v30"
|
||||
resolved "https://codeload.github.com/logseq/nbb-logseq/tar.gz/1ad8d923adfe1a3423337127b987d353910306ab"
|
||||
"@logseq/nbb-logseq@github:logseq/nbb-logseq#feat-db-v31":
|
||||
version "1.2.173-feat-db-v31"
|
||||
resolved "https://codeload.github.com/logseq/nbb-logseq/tar.gz/d5b76a675f484dbfb5fbff8235aec6ff84b2f980"
|
||||
dependencies:
|
||||
import-meta-resolve "^4.1.0"
|
||||
|
||||
|
||||
2
deps/common/package.json
vendored
2
deps/common/package.json
vendored
@@ -3,7 +3,7 @@
|
||||
"version": "1.0.0",
|
||||
"private": true,
|
||||
"devDependencies": {
|
||||
"@logseq/nbb-logseq": "github:logseq/nbb-logseq#feat-db-v30"
|
||||
"@logseq/nbb-logseq": "github:logseq/nbb-logseq#feat-db-v31"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "yarn nbb-logseq -cp test -m nextjournal.test-runner"
|
||||
|
||||
6
deps/common/yarn.lock
vendored
6
deps/common/yarn.lock
vendored
@@ -2,9 +2,9 @@
|
||||
# yarn lockfile v1
|
||||
|
||||
|
||||
"@logseq/nbb-logseq@github:logseq/nbb-logseq#feat-db-v30":
|
||||
version "1.2.173-feat-db-v30"
|
||||
resolved "https://codeload.github.com/logseq/nbb-logseq/tar.gz/1ad8d923adfe1a3423337127b987d353910306ab"
|
||||
"@logseq/nbb-logseq@github:logseq/nbb-logseq#feat-db-v31":
|
||||
version "1.2.173-feat-db-v31"
|
||||
resolved "https://codeload.github.com/logseq/nbb-logseq/tar.gz/d5b76a675f484dbfb5fbff8235aec6ff84b2f980"
|
||||
dependencies:
|
||||
import-meta-resolve "^4.1.0"
|
||||
|
||||
|
||||
2
deps/db/deps.edn
vendored
2
deps/db/deps.edn
vendored
@@ -1,7 +1,7 @@
|
||||
{:deps
|
||||
;; These nbb-logseq deps are kept in sync with https://github.com/logseq/nbb-logseq/blob/main/bb.edn
|
||||
{datascript/datascript {:git/url "https://github.com/logseq/datascript" ;; fork
|
||||
:sha "36fd248dcdb2b2d427ed342c53a3ddb9cb540b33"}
|
||||
:sha "ff5a7d5326e2546f40146e4a489343f557519bc3"}
|
||||
;; datascript/datascript {:local/root "../../../../datascript"}
|
||||
datascript-transit/datascript-transit {:mvn/version "0.3.0"
|
||||
:exclusions [datascript/datascript]}
|
||||
|
||||
2
deps/db/package.json
vendored
2
deps/db/package.json
vendored
@@ -3,7 +3,7 @@
|
||||
"version": "1.0.0",
|
||||
"private": true,
|
||||
"devDependencies": {
|
||||
"@logseq/nbb-logseq": "github:logseq/nbb-logseq#feat-db-v30",
|
||||
"@logseq/nbb-logseq": "github:logseq/nbb-logseq#feat-db-v31",
|
||||
"fs-extra": "^11.3.0"
|
||||
},
|
||||
"dependencies": {
|
||||
|
||||
35
deps/db/src/logseq/db/frontend/rules.cljc
vendored
35
deps/db/src/logseq/db/frontend/rules.cljc
vendored
@@ -260,10 +260,35 @@
|
||||
[?pv :logseq.property/value ?val])))]
|
||||
|
||||
:tags
|
||||
'[(tags ?b ?tags)
|
||||
[?b :block/tags ?tag]
|
||||
[(contains? ?tags ?tag)]
|
||||
[(missing? $ ?b :block/link)]]
|
||||
'[;; Case 1: input is number entity id
|
||||
[(tag-spec->tag ?tag ?spec)
|
||||
[(number? ?spec)]
|
||||
[(identity ?spec) ?tag]]
|
||||
|
||||
;; Case 2: input is :block/title
|
||||
[(tag-spec->tag ?tag ?spec)
|
||||
[?tag :block/title ?spec]]
|
||||
|
||||
;; Case 3: input is db/ident
|
||||
[(tag-spec->tag ?tag ?spec)
|
||||
[?tag :db/ident ?spec]]
|
||||
|
||||
;; --- Main rule -----------------------------------------------------------
|
||||
|
||||
[(tags ?b ?tags)
|
||||
;; enumerate user input set
|
||||
[(identity ?tags) [?spec ...]]
|
||||
(tag-spec->tag ?tag ?spec)
|
||||
|
||||
;; tag/class attached to block
|
||||
[?b :block/tags ?tc]
|
||||
|
||||
;; direct or descendant
|
||||
(or
|
||||
[(= ?tag ?tc)]
|
||||
(class-extends ?tag ?tc))
|
||||
|
||||
[(missing? $ ?b :block/link)]]]
|
||||
|
||||
:task
|
||||
'[(task ?b ?statuses)
|
||||
@@ -285,6 +310,8 @@
|
||||
;; simple query helpers
|
||||
:task #{:ref-property-with-default}
|
||||
:priority #{:ref-property-with-default}
|
||||
:tags #{:class-extends}
|
||||
|
||||
:has-property-or-object-property #{:object-has-class-property}
|
||||
:object-has-class-property #{:class-extends}
|
||||
:has-simple-query-property #{:has-property-or-object-property}
|
||||
|
||||
36
deps/db/test/logseq/db/frontend/rules_test.cljs
vendored
36
deps/db/test/logseq/db/frontend/rules_test.cljs
vendored
@@ -137,3 +137,39 @@
|
||||
(map (comp :block/title first))
|
||||
set))
|
||||
"property can be used multiple times to query a property value's property"))))
|
||||
|
||||
(deftest tags-test
|
||||
(let [conn (db-test/create-conn-with-blocks
|
||||
{:pages-and-blocks
|
||||
[{:page {:block/title "Page1"
|
||||
:build/tags [:Person]}}
|
||||
{:page {:block/title "Page2"
|
||||
:build/tags [:Person]}}
|
||||
{:page {:block/title "Page3"
|
||||
:build/tags [:Employee]}}]})
|
||||
person-eid (:db/id (d/entity @conn :user.class/Person))]
|
||||
(d/transact! conn [{:db/ident :user.class/Employee
|
||||
:logseq.property.class/extends :user.class/Person}])
|
||||
(testing "tags query with eid"
|
||||
(is (= #{"Page1" "Page2" "Page3"}
|
||||
(->> (d/q
|
||||
'[:find (pull ?b [:block/title])
|
||||
:in $ % ?tag-ids
|
||||
:where (tags ?b ?tag-ids)]
|
||||
@conn
|
||||
(rules/extract-rules rules/db-query-dsl-rules)
|
||||
#{person-eid})
|
||||
(map (comp :block/title first))
|
||||
set))))
|
||||
(testing "tags query with db/ident"
|
||||
(is (= #{"Page1" "Page2" "Page3"}
|
||||
(->> (q-with-rules '[:find (pull ?b [:block/title]) :where (tags ?b #{:user.class/Person})]
|
||||
@conn)
|
||||
(map (comp :block/title first))
|
||||
set))))
|
||||
(testing "tags query with block/title"
|
||||
(is (= #{"Page1" "Page2" "Page3"}
|
||||
(->> (q-with-rules '[:find (pull ?b [:block/title]) :where (tags ?b #{"Person"})]
|
||||
@conn)
|
||||
(map (comp :block/title first))
|
||||
set))))))
|
||||
|
||||
6
deps/db/yarn.lock
vendored
6
deps/db/yarn.lock
vendored
@@ -2,9 +2,9 @@
|
||||
# yarn lockfile v1
|
||||
|
||||
|
||||
"@logseq/nbb-logseq@github:logseq/nbb-logseq#feat-db-v30":
|
||||
version "1.2.173-feat-db-v30"
|
||||
resolved "https://codeload.github.com/logseq/nbb-logseq/tar.gz/1ad8d923adfe1a3423337127b987d353910306ab"
|
||||
"@logseq/nbb-logseq@github:logseq/nbb-logseq#feat-db-v31":
|
||||
version "1.2.173-feat-db-v31"
|
||||
resolved "https://codeload.github.com/logseq/nbb-logseq/tar.gz/d5b76a675f484dbfb5fbff8235aec6ff84b2f980"
|
||||
dependencies:
|
||||
import-meta-resolve "^4.1.0"
|
||||
|
||||
|
||||
2
deps/graph-parser/package.json
vendored
2
deps/graph-parser/package.json
vendored
@@ -3,7 +3,7 @@
|
||||
"version": "1.0.0",
|
||||
"private": true,
|
||||
"devDependencies": {
|
||||
"@logseq/nbb-logseq": "github:logseq/nbb-logseq#feat-db-v30",
|
||||
"@logseq/nbb-logseq": "github:logseq/nbb-logseq#feat-db-v31",
|
||||
"better-sqlite3": "11.10.0"
|
||||
},
|
||||
"dependencies": {
|
||||
|
||||
6
deps/graph-parser/yarn.lock
vendored
6
deps/graph-parser/yarn.lock
vendored
@@ -2,9 +2,9 @@
|
||||
# yarn lockfile v1
|
||||
|
||||
|
||||
"@logseq/nbb-logseq@github:logseq/nbb-logseq#feat-db-v30":
|
||||
version "1.2.173-feat-db-v30"
|
||||
resolved "https://codeload.github.com/logseq/nbb-logseq/tar.gz/1ad8d923adfe1a3423337127b987d353910306ab"
|
||||
"@logseq/nbb-logseq@github:logseq/nbb-logseq#feat-db-v31":
|
||||
version "1.2.173-feat-db-v31"
|
||||
resolved "https://codeload.github.com/logseq/nbb-logseq/tar.gz/d5b76a675f484dbfb5fbff8235aec6ff84b2f980"
|
||||
dependencies:
|
||||
import-meta-resolve "^4.1.0"
|
||||
|
||||
|
||||
2
deps/outliner/deps.edn
vendored
2
deps/outliner/deps.edn
vendored
@@ -1,7 +1,7 @@
|
||||
{:deps
|
||||
;; These nbb-logseq deps are kept in sync with https://github.com/logseq/nbb-logseq/blob/main/bb.edn
|
||||
{datascript/datascript {:git/url "https://github.com/logseq/datascript" ;; fork
|
||||
:sha "36fd248dcdb2b2d427ed342c53a3ddb9cb540b33"}
|
||||
:sha "ff5a7d5326e2546f40146e4a489343f557519bc3"}
|
||||
;; datascript/datascript {:local/root "../../../../datascript"}
|
||||
com.cognitect/transit-cljs {:mvn/version "0.8.280"}
|
||||
|
||||
|
||||
2
deps/outliner/package.json
vendored
2
deps/outliner/package.json
vendored
@@ -3,7 +3,7 @@
|
||||
"version": "1.0.0",
|
||||
"private": true,
|
||||
"devDependencies": {
|
||||
"@logseq/nbb-logseq": "github:logseq/nbb-logseq#feat-db-v30"
|
||||
"@logseq/nbb-logseq": "github:logseq/nbb-logseq#feat-db-v31"
|
||||
},
|
||||
"dependencies": {
|
||||
"better-sqlite3": "11.10.0",
|
||||
|
||||
6
deps/outliner/yarn.lock
vendored
6
deps/outliner/yarn.lock
vendored
@@ -2,9 +2,9 @@
|
||||
# yarn lockfile v1
|
||||
|
||||
|
||||
"@logseq/nbb-logseq@github:logseq/nbb-logseq#feat-db-v30":
|
||||
version "1.2.173-feat-db-v30"
|
||||
resolved "https://codeload.github.com/logseq/nbb-logseq/tar.gz/1ad8d923adfe1a3423337127b987d353910306ab"
|
||||
"@logseq/nbb-logseq@github:logseq/nbb-logseq#feat-db-v31":
|
||||
version "1.2.173-feat-db-v31"
|
||||
resolved "https://codeload.github.com/logseq/nbb-logseq/tar.gz/d5b76a675f484dbfb5fbff8235aec6ff84b2f980"
|
||||
dependencies:
|
||||
import-meta-resolve "^4.1.0"
|
||||
|
||||
|
||||
2
deps/publishing/package.json
vendored
2
deps/publishing/package.json
vendored
@@ -3,7 +3,7 @@
|
||||
"version": "1.0.0",
|
||||
"private": true,
|
||||
"devDependencies": {
|
||||
"@logseq/nbb-logseq": "github:logseq/nbb-logseq#feat-db-v30",
|
||||
"@logseq/nbb-logseq": "github:logseq/nbb-logseq#feat-db-v31",
|
||||
"mldoc": "^1.5.9"
|
||||
},
|
||||
"dependencies": {
|
||||
|
||||
6
deps/publishing/yarn.lock
vendored
6
deps/publishing/yarn.lock
vendored
@@ -2,9 +2,9 @@
|
||||
# yarn lockfile v1
|
||||
|
||||
|
||||
"@logseq/nbb-logseq@github:logseq/nbb-logseq#feat-db-v30":
|
||||
version "1.2.173-feat-db-v30"
|
||||
resolved "https://codeload.github.com/logseq/nbb-logseq/tar.gz/1ad8d923adfe1a3423337127b987d353910306ab"
|
||||
"@logseq/nbb-logseq@github:logseq/nbb-logseq#feat-db-v31":
|
||||
version "1.2.173-feat-db-v31"
|
||||
resolved "https://codeload.github.com/logseq/nbb-logseq/tar.gz/d5b76a675f484dbfb5fbff8235aec6ff84b2f980"
|
||||
dependencies:
|
||||
import-meta-resolve "^4.1.0"
|
||||
|
||||
|
||||
3
deps/shui/src/logseq/shui/form/password.cljs
vendored
3
deps/shui/src/logseq/shui/form/password.cljs
vendored
@@ -13,7 +13,8 @@
|
||||
(form-core/input
|
||||
(merge
|
||||
option
|
||||
{:type (if visible? "text" "password")}))
|
||||
{:type (or (:type option)
|
||||
(if visible? "text" "password"))}))
|
||||
(when-not (string/blank? (:value option))
|
||||
(base-core/button
|
||||
{:variant :ghost
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"version": "1.0.0",
|
||||
"private": true,
|
||||
"devDependencies": {
|
||||
"@logseq/nbb-logseq": "github:logseq/nbb-logseq#feat-db-v30"
|
||||
"@logseq/nbb-logseq": "github:logseq/nbb-logseq#feat-db-v31"
|
||||
},
|
||||
"dependencies": {
|
||||
"better-sqlite3": "11.10.0",
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
# yarn lockfile v1
|
||||
|
||||
|
||||
"@logseq/nbb-logseq@github:logseq/nbb-logseq#feat-db-v30":
|
||||
version "1.2.173-feat-db-v30"
|
||||
resolved "https://codeload.github.com/logseq/nbb-logseq/tar.gz/1ad8d923adfe1a3423337127b987d353910306ab"
|
||||
"@logseq/nbb-logseq@github:logseq/nbb-logseq#feat-db-v31":
|
||||
version "1.2.173-feat-db-v31"
|
||||
resolved "https://codeload.github.com/logseq/nbb-logseq/tar.gz/d5b76a675f484dbfb5fbff8235aec6ff84b2f980"
|
||||
dependencies:
|
||||
import-meta-resolve "^4.1.0"
|
||||
|
||||
|
||||
@@ -75,7 +75,6 @@
|
||||
|
||||
> .fake-bar {
|
||||
@apply w-full px-5 pt-1 sm:hidden;
|
||||
|
||||
top: -45px;
|
||||
}
|
||||
}
|
||||
@@ -87,10 +86,6 @@
|
||||
.menu-link {
|
||||
padding: 5px 15px;
|
||||
opacity: .8;
|
||||
|
||||
&:hover {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -101,15 +96,6 @@
|
||||
.keyboard-shortcut {
|
||||
@apply opacity-0 invisible;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
.keyboard-shortcut {
|
||||
visibility: visible;
|
||||
transition: opacity 1s;
|
||||
transition-delay: 2s;
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -132,7 +118,8 @@
|
||||
}
|
||||
}
|
||||
|
||||
&:hover, &.active, > .thumb {
|
||||
&.active,
|
||||
> .thumb {
|
||||
background-color: var(--lx-gray-04, var(--ls-quaternary-background-color, var(--rx-gray-04)));
|
||||
}
|
||||
}
|
||||
@@ -164,7 +151,7 @@
|
||||
|
||||
> .hd {
|
||||
@apply pl-2 pr-1 h-[32px] flex justify-between items-center select-none sticky top-[-4px];
|
||||
@apply cursor-pointer z-[2] active:opacity-80 rounded-md;
|
||||
@apply cursor-pointer z-[2] rounded-md;
|
||||
|
||||
background-color: var(--left-sidebar-bg-color);
|
||||
|
||||
@@ -173,28 +160,13 @@
|
||||
}
|
||||
|
||||
&.non-collapsable {
|
||||
@apply cursor-default active:opacity-100;
|
||||
@apply cursor-default;
|
||||
|
||||
.wrap-th {
|
||||
@apply cursor-default;
|
||||
}
|
||||
}
|
||||
|
||||
&:not(.non-collapsable) {
|
||||
|
||||
&:hover {
|
||||
background-color: var(--lx-gray-04, var(--ls-quaternary-background-color, var(--rx-gray-04)));
|
||||
|
||||
* {
|
||||
@apply !opacity-100;
|
||||
}
|
||||
|
||||
.more {
|
||||
@apply opacity-80;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.wrap-th {
|
||||
@apply flex items-center text-sm font-medium opacity-50;
|
||||
|
||||
@@ -211,10 +183,6 @@
|
||||
> .b {
|
||||
@apply transition-opacity opacity-0 delay-300;
|
||||
}
|
||||
|
||||
&:hover > .b {
|
||||
@apply opacity-80;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -233,6 +201,7 @@
|
||||
|
||||
.page-title {
|
||||
@apply whitespace-nowrap text-ellipsis flex-grow overflow-hidden pr-2;
|
||||
|
||||
* {
|
||||
display: inline !important;
|
||||
}
|
||||
@@ -242,7 +211,7 @@
|
||||
@apply flex items-center;
|
||||
}
|
||||
|
||||
&:hover, &:has([data-popup-active]), &:active {
|
||||
&[data-popup-active] {
|
||||
@apply bg-gray-04 opacity-100;
|
||||
}
|
||||
}
|
||||
@@ -279,6 +248,59 @@
|
||||
}
|
||||
}
|
||||
|
||||
/* ================================
|
||||
* Desktop hover-only behavior
|
||||
* ================================ */
|
||||
@media (hover: hover) and (pointer: fine) {
|
||||
.dropdown-wrapper .menu-link:hover {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.sidebar-navigations a:hover .keyboard-shortcut {
|
||||
visibility: visible;
|
||||
transition: opacity 1s;
|
||||
transition-delay: 2s;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
a.item:hover {
|
||||
background-color: var(--lx-gray-04, var(--ls-quaternary-background-color, var(--rx-gray-04)));
|
||||
}
|
||||
|
||||
.sidebar-content-group-inner > .hd:not(.non-collapsable):hover {
|
||||
background-color: var(--lx-gray-04, var(--ls-quaternary-background-color, var(--rx-gray-04)));
|
||||
|
||||
* {
|
||||
@apply !opacity-100;
|
||||
}
|
||||
|
||||
.more {
|
||||
@apply opacity-80;
|
||||
}
|
||||
}
|
||||
|
||||
.sidebar-content-group-inner > .hd.enter-show-more:hover > .b {
|
||||
@apply opacity-80;
|
||||
}
|
||||
|
||||
.sidebar-content-group-inner > .bd ul li > a:first-of-type:hover {
|
||||
@apply bg-gray-04 opacity-100;
|
||||
}
|
||||
}
|
||||
|
||||
/* ================================
|
||||
* Mobile / touch devices
|
||||
* ================================ */
|
||||
@media (hover: none) and (pointer: coarse) {
|
||||
a.item:active {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
.sidebar-content-group-inner > .bd ul li > a:first-of-type:active {
|
||||
background-color: transparent;
|
||||
}
|
||||
}
|
||||
|
||||
@screen sm {
|
||||
padding-top: 0;
|
||||
width: var(--ls-left-sidebar-width) !important;
|
||||
@@ -289,6 +311,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.cp__sidebar-left-layout {
|
||||
@apply fixed top-0 left-0 w-[10px] z-[var(--ls-z-index-level-4)];
|
||||
|
||||
|
||||
@@ -47,9 +47,8 @@
|
||||
(set-matched! (= password-confirm password))))})
|
||||
|
||||
[:div.flex.flex-col.gap-2
|
||||
(shui/input
|
||||
{:type "password-confirm"
|
||||
:placeholder "Enter password again"
|
||||
(shui/toggle-password
|
||||
{:placeholder "Enter password again"
|
||||
:value password-confirm
|
||||
:on-change (fn [e] (set-password-confirm! (-> e .-target .-value)))
|
||||
:on-blur (fn [] (set-matched! (= password-confirm password)))})
|
||||
|
||||
@@ -139,8 +139,7 @@
|
||||
"Export debug transit file"]
|
||||
[:p.text-sm.opacity-70.mb-0 "Exports to a .transit file to send to us for debugging. Any sensitive data will be removed in the exported file."]])
|
||||
|
||||
(when (and db-based? util/web-platform?
|
||||
(not (util/mobile?)))
|
||||
(when (and db-based? (not (util/mobile?)))
|
||||
[:div
|
||||
[:hr]
|
||||
(auto-backup)])]])))
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
[frontend.state :as state]
|
||||
[frontend.ui :as ui]
|
||||
[frontend.util :as util]
|
||||
[logseq.api.block :as api-block]
|
||||
[logseq.db :as ldb]
|
||||
[logseq.db.common.order :as db-order]
|
||||
[logseq.db.frontend.entity-util :as entity-util]
|
||||
@@ -31,7 +32,6 @@
|
||||
[logseq.outliner.property :as outliner-property]
|
||||
[logseq.shui.hooks :as hooks]
|
||||
[logseq.shui.ui :as shui]
|
||||
[logseq.api.block :as api-block]
|
||||
[promesa.core :as p]
|
||||
[rum.core :as rum]))
|
||||
|
||||
@@ -184,6 +184,7 @@
|
||||
[:span.pt-1 (shui/tabler-icon "letter-t" {:size 15 :class "opacity-40"})])
|
||||
[:strong.font-normal (:block/title x)]]))
|
||||
:value (:block/uuid x)
|
||||
:block/title (:block/title x)
|
||||
:convert-page-to-property? convert?})) properties)
|
||||
(util/distinct-by-last-wins :value))]
|
||||
[:div.ls-property-add.flex.flex-row.items-center.property-key
|
||||
@@ -192,7 +193,7 @@
|
||||
(select/select (merge
|
||||
{:items items
|
||||
:grouped? true
|
||||
:extract-fn :label
|
||||
:extract-fn :block/title
|
||||
:dropdown? false
|
||||
:close-modal? false
|
||||
:new-case-sensitive? true
|
||||
@@ -485,16 +486,18 @@
|
||||
date? (= type :date)
|
||||
datetime? (= type :datetime)
|
||||
checkbox? (= type :checkbox)
|
||||
number-type? (= type :number)
|
||||
property-key-cp' (property-key-cp block property (assoc (select-keys opts [:class-schema?])
|
||||
:block? block?
|
||||
:inline-text inline-text
|
||||
:page-cp page-cp))]
|
||||
[:div {:key (str "property-pair-" (:db/id block) "-" (:db/id property))
|
||||
:class (cond
|
||||
(or date? datetime? checkbox?)
|
||||
(or date? datetime? checkbox? number-type?)
|
||||
"property-pair items-center"
|
||||
:else
|
||||
"property-pair items-start")}
|
||||
"property-pair items-start")
|
||||
:data-property-type (name type)}
|
||||
(if (seq sortable-opts)
|
||||
(dnd/sortable-item (assoc sortable-opts :class "property-key") property-key-cp')
|
||||
[:div.property-key property-key-cp'])
|
||||
|
||||
@@ -138,16 +138,14 @@
|
||||
(not (contains? selected-choices (:value item))))
|
||||
search-result')
|
||||
search-result')
|
||||
new-option {:value @*input
|
||||
:label (str "+ New option: " @*input)}
|
||||
search-result (if (and show-new-when-not-exact-match?
|
||||
(not exact-match?)
|
||||
(not (string/blank? @*input))
|
||||
(not (exact-match-exclude-items @*input)))
|
||||
(->>
|
||||
(cons
|
||||
(first search-result')
|
||||
(cons {:value @*input
|
||||
:label (str "+ New option: " @*input)}
|
||||
(rest search-result')))
|
||||
(cons new-option search-result')
|
||||
(remove nil?))
|
||||
search-result')
|
||||
input-opts' (if (fn? input-opts) (input-opts (empty? search-result)) input-opts)
|
||||
|
||||
@@ -990,7 +990,7 @@
|
||||
(rum/defc table-row < rum/reactive db-mixins/query
|
||||
[table row props option]
|
||||
(let [block (db/sub-block (:db/id row))
|
||||
block' (if (= :full (:block.temp/load-status block)) block row)
|
||||
block' (if (contains? #{:self :full} (:block.temp/load-status block)) block row)
|
||||
row' (when block'
|
||||
(-> block'
|
||||
(update :block/tags (fn [tags]
|
||||
|
||||
@@ -8,8 +8,8 @@
|
||||
[frontend.util :as util]
|
||||
[frontend.util.page :as page-util]
|
||||
[goog.dom :as gdom]
|
||||
[promesa.core :as p]
|
||||
[logseq.db.sqlite.export :as sqlite-export]))
|
||||
[logseq.db.sqlite.export :as sqlite-export]
|
||||
[promesa.core :as p]))
|
||||
|
||||
(defn- <export-edn-helper
|
||||
"Gets export-edn and validates export for smaller exports. Copied from component.export/<export-edn-helper"
|
||||
@@ -41,10 +41,10 @@
|
||||
:group-by? group-by?})
|
||||
pull-data (with-out-str (pprint/pprint result))]
|
||||
(if (:export-edn-error result)
|
||||
(notification/show! (:export-edn-error result) :error)
|
||||
(do (.writeText js/navigator.clipboard pull-data)
|
||||
(println pull-data)
|
||||
(notification/show! "Copied view nodes' data!" :success)))))
|
||||
(notification/show! (:export-edn-error result) :error)
|
||||
(do (.writeText js/navigator.clipboard pull-data)
|
||||
(println pull-data)
|
||||
(notification/show! "Copied view nodes' data!" :success)))))
|
||||
|
||||
(defn ^:export export-page-data []
|
||||
(if-let [page-id (page-util/get-current-page-id)]
|
||||
@@ -77,8 +77,14 @@
|
||||
(str "." (string/lower-case (name extension)))))
|
||||
|
||||
(defn export-repo-as-db-edn!
|
||||
"Run db validation before exporting EDN"
|
||||
[repo]
|
||||
(p/let [result (state/<invoke-db-worker :thread-api/export-edn
|
||||
(p/let [validate-result (state/<invoke-db-worker :thread-api/validate-db
|
||||
(state/get-current-repo))
|
||||
{:keys [errors]} validate-result
|
||||
_ (when (seq errors)
|
||||
(throw (ex-info "Graph validation failed" validate-result)))
|
||||
result (state/<invoke-db-worker :thread-api/export-edn
|
||||
(state/get-current-repo)
|
||||
{:export-type :graph
|
||||
:graph-options {:include-timestamps? true}})
|
||||
|
||||
@@ -325,7 +325,7 @@
|
||||
|
||||
(when backup-now? (backup-db-graph repo :backup-now))
|
||||
|
||||
;; run backup every hour
|
||||
;; run backup every hour
|
||||
(let [interval (js/setInterval #(backup-db-graph repo :auto)
|
||||
(* 1 60 60 1000))]
|
||||
(reset! *backup-interval interval)))))
|
||||
|
||||
@@ -22,6 +22,14 @@
|
||||
(fn [{:keys [entity dispatch-key]}]
|
||||
(let [entity (d/entity db (:db/id entity))]
|
||||
(cond
|
||||
(and (= "External URL" (:block/title entity))
|
||||
(nil? (:block/tags entity)))
|
||||
[[:db/retractEntity (:db/id entity)]]
|
||||
(and (:db/ident entity)
|
||||
(db-class/user-class-namespace? (str (:db/ident entity)))
|
||||
(not (ldb/class? entity)))
|
||||
[[:db/add (:db/id entity) :block/tags :logseq.class/Tag]
|
||||
[:db/retract (:db/id entity) :block/tags :logseq.class/Page]]
|
||||
(and (ldb/property? entity)
|
||||
(:logseq.property.class/extends entity))
|
||||
[[:db/retract (:db/id entity) :logseq.property.class/extends]]
|
||||
|
||||
@@ -301,12 +301,16 @@ ul {
|
||||
}
|
||||
}
|
||||
|
||||
.ls-properties-area .property-pair {
|
||||
@apply flex flex-col items-start;
|
||||
.ls-properties-area {
|
||||
.property-pair {
|
||||
&[data-property-type=default] {
|
||||
@apply flex flex-col items-start;
|
||||
|
||||
.property-key {
|
||||
margin-bottom: -6px;
|
||||
}
|
||||
.property-key {
|
||||
margin-bottom: -6px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
body, #root {
|
||||
@@ -382,3 +386,7 @@ div[data-radix-menu-content] {
|
||||
.ls-foldable-title-control {
|
||||
margin-left: 0px;
|
||||
}
|
||||
|
||||
.ls-number {
|
||||
min-height: 20px;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user