Logo  

Home - Old Man Programmer

Displaying webapps/vt100/keyboard.js

function type(e)
{
  if (e.charCode) {
    var ch = String.fromCharCode(e.charCode);
    console.log(ch);
    terminal.addstr(ch);
  }
}

var keymap = {
  ArrowUp : "\033[A", ArrowDown : "\033[B", ArrowRight : "\033[C", ArrowLeft: "\033[D",
  Backspace : "\b", Tab : "\t", Escape : "\033"
};

function specialtype(e) {
  var k = keymap[e.key];
  if (k) {
//    console.log("special " + k);
    terminal.addstr(k);
    e.preventDefault();
  } else
    console.log("uncaught: " + e.key);
  e.stopPropagation();
}

function stopselect(e) {
  window.alert("Stopping select");
  e.preventDefault();
  e.stopPropagation();
  return false;
}

function docopy(e) {
  const selection = document.getSelection();
  var src = selection.toString();
  var dst = "";
  for(var i=0; i < src.length; i++) {
    if (src[i] == '\t') continue;
    dst += src[i];
  }
  event.clipboardData.setData('text/plain',dst);
  e.preventDefault();
}

function copySelection() {
  var sel = document.getSelection();
  var tr = sel.getRangeAt(0).cloneContents().children;
  console.log(tr);
  var s = "";
  if (tr[0].tagName == "TR") {
    for(var r = 0; r < tr.length; r++) {
      var row = "";
      for(var c = 0; c < tr[r].cells.length; c++) {
	var ch = tr[r].cells[c].innerHTML;
	if (ch == "&nbsp;") ch = " ";
	row += ch;
      }
      var l = row.length;
      while(l > 0 && row[l-1] == ' ') l--;
      s += row.substr(0,l) + "\n";
    }
  } else { // TD's not TR's:
    for(var c = 0; c < tr.length; c++) {
      var ch = tr[c].innerHTML;
      if (ch == "&nbsp;") ch = " ";
      s += ch;
    }
  }
  var pre = document.createElement("pre");
  pre.style.position = "absolute";
  pre.style.top = "-2000px";
  pre.innerHTML = s;
  document.body.appendChild(pre);
  document.getSelection().selectAllChildren(pre);
  document.execCommand('copy');
  document.body.removeChild(pre);
}