From e01c428a17c8ef2ff3c0a1936c055b684ae907ce Mon Sep 17 00:00:00 2001 From: Jeremy Ruston Date: Wed, 26 Feb 2025 21:17:53 +0000 Subject: [PATCH] Add support for add-on language and theme plugins --- core/modules/pluginswitcher.js | 8 ++- .../data/plugins/LanguageAddonSubPlugin.tid | 57 +++++++++++++++++++ .../tests/data/plugins/LanguageSubPlugin.tid | 45 +++++++++++++++ 3 files changed, 109 insertions(+), 1 deletion(-) create mode 100644 editions/test/tiddlers/tests/data/plugins/LanguageAddonSubPlugin.tid create mode 100644 editions/test/tiddlers/tests/data/plugins/LanguageSubPlugin.tid diff --git a/core/modules/pluginswitcher.js b/core/modules/pluginswitcher.js index 2dd47265c..8d80032ab 100644 --- a/core/modules/pluginswitcher.js +++ b/core/modules/pluginswitcher.js @@ -60,6 +60,12 @@ PluginSwitcher.prototype.switchPlugins = function() { } }; accumulatePlugin(selectedPluginTitle); + var selectedPluginTiddler = this.wiki.getTiddler(selectedPluginTitle); + this.wiki.eachTiddlerPlusShadows(function(tiddler,title) { + if(tiddler.isPlugin() && tiddler.fields["plugin-type"] === self.pluginType && tiddler.fields.name === selectedPluginTiddler.fields.name) { + accumulatePlugin(title); + } + }); // Read the plugin info for the incoming plugins var changedPluginInfo = this.wiki.readPluginInfo(plugins); // Collect the shadow tiddlers of any deleted plugins @@ -86,7 +92,7 @@ PluginSwitcher.prototype.switchPlugins = function() { // Register any new theme/language tiddlers var registeredTiddlers = this.wiki.registerPluginTiddlers(this.pluginType,plugins); // Unpack the current theme/language tiddlers - this.wiki.unpackPluginTiddlers(this.doDebug); + this.wiki.unpackPluginTiddlers(); // Queue change events for the changed shadow tiddlers $tw.utils.each(changedShadowTiddlers,function(status,title) { self.wiki.enqueueTiddlerEvent(title,changedShadowTiddlers[title], true); diff --git a/editions/test/tiddlers/tests/data/plugins/LanguageAddonSubPlugin.tid b/editions/test/tiddlers/tests/data/plugins/LanguageAddonSubPlugin.tid new file mode 100644 index 000000000..868bc98b6 --- /dev/null +++ b/editions/test/tiddlers/tests/data/plugins/LanguageAddonSubPlugin.tid @@ -0,0 +1,57 @@ +title: Plugins/LanguageAddonSubPlugin +description: Loading of correct language subplugin at startup +type: text/vnd.tiddlywiki-multiple +tags: [[$:/tags/wiki-test-spec]] + +title: Output + +{{First}} + +{{Second}} ++ +title: $:/language + +$:/languages/fr-FR-subplugin ++ +title: $:/languages/fr-FR-container +list: readme +name: fr-FR +plugin-type: plugin +type: application/json + +{ + "tiddlers": { + "$:/languages/fr-FR-container/readme": { + "title": "$:/languages/fr-FR-container/readme", + "text": "Readme from ~$:/languages/fr-FR-container\n\n" + }, + "$:/languages/fr-FR-subplugin": { + "title": "$:/languages/fr-FR-subplugin", + "name": "fr-FR", + "description": "fr-FR subplugin", + "list": "readme", + "stability": "STABILITY_1_EXPERIMENTAL", + "version": "5.3.7-prerelease", + "plugin-type": "language", + "dependents": "", + "type": "application/json", + "text": "{\"tiddlers\":{\"First\":{\"title\":\"First\",\"text\":\"First from ~$:/languages/fr-FR-subplugin\"}}}" + }, + "$:/languages/fr-FR-subplugin2": { + "title": "$:/languages/fr-FR-subplugin2", + "name": "fr-FR", + "description": "fr-FR subplugin2", + "list": "readme", + "stability": "STABILITY_1_EXPERIMENTAL", + "version": "5.3.7-prerelease", + "plugin-type": "language", + "dependents": "", + "type": "application/json", + "text": "{\"tiddlers\":{\"Second\":{\"title\":\"Second\",\"text\":\"Second from ~$:/languages/fr-FR-subplugin2\"}}}" + } + } +} ++ +title: ExpectedResult + +

First from $:/languages/fr-FR-subplugin

Second from $:/languages/fr-FR-subplugin2

\ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/plugins/LanguageSubPlugin.tid b/editions/test/tiddlers/tests/data/plugins/LanguageSubPlugin.tid new file mode 100644 index 000000000..77cdb88a3 --- /dev/null +++ b/editions/test/tiddlers/tests/data/plugins/LanguageSubPlugin.tid @@ -0,0 +1,45 @@ +title: Plugins/LanguageSubPlugin +description: Loading of correct language subplugin at startup +type: text/vnd.tiddlywiki-multiple +tags: [[$:/tags/wiki-test-spec]] + +title: Output + +{{First}} + +{{$:/languages/fr-FR-container/readme}} ++ +title: $:/language + +$:/languages/fr-FR-subplugin ++ +title: $:/languages/fr-FR-container +list: readme +name: fr-FR +plugin-type: plugin +type: application/json + +{ + "tiddlers": { + "$:/languages/fr-FR-container/readme": { + "title": "$:/languages/fr-FR-container/readme", + "text": "Readme from ~$:/languages/fr-FR-container\n\n" + }, + "$:/languages/fr-FR-subplugin": { + "title": "$:/languages/fr-FR-subplugin", + "name": "fr-FR", + "description": "fr-FR subplugin", + "list": "readme", + "stability": "STABILITY_1_EXPERIMENTAL", + "version": "5.3.7-prerelease", + "plugin-type": "language", + "dependents": "", + "type": "application/json", + "text": "{\"tiddlers\":{\"First\":{\"title\":\"First\",\"text\":\"First from ~$:/languages/fr-FR-subplugin\"}}}" + } + } +} ++ +title: ExpectedResult + +

First from $:/languages/fr-FR-subplugin

Readme from $:/languages/fr-FR-container

\ No newline at end of file