mirror of
				https://github.com/Jermolene/TiddlyWiki5
				synced 2025-10-31 07:32:59 +00:00 
			
		
		
		
	 32f6d7f1b0
			
		
	
	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;
 | |
| 
 | |
| })();
 |