Skip to content

Commit 013d75a

Browse files
feat: plugin enable/disable functionality and update translations
- Introduced new plugin management features allowing users to enable or disable plugins. - Updated language files for Arabic, German, English, French, Hebrew, and Indonesian to include strings related to plugin status and actions. - Enhanced the UI to reflect the enabled/disabled state of plugins with appropriate styling and toggle switches. This update improves user experience by providing clearer control over plugin functionality.
1 parent bf17cf6 commit 013d75a

File tree

13 files changed

+240
-21
lines changed

13 files changed

+240
-21
lines changed

src/lang/ar-ye.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -403,5 +403,9 @@
403403
"quicktools:hash": "Insert Hash symbol",
404404
"quicktools:dollar": "Insert dollar symbol",
405405
"quicktools:modulo": "Insert modulo/percent symbol",
406-
"quicktools:caret": "Insert caret symbol"
406+
"quicktools:caret": "Insert caret symbol",
407+
"plugin_enabled": "تم تفعيل الإضافة",
408+
"plugin_disabled": "تم تعطيل الإضافة",
409+
"enable_plugin": "تفعيل هذه الإضافة",
410+
"disable_plugin": "تعطيل هذه الإضافة"
407411
}

src/lang/de-de.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -403,5 +403,9 @@
403403
"quicktools:hash": "Insert Hash symbol",
404404
"quicktools:dollar": "Insert dollar symbol",
405405
"quicktools:modulo": "Insert modulo/percent symbol",
406-
"quicktools:caret": "Insert caret symbol"
406+
"quicktools:caret": "Insert caret symbol",
407+
"plugin_enabled": "Plugin aktiviert",
408+
"plugin_disabled": "Plugin deaktiviert",
409+
"enable_plugin": "Plugin aktivieren",
410+
"disable_plugin": "Plugin deaktivieren"
407411
}

src/lang/en-us.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -404,5 +404,9 @@
404404
"quicktools:hash": "Insert Hash symbol",
405405
"quicktools:dollar": "Insert dollar symbol",
406406
"quicktools:modulo": "Insert modulo/percent symbol",
407-
"quicktools:caret": "Insert caret symbol"
407+
"quicktools:caret": "Insert caret symbol",
408+
"plugin_enabled": "Plugin enabled",
409+
"plugin_disabled": "Plugin disabled",
410+
"enable_plugin": "Enable this Plugin",
411+
"disable_plugin": "Disable this Plugin"
408412
}

src/lang/fr-fr.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -403,5 +403,9 @@
403403
"quicktools:hash": "Insert Hash symbol",
404404
"quicktools:dollar": "Insert dollar symbol",
405405
"quicktools:modulo": "Insert modulo/percent symbol",
406-
"quicktools:caret": "Insert caret symbol"
406+
"quicktools:caret": "Insert caret symbol",
407+
"plugin_enabled": "Plugin activé",
408+
"plugin_disabled": "Plugin désactivé",
409+
"enable_plugin": "Activer ce plugin",
410+
"disable_plugin": "Désactiver ce plugin"
407411
}

src/lang/he-il.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -404,5 +404,9 @@
404404
"quicktools:hash": "הוסף סמל גיבוב",
405405
"quicktools:dollar": "הוסף סימן דולר",
406406
"quicktools:modulo": "Insert modulo/percent symbol",
407-
"quicktools:caret": "Insert caret symbol"
407+
"quicktools:caret": "Insert caret symbol",
408+
"plugin_enabled": "הפלאגין הופעל",
409+
"plugin_disabled": "הפלאגין הושבת",
410+
"enable_plugin": "הפעל תוסף זה",
411+
"disable_plugin": "השבת תוסף זה"
408412
}

src/lang/id-id.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -404,5 +404,9 @@
404404
"quicktools:hash": "Masukkan tanda pagar",
405405
"quicktools:dollar": "Masukkan simbol dolar",
406406
"quicktools:modulo": "Masukkan simbol modulus/persen",
407-
"quicktools:caret": "Masukkan tanda sisipan"
407+
"quicktools:caret": "Masukkan tanda sisipan",
408+
"plugin_enabled": "Plugin diaktifkan",
409+
"plugin_disabled": "Plugin dinonaktifkan",
410+
"enable_plugin": "Aktifkan Plugin ini",
411+
"disable_plugin": "Nonaktifkan Plugin ini"
408412
}

src/lib/loadPlugins.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ export default async function loadPlugins(loadOnlyTheme = false) {
3636

3737
let pluginsToLoad = [];
3838
const currentTheme = settings.value.appTheme;
39+
const enabledMap = settings.value.pluginsDisabled || {};
3940

4041
if (loadOnlyTheme) {
4142
// Only load theme plugins matching current theme
@@ -44,10 +45,10 @@ export default async function loadPlugins(loadOnlyTheme = false) {
4445
return isThemePlugin(pluginId) && !loadedPlugins.has(pluginId);
4546
});
4647
} else {
47-
// Load non-theme plugins that aren't loaded yet
48+
// Load non-theme plugins that aren't loaded yet and are enabled
4849
pluginsToLoad = plugins.filter((pluginDir) => {
4950
const pluginId = Url.basename(pluginDir.url);
50-
return !isThemePlugin(pluginId) && !loadedPlugins.has(pluginId);
51+
return !isThemePlugin(pluginId) && !loadedPlugins.has(pluginId) && enabledMap[pluginId] !== true;
5152
});
5253
}
5354

