1
0
mirror of https://github.com/Jermolene/TiddlyWiki5 synced 2024-09-26 22:28:18 +00:00

Dynamic plugins: Change "contains JavaScript" to "requires reload"

We might in the future offer support for certain types of JS module to be hot loaded.
This commit is contained in:
Jeremy Ruston 2019-09-27 16:47:55 +01:00
parent cb3bec65a1
commit 93e01435d1
5 changed files with 14 additions and 14 deletions

View File

@ -69,7 +69,7 @@ Command.prototype.execute = function() {
// Collect the skinny list data // Collect the skinny list data
var pluginTiddlers = JSON.parse(tiddler.text), var pluginTiddlers = JSON.parse(tiddler.text),
readmeContent = (pluginTiddlers.tiddlers[title + "/readme"] || {}).text, readmeContent = (pluginTiddlers.tiddlers[title + "/readme"] || {}).text,
doesContainJavaScript = !!$tw.wiki.doesPluginInfoContainModules(pluginTiddlers), doesRequireReload = !!$tw.wiki.doesPluginInfoRequireReload(pluginTiddlers),
iconTiddler = pluginTiddlers.tiddlers[title + "/icon"] || {}, iconTiddler = pluginTiddlers.tiddlers[title + "/icon"] || {},
iconType = iconTiddler.type, iconType = iconTiddler.type,
iconText = iconTiddler.text, iconText = iconTiddler.text,
@ -80,7 +80,7 @@ Command.prototype.execute = function() {
skinnyList.push($tw.utils.extend({},tiddler,{ skinnyList.push($tw.utils.extend({},tiddler,{
text: undefined, text: undefined,
readme: readmeContent, readme: readmeContent,
"contains-javascript": doesContainJavaScript ? "yes" : "no", "requires-reload": doesRequireReload ? "yes" : "no",
icon: iconContent icon: iconContent
})); }));
}); });

View File

@ -28,8 +28,8 @@ exports.startup = function() {
requireReloadDueToPluginChange = false; requireReloadDueToPluginChange = false;
$tw.utils.each(Object.keys(changes),function(title) { $tw.utils.each(Object.keys(changes),function(title) {
var tiddler = $tw.wiki.getTiddler(title), var tiddler = $tw.wiki.getTiddler(title),
containsModules = $tw.wiki.doesPluginContainModules(title); requiresReload = $tw.wiki.doesPluginRequireReload(title);
if(containsModules) { if(requiresReload) {
requireReloadDueToPluginChange = true; requireReloadDueToPluginChange = true;
} else if(tiddler) { } else if(tiddler) {
var pluginType = tiddler.fields["plugin-type"]; var pluginType = tiddler.fields["plugin-type"];

View File

@ -41,14 +41,14 @@ exports.upgrade = function(wiki,titles,tiddlers) {
// Check if we're dealing with a plugin // Check if we're dealing with a plugin
if(incomingTiddler && incomingTiddler["plugin-type"]) { if(incomingTiddler && incomingTiddler["plugin-type"]) {
// Check whether the plugin contains JS modules // Check whether the plugin contains JS modules
var doesContainJavaScript = $tw.wiki.doesPluginInfoContainModules(JSON.parse(incomingTiddler.text)) ? ($tw.wiki.getTiddlerText("$:/language/ControlPanel/Plugins/PluginWillRequireReload") + " ") : ""; var requiresReload = $tw.wiki.doesPluginInfoRequireReload(JSON.parse(incomingTiddler.text)) ? ($tw.wiki.getTiddlerText("$:/language/ControlPanel/Plugins/PluginWillRequireReload") + " ") : "";
messages[title] = doesContainJavaScript; messages[title] = requiresReload;
if(incomingTiddler.version) { if(incomingTiddler.version) {
// Upgrade the incoming plugin if it is in the upgrade library // Upgrade the incoming plugin if it is in the upgrade library
var libraryTiddler = getLibraryTiddler(title); var libraryTiddler = getLibraryTiddler(title);
if(libraryTiddler && libraryTiddler["plugin-type"] && libraryTiddler.version) { if(libraryTiddler && libraryTiddler["plugin-type"] && libraryTiddler.version) {
tiddlers[title] = libraryTiddler; tiddlers[title] = libraryTiddler;
messages[title] = doesContainJavaScript + $tw.language.getString("Import/Upgrader/Plugins/Upgraded",{variables: {incoming: incomingTiddler.version, upgraded: libraryTiddler.version}}); messages[title] = requiresReload + $tw.language.getString("Import/Upgrader/Plugins/Upgraded",{variables: {incoming: incomingTiddler.version, upgraded: libraryTiddler.version}});
return; return;
} }
// Suppress the incoming plugin if it is older than the currently installed one // Suppress the incoming plugin if it is older than the currently installed one
@ -57,7 +57,7 @@ exports.upgrade = function(wiki,titles,tiddlers) {
// Reject the incoming plugin by blanking all its fields // Reject the incoming plugin by blanking all its fields
if($tw.utils.checkVersions(existingTiddler.fields.version,incomingTiddler.version)) { if($tw.utils.checkVersions(existingTiddler.fields.version,incomingTiddler.version)) {
tiddlers[title] = Object.create(null); tiddlers[title] = Object.create(null);
messages[title] = doesContainJavaScript + $tw.language.getString("Import/Upgrader/Plugins/Suppressed/Version",{variables: {incoming: incomingTiddler.version, existing: existingTiddler.fields.version}}); messages[title] = requiresReload + $tw.language.getString("Import/Upgrader/Plugins/Suppressed/Version",{variables: {incoming: incomingTiddler.version, existing: existingTiddler.fields.version}});
return; return;
} }
} }

View File

@ -1460,13 +1460,13 @@ exports.invokeUpgraders = function(titles,tiddlers) {
return messages; return messages;
}; };
// Determine whether a plugin by title contains JS modules. // Determine whether a plugin by title is dynamically loadable
exports.doesPluginContainModules = function(title) { exports.doesPluginRequireReload = function(title) {
return this.doesPluginInfoContainModules(this.getPluginInfo(title) || this.getTiddlerDataCached(title)); return this.doesPluginInfoRequireReload(this.getPluginInfo(title) || this.getTiddlerDataCached(title));
}; };
// Determine whether a plugin info structure contains JS modules. // Determine whether a plugin info structure is dynamically loadable
exports.doesPluginInfoContainModules = function(pluginInfo) { exports.doesPluginInfoRequireReload = function(pluginInfo) {
if(pluginInfo) { if(pluginInfo) {
var foundModule = false; var foundModule = false;
$tw.utils.each(pluginInfo.tiddlers,function(tiddler) { $tw.utils.each(pluginInfo.tiddlers,function(tiddler) {

View File

@ -19,7 +19,7 @@ subtitle: {{$:/core/images/download-button}} {{$:/language/ControlPanel/Plugins/
</$button> </$button>
<div> <div>
</div> </div>
<$reveal stateTitle=<<assetInfo>> stateField="contains-javascript" type="match" text="yes">{{$:/language/ControlPanel/Plugins/PluginWillRequireReload}}</$reveal> <$reveal stateTitle=<<assetInfo>> stateField="requires-reload" type="match" text="yes">{{$:/language/ControlPanel/Plugins/PluginWillRequireReload}}</$reveal>
</div> </div>
\end \end