mirror of
https://github.com/Jermolene/TiddlyWiki5
synced 2025-02-04 05:09:10 +00:00
1c23059204
* First pass at dynamic loading/unloading * Show warning for changes to plugins containing JS modules * Use $:/config/RegisterPluginType/* for configuring whether a plugin type is automatically registered Where "registered" means "the constituent shadows are loaded". * Fix the info plugin The previous mechanism re-read all plugin info during startup * Don't prettify JSON in the plugin library * Indicate in plugin library whether a plugin requires reloading * Display the highlighted plugin name in the plugin chooser And if there's no name field fall back to the part of the title after the final slash.
97 lines
3.0 KiB
JavaScript
97 lines
3.0 KiB
JavaScript
/*\
|
|
title: $:/core/modules/commands/savelibrarytiddlers.js
|
|
type: application/javascript
|
|
module-type: command
|
|
|
|
Command to save the subtiddlers of a bundle tiddler as a series of JSON files
|
|
|
|
--savelibrarytiddlers <tiddler> <pathname> <skinnylisting>
|
|
|
|
The tiddler identifies the bundle tiddler that contains the subtiddlers.
|
|
|
|
The pathname specifies the pathname to the folder in which the JSON files should be saved. The filename is the URL encoded title of the subtiddler.
|
|
|
|
The skinnylisting specifies the title of the tiddler to which a JSON catalogue of the subtiddlers will be saved. The JSON file contains the same data as the bundle tiddler but with the `text` field removed.
|
|
|
|
\*/
|
|
(function(){
|
|
|
|
/*jslint node: true, browser: true */
|
|
/*global $tw: false */
|
|
"use strict";
|
|
|
|
exports.info = {
|
|
name: "savelibrarytiddlers",
|
|
synchronous: true
|
|
};
|
|
|
|
var Command = function(params,commander,callback) {
|
|
this.params = params;
|
|
this.commander = commander;
|
|
this.callback = callback;
|
|
};
|
|
|
|
Command.prototype.execute = function() {
|
|
if(this.params.length < 2) {
|
|
return "Missing filename";
|
|
}
|
|
var self = this,
|
|
fs = require("fs"),
|
|
path = require("path"),
|
|
containerTitle = this.params[0],
|
|
filter = this.params[1],
|
|
basepath = this.params[2],
|
|
skinnyListTitle = this.params[3];
|
|
// Get the container tiddler as data
|
|
var containerData = self.commander.wiki.getTiddlerDataCached(containerTitle,undefined);
|
|
if(!containerData) {
|
|
return "'" + containerTitle + "' is not a tiddler bundle";
|
|
}
|
|
// Filter the list of plugins
|
|
var pluginList = [];
|
|
$tw.utils.each(containerData.tiddlers,function(tiddler,title) {
|
|
pluginList.push(title);
|
|
});
|
|
var filteredPluginList;
|
|
if(filter) {
|
|
filteredPluginList = self.commander.wiki.filterTiddlers(filter,null,self.commander.wiki.makeTiddlerIterator(pluginList));
|
|
} else {
|
|
filteredPluginList = pluginList;
|
|
}
|
|
// Iterate through the plugins
|
|
var skinnyList = [];
|
|
$tw.utils.each(filteredPluginList,function(title) {
|
|
var tiddler = containerData.tiddlers[title];
|
|
// Save each JSON file and collect the skinny data
|
|
var pathname = path.resolve(self.commander.outputPath,basepath + encodeURIComponent(title) + ".json");
|
|
$tw.utils.createFileDirectories(pathname);
|
|
fs.writeFileSync(pathname,JSON.stringify(tiddler),"utf8");
|
|
// Collect the skinny list data
|
|
var pluginTiddlers = JSON.parse(tiddler.text),
|
|
readmeContent = (pluginTiddlers.tiddlers[title + "/readme"] || {}).text,
|
|
doesContainJavaScript = !!$tw.wiki.doesPluginInfoContainModules(pluginTiddlers),
|
|
iconTiddler = pluginTiddlers.tiddlers[title + "/icon"] || {},
|
|
iconType = iconTiddler.type,
|
|
iconText = iconTiddler.text,
|
|
iconContent;
|
|
if(iconType && iconText) {
|
|
iconContent = $tw.utils.makeDataUri(iconText,iconType);
|
|
}
|
|
skinnyList.push($tw.utils.extend({},tiddler,{
|
|
text: undefined,
|
|
readme: readmeContent,
|
|
"contains-javascript": doesContainJavaScript ? "yes" : "no",
|
|
icon: iconContent
|
|
}));
|
|
});
|
|
// Save the catalogue tiddler
|
|
if(skinnyListTitle) {
|
|
self.commander.wiki.setTiddlerData(skinnyListTitle,skinnyList);
|
|
}
|
|
return null;
|
|
};
|
|
|
|
exports.Command = Command;
|
|
|
|
})();
|