Skip to content
Snippets Groups Projects
Select Git revision
  • 0141c582516c440e8fd39139bf75ce094290ca38
  • master default protected
2 results

assemblerFirstTrial.mp4

Blame
  • 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