Compare commits

..
11 Commits
Author SHA1 Message Date
paris c6a7e15b03 [fit addon] Restore row content after proposing geometry
- Restore `subjectRow.innerHTML`, using the `contentBuffer`
- Bump version to 0.25
2014-11-17 12:36:13 +02:00
paris 87979aeed4 Bind window to AMD module
- Bind window to Xterm AMD module
- Fix typo in fit addon
- Bump version to 0.24
2014-11-17 12:28:52 +02:00
paris 615f633f25 [fit addon] Introduce proposeGeometry method
- Introduce new method to propose optimal geometry for the current terminal
- Bump version to 0.23
2014-11-17 12:21:05 +02:00
paris 567b39dc98 Fix #6 2014-09-22 05:48:05 +00:00
paris 0b2bdb182b Bump version to 0.22 2014-09-18 11:11:45 +00:00
paris 4ce1440fb8 [addon attach] Make reference to socket fail-safe 2014-09-18 11:11:29 +00:00
paris f24c020aca [addon attach] Fix reference error
Also bump version to 0.21
2014-09-18 10:15:10 +00:00
paris 3fca219404 [addon attach] Implement detach method (Bump to 0.20) 2014-09-18 10:02:29 +00:00
paris 6906bf3e7d Implement detach function 2014-09-18 10:01:54 +00:00
paris 670efc4454 Bump Bower version to 0.19 2014-09-18 09:06:53 +00:00
paris 74f9526177 [addon attach] Implement auto-detaching on socket close/error 2014-09-18 09:06:23 +00:00
6 changed files with 82 additions and 42 deletions
+26 -5
View File
@@ -25,14 +25,35 @@
bidirectional = (typeof bidirectional == 'undefined') ? true : bidirectional;
this.socket = socket;
socket.addEventListener('message', function (ev) {
term._getMessage = function (ev) {
term.write(ev.data);
});
};
term._sendData = function (data) {
socket.send(data);
};
socket.addEventListener('message', term._getMessage);
if (bidirectional) {
this.on('data', function (data) {
socket.send(data);
});
this.on('data', term._sendData);
}
socket.addEventListener('close', term.detach.bind(term, socket));
socket.addEventListener('error', term.detach.bind(term, socket));
};
Xterm.prototype.detach = function (socket) {
var term = this;
term.off('data', term._sendData);
socket = (typeof socket == 'undefined') ? term.socket : socket;
if (socket) {
socket.removeEventListener('message', term._getMessage);
}
delete term.socket;
};
});
+42 -29
View File
@@ -24,36 +24,49 @@
fit(this.Xterm);
}
})(function (Xterm) {
Xterm.prototype.proposeGeometry = function () {
var container = this.rowContainer,
subjectRow = this.rowContainer.firstElementChild,
rows,
contentBuffer,
characterWidth,
cols;
subjectRow.style.display = 'inline';
contentBuffer = subjectRow.innerHTML;
subjectRow.innerHTML = ' '; /* Arbitrary character to calculate its dimensions */
characterWidth = parseInt(subjectRow.offsetWidth);
characterHeight = parseInt(subjectRow.offsetHeight);
subjectRow.style.display = '';
cols = container.offsetWidth / characterWidth;
cols = parseInt(cols);
var parentElementStyle = window.getComputedStyle(this.element.parentElement),
parentElementHeight = parseInt(parentElementStyle.getPropertyValue('height')),
elementStyle = window.getComputedStyle(this.element),
elementPadding = parseInt(elementStyle.getPropertyValue('padding-top')) + parseInt(elementStyle.getPropertyValue('padding-bottom')),
availableHeight = parentElementHeight - elementPadding,
rowHeight = this.rowContainer.firstElementChild.offsetHeight;
rows = parseInt(availableHeight / rowHeight);
subjectRow.innerHTML = contentBuffer; /* Replace original content */
var geometry = {
'cols': cols,
'rows': rows
};
return geometry;
};
Xterm.prototype.fit = function () {
var container = this.rowContainer,
subjectRow = this.rowContainer.firstElementChild,
rows,
contentBuffer,
characterWidth,
cols;
var geometry = this.proposeGeometry();
subjectRow.style.display = 'inline';
contentBuffer = subjectRow.textContent;
subjectRow.innerHTML = ' '; /* Arbitrary character to calculate its dimensions */
characterWidth = parseInt(subjectRow.offsetWidth);
characterHeight = parseInt(subjectRow.offsetHeight);
subjectRow.style.display = '';
cols = container.offsetWidth / characterWidth;
cols = parseInt(cols);
var parentElementStyle = window.getComputedStyle(this.element.parentElement),
parentElementHeight = parseInt(parentElementStyle.getPropertyValue('height')),
elementStyle = window.getComputedStyle(this.element),
elementPadding = parseInt(elementStyle.getPropertyValue('padding-top')) + parseInt(elementStyle.getPropertyValue('padding-bottom')),
availableHeight = parentElementHeight - elementPadding,
rowHeight = this.rowContainer.firstElementChild.offsetHeight;
rows = parseInt(availableHeight / rowHeight);
this.resize(cols, rows);
this.resize(geometry.cols, geometry.rows);
};
});
+1 -1
View File
@@ -1,5 +1,5 @@
{
"name": "xterm.js",
"version": "0.18",
"version": "0.25",
"ignore": ["demo", "docs", "test", ".gitignore"]
}
+10 -4
View File
@@ -1,12 +1,13 @@
var terminalContainer = document.getElementById('terminal-container'),
term = new Terminal();
term = new Terminal(),
prompt = '> ';
term.open(terminalContainer);
term.fit();
term.prompt = function () {
term.write('\r\n> ');
}
term.write('\r\n' + prompt);
};
term.writeln('Welcome to xterm.js');
term.writeln('Just type some keys in the prompt below.');
@@ -19,7 +20,12 @@ term.on('key', function (key, ev) {
if (ev.keyIdentifier == 'Enter') {
term.prompt();
} else if (ev.keyCode == 8) {
term.write('\b \b');
/*
* Do not delete the prompt
*/
if (term.x > 2) {
term.write('\b \b');
}
} else if (printable) {
term.write(key);
}
+2 -2
View File
@@ -51,9 +51,9 @@ copyright = u'2014, SourceLair Limited'
# built documents.
#
# The short X.Y version.
version = '0.18'
version = '0.25'
# The full version, including alpha/beta/rc tags.
release = '0.18 Alpha'
release = '0.25 Alpha'
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
+1 -1
View File
@@ -36,7 +36,7 @@
/*
* Require.js is available
*/
define([], xterm);
define([], xterm.bind(window));
} else {
/*
* Plain browser environment