Skip to content

Commit 5a7c509

Browse files
committed
refactor of drawSvg + updateSvg, drag individual anchors, week15
1 parent 71705a9 commit 5a7c509

12 files changed

Lines changed: 297 additions & 70 deletions

assets/css/main.css

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ body {
1717
display: flex;
1818
width: fit-content;
1919
flex-direction: column;
20+
position: relative;
2021
}
2122

2223
.paletteMark canvas {
@@ -983,4 +984,17 @@ p, h3, h4, h5, img {
983984
.dataColumn {
984985
font-weight: 600;
985986
text-decoration: underline;
987+
}
988+
989+
.markAnchorSvg {
990+
/*background-color: rgba(255,10,10,0.7);*/
991+
position: absolute;
992+
top: 18px;
993+
pointer-events: none;
994+
995+
}
996+
997+
.markAnchorSvg circle{
998+
pointer-events: all;
999+
cursor: grab;
9861000
}

assets/js/AllPalettes.js

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@ let palSources = [
55
"sudoku_level",
66
"sudoku_hint",
77
"sudoku_mistake",
8-
"week26_circle"
9-
8+
"week26_circle",
9+
"week15_squares",
10+
"week15_RightSymbol",
11+
"week15_InnerCircle",
1012
]
1113

1214
const prevW = 160
@@ -58,8 +60,13 @@ async function initAllPalette() {
5860
canContainer.style.height = prevH + "px"
5961

6062
for (let j = n - 1; j > -1; j--) {
63+
let b64 = allMarks[MarkNames[j]].source
64+
if (allMarks[MarkNames[j]].source === undefined) {
65+
b64 = allMarks[MarkNames[j]].proto.canvas
66+
allMarks[MarkNames[j]].source = allMarks[MarkNames[j]].proto.canvas
67+
}
6168

62-
let tcan = cloneCanvas(allMarks[MarkNames[j]].source)
69+
let tcan = cloneCanvas(b64)
6370
tcan.style.width = `${subW}px`
6471
tcan.style.height = `${subH}px`
6572

assets/js/collageGrid.js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -281,8 +281,6 @@ function makeCollageFromData(palettes, order, marks, row, color = undefined, siz
281281
toOffX = selfAnchor.rx * sourceW
282282
toOffY = selfAnchor.ry * sourceH
283283

284-
console.log(toOffX * sourceW,toOffY)
285-
286284
tcon.drawImage(can,
287285
offX - toOffX,
288286
offY - toOffY,

assets/js/dragStuff.js

Lines changed: 33 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ function dragElement(elmnt) {
2323
}
2424

2525

26-
2726
const rect = elmnt.getBoundingClientRect();
2827

2928
offsetX = e.clientX - rect.left;
@@ -146,16 +145,16 @@ function dragElement2(elmnt) {
146145
console.log(id);
147146
console.log(selectedDataColumn);
148147

149-
megaGlyph[id].dataColumn = selectedDataColumn
148+
megaGlyph[id].dataColumn = selectedDataColumn
150149

151-
dataBinding[id] = selectedDataColumn
150+
dataBinding[id] = selectedDataColumn
152151

153-
drawSvg()
152+
updateSvg()
154153

155154

156155
}
157156

158-
selectedDataColumn = ""
157+
selectedDataColumn = ""
159158

160159

161160
}
@@ -168,21 +167,40 @@ function dropPalette(e, elmnt) {
168167

169168
let num = +elmnt.getAttribute("number")
170169
let name = elmnt.getAttribute("name")
171-
console.log(num);
172170
let tpal = allPalettes[num]
173171

172+
173+
if (megaPalettes[name] !== undefined) {
174+
name += Object.keys(megaPalettes[name]).length
175+
}
174176
megaPalettes[name] = tpal
175177

176178
fillPalette()
177179

178180
let tPalCont = document.getElementById("paletteCont")
179181
tPalCont.classList.remove("draggedover")
182+
180183
} else if (e.target.matches("#composition")) {
181184

182185

183186
let num = +elmnt.getAttribute("number")
184187
let name = elmnt.getAttribute("name")
188+
189+
if (megaPalettes[name] !== undefined) {
190+
name += Object.keys(megaPalettes).length
191+
}
192+
193+
let tflag = false
194+
195+
if( Object.keys(megaPalettes).length === 0 ) {
196+
tflag = true
197+
}
198+
185199
megaPalettes[name] = allPalettes[num]
200+
201+
dataBinding[name] = ""
202+
203+
186204
addPaletteInfoToCollage(allPalettes[num], name)
187205

188206

@@ -198,9 +216,15 @@ function dropPalette(e, elmnt) {
198216
}
199217
}
200218
megaGlyph[name].color = makeColorScale(name, "")
201-
makeMarkTree()
219+
// makeMarkTree()
202220

203221
displayPalette(name)
222+
223+
if (tflag) {
224+
tdrawRefactor()
225+
} else {
226+
updateSvg()
227+
}
204228
}
205229
}
206230

@@ -235,7 +259,7 @@ function dropCanvas(e, elmnt) {
235259

236260
}
237261

238-
drawSvg()
262+
updateSvg()
239263

240264
}
241265
}
@@ -349,6 +373,7 @@ function dragged(event, d) {
349373
function dragended(event, d) {
350374
// d3.select(this).attr("stroke", null);
351375
// let elem = d3.select(this)
376+
updateSvg()
352377
}
353378

354379

assets/js/main.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ let currImg;
22
let tsaveim
33
let viewDim = []
44
let sampleData = []
5-
const totalExamples = 28
5+
const totalExamples = 50
66
let categories = {
77
default: {
88
name: "default",
@@ -166,7 +166,8 @@ async function init() {
166166
// await loadDataset("assets/tempData/datasets/week26.csv")
167167

168168
chartDataset.data = fakeWeek26()
169-
drawSvg()
169+
// drawSvg()
170+
// tdrawRefactor()
170171
fillSidePanel()
171172
// document.getElementById("jsonLoader").addEventListener("change", importFromJson);
172173
document.getElementById("imgLoader").addEventListener("change", importImg);

assets/js/newCollage.js

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -259,14 +259,19 @@ function hidePalette() {
259259

260260
function delPalette() {
261261
console.log(selectedPalette)
262-
delete megaPalettes[selectedPalette]
263-
delete megaGlyph[selectedPalette]
264-
delete dataBinding[selectedPalette]
265-
d3.select("#collage-"+selectedPalette).remove()
266-
drawSvg()
262+
delete megaPalettes[selectedPalette]
263+
delete megaGlyph[selectedPalette]
264+
delete dataBinding[selectedPalette]
265+
d3.select("#collage-" + selectedPalette).remove()
266+
updateSvg()
267267
hidePalette()
268268
}
269269

270+
271+
function newSavePalette() {
272+
savePalette2(selectedPalette)
273+
}
274+
270275
function displayPalette(name) {
271276

272277
selectedPalette = name
@@ -332,9 +337,6 @@ function displayPalette(name) {
332337
tdiv_mark.setAttribute("key", name)
333338

334339
tdiv_mark.onclick = function (e) {
335-
336-
console.log("dasdasdadasdas dasd asdad asd ");
337-
338340
if (mode !== "anchor") {
339341
if (e.target.matches("canvas")) {
340342
editPalette(this)
@@ -393,6 +395,7 @@ function setAnchorOnAllMarks(name, x, y, from) {
393395
ry: y / 60,
394396
}
395397
}
398+
d3.selectAll(".markAnchorSvg circle").transition().duration(60).attr("cx", x).attr("cy", y)
396399
}
397400

398401

assets/js/paletteHandler.js

Lines changed: 70 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
14811510
function 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

15641595
function 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

Comments
 (0)