diff --git a/app/src/assets/scss/component/_card.scss b/app/src/assets/scss/component/_card.scss index 6aff5e355..64760741d 100644 --- a/app/src/assets/scss/component/_card.scss +++ b/app/src/assets/scss/component/_card.scss @@ -32,6 +32,11 @@ background-color: var(--b3-theme-primary-lightest) } + &--disabled { + opacity: .68; + pointer-events: none; + } + &__img { margin: 16px 0 16px 16px; diff --git a/app/src/config/bazaar.ts b/app/src/config/bazaar.ts index b107e0651..5eb1f8782 100644 --- a/app/src/config/bazaar.ts +++ b/app/src/config/bazaar.ts @@ -16,7 +16,7 @@ import {Plugin} from "../plugin"; import {App} from "../index"; import {escapeAttr} from "../util/escape"; import {uninstall} from "../plugin/uninstall"; -import {loadPlugin} from "../plugin/loader"; +import {afterLoadPlugin, loadPlugin, loadPlugins} from "../plugin/loader"; export const bazaar = { element: undefined as Element, @@ -307,7 +307,7 @@ export const bazaar = { } }); } - html += `
+ html += `
@@ -340,6 +340,12 @@ export const bazaar = {
`; }); bazaar._data.downloaded = response.data.packages; + if (bazaarType === "plugins") { + html = `
+
+ +
${html}`; + } contentElement.innerHTML = html ? html : `
  • ${window.siyuan.languages.emptyContent}
`; }); }, @@ -478,7 +484,10 @@ export const bazaar = { bindEvent(app: App) { if (!window.siyuan.config.bazaar.trust) { bazaar.element.querySelector("button").addEventListener("click", () => { - fetchPost("/api/setting/setBazaar", {trust: true}, () => { + fetchPost("/api/setting/setBazaar", { + trust: true, + petalDisabled: window.siyuan.config.bazaar.petalDisabled + }, () => { window.siyuan.config.bazaar.trust = true; bazaar.element.innerHTML = bazaar.genHTML(); bazaar.bindEvent(app); @@ -511,9 +520,8 @@ export const bazaar = { event.stopPropagation(); break; } else if (["myTheme", "myTemplate", "myIcon", "myWidget", "myPlugin"].includes(type)) { - const contentElement = bazaar.element.querySelector("#configBazaarDownloaded"); if (target.classList.contains("b3-button--outline") && - !contentElement.getAttribute("data-loading")) { + !bazaar.element.querySelector("#configBazaarDownloaded").getAttribute("data-loading")) { target.parentElement.childNodes.forEach((item: HTMLElement) => { if (item.nodeType !== 3 && item.classList.contains("b3-button")) { item.classList.add("b3-button--outline"); @@ -716,6 +724,31 @@ export const bazaar = { event.preventDefault(); event.stopPropagation(); break; + } else if (type === "plugins-enable") { + if (!target.getAttribute("disabled")) { + target.setAttribute("disabled", "disabled"); + window.siyuan.config.bazaar.petalDisabled = !(target as HTMLInputElement).checked; + fetchPost("/api/setting/setBazaar", window.siyuan.config.bazaar, (response) => { + 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); + }) + } else { + bazaar.element.querySelectorAll("#configBazaarDownloaded .b3-card").forEach(item => { + item.classList.remove("b3-card--disabled"); + }) + loadPlugins(app).then(() => { + app.plugins.forEach(item => { + afterLoadPlugin(item); + }); + }); + } + }); + } + event.stopPropagation(); + break; } else if (type === "plugin-enable") { if (!target.getAttribute("disabled")) { target.setAttribute("disabled", "disabled"); diff --git a/app/src/types/index.d.ts b/app/src/types/index.d.ts index 1c3375ed1..4251143b2 100644 --- a/app/src/types/index.d.ts +++ b/app/src/types/index.d.ts @@ -497,6 +497,7 @@ interface IConfig { cloudRegion: number bazaar: { trust: boolean + petalDisabled: boolean } repo: { key: string