diff --git a/client/client.js b/client/client.js index be1f9c9f..f43fa7f5 100644 --- a/client/client.js +++ b/client/client.js @@ -182,7 +182,7 @@ class Socket { this._receiveMultiple(obj); }).catch((err) => { this.serverError = err; - this.disconnect(); + throw err; }); } diff --git a/frontend/app/map/map/map.js b/frontend/app/map/map/map.js index c5dfbb91..6ae4f12b 100644 --- a/frontend/app/map/map/map.js +++ b/frontend/app/map/map/map.js @@ -372,15 +372,29 @@ fm.app.factory("fmMap", function(fmUtils, fmSocket, fmMapMessages, fmMapMarkers, var loadedWatcher = map.socket.$watch("padData", function(padData) { if(padData != null) { loadedWatcher(); + resolve(padData); + } + }); + + var serverErrorWatcher = map.socket.$watch("serverError", function(serverError) { + if(serverError != null) { + serverErrorWatcher(); + + if(serverError.indexOf('does not exist') != -1) { + map.socket.serverError = null; + map.padUi.createPad(map.socket.padId, true); + } - if(!map.hashUi.hasLocationHash()) - map.displayView(padData.defaultView); resolve(); } }); }); - } else { - if(!map.hashUi.hasLocationHash()) { + } + }).then((padData) => { + if(!map.hashUi.hasLocationHash()) { + if(padData) + map.displayView(padData.defaultView); + else { return $q.resolve($.get({ url: "https://freegeoip.net/json/", dataType: "json" @@ -409,10 +423,13 @@ fm.app.factory("fmMap", function(fmUtils, fmSocket, fmMapMessages, fmMapMarkers, }); map.socket.$watch("serverError", function(serverError) { - if(serverError) { - errorMessage && errorMessage.close(); - map.messages.showMessage("danger", serverError); + if(errorMessage) { + errorMessage.close(); + errorMessage = null; } + + if(serverError) + errorMessage = map.messages.showMessage("danger", serverError); }); map.map.on("moveend", function() { diff --git a/frontend/app/map/pad/pad-settings.html b/frontend/app/map/pad/pad-settings.html index 1b19928d..874ef9f5 100644 --- a/frontend/app/map/pad/pad-settings.html +++ b/frontend/app/map/pad/pad-settings.html @@ -1,5 +1,5 @@ \ No newline at end of file diff --git a/frontend/app/map/pad/pad.js b/frontend/app/map/pad/pad.js index 41e1a95a..539989df 100644 --- a/frontend/app/map/pad/pad.js +++ b/frontend/app/map/pad/pad.js @@ -4,10 +4,10 @@ import $ from 'jquery'; fm.app.factory("fmMapPad", function($uibModal, fmUtils) { return function(map) { var ret = { - createPad : function() { - ret.editPadSettings(true); + createPad : function(proposedWriteId, noCancel) { + ret.editPadSettings(true, proposedWriteId, noCancel); }, - editPadSettings : function(create) { + editPadSettings : function(create, proposedWriteId, noCancel) { var scope = map.socket.$new(); var dialog = $uibModal.open({ @@ -17,8 +17,12 @@ fm.app.factory("fmMapPad", function($uibModal, fmUtils) { size: "lg", resolve: { map: function() { return map; }, - create: function() { return create; } - } + create: function() { return create; }, + proposedWriteId: function() { return proposedWriteId; }, + noCancel: function() { return noCancel; } + }, + keyboard: !noCancel, + backdrop: noCancel ? "static" : true }); if(!create) { @@ -52,12 +56,13 @@ fm.app.factory("fmMapPad", function($uibModal, fmUtils) { }; }); -fm.app.controller("fmMapPadSettingsCtrl", function($scope, map, create, fmUtils) { +fm.app.controller("fmMapPadSettingsCtrl", function($scope, map, create, proposedWriteId, noCancel, fmUtils) { $scope.urlPrefix = fm.URL_PREFIX; $scope.create = create; + $scope.noCancel = noCancel; if(create) { - $scope.writeId = fmUtils.generateRandomPadId(14); + $scope.writeId = (proposedWriteId || fmUtils.generateRandomPadId(14)); $scope.readId = fmUtils.generateRandomPadId(12); $scope.padData = { padName: "New FacilMap", diff --git a/server/socket.js b/server/socket.js index 7c97b457..73ee225f 100644 --- a/server/socket.js +++ b/server/socket.js @@ -149,8 +149,10 @@ utils.extend(SocketConnection.prototype, { return utils.extend(JSON.parse(JSON.stringify(write)), { writable: true }); else if(read) return utils.extend(JSON.parse(JSON.stringify(read)), { writable: false, writeId: null }); - else + else { + this.padId = null; throw "This pad does not exist"; + } } }).then(res => { this.padId = res.pad.id;