-- Leo's gemini proxy
-- Connecting to git.thebackupbox.net:1965...
-- Connected
-- Sending request
-- Meta line: 20 text/gemini
repo: janusweb action: commit revision: path_from: revision_from: 66b215cef8b9a5afdb592628ebfd56d9e2eeaad0: path_to: revision_to:
commit 66b215cef8b9a5afdb592628ebfd56d9e2eeaad0 Author: James Baicoianu <james_github@baicoianu.com> Date: Sun Feb 16 11:04:45 2020 -0800 Keep track of edit mode changes, prompt if user leaves with unsaved changes diff --git a/media/assets/webui/apps/editor/editor.js b/media/assets/webui/apps/editor/editor.js
--- a/media/assets/webui/apps/editor/editor.js +++ b/media/assets/webui/apps/editor/editor.js @@ -35,7 +35,6 @@ elation.elements.define('janus.ui.editor.panel', class extends elation.elements. create() { //this.innerHTML = elation.template.get('janus.ui.editor.panel'); let elements = elation.elements.fromTemplate('janus.ui.editor.panel', this); -console.log('my elements!', elements); /* elation.events.add(elements.transformtype, 'change', (ev) => this.handleTransformTypeChange(ev)); elation.events.add(elements.transformspace, 'change', (ev) => this.handleTransformSpaceChange(ev)); @@ -49,6 +48,9 @@ console.log('my elements!', elements); elation.events.add(elements.viewsource, 'click', (ev) => this.handleViewSourceClick(ev)); elation.events.add(elements.export, 'click', (ev) => this.handleExportClick(ev)); + // If we've made any changes and the user tries to leave, prompt them to verify that they want to throw the changes away + window.addEventListener('beforeunload', (ev) => { if (this.history.length > 0) { ev.returnValue = false; ev.preventDefault(); return "You've made changes to this room, do you really want to leave?"; } }); + this.elements = elements; this.roomedit = { @@ -60,6 +62,7 @@ console.log('my elements!', elements); object: false, transforming: false, }; + this.history = []; this.editObjectSetSnap(this.roomedit.snap); janus.engine.systems.controls.addContext('roomedit', { @@ -121,7 +124,6 @@ console.log('my elements!', elements); elation.events.add(this.manipulator, 'mouseDown', (ev) => { this.roomedit.transforming = true; -console.log('mouse down!'); this.editObjectShowInfo(this.roomedit.object); if (this.manipulator.object && this.manipulator.object.userData.thing) { //elation.events.fire({type: 'admin_edit_start', element: this, data: this.manipulator.object.userData.thing}); @@ -255,6 +257,10 @@ console.log('set translation snap', ev.data, ev); } } else if (ev.button == 0 && !this.roomedit.transforming) { if (this.roomedit.object) { + if (!this.roomedit.raycast) { + // raycasting means this is an initial object placement, we don't need to log a change + this.history.push({type: 'changed', object: this.roomedit.object, state: null}); + } this.editObjectStop(); } } @@ -335,10 +341,7 @@ setTimeout(() => { }, 100); } else { //if (this.infowindow.title != object.js_id) { this.infowindow.settitle(object.js_id); -// FIXME - wy is dely needed here? -setTimeout(() => { this.objectinfo.updateObject(object); -}, 100); } if (this.infowindow.hidden) { this.infowindow.show(); @@ -792,6 +795,7 @@ console.log('manip left', ev.value, ev); if (ev.value) { //ev.target.removeObject(ev.target.roomedit.object); room.deletions.push(ev.target.roomedit.object); + this.history.push({type: 'addobjects', object: ev.target.roomedit.object}); ev.target.editObjectStop(true); } } @@ -873,8 +877,8 @@ console.log('manip left', ev.value, ev); var files = ev.dataTransfer.files, items = ev.dataTransfer.items; this.roomedit.raycast = true; + var objects = []; if (files.length > 0) { - var objects = []; for (var i = 0; i < files.length; i++) { var file = files[i]; objects[i] = this.loadObjectFromFile(file); @@ -888,13 +892,14 @@ console.log('manip left', ev.value, ev); types[type] = items[i]; } if (types['text/x-jml']) { - types['text/x-jml'].getAsString((jml) => this.loadObjectFromJML(jml)); + types['text/x-jml'].getAsString((jml) => { this.loadObjectFromJML(jml) }); } else if (types['text/uri-list']) { - types['text/uri-list'].getAsString((urilist) => this.loadObjectFromURIList(urilist)); + types['text/uri-list'].getAsString((urilist) => { let newobjects = this.loadObjectFromURIList(urilist); objects.push.apply(newobjects); }) ; } else if (types['text/x-moz-url']) { - types['text/x-moz-url'].getAsString((urilist) => this.loadObjectFromURIList(urilist)); + types['text/x-moz-url'].getAsString((urilist) => { let newobjects = this.loadObjectFromURIList(urilist); objects.push.apply(newobjects); } ); } } + this.history.push({type: 'addobjects', objects: objects}); if (janus.engine.systems.admin.hidden) { janus.engine.systems.controls.requestPointerLock(); } @@ -980,6 +985,7 @@ console.log('manip left', ev.value, ev); }); } } + return objects; } detectMimeTypeForURL(url) { return new Promise((resolve, reject) => { @@ -1074,7 +1080,6 @@ console.log('pastey!', ev.clipboardData.items[0], ev); elation.elements.define('janus.ui.editor.objectinfo', class extends elation.elements.base { create() { this.handleThingChange = elation.bind(this, this.handleThingChange); -console.log('I CREATE', this.handleThingChange); this.defineAttributes({ object: { type: 'object' }, mode: { type: 'string', default: 'pos' } @@ -1093,10 +1098,8 @@ console.log('I CREATE', this.handleThingChange); //itemtemplate: 'janus.ui.editor.property', }); this.setMode('pos'); -console.log('created objectinfo', this.object, this); } setMode(mode) { -console.log('set mode', mode); if (this.list) { this.list.removeclass('mode_' + this.mode); } @@ -1114,8 +1117,8 @@ console.log('set mode', mode); //console.log('new object set', object, this.object); this.object.addEventListener('objectchange', this.handleThingChange); - this.updateProperties(); } + this.updateProperties(); } updateProperties() { for (var k in this.propeditors) {
-----END OF PAGE-----
-- Response ended
-- Page fetched on Sun Jun 2 15:24:41 2024