@@ -281,7 +281,7 @@ function fillPalette(reset = false) {
281281 }
282282 // populateSelect()
283283 // updateLink2Palette()
284- drawSvg ( )
284+ updateSvg ( )
285285}
286286
287287
@@ -830,7 +830,7 @@ function savePalette() {
830830
831831 // fillPalette()
832832
833- drawSvg ( )
833+ updateSvg ( )
834834}
835835
836836
@@ -1430,54 +1430,83 @@ function makeRangeMark(key, tdiv, value, typesDisplay) {
14301430 for ( const [ name , value ] of Object . entries ( marks ) ) {
14311431 let tmark = makeSingleMark ( key , name , "range" , value . proto . canvas )
14321432 tdiv . appendChild ( tmark )
1433+ let tcan = tmark . lastChild ;
1434+ let trect = tcan . getBoundingClientRect ( )
1435+
1436+ let tsvg = document . createElementNS ( "http://www.w3.org/2000/svg" , "svg" ) ;
1437+ tmark . appendChild ( tsvg )
1438+ tsvg = d3 . select ( tsvg )
1439+
1440+ tsvg
1441+ . attr ( "id" , "svg" + key )
1442+ . attr ( "class" , "markAnchorSvg" )
1443+ . attr ( "viewBox" , `0 0 ${ trect . width } ${ trect . height } ` )
1444+ . attr ( "width" , trect . width )
1445+ . attr ( "height" , trect . height )
1446+
1447+
1448+ if ( value . proto . anchors ) {
1449+ for ( const [ id , coords ] of Object . entries ( value . proto . anchors ) ) {
1450+ tsvg . append ( "circle" )
1451+ . attr ( "cx" , trect . width * coords . rx )
1452+ . attr ( "cy" , trect . height * coords . ry )
1453+ . attr ( "num" , id )
1454+ . attr ( "palette" , key )
1455+ . attr ( "name" , name )
1456+ . attr ( "r" , "5" )
1457+ . call ( d3 . drag ( )
1458+ . on ( "start" , nodeDragst )
1459+ . on ( "drag" , nodeDragged )
1460+ . on ( "end" , nodeDragend ) )
1461+ }
1462+
1463+ }
1464+
14331465 }
14341466
1435- /* for ( let i = 0; i < tnb; i++) {
1467+ let moreCan = document . createElement ( "div" )
14361468
1469+ moreCan . innerHTML = ` <img id="palettePlusMark" src="assets/images/buttons/plus.png" class="buttonImg"
1470+ style=";margin-top: 41px;width: 25px; margin-left: 5px;cursor: pointer" onclick="addACan(this,'${ key } ')">`
1471+ tdiv . appendChild ( moreCan )
1472+ }
14371473
14381474
1475+ function nodeDragst ( ) {
14391476
1477+ }
14401478
1441- const tdiv_mark = document.createElement("div")
1442- tdiv_mark.id = "mark_" + key
1443- tdiv_mark.className = "paletteMark"
1444- tdiv_mark.setAttribute("number", "" + i)
1445- tdiv_mark.setAttribute("key", key)
1446- tdiv_mark.setAttribute("type", "range")
1447- tdiv_mark.innerHTML = "<input type='text' value='mark" + i + "' class='paletteMarkName'>"
1448- if (marks[i]) {
1449- tdiv_mark.append(value[i].proto.canvas)
1450- } else {
1451- const tcan = document.createElement("canvas")
1452- tcan.width = 60
1453- tcan.height = 60
1454- tdiv_mark.append(tcan)
1455- marks[i] = {
1456- value: i,
1457- type: "fake",
1458- proto: {canvas: tcan, corners: [[0, 0], [tcan.width, tcan.height]]},
1459- }
1460- }
1461- tdiv_mark.onclick = function (e) {
1479+ function nodeDragged ( event ) {
1480+ let elem = d3 . select ( this )
1481+ let htmlSvg = elem . node ( ) . parentElement
1482+ let svg = d3 . select ( htmlSvg )
14621483
1463- if (mode !== "anchor") {
1464- editPalette(this)
1465- } else {
1466- //TODO: Set for CATA and other primitive
1467- setAnchorOnProto(e, this)
1468- }
1469- }*/
1470- // tdiv.appendChild(tdiv_mark)
1484+ let x = clampVal ( event . x , 0 , htmlSvg . getAttribute ( "width" ) ) ;
1485+ let y = clampVal ( event . y , 0 , htmlSvg . getAttribute ( "height" ) ) ;
1486+
1487+ elem . attr ( "cx" , x )
1488+ elem . attr ( "cy" , y )
1489+
1490+ let pal = elem . attr ( "palette" )
1491+ let mark = elem . attr ( "name" )
1492+ let num = elem . attr ( "num" )
1493+
1494+
1495+
1496+ megaPalettes [ pal ] . encodings . range . marks [ mark ] . proto . anchors [ num ] . x = x
1497+ megaPalettes [ pal ] . encodings . range . marks [ mark ] . proto . anchors [ num ] . y = y
1498+ megaPalettes [ pal ] . encodings . range . marks [ mark ] . proto . anchors [ num ] . rx = x / htmlSvg . getAttribute ( "width" )
1499+ megaPalettes [ pal ] . encodings . range . marks [ mark ] . proto . anchors [ num ] . ry = y / htmlSvg . getAttribute ( "height" )
14711500
14721501
1473- let moreCan = document . createElement ( "div" )
14741502
1475- moreCan . innerHTML = ` <img id="palettePlusMark" src="assets/images/buttons/plus.png" class="buttonImg" style=";margin-top: 41px;
1476- width: 25px;
1477- margin-left: 5px;cursor: pointer" onclick="addACan(this,'${ key } ')">`
1478- tdiv . appendChild ( moreCan )
14791503}
14801504
1505+ function nodeDragend ( ) {
1506+ updateSvg ( )
1507+ }
1508+
1509+
14811510function addACan ( elem , key , img = undefined ) {
14821511 let len = Object . keys ( megaPalettes [ key ] . encodings . range . marks ) . length
14831512
@@ -1538,10 +1567,12 @@ function makeSingleMark(key, label, type, can = undefined) {
15381567 */
15391568
15401569 tdiv_mark . innerHTML = `${ mess }
1541- <canvas id='${ "canvas_" + key } ' style='width: 60px;height: 60px'>`
1570+ <canvas id='${ "canvas_" + key } ' style='width: 60px;height: 60px'></canvas> `
15421571 } else {
15431572 tdiv_mark . innerHTML = mess
15441573 tdiv_mark . appendChild ( can )
1574+
1575+
15451576 can . id = `${ "canvas_" + key } `
15461577
15471578 }
@@ -1562,15 +1593,14 @@ function makeSingleMark(key, label, type, can = undefined) {
15621593}
15631594
15641595function renameRow ( elem , key ) {
1565-
15661596 let name = elem . value
15671597
1568-
15691598 document . getElementById ( "exportPaletteBtn_" + key ) . setAttribute ( "name" , name )
15701599
15711600 if ( name !== "" && ! palSources . includes ( key ) ) {
15721601 megaPalettes [ name ] = megaPalettes [ key ]
15731602 delete megaPalettes [ key ]
1603+ selectedPalette = name
15741604 }
15751605
15761606
0 commit comments