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}`;
}
};