itemBg, style object, el.sattr.

This commit is contained in:
Christopher Jeffrey 2013-07-16 12:33:55 -05:00
parent db365a2228
commit 7e238a470e

View File

@ -1438,6 +1438,33 @@ Element.prototype.__proto__ = Node.prototype;
Element.prototype.type = 'element';
Element.prototype.sattr = function(obj, fg, bg) {
var bold = obj.bold
, underline = obj.underline
, blink = obj.blink
, inverse = obj.inverse
, invisible = obj.invisible;
// This used to be a loop, but I decided
// to unroll it for performance's sake.
if (typeof bold === 'function') bold = bold(this);
if (typeof underline === 'function') underline = underline(this);
if (typeof blink === 'function') blink = blink(this);
if (typeof inverse === 'function') inverse = inverse(this);
if (typeof invisible === 'function') invisible = invisible(this);
if (typeof fg === 'function') fg = fg(this);
if (typeof bg === 'function') bg = bg(this);
return ((((invisible ? 16 : 0) << 18)
| ((inverse ? 8 : 0) << 18)
| ((blink ? 4 : 0) << 18)
| ((underline ? 2 : 0) << 18))
| ((bold ? 1 : 0) << 18)
| (colors.convert(fg) << 9))
| colors.convert(bg);
};
Element.prototype.onScreenEvent = function(type, listener) {
var self = this;
if (this.parent) {
@ -1988,10 +2015,10 @@ Box.prototype.render = function(stop) {
if (stop) return ret;
battr = this.border
? sattr(this.border, this.border.fg, this.border.bg)
? this.sattr(this.border, this.border.fg, this.border.bg)
: 0;
dattr = sattr(this, this.fg, this.bg);
dattr = this.sattr(this, this.fg, this.bg);
attr = dattr;
// Check previous line for escape codes.
@ -2084,7 +2111,7 @@ outer:
cell = lines[yi] && lines[yi][xi];
if (cell) {
ch = this.scrollbar.ch || ' ';
attr = sattr(this,
attr = this.sattr(this,
this.scrollbar.fg || this.fg,
this.scrollbar.bg || this.bg);
if (attr !== cell[0] || ch !== cell[1]) {
@ -2461,6 +2488,38 @@ function List(options) {
this.selectedInverse = options.selectedInverse;
this.selectedInvisible = options.selectedInvisible;
this.itemBg = cens(options.itemBg);
this.itemFg = cens(options.itemFg);
this.itemBold = options.itemBold;
this.itemUnderline = options.itemUnderline;
this.itemBlink = options.itemBlink;
this.itemInverse = options.itemInverse;
this.itemInvisible = options.itemInvisible;
/*
if (!this.style.selected) {
this.style.selected = {};
this.style.selected.bg = cens(options.selectedBg);
this.style.selected.fg = cens(options.selectedFg);
this.style.selected.bold = options.selectedBold;
this.style.selected.underline = options.selectedUnderline;
this.style.selected.blink = options.selectedBlink;
this.style.selected.inverse = options.selectedInverse;
this.style.selected.invisible = options.selectedInvisible;
}
if (!this.style.item) {
this.style.item = {};
this.style.item.bg = cens(options.itemBg);
this.style.item.fg = cens(options.itemFg);
this.style.item.bold = options.itemBold;
this.style.item.underline = options.itemUnderline;
this.style.item.blink = options.itemBlink;
this.style.item.inverse = options.itemInverse;
this.style.item.invisible = options.itemInvisible;
}
*/
this.mouse = options.mouse || false;
if (options.items) {
@ -2609,6 +2668,22 @@ List.prototype.add = function(item) {
};
});
/*
['bg', 'fg', 'bold', 'underline',
'blink', 'inverse', 'invisible'].forEach(function(name) {
// TODO: Move all specific options to their own object namespaces.
var iname = 'item' + name[0].toUpperCase() + name.substring(1)
, sname = 'selected' + name[0].toUpperCase() + name.substring(1);
options[name] = function() {
var attr = self.items[self.selected] === item
? self[sname]
: self[iname];
if (typeof attr === 'function') attr = attr(item);
return attr;
};
});
*/
var item = new Box(options);
this.append(item);
@ -3282,7 +3357,7 @@ ProgressBar.prototype.render = function(stop) {
yi = yi + ((yl - yi) - (((yl - yi) * (this.filled / 100)) | 0));
}
dattr = sattr(this, this.barFg, this.barBg);
dattr = this.sattr(this, this.barFg, this.barBg);
this.screen.fillRegion(dattr, this.ch, xi, xl, yi, yl);
@ -4226,33 +4301,6 @@ function hsort(obj) {
});
}
function sattr(obj, fg, bg) {
var bold = obj.bold
, underline = obj.underline
, blink = obj.blink
, inverse = obj.inverse
, invisible = obj.invisible;
// This used to be a loop, but I decided
// to unroll it for performance's sake.
if (typeof bold === 'function') bold = bold(obj);
if (typeof underline === 'function') underline = underline(obj);
if (typeof blink === 'function') blink = blink(obj);
if (typeof inverse === 'function') inverse = inverse(obj);
if (typeof invisible === 'function') invisible = invisible(obj);
if (typeof fg === 'function') fg = fg(obj);
if (typeof bg === 'function') bg = bg(obj);
return ((((invisible ? 16 : 0) << 18)
| ((inverse ? 8 : 0) << 18)
| ((blink ? 4 : 0) << 18)
| ((underline ? 2 : 0) << 18))
| ((bold ? 1 : 0) << 18)
| (colors.convert(fg) << 9))
| colors.convert(bg);
}
function cens(color) {
return color != null
? color