cleaner content parsing.

This commit is contained in:
Christopher Jeffrey 2013-06-20 12:07:35 -05:00
parent 38c9f1f177
commit 5265275d0d
1 changed files with 23 additions and 24 deletions

View File

@ -826,22 +826,6 @@ Element.prototype.emit = function(type) {
}; };
*/ */
Element.prototype.parseContent = function() {
if (this.detached) return false;
var w = this.width - (this.border ? 2 : 0);
if (this._clines == null
|| this._clines.width !== w
|| this._clines.content !== this.content) {
this._clines = wrapContent(this.content, w, this.parseTags, this.align);
this._pcontent = this._clines.join('\n');
this.emit('parsed content');
return true;
}
return false;
};
Element.prototype.hide = function() { Element.prototype.hide = function() {
if (this.hidden) return; if (this.hidden) return;
this.hidden = true; this.hidden = true;
@ -880,18 +864,36 @@ Element.prototype.focus = function() {
}; };
Element.prototype.setContent = function(content, noClear) { Element.prototype.setContent = function(content, noClear) {
//var ret = this.render(true);
var ret = this._lastPos; var ret = this._lastPos;
// TODO: Maybe simply set _pcontent with _parseTags result. this.content = content || '';
// text = text.replace(/\x1b(?!\[[\d;]*m)/g, '');
this.content = this._parseTags(content || '');
this.parseContent(); this.parseContent();
if (ret && !noClear) { if (ret && !noClear) {
//if (ret && !this.hidden) {
this.screen.clearRegion(ret.xi, ret.xl, ret.yi, ret.yl); this.screen.clearRegion(ret.xi, ret.xl, ret.yi, ret.yl);
} }
}; };
Element.prototype.parseContent = function() {
if (this.detached) return false;
var width = this.width - (this.border ? 2 : 0);
if (this._clines == null
|| this._clines.width !== width
|| this._clines.content !== this.content) {
var content = this.content;
// Could move these 2 lines back to setContent (?)
content = content.replace(/\x1b(?!\[[\d;]*m)/g, '');
content = this._parseTags(content || '');
this._clines = wrapContent(content, width, this.parseTags, this.align);
this._clines.width = width;
this._clines.content = this.content;
this._pcontent = this._clines.join('\n');
this.emit('parsed content');
return true;
}
return false;
};
// Convert `{red-fg}foo{/red-fg}` to `\x1b[31mfoo\x1b[39m`. // Convert `{red-fg}foo{/red-fg}` to `\x1b[31mfoo\x1b[39m`.
Element.prototype._parseTags = function(text) { Element.prototype._parseTags = function(text) {
if (!this.parseTags) return text; if (!this.parseTags) return text;
@ -2477,9 +2479,6 @@ function wrapContent(content, width, tags, state) {
out.push(sp(line, width, align)); out.push(sp(line, width, align));
}); });
out.width = width;
out.content = content;
return out; return out;
} }