src/lib/settings.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,7 @@ class Settings {
175175
showRetryToast: false,
176176
showSideButtons: true,
177177
showAnnotations: false,
178+
pluginsDisabled: {}, // pluginId: true/false
178179
};
179180
this.value = structuredClone(this.#defaultSettings);
180181
}
@@ -223,6 +224,9 @@ class Settings {
223224
themes.update(new ThemeBuilder("Custom").toJSON());
224225
}
225226

227+
// Ensure pluginsDisabled exists
228+
if (!this.value.pluginsDisabled) this.value.pluginsDisabled = {};
229+
226230
return;
227231
}
228232

src/pages/plugins/item.js

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ import helpers from "utils/helpers";
99
* @param {string} [param0.version]
1010
* @param {number} [param0.downloads]
1111
* @param {boolean} [param0.installed]
12+
* @param {boolean} [param0.enabled]
13+
* @param {function} [param0.onToggleEnabled]
1214
* @returns
1315
*/
1416
export default function Item({
@@ -22,6 +24,8 @@ export default function Item({
2224
author_verified,
2325
downloads,
2426
installed,
27+
enabled,
28+
onToggleEnabled,
2529
}) {
2630
const authorName = (() => {
2731
const displayName =
@@ -36,9 +40,11 @@ export default function Item({
3640
return (
3741
<div
3842
data-id={id}
43+
data-plugin-enabled={enabled !== false}
3944
className="list-item"
4045
data-action="open"
4146
data-installed={(!!installed).toString()}
47+
style={enabled === false ? { opacity: 0.5, filter: 'grayscale(0.7)' } : {}}
4248
>
4349
<div className="plugin-header">
4450
<div className="plugin-icon">
@@ -92,6 +98,49 @@ export default function Item({
9298
{price !== null && price !== undefined && price !== 0 ? (
9399
<span className="plugin-price">{price}</span>
94100
) : null}
101+
{/* Enable/Disable Toggle */}
102+
{installed && (
103+
<span
104+
className="plugin-toggle-switch"
105+
data-enabled={enabled}
106+
// style={{ marginLeft: 12, display: 'flex', alignItems: 'center', gap: 4, cursor: 'pointer', zIndex: 100 }}
107+
onclick={e => {
108+
console.log("on-click :: plugin-toggle-switch")
109+
e.stopPropagation();
110+
onToggleEnabled?.(id, enabled);
111+
}}
112+
>
113+
<span
114+
className="plugin-toggle-track"
115+
data-enabled={enabled}
116+
// style={{
117+
// width: 36,
118+
// height: 20,
119+
// borderRadius: 12,
120+
// background: enabled ? '#4ade80' : '#d1d5db',
121+
// position: 'relative',
122+
// transition: 'background 0.2s',
123+
// display: 'inline-block',
124+
// }}
125+
>
126+
<span
127+
className="plugin-toggle-thumb"
128+
// style={{
129+
// position: 'absolute',
130+
// left: enabled ? 18 : 2,
131+
// top: 2,
132+
// width: 16,
133+
// height: 16,
134+
// borderRadius: '50%',
135+
// background: '#fff',
136+
// boxShadow: '0 1px 3px rgba(0,0,0,0.1)',
137+
// transition: 'left 0.2s',
138+
// }}
139+
/>
140+
</span>
141+
<span style={{ fontSize: '0.85em', minWidth: 60, textAlign: 'left' }}>{enabled ? 'Enabled' : 'Disabled'}</span>
142+
</span>
143+
)}
95144
</div>
96145
</div>
97146
</div>

src/pages/plugins/plugins.js

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ import installPlugin from "lib/installPlugin";
1414
import prompt from "dialogs/prompt";
1515
import actionStack from "lib/actionStack";
1616
import Contextmenu from "components/contextmenu";
17+
import settings from "lib/settings";
18+
import loadPlugin from "lib/loadPlugin";
1719

1820
/**
1921
*
@@ -330,6 +332,7 @@ export default function PluginsInclude(updates) {
330332
async function getInstalledPlugins(updates) {
331333
$list.installed.setAttribute("empty-msg", strings["loading..."]);
332334
plugins.installed = [];
335+
const disabledMap = settings.value.pluginsDisabled || {};
333336
const installed = await fsOperation(PLUGIN_DIR).lsDir();
334337
await Promise.all(
335338
installed.map(async (item) => {
@@ -340,8 +343,10 @@ export default function PluginsInclude(updates) {
340343
const iconUrl = getLocalRes(id, plugin.icon);
341344
plugin.icon = await helpers.toInternalUri(iconUrl);
342345
plugin.installed = true;
346+
plugin.enabled = disabledMap[id] !== true; // default to true
347+
plugin.onToggleEnabled = onToggleEnabled;
343348
plugins.installed.push(plugin);
344-
if ($list.installed.get(`[data-id="${id}"]`)) return;
349+
if ($list.installed.get(`[data-id=\"${id}\"]`)) return;
345350
$list.installed.append(<Item {...plugin} />);
346351
}),
347352
);
@@ -412,4 +417,17 @@ export default function PluginsInclude(updates) {
412417
addSource(sourceType, source);
413418
}
414419
}
420+
421+
async function onToggleEnabled(id, enabled) {
422+
const disabledMap = settings.value.pluginsDisabled || {};
423+
disabledMap[id] = !enabled;
424+
settings.update({ pluginsDisabled: disabledMap }, false);
425+
if (enabled) {
426+
window.acode.unmountPlugin(id);
427+
window.toast(strings["plugin_disabled"] || "Plugin Disabled");
428+
} else {
429+
await loadPlugin(id);
430+
window.toast(strings["plugin_enabled"] || "Plugin enabled");
431+
}
432+
}
415433
}

0 commit comments

Comments
 (0)