1
0
mirror of https://github.com/Jermolene/TiddlyWiki5 synced 2024-09-26 22:28:18 +00:00

Text-slicer: better support for specifying the output title

Can be specified directly, or taken from a field of the tiddler being
sliced, falling back to a default.
This commit is contained in:
Jermolene 2016-02-27 12:25:48 +00:00
parent cd0a0aa1fb
commit 7498989ebb
3 changed files with 24 additions and 22 deletions

View File

@ -16,7 +16,7 @@ var widget = require("$:/core/modules/widgets/widget.js");
exports.info = { exports.info = {
name: "slice", name: "slice",
synchronous: true synchronous: false
}; };
var Command = function(params,commander,callback) { var Command = function(params,commander,callback) {
@ -31,11 +31,15 @@ Command.prototype.execute = function() {
} }
var self = this, var self = this,
wiki = this.commander.wiki, wiki = this.commander.wiki,
tiddlerTitle = this.params[0], sourceTitle = this.params[0],
slicer = new $tw.Slicer(wiki,tiddlerTitle); destTitle = this.params[1],
slicer.sliceTiddler(tiddlerTitle) slicer = new $tw.Slicer(wiki,sourceTitle,{
destTitle: destTitle
});
slicer.sliceTiddler()
slicer.outputTiddlers(); slicer.outputTiddlers();
slicer.destroy(); slicer.destroy();
$tw.utils.nextTick(this.callback);
return null; return null;
}; };

View File

@ -16,9 +16,12 @@ var DOMParser = require("$:/plugins/tiddlywiki/xmldom/dom-parser").DOMParser;
var SLICER_OUTPUT_TITLE = "$:/TextSlicer"; var SLICER_OUTPUT_TITLE = "$:/TextSlicer";
function Slicer(wiki,sourceTitle) { function Slicer(wiki,sourceTitle,options) {
options = options || {};
this.wiki = wiki; this.wiki = wiki;
this.sourceTitle = sourceTitle; this.sourceTitle = sourceTitle;
this.sourceTiddler = wiki.getTiddler(this.sourceTitle);
this.destTitle = options.destTitle || this.sourceTiddler.fields["doc-split-to"] || ("Sliced up " + this.sourceTitle);
this.iframe = null; // Reference to iframe used for HTML parsing this.iframe = null; // Reference to iframe used for HTML parsing
this.stopWordList = "the and a of on i".split(" "); this.stopWordList = "the and a of on i".split(" ");
this.tiddlers = {}; this.tiddlers = {};
@ -126,11 +129,10 @@ Slicer.prototype.getSourceWikiDocument = function(tiddler) {
}; };
Slicer.prototype.getSourceDocument = function() { Slicer.prototype.getSourceDocument = function() {
var tiddler = $tw.wiki.getTiddler(this.sourceTitle); if(this.sourceTiddler.fields.type === "text/html") {
if(tiddler.fields.type === "text/html") { return this.getSourceHtmlDocument(this.sourceTiddler);
return this.getSourceHtmlDocument(tiddler);
} else { } else {
return this.getSourceWikiDocument(tiddler); return this.getSourceWikiDocument(this.sourceTiddler);
} }
}; };
@ -198,18 +200,12 @@ Slicer.prototype.processNode = function(domNode) {
}; };
// Slice a tiddler into individual tiddlers // Slice a tiddler into individual tiddlers
Slicer.prototype.sliceTiddler = function(title) { Slicer.prototype.sliceTiddler = function() {
var sourceTiddler = $tw.wiki.getTiddler(this.sourceTitle), var sliceTitle,sliceTiddler = {};
sliceTitle,sliceTiddler = {}; if(this.sourceTiddler) {
if(sourceTiddler) { sliceTiddler = $tw.utils.extend({},this.sourceTiddler.fields);
sliceTiddler = $tw.utils.extend({},sourceTiddler.fields);
}
if(sliceTiddler["doc-santovia-id"]) {
sliceTiddler.title = sliceTiddler["doc-santovia-id"];
delete sliceTiddler["doc-santovia-id"];
} else {
sliceTiddler.title = "Sliced up " + title;
} }
sliceTiddler.title = this.destTitle;
sliceTiddler.text = "Document sliced at " + (new Date()); sliceTiddler.text = "Document sliced at " + (new Date());
sliceTiddler.type = "text/vnd.tiddlywiki"; sliceTiddler.type = "text/vnd.tiddlywiki";
sliceTiddler.tags = []; sliceTiddler.tags = [];
@ -217,7 +213,7 @@ Slicer.prototype.sliceTiddler = function(title) {
sliceTiddler["toc-type"] = "document"; sliceTiddler["toc-type"] = "document";
var domNode = this.getSourceDocument(); var domNode = this.getSourceDocument();
this.parentStack.push({type: "h0", title: this.addTiddler(sliceTiddler)}); this.parentStack.push({type: "h0", title: this.addTiddler(sliceTiddler)});
this.currentTiddler = title; this.currentTiddler = sliceTiddler.title;
this.containerStack.push(sliceTiddler.title); this.containerStack.push(sliceTiddler.title);
this.processNodeList(domNode.childNodes); this.processNodeList(domNode.childNodes);
this.containerStack.pop(); this.containerStack.pop();

View File

@ -21,7 +21,9 @@ exports.synchronous = true;
// Install the root widget event handlers // Install the root widget event handlers
exports.startup = function() { exports.startup = function() {
$tw.rootWidget.addEventListener("tm-slice-tiddler",function(event) { $tw.rootWidget.addEventListener("tm-slice-tiddler",function(event) {
var slicer = new $tw.Slicer($tw.wiki,event.param); var slicer = new $tw.Slicer($tw.wiki,event.param,{
destTitle: event.paramObject.destTitle
});
slicer.sliceTiddler(event.param) slicer.sliceTiddler(event.param)
slicer.outputTiddlers(); slicer.outputTiddlers();
slicer.destroy(); slicer.destroy();