Spaces:
Building
Building
const BlockType = require('../../extension-support/block-type'); | |
const ArgumentType = require('../../extension-support/argument-type'); | |
const ProjectPermissionManager = require('../../util/project-permissions'); | |
/** | |
* Class for Permission blocks | |
* @constructor | |
*/ | |
class JgPermissionBlocks { | |
constructor(runtime) { | |
/** | |
* The runtime instantiating this block package. | |
* @type {Runtime} | |
*/ | |
this.runtime = runtime; | |
} | |
/** | |
* @returns {object} metadata for this extension and its blocks. | |
*/ | |
getInfo() { | |
return { | |
id: 'JgPermissionBlocks', | |
name: 'Permissions', | |
color1: '#00C4FF', | |
color2: '#0093FF', | |
blocks: [ | |
{ | |
blockType: BlockType.LABEL, | |
text: "This extension is deprecated." | |
}, | |
// tw says deleting menu elements is unsafe | |
// blocks below this are hidden | |
{ hideFromPalette: true, opcode: 'requestPermission', text: 'request [PERMISSION] permission', disableMonitor: false, blockType: BlockType.BOOLEAN, arguments: { PERMISSION: { type: ArgumentType.STRING, menu: 'permissions', defaultValue: "javascript" } } }, | |
{ hideFromPalette: true, opcode: 'requestPermission2', text: 'request [PERMISSION] permission', disableMonitor: false, blockType: BlockType.BOOLEAN, arguments: { PERMISSION: { type: ArgumentType.STRING, menu: 'permissions2' } } }, | |
{ hideFromPalette: true, opcode: 'requestAllPermission', text: 'request all permissions', disableMonitor: false, blockType: BlockType.BOOLEAN }, | |
{ hideFromPalette: true, opcode: 'requestSitePermission', text: 'request permission to show [URL]', disableMonitor: false, blockType: BlockType.BOOLEAN, arguments: { URL: { type: ArgumentType.STRING, defaultValue: "https://www.example.com" } } }, | |
], | |
menus: { | |
// tw says deleting menu elements is unsafe | |
// menus below this are hidden | |
permissions: "fetchPermissionsList", | |
permissions2: "fetchPermissionsList2" | |
} | |
}; | |
} | |
fetchPermissionsList() { | |
return Object.getOwnPropertyNames(ProjectPermissionManager.permissions).filter(name => typeof ProjectPermissionManager.permissions[name] === "boolean").map(permissionName => ({ | |
text: permissionName, | |
value: permissionName | |
})); | |
} | |
fetchPermissionsList2() { | |
// tw says deleting menu elements is unsafe | |
return Object.getOwnPropertyNames(ProjectPermissionManager.permissions).filter(name => typeof ProjectPermissionManager.permissions[name] === "boolean").filter(name => name !== "javascript").map(permissionName => ({ | |
text: permissionName, | |
value: permissionName | |
})); | |
} | |
requestPermission(args) { | |
const permission = args.PERMISSION; | |
if (ProjectPermissionManager.permissions[permission] == true) return true; | |
return ProjectPermissionManager.RequestPermission(permission); | |
} | |
requestPermission2(args) { | |
// tw says deleting menu elements is unsafe | |
const permission = args.PERMISSION; | |
if (ProjectPermissionManager.permissions[permission] == true) return true; | |
return ProjectPermissionManager.RequestPermission(permission); | |
} | |
requestAllPermission() { | |
return ProjectPermissionManager.RequestAllPermissions(); | |
} | |
requestSitePermission(args) { | |
const site = args.URL; | |
if (ProjectPermissionManager.permissions.limitedWebsites[site] == true) return true; | |
return ProjectPermissionManager.RequestPermission("limitedWebsite", site); | |
} | |
} | |
module.exports = JgPermissionBlocks; | |