From a076a882517c79e1a6a7b1131dfeec6cd5bb7413 Mon Sep 17 00:00:00 2001 From: MoonIsFalling Date: Thu, 2 Feb 2023 18:40:10 +0100 Subject: [PATCH 1/3] add a button to send to chat (in show to players) --- dist/languages/en.json | 1 + dist/scripts/module.js | 32 ++++++++++++++++++++++++++++++- dist/scripts/module.js.map | 2 +- dist/templates/selectiveshow.html | 1 + src/languages/en.json | 1 + src/templates/selectiveshow.html | 1 + src/ts/apps/selectiveShow.ts | 14 ++++++++++++++ src/ts/utils.ts | 13 +++++++++++++ 8 files changed, 63 insertions(+), 2 deletions(-) diff --git a/dist/languages/en.json b/dist/languages/en.json index 7a6ed8d..5d78de0 100644 --- a/dist/languages/en.json +++ b/dist/languages/en.json @@ -5,6 +5,7 @@ "DisplayActions2e.ButtonIcon": "pf2-actions a", "DisplayActions2e.ShowPermissions": "Show with Permissions", "DisplayActions2e.Duplication": "Duplicate", + "DisplayActions2e.SentToChat": "Send to Chat", "selectiveshow": { "Show" : "Show", "ShowAll": "Show All", diff --git a/dist/scripts/module.js b/dist/scripts/module.js index 45a0ed3..7ff4a67 100644 --- a/dist/scripts/module.js +++ b/dist/scripts/module.js @@ -69,6 +69,22 @@ class SelectiveShowApp extends FormApplication { }); this.close(); }); + html.find(".send-to-chat").click((ev) => { + ev.preventDefault(); + this._updateObject(); + console.log(html); + let msg = document.getElementById("DisplayActions2e").getElementsByClassName("window-content")[0].getElementsByClassName("flexbox-actions")[0]; + console.log(this.displayActionState.appId); + ChatMessage.create({ + content: msg.outerHTML + }); + handleSendToChat({ + operation: "sendToChat", + state: this.displayActionState, + user: game.userId + }); + this.close(); + }); } _updateObject() { let selector = Array.from( @@ -113,12 +129,15 @@ class DisplayActions2e extends Application { userListPermissions: [String(game.userId)], tokenId: void 0, isLinkedToToken: this.isLinkedToActor, - duplicationNr: 0 + duplicationNr: 0, + appId: this.appId }; this.showPlayerHandler = new SelectiveShowApp([String((_a = game.user) == null ? void 0 : _a.data.name)], this.state); if (newState) { this.state = newState; } + console.log("Jens"); + console.log(this.appId); } get title() { let title = game.i18n.localize("DisplayActions2e.WindowTitle"); @@ -376,6 +395,17 @@ function handleDuplication(data) { dialog.render(true, { id: `DisplayActions2e${data.user}${newState.duplicationNr}` }); module2.displayActions2e.push(dialog); } +function handleSendToChat(data) { + let app = checkForApp(data); + if (app) { + if (app.rendered) { + let msg = app.element.find(".window-content").find(".flexbox-actions").wrapAll("
").parent(); + ChatMessage.create({ + content: msg.html() + }); + } + } +} function checkForApp(data) { let module2 = game.modules.get(moduleId); let app = module2.displayActions2e.find((app2) => { diff --git a/dist/scripts/module.js.map b/dist/scripts/module.js.map index b5246a4..fda89a7 100644 --- a/dist/scripts/module.js.map +++ b/dist/scripts/module.js.map @@ -1 +1 @@ -{"version":3,"file":"module.js","sources":["../../src/ts/constants.ts","../../src/ts/apps/selectiveShow.ts","../../src/ts/apps/displayActions.ts","../../src/ts/utils.ts","../../src/ts/module.ts"],"sourcesContent":["import {name} from '../module.json';\r\nimport {ConditionModifierDictionary} from './types';\r\n\r\nexport const moduleId = name;\r\nexport const moduleName = 'DisplayActions2e';\r\nexport const socketEvent = `module.${moduleId}`;\r\nexport const condtionModifierTable: ConditionModifierDictionary = {\r\n slowed: -1,\r\n quickened: 1,\r\n stunned: 1,\r\n};\r\n","/* original by FVTT-SelectiveShow */\r\n\r\nimport {moduleId, socketEvent} from '../constants';\r\nimport {DisplayActions2eData, EmitData} from '../types';\r\n\r\nexport class SelectiveShowApp extends FormApplication {\r\n private userNameList: string[];\r\n private displayActionState: DisplayActions2eData;\r\n\r\n constructor(users: string[], state: DisplayActions2eData) {\r\n super(users);\r\n this.userNameList = users;\r\n this.displayActionState = state;\r\n }\r\n\r\n static override get defaultOptions() {\r\n const options = super.defaultOptions;\r\n options.id = 'DisplayActions2e-selective-show';\r\n options.template = `modules/${moduleId}/templates/selectiveshow.html`;\r\n options.classes?.push('selective-show');\r\n options.height = 300;\r\n options.width = 250;\r\n options.minimizable = true;\r\n options.resizable = true;\r\n options.title = game.i18n.localize('selectiveshow.SelectiveShow');\r\n return options;\r\n }\r\n\r\n override async getData() {\r\n let data = await super.getData();\r\n // 👇️ ts-ignore ignores any ts errors on the next line\r\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n // @ts-ignore\r\n data.users = game.users.filter(u => u.active && u.data.id != game.user.id);\r\n return data;\r\n }\r\n\r\n override activateListeners(html: JQuery) {\r\n super.activateListeners(html);\r\n\r\n html.find('.show').click(ev => {\r\n ev.preventDefault();\r\n this._updateObject();\r\n // let selector = $(ev.currentTarget).parents('form').find('select');\r\n game.socket?.emit(socketEvent, {\r\n operation: 'showToSelection',\r\n state: this.displayActionState,\r\n user: game.userId,\r\n userList: this.userNameList,\r\n } as EmitData);\r\n this.close();\r\n });\r\n html.find('.show-all').click(ev => {\r\n ev.preventDefault();\r\n this._updateObject();\r\n\r\n game.socket?.emit(socketEvent, {\r\n operation: 'showToAll',\r\n state: this.displayActionState,\r\n user: game.userId,\r\n } as EmitData);\r\n\r\n this.close();\r\n });\r\n\r\n html.find('.show-permissions').click(ev => {\r\n ev.preventDefault();\r\n this._updateObject();\r\n\r\n this.displayActionState.userListPermissions = this.userNameList;\r\n\r\n game.socket?.emit(socketEvent, {\r\n operation: 'showWithPermission',\r\n state: this.displayActionState,\r\n user: game.userId,\r\n userList: this.userNameList,\r\n } as EmitData);\r\n\r\n this.close();\r\n });\r\n }\r\n\r\n protected override _updateObject(): Promise {\r\n let selector = Array.from(\r\n document.getElementsByClassName('selective-show-form')[0].children[0].children[0].children[0].children,\r\n ) as HTMLOptionElement[];\r\n this.userNameList = selector.map((element: HTMLOptionElement) => {\r\n // 👇️ ts-ignore ignores any ts errors on the next line\r\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n // @ts-ignore\r\n if (element.selected) {\r\n return element.value;\r\n }\r\n return '';\r\n });\r\n\r\n // active User Id needs to be send always\r\n let activeUserId = game.userId;\r\n if (activeUserId) {\r\n if (!this.userNameList.includes(activeUserId)) {\r\n this.userNameList.push(activeUserId);\r\n }\r\n }\r\n return new Promise(() => {});\r\n }\r\n\r\n _handleShowPlayers(state: DisplayActions2eData) {\r\n this.render(true);\r\n this.displayActionState = state;\r\n }\r\n}\r\n","import {ActorPF2e} from '../../../types/src/module/actor';\r\nimport {ConditionPF2e} from '../../../types/src/module/item';\r\nimport {TokenDocumentPF2e} from '../../../types/src/module/token-document';\r\nimport {moduleId, socketEvent} from '../constants';\r\nimport {actionsFromConditions, handleDuplication, handleToken} from '../utils';\r\nimport {DisplayActions2eData, EmitData} from '../types';\r\nimport {SelectiveShowApp} from './selectiveShow';\r\n\r\nexport class DisplayActions2e extends Application {\r\n protected clickString = 'symbolClick';\r\n protected actionImage = '/systems/pf2e/icons/actions/OneAction.webp';\r\n protected reactionImage = '/systems/pf2e/icons/actions/Reaction.webp';\r\n protected defaultNumOfActions = 3;\r\n protected defaultNumOfReactions = 1;\r\n protected isLinkedToActor = false;\r\n\r\n protected state: DisplayActions2eData = {\r\n numOfActions: this.defaultNumOfActions,\r\n numOfReactions: this.defaultNumOfReactions,\r\n classNameListActions: Array.from({length: this.defaultNumOfActions}, () => 'symbol'),\r\n classNameListReactions: Array.from({length: this.defaultNumOfReactions}, () => 'symbol'),\r\n sentFromUserId: String(game.userId),\r\n userListPermissions: [String(game.userId)],\r\n tokenId: undefined,\r\n isLinkedToToken: this.isLinkedToActor,\r\n duplicationNr: 0,\r\n };\r\n\r\n protected showPlayerHandler: SelectiveShowApp = new SelectiveShowApp([String(game.user?.data.name)], this.state);\r\n\r\n constructor(newState?: DisplayActions2eData) {\r\n super();\r\n\r\n if (newState) {\r\n this.state = newState;\r\n }\r\n }\r\n\r\n override get title(): string {\r\n let title = game.i18n.localize('DisplayActions2e.WindowTitle');\r\n\r\n if (this.state.isLinkedToToken) {\r\n title = title.concat(this.getTitleToken());\r\n }\r\n\r\n title = title.concat(this.getTitleSentFrom());\r\n title = title.concat(this.getTitleDuplication());\r\n return title;\r\n }\r\n\r\n static override get defaultOptions(): ApplicationOptions {\r\n return foundry.utils.mergeObject(super.defaultOptions, {\r\n id: 'DisplayActions2e',\r\n template: `modules/${moduleId}/templates/result.hbs`,\r\n width: 270,\r\n height: 140,\r\n resizable: true,\r\n title: 'DisplayActions2e.WindowTitle',\r\n }) as ApplicationOptions;\r\n }\r\n\r\n override getData() {\r\n this.updateState();\r\n\r\n return {\r\n numOfActions: this.state.numOfActions,\r\n numOfReactions: this.state.numOfReactions,\r\n actionImagePayload: this.buildHandlebarPayload(\r\n this.state.numOfActions,\r\n {actionImage: this.actionImage},\r\n this.state.classNameListActions,\r\n ),\r\n reactionImagePayload: this.buildHandlebarPayload(\r\n this.state.numOfReactions,\r\n {reactionImage: this.reactionImage},\r\n this.state.classNameListReactions,\r\n ),\r\n isLinkedToActor: this.state.isLinkedToToken,\r\n };\r\n }\r\n\r\n override activateListeners(html: JQuery): void {\r\n super.activateListeners(html);\r\n // register events for all users with permission\r\n if (this.state.userListPermissions.includes(String(game.userId))) {\r\n html.find('img.symbol').on('click', this._onClickSymbolImage.bind(this));\r\n html.find('input.input-counter').on('change', this._onChangeCountNumber.bind(this));\r\n // html.find('button.actorLink').on('click', DataWrapper2e.createApplications);\r\n html.find('button.actorLink').on('click', this._onButtonClickSelectedActors.bind(this));\r\n html.find('button.actorUpdate').on('click', this._onButtonClickUpdateActors.bind(this));\r\n }\r\n }\r\n\r\n protected _onClickSymbolImage(event: Event) {\r\n event.preventDefault();\r\n // switch css classes of the images\r\n const image = event.currentTarget as HTMLImageElement;\r\n if (image === undefined || image === null) {\r\n return;\r\n }\r\n image.classList.toggle(this.clickString);\r\n // save the state\r\n // all id begin with either a or r for action or reaction respectively\r\n const pos = parseInt(image.id.slice(1));\r\n switch (image.id.charAt(0)) {\r\n case 'a':\r\n this.state.classNameListActions[pos] = image.className;\r\n break;\r\n case 'r':\r\n this.state.classNameListReactions[pos] = image.className;\r\n break;\r\n default:\r\n console.error(`${moduleId} handled Image onClicks wrong.`);\r\n }\r\n\r\n this.emitUpdate();\r\n }\r\n\r\n /**\r\n * Helper function to make Payload for Handlebars each loop to pass data\r\n * @param iterator array size\r\n */\r\n protected buildHandlebarPayload(iterator: number, imageObj: any, state: string[]) {\r\n let payload = [];\r\n for (let index = 0; index < iterator; index++) {\r\n payload.push(foundry.utils.mergeObject({number: index, cssClass: state[index]}, imageObj));\r\n }\r\n return payload;\r\n }\r\n\r\n protected _onChangeCountNumber(event: Event) {\r\n event.preventDefault();\r\n const input = event.currentTarget as HTMLInputElement;\r\n const value = parseInt(input.value);\r\n if (!isNaN(value)) {\r\n if (value >= 0) {\r\n switch (input.id) {\r\n case 'count-action':\r\n this.state.numOfActions = value;\r\n break;\r\n case 'count-reaction':\r\n this.state.numOfReactions = value;\r\n break;\r\n default:\r\n console.error(`${moduleId} incorrectly handled number of actions!`);\r\n }\r\n this.render();\r\n this.emitUpdate();\r\n }\r\n }\r\n }\r\n\r\n protected override _getHeaderButtons(): ApplicationHeaderButton[] {\r\n const buttons = super._getHeaderButtons();\r\n\r\n const headerButton: ApplicationHeaderButton = {\r\n label: 'JOURNAL.ActionShow',\r\n class: 'share-image',\r\n icon: 'fas fa-eye',\r\n onclick: () => this.showPlayerHandler._handleShowPlayers(this.state),\r\n };\r\n\r\n const headerButtonDuplication: ApplicationHeaderButton = {\r\n label: 'DisplayActions2e.Duplication',\r\n class: 'duplicate-app',\r\n icon: 'fa fa-clone',\r\n onclick: () => this._onHeaderDuplication(),\r\n };\r\n\r\n buttons.unshift(headerButton);\r\n buttons.unshift(headerButtonDuplication);\r\n\r\n return buttons;\r\n }\r\n\r\n /**\r\n * Update internal state based on the size of the arrays\r\n */\r\n protected updateState() {\r\n // case to few state elements\r\n if (this.state.classNameListActions.length < this.state.numOfActions) {\r\n const tmp = Array.from(\r\n {length: this.state.numOfActions - this.state.classNameListActions.length},\r\n () => 'symbol',\r\n );\r\n this.state.classNameListActions = this.state.classNameListActions.concat(tmp);\r\n }\r\n // too many elements, we remove the last elements\r\n else if (this.state.classNameListActions.length > this.state.numOfActions) {\r\n const cut_value = this.state.classNameListActions.length - this.state.numOfActions;\r\n this.state.classNameListActions = this.state.classNameListActions.slice(0, cut_value);\r\n }\r\n\r\n // other state same cases\r\n\r\n // case to few state elements\r\n if (this.state.classNameListReactions.length < this.state.numOfReactions) {\r\n const tmp = Array.from(\r\n {length: this.state.numOfReactions - this.state.classNameListReactions.length},\r\n () => 'symbol',\r\n );\r\n this.state.classNameListReactions = this.state.classNameListReactions.concat(tmp);\r\n }\r\n // too many elements, we remove the last elements\r\n else if (this.state.classNameListReactions.length > this.state.numOfReactions) {\r\n const cut_value = this.state.classNameListReactions.length - this.state.numOfReactions;\r\n this.state.classNameListReactions = this.state.classNameListReactions.slice(0, cut_value);\r\n }\r\n }\r\n\r\n protected emitUpdate() {\r\n game.socket?.emit(socketEvent, {\r\n operation: 'update',\r\n state: this.state,\r\n user: game.userId,\r\n } as EmitData);\r\n }\r\n\r\n public setState(newState: DisplayActions2eData) {\r\n this.state = foundry.utils.deepClone(newState);\r\n }\r\n\r\n /**\r\n * returns a clone of the state not a reference\r\n */\r\n public getState() {\r\n return foundry.utils.deepClone(this.state);\r\n }\r\n\r\n /**\r\n * The following functions are only done because transpilation is bullying me and thus i cannot do an child of this class\r\n */\r\n private getTitleToken(): string {\r\n let title = '';\r\n\r\n let name = (canvas as Canvas).tokens.get(this.state.tokenId as string);\r\n title = title.concat(' for ', String(name?.data.name));\r\n return title;\r\n }\r\n\r\n private getTitleSentFrom(): string {\r\n if (this.state.sentFromUserId === game.userId) {\r\n return '';\r\n }\r\n let title = ' sent from ';\r\n let name = game.users?.find(user => {\r\n return user.data._id === this.state.sentFromUserId;\r\n })?.data.name;\r\n return title.concat(name);\r\n }\r\n\r\n private getTitleDuplication(): string {\r\n let title = '';\r\n if (this.state.duplicationNr > 0) {\r\n title = title.concat(' (', String(this.state.duplicationNr), ')');\r\n }\r\n return title;\r\n }\r\n\r\n private _onButtonClickSelectedActors() {\r\n canvas.tokens.controlled.forEach((token: TokenDocumentPF2e) => {\r\n // let app = new DisplayTokenActions2e(token.data._id);\r\n\r\n let newState = foundry.utils.deepClone(this.state);\r\n newState.isLinkedToToken = true;\r\n newState.tokenId = token.data._id;\r\n newState = this.generateActionsFromConditions(newState);\r\n\r\n handleToken({\r\n operation: 'token',\r\n state: newState,\r\n user: game.userId,\r\n } as EmitData);\r\n });\r\n }\r\n\r\n private _onButtonClickUpdateActors() {\r\n this.state = this.generateActionsFromConditions(this.state);\r\n this.render();\r\n }\r\n\r\n private _onHeaderDuplication() {\r\n let newState = foundry.utils.deepClone(this.state);\r\n\r\n handleDuplication({\r\n operation: 'duplication',\r\n state: newState,\r\n user: game.userId,\r\n } as EmitData);\r\n }\r\n\r\n private generateActionsFromConditions(oldState: DisplayActions2eData): DisplayActions2eData {\r\n let newState = foundry.utils.deepClone(oldState);\r\n\r\n let actor = ((canvas as Canvas).tokens.get(oldState.tokenId!)?.document as TokenDocumentPF2e).actor as ActorPF2e;\r\n // let actor = game.actors.tokens[oldState.tokenId!] as ActorPF2e;\r\n\r\n let conditions = actor.conditions as Map;\r\n\r\n let [numOfActions, numOfReactions] = actionsFromConditions(conditions);\r\n\r\n newState.numOfActions = numOfActions;\r\n newState.numOfReactions = numOfReactions;\r\n\r\n return newState;\r\n }\r\n}\r\n","import {ConditionPF2e} from '../../types/src/module/item';\r\nimport {DisplayActions2e} from './apps/displayActions';\r\nimport {condtionModifierTable, moduleId} from './constants';\r\nimport {EmitData, MyModule} from './types';\r\n\r\nexport function handleShowToAll(data: EmitData) {\r\n const dialog = checkAndBuildApp(data);\r\n dialog.render(true, {id: `DisplayActions2e${data.user}`} as RenderOptions);\r\n}\r\n\r\nexport function handleShowToSelection(data: EmitData) {\r\n if (data.userList?.includes(String(game.userId))) {\r\n const dialog = checkAndBuildApp(data);\r\n dialog.render(true, {id: `DisplayActions2e${data.user}`} as RenderOptions);\r\n }\r\n}\r\n\r\nexport function handleShowWithPermission(data: EmitData) {\r\n handleShowToSelection(data);\r\n}\r\n\r\nexport function handleUpdate(data: EmitData) {\r\n let module = game.modules.get(moduleId) as unknown as MyModule;\r\n let nameInTitle = game.users?.find(user => {\r\n return user.data._id === data.state.sentFromUserId;\r\n })?.data.name;\r\n\r\n if (nameInTitle) {\r\n module.displayActions2e.forEach(app => {\r\n // check for title OR own application update\r\n // this is why checkForApp cannot be used\r\n if (app.title.includes(nameInTitle!) || data.state.sentFromUserId === game.userId) {\r\n app.setState(data.state);\r\n app.render(false, {id: `DisplayActions2e${data.user}`} as RenderOptions);\r\n }\r\n });\r\n }\r\n}\r\n\r\nexport function handleToken(data: EmitData) {\r\n const dialog = checkAndBuildApp(data);\r\n dialog.render(true, {id: `DisplayActions2e${data.user}`} as RenderOptions);\r\n}\r\n\r\nexport function handleDuplication(data: EmitData) {\r\n let newState = foundry.utils.deepClone(data.state);\r\n\r\n do {\r\n newState.duplicationNr += 1;\r\n } while (\r\n checkForApp({\r\n operation: data.operation,\r\n user: data.user,\r\n state: newState,\r\n userList: data.userList,\r\n })\r\n );\r\n\r\n const dialog = new DisplayActions2e(newState);\r\n const module = game.modules.get(moduleId) as unknown as MyModule;\r\n dialog.render(true, {id: `DisplayActions2e${data.user}${newState.duplicationNr}`} as RenderOptions);\r\n // push into list to wait for updates\r\n module.displayActions2e.push(dialog);\r\n}\r\n\r\n/**\r\n * helper function to check if the wanted app already exists in the module\r\n * @param data data from emit\r\n * @returns either found DisplayActions2e or undefined\r\n */\r\nfunction checkForApp(data: EmitData): DisplayActions2e | undefined {\r\n let module = game.modules.get(moduleId) as unknown as MyModule;\r\n\r\n let app = module.displayActions2e.find(app => {\r\n let appState = app.getState();\r\n let control: boolean = appState.sentFromUserId === data.state.sentFromUserId;\r\n control = control && appState.duplicationNr.almostEqual(data.state.duplicationNr);\r\n control = control && appState.tokenId === data.state.tokenId;\r\n control = control && appState.isLinkedToToken === data.state.isLinkedToToken;\r\n\r\n return control;\r\n });\r\n\r\n return app;\r\n}\r\n\r\n/**\r\n * helper function to return the application from the modules or build a new one\r\n * immediatly pushes a new app into the list of modules\r\n * @param data data from emit\r\n * @returns either found DisplayActions2e or new DisplayActions2e with state\r\n */\r\nfunction checkAndBuildApp(data: EmitData): DisplayActions2e {\r\n let module = game.modules.get(moduleId) as unknown as MyModule;\r\n let newApp: DisplayActions2e = new DisplayActions2e(data.state);\r\n let app = checkForApp(data);\r\n if (app) {\r\n return app;\r\n }\r\n // push into list to wait for updates\r\n module.displayActions2e.push(newApp);\r\n return newApp;\r\n}\r\n\r\nexport function actionsFromConditions(conditions: Map): [number, number] {\r\n let numOfActions = 3;\r\n let numOfReactions = 1;\r\n\r\n let stun = conditions.get('stunned');\r\n // stunned overwrites slow thus it must be handled first\r\n if (stun) {\r\n numOfActions = stun[0].value! * condtionModifierTable['stunned'];\r\n } else {\r\n conditions.forEach(condition => {\r\n let slug: string = condition.system.slug;\r\n if (condtionModifierTable[slug]) {\r\n let valMod = condition.system.value.isValued ? condition.value! : 1;\r\n numOfActions += condtionModifierTable[slug!] * valMod;\r\n }\r\n });\r\n }\r\n\r\n return [numOfActions, numOfReactions];\r\n}\r\n","// Do not remove this import. If you do Vite will think your styles are dead\r\n// code and not include them in the build output.\r\nimport '../styles/module.css';\r\nimport {moduleId, socketEvent} from './constants';\r\nimport {EmitData, MyModule} from './types';\r\nimport {handleShowToAll, handleShowToSelection, handleShowWithPermission, handleUpdate} from './utils';\r\nimport {DisplayActions2e} from './apps/displayActions';\r\n\r\nlet module: MyModule;\r\nlet homeDisplayActions: DisplayActions2e;\r\n\r\n// Foundry Hooks\r\nHooks.once('init', () => {\r\n console.log(`Initializing ${moduleId}`);\r\n});\r\n\r\nHooks.on('getSceneControlButtons', (hudButtons: SceneControl[]) => {\r\n let hud = hudButtons.find((value: any) => {\r\n return value.name === 'token';\r\n });\r\n\r\n let tool: SceneControlTool = {\r\n name: 'DisplayActions2e.ButtonName',\r\n title: 'DisplayActions2e.ButtonHint',\r\n icon: 'fa fa-angle-double-right',\r\n button: true,\r\n visible: true,\r\n onClick: async () => {\r\n homeDisplayActions.render(true);\r\n game.socket?.emit('module.DisplayActions2e', {event: 'DisplayActions2e'});\r\n },\r\n };\r\n\r\n hud?.tools?.push(tool);\r\n});\r\n\r\nHooks.on('ready', () => {\r\n module = game.modules.get(moduleId) as unknown as MyModule;\r\n homeDisplayActions = new DisplayActions2e();\r\n\r\n module.displayActions2e = [homeDisplayActions];\r\n // sockets\r\n game.socket?.on(socketEvent, (data: EmitData) => {\r\n // all my events\r\n switch (data.operation) {\r\n case 'showToAll':\r\n handleShowToAll(data);\r\n break;\r\n case 'showToSelection':\r\n handleShowToSelection(data);\r\n break;\r\n case 'showWithPermission':\r\n handleShowWithPermission(data);\r\n break;\r\n case 'update':\r\n handleUpdate(data);\r\n break;\r\n default:\r\n console.log(data);\r\n break;\r\n }\r\n });\r\n});\r\n"],"names":["name","module","app","_a"],"mappings":";;AAGO,MAAM,WAAW;AAEjB,MAAM,cAAc,UAAU;AAC9B,MAAM,wBAAqD;AAAA,EAChE,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,SAAS;AACX;ACLO,MAAM,yBAAyB,gBAAgB;AAAA,EAIpD,YAAY,OAAiB,OAA6B;AACxD,UAAM,KAAK;AACX,SAAK,eAAe;AACpB,SAAK,qBAAqB;AAAA,EAC5B;AAAA,EAEA,WAAoB,iBAAiB;;AACnC,UAAM,UAAU,MAAM;AACtB,YAAQ,KAAK;AACb,YAAQ,WAAW,WAAW;AACtB,kBAAA,YAAA,mBAAS,KAAK;AACtB,YAAQ,SAAS;AACjB,YAAQ,QAAQ;AAChB,YAAQ,cAAc;AACtB,YAAQ,YAAY;AACpB,YAAQ,QAAQ,KAAK,KAAK,SAAS,6BAA6B;AACzD,WAAA;AAAA,EACT;AAAA,EAEA,MAAe,UAAU;AACnB,QAAA,OAAO,MAAM,MAAM;AAIvB,SAAK,QAAQ,KAAK,MAAM,OAAO,CAAK,MAAA,EAAE,UAAU,EAAE,KAAK,MAAM,KAAK,KAAK,EAAE;AAClE,WAAA;AAAA,EACT;AAAA,EAES,kBAAkB,MAA2B;AACpD,UAAM,kBAAkB,IAAI;AAE5B,SAAK,KAAK,OAAO,EAAE,MAAM,CAAM,OAAA;;AAC7B,SAAG,eAAe;AAClB,WAAK,cAAc;AAEd,iBAAA,WAAA,mBAAQ,KAAK,aAAa;AAAA,QAC7B,WAAW;AAAA,QACX,OAAO,KAAK;AAAA,QACZ,MAAM,KAAK;AAAA,QACX,UAAU,KAAK;AAAA,MAAA;AAEjB,WAAK,MAAM;AAAA,IAAA,CACZ;AACD,SAAK,KAAK,WAAW,EAAE,MAAM,CAAM,OAAA;;AACjC,SAAG,eAAe;AAClB,WAAK,cAAc;AAEd,iBAAA,WAAA,mBAAQ,KAAK,aAAa;AAAA,QAC7B,WAAW;AAAA,QACX,OAAO,KAAK;AAAA,QACZ,MAAM,KAAK;AAAA,MAAA;AAGb,WAAK,MAAM;AAAA,IAAA,CACZ;AAED,SAAK,KAAK,mBAAmB,EAAE,MAAM,CAAM,OAAA;;AACzC,SAAG,eAAe;AAClB,WAAK,cAAc;AAEd,WAAA,mBAAmB,sBAAsB,KAAK;AAE9C,iBAAA,WAAA,mBAAQ,KAAK,aAAa;AAAA,QAC7B,WAAW;AAAA,QACX,OAAO,KAAK;AAAA,QACZ,MAAM,KAAK;AAAA,QACX,UAAU,KAAK;AAAA,MAAA;AAGjB,WAAK,MAAM;AAAA,IAAA,CACZ;AAAA,EACH;AAAA,EAEmB,gBAAkC;AACnD,QAAI,WAAW,MAAM;AAAA,MACnB,SAAS,uBAAuB,qBAAqB,EAAE,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG;AAAA,IAAA;AAEhG,SAAK,eAAe,SAAS,IAAI,CAAC,YAA+B;AAI/D,UAAI,QAAQ,UAAU;AACpB,eAAO,QAAQ;AAAA,MACjB;AACO,aAAA;AAAA,IAAA,CACR;AAGD,QAAI,eAAe,KAAK;AACxB,QAAI,cAAc;AAChB,UAAI,CAAC,KAAK,aAAa,SAAS,YAAY,GAAG;AACxC,aAAA,aAAa,KAAK,YAAY;AAAA,MACrC;AAAA,IACF;AACO,WAAA,IAAI,QAAiB,MAAM;AAAA,IAAA,CAAE;AAAA,EACtC;AAAA,EAEA,mBAAmB,OAA6B;AAC9C,SAAK,OAAO,IAAI;AAChB,SAAK,qBAAqB;AAAA,EAC5B;AACF;ACtGO,MAAM,yBAAyB,YAAY;AAAA,EAsBhD,YAAY,UAAiC;;AACrC;AAtBR,SAAU,cAAc;AACxB,SAAU,cAAc;AACxB,SAAU,gBAAgB;AAC1B,SAAU,sBAAsB;AAChC,SAAU,wBAAwB;AAClC,SAAU,kBAAkB;AAE5B,SAAU,QAA8B;AAAA,MACtC,cAAc,KAAK;AAAA,MACnB,gBAAgB,KAAK;AAAA,MACrB,sBAAsB,MAAM,KAAK,EAAC,QAAQ,KAAK,oBAAA,GAAsB,MAAM,QAAQ;AAAA,MACnF,wBAAwB,MAAM,KAAK,EAAC,QAAQ,KAAK,sBAAA,GAAwB,MAAM,QAAQ;AAAA,MACvF,gBAAgB,OAAO,KAAK,MAAM;AAAA,MAClC,qBAAqB,CAAC,OAAO,KAAK,MAAM,CAAC;AAAA,MACzC,SAAS;AAAA,MACT,iBAAiB,KAAK;AAAA,MACtB,eAAe;AAAA,IAAA;AAGjB,SAAU,oBAAsC,IAAI,iBAAiB,CAAC,QAAO,UAAK,SAAL,mBAAW,KAAK,IAAI,CAAC,GAAG,KAAK,KAAK;AAK7G,QAAI,UAAU;AACZ,WAAK,QAAQ;AAAA,IACf;AAAA,EACF;AAAA,EAEA,IAAa,QAAgB;AAC3B,QAAI,QAAQ,KAAK,KAAK,SAAS,8BAA8B;AAEzD,QAAA,KAAK,MAAM,iBAAiB;AAC9B,cAAQ,MAAM,OAAO,KAAK,cAAe,CAAA;AAAA,IAC3C;AAEA,YAAQ,MAAM,OAAO,KAAK,iBAAkB,CAAA;AAC5C,YAAQ,MAAM,OAAO,KAAK,oBAAqB,CAAA;AACxC,WAAA;AAAA,EACT;AAAA,EAEA,WAAoB,iBAAqC;AACvD,WAAO,QAAQ,MAAM,YAAY,MAAM,gBAAgB;AAAA,MACrD,IAAI;AAAA,MACJ,UAAU,WAAW;AAAA,MACrB,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,OAAO;AAAA,IAAA,CACR;AAAA,EACH;AAAA,EAES,UAAU;AACjB,SAAK,YAAY;AAEV,WAAA;AAAA,MACL,cAAc,KAAK,MAAM;AAAA,MACzB,gBAAgB,KAAK,MAAM;AAAA,MAC3B,oBAAoB,KAAK;AAAA,QACvB,KAAK,MAAM;AAAA,QACX,EAAC,aAAa,KAAK,YAAW;AAAA,QAC9B,KAAK,MAAM;AAAA,MACb;AAAA,MACA,sBAAsB,KAAK;AAAA,QACzB,KAAK,MAAM;AAAA,QACX,EAAC,eAAe,KAAK,cAAa;AAAA,QAClC,KAAK,MAAM;AAAA,MACb;AAAA,MACA,iBAAiB,KAAK,MAAM;AAAA,IAAA;AAAA,EAEhC;AAAA,EAES,kBAAkB,MAAiC;AAC1D,UAAM,kBAAkB,IAAI;AAExB,QAAA,KAAK,MAAM,oBAAoB,SAAS,OAAO,KAAK,MAAM,CAAC,GAAG;AAC3D,WAAA,KAAK,YAAY,EAAE,GAAG,SAAS,KAAK,oBAAoB,KAAK,IAAI,CAAC;AAClE,WAAA,KAAK,qBAAqB,EAAE,GAAG,UAAU,KAAK,qBAAqB,KAAK,IAAI,CAAC;AAE7E,WAAA,KAAK,kBAAkB,EAAE,GAAG,SAAS,KAAK,6BAA6B,KAAK,IAAI,CAAC;AACjF,WAAA,KAAK,oBAAoB,EAAE,GAAG,SAAS,KAAK,2BAA2B,KAAK,IAAI,CAAC;AAAA,IACxF;AAAA,EACF;AAAA,EAEU,oBAAoB,OAAc;AAC1C,UAAM,eAAe;AAErB,UAAM,QAAQ,MAAM;AAChB,QAAA,UAAU,UAAa,UAAU,MAAM;AACzC;AAAA,IACF;AACM,UAAA,UAAU,OAAO,KAAK,WAAW;AAGvC,UAAM,MAAM,SAAS,MAAM,GAAG,MAAM,CAAC,CAAC;AACtC,YAAQ,MAAM,GAAG,OAAO,CAAC,GAAG;AAAA,MAC1B,KAAK;AACE,aAAA,MAAM,qBAAqB,OAAO,MAAM;AAC7C;AAAA,MACF,KAAK;AACE,aAAA,MAAM,uBAAuB,OAAO,MAAM;AAC/C;AAAA,MACF;AACU,gBAAA,MAAM,GAAG,wCAAwC;AAAA,IAC7D;AAEA,SAAK,WAAW;AAAA,EAClB;AAAA,EAMU,sBAAsB,UAAkB,UAAe,OAAiB;AAChF,QAAI,UAAU,CAAA;AACd,aAAS,QAAQ,GAAG,QAAQ,UAAU,SAAS;AAC7C,cAAQ,KAAK,QAAQ,MAAM,YAAY,EAAC,QAAQ,OAAO,UAAU,MAAM,OAAA,GAAS,QAAQ,CAAC;AAAA,IAC3F;AACO,WAAA;AAAA,EACT;AAAA,EAEU,qBAAqB,OAAc;AAC3C,UAAM,eAAe;AACrB,UAAM,QAAQ,MAAM;AACd,UAAA,QAAQ,SAAS,MAAM,KAAK;AAC9B,QAAA,CAAC,MAAM,KAAK,GAAG;AACjB,UAAI,SAAS,GAAG;AACd,gBAAQ,MAAM,IAAI;AAAA,UAChB,KAAK;AACH,iBAAK,MAAM,eAAe;AAC1B;AAAA,UACF,KAAK;AACH,iBAAK,MAAM,iBAAiB;AAC5B;AAAA,UACF;AACU,oBAAA,MAAM,GAAG,iDAAiD;AAAA,QACtE;AACA,aAAK,OAAO;AACZ,aAAK,WAAW;AAAA,MAClB;AAAA,IACF;AAAA,EACF;AAAA,EAEmB,oBAA+C;AAC1D,UAAA,UAAU,MAAM;AAEtB,UAAM,eAAwC;AAAA,MAC5C,OAAO;AAAA,MACP,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS,MAAM,KAAK,kBAAkB,mBAAmB,KAAK,KAAK;AAAA,IAAA;AAGrE,UAAM,0BAAmD;AAAA,MACvD,OAAO;AAAA,MACP,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS,MAAM,KAAK,qBAAqB;AAAA,IAAA;AAG3C,YAAQ,QAAQ,YAAY;AAC5B,YAAQ,QAAQ,uBAAuB;AAEhC,WAAA;AAAA,EACT;AAAA,EAKU,cAAc;AAEtB,QAAI,KAAK,MAAM,qBAAqB,SAAS,KAAK,MAAM,cAAc;AACpE,YAAM,MAAM,MAAM;AAAA,QAChB,EAAC,QAAQ,KAAK,MAAM,eAAe,KAAK,MAAM,qBAAqB,OAAM;AAAA,QACzE,MAAM;AAAA,MAAA;AAER,WAAK,MAAM,uBAAuB,KAAK,MAAM,qBAAqB,OAAO,GAAG;AAAA,IAAA,WAGrE,KAAK,MAAM,qBAAqB,SAAS,KAAK,MAAM,cAAc;AACzE,YAAM,YAAY,KAAK,MAAM,qBAAqB,SAAS,KAAK,MAAM;AACtE,WAAK,MAAM,uBAAuB,KAAK,MAAM,qBAAqB,MAAM,GAAG,SAAS;AAAA,IACtF;AAKA,QAAI,KAAK,MAAM,uBAAuB,SAAS,KAAK,MAAM,gBAAgB;AACxE,YAAM,MAAM,MAAM;AAAA,QAChB,EAAC,QAAQ,KAAK,MAAM,iBAAiB,KAAK,MAAM,uBAAuB,OAAM;AAAA,QAC7E,MAAM;AAAA,MAAA;AAER,WAAK,MAAM,yBAAyB,KAAK,MAAM,uBAAuB,OAAO,GAAG;AAAA,IAAA,WAGzE,KAAK,MAAM,uBAAuB,SAAS,KAAK,MAAM,gBAAgB;AAC7E,YAAM,YAAY,KAAK,MAAM,uBAAuB,SAAS,KAAK,MAAM;AACxE,WAAK,MAAM,yBAAyB,KAAK,MAAM,uBAAuB,MAAM,GAAG,SAAS;AAAA,IAC1F;AAAA,EACF;AAAA,EAEU,aAAa;;AAChB,eAAA,WAAA,mBAAQ,KAAK,aAAa;AAAA,MAC7B,WAAW;AAAA,MACX,OAAO,KAAK;AAAA,MACZ,MAAM,KAAK;AAAA,IAAA;AAAA,EAEf;AAAA,EAEO,SAAS,UAAgC;AAC9C,SAAK,QAAQ,QAAQ,MAAM,UAAU,QAAQ;AAAA,EAC/C;AAAA,EAKO,WAAW;AAChB,WAAO,QAAQ,MAAM,UAAU,KAAK,KAAK;AAAA,EAC3C;AAAA,EAKQ,gBAAwB;AAC9B,QAAI,QAAQ;AAEZ,QAAIA,QAAQ,OAAkB,OAAO,IAAI,KAAK,MAAM,OAAiB;AACrE,YAAQ,MAAM,OAAO,SAAS,OAAOA,SAAA,gBAAAA,MAAM,KAAK,IAAI,CAAC;AAC9C,WAAA;AAAA,EACT;AAAA,EAEQ,mBAA2B;;AACjC,QAAI,KAAK,MAAM,mBAAmB,KAAK,QAAQ;AACtC,aAAA;AAAA,IACT;AACA,QAAI,QAAQ;AACZ,QAAIA,SAAO,gBAAK,UAAL,mBAAY,KAAK,CAAQ,SAAA;AAClC,aAAO,KAAK,KAAK,QAAQ,KAAK,MAAM;AAAA,IAAA,OAD3B,mBAEP,KAAK;AACF,WAAA,MAAM,OAAOA,KAAI;AAAA,EAC1B;AAAA,EAEQ,sBAA8B;AACpC,QAAI,QAAQ;AACR,QAAA,KAAK,MAAM,gBAAgB,GAAG;AACxB,cAAA,MAAM,OAAO,MAAM,OAAO,KAAK,MAAM,aAAa,GAAG,GAAG;AAAA,IAClE;AACO,WAAA;AAAA,EACT;AAAA,EAEQ,+BAA+B;AACrC,WAAO,OAAO,WAAW,QAAQ,CAAC,UAA6B;AAG7D,UAAI,WAAW,QAAQ,MAAM,UAAU,KAAK,KAAK;AACjD,eAAS,kBAAkB;AAClB,eAAA,UAAU,MAAM,KAAK;AACnB,iBAAA,KAAK,8BAA8B,QAAQ;AAE1C,kBAAA;AAAA,QACV,WAAW;AAAA,QACX,OAAO;AAAA,QACP,MAAM,KAAK;AAAA,MAAA,CACA;AAAA,IAAA,CACd;AAAA,EACH;AAAA,EAEQ,6BAA6B;AACnC,SAAK,QAAQ,KAAK,8BAA8B,KAAK,KAAK;AAC1D,SAAK,OAAO;AAAA,EACd;AAAA,EAEQ,uBAAuB;AAC7B,QAAI,WAAW,QAAQ,MAAM,UAAU,KAAK,KAAK;AAE/B,sBAAA;AAAA,MAChB,WAAW;AAAA,MACX,OAAO;AAAA,MACP,MAAM,KAAK;AAAA,IAAA,CACA;AAAA,EACf;AAAA,EAEQ,8BAA8B,UAAsD;;AAC1F,QAAI,WAAW,QAAQ,MAAM,UAAU,QAAQ;AAE/C,QAAI,UAAU,YAAkB,OAAO,IAAI,SAAS,OAAQ,MAA9C,mBAAiD,UAA+B;AAG9F,QAAI,aAAa,MAAM;AAEvB,QAAI,CAAC,cAAc,cAAc,IAAI,sBAAsB,UAAU;AAErE,aAAS,eAAe;AACxB,aAAS,iBAAiB;AAEnB,WAAA;AAAA,EACT;AACF;AC7SO,SAAS,gBAAgB,MAAgB;AACxC,QAAA,SAAS,iBAAiB,IAAI;AACpC,SAAO,OAAO,MAAM,EAAC,IAAI,mBAAmB,KAAK,QAAwB;AAC3E;AAEO,SAAS,sBAAsB,MAAgB;;AACpD,OAAI,UAAK,aAAL,mBAAe,SAAS,OAAO,KAAK,MAAM,IAAI;AAC1C,UAAA,SAAS,iBAAiB,IAAI;AACpC,WAAO,OAAO,MAAM,EAAC,IAAI,mBAAmB,KAAK,QAAwB;AAAA,EAC3E;AACF;AAEO,SAAS,yBAAyB,MAAgB;AACvD,wBAAsB,IAAI;AAC5B;AAEO,SAAS,aAAa,MAAgB;;AAC3C,MAAIC,UAAS,KAAK,QAAQ,IAAI,QAAQ;AACtC,MAAI,eAAc,gBAAK,UAAL,mBAAY,KAAK,CAAQ,SAAA;AACzC,WAAO,KAAK,KAAK,QAAQ,KAAK,MAAM;AAAA,EAAA,OADpB,mBAEd,KAAK;AAET,MAAI,aAAa;AACR,IAAAA,QAAA,iBAAiB,QAAQ,CAAO,QAAA;AAGjC,UAAA,IAAI,MAAM,SAAS,WAAY,KAAK,KAAK,MAAM,mBAAmB,KAAK,QAAQ;AAC7E,YAAA,SAAS,KAAK,KAAK;AACvB,YAAI,OAAO,OAAO,EAAC,IAAI,mBAAmB,KAAK,QAAwB;AAAA,MACzE;AAAA,IAAA,CACD;AAAA,EACH;AACF;AAEO,SAAS,YAAY,MAAgB;AACpC,QAAA,SAAS,iBAAiB,IAAI;AACpC,SAAO,OAAO,MAAM,EAAC,IAAI,mBAAmB,KAAK,QAAwB;AAC3E;AAEO,SAAS,kBAAkB,MAAgB;AAChD,MAAI,WAAW,QAAQ,MAAM,UAAU,KAAK,KAAK;AAE9C,KAAA;AACD,aAAS,iBAAiB;AAAA,WAE1B,YAAY;AAAA,IACV,WAAW,KAAK;AAAA,IAChB,MAAM,KAAK;AAAA,IACX,OAAO;AAAA,IACP,UAAU,KAAK;AAAA,EAAA,CAChB;AAGG,QAAA,SAAS,IAAI,iBAAiB,QAAQ;AAC5C,QAAMA,UAAS,KAAK,QAAQ,IAAI,QAAQ;AACjC,SAAA,OAAO,MAAM,EAAC,IAAI,mBAAmB,KAAK,OAAO,SAAS,gBAAiC,CAAA;AAE3F,EAAAA,QAAA,iBAAiB,KAAK,MAAM;AACrC;AAOA,SAAS,YAAY,MAA8C;AACjE,MAAIA,UAAS,KAAK,QAAQ,IAAI,QAAQ;AAEtC,MAAI,MAAMA,QAAO,iBAAiB,KAAK,CAAAC,SAAO;AACxC,QAAA,WAAWA,KAAI;AACnB,QAAI,UAAmB,SAAS,mBAAmB,KAAK,MAAM;AAC9D,cAAU,WAAW,SAAS,cAAc,YAAY,KAAK,MAAM,aAAa;AAChF,cAAU,WAAW,SAAS,YAAY,KAAK,MAAM;AACrD,cAAU,WAAW,SAAS,oBAAoB,KAAK,MAAM;AAEtD,WAAA;AAAA,EAAA,CACR;AAEM,SAAA;AACT;AAQA,SAAS,iBAAiB,MAAkC;AAC1D,MAAID,UAAS,KAAK,QAAQ,IAAI,QAAQ;AACtC,MAAI,SAA2B,IAAI,iBAAiB,KAAK,KAAK;AAC1D,MAAA,MAAM,YAAY,IAAI;AAC1B,MAAI,KAAK;AACA,WAAA;AAAA,EACT;AAEO,EAAAA,QAAA,iBAAiB,KAAK,MAAM;AAC5B,SAAA;AACT;AAEO,SAAS,sBAAsB,YAA0D;AAC9F,MAAI,eAAe;AACnB,MAAI,iBAAiB;AAEjB,MAAA,OAAO,WAAW,IAAI,SAAS;AAEnC,MAAI,MAAM;AACO,mBAAA,KAAK,GAAG,QAAS,sBAAsB;AAAA,EAAA,OACjD;AACL,eAAW,QAAQ,CAAa,cAAA;AAC1B,UAAA,OAAe,UAAU,OAAO;AACpC,UAAI,sBAAsB,OAAO;AAC/B,YAAI,SAAS,UAAU,OAAO,MAAM,WAAW,UAAU,QAAS;AAClE,wBAAgB,sBAAsB,QAAS;AAAA,MACjD;AAAA,IAAA,CACD;AAAA,EACH;AAEO,SAAA,CAAC,cAAc,cAAc;AACtC;ACnHA,IAAI;AACJ,IAAI;AAGJ,MAAM,KAAK,QAAQ,MAAM;AACf,UAAA,IAAI,gBAAgB,UAAU;AACxC,CAAC;AAED,MAAM,GAAG,0BAA0B,CAAC,eAA+B;;AACjE,MAAI,MAAM,WAAW,KAAK,CAAC,UAAe;AACxC,WAAO,MAAM,SAAS;AAAA,EAAA,CACvB;AAED,MAAI,OAAyB;AAAA,IAC3B,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,SAAS,YAAY;;AACnB,yBAAmB,OAAO,IAAI;AAC9B,OAAAE,MAAA,KAAK,WAAL,gBAAAA,IAAa,KAAK,2BAA2B,EAAC,OAAO;IACvD;AAAA,EAAA;AAGG,mCAAA,UAAA,mBAAO,KAAK;AACnB,CAAC;AAED,MAAM,GAAG,SAAS,MAAM;;AACb,WAAA,KAAK,QAAQ,IAAI,QAAQ;AAClC,uBAAqB,IAAI;AAElB,SAAA,mBAAmB,CAAC,kBAAkB;AAE7C,aAAK,WAAL,mBAAa,GAAG,aAAa,CAAC,SAAmB;AAE/C,YAAQ,KAAK,WAAW;AAAA,MACtB,KAAK;AACH,wBAAgB,IAAI;AACpB;AAAA,MACF,KAAK;AACH,8BAAsB,IAAI;AAC1B;AAAA,MACF,KAAK;AACH,iCAAyB,IAAI;AAC7B;AAAA,MACF,KAAK;AACH,qBAAa,IAAI;AACjB;AAAA,MACF;AACE,gBAAQ,IAAI,IAAI;AAChB;AAAA,IACJ;AAAA,EAAA;AAEJ,CAAC;"} \ No newline at end of file +{"version":3,"file":"module.js","sources":["../../src/ts/constants.ts","../../src/ts/apps/selectiveShow.ts","../../src/ts/apps/displayActions.ts","../../src/ts/utils.ts","../../src/ts/module.ts"],"sourcesContent":["import {name} from '../module.json';\r\nimport {ConditionModifierDictionary} from './types';\r\n\r\nexport const moduleId = name;\r\nexport const moduleName = 'DisplayActions2e';\r\nexport const socketEvent = `module.${moduleId}`;\r\nexport const condtionModifierTable: ConditionModifierDictionary = {\r\n slowed: -1,\r\n quickened: 1,\r\n stunned: 1,\r\n};\r\n","/* original by FVTT-SelectiveShow */\r\n\r\nimport {moduleId, socketEvent} from '../constants';\r\nimport {DisplayActions2eData, EmitData} from '../types';\r\nimport {handleSendToChat} from '../utils';\r\n\r\nexport class SelectiveShowApp extends FormApplication {\r\n private userNameList: string[];\r\n private displayActionState: DisplayActions2eData;\r\n\r\n constructor(users: string[], state: DisplayActions2eData) {\r\n super(users);\r\n this.userNameList = users;\r\n this.displayActionState = state;\r\n }\r\n\r\n static override get defaultOptions() {\r\n const options = super.defaultOptions;\r\n options.id = 'DisplayActions2e-selective-show';\r\n options.template = `modules/${moduleId}/templates/selectiveshow.html`;\r\n options.classes?.push('selective-show');\r\n options.height = 300;\r\n options.width = 250;\r\n options.minimizable = true;\r\n options.resizable = true;\r\n options.title = game.i18n.localize('selectiveshow.SelectiveShow');\r\n return options;\r\n }\r\n\r\n override async getData() {\r\n let data = await super.getData();\r\n // 👇️ ts-ignore ignores any ts errors on the next line\r\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n // @ts-ignore\r\n data.users = game.users.filter(u => u.active && u.data.id != game.user.id);\r\n return data;\r\n }\r\n\r\n override activateListeners(html: JQuery) {\r\n super.activateListeners(html);\r\n\r\n html.find('.show').click(ev => {\r\n ev.preventDefault();\r\n this._updateObject();\r\n // let selector = $(ev.currentTarget).parents('form').find('select');\r\n game.socket?.emit(socketEvent, {\r\n operation: 'showToSelection',\r\n state: this.displayActionState,\r\n user: game.userId,\r\n userList: this.userNameList,\r\n } as EmitData);\r\n this.close();\r\n });\r\n html.find('.show-all').click(ev => {\r\n ev.preventDefault();\r\n this._updateObject();\r\n\r\n game.socket?.emit(socketEvent, {\r\n operation: 'showToAll',\r\n state: this.displayActionState,\r\n user: game.userId,\r\n } as EmitData);\r\n\r\n this.close();\r\n });\r\n\r\n html.find('.show-permissions').click(ev => {\r\n ev.preventDefault();\r\n this._updateObject();\r\n\r\n this.displayActionState.userListPermissions = this.userNameList;\r\n\r\n game.socket?.emit(socketEvent, {\r\n operation: 'showWithPermission',\r\n state: this.displayActionState,\r\n user: game.userId,\r\n userList: this.userNameList,\r\n } as EmitData);\r\n\r\n this.close();\r\n });\r\n\r\n html.find('.send-to-chat').click(ev => {\r\n ev.preventDefault();\r\n this._updateObject();\r\n\r\n console.log(html);\r\n\r\n let msg = document\r\n .getElementById('DisplayActions2e')!\r\n .getElementsByClassName('window-content')[0]\r\n .getElementsByClassName('flexbox-actions')[0];\r\n\r\n console.log(this.displayActionState.appId);\r\n\r\n ChatMessage.create({\r\n content: msg.outerHTML,\r\n });\r\n\r\n handleSendToChat({\r\n operation: 'sendToChat',\r\n state: this.displayActionState,\r\n user: game.userId,\r\n });\r\n\r\n this.close();\r\n });\r\n }\r\n\r\n protected override _updateObject(): Promise {\r\n let selector = Array.from(\r\n document.getElementsByClassName('selective-show-form')[0].children[0].children[0].children[0].children,\r\n ) as HTMLOptionElement[];\r\n this.userNameList = selector.map((element: HTMLOptionElement) => {\r\n // 👇️ ts-ignore ignores any ts errors on the next line\r\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n // @ts-ignore\r\n if (element.selected) {\r\n return element.value;\r\n }\r\n return '';\r\n });\r\n\r\n // active User Id needs to be send always\r\n let activeUserId = game.userId;\r\n if (activeUserId) {\r\n if (!this.userNameList.includes(activeUserId)) {\r\n this.userNameList.push(activeUserId);\r\n }\r\n }\r\n return new Promise(() => {});\r\n }\r\n\r\n _handleShowPlayers(state: DisplayActions2eData) {\r\n this.render(true);\r\n this.displayActionState = state;\r\n }\r\n}\r\n","import {ActorPF2e} from '../../../types/src/module/actor';\r\nimport {ConditionPF2e} from '../../../types/src/module/item';\r\nimport {TokenDocumentPF2e} from '../../../types/src/module/token-document';\r\nimport {moduleId, socketEvent} from '../constants';\r\nimport {actionsFromConditions, handleDuplication, handleToken} from '../utils';\r\nimport {DisplayActions2eData, EmitData} from '../types';\r\nimport {SelectiveShowApp} from './selectiveShow';\r\n\r\nexport class DisplayActions2e extends Application {\r\n protected clickString = 'symbolClick';\r\n protected actionImage = '/systems/pf2e/icons/actions/OneAction.webp';\r\n protected reactionImage = '/systems/pf2e/icons/actions/Reaction.webp';\r\n protected defaultNumOfActions = 3;\r\n protected defaultNumOfReactions = 1;\r\n protected isLinkedToActor = false;\r\n\r\n protected state: DisplayActions2eData = {\r\n numOfActions: this.defaultNumOfActions,\r\n numOfReactions: this.defaultNumOfReactions,\r\n classNameListActions: Array.from({length: this.defaultNumOfActions}, () => 'symbol'),\r\n classNameListReactions: Array.from({length: this.defaultNumOfReactions}, () => 'symbol'),\r\n sentFromUserId: String(game.userId),\r\n userListPermissions: [String(game.userId)],\r\n tokenId: undefined,\r\n isLinkedToToken: this.isLinkedToActor,\r\n duplicationNr: 0,\r\n appId: this.appId,\r\n };\r\n\r\n protected showPlayerHandler: SelectiveShowApp = new SelectiveShowApp([String(game.user?.data.name)], this.state);\r\n\r\n constructor(newState?: DisplayActions2eData) {\r\n super();\r\n\r\n if (newState) {\r\n this.state = newState;\r\n }\r\n\r\n console.log('Jens');\r\n console.log(this.appId);\r\n }\r\n\r\n override get title(): string {\r\n let title = game.i18n.localize('DisplayActions2e.WindowTitle');\r\n\r\n if (this.state.isLinkedToToken) {\r\n title = title.concat(this.getTitleToken());\r\n }\r\n\r\n title = title.concat(this.getTitleSentFrom());\r\n title = title.concat(this.getTitleDuplication());\r\n return title;\r\n }\r\n\r\n static override get defaultOptions(): ApplicationOptions {\r\n return foundry.utils.mergeObject(super.defaultOptions, {\r\n id: 'DisplayActions2e',\r\n template: `modules/${moduleId}/templates/result.hbs`,\r\n width: 270,\r\n height: 140,\r\n resizable: true,\r\n title: 'DisplayActions2e.WindowTitle',\r\n }) as ApplicationOptions;\r\n }\r\n\r\n override getData() {\r\n this.updateState();\r\n\r\n return {\r\n numOfActions: this.state.numOfActions,\r\n numOfReactions: this.state.numOfReactions,\r\n actionImagePayload: this.buildHandlebarPayload(\r\n this.state.numOfActions,\r\n {actionImage: this.actionImage},\r\n this.state.classNameListActions,\r\n ),\r\n reactionImagePayload: this.buildHandlebarPayload(\r\n this.state.numOfReactions,\r\n {reactionImage: this.reactionImage},\r\n this.state.classNameListReactions,\r\n ),\r\n isLinkedToActor: this.state.isLinkedToToken,\r\n };\r\n }\r\n\r\n override activateListeners(html: JQuery): void {\r\n super.activateListeners(html);\r\n // register events for all users with permission\r\n if (this.state.userListPermissions.includes(String(game.userId))) {\r\n html.find('img.symbol').on('click', this._onClickSymbolImage.bind(this));\r\n html.find('input.input-counter').on('change', this._onChangeCountNumber.bind(this));\r\n // html.find('button.actorLink').on('click', DataWrapper2e.createApplications);\r\n html.find('button.actorLink').on('click', this._onButtonClickSelectedActors.bind(this));\r\n html.find('button.actorUpdate').on('click', this._onButtonClickUpdateActors.bind(this));\r\n }\r\n }\r\n\r\n protected _onClickSymbolImage(event: Event) {\r\n event.preventDefault();\r\n // switch css classes of the images\r\n const image = event.currentTarget as HTMLImageElement;\r\n if (image === undefined || image === null) {\r\n return;\r\n }\r\n image.classList.toggle(this.clickString);\r\n // save the state\r\n // all id begin with either a or r for action or reaction respectively\r\n const pos = parseInt(image.id.slice(1));\r\n switch (image.id.charAt(0)) {\r\n case 'a':\r\n this.state.classNameListActions[pos] = image.className;\r\n break;\r\n case 'r':\r\n this.state.classNameListReactions[pos] = image.className;\r\n break;\r\n default:\r\n console.error(`${moduleId} handled Image onClicks wrong.`);\r\n }\r\n\r\n this.emitUpdate();\r\n }\r\n\r\n /**\r\n * Helper function to make Payload for Handlebars each loop to pass data\r\n * @param iterator array size\r\n */\r\n protected buildHandlebarPayload(iterator: number, imageObj: any, state: string[]) {\r\n let payload = [];\r\n for (let index = 0; index < iterator; index++) {\r\n payload.push(foundry.utils.mergeObject({number: index, cssClass: state[index]}, imageObj));\r\n }\r\n return payload;\r\n }\r\n\r\n protected _onChangeCountNumber(event: Event) {\r\n event.preventDefault();\r\n const input = event.currentTarget as HTMLInputElement;\r\n const value = parseInt(input.value);\r\n if (!isNaN(value)) {\r\n if (value >= 0) {\r\n switch (input.id) {\r\n case 'count-action':\r\n this.state.numOfActions = value;\r\n break;\r\n case 'count-reaction':\r\n this.state.numOfReactions = value;\r\n break;\r\n default:\r\n console.error(`${moduleId} incorrectly handled number of actions!`);\r\n }\r\n this.render();\r\n this.emitUpdate();\r\n }\r\n }\r\n }\r\n\r\n protected override _getHeaderButtons(): ApplicationHeaderButton[] {\r\n const buttons = super._getHeaderButtons();\r\n\r\n const headerButton: ApplicationHeaderButton = {\r\n label: 'JOURNAL.ActionShow',\r\n class: 'share-image',\r\n icon: 'fas fa-eye',\r\n onclick: () => this.showPlayerHandler._handleShowPlayers(this.state),\r\n };\r\n\r\n const headerButtonDuplication: ApplicationHeaderButton = {\r\n label: 'DisplayActions2e.Duplication',\r\n class: 'duplicate-app',\r\n icon: 'fa fa-clone',\r\n onclick: () => this._onHeaderDuplication(),\r\n };\r\n\r\n buttons.unshift(headerButton);\r\n buttons.unshift(headerButtonDuplication);\r\n\r\n return buttons;\r\n }\r\n\r\n /**\r\n * Update internal state based on the size of the arrays\r\n */\r\n protected updateState() {\r\n // case to few state elements\r\n if (this.state.classNameListActions.length < this.state.numOfActions) {\r\n const tmp = Array.from(\r\n {length: this.state.numOfActions - this.state.classNameListActions.length},\r\n () => 'symbol',\r\n );\r\n this.state.classNameListActions = this.state.classNameListActions.concat(tmp);\r\n }\r\n // too many elements, we remove the last elements\r\n else if (this.state.classNameListActions.length > this.state.numOfActions) {\r\n const cut_value = this.state.classNameListActions.length - this.state.numOfActions;\r\n this.state.classNameListActions = this.state.classNameListActions.slice(0, cut_value);\r\n }\r\n\r\n // other state same cases\r\n\r\n // case to few state elements\r\n if (this.state.classNameListReactions.length < this.state.numOfReactions) {\r\n const tmp = Array.from(\r\n {length: this.state.numOfReactions - this.state.classNameListReactions.length},\r\n () => 'symbol',\r\n );\r\n this.state.classNameListReactions = this.state.classNameListReactions.concat(tmp);\r\n }\r\n // too many elements, we remove the last elements\r\n else if (this.state.classNameListReactions.length > this.state.numOfReactions) {\r\n const cut_value = this.state.classNameListReactions.length - this.state.numOfReactions;\r\n this.state.classNameListReactions = this.state.classNameListReactions.slice(0, cut_value);\r\n }\r\n }\r\n\r\n protected emitUpdate() {\r\n game.socket?.emit(socketEvent, {\r\n operation: 'update',\r\n state: this.state,\r\n user: game.userId,\r\n } as EmitData);\r\n }\r\n\r\n public setState(newState: DisplayActions2eData) {\r\n this.state = foundry.utils.deepClone(newState);\r\n }\r\n\r\n /**\r\n * returns a clone of the state not a reference\r\n */\r\n public getState() {\r\n return foundry.utils.deepClone(this.state);\r\n }\r\n\r\n /**\r\n * The following functions are only done because transpilation is bullying me and thus i cannot do an child of this class\r\n */\r\n private getTitleToken(): string {\r\n let title = '';\r\n\r\n let name = (canvas as Canvas).tokens.get(this.state.tokenId as string);\r\n title = title.concat(' for ', String(name?.data.name));\r\n return title;\r\n }\r\n\r\n private getTitleSentFrom(): string {\r\n if (this.state.sentFromUserId === game.userId) {\r\n return '';\r\n }\r\n let title = ' sent from ';\r\n let name = game.users?.find(user => {\r\n return user.data._id === this.state.sentFromUserId;\r\n })?.data.name;\r\n return title.concat(name);\r\n }\r\n\r\n private getTitleDuplication(): string {\r\n let title = '';\r\n if (this.state.duplicationNr > 0) {\r\n title = title.concat(' (', String(this.state.duplicationNr), ')');\r\n }\r\n return title;\r\n }\r\n\r\n private _onButtonClickSelectedActors() {\r\n canvas.tokens.controlled.forEach((token: TokenDocumentPF2e) => {\r\n // let app = new DisplayTokenActions2e(token.data._id);\r\n\r\n let newState = foundry.utils.deepClone(this.state);\r\n newState.isLinkedToToken = true;\r\n newState.tokenId = token.data._id;\r\n newState = this.generateActionsFromConditions(newState);\r\n\r\n handleToken({\r\n operation: 'token',\r\n state: newState,\r\n user: game.userId,\r\n } as EmitData);\r\n });\r\n }\r\n\r\n private _onButtonClickUpdateActors() {\r\n this.state = this.generateActionsFromConditions(this.state);\r\n this.render();\r\n }\r\n\r\n private _onHeaderDuplication() {\r\n let newState = foundry.utils.deepClone(this.state);\r\n\r\n handleDuplication({\r\n operation: 'duplication',\r\n state: newState,\r\n user: game.userId,\r\n } as EmitData);\r\n }\r\n\r\n private generateActionsFromConditions(oldState: DisplayActions2eData): DisplayActions2eData {\r\n let newState = foundry.utils.deepClone(oldState);\r\n\r\n let actor = ((canvas as Canvas).tokens.get(oldState.tokenId!)?.document as TokenDocumentPF2e).actor as ActorPF2e;\r\n // let actor = game.actors.tokens[oldState.tokenId!] as ActorPF2e;\r\n\r\n let conditions = actor.conditions as Map;\r\n\r\n let [numOfActions, numOfReactions] = actionsFromConditions(conditions);\r\n\r\n newState.numOfActions = numOfActions;\r\n newState.numOfReactions = numOfReactions;\r\n\r\n return newState;\r\n }\r\n}\r\n","import {ConditionPF2e} from '../../types/src/module/item';\r\nimport {DisplayActions2e} from './apps/displayActions';\r\nimport {condtionModifierTable, moduleId} from './constants';\r\nimport {EmitData, MyModule} from './types';\r\n\r\nexport function handleShowToAll(data: EmitData) {\r\n const dialog = checkAndBuildApp(data);\r\n dialog.render(true, {id: `DisplayActions2e${data.user}`} as RenderOptions);\r\n}\r\n\r\nexport function handleShowToSelection(data: EmitData) {\r\n if (data.userList?.includes(String(game.userId))) {\r\n const dialog = checkAndBuildApp(data);\r\n dialog.render(true, {id: `DisplayActions2e${data.user}`} as RenderOptions);\r\n }\r\n}\r\n\r\nexport function handleShowWithPermission(data: EmitData) {\r\n handleShowToSelection(data);\r\n}\r\n\r\nexport function handleUpdate(data: EmitData) {\r\n let module = game.modules.get(moduleId) as unknown as MyModule;\r\n let nameInTitle = game.users?.find(user => {\r\n return user.data._id === data.state.sentFromUserId;\r\n })?.data.name;\r\n\r\n if (nameInTitle) {\r\n module.displayActions2e.forEach(app => {\r\n // check for title OR own application update\r\n // this is why checkForApp cannot be used\r\n if (app.title.includes(nameInTitle!) || data.state.sentFromUserId === game.userId) {\r\n app.setState(data.state);\r\n app.render(false, {id: `DisplayActions2e${data.user}`} as RenderOptions);\r\n }\r\n });\r\n }\r\n}\r\n\r\nexport function handleToken(data: EmitData) {\r\n const dialog = checkAndBuildApp(data);\r\n dialog.render(true, {id: `DisplayActions2e${data.user}`} as RenderOptions);\r\n}\r\n\r\nexport function handleDuplication(data: EmitData) {\r\n let newState = foundry.utils.deepClone(data.state);\r\n\r\n do {\r\n newState.duplicationNr += 1;\r\n } while (\r\n checkForApp({\r\n operation: data.operation,\r\n user: data.user,\r\n state: newState,\r\n userList: data.userList,\r\n })\r\n );\r\n\r\n const dialog = new DisplayActions2e(newState);\r\n const module = game.modules.get(moduleId) as unknown as MyModule;\r\n dialog.render(true, {id: `DisplayActions2e${data.user}${newState.duplicationNr}`} as RenderOptions);\r\n // push into list to wait for updates\r\n module.displayActions2e.push(dialog);\r\n}\r\n\r\nexport function handleSendToChat(data: EmitData) {\r\n let app = checkForApp(data);\r\n if (app) {\r\n if (app.rendered) {\r\n let msg = app.element.find('.window-content').find('.flexbox-actions').wrapAll('
').parent();\r\n ChatMessage.create({\r\n content: msg.html(),\r\n });\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * helper function to check if the wanted app already exists in the module\r\n * @param data data from emit\r\n * @returns either found DisplayActions2e or undefined\r\n */\r\nfunction checkForApp(data: EmitData): DisplayActions2e | undefined {\r\n let module = game.modules.get(moduleId) as unknown as MyModule;\r\n\r\n let app = module.displayActions2e.find(app => {\r\n let appState = app.getState();\r\n let control: boolean = appState.sentFromUserId === data.state.sentFromUserId;\r\n control = control && appState.duplicationNr.almostEqual(data.state.duplicationNr);\r\n control = control && appState.tokenId === data.state.tokenId;\r\n control = control && appState.isLinkedToToken === data.state.isLinkedToToken;\r\n\r\n return control;\r\n });\r\n\r\n return app;\r\n}\r\n\r\n/**\r\n * helper function to return the application from the modules or build a new one\r\n * immediatly pushes a new app into the list of modules\r\n * @param data data from emit\r\n * @returns either found DisplayActions2e or new DisplayActions2e with state\r\n */\r\nfunction checkAndBuildApp(data: EmitData): DisplayActions2e {\r\n let module = game.modules.get(moduleId) as unknown as MyModule;\r\n let newApp: DisplayActions2e = new DisplayActions2e(data.state);\r\n let app = checkForApp(data);\r\n if (app) {\r\n return app;\r\n }\r\n // push into list to wait for updates\r\n module.displayActions2e.push(newApp);\r\n return newApp;\r\n}\r\n\r\nexport function actionsFromConditions(conditions: Map): [number, number] {\r\n let numOfActions = 3;\r\n let numOfReactions = 1;\r\n\r\n let stun = conditions.get('stunned');\r\n // stunned overwrites slow thus it must be handled first\r\n if (stun) {\r\n numOfActions = stun[0].value! * condtionModifierTable['stunned'];\r\n } else {\r\n conditions.forEach(condition => {\r\n let slug: string = condition.system.slug;\r\n if (condtionModifierTable[slug]) {\r\n let valMod = condition.system.value.isValued ? condition.value! : 1;\r\n numOfActions += condtionModifierTable[slug!] * valMod;\r\n }\r\n });\r\n }\r\n\r\n return [numOfActions, numOfReactions];\r\n}\r\n","// Do not remove this import. If you do Vite will think your styles are dead\r\n// code and not include them in the build output.\r\nimport '../styles/module.css';\r\nimport {moduleId, socketEvent} from './constants';\r\nimport {EmitData, MyModule} from './types';\r\nimport {handleShowToAll, handleShowToSelection, handleShowWithPermission, handleUpdate} from './utils';\r\nimport {DisplayActions2e} from './apps/displayActions';\r\n\r\nlet module: MyModule;\r\nlet homeDisplayActions: DisplayActions2e;\r\n\r\n// Foundry Hooks\r\nHooks.once('init', () => {\r\n console.log(`Initializing ${moduleId}`);\r\n});\r\n\r\nHooks.on('getSceneControlButtons', (hudButtons: SceneControl[]) => {\r\n let hud = hudButtons.find((value: any) => {\r\n return value.name === 'token';\r\n });\r\n\r\n let tool: SceneControlTool = {\r\n name: 'DisplayActions2e.ButtonName',\r\n title: 'DisplayActions2e.ButtonHint',\r\n icon: 'fa fa-angle-double-right',\r\n button: true,\r\n visible: true,\r\n onClick: async () => {\r\n homeDisplayActions.render(true);\r\n game.socket?.emit('module.DisplayActions2e', {event: 'DisplayActions2e'});\r\n },\r\n };\r\n\r\n hud?.tools?.push(tool);\r\n});\r\n\r\nHooks.on('ready', () => {\r\n module = game.modules.get(moduleId) as unknown as MyModule;\r\n homeDisplayActions = new DisplayActions2e();\r\n\r\n module.displayActions2e = [homeDisplayActions];\r\n // sockets\r\n game.socket?.on(socketEvent, (data: EmitData) => {\r\n // all my events\r\n switch (data.operation) {\r\n case 'showToAll':\r\n handleShowToAll(data);\r\n break;\r\n case 'showToSelection':\r\n handleShowToSelection(data);\r\n break;\r\n case 'showWithPermission':\r\n handleShowWithPermission(data);\r\n break;\r\n case 'update':\r\n handleUpdate(data);\r\n break;\r\n default:\r\n console.log(data);\r\n break;\r\n }\r\n });\r\n});\r\n"],"names":["name","module","app","_a"],"mappings":"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"} \ No newline at end of file diff --git a/dist/templates/selectiveshow.html b/dist/templates/selectiveshow.html index afa1461..04f1be9 100644 --- a/dist/templates/selectiveshow.html +++ b/dist/templates/selectiveshow.html @@ -14,5 +14,6 @@ +
\ No newline at end of file diff --git a/src/languages/en.json b/src/languages/en.json index 7a6ed8d..5d78de0 100644 --- a/src/languages/en.json +++ b/src/languages/en.json @@ -5,6 +5,7 @@ "DisplayActions2e.ButtonIcon": "pf2-actions a", "DisplayActions2e.ShowPermissions": "Show with Permissions", "DisplayActions2e.Duplication": "Duplicate", + "DisplayActions2e.SentToChat": "Send to Chat", "selectiveshow": { "Show" : "Show", "ShowAll": "Show All", diff --git a/src/templates/selectiveshow.html b/src/templates/selectiveshow.html index afa1461..04f1be9 100644 --- a/src/templates/selectiveshow.html +++ b/src/templates/selectiveshow.html @@ -14,5 +14,6 @@ +
\ No newline at end of file diff --git a/src/ts/apps/selectiveShow.ts b/src/ts/apps/selectiveShow.ts index 54450f9..a8061a5 100644 --- a/src/ts/apps/selectiveShow.ts +++ b/src/ts/apps/selectiveShow.ts @@ -2,6 +2,7 @@ import {moduleId, socketEvent} from '../constants'; import {DisplayActions2eData, EmitData} from '../types'; +import {handleSendToChat} from '../utils'; export class SelectiveShowApp extends FormApplication { private userNameList: string[]; @@ -78,6 +79,19 @@ export class SelectiveShowApp extends FormApplication { this.close(); }); + + html.find('.send-to-chat').click(ev => { + ev.preventDefault(); + this._updateObject(); + + handleSendToChat({ + operation: 'sendToChat', + state: this.displayActionState, + user: game.userId, + }); + + this.close(); + }); } protected override _updateObject(): Promise { diff --git a/src/ts/utils.ts b/src/ts/utils.ts index bc4bfee..70b1d08 100644 --- a/src/ts/utils.ts +++ b/src/ts/utils.ts @@ -63,6 +63,19 @@ export function handleDuplication(data: EmitData) { module.displayActions2e.push(dialog); } +export function handleSendToChat(data: EmitData) { + let app = checkForApp(data); + if (app) { + if (app.rendered) { + // find the actions html, then wrap it to create "outerHtml" + let msg = app.element.find('.window-content').find('.flexbox-actions').wrapAll('
').parent(); + ChatMessage.create({ + content: msg.html(), + }); + } + } +} + /** * helper function to check if the wanted app already exists in the module * @param data data from emit From 437baf1aec990ab2f0f578c3c8231fd9a888f990 Mon Sep 17 00:00:00 2001 From: MoonIsFalling Date: Thu, 2 Feb 2023 18:42:41 +0100 Subject: [PATCH 2/3] update en.json --- dist/languages/en.json | 16 +++++++++------- dist/scripts/module.js | 11 +---------- dist/scripts/module.js.map | 2 +- src/languages/en.json | 16 +++++++++------- 4 files changed, 20 insertions(+), 25 deletions(-) diff --git a/dist/languages/en.json b/dist/languages/en.json index 5d78de0..e2748ad 100644 --- a/dist/languages/en.json +++ b/dist/languages/en.json @@ -1,11 +1,13 @@ { - "DisplayActions2e.WindowTitle": "Pf2e Actions", - "DisplayActions2e.ButtonName": "Pf2eActions", - "DisplayActions2e.ButtonHint": "Display Actions", - "DisplayActions2e.ButtonIcon": "pf2-actions a", - "DisplayActions2e.ShowPermissions": "Show with Permissions", - "DisplayActions2e.Duplication": "Duplicate", - "DisplayActions2e.SentToChat": "Send to Chat", + "DisplayActions2e":{ + "WindowTitle": "Pf2e Actions", + "ButtonName": "Pf2eActions", + "ButtonHint": "Display Actions", + "ButtonIcon": "pf2-actions a", + "ShowPermissions": "Show with Permissions", + "Duplication": "Duplicate", + "SentToChat": "Send to Chat" + }, "selectiveshow": { "Show" : "Show", "ShowAll": "Show All", diff --git a/dist/scripts/module.js b/dist/scripts/module.js index 7ff4a67..40c239d 100644 --- a/dist/scripts/module.js +++ b/dist/scripts/module.js @@ -72,12 +72,6 @@ class SelectiveShowApp extends FormApplication { html.find(".send-to-chat").click((ev) => { ev.preventDefault(); this._updateObject(); - console.log(html); - let msg = document.getElementById("DisplayActions2e").getElementsByClassName("window-content")[0].getElementsByClassName("flexbox-actions")[0]; - console.log(this.displayActionState.appId); - ChatMessage.create({ - content: msg.outerHTML - }); handleSendToChat({ operation: "sendToChat", state: this.displayActionState, @@ -129,15 +123,12 @@ class DisplayActions2e extends Application { userListPermissions: [String(game.userId)], tokenId: void 0, isLinkedToToken: this.isLinkedToActor, - duplicationNr: 0, - appId: this.appId + duplicationNr: 0 }; this.showPlayerHandler = new SelectiveShowApp([String((_a = game.user) == null ? void 0 : _a.data.name)], this.state); if (newState) { this.state = newState; } - console.log("Jens"); - console.log(this.appId); } get title() { let title = game.i18n.localize("DisplayActions2e.WindowTitle"); diff --git a/dist/scripts/module.js.map b/dist/scripts/module.js.map index fda89a7..1ee6d75 100644 --- a/dist/scripts/module.js.map +++ b/dist/scripts/module.js.map @@ -1 +1 @@ -{"version":3,"file":"module.js","sources":["../../src/ts/constants.ts","../../src/ts/apps/selectiveShow.ts","../../src/ts/apps/displayActions.ts","../../src/ts/utils.ts","../../src/ts/module.ts"],"sourcesContent":["import {name} from '../module.json';\r\nimport {ConditionModifierDictionary} from './types';\r\n\r\nexport const moduleId = name;\r\nexport const moduleName = 'DisplayActions2e';\r\nexport const socketEvent = `module.${moduleId}`;\r\nexport const condtionModifierTable: ConditionModifierDictionary = {\r\n slowed: -1,\r\n quickened: 1,\r\n stunned: 1,\r\n};\r\n","/* original by FVTT-SelectiveShow */\r\n\r\nimport {moduleId, socketEvent} from '../constants';\r\nimport {DisplayActions2eData, EmitData} from '../types';\r\nimport {handleSendToChat} from '../utils';\r\n\r\nexport class SelectiveShowApp extends FormApplication {\r\n private userNameList: string[];\r\n private displayActionState: DisplayActions2eData;\r\n\r\n constructor(users: string[], state: DisplayActions2eData) {\r\n super(users);\r\n this.userNameList = users;\r\n this.displayActionState = state;\r\n }\r\n\r\n static override get defaultOptions() {\r\n const options = super.defaultOptions;\r\n options.id = 'DisplayActions2e-selective-show';\r\n options.template = `modules/${moduleId}/templates/selectiveshow.html`;\r\n options.classes?.push('selective-show');\r\n options.height = 300;\r\n options.width = 250;\r\n options.minimizable = true;\r\n options.resizable = true;\r\n options.title = game.i18n.localize('selectiveshow.SelectiveShow');\r\n return options;\r\n }\r\n\r\n override async getData() {\r\n let data = await super.getData();\r\n // 👇️ ts-ignore ignores any ts errors on the next line\r\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n // @ts-ignore\r\n data.users = game.users.filter(u => u.active && u.data.id != game.user.id);\r\n return data;\r\n }\r\n\r\n override activateListeners(html: JQuery) {\r\n super.activateListeners(html);\r\n\r\n html.find('.show').click(ev => {\r\n ev.preventDefault();\r\n this._updateObject();\r\n // let selector = $(ev.currentTarget).parents('form').find('select');\r\n game.socket?.emit(socketEvent, {\r\n operation: 'showToSelection',\r\n state: this.displayActionState,\r\n user: game.userId,\r\n userList: this.userNameList,\r\n } as EmitData);\r\n this.close();\r\n });\r\n html.find('.show-all').click(ev => {\r\n ev.preventDefault();\r\n this._updateObject();\r\n\r\n game.socket?.emit(socketEvent, {\r\n operation: 'showToAll',\r\n state: this.displayActionState,\r\n user: game.userId,\r\n } as EmitData);\r\n\r\n this.close();\r\n });\r\n\r\n html.find('.show-permissions').click(ev => {\r\n ev.preventDefault();\r\n this._updateObject();\r\n\r\n this.displayActionState.userListPermissions = this.userNameList;\r\n\r\n game.socket?.emit(socketEvent, {\r\n operation: 'showWithPermission',\r\n state: this.displayActionState,\r\n user: game.userId,\r\n userList: this.userNameList,\r\n } as EmitData);\r\n\r\n this.close();\r\n });\r\n\r\n html.find('.send-to-chat').click(ev => {\r\n ev.preventDefault();\r\n this._updateObject();\r\n\r\n console.log(html);\r\n\r\n let msg = document\r\n .getElementById('DisplayActions2e')!\r\n .getElementsByClassName('window-content')[0]\r\n .getElementsByClassName('flexbox-actions')[0];\r\n\r\n console.log(this.displayActionState.appId);\r\n\r\n ChatMessage.create({\r\n content: msg.outerHTML,\r\n });\r\n\r\n handleSendToChat({\r\n operation: 'sendToChat',\r\n state: this.displayActionState,\r\n user: game.userId,\r\n });\r\n\r\n this.close();\r\n });\r\n }\r\n\r\n protected override _updateObject(): Promise {\r\n let selector = Array.from(\r\n document.getElementsByClassName('selective-show-form')[0].children[0].children[0].children[0].children,\r\n ) as HTMLOptionElement[];\r\n this.userNameList = selector.map((element: HTMLOptionElement) => {\r\n // 👇️ ts-ignore ignores any ts errors on the next line\r\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n // @ts-ignore\r\n if (element.selected) {\r\n return element.value;\r\n }\r\n return '';\r\n });\r\n\r\n // active User Id needs to be send always\r\n let activeUserId = game.userId;\r\n if (activeUserId) {\r\n if (!this.userNameList.includes(activeUserId)) {\r\n this.userNameList.push(activeUserId);\r\n }\r\n }\r\n return new Promise(() => {});\r\n }\r\n\r\n _handleShowPlayers(state: DisplayActions2eData) {\r\n this.render(true);\r\n this.displayActionState = state;\r\n }\r\n}\r\n","import {ActorPF2e} from '../../../types/src/module/actor';\r\nimport {ConditionPF2e} from '../../../types/src/module/item';\r\nimport {TokenDocumentPF2e} from '../../../types/src/module/token-document';\r\nimport {moduleId, socketEvent} from '../constants';\r\nimport {actionsFromConditions, handleDuplication, handleToken} from '../utils';\r\nimport {DisplayActions2eData, EmitData} from '../types';\r\nimport {SelectiveShowApp} from './selectiveShow';\r\n\r\nexport class DisplayActions2e extends Application {\r\n protected clickString = 'symbolClick';\r\n protected actionImage = '/systems/pf2e/icons/actions/OneAction.webp';\r\n protected reactionImage = '/systems/pf2e/icons/actions/Reaction.webp';\r\n protected defaultNumOfActions = 3;\r\n protected defaultNumOfReactions = 1;\r\n protected isLinkedToActor = false;\r\n\r\n protected state: DisplayActions2eData = {\r\n numOfActions: this.defaultNumOfActions,\r\n numOfReactions: this.defaultNumOfReactions,\r\n classNameListActions: Array.from({length: this.defaultNumOfActions}, () => 'symbol'),\r\n classNameListReactions: Array.from({length: this.defaultNumOfReactions}, () => 'symbol'),\r\n sentFromUserId: String(game.userId),\r\n userListPermissions: [String(game.userId)],\r\n tokenId: undefined,\r\n isLinkedToToken: this.isLinkedToActor,\r\n duplicationNr: 0,\r\n appId: this.appId,\r\n };\r\n\r\n protected showPlayerHandler: SelectiveShowApp = new SelectiveShowApp([String(game.user?.data.name)], this.state);\r\n\r\n constructor(newState?: DisplayActions2eData) {\r\n super();\r\n\r\n if (newState) {\r\n this.state = newState;\r\n }\r\n\r\n console.log('Jens');\r\n console.log(this.appId);\r\n }\r\n\r\n override get title(): string {\r\n let title = game.i18n.localize('DisplayActions2e.WindowTitle');\r\n\r\n if (this.state.isLinkedToToken) {\r\n title = title.concat(this.getTitleToken());\r\n }\r\n\r\n title = title.concat(this.getTitleSentFrom());\r\n title = title.concat(this.getTitleDuplication());\r\n return title;\r\n }\r\n\r\n static override get defaultOptions(): ApplicationOptions {\r\n return foundry.utils.mergeObject(super.defaultOptions, {\r\n id: 'DisplayActions2e',\r\n template: `modules/${moduleId}/templates/result.hbs`,\r\n width: 270,\r\n height: 140,\r\n resizable: true,\r\n title: 'DisplayActions2e.WindowTitle',\r\n }) as ApplicationOptions;\r\n }\r\n\r\n override getData() {\r\n this.updateState();\r\n\r\n return {\r\n numOfActions: this.state.numOfActions,\r\n numOfReactions: this.state.numOfReactions,\r\n actionImagePayload: this.buildHandlebarPayload(\r\n this.state.numOfActions,\r\n {actionImage: this.actionImage},\r\n this.state.classNameListActions,\r\n ),\r\n reactionImagePayload: this.buildHandlebarPayload(\r\n this.state.numOfReactions,\r\n {reactionImage: this.reactionImage},\r\n this.state.classNameListReactions,\r\n ),\r\n isLinkedToActor: this.state.isLinkedToToken,\r\n };\r\n }\r\n\r\n override activateListeners(html: JQuery): void {\r\n super.activateListeners(html);\r\n // register events for all users with permission\r\n if (this.state.userListPermissions.includes(String(game.userId))) {\r\n html.find('img.symbol').on('click', this._onClickSymbolImage.bind(this));\r\n html.find('input.input-counter').on('change', this._onChangeCountNumber.bind(this));\r\n // html.find('button.actorLink').on('click', DataWrapper2e.createApplications);\r\n html.find('button.actorLink').on('click', this._onButtonClickSelectedActors.bind(this));\r\n html.find('button.actorUpdate').on('click', this._onButtonClickUpdateActors.bind(this));\r\n }\r\n }\r\n\r\n protected _onClickSymbolImage(event: Event) {\r\n event.preventDefault();\r\n // switch css classes of the images\r\n const image = event.currentTarget as HTMLImageElement;\r\n if (image === undefined || image === null) {\r\n return;\r\n }\r\n image.classList.toggle(this.clickString);\r\n // save the state\r\n // all id begin with either a or r for action or reaction respectively\r\n const pos = parseInt(image.id.slice(1));\r\n switch (image.id.charAt(0)) {\r\n case 'a':\r\n this.state.classNameListActions[pos] = image.className;\r\n break;\r\n case 'r':\r\n this.state.classNameListReactions[pos] = image.className;\r\n break;\r\n default:\r\n console.error(`${moduleId} handled Image onClicks wrong.`);\r\n }\r\n\r\n this.emitUpdate();\r\n }\r\n\r\n /**\r\n * Helper function to make Payload for Handlebars each loop to pass data\r\n * @param iterator array size\r\n */\r\n protected buildHandlebarPayload(iterator: number, imageObj: any, state: string[]) {\r\n let payload = [];\r\n for (let index = 0; index < iterator; index++) {\r\n payload.push(foundry.utils.mergeObject({number: index, cssClass: state[index]}, imageObj));\r\n }\r\n return payload;\r\n }\r\n\r\n protected _onChangeCountNumber(event: Event) {\r\n event.preventDefault();\r\n const input = event.currentTarget as HTMLInputElement;\r\n const value = parseInt(input.value);\r\n if (!isNaN(value)) {\r\n if (value >= 0) {\r\n switch (input.id) {\r\n case 'count-action':\r\n this.state.numOfActions = value;\r\n break;\r\n case 'count-reaction':\r\n this.state.numOfReactions = value;\r\n break;\r\n default:\r\n console.error(`${moduleId} incorrectly handled number of actions!`);\r\n }\r\n this.render();\r\n this.emitUpdate();\r\n }\r\n }\r\n }\r\n\r\n protected override _getHeaderButtons(): ApplicationHeaderButton[] {\r\n const buttons = super._getHeaderButtons();\r\n\r\n const headerButton: ApplicationHeaderButton = {\r\n label: 'JOURNAL.ActionShow',\r\n class: 'share-image',\r\n icon: 'fas fa-eye',\r\n onclick: () => this.showPlayerHandler._handleShowPlayers(this.state),\r\n };\r\n\r\n const headerButtonDuplication: ApplicationHeaderButton = {\r\n label: 'DisplayActions2e.Duplication',\r\n class: 'duplicate-app',\r\n icon: 'fa fa-clone',\r\n onclick: () => this._onHeaderDuplication(),\r\n };\r\n\r\n buttons.unshift(headerButton);\r\n buttons.unshift(headerButtonDuplication);\r\n\r\n return buttons;\r\n }\r\n\r\n /**\r\n * Update internal state based on the size of the arrays\r\n */\r\n protected updateState() {\r\n // case to few state elements\r\n if (this.state.classNameListActions.length < this.state.numOfActions) {\r\n const tmp = Array.from(\r\n {length: this.state.numOfActions - this.state.classNameListActions.length},\r\n () => 'symbol',\r\n );\r\n this.state.classNameListActions = this.state.classNameListActions.concat(tmp);\r\n }\r\n // too many elements, we remove the last elements\r\n else if (this.state.classNameListActions.length > this.state.numOfActions) {\r\n const cut_value = this.state.classNameListActions.length - this.state.numOfActions;\r\n this.state.classNameListActions = this.state.classNameListActions.slice(0, cut_value);\r\n }\r\n\r\n // other state same cases\r\n\r\n // case to few state elements\r\n if (this.state.classNameListReactions.length < this.state.numOfReactions) {\r\n const tmp = Array.from(\r\n {length: this.state.numOfReactions - this.state.classNameListReactions.length},\r\n () => 'symbol',\r\n );\r\n this.state.classNameListReactions = this.state.classNameListReactions.concat(tmp);\r\n }\r\n // too many elements, we remove the last elements\r\n else if (this.state.classNameListReactions.length > this.state.numOfReactions) {\r\n const cut_value = this.state.classNameListReactions.length - this.state.numOfReactions;\r\n this.state.classNameListReactions = this.state.classNameListReactions.slice(0, cut_value);\r\n }\r\n }\r\n\r\n protected emitUpdate() {\r\n game.socket?.emit(socketEvent, {\r\n operation: 'update',\r\n state: this.state,\r\n user: game.userId,\r\n } as EmitData);\r\n }\r\n\r\n public setState(newState: DisplayActions2eData) {\r\n this.state = foundry.utils.deepClone(newState);\r\n }\r\n\r\n /**\r\n * returns a clone of the state not a reference\r\n */\r\n public getState() {\r\n return foundry.utils.deepClone(this.state);\r\n }\r\n\r\n /**\r\n * The following functions are only done because transpilation is bullying me and thus i cannot do an child of this class\r\n */\r\n private getTitleToken(): string {\r\n let title = '';\r\n\r\n let name = (canvas as Canvas).tokens.get(this.state.tokenId as string);\r\n title = title.concat(' for ', String(name?.data.name));\r\n return title;\r\n }\r\n\r\n private getTitleSentFrom(): string {\r\n if (this.state.sentFromUserId === game.userId) {\r\n return '';\r\n }\r\n let title = ' sent from ';\r\n let name = game.users?.find(user => {\r\n return user.data._id === this.state.sentFromUserId;\r\n })?.data.name;\r\n return title.concat(name);\r\n }\r\n\r\n private getTitleDuplication(): string {\r\n let title = '';\r\n if (this.state.duplicationNr > 0) {\r\n title = title.concat(' (', String(this.state.duplicationNr), ')');\r\n }\r\n return title;\r\n }\r\n\r\n private _onButtonClickSelectedActors() {\r\n canvas.tokens.controlled.forEach((token: TokenDocumentPF2e) => {\r\n // let app = new DisplayTokenActions2e(token.data._id);\r\n\r\n let newState = foundry.utils.deepClone(this.state);\r\n newState.isLinkedToToken = true;\r\n newState.tokenId = token.data._id;\r\n newState = this.generateActionsFromConditions(newState);\r\n\r\n handleToken({\r\n operation: 'token',\r\n state: newState,\r\n user: game.userId,\r\n } as EmitData);\r\n });\r\n }\r\n\r\n private _onButtonClickUpdateActors() {\r\n this.state = this.generateActionsFromConditions(this.state);\r\n this.render();\r\n }\r\n\r\n private _onHeaderDuplication() {\r\n let newState = foundry.utils.deepClone(this.state);\r\n\r\n handleDuplication({\r\n operation: 'duplication',\r\n state: newState,\r\n user: game.userId,\r\n } as EmitData);\r\n }\r\n\r\n private generateActionsFromConditions(oldState: DisplayActions2eData): DisplayActions2eData {\r\n let newState = foundry.utils.deepClone(oldState);\r\n\r\n let actor = ((canvas as Canvas).tokens.get(oldState.tokenId!)?.document as TokenDocumentPF2e).actor as ActorPF2e;\r\n // let actor = game.actors.tokens[oldState.tokenId!] as ActorPF2e;\r\n\r\n let conditions = actor.conditions as Map;\r\n\r\n let [numOfActions, numOfReactions] = actionsFromConditions(conditions);\r\n\r\n newState.numOfActions = numOfActions;\r\n newState.numOfReactions = numOfReactions;\r\n\r\n return newState;\r\n }\r\n}\r\n","import {ConditionPF2e} from '../../types/src/module/item';\r\nimport {DisplayActions2e} from './apps/displayActions';\r\nimport {condtionModifierTable, moduleId} from './constants';\r\nimport {EmitData, MyModule} from './types';\r\n\r\nexport function handleShowToAll(data: EmitData) {\r\n const dialog = checkAndBuildApp(data);\r\n dialog.render(true, {id: `DisplayActions2e${data.user}`} as RenderOptions);\r\n}\r\n\r\nexport function handleShowToSelection(data: EmitData) {\r\n if (data.userList?.includes(String(game.userId))) {\r\n const dialog = checkAndBuildApp(data);\r\n dialog.render(true, {id: `DisplayActions2e${data.user}`} as RenderOptions);\r\n }\r\n}\r\n\r\nexport function handleShowWithPermission(data: EmitData) {\r\n handleShowToSelection(data);\r\n}\r\n\r\nexport function handleUpdate(data: EmitData) {\r\n let module = game.modules.get(moduleId) as unknown as MyModule;\r\n let nameInTitle = game.users?.find(user => {\r\n return user.data._id === data.state.sentFromUserId;\r\n })?.data.name;\r\n\r\n if (nameInTitle) {\r\n module.displayActions2e.forEach(app => {\r\n // check for title OR own application update\r\n // this is why checkForApp cannot be used\r\n if (app.title.includes(nameInTitle!) || data.state.sentFromUserId === game.userId) {\r\n app.setState(data.state);\r\n app.render(false, {id: `DisplayActions2e${data.user}`} as RenderOptions);\r\n }\r\n });\r\n }\r\n}\r\n\r\nexport function handleToken(data: EmitData) {\r\n const dialog = checkAndBuildApp(data);\r\n dialog.render(true, {id: `DisplayActions2e${data.user}`} as RenderOptions);\r\n}\r\n\r\nexport function handleDuplication(data: EmitData) {\r\n let newState = foundry.utils.deepClone(data.state);\r\n\r\n do {\r\n newState.duplicationNr += 1;\r\n } while (\r\n checkForApp({\r\n operation: data.operation,\r\n user: data.user,\r\n state: newState,\r\n userList: data.userList,\r\n })\r\n );\r\n\r\n const dialog = new DisplayActions2e(newState);\r\n const module = game.modules.get(moduleId) as unknown as MyModule;\r\n dialog.render(true, {id: `DisplayActions2e${data.user}${newState.duplicationNr}`} as RenderOptions);\r\n // push into list to wait for updates\r\n module.displayActions2e.push(dialog);\r\n}\r\n\r\nexport function handleSendToChat(data: EmitData) {\r\n let app = checkForApp(data);\r\n if (app) {\r\n if (app.rendered) {\r\n let msg = app.element.find('.window-content').find('.flexbox-actions').wrapAll('
').parent();\r\n ChatMessage.create({\r\n content: msg.html(),\r\n });\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * helper function to check if the wanted app already exists in the module\r\n * @param data data from emit\r\n * @returns either found DisplayActions2e or undefined\r\n */\r\nfunction checkForApp(data: EmitData): DisplayActions2e | undefined {\r\n let module = game.modules.get(moduleId) as unknown as MyModule;\r\n\r\n let app = module.displayActions2e.find(app => {\r\n let appState = app.getState();\r\n let control: boolean = appState.sentFromUserId === data.state.sentFromUserId;\r\n control = control && appState.duplicationNr.almostEqual(data.state.duplicationNr);\r\n control = control && appState.tokenId === data.state.tokenId;\r\n control = control && appState.isLinkedToToken === data.state.isLinkedToToken;\r\n\r\n return control;\r\n });\r\n\r\n return app;\r\n}\r\n\r\n/**\r\n * helper function to return the application from the modules or build a new one\r\n * immediatly pushes a new app into the list of modules\r\n * @param data data from emit\r\n * @returns either found DisplayActions2e or new DisplayActions2e with state\r\n */\r\nfunction checkAndBuildApp(data: EmitData): DisplayActions2e {\r\n let module = game.modules.get(moduleId) as unknown as MyModule;\r\n let newApp: DisplayActions2e = new DisplayActions2e(data.state);\r\n let app = checkForApp(data);\r\n if (app) {\r\n return app;\r\n }\r\n // push into list to wait for updates\r\n module.displayActions2e.push(newApp);\r\n return newApp;\r\n}\r\n\r\nexport function actionsFromConditions(conditions: Map): [number, number] {\r\n let numOfActions = 3;\r\n let numOfReactions = 1;\r\n\r\n let stun = conditions.get('stunned');\r\n // stunned overwrites slow thus it must be handled first\r\n if (stun) {\r\n numOfActions = stun[0].value! * condtionModifierTable['stunned'];\r\n } else {\r\n conditions.forEach(condition => {\r\n let slug: string = condition.system.slug;\r\n if (condtionModifierTable[slug]) {\r\n let valMod = condition.system.value.isValued ? condition.value! : 1;\r\n numOfActions += condtionModifierTable[slug!] * valMod;\r\n }\r\n });\r\n }\r\n\r\n return [numOfActions, numOfReactions];\r\n}\r\n","// Do not remove this import. If you do Vite will think your styles are dead\r\n// code and not include them in the build output.\r\nimport '../styles/module.css';\r\nimport {moduleId, socketEvent} from './constants';\r\nimport {EmitData, MyModule} from './types';\r\nimport {handleShowToAll, handleShowToSelection, handleShowWithPermission, handleUpdate} from './utils';\r\nimport {DisplayActions2e} from './apps/displayActions';\r\n\r\nlet module: MyModule;\r\nlet homeDisplayActions: DisplayActions2e;\r\n\r\n// Foundry Hooks\r\nHooks.once('init', () => {\r\n console.log(`Initializing ${moduleId}`);\r\n});\r\n\r\nHooks.on('getSceneControlButtons', (hudButtons: SceneControl[]) => {\r\n let hud = hudButtons.find((value: any) => {\r\n return value.name === 'token';\r\n });\r\n\r\n let tool: SceneControlTool = {\r\n name: 'DisplayActions2e.ButtonName',\r\n title: 'DisplayActions2e.ButtonHint',\r\n icon: 'fa fa-angle-double-right',\r\n button: true,\r\n visible: true,\r\n onClick: async () => {\r\n homeDisplayActions.render(true);\r\n game.socket?.emit('module.DisplayActions2e', {event: 'DisplayActions2e'});\r\n },\r\n };\r\n\r\n hud?.tools?.push(tool);\r\n});\r\n\r\nHooks.on('ready', () => {\r\n module = game.modules.get(moduleId) as unknown as MyModule;\r\n homeDisplayActions = new DisplayActions2e();\r\n\r\n module.displayActions2e = [homeDisplayActions];\r\n // sockets\r\n game.socket?.on(socketEvent, (data: EmitData) => {\r\n // all my events\r\n switch (data.operation) {\r\n case 'showToAll':\r\n handleShowToAll(data);\r\n break;\r\n case 'showToSelection':\r\n handleShowToSelection(data);\r\n break;\r\n case 'showWithPermission':\r\n handleShowWithPermission(data);\r\n break;\r\n case 'update':\r\n handleUpdate(data);\r\n break;\r\n default:\r\n console.log(data);\r\n break;\r\n }\r\n });\r\n});\r\n"],"names":["name","module","app","_a"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"module.js","sources":["../../src/ts/constants.ts","../../src/ts/apps/selectiveShow.ts","../../src/ts/apps/displayActions.ts","../../src/ts/utils.ts","../../src/ts/module.ts"],"sourcesContent":["import {name} from '../module.json';\r\nimport {ConditionModifierDictionary} from './types';\r\n\r\nexport const moduleId = name;\r\nexport const moduleName = 'DisplayActions2e';\r\nexport const socketEvent = `module.${moduleId}`;\r\nexport const condtionModifierTable: ConditionModifierDictionary = {\r\n slowed: -1,\r\n quickened: 1,\r\n stunned: 1,\r\n};\r\n","/* original by FVTT-SelectiveShow */\r\n\r\nimport {moduleId, socketEvent} from '../constants';\r\nimport {DisplayActions2eData, EmitData} from '../types';\r\nimport {handleSendToChat} from '../utils';\r\n\r\nexport class SelectiveShowApp extends FormApplication {\r\n private userNameList: string[];\r\n private displayActionState: DisplayActions2eData;\r\n\r\n constructor(users: string[], state: DisplayActions2eData) {\r\n super(users);\r\n this.userNameList = users;\r\n this.displayActionState = state;\r\n }\r\n\r\n static override get defaultOptions() {\r\n const options = super.defaultOptions;\r\n options.id = 'DisplayActions2e-selective-show';\r\n options.template = `modules/${moduleId}/templates/selectiveshow.html`;\r\n options.classes?.push('selective-show');\r\n options.height = 300;\r\n options.width = 250;\r\n options.minimizable = true;\r\n options.resizable = true;\r\n options.title = game.i18n.localize('selectiveshow.SelectiveShow');\r\n return options;\r\n }\r\n\r\n override async getData() {\r\n let data = await super.getData();\r\n // 👇️ ts-ignore ignores any ts errors on the next line\r\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n // @ts-ignore\r\n data.users = game.users.filter(u => u.active && u.data.id != game.user.id);\r\n return data;\r\n }\r\n\r\n override activateListeners(html: JQuery) {\r\n super.activateListeners(html);\r\n\r\n html.find('.show').click(ev => {\r\n ev.preventDefault();\r\n this._updateObject();\r\n // let selector = $(ev.currentTarget).parents('form').find('select');\r\n game.socket?.emit(socketEvent, {\r\n operation: 'showToSelection',\r\n state: this.displayActionState,\r\n user: game.userId,\r\n userList: this.userNameList,\r\n } as EmitData);\r\n this.close();\r\n });\r\n html.find('.show-all').click(ev => {\r\n ev.preventDefault();\r\n this._updateObject();\r\n\r\n game.socket?.emit(socketEvent, {\r\n operation: 'showToAll',\r\n state: this.displayActionState,\r\n user: game.userId,\r\n } as EmitData);\r\n\r\n this.close();\r\n });\r\n\r\n html.find('.show-permissions').click(ev => {\r\n ev.preventDefault();\r\n this._updateObject();\r\n\r\n this.displayActionState.userListPermissions = this.userNameList;\r\n\r\n game.socket?.emit(socketEvent, {\r\n operation: 'showWithPermission',\r\n state: this.displayActionState,\r\n user: game.userId,\r\n userList: this.userNameList,\r\n } as EmitData);\r\n\r\n this.close();\r\n });\r\n\r\n html.find('.send-to-chat').click(ev => {\r\n ev.preventDefault();\r\n this._updateObject();\r\n\r\n handleSendToChat({\r\n operation: 'sendToChat',\r\n state: this.displayActionState,\r\n user: game.userId,\r\n });\r\n\r\n this.close();\r\n });\r\n }\r\n\r\n protected override _updateObject(): Promise {\r\n let selector = Array.from(\r\n document.getElementsByClassName('selective-show-form')[0].children[0].children[0].children[0].children,\r\n ) as HTMLOptionElement[];\r\n this.userNameList = selector.map((element: HTMLOptionElement) => {\r\n // 👇️ ts-ignore ignores any ts errors on the next line\r\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n // @ts-ignore\r\n if (element.selected) {\r\n return element.value;\r\n }\r\n return '';\r\n });\r\n\r\n // active User Id needs to be send always\r\n let activeUserId = game.userId;\r\n if (activeUserId) {\r\n if (!this.userNameList.includes(activeUserId)) {\r\n this.userNameList.push(activeUserId);\r\n }\r\n }\r\n return new Promise(() => {});\r\n }\r\n\r\n _handleShowPlayers(state: DisplayActions2eData) {\r\n this.render(true);\r\n this.displayActionState = state;\r\n }\r\n}\r\n","import {ActorPF2e} from '../../../types/src/module/actor';\r\nimport {ConditionPF2e} from '../../../types/src/module/item';\r\nimport {TokenDocumentPF2e} from '../../../types/src/module/token-document';\r\nimport {moduleId, socketEvent} from '../constants';\r\nimport {actionsFromConditions, handleDuplication, handleToken} from '../utils';\r\nimport {DisplayActions2eData, EmitData} from '../types';\r\nimport {SelectiveShowApp} from './selectiveShow';\r\n\r\nexport class DisplayActions2e extends Application {\r\n protected clickString = 'symbolClick';\r\n protected actionImage = '/systems/pf2e/icons/actions/OneAction.webp';\r\n protected reactionImage = '/systems/pf2e/icons/actions/Reaction.webp';\r\n protected defaultNumOfActions = 3;\r\n protected defaultNumOfReactions = 1;\r\n protected isLinkedToActor = false;\r\n\r\n protected state: DisplayActions2eData = {\r\n numOfActions: this.defaultNumOfActions,\r\n numOfReactions: this.defaultNumOfReactions,\r\n classNameListActions: Array.from({length: this.defaultNumOfActions}, () => 'symbol'),\r\n classNameListReactions: Array.from({length: this.defaultNumOfReactions}, () => 'symbol'),\r\n sentFromUserId: String(game.userId),\r\n userListPermissions: [String(game.userId)],\r\n tokenId: undefined,\r\n isLinkedToToken: this.isLinkedToActor,\r\n duplicationNr: 0,\r\n };\r\n\r\n protected showPlayerHandler: SelectiveShowApp = new SelectiveShowApp([String(game.user?.data.name)], this.state);\r\n\r\n constructor(newState?: DisplayActions2eData) {\r\n super();\r\n\r\n if (newState) {\r\n this.state = newState;\r\n }\r\n }\r\n\r\n override get title(): string {\r\n let title = game.i18n.localize('DisplayActions2e.WindowTitle');\r\n\r\n if (this.state.isLinkedToToken) {\r\n title = title.concat(this.getTitleToken());\r\n }\r\n\r\n title = title.concat(this.getTitleSentFrom());\r\n title = title.concat(this.getTitleDuplication());\r\n return title;\r\n }\r\n\r\n static override get defaultOptions(): ApplicationOptions {\r\n return foundry.utils.mergeObject(super.defaultOptions, {\r\n id: 'DisplayActions2e',\r\n template: `modules/${moduleId}/templates/result.hbs`,\r\n width: 270,\r\n height: 140,\r\n resizable: true,\r\n title: 'DisplayActions2e.WindowTitle',\r\n }) as ApplicationOptions;\r\n }\r\n\r\n override getData() {\r\n this.updateState();\r\n\r\n return {\r\n numOfActions: this.state.numOfActions,\r\n numOfReactions: this.state.numOfReactions,\r\n actionImagePayload: this.buildHandlebarPayload(\r\n this.state.numOfActions,\r\n {actionImage: this.actionImage},\r\n this.state.classNameListActions,\r\n ),\r\n reactionImagePayload: this.buildHandlebarPayload(\r\n this.state.numOfReactions,\r\n {reactionImage: this.reactionImage},\r\n this.state.classNameListReactions,\r\n ),\r\n isLinkedToActor: this.state.isLinkedToToken,\r\n };\r\n }\r\n\r\n override activateListeners(html: JQuery): void {\r\n super.activateListeners(html);\r\n // register events for all users with permission\r\n if (this.state.userListPermissions.includes(String(game.userId))) {\r\n html.find('img.symbol').on('click', this._onClickSymbolImage.bind(this));\r\n html.find('input.input-counter').on('change', this._onChangeCountNumber.bind(this));\r\n // html.find('button.actorLink').on('click', DataWrapper2e.createApplications);\r\n html.find('button.actorLink').on('click', this._onButtonClickSelectedActors.bind(this));\r\n html.find('button.actorUpdate').on('click', this._onButtonClickUpdateActors.bind(this));\r\n }\r\n }\r\n\r\n protected _onClickSymbolImage(event: Event) {\r\n event.preventDefault();\r\n // switch css classes of the images\r\n const image = event.currentTarget as HTMLImageElement;\r\n if (image === undefined || image === null) {\r\n return;\r\n }\r\n image.classList.toggle(this.clickString);\r\n // save the state\r\n // all id begin with either a or r for action or reaction respectively\r\n const pos = parseInt(image.id.slice(1));\r\n switch (image.id.charAt(0)) {\r\n case 'a':\r\n this.state.classNameListActions[pos] = image.className;\r\n break;\r\n case 'r':\r\n this.state.classNameListReactions[pos] = image.className;\r\n break;\r\n default:\r\n console.error(`${moduleId} handled Image onClicks wrong.`);\r\n }\r\n\r\n this.emitUpdate();\r\n }\r\n\r\n /**\r\n * Helper function to make Payload for Handlebars each loop to pass data\r\n * @param iterator array size\r\n */\r\n protected buildHandlebarPayload(iterator: number, imageObj: any, state: string[]) {\r\n let payload = [];\r\n for (let index = 0; index < iterator; index++) {\r\n payload.push(foundry.utils.mergeObject({number: index, cssClass: state[index]}, imageObj));\r\n }\r\n return payload;\r\n }\r\n\r\n protected _onChangeCountNumber(event: Event) {\r\n event.preventDefault();\r\n const input = event.currentTarget as HTMLInputElement;\r\n const value = parseInt(input.value);\r\n if (!isNaN(value)) {\r\n if (value >= 0) {\r\n switch (input.id) {\r\n case 'count-action':\r\n this.state.numOfActions = value;\r\n break;\r\n case 'count-reaction':\r\n this.state.numOfReactions = value;\r\n break;\r\n default:\r\n console.error(`${moduleId} incorrectly handled number of actions!`);\r\n }\r\n this.render();\r\n this.emitUpdate();\r\n }\r\n }\r\n }\r\n\r\n protected override _getHeaderButtons(): ApplicationHeaderButton[] {\r\n const buttons = super._getHeaderButtons();\r\n\r\n const headerButton: ApplicationHeaderButton = {\r\n label: 'JOURNAL.ActionShow',\r\n class: 'share-image',\r\n icon: 'fas fa-eye',\r\n onclick: () => this.showPlayerHandler._handleShowPlayers(this.state),\r\n };\r\n\r\n const headerButtonDuplication: ApplicationHeaderButton = {\r\n label: 'DisplayActions2e.Duplication',\r\n class: 'duplicate-app',\r\n icon: 'fa fa-clone',\r\n onclick: () => this._onHeaderDuplication(),\r\n };\r\n\r\n buttons.unshift(headerButton);\r\n buttons.unshift(headerButtonDuplication);\r\n\r\n return buttons;\r\n }\r\n\r\n /**\r\n * Update internal state based on the size of the arrays\r\n */\r\n protected updateState() {\r\n // case to few state elements\r\n if (this.state.classNameListActions.length < this.state.numOfActions) {\r\n const tmp = Array.from(\r\n {length: this.state.numOfActions - this.state.classNameListActions.length},\r\n () => 'symbol',\r\n );\r\n this.state.classNameListActions = this.state.classNameListActions.concat(tmp);\r\n }\r\n // too many elements, we remove the last elements\r\n else if (this.state.classNameListActions.length > this.state.numOfActions) {\r\n const cut_value = this.state.classNameListActions.length - this.state.numOfActions;\r\n this.state.classNameListActions = this.state.classNameListActions.slice(0, cut_value);\r\n }\r\n\r\n // other state same cases\r\n\r\n // case to few state elements\r\n if (this.state.classNameListReactions.length < this.state.numOfReactions) {\r\n const tmp = Array.from(\r\n {length: this.state.numOfReactions - this.state.classNameListReactions.length},\r\n () => 'symbol',\r\n );\r\n this.state.classNameListReactions = this.state.classNameListReactions.concat(tmp);\r\n }\r\n // too many elements, we remove the last elements\r\n else if (this.state.classNameListReactions.length > this.state.numOfReactions) {\r\n const cut_value = this.state.classNameListReactions.length - this.state.numOfReactions;\r\n this.state.classNameListReactions = this.state.classNameListReactions.slice(0, cut_value);\r\n }\r\n }\r\n\r\n protected emitUpdate() {\r\n game.socket?.emit(socketEvent, {\r\n operation: 'update',\r\n state: this.state,\r\n user: game.userId,\r\n } as EmitData);\r\n }\r\n\r\n public setState(newState: DisplayActions2eData) {\r\n this.state = foundry.utils.deepClone(newState);\r\n }\r\n\r\n /**\r\n * returns a clone of the state not a reference\r\n */\r\n public getState() {\r\n return foundry.utils.deepClone(this.state);\r\n }\r\n\r\n /**\r\n * The following functions are only done because transpilation is bullying me and thus i cannot do an child of this class\r\n */\r\n private getTitleToken(): string {\r\n let title = '';\r\n\r\n let name = (canvas as Canvas).tokens.get(this.state.tokenId as string);\r\n title = title.concat(' for ', String(name?.data.name));\r\n return title;\r\n }\r\n\r\n private getTitleSentFrom(): string {\r\n if (this.state.sentFromUserId === game.userId) {\r\n return '';\r\n }\r\n let title = ' sent from ';\r\n let name = game.users?.find(user => {\r\n return user.data._id === this.state.sentFromUserId;\r\n })?.data.name;\r\n return title.concat(name);\r\n }\r\n\r\n private getTitleDuplication(): string {\r\n let title = '';\r\n if (this.state.duplicationNr > 0) {\r\n title = title.concat(' (', String(this.state.duplicationNr), ')');\r\n }\r\n return title;\r\n }\r\n\r\n private _onButtonClickSelectedActors() {\r\n canvas.tokens.controlled.forEach((token: TokenDocumentPF2e) => {\r\n // let app = new DisplayTokenActions2e(token.data._id);\r\n\r\n let newState = foundry.utils.deepClone(this.state);\r\n newState.isLinkedToToken = true;\r\n newState.tokenId = token.data._id;\r\n newState = this.generateActionsFromConditions(newState);\r\n\r\n handleToken({\r\n operation: 'token',\r\n state: newState,\r\n user: game.userId,\r\n } as EmitData);\r\n });\r\n }\r\n\r\n private _onButtonClickUpdateActors() {\r\n this.state = this.generateActionsFromConditions(this.state);\r\n this.render();\r\n }\r\n\r\n private _onHeaderDuplication() {\r\n let newState = foundry.utils.deepClone(this.state);\r\n\r\n handleDuplication({\r\n operation: 'duplication',\r\n state: newState,\r\n user: game.userId,\r\n } as EmitData);\r\n }\r\n\r\n private generateActionsFromConditions(oldState: DisplayActions2eData): DisplayActions2eData {\r\n let newState = foundry.utils.deepClone(oldState);\r\n\r\n let actor = ((canvas as Canvas).tokens.get(oldState.tokenId!)?.document as TokenDocumentPF2e).actor as ActorPF2e;\r\n // let actor = game.actors.tokens[oldState.tokenId!] as ActorPF2e;\r\n\r\n let conditions = actor.conditions as Map;\r\n\r\n let [numOfActions, numOfReactions] = actionsFromConditions(conditions);\r\n\r\n newState.numOfActions = numOfActions;\r\n newState.numOfReactions = numOfReactions;\r\n\r\n return newState;\r\n }\r\n}\r\n","import {ConditionPF2e} from '../../types/src/module/item';\r\nimport {DisplayActions2e} from './apps/displayActions';\r\nimport {condtionModifierTable, moduleId} from './constants';\r\nimport {EmitData, MyModule} from './types';\r\n\r\nexport function handleShowToAll(data: EmitData) {\r\n const dialog = checkAndBuildApp(data);\r\n dialog.render(true, {id: `DisplayActions2e${data.user}`} as RenderOptions);\r\n}\r\n\r\nexport function handleShowToSelection(data: EmitData) {\r\n if (data.userList?.includes(String(game.userId))) {\r\n const dialog = checkAndBuildApp(data);\r\n dialog.render(true, {id: `DisplayActions2e${data.user}`} as RenderOptions);\r\n }\r\n}\r\n\r\nexport function handleShowWithPermission(data: EmitData) {\r\n handleShowToSelection(data);\r\n}\r\n\r\nexport function handleUpdate(data: EmitData) {\r\n let module = game.modules.get(moduleId) as unknown as MyModule;\r\n let nameInTitle = game.users?.find(user => {\r\n return user.data._id === data.state.sentFromUserId;\r\n })?.data.name;\r\n\r\n if (nameInTitle) {\r\n module.displayActions2e.forEach(app => {\r\n // check for title OR own application update\r\n // this is why checkForApp cannot be used\r\n if (app.title.includes(nameInTitle!) || data.state.sentFromUserId === game.userId) {\r\n app.setState(data.state);\r\n app.render(false, {id: `DisplayActions2e${data.user}`} as RenderOptions);\r\n }\r\n });\r\n }\r\n}\r\n\r\nexport function handleToken(data: EmitData) {\r\n const dialog = checkAndBuildApp(data);\r\n dialog.render(true, {id: `DisplayActions2e${data.user}`} as RenderOptions);\r\n}\r\n\r\nexport function handleDuplication(data: EmitData) {\r\n let newState = foundry.utils.deepClone(data.state);\r\n\r\n do {\r\n newState.duplicationNr += 1;\r\n } while (\r\n checkForApp({\r\n operation: data.operation,\r\n user: data.user,\r\n state: newState,\r\n userList: data.userList,\r\n })\r\n );\r\n\r\n const dialog = new DisplayActions2e(newState);\r\n const module = game.modules.get(moduleId) as unknown as MyModule;\r\n dialog.render(true, {id: `DisplayActions2e${data.user}${newState.duplicationNr}`} as RenderOptions);\r\n // push into list to wait for updates\r\n module.displayActions2e.push(dialog);\r\n}\r\n\r\nexport function handleSendToChat(data: EmitData) {\r\n let app = checkForApp(data);\r\n if (app) {\r\n if (app.rendered) {\r\n // find the actions html, then wrap it to create \"outerHtml\"\r\n let msg = app.element.find('.window-content').find('.flexbox-actions').wrapAll('
').parent();\r\n ChatMessage.create({\r\n content: msg.html(),\r\n });\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * helper function to check if the wanted app already exists in the module\r\n * @param data data from emit\r\n * @returns either found DisplayActions2e or undefined\r\n */\r\nfunction checkForApp(data: EmitData): DisplayActions2e | undefined {\r\n let module = game.modules.get(moduleId) as unknown as MyModule;\r\n\r\n let app = module.displayActions2e.find(app => {\r\n let appState = app.getState();\r\n let control: boolean = appState.sentFromUserId === data.state.sentFromUserId;\r\n control = control && appState.duplicationNr.almostEqual(data.state.duplicationNr);\r\n control = control && appState.tokenId === data.state.tokenId;\r\n control = control && appState.isLinkedToToken === data.state.isLinkedToToken;\r\n\r\n return control;\r\n });\r\n\r\n return app;\r\n}\r\n\r\n/**\r\n * helper function to return the application from the modules or build a new one\r\n * immediatly pushes a new app into the list of modules\r\n * @param data data from emit\r\n * @returns either found DisplayActions2e or new DisplayActions2e with state\r\n */\r\nfunction checkAndBuildApp(data: EmitData): DisplayActions2e {\r\n let module = game.modules.get(moduleId) as unknown as MyModule;\r\n let newApp: DisplayActions2e = new DisplayActions2e(data.state);\r\n let app = checkForApp(data);\r\n if (app) {\r\n return app;\r\n }\r\n // push into list to wait for updates\r\n module.displayActions2e.push(newApp);\r\n return newApp;\r\n}\r\n\r\nexport function actionsFromConditions(conditions: Map): [number, number] {\r\n let numOfActions = 3;\r\n let numOfReactions = 1;\r\n\r\n let stun = conditions.get('stunned');\r\n // stunned overwrites slow thus it must be handled first\r\n if (stun) {\r\n numOfActions = stun[0].value! * condtionModifierTable['stunned'];\r\n } else {\r\n conditions.forEach(condition => {\r\n let slug: string = condition.system.slug;\r\n if (condtionModifierTable[slug]) {\r\n let valMod = condition.system.value.isValued ? condition.value! : 1;\r\n numOfActions += condtionModifierTable[slug!] * valMod;\r\n }\r\n });\r\n }\r\n\r\n return [numOfActions, numOfReactions];\r\n}\r\n","// Do not remove this import. If you do Vite will think your styles are dead\r\n// code and not include them in the build output.\r\nimport '../styles/module.css';\r\nimport {moduleId, socketEvent} from './constants';\r\nimport {EmitData, MyModule} from './types';\r\nimport {handleShowToAll, handleShowToSelection, handleShowWithPermission, handleUpdate} from './utils';\r\nimport {DisplayActions2e} from './apps/displayActions';\r\n\r\nlet module: MyModule;\r\nlet homeDisplayActions: DisplayActions2e;\r\n\r\n// Foundry Hooks\r\nHooks.once('init', () => {\r\n console.log(`Initializing ${moduleId}`);\r\n});\r\n\r\nHooks.on('getSceneControlButtons', (hudButtons: SceneControl[]) => {\r\n let hud = hudButtons.find((value: any) => {\r\n return value.name === 'token';\r\n });\r\n\r\n let tool: SceneControlTool = {\r\n name: 'DisplayActions2e.ButtonName',\r\n title: 'DisplayActions2e.ButtonHint',\r\n icon: 'fa fa-angle-double-right',\r\n button: true,\r\n visible: true,\r\n onClick: async () => {\r\n homeDisplayActions.render(true);\r\n game.socket?.emit('module.DisplayActions2e', {event: 'DisplayActions2e'});\r\n },\r\n };\r\n\r\n hud?.tools?.push(tool);\r\n});\r\n\r\nHooks.on('ready', () => {\r\n module = game.modules.get(moduleId) as unknown as MyModule;\r\n homeDisplayActions = new DisplayActions2e();\r\n\r\n module.displayActions2e = [homeDisplayActions];\r\n // sockets\r\n game.socket?.on(socketEvent, (data: EmitData) => {\r\n // all my events\r\n switch (data.operation) {\r\n case 'showToAll':\r\n handleShowToAll(data);\r\n break;\r\n case 'showToSelection':\r\n handleShowToSelection(data);\r\n break;\r\n case 'showWithPermission':\r\n handleShowWithPermission(data);\r\n break;\r\n case 'update':\r\n handleUpdate(data);\r\n break;\r\n default:\r\n console.log(data);\r\n break;\r\n }\r\n });\r\n});\r\n"],"names":["name","module","app","_a"],"mappings":"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"} \ No newline at end of file diff --git a/src/languages/en.json b/src/languages/en.json index 5d78de0..e2748ad 100644 --- a/src/languages/en.json +++ b/src/languages/en.json @@ -1,11 +1,13 @@ { - "DisplayActions2e.WindowTitle": "Pf2e Actions", - "DisplayActions2e.ButtonName": "Pf2eActions", - "DisplayActions2e.ButtonHint": "Display Actions", - "DisplayActions2e.ButtonIcon": "pf2-actions a", - "DisplayActions2e.ShowPermissions": "Show with Permissions", - "DisplayActions2e.Duplication": "Duplicate", - "DisplayActions2e.SentToChat": "Send to Chat", + "DisplayActions2e":{ + "WindowTitle": "Pf2e Actions", + "ButtonName": "Pf2eActions", + "ButtonHint": "Display Actions", + "ButtonIcon": "pf2-actions a", + "ShowPermissions": "Show with Permissions", + "Duplication": "Duplicate", + "SentToChat": "Send to Chat" + }, "selectiveshow": { "Show" : "Show", "ShowAll": "Show All", From e4b37993c7e5c7294a26207655699cf2634b475f Mon Sep 17 00:00:00 2001 From: MoonIsFalling Date: Thu, 2 Feb 2023 18:45:07 +0100 Subject: [PATCH 3/3] update version to v1.9.0 --- dist/module.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dist/module.json b/dist/module.json index 510090c..bf1677a 100644 --- a/dist/module.json +++ b/dist/module.json @@ -11,7 +11,7 @@ ], "title": "Pf2e Display Actions", "description": "A small module to display the pathfinder action economy for convinience.", - "version": "1.8.0", + "version": "1.9.0", "packs": [], "system": [ "pf2e" @@ -36,8 +36,8 @@ "scripts/module.js" ], "url": "https://github.com/MoonIsFalling/pf2e-display-actions", - "manifest": "https://github.com/MoonIsFalling/pf2e-display-actions/releases/download/1.8.0/module.json", - "download": "https://github.com/MoonIsFalling/pf2e-display-actions/releases/download/1.8.0/module.zip", + "manifest": "https://github.com/MoonIsFalling/pf2e-display-actions/releases/download/1.9.0/module.json", + "download": "https://github.com/MoonIsFalling/pf2e-display-actions/releases/download/1.9.0/module.zip", "includes": [ "./images/**", "./languages/**", diff --git a/package.json b/package.json index 6a5598f..0526ac2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "pf2e-display-actions", - "version": "1.8.0", + "version": "1.9.0", "description": "A small module to display the pathfinder action economy for convinience.", "license": "MIT", "private": true,