379 lines
11 KiB
JavaScript
379 lines
11 KiB
JavaScript
import * as MODULE from "../MaterialDeck.js";
|
|
import { playlistConfigForm, macroConfigForm, soundboardConfigForm, downloadUtility } from "./misc.js";
|
|
|
|
let userPermissions = {};
|
|
const defaultEnable = [true,true,true,true];
|
|
const defaultUserPermissions = {
|
|
COMBAT: {
|
|
END_TURN: [true,true,true,true],
|
|
TURN_DISPLAY: [true,true,true,true],
|
|
OTHER_FUNCTIONS: [false,false,true,true],
|
|
DISPLAY_COMBATANTS: [false,false,true,true],
|
|
DISPLAY_NON_OWNED_STATS: [false,false,true,true],
|
|
DISPLAY_LIMITED_HP: [false,true,true,true],
|
|
DISPLAY_OBSERVER_HP: [true,true,true,true],
|
|
DISPLAY_ALL_NAMES: [false,false,true,true],
|
|
DISPLAY_LIMITED_NAME: [false,true,true,true],
|
|
DISPLAY_OBSERVER_NAME: [true,true,true,true]
|
|
},
|
|
MACRO: {
|
|
HOTBAR: [true,true,true,true],
|
|
BY_NAME: [false,false,true,true],
|
|
MACROBOARD: [false,false,true,true],
|
|
MACROBOARD_CONFIGURE: [false,false,true,true]
|
|
},
|
|
OTHER: {
|
|
PAUSE: [false,false,true,true],
|
|
CONTROL: [true,true,true,true],
|
|
DARKNESS: [false,false,true,true],
|
|
DICE: [true,true,true,true],
|
|
TABLES_ALL: [false,false,true,true],
|
|
TABLES: [false,true,true,true],
|
|
SIDEBAR: [true,true,true,true],
|
|
COMPENDIUM_ALL: [false,false,true,true],
|
|
COMPENDIUM: [false,true,true,true],
|
|
JOURNAL_ALL: [false,false,true,true],
|
|
JOURNAL: [false,true,true,true],
|
|
CHAT: [false,true,true,true]
|
|
},
|
|
PLAYLIST: {
|
|
PLAY: [false,false,true,true],
|
|
CONFIGURE: [false,false,true,true]
|
|
},
|
|
SCENE: {
|
|
VISIBLE: [false,false,true,true],
|
|
ACTIVE: [true,true,true,true],
|
|
DIRECTORY: [false,false,true,true],
|
|
NAME: [false,false,true,true]
|
|
},
|
|
SOUNDBOARD: {
|
|
PLAY: [false,false,true,true],
|
|
CONFIGURE: [false,false,true,true]
|
|
},
|
|
TOKEN: {
|
|
STATS: [true,true,true,true],
|
|
VISIBILITY: [false,false,true,true],
|
|
COMBAT: [false,true,true,true],
|
|
VISION: [false,true,true,true],
|
|
WILDCARD: [false,true,true,true],
|
|
CONDITIONS: [false,true,true,true],
|
|
CUSTOM: [false,false,true,true],
|
|
NON_OWNED: [false,false,true,true],
|
|
OBSERVER: [false,true,true,true]
|
|
}
|
|
}
|
|
|
|
export const registerSettings = async function() {
|
|
/**
|
|
* Main settings
|
|
*/
|
|
//world,global,client
|
|
|
|
//Enabled the module
|
|
game.settings.register(MODULE.moduleName,'Enable', {
|
|
name: "MaterialDeck.Sett.Enable",
|
|
scope: "client",
|
|
config: true,
|
|
default: false,
|
|
type: Boolean,
|
|
onChange: x => window.location.reload()
|
|
});
|
|
|
|
/**
|
|
* Sets the ip address of the server
|
|
*/
|
|
game.settings.register(MODULE.moduleName,'address', {
|
|
name: "MaterialDeck.Sett.ServerAddr",
|
|
hint: "MaterialDeck.Sett.ServerAddrHint",
|
|
scope: "client",
|
|
config: true,
|
|
default: "localhost:3001",
|
|
type: String,
|
|
onChange: x => window.location.reload()
|
|
});
|
|
|
|
game.settings.register(MODULE.moduleName, 'imageBuffer', {
|
|
name: "MaterialDeck.Sett.ImageBuffer",
|
|
hint: "MaterialDeck.Sett.ImageBufferHint",
|
|
default: 100,
|
|
type: Number,
|
|
scope: 'client',
|
|
range: { min: 0, max: 500, step: 10 },
|
|
config: true
|
|
|
|
});
|
|
|
|
game.settings.register(MODULE.moduleName, 'imageBrightness', {
|
|
name: "MaterialDeck.Sett.ImageBrightness",
|
|
hint: "MaterialDeck.Sett.ImageBrightnessHint",
|
|
default: 50,
|
|
type: Number,
|
|
scope: 'client',
|
|
range: { min: 0, max: 100, step: 1 },
|
|
config: true
|
|
|
|
});
|
|
|
|
game.settings.register(MODULE.moduleName, 'nrOfConnMessages', {
|
|
name: "MaterialDeck.Sett.NrOfConnMessages",
|
|
hint: "MaterialDeck.Sett.NrOfConnMessagesHint",
|
|
default: 5,
|
|
type: Number,
|
|
scope: 'client',
|
|
range: { min: 0, max: 100, step: 1 },
|
|
config: true
|
|
|
|
});
|
|
|
|
//Create the Help button
|
|
game.settings.registerMenu(MODULE.moduleName, 'helpMenu',{
|
|
name: "MaterialDeck.Sett.Help",
|
|
label: "MaterialDeck.Sett.Help",
|
|
type: helpMenu,
|
|
restricted: false
|
|
});
|
|
|
|
game.settings.registerMenu(MODULE.moduleName, 'permissionConfig',{
|
|
name: "MaterialDeck.Sett.Permission",
|
|
label: "MaterialDeck.Sett.Permission",
|
|
type: userPermission,
|
|
restricted: true
|
|
});
|
|
|
|
game.settings.register(MODULE.moduleName, 'userPermission', {
|
|
name: "userPermission",
|
|
scope: "world",
|
|
type: Object,
|
|
config: false
|
|
});
|
|
|
|
game.settings.registerMenu(MODULE.moduleName, 'downloadUtility',{
|
|
name: "MaterialDeck.DownloadUtility.Title",
|
|
label: "MaterialDeck.DownloadUtility.Title",
|
|
type: downloadUtility,
|
|
restricted: false
|
|
});
|
|
|
|
/**
|
|
* Playlist soundboard
|
|
*/
|
|
game.settings.registerMenu(MODULE.moduleName, 'playlistConfigMenu',{
|
|
name: "MaterialDeck.Sett.PlaylistConfig",
|
|
label: "MaterialDeck.Sett.PlaylistConfig",
|
|
type: playlistConfigForm,
|
|
restricted: false
|
|
});
|
|
|
|
game.settings.register(MODULE.moduleName, 'playlists', {
|
|
name: "selectedPlaylists",
|
|
scope: "world",
|
|
type: Object,
|
|
default: {},
|
|
config: false
|
|
});
|
|
|
|
/**
|
|
* Macro Board
|
|
*/
|
|
game.settings.registerMenu(MODULE.moduleName, 'macroConfigMenu',{
|
|
name: "MaterialDeck.Sett.MacroConfig",
|
|
label: "MaterialDeck.Sett.MacroConfig",
|
|
type: macroConfigForm,
|
|
restricted: false
|
|
});
|
|
|
|
game.settings.register(MODULE.moduleName, 'macroSettings', {
|
|
name: "macroSettings",
|
|
scope: "world",
|
|
type: Object,
|
|
config: false
|
|
});
|
|
|
|
game.settings.register(MODULE.moduleName, 'macroArgs', {
|
|
name: "macroArgs",
|
|
scope: "world",
|
|
type: Object,
|
|
config: false
|
|
});
|
|
|
|
/**
|
|
* Soundboard
|
|
*/
|
|
game.settings.register(MODULE.moduleName, 'soundboardSettings', {
|
|
name: "soundboardSettings",
|
|
scope: "world",
|
|
type: Object,
|
|
default: "None",
|
|
config: false
|
|
});
|
|
|
|
game.settings.registerMenu(MODULE.moduleName, 'soundboardConfigMenu',{
|
|
name: "MaterialDeck.Sett.SoundboardConfig",
|
|
label: "MaterialDeck.Sett.SoundboardConfig",
|
|
type: soundboardConfigForm,
|
|
restricted: false
|
|
});
|
|
|
|
let permissionSettings = game.settings.get(MODULE.moduleName,'userPermission');
|
|
if (permissionSettings == undefined || permissionSettings == null || MODULE.isEmpty(permissionSettings)) {
|
|
permissionSettings = {
|
|
enable: defaultEnable,
|
|
permissions: defaultUserPermissions
|
|
}
|
|
}
|
|
else {
|
|
if (permissionSettings.permissions.TOKEN.NON_OWNED == undefined) permissionSettings.permissions.TOKEN.NON_OWNED = [false,false,true,true];
|
|
if (permissionSettings.permissions.TOKEN.OBSERVER == undefined) permissionSettings.permissions.TOKEN.OBSERVER = [false,true,true,true];
|
|
if (permissionSettings.permissions.MACRO.BY_NAME == undefined) permissionSettings.permissions.MACRO.BY_NAME = [false,false,true,true];
|
|
}
|
|
if (game.user.isGM)
|
|
game.settings.set(MODULE.moduleName,'userPermission',permissionSettings);
|
|
}
|
|
|
|
|
|
|
|
export class helpMenu extends FormApplication {
|
|
constructor(data, options) {
|
|
super(data, options);
|
|
}
|
|
|
|
/**
|
|
* Default Options for this FormApplication
|
|
*/
|
|
static get defaultOptions() {
|
|
return mergeObject(super.defaultOptions, {
|
|
id: "helpMenu",
|
|
title: "Material Deck: "+game.i18n.localize("MaterialDeck.Sett.Help"),
|
|
template: "./modules/MaterialDeck/templates/helpMenu.html",
|
|
width: "500px"
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Provide data to the template
|
|
*/
|
|
getData() {
|
|
|
|
return {
|
|
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Update on form submit
|
|
* @param {*} event
|
|
* @param {*} formData
|
|
*/
|
|
async _updateObject(event, formData) {
|
|
|
|
}
|
|
|
|
activateListeners(html) {
|
|
super.activateListeners(html);
|
|
|
|
}
|
|
}
|
|
|
|
class userPermission extends FormApplication {
|
|
constructor(data, options) {
|
|
super(data, options);
|
|
}
|
|
|
|
/**
|
|
* Default Options for this FormApplication
|
|
*/
|
|
static get defaultOptions() {
|
|
return mergeObject(super.defaultOptions, {
|
|
id: "userPermissionConfig",
|
|
title: "Material Deck: "+game.i18n.localize("MaterialDeck.Sett.Permission"),
|
|
template: "./modules/MaterialDeck/templates/userPermissionConfig.html",
|
|
width: 660,
|
|
height: "auto",
|
|
scrollY: [".permissions-list"],
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Provide data to the template
|
|
*/
|
|
async getData() {
|
|
let settings = game.settings.get(MODULE.moduleName,'userPermission');
|
|
if (settings == undefined || settings == null || MODULE.isEmpty(settings)) {
|
|
settings = {
|
|
enable: defaultEnable,
|
|
permissions: defaultUserPermissions
|
|
}
|
|
}
|
|
|
|
const actions = Object.entries(duplicate(settings.permissions)).reduce((arr, e) => {
|
|
const perms = Object.entries(duplicate(e[1])).reduce((arr, p) => {
|
|
let perm = {};
|
|
perm.roles = [p[1][0],p[1][1],p[1][2],p[1][3]]
|
|
perm.id = p[0];
|
|
perm.label = game.i18n.localize("MaterialDeck.Perm."+e[0]+"."+p[0]+".label");
|
|
perm.hint = game.i18n.localize("MaterialDeck.Perm."+e[0]+"."+p[0]+".hint");
|
|
arr.push(perm);
|
|
return arr;
|
|
}, []);
|
|
|
|
let cat = {};
|
|
cat.permissions = perms;
|
|
cat.id = e[0];
|
|
cat.label = game.i18n.localize("MaterialDeck.Perm."+e[0]+".label");
|
|
cat.hint = game.i18n.localize("MaterialDeck.Perm."+e[0]+".hint");
|
|
arr.push(cat);
|
|
return arr;
|
|
}, []);
|
|
for (let i=0; i<actions.length; i++) {
|
|
if (actions[i].id == 'MOVE')
|
|
actions.splice(i,1);
|
|
}
|
|
return {
|
|
roles: Object.keys(CONST.USER_ROLES).reduce((obj, r) => {
|
|
if ( r === "NONE" ) return obj;
|
|
obj[r] = `USER.Role${r.titleCase()}`;
|
|
return obj;
|
|
}, {}),
|
|
actions: actions,
|
|
enable: settings.enable
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Update on form submit
|
|
* @param {*} event
|
|
* @param {*} formData
|
|
*/
|
|
async _updateObject(event, formData) {
|
|
let permissions = expandObject(formData);
|
|
let settings = {};
|
|
settings.enable = permissions.ENABLE;
|
|
delete permissions.ENABLE;
|
|
settings.permissions = permissions;
|
|
// game.settings.set(MODULE.moduleName,'userPermission',settings);
|
|
}
|
|
|
|
async activateListeners(html) {
|
|
super.activateListeners(html);
|
|
const defaultBtn = html.find('button[name="reset"]');
|
|
|
|
defaultBtn.on("click", event => {
|
|
this.resetToDefault();
|
|
})
|
|
|
|
|
|
}
|
|
|
|
async resetToDefault(){
|
|
const settings = {
|
|
enable: defaultEnable,
|
|
permissions: defaultUserPermissions
|
|
}
|
|
await game.settings.set(MODULE.moduleName,'userPermission',settings);
|
|
this.render();
|
|
ui.notifications.info(game.i18n.localize("MaterialDeck.Perm.DefaultNotification"));
|
|
}
|
|
}
|
|
|
|
|