add reset button to load from save data
This commit is contained in:
parent
5154aff553
commit
3f399947f1
7 changed files with 177 additions and 9 deletions
36
src/23-infoModal.ts
Normal file
36
src/23-infoModal.ts
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
class InfoModal {
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
const _this = this;
|
||||||
|
const closeBtn = document.getElementById("info-closeBtn");
|
||||||
|
if (closeBtn) {
|
||||||
|
closeBtn.onclick = ()=>{_this.setVisible(false)};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
self(): HTMLElement | null {
|
||||||
|
return document.getElementById("info-container");
|
||||||
|
}
|
||||||
|
|
||||||
|
visible(): boolean {
|
||||||
|
return this.self()?.style.display != "none";
|
||||||
|
}
|
||||||
|
|
||||||
|
infoMsg(): HTMLElement | null {
|
||||||
|
return document.getElementById("info-content");
|
||||||
|
}
|
||||||
|
|
||||||
|
setMsg(s: string) {
|
||||||
|
const infoMsg = this.infoMsg();
|
||||||
|
if (infoMsg) {
|
||||||
|
infoMsg.innerText = s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
setVisible(v: boolean): void {
|
||||||
|
const modal = this.self();
|
||||||
|
if (modal) {
|
||||||
|
modal.style.display = v ? "block" : "none";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -2,15 +2,18 @@ class ModalCollection {
|
||||||
createOverlay: CreateOverlayModal;
|
createOverlay: CreateOverlayModal;
|
||||||
cancel: CancelModal;
|
cancel: CancelModal;
|
||||||
okCancel: OKCancelModal;
|
okCancel: OKCancelModal;
|
||||||
|
info: InfoModal;
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
createOverlay: CreateOverlayModal,
|
createOverlay: CreateOverlayModal,
|
||||||
cancel: CancelModal,
|
cancel: CancelModal,
|
||||||
okCancel: OKCancelModal
|
okCancel: OKCancelModal,
|
||||||
|
info: InfoModal
|
||||||
) {
|
) {
|
||||||
this.createOverlay = createOverlay;
|
this.createOverlay = createOverlay;
|
||||||
this.cancel = cancel;
|
this.cancel = cancel;
|
||||||
this.okCancel = okCancel;
|
this.okCancel = okCancel;
|
||||||
|
this.info = info;
|
||||||
}
|
}
|
||||||
|
|
||||||
closeAll(): void {
|
closeAll(): void {
|
||||||
|
|
|
@ -62,6 +62,12 @@ class MapHandler {
|
||||||
clearBtn.classList.remove("activeBtn");
|
clearBtn.classList.remove("activeBtn");
|
||||||
}
|
}
|
||||||
} catch {}
|
} catch {}
|
||||||
|
try {
|
||||||
|
const resetBtn = document.getElementById("restore-btn");
|
||||||
|
if (resetBtn) {
|
||||||
|
resetBtn.classList.remove("activeBtn");
|
||||||
|
}
|
||||||
|
} catch {}
|
||||||
try {
|
try {
|
||||||
const menuBtn = document.getElementById("menu-btn");
|
const menuBtn = document.getElementById("menu-btn");
|
||||||
if (menuBtn) {
|
if (menuBtn) {
|
||||||
|
@ -217,7 +223,42 @@ class MapHandler {
|
||||||
OverlayState.save(self.overlays);
|
OverlayState.save(self.overlays);
|
||||||
self.modals.okCancel.setVisible(false);
|
self.modals.okCancel.setVisible(false);
|
||||||
MapHandler.resetMapClick();
|
MapHandler.resetMapClick();
|
||||||
// show info modal "Save complete"
|
self.modals.info.setMsg("Save complete");
|
||||||
|
self.modals.info.setVisible(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const cancelBtn = self.modals.okCancel.cancelBtn();
|
||||||
|
if (cancelBtn) {
|
||||||
|
cancelBtn.onclick = () => {
|
||||||
|
self.modals.okCancel.setVisible(false);
|
||||||
|
MapHandler.resetMapClick();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
self.modals.okCancel.setVisible(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static overlayReset(e: any): void {
|
||||||
|
const self = MapHandler.instance;
|
||||||
|
if (self) {
|
||||||
|
self.modals.closeAll();
|
||||||
|
MapHandler.resetMapClick();
|
||||||
|
(e.target as HTMLElement).classList.add("activeBtn");
|
||||||
|
self.modals.okCancel.setMsg("Restore overlays from saved data?");
|
||||||
|
|
||||||
|
const okBtn = self.modals.okCancel.okBtn();
|
||||||
|
if (okBtn) {
|
||||||
|
okBtn.onclick = ()=> {
|
||||||
|
self.overlays = OverlayState.clear(self.overlays, self.map);
|
||||||
|
self.overlays = OverlayState.load();
|
||||||
|
self.overlays.markers.forEach(m=>m.add(self.map));
|
||||||
|
self.overlays.circles.forEach(m=>m.add(self.map));
|
||||||
|
self.overlays.polygons.forEach(m=>m.add(self.map));
|
||||||
|
self.overlays.polyline.add(self.map);
|
||||||
|
self.modals.okCancel.setVisible(false);
|
||||||
|
MapHandler.resetMapClick();
|
||||||
|
self.modals.info.setMsg("Restored");
|
||||||
|
self.modals.info.setVisible(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const cancelBtn = self.modals.okCancel.cancelBtn();
|
const cancelBtn = self.modals.okCancel.cancelBtn();
|
||||||
|
|
|
@ -31,7 +31,8 @@ function init(): void {
|
||||||
const modals = new ModalCollection(
|
const modals = new ModalCollection(
|
||||||
new CreateOverlayModal(),
|
new CreateOverlayModal(),
|
||||||
new CancelModal(),
|
new CancelModal(),
|
||||||
new OKCancelModal());
|
new OKCancelModal(),
|
||||||
|
new InfoModal());
|
||||||
|
|
||||||
MapHandler.init(map, overlays, TileLayerWrapper.layers, modals);
|
MapHandler.init(map, overlays, TileLayerWrapper.layers, modals);
|
||||||
|
|
||||||
|
@ -41,6 +42,7 @@ function init(): void {
|
||||||
|
|
||||||
MapHandler.setButtonClick("save-btn", MapHandler.overlaySave);
|
MapHandler.setButtonClick("save-btn", MapHandler.overlaySave);
|
||||||
MapHandler.setButtonClick("clear-btn", MapHandler.overlayClear);
|
MapHandler.setButtonClick("clear-btn", MapHandler.overlayClear);
|
||||||
|
MapHandler.setButtonClick("restore-btn", MapHandler.overlayReset);
|
||||||
|
|
||||||
MapHandler.setButtonClick("tiles-btn", MapHandler.swapTiles);
|
MapHandler.setButtonClick("tiles-btn", MapHandler.swapTiles);
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,7 +24,8 @@
|
||||||
<div id="subControls">
|
<div id="subControls">
|
||||||
<button id="tiles-btn">∷</button>
|
<button id="tiles-btn">∷</button>
|
||||||
<button id="save-btn">↓</button>
|
<button id="save-btn">↓</button>
|
||||||
<button id="clear-btn">↺</button>
|
<button id="clear-btn">x</button>
|
||||||
|
<button id="restore-btn">↺</button>
|
||||||
<button id="menu-btn">≡</button>
|
<button id="menu-btn">≡</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -57,7 +58,7 @@
|
||||||
|
|
||||||
<div id="info-container">
|
<div id="info-container">
|
||||||
<button class="closeBtn" id="info-closeBtn">x</button>
|
<button class="closeBtn" id="info-closeBtn">x</button>
|
||||||
<div class="info-content">
|
<div id="info-content">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -359,11 +359,43 @@ class OKCancelModal {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
class InfoModal {
|
||||||
|
constructor() {
|
||||||
|
const _this = this;
|
||||||
|
const closeBtn = document.getElementById("info-closeBtn");
|
||||||
|
if (closeBtn) {
|
||||||
|
closeBtn.onclick = () => { _this.setVisible(false); };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
self() {
|
||||||
|
return document.getElementById("info-container");
|
||||||
|
}
|
||||||
|
visible() {
|
||||||
|
var _a;
|
||||||
|
return ((_a = this.self()) === null || _a === void 0 ? void 0 : _a.style.display) != "none";
|
||||||
|
}
|
||||||
|
infoMsg() {
|
||||||
|
return document.getElementById("info-content");
|
||||||
|
}
|
||||||
|
setMsg(s) {
|
||||||
|
const infoMsg = this.infoMsg();
|
||||||
|
if (infoMsg) {
|
||||||
|
infoMsg.innerText = s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
setVisible(v) {
|
||||||
|
const modal = this.self();
|
||||||
|
if (modal) {
|
||||||
|
modal.style.display = v ? "block" : "none";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
class ModalCollection {
|
class ModalCollection {
|
||||||
constructor(createOverlay, cancel, okCancel) {
|
constructor(createOverlay, cancel, okCancel, info) {
|
||||||
this.createOverlay = createOverlay;
|
this.createOverlay = createOverlay;
|
||||||
this.cancel = cancel;
|
this.cancel = cancel;
|
||||||
this.okCancel = okCancel;
|
this.okCancel = okCancel;
|
||||||
|
this.info = info;
|
||||||
}
|
}
|
||||||
closeAll() {
|
closeAll() {
|
||||||
this.createOverlay.setVisible(false);
|
this.createOverlay.setVisible(false);
|
||||||
|
@ -430,13 +462,20 @@ class MapHandler {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (_e) { }
|
catch (_e) { }
|
||||||
|
try {
|
||||||
|
const resetBtn = document.getElementById("restore-btn");
|
||||||
|
if (resetBtn) {
|
||||||
|
resetBtn.classList.remove("activeBtn");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (_f) { }
|
||||||
try {
|
try {
|
||||||
const menuBtn = document.getElementById("menu-btn");
|
const menuBtn = document.getElementById("menu-btn");
|
||||||
if (menuBtn) {
|
if (menuBtn) {
|
||||||
menuBtn.classList.remove("activeBtn");
|
menuBtn.classList.remove("activeBtn");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (_f) { }
|
catch (_g) { }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
static addMarker(e) {
|
static addMarker(e) {
|
||||||
|
@ -571,7 +610,40 @@ class MapHandler {
|
||||||
OverlayState.save(self.overlays);
|
OverlayState.save(self.overlays);
|
||||||
self.modals.okCancel.setVisible(false);
|
self.modals.okCancel.setVisible(false);
|
||||||
MapHandler.resetMapClick();
|
MapHandler.resetMapClick();
|
||||||
// show info modal "Save complete"
|
self.modals.info.setMsg("Save complete");
|
||||||
|
self.modals.info.setVisible(true);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
const cancelBtn = self.modals.okCancel.cancelBtn();
|
||||||
|
if (cancelBtn) {
|
||||||
|
cancelBtn.onclick = () => {
|
||||||
|
self.modals.okCancel.setVisible(false);
|
||||||
|
MapHandler.resetMapClick();
|
||||||
|
};
|
||||||
|
}
|
||||||
|
self.modals.okCancel.setVisible(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
static overlayReset(e) {
|
||||||
|
const self = MapHandler.instance;
|
||||||
|
if (self) {
|
||||||
|
self.modals.closeAll();
|
||||||
|
MapHandler.resetMapClick();
|
||||||
|
e.target.classList.add("activeBtn");
|
||||||
|
self.modals.okCancel.setMsg("Restore overlays from saved data?");
|
||||||
|
const okBtn = self.modals.okCancel.okBtn();
|
||||||
|
if (okBtn) {
|
||||||
|
okBtn.onclick = () => {
|
||||||
|
self.overlays = OverlayState.clear(self.overlays, self.map);
|
||||||
|
self.overlays = OverlayState.load();
|
||||||
|
self.overlays.markers.forEach(m => m.add(self.map));
|
||||||
|
self.overlays.circles.forEach(m => m.add(self.map));
|
||||||
|
self.overlays.polygons.forEach(m => m.add(self.map));
|
||||||
|
self.overlays.polyline.add(self.map);
|
||||||
|
self.modals.okCancel.setVisible(false);
|
||||||
|
MapHandler.resetMapClick();
|
||||||
|
self.modals.info.setMsg("Restored");
|
||||||
|
self.modals.info.setVisible(true);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
const cancelBtn = self.modals.okCancel.cancelBtn();
|
const cancelBtn = self.modals.okCancel.cancelBtn();
|
||||||
|
@ -639,13 +711,14 @@ function init() {
|
||||||
overlays.circles.forEach(m => m.add(map));
|
overlays.circles.forEach(m => m.add(map));
|
||||||
overlays.polygons.forEach(m => m.add(map));
|
overlays.polygons.forEach(m => m.add(map));
|
||||||
overlays.polyline.add(map);
|
overlays.polyline.add(map);
|
||||||
const modals = new ModalCollection(new CreateOverlayModal(), new CancelModal(), new OKCancelModal());
|
const modals = new ModalCollection(new CreateOverlayModal(), new CancelModal(), new OKCancelModal(), new InfoModal());
|
||||||
MapHandler.init(map, overlays, TileLayerWrapper.layers, modals);
|
MapHandler.init(map, overlays, TileLayerWrapper.layers, modals);
|
||||||
MapHandler.setButtonClick("addPoint-btn", MapHandler.markerCollect);
|
MapHandler.setButtonClick("addPoint-btn", MapHandler.markerCollect);
|
||||||
MapHandler.setButtonClick("addCircle-btn", MapHandler.circleCollect);
|
MapHandler.setButtonClick("addCircle-btn", MapHandler.circleCollect);
|
||||||
MapHandler.setButtonClick("addPolygon-btn", MapHandler.polygonCollect);
|
MapHandler.setButtonClick("addPolygon-btn", MapHandler.polygonCollect);
|
||||||
MapHandler.setButtonClick("save-btn", MapHandler.overlaySave);
|
MapHandler.setButtonClick("save-btn", MapHandler.overlaySave);
|
||||||
MapHandler.setButtonClick("clear-btn", MapHandler.overlayClear);
|
MapHandler.setButtonClick("clear-btn", MapHandler.overlayClear);
|
||||||
|
MapHandler.setButtonClick("restore-btn", MapHandler.overlayReset);
|
||||||
MapHandler.setButtonClick("tiles-btn", MapHandler.swapTiles);
|
MapHandler.setButtonClick("tiles-btn", MapHandler.swapTiles);
|
||||||
}
|
}
|
||||||
init();
|
init();
|
||||||
|
|
|
@ -226,6 +226,18 @@ button.negative-btn:hover {
|
||||||
max-width: fit-content;
|
max-width: fit-content;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#info-content {
|
||||||
|
float: left;
|
||||||
|
line-height: 200%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#info-container button.closeBtn {
|
||||||
|
font-size: 150%;
|
||||||
|
padding: 0;
|
||||||
|
margin-left: 1ch;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
#import-export-container {
|
#import-export-container {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
|
Loading…
Reference in a new issue