/* -*- Mode: js2; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* vim: set et sw=2 ts=2: */ /* function createNode() { var node = new Node(); node.id = 42; node.dump = function() { alert(this.id); } } */ function getNode(subscribeid, id) { } function updateNode(subscribeid, id, name, value) { } function getBoard(subscribeid) { var board = document.getElementById("board_" + subscribeid); if(!board) { board = document.createElement("div"); board.name = "board"; board.setAttribute("class", "board"); board.id = "board_" + subscribeid; boards.appendChild(board); } return board; } ////////////////////////////////////////////////////// ////////////////////////////////////////////////////// function clear() { document.getElementById("input_data").value = ""; } function deleteNode(id) { remove(id); } function getElementAfter(e) { var element_after = null; var min_y_diff = 9999999999999; for(i = 0; i < e.target.children.length; ++i) { if(e.target.children[i].className != "node") // Only look at node elements { continue; } var y_diff = e.target.children[i].getBoundingClientRect().y - e.y; if(y_diff > 0 && y_diff < min_y_diff) { element_after = e.target.children[i]; min_y_diff = y_diff; } } return element_after; } function drag(target, e) { e.dataTransfer.setData('id', target.id); e.stopPropagation(); // <--- this fixes the drag target problem update(idFromStr(target.id), "dragged", "true"); } function dragenter(e) { e.target.style.backgroundColor = "#646588"; last_over = e.target; } var last_after = null; function dragover(e) { e.preventDefault(); var after = getElementAfter(e); if(last_after != null) { last_after.style.borderColor = "black"; } after.style.borderColor = "red black black black"; last_after = after; } function dragleave(e) { e.target.style.backgroundColor = "#aaa"; } function dragEnd(e) { e.target.style.backgroundColor = "#aaa"; if(last_after != null) { last_after.style.borderColor = "black"; last_after = null; } if(last_over != null) { last_over.style.backgroundColor = "#aaa"; last_over = null; } e.preventDefault(); e.stopPropagation(); // FIXME: This doesn't seem to work in Chromium 65 var id = e.dataTransfer.getData('id'); update(idFromStr(id), "dragged", "false"); } function drop(e) { var id = e.dataTransfer.getData('id'); update(idFromStr(id), "dragged", "false"); // Prevent dropping on item itself if(id == e.target.id) { return; } var before_id = -1; var element_after = getElementAfter(e); if(element_after != null) { before_id = idFromStr(element_after.id); } move(idFromStr(id), idFromStr(e.target.id), before_id); } function subscribeMe(target, e) { e.stopPropagation(); subscribe(target.nodeid); } function unsubscribeMe(target, e) { e.stopPropagation(); unsubscribe(target.nodeid); } function showHideChildren(target, e) { e.stopPropagation(); updateid = idFromStr(target.id); if(target.style.backgroundColor != "red") { target.style.backgroundColor = "red"; for(i = 1; i < target.childNodes.length; i++) { target.childNodes[i].style.display = "none"; } } else { target.style.backgroundColor = "#aaa"; for(i = 1; i < target.childNodes.length; i++) { target.childNodes[i].style.display = "block"; } } } function node_submit() { var data = document.getElementById("input_node_data"); transmit(data.value); data.value = ""; } function node_submit_KeyUpHandler(target, e) { if(e.which == 13) { // enter node_submit(); } } // // Butt ugly.. but hey! it works... // var updateid; var divtxt; var oldtxt; var oldtitle; function onKeyUpHandler(target, e) { if(e.which == 13) { // enter divtxt.removeChild(target); oldtxt.nodeValue = 'updating...'; update(updateid, "title", target.value); } if(e.which == 27) { // escape divtxt.removeChild(target); oldtxt.nodeValue = oldtitle; } } function onLostFocusHandler(target, e) { if(target.value == oldtitle) { divtxt.removeChild(target); oldtxt.nodeValue = oldtitle; } } function editTitle(target, e) { e.stopPropagation(); updateid = idFromStr(target.id); if(updateid < 10) { return; } var inp = document.createElement("input"); var txtdiv = document.getElementById(target.id + "_txt"); divtxt = txtdiv; oldtxt = txtdiv.firstChild; oldtitle = oldtxt.nodeValue; oldtxt.nodeValue = ""; inp.setAttribute("onkeyup", "onKeyUpHandler(this, event)"); inp.setAttribute("onblur", "onLostFocusHandler(this, event)"); inp.setAttribute("style", "border: inherit; padding: inherit; margin: inherit; background: inherit;"); inp.value = oldtitle; lineedit = inp; txtdiv.appendChild(inp); inp.focus(); }