File size: 3,822 Bytes
30c32c8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
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;