🎨 Supports searching database blocks by the view title https://github.com/siyuan-note/siyuan/issues/9348

This commit is contained in:
Daniel 2023-10-05 12:37:34 +08:00
parent 5e38fe4335
commit 3c67701681
No known key found for this signature in database
GPG key ID: 86211BA83DF03017
9 changed files with 73 additions and 41 deletions

View file

@ -114,6 +114,15 @@ export const query = {
<span class="fn__space"></span> <span class="fn__space"></span>
<input class="b3-switch" id="embedBlock" type="checkbox"${window.siyuan.config.search.embedBlock ? " checked" : ""}/> <input class="b3-switch" id="embedBlock" type="checkbox"${window.siyuan.config.search.embedBlock ? " checked" : ""}/>
</label> </label>
<label class="fn__flex">
<svg class="svg"><use xlink:href="#iconDatabase"></use></svg>
<span class="fn__space"></span>
<div class="fn__flex-1">
${window.siyuan.languages.database}
</div>
<span class="fn__space"></span>
<input class="b3-switch" id="databaseBlock" type="checkbox"${window.siyuan.config.search.databaseBlock ? " checked" : ""}/>
</label>
</div> </div>
</div> </div>
<div class="b3-label"> <div class="b3-label">
@ -269,6 +278,7 @@ export const query = {
codeBlock: (query.element.querySelector("#codeBlock") as HTMLInputElement).checked, codeBlock: (query.element.querySelector("#codeBlock") as HTMLInputElement).checked,
htmlBlock: (query.element.querySelector("#htmlBlock") as HTMLInputElement).checked, htmlBlock: (query.element.querySelector("#htmlBlock") as HTMLInputElement).checked,
embedBlock: (query.element.querySelector("#embedBlock") as HTMLInputElement).checked, embedBlock: (query.element.querySelector("#embedBlock") as HTMLInputElement).checked,
databaseBlock: (query.element.querySelector("#databaseBlock") as HTMLInputElement).checked,
mathBlock: (query.element.querySelector("#mathBlock") as HTMLInputElement).checked, mathBlock: (query.element.querySelector("#mathBlock") as HTMLInputElement).checked,
table: (query.element.querySelector("#table") as HTMLInputElement).checked, table: (query.element.querySelector("#table") as HTMLInputElement).checked,
blockquote: (query.element.querySelector("#blockquote") as HTMLInputElement).checked, blockquote: (query.element.querySelector("#blockquote") as HTMLInputElement).checked,

View file

@ -18,7 +18,8 @@ import {App} from "../../index";
import { import {
assetFilterMenu, assetFilterMenu,
assetInputEvent, assetInputEvent,
assetMethodMenu, assetMoreMenu, assetMethodMenu,
assetMoreMenu,
renderNextAssetMark, renderNextAssetMark,
renderPreview, renderPreview,
} from "../../search/assets"; } from "../../search/assets";
@ -482,6 +483,7 @@ const initSearchEvent = (app: App, element: Element, config: ISearchOption) => {
superBlock: window.siyuan.config.search.superBlock, superBlock: window.siyuan.config.search.superBlock,
paragraph: window.siyuan.config.search.paragraph, paragraph: window.siyuan.config.search.paragraph,
embedBlock: window.siyuan.config.search.embedBlock, embedBlock: window.siyuan.config.search.embedBlock,
databaseBlock: window.siyuan.config.search.databaseBlock,
} }
}, config); }, config);
}); });

View file

