diff --git a/src/Ui/media/Wrapper.coffee b/src/Ui/media/Wrapper.coffee
index 1b98855e..fc43df5c 100644
--- a/src/Ui/media/Wrapper.coffee
+++ b/src/Ui/media/Wrapper.coffee
@@ -195,6 +195,8 @@ class Wrapper
@actionOpenWindow(message.params)
else if cmd == "wrapperPermissionAdd"
@actionPermissionAdd(message)
+ else if cmd == "wrapperPermissionRemove"
+ @actionPermissionRemove(message)
else if cmd == "wrapperRequestFullscreen"
@actionRequestFullscreen()
else if cmd == "wrapperWebNotification"
@@ -283,14 +285,37 @@ class Wrapper
actionPermissionAdd: (message) ->
permission = message.params
+ if Array.isArray(permission) && permission.length > 1
+ @sendInner {"cmd": "response", "to": message.id, "result": {"error": "Can only grant one permission at the time"}}
+ return false
+ if Array.isArray(permission) && permission.length == 1
+ permission = permission[0]
$.when(@event_site_info).done =>
if permission in @site_info.settings.permissions
+ @notifications.add "notification-#{message.id}", "info", "Permission already granted.", 4000
return false
@ws.cmd "permissionDetails", permission, (permission_details) =>
@displayConfirm "This site requests permission:" + " #{@toHtmlSafe(permission)}" + "
#{permission_details}", "Grant", =>
@ws.cmd "permissionAdd", permission, (res) =>
@sendInner {"cmd": "response", "to": message.id, "result": res}
+ actionPermissionRemove: (message) ->
+ permission = message.params
+ if Array.isArray(permission) && permission.length > 1
+ @sendInner {"cmd": "response", "to": message.id, "result": {"error": "Can only remove one permission at the time"}}
+ return false
+ if Array.isArray(permission) && permission.length == 1
+ permission = permission[0]
+ $.when(@event_site_info).done =>
+ if permission not in @site_info.settings.permissions
+ @notifications.add "notification-#{message.id}", "info", "Permission already removed.", 4000
+ return false
+ @ws.cmd "permissionDetails", permission, (permission_details) =>
+ @displayConfirm "This site wants to remove permission:" + " #{@toHtmlSafe(permission)}" + "
#{permission_details}", "Remove", =>
+ @ws.cmd "permissionRemove", permission, (res) =>
+ @sendInner {"cmd": "response", "to": message.id, "result": res}
+
+
actionNotification: (message) ->
message.params = @toHtmlSafe(message.params) # Escape html
body = $(""+message.params[1]+"")
@@ -711,4 +736,3 @@ else
ws_url = proto.ws + ":" + origin.replace(proto.http+":", "") + "/ZeroNet-Internal/Websocket?wrapper_key=" + window.wrapper_key
window.wrapper = new Wrapper(ws_url)
-
diff --git a/src/Ui/media/all.js b/src/Ui/media/all.js
index f5ad947c..0044832e 100644
--- a/src/Ui/media/all.js
+++ b/src/Ui/media/all.js
@@ -1191,6 +1191,8 @@ $.extend( $.easing,
return this.actionOpenWindow(message.params);
} else if (cmd === "wrapperPermissionAdd") {
return this.actionPermissionAdd(message);
+ } else if (cmd === "wrapperPermissionRemove") {
+ return this.actionPermissionRemove(message);
} else if (cmd === "wrapperRequestFullscreen") {
return this.actionRequestFullscreen();
} else if (cmd === "wrapperWebNotification") {
@@ -1346,9 +1348,23 @@ $.extend( $.easing,
Wrapper.prototype.actionPermissionAdd = function(message) {
var permission;
permission = message.params;
+ if (Array.isArray(permission) && permission.length > 1) {
+ this.sendInner({
+ "cmd": "response",
+ "to": message.id,
+ "result": {
+ "error": "Can only grant one permission at the time"
+ }
+ });
+ return false;
+ }
+ if (Array.isArray(permission) && permission.length === 1) {
+ permission = permission[0];
+ }
return $.when(this.event_site_info).done((function(_this) {
return function() {
if (indexOf.call(_this.site_info.settings.permissions, permission) >= 0) {
+ _this.notifications.add("notification-" + message.id, "info", "Permission already granted.", 4000);
return false;
}
return _this.ws.cmd("permissionDetails", permission, function(permission_details) {
@@ -1366,6 +1382,43 @@ $.extend( $.easing,
})(this));
};
+ Wrapper.prototype.actionPermissionRemove = function(message) {
+ var permission;
+ permission = message.params;
+ if (Array.isArray(permission) && permission.length > 1) {
+ this.sendInner({
+ "cmd": "response",
+ "to": message.id,
+ "result": {
+ "error": "Can only remove one permission at the time"
+ }
+ });
+ return false;
+ }
+ if (Array.isArray(permission) && permission.length === 1) {
+ permission = permission[0];
+ }
+ return $.when(this.event_site_info).done((function(_this) {
+ return function() {
+ if (indexOf.call(_this.site_info.settings.permissions, permission) < 0) {
+ _this.notifications.add("notification-" + message.id, "info", "Permission already removed.", 4000);
+ return false;
+ }
+ return _this.ws.cmd("permissionDetails", permission, function(permission_details) {
+ return _this.displayConfirm("This site wants to remove permission:" + (" " + (_this.toHtmlSafe(permission)) + "") + ("
" + permission_details + ""), "Remove", function() {
+ return _this.ws.cmd("permissionRemove", permission, function(res) {
+ return _this.sendInner({
+ "cmd": "response",
+ "to": message.id,
+ "result": res
+ });
+ });
+ });
+ });
+ };
+ })(this));
+ };
+
Wrapper.prototype.actionNotification = function(message) {
var body;
message.params = this.toHtmlSafe(message.params);