diff --git a/README.md b/README.md index 20b0662c832acbffaae3613ea05026118e07fd4b..9d8ebd272b06bd469a75c7f4a12110d61b4935ee 100644 --- a/README.md +++ b/README.md @@ -14,13 +14,12 @@ Native Cuttlefish 'Hunks' are given access to a DOM/div element, making them nic # Scratch -- .invert +- rewrite small policies after refresh as .invert() call to .def ? or .insideout() -- policies, recepies etc - - apres refresh, run expansions - - def.invert (1) explodes and then (2) wraps inside, outside, to left-of and right-of farthest-right connections ... +- native hunks add, button add, to .deg ... and then move moves them all about ... or just cases for buttons and natives ... + +- views get a 'green' header like inputs / outputs ... and we do .wrap(view.hunk.dom) on these -- add / delete / rename to title again (above) - link expansion button, a button - side panel exists on another plane / can collapse / diff --git a/hunks/view.js b/hunks/view.js index e0653fc74fa5fb6af69d60c9f98232111a688345..2266bf669ba3078f591753d0ffb251192192ea23 100644 --- a/hunks/view.js +++ b/hunks/view.js @@ -453,7 +453,7 @@ function View() { let replaceDef = (spec) => { let od = defs[spec.ind] // as a rule, when we replace defs, we unhook everything. - // the manager (in its wisdom) is responsible for following up by sending us + // the manager is responsible for following up by sending us // links that are still alive, // console.log('the od', od) // so first rm those links (this won't properly be tested until program loading, i'd bet) @@ -776,35 +776,16 @@ function View() { } } } - this.drawLinks() // we are done adding things, have all defs in the dom // now we can run policies, layout etc // here, catching links and views for(let def of defs){ if(def.type === 'view'){ - def.explode() - // now let's see where the view is connected .. - let cni = def.inputs[0].connections[0] - if(cni){ - let pc = dt.readTransform(cni.de.parentNode) - def.moveTo(pc.x + 200, pc.y - 20, 1, 'inputs') - } else { - console.error('refresh, view, no connection, odd') - } - // and outputs, - let cno = def.outputs[0].connections[0] - if(cno){ - let pc = dt.readTransform(cno.de.parentNode) - def.moveTo(pc.x - 200, pc.y - 20, 1, 'outputs') - // and the core, set above the outputs .. - def.moveTo(pc.x - 200, pc.y - 100, 1) - } else { - console.error('refresh, view, no connection, odd') - } - // finally, - this.drawLinks() + def.unwrap() } } + // finally + this.drawLinks() msgbox.write(`~ view refresh complete ~`) } }).catch((err) => { @@ -938,6 +919,7 @@ function View() { let viewDe = $(viewDef.de).find('.sleeper').get(0) $(linkDef.de).append(viewDe) $(viewDe).removeClass('sleeper') + // ok, and then .wrap() linkDef.setPlaneWidth(1200) // hook it 2 ur veins console.log('adding one link...') @@ -959,6 +941,8 @@ function View() { }) resolve(viewDef) }) + }).catch((err) => { + console.log('err during link expansion', err) }) } diff --git a/style.css b/style.css index fb50828c57165c1b14228b63f8bdf4f3e6a982cf..94caca1397eb675272c50c2b4168a4d3acecd818 100644 --- a/style.css +++ b/style.css @@ -133,7 +133,7 @@ body { /* is title and state */ .defcore { - width: 300px; + width: 275px; overflow: hidden; position: absolute; padding: 0px; @@ -161,6 +161,23 @@ body { cursor: grabbing; } +.defbuttons { + position: absolute; + height: 30px; +} + +.defbutton { + padding: 5px; + width: 35px; + color: white; + background-color: green; +} + +.defbutton:hover{ + cursor: pointer; + background-color: teal; +} + .inputs { position:absolute; width: 117px; diff --git a/view/vdef.js b/view/vdef.js index a8ec0a62aaee9c0124ba87edd0b50b0cf3c43203..f8edadc23d4d6327c15a0b416b3676f1fc8454ec 100644 --- a/view/vdef.js +++ b/view/vdef.js @@ -193,17 +193,25 @@ function HunkDefinition(spec, view, dt, debug) { s: scale }) } - if (Object.keys(this.deg).length > 3) console.error('unaccounted for deg objects at moveTo') + // if (Object.keys(this.deg).length > 3) console.error('unaccounted for deg objects at moveTo') } else { if (item === 'outputs') { if (this.deg.outputs) { - dt.writeTransform(this.deg.outputs, {x: x, y: y, s: 1}) + dt.writeTransform(this.deg.outputs, { + x: x, + y: y, + s: 1 + }) } else { console.error('no outputs at move to') } - } else if (item === 'inputs'){ + } else if (item === 'inputs') { if (this.deg.inputs) { - dt.writeTransform(this.deg.inputs, {x: x, y: y, s: 1}) + dt.writeTransform(this.deg.inputs, { + x: x, + y: y, + s: 1 + }) } else { console.error('no inputs at move to') } @@ -215,6 +223,19 @@ function HunkDefinition(spec, view, dt, debug) { }) } } + this.checkCollection() + } + + // look for and collect any stray divs that are hooked 2 our .deg + this.checkCollection = () => { + if (this.deg.buttons) { + let ct = dt.readTransform(this.deg.core) + dt.writeTransform(this.deg.buttons, { + x: ct.x + this.deg.core.clientWidth - this.deg.buttons.clientWidth, + y: ct.y - this.deg.buttons.clientHeight - 10, + s: 1 + }) + } } this.remove = () => { @@ -236,6 +257,8 @@ function HunkDefinition(spec, view, dt, debug) { } this.explode = () => { + if (this.isExploded) return true + // or this.isExploded = true // add listeners for io // coherent hover @@ -313,24 +336,57 @@ function HunkDefinition(spec, view, dt, debug) { } } - /* --------------------------- ---------------------------- */ - /* --------------------- SOME ARE UNIQUE --------------------- */ - /* --------------------------- ---------------------------- */ - + this.unwrap = () => { + this.explode() + // now let's see where the view is connected .. + let cni = this.inputs[0].connections[0] + if (cni) { + let pc = dt.readTransform(cni.de.parentNode) + this.moveTo(pc.x + 200, pc.y - 20, 1, 'inputs') + } else { + console.error('refresh, view, no connection, odd') + } + // and outputs, + let cno = this.outputs[0].connections[0] + if (cno) { + let pc = dt.readTransform(cno.de.parentNode) + this.moveTo(pc.x - 200, pc.y - 20, 1, 'outputs') + // and the core, set above the outputs .. + this.moveTo(pc.x - 200, pc.y - 100, 1) + } else { + console.error('refresh, view, no connection, odd') + } + } - this.addResizers = () => { + // adden em + this.addButton = (text, callback) => { + let element = $(`<div>${text}</div>`).addClass('defbutton').get(0) + $(element).on('click', callback) + if (this.deg.buttons) { + $(this.deg.buttons).append(element) + } else { + this.deg.buttons = $('<div>').addClass('defbuttons').get(0) + $(view.plane).append(this.deg.buttons) + $(this.deg.buttons).append(element) + } + this.checkCollection() + } + this.removeButton = (text) => { + // find by contents, rm, } + /* --------------------------- ---------------------------- */ + /* --------------------- SOME ARE UNIQUE --------------------- */ + /* --------------------------- ---------------------------- */ + // set width, this.setPlaneWidth = (num) => { this.de.style.width = num + 'px' } - if (this.type == 'link') { - console.log('a link') - let open = $('<li style="text-align: center;">~ expand view ~</li>').get(0) - $(open).on('click', (evt) => { + if (this.type === 'link') { + this.addButton('expand view', (evt) => { view.expandLink(this).then((view) => { $(open).text('~ collapse view ~') $(open).off('click') @@ -340,7 +396,6 @@ function HunkDefinition(spec, view, dt, debug) { }) }) }) - $(this.de).prepend(open) } if (debug) console.log('HunkDefinition', this)