@ -20,7 +20,7 @@ export const filterMenu = (config: ISearchOption, cb: () => void) => {
${window.siyuan.languages.math} ${window.siyuan.languages.math}
</div> </div>
<span class="fn__space"></span> <span class="fn__space"></span>
<input id="removeAssets" class="b3-switch fn__flex-center" data-type="mathBlock" type="checkbox"${config.types.mathBlock ? " checked" : ""}> <input class="b3-switch fn__flex-center" data-type="mathBlock" type="checkbox"${config.types.mathBlock ? " checked" : ""}>
</label> </label>
<label class="fn__flex b3-label"> <label class="fn__flex b3-label">
<svg class="ft__on-surface svg fn__flex-center"><use xlink:href="#iconTable"></use></svg> <svg class="ft__on-surface svg fn__flex-center"><use xlink:href="#iconTable"></use></svg>
@ -29,7 +29,7 @@ export const filterMenu = (config: ISearchOption, cb: () => void) => {
${window.siyuan.languages.table} ${window.siyuan.languages.table}
</div> </div>
<span class="fn__space"></span> <span class="fn__space"></span>
<input id="removeAssets" class="b3-switch fn__flex-center" data-type="table" type="checkbox"${config.types.table ? " checked" : ""}> <input class="b3-switch fn__flex-center" data-type="table" type="checkbox"${config.types.table ? " checked" : ""}>
</label> </label>
<label class="fn__flex b3-label"> <label class="fn__flex b3-label">
<svg class="ft__on-surface svg fn__flex-center"><use xlink:href="#iconQuote"></use></svg> <svg class="ft__on-surface svg fn__flex-center"><use xlink:href="#iconQuote"></use></svg>
@ -38,7 +38,7 @@ export const filterMenu = (config: ISearchOption, cb: () => void) => {
${window.siyuan.languages.quote} ${window.siyuan.languages.quote}
</div> </div>
<span class="fn__space"></span> <span class="fn__space"></span>
<input id="removeAssets" class="b3-switch fn__flex-center" data-type="blockquote" type="checkbox"${config.types.blockquote ? " checked" : ""}> <input class="b3-switch fn__flex-center" data-type="blockquote" type="checkbox"${config.types.blockquote ? " checked" : ""}>
</label> </label>
<label class="fn__flex b3-label"> <label class="fn__flex b3-label">
<svg class="ft__on-surface svg fn__flex-center"><use xlink:href="#iconSuper"></use></svg> <svg class="ft__on-surface svg fn__flex-center"><use xlink:href="#iconSuper"></use></svg>
@ -47,7 +47,7 @@ export const filterMenu = (config: ISearchOption, cb: () => void) => {
${window.siyuan.languages.superBlock} ${window.siyuan.languages.superBlock}
</div> </div>
<span class="fn__space"></span> <span class="fn__space"></span>
<input id="removeAssets" class="b3-switch fn__flex-center" data-type="superBlock" type="checkbox"${config.types.superBlock ? " checked" : ""}> <input class="b3-switch fn__flex-center" data-type="superBlock" type="checkbox"${config.types.superBlock ? " checked" : ""}>
</label> </label>
<label class="fn__flex b3-label"> <label class="fn__flex b3-label">
<svg class="ft__on-surface svg fn__flex-center"><use xlink:href="#iconParagraph"></use></svg> <svg class="ft__on-surface svg fn__flex-center"><use xlink:href="#iconParagraph"></use></svg>
@ -56,7 +56,7 @@ export const filterMenu = (config: ISearchOption, cb: () => void) => {
${window.siyuan.languages.paragraph} ${window.siyuan.languages.paragraph}
</div> </div>
<span class="fn__space"></span> <span class="fn__space"></span>
<input id="removeAssets" class="b3-switch fn__flex-center" data-type="paragraph" type="checkbox"${config.types.paragraph ? " checked" : ""}> <input class="b3-switch fn__flex-center" data-type="paragraph" type="checkbox"${config.types.paragraph ? " checked" : ""}>
</label> </label>
<label class="fn__flex b3-label"> <label class="fn__flex b3-label">
<svg class="ft__on-surface svg fn__flex-center"><use xlink:href="#iconFile"></use></svg> <svg class="ft__on-surface svg fn__flex-center"><use xlink:href="#iconFile"></use></svg>
@ -65,7 +65,7 @@ export const filterMenu = (config: ISearchOption, cb: () => void) => {
${window.siyuan.languages.doc} ${window.siyuan.languages.doc}
</div> </div>
<span class="fn__space"></span> <span class="fn__space"></span>
<input id="removeAssets" class="b3-switch fn__flex-center" data-type="document" type="checkbox"${config.types.document ? " checked" : ""}> <input class="b3-switch fn__flex-center" data-type="document" type="checkbox"${config.types.document ? " checked" : ""}>
</label> </label>
<label class="fn__flex b3-label"> <label class="fn__flex b3-label">
<svg class="ft__on-surface svg fn__flex-center"><use xlink:href="#iconHeadings"></use></svg> <svg class="ft__on-surface svg fn__flex-center"><use xlink:href="#iconHeadings"></use></svg>
@ -74,7 +74,7 @@ export const filterMenu = (config: ISearchOption, cb: () => void) => {
${window.siyuan.languages.headings} ${window.siyuan.languages.headings}
</div> </div>
<span class="fn__space"></span> <span class="fn__space"></span>
<input id="removeAssets" class="b3-switch fn__flex-center" data-type="heading" type="checkbox"${config.types.heading ? " checked" : ""}> <input class="b3-switch fn__flex-center" data-type="heading" type="checkbox"${config.types.heading ? " checked" : ""}>
</label> </label>
<label class="fn__flex b3-label"> <label class="fn__flex b3-label">
<svg class="ft__on-surface svg fn__flex-center"><use xlink:href="#iconList"></use></svg> <svg class="ft__on-surface svg fn__flex-center"><use xlink:href="#iconList"></use></svg>
@ -83,7 +83,7 @@ export const filterMenu = (config: ISearchOption, cb: () => void) => {
${window.siyuan.languages.list1} ${window.siyuan.languages.list1}
</div> </div>
<span class="fn__space"></span> <span class="fn__space"></span>
<input id="removeAssets" class="b3-switch fn__flex-center" data-type="list" type="checkbox"${config.types.list ? " checked" : ""}> <input class="b3-switch fn__flex-center" data-type="list" type="checkbox"${config.types.list ? " checked" : ""}>
</label> </label>
<label class="fn__flex b3-label"> <label class="fn__flex b3-label">
<svg class="ft__on-surface svg fn__flex-center"><use xlink:href="#iconListItem"></use></svg> <svg class="ft__on-surface svg fn__flex-center"><use xlink:href="#iconListItem"></use></svg>
@ -92,7 +92,7 @@ export const filterMenu = (config: ISearchOption, cb: () => void) => {
${window.siyuan.languages.listItem} ${window.siyuan.languages.listItem}
</div> </div>
<span class="fn__space"></span> <span class="fn__space"></span>
<input id="removeAssets" class="b3-switch fn__flex-center" data-type="listItem" type="checkbox"${config.types.listItem ? " checked" : ""}> <input class="b3-switch fn__flex-center" data-type="listItem" type="checkbox"${config.types.listItem ? " checked" : ""}>
</label> </label>
<label class="fn__flex b3-label"> <label class="fn__flex b3-label">
<svg class="ft__on-surface svg fn__flex-center"><use xlink:href="#iconCode"></use></svg> <svg class="ft__on-surface svg fn__flex-center"><use xlink:href="#iconCode"></use></svg>
@ -101,7 +101,7 @@ export const filterMenu = (config: ISearchOption, cb: () => void) => {
${window.siyuan.languages.code} ${window.siyuan.languages.code}
</div> </div>
<span class="fn__space"></span> <span class="fn__space"></span>
<input id="removeAssets" class="b3-switch fn__flex-center" data-type="codeBlock" type="checkbox"${config.types.codeBlock ? " checked" : ""}> <input class="b3-switch fn__flex-center" data-type="codeBlock" type="checkbox"${config.types.codeBlock ? " checked" : ""}>
</label> </label>
<label class="fn__flex b3-label"> <label class="fn__flex b3-label">
<svg class="ft__on-surface svg fn__flex-center"><use xlink:href="#iconHTML5"></use></svg> <svg class="ft__on-surface svg fn__flex-center"><use xlink:href="#iconHTML5"></use></svg>
@ -110,7 +110,7 @@ export const filterMenu = (config: ISearchOption, cb: () => void) => {
HTML HTML
</div> </div>
<span class="fn__space"></span> <span class="fn__space"></span>
<input id="removeAssets" class="b3-switch fn__flex-center" data-type="htmlBlock" type="checkbox"${config.types.htmlBlock ? " checked" : ""}> <input class="b3-switch fn__flex-center" data-type="htmlBlock" type="checkbox"${config.types.htmlBlock ? " checked" : ""}>
</label> </label>
<label class="fn__flex b3-label"> <label class="fn__flex b3-label">
<svg class="ft__on-surface svg fn__flex-center"><use xlink:href="#iconSQL"></use></svg> <svg class="ft__on-surface svg fn__flex-center"><use xlink:href="#iconSQL"></use></svg>
@ -119,7 +119,16 @@ export const filterMenu = (config: ISearchOption, cb: () => void) => {
${window.siyuan.languages.embedBlock} ${window.siyuan.languages.embedBlock}
</div> </div>
<span class="fn__space"></span> <span class="fn__space"></span>
<input id="removeAssets" class="b3-switch fn__flex-center" data-type="embedBlock" type="checkbox"${config.types.embedBlock ? " checked" : ""}> <input class="b3-switch fn__flex-center" data-type="embedBlock" type="checkbox"${config.types.embedBlock ? " checked" : ""}>
</label>
<label class="fn__flex b3-label">
<svg class="ft__on-surface svg fn__flex-center"><use xlink:href="#iconDatabase"></use></svg>
<span class="fn__space"></span>
<div class="fn__flex-1 fn__flex-center">
${window.siyuan.languages.database}
</div>
<span class="fn__space"></span>
<input class="b3-switch fn__flex-center" data-type="databaseBlock" type="checkbox"${config.types.databaseBlock ? " checked" : ""}>
</label> </label>
</div> </div>
<div class="b3-dialog__action"> <div class="b3-dialog__action">

View file

@ -32,8 +32,10 @@ import {upDownHint} from "../util/upDownHint";
import { import {
assetFilterMenu, assetFilterMenu,
assetInputEvent, assetInputEvent,
assetMethodMenu, assetMoreMenu, assetMethodMenu,
openSearchAsset, renderNextAssetMark, assetMoreMenu,
openSearchAsset,
renderNextAssetMark,
renderPreview, renderPreview,
toggleAssetHistory toggleAssetHistory
} from "./assets"; } from "./assets";
@ -365,6 +367,7 @@ export const genSearch = (app: App, config: ISearchOption, element: Element, clo
superBlock: window.siyuan.config.search.superBlock, superBlock: window.siyuan.config.search.superBlock,
paragraph: window.siyuan.config.search.paragraph, paragraph: window.siyuan.config.search.paragraph,
embedBlock: window.siyuan.config.search.embedBlock, embedBlock: window.siyuan.config.search.embedBlock,
databaseBlock: window.siyuan.config.search.databaseBlock,
} }
}, config, edit); }, config, edit);
element.querySelector(".b3-chip--current")?.classList.remove("b3-chip--current"); element.querySelector(".b3-chip--current")?.classList.remove("b3-chip--current");
@ -578,6 +581,7 @@ export const genSearch = (app: App, config: ISearchOption, element: Element, clo
superBlock: window.siyuan.config.search.superBlock, superBlock: window.siyuan.config.search.superBlock,
paragraph: window.siyuan.config.search.paragraph, paragraph: window.siyuan.config.search.paragraph,
embedBlock: window.siyuan.config.search.embedBlock, embedBlock: window.siyuan.config.search.embedBlock,
databaseBlock: window.siyuan.config.search.databaseBlock,
} }
}, config, edit); }, config, edit);
element.querySelector("#criteria .b3-chip--current")?.classList.remove("b3-chip--current"); element.querySelector("#criteria .b3-chip--current")?.classList.remove("b3-chip--current");

View file

@ -237,6 +237,7 @@ interface ISearchOption {
codeBlock: boolean codeBlock: boolean
htmlBlock: boolean htmlBlock: boolean
embedBlock: boolean embedBlock: boolean
databaseBlock: boolean
} }
} }
@ -751,6 +752,7 @@ interface IConfig {
sort: number sort: number
} }
search: { search: {
databaseBlock: boolean
embedBlock: boolean embedBlock: boolean
htmlBlock: boolean htmlBlock: boolean
document: boolean document: boolean

View file

@ -37,6 +37,7 @@ type Search struct {
Paragraph bool `json:"paragraph"` Paragraph bool `json:"paragraph"`
HTMLBlock bool `json:"htmlBlock"` HTMLBlock bool `json:"htmlBlock"`
EmbedBlock bool `json:"embedBlock"` EmbedBlock bool `json:"embedBlock"`
DatabaseBlock bool `json:"databaseBlock"`
Limit int `json:"limit"` Limit int `json:"limit"`
CaseSensitive bool `json:"caseSensitive"` CaseSensitive bool `json:"caseSensitive"`
@ -74,6 +75,7 @@ func NewSearch() *Search {
Paragraph: true, Paragraph: true,
HTMLBlock: true, HTMLBlock: true,
EmbedBlock: false, EmbedBlock: false,
DatabaseBlock: true,
Limit: 64, Limit: 64,
CaseSensitive: false, CaseSensitive: false,

View file

@ -604,6 +604,7 @@ func buildTypeFilter(types map[string]bool) string {
s.Paragraph = types["paragraph"] s.Paragraph = types["paragraph"]
s.HTMLBlock = types["htmlBlock"] s.HTMLBlock = types["htmlBlock"]
s.EmbedBlock = types["embedBlock"] s.EmbedBlock = types["embedBlock"]
s.DatabaseBlock = types["databaseBlock"]
} else { } else {
s.Document = Conf.Search.Document s.Document = Conf.Search.Document
s.Heading = Conf.Search.Heading s.Heading = Conf.Search.Heading
@ -617,6 +618,7 @@ func buildTypeFilter(types map[string]bool) string {
s.Paragraph = Conf.Search.Paragraph s.Paragraph = Conf.Search.Paragraph
s.HTMLBlock = Conf.Search.HTMLBlock s.HTMLBlock = Conf.Search.HTMLBlock
s.EmbedBlock = Conf.Search.EmbedBlock s.EmbedBlock = Conf.Search.EmbedBlock
s.DatabaseBlock = Conf.Search.DatabaseBlock
} }
return s.TypeFilter() return s.TypeFilter()
} }

View file

@ -203,6 +203,8 @@ func getRefText(defBlockID string) string {
return block.Content return block.Content
case "query_embed": case "query_embed":
return "Query Embed Block " + block.Markdown return "Query Embed Block " + block.Markdown
case "av":
return "Database " + block.Markdown
case "iframe": case "iframe":
return "IFrame " + block.Markdown return "IFrame " + block.Markdown
case "tb": case "tb":

View file

@ -145,8 +145,6 @@ func NodeStaticContent(node *ast.Node, excludeTypes []string, includeTextMarkATi
attrView, err := av.ParseAttributeView(node.AttributeViewID) attrView, err := av.ParseAttributeView(node.AttributeViewID)
if nil == err { if nil == err {
buf := bytes.Buffer{} buf := bytes.Buffer{}
buf.WriteString(attrView.Name)
buf.WriteString(" ")
for _, v := range attrView.Views { for _, v := range attrView.Views {
buf.WriteString(v.Name) buf.WriteString(v.Name)
buf.WriteString(" ") buf.WriteString(" ")
@ -393,6 +391,7 @@ var typeAbbrMap = map[string]string{
"NodeParagraph": "p", "NodeParagraph": "p",
"NodeHTMLBlock": "html", "NodeHTMLBlock": "html",
"NodeBlockQueryEmbed": "query_embed", "NodeBlockQueryEmbed": "query_embed",
"NodeAttributeView": "av",
"NodeKramdownBlockIAL": "ial", "NodeKramdownBlockIAL": "ial",
"NodeIFrame": "iframe", "NodeIFrame": "iframe",
"NodeWidget": "widget", "NodeWidget": "widget",