Initial commit
This commit is contained in:
95
themes/keepit/node_modules/draftlog/lib/LogDraft.js
generated
vendored
Normal file
95
themes/keepit/node_modules/draftlog/lib/LogDraft.js
generated
vendored
Normal file
@@ -0,0 +1,95 @@
|
||||
'use strict'
|
||||
const util = require('util')
|
||||
const defaults = require('./defaults')
|
||||
const CSIHelper = require('./CSIHelper')
|
||||
|
||||
// Expose
|
||||
module.exports = LogDraft
|
||||
|
||||
/*
|
||||
* This is a single Line object, that saves it's relative position
|
||||
* in terminal. It is responsible by updating itself.
|
||||
*/
|
||||
function LogDraft(console, methodName) {
|
||||
this._stream = console._stdout
|
||||
this._styleFn = console[methodName]
|
||||
|
||||
// Valid flag. If set to false, should NOT write anymore
|
||||
this.valid = true
|
||||
|
||||
// Save line where content will be saved
|
||||
this.saveLine()
|
||||
}
|
||||
|
||||
/*
|
||||
* After creating a draft, you can call as many times as you want to update it
|
||||
*/
|
||||
LogDraft.prototype.update = function update(/* log arguments */) {
|
||||
// Get line difference
|
||||
var linesUp = this.linesUp()
|
||||
|
||||
// Check if is offscreen
|
||||
if (this.isOffScreen()) {
|
||||
if (defaults.canReWrite) {
|
||||
// It can be rewritten, move line to current cursor line, and keep updating
|
||||
this.saveLine(-1)
|
||||
} else {
|
||||
// Invalidate and prevent writting
|
||||
this.valid = false
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// Start editing stream
|
||||
this._stream.stopLineCount()
|
||||
|
||||
// Save state (if content is not null)
|
||||
this._stream.write(CSIHelper.save())
|
||||
|
||||
// Move up cursor up
|
||||
this._stream.write(CSIHelper.up(linesUp))
|
||||
|
||||
// Clear line
|
||||
this._stream.write(CSIHelper.clearLine())
|
||||
|
||||
// Call write function
|
||||
this.write.apply(this, arguments)
|
||||
|
||||
// Restore state
|
||||
this._stream.write(CSIHelper.restore())
|
||||
|
||||
// Resume counting lines
|
||||
this._stream.resumeLineCount()
|
||||
}
|
||||
|
||||
/*
|
||||
* Returns true if line is out of screen
|
||||
*/
|
||||
LogDraft.prototype.isOffScreen = function isOffScren() {
|
||||
var rows = this._stream.rows() || defaults.maximumLinesUp
|
||||
return this._stream.rows() <= this.linesUp()
|
||||
}
|
||||
|
||||
/*
|
||||
* Return how many lines past our current log
|
||||
*/
|
||||
LogDraft.prototype.linesUp = function linesUp() {
|
||||
return this._stream.line() - this._line
|
||||
}
|
||||
|
||||
/*
|
||||
* Writes to the stream by calling the writeFn.
|
||||
* Will not print if it's invalid
|
||||
* Defaults to `_stream.write` (set on constructor)
|
||||
*/
|
||||
LogDraft.prototype.write = function write() {
|
||||
this.valid && this._styleFn.apply(this._styleFn, arguments)
|
||||
}
|
||||
|
||||
/*
|
||||
* Saves current line number as the insertion point
|
||||
*/
|
||||
LogDraft.prototype.saveLine = function saveLine(relative) {
|
||||
relative = relative || 0
|
||||
this._line = this._stream.line() + relative
|
||||
}
|
||||
Reference in New Issue
Block a user