Select Git revision
assemblerFirstTrial.mp4
-
Amira Abdel-Rahman authoredAmira Abdel-Rahman authored
vmsg.js 3.97 KiB
// micro html console
function MessageBox(View) {
let view = View
// and things inside of it,
this.zoomCheckbox = {}
// tracking a load,
this.briefState = {
recipName: '',
recipVersion: '',
numHunksLeft: 0,
numLinksLeft: 0,
isStateHappenning: false,
setFromBrief: function(brief) {
this.recipVer = brief.interpreterVersion
this.recipName = brief.interpreterName
this.numHunksLeft = brief.numHunks
briefStateToDom(this)
},
decrementHunks: function() {
this.numHunksLeft--
briefStateToDom(this)
},
incrementHunks: function() {
this.numHunksLeft++
briefStateToDom(this)
},
decrementLinks: function() {
this.numLinksLeft--
briefStateToDom(this)
},
incrementLinks: function() {
this.numLinksLeft++
briefStateToDom(this)
}
}
let briefStateToDom = (brief) => {
let str
if (brief.numHunksLeft > 0) {
str = `interpreter: ${brief.recipName} ${brief.recipVer} <br> awaiting ${brief.numHunksLeft} hunks`
} else {
str = `interpreter: ${brief.recipName} ${brief.recipVer} <br> all loaded OK`
}
$(this.msgbox).find('#titleBox').html(str)
}
this.msgbox = {}
/* --------------------------- ---------------------------- */
/* ------------------------- STARTUP ------------------------- */
/* --------------------------- ---------------------------- */
this.init = () => {
//view.log('message box alive')
console.log("MSGBOXHELLO")
// a box,
this.msgbox = $('<div>').addClass('msgbox').get(0)
// the title, and id of your manager
this.msgbox.append($('<div>').attr('id', 'titleBox').addClass('msgboxmsg').append('name and interpreter:<br>~ unknown ~<br>truly').get(0))
// say hello to your manager,
this.msgbox.append($('<div><i class="em em-wave"></i>').addClass('msgboxbutton').addClass('msgboxmsg').append(' say hello').click((evt) => {
view.sayHelloToManager()
}).get(0))
// a refresh button
this.msgbox.append($('<div><i class="em em-arrows_counterclockwise"></i>').addClass('msgboxbutton').addClass('msgboxmsg').append(' refresh view').click((evt) => {
evt.preventDefault()
view.refresh()
}).get(0))
// and then
this.isHidden = false
$(view.dom).append(this.msgbox)
}
this.toggleHidden = () => {
if(this.isHidden){
$(this.msgbox).show()
} else {
$(this.msgbox).hide()
}
}
let tpad = 10
this.setTopMargin = (num) => {
tpad = num
this.checkHeight()
}
this.checkHeight = () => {
let ht = view.dom.clientHeight
$(this.msgbox).css('height', `${ht - 30 - tpad}px`).css('margin-top', `${tpad}px`)
}
this.hide = () => {
$(this.msgbox).css('display', 'none')
}
this.unhide = () => {
$(this.msgbox).css('display', 'inline')
}
/* --------------------------- ---------------------------- */
/* -------------------------- WRITE -------------------------- */
/* --------------------------- ---------------------------- */
this.write = (data) => {
if(true) return false
// write the message
this.msgbox.append($('<div> -> ' + data + '</div>').addClass('msgboxmsg').get(0))
// def check
let heightcheck = () => {
let height = 0;
$(this.msgbox).children().each(function(child) {
// jquery.each() syntax is a bit odd / different than elsewhere, sorry for inconsistency
height += this.clientHeight + 5
})
return height
}
// if too tall, remove
let ch = this.msgbox.clientHeight
if (heightcheck() > ch) {
//console.log('rm 1', heightcheck(), ch)
$(this.msgbox).children().get(3).remove()
// two at most, sloppy but fast
if (heightcheck() > ch) {
//console.log('rm 2', heightcheck(), ch)
$(this.msgbox).children().get(3).remove()
}
}
}
this.clear = () => {
while($(this.msgbox).children().length > 3){
$(this.msgbox).children().get(3).remove()
}
}
}
export default MessageBox