diff --git a/app/src/search/unRef.ts b/app/src/search/unRef.ts
index 8e5d41dda..9c0329de7 100644
--- a/app/src/search/unRef.ts
+++ b/app/src/search/unRef.ts
@@ -1,19 +1,16 @@
import {Constants} from "../constants";
import {fetchPost} from "../util/fetch";
import {setStorageVal, updateHotkeyTip} from "../protyle/util/compatibility";
-/// #if !MOBILE
-import {getQueryTip} from "./util";
-/// #endif
+import {getAttr} from "./util";
import {MenuItem} from "../menus/Menu";
-import {Dialog} from "../dialog";
-import {Menu} from "../plugin/Menu";
-import {hasClosestByClassName} from "../protyle/util/hasClosest";
-import {addClearButton} from "../util/addClearButton";
import {isPaidUser} from "../util/needSubscribe";
import {showMessage} from "../dialog/message";
+import {escapeAriaLabel, escapeGreat} from "../util/escape";
+import {getIconByType} from "../editor/getIcon";
+import {unicode2Emoji} from "../emoji";
+import {getDisplayName, getNotebookName} from "../util/pathName";
export const openSearchUnRef = (element: Element, isStick: boolean) => {
- /// #if !MOBILE
window.siyuan.menus.menu.remove();
element.previousElementSibling.previousElementSibling.classList.add("fn__none");
element.classList.remove("fn__none");
@@ -21,18 +18,13 @@ export const openSearchUnRef = (element: Element, isStick: boolean) => {
return;
}
const localSearch = window.siyuan.storage[Constants.LOCAL_SEARCHUNREF] as ISearchAssetOption;
- const loadingElement = element.parentElement.querySelector(".fn__loading--top");
- loadingElement.classList.remove("fn__none");
- let enterTip = "";
- /// #if !BROWSER
- enterTip = `Enter/Double Click ${window.siyuan.languages.showInFolder}`;
- /// #endif
+ element.parentElement.querySelector(".fn__loading--top").classList.remove("fn__none");
element.innerHTML = `
-
+
@@ -50,8 +42,8 @@ export const openSearchUnRef = (element: Element, isStick: boolean) => {
↑/↓/PageUp/PageDown ${window.siyuan.languages.searchTip1}
- ${enterTip}
- Click ${window.siyuan.languages.searchTip3}
+ Enter/Double Click ${window.siyuan.languages.searchTip2}
+ ${updateHotkeyTip(window.siyuan.config.keymap.editor.general.insertRight.custom)}/${updateHotkeyTip("⌥Click")} ${window.siyuan.languages.searchTip4}
Esc ${window.siyuan.languages.searchTip5}
`;
if (element.querySelector("#searchUnRefList").innerHTML !== "") {
@@ -104,19 +96,50 @@ export const openSearchUnRef = (element: Element, isStick: boolean) => {
setStorageVal(Constants.LOCAL_SEARCHUNREF, window.siyuan.storage[Constants.LOCAL_SEARCHUNREF]);
};
});
- /// #endif
+ getList(element);
};
-export const renderPreview = (element: Element, id: string, query: string, queryMethod: number) => {
- fetchPost("/api/search/getAssetContent", {id, query, queryMethod}, (response) => {
- element.innerHTML = `${response.data.assetContent.content}
`;
- const matchElement = element.querySelector("mark");
- if (matchElement) {
- matchElement.classList.add("mark--hl");
- const contentRect = element.getBoundingClientRect();
- element.scrollTop = element.scrollTop + matchElement.getBoundingClientRect().top - contentRect.top - contentRect.height / 2;
+const getList = (element: Element, page = 1) => {
+ fetchPost("/api/search/listInvalidBlockRefs", {
+ page,
+ }, (response) => {
+ element.parentElement.querySelector(".fn__loading--top").classList.add("fn__none");
+ const nextElement = element.querySelector('[data-type="unRefNext"]');
+ if (page < response.data.pageCount) {
+ nextElement.removeAttribute("disabled");
+ } else {
+ nextElement.setAttribute("disabled", "disabled");
}
+ let resultHTML = "";
+ response.data.blocks.forEach((item:IBlock, index: number) => {
+ const title = getNotebookName(item.box) + getDisplayName(item.hPath, false);
+ resultHTML += `
+
+${unicode2Emoji(item.ial.icon, "b3-list-item__graphic", true)}
+${item.content}
+${getAttr(item)}
+${escapeGreat(title)}
+
`;
+ });
+ const previewElement = element.querySelector("#searchUnRefPreview");
+ if (response.data.blocks.length > 0) {
+ previewElement.classList.remove("fn__none");
+ element.querySelector(".search__drag")?.classList.remove("fn__none");
+ renderPreview(previewElement, response.data.blocks[0].id);
+ } else {
+ previewElement.classList.add("fn__none");
+ element.querySelector(".search__drag")?.classList.add("fn__none");
+ }
+ element.querySelector("#searchUnRefResult").innerHTML = `${page}/${response.data.pageCount || 1}
+${window.siyuan.languages.findInDoc.replace("${x}", response.data.matchedRootCount).replace("${y}", response.data.matchedBlockCount)}`;
+ element.querySelector("#searchUnRefList").innerHTML = resultHTML || `
+ ${window.siyuan.languages.emptyContent}
+
`;
});
+}
+
+export const renderPreview = (element: Element, id: string) => {
+
};
export const renderNextAssetMark = (element: Element) => {
@@ -240,7 +263,7 @@ export const assetMoreMenu = (target: Element, element: Element, cb: () => void)
}
element.nextElementSibling.classList.remove("fn__none");
fetchPost("/api/asset/fullReindexAssetContent", {}, () => {
- assetInputEvent(element, localData);
+ // assetInputEvent(element, localData);
});
},
}).element);
diff --git a/app/src/search/util.ts b/app/src/search/util.ts
index 9dae7edd2..e4dfa7758 100644
--- a/app/src/search/util.ts
+++ b/app/src/search/util.ts
@@ -641,7 +641,15 @@ export const genSearch = (app: App, config: ISearchOption, element: Element, clo
event.stopPropagation();
event.preventDefault();
break;
- } else if (target.id === "searchAsset") {
+ } else if (target.id === "searchUnRefClose") {
+ window.siyuan.menus.menu.remove();
+ unRefPanelElement.classList.add("fn__none");
+ assetsElement.previousElementSibling.classList.remove("fn__none");
+ searchInputElement.select();
+ event.stopPropagation();
+ event.preventDefault();
+ break;
+ } else if (target.id === "searchAsset") {
openSearchAsset(assetsElement, !closeCB);
event.stopPropagation();
event.preventDefault();
@@ -654,14 +662,6 @@ export const genSearch = (app: App, config: ISearchOption, element: Element, clo
event.stopPropagation();
event.preventDefault();
break;
- } else if (target.id === "searchUnRefClose") {
- window.siyuan.menus.menu.remove();
- unRefPanelElement.classList.add("fn__none");
- assetsElement.previousElementSibling.classList.remove("fn__none");
- searchInputElement.select();
- event.stopPropagation();
- event.preventDefault();
- break;
} else if (target.id === "searchOpen") {
config.k = searchInputElement.value;
config.r = replaceInputElement.value;
@@ -1308,7 +1308,7 @@ export const inputEvent = (element: Element, config: ISearchOption, edit: Protyl
element.setAttribute("data-timeout", inputTimeout.toString());
};
-const getAttr = (block: IBlock) => {
+export const getAttr = (block: IBlock) => {
let attrHTML = "";
if (block.name) {
attrHTML += `${block.name}`;