mirror of
https://github.com/Jermolene/TiddlyWiki5.git
synced 2026-02-24 00:50:58 -08:00
Re-introduces the “tw-auto-save-wiki” message. The previous approach of automatically triggering autosave whenever a tiddler changed meant that changing configuration changes in control panel was triggering an autosave. Using the explicit message gives us better control of the situations in which we’ll autosave. Now we solve the earlier problem of there being outstanding tiddler change events at the time that we process the “tw-auto-save-wiki” by deferring the autosave until the outstanding change event comes in.
80 lines
2.3 KiB
JavaScript
80 lines
2.3 KiB
JavaScript
/*\
|
|
title: $:/core/modules/utils/pluginmaker.js
|
|
type: application/javascript
|
|
module-type: utils
|
|
|
|
A quick and dirty way to pack up plugins within the browser.
|
|
|
|
\*/
|
|
(function(){
|
|
|
|
/*jslint node: true, browser: true */
|
|
/*global $tw: false */
|
|
"use strict";
|
|
|
|
/*
|
|
Repack a plugin, and then delete any non-shadow payload tiddlers
|
|
*/
|
|
exports.repackPlugin = function(title,additionalTiddlers,excludeTiddlers) {
|
|
additionalTiddlers = additionalTiddlers || [];
|
|
excludeTiddlers = excludeTiddlers || [];
|
|
// Get the plugin tiddler
|
|
var pluginTiddler = $tw.wiki.getTiddler(title);
|
|
if(!pluginTiddler) {
|
|
throw "No such tiddler as " + title;
|
|
}
|
|
// Extract the JSON
|
|
try {
|
|
var jsonPluginTiddler = JSON.parse(pluginTiddler.fields.text);
|
|
} catch(e) {
|
|
throw "Cannot parse plugin tiddler " + title + "\nError: " + e;
|
|
}
|
|
// Get the list of tiddlers
|
|
var tiddlers = Object.keys(jsonPluginTiddler.tiddlers);
|
|
// Add the additional tiddlers
|
|
$tw.utils.pushTop(tiddlers,additionalTiddlers)
|
|
// Remove any excluded tiddlers
|
|
for(var t=tiddlers.length-1; t>=0; t--) {
|
|
if(excludeTiddlers.indexOf(tiddlers[t]) !== -1) {
|
|
tiddlers.splice(t,1);
|
|
}
|
|
}
|
|
// Pack up the tiddlers into a block of JSON
|
|
var plugins = {};
|
|
$tw.utils.each(tiddlers,function(title) {
|
|
var tiddler = $tw.wiki.getTiddler(title),
|
|
fields = {};
|
|
$tw.utils.each(tiddler.fields,function (value,name) {
|
|
fields[name] = tiddler.getFieldString(name);
|
|
});
|
|
plugins[title] = fields;
|
|
});
|
|
// Retrieve and bump the version number
|
|
var pluginVersion = $tw.utils.parseVersion(pluginTiddler.getFieldString("version") || "0.0.0") || {
|
|
major: "0",
|
|
minor: "0",
|
|
patch: "0"
|
|
};
|
|
pluginVersion.patch++;
|
|
var version = pluginVersion.major + "." + pluginVersion.minor + "." + pluginVersion.patch;
|
|
if(pluginVersion.prerelease) {
|
|
version += "-" + pluginVersion.prerelease;
|
|
}
|
|
if(pluginVersion.build) {
|
|
version += "+" + pluginVersion.build;
|
|
}
|
|
// Save the tiddler
|
|
$tw.wiki.addTiddler(new $tw.Tiddler(pluginTiddler,{text: JSON.stringify({tiddlers: plugins},null,4), version: version}));
|
|
// Delete any non-shadow constituent tiddlers
|
|
$tw.utils.each(tiddlers,function(title) {
|
|
if($tw.wiki.tiddlerExists(title)) {
|
|
$tw.wiki.deleteTiddler(title);
|
|
}
|
|
});
|
|
// Trigger an autosave
|
|
$tw.rootWidget.dispatchEvent({type: "tw-auto-save-wiki"});
|
|
// Return a heartwarming confirmation
|
|
return "Plugin " + title + " successfully saved";
|
|
}
|
|
|
|
})();
|