enigma-bbs/core/text_view.js

102 lines
2.4 KiB
JavaScript
Raw Normal View History

2014-10-22 05:12:44 +00:00
/* jslint node: true */
'use strict';
var View = require('./view.js').View;
var miscUtil = require('./misc_util.js');
var strUtil = require('./string_util.js');
var ansi = require('./ansi_term.js');
var util = require('util');
var assert = require('assert');
exports.TextView = TextView;
function TextView(client, options) {
View.call(this, client, options);
if(this.options.maxLength) {
this.maxLength = this.options.maxLength;
}
this.multiLine = this.options.multiLine || false;
this.fillChar = miscUtil.valueWithDefault(this.options.fillChar, ' ').substr(0, 1);
2014-10-22 05:12:44 +00:00
this.justify = this.options.justify || 'right';
2014-10-22 05:12:44 +00:00
assert(!this.multiLine); // :TODO: not yet supported
if(!this.multiLine) {
this.dimens.height = 1;
}
this.drawText = function(s) {
var ansiColor = this.getANSIColor(this.hasFocus ? this.getFocusColor() : this.getColor());
if(this.isPasswordTextStyle) {
this.client.term.write(strUtil.pad(
new Array(s.length + 1).join(this.textMaskChar),
this.dimens.width + 1,
this.fillChar,
this.justify,
ansiColor,
this.getANSIColor(this.getColor())));
} else {
var text = strUtil.stylizeString(s, this.hasFocus ? this.focusTextStyle : this.textStyle);
this.client.term.write(strUtil.pad(
text,
this.dimens.width + 1,
this.fillChar,
this.justify,
ansiColor,
this.getANSIColor(this.getColor())));
}
};
2014-10-22 05:12:44 +00:00
this.setText(this.options.text || '');
if(this.isPasswordTextStyle) {
this.textMaskChar = miscUtil.valueWithDefault(this.textMaskChar, '*').substr(0, 1);
2014-10-22 05:12:44 +00:00
}
}
util.inherits(TextView, View);
TextView.prototype.redraw = function() {
TextView.super_.prototype.redraw.call(this);
this.drawText(this.text);
2014-10-22 05:12:44 +00:00
};
TextView.prototype.setFocus = function(focused) {
TextView.super_.prototype.setFocus.call(this, focused);
this.redraw();
this.client.term.write(ansi.goto(this.position.x, this.position.y + this.text.length));
this.client.term.write(this.getANSIColor(this.getFocusColor()));
};
TextView.prototype.getViewData = function() {
return this.text;
};
2014-10-22 05:12:44 +00:00
TextView.prototype.setText = function(text) {
this.text = text;
if(this.maxLength > 0) {
this.text = this.text.substr(0, this.maxLength);
}
this.text = strUtil.stylizeString(this.text, this.hasFocus ? this.focusTextStyle : this.textStyle);
2014-10-22 05:12:44 +00:00
if(!this.multiLine && !this.dimens.width) {
2014-10-22 05:12:44 +00:00
this.dimens.width = this.text.length;
}
this.redraw();
2014-10-22 05:12:44 +00:00
};
TextView.prototype.clearText = function() {
this.setText('');
};