kopia lustrzana https://github.com/miklobit/TiddlyWiki5
Added support for TiddlyWiki old school .recipe files
rodzic
3da810b2b3
commit
d23fbe5ef1
|
@ -0,0 +1,69 @@
|
|||
/*\
|
||||
title: $:/core/modules/recipe.js
|
||||
type: application/javascript
|
||||
module-type: tiddlerdeserializer
|
||||
|
||||
Plugin to deserialize tiddlers from an old school TiddlyWiki recipe file.
|
||||
|
||||
The idea is to process the recipe file recursively, loading tiddlers into the main store using synchronous file operations. The tiddlers have their titles prefixed with the associated marker in curly brackets ("{shadow}", "{tiddler}" etc).
|
||||
|
||||
\*/
|
||||
(function(){
|
||||
|
||||
/*jslint node: true, browser: true */
|
||||
/*global $tw: false */
|
||||
"use strict";
|
||||
|
||||
exports["application/x-tiddlywiki-recipe"] = function(text,fields) {
|
||||
var path = require("path"),
|
||||
fs = require("fs"),
|
||||
tiddlers = [],
|
||||
parseRecipe = function(text) {
|
||||
var recipe = [];
|
||||
text.toString().split(/\r?\n/mg).forEach(function(line) {
|
||||
var p = line.indexOf(":");
|
||||
if(p !== -1) {
|
||||
recipe.push({
|
||||
name: line.substr(0,p).trim(),
|
||||
value: line.substr(p+1).trim()
|
||||
});
|
||||
}
|
||||
});
|
||||
return recipe;
|
||||
},
|
||||
loadTiddlersFromFile = function(sourcePath,prefix) {
|
||||
var ext = path.extname(sourcePath),
|
||||
extensionInfo = $tw.config.fileExtensions[ext],
|
||||
data = fs.readFileSync(sourcePath).toString(extensionInfo ? extensionInfo.encoding : "utf8"),
|
||||
fields = {title: sourcePath},
|
||||
tids = $tw.wiki.deserializeTiddlers(ext,data,fields),
|
||||
metafile = sourcePath + ".meta";
|
||||
if(ext !== ".json" && tids.length === 1 && path.existsSync(metafile)) {
|
||||
var metadata = fs.readFileSync(metafile).toString("utf8");
|
||||
if(metadata) {
|
||||
tids = [$tw.utils.parseFields(metadata,tids[0])];
|
||||
}
|
||||
}
|
||||
tids.forEach(function(tid) {
|
||||
tid.title = prefix + tid.title;
|
||||
});
|
||||
tiddlers.push.apply(tiddlers,tids);
|
||||
},
|
||||
processRecipe = function(sourcePath,text) {
|
||||
var recipe = parseRecipe(text);
|
||||
for(var t=0; t<recipe.length; t++) {
|
||||
if(recipe[t].name === "recipe") {
|
||||
var recipeFile = path.resolve(path.dirname(sourcePath),recipe[t].value);
|
||||
processRecipe(recipeFile,fs.readFileSync(recipeFile));
|
||||
} else {
|
||||
var tiddlerFile = path.resolve(path.dirname(sourcePath),recipe[t].value);
|
||||
loadTiddlersFromFile(tiddlerFile,"{" + recipe[t].name + "}");
|
||||
}
|
||||
}
|
||||
},
|
||||
sourcePath = fields.title; // Bit of a hack to take advantage of the default title being the path to the tiddler file
|
||||
processRecipe(sourcePath,text);
|
||||
return tiddlers;
|
||||
};
|
||||
|
||||
})();
|
Ładowanie…
Reference in New Issue