Fix toggle content vis
This commit is contained in:
parent
6d57d7489b
commit
a406fa55d5
@ -7,7 +7,7 @@
|
|||||||
<g class="start-locations" data-attacker-name="liao" data-defender-name="davion">
|
<g class="start-locations" data-attacker-name="liao" data-defender-name="davion">
|
||||||
<g data-edge="north" style="--i: -2">
|
<g data-edge="north" style="--i: -2">
|
||||||
<g data-x="13">
|
<g data-x="13">
|
||||||
<g class="counter selected" data-allegiance="attacker" data-number="1">
|
<g class="counter" data-allegiance="attacker" data-number="1">
|
||||||
<use class="primary-weapon" href="counters.svg#blazer"/>
|
<use class="primary-weapon" href="counters.svg#blazer"/>
|
||||||
<use class="troop-number" href="counters.svg#number-1"/>
|
<use class="troop-number" href="counters.svg#number-1"/>
|
||||||
<use class="squad-number" href="counters.svg#number-1"/>
|
<use class="squad-number" href="counters.svg#number-1"/>
|
||||||
|
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 5.0 KiB |
150
src/index.js
150
src/index.js
@ -26,6 +26,8 @@ const mapPlaceholder = document.querySelector('.map-placeholder'),
|
|||||||
},
|
},
|
||||||
|
|
||||||
toggleContentVis = (function () {
|
toggleContentVis = (function () {
|
||||||
|
document.querySelector('#content').style.minWidth = this.checked ? '' : 0;
|
||||||
|
|
||||||
document.querySelectorAll('#content > div').forEach(div => {
|
document.querySelectorAll('#content > div').forEach(div => {
|
||||||
if (this.checked) {
|
if (this.checked) {
|
||||||
div.style.display = div.id == 'record-sheet' ? 'flex' : 'block';
|
div.style.display = div.id == 'record-sheet' ? 'flex' : 'block';
|
||||||
@ -39,52 +41,33 @@ const mapPlaceholder = document.querySelector('.map-placeholder'),
|
|||||||
|
|
||||||
let mapResourceEl = document.querySelector('object');
|
let mapResourceEl = document.querySelector('object');
|
||||||
|
|
||||||
async function requestScenario(url) {
|
async function requestResource(url) {
|
||||||
return new Promise((res, rej) => {
|
return new Promise((resolve, reject) => {
|
||||||
const request = new XMLHttpRequest();
|
const request = new XMLHttpRequest();
|
||||||
request.open('GET', url, true);
|
request.open('GET', url, true);
|
||||||
request.responseType = 'document';
|
request.responseType = 'document';
|
||||||
|
|
||||||
request.onload = function() {
|
request.onload = function() {
|
||||||
if (request.status === 200) {
|
if (request.status === 200) {
|
||||||
res(request.response);
|
resolve(request.response);
|
||||||
} else {
|
} else {
|
||||||
rej(Error('Image didn\'t load successfully; error code:' + request.statusText));
|
reject(Error('Image didn\'t load successfully; error code:' + request.statusText));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
request.onerror = function() {
|
request.onerror = function() {
|
||||||
rej(Error('There was a network error.'));
|
reject(Error('There was a network error.'));
|
||||||
};
|
};
|
||||||
|
|
||||||
request.send();
|
request.send();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
const scenarioRequest = requestScenario(map);
|
const scenarioRequest = requestResource(map);
|
||||||
|
|
||||||
function loadScenario(data) {
|
|
||||||
// const current = document.querySelector('object');
|
|
||||||
// const next = document.createElement('object');
|
|
||||||
// next.setAttribute('type', 'image/svg+xml');
|
|
||||||
// next.style.opacity = 0;
|
|
||||||
// next.addEventListener('load', load);
|
|
||||||
// mapPlaceholder.style.opacity = 1;
|
|
||||||
// next.data = data;
|
|
||||||
// mapPlaceholder.after(next);
|
|
||||||
// current.remove();
|
|
||||||
|
|
||||||
buildScenario(requestScenario(data));
|
|
||||||
}
|
|
||||||
|
|
||||||
async function buildScenario(req) {
|
async function buildScenario(req) {
|
||||||
console.log('req', req);
|
|
||||||
|
|
||||||
console.log('fresh template', scenarioTemplate.querySelector('svg'));
|
|
||||||
|
|
||||||
const svg = scenarioTemplate.querySelector('svg').cloneNode(true);
|
const svg = scenarioTemplate.querySelector('svg').cloneNode(true);
|
||||||
|
|
||||||
// console.log('document', document.querySelector('object').contentDocument);
|
|
||||||
|
|
||||||
document.querySelector('object').contentDocument.querySelector('svg').remove();
|
document.querySelector('object').contentDocument.querySelector('svg').remove();
|
||||||
document.querySelector('object').contentDocument.append(svg);
|
document.querySelector('object').contentDocument.append(svg);
|
||||||
|
|
||||||
@ -93,9 +76,6 @@ async function buildScenario(req) {
|
|||||||
|
|
||||||
const scenario = await req;
|
const scenario = await req;
|
||||||
const startLocs = scenario.querySelector('.start-locations');
|
const startLocs = scenario.querySelector('.start-locations');
|
||||||
|
|
||||||
console.log(scenario);
|
|
||||||
|
|
||||||
const gb = svg.querySelector('.gameboard');
|
const gb = svg.querySelector('.gameboard');
|
||||||
const grid = svg.querySelector('.grid');
|
const grid = svg.querySelector('.grid');
|
||||||
|
|
||||||
@ -113,7 +93,7 @@ async function buildScenario(req) {
|
|||||||
}, {});
|
}, {});
|
||||||
|
|
||||||
await Promise.all(
|
await Promise.all(
|
||||||
Object.keys(refs).map(filename => requestScenario(`assets/images/${filename}`))
|
Object.keys(refs).map(filename => requestResource(`assets/images/${filename}`))
|
||||||
).then(result => {
|
).then(result => {
|
||||||
const defs = svg.querySelector('defs');
|
const defs = svg.querySelector('defs');
|
||||||
|
|
||||||
@ -127,11 +107,17 @@ async function buildScenario(req) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
const refsQuery = [...refs[filename]].join(', ');
|
const refsQuery = [...refs[filename]].join(', ');
|
||||||
external.querySelectorAll(refsQuery).forEach(node => defs.append(svg.ownerDocument.importNode(node, true)));
|
|
||||||
|
external.querySelectorAll(refsQuery).forEach(node =>
|
||||||
|
defs.append(svg.ownerDocument.importNode(node, true))
|
||||||
|
);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
scenario.querySelectorAll('use.mapsheet').forEach(el => gb.querySelector('#background').after(svg.ownerDocument.importNode(el, true)));
|
scenario.querySelectorAll('use.mapsheet').forEach(el =>
|
||||||
|
gb.querySelector('#background').after(svg.ownerDocument.importNode(el, true))
|
||||||
|
);
|
||||||
|
|
||||||
if (startLocs) grid.before(svg.ownerDocument.importNode(startLocs, true));
|
if (startLocs) grid.before(svg.ownerDocument.importNode(startLocs, true));
|
||||||
|
|
||||||
const scenarioGrid = scenario.querySelector('.grid');
|
const scenarioGrid = scenario.querySelector('.grid');
|
||||||
@ -143,7 +129,6 @@ async function buildScenario(req) {
|
|||||||
async function loadScript() {
|
async function loadScript() {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
const scriptEl = document.createElementNS("http://www.w3.org/2000/svg", 'script');
|
const scriptEl = document.createElementNS("http://www.w3.org/2000/svg", 'script');
|
||||||
// const scriptEl = svg.ownerDocument.importNode(scenario.querySelector('script'));
|
|
||||||
|
|
||||||
scriptEl.onload = () => {
|
scriptEl.onload = () => {
|
||||||
console.log('map.js loaded');
|
console.log('map.js loaded');
|
||||||
@ -168,18 +153,12 @@ async function buildScenario(req) {
|
|||||||
|
|
||||||
await loadScript();
|
await loadScript();
|
||||||
|
|
||||||
// this.style.opacity = 1;
|
mapResourceEl.style.opacity = 1;
|
||||||
// mapPlaceholder.style.opacity = 0;
|
mapPlaceholder.style.opacity = 0;
|
||||||
|
|
||||||
panzoom.start(svg);
|
panzoom.start(svg);
|
||||||
gameboard.start(svg);
|
gameboard.start(svg);
|
||||||
recordSheet.start(startLocs, gameboard.getUnits());
|
recordSheet.start(startLocs, gameboard.getUnits());
|
||||||
|
|
||||||
const mapContainer = document.querySelector('#map-container');
|
|
||||||
const mapContainerRect = mapContainer.getBoundingClientRect();
|
|
||||||
|
|
||||||
console.log('mapContainer', mapContainer);
|
|
||||||
console.log('mapContainerRect', mapContainerRect);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateTurnCounter() {
|
function updateTurnCounter() {
|
||||||
@ -230,88 +209,10 @@ async function load() {
|
|||||||
;
|
;
|
||||||
|
|
||||||
scenarioTemplate = this.contentDocument.cloneNode(svg);
|
scenarioTemplate = this.contentDocument.cloneNode(svg);
|
||||||
buildScenario(scenarioRequest);
|
await buildScenario(scenarioRequest);
|
||||||
// const scenario = await scenarioRequest;
|
|
||||||
// const gb = svg.querySelector('.gameboard');
|
|
||||||
// const grid = svg.querySelector('.grid');
|
|
||||||
|
|
||||||
// const externalResourceEls = Array.from(scenario.querySelectorAll('use[href*=".svg"'));
|
|
||||||
|
|
||||||
// const refs = externalResourceEls.reduce((acc, el) => {
|
|
||||||
// const href = el.getAttributeNS(null, 'href');
|
|
||||||
// const [filename] = href.match(/.+\.svg/);
|
|
||||||
// const fragmentIdentifier = href.split('.svg').pop();
|
|
||||||
|
|
||||||
// (acc[filename] ??= new Set()).add(fragmentIdentifier);
|
|
||||||
// el.setAttributeNS(null, 'href', fragmentIdentifier);
|
|
||||||
|
|
||||||
// return acc;
|
|
||||||
// }, {});
|
|
||||||
|
|
||||||
// await Promise.all(
|
|
||||||
// Object.keys(refs).map(filename => requestScenario(`assets/images/${filename}`))
|
|
||||||
// ).then(result => {
|
|
||||||
// const defs = svg.querySelector('defs');
|
|
||||||
|
|
||||||
// Object.keys(refs).forEach((filename, index) => {
|
|
||||||
// const external = result[index];
|
|
||||||
|
|
||||||
// refs[filename].forEach(fragmentIdentifier => {
|
|
||||||
// external
|
|
||||||
// .querySelectorAll(`${fragmentIdentifier} use`)
|
|
||||||
// .forEach(el => refs[filename].add(el.getAttributeNS(null, 'href')));
|
|
||||||
// });
|
|
||||||
|
|
||||||
// const refsQuery = [...refs[filename]].join(', ');
|
|
||||||
// external.querySelectorAll(refsQuery).forEach(node => defs.append(node));
|
|
||||||
// });
|
|
||||||
// });
|
|
||||||
|
|
||||||
// scenario.querySelectorAll('use.mapsheet').forEach(el => gb.prepend(el));
|
|
||||||
// grid.before(scenario.querySelector('.start-locations'));
|
|
||||||
|
|
||||||
// async function loadScript() {
|
|
||||||
// return new Promise((resolve, reject) => {
|
|
||||||
// const scriptEl = document.createElementNS("http://www.w3.org/2000/svg", 'script');
|
|
||||||
// // const scriptEl = svg.ownerDocument.importNode(scenario.querySelector('script'));
|
|
||||||
|
|
||||||
// scriptEl.onload = () => {
|
|
||||||
// console.log('map.js loaded');
|
|
||||||
// resolve();
|
|
||||||
// };
|
|
||||||
|
|
||||||
// scriptEl.onerror = () => {
|
|
||||||
// reject(Error('Script failed to load.'));
|
|
||||||
// };
|
|
||||||
|
|
||||||
// scriptEl.dataset.rows = scenario.querySelector('script').dataset.rows;
|
|
||||||
// scriptEl.dataset.cols = scenario.querySelector('script').dataset.cols;
|
|
||||||
// scriptEl.setAttributeNS(null, 'href', '../../map.js');
|
|
||||||
// svg.append(scriptEl);
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
|
|
||||||
// await loadScript();
|
|
||||||
|
|
||||||
this.style.opacity = 1;
|
this.style.opacity = 1;
|
||||||
mapPlaceholder.style.opacity = 0;
|
mapPlaceholder.style.opacity = 0;
|
||||||
// URL.revokeObjectURL(this.data);
|
|
||||||
|
|
||||||
// const linkEl = document.createElement('link');
|
|
||||||
// linkEl.setAttribute('xmlns', 'http://www.w3.org/1999/xhtml');
|
|
||||||
// linkEl.setAttribute('rel', 'stylesheet');
|
|
||||||
// linkEl.setAttribute('href', '../../assets/css/map.css');
|
|
||||||
// linkEl.setAttribute('type', 'text/css');
|
|
||||||
|
|
||||||
// linkEl.onload = function (e) {
|
|
||||||
// console.log('map.css loaded');
|
|
||||||
// };
|
|
||||||
|
|
||||||
// svg.prepend(linkEl);
|
|
||||||
|
|
||||||
// panzoom.start(svg);
|
|
||||||
// gameboard.start(svg);
|
|
||||||
// recordSheet.start(startLocs, gameboard.getUnits());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
document.querySelectorAll('.end-turn').forEach(el =>
|
document.querySelectorAll('.end-turn').forEach(el =>
|
||||||
@ -387,8 +288,6 @@ document.querySelector('input[type="file"]').addEventListener('change', e => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
reader.readAsText(file);
|
reader.readAsText(file);
|
||||||
|
|
||||||
// loadScenario(URL.createObjectURL(file));
|
|
||||||
});
|
});
|
||||||
|
|
||||||
document.querySelector('#roll-dice').addEventListener('click', () => {
|
document.querySelector('#roll-dice').addEventListener('click', () => {
|
||||||
@ -407,13 +306,16 @@ mapSelectDialog
|
|||||||
.selectCurrentOptionOnPageLoad()
|
.selectCurrentOptionOnPageLoad()
|
||||||
.showOnClick()
|
.showOnClick()
|
||||||
.updateValueOnSelection()
|
.updateValueOnSelection()
|
||||||
.changeMapOnConfirm(loadScenario);
|
.changeMapOnConfirm(data => {
|
||||||
|
mapPlaceholder.style.opacity = 1;
|
||||||
|
mapResourceEl.style.opacity = 0;
|
||||||
|
buildScenario(requestResource(data));
|
||||||
|
});
|
||||||
|
|
||||||
mapResourceEl.addEventListener('load', load);
|
mapResourceEl.addEventListener('load', load);
|
||||||
// mapResourceEl.data = map;
|
// mapResourceEl.data = map;
|
||||||
// mapResourceEl = null;
|
// mapResourceEl = null;
|
||||||
|
|
||||||
|
|
||||||
dice.forEach(el => {
|
dice.forEach(el => {
|
||||||
el.classList.add(roll(d6));
|
el.classList.add(roll(d6));
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user