diff --git a/core/client.js b/core/client.js index 462a77c4..839e47e0 100644 --- a/core/client.js +++ b/core/client.js @@ -29,7 +29,10 @@ const k_api = { error: {args: ['error'], func: api_error}, localStorageSet: {args: ['key', 'value'], func: api_localStorageSet}, localStorageGet: {args: ['key'], func: api_localStorageGet}, - requestPermission: {args: ['permission', 'id'], func: api_requestPermission}, + requestPermission: { + args: ['permission', 'id', 'description'], + func: api_requestPermission, + }, print: {args: ['...'], func: api_print}, setHash: {args: ['hash'], func: api_setHash}, }; @@ -1222,10 +1225,10 @@ function api_localStorageGet(key) { /** * Request a permission * @param permission The permission to request. - * @param id The id requeesting the permission. + * @param description An optional human-readable description of the action for which the permission is being requested. * @return A promise fulfilled if the permission was granted. */ -function api_requestPermission(permission, id) { +function api_requestPermission(permission, description) { let outer = document.createElement('div'); outer.classList.add('permissions'); @@ -1242,6 +1245,16 @@ function api_requestPermission(permission, id) { div.appendChild(span); container.appendChild(div); + if (description) { + container.appendChild(document.createTextNode('for the action:')); + let description_div = document.createElement('div'); + description_div.classList.add('w3-border'); + description_div.style.maxHeight = '3em'; + description_div.style.overflow = 'auto'; + description_div.appendChild(document.createTextNode(description)); + container.appendChild(description_div); + } + div = document.createElement('div'); div.style = 'padding: 1em'; let check = document.createElement('input'); diff --git a/core/core.js b/core/core.js index 82956f06..449303cd 100644 --- a/core/core.js +++ b/core/core.js @@ -212,7 +212,7 @@ async function getProcessBlob(blobId, key, options) { return settings.userPermissions[user]; } }, - permissionTest: async function (permission) { + permissionTest: async function (permission, description) { let user = process?.credentials?.session?.name; let settings = await loadSettings(); if (!user || !options?.packageOwner || !options?.packageName) { @@ -239,7 +239,7 @@ async function getProcessBlob(blobId, key, options) { } } else if (process.app) { return process.app - .makeFunction(['requestPermission'])(permission) + .makeFunction(['requestPermission'])(permission, description) .then(async function (value) { if (value == 'allow') { await ssb.setUserPermission( @@ -436,8 +436,18 @@ async function getProcessBlob(blobId, key, options) { process.credentials.session && process.credentials.session.name ) { + let action; + try { + if (message?.type === 'vote' && message?.vote?.expression) { + action = `React with ${message?.vote?.expression}.`; + } else if (typeof message === 'string') { + action = `Post a private message.`; + } else { + action = `Post a ${message?.type}.`; + } + } catch {} return Promise.resolve( - imports.core.permissionTest('ssb_append') + imports.core.permissionTest('ssb_append', action) ).then(function () { return ssb.appendMessageWithIdentity( process.credentials.session.name, diff --git a/core/style.css b/core/style.css index 99010bd0..65e48515 100644 --- a/core/style.css +++ b/core/style.css @@ -152,4 +152,5 @@ body { border-bottom: 4px solid #fff; padding: 1em; margin: 0 auto; + max-width: 80%; }