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 @@
@@ -67,6 +67,6 @@
\ 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;