import {escapeHtml} from "../util/escape"; import {confirmDialog} from "../dialog/confirmDialog"; import {pathPosix} from "../util/pathName"; import {isBrowser, isMobile} from "../util/functions"; import {hasClosestByClassName} from "../protyle/util/hasClosest"; import {fetchPost} from "../util/fetch"; /// #if !MOBILE import {getAllModels} from "../layout/getAll"; /// #endif import {openBy} from "../editor/util"; import {renderAssetsPreview} from "../asset/renderAssets"; import {writeText} from "../protyle/util/compatibility"; export const image = { element: undefined as Element, genHTML: () => { const isM = isMobile(); return `
${window.siyuan.languages.unreferencedAssets}
${window.siyuan.languages.missingAssets}
`; }, bindEvent: () => { const assetsListElement = image.element.querySelector(".config-assets__list"); image.element.addEventListener("click", (event) => { let target = event.target as HTMLElement; while (target && !target.isEqualNode(image.element)) { const type = target.getAttribute("data-type"); if (target.id === "removeAll") { confirmDialog(window.siyuan.languages.deleteOpConfirm, `${window.siyuan.languages.clearAll}`, () => { fetchPost("/api/asset/removeUnusedAssets", {}, response => { /// #if !MOBILE getAllModels().asset.forEach(item => { if (response.data.paths.includes(item.path)) { item.parent.close(); } }); /// #endif assetsListElement.innerHTML = `
  • ${window.siyuan.languages.emptyContent}
  • `; image.element.querySelector(".config-assets__preview").innerHTML = ""; }); }, undefined, true); } else if (target.classList.contains("item") && !target.classList.contains("item--focus")) { image.element.querySelector(".layout-tab-bar .item--focus").classList.remove("item--focus"); target.classList.add("item--focus"); image.element.querySelectorAll(".config-assets").forEach(item => { if (type === item.getAttribute("data-type")) { item.classList.remove("fn__none"); if (!item.getAttribute("data-init")) { fetchPost("/api/asset/getMissingAssets", {}, response => { image._renderList(response.data.missingAssets, item.querySelector(".config-assets__list"), false); }); item.setAttribute("data-init", "true"); } } else { item.classList.add("fn__none"); } }); event.preventDefault(); event.stopPropagation(); break; } else if (type === "copy") { writeText(target.parentElement.querySelector(".b3-list-item__text").textContent.trim().replace("assets/", "")); } else if (type === "open") { /// #if !BROWSER openBy(target.parentElement.getAttribute("data-path"), "folder"); /// #endif } else if (type === "clear") { const pathString = target.parentElement.getAttribute("data-path"); confirmDialog(window.siyuan.languages.deleteOpConfirm, `${window.siyuan.languages.delete} ${pathPosix().basename(pathString)}`, () => { fetchPost("/api/asset/removeUnusedAsset", { path: pathString, }, response => { /// #if !MOBILE getAllModels().asset.forEach(item => { if (response.data.path === item.path) { item.parent.parent.removeTab(item.parent.id); } }); /// #endif const liElement = target.parentElement; if (liElement.parentElement.querySelectorAll("li").length === 1) { liElement.parentElement.innerHTML = `
  • ${window.siyuan.languages.emptyContent}
  • `; } else { liElement.remove(); } image.element.querySelector(".config-assets__preview").innerHTML = ""; }); }, undefined, true); event.preventDefault(); event.stopPropagation(); break; } target = target.parentElement; } }); assetsListElement.addEventListener("mouseover", (event) => { const liElement = hasClosestByClassName(event.target as Element, "b3-list-item"); if (liElement && liElement.getAttribute("data-path") !== assetsListElement.nextElementSibling.getAttribute("data-path")) { const item = liElement.getAttribute("data-path"); assetsListElement.nextElementSibling.setAttribute("data-path", item); assetsListElement.nextElementSibling.innerHTML = renderAssetsPreview(item); } }); fetchPost("/api/asset/getUnusedAssets", {}, response => { image._renderList(response.data.unusedAssets, assetsListElement); }); }, _renderList: (data: string[], element: Element, action = true) => { let html = ""; let boxOpenHTML = ""; if (!isBrowser() && action) { boxOpenHTML = ` `; } let boxClearHTML = ""; if (action) { boxClearHTML = ` `; } const isM = isMobile(); data.forEach((item) => { const idx = item.indexOf("assets/"); const dataPath = item.substr(idx); html += `
  • ${escapeHtml(item)} ${boxOpenHTML} ${boxClearHTML}
  • `; }); element.innerHTML = html || `
  • ${window.siyuan.languages.emptyContent}
  • `; } };