Further resolve the Window resizing problem. Should work better now
This commit is contained in:
67
ui/app.js
67
ui/app.js
@@ -50,6 +50,7 @@ const mainTemplate = `
|
|||||||
:commands="commands"
|
:commands="commands"
|
||||||
:preset-data="presetData.presets"
|
:preset-data="presetData.presets"
|
||||||
:restricted-to-presets="presetData.restricted"
|
:restricted-to-presets="presetData.restricted"
|
||||||
|
:view-port="viewPort"
|
||||||
@navigate-to="changeURLHash"
|
@navigate-to="changeURLHash"
|
||||||
@tab-opened="tabOpened"
|
@tab-opened="tabOpened"
|
||||||
@tab-closed="tabClosed"
|
@tab-closed="tabClosed"
|
||||||
@@ -76,7 +77,7 @@ function startApp(rootEl) {
|
|||||||
components: {
|
components: {
|
||||||
loading: Loading,
|
loading: Loading,
|
||||||
auth: Auth,
|
auth: Auth,
|
||||||
home: Home
|
home: Home,
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
@@ -94,17 +95,32 @@ function startApp(rootEl) {
|
|||||||
key: "",
|
key: "",
|
||||||
presetData: {
|
presetData: {
|
||||||
presets: new Presets([]),
|
presets: new Presets([]),
|
||||||
restricted: false
|
restricted: false,
|
||||||
},
|
},
|
||||||
authErr: "",
|
authErr: "",
|
||||||
loadErr: "",
|
loadErr: "",
|
||||||
socket: null,
|
socket: null,
|
||||||
controls: new Controls([
|
controls: new Controls([
|
||||||
new telnetctl.Telnet(uiControlColor),
|
new telnetctl.Telnet(uiControlColor),
|
||||||
new sshctl.SSH(uiControlColor)
|
new sshctl.SSH(uiControlColor),
|
||||||
]),
|
]),
|
||||||
commands: new Commands([new telnet.Command(), new ssh.Command()]),
|
commands: new Commands([new telnet.Command(), new ssh.Command()]),
|
||||||
tabUpdateIndicator: null
|
tabUpdateIndicator: null,
|
||||||
|
viewPort: {
|
||||||
|
dim: {
|
||||||
|
width: 0,
|
||||||
|
height: 0,
|
||||||
|
renew(width, height) {
|
||||||
|
this.width = width;
|
||||||
|
this.height = height;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
viewPortUpdaters: {
|
||||||
|
width: 0,
|
||||||
|
height: 0,
|
||||||
|
dimResizer: null,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
@@ -117,10 +133,29 @@ function startApp(rootEl) {
|
|||||||
this.isErrored()
|
this.isErrored()
|
||||||
? document.body.classList.add("app-error")
|
? document.body.classList.add("app-error")
|
||||||
: document.body.classList.remove("app-error");
|
: document.body.classList.remove("app-error");
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
this.tryInitialAuth();
|
const self = this;
|
||||||
|
|
||||||
|
self.tryInitialAuth();
|
||||||
|
|
||||||
|
self.viewPortUpdaters.dimResizer = () => {
|
||||||
|
self.viewPortUpdaters.height = window.innerHeight;
|
||||||
|
self.viewPortUpdaters.width = window.innerWidth;
|
||||||
|
|
||||||
|
self.$nextTick(() => {
|
||||||
|
self.viewPort.dim.renew(
|
||||||
|
self.viewPortUpdaters.width,
|
||||||
|
self.viewPortUpdaters.height
|
||||||
|
);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
window.addEventListener("resize", self.viewPortUpdaters.dimResizer);
|
||||||
|
},
|
||||||
|
beforeDestroy() {
|
||||||
|
window.removeEventListener("resize", self.viewPortUpdaters.dimResizer);
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
changeTitleInfo(newTitleInfo) {
|
changeTitleInfo(newTitleInfo) {
|
||||||
@@ -169,7 +204,7 @@ function startApp(rootEl) {
|
|||||||
executeHomeApp(authResult, key) {
|
executeHomeApp(authResult, key) {
|
||||||
this.presetData = {
|
this.presetData = {
|
||||||
presets: new Presets(JSON.parse(authResult.data)),
|
presets: new Presets(JSON.parse(authResult.data)),
|
||||||
restricted: authResult.onlyAllowPresetRemotes
|
restricted: authResult.onlyAllowPresetRemotes,
|
||||||
};
|
};
|
||||||
this.socket = this.buildSocket(
|
this.socket = this.buildSocket(
|
||||||
key,
|
key,
|
||||||
@@ -225,7 +260,7 @@ function startApp(rootEl) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return result.key;
|
return result.key;
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -262,7 +297,9 @@ function startApp(rootEl) {
|
|||||||
: await this.getSocketAuthKey(privateKey, this.key);
|
: await this.getSocketAuthKey(privateKey, this.key);
|
||||||
|
|
||||||
let h = await xhr.get(socksVerificationInterface, {
|
let h = await xhr.get(socksVerificationInterface, {
|
||||||
"X-Key": authKey ? btoa(String.fromCharCode.apply(null, authKey)) : ""
|
"X-Key": authKey
|
||||||
|
? btoa(String.fromCharCode.apply(null, authKey))
|
||||||
|
: "",
|
||||||
});
|
});
|
||||||
|
|
||||||
let serverDate = h.getResponseHeader("Date");
|
let serverDate = h.getResponseHeader("Date");
|
||||||
@@ -275,7 +312,7 @@ function startApp(rootEl) {
|
|||||||
date: serverDate ? new Date(serverDate) : null,
|
date: serverDate ? new Date(serverDate) : null,
|
||||||
data: h.responseText,
|
data: h.responseText,
|
||||||
onlyAllowPresetRemotes:
|
onlyAllowPresetRemotes:
|
||||||
h.getResponseHeader("X-OnlyAllowPresetRemotes") === "yes"
|
h.getResponseHeader("X-OnlyAllowPresetRemotes") === "yes",
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
async submitAuth(passphrase) {
|
async submitAuth(passphrase) {
|
||||||
@@ -290,7 +327,7 @@ function startApp(rootEl) {
|
|||||||
data: passphrase,
|
data: passphrase,
|
||||||
fetch() {
|
fetch() {
|
||||||
return this.data;
|
return this.data;
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -344,8 +381,8 @@ function startApp(rootEl) {
|
|||||||
this.tabUpdateIndicator = null;
|
this.tabUpdateIndicator = null;
|
||||||
this.updateTabTitleInfo(tabs, false);
|
this.updateTabTitleInfo(tabs, false);
|
||||||
}, updateIndicatorMaxDisplayTime);
|
}, updateIndicatorMaxDisplayTime);
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -360,11 +397,11 @@ function initializeClient() {
|
|||||||
console.log("Currently in Development environment");
|
console.log("Currently in Development environment");
|
||||||
}
|
}
|
||||||
|
|
||||||
window.addEventListener("unhandledrejection", function(e) {
|
window.addEventListener("unhandledrejection", function (e) {
|
||||||
console.error("Error:", e);
|
console.error("Error:", e);
|
||||||
});
|
});
|
||||||
|
|
||||||
window.addEventListener("error", function(e) {
|
window.addEventListener("error", function (e) {
|
||||||
console.error("Error:", e);
|
console.error("Error:", e);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
77
ui/home.vue
77
ui/home.vue
@@ -39,7 +39,7 @@
|
|||||||
href="javascript:;"
|
href="javascript:;"
|
||||||
:class="{
|
:class="{
|
||||||
working: connector.inputting,
|
working: connector.inputting,
|
||||||
intensify: connector.inputting && !windows.connect
|
intensify: connector.inputting && !windows.connect,
|
||||||
}"
|
}"
|
||||||
@click="showConnectWindow"
|
@click="showConnectWindow"
|
||||||
></a>
|
></a>
|
||||||
@@ -61,6 +61,7 @@
|
|||||||
id="home-content"
|
id="home-content"
|
||||||
:screen="tab.current"
|
:screen="tab.current"
|
||||||
:screens="tab.tabs"
|
:screens="tab.tabs"
|
||||||
|
:view-port="viewPort"
|
||||||
@stopped="tabStopped"
|
@stopped="tabStopped"
|
||||||
@warning="tabWarning"
|
@warning="tabWarning"
|
||||||
@info="tabInfo"
|
@info="tabInfo"
|
||||||
@@ -176,47 +177,41 @@ export default {
|
|||||||
connector: Connector,
|
connector: Connector,
|
||||||
tabs: Tabs,
|
tabs: Tabs,
|
||||||
"tab-window": TabWindow,
|
"tab-window": TabWindow,
|
||||||
screens: Screens
|
screens: Screens,
|
||||||
},
|
},
|
||||||
props: {
|
props: {
|
||||||
hostPath: {
|
hostPath: {
|
||||||
type: String,
|
type: String,
|
||||||
default: ""
|
default: "",
|
||||||
},
|
},
|
||||||
query: {
|
query: {
|
||||||
type: String,
|
type: String,
|
||||||
default: ""
|
default: "",
|
||||||
},
|
},
|
||||||
connection: {
|
connection: {
|
||||||
type: Object,
|
type: Object,
|
||||||
default: () => {
|
default: () => null,
|
||||||
return null;
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
controls: {
|
controls: {
|
||||||
type: Object,
|
type: Object,
|
||||||
default: () => {
|
default: () => null,
|
||||||
return null;
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
commands: {
|
commands: {
|
||||||
type: Object,
|
type: Object,
|
||||||
default: () => {
|
default: () => null,
|
||||||
return null;
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
presetData: {
|
presetData: {
|
||||||
type: Object,
|
type: Object,
|
||||||
default: () => {
|
default: () => new presets.Presets([]),
|
||||||
return new presets.Presets([]);
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
restrictedToPresets: {
|
restrictedToPresets: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
default: () => {
|
default: () => false,
|
||||||
return false;
|
},
|
||||||
}
|
viewPort: {
|
||||||
}
|
type: Object,
|
||||||
|
default: () => null,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
let history = home_history.build(this);
|
let history = home_history.build(this);
|
||||||
@@ -226,7 +221,7 @@ export default {
|
|||||||
windows: {
|
windows: {
|
||||||
delay: false,
|
delay: false,
|
||||||
connect: false,
|
connect: false,
|
||||||
tabs: false
|
tabs: false,
|
||||||
},
|
},
|
||||||
socket: home_socket.build(this),
|
socket: home_socket.build(this),
|
||||||
connector: {
|
connector: {
|
||||||
@@ -236,14 +231,14 @@ export default {
|
|||||||
inputting: false,
|
inputting: false,
|
||||||
acquired: false,
|
acquired: false,
|
||||||
busy: false,
|
busy: false,
|
||||||
knowns: history.all()
|
knowns: history.all(),
|
||||||
},
|
},
|
||||||
presets: this.commands.mergePresets(this.presetData),
|
presets: this.commands.mergePresets(this.presetData),
|
||||||
tab: {
|
tab: {
|
||||||
current: -1,
|
current: -1,
|
||||||
lastID: 0,
|
lastID: 0,
|
||||||
tabs: []
|
tabs: [],
|
||||||
}
|
},
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
@@ -252,7 +247,7 @@ export default {
|
|||||||
}, 1000);
|
}, 1000);
|
||||||
|
|
||||||
if (this.query.length > 1 && this.query.indexOf("+") === 0) {
|
if (this.query.length > 1 && this.query.indexOf("+") === 0) {
|
||||||
this.connectLaunch(this.query.slice(1, this.query.length), success => {
|
this.connectLaunch(this.query.slice(1, this.query.length), (success) => {
|
||||||
if (!success) {
|
if (!success) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -324,7 +319,7 @@ export default {
|
|||||||
this.connector.busy = true;
|
this.connector.busy = true;
|
||||||
|
|
||||||
this.getStreamThenRun(
|
this.getStreamThenRun(
|
||||||
stream => {
|
(stream) => {
|
||||||
this.connector.busy = false;
|
this.connector.busy = false;
|
||||||
|
|
||||||
callback(stream);
|
callback(stream);
|
||||||
@@ -338,7 +333,7 @@ export default {
|
|||||||
connectNew(connector) {
|
connectNew(connector) {
|
||||||
const self = this;
|
const self = this;
|
||||||
|
|
||||||
self.runConnect(stream => {
|
self.runConnect((stream) => {
|
||||||
self.connector.connector = {
|
self.connector.connector = {
|
||||||
id: connector.id(),
|
id: connector.id(),
|
||||||
name: connector.name(),
|
name: connector.name(),
|
||||||
@@ -350,7 +345,7 @@ export default {
|
|||||||
presets.emptyPreset(),
|
presets.emptyPreset(),
|
||||||
null,
|
null,
|
||||||
() => {}
|
() => {}
|
||||||
)
|
),
|
||||||
};
|
};
|
||||||
|
|
||||||
self.connector.inputting = true;
|
self.connector.inputting = true;
|
||||||
@@ -359,7 +354,7 @@ export default {
|
|||||||
connectPreset(preset) {
|
connectPreset(preset) {
|
||||||
const self = this;
|
const self = this;
|
||||||
|
|
||||||
self.runConnect(stream => {
|
self.runConnect((stream) => {
|
||||||
self.connector.connector = {
|
self.connector.connector = {
|
||||||
id: preset.command.id(),
|
id: preset.command.id(),
|
||||||
name: preset.command.name(),
|
name: preset.command.name(),
|
||||||
@@ -371,7 +366,7 @@ export default {
|
|||||||
preset.preset,
|
preset.preset,
|
||||||
null,
|
null,
|
||||||
() => {}
|
() => {}
|
||||||
)
|
),
|
||||||
};
|
};
|
||||||
|
|
||||||
self.connector.inputting = true;
|
self.connector.inputting = true;
|
||||||
@@ -393,7 +388,7 @@ export default {
|
|||||||
connectKnown(known) {
|
connectKnown(known) {
|
||||||
const self = this;
|
const self = this;
|
||||||
|
|
||||||
self.runConnect(stream => {
|
self.runConnect((stream) => {
|
||||||
let connector = self.getConnectorByType(known.type);
|
let connector = self.getConnectorByType(known.type);
|
||||||
|
|
||||||
if (!connector) {
|
if (!connector) {
|
||||||
@@ -417,7 +412,7 @@ export default {
|
|||||||
() => {
|
() => {
|
||||||
self.connector.knowns = self.connector.historyRec.all();
|
self.connector.knowns = self.connector.historyRec.all();
|
||||||
}
|
}
|
||||||
)
|
),
|
||||||
};
|
};
|
||||||
|
|
||||||
self.connector.inputting = true;
|
self.connector.inputting = true;
|
||||||
@@ -433,13 +428,13 @@ export default {
|
|||||||
|
|
||||||
return {
|
return {
|
||||||
type: ll.slice(0, llSeparatorIdx),
|
type: ll.slice(0, llSeparatorIdx),
|
||||||
query: ll.slice(llSeparatorIdx + 1, ll.length)
|
query: ll.slice(llSeparatorIdx + 1, ll.length),
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
connectLaunch(launcher, done) {
|
connectLaunch(launcher, done) {
|
||||||
this.showConnectWindow();
|
this.showConnectWindow();
|
||||||
|
|
||||||
this.runConnect(stream => {
|
this.runConnect((stream) => {
|
||||||
let ll = this.parseConnectLauncher(launcher),
|
let ll = this.parseConnectLauncher(launcher),
|
||||||
connector = this.getConnectorByType(ll.type);
|
connector = this.getConnectorByType(ll.type);
|
||||||
|
|
||||||
@@ -462,12 +457,12 @@ export default {
|
|||||||
this.controls,
|
this.controls,
|
||||||
this.connector.historyRec,
|
this.connector.historyRec,
|
||||||
ll.query,
|
ll.query,
|
||||||
n => {
|
(n) => {
|
||||||
self.connector.knowns = self.connector.historyRec.all();
|
self.connector.knowns = self.connector.historyRec.all();
|
||||||
|
|
||||||
done(n.data().success);
|
done(n.data().success);
|
||||||
}
|
}
|
||||||
)
|
),
|
||||||
};
|
};
|
||||||
|
|
||||||
this.connector.inputting = true;
|
this.connector.inputting = true;
|
||||||
@@ -525,11 +520,11 @@ export default {
|
|||||||
indicator: {
|
indicator: {
|
||||||
level: "",
|
level: "",
|
||||||
message: "",
|
message: "",
|
||||||
updated: false
|
updated: false,
|
||||||
},
|
},
|
||||||
status: {
|
status: {
|
||||||
closing: false
|
closing: false,
|
||||||
}
|
},
|
||||||
}) - 1
|
}) - 1
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
@@ -612,7 +607,7 @@ export default {
|
|||||||
this.$emit("tab-updated", this.tab.tabs);
|
this.$emit("tab-updated", this.tab.tabs);
|
||||||
|
|
||||||
this.tab.tabs[index].indicator.updated = index !== this.tab.current;
|
this.tab.tabs[index].indicator.updated = index !== this.tab.current;
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -37,6 +37,7 @@
|
|||||||
|
|
||||||
#home-content > .screen > .screen-screen > .screen-console {
|
#home-content > .screen > .screen-screen > .screen-console {
|
||||||
position: relative;
|
position: relative;
|
||||||
|
min-height: 1px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#home-content > .screen > .screen-screen > .screen-console > .console-toolbar {
|
#home-content > .screen > .screen-screen > .screen-console > .console-toolbar {
|
||||||
@@ -50,6 +51,7 @@
|
|||||||
background: #222;
|
background: #222;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
box-shadow: 0 0 5px #0006;
|
box-shadow: 0 0 5px #0006;
|
||||||
|
z-index: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#home-content
|
#home-content
|
||||||
@@ -190,11 +192,13 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
#home-content > .screen > .screen-screen > .screen-console > .console-console {
|
#home-content > .screen > .screen-screen > .screen-console > .console-console {
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
justify-content: center;
|
|
||||||
justify-items: center;
|
|
||||||
color: #fff;
|
color: #fff;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
position: relative;
|
||||||
|
z-index: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#home-content
|
#home-content
|
||||||
|
|||||||
@@ -21,7 +21,6 @@
|
|||||||
<div class="screen-console">
|
<div class="screen-console">
|
||||||
<div
|
<div
|
||||||
class="console-console"
|
class="console-console"
|
||||||
style="width: 100%; height: 100%; top: 0; right: 0; left: 0; bottom: 0; padding: 0; margin: 0; z-index: 0; position: absolute; overflow: hidden"
|
|
||||||
:style="'font-family: ' + typeface + ', inherit'"
|
:style="'font-family: ' + typeface + ', inherit'"
|
||||||
>
|
>
|
||||||
<h2 style="display: none;">Console</h2>
|
<h2 style="display: none;">Console</h2>
|
||||||
@@ -233,7 +232,6 @@ class Term {
|
|||||||
rows: dim.rows,
|
rows: dim.rows,
|
||||||
cols: dim.cols,
|
cols: dim.cols,
|
||||||
});
|
});
|
||||||
|
|
||||||
}, resizeDelayInterval);
|
}, resizeDelayInterval);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -280,16 +278,6 @@ class Term {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
this.term.element.addEventListener("click", () => {
|
|
||||||
if (this.closed) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.term.textarea.blur();
|
|
||||||
this.term.textarea.click();
|
|
||||||
this.term.textarea.focus();
|
|
||||||
});
|
|
||||||
|
|
||||||
this.refit();
|
this.refit();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -451,6 +439,10 @@ export default {
|
|||||||
type: Boolean,
|
type: Boolean,
|
||||||
default: false,
|
default: false,
|
||||||
},
|
},
|
||||||
|
viewPort: {
|
||||||
|
type: Object,
|
||||||
|
default: () => null,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
@@ -459,7 +451,6 @@ export default {
|
|||||||
typeface: termTypeFace,
|
typeface: termTypeFace,
|
||||||
runner: null,
|
runner: null,
|
||||||
eventHandlers: {
|
eventHandlers: {
|
||||||
resize: null,
|
|
||||||
keydown: null,
|
keydown: null,
|
||||||
keyup: null,
|
keyup: null,
|
||||||
},
|
},
|
||||||
@@ -479,6 +470,16 @@ export default {
|
|||||||
},
|
},
|
||||||
deep: true,
|
deep: true,
|
||||||
},
|
},
|
||||||
|
viewPort: {
|
||||||
|
handler() {
|
||||||
|
if (!this.active) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.fit();
|
||||||
|
},
|
||||||
|
deep: true,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
async mounted() {
|
async mounted() {
|
||||||
await this.init();
|
await this.init();
|
||||||
@@ -559,45 +560,42 @@ export default {
|
|||||||
let self = this;
|
let self = this;
|
||||||
|
|
||||||
self.eventHandlers = {
|
self.eventHandlers = {
|
||||||
resize: () => self.fit(),
|
keyup: (e) => self.localKeypress(e),
|
||||||
keyup: e => self.localKeypress(e),
|
keydown: (e) => self.localKeypress(e),
|
||||||
keydown: e => self.localKeypress(e),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
await self.openTerm(
|
await self.openTerm(
|
||||||
self.$el.getElementsByClassName("console-console")[0],
|
self.$el.getElementsByClassName("console-console")[0],
|
||||||
{
|
{
|
||||||
focus(e) {
|
focus(e) {
|
||||||
document.addEventListener("keyup", self.eventHandlers.keyup);
|
document.addEventListener("keyup", self.eventHandlers.keyup);
|
||||||
document.addEventListener("keydown", self.eventHandlers.keydown);
|
document.addEventListener("keydown", self.eventHandlers.keydown);
|
||||||
},
|
},
|
||||||
blur(e) {
|
blur(e) {
|
||||||
document.removeEventListener("keyup", self.eventHandlers.keyup);
|
document.removeEventListener("keyup", self.eventHandlers.keyup);
|
||||||
document.removeEventListener("keydown", self.eventHandlers.keydown);
|
document.removeEventListener("keydown", self.eventHandlers.keydown);
|
||||||
},
|
},
|
||||||
warn(msg, toDismiss) {
|
warn(msg, toDismiss) {
|
||||||
self.$emit("warning", {
|
self.$emit("warning", {
|
||||||
text: msg,
|
text: msg,
|
||||||
toDismiss: toDismiss,
|
toDismiss: toDismiss,
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
info(msg, toDismiss) {
|
info(msg, toDismiss) {
|
||||||
self.$emit("info", {
|
self.$emit("info", {
|
||||||
text: msg,
|
text: msg,
|
||||||
toDismiss: toDismiss,
|
toDismiss: toDismiss,
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
if (self.term.destroyed()) {
|
if (self.term.destroyed()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
self.triggerActive();
|
self.triggerActive();
|
||||||
self.runRunner();
|
self.runRunner();
|
||||||
|
|
||||||
self.$nextTick(() => self.eventHandlers.resize());
|
|
||||||
},
|
},
|
||||||
async deinit() {
|
async deinit() {
|
||||||
await this.closeRunner();
|
await this.closeRunner();
|
||||||
@@ -615,12 +613,9 @@ export default {
|
|||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
},
|
},
|
||||||
activate() {
|
activate() {
|
||||||
this.eventHandlers.resize();
|
|
||||||
this.term.focus();
|
this.term.focus();
|
||||||
window.addEventListener("resize", this.eventHandlers.resize);
|
|
||||||
},
|
},
|
||||||
async deactivate() {
|
async deactivate() {
|
||||||
window.removeEventListener("resize", this.eventHandlers.resize);
|
|
||||||
this.term.blur();
|
this.term.blur();
|
||||||
},
|
},
|
||||||
runRunner() {
|
runRunner() {
|
||||||
|
|||||||
@@ -19,11 +19,17 @@
|
|||||||
|
|
||||||
@charset "utf-8";
|
@charset "utf-8";
|
||||||
|
|
||||||
|
#home-content.active {
|
||||||
|
min-height: 0;
|
||||||
|
}
|
||||||
|
|
||||||
#home-content > .screen {
|
#home-content > .screen {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: top;
|
justify-content: start;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
font-size: 1em;
|
font-size: 1em;
|
||||||
|
overflow: hidden;
|
||||||
|
flex: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
#home-content > .screen > .screen-error {
|
#home-content > .screen > .screen-error {
|
||||||
@@ -49,4 +55,17 @@
|
|||||||
|
|
||||||
#home-content > .screen > .screen-screen {
|
#home-content > .screen > .screen-screen {
|
||||||
flex: auto;
|
flex: auto;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
position: relative;
|
||||||
|
min-height: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#home-content > .screen > .screen-screen > .screen-content {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
position: relative;
|
||||||
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
-->
|
-->
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<main style="position: relative">
|
<main :class="{ active: screens.length > 0 }">
|
||||||
<slot v-if="screens.length <= 0"></slot>
|
<slot v-if="screens.length <= 0"></slot>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
@@ -26,9 +26,8 @@
|
|||||||
:key="screenInfo.id"
|
:key="screenInfo.id"
|
||||||
:style="'visibility: ' + (screen === idx ? 'visible' : 'hidden')"
|
:style="'visibility: ' + (screen === idx ? 'visible' : 'hidden')"
|
||||||
class="screen"
|
class="screen"
|
||||||
style="width: 100%; height: 100%; top: 0; right: 0; left: 0; bottom: 0; padding: 0; margin: 0; overflow: auto; position: absolute;"
|
|
||||||
>
|
>
|
||||||
<h1 style="display:none;">Main Interface</h1>
|
<h1 style="display: none;">Main Interface</h1>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
v-if="screenInfo.indicator.message.length > 0"
|
v-if="screenInfo.indicator.message.length > 0"
|
||||||
@@ -38,15 +37,16 @@
|
|||||||
{{ screenInfo.indicator.message }}
|
{{ screenInfo.indicator.message }}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="screen-screen" style="position: relative">
|
<div class="screen-screen">
|
||||||
<component
|
<component
|
||||||
:is="getComponent(screenInfo.ui)"
|
:is="getComponent(screenInfo.ui)"
|
||||||
:active="screen === idx"
|
:active="screen === idx"
|
||||||
:control="screenInfo.control"
|
:control="screenInfo.control"
|
||||||
:change="screenInfo.indicator"
|
:change="screenInfo.indicator"
|
||||||
:toolbar="screenInfo.toolbar"
|
:toolbar="screenInfo.toolbar"
|
||||||
|
:view-port="viewPort"
|
||||||
:style="'background-color: ' + screenInfo.control.activeColor()"
|
:style="'background-color: ' + screenInfo.control.activeColor()"
|
||||||
style="top: 0; right: 0; left: 0; bottom: 0; padding: 0; margin: 0; position: absolute; overflow: hidden"
|
class="screen-content"
|
||||||
@stopped="stopped(idx, $event)"
|
@stopped="stopped(idx, $event)"
|
||||||
@warning="warning(idx, $event)"
|
@warning="warning(idx, $event)"
|
||||||
@info="info(idx, $event)"
|
@info="info(idx, $event)"
|
||||||
@@ -64,17 +64,21 @@ import "./screens.css";
|
|||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
ConsoleScreen
|
ConsoleScreen,
|
||||||
},
|
},
|
||||||
props: {
|
props: {
|
||||||
screen: {
|
screen: {
|
||||||
type: Number,
|
type: Number,
|
||||||
default: 0
|
default: 0,
|
||||||
},
|
},
|
||||||
screens: {
|
screens: {
|
||||||
type: Array,
|
type: Array,
|
||||||
default: () => []
|
default: () => [],
|
||||||
}
|
},
|
||||||
|
viewPort: {
|
||||||
|
type: Object,
|
||||||
|
default: () => [],
|
||||||
|
},
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
getComponent(ui) {
|
getComponent(ui) {
|
||||||
@@ -97,7 +101,7 @@ export default {
|
|||||||
},
|
},
|
||||||
updated(index) {
|
updated(index) {
|
||||||
this.$emit("updated", index);
|
this.$emit("updated", index);
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
Reference in New Issue
Block a user