import {escapeHtml} from "../util/escape"; import {confirmDialog} from "../dialog/confirmDialog"; import {Constants} from "../constants"; import {pathPosix} from "../util/pathName"; import {isBrowser} from "../util/functions"; import {hasClosestByClassName} from "../protyle/util/hasClosest"; import {fetchPost} from "../util/fetch"; import {getAllModels} from "../layout/getAll"; import {openBy} from "../editor/util"; export const image = { element: undefined as Element, genHTML: () => { return `
${window.siyuan.languages.clearUnused}
`; }, bindEvent: () => { image.element.querySelector("#removeAll").addEventListener("click", () => { confirmDialog(window.siyuan.languages.clearUnused, `${window.siyuan.languages.clearAll}`, () => { fetchPost("/api/asset/removeUnusedAssets", {}, response => { getAllModels().asset.forEach(item => { if (response.data.paths.includes(item.path)) { item.parent.parent.removeTab(item.parent.id); } }); fetchPost("/api/asset/getUnusedAssets", {}, response => { image.onUnusedassets(response.data); }); }); }); }); const assetsListElement = image.element.querySelector("#assetsList"); assetsListElement.addEventListener("click", (event) => { let target = event.target as HTMLElement; while (target && !target.isEqualNode(assetsListElement)) { if (target.classList.contains("b3-tooltips")) { const pathString = target.parentElement.getAttribute("data-path"); const type = target.getAttribute("data-type"); if (type === "open") { /// #if !BROWSER openBy(pathString, "folder"); /// #endif } else if (type === "clear") { confirmDialog(window.siyuan.languages.clearUnused, `${window.siyuan.languages.delete} ${pathPosix().basename(pathString)}`, () => { fetchPost("/api/asset/removeUnusedAsset", { path: pathString, }, response => { getAllModels().asset.forEach(item => { if (response.data.path === item.path) { item.parent.parent.removeTab(item.parent.id); } }); }); const liElement = target.parentElement; if (liElement.parentElement.querySelectorAll("li").length === 1) { liElement.parentElement.remove(); } else { liElement.remove(); } image.element.querySelector(".config-assets__preview").innerHTML = ""; }); } 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"); const type = item.substr(item.lastIndexOf(".")).toLowerCase(); const pathString = item; assetsListElement.nextElementSibling.setAttribute("data-path", item); if (Constants.SIYUAN_ASSETS_IMAGE.includes(type)) { assetsListElement.nextElementSibling.innerHTML = ``; } else if (Constants.SIYUAN_ASSETS_AUDIO.includes(type)) { assetsListElement.nextElementSibling.innerHTML = ``; } else if (Constants.SIYUAN_ASSETS_VIDEO.includes(type)) { assetsListElement.nextElementSibling.innerHTML = ``; } else { assetsListElement.nextElementSibling.innerHTML = ""; } } }); fetchPost("/api/asset/getUnusedAssets", {}, response => { image.onUnusedassets(response.data); }); }, onUnusedassets: (data: { unusedAssets: string[] }) => { let html = ""; let boxOpenHTML = ""; if (!isBrowser()) { boxOpenHTML = ` `; } const boxClearHTML = ` `; data.unusedAssets.forEach((item) => { const idx = item.indexOf("assets/"); const dataPath = item.substr(idx); html += `
  • ${escapeHtml(item)} ${boxOpenHTML} ${boxClearHTML}
  • `; }); image.element.querySelector("#assetsList").innerHTML = html || `
  • ${window.siyuan.languages.emptyContent}
  • `; image.element.querySelector(".config-assets__preview").innerHTML = ""; } };