82 lines
1.8 KiB
JavaScript
82 lines
1.8 KiB
JavaScript
|
/**
|
||
|
* log.js - log element for blessed
|
||
|
* Copyright (c) 2013-2015, Christopher Jeffrey and contributors (MIT License).
|
||
|
* https://github.com/chjj/blessed
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* Modules
|
||
|
*/
|
||
|
|
||
|
var util = require('util');
|
||
|
|
||
|
var nextTick = global.setImmediate || process.nextTick.bind(process);
|
||
|
|
||
|
var helpers = require('../helpers');
|
||
|
|
||
|
var Node = require('./node');
|
||
|
var ScrollableText = require('./scrollabletext');
|
||
|
|
||
|
/**
|
||
|
* Log
|
||
|
*/
|
||
|
|
||
|
function Log(options) {
|
||
|
var self = this;
|
||
|
|
||
|
if (!(this instanceof Node)) {
|
||
|
return new Log(options);
|
||
|
}
|
||
|
|
||
|
options = options || {};
|
||
|
|
||
|
ScrollableText.call(this, options);
|
||
|
|
||
|
this.scrollback = options.scrollback != null
|
||
|
? options.scrollback
|
||
|
: Infinity;
|
||
|
this.scrollOnInput = options.scrollOnInput;
|
||
|
|
||
|
this.on('set content', function() {
|
||
|
if (!self._userScrolled || self.scrollOnInput) {
|
||
|
nextTick(function() {
|
||
|
self.setScrollPerc(100);
|
||
|
self._userScrolled = false;
|
||
|
self.screen.render();
|
||
|
});
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
|
||
|
Log.prototype.__proto__ = ScrollableText.prototype;
|
||
|
|
||
|
Log.prototype.type = 'log';
|
||
|
|
||
|
Log.prototype.log =
|
||
|
Log.prototype.add = function() {
|
||
|
var args = Array.prototype.slice.call(arguments);
|
||
|
if (typeof args[0] === 'object') {
|
||
|
args[0] = util.inspect(args[0], true, 20, true);
|
||
|
}
|
||
|
var text = util.format.apply(util, args);
|
||
|
this.emit('log', text);
|
||
|
var ret = this.pushLine(text);
|
||
|
if (this._clines.fake.length > this.scrollback) {
|
||
|
this.shiftLine(0, (this.scrollback / 3) | 0);
|
||
|
}
|
||
|
return ret;
|
||
|
};
|
||
|
|
||
|
Log.prototype._scroll = Log.prototype.scroll;
|
||
|
Log.prototype.scroll = function(offset, always) {
|
||
|
if (offset === 0) return this._scroll(offset, always);
|
||
|
this._userScrolled = true;
|
||
|
var ret = this._scroll(offset, always);
|
||
|
if (this.getScrollPerc() === 100) {
|
||
|
this._userScrolled = false;
|
||
|
}
|
||
|
return ret;
|
||
|
};
|
||
|
|
||
|
module.exports = Log;
|