mirror of
				https://github.com/Jermolene/TiddlyWiki5
				synced 2025-10-31 15:42:59 +00:00 
			
		
		
		
	Added support for TiddlyWiki old school .recipe files
This commit is contained in:
		
							
								
								
									
										69
									
								
								core/modules/recipe.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								core/modules/recipe.js
									
									
									
									
									
										Normal file
									
								
							| @@ -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; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | })(); | ||||||
		Reference in New Issue
	
	Block a user
	 Jeremy Ruston
					Jeremy Ruston