diff --git a/app/src/config/bazaar.ts b/app/src/config/bazaar.ts index 4b5819994..ab11a7f0e 100644 --- a/app/src/config/bazaar.ts +++ b/app/src/config/bazaar.ts @@ -30,6 +30,7 @@ export const bazaar = {
${window.siyuan.languages.template}
${window.siyuan.languages.icon}
${window.siyuan.languages.widget}
+
${window.siyuan.languages.downloaded}
@@ -112,6 +113,23 @@ export const bazaar = { ${loadingHTML}
+
+
+
+
+
+ +
+ +
+ +
+ +
+
+ ${loadingHTML} +
+
`; @@ -149,6 +167,33 @@ export const bazaar = {
+`; + }, + _genMyHTML(item: IBazaarItem, bazaarType: TBazaarType) { + return `
+
+
+ ${item.name} + + + + + ${item.downloads} +
+
+ +
+ + + + +
`; }, data: { @@ -156,11 +201,13 @@ export const bazaar = { templates: [] as IBazaarItem[], icons: [] as IBazaarItem[], widgets: [] as IBazaarItem[], + downloaded: [] as IBazaarItem[], }, renderReadme(cardElement: HTMLElement, bazaarType: TBazaarType) { + const isDownloaded = cardElement.getAttribute("data-type") === "downloaded"; const repoURL = cardElement.querySelector(".b3-card__actions").getAttribute("data-url"); let data: IBazaarItem; - bazaar.data[bazaarType].find((item: IBazaarItem) => { + (isDownloaded ? bazaar.data.downloaded : bazaar.data[bazaarType]).find((item: IBazaarItem) => { if (item.repoURL === repoURL) { data = item; return true; @@ -233,14 +280,20 @@ export const bazaar = { `; - fetchPost("/api/bazaar/getBazaarPackageREAME", { - repoURL: data.repoURL, - repoHash: data.repoHash, - }, response => { + if (isDownloaded) { const mdElement = readmeElement.querySelector(".item__readme"); - mdElement.innerHTML = response.data.html; + mdElement.innerHTML = data.readme highlightRender(mdElement); - }); + } else { + fetchPost("/api/bazaar/getBazaarPackageREAME", { + repoURL: data.repoURL, + repoHash: data.repoHash, + }, response => { + const mdElement = readmeElement.querySelector(".item__readme"); + mdElement.innerHTML = response.data.html; + highlightRender(mdElement); + }); + } readmeElement.style.right = "0"; }, bindEvent() { @@ -252,7 +305,25 @@ export const bazaar = { let target = event.target as HTMLElement; while (target && !target.isEqualNode(bazaar.element)) { const type = target.getAttribute("data-type"); - if (type === "goBack") { + if (type === "myTheme" || type === "myTemplate" || type === "myIcon" || type === "myWidget") { + target.parentElement.childNodes.forEach((item: HTMLElement) => { + if (item.nodeType !== 3 && item.classList.contains("b3-button")) { + item.classList.add("b3-button--outline"); + } + }) + target.classList.remove("b3-button--outline"); + fetchPost(`/api/bazaar/getInstalled${type.replace("my", "")}`, {}, response => { + let html = ""; + response.data.packages.forEach((item: IBazaarItem) => { + html += this._genMyHTML(item, type.replace("my", "").toLowerCase() + "s" as TBazaarType); + }); + bazaar.data.downloaded = response.data.packages; + bazaar.element.querySelector("#configBazaarDownloaded").innerHTML = `
${html}
`; + }); + event.preventDefault(); + event.stopPropagation(); + break; + } else if (type === "goBack") { const readmeElement = bazaar.element.querySelector("#configBazaarReadme") as HTMLElement; readmeElement.style.right = "-100%"; event.preventDefault(); @@ -444,6 +515,15 @@ export const bazaar = { bazaar.onBazaar(response, "widgets", false); bazaar.data.widgets = response.data.packages; }); + } else if (type === "downloaded") { + fetchPost("/api/bazaar/getInstalledTheme", {}, response => { + let html = ""; + response.data.packages.forEach((item: IBazaarItem) => { + html += this._genMyHTML(item, "themes"); + }); + bazaar.data.downloaded = response.data.packages; + bazaar.element.querySelector("#configBazaarDownloaded").innerHTML = `
${html}
`; + }); } item.setAttribute("data-init", "true"); } diff --git a/app/src/types/index.d.ts b/app/src/types/index.d.ts index 510767d86..196f584b9 100644 --- a/app/src/types/index.d.ts +++ b/app/src/types/index.d.ts @@ -477,6 +477,7 @@ declare interface IMenu { } declare interface IBazaarItem { + readme: string stars: string author: string updated: string