mirror of
https://github.com/Jermolene/TiddlyWiki5
synced 2025-08-08 23:03:50 +00:00
Add support for retrieving formatted text content from the fake dom
The idea is to convert HTML block elements into newlines, so that the output is readable on a terminal.
This commit is contained in:
parent
8ce7c3920c
commit
3636744d4f
@ -35,5 +35,6 @@ exports.htmlEntities = {quot:34, amp:38, apos:39, lt:60, gt:62, nbsp:160, iexcl:
|
|||||||
|
|
||||||
exports.htmlVoidElements = "area,base,br,col,command,embed,hr,img,input,keygen,link,meta,param,source,track,wbr".split(",");
|
exports.htmlVoidElements = "area,base,br,col,command,embed,hr,img,input,keygen,link,meta,param,source,track,wbr".split(",");
|
||||||
|
|
||||||
|
exports.htmlBlockElements = "address,article,aside,audio,blockquote,canvas,dd,div,dl,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,hr,li,noscript,ol,output,p,pre,section,table,tfoot,ul,video".split(",");
|
||||||
|
|
||||||
})();
|
})();
|
||||||
|
@ -26,6 +26,12 @@ var TW_TextNode = function(text) {
|
|||||||
this.textContent = text;
|
this.textContent = text;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Object.defineProperty(TW_TextNode.prototype, "formattedTextContent", {
|
||||||
|
get: function() {
|
||||||
|
return this.textContent.replace(/(\r?\n)/g,"");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
var TW_Element = function(tag,namespace) {
|
var TW_Element = function(tag,namespace) {
|
||||||
bumpSequenceNumber(this);
|
bumpSequenceNumber(this);
|
||||||
this.isTiddlyWikiFakeDom = true;
|
this.isTiddlyWikiFakeDom = true;
|
||||||
@ -176,6 +182,30 @@ Object.defineProperty(TW_Element.prototype, "textContent", {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Object.defineProperty(TW_Element.prototype, "formattedTextContent", {
|
||||||
|
get: function() {
|
||||||
|
if(this.isRaw) {
|
||||||
|
throw "Cannot get formattedTextContent on a raw TW_Element";
|
||||||
|
} else {
|
||||||
|
var b = [],
|
||||||
|
isBlock = $tw.config.htmlBlockElements.indexOf(this.tag) !== -1;
|
||||||
|
if(isBlock) {
|
||||||
|
b.push("\n");
|
||||||
|
}
|
||||||
|
if(this.tag === "li") {
|
||||||
|
b.push("* ")
|
||||||
|
}
|
||||||
|
$tw.utils.each(this.children,function(node) {
|
||||||
|
b.push(node.formattedTextContent);
|
||||||
|
});
|
||||||
|
if(isBlock) {
|
||||||
|
b.push("\n");
|
||||||
|
}
|
||||||
|
return b.join("");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
var document = {
|
var document = {
|
||||||
setSequenceNumber: function(value) {
|
setSequenceNumber: function(value) {
|
||||||
sequenceNumber = value;
|
sequenceNumber = value;
|
||||||
|
@ -892,11 +892,11 @@ parentWidget: optional parent widget for the root node
|
|||||||
*/
|
*/
|
||||||
exports.renderTiddler = function(outputType,title,options) {
|
exports.renderTiddler = function(outputType,title,options) {
|
||||||
options = options || {};
|
options = options || {};
|
||||||
var parser = this.parseTiddler(title),
|
var parser = this.parseTiddler(title,options),
|
||||||
widgetNode = this.makeWidget(parser,options);
|
widgetNode = this.makeWidget(parser,options);
|
||||||
var container = $tw.fakeDocument.createElement("div");
|
var container = $tw.fakeDocument.createElement("div");
|
||||||
widgetNode.render(container,null);
|
widgetNode.render(container,null);
|
||||||
return outputType === "text/html" ? container.innerHTML : container.textContent;
|
return outputType === "text/html" ? container.innerHTML : (outputType === "text/plain-formatted" ? container.formattedTextContent : container.textContent);
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user