diff --git a/client/client.js b/client/client.js index e7fe1eeccc2fc34f5dddcdd07fb36c8417765674..54e46d01710a6bdcf196006b73f04d6ae33a6347 100644 --- a/client/client.js +++ b/client/client.js @@ -8,6 +8,9 @@ var reps = new Array() var sckt = {} var lastPos = {} +// drawing / div-ing +var wrapper = {} + // client fns function socketSend(type, data) { @@ -75,18 +78,18 @@ function buildMenu(tree) { li.addEventListener('click', function(evt) { var data = this.id socketSend('add module', data) - document.body.removeChild(document.getElementById('menu')) + wrapper.removeChild(document.getElementById('menu')) }) ul.appendChild(li) } menuDom.appendChild(ul) } - document.body.append(menuDom) + wrapper.append(menuDom) function rmListener(evt) { var findMenu = document.getElementById('menu') if (findMenu !== null && findMenu.id == 'menu') { - document.body.removeChild(findMenu) + wrapper.removeChild(findMenu) } } @@ -98,6 +101,86 @@ function get(data) { } +function writeEventRep(rep, type, key) { + var li = document.createElement('li') + li.innerHTML = key.toString() + li.id = rep.id + ' ' + type + ' ' + key + li.addEventListener('click', (evt) => { + var ipclk = { + rep: rep, + type: type, + name: key, + evt: evt + } + evtConnectHandler(ipclk) + }) + return li +} + +var inClkState = false +var clkOne = {} + +// ok, nearly ... but want better everything. so messy! +// need different x, y for outputs, overall better way to get position +// and consider when moving div, wtf? + +function evtConnectHandler(clk){ + if(!inClkState){ + oClk = clk + inClkState = true + var parent = clk.evt.target.offsetParent + var offset = clk.evt.target.offsetTop + var x = parseInt(clk.evt.target.offsetParent.style.left, 10) + var y = parseInt(clk.evt.target.offsetParent.style.top, 10) + clk.evt.target.offsetTop + clk.evt.target.clientHeight/2 + startBezier(x, y, clk) + } else { + inClkState = false + } +} + +function startBezier(x, y, clk){ + if(clk.type == 'output'){ + var bezier = newBezier(x, y, clk.evt.clientX, clk.evt.clientY) + console.log(bezier) + function bzMoveMod(evt){ + modifyBezier(bezier, x, y, evt.clientX, evt.clientY) + } + document.addEventListener('mousemove', bzMoveMod) + } +} + +var svgns = "http://www.w3.org/2000/svg"; +var svg = {} + +function newBezier(x1, y1, x2, y2) { + var bz = document.createElementNS(svgns, 'path') + bz.style.stroke = '#000' + bz.style.fill = 'none' + bz.style.strokeWidth = '2px' + var bl = Math.sqrt(Math.pow((x1 - x2), 2) + Math.pow((y1 - y2), 2)) * 0.4 + var ps = 'M ' + x1 + ' ' + y1 + ' C ' + (x1 + bl) + ' ' + y1 + var pe = ' ' + (x2 - bl) + ' ' + y2 + ' ' + x2 + ' ' + y2 + bz.setAttribute('d', ps + pe) + svg.appendChild(bz) + + return bz +} + +function modifyBezier(bz, x1, y1, x2, y2) { + var bl = Math.sqrt(Math.pow((x1 - x2), 2) + Math.pow((y1 - y2), 2)) * 0.4 + var ps = 'M ' + x1 + ' ' + y1 + ' C ' + (x1 + bl) + ' ' + y1 + var pe = ' ' + (x2 - bl) + ' ' + y2 + ' ' + x2 + ' ' + y2 + bz.setAttribute('d', ps + pe) +} + +/* +var crv = {} + +document.addEventListener('mousemove', function(evt) { + modifyBezier(crv, 0, 0, evt.pageX, evt.pageY) +}) +*/ + // write html from json representation function addRep(rep) { // a div to locate it @@ -147,28 +230,17 @@ function addRep(rep) { var inElem = document.createElement('div') inElem.className = 'inputs' for (ip in rep.inputs) { - var li = document.createElement('li') - li.innerHTML = ip.toString() - li.id = ip.toString() - li.addEventListener('click', function(evt) { - console.log('in clk') - }) + var li = writeEventRep(rep, 'input', ip) inElem.appendChild(li) } var outElem = document.createElement('div') outElem.className = 'outputs' for (op in rep.outputs) { - var li = document.createElement('li') - li.innerHTML = op.toString() - li.id = op.toString() - li.addEventListener('click', function(evt) { - console.log('out clk') - }) + var li = writeEventRep(rep, 'output', op) outElem.appendChild(li) } - // now we'll append our objects to the top level container domElem.appendChild(inElem) domElem.appendChild(outElem) @@ -201,7 +273,7 @@ function addRep(rep) { rep.ui.domElem = domElem reps.push(rep) - document.body.append(rep.ui.domElem) + wrapper.appendChild(rep.ui.domElem) } function newState(rep) { @@ -216,6 +288,19 @@ function newState(rep) { // init & hookup window.onload = function() { + svg = document.createElementNS(svgns, 'svg') + svg.setAttribute('width', '100%') + svg.setAttribute('height', '100%') + document.body.appendChild(svg) + + wrapper = document.createElement('div') + wrapper.id = 'wrapper' + document.body.append(wrapper) + + crv = newBezier(10, 10, 100, 100) + + + const socket = new WebSocket('ws://localhost:8081') socket.onopen = function(evt) { diff --git a/client/style.css b/client/style.css index 487e8730f7e21eb4be98005d45ac26c244244348..e1343170605436b67a8a2ddd9d5dfe34715f8b70 100644 --- a/client/style.css +++ b/client/style.css @@ -7,7 +7,7 @@ body { .block { width: auto; position: absolute; - padding: 3px; + padding: 0px; padding-bottom: 23px; background-color: #303030; } @@ -21,9 +21,9 @@ body { } .inputs { - width: 55px; + width: 58px; float: left; - padding-left: 5px; + margin-left: 2px; font-size: 11px; background-color: #1a1a1a; color: #eee; @@ -38,9 +38,9 @@ body { } .outputs { - width: 55px; + width: 58px; float: right; - padding-right: 5px; + margin-right: 2px; text-align: right; font-size: 11px; background-color: #1a1a1a; @@ -54,13 +54,20 @@ body { ul { list-style-type: none; color: #eee; - padding: 7px 0 7px; + padding: 7px 0 7px 0; } li { list-style-type: none; color: #eee; - padding: 7px 0 7px; + padding: 7px 5px 6px 5px; + border-bottom: 1px; + border-bottom-style: solid; + border-color: #303030; +} + +li:hover{ + background-color: #000; } #menu {