2022-05-26 15:18:53 +08:00
|
|
|
import {appearance} from "./appearance";
|
|
|
|
|
import {showMessage} from "../dialog/message";
|
|
|
|
|
import {fetchPost} from "../util/fetch";
|
|
|
|
|
import {confirmDialog} from "../dialog/confirmDialog";
|
2023-06-07 10:36:20 +08:00
|
|
|
import {highlightRender} from "../protyle/render/highlightRender";
|
2022-05-26 15:18:53 +08:00
|
|
|
import {exportLayout} from "../layout/util";
|
|
|
|
|
import {Constants} from "../constants";
|
2022-09-02 00:54:21 +08:00
|
|
|
/// #if !BROWSER
|
|
|
|
|
import {shell} from "electron";
|
|
|
|
|
import * as path from "path";
|
|
|
|
|
/// #endif
|
2023-05-29 20:34:16 +08:00
|
|
|
import {getFrontend, isBrowser} from "../util/functions";
|
2023-01-01 15:18:32 +08:00
|
|
|
import {setStorageVal} from "../protyle/util/compatibility";
|
2023-05-30 10:36:06 +08:00
|
|
|
import {hasClosestByAttribute, hasClosestByClassName} from "../protyle/util/hasClosest";
|
2023-05-08 21:00:41 +08:00
|
|
|
import {Plugin} from "../plugin";
|
|
|
|
|
import {App} from "../index";
|
2023-05-10 15:13:47 +08:00
|
|
|
import {escapeAttr} from "../util/escape";
|
2023-05-16 00:04:25 +08:00
|
|
|
import {uninstall} from "../plugin/uninstall";
|
2023-06-23 23:24:21 +08:00
|
|
|
import {afterLoadPlugin, loadPlugin, loadPlugins} from "../plugin/loader";
|
2022-05-26 15:18:53 +08:00
|
|
|
|
|
|
|
|
export const bazaar = {
|
|
|
|
|
element: undefined as Element,
|
|
|
|
|
genHTML() {
|
2023-05-25 21:13:23 +08:00
|
|
|
if (!window.siyuan.config.bazaar.trust) {
|
2023-05-25 22:03:40 +08:00
|
|
|
return `<div class="fn__flex-column">
|
|
|
|
|
<div class="fn__flex-1"></div>
|
|
|
|
|
<div class="b3-label">
|
2023-05-25 22:28:01 +08:00
|
|
|
<div>${window.siyuan.languages.bazaarTrust}</div>
|
|
|
|
|
<div class="fn__hr--b"></div>
|
|
|
|
|
<div>${window.siyuan.languages.bazaarTrust3}</div>
|
2023-05-25 22:03:40 +08:00
|
|
|
</div>
|
2023-05-25 21:13:23 +08:00
|
|
|
<div class="fn__flex b3-label">
|
|
|
|
|
<svg class="b3-label__icon"><use xlink:href="#iconEye"></use></svg>
|
|
|
|
|
<div>
|
|
|
|
|
${window.siyuan.languages.bazaarTrustCodeReview}
|
|
|
|
|
<div class="b3-label__text">${window.siyuan.languages.bazaarTrustCodeReviewTip}</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="fn__flex b3-label">
|
|
|
|
|
<svg class="b3-label__icon"><use xlink:href="#iconGithub"></use></svg>
|
|
|
|
|
<div>
|
|
|
|
|
${window.siyuan.languages.bazaarTrustOpenSource}
|
|
|
|
|
<div class="b3-label__text">${window.siyuan.languages.bazaarTrustOpenSourceTip}</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="fn__flex b3-label">
|
2023-05-25 22:03:40 +08:00
|
|
|
<svg class="b3-label__icon"><use xlink:href="#iconUsers"></use></svg>
|
2023-05-25 21:13:23 +08:00
|
|
|
<div>
|
|
|
|
|
${window.siyuan.languages.bazaarCommunityReview}
|
|
|
|
|
<div class="b3-label__text">${window.siyuan.languages.bazaarPeerReviewTip}</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="fn__flex b3-label">
|
2023-05-25 22:03:40 +08:00
|
|
|
<svg class="b3-label__icon"><use xlink:href="#iconInfo"></use></svg>
|
2023-05-25 21:13:23 +08:00
|
|
|
<div>
|
|
|
|
|
${window.siyuan.languages.bazaarUserReport}
|
|
|
|
|
<div class="b3-label__text">${window.siyuan.languages.bazaarUserReportTip}</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
2023-05-25 22:03:40 +08:00
|
|
|
<div class="b3-label b3-label--noborder">
|
2023-05-25 21:13:23 +08:00
|
|
|
<div>${window.siyuan.languages.bazaarTrust1}</div>
|
|
|
|
|
<div class="fn__hr--b"></div>
|
|
|
|
|
<diiv>${window.siyuan.languages.bazaarTrust2}</diiv>
|
2023-05-25 22:03:40 +08:00
|
|
|
</div>
|
|
|
|
|
<div class="ft__center b3-label b3-label--noborder">
|
2023-05-25 21:13:23 +08:00
|
|
|
<button class="b3-button fn__size200">${window.siyuan.languages.trust}</button>
|
2023-05-25 22:03:40 +08:00
|
|
|
</div>
|
|
|
|
|
<div class="fn__flex-1"></div>
|
2023-05-25 21:13:23 +08:00
|
|
|
</div>`;
|
|
|
|
|
}
|
2022-12-31 22:14:42 +08:00
|
|
|
const localSort = window.siyuan.storage[Constants.LOCAL_BAZAAR];
|
2023-05-05 14:50:40 +08:00
|
|
|
const loadingHTML = `<div style="height: ${bazaar.element.clientHeight - 80}px;display: flex;align-items: center;justify-content: center;"><img src="/stage/loading-pure.svg"></div>`;
|
2022-05-26 15:18:53 +08:00
|
|
|
return `<div class="fn__flex-column" style="height: 100%">
|
|
|
|
|
<div class="layout-tab-bar fn__flex">
|
2023-05-04 19:09:21 +08:00
|
|
|
<div data-type="downloaded" class="item item--full item--focus"><span class="fn__flex-1"></span><span class="item__text">${window.siyuan.languages.downloaded}</span><span class="fn__flex-1"></span></div>
|
2023-05-30 10:36:06 +08:00
|
|
|
<div data-type="plugin" class="item item--full"><span class="fn__flex-1"></span><span class="item__text">${window.siyuan.languages.plugin}</span><span class="fn__flex-1"></span></div>
|
2023-05-04 19:09:21 +08:00
|
|
|
<div data-type="theme" class="item item--full"><span class="fn__flex-1"></span><span class="item__text">${window.siyuan.languages.theme}</span><span class="fn__flex-1"></span></div>
|
2022-10-20 00:53:00 +08:00
|
|
|
<div data-type="icon" class="item item--full"><span class="fn__flex-1"></span><span class="item__text">${window.siyuan.languages.icon}</span><span class="fn__flex-1"></span></div>
|
2023-05-06 11:01:23 +08:00
|
|
|
<div data-type="template" class="item item--full"><span class="fn__flex-1"></span><span class="item__text">${window.siyuan.languages.template}</span><span class="fn__flex-1"></span></div>
|
2022-10-20 00:53:00 +08:00
|
|
|
<div data-type="widget" class="item item--full"><span class="fn__flex-1"></span><span class="item__text">${window.siyuan.languages.widget}</span><span class="fn__flex-1"></span></div>
|
2022-05-26 15:18:53 +08:00
|
|
|
</div>
|
|
|
|
|
<div class="fn__flex-1">
|
2023-05-04 19:09:21 +08:00
|
|
|
<div class="bazaarPanel" data-type="downloaded" data-init="true">
|
2023-05-10 11:05:34 +08:00
|
|
|
<div class="fn__hr--b"></div>
|
2023-05-04 19:09:21 +08:00
|
|
|
<div class="fn__flex">
|
|
|
|
|
<div class="fn__space"></div>
|
|
|
|
|
<div class="fn__space"></div>
|
2023-05-30 10:36:06 +08:00
|
|
|
<button data-type="myPlugin" class="b3-button">${window.siyuan.languages.plugin}</button>
|
|
|
|
|
<div class="fn__space"></div>
|
|
|
|
|
<button data-type="myTheme" class="b3-button b3-button--outline">${window.siyuan.languages.theme}</button>
|
2023-05-04 19:09:21 +08:00
|
|
|
<div class="fn__space"></div>
|
|
|
|
|
<button data-type="myIcon" class="b3-button b3-button--outline">${window.siyuan.languages.icon}</button>
|
|
|
|
|
<div class="fn__space"></div>
|
2023-05-06 11:01:23 +08:00
|
|
|
<button data-type="myTemplate" class="b3-button b3-button--outline">${window.siyuan.languages.template}</button>
|
|
|
|
|
<div class="fn__space"></div>
|
2023-05-04 19:09:21 +08:00
|
|
|
<button data-type="myWidget" class="b3-button b3-button--outline">${window.siyuan.languages.widget}</button>
|
|
|
|
|
</div>
|
|
|
|
|
<div id="configBazaarDownloaded">
|
|
|
|
|
${loadingHTML}
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div data-type="theme" class="bazaarPanel fn__none">
|
2023-05-10 10:45:11 +08:00
|
|
|
<div class="fn__hr--b"></div>
|
|
|
|
|
<div class="fn__flex">
|
2022-05-26 15:18:53 +08:00
|
|
|
<div class="fn__space"></div>
|
|
|
|
|
<div class="fn__space"></div>
|
|
|
|
|
<svg class="svg ft__on-surface fn__flex-center"><use xlink:href="#iconSort"></use></svg>
|
|
|
|
|
<div class="fn__space"></div>
|
2023-05-10 10:45:11 +08:00
|
|
|
<select class="b3-select">
|
2022-05-26 15:18:53 +08:00
|
|
|
<option ${localSort.theme === "0" ? "selected" : ""} value="0">${window.siyuan.languages.sortByUpdateTimeDesc}</option>
|
|
|
|
|
<option ${localSort.theme === "1" ? "selected" : ""} value="1">${window.siyuan.languages.sortByUpdateTimeAsc}</option>
|
|
|
|
|
<option ${localSort.theme === "2" ? "selected" : ""} value="2">${window.siyuan.languages.sortByDownloadsDesc}</option>
|
|
|
|
|
<option ${localSort.theme === "3" ? "selected" : ""} value="3">${window.siyuan.languages.sortByDownloadsAsc}</option>
|
|
|
|
|
</select>
|
|
|
|
|
<div class="fn__flex-1"></div>
|
2023-05-10 10:45:11 +08:00
|
|
|
<select id="bazaarSelect" class="b3-select">
|
2022-05-26 15:18:53 +08:00
|
|
|
<option selected value="2">${window.siyuan.languages.all}</option>
|
|
|
|
|
<option value="0">${window.siyuan.languages.themeLight}</option>
|
|
|
|
|
<option value="1">${window.siyuan.languages.themeDark}</option>
|
|
|
|
|
</select>
|
|
|
|
|
<div class="fn__space"></div>
|
|
|
|
|
<div class="fn__space"></div>
|
|
|
|
|
</div>
|
|
|
|
|
<div id="configBazaarTheme">
|
|
|
|
|
${loadingHTML}
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="fn__none bazaarPanel" data-type="template">
|
2023-05-10 10:45:11 +08:00
|
|
|
<div class="fn__hr--b"></div>
|
2022-05-26 15:18:53 +08:00
|
|
|
<div class="fn__flex">
|
|
|
|
|
<div class="fn__space"></div>
|
|
|
|
|
<div class="fn__space"></div>
|
|
|
|
|
<svg class="svg ft__on-surface fn__flex-center"><use xlink:href="#iconSort"></use></svg>
|
|
|
|
|
<div class="fn__space"></div>
|
2023-05-10 10:45:11 +08:00
|
|
|
<select class="b3-select">
|
2022-05-26 15:18:53 +08:00
|
|
|
<option ${localSort.template === "0" ? "selected" : ""} value="0">${window.siyuan.languages.sortByUpdateTimeDesc}</option>
|
|
|
|
|
<option ${localSort.template === "1" ? "selected" : ""} value="1">${window.siyuan.languages.sortByUpdateTimeAsc}</option>
|
|
|
|
|
<option ${localSort.template === "2" ? "selected" : ""} value="2">${window.siyuan.languages.sortByDownloadsDesc}</option>
|
|
|
|
|
<option ${localSort.template === "3" ? "selected" : ""} value="3">${window.siyuan.languages.sortByDownloadsAsc}</option>
|
|
|
|
|
</select>
|
|
|
|
|
</div>
|
|
|
|
|
<div id="configBazaarTemplate">
|
|
|
|
|
${loadingHTML}
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
2023-05-04 19:09:21 +08:00
|
|
|
<div class="fn__none bazaarPanel" data-type="plugin">
|
2023-05-10 10:45:11 +08:00
|
|
|
<div class="fn__hr--b"></div>
|
2023-05-04 19:09:21 +08:00
|
|
|
<div class="fn__flex">
|
|
|
|
|
<div class="fn__space"></div>
|
|
|
|
|
<div class="fn__space"></div>
|
|
|
|
|
<svg class="svg ft__on-surface fn__flex-center"><use xlink:href="#iconSort"></use></svg>
|
|
|
|
|
<div class="fn__space"></div>
|
2023-05-10 10:45:11 +08:00
|
|
|
<select class="b3-select">
|
2023-06-13 23:18:41 +08:00
|
|
|
<option ${localSort.plugin === "0" ? "selected" : ""} value="0">${window.siyuan.languages.sortByUpdateTimeDesc}</option>
|
|
|
|
|
<option ${localSort.plugin === "1" ? "selected" : ""} value="1">${window.siyuan.languages.sortByUpdateTimeAsc}</option>
|
|
|
|
|
<option ${localSort.plugin === "2" ? "selected" : ""} value="2">${window.siyuan.languages.sortByDownloadsDesc}</option>
|
|
|
|
|
<option ${localSort.plugin === "3" ? "selected" : ""} value="3">${window.siyuan.languages.sortByDownloadsAsc}</option>
|
2023-05-04 19:09:21 +08:00
|
|
|
</select>
|
|
|
|
|
</div>
|
|
|
|
|
<div id="configBazaarPlugin">
|
|
|
|
|
${loadingHTML}
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
2022-05-26 15:18:53 +08:00
|
|
|
<div class="fn__none bazaarPanel" data-type="icon">
|
2023-05-10 10:45:11 +08:00
|
|
|
<div class="fn__hr--b"></div>
|
2022-05-26 15:18:53 +08:00
|
|
|
<div class="fn__flex">
|
|
|
|
|
<div class="fn__space"></div>
|
|
|
|
|
<div class="fn__space"></div>
|
|
|
|
|
<svg class="svg ft__on-surface fn__flex-center"><use xlink:href="#iconSort"></use></svg>
|
|
|
|
|
<div class="fn__space"></div>
|
2023-05-10 10:45:11 +08:00
|
|
|
<select class="b3-select">
|
2022-05-26 15:18:53 +08:00
|
|
|
<option ${localSort.icon === "0" ? "selected" : ""} value="0">${window.siyuan.languages.sortByUpdateTimeDesc}</option>
|
|
|
|
|
<option ${localSort.icon === "1" ? "selected" : ""} value="1">${window.siyuan.languages.sortByUpdateTimeAsc}</option>
|
|
|
|
|
<option ${localSort.icon === "2" ? "selected" : ""} value="2">${window.siyuan.languages.sortByDownloadsDesc}</option>
|
|
|
|
|
<option ${localSort.icon === "3" ? "selected" : ""} value="3">${window.siyuan.languages.sortByDownloadsAsc}</option>
|
|
|
|
|
</select>
|
|
|
|
|
</div>
|
|
|
|
|
<div id="configBazaarIcon">
|
|
|
|
|
${loadingHTML}
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="fn__none bazaarPanel" data-type="widget">
|
2023-05-10 10:45:11 +08:00
|
|
|
<div class="fn__hr--b"></div>
|
2022-05-26 15:18:53 +08:00
|
|
|
<div class="fn__flex">
|
|
|
|
|
<div class="fn__space"></div>
|
|
|
|
|
<div class="fn__space"></div>
|
|
|
|
|
<svg class="svg ft__on-surface fn__flex-center"><use xlink:href="#iconSort"></use></svg>
|
|
|
|
|
<div class="fn__space"></div>
|
2023-05-10 10:45:11 +08:00
|
|
|
<select class="b3-select">
|
2022-05-26 15:18:53 +08:00
|
|
|
<option ${localSort.widget === "0" ? "selected" : ""} value="0">${window.siyuan.languages.sortByUpdateTimeDesc}</option>
|
|
|
|
|
<option ${localSort.widget === "1" ? "selected" : ""} value="1">${window.siyuan.languages.sortByUpdateTimeAsc}</option>
|
|
|
|
|
<option ${localSort.widget === "2" ? "selected" : ""} value="2">${window.siyuan.languages.sortByDownloadsDesc}</option>
|
|
|
|
|
<option ${localSort.widget === "3" ? "selected" : ""} value="3">${window.siyuan.languages.sortByDownloadsAsc}</option>
|
|
|
|
|
</select>
|
|
|
|
|
</div>
|
|
|
|
|
<div id="configBazaarWidget">
|
|
|
|
|
${loadingHTML}
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div id="configBazaarReadme" class="config-bazaar__readme"></div>
|
|
|
|
|
</div>`;
|
|
|
|
|
},
|
2023-02-20 19:37:42 +08:00
|
|
|
_genCardHTML(item: IBazaarItem, bazaarType: TBazaarType) {
|
2022-05-26 15:18:53 +08:00
|
|
|
let hide = false;
|
2023-02-20 19:37:42 +08:00
|
|
|
let themeMode = "";
|
2022-05-26 15:18:53 +08:00
|
|
|
if (bazaarType === "themes") {
|
|
|
|
|
const themeValue = (bazaar.element.querySelector("#bazaarSelect") as HTMLSelectElement).value;
|
|
|
|
|
if ((themeValue === "0" && item.modes.includes("dark")) ||
|
|
|
|
|
themeValue === "1" && item.modes.includes("light")) {
|
|
|
|
|
hide = true;
|
|
|
|
|
}
|
2023-02-20 19:37:42 +08:00
|
|
|
themeMode = item.modes.toString();
|
2022-05-26 15:18:53 +08:00
|
|
|
}
|
|
|
|
|
let showSwitch = false;
|
|
|
|
|
if (["icons", "themes"].includes(bazaarType)) {
|
|
|
|
|
showSwitch = true;
|
|
|
|
|
}
|
2023-02-20 19:37:42 +08:00
|
|
|
const dataObj = {
|
|
|
|
|
bazaarType,
|
|
|
|
|
themeMode: themeMode,
|
|
|
|
|
updated: item.updated,
|
|
|
|
|
name: item.name,
|
|
|
|
|
repoURL: item.repoURL,
|
|
|
|
|
repoHash: item.repoHash,
|
2023-05-10 10:45:11 +08:00
|
|
|
downloads: item.downloads,
|
2023-02-20 19:37:42 +08:00
|
|
|
downloaded: false,
|
2023-02-21 09:22:38 +08:00
|
|
|
};
|
2023-05-05 21:39:56 +08:00
|
|
|
return `<div data-obj='${JSON.stringify(dataObj)}' class="b3-card b3-card--wrap${hide ? " fn__none" : ""}${item.current ? " b3-card--current" : ""}">
|
|
|
|
|
<div class="b3-card__img">
|
2023-05-05 21:46:45 +08:00
|
|
|
<img src="${item.iconURL}" onerror="this.src='${item.previewURLThumb}'"/>
|
2022-05-26 15:18:53 +08:00
|
|
|
</div>
|
2023-05-05 21:39:56 +08:00
|
|
|
<div class="fn__flex-1 fn__flex-column">
|
|
|
|
|
<div class="b3-card__info fn__flex-1">
|
2023-05-07 17:10:23 +08:00
|
|
|
${item.preferredName} <span class="ft__on-surface ft__smaller">${item.name}</span>
|
2023-05-10 15:13:47 +08:00
|
|
|
<div class="b3-card__desc" title="${escapeAttr(item.preferredDesc) || ""}">
|
2023-05-05 21:39:56 +08:00
|
|
|
${item.preferredDesc || ""}
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="b3-card__actions">
|
|
|
|
|
<span class="block__icon block__icon--show ft__primary">
|
|
|
|
|
<svg><use xlink:href="#iconDownload"></use></svg>
|
|
|
|
|
<span class="fn__space"></span>
|
|
|
|
|
${item.downloads}
|
|
|
|
|
</span>
|
|
|
|
|
<span class="fn__space"></span>
|
2023-05-10 11:05:34 +08:00
|
|
|
${item.preferredFunding ? `<a target="_blank" href="${item.preferredFunding}" data-type="a" class="block__icon block__icon--show" aria-label="${window.siyuan.languages.sponsor} ${item.preferredFunding}"><svg class="ft__pink"><use xlink:href="#iconHeart"></use></svg></a><span class="fn__space"></span>` : ""}
|
2023-05-05 21:39:56 +08:00
|
|
|
<div class="fn__flex-1"></div>
|
|
|
|
|
<span class="b3-tooltips b3-tooltips__nw block__icon block__icon--show${item.installed ? "" : " fn__none"}" data-type="uninstall" aria-label="${window.siyuan.languages.uninstall}">
|
|
|
|
|
<svg><use xlink:href="#iconTrashcan"></use></svg>
|
|
|
|
|
</span>
|
|
|
|
|
<div class="fn__space${!item.current && item.installed && showSwitch ? "" : " fn__none"}"></div>
|
|
|
|
|
<span class="b3-tooltips b3-tooltips__nw block__icon block__icon--show${!item.current && item.installed && showSwitch ? "" : " fn__none"}" data-type="switch" aria-label="${window.siyuan.languages.use}">
|
|
|
|
|
<svg><use xlink:href="#iconSelect"></use></svg>
|
|
|
|
|
</span>
|
|
|
|
|
<div class="fn__space${item.outdated ? "" : " fn__none"}"></div>
|
|
|
|
|
<span data-type="install-t" class="b3-tooltips b3-tooltips__nw block__icon block__icon--show${item.outdated ? "" : " fn__none"}" aria-label="${window.siyuan.languages.update}">
|
|
|
|
|
<svg class="ft__primary"><use xlink:href="#iconRefresh"></use></svg>
|
|
|
|
|
</span>
|
|
|
|
|
</div>
|
2022-05-26 15:18:53 +08:00
|
|
|
</div>
|
2022-09-02 00:00:16 +08:00
|
|
|
</div>`;
|
|
|
|
|
},
|
2023-05-08 21:00:41 +08:00
|
|
|
_genMyHTML(bazaarType: TBazaarType, app: App) {
|
2023-05-24 21:57:55 +08:00
|
|
|
const contentElement = bazaar.element.querySelector("#configBazaarDownloaded");
|
|
|
|
|
if (contentElement.getAttribute("data-loading") === "true" ||
|
|
|
|
|
contentElement.previousElementSibling.querySelector(`[data-type="my${bazaarType.replace(bazaarType[0], bazaarType[0].toUpperCase()).substring(0, bazaarType.length - 1)}"]`).classList.contains("b3-button--outline")) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
contentElement.setAttribute("data-loading", "true");
|
2022-09-02 00:22:55 +08:00
|
|
|
let url = "/api/bazaar/getInstalledTheme";
|
|
|
|
|
if (bazaarType === "icons") {
|
2022-09-02 00:54:21 +08:00
|
|
|
url = "/api/bazaar/getInstalledIcon";
|
2022-09-02 00:22:55 +08:00
|
|
|
} else if (bazaarType === "widgets") {
|
2022-09-02 00:54:21 +08:00
|
|
|
url = "/api/bazaar/getInstalledWidget";
|
|
|
|
|
} else if (bazaarType === "templates") {
|
|
|
|
|
url = "/api/bazaar/getInstalledTemplate";
|
2023-05-04 19:09:21 +08:00
|
|
|
} else if (bazaarType === "plugins") {
|
|
|
|
|
url = "/api/bazaar/getInstalledPlugin";
|
2022-09-02 00:22:55 +08:00
|
|
|
}
|
2023-05-29 20:34:16 +08:00
|
|
|
fetchPost(url, {
|
|
|
|
|
frontend: getFrontend()
|
|
|
|
|
}, response => {
|
2023-05-24 21:57:55 +08:00
|
|
|
contentElement.removeAttribute("data-loading");
|
2022-09-02 00:22:55 +08:00
|
|
|
let html = "";
|
2022-09-05 12:46:17 +08:00
|
|
|
let showSwitch = false;
|
|
|
|
|
if (["icons", "themes"].includes(bazaarType)) {
|
|
|
|
|
showSwitch = true;
|
|
|
|
|
}
|
2022-09-02 00:22:55 +08:00
|
|
|
response.data.packages.forEach((item: IBazaarItem) => {
|
2023-02-20 19:37:42 +08:00
|
|
|
const dataObj = {
|
|
|
|
|
bazaarType,
|
|
|
|
|
themeMode: item.modes?.toString(),
|
|
|
|
|
updated: item.updated,
|
|
|
|
|
name: item.name,
|
|
|
|
|
repoURL: item.repoURL,
|
|
|
|
|
repoHash: item.repoHash,
|
|
|
|
|
downloaded: true
|
2023-02-21 09:22:38 +08:00
|
|
|
};
|
2023-05-08 21:00:41 +08:00
|
|
|
let hasSetting = false;
|
|
|
|
|
if (bazaarType === "plugins") {
|
|
|
|
|
app.plugins.find((item: Plugin) => {
|
|
|
|
|
if (item.name === dataObj.name) {
|
|
|
|
|
// @ts-ignore
|
2023-06-02 21:49:22 +08:00
|
|
|
hasSetting = item.setting || item.__proto__.hasOwnProperty("openSetting");
|
2023-05-08 21:00:41 +08:00
|
|
|
return true;
|
|
|
|
|
}
|
2023-05-09 19:27:47 +08:00
|
|
|
});
|
2023-05-08 21:00:41 +08:00
|
|
|
}
|
2023-06-23 23:24:21 +08:00
|
|
|
html += `<div data-obj='${JSON.stringify(dataObj)}' class="b3-card${item.current ? " b3-card--current" : ""}${window.siyuan.config.bazaar.petalDisabled ? " b3-card--disabled" : ""}">
|
2023-05-05 21:46:45 +08:00
|
|
|
<div class="b3-card__img"><img src="${item.iconURL}" onerror="this.src='${item.previewURLThumb}'"/></div>
|
2023-05-05 20:42:07 +08:00
|
|
|
<div class="fn__flex-1 fn__flex-column">
|
2023-05-30 10:36:06 +08:00
|
|
|
<div class="b3-card__info b3-card__info--left fn__flex-1">
|
2023-05-07 17:10:23 +08:00
|
|
|
${item.preferredName} <span class="ft__on-surface ft__smaller">${item.name}</span>
|
2023-05-10 15:13:47 +08:00
|
|
|
<div class="b3-card__desc" title="${escapeAttr(item.preferredDesc) || ""}">${item.preferredDesc || ""}</div>
|
2023-05-05 20:42:07 +08:00
|
|
|
</div>
|
2023-05-30 10:36:06 +08:00
|
|
|
</div>
|
|
|
|
|
<div class="b3-card__actions b3-card__actions--right">
|
|
|
|
|
${item.incompatible ? `<span class="fn__space"></span><span class="fn__flex-center b3-tooltips b3-tooltips__nw b3-chip b3-chip--error b3-chip--small" aria-label="${window.siyuan.languages.incompatiblePluginTip}">${window.siyuan.languages.incompatible}</span>` : ""}
|
|
|
|
|
${item.preferredFunding ? `<a target="_blank" href="${item.preferredFunding}" data-type="a" class="block__icon block__icon--show" aria-label="${window.siyuan.languages.sponsor} ${item.preferredFunding}"><svg class="ft__pink"><use xlink:href="#iconHeart"></use></svg></a>` : ""}
|
|
|
|
|
<span class="b3-tooltips b3-tooltips__nw block__icon block__icon--show${hasSetting ? "" : " fn__none"}" data-type="setting" aria-label="${window.siyuan.languages.config}">
|
|
|
|
|
<svg><use xlink:href="#iconSettings"></use></svg>
|
|
|
|
|
</span>
|
|
|
|
|
<span class="b3-tooltips b3-tooltips__nw block__icon block__icon--show" data-type="uninstall" aria-label="${window.siyuan.languages.uninstall}">
|
|
|
|
|
<svg><use xlink:href="#iconTrashcan"></use></svg>
|
|
|
|
|
</span>
|
|
|
|
|
<span class="b3-tooltips b3-tooltips__nw block__icon block__icon--show${isBrowser() ? " fn__none" : ""}" data-type="open" aria-label="${window.siyuan.languages.showInFolder}">
|
|
|
|
|
<svg><use xlink:href="#iconFolder"></use></svg>
|
|
|
|
|
</span>
|
|
|
|
|
<span class="b3-tooltips b3-tooltips__nw block__icon block__icon--show${!item.current && showSwitch ? "" : " fn__none"}" data-type="switch" aria-label="${window.siyuan.languages.use}">
|
|
|
|
|
<svg><use xlink:href="#iconSelect"></use></svg>
|
|
|
|
|
</span>
|
|
|
|
|
<span data-type="install-t" aria-label="${window.siyuan.languages.update}" class="b3-tooltips b3-tooltips__nw block__icon block__icon--show${item.outdated ? "" : " fn__none"}">
|
|
|
|
|
<svg class="ft__primary"><use xlink:href="#iconRefresh"></use></svg>
|
|
|
|
|
</span>
|
|
|
|
|
<span class="fn__space${bazaarType === "plugins" ? "" : " fn__none"}"></span>
|
|
|
|
|
<span class="fn__space${bazaarType === "plugins" ? "" : " fn__none"}"></span>
|
|
|
|
|
<input class="b3-switch fn__flex-center${bazaarType === "plugins" ? "" : " fn__none"}" ${item.enabled ? "checked" : ""} data-type="plugin-enable" type="checkbox" ${item.incompatible ? " disabled" : ""}>
|
2022-09-02 00:00:16 +08:00
|
|
|
</div>
|
2022-05-26 15:18:53 +08:00
|
|
|
</div>`;
|
2022-09-02 00:22:55 +08:00
|
|
|
});
|
2023-02-20 19:37:42 +08:00
|
|
|
bazaar._data.downloaded = response.data.packages;
|
2023-06-23 23:24:21 +08:00
|
|
|
if (bazaarType === "plugins") {
|
|
|
|
|
html = `<div class="fn__flex">
|
|
|
|
|
<div class="fn__flex-1"></div>
|
|
|
|
|
<input ${window.siyuan.config.bazaar.petalDisabled ? "" : " checked"} data-type="plugins-enable" type="checkbox" class="b3-switch" style="margin: 8px 32px">
|
|
|
|
|
</div>${html}`;
|
|
|
|
|
}
|
2023-05-24 21:57:55 +08:00
|
|
|
contentElement.innerHTML = html ? html : `<div class="fn__hr"></div><ul class="b3-list b3-list--background"><li class="b3-list--empty">${window.siyuan.languages.emptyContent}</li></ul>`;
|
2022-09-02 00:22:55 +08:00
|
|
|
});
|
2022-05-26 15:18:53 +08:00
|
|
|
},
|
2023-02-20 19:37:42 +08:00
|
|
|
_data: {
|
2022-05-26 15:18:53 +08:00
|
|
|
themes: [] as IBazaarItem[],
|
|
|
|
|
templates: [] as IBazaarItem[],
|
|
|
|
|
icons: [] as IBazaarItem[],
|
|
|
|
|
widgets: [] as IBazaarItem[],
|
2023-05-04 19:09:21 +08:00
|
|
|
plugins: [] as IBazaarItem[],
|
2022-09-02 00:00:16 +08:00
|
|
|
downloaded: [] as IBazaarItem[],
|
2022-05-26 15:18:53 +08:00
|
|
|
},
|
2023-02-20 19:37:42 +08:00
|
|
|
_renderReadme(cardElement: HTMLElement, bazaarType: TBazaarType) {
|
|
|
|
|
const dataObj = JSON.parse(cardElement.getAttribute("data-obj"));
|
2022-05-26 15:18:53 +08:00
|
|
|
let data: IBazaarItem;
|
2023-02-20 19:37:42 +08:00
|
|
|
(dataObj.downloaded ? bazaar._data.downloaded : bazaar._data[bazaarType]).find((item: IBazaarItem) => {
|
|
|
|
|
if (item.repoURL === dataObj.repoURL) {
|
2022-05-26 15:18:53 +08:00
|
|
|
data = item;
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
const readmeElement = bazaar.element.querySelector("#configBazaarReadme") as HTMLElement;
|
|
|
|
|
const urls = data.repoURL.split("/");
|
|
|
|
|
urls.pop();
|
|
|
|
|
let navTitle = window.siyuan.languages.icon;
|
|
|
|
|
if (bazaarType === "themes") {
|
2023-05-14 10:09:11 +08:00
|
|
|
navTitle = window.siyuan.languages.theme;
|
2022-05-26 15:18:53 +08:00
|
|
|
} else if (bazaarType === "widgets") {
|
|
|
|
|
navTitle = window.siyuan.languages.widget;
|
|
|
|
|
} else if (bazaarType === "templates") {
|
|
|
|
|
navTitle = window.siyuan.languages.template;
|
2023-05-06 12:03:45 +08:00
|
|
|
} else if (bazaarType === "plugins") {
|
|
|
|
|
navTitle = window.siyuan.languages.plugin;
|
2022-05-26 15:18:53 +08:00
|
|
|
}
|
2023-02-20 19:37:42 +08:00
|
|
|
const dataObj1 = {
|
|
|
|
|
bazaarType,
|
|
|
|
|
themeMode: data.modes?.toString(),
|
|
|
|
|
name: data.name,
|
|
|
|
|
repoURL: data.repoURL,
|
|
|
|
|
repoHash: data.repoHash,
|
|
|
|
|
downloaded: true
|
2023-02-21 09:22:38 +08:00
|
|
|
};
|
2023-02-20 19:37:42 +08:00
|
|
|
readmeElement.innerHTML = ` <div class="item__side" data-obj='${JSON.stringify(dataObj1)}'>
|
2022-05-26 15:18:53 +08:00
|
|
|
<div class="fn__flex">
|
2023-07-21 00:08:40 +08:00
|
|
|
<div style="padding-right: 8px" class="block__icon block__icon--show b3-tooltips b3-tooltips__e" data-type="goBack" aria-label="${window.siyuan.languages.back}">
|
2023-05-10 18:44:39 +08:00
|
|
|
<svg><use xlink:href="#iconLeft"></use></svg>
|
|
|
|
|
<span class="fn__space"></span>
|
|
|
|
|
${navTitle}
|
|
|
|
|
</div>
|
2022-05-26 15:18:53 +08:00
|
|
|
</div>
|
|
|
|
|
<div class="fn__flex-1"></div>
|
2023-05-10 18:44:39 +08:00
|
|
|
<img class="item__img" src="${data.iconURL}" onerror="this.src='${data.previewURLThumb}'">
|
2023-05-30 11:31:48 +08:00
|
|
|
<a href="${data.repoURL}" target="_blank" class="item__title" title="GitHub Repo">${data.preferredName}</a>
|
|
|
|
|
<br>
|
|
|
|
|
<a href="${data.repoURL}" target="_blank" class="ft__on-surface ft__smaller" title="GitHub Repo">${data.name}</a>
|
2023-05-07 10:16:33 +08:00
|
|
|
<div class="block__icons">
|
|
|
|
|
<span class="fn__flex-1"></span>
|
|
|
|
|
${data.preferredFunding ?
|
2023-05-10 11:05:34 +08:00
|
|
|
`<a target="_blank" href="${data.preferredFunding}" data-type="a" class="block__icon block__icon--show" aria-label="${window.siyuan.languages.sponsor} ${data.preferredFunding}"><svg class="ft__pink"><use xlink:href="#iconHeart"></use></svg></a>` :
|
2023-05-07 10:16:33 +08:00
|
|
|
`<span class="b3-tooltips b3-tooltips__ne block__icon block__icon--show ft__primary" aria-label="${window.siyuan.languages.author}"><svg><use xlink:href="#iconAccount"></use></svg></span>`
|
|
|
|
|
}
|
|
|
|
|
<span class="fn__space"></span>
|
|
|
|
|
<a href="${urls.join("/")}" target="_blank" title="Creator">${data.author}</a>
|
|
|
|
|
<span class="fn__flex-1"></span>
|
|
|
|
|
</div>
|
2022-05-26 15:18:53 +08:00
|
|
|
<div class="fn__hr--b"></div>
|
|
|
|
|
<div class="fn__hr--b"></div>
|
|
|
|
|
<div class="ft__on-surface ft__smaller" style="line-height: 20px;">${window.siyuan.languages.currentVer}<br>v${data.version}</div>
|
|
|
|
|
<div class="fn__hr"></div>
|
2023-02-20 19:37:42 +08:00
|
|
|
<div class="ft__on-surface ft__smaller" style="line-height: 20px;">${dataObj.downloaded ? window.siyuan.languages.installDate : window.siyuan.languages.releaseDate}<br>${dataObj.downloaded ? data.hInstallDate : data.hUpdated}</div>
|
2022-05-26 15:18:53 +08:00
|
|
|
<div class="fn__hr"></div>
|
2023-02-20 19:37:42 +08:00
|
|
|
<div class="ft__on-surface ft__smaller" style="line-height: 20px;">${dataObj.downloaded ? window.siyuan.languages.installSize : window.siyuan.languages.pkgSize}<br>${dataObj.downloaded ? data.hInstallSize : data.hSize}</div>
|
2023-05-10 18:44:39 +08:00
|
|
|
<div class="fn__hr--b${(data.installed || dataObj.downloaded) ? " fn__none" : ""}"></div>
|
|
|
|
|
<div class="fn__hr--b${(data.installed || dataObj.downloaded) ? " fn__none" : ""}"></div>
|
2023-02-20 19:37:42 +08:00
|
|
|
<div${(data.installed || dataObj.downloaded) ? ' class="fn__none"' : ""}>
|
|
|
|
|
<button class="b3-button" style="width: 168px" data-type="install">${window.siyuan.languages.download}</button>
|
|
|
|
|
</div>
|
|
|
|
|
<div${(data.outdated && (data.installed || dataObj.downloaded)) ? "" : ' class="fn__none"'}>
|
|
|
|
|
<button class="b3-button" style="width: 168px" data-type="install-t">${window.siyuan.languages.update}</button>
|
2022-05-26 15:18:53 +08:00
|
|
|
</div>
|
2023-02-20 19:37:42 +08:00
|
|
|
<div class="fn__hr--b${dataObj.downloaded ? " fn__none" : ""}"></div>
|
|
|
|
|
<div class="fn__hr--b${dataObj.downloaded ? " fn__none" : ""}"></div>
|
|
|
|
|
<div class="fn__flex${dataObj.downloaded ? " fn__none" : ""}" style="justify-content: center;">
|
2022-05-26 15:18:53 +08:00
|
|
|
<svg class="svg ft__on-surface fn__flex-center"><use xlink:href="#iconGithub"></use></svg>
|
|
|
|
|
<span class="fn__space"></span>
|
|
|
|
|
<a href="${data.repoURL}" target="_blank" title="GitHub Repo">Repo</a>
|
|
|
|
|
<span class="fn__space"></span>
|
|
|
|
|
<span class="fn__space"></span>
|
|
|
|
|
<svg class="svg ft__on-surface fn__flex-center"><use xlink:href="#iconStar"></use></svg>
|
|
|
|
|
<span class="fn__space"></span>
|
|
|
|
|
<a href="${data.repoURL}/stargazers" target="_blank" title="Starts">${data.stars}</a>
|
|
|
|
|
<span class="fn__space"></span>
|
|
|
|
|
<span class="fn__space"></span>
|
|
|
|
|
<svg class="svg ft__on-surface fn__flex-center"><use xlink:href="#iconGitHubI"></use></svg>
|
|
|
|
|
<span class="fn__space"></span>
|
|
|
|
|
<a href="${data.repoURL}/issues" target="_blank" title="Open issues">${data.openIssues}</a>
|
|
|
|
|
<span class="fn__space"></span>
|
|
|
|
|
<span class="fn__space"></span>
|
|
|
|
|
<svg class="svg ft__on-surface fn__flex-center"><use xlink:href="#iconDownload"></use></svg>
|
|
|
|
|
<span class="fn__space"></span>
|
|
|
|
|
${data.downloads}
|
|
|
|
|
</div>
|
2023-05-10 18:44:39 +08:00
|
|
|
<div class="fn__hr--b"></div>
|
|
|
|
|
<div class="fn__hr--b"></div>
|
2022-05-26 15:18:53 +08:00
|
|
|
<div class="fn__flex-1"></div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="item__main">
|
|
|
|
|
<div class="item__preview" style="background-image: url(${data.previewURL})"></div>
|
2023-05-14 10:09:11 +08:00
|
|
|
<div class="b3-typography${data.preferredDesc ? "" : " fn__none"}">
|
2023-05-11 12:38:18 +08:00
|
|
|
<div data-type="NodeBlockquote" class="bq" data-node-id>
|
|
|
|
|
<div data-type="NodeParagraph" class="p" data-node-id>
|
|
|
|
|
${data.preferredDesc || ""}
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
2023-05-10 18:44:39 +08:00
|
|
|
<div class="item__readme b3-typography b3-typography--default"">
|
2022-05-26 15:18:53 +08:00
|
|
|
<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>`;
|
2023-02-20 19:37:42 +08:00
|
|
|
if (dataObj.downloaded) {
|
2022-05-26 15:18:53 +08:00
|
|
|
const mdElement = readmeElement.querySelector(".item__readme");
|
2023-05-09 09:12:29 +08:00
|
|
|
mdElement.innerHTML = data.preferredReadme;
|
2022-05-26 15:18:53 +08:00
|
|
|
highlightRender(mdElement);
|
2022-09-02 00:00:16 +08:00
|
|
|
} else {
|
|
|
|
|
fetchPost("/api/bazaar/getBazaarPackageREAME", {
|
|
|
|
|
repoURL: data.repoURL,
|
|
|
|
|
repoHash: data.repoHash,
|
2023-05-05 23:28:50 +08:00
|
|
|
packageType: bazaarType
|
2022-09-02 00:00:16 +08:00
|
|
|
}, response => {
|
|
|
|
|
const mdElement = readmeElement.querySelector(".item__readme");
|
|
|
|
|
mdElement.innerHTML = response.data.html;
|
|
|
|
|
highlightRender(mdElement);
|
|
|
|
|
});
|
|
|
|
|
}
|
2023-04-19 11:28:26 +08:00
|
|
|
readmeElement.classList.add("config-bazaar__readme--show");
|
2022-05-26 15:18:53 +08:00
|
|
|
},
|
2023-05-08 21:00:41 +08:00
|
|
|
bindEvent(app: App) {
|
2023-05-25 21:13:23 +08:00
|
|
|
if (!window.siyuan.config.bazaar.trust) {
|
|
|
|
|
bazaar.element.querySelector("button").addEventListener("click", () => {
|
2023-06-23 23:24:21 +08:00
|
|
|
fetchPost("/api/setting/setBazaar", {
|
|
|
|
|
trust: true,
|
|
|
|
|
petalDisabled: window.siyuan.config.bazaar.petalDisabled
|
|
|
|
|
}, () => {
|
2023-05-25 21:13:23 +08:00
|
|
|
window.siyuan.config.bazaar.trust = true;
|
|
|
|
|
bazaar.element.innerHTML = bazaar.genHTML();
|
|
|
|
|
bazaar.bindEvent(app);
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
return;
|
|
|
|
|
}
|
2023-05-30 10:36:06 +08:00
|
|
|
this._genMyHTML("plugins", app);
|
2023-04-13 09:27:03 +08:00
|
|
|
bazaar.element.firstElementChild.addEventListener("click", (event) => {
|
2022-05-26 15:18:53 +08:00
|
|
|
let target = event.target as HTMLElement;
|
2023-05-05 21:39:56 +08:00
|
|
|
const dataElement = hasClosestByAttribute(target, "data-obj", null);
|
2023-05-06 12:03:45 +08:00
|
|
|
let dataObj: IObject;
|
2023-05-05 21:39:56 +08:00
|
|
|
if (dataElement) {
|
|
|
|
|
dataObj = JSON.parse(dataElement.getAttribute("data-obj"));
|
|
|
|
|
}
|
2022-05-26 15:18:53 +08:00
|
|
|
while (target && !target.isEqualNode(bazaar.element)) {
|
|
|
|
|
const type = target.getAttribute("data-type");
|
2023-05-07 10:16:33 +08:00
|
|
|
if (target.tagName === "A") {
|
|
|
|
|
break;
|
|
|
|
|
} else if (type === "open" && dataObj) {
|
2022-09-02 00:54:21 +08:00
|
|
|
/// #if !BROWSER
|
2023-02-20 19:37:42 +08:00
|
|
|
const dirName = dataObj.bazaarType;
|
2022-09-26 20:41:24 +08:00
|
|
|
if (dirName === "icons" || dirName === "themes") {
|
2023-02-20 19:37:42 +08:00
|
|
|
shell.openPath(path.join(window.siyuan.config.system.confDir, "appearance", dirName, dataObj.name));
|
2022-09-26 20:41:24 +08:00
|
|
|
} else {
|
2023-02-20 19:37:42 +08:00
|
|
|
shell.openPath(path.join(window.siyuan.config.system.dataDir, dirName, dataObj.name));
|
2022-09-26 20:41:24 +08:00
|
|
|
}
|
2022-09-02 00:54:21 +08:00
|
|
|
/// #endif
|
|
|
|
|
event.preventDefault();
|
|
|
|
|
event.stopPropagation();
|
|
|
|
|
break;
|
2023-05-04 19:09:21 +08:00
|
|
|
} else if (["myTheme", "myTemplate", "myIcon", "myWidget", "myPlugin"].includes(type)) {
|
2023-05-24 21:57:55 +08:00
|
|
|
if (target.classList.contains("b3-button--outline") &&
|
2023-06-23 23:24:21 +08:00
|
|
|
!bazaar.element.querySelector("#configBazaarDownloaded").getAttribute("data-loading")) {
|
2022-09-02 00:54:21 +08:00
|
|
|
target.parentElement.childNodes.forEach((item: HTMLElement) => {
|
|
|
|
|
if (item.nodeType !== 3 && item.classList.contains("b3-button")) {
|
|
|
|
|
item.classList.add("b3-button--outline");
|
|
|
|
|
}
|
2022-09-02 19:41:59 +08:00
|
|
|
});
|
2022-09-02 00:54:21 +08:00
|
|
|
target.classList.remove("b3-button--outline");
|
2023-05-08 21:00:41 +08:00
|
|
|
this._genMyHTML(type.replace("my", "").toLowerCase() + "s" as TBazaarType, app);
|
2022-09-02 00:54:21 +08:00
|
|
|
}
|
2022-09-02 00:00:16 +08:00
|
|
|
event.preventDefault();
|
|
|
|
|
event.stopPropagation();
|
|
|
|
|
break;
|
|
|
|
|
} else if (type === "goBack") {
|
2023-04-19 11:28:26 +08:00
|
|
|
bazaar.element.querySelector("#configBazaarReadme").classList.remove("config-bazaar__readme--show");
|
2022-05-26 15:18:53 +08:00
|
|
|
event.preventDefault();
|
|
|
|
|
event.stopPropagation();
|
|
|
|
|
break;
|
|
|
|
|
} else if (type === "install") {
|
|
|
|
|
if (!target.classList.contains("b3-button--progress")) {
|
2023-02-20 19:37:42 +08:00
|
|
|
const bazaarType = dataObj.bazaarType as TBazaarType;
|
2022-05-26 15:18:53 +08:00
|
|
|
let url = "/api/bazaar/installBazaarTemplate";
|
|
|
|
|
if (bazaarType === "themes") {
|
|
|
|
|
url = "/api/bazaar/installBazaarTheme";
|
|
|
|
|
} else if (bazaarType === "icons") {
|
|
|
|
|
url = "/api/bazaar/installBazaarIcon";
|
|
|
|
|
} else if (bazaarType === "widgets") {
|
|
|
|
|
url = "/api/bazaar/installBazaarWidget";
|
2023-05-05 15:19:28 +08:00
|
|
|
} else if (bazaarType === "plugins") {
|
|
|
|
|
url = "/api/bazaar/installBazaarPlugin";
|
2022-05-26 15:18:53 +08:00
|
|
|
}
|
|
|
|
|
fetchPost(url, {
|
2023-02-20 19:37:42 +08:00
|
|
|
repoURL: dataObj.repoURL,
|
|
|
|
|
packageName: dataObj.name,
|
|
|
|
|
repoHash: dataObj.repoHash,
|
|
|
|
|
mode: dataObj.themeMode === "dark" ? 1 : 0,
|
2023-05-29 20:34:16 +08:00
|
|
|
frontend: getFrontend()
|
2022-05-26 15:18:53 +08:00
|
|
|
}, response => {
|
|
|
|
|
if (window.siyuan.config.appearance.themeJS && bazaarType === "themes") {
|
2023-05-11 12:22:53 +08:00
|
|
|
exportLayout({
|
|
|
|
|
reload: true,
|
|
|
|
|
onlyData: false,
|
|
|
|
|
errorExit: false,
|
|
|
|
|
});
|
2022-05-26 15:18:53 +08:00
|
|
|
return;
|
|
|
|
|
}
|
2023-02-20 19:37:42 +08:00
|
|
|
bazaar._onBazaar(response, bazaarType, ["themes", "icons"].includes(bazaarType));
|
2023-05-22 22:30:01 +08:00
|
|
|
bazaar._genMyHTML(bazaarType, app);
|
|
|
|
|
if (bazaarType === "plugins") {
|
|
|
|
|
confirmDialog(window.siyuan.languages.confirm, window.siyuan.languages.enablePluginTip, () => {
|
|
|
|
|
fetchPost("/api/petal/setPetalEnabled", {
|
|
|
|
|
packageName: dataObj.name,
|
|
|
|
|
enabled: true,
|
2023-05-29 20:34:16 +08:00
|
|
|
frontend: getFrontend()
|
2023-05-22 22:30:01 +08:00
|
|
|
}, (response) => {
|
|
|
|
|
loadPlugin(app, response.data);
|
|
|
|
|
bazaar._genMyHTML(bazaarType, app);
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
}
|
2022-05-26 15:18:53 +08:00
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
event.preventDefault();
|
|
|
|
|
event.stopPropagation();
|
|
|
|
|
break;
|
|
|
|
|
} else if (type === "install-t") {
|
2023-02-20 19:37:42 +08:00
|
|
|
if (!target.classList.contains("b3-button--progress")) {
|
|
|
|
|
confirmDialog(window.siyuan.languages.update, window.siyuan.languages.exportTplTip, () => {
|
2023-05-05 21:39:56 +08:00
|
|
|
const bazaarType = dataObj.bazaarType as TBazaarType;
|
2023-02-20 19:37:42 +08:00
|
|
|
let url = "/api/bazaar/installBazaarTemplate";
|
|
|
|
|
if (bazaarType === "themes") {
|
|
|
|
|
url = "/api/bazaar/installBazaarTheme";
|
|
|
|
|
} else if (bazaarType === "icons") {
|
|
|
|
|
url = "/api/bazaar/installBazaarIcon";
|
|
|
|
|
} else if (bazaarType === "widgets") {
|
|
|
|
|
url = "/api/bazaar/installBazaarWidget";
|
2023-05-05 15:19:28 +08:00
|
|
|
} else if (bazaarType === "plugins") {
|
|
|
|
|
url = "/api/bazaar/installBazaarPlugin";
|
2022-09-02 00:54:21 +08:00
|
|
|
}
|
2023-02-20 19:37:42 +08:00
|
|
|
if (!target.classList.contains("b3-button")) {
|
|
|
|
|
target.parentElement.insertAdjacentHTML("afterend", '<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">');
|
2022-07-14 21:34:28 +08:00
|
|
|
}
|
2023-02-20 19:37:42 +08:00
|
|
|
fetchPost(url, {
|
|
|
|
|
repoURL: dataObj.repoURL,
|
|
|
|
|
packageName: dataObj.name,
|
|
|
|
|
repoHash: dataObj.repoHash,
|
|
|
|
|
mode: dataObj.themeMode === "dark" ? 1 : 0,
|
|
|
|
|
update: true,
|
2023-05-29 20:34:16 +08:00
|
|
|
frontend: getFrontend()
|
2023-02-20 19:37:42 +08:00
|
|
|
}, response => {
|
|
|
|
|
// 更新主题后不需要对该主题进行切换 https://github.com/siyuan-note/siyuan/issues/4966
|
2023-05-08 21:00:41 +08:00
|
|
|
this._genMyHTML(bazaarType, app);
|
2023-02-20 19:37:42 +08:00
|
|
|
bazaar._onBazaar(response, bazaarType, ["icons"].includes(bazaarType));
|
|
|
|
|
// https://github.com/siyuan-note/siyuan/issues/5411
|
|
|
|
|
if (bazaarType === "themes" && (
|
|
|
|
|
(window.siyuan.config.appearance.mode === 0 && window.siyuan.config.appearance.themeLight === dataObj.name) ||
|
|
|
|
|
(window.siyuan.config.appearance.mode === 1 && window.siyuan.config.appearance.themeDark === dataObj.name)
|
|
|
|
|
)) {
|
|
|
|
|
if (window.siyuan.config.appearance.themeJS) {
|
2023-05-11 12:22:53 +08:00
|
|
|
exportLayout({
|
|
|
|
|
reload: true,
|
|
|
|
|
onlyData: false,
|
|
|
|
|
errorExit: false,
|
|
|
|
|
});
|
2023-02-20 19:37:42 +08:00
|
|
|
} else {
|
|
|
|
|
const linkElement = (document.getElementById("themeDefaultStyle") as HTMLLinkElement);
|
|
|
|
|
linkElement.href = linkElement.href + "1";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
2022-05-26 15:18:53 +08:00
|
|
|
});
|
2023-02-20 19:37:42 +08:00
|
|
|
}
|
2022-05-26 15:18:53 +08:00
|
|
|
event.preventDefault();
|
|
|
|
|
event.stopPropagation();
|
|
|
|
|
break;
|
|
|
|
|
} else if (type === "uninstall") {
|
2023-05-05 21:39:56 +08:00
|
|
|
const bazaarType = dataObj.bazaarType as TBazaarType;
|
2022-05-26 15:18:53 +08:00
|
|
|
let url = "/api/bazaar/uninstallBazaarTemplate";
|
|
|
|
|
if (bazaarType === "themes") {
|
|
|
|
|
url = "/api/bazaar/uninstallBazaarTheme";
|
|
|
|
|
} else if (bazaarType === "icons") {
|
|
|
|
|
url = "/api/bazaar/uninstallBazaarIcon";
|
|
|
|
|
} else if (bazaarType === "widgets") {
|
|
|
|
|
url = "/api/bazaar/uninstallBazaarWidget";
|
2023-05-05 15:19:28 +08:00
|
|
|
} else if (bazaarType === "plugins") {
|
|
|
|
|
url = "/api/bazaar/uninstallBazaarPlugin";
|
2022-05-26 15:18:53 +08:00
|
|
|
}
|
|
|
|
|
|
2023-02-20 19:37:42 +08:00
|
|
|
const packageName = dataObj.name;
|
2022-05-26 15:18:53 +08:00
|
|
|
if (window.siyuan.config.appearance.themeDark === packageName ||
|
|
|
|
|
window.siyuan.config.appearance.themeLight === packageName ||
|
|
|
|
|
window.siyuan.config.appearance.icon === packageName) {
|
|
|
|
|
showMessage(window.siyuan.languages.uninstallTip);
|
|
|
|
|
} else {
|
2023-05-14 10:17:43 +08:00
|
|
|
confirmDialog(window.siyuan.languages.uninstall, window.siyuan.languages.confirmUninstall.replace("${name}", packageName), () => {
|
|
|
|
|
fetchPost(url, {
|
2023-05-29 20:34:16 +08:00
|
|
|
packageName,
|
|
|
|
|
frontend: getFrontend()
|
2023-05-14 10:17:43 +08:00
|
|
|
}, response => {
|
|
|
|
|
this._genMyHTML(bazaarType, app);
|
|
|
|
|
bazaar._onBazaar(response, bazaarType, ["themes", "icons"].includes(bazaarType));
|
|
|
|
|
if (bazaarType === "plugins") {
|
2023-05-16 00:04:25 +08:00
|
|
|
uninstall(app, packageName);
|
2023-05-14 10:17:43 +08:00
|
|
|
}
|
|
|
|
|
});
|
2022-05-26 15:18:53 +08:00
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
event.preventDefault();
|
|
|
|
|
event.stopPropagation();
|
|
|
|
|
break;
|
|
|
|
|
} else if (type === "switch") {
|
2023-05-05 21:39:56 +08:00
|
|
|
const bazaarType = dataObj.bazaarType as TBazaarType;
|
2023-02-20 19:37:42 +08:00
|
|
|
const packageName = dataObj.name;
|
|
|
|
|
const mode = dataObj.themeMode === "dark" ? 1 : 0;
|
2022-05-26 15:18:53 +08:00
|
|
|
if (bazaarType === "icons") {
|
2023-02-20 19:37:42 +08:00
|
|
|
fetchPost("/api/setting/setAppearance", Object.assign({}, window.siyuan.config.appearance, {
|
2022-05-26 15:18:53 +08:00
|
|
|
icon: packageName,
|
2023-02-20 19:37:42 +08:00
|
|
|
}), (appearanceResponse) => {
|
2023-05-08 21:00:41 +08:00
|
|
|
this._genMyHTML(bazaarType, app);
|
2023-02-20 19:37:42 +08:00
|
|
|
fetchPost("/api/bazaar/getBazaarIcon", {}, response => {
|
2023-02-21 09:22:38 +08:00
|
|
|
response.data.appearance = appearanceResponse.data;
|
2023-02-20 19:37:42 +08:00
|
|
|
bazaar._onBazaar(response, "icons", true);
|
|
|
|
|
bazaar._data.icons = response.data.packages;
|
2022-09-07 17:56:13 +08:00
|
|
|
});
|
2022-05-26 15:18:53 +08:00
|
|
|
});
|
|
|
|
|
} else if (bazaarType === "themes") {
|
2023-02-20 19:37:42 +08:00
|
|
|
fetchPost("/api/setting/setAppearance", Object.assign({}, window.siyuan.config.appearance, {
|
2022-05-26 15:18:53 +08:00
|
|
|
mode,
|
2022-09-25 22:32:26 +08:00
|
|
|
modeOS: false,
|
2022-05-26 15:18:53 +08:00
|
|
|
themeDark: mode === 1 ? packageName : window.siyuan.config.appearance.themeDark,
|
|
|
|
|
themeLight: mode === 0 ? packageName : window.siyuan.config.appearance.themeLight,
|
2023-02-20 19:37:42 +08:00
|
|
|
}), (appearanceResponse) => {
|
2022-05-26 15:18:53 +08:00
|
|
|
if ((mode !== window.siyuan.config.appearance.mode ||
|
|
|
|
|
(mode === 1 && window.siyuan.config.appearance.themeDark !== packageName) ||
|
|
|
|
|
(mode === 0 && window.siyuan.config.appearance.themeLight !== packageName)) &&
|
|
|
|
|
window.siyuan.config.appearance.themeJS) {
|
2023-05-11 12:22:53 +08:00
|
|
|
exportLayout({
|
|
|
|
|
reload: true,
|
|
|
|
|
onlyData: false,
|
|
|
|
|
errorExit: false,
|
|
|
|
|
});
|
2022-05-26 15:18:53 +08:00
|
|
|
} else {
|
2023-05-08 21:00:41 +08:00
|
|
|
this._genMyHTML("themes", app);
|
2023-02-20 19:37:42 +08:00
|
|
|
fetchPost("/api/bazaar/getBazaarTheme", {}, response => {
|
2023-02-21 09:22:38 +08:00
|
|
|
response.data.appearance = appearanceResponse.data;
|
2023-02-20 19:37:42 +08:00
|
|
|
bazaar._onBazaar(response, "themes", true);
|
|
|
|
|
bazaar._data.themes = response.data.packages;
|
2022-09-07 17:56:13 +08:00
|
|
|
});
|
2022-05-26 15:18:53 +08:00
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
event.preventDefault();
|
|
|
|
|
event.stopPropagation();
|
|
|
|
|
break;
|
2023-05-08 21:00:41 +08:00
|
|
|
} else if (type === "setting") {
|
|
|
|
|
app.plugins.find((item: Plugin) => {
|
|
|
|
|
if (item.name === dataObj.name) {
|
2023-05-09 19:27:47 +08:00
|
|
|
item.openSetting();
|
|
|
|
|
return true;
|
2023-05-08 21:00:41 +08:00
|
|
|
}
|
2023-05-09 19:27:47 +08:00
|
|
|
});
|
2023-05-08 21:00:41 +08:00
|
|
|
event.preventDefault();
|
|
|
|
|
event.stopPropagation();
|
|
|
|
|
break;
|
2023-06-23 23:24:21 +08:00
|
|
|
} else if (type === "plugins-enable") {
|
|
|
|
|
if (!target.getAttribute("disabled")) {
|
|
|
|
|
target.setAttribute("disabled", "disabled");
|
|
|
|
|
window.siyuan.config.bazaar.petalDisabled = !(target as HTMLInputElement).checked;
|
2023-06-28 22:57:18 +08:00
|
|
|
fetchPost("/api/setting/setBazaar", window.siyuan.config.bazaar, () => {
|
2023-06-23 23:24:21 +08:00
|
|
|
target.removeAttribute("disabled");
|
|
|
|
|
if (window.siyuan.config.bazaar.petalDisabled) {
|
|
|
|
|
bazaar.element.querySelectorAll("#configBazaarDownloaded .b3-card").forEach(item => {
|
|
|
|
|
item.classList.add("b3-card--disabled");
|
|
|
|
|
uninstall(app, JSON.parse(item.getAttribute("data-obj")).name);
|
2023-06-28 22:57:18 +08:00
|
|
|
});
|
2023-06-23 23:24:21 +08:00
|
|
|
} else {
|
|
|
|
|
bazaar.element.querySelectorAll("#configBazaarDownloaded .b3-card").forEach(item => {
|
|
|
|
|
item.classList.remove("b3-card--disabled");
|
2023-06-28 22:57:18 +08:00
|
|
|
});
|
2023-06-23 23:24:21 +08:00
|
|
|
loadPlugins(app).then(() => {
|
|
|
|
|
app.plugins.forEach(item => {
|
|
|
|
|
afterLoadPlugin(item);
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
event.stopPropagation();
|
|
|
|
|
break;
|
2023-05-05 20:42:07 +08:00
|
|
|
} else if (type === "plugin-enable") {
|
2023-05-16 10:31:01 +08:00
|
|
|
if (!target.getAttribute("disabled")) {
|
|
|
|
|
target.setAttribute("disabled", "disabled");
|
2023-05-16 00:05:18 +08:00
|
|
|
const enabled = (target as HTMLInputElement).checked;
|
2023-05-05 20:42:07 +08:00
|
|
|
fetchPost("/api/petal/setPetalEnabled", {
|
|
|
|
|
packageName: dataObj.name,
|
2023-05-16 00:04:25 +08:00
|
|
|
enabled,
|
2023-05-29 20:34:16 +08:00
|
|
|
frontend: getFrontend()
|
2023-05-16 10:31:01 +08:00
|
|
|
}, (response) => {
|
|
|
|
|
target.removeAttribute("disabled");
|
2023-05-16 00:04:25 +08:00
|
|
|
if (enabled) {
|
2023-06-21 23:29:40 +08:00
|
|
|
loadPlugin(app, response.data).then((plugin: Plugin) => {
|
|
|
|
|
// @ts-ignore
|
|
|
|
|
if (plugin.setting || plugin.__proto__.hasOwnProperty("openSetting")) {
|
|
|
|
|
target.parentElement.querySelector('[data-type="setting"]').classList.remove("fn__none");
|
|
|
|
|
} else {
|
|
|
|
|
target.parentElement.querySelector('[data-type="setting"]').classList.add("fn__none");
|
|
|
|
|
}
|
|
|
|
|
});
|
2023-05-16 00:04:25 +08:00
|
|
|
} else {
|
|
|
|
|
uninstall(app, dataObj.name);
|
2023-06-21 23:29:40 +08:00
|
|
|
target.parentElement.querySelector('[data-type="setting"]').classList.add("fn__none");
|
2023-05-16 00:04:25 +08:00
|
|
|
}
|
2023-05-05 20:42:07 +08:00
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
event.stopPropagation();
|
|
|
|
|
break;
|
2022-05-26 15:18:53 +08:00
|
|
|
} else if (target.classList.contains("b3-card")) {
|
2023-05-30 10:36:06 +08:00
|
|
|
if (!hasClosestByClassName(event.target as HTMLElement, "b3-card__actions--right")) {
|
|
|
|
|
bazaar._renderReadme(target, (dataObj.bazaarType) as TBazaarType);
|
|
|
|
|
}
|
2022-05-26 15:18:53 +08:00
|
|
|
event.preventDefault();
|
|
|
|
|
event.stopPropagation();
|
|
|
|
|
break;
|
|
|
|
|
} else if (target.classList.contains("item") && !target.classList.contains("item--focus")) {
|
|
|
|
|
// switch tab
|
|
|
|
|
bazaar.element.querySelector(".layout-tab-bar .item--focus").classList.remove("item--focus");
|
|
|
|
|
target.classList.add("item--focus");
|
|
|
|
|
bazaar.element.querySelectorAll(".bazaarPanel").forEach(item => {
|
|
|
|
|
if (type === item.getAttribute("data-type")) {
|
|
|
|
|
item.classList.remove("fn__none");
|
|
|
|
|
if (!item.getAttribute("data-init")) {
|
|
|
|
|
if (type === "template") {
|
|
|
|
|
fetchPost("/api/bazaar/getBazaarTemplate", {}, response => {
|
2023-02-20 19:37:42 +08:00
|
|
|
bazaar._onBazaar(response, "templates", false);
|
|
|
|
|
bazaar._data.templates = response.data.packages;
|
2022-05-26 15:18:53 +08:00
|
|
|
});
|
|
|
|
|
} else if (type === "icon") {
|
|
|
|
|
fetchPost("/api/bazaar/getBazaarIcon", {}, response => {
|
2023-02-20 19:37:42 +08:00
|
|
|
bazaar._onBazaar(response, "icons", false);
|
|
|
|
|
bazaar._data.icons = response.data.packages;
|
2022-05-26 15:18:53 +08:00
|
|
|
});
|
|
|
|
|
} else if (type === "widget") {
|
|
|
|
|
fetchPost("/api/bazaar/getBazaarWidget", {}, response => {
|
2023-02-20 19:37:42 +08:00
|
|
|
bazaar._onBazaar(response, "widgets", false);
|
|
|
|
|
bazaar._data.widgets = response.data.packages;
|
2022-05-26 15:18:53 +08:00
|
|
|
});
|
2023-05-04 19:09:21 +08:00
|
|
|
} else if (type === "theme") {
|
|
|
|
|
fetchPost("/api/bazaar/getBazaarTheme", {}, response => {
|
|
|
|
|
bazaar._onBazaar(response, "themes", false);
|
|
|
|
|
bazaar._data.themes = response.data.packages;
|
|
|
|
|
});
|
|
|
|
|
} else if (type === "plugin") {
|
2023-05-29 20:34:16 +08:00
|
|
|
fetchPost("/api/bazaar/getBazaarPlugin", {
|
|
|
|
|
frontend: getFrontend()
|
|
|
|
|
}, response => {
|
2023-05-04 19:09:21 +08:00
|
|
|
bazaar._onBazaar(response, "plugins", false);
|
2023-05-05 14:50:40 +08:00
|
|
|
bazaar._data.plugins = response.data.packages;
|
2023-05-04 19:09:21 +08:00
|
|
|
});
|
2022-05-26 15:18:53 +08:00
|
|
|
}
|
|
|
|
|
item.setAttribute("data-init", "true");
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
item.classList.add("fn__none");
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
event.preventDefault();
|
|
|
|
|
event.stopPropagation();
|
|
|
|
|
break;
|
|
|
|
|
} else if (target.classList.contains("item__preview")) {
|
|
|
|
|
target.classList.toggle("item__preview--fullscreen");
|
|
|
|
|
event.preventDefault();
|
|
|
|
|
event.stopPropagation();
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
target = target.parentElement;
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
bazaar.element.querySelectorAll(".b3-select").forEach((selectElement: HTMLSelectElement) => {
|
|
|
|
|
selectElement.addEventListener("change", () => {
|
|
|
|
|
if (selectElement.id === "bazaarSelect") {
|
|
|
|
|
// theme select
|
|
|
|
|
bazaar.element.querySelectorAll("#configBazaarTheme .b3-card").forEach((item) => {
|
2023-05-04 19:09:21 +08:00
|
|
|
const dataObj = JSON.parse(item.getAttribute("data-obj"));
|
2022-05-26 15:18:53 +08:00
|
|
|
if (selectElement.value === "0") {
|
2023-02-20 20:11:15 +08:00
|
|
|
if (dataObj.themeMode.indexOf("light") > -1) {
|
2022-05-26 15:18:53 +08:00
|
|
|
item.classList.remove("fn__none");
|
|
|
|
|
} else {
|
|
|
|
|
item.classList.add("fn__none");
|
|
|
|
|
}
|
|
|
|
|
} else if (selectElement.value === "1") {
|
2023-02-20 20:11:15 +08:00
|
|
|
if (dataObj.themeMode.indexOf("dark") > -1) {
|
2022-05-26 15:18:53 +08:00
|
|
|
item.classList.remove("fn__none");
|
|
|
|
|
} else {
|
|
|
|
|
item.classList.add("fn__none");
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
item.classList.remove("fn__none");
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
} else {
|
|
|
|
|
// sort
|
2022-12-31 22:14:42 +08:00
|
|
|
const localSort = window.siyuan.storage[Constants.LOCAL_BAZAAR];
|
2022-05-26 15:18:53 +08:00
|
|
|
const panelElement = selectElement.parentElement.parentElement;
|
|
|
|
|
let html = "";
|
2023-06-07 18:52:45 +08:00
|
|
|
const cardElements = Array.from(panelElement.querySelectorAll(".b3-card"));
|
2022-05-26 15:18:53 +08:00
|
|
|
if (selectElement.value === "0") { // 更新时间降序
|
2023-06-07 18:52:45 +08:00
|
|
|
cardElements.sort((a, b) => {
|
2023-02-20 20:11:15 +08:00
|
|
|
return JSON.parse(b.getAttribute("data-obj")).updated < JSON.parse(a.getAttribute("data-obj")).updated ? -1 : 1;
|
2022-05-26 15:18:53 +08:00
|
|
|
}).forEach((item) => {
|
|
|
|
|
html += item.outerHTML;
|
|
|
|
|
});
|
|
|
|
|
} else if (selectElement.value === "1") { // 更新时间升序
|
2023-06-07 18:52:45 +08:00
|
|
|
cardElements.sort((a, b) => {
|
2023-02-20 20:11:15 +08:00
|
|
|
return JSON.parse(b.getAttribute("data-obj")).updated < JSON.parse(a.getAttribute("data-obj")).updated ? 1 : -1;
|
2022-05-26 15:18:53 +08:00
|
|
|
}).forEach((item) => {
|
|
|
|
|
html += item.outerHTML;
|
|
|
|
|
});
|
|
|
|
|
} else if (selectElement.value === "2") { // 下载次数降序
|
2023-06-07 18:52:45 +08:00
|
|
|
cardElements.sort((a, b) => {
|
2023-05-10 10:45:11 +08:00
|
|
|
return JSON.parse(b.getAttribute("data-obj")).downloads < JSON.parse(a.getAttribute("data-obj")).downloads ? -1 : 1;
|
2022-05-26 15:18:53 +08:00
|
|
|
}).forEach((item) => {
|
|
|
|
|
html += item.outerHTML;
|
|
|
|
|
});
|
|
|
|
|
} else if (selectElement.value === "3") { // 下载次数升序
|
2023-06-07 18:52:45 +08:00
|
|
|
cardElements.sort((a, b) => {
|
2023-05-10 10:45:11 +08:00
|
|
|
return JSON.parse(b.getAttribute("data-obj")).downloads < JSON.parse(a.getAttribute("data-obj")).downloads ? 1 : -1;
|
2022-05-26 15:18:53 +08:00
|
|
|
}).forEach((item) => {
|
|
|
|
|
html += item.outerHTML;
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
localSort[selectElement.parentElement.parentElement.getAttribute("data-type")] = selectElement.value;
|
2023-01-01 15:18:32 +08:00
|
|
|
setStorageVal(Constants.LOCAL_BAZAAR, window.siyuan.storage[Constants.LOCAL_BAZAAR]);
|
2023-07-04 13:59:29 +08:00
|
|
|
if (cardElements.length > 1) {
|
|
|
|
|
html += '<div class="fn__flex-1" style="margin-left: 15px;min-width: 342px;"></div><div class="fn__flex-1" style="margin-left: 15px;min-width: 342px;"></div>';
|
2023-06-07 18:52:45 +08:00
|
|
|
}
|
2022-05-26 15:18:53 +08:00
|
|
|
panelElement.querySelector(".b3-cards").innerHTML = html;
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
},
|
2023-02-20 19:37:42 +08:00
|
|
|
_onBazaar(response: IWebSocketData, bazaarType: TBazaarType, reload: boolean) {
|
2022-05-26 15:18:53 +08:00
|
|
|
let id = "#configBazaarTemplate";
|
|
|
|
|
if (bazaarType === "themes") {
|
|
|
|
|
id = "#configBazaarTheme";
|
|
|
|
|
} else if (bazaarType === "icons") {
|
|
|
|
|
id = "#configBazaarIcon";
|
|
|
|
|
} else if (bazaarType === "widgets") {
|
|
|
|
|
id = "#configBazaarWidget";
|
2023-05-05 14:50:40 +08:00
|
|
|
} else if (bazaarType === "plugins") {
|
|
|
|
|
id = "#configBazaarPlugin";
|
2022-05-26 15:18:53 +08:00
|
|
|
}
|
|
|
|
|
const element = bazaar.element.querySelector(id);
|
|
|
|
|
if (response.code === 1) {
|
|
|
|
|
showMessage(response.msg);
|
|
|
|
|
element.querySelectorAll("img[data-type='img-loading']").forEach((item) => {
|
|
|
|
|
item.remove();
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
let html = "";
|
|
|
|
|
response.data.packages.forEach((item: IBazaarItem) => {
|
2023-02-20 19:37:42 +08:00
|
|
|
html += this._genCardHTML(item, bazaarType);
|
2022-05-26 15:18:53 +08:00
|
|
|
});
|
2023-02-20 19:37:42 +08:00
|
|
|
bazaar._data[bazaarType] = response.data.packages;
|
2022-05-26 15:18:53 +08:00
|
|
|
element.innerHTML = `<div class="b3-cards">${html}</div>`;
|
|
|
|
|
|
2022-12-31 22:14:42 +08:00
|
|
|
const localSort = window.siyuan.storage[Constants.LOCAL_BAZAAR];
|
2022-05-26 15:18:53 +08:00
|
|
|
if (localSort[bazaarType.replace("s", "")] === "1") {
|
|
|
|
|
html = "";
|
|
|
|
|
Array.from(element.querySelectorAll(".b3-card")).sort((a, b) => {
|
2023-02-20 20:11:15 +08:00
|
|
|
return JSON.parse(b.getAttribute("data-obj")).updated < JSON.parse(a.getAttribute("data-obj")).updated ? 1 : -1;
|
2022-05-26 15:18:53 +08:00
|
|
|
}).forEach((item) => {
|
|
|
|
|
html += item.outerHTML;
|
|
|
|
|
});
|
|
|
|
|
} else if (localSort[bazaarType.replace("s", "")] === "2") { // 下载次数降序
|
|
|
|
|
html = "";
|
|
|
|
|
Array.from(element.querySelectorAll(".b3-card")).sort((a, b) => {
|
2023-05-10 11:46:39 +08:00
|
|
|
return JSON.parse(b.getAttribute("data-obj")).downloads < JSON.parse(a.getAttribute("data-obj")).downloads ? -1 : 1;
|
2022-05-26 15:18:53 +08:00
|
|
|
}).forEach((item) => {
|
|
|
|
|
html += item.outerHTML;
|
|
|
|
|
});
|
|
|
|
|
} else if (localSort[bazaarType.replace("s", "")] === "3") { // 下载次数升序
|
|
|
|
|
html = "";
|
|
|
|
|
Array.from(element.querySelectorAll(".b3-card")).sort((a, b) => {
|
2023-05-10 11:46:39 +08:00
|
|
|
return JSON.parse(b.getAttribute("data-obj")).downloads < JSON.parse(a.getAttribute("data-obj")).downloads ? 1 : -1;
|
2022-05-26 15:18:53 +08:00
|
|
|
}).forEach((item) => {
|
|
|
|
|
html += item.outerHTML;
|
|
|
|
|
});
|
|
|
|
|
}
|
2023-07-04 13:59:29 +08:00
|
|
|
if (response.data.packages.length > 1) {
|
|
|
|
|
html += '<div class="fn__flex-1" style="margin-left: 15px;min-width: 342px;"></div><div class="fn__flex-1" style="margin-left: 15px;min-width: 342px;"></div>';
|
2023-06-04 19:56:36 +08:00
|
|
|
}
|
2022-05-26 15:18:53 +08:00
|
|
|
element.innerHTML = `<div class="b3-cards">${html}</div>`;
|
|
|
|
|
if (reload) {
|
|
|
|
|
appearance.onSetappearance(response.data.appearance);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
};
|