update files

This commit is contained in:
nuintun 2015-11-26 22:36:00 +08:00
parent 6b2c31b263
commit 0d6eb644eb

View File

@ -35,18 +35,15 @@ function clone(projects, index){
/** /**
* srcoll * srcoll
* @param xterm * @param xterm
* @param parent
*/ */
function scroll(xterm){ function scroll(xterm, parent){
var parent = xterm.element.parentNode; var height = (xterm.y + 2) * 18;
var scrollTop = parent.scrollTop;
var viewHeight = parent.clientHeight;
if (parent) { if (scrollTop > height || height > scrollTop + viewHeight) {
var height = (xterm.y + 2) * 18; parent.scrollTop = Math.max(0, height - viewHeight);
var scrollTop = parent.scrollTop;
var viewHeight = parent.clientHeight;
if (scrollTop > height || height > scrollTop + viewHeight) {
parent.scrollTop = Math.max(0, height - viewHeight);
}
} }
} }
@ -56,34 +53,25 @@ function scroll(xterm){
* @param xtermNode * @param xtermNode
*/ */
function createXTerm(name, xtermNode){ function createXTerm(name, xtermNode){
var timer;
var runtime = window.AppRuntime[name]; var runtime = window.AppRuntime[name];
function refresh(xterm){
if (xtermNode.firstChild !== xterm.element) {
if (xtermNode.firstChild) {
xtermNode.removeChild(xtermNode.firstChild);
}
xterm.focus();
xtermNode.appendChild(xterm.element);
scroll(xterm);
}
}
if (runtime) { if (runtime) {
refresh(runtime.xterm); runtime.xterm.focus();
} else { } else {
var xterm = new Terminal({ var xterm = new Terminal({
rows: 66, rows: 66,
cursor: false,
scrollback: 66, scrollback: 66,
convertEol: true, convertEOL: true,
fgColor: 'inherit', fgColor: 'inherit',
bgColor: 'transparent' bgColor: 'transparent'
}); });
xterm.open(); xterm.open();
xterm.focus();
refresh(xterm); xtermNode.innerHTML = xterm.screen;
window.AppRuntime[name] = { window.AppRuntime[name] = {
xterm: xterm xterm: xterm
@ -193,21 +181,9 @@ module.exports = Vue.component('app-main', {
context.expandCommand = trigger && trigger.contains(target); context.expandCommand = trigger && trigger.contains(target);
}, false); }, false);
var step = 0; var timer;
var timestamp = Date.now();
ipc.on('emulator', function (event, type, project, data){ ipc.on('emulator', function (event, type, project, data){
var now = Date.now();
if (now - timestamp > 1000) {
step = 0;
}
timestamp = now;
step++;
var delay = step * 16;
var runtime = window.AppRuntime[project.name]; var runtime = window.AppRuntime[project.name];
if (runtime) { if (runtime) {
@ -223,10 +199,18 @@ module.exports = Vue.component('app-main', {
break; break;
} }
setTimeout(function (){ clearTimeout(timer);
runtime.xterm.write(data); runtime.xterm.write(data);
scroll(runtime.xterm);
}, delay); if (project.name === context.project.name) {
timer = setTimeout(function (){
var xtermNode = context.$els.terminal;
xtermNode.innerHTML = runtime.xterm.screen;
scroll(runtime.xterm, xtermNode);
}, 0);
}
} else { } else {
event.sender.send('emulator', project, 'stop'); event.sender.send('emulator', project, 'stop');
} }