mirror of
https://github.com/Jermolene/TiddlyWiki5
synced 2024-11-27 20:10:03 +00:00
32f6d7f1b0
For backwards compatibility, we now explicitly request the cacheable version of this method. Fixes #1873
91 lines
2.9 KiB
JavaScript
91 lines
2.9 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,null,$tw.config.preferences.jsonSpaces),"utf8");
|
|
// Collect the skinny list data
|
|
var pluginTiddlers = JSON.parse(tiddler.text),
|
|
readmeContent = (pluginTiddlers.tiddlers[title + "/readme"] || {}).text,
|
|
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, icon: iconContent}));
|
|
});
|
|
// Save the catalogue tiddler
|
|
if(skinnyListTitle) {
|
|
self.commander.wiki.setTiddlerData(skinnyListTitle,skinnyList);
|
|
}
|
|
return null;
|
|
};
|
|
|
|
exports.Command = Command;
|
|
|
|
})();
|