You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
89 lines
2.8 KiB
89 lines
2.8 KiB
/** Init the terminal sub-module - called from HTML */
|
|
window.termInit = function (labels, theme) {
|
|
const screen = new window.TermScreen()
|
|
const conn = window.Conn(screen)
|
|
const input = window.Input(conn)
|
|
const termUpload = window.TermUpl(conn, input)
|
|
|
|
screen.input = input
|
|
|
|
conn.init()
|
|
input.init()
|
|
termUpload.init()
|
|
|
|
qs('#screen').appendChild(screen.canvas)
|
|
screen.load(labels, theme) // load labels and theme
|
|
|
|
window.initSoftKeyboard(screen, input)
|
|
if (window.attachDebugScreen) window.attachDebugScreen(screen)
|
|
|
|
let isFullscreen = false
|
|
let fitScreen = false
|
|
let fitScreenIfNeeded = function fitScreenIfNeeded () {
|
|
if (isFullscreen) {
|
|
screen.window.fitIntoWidth = window.screen.width
|
|
screen.window.fitIntoHeight = window.screen.height
|
|
} else {
|
|
screen.window.fitIntoWidth = fitScreen ? window.innerWidth - 20 : 0
|
|
screen.window.fitIntoHeight = fitScreen ? window.innerHeight : 0
|
|
}
|
|
}
|
|
fitScreenIfNeeded()
|
|
window.addEventListener('resize', fitScreenIfNeeded)
|
|
|
|
window.toggleFitScreen = function () {
|
|
fitScreen = !fitScreen
|
|
const resizeButtonIcon = qs('#resize-button-icon')
|
|
if (fitScreen) {
|
|
resizeButtonIcon.classList.remove('icn-resize-small')
|
|
resizeButtonIcon.classList.add('icn-resize-full')
|
|
} else {
|
|
resizeButtonIcon.classList.remove('icn-resize-full')
|
|
resizeButtonIcon.classList.add('icn-resize-small')
|
|
}
|
|
fitScreenIfNeeded()
|
|
}
|
|
|
|
// add fullscreen mode & button
|
|
if (Element.prototype.requestFullscreen || Element.prototype.webkitRequestFullscreen) {
|
|
let checkForFullscreen = function () {
|
|
// document.fullscreenElement is not really supported yet, so here's a hack
|
|
if (isFullscreen && (innerWidth !== window.screen.width || innerHeight !== window.screen.height)) {
|
|
isFullscreen = false
|
|
fitScreenIfNeeded()
|
|
}
|
|
}
|
|
setInterval(checkForFullscreen, 500)
|
|
|
|
// (why are the buttons anchors?)
|
|
let button = mk('a')
|
|
button.href = '#'
|
|
button.addEventListener('click', e => {
|
|
e.preventDefault()
|
|
|
|
isFullscreen = true
|
|
fitScreenIfNeeded()
|
|
screen.updateSize()
|
|
|
|
if (screen.canvas.requestFullscreen) screen.canvas.requestFullscreen()
|
|
else screen.canvas.webkitRequestFullscreen()
|
|
})
|
|
let icon = mk('i')
|
|
icon.classList.add('icn-resize-full') // TODO: less confusing icons
|
|
button.appendChild(icon)
|
|
let span = mk('span')
|
|
span.textContent = 'Fullscreen'
|
|
button.appendChild(span)
|
|
qs('#term-nav').insertBefore(button, qs('#term-nav').firstChild)
|
|
}
|
|
|
|
window.openTermUpl = () => termUpload.open()
|
|
window.startTermUpl = () => termUpload.start()
|
|
window.closeTermUpl = () => termUpload.close()
|
|
|
|
// for debugging
|
|
window.termScreen = screen
|
|
window.conn = conn
|
|
window.input = input
|
|
window.termUpl = termUpload
|
|
}
|
|
|