mirror of
https://github.com/siyuan-note/siyuan.git
synced 2025-12-23 10:00:13 +01:00
This commit is contained in:
parent
0d71a61ddb
commit
a41da82f83
2 changed files with 89 additions and 8 deletions
|
|
@ -30,6 +30,7 @@ export const bazaar = {
|
||||||
<div data-type="template" class="item"><span class="item__text">${window.siyuan.languages.template}</span></div>
|
<div data-type="template" class="item"><span class="item__text">${window.siyuan.languages.template}</span></div>
|
||||||
<div data-type="icon" class="item"><span class="item__text">${window.siyuan.languages.icon}</span></div>
|
<div data-type="icon" class="item"><span class="item__text">${window.siyuan.languages.icon}</span></div>
|
||||||
<div data-type="widget" class="item"><span class="item__text">${window.siyuan.languages.widget}</span></div>
|
<div data-type="widget" class="item"><span class="item__text">${window.siyuan.languages.widget}</span></div>
|
||||||
|
<div data-type="downloaded" class="item"><span class="item__text">${window.siyuan.languages.downloaded}</span></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="fn__flex-1">
|
<div class="fn__flex-1">
|
||||||
<div data-type="theme" class="bazaarPanel" data-init="true">
|
<div data-type="theme" class="bazaarPanel" data-init="true">
|
||||||
|
|
@ -112,6 +113,23 @@ export const bazaar = {
|
||||||
${loadingHTML}
|
${loadingHTML}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="fn__none bazaarPanel" data-type="downloaded">
|
||||||
|
<div class="fn__hr"></div>
|
||||||
|
<div class="fn__flex">
|
||||||
|
<div class="fn__space"></div>
|
||||||
|
<div class="fn__space"></div>
|
||||||
|
<button data-type="myTheme" class="b3-button">${window.siyuan.languages.theme}</button>
|
||||||
|
<div class="fn__space"></div>
|
||||||
|
<button data-type="myTemplate" class="b3-button b3-button--white">${window.siyuan.languages.template}</button>
|
||||||
|
<div class="fn__space"></div>
|
||||||
|
<button data-type="myIcon" class="b3-button b3-button--white">${window.siyuan.languages.icon}</button>
|
||||||
|
<div class="fn__space"></div>
|
||||||
|
<button data-type="myWidget" class="b3-button b3-button--white">${window.siyuan.languages.widget}</button>
|
||||||
|
</div>
|
||||||
|
<div id="configBazaarDownloaded">
|
||||||
|
${loadingHTML}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="configBazaarReadme" class="config-bazaar__readme"></div>
|
<div id="configBazaarReadme" class="config-bazaar__readme"></div>
|
||||||
</div>`;
|
</div>`;
|
||||||
|
|
@ -149,6 +167,33 @@ export const bazaar = {
|
||||||
<div class="fn__flex-1 fn__space"></div>
|
<div class="fn__flex-1 fn__space"></div>
|
||||||
<button class="b3-button b3-button--text${!item.current && item.installed && showSwitch ? "" : " fn__none"}" data-type="switch">${window.siyuan.languages.use}</button>
|
<button class="b3-button b3-button--text${!item.current && item.installed && showSwitch ? "" : " fn__none"}" data-type="switch">${window.siyuan.languages.use}</button>
|
||||||
</div>
|
</div>
|
||||||
|
</div>`;
|
||||||
|
},
|
||||||
|
_genMyHTML(item: IBazaarItem, bazaarType: TBazaarType) {
|
||||||
|
return `<div data-bazaar="${bazaarType}" data-type="downloaded" class="b3-card">
|
||||||
|
<div class="b3-card__img"><img src="${item.previewURLThumb}"/></div>
|
||||||
|
<div class="b3-card__info fn__flex">
|
||||||
|
<span class="fn__flex-center fn__ellipsis">${item.name}</span>
|
||||||
|
<span class="fn__space"></span>
|
||||||
|
<span class="fn__flex-1"></span>
|
||||||
|
<svg class="svg fn__flex-center"><use xlink:href="#iconDownload"></use></svg>
|
||||||
|
<span class="fn__space"></span>
|
||||||
|
<span class="fn__flex-center">${item.downloads}</span>
|
||||||
|
</div>
|
||||||
|
<div class="b3-card__actions" data-url="${item.repoURL}">
|
||||||
|
<button class="b3-tooltips b3-tooltips__ne b3-button b3-button--text" data-type="uninstall" aria-label="${window.siyuan.languages.uninstall}">
|
||||||
|
<svg><use xlink:href="#iconTrashcan"></use></svg>
|
||||||
|
</button>
|
||||||
|
<div class="fn__flex-1"></div>
|
||||||
|
<span class="fn__space"></span>
|
||||||
|
<button data-type="install-t" aria-label="${window.siyuan.languages.update}" class="b3-tooltips b3-tooltips__nw b3-button b3-button--text${item.outdated ? "" : " fn__none"}">
|
||||||
|
<svg><use xlink:href="#iconRefresh"></use></svg>
|
||||||
|
</button>
|
||||||
|
<span class="fn__space"></span>
|
||||||
|
<button class="b3-tooltips b3-tooltips__nw b3-button b3-button--text" data-type="uninstall" aria-label="${window.siyuan.languages.showInFolder}">
|
||||||
|
<svg><use xlink:href="#iconFolder"></use></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
</div>`;
|
</div>`;
|
||||||
},
|
},
|
||||||
data: {
|
data: {
|
||||||
|
|
@ -156,11 +201,13 @@ export const bazaar = {
|
||||||
templates: [] as IBazaarItem[],
|
templates: [] as IBazaarItem[],
|
||||||
icons: [] as IBazaarItem[],
|
icons: [] as IBazaarItem[],
|
||||||
widgets: [] as IBazaarItem[],
|
widgets: [] as IBazaarItem[],
|
||||||
|
downloaded: [] as IBazaarItem[],
|
||||||
},
|
},
|
||||||
renderReadme(cardElement: HTMLElement, bazaarType: TBazaarType) {
|
renderReadme(cardElement: HTMLElement, bazaarType: TBazaarType) {
|
||||||
|
const isDownloaded = cardElement.getAttribute("data-type") === "downloaded";
|
||||||
const repoURL = cardElement.querySelector(".b3-card__actions").getAttribute("data-url");
|
const repoURL = cardElement.querySelector(".b3-card__actions").getAttribute("data-url");
|
||||||
let data: IBazaarItem;
|
let data: IBazaarItem;
|
||||||
bazaar.data[bazaarType].find((item: IBazaarItem) => {
|
(isDownloaded ? bazaar.data.downloaded : bazaar.data[bazaarType]).find((item: IBazaarItem) => {
|
||||||
if (item.repoURL === repoURL) {
|
if (item.repoURL === repoURL) {
|
||||||
data = item;
|
data = item;
|
||||||
return true;
|
return true;
|
||||||
|
|
@ -233,6 +280,11 @@ export const bazaar = {
|
||||||
<img data-type="img-loading" style="position: absolute;top: 0;left: 0;height: 100%;width: 100%;padding: 48px;box-sizing: border-box;" src="/stage/loading-pure.svg">
|
<img data-type="img-loading" style="position: absolute;top: 0;left: 0;height: 100%;width: 100%;padding: 48px;box-sizing: border-box;" src="/stage/loading-pure.svg">
|
||||||
</div>
|
</div>
|
||||||
</div>`;
|
</div>`;
|
||||||
|
if (isDownloaded) {
|
||||||
|
const mdElement = readmeElement.querySelector(".item__readme");
|
||||||
|
mdElement.innerHTML = data.readme
|
||||||
|
highlightRender(mdElement);
|
||||||
|
} else {
|
||||||
fetchPost("/api/bazaar/getBazaarPackageREAME", {
|
fetchPost("/api/bazaar/getBazaarPackageREAME", {
|
||||||
repoURL: data.repoURL,
|
repoURL: data.repoURL,
|
||||||
repoHash: data.repoHash,
|
repoHash: data.repoHash,
|
||||||
|
|
@ -241,6 +293,7 @@ export const bazaar = {
|
||||||
mdElement.innerHTML = response.data.html;
|
mdElement.innerHTML = response.data.html;
|
||||||
highlightRender(mdElement);
|
highlightRender(mdElement);
|
||||||
});
|
});
|
||||||
|
}
|
||||||
readmeElement.style.right = "0";
|
readmeElement.style.right = "0";
|
||||||
},
|
},
|
||||||
bindEvent() {
|
bindEvent() {
|
||||||
|
|
@ -252,7 +305,25 @@ export const bazaar = {
|
||||||
let target = event.target as HTMLElement;
|
let target = event.target as HTMLElement;
|
||||||
while (target && !target.isEqualNode(bazaar.element)) {
|
while (target && !target.isEqualNode(bazaar.element)) {
|
||||||
const type = target.getAttribute("data-type");
|
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 = `<div class="b3-cards">${html}</div>`;
|
||||||
|
});
|
||||||
|
event.preventDefault();
|
||||||
|
event.stopPropagation();
|
||||||
|
break;
|
||||||
|
} else if (type === "goBack") {
|
||||||
const readmeElement = bazaar.element.querySelector("#configBazaarReadme") as HTMLElement;
|
const readmeElement = bazaar.element.querySelector("#configBazaarReadme") as HTMLElement;
|
||||||
readmeElement.style.right = "-100%";
|
readmeElement.style.right = "-100%";
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
|
|
@ -444,6 +515,15 @@ export const bazaar = {
|
||||||
bazaar.onBazaar(response, "widgets", false);
|
bazaar.onBazaar(response, "widgets", false);
|
||||||
bazaar.data.widgets = response.data.packages;
|
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 = `<div class="b3-cards">${html}</div>`;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
item.setAttribute("data-init", "true");
|
item.setAttribute("data-init", "true");
|
||||||
}
|
}
|
||||||
|
|
|
||||||
1
app/src/types/index.d.ts
vendored
1
app/src/types/index.d.ts
vendored
|
|
@ -477,6 +477,7 @@ declare interface IMenu {
|
||||||
}
|
}
|
||||||
|
|
||||||
declare interface IBazaarItem {
|
declare interface IBazaarItem {
|
||||||
|
readme: string
|
||||||
stars: string
|
stars: string
|
||||||
author: string
|
author: string
|
||||||
updated: string
|
updated: string
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue