/* -*- Mode: javascript; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* vim: set et sw=2 ts=2: */ var BrowserDetect = { init: function () { this.browser = this.searchString(this.dataBrowser) || "An unknown browser"; this.version = this.searchVersion(navigator.userAgent) || this.searchVersion(navigator.appVersion) || "an unknown version"; this.OS = this.searchString(this.dataOS) || "an unknown OS"; }, searchString: function (data) { for (var i=0;i 0 && msg.data[c - 1] != '\\') instring = !instring; if(msg.data[c] == ';' && instring == false) { idx++; msgs[idx] = ''; } if(msg.data[c] != ';' || instring == true) msgs[idx] += msg.data[c]; } f = 0; while (f < msgs.length - 1) { var msg = new Array(); instring = false; idx = 0; // strip padding and trailing whitespace. var msgstr = msgs[f].replace(/^\s+||\s+$/g,''); msg[idx] = ''; for(c = 0; c < msgstr.length; c++) { if(msgstr[c] == '"' && c > 0 && msgstr[c - 1] != '\\') { instring = !instring; continue; } if(msgstr[c] == ' ' && instring == false) { msg[idx] = msg[idx].replace("\\\\","\\").replace("\\\"","\""); idx++; msg[idx] = ''; } if(msgstr[c] != ' ' || instring == true) msg[idx] += msgstr[c]; } var observeid = msg[0]; var cmd = msg[1]; var id = msg[2]; var board = document.getElementById("board_" + observeid); if(!board) { board = document.createElement("div"); board.name = "board"; board.setAttribute("class", "board"); board.id = "board_" + observeid; boards.appendChild(board); } if(cmd == "remove") { var task = document.getElementById(createId(observeid, id)); task.parentNode.removeChild(task); } else if(cmd == "move") { var parent_id = msg[3]; var task = document.getElementById(createId(observeid, id)); if(parent_id != -1) { var parent_task = document.getElementById(createId(observeid, parent_id)); parent_task.appendChild(task); } else { board.appendChild(task); } } else if(cmd == "create") { var parent_id = msg[3]; var task = document.createElement("div"); task.name = "task"; task.setAttribute("class", "task"); task.setAttribute("ondblclick", "editTitle(this, event)"); task.setAttribute("onclick", "showHideChildren(this, event)"); task.setAttribute("ondrop", "drop(this, event)"); task.setAttribute("ondragover", "return false"); task.setAttribute("draggable", true); task.setAttribute("ondragstart", "drag(this, event)"); task.setAttribute("title", id); task.id = createId(observeid, id); var txtdiv = document.createElement("div"); txtdiv.id = createId(observeid, id) + "_txt"; var txt = document.createTextNode(""); txtdiv.appendChild(txt); task.appendChild(txtdiv); var parent_task = document.getElementById(createId(observeid, parent_id)); if(parent_task) { parent_task.appendChild(task); } else { board.appendChild(task); } } else if(cmd == "update") { var name = msg[3]; var value = msg[4]; if(name == "title") { var txtdiv = document.getElementById(createId(observeid, id) + "_txt"); txtdiv.removeChild(txtdiv.firstChild); var txt = document.createTextNode(value); txtdiv.appendChild(txt); } if(name == "colour") { var txtdiv = document.getElementById(createId(observeid, id) + "_txt"); txtdiv.style.color = value; } } f++; } } socket_task.onclose = function(){ document.getElementById("wstask_status").style.backgroundColor = "#ff4040"; document.getElementById("wstask_status").textContent = "TaskProto websocket connection CLOSED "; } } catch(exception) { alert('

Error' + exception + '

'); } function task_submit() { var data = document.getElementById("input_task_data").value; socket_task.send(data); } function clear() { document.getElementById("input_data").value = ""; } function deleteTask(id) { socket_task.send("del " + id + ";"); } function drag(target, e) { e.dataTransfer.setData('Text', target.id); e.stopPropagation(); // <--- this fixes the drag target problem } function drop(target, e) { e.preventDefault(); e.stopPropagation(); var id = e.dataTransfer.getData('Text'); var task = document.getElementById(id); socket_task.send("move " + idFromStr(id) + " " + idFromStr(target.id) + ";"); } function showHideChildren(target, e) { e.stopPropagation(); updateid = idFromStr(target.id); if(target.style.backgroundColor != "red") { target.style.backgroundColor = "red"; for(var i = 1; i < target.childNodes.length; i++) { target.childNodes[i].style.display = "none"; } } else { target.style.backgroundColor = "grey"; for(var i = 1; i < target.childNodes.length; i++) { target.childNodes[i].style.display = "block"; } } } // // 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...'; socket_task.send("update " + updateid + " \""+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(); }