diff --git a/src/app/files/fileManager.js b/src/app/files/fileManager.js index 63da3a3026..50867c0190 100644 --- a/src/app/files/fileManager.js +++ b/src/app/files/fileManager.js @@ -49,7 +49,8 @@ class FileManager extends ApiFactory { name: 'fileManager', methods: ['getFilesFromPath', 'getCurrentFile', 'getFile', 'setFile'], events: ['currentFileChanged'], - description: 'service - read/write to any files or folders, require giving permissions' + description: 'service - read/write to any files or folders, require giving permissions', + permission: true } } diff --git a/src/app/ui/styles/tooltip-styles.js b/src/app/ui/styles/tooltip-styles.js index d3c3f0b5c1..36af565a8c 100644 --- a/src/app/ui/styles/tooltip-styles.js +++ b/src/app/ui/styles/tooltip-styles.js @@ -3,7 +3,9 @@ var csjs = require('csjs-inject') var css = csjs` .tooltip { z-index: 1001; - display: inline-block; + display: flex; + justify-content: space-between; + align-items: center; position: fixed; color: var(--primary) min-height: 50px; diff --git a/src/app/ui/tooltip.js b/src/app/ui/tooltip.js index 447bc80006..b93a637025 100644 --- a/src/app/ui/tooltip.js +++ b/src/app/ui/tooltip.js @@ -1,8 +1,17 @@ var yo = require('yo-yo') var css = require('./styles/tooltip-styles') -module.exports = function addTooltip (tooltipText) { - var tooltip = yo`
${tooltipText}
` +/** + * Open a tooltip + * @param {string} tooltipText The text shown by the tooltip + * @param {HTMLElement} [action] An HTMLElement to display for action + */ +module.exports = function addTooltip (tooltipText, action) { + var tooltip = yo` +
+ ${tooltipText} + ${action} +
` document.body.appendChild(tooltip) setTimeout(function () { document.body.removeChild(tooltip) diff --git a/src/persmission-handler.js b/src/persmission-handler.js index 7a6142df03..69a9c73d7c 100644 --- a/src/persmission-handler.js +++ b/src/persmission-handler.js @@ -1,37 +1,46 @@ /* global localStorage */ const yo = require('yo-yo') const csjs = require('csjs-inject') +const addTooltip = require('./app/ui/tooltip') const modalDialog = require('./app/ui/modaldialog') const css = csjs` -.permission p { +.permission h4 { text-align: center; } .images { display: flex; justify-content: center; - align-item: center; + align-items: center; + padding: 10px; } .images img { width: 40px; height: 40px; } +.images span { + marign: 0 20px; +} ` +function notAllowWarning(from, to) { + return `${from.displayName || from.name} is not allowed to call ${to.displayName || to.name}.` +} + export class PermissionHandler { constructor () { - const permission = localStorage.getItem('plugin-permissions') + const permission = localStorage.getItem('plugins/permissions') this.permissions = permission ? JSON.parse(permission) : {} } persistPermissions () { const permissions = JSON.stringify(this.permissions) - localStorage.setItem('plugin-permissions', permissions) + localStorage.setItem('plugins/permissions', permissions) } clear () { - localStorage.removeItem('plugin-permissions') + localStorage.removeItem('plugins/permissions') } /** @@ -52,7 +61,7 @@ export class PermissionHandler { this.permissions[to.name][from.name].allow = true this.persistPermissions() } - resolve(true) + resolve() } }, { @@ -62,7 +71,7 @@ export class PermissionHandler { this.permissions[to.name][from.name].allow = false this.persistPermissions() } - resolve(false) + reject(notAllowWarning(from, to)) } } ) @@ -80,7 +89,11 @@ export class PermissionHandler { if (!this.permissions[to.name][from.name]) return this.openPermission(from, to) const { allow, hash } = this.permissions[to.name][from.name] - if (!allow) return false + if (!allow) { + const warning = notAllowWarning(from, to) + addTooltip(warning) + throw new Error(warning) + } return hash === from.hash ? true // Allow : this.openPermission(from, to) // New version of a plugin @@ -93,7 +106,7 @@ export class PermissionHandler { */ form (from, to) { const fromName = from.displayName || from.name - const toName = from.displayName || from.name + const toName = to.displayName || to.name const remember = this.permissions[to.name][from.name] const switchMode = (e) => { @@ -103,7 +116,7 @@ export class PermissionHandler { } const rememberSwitch = remember ? yo`` - : yo`` + : yo`` const message = remember ? `${fromName} has changed and would like to access the plugin ${toName}.` : `${fromName} would like to access plugin ${toName}.` @@ -112,10 +125,10 @@ export class PermissionHandler {
- -> + --->
-

${message}

+

${message}

${rememberSwitch}