fix tput.js for browserifying. fixes #158 again.
This commit is contained in:
parent
18f3dfcc99
commit
78b858742b
|
@ -0,0 +1,7 @@
|
||||||
|
all:
|
||||||
|
@cd .. && browserify -e index.js -o browser/blessed.js
|
||||||
|
|
||||||
|
clean:
|
||||||
|
@rm -f blessed.js
|
||||||
|
|
||||||
|
.PHONY: clean all
|
|
@ -8,30 +8,94 @@ var Transform = require('stream').Transform
|
||||||
, path = require('path')
|
, path = require('path')
|
||||||
, fs = require('fs');
|
, fs = require('fs');
|
||||||
|
|
||||||
var widgets = fs.readdirSync(__dirname + '/../lib/widgets');
|
/**
|
||||||
|
* Transformer
|
||||||
|
*/
|
||||||
|
|
||||||
var requires = widgets.reduce(function(out, name) {
|
function transformer(code) {
|
||||||
name = path.basename(name, '.js');
|
|
||||||
out += '\nrequire(\'./widgets/' + name + '\');';
|
|
||||||
return out;
|
|
||||||
}, '');
|
|
||||||
|
|
||||||
function transform(target) {
|
|
||||||
var stream = new Transform;
|
var stream = new Transform;
|
||||||
stream._transform = function(chunk, encoding, callback) {
|
stream._transform = function(chunk, encoding, callback) {
|
||||||
return callback(null, chunk);
|
return callback(null, chunk);
|
||||||
};
|
};
|
||||||
stream._flush = function(callback) {
|
stream._flush = function(callback) {
|
||||||
if (target) {
|
if (code) {
|
||||||
stream.push(requires);
|
stream.push(code);
|
||||||
}
|
}
|
||||||
return callback();
|
return callback();
|
||||||
};
|
};
|
||||||
return stream;
|
return stream;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Explicitly require all widgets in widget.js
|
||||||
|
*/
|
||||||
|
|
||||||
|
var widgets = fs.readdirSync(__dirname + '/../lib/widgets');
|
||||||
|
|
||||||
|
var requireWidgets = widgets.reduce(function(out, name) {
|
||||||
|
name = path.basename(name, '.js');
|
||||||
|
out += '\nrequire(\'./widgets/' + name + '\');';
|
||||||
|
return out;
|
||||||
|
}, '');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Do not make filesystem calls in tput.js for
|
||||||
|
* terminfo or termcap, just use xterm terminfo/cap.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var infoPath = path.resolve(__dirname, '..', 'usr', 'xterm')
|
||||||
|
, capPath = path.resolve(__dirname, '..', 'usr', 'xterm.termcap');
|
||||||
|
|
||||||
|
var infoPathFake = path.resolve(
|
||||||
|
path.sep, 'usr', 'share', 'terminfo',
|
||||||
|
path.basename(infoPath)[0],
|
||||||
|
path.basename(infoPath)
|
||||||
|
);
|
||||||
|
|
||||||
|
function readMethods() {
|
||||||
|
Tput._infoBuffer = new Buffer(TERMINFO, 'base64');
|
||||||
|
|
||||||
|
Tput.prototype.readTerminfo = function() {
|
||||||
|
this.terminal = TERMINFO_NAME;
|
||||||
|
return this.parseTerminfo(Tput._infoBuffer, TERMINFO_PATH);
|
||||||
|
};
|
||||||
|
|
||||||
|
Tput.cpaths = [];
|
||||||
|
Tput.termcap = TERMCAP;
|
||||||
|
|
||||||
|
Tput.prototype._readTermcap = Tput.prototype.readTermcap;
|
||||||
|
Tput.prototype.readTermcap = function() {
|
||||||
|
this.terminal = TERMCAP_NAME;
|
||||||
|
return this._readTermcap(this.terminal);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
readMethods = readMethods.toString().slice(24, -2)
|
||||||
|
.replace(/^ /gm, '')
|
||||||
|
.replace('TERMINFO', JSON.stringify(fs.readFileSync(infoPath, 'base64')))
|
||||||
|
.replace('TERMINFO_NAME', JSON.stringify(path.basename(infoPath)))
|
||||||
|
.replace('TERMINFO_PATH', JSON.stringify(infoPathFake))
|
||||||
|
.replace('TERMCAP', JSON.stringify(fs.readFileSync(capPath, 'utf8')))
|
||||||
|
.replace('TERMCAP_NAME', JSON.stringify(path.basename(capPath, '.termcap')));
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Helpers
|
||||||
|
*/
|
||||||
|
|
||||||
|
function end(file, offset) {
|
||||||
|
return file.split(path.sep).slice(offset).join(path.sep);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Expose
|
||||||
|
*/
|
||||||
|
|
||||||
module.exports = function(file) {
|
module.exports = function(file) {
|
||||||
return path.basename(file) === 'widget.js'
|
if (end(file, -2) === 'lib/widget.js') {
|
||||||
? transform(true)
|
return transformer(requireWidgets);
|
||||||
: transform();
|
}
|
||||||
|
if (end(file, -2) === 'lib/tput.js') {
|
||||||
|
return transformer(readMethods);
|
||||||
|
}
|
||||||
|
return transformer();
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue