/** * 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 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; }; /** * Expose */ module.exports = Log;