Further resolve the Window resizing problem. Should work better now

This commit is contained in:
NI
2020-07-28 22:26:06 +08:00
parent 89aebf9181
commit 9e1e592bf3
6 changed files with 171 additions and 117 deletions

View File

@@ -37,6 +37,7 @@
#home-content > .screen > .screen-screen > .screen-console {
position: relative;
min-height: 1px;
}
#home-content > .screen > .screen-screen > .screen-console > .console-toolbar {
@@ -50,6 +51,7 @@
background: #222;
color: #fff;
box-shadow: 0 0 5px #0006;
z-index: 1;
}
#home-content
@@ -190,11 +192,13 @@
}
#home-content > .screen > .screen-screen > .screen-console > .console-console {
display: flex;
flex-direction: column;
justify-content: center;
justify-items: center;
color: #fff;
width: 100%;
height: 100%;
padding: 0;
margin: 0;
position: relative;
z-index: 0;
}
#home-content

View File

@@ -21,7 +21,6 @@
<div class="screen-console">
<div
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'"
>
<h2 style="display: none;">Console</h2>
@@ -233,7 +232,6 @@ class Term {
rows: dim.rows,
cols: dim.cols,
});
}, 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();
}
@@ -451,6 +439,10 @@ export default {
type: Boolean,
default: false,
},
viewPort: {
type: Object,
default: () => null,
},
},
data() {
return {
@@ -459,7 +451,6 @@ export default {
typeface: termTypeFace,
runner: null,
eventHandlers: {
resize: null,
keydown: null,
keyup: null,
},
@@ -479,6 +470,16 @@ export default {
},
deep: true,
},
viewPort: {
handler() {
if (!this.active) {
return;
}
this.fit();
},
deep: true,
},
},
async mounted() {
await this.init();
@@ -559,45 +560,42 @@ export default {
let self = this;
self.eventHandlers = {
resize: () => self.fit(),
keyup: e => self.localKeypress(e),
keydown: e => self.localKeypress(e),
keyup: (e) => self.localKeypress(e),
keydown: (e) => self.localKeypress(e),
};
await self.openTerm(
self.$el.getElementsByClassName("console-console")[0],
{
focus(e) {
document.addEventListener("keyup", self.eventHandlers.keyup);
document.addEventListener("keydown", self.eventHandlers.keydown);
},
blur(e) {
document.removeEventListener("keyup", self.eventHandlers.keyup);
document.removeEventListener("keydown", self.eventHandlers.keydown);
},
warn(msg, toDismiss) {
self.$emit("warning", {
text: msg,
toDismiss: toDismiss,
});
},
info(msg, toDismiss) {
self.$emit("info", {
text: msg,
toDismiss: toDismiss,
});
},
}
self.$el.getElementsByClassName("console-console")[0],
{
focus(e) {
document.addEventListener("keyup", self.eventHandlers.keyup);
document.addEventListener("keydown", self.eventHandlers.keydown);
},
blur(e) {
document.removeEventListener("keyup", self.eventHandlers.keyup);
document.removeEventListener("keydown", self.eventHandlers.keydown);
},
warn(msg, toDismiss) {
self.$emit("warning", {
text: msg,
toDismiss: toDismiss,
});
},
info(msg, toDismiss) {
self.$emit("info", {
text: msg,
toDismiss: toDismiss,
});
},
}
);
if (self.term.destroyed()) {
return;
return;
}
self.triggerActive();
self.runRunner();
self.$nextTick(() => self.eventHandlers.resize());
},
async deinit() {
await this.closeRunner();
@@ -615,12 +613,9 @@ export default {
e.preventDefault();
},
activate() {
this.eventHandlers.resize();
this.term.focus();
window.addEventListener("resize", this.eventHandlers.resize);
},
async deactivate() {
window.removeEventListener("resize", this.eventHandlers.resize);
this.term.blur();
},
runRunner() {

View File

@@ -19,11 +19,17 @@
@charset "utf-8";
#home-content.active {
min-height: 0;
}
#home-content > .screen {
display: flex;
justify-content: top;
justify-content: start;
flex-direction: column;
font-size: 1em;
overflow: hidden;
flex: auto;
}
#home-content > .screen > .screen-error {
@@ -49,4 +55,17 @@
#home-content > .screen > .screen-screen {
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;
}

View File

@@ -18,7 +18,7 @@
-->
<template>
<main style="position: relative">
<main :class="{ active: screens.length > 0 }">
<slot v-if="screens.length <= 0"></slot>
<div
@@ -26,9 +26,8 @@
:key="screenInfo.id"
:style="'visibility: ' + (screen === idx ? 'visible' : 'hidden')"
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
v-if="screenInfo.indicator.message.length > 0"
@@ -38,15 +37,16 @@
{{ screenInfo.indicator.message }}
</div>
<div class="screen-screen" style="position: relative">
<div class="screen-screen">
<component
:is="getComponent(screenInfo.ui)"
:active="screen === idx"
:control="screenInfo.control"
:change="screenInfo.indicator"
:toolbar="screenInfo.toolbar"
:view-port="viewPort"
: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)"
@warning="warning(idx, $event)"
@info="info(idx, $event)"
@@ -64,17 +64,21 @@ import "./screens.css";
export default {
components: {
ConsoleScreen
ConsoleScreen,
},
props: {
screen: {
type: Number,
default: 0
default: 0,
},
screens: {
type: Array,
default: () => []
}
default: () => [],
},
viewPort: {
type: Object,
default: () => [],
},
},
methods: {
getComponent(ui) {
@@ -97,7 +101,7 @@ export default {
},
updated(index) {
this.$emit("updated", index);
}
}
},
},
};
</script>