Remove 'reveal pattern' from counter module

This commit is contained in:
2024-04-27 12:34:07 -07:00
parent 25c74d9a8e
commit b88945ced6
2 changed files with 116 additions and 128 deletions

View File

@@ -30,116 +30,105 @@ function getCounterAndClones(svg, counter) {
return svg.querySelectorAll(`.counter${dataSelector(counter)}`);
}
export default function (svg, board) {
function getCounter(selected) {
return svg.querySelector(`.counter${dataSelector(selected)}:not(.clone)`);
}
function getTrace(counter) {
return svg.querySelector(traceSelector(counter));
}
function place(selected, cell) {
let points,
counterNodeList = getCounterAndClones(svg, selected);
if (counterNodeList.length > 0 && selected.parentElement.hasAttribute('data-x')) {
let trace = svg.querySelector(traceSelector(selected));
let prevCoords = [
selected.parentElement.dataset.x,
selected.parentElement.parentElement.dataset.y
]
let clone = selected.cloneNode(true);
clone.classList.remove(selectedClass);
clone.classList.add('clone');
selected.dataset.previous = prevCoords;
selected.parentElement.appendChild(clone);
cell.appendChild(selected);
selected.childNodes.forEach(n => {
if (n.classList.contains('removed')) {
n.remove();
} else if ('preexisting' in n.dataset) {
delete n.dataset.preexisting;
}
});
let previous = getCellPosition(clone.parentElement),
current = getCellPosition(selected.parentElement);
if (!trace) {
trace = document.createElementNS(svgns, 'polyline');
points = `${previous.x},${previous.y} ${current.x},${current.y}`;
trace.dataset.number = selected.dataset.number;
trace.dataset.allegiance = selected.dataset.allegiance;
trace.classList.add('move-trace');
board.prepend(trace);
} else {
points = `${trace.getAttribute('points')} ${current.x},${current.y}`;
}
trace.setAttributeNS(null, 'points', points);
} else {
selected.removeAttribute('data-x');
cell.appendChild(selected);
}
}
function removeClones(counter) {
getClones(svg, counter).forEach(c => c.remove());
}
function endMove(counter) {
const trace = svg.querySelector(traceSelector(counter)),
proneCounter = counter.querySelector('[href="#counter-prone"]');
if (trace) {
trace.remove();
}
delete counter.dataset.previous;
if (proneCounter) {
proneCounter.dataset.preexisting = '';
}
removeClones(counter);
}
function hasProne(counter) {
return !!counter.querySelector('[href="#counter-prone"]');
}
function toggleProne(counter) {
let proneCounter = counter.querySelector('[href="#counter-prone"]');
if (!proneCounter) {
proneCounter = document.createElementNS(svgns, 'use');
proneCounter.setAttributeNS(null, 'href', '#counter-prone');
counter.appendChild(proneCounter);
} else if ('preexisting' in proneCounter.dataset) {
proneCounter.classList.toggle('removed');
} else {
proneCounter.remove();
}
}
return {
get selectedClass() {
return selectedClass;
},
endMove,
getCounter,
hasProne,
toggleProne,
place,
getTrace,
removeClones
};
export function getCounter(svg, selected) {
return svg.querySelector(`.counter${dataSelector(selected)}:not(.clone)`);
}
export function getTrace(svg, counter) {
return svg.querySelector(traceSelector(counter));
}
export function place(svg, selected, cell) {
let points,
counterNodeList = getCounterAndClones(svg, selected);
if (counterNodeList.length > 0 && selected.parentElement.hasAttribute('data-x')) {
let trace = svg.querySelector(traceSelector(selected));
let prevCoords = [
selected.parentElement.dataset.x,
selected.parentElement.parentElement.dataset.y
]
let clone = selected.cloneNode(true);
clone.classList.remove(selectedClass);
clone.classList.add('clone');
selected.dataset.previous = prevCoords;
selected.parentElement.appendChild(clone);
cell.appendChild(selected);
selected.childNodes.forEach(n => {
if (n.classList.contains('removed')) {
n.remove();
} else if ('preexisting' in n.dataset) {
delete n.dataset.preexisting;
}
});
let previous = getCellPosition(clone.parentElement),
current = getCellPosition(selected.parentElement);
if (!trace) {
trace = document.createElementNS(svgns, 'polyline');
points = `${previous.x},${previous.y} ${current.x},${current.y}`;
trace.dataset.number = selected.dataset.number;
trace.dataset.allegiance = selected.dataset.allegiance;
trace.classList.add('move-trace');
svg.querySelector('.board').prepend(trace);
} else {
points = `${trace.getAttribute('points')} ${current.x},${current.y}`;
}
trace.setAttributeNS(null, 'points', points);
} else {
selected.removeAttribute('data-x');
cell.appendChild(selected);
}
}
export function removeClones(svg, counter) {
getClones(svg, counter).forEach(c => c.remove());
}
export function endMove(svg, counter) {
const trace = svg.querySelector(traceSelector(counter)),
proneCounter = counter.querySelector('[href="#counter-prone"]');
if (trace) {
trace.remove();
}
delete counter.dataset.previous;
if (proneCounter) {
proneCounter.dataset.preexisting = '';
}
removeClones(counter);
}
export function hasProne(counter) {
return !!counter.querySelector('[href="#counter-prone"]');
}
export function toggleProne(counter) {
let proneCounter = counter.querySelector('[href="#counter-prone"]');
if (!proneCounter) {
proneCounter = document.createElementNS(svgns, 'use');
proneCounter.setAttributeNS(null, 'href', '#counter-prone');
counter.appendChild(proneCounter);
} else if ('preexisting' in proneCounter.dataset) {
proneCounter.classList.toggle('removed');
} else {
proneCounter.remove();
}
}
export function getSelectedClass() {
return selectedClass;
}