{"version":3,"file":"main.131b001c.js","mappings":"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","sources":["webpack://mucklet-client/./src/common/modules/viewport/Viewport.js","webpack://mucklet-client/./src/common/modules/playerTools/PlayerTools.js","webpack://mucklet-client/./src/common/modules/confirm/Confirm.js","webpack://mucklet-client/./src/common/modules/toaster/ToasterToast.js","webpack://mucklet-client/./src/common/modules/toaster/Toaster.js","webpack://mucklet-client/./src/common/modules/file/File.js","webpack://mucklet-client/./src/common/modules/accountEmail/AccountEmailButton.js","webpack://mucklet-client/./src/common/modules/accountEmail/AccountEmail.js","webpack://mucklet-client/./src/common/utils/awaitMailSent.js","webpack://mucklet-client/./src/common/modules/verifyEmail/VerifyEmail.js","webpack://mucklet-client/./src/common/components/PasswordInput.js","webpack://mucklet-client/./src/common/modules/dialogs/dialogChangePassword/DialogChangePassword.js","webpack://mucklet-client/./src/client/modules/main-modules.js","webpack://mucklet-client/./src/common/modules/dialogs/dialogChangeEmail/DialogChangeEmail.js","webpack://mucklet-client/./src/common/utils/changePasswordParams.js","webpack://mucklet-client/./src/client/modules/main/addons/avatar/AvatarComponent.js","webpack://mucklet-client/./src/client/modules/main/addons/avatar/Avatar.js","webpack://mucklet-client/./src/client/modules/main/addons/broadcastHandler/BroadcastHandler.js","webpack://mucklet-client/./src/client/modules/main/addons/charCycle/CharCycle.js","webpack://mucklet-client/./src/common/utils/flattenObject.js","webpack://mucklet-client/./src/client/modules/main/addons/charFocus/CharFocus.js","webpack://mucklet-client/./src/client/modules/main/addons/charPing/CharPing.js","webpack://mucklet-client/./src/client/modules/main/addons/cmdNotFoundExit/CmdNotFoundExit.js","webpack://mucklet-client/./src/client/modules/main/addons/confirmClose/ConfirmClose.js","webpack://mucklet-client/./src/client/modules/main/addons/consoleReplyLast/ConsoleReplyLast.js","webpack://mucklet-client/./src/client/modules/main/addons/createLimits/CreateLimits.js","webpack://mucklet-client/./src/client/modules/main/addons/exportLog/htmlTemplate.js","webpack://mucklet-client/./src/client/modules/main/addons/exportLog/ExportLog.js","webpack://mucklet-client/./src/common/utils/formatISODate.js","webpack://mucklet-client/./src/common/utils/exportFile.js","webpack://mucklet-client/./src/common/utils/fullscreen.js","webpack://mucklet-client/./src/client/modules/main/addons/fullscreen/Fullscreen.js","webpack://mucklet-client/./src/client/modules/main/addons/highlightSettings/HighlightSettings.js","webpack://mucklet-client/./src/client/modules/main/addons/highlightTriggers/HighlightTriggers.js","webpack://mucklet-client/./src/client/modules/main/addons/info/Info.js","webpack://mucklet-client/./src/client/modules/main/addons/logoutTool/LogoutToolComponent.js","webpack://mucklet-client/./src/client/modules/main/addons/logoutTool/LogoutTool.js","webpack://mucklet-client/./src/client/modules/main/addons/media/Media.js","webpack://mucklet-client/./src/client/modules/main/addons/mobileCharToggle/MobileCharToggle.js","webpack://mucklet-client/./src/client/modules/main/addons/mute/Mute.js","webpack://mucklet-client/./src/client/modules/main/addons/onboarding/Onboarding.js","webpack://mucklet-client/./src/client/modules/main/addons/overlayNav/OverlayNavArea.js","webpack://mucklet-client/./src/client/modules/main/addons/overlayNav/OverlayNavButtons.js","webpack://mucklet-client/./src/client/modules/main/addons/overlayNav/OverlayNavComponent.js","webpack://mucklet-client/./src/client/modules/main/addons/overlayNav/OverlayNav.js","webpack://mucklet-client/./src/client/modules/main/addons/playerEvent/PlayerEvent.js","webpack://mucklet-client/./src/client/modules/main/addons/playerEvent/playerEventControlLost/PlayerEventControlLost.js","webpack://mucklet-client/./src/client/modules/main/addons/playerEvent/playerEventIdRoleAdd/PlayerEventIdRoleAdd.js","webpack://mucklet-client/./src/client/modules/main/addons/playerEvent/playerEventIdRoleRemove/PlayerEventIdRoleRemove.js","webpack://mucklet-client/./src/client/modules/main/addons/playerEvent/playerEventImageWipe/PlayerEventImageWipe.js","webpack://mucklet-client/./src/client/modules/main/addons/playerEvent/playerEventPendingPush/PlayerEventPendingPush.js","webpack://mucklet-client/./src/client/modules/main/addons/playerEvent/playerEventRoleAdd/PlayerEventRoleAdd.js","webpack://mucklet-client/./src/client/modules/main/addons/playerEvent/playerEventRoleRemove/PlayerEventRoleRemove.js","webpack://mucklet-client/./src/client/modules/main/addons/playerEvent/playerEventSuspend/PlayerEventSuspend.js","webpack://mucklet-client/./src/client/modules/main/addons/puppetWakeup/PuppetWakeup.js","webpack://mucklet-client/./src/client/modules/main/addons/roomAccess/RoomAccess.js","webpack://mucklet-client/./src/client/modules/main/addons/settings/Settings.js","webpack://mucklet-client/./src/client/modules/main/addons/syncLog/SyncLog.js","webpack://mucklet-client/./src/client/modules/main/addons/tabUnseen/TabUnseen.js","webpack://mucklet-client/./src/client/modules/main/addons/tags/Tags.js","webpack://mucklet-client/./src/client/modules/main/addons/teleportSettings/TeleportSettings.js","webpack://mucklet-client/./src/client/modules/main/addons/test/Test.js","webpack://mucklet-client/./src/client/modules/main/addons/toolPageCharNote/ToolPageCharNote.js","webpack://mucklet-client/./src/client/modules/main/addons/toolPageCharReport/ToolPageCharReport.js","webpack://mucklet-client/./src/client/modules/main/addons/version/Version.js","webpack://mucklet-client/./src/client/modules/main/bundleLoader/BundleLoader.js","webpack://mucklet-client/./src/client/modules/main/charSettings/charSettingsDnd/CharSettingsDndComponent.js","webpack://mucklet-client/./src/client/modules/main/charSettings/charSettingsDnd/CharSettingsDnd.js","webpack://mucklet-client/./src/common/components/KeywordList.js","webpack://mucklet-client/./src/client/modules/main/charSettings/charSettingsTriggers/CharSettingsTriggersComponent.js","webpack://mucklet-client/./src/client/modules/main/charSettings/charSettingsTriggers/CharSettingsTriggers.js","webpack://mucklet-client/./src/common/classes/CharFilter.js","webpack://mucklet-client/./src/client/modules/main/charsAwake/CharsAwake.js","webpack://mucklet-client/./src/client/modules/main/cmd/CmdState.js","webpack://mucklet-client/./src/common/classes/UnknownStep.js","webpack://mucklet-client/./src/client/modules/main/cmd/cmdParser.js","webpack://mucklet-client/./src/client/modules/main/cmd/cmdHighlightStyle.js","webpack://mucklet-client/./src/client/modules/main/cmd/cmdFormattingStyle.js","webpack://mucklet-client/./src/client/modules/main/cmd/Cmd.js","webpack://mucklet-client/./src/client/modules/main/cmd/cmdLists/CmdLists.js","webpack://mucklet-client/./src/client/modules/main/cmd/cmdSteps/CmdSteps.js","webpack://mucklet-client/./src/client/modules/main/commands/aboutArea/AboutArea.js","webpack://mucklet-client/./src/client/modules/main/commands/addNote/AddNote.js","webpack://mucklet-client/./src/client/modules/main/commands/addTag/AddTag.js","webpack://mucklet-client/./src/client/modules/main/commands/address/Address.js","webpack://mucklet-client/./src/client/modules/main/commands/areaRules/AreaRules.js","webpack://mucklet-client/./src/client/modules/main/commands/away/Away.js","webpack://mucklet-client/./src/client/modules/main/commands/createArea/CreateArea.js","webpack://mucklet-client/./src/client/modules/main/commands/createExit/CreateExit.js","webpack://mucklet-client/./src/client/modules/main/commands/createProfile/CreateProfile.js","webpack://mucklet-client/./src/client/modules/main/commands/createRoom/CreateRoom.js","webpack://mucklet-client/./src/client/modules/main/commands/createRoomProfile/CreateRoomProfile.js","webpack://mucklet-client/./src/client/modules/main/commands/createRoomScript/createRoomScript/CreateRoomScript.js","webpack://mucklet-client/./src/client/modules/main/commands/createTag/CreateTag.js","webpack://mucklet-client/./src/client/modules/main/commands/deleteArea/DeleteArea.js","webpack://mucklet-client/./src/client/modules/main/commands/deleteExit/DeleteExit.js","webpack://mucklet-client/./src/client/modules/main/commands/deleteNote/DeleteNote.js","webpack://mucklet-client/./src/client/modules/main/commands/deleteProfile/DeleteProfile.js","webpack://mucklet-client/./src/client/modules/main/commands/deleteRoom/DeleteRoom.js","webpack://mucklet-client/./src/client/modules/main/commands/deleteRoomProfile/DeleteRoomProfile.js","webpack://mucklet-client/./src/client/modules/main/commands/deleteRoomScript/deleteRoomScript/DeleteRoomScript.js","webpack://mucklet-client/./src/client/modules/main/commands/denyControl/DenyControl.js","webpack://mucklet-client/./src/client/modules/main/commands/describe/Describe.js","webpack://mucklet-client/./src/client/modules/main/commands/evict/Evict.js","webpack://mucklet-client/./src/client/modules/main/commands/evictHome/EvictHome.js","webpack://mucklet-client/./src/client/modules/main/commands/evictPuppeteer/EvictPuppeteer.js","webpack://mucklet-client/./src/client/modules/main/commands/evictTeleport/EvictTeleport.js","webpack://mucklet-client/./src/common/classes/RegexStep.js","webpack://mucklet-client/./src/common/classes/ColorStep.js","webpack://mucklet-client/./src/client/modules/main/commands/focus/Focus.js","webpack://mucklet-client/./src/client/modules/main/commands/follow/Follow.js","webpack://mucklet-client/./src/client/modules/main/commands/get/Get.js","webpack://mucklet-client/./src/client/modules/main/commands/getArea/GetArea.js","webpack://mucklet-client/./src/client/modules/main/commands/getExit/GetExit.js","webpack://mucklet-client/./src/client/modules/main/commands/getNote/GetNote.js","webpack://mucklet-client/./src/client/modules/main/commands/getRoom/GetRoom.js","webpack://mucklet-client/./src/client/modules/main/commands/go/Go.js","webpack://mucklet-client/./src/client/modules/main/commands/grantControl/GrantControl.js","webpack://mucklet-client/./src/client/modules/main/commands/helpme/Helpme.js","webpack://mucklet-client/./src/client/modules/main/commands/home/Home.js","webpack://mucklet-client/./src/client/modules/main/commands/join/Join.js","webpack://mucklet-client/./src/client/modules/main/commands/lead/Lead.js","webpack://mucklet-client/./src/client/modules/main/commands/lfrp/Lfrp.js","webpack://mucklet-client/./src/client/modules/main/commands/listArea/ListArea.js","webpack://mucklet-client/./src/client/modules/main/commands/listAreaLocations/ListAreaLocations.js","webpack://mucklet-client/./src/client/modules/main/commands/listAreas/ListAreas.js","webpack://mucklet-client/./src/client/modules/main/commands/listExits/ListExits.js","webpack://mucklet-client/./src/client/modules/main/commands/listFocused/ListFocused.js","webpack://mucklet-client/./src/client/modules/main/commands/listProfiles/ListProfiles.js","webpack://mucklet-client/./src/client/modules/main/commands/listRoomProfiles/ListRoomProfiles.js","webpack://mucklet-client/./src/client/modules/main/commands/listRoomScripts/listRoomScripts/ListRoomScripts.js","webpack://mucklet-client/./src/client/modules/main/commands/listRooms/ListRooms.js","webpack://mucklet-client/./src/client/modules/main/commands/listTags/ListTags.js","webpack://mucklet-client/./src/client/modules/main/commands/listTeleports/ListTeleports.js","webpack://mucklet-client/./src/client/modules/main/commands/look/Look.js","webpack://mucklet-client/./src/client/modules/main/commands/mail/Mail.js","webpack://mucklet-client/./src/client/modules/main/commands/message/Message.js","webpack://mucklet-client/./src/client/modules/main/commands/muteChar/MuteChar.js","webpack://mucklet-client/./src/client/modules/main/commands/muteCmd/MuteCmd.js","webpack://mucklet-client/./src/client/modules/main/commands/muteMessage/MuteMessage.js","webpack://mucklet-client/./src/client/modules/main/commands/muteOoc/MuteOoc.js","webpack://mucklet-client/./src/client/modules/main/commands/muteTravel/MuteTravel.js","webpack://mucklet-client/./src/client/modules/main/commands/ooc/Ooc.js","webpack://mucklet-client/./src/client/modules/main/commands/pose/Pose.js","webpack://mucklet-client/./src/client/modules/main/commands/profile/Profile.js","webpack://mucklet-client/./src/client/modules/main/commands/registerHome/RegisterHome.js","webpack://mucklet-client/./src/client/modules/main/commands/registerPuppet/RegisterPuppet.js","webpack://mucklet-client/./src/client/modules/main/commands/registerTeleport/RegisterTeleport.js","webpack://mucklet-client/./src/client/modules/main/commands/removeTag/RemoveTag.js","webpack://mucklet-client/./src/client/modules/main/commands/report/Report.js","webpack://mucklet-client/./src/client/modules/main/commands/requestArea/RequestArea.js","webpack://mucklet-client/./src/client/modules/main/commands/requestAreaOwner/RequestAreaOwner.js","webpack://mucklet-client/./src/client/modules/main/commands/requestAreaParent/RequestAreaParent.js","webpack://mucklet-client/./src/client/modules/main/commands/requestExit/RequestExit.js","webpack://mucklet-client/./src/client/modules/main/commands/requestHelp/RequestHelp.js","webpack://mucklet-client/./src/client/modules/main/commands/requestRoom/RequestRoom.js","webpack://mucklet-client/./src/client/modules/main/commands/requestRoomArea/RequestRoomArea.js","webpack://mucklet-client/./src/client/modules/main/commands/requestRoomOwner/RequestRoomOwner.js","webpack://mucklet-client/./src/common/classes/StateStep.js","webpack://mucklet-client/./src/client/modules/main/commands/roll/Roll.js","webpack://mucklet-client/./src/client/modules/main/commands/roomProfile/RoomProfile.js","webpack://mucklet-client/./src/client/modules/main/commands/roomScript/roomScript/RoomScript.js","webpack://mucklet-client/./src/client/modules/main/commands/say/Say.js","webpack://mucklet-client/./src/client/modules/main/commands/set/Set.js","webpack://mucklet-client/./src/client/modules/main/commands/setArea/SetArea.js","webpack://mucklet-client/./src/client/modules/main/commands/setAreaLocation/SetAreaLocation.js","webpack://mucklet-client/./src/client/modules/main/commands/setAreaOwner/SetAreaOwner.js","webpack://mucklet-client/./src/client/modules/main/commands/setAreaTeleportMsgs/SetAreaTeleportMsgs.js","webpack://mucklet-client/./src/client/modules/main/commands/setChar/SetChar.js","webpack://mucklet-client/./src/client/modules/main/commands/setCharSettings/SetCharSettings.js","webpack://mucklet-client/./src/client/modules/main/commands/setExit/SetExit.js","webpack://mucklet-client/./src/client/modules/main/commands/setExitOrder/SetExitOrder.js","webpack://mucklet-client/./src/client/modules/main/commands/setProfile/SetProfile.js","webpack://mucklet-client/./src/client/modules/main/commands/setProfile/setProfileAvatar/SetProfileAvatar.js","webpack://mucklet-client/./src/client/modules/main/commands/setProfile/setProfileImage/SetProfileImage.js","webpack://mucklet-client/./src/client/modules/main/commands/setPuppet/SetPuppet.js","webpack://mucklet-client/./src/client/modules/main/commands/setRoom/SetRoom.js","webpack://mucklet-client/./src/client/modules/main/commands/setRoomLocation/SetRoomLocation.js","webpack://mucklet-client/./src/client/modules/main/commands/setRoomOwner/SetRoomOwner.js","webpack://mucklet-client/./src/client/modules/main/commands/setRoomProfile/SetRoomProfile.js","webpack://mucklet-client/./src/client/modules/main/commands/setRoomProfile/setRoomProfileImage/SetRoomProfileImage.js","webpack://mucklet-client/./src/client/modules/main/commands/setRoomScript/setRoomScript/SetRoomScript.js","webpack://mucklet-client/./src/client/modules/main/commands/setRoomTeleportMsgs/SetRoomTeleportMsgs.js","webpack://mucklet-client/./src/client/modules/main/commands/setStatus/SetStatus.js","webpack://mucklet-client/./src/client/modules/main/commands/setTag/SetTag.js","webpack://mucklet-client/./src/client/modules/main/commands/setTeleport/SetTeleport.js","webpack://mucklet-client/./src/client/modules/main/commands/setTeleportMsgs/SetTeleportMsgs.js","webpack://mucklet-client/./src/client/modules/main/commands/sleep/Sleep.js","webpack://mucklet-client/./src/client/modules/main/commands/stopFocus/StopFocus.js","webpack://mucklet-client/./src/client/modules/main/commands/stopFollow/StopFollow.js","webpack://mucklet-client/./src/client/modules/main/commands/stopLead/StopLead.js","webpack://mucklet-client/./src/client/modules/main/commands/stopLfrp/StopLfrp.js","webpack://mucklet-client/./src/client/modules/main/commands/stopMute/StopMute.js","webpack://mucklet-client/./src/client/modules/main/commands/stopMuteChar/StopMuteChar.js","webpack://mucklet-client/./src/client/modules/main/commands/stopMuteMessage/StopMuteMessage.js","webpack://mucklet-client/./src/client/modules/main/commands/stopMuteOoc/StopMuteOoc.js","webpack://mucklet-client/./src/client/modules/main/commands/stopMuteTravel/StopMuteTravel.js","webpack://mucklet-client/./src/client/modules/main/commands/summon/Summon.js","webpack://mucklet-client/./src/client/modules/main/commands/sweep/Sweep.js","webpack://mucklet-client/./src/client/modules/main/commands/teleport/Teleport.js","webpack://mucklet-client/./src/client/modules/main/commands/unregisterTeleport/UnregisterTeleport.js","webpack://mucklet-client/./src/client/modules/main/commands/unwatch/Unwatch.js","webpack://mucklet-client/./src/client/modules/main/commands/updateProfile/UpdateProfile.js","webpack://mucklet-client/./src/client/modules/main/commands/updateRoomProfile/UpdateRoomProfile.js","webpack://mucklet-client/./src/client/modules/main/commands/watch/Watch.js","webpack://mucklet-client/./src/client/modules/main/commands/whisper/Whisper.js","webpack://mucklet-client/./src/client/modules/main/commands/whois/Whois.js","webpack://mucklet-client/./src/client/modules/main/dialogs/DialogRequestControl/DialogRequestControl.js","webpack://mucklet-client/./src/client/modules/main/dialogs/dialogAboutChar/DialogAboutChar.js","webpack://mucklet-client/./src/client/modules/main/dialogs/dialogCreateChar/DialogCreateChar.js","webpack://mucklet-client/./src/client/modules/main/dialogs/dialogCreateCharProfile/DialogCreateCharProfile.js","webpack://mucklet-client/./src/client/modules/main/dialogs/dialogCreateExit/DialogCreateExit.js","webpack://mucklet-client/./src/client/modules/main/dialogs/dialogCreateRoomProfile/DialogCreateRoomProfile.js","webpack://mucklet-client/./src/common/components/Croppie.js","webpack://mucklet-client/./src/client/modules/main/dialogs/dialogCropImage/DialogCropImage.js","webpack://mucklet-client/./src/client/modules/main/dialogs/dialogDeleteChar/DialogDeleteChar.js","webpack://mucklet-client/./src/client/modules/main/dialogs/dialogEditDndMsg/DialogEditDndMsg.js","webpack://mucklet-client/./src/client/modules/main/dialogs/dialogEditNote/DialogEditNote.js","webpack://mucklet-client/./src/client/modules/main/dialogs/dialogExportLog/DialogExportLog.js","webpack://mucklet-client/./src/common/components/NoUiSlider.js","webpack://mucklet-client/./src/client/modules/main/dialogs/dialogReport/DialogReport.js","webpack://mucklet-client/./src/client/modules/main/dialogs/dialogSetAreaOwner/DialogSetAreaOwner.js","webpack://mucklet-client/./src/client/modules/main/dialogs/dialogSetRoomOwner/DialogSetRoomOwner.js","webpack://mucklet-client/./src/client/modules/main/dialogs/dialogTag/DialogTag.js","webpack://mucklet-client/./src/client/modules/main/dialogs/dialogUnregisterPuppet/DialogUnregisterPuppet.js","webpack://mucklet-client/./src/client/modules/main/globalTeleports/GlobalTeleports.js","webpack://mucklet-client/./src/client/modules/main/help/HelpComponent.js","webpack://mucklet-client/./src/client/modules/main/help/HelpRelatedTopics.js","webpack://mucklet-client/./src/client/modules/main/help/HelpCategory.js","webpack://mucklet-client/./src/client/modules/main/help/HelpTopic.js","webpack://mucklet-client/./src/client/modules/main/help/HelpTopics.js","webpack://mucklet-client/./src/client/modules/main/help/Help.js","webpack://mucklet-client/./src/client/modules/main/help/helpAbout/HelpAboutComponent.js","webpack://mucklet-client/./src/client/modules/main/help/helpAbout/HelpAbout.js","webpack://mucklet-client/./src/client/modules/main/help/helpConsole/HelpConsoleComponent.js","webpack://mucklet-client/./src/client/modules/main/help/helpConsole/HelpConsole.js","webpack://mucklet-client/./src/client/modules/main/help/helpFilter/HelpFilterComponent.js","webpack://mucklet-client/./src/client/modules/main/help/helpFilter/HelpFilter.js","webpack://mucklet-client/./src/client/modules/main/help/helpFormat/HelpFormatComponent.js","webpack://mucklet-client/./src/client/modules/main/help/helpFormat/HelpFormat.js","webpack://mucklet-client/./src/client/modules/main/help/helpRules/HelpRulesComponent.js","webpack://mucklet-client/./src/client/modules/main/help/helpRules/HelpRules.js","webpack://mucklet-client/./src/client/modules/main/layout/Layout.js","webpack://mucklet-client/./src/client/modules/main/layout/charLog/CharLogMutedEvent.js","webpack://mucklet-client/./src/client/modules/main/layout/charLog/CharLogMuted.js","webpack://mucklet-client/./src/client/modules/main/layout/charLog/CharLogComponent.js","webpack://mucklet-client/./src/client/modules/main/layout/charLog/charLogUtils.js","webpack://mucklet-client/./src/client/modules/main/layout/charLog/charLogEvents.js","webpack://mucklet-client/./src/client/modules/main/layout/charLog/CharLogEventMenu.js","webpack://mucklet-client/./src/client/modules/main/layout/charLog/CharLogEvent.js","webpack://mucklet-client/./src/client/modules/main/layout/charLog/ErrorEvent.js","webpack://mucklet-client/./src/client/modules/main/layout/charLog/InfoEvent.js","webpack://mucklet-client/./src/client/modules/main/layout/charLog/WhisperEvent.js","webpack://mucklet-client/./src/client/modules/main/layout/charLog/DescribeEvent.js","webpack://mucklet-client/./src/client/modules/main/layout/charLog/MessageEvent.js","webpack://mucklet-client/./src/client/modules/main/layout/charLog/SummonEvent.js","webpack://mucklet-client/./src/client/modules/main/layout/charLog/JoinEvent.js","webpack://mucklet-client/./src/client/modules/main/layout/charLog/OocEvent.js","webpack://mucklet-client/./src/client/modules/main/layout/charLog/WarnEvent.js","webpack://mucklet-client/./src/client/modules/main/layout/charLog/MailEvent.js","webpack://mucklet-client/./src/client/modules/main/layout/charLog/AddressEvent.js","webpack://mucklet-client/./src/client/modules/main/layout/charLog/LeadRequestEvent.js","webpack://mucklet-client/./src/client/modules/main/layout/charLog/FollowRequestEvent.js","webpack://mucklet-client/./src/client/modules/main/layout/charLog/FollowEvent.js","webpack://mucklet-client/./src/client/modules/main/layout/charLog/ControlRequestEvent.js","webpack://mucklet-client/./src/client/modules/main/layout/charLog/DndEvent.js","webpack://mucklet-client/./src/client/modules/main/layout/charLog/CharLog.js","webpack://mucklet-client/./src/client/modules/main/layout/charLog/charLogSettings/CharLogSettings.js","webpack://mucklet-client/./src/common/utils/requestToPromise.js","webpack://mucklet-client/./src/client/modules/main/layout/charLog/charLogStore/CharLogStore.js","webpack://mucklet-client/./src/client/modules/main/layout/charLog/controlEvent/ControlEventComponent.js","webpack://mucklet-client/./src/client/modules/main/layout/charLog/controlEvent/ReleaseEventComponent.js","webpack://mucklet-client/./src/client/modules/main/layout/charLog/controlEvent/ControlEvent.js","webpack://mucklet-client/./src/client/modules/main/layout/charLog/helpmeEvent/HelpmeEventComponent.js","webpack://mucklet-client/./src/client/modules/main/layout/charLog/helpmeEvent/HelpmeEvent.js","webpack://mucklet-client/./src/client/modules/main/layout/charLog/menuItem/menuItemExportLog/MenuItemExportLog.js","webpack://mucklet-client/./src/client/modules/main/layout/charLog/menuItem/menuItemReply/MenuItemReply.js","webpack://mucklet-client/./src/client/modules/main/layout/charLog/menuItem/menuItemReport/MenuItemReport.js","webpack://mucklet-client/./src/client/modules/main/layout/charLog/rollEvent/RollEventComponent.js","webpack://mucklet-client/./src/client/modules/main/layout/charLog/rollEvent/RollEvent.js","webpack://mucklet-client/./src/client/modules/main/layout/charPages/CharPagesChar.js","webpack://mucklet-client/./src/client/modules/main/layout/charPages/CharPages.js","webpack://mucklet-client/./src/client/modules/main/layout/charPages/charPagesStore/CharPagesStore.js","webpack://mucklet-client/./src/client/modules/main/layout/console/ConsoleControlledChar.js","webpack://mucklet-client/./src/common/utils/codemirrorTabCompletion.js","webpack://mucklet-client/./src/common/utils/codemirrorSpellcheck.js","webpack://mucklet-client/./src/client/modules/main/layout/console/ConsoleEditor.js","webpack://mucklet-client/./src/client/modules/main/layout/console/ConsoleComponent.js","webpack://mucklet-client/./src/client/modules/main/layout/console/ConsoleState.js","webpack://mucklet-client/./src/client/modules/main/layout/console/Console.js","webpack://mucklet-client/./src/client/modules/main/layout/layoutDesktop/LayoutDesktop.js","webpack://mucklet-client/./src/client/modules/main/layout/layoutDesktop/activePanel/ActivePanelPlaceholder.js","webpack://mucklet-client/./src/client/modules/main/layout/layoutDesktop/activePanel/ActivePanel.js","webpack://mucklet-client/./src/client/modules/main/layout/layoutDesktop/activePanelSetter/ActivePanelSetter.js","webpack://mucklet-client/./src/client/modules/main/layout/layoutDesktop/charPanel/CharPanel.js","webpack://mucklet-client/./src/client/modules/main/layout/layoutDesktop/playerPanel/PlayerPanelFooter.js","webpack://mucklet-client/./src/client/modules/main/layout/layoutDesktop/playerPanel/PlayerPanel.js","webpack://mucklet-client/./src/client/modules/main/layout/layoutDesktop/roomPanel/RoomPanelComponent.js","webpack://mucklet-client/./src/client/modules/main/layout/layoutDesktop/roomPanel/RoomPanel.js","webpack://mucklet-client/./src/common/components/KebabMenu.js","webpack://mucklet-client/./src/client/modules/main/layout/layoutMobile/LayoutMobileTitleBar.js","webpack://mucklet-client/./src/client/modules/main/layout/layoutMobile/LayoutMobileComponent.js","webpack://mucklet-client/./src/client/modules/main/layout/layoutMobile/LayoutMobile.js","webpack://mucklet-client/./src/client/modules/main/layout/layoutMobile/mobileActivePanel/MobileActivePanelPlaceholder.js","webpack://mucklet-client/./src/client/modules/main/layout/layoutMobile/mobileActivePanel/MobileActivePanel.js","webpack://mucklet-client/./src/client/modules/main/layout/layoutMobile/mobileActivePanelSetter/MobileActivePanelSetter.js","webpack://mucklet-client/./src/client/modules/main/layout/layoutMobile/mobileCharPanel/MobileCharPanel.js","webpack://mucklet-client/./src/client/modules/main/layout/layoutMobile/mobileReconnecting/MobileReconnecting.js","webpack://mucklet-client/./src/client/modules/main/layout/layoutMobile/mobileRoomPanel/MobileRoomPanelComponent.js","webpack://mucklet-client/./src/client/modules/main/layout/layoutMobile/mobileRoomPanel/MobileRoomPanel.js","webpack://mucklet-client/./src/client/modules/main/layout/playerTabs/PlayerTabsTab.js","webpack://mucklet-client/./src/client/modules/main/layout/playerTabs/PlayerTabsTabs.js","webpack://mucklet-client/./src/client/modules/main/layout/playerTabs/PlayerTabs.js","webpack://mucklet-client/./src/client/modules/main/layout/roomPages/RoomPagesChar.js","webpack://mucklet-client/./src/client/modules/main/layout/roomPages/RoomPagesZoomBar.js","webpack://mucklet-client/./src/client/modules/main/layout/roomPages/RoomPages.js","webpack://mucklet-client/./src/common/utils/base64.js","webpack://mucklet-client/./src/client/modules/main/notify/Notify.js","webpack://mucklet-client/./src/client/modules/main/notify/notifySettings/NotifySettingsComponent.js","webpack://mucklet-client/./src/client/modules/main/notify/notifySettings/NotifySettings.js","webpack://mucklet-client/./src/client/modules/main/pages/pageArea/PageAreaLocation.js","webpack://mucklet-client/./src/client/modules/main/pages/pageArea/PageAreaImage.js","webpack://mucklet-client/./src/client/modules/main/pages/pageArea/PageAreaComponent.js","webpack://mucklet-client/./src/client/modules/main/pages/pageArea/pageAreaTxt.js","webpack://mucklet-client/./src/client/modules/main/pages/pageArea/PageArea.js","webpack://mucklet-client/./src/client/modules/main/pages/pageAwake/PageAwakeChar.js","webpack://mucklet-client/./src/client/modules/main/pages/pageAwake/PageAwakeComponent.js","webpack://mucklet-client/./src/client/modules/main/pages/pageAwake/PageAwake.js","webpack://mucklet-client/./src/client/modules/main/pages/pageChar/PageCharComponent.js","webpack://mucklet-client/./src/client/modules/main/pages/pageChar/PageCharSleep.js","webpack://mucklet-client/./src/client/modules/main/pages/pageChar/PageChar.js","webpack://mucklet-client/./src/client/modules/main/pages/pageCharProfile/PageCharProfileProfileContent.js","webpack://mucklet-client/./src/client/modules/main/pages/pageCharProfile/PageCharProfileProfile.js","webpack://mucklet-client/./src/client/modules/main/pages/pageCharProfile/PageCharProfileComponent.js","webpack://mucklet-client/./src/client/modules/main/pages/pageCharProfile/PageCharProfile.js","webpack://mucklet-client/./src/client/modules/main/pages/pageCharSelect/PageCharSelectCharContent.js","webpack://mucklet-client/./src/client/modules/main/pages/pageCharSelect/PageCharSelectChar.js","webpack://mucklet-client/./src/client/modules/main/pages/pageCharSelect/PageCharSelectPuppetContent.js","webpack://mucklet-client/./src/client/modules/main/pages/pageCharSelect/PageCharSelectPuppet.js","webpack://mucklet-client/./src/client/modules/main/pages/pageCharSelect/PageCharSelectComponent.js","webpack://mucklet-client/./src/client/modules/main/pages/pageCharSelect/PageCharSelect.js","webpack://mucklet-client/./src/client/modules/main/pages/pageCharSettings/PageCharSettingsComponent.js","webpack://mucklet-client/./src/client/modules/main/pages/pageCharSettings/PageCharSettings.js","webpack://mucklet-client/./src/client/modules/main/pages/pageEditArea/PageEditAreaComponent.js","webpack://mucklet-client/./src/client/modules/main/pages/pageEditArea/PageEditArea.js","webpack://mucklet-client/./src/client/modules/main/pages/pageEditChar/PageEditCharComponent.js","webpack://mucklet-client/./src/client/modules/main/pages/pageEditChar/PageEditChar.js","webpack://mucklet-client/./src/client/modules/main/pages/pageEditChar/editCharTags/EditCharTagsComponent.js","webpack://mucklet-client/./src/client/modules/main/pages/pageEditChar/editCharTags/EditCharTags.js","webpack://mucklet-client/./src/client/modules/main/pages/pageEditCharProfile/PageEditCharProfileComponent.js","webpack://mucklet-client/./src/client/modules/main/pages/pageEditCharProfile/PageEditCharProfile.js","webpack://mucklet-client/./src/client/modules/main/pages/pageEditExit/PageEditExitComponent.js","webpack://mucklet-client/./src/client/modules/main/pages/pageEditExit/PageEditExit.js","webpack://mucklet-client/./src/client/modules/main/pages/pageEditExits/PageEditExitsExit.js","webpack://mucklet-client/./src/client/modules/main/pages/pageEditExits/PageEditExitsComponent.js","webpack://mucklet-client/./src/client/modules/main/pages/pageEditExits/PageEditExits.js","webpack://mucklet-client/./src/client/modules/main/pages/pageEditLfrp/PageEditLfrpComponent.js","webpack://mucklet-client/./src/client/modules/main/pages/pageEditLfrp/PageEditLfrp.js","webpack://mucklet-client/./src/common/utils/formatDuration.js","webpack://mucklet-client/./src/common/components/DurationInput.js","webpack://mucklet-client/./src/client/modules/main/pages/pageEditRoom/PageEditRoomComponent.js","webpack://mucklet-client/./src/client/modules/main/pages/pageEditRoom/PageEditRoom.js","webpack://mucklet-client/./src/client/modules/main/pages/pageEditRoomProfile/PageEditRoomProfileComponent.js","webpack://mucklet-client/./src/client/modules/main/pages/pageEditRoomProfile/PageEditRoomProfile.js","webpack://mucklet-client/./src/client/modules/main/pages/pageEditTeleport/PageEditTeleportComponent.js","webpack://mucklet-client/./src/client/modules/main/pages/pageEditTeleport/PageEditTeleport.js","webpack://mucklet-client/./src/client/modules/main/pages/pageInRoom/PageInRoomComponent.js","webpack://mucklet-client/./src/client/modules/main/pages/pageInRoom/PageInRoom.js","webpack://mucklet-client/./src/client/modules/main/pages/pageMail/PageMailMailContent.js","webpack://mucklet-client/./src/client/modules/main/pages/pageMail/PageMailMail.js","webpack://mucklet-client/./src/client/modules/main/pages/pageMail/PageMailComponent.js","webpack://mucklet-client/./src/client/modules/main/pages/pageMail/PageMail.js","webpack://mucklet-client/./src/client/modules/main/pages/pagePlayerSettings/PagePlayerSettingsComponent.js","webpack://mucklet-client/./src/client/modules/main/pages/pagePlayerSettings/PagePlayerSettings.js","webpack://mucklet-client/./src/client/modules/main/pages/pagePuppeteerSettings/PagePuppeteerSettingsComponent.js","webpack://mucklet-client/./src/client/modules/main/pages/pagePuppeteerSettings/PagePuppeteerSettings.js","webpack://mucklet-client/./src/client/modules/main/pages/pageRequests/PageRequestsRequest.js","webpack://mucklet-client/./src/client/modules/main/pages/pageRequests/PageRequestsComponent.js","webpack://mucklet-client/./src/client/modules/main/pages/pageRequests/PageRequests.js","webpack://mucklet-client/./src/client/modules/main/pages/pageRequests/requestCreateExit/RequestCreateExit.js","webpack://mucklet-client/./src/client/modules/main/pages/pageRequests/requestRegisterPuppet/RequestRegisterPuppet.js","webpack://mucklet-client/./src/client/modules/main/pages/pageRequests/requestSetArea/RequestSetArea.js","webpack://mucklet-client/./src/client/modules/main/pages/pageRequests/requestSetAreaOwner/RequestSetAreaOwner.js","webpack://mucklet-client/./src/client/modules/main/pages/pageRequests/requestSetRoom/RequestSetRoom.js","webpack://mucklet-client/./src/client/modules/main/pages/pageRequests/requestSetRoomOwner/RequestSetRoomOwner.js","webpack://mucklet-client/./src/client/modules/main/pages/pageRoom/PageRoomChar.js","webpack://mucklet-client/./src/client/modules/main/pages/pageRoom/PageRoomExitChars.js","webpack://mucklet-client/./src/client/modules/main/pages/pageRoom/PageRoomExit.js","webpack://mucklet-client/./src/client/modules/main/pages/pageRoom/PageRoomExits.js","webpack://mucklet-client/./src/client/modules/main/pages/pageRoom/pageRoomTxt.js","webpack://mucklet-client/./src/client/modules/main/pages/pageRoom/PageRoomComponent.js","webpack://mucklet-client/./src/client/modules/main/pages/pageRoom/PageRoom.js","webpack://mucklet-client/./src/client/modules/main/pages/pageRoomProfile/PageRoomProfileProfileContent.js","webpack://mucklet-client/./src/client/modules/main/pages/pageRoomProfile/PageRoomProfileProfile.js","webpack://mucklet-client/./src/client/modules/main/pages/pageRoomProfile/PageRoomProfileComponent.js","webpack://mucklet-client/./src/client/modules/main/pages/pageRoomProfile/PageRoomProfile.js","webpack://mucklet-client/./src/client/modules/main/pages/pageSelectTags/PageSelectTagsTag.js","webpack://mucklet-client/./src/client/modules/main/pages/pageSelectTags/PageSelectTagsSection.js","webpack://mucklet-client/./src/client/modules/main/pages/pageSelectTags/PageSelectTagsComponent.js","webpack://mucklet-client/./src/client/modules/main/pages/pageSelectTags/PageSelectTags.js","webpack://mucklet-client/./src/client/modules/main/pages/pageTeleportChar/PageTeleportCharRoom.js","webpack://mucklet-client/./src/client/modules/main/pages/pageTeleportChar/PageTeleportCharNode.js","webpack://mucklet-client/./src/client/modules/main/pages/pageTeleportChar/PageTeleportCharComponent.js","webpack://mucklet-client/./src/client/modules/main/pages/pageTeleportChar/PageTeleportChar.js","webpack://mucklet-client/./src/client/modules/main/pages/pageWatch/PageWatchChar.js","webpack://mucklet-client/./src/client/modules/main/pages/pageWatch/PageWatchNoWatch.js","webpack://mucklet-client/./src/client/modules/main/pages/pageWatch/PageWatchComponent.js","webpack://mucklet-client/./src/client/modules/main/pages/pageWatch/PageWatch.js","webpack://mucklet-client/./src/client/modules/main/player/Player.js","webpack://mucklet-client/./src/client/modules/main/playerSettings/playerSettingsEmail/PlayerSettingsEmailComponent.js","webpack://mucklet-client/./src/client/modules/main/playerSettings/playerSettingsEmail/PlayerSettingsEmail.js","webpack://mucklet-client/./src/client/modules/main/playerSettings/playerSettingsPlayerName/PlayerSettingsPlayerNameComponent.js","webpack://mucklet-client/./src/client/modules/main/playerSettings/playerSettingsPlayerName/PlayerSettingsPlayerName.js","webpack://mucklet-client/./src/client/modules/main/playerSettings/playerSettingsPolicies/PlayerSettingsPolicies.js","webpack://mucklet-client/./src/client/modules/main/playerSettings/playerSettingsRoles/PlayerSettingsRolesComponent.js","webpack://mucklet-client/./src/client/modules/main/playerSettings/playerSettingsRoles/PlayerSettingsRoles.js","webpack://mucklet-client/./src/client/modules/main/playerSettings/playerSettingsSecurity/PlayerSettingsSecurityComponent.js","webpack://mucklet-client/./src/client/modules/main/playerSettings/playerSettingsSecurity/PlayerSettingsSecurity.js","webpack://mucklet-client/./src/client/modules/main/utils/formatText/FormatText.js","webpack://mucklet-client/./src/common/classes/AreaChildrenModel.js","webpack://mucklet-client/./src/common/classes/CharList.js","webpack://mucklet-client/./src/common/classes/DelimStep.js","webpack://mucklet-client/./src/common/classes/Dialog.js","webpack://mucklet-client/./src/common/classes/ErrorStep.js","webpack://mucklet-client/./src/common/classes/IDStep.js","webpack://mucklet-client/./src/common/classes/ImgModal.js","webpack://mucklet-client/./src/common/classes/ItemList.js","webpack://mucklet-client/./src/common/classes/ListStep.js","webpack://mucklet-client/./src/common/classes/MultiDelimStep.js","webpack://mucklet-client/./src/common/classes/NumberStep.js","webpack://mucklet-client/./src/common/classes/RepeatStep.js","webpack://mucklet-client/./src/common/classes/TextStep.js","webpack://mucklet-client/./src/common/classes/TokenList.js","webpack://mucklet-client/./src/common/classes/ValueStep.js","webpack://mucklet-client/./src/common/components/AutoComplete.js","webpack://mucklet-client/./src/common/components/CharTagsList.js","webpack://mucklet-client/./src/common/components/Collapser.js","webpack://mucklet-client/./src/common/components/ExitIcon.js","webpack://mucklet-client/./src/common/components/FileButton.js","webpack://mucklet-client/./src/common/utils/toComponent.js","webpack://mucklet-client/./src/common/components/FormatTxt.js","webpack://mucklet-client/./src/common/components/Img.js","webpack://mucklet-client/./src/common/components/LabelToggleBox.js","webpack://mucklet-client/./src/common/components/MobilePanel.js","webpack://mucklet-client/./src/common/components/ModelCollapser.js","webpack://mucklet-client/./src/common/components/ModelFader.js","webpack://mucklet-client/./src/common/components/NameSection.js","webpack://mucklet-client/./src/common/components/NavButtons.js","webpack://mucklet-client/./src/common/components/OnRender.js","webpack://mucklet-client/./src/common/components/Panel.js","webpack://mucklet-client/./src/common/components/PanelSection.js","webpack://mucklet-client/./src/common/components/PopupPill.js","webpack://mucklet-client/./src/common/components/PopupTip.js","webpack://mucklet-client/./src/common/components/ResizeObserverComponent.js","webpack://mucklet-client/./src/common/components/ScriptCompileError.js","webpack://mucklet-client/./src/common/components/SimpleBar.js","webpack://mucklet-client/./src/common/components/ToggleBox.js","webpack://mucklet-client/./src/common/utils/arraysEqual.js","webpack://mucklet-client/./src/common/utils/charEvent.js","webpack://mucklet-client/./src/common/utils/cmdErr.js","webpack://mucklet-client/./src/common/utils/codemirror.js","webpack://mucklet-client/./src/common/utils/copyToClipboard.js","webpack://mucklet-client/./src/common/utils/counterString.js","webpack://mucklet-client/./src/common/utils/errString.js","webpack://mucklet-client/./src/common/utils/errToL10n.js","webpack://mucklet-client/./src/common/utils/expandSelection.js","webpack://mucklet-client/./src/common/utils/firstLetterUppercase.js","webpack://mucklet-client/./src/common/utils/formatByteSize.js","webpack://mucklet-client/./src/common/utils/formatDateTime.js","webpack://mucklet-client/./src/common/utils/formatText.js","webpack://mucklet-client/./src/common/utils/formatTime.js","webpack://mucklet-client/./src/common/utils/fullname.js","webpack://mucklet-client/./src/common/utils/getCtrlId.js","webpack://mucklet-client/./src/common/utils/getRoomInstanceId.js","webpack://mucklet-client/./src/common/utils/helpAttribDesc.js","webpack://mucklet-client/./src/common/utils/idRoles.js","webpack://mucklet-client/./src/common/utils/idleLevels.js","webpack://mucklet-client/./src/common/utils/indexedDB.js","webpack://mucklet-client/./src/common/utils/isError.js","webpack://mucklet-client/./src/common/utils/isNormalizedPrefix.js","webpack://mucklet-client/./src/common/utils/isVisible.js","webpack://mucklet-client/./src/common/utils/labelCompare.js","webpack://mucklet-client/./src/common/utils/listenResource.js","webpack://mucklet-client/./src/common/utils/mergeCharLists.js","webpack://mucklet-client/./src/common/utils/modelComponentSelector.js","webpack://mucklet-client/./src/common/utils/nextFrame.js","webpack://mucklet-client/./src/common/utils/objectDefault.js","webpack://mucklet-client/./src/common/utils/objectKeyDiff.js","webpack://mucklet-client/./src/common/utils/parseDuration.js","webpack://mucklet-client/./src/common/utils/patternMatch.js","webpack://mucklet-client/./src/common/utils/poseSpacing.js","webpack://mucklet-client/./src/common/utils/prepareKeys.js","webpack://mucklet-client/./src/common/utils/regex.js","webpack://mucklet-client/./src/common/utils/replyToEvent.js","webpack://mucklet-client/./src/common/utils/roles.js","webpack://mucklet-client/./src/common/classes/Tooltip.js","webpack://mucklet-client/./src/common/utils/tooltip.js","webpack://mucklet-client/./src/common/utils/translateErr.js","webpack://mucklet-client/./src/client/modules/main/ sync ^\\..*\\/([^/]*)\\/\\1.js$i"],"sourcesContent":["const viewport = window.visualViewport || null;\n\n/**\n * Viewport tries to keep the body inside the visible viewport.\n */\nclass Viewport {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'screen',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\n\t\tif (!viewport) {\n\t\t\tconsole.log(\"[Viewport] Visual Viewport is not available in this browser.\");\n\t\t\treturn;\n\t\t}\n\n\t\t// Bind callbacks\n\t\tthis._calculate = this._calculate.bind(this, \"resize\");\n\n\t\tviewport.addEventListener('resize', this._calculate);\n\t\tviewport.addEventListener('scroll', this._calculate);\n\n\t\tthis.vvp = { w: 0, h: 0 };\n\t\tthis.vp = { w: 0, h: 0 };\n\n\t\tthis.bodyStyle = document.createElement('style');\n\t\tthis.bodyStyle.innerHTML = `body, .viewport {\n\theight: var(--100vvh, 100vh);\n\twidth: var(--100vvw, 100vw);\n}\n.viewport {\ttop: var(--offset-top, 0); }`;\n\t\tthis.varStyle = document.createElement('style');\n \tdocument.head.appendChild(this.bodyStyle);\n \tdocument.head.appendChild(this.varStyle);\n\t\tthis.module.screen.getFader().addClass('viewport');\n\n\t\tthis._calculate();\n\t}\n\n\t_calculate() {\n\t\tlet doc = document.documentElement;\n\t\tthis.vp.w = Math.max(doc.clientWidth || 0, window.innerWidth || 0);\n\t\tthis.vp.h = Math.max(doc.clientHeight || 0, window.innerHeight || 0);\n\n\t\tif (viewport) {\n\t\t\tthis.vvp.w = viewport.width;\n\t\t\tthis.vvp.h = viewport.height;\n\t\t\tthis.vvp.t = viewport.offsetTop;\n\t\t\tthis.vvp.l = viewport.offsetLeft;\n\t\t} else {\n\t\t\tthis.vvp.w = this.vp.w;\n\t\t\tthis.vvp.h = this.vp.h;\n\t\t\tthis.vvp.t = 0;\n\t\t\tthis.vvp.l = 0;\n\t\t}\n\n\t\tthis.varStyle.innerHTML = `:root {\n\t--100vvw: ${this.vvp.w}px;\n\t--100vvh: ${this.vvp.h}px;\n\t--offset-top: ${this.vvp.t}px;\n\t--offset-left: ${this.vvp.l}px;\n\t--offset-w: ${this.vp.w - this.vvp.w}px;\n\t--offset-h: ${this.vp.h - this.vvp.h}px;\n}`;\n\t}\n\n\tdispose() {\n\t\tif (!viewport) return;\n\n\t\tthis.module.screen.getFader().removeClass('viewport');\n\t\tviewport.removeEventListener('resize', this._calculate);\n\t\tviewport.removeEventListener('scroll', this._calculate);\n\t\tthis.varStyle.parentNode.removeChild(this.varStyle);\n\t\tthis.bodyStyle.parentNode.removeChild(this.bodyStyle);\n\t}\n}\n\nexport default Viewport;\n","import { Collection, sortOrderCompare } from 'modapp-resource';\n\n\n/**\n * PlayerTools registered the tools for the player panels.\n */\nclass PlayerTools {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\tthis._init();\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\n\t\tthis.tools = new Collection({\n\t\t\tidAttribute: m => m.id,\n\t\t\tcompare: sortOrderCompare,\n\t\t\teventBus: this.app.eventBus,\n\t\t});\n\n\t\tthis.footerTools = new Collection({\n\t\t\tidAttribute: m => m.id,\n\t\t\tcompare: sortOrderCompare,\n\t\t\teventBus: this.app.eventBus,\n\t\t});\n\t}\n\n\t/**\n\t * Gets a collection of tools.\n\t * @returns {Collection} Collection of tools.\n\t */\n\tgetTools() {\n\t\treturn this.tools;\n\t}\n\n\t/**\n\t * Registers a tool shown in kebab menu.\n\t * @param {object} tool Tool object\n\t * @param {string} tool.id Tool ID.\n\t * @param {LocaleString|string} tool.name Tool name.\n\t * @param {string} tool.icon Tool icon.\n\t * @param {function} tool.componentFactory Component factory function: function(click) => Component\n\t * @param {function} tool.onClick Callback called on click.\n\t * @param {number} tool.sortOrder Sort order.\n\t * @returns {this}\n\t */\n\taddTool(tool) {\n\t\tif (this.tools.get(tool.id)) {\n\t\t\tthrow new Error(\"Footer tool ID already registered: \", tool.id);\n\t\t}\n\t\tthis.tools.add(tool);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Unregisters a previously registered tool.\n\t * @param {string} toolId Tool ID.\n\t * @returns {this}\n\t */\n\tremoveTool(toolId) {\n\t\tthis.tools.remove(toolId);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Gets a collection of footer tools.\n\t * @returns {Collection} Collection of tools.\n\t */\n\tgetFooterTools() {\n\t\treturn this.footerTools;\n\t}\n\n\t/**\n\t * Registers a footer tool.\n\t * @param {object} tool Tool object\n\t * @param {string} tool.id Tool ID.\n\t * @param {number} tool.sortOrder Sort order.\n\t * @param {function} tool.componentFactory Tool component factory: function() -> Component\n\t * @param {number} [tool.filter] Filter function: function() -> bool\n\t * @param {number} [tool.className] Class to give to the list item container.\n\t * @returns {this}\n\t */\n\taddFooterTool(tool) {\n\t\tif (this.footerTools.get(tool.id)) {\n\t\t\tthrow new Error(\"Footer tool ID already registered: \", tool.id);\n\t\t}\n\t\tthis.footerTools.add(tool);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Unregisters a previously registered footer tool.\n\t * @param {string} toolId Tool ID.\n\t * @returns {this}\n\t */\n\tremoveFooterTool(toolId) {\n\t\tthis.footerTools.remove(toolId);\n\t\treturn this;\n\t}\n}\n\nexport default PlayerTools;\n","import { Elem } from 'modapp-base-component';\nimport { Txt } from 'modapp-base-component';\nimport l10n from 'modapp-l10n';\nimport Dialog from 'classes/Dialog';\nimport isComponent from 'utils/isComponent';\nimport './confirm.scss';\n\nclass Confirm {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\t}\n\n\t/**\n\t * Opens a confirm dialog.\n\t * @param {function} onConfirm Callback function called on confirm.\n\t * @param {function} [opt] Optional parameters\n\t * @param {string} [opt.className] Class name to use instead of 'confirm'.\n\t * @param {string|LocaleString|Component} [opt.title] Title text or component.\n\t * @param {string|LocaleString|Component} [opt.body] Body text or component.\n\t * @param {string|LocaleString|Component} [opt.confirm] Confirm button text or component.\n\t * @param {?string|LocaleString|Component} [opt.cancel] Cancel button text or component. Null means no cancel button.\n\t * @param {function} [opt.onCancel] Callback function called on cancel or close.\n\t * @param {boolean} [opt.focusConfirm] Flag to tell if the confirm button should have initial focus. Default is the cancel button.\n\t * @param {boolean} [opt.spinner] Flag telling if a spinner should be used. Defaults to false.\n\t * @param {boolean} [opt.confirmStyle] Style to use for the confirm button. May be \"primary\", \"secondary\", or \"warning\". Defaults to \"primary\".\n\t * @param {boolean} [opt.noClose] Flag telling if closing through escape or an \"X\"-icon should be disabled. Defaults to false.\n\t * @param {boolean} [opt.onClose] Callback function called when the confirmed is closed.\n\t * @param {string} [opt.size] Size of the dialog. May be \"wide\".\n\t * @returns {Dialog} Dialog object.\n\t */\n\topen(onConfirm, opt) {\n\t\tif (this.dialog) {\n\t\t\tthrow new Error(\"Confirm dialog is already open.\");\n\t\t}\n\n\t\topt = opt || {};\n\n\t\tlet hasConfirmed = false;\n\n\t\tthis.dialog = new Dialog({\n\t\t\ttitle: opt.title || l10n.l('confirm.title', \"Confirm\"),\n\t\t\tclassName: opt.className || 'confirm' + (opt.size ? ' ' + opt.size : ''),\n\t\t\tnoClose: !!opt.noClose,\n\t\t\tcontent: new Elem(n => {\n\t\t\t\tlet footer = [\n\t\t\t\t\tn.elem('confirm', 'button', {\n\t\t\t\t\t\tclassName: 'btn ' + (opt.confirmStyle || 'primary') + (opt.spinner ? ' confirm--withspinner' : ''),\n\t\t\t\t\t\tevents: {\n\t\t\t\t\t\t\tclick: () => {\n\t\t\t\t\t\t\t\tif (opt.spinner) {\n\t\t\t\t\t\t\t\t\tif (hasConfirmed) return;\n\t\t\t\t\t\t\t\t\thasConfirmed = true;\n\n\t\t\t\t\t\t\t\t\tlet elem = this.dialog.getContent();\n\t\t\t\t\t\t\t\t\tif (elem) {\n\t\t\t\t\t\t\t\t\t\telem.getNode('spinner').removeClass('hide');\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (onConfirm) {\n\t\t\t\t\t\t\t\t\tPromise.resolve(onConfirm()).then(() => {\n\t\t\t\t\t\t\t\t\t\tthis.close();\n\t\t\t\t\t\t\t\t\t}).catch(err => {\n\t\t\t\t\t\t\t\t\t\tthis.close();\n\t\t\t\t\t\t\t\t\t\tthis.openError(err);\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthis.close();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t}, [\n\t\t\t\t\t\tn.component(opt.spinner ? 'spinner' : null, opt.spinner ? new Elem(n => n.elem('div', { className: 'spinner fade hide' })) : null),\n\t\t\t\t\t\tn.component(isComponent(opt.confirm)\n\t\t\t\t\t\t\t? opt.confirm\n\t\t\t\t\t\t\t: new Txt(opt.confirm || l10n.l('confirm.confirm', \"Okay\")),\n\t\t\t\t\t\t),\n\t\t\t\t\t]),\n\t\t\t\t];\n\t\t\t\tif (opt.cancel !== null) {\n\t\t\t\t\tfooter.push(n.elem('cancel', 'button', {\n\t\t\t\t\t\tclassName: 'btn secondary',\n\t\t\t\t\t\tevents: {\n\t\t\t\t\t\t\tclick: () => {\n\t\t\t\t\t\t\t\tif (opt.onCancel) {\n\t\t\t\t\t\t\t\t\topt.onCancel();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tthis.close();\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t}, [\n\t\t\t\t\t\tn.component(isComponent(opt.cancel)\n\t\t\t\t\t\t\t? opt.cancel\n\t\t\t\t\t\t\t: new Txt(opt.cancel || l10n.l('confirm.cancel', \"Cancel\")),\n\t\t\t\t\t\t),\n\t\t\t\t\t]));\n\t\t\t\t}\n\t\t\t\treturn n.elem('div', { className: 'confirm--content' }, [\n\t\t\t\t\tn.component(isComponent(opt.body)\n\t\t\t\t\t\t? opt.body\n\t\t\t\t\t\t: Array.isArray(opt.body)\n\t\t\t\t\t\t\t? new Elem(n => n.elem('div', { className: 'confirm--body' }, opt.body.map(b => n.component(new Txt(b, { tagName: 'p' })))))\n\t\t\t\t\t\t\t: new Txt(opt.body || l10n.l('confirm.body', \"Are you sure?\"), { className: 'confirm--body' }),\n\t\t\t\t\t),\n\t\t\t\t\tn.elem('div', { className: 'confirm--footer' }, footer),\n\t\t\t\t]);\n\t\t\t}),\n\t\t\tonClose: () => {\n\t\t\t\tif (opt.onClose) {\n\t\t\t\t\topt.onClose();\n\t\t\t\t}\n\t\t\t\tthis.dialog = null;\n\t\t\t},\n\t\t});\n\n\t\tthis.dialog.open();\n\t\tthis.dialog.getContent().getNode(opt.focusConfirm || opt.cancel === null ? 'confirm' : 'cancel').focus();\n\t\treturn this.dialog;\n\t}\n\n\t/**\n\t * Opens an error confirm dialog.\n\t * @param {string|Err|ResError} msg Error message.\n\t * @param {function} [opt] Optional parameters\n\t * @param {string} [opt.className] Class name to use instead of 'confirm'.\n\t * @param {string|LocaleString|Component} [opt.title] Title text or component.\n\t * @param {string|LocaleString|Component} [opt.confirm] Confirm button text or component.\n\t */\n\topenError(msg, opt) {\n\t\t// Turn error into a LocaleString\n\t\tif (typeof msg === 'object' && msg !== null && msg.code && msg.message) {\n\t\t\tmsg = l10n.l(msg.code, msg.message, msg.data);\n\t\t}\n\t\tthis.open(null, {\n\t\t\ttitle: opt?.title || l10n.l('confirm.error', \"An error occurred\"),\n\t\t\tconfirm: opt?.confirm || l10n.l('confirm.ok', \"Okay\"),\n\t\t\tbody: msg || l10n.l('confirm.bodyPlaceholder', \"An unexpected error was encountered. That's all I know.\"),\n\t\t\tcancel: null,\n\t\t});\n\t}\n\n\tclose() {\n\t\tif (this.dialog) {\n\t\t\tthis.dialog.close();\n\t\t}\n\t}\n}\n\nexport default Confirm;\n","import { Elem, Txt, Html } from 'modapp-base-component';\nimport FAIcon from 'components/FAIcon';\nimport formatText from 'utils/formatText';\nimport formatDateTime from 'utils/formatDateTime';\n\nclass ToasterToast {\n\tconstructor(opt, close) {\n\t\tthis.opt = opt;\n\t\tthis.close = close;\n\t}\n\n\trender(el) {\n\t\tthis.elem = new Elem(n => {\n\t\t\tlet children = [];\n\t\t\tlet opt = this.opt;\n\t\t\tif (opt.closeOn == 'button') {\n\t\t\t\tchildren.push(n.elem('button', {\n\t\t\t\t\tclassName: 'toaster-toast--close iconbtn small',\n\t\t\t\t\tevents: {\n\t\t\t\t\t\tclick: () => this.close(),\n\t\t\t\t\t},\n\t\t\t\t}, [\n\t\t\t\t\tn.component(new FAIcon('close')),\n\t\t\t\t]));\n\t\t\t}\n\t\t\tif (opt.title) {\n\t\t\t\tchildren.push(n.elem('div', { className: 'toaster-toast--head' }, [\n\t\t\t\t\tn.component(new Txt(typeof opt.title == 'function' ? opt.title(this) : opt.title, { tagName: 'h3' })),\n\t\t\t\t]));\n\t\t\t}\n\t\t\tif (opt.content) {\n\t\t\t\tlet ct = typeof opt.content;\n\t\t\t\tchildren.push(n.elem('div', { className: 'toaster-toast--content' }, [\n\t\t\t\t\tn.component(ct == 'function'\n\t\t\t\t\t\t? opt.content(this.close)\n\t\t\t\t\t\t: ct == 'string'\n\t\t\t\t\t\t\t? new Html(formatText(opt.content), { className: 'common--formattext' })\n\t\t\t\t\t\t\t: opt.content,\n\t\t\t\t\t),\n\t\t\t\t]));\n\t\t\t}\n\t\t\treturn n.elem('div', { className: 'toaster-toast' }, [\n\t\t\t\tn.elem('div', {\n\t\t\t\t\tclassName: 'toaster-toast--cont ' + (opt.type || 'info') + (opt.closeOn == 'click' ? ' clickable' : ''),\n\t\t\t\t\tevents: opt.closeOn == 'click'\n\t\t\t\t\t\t? { click: () => this.close() }\n\t\t\t\t\t\t: null,\n\t\t\t\t\tattributes: {\n\t\t\t\t\t\ttitle: formatDateTime(opt.time),\n\t\t\t\t\t},\n\t\t\t\t}, children),\n\t\t\t]);\n\t\t});\n\n\t return this.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n}\n\nexport default ToasterToast;\n","import { Txt } from 'modapp-base-component';\nimport { Collection } from 'modapp-resource';\nimport { CollectionList } from 'modapp-resource-component';\nimport l10n from 'modapp-l10n';\nimport './toaster.scss';\nimport ToasterToast from './ToasterToast';\n\nconst AUTOCLOSE_DURATION = 5000;\n\n/**\n * Toaster shows toaster notifications.\n */\nclass Toaster {\n\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t\tthis.collection = new Collection({\n\t\t\teventBus: this.app.eventBus,\n\t\t});\n\t\tthis.autoclose = {};\n\n\t\tthis.component = new CollectionList(this.collection, m => new ToasterToast(m, () => this.close(m.id)), {\n\t\t\tclassName: 'toaster',\n\t\t\tsubClassName: () => 'toaster--item',\n\t\t});\n\t\tthis.component.render(document.body);\n\t}\n\n\t/**\n\t * Opens a new toaster notification.\n\t * @param {object} [opt] Optional parameters\n\t * @param {string} [opt.id] Id of the notification. Must be unique. Defaults to a random id.\n\t * @param {string|function} [opt.title] Title text or title factory function.\n\t * @param {string|Component|function} [opt.content] Content as formatted text, a component, or a component factory function.\n\t * @param {function} [opt.onClose] Callback called on close.\n\t * @param {string} [opt.closeOn] Type of closing. May be: 'click', 'button', or 'none'. Defaults to 'none'.\n\t * @param {string} [opt.type] Type of notification. May be 'success', 'info', or 'error'. Defaults to 'info'.\n\t * @param {bool|number} [opt.autoclose] Flag telling if notification should autoclose after a while. If the value is a number, it will autoclose after that many milliseconds.\n\t * @param {Date} [opt.time] Time to show in mouse over tooltip.\n\t * @returns {function} Function to close the toaster.\n\t */\n\topen(opt) {\n\t\topt = Object.assign({\n\t\t\tcontent: null,\n\t\t\ttitle: null,\n\t\t\tonClose: null,\n\t\t\ttime: new Date(),\n\t\t}, opt);\n\t\tif (!opt.id) {\n\t\t\twhile (true) {\n\t\t\t\topt.id = (Math.random() + 1).toString(36).substring(7);\n\t\t\t\tif (!this.collection.get(opt.id)) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet closer = this.close.bind(this, opt.id);\n\t\tif (this.collection.get(opt.id)) {\n\t\t\t// Prevent duplicate ids\n\t\t\treturn closer;\n\t\t}\n\n\t\tthis.collection.add(opt, this.collection.length);\n\t\tif (opt.title) {\n\t\t\t// Try send a notification if we have the notify module.\n\t\t\tthis.app.getModule('notify')?.send(opt.title);\n\t\t}\n\n\t\tif (opt.autoclose) {\n\t\t\tthis.autoclose[opt.id] = setTimeout(closer, typeof opt.autoclose == 'number'\n\t\t\t\t? opt.autoclose\n\t\t\t\t: AUTOCLOSE_DURATION,\n\t\t\t);\n\t\t}\n\n\t\treturn closer;\n\t}\n\n\t/**\n\t * Opens a toaster with an error message\n\t * @param {String|LocaleString|object} msg Error message or error object.\n\t * @param {object} [opt] Optional parameters.\n\t * @param {object} [opt.title] Toaster title.\n\t * @returns {function} Function to close the toaster.\n\t */\n\topenError(msg, opt) {\n\t\topt = opt || {};\n\t\tif (msg) {\n\t\t\tconsole.error(\"[Toaster] Error: \", msg);\n\t\t}\n\t\t// Turn error into a LocaleString\n\t\tif (typeof msg === 'object' && msg !== null && msg.code && msg.message) {\n\t\t\tmsg = l10n.l(msg.code, msg.message, msg.data);\n\t\t}\n\t\treturn this.open({\n\t\t\ttitle: opt.title || l10n.l('toaster.errorOccurred', \"An error occurred\"),\n\t\t\tcontent: new Txt(msg || l10n.l('toaster.bodyPlaceholder', \"An unexpected error was encountered. That's all I know.\"), { className: 'toaster--error' }),\n\t\t\ttype: 'warn',\n\t\t\tcloseOn: 'click',\n\t\t\tautoclose: true,\n\t\t});\n\t}\n\n\tclose(id) {\n\t\tlet t = this.autoclose[id];\n\t\tif (t) {\n\t\t\tclearTimeout(t);\n\t\t\tdelete this.autoclose[id];\n\t\t}\n\t\tlet opt = this.collection.get(id);\n\t\tthis.collection.remove(id);\n\t\tif (opt && opt.onClose) {\n\t\t\topt.onClose();\n\t\t}\n\t\treturn opt;\n\t}\n\n\tdispose() {\n\t\tthis.component.unrender();\n\t}\n}\n\nexport default Toaster;\n","import Err from 'classes/Err';\n\n/**\n * File handles file uploads.\n */\nclass File {\n\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\t\tthis.apiFilePath = app.props.apiFilePath;\n\t}\n\n\t/**\n\t * Uploads a file to the upload endpoint.\n\t * @param {string|Blob|File} file File to upload.\n\t * @param {string} rid Upload endpoint resource ID.\n\t * @returns {Promise.<{ uploadId: string, filename: string, size: number, mime: string}>} Promise of upload info.\n\t */\n\tupload(file, rid) {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlet formData = new FormData();\n\t\t\tformData.append('file', file);\n\n\t\t\tlet url = this.apiFilePath + rid.replace(/\\./g, '/');\n\t\t\tlet xhr = new XMLHttpRequest();\n\t\t\txhr.withCredentials = true;\n\t\t\txhr.open('POST', url, true);\n\n\t\t\txhr.onload = () => {\n\t\t\t\ttry {\n\t\t\t\t\tlet result = JSON.parse(xhr.response);\n\t\t\t\t\tif (xhr.status >= 200 && xhr.status < 300) {\n\t\t\t\t\t\tresolve(result);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (result?.code && result?.message) {\n\t\t\t\t\t\t\treject(new Err(result.code, result.message, result.data));\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treject(new Err('file.uploadFailed', \"Upload failed with status {status}\", { status: xhr.status }));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {\n\t\t\t\t\treject(new Err('file.invalidJson', \"Upload failed with status {status}: {message}\", { message: e.message }));\n\t\t\t\t}\n\t\t\t};\n\t\t\txhr.onerror = () => {\n\t\t\t\treject(new Err('file.uploadFailed', \"Upload failed with status {status}: {statusText}\", { status: xhr.status, statusText: xhr.statusText }));\n\t\t\t};\n\t\t\txhr.send(formData);\n\t\t});\n\t}\n\n\tdispose() {}\n}\n\nexport default File;\n","import { Elem, Txt } from 'modapp-base-component';\nimport { ModelComponent, ModelTxt } from 'modapp-resource-component';\nimport Fader from 'components/Fader';\nimport Collapser from 'components/Collapser';\nimport LabelToggleBox from 'components/LabelToggleBox';\nimport FAIcon from 'components/FAIcon';\nimport l10n from 'modapp-l10n';\n\nclass AccountEmailButton {\n\tconstructor(module, account, opt) {\n\t\tthis.module = module;\n\t\tthis.account = account;\n\t\tthis.opt = opt || {};\n\t}\n\n\trender(el) {\n\t\tlet components = {};\n\t\tlet fullWidth = this.opt.fullWidth ? ' full-width' : '';\n\t\tthis.elem = new Elem(n => n.elem('div', { className: 'accountemail' + (this.opt.className ? ' ' + this.opt.className : '') }, [\n\t\t\tn.component(new ModelComponent(\n\t\t\t\tthis.account,\n\t\t\t\tnew Fader(),\n\t\t\t\t(m, c) => {\n\t\t\t\t\tlet comp = null;\n\t\t\t\t\tif (!this.account.email) {\n\t\t\t\t\t\tcomp = components.setEmail = components.setEmail || new Elem(n => n.elem('button', { events: {\n\t\t\t\t\t\t\tclick: () => this.module.dialogChangeEmail.open(this.account, { setEmail: true }),\n\t\t\t\t\t\t}, className: 'btn medium light icon-left' + fullWidth }, [\n\t\t\t\t\t\t\tn.component(new FAIcon('at')),\n\t\t\t\t\t\t\tn.component(new Txt(l10n.l('accountEmail.setEmailAddress', \"Set email address\"))),\n\t\t\t\t\t\t]));\n\t\t\t\t\t} else if (this.account.hasOpenId && this.account.emailVerified) {\n\t\t\t\t\t\tcomp = components.staticEmail = components.staticEmail || new ModelTxt(this.account, m => m.email, { className: 'accountemail--email' });\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcomp = components.changeEmail = components.changeEmail || new Elem(n => n.elem('button', {\n\t\t\t\t\t\t\tevents: {\n\t\t\t\t\t\t\t\tclick: () => this.module.dialogChangeEmail.open(this.account),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tclassName: 'btn medium light icon-left' + fullWidth,\n\t\t\t\t\t\t}, [\n\t\t\t\t\t\t\tn.component(new FAIcon('pencil')),\n\t\t\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\t\t\tthis.account,\n\t\t\t\t\t\t\t\tnew Txt('', { className: 'accountemail--email' }),\n\t\t\t\t\t\t\t\t(m, c) => {\n\t\t\t\t\t\t\t\t\tc.setText(m.email);\n\t\t\t\t\t\t\t\t\tc.setAttribute('title', m.email);\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t]));\n\t\t\t\t\t}\n\t\t\t\t\tc.setComponent(comp);\n\t\t\t\t},\n\t\t\t)),\n\t\t\tn.component(new ModelComponent(\n\t\t\t\tthis.account,\n\t\t\t\tnew Collapser(),\n\t\t\t\t(m, c) => c.setComponent(m.email && m.emailVerified\n\t\t\t\t\t? null\n\t\t\t\t\t: components.alert = components.alert || new Elem(n => n.elem('div', { className: 'pad-top-s' }, [\n\t\t\t\t\t\tn.elem('div', { className: 'common--relative' }, [\n\t\t\t\t\t\t\tn.component(new ModelTxt(\n\t\t\t\t\t\t\t\tthis.account,\n\t\t\t\t\t\t\t\tm => m.email\n\t\t\t\t\t\t\t\t\t? l10n.l('accountEmail.verificationRequired', \"Address requires verification.\")\n\t\t\t\t\t\t\t\t\t: l10n.l('accountEmail.recoverRequiresEmail', \"Recovery requires email.\"),\n\t\t\t\t\t\t\t\t{ tagName: 'div', className: 'common--error' },\n\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t\tn.elem('alert', 'div', { className: 'counter small alert' }),\n\t\t\t\t\t\t]),\n\t\t\t\t\t])),\n\t\t\t\t),\n\t\t\t)),\n\t\t\tn.component(new ModelComponent(\n\t\t\t\tthis.account,\n\t\t\t\tnew Collapser(),\n\t\t\t\t(m, c) => {\n\t\t\t\t\tlet comp = null;\n\t\t\t\t\tif (this.account.email && !this.account.emailVerified) {\n\t\t\t\t\t\tcomp = components.sendVerify = components.sendVerify || new Elem(n => n.elem('div', { className: 'pad-top-l pad-bottom-l' }, [\n\t\t\t\t\t\t\tn.elem('button', { events: {\n\t\t\t\t\t\t\t\tclick: () => this.module.verifyEmail.sendVerification(this.account),\n\t\t\t\t\t\t\t}, className: 'btn small primary icon-left' + fullWidth }, [\n\t\t\t\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\t\t\t\tthis.module.verifyEmail.getModel(),\n\t\t\t\t\t\t\t\t\tnew Fader(null, { className: 'fa' }),\n\t\t\t\t\t\t\t\t\t(m, c) => {\n\t\t\t\t\t\t\t\t\t\tif (m && !m.hasOwnProperty('isSendingVerify')) {\n\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tc.setComponent(m.isSendingVerify\n\t\t\t\t\t\t\t\t\t\t\t? new Elem(n => n.elem('div', { className: 'spinner small dark' }))\n\t\t\t\t\t\t\t\t\t\t\t: new FAIcon('paper-plane'),\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t\t\tn.component(new Txt(l10n.l('accountEmail.sendNewVerification', \"Send new verification\"))),\n\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t]));\n\t\t\t\t\t}\n\t\t\t\t\tc.setComponent(comp);\n\t\t\t\t},\n\t\t\t)),\n\t\t\tn.component(new ModelComponent(\n\t\t\t\tthis.account,\n\t\t\t\tnew Collapser(),\n\t\t\t\t(m, c) => {\n\t\t\t\t\tlet comp = null;\n\t\t\t\t\tif (this.account.email) {\n\t\t\t\t\t\tcomp = components.emailPermissions = components.emailPermissions || new Elem(n => n.elem('div', [\n\t\t\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\t\t\tthis.account,\n\t\t\t\t\t\t\t\tnew LabelToggleBox(l10n.l('notify.receiveNewsletter', \"Receive newsletter\"), false, {\n\t\t\t\t\t\t\t\t\tclassName: 'common--formmargin',\n\t\t\t\t\t\t\t\t\tonChange: (v, c) => this.account.call('set', { allowNewsletter: v }).catch(err => {\n\t\t\t\t\t\t\t\t\t\tc.setValue(this.account.allowNewsletter, false);\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\tpopupTip: l10n.l('notify.receiveNewsletterInfo', \"Allow newsletters with game related info to be sent to you, at most once a month.\"),\n\t\t\t\t\t\t\t\t\tpopupTipClassName: 'popuptip--width-s',\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t(m, c) => c.setValue(m.allowNewsletter, false),\n\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t]));\n\t\t\t\t\t}\n\t\t\t\t\tc.setComponent(comp);\n\t\t\t\t},\n\t\t\t)),\n\t\t]));\n\t\tthis.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n}\n\nexport default AccountEmailButton;\n","import AccountEmailButton from './AccountEmailButton';\nimport './accountEmail.scss';\n\n/**\n * AccountEmail provides components for displaying and updating account email.\n */\nclass AccountEmail {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'dialogChangeEmail',\n\t\t\t'verifyEmail',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\t}\n\n\t/**\n\t * Creates a new instance of an email select button component.\n\t * @param {Model} account Account account model.\n\t * @param {object} [opt] Optional parameters.\n\t * @param {boolean} [opt.fullWidth] Flag to make buttons full width. Defaults to false.\n\t * @returns {Component} Account email button component.\n\t */\n\tnewEmailButton(account, opt) {\n\t\treturn new AccountEmailButton(this.module, account, opt);\n\t}\n\n\n\tdispose() {}\n}\n\nexport default AccountEmail;\n","import { isResError } from 'resclient';\n\n/**\n * Awaits a mail object to be sent.\n * If the mail object is null, it will directly resolve.\n * @param {Model?} mail Mail response model.\n * @returns {Promise} Promise of mail being sent.\n */\nexport default function awaitMailSent(mail) {\n\tif (!mail) return Promise.resolve();\n\n\tif (isResError(mail)) {\n\t\treturn Promise.reject(mail);\n\t}\n\n\tif (mail.error) {\n\t\treturn Promise.reject(mail.error);\n\t}\n\n\tif (mail.sent) {\n\t\treturn Promise.resolve();\n\t}\n\n\treturn new Promise((resolve, reject) => {\n\t\tlet onChange = () => {\n\t\t\tif (mail.sent) {\n\t\t\t\tif (mail.error) {\n\t\t\t\t\treject(mail.error);\n\t\t\t\t} else {\n\t\t\t\t\tresolve();\n\t\t\t\t}\n\t\t\t\tmail.off('change', onChange);\n\t\t\t}\n\t\t};\n\t\tmail.on('change', onChange);\n\t});\n}\n","import { Txt } from 'modapp-base-component';\nimport { Model } from 'modapp-resource';\nimport l10n from 'modapp-l10n';\nimport Err from 'classes/Err';\nimport awaitMailSent from 'utils/awaitMailSent';\n\n/**\n * VerifyEmail sends email verification and shows the result in a toaster.\n */\nclass VerifyEmail {\n\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'api',\n\t\t\t'toaster',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.model = new Model({ data: { isSendingVerify: false }, eventBus: this.app.eventBus });\n\t}\n\n\tgetModel() {\n\t\treturn this.model;\n\t}\n\n\t/**\n\t * Sends an verification mail to the account's email address.\n\t * @param {Model} account Account model.\n\t * @returns {Promise} Promise of the verification email being sent.\n\t */\n\tsendVerification(account) {\n\t\t// Prevent sending multiple times.\n\t\tif (this.model.isSendingVerify) {\n\t\t\treturn Promise.resolve();\n\t\t}\n\n\t\tthis.model.set({ isSendingVerify: true });\n\t\treturn (account\n\t\t\t? Promise.resolve(account)\n\t\t\t: Promise.reject(new Err('verifyEmail.missingAccount', \"Not possible to send email verification from this domain.\"))\n\t\t)\n\t\t\t.then(account => account.call('sendEmailVerification'))\n\t\t\t.then(awaitMailSent).then(() => {\n\t\t\t\tthis.module.toaster.open({\n\t\t\t\t\ttitle: l10n.l('verifyEmail.emailVerificationSent', \"Verification email sent\"),\n\t\t\t\t\tcontent: new Txt(l10n.l('verifyEmail.emailSentBody', \"Check your inbox for a verification mail.\")),\n\t\t\t\t\tcloseOn: 'click',\n\t\t\t\t\ttype: 'success',\n\t\t\t\t\tautoclose: true,\n\t\t\t\t});\n\t\t\t})\n\t\t\t.catch(err => {\n\t\t\t\tthis.module.toaster.openError(err, {\n\t\t\t\t\ttitle: l10n.l('verifyEmail.verificationIssue', \"Email verification issue\"),\n\t\t\t\t});\n\t\t\t})\n\t\t\t.then(() => this.model.set({ isSendingVerify: false }));\n\t}\n}\n\nexport default VerifyEmail;\n","import { RootElem, Input } from 'modapp-base-component';\nimport FAIcon from './FAIcon';\nimport './passwordInput.scss';\n\n/**\n * PasswordInput shows a password input field which lets you toggle between\n * showing the password as dots or as text.\n */\nclass PasswordInput extends RootElem {\n\n\t/**\n\t * Creates an instance of PasswordInput\n\t * @param {string} value Input value\n\t * @param {object} [opt] Optional parameters.\n\t * @param {object} [opt.onInput] Callback on input events.\n\t * @param {string} [opt.className] Additional class names to append to font-awesome class names.\n\t * @param {object} [opt.attributes] Key/value attributes object\n\t * @param {object} [opt.inputOpt] Options for the input element\n\t * @param {object} [opt.events] Key/value events object, where the key is the event name, and value is the callback. Default click event is calling toggleNext()\n\t */\n\tconstructor(value, opt) {\n\t\tsuper(null);\n\t\topt = Object.assign({}, opt);\n\t\topt.className = 'passwordinput' + (opt.className ? ' ' + opt.className : '');\n\n\t\tlet inpOpt = Object.assign({}, opt.inputOpt);\n\t\tinpOpt.attributes = Object.assign({ spellcheck: false }, inpOpt.attributes);\n\t\tinpOpt.events = Object.assign({}, inpOpt.events, opt.onInput ? { input: opt.onInput } : null);\n\t\tthis._input = new Input(value, inpOpt);\n\t\tthis._eye = new FAIcon('');\n\t\tthis.setRootNode(n => n.elem('div', opt, [\n\t\t\tn.component(this._input),\n\t\t\tn.elem('div', {\n\t\t\t\tclassName: 'passwordinput--eye iconbtn medium tinyicon',\n\t\t\t\tevents: { click: () => this.toggle() },\n\t\t\t}, [\n\t\t\t\tn.component(this._eye),\n\t\t\t]),\n\t\t]));\n\t\tthis.toggle(false);\n\t}\n\n\t/**\n\t * Returns the wrapped Input component.\n\t * @returns {Component} Input component.\n\t */\n\tgetInput() {\n\t\treturn this._input;\n\t}\n\n\t/**\n\t * Toggles between showing and hiding the password.\n\t * @param {boolean} [show] Optional show state to set. If undefined, show state will be toggled.\n\t * @returns {this}\n\t */\n\ttoggle(show) {\n\t\tthis._showPass = typeof show == 'undefined' ? !this._showPass : !!show;\n\n\t\tthis._input.setAttribute('type', this._showPass ? 'text' : 'password');\n\t\tthis._eye.setIcon(this._showPass ? 'eye-slash' : 'eye');\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Gets the value\n\t * @returns {string}\n\t */\n\tgetValue() {\n\t\treturn this._input.getValue();\n\t}\n\n\t/**\n\t * Sets the value\n\t * @param {string} value Value\n\t * @returns {this}\n\t */\n\tsetValue(value) {\n\t\tthis._input.setValue(value);\n\t\treturn this;\n\t}\n}\n\nexport default PasswordInput;\n","import { Elem, Txt } from 'modapp-base-component';\nimport { ModelComponent } from 'modapp-resource-component';\nimport { Model } from 'modapp-resource';\nimport l10n from 'modapp-l10n';\nimport Dialog from 'classes/Dialog';\nimport Collapser from 'components/Collapser';\nimport PanelSection from 'components/PanelSection';\nimport PasswordInput from 'components/PasswordInput';\nimport changePasswordParams from 'utils/changePasswordParams';\nimport './dialogChangePassword.scss';\n\nclass DialogChangePassword {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'api',\n\t\t\t'toaster',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t}\n\n\topen(userId) {\n\t\tif (this.dialog) return;\n\n\t\tlet model = new Model({ data: {\n\t\t\toldPass: \"\",\n\t\t\tnewPass: \"\",\n\t\t\tshowPass: false,\n\t\t}, eventBus: this.app.eventBus });\n\n\t\tthis.dialog = new Dialog({\n\t\t\ttitle: l10n.l('dialogChangePassword.changePassword', \"Change password\"),\n\t\t\tclassName: 'dialogchangepassword',\n\t\t\tcontent: new Elem(n => n.elem('div', [\n\t\t\t\tn.component('oldPass', new PanelSection(\n\t\t\t\t\tl10n.l('dialogChangePassword.oldPassword', \"Old password\"),\n\t\t\t\t\tnew PasswordInput(model.oldPass, {\n\t\t\t\t\t\tonInput: c => model.set({ oldPass: c.getValue() }),\n\t\t\t\t\t\tinputOpt: {\n\t\t\t\t\t\t\tclassName: 'dialog--input',\n\t\t\t\t\t\t\tattributes: {\n\t\t\t\t\t\t\t\tid: 'oldpassword',\n\t\t\t\t\t\t\t\tname: 'oldpassword',\n\t\t\t\t\t\t\t\tautocomplete: 'current-password',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tclassName: 'darkeye',\n\t\t\t\t\t}),\n\t\t\t\t\t{\n\t\t\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t},\n\t\t\t\t)),\n\t\t\t\tn.component(new PanelSection(\n\t\t\t\t\tl10n.l('dialogChangePassword.newPassword', \"New password\"),\n\t\t\t\t\tnew PasswordInput(model.newPass, {\n\t\t\t\t\t\tonInput: c => model.set({ newPass: c.getValue() }),\n\t\t\t\t\t\tinputOpt: {\n\t\t\t\t\t\t\tclassName: 'dialog--input',\n\t\t\t\t\t\t\tattributes: {\n\t\t\t\t\t\t\t\tid: 'newpassword',\n\t\t\t\t\t\t\t\tname: 'newpassword',\n\t\t\t\t\t\t\t\tautocomplete: 'new-password',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tclassName: 'darkeye',\n\t\t\t\t\t}),\n\t\t\t\t\t{\n\t\t\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t},\n\t\t\t\t)),\n\t\t\t\tn.component('message', new Collapser(null)),\n\t\t\t\tn.elem('div', { className: 'pad-top-xl' }, [\n\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\tmodel,\n\t\t\t\t\t\tnew Elem(n => n.elem('button', {\n\t\t\t\t\t\t\tevents: { click: () => this._changePass(userId, model) },\n\t\t\t\t\t\t\tclassName: 'btn primary dialog--btn',\n\t\t\t\t\t\t}, [\n\t\t\t\t\t\t\tn.component(new Txt(l10n.l('dialogChangePassword.changePassword', \"Change password\"))),\n\t\t\t\t\t\t])),\n\t\t\t\t\t\t(m, c) => c.setProperty('disabled', m.newPass.trim().length >= 4 ? null : 'disabled'),\n\t\t\t\t\t)),\n\t\t\t\t]),\n\t\t\t])),\n\t\t\tonClose: () => { this.dialog = null; },\n\t\t});\n\n\t\tthis.dialog.open();\n\t\tthis.dialog.getContent().getNode('oldPass').getComponent().getElement().focus();\n\t}\n\n\t_changePass(userId, model) {\n\t\tif (this.changePassPromise) return this.changePassPromise;\n\n\t\tthis.module.api.call('identity.user.' + userId, 'changePassword', changePasswordParams(model.oldPass, model.newPass)).then(() => {\n\t\t\tif (this.dialog) {\n\t\t\t\tthis.dialog.close();\n\t\t\t}\n\t\t\tthis.module.toaster.open({\n\t\t\t\ttitle: l10n.l('dialogChangePassword.changeSuccessful', \"Password changed\"),\n\t\t\t\tcontent: new Txt(l10n.l('dialogChangePassword.changeSuccessfulBody', \"Password was successfully changed.\")),\n\t\t\t\tcloseOn: 'click',\n\t\t\t\ttype: 'success',\n\t\t\t\tautoclose: true,\n\t\t\t});\n\t\t}).catch(err => {\n\t\t\tif (!this.dialog) return;\n\t\t\tthis._setMessage(l10n.l(err.code, err.message, err.data));\n\t\t}).then(() => {\n\t\t\tthis.changePassPromise = null;\n\t\t});\n\n\t\treturn this.changePassPromise;\n\t}\n\n\t_setMessage(msg) {\n\t\tif (!this.dialog) return;\n\t\tlet n = this.dialog.getContent().getNode('message');\n\t\tn.setComponent(msg ? new Txt(msg, { className: 'dialog--error' }) : null);\n\t}\n}\n\nexport default DialogChangePassword;\n","import Viewport from 'modules/viewport/Viewport';\nimport PlayerTools from 'modules/playerTools/PlayerTools';\nimport Confirm from 'modules/confirm/Confirm';\nimport Toaster from 'modules/toaster/Toaster';\nimport File from 'modules/file/File';\nimport AccountEmail from 'modules/accountEmail/AccountEmail';\nimport VerifyEmail from 'modules/verifyEmail/VerifyEmail';\nimport DialogChangeEmail from 'modules/dialogs/dialogChangeEmail/DialogChangeEmail';\nimport DialogChangePassword from 'modules/dialogs/dialogChangePassword/DialogChangePassword';\n\nconst modules = {\n\tviewport: Viewport,\n\tplayerTools: PlayerTools,\n\tconfirm: Confirm,\n\ttoaster: Toaster,\n\tfile: File,\n\taccountEmail: AccountEmail,\n\tverifyEmail: VerifyEmail,\n\tdialogChangeEmail: DialogChangeEmail,\n\tdialogChangePassword: DialogChangePassword,\n};\n\nconst req = require.context(\"./main/\", true, /^\\..*\\/([^/]*)\\/\\1.js$/i);\n\n// Using the first-character-lowercase name of the js-file as module name\nreq.keys().forEach(key => {\n\tlet match = key.match(/\\/([^/]*)\\.js$/);\n\tlet name = match[1].charAt(0).toLowerCase() + match[1].slice(1);\n\tif (modules[name]) {\n\t\tthrow new Error(`duplicate module: ${key}`);\n\t}\n\tmodules[name] = req(key).default;\n});\n\nexport default modules;\n","import { Elem, Txt, Input } from 'modapp-base-component';\nimport { Model } from 'modapp-resource';\nimport l10n from 'modapp-l10n';\nimport Dialog from 'classes/Dialog';\nimport Collapser from 'components/Collapser';\nimport PanelSection from 'components/PanelSection';\nimport PasswordInput from 'components/PasswordInput';\nimport FAIcon from 'components/FAIcon';\nimport sha256, { hmacsha256, publicPepper } from 'utils/sha256';\nimport './dialogChangeEmail.scss';\n\nclass DialogChangeEmail {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'verifyEmail',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t}\n\n\t/**\n\t * Opens a dialog to change account email.\n\t * @param {model} account Account model\n\t * @param {object} [opt] Optional parameters\n\t * @param {object} [opt.setEmail] Flag to show the title \"Set email\" instead of \"Change email\"\n\t */\n\topen(account, opt) {\n\t\tif (this.dialog) return;\n\n\t\topt = opt || {};\n\n\t\tlet model = new Model({ data: {\n\t\t\temail: \"\",\n\t\t\tpass: \"\",\n\t\t\tshowPass: false,\n\t\t}, eventBus: this.app.eventBus });\n\n\t\tthis.dialog = new Dialog({\n\t\t\ttitle: opt.setEmail\n\t\t\t\t? l10n.l('dialogChangeEmail.setEmail', \"Set email\")\n\t\t\t\t: l10n.l('dialogChangeEmail.changeEmail', \"Change email\"),\n\t\t\tclassName: 'dialogchangeemail',\n\t\t\tcontent: new Elem(n => n.elem('div', [\n\t\t\t\tn.component('email', new PanelSection(\n\t\t\t\t\topt.setEmail\n\t\t\t\t\t\t? l10n.l('dialogChangeEmail.email', \"Email\")\n\t\t\t\t\t\t: l10n.l('dialogChangeEmail.newEmail', \"New email\"),\n\t\t\t\t\tnew Input(model.email, {\n\t\t\t\t\t\tevents: { input: c => model.set({ email: c.getValue() }) },\n\t\t\t\t\t\tclassName: 'dialog--input',\n\t\t\t\t\t}),\n\t\t\t\t\t{\n\t\t\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t},\n\t\t\t\t)),\n\t\t\t\tn.component(new PanelSection(\n\t\t\t\t\tl10n.l('dialogChangeEmail.passwordVerification', \"Password verification\"),\n\t\t\t\t\tnew PasswordInput(model.pass, {\n\t\t\t\t\t\tonInput: c => model.set({ pass: c.getValue() }),\n\t\t\t\t\t\tinputOpt: { className: 'dialog--input' },\n\t\t\t\t\t\tclassName: 'darkeye',\n\t\t\t\t\t}),\n\t\t\t\t\t{\n\t\t\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t\tpopupTip: l10n.l('dialogChangeEmail.passwordVerificationInfo', \"Verify yourself with your game account password.\\nNever share your email account password.\"),\n\t\t\t\t\t},\n\t\t\t\t)),\n\t\t\t\tn.elem('p', { className: 'dialog--error' }, [\n\t\t\t\t\tn.component(new FAIcon('exclamation-triangle')),\n\t\t\t\t\tn.html(\" \"),\n\t\t\t\t\tn.component(new Txt(l10n.l('dialogChangeEmail.passwordWarning', \"Not your email account password\"))),\n\t\t\t\t]),\n\t\t\t\tn.component('message', new Collapser(null)),\n\t\t\t\tn.elem('div', { className: 'pad-top-xl' }, [\n\t\t\t\t\tn.elem('button', {\n\t\t\t\t\t\tevents: { click: () => this._changeEmail(account, model) },\n\t\t\t\t\t\tclassName: 'btn primary dialog--btn',\n\t\t\t\t\t}, [\n\t\t\t\t\t\tn.component(new Txt(opt.setEmail\n\t\t\t\t\t\t\t? l10n.l('dialogChangeEmail.setEmail', \"Set email\")\n\t\t\t\t\t\t\t: l10n.l('dialogChangeEmail.changeEmail', \"Change email\"),\n\t\t\t\t\t\t)),\n\t\t\t\t\t]),\n\t\t\t\t]),\n\t\t\t])),\n\t\t\tonClose: () => { this.dialog = null; },\n\t\t});\n\n\t\tthis.dialog.open();\n\t\tthis.dialog.getContent().getNode('email').getComponent().getElement().focus();\n\t}\n\n\t_changeEmail(account, model) {\n\t\tif (this.changeEmailPromise) return this.changeEmailPromise;\n\n\t\tlet pwd = model.pass.trim();\n\t\tlet pass = sha256(pwd);\n\t\tlet hash = hmacsha256(pwd, publicPepper);\n\t\tlet email = model.email.trim();\n\n\t\taccount.call('changeEmail', { email, pass, hash })\n\t\t\t.then(result => {\n\t\t\t\tif (this.dialog) {\n\t\t\t\t\tthis.dialog.close();\n\t\t\t\t}\n\t\t\t\tif (result.updated && result.email) {\n\t\t\t\t\tthis.module.verifyEmail.sendVerification(account);\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch(err => {\n\t\t\t\tif (!this.dialog) return;\n\t\t\t\tthis._setMessage(l10n.l(err.code, err.message, err.data));\n\t\t\t})\n\t\t\t.then(() => {\n\t\t\t\tthis.changeEmailPromise = null;\n\t\t\t});\n\n\t\treturn this.changeEmailPromise;\n\t}\n\n\t_setMessage(msg) {\n\t\tif (!this.dialog) return;\n\t\tlet n = this.dialog.getContent().getNode('message');\n\t\tn.setComponent(msg ? new Txt(msg, { className: 'dialog--error' }) : null);\n\t}\n}\n\nexport default DialogChangeEmail;\n","import sha256, { hmacsha256, publicPepper } from './sha256';\n\n/**\n * Creates a parameter object for the changePassword call method.\n * @param {string} oldPass Old password.\n * @param {string} newPass New password.\n * @returns {object} Change password params.\n */\nexport default function changePasswordParams(oldPass, newPass) {\n\treturn {\n\t\toldPass: sha256(oldPass.trim()),\n\t\toldHash: hmacsha256(oldPass.trim(), publicPepper),\n\t\tnewPass: sha256(newPass.trim()),\n\t\tnewHash: hmacsha256(newPass.trim(), publicPepper),\n\t};\n}\n","import { isResError } from 'resclient';\nimport { ModelListener, ModelTxt } from 'modapp-resource-component';\nimport Fader from 'components/Fader';\nimport Img from 'components/Img';\nimport ImgModal from 'classes/ImgModal';\nimport { relistenResource } from 'utils/listenResource';\n\n// Get character initials.\nfunction getInitials(c) {\n\treturn c.name.charAt(0).toUpperCase() + c.surname.charAt(0).toUpperCase();\n}\n\nconst sizeMap = {\n\txlarge: '?thumb=xl',\n\tlarge: '?thumb=l',\n\tmedium: '?thumb=m',\n\tsmall: '?thumb=s',\n\ttiny: '?thumb=m',\n};\n\nconst placeholderMap = {\n\tavatar: { img: '/img/avatar-l.png', err: '/img/avatar-error-l.png' },\n\troom: { img: '/img/room-l.png', err: '/img/room-error-l.png' },\n\tarea: { img: '/img/area-l.png', err: '/img/area-error-l.png' },\n};\n\nfunction getHref(v) {\n\treturn v.href;\n}\n\n/**\n * AvatarComponent is a character avatar component.\n */\nclass AvatarComponent extends Fader {\n\n\t/**\n\t * Creates an instance of AvatarComponent\n\t * @param {object} profile Character or profile object.\n\t * @param {object} [opt] Optional parameters.\n\t * @param {object} [opt.char] Character object used to fetch initials if profile is not a character.\n\t * @param {string} [opt.size] Avatar size. May be 'small', 'medium', or 'large.\n\t * @param {string} [opt.property] Char property to get the image object or ID. Defaults to 'avatar'.\n\t * @param {boolean} [opt.initials] Use initials if no image is available. Defaults to false.\n\t * @param {(v: object) => string} [opt.resolve] Resolves the image href from the image property. Defaults to: (v) => v?.href\n\t * @param {string} [opt.placeholder] Placeholder image to use instead of initials. May be 'avatar', 'room', or 'area'.\n\t * @param {boolean} [opt.modalOnClick] Flag if clicking on the image should show the full image in a modal.\n\t */\n\tconstructor(profile, opt) {\n\t\topt = Object.assign({}, opt);\n\t\topt.className = 'avatar' + (opt.size ? ' avatar--' + opt.size : '') + (opt.className ? ' ' + opt.className : '');\n\t\tsuper(null, opt);\n\t\tthis.char = opt.char || profile;\n\t\tthis.saturation = opt.saturation || 0.5;\n\t\tthis.lightness = opt.lightness || 0.33;\n\t\tthis.property = opt.property || 'avatar';\n\t\tthis.initials = !!opt.initials;\n\t\tthis.placeholder = (opt.placeholder && placeholderMap[opt.placeholder]) || null;\n\t\tthis.modalOnClick = !!opt.modalOnClick;\n\t\tthis.query = sizeMap[opt.size] || sizeMap['medium'];\n\t\tthis.resolve = opt.resolve || getHref;\n\t\tthis.isError = isResError(profile);\n\t\tthis.model = null;\n\n\t\tthis._update = this._update.bind(this);\n\t\tthis.ml = new ModelListener(profile, this, this._changeHandler.bind(this));\n\t}\n\n\trender(el) {\n\t\tlet rel = super.render(el);\n\t\tthis.ml.onRender();\n\t\treturn rel;\n\t}\n\n\tunrender() {\n\t\tthis.model = relistenResource(this.model, null, this._update);\n\t\tthis.ml.onUnrender();\n\t\tsuper.unrender();\n\t}\n\n\tsetChar(char) {\n\t\tthis.char = char;\n\t\tthis.ml.setModel(char);\n\t\treturn this;\n\t}\n\n\t_changeHandler(m, c, change) {\n\t\tif (!change || change.hasOwnProperty(this.property)) {\n\t\t\tthis._update();\n\t\t}\n\t}\n\n\t_update() {\n\t\tlet src = null;\n\t\tlet isError = this.isError;\n\t\tlet m = this.ml.getModel();\n\t\tif (!isError) {\n\t\t\tlet v = m?.[this.property] || null;\n\t\t\tif (v) {\n\t\t\t\tthis.model = relistenResource(this.model, v, this._update);\n\t\t\t\tsrc = this.resolve(v);\n\t\t\t\tisError = !src || v?.deleted;\n\t\t\t}\n\t\t}\n\n\t\tthis.setComponent(isError || !(src || this.initials)\n\t\t\t? this.placeholder\n\t\t\t\t? new Img(isError ? this.placeholder.err : this.placeholder.img)\n\t\t\t\t: null\n\t\t\t: src\n\t\t\t\t? new Img(src + this.query, this.modalOnClick ? {\n\t\t\t\t\tclassName: 'clickable',\n\t\t\t\t\terrorPlaceholder: this.placeholder.err,\n\t\t\t\t\terrorClassName: 'avatar--error',\n\t\t\t\t\tevents: {\n\t\t\t\t\t\tclick: c => {\n\t\t\t\t\t\t\tif (!c.hasClass('avatar--error')) {\n\t\t\t\t\t\t\t\tnew ImgModal(src).open();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t} : {\n\t\t\t\t\terrorPlaceholder: this.placeholder.err,\n\t\t\t\t})\n\t\t\t\t: new ModelTxt(this.char || m, m => getInitials(m), { tagName: 'span' }),\n\t\t);\n\t\tif (isError || src || !this.initials) {\n\t\t\tthis._clearHue();\n\t\t} else {\n\t\t\tthis._setHue(this.char);\n\t\t}\n\t}\n\n\t_clearHue() {\n\t\tif (this.initials) return;\n\t\tthis.setStyle('backgroundColor', null);\n\t\tthis.setStyle('color', null);\n\t}\n\n\t_setHue(char) {\n\t\tif (!this.initials) return;\n\n\t\tlet h = 0;\n\t\tif (!this.isError) {\n\t\t\tlet id = char ? char.id : '';\n\t\t\tfor (let i = 0; i < id.length; i++) {\n\t\t\t\th += id.charCodeAt(i);\n\t\t\t}\n\t\t\th = h % 360;\n\t\t}\n\n\t\tthis.setStyle('backgroundColor', 'hsl(' + h + ',' + Math.floor(this.saturation * 100) + '%,' + Math.floor(this.lightness * 100) + '%)');\n\t\tthis.setStyle('color', 'hsl(' + h + ',' + Math.floor(this.saturation * 100) + '%, 10%)');\n\t}\n}\n\nexport default AvatarComponent;\nexport function setPattern(pattern) {\n\tdefaultPattern = pattern;\n}\n","import AvatarComponent from './AvatarComponent';\nimport './avatar.scss';\n\n/**\n * Avatar is used to create char avatar and image components.\n */\nclass Avatar {\n\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\t\tlet apiFilePath = app.props.apiFilePath;\n\t\tthis.avatarPattern = (v) => apiFilePath + 'core/char/avatar/' + v;\n\t\tthis.charImgPattern = (v) => apiFilePath + 'core/char/img/' + v;\n\t\tthis.roomImgPattern = (v) => apiFilePath + 'core/room/img/' + v;\n\n\t\tthis.app.require([], this._init.bind(this));\n\t}\n\n\t_init(module) {}\n\n\t/**\n\t * Creates a new avatar component instance\n\t * @param {Model|object} char Char or profile model or object.\n\t * @param {object} [opt] Optional parameters.\n\t * @param {object} [opt.char] Character object used to fetch initials in profile is not a character.\n\t * @param {string} [opt.size] Avatar size. May be 'small', 'medium', 'large', or 'xlarge'.\n\t * @param {string} [opt.property] Char property to get the image ID. Defaults to 'avatar'.\n\t * @param {boolean} [opt.initials] Use initials if no image is available. Defaults to true.\n\t * @param {string} [opt.placeholder] Placeholder image to use instead of initials. May be 'avatar', 'room', or 'area'.\n\t * @param {boolean} [opt.modalOnClick] Flag if clicking on the image should show the full image in a modal.\n\t * @param {(v: any) => string} [opt.resolve] Resolves the image href from the image property.\n\t * @returns {Component} Avatar component.\n\t */\n\tnewAvatar(char, opt) {\n\t\treturn new AvatarComponent(char, Object.assign({\n\t\t\tresolve: this.avatarPattern,\n\t\t\tplaceholder: 'avatar',\n\t\t\tinitials: true,\n\t\t}, opt));\n\t}\n\n\t/**\n\t * Creates a new avatar component instance for char images.\n\t * @param {Model|object} char Char or profile model or object.\n\t * @param {object} [opt] Optional parameters.\n\t * @param {object} [opt.char] Character object used to fetch initials in profile is not a character.\n\t * @param {string} [opt.size] Avatar size. May be 'small', 'medium', 'large', or 'xlarge'.\n\t * @param {string} [opt.property] Char property to get the image ID. Defaults to 'image'.\n\t * @param {boolean} [opt.initials] Use initials if no image is available. Defaults to false.\n\t * @param {string} [opt.placeholder] Placeholder image to use instead of initials. May be 'avatar'. Defaults to 'avatar'.\n\t * @param {boolean} [opt.modalOnClick] Flag if clicking on the image should show the full image in a modal.\n\t * @param {(v: any) => string} [opt.resolve] Resolves the image href from the image property.\n\t * @returns {Component} Avatar component.\n\t */\n\tnewCharImg(char, opt) {\n\t\treturn new AvatarComponent(char, Object.assign({\n\t\t\tresolve: this.charImgPattern,\n\t\t\tplaceholder: 'avatar',\n\t\t\tproperty: 'image',\n\t\t}, opt));\n\t}\n\n\t/**\n\t * Creates a new avatar component instance for room images.\n\t * @param {Model|object} room Room or profile model or object.\n\t * @param {object} [opt] Optional parameters.\n\t * @param {object} [opt.char] Character object used to fetch initials in profile is not a character.\n\t * @param {string} [opt.size] Avatar size. May be 'small', 'medium', 'large', or 'xlarge'.\n\t * @param {string} [opt.property] Char property to get the image ID. Defaults to 'room'.\n\t * @param {string} [opt.placeholder] Placeholder image to use instead of initials. May be 'avatar'. Defaults to 'avatar'.\n\t * @param {boolean} [opt.modalOnClick] Flag if clicking on the image should show the full image in a modal.\n\t * @param {(v: any) => string} [opt.resolve] Resolves the image href from the image property.\n\t * @returns {Component} Avatar component.\n\t */\n\tnewRoomImg(room, opt) {\n\t\treturn new AvatarComponent(room, Object.assign({\n\t\t\tresolve: this.roomImgPattern,\n\t\t\tplaceholder: 'room',\n\t\t\tproperty: 'image',\n\t\t}, opt));\n\t}\n\n\tcharImgHref(char) {\n\t\treturn char.image ? this.charImgPattern(char.image) : null;\n\t}\n\n\tavatarHref(char) {\n\t\treturn char.avatar ? this.avatarPattern(char.avatar) : null;\n\t}\n\n\troomImgHref(room) {\n\t\treturn room.image ? this.roomImgPattern(room.image) : null;\n\t}\n\n}\n\nexport default Avatar;\n","import { Html } from 'modapp-base-component';\nimport { Model } from 'modapp-resource';\nimport l10n from 'modapp-l10n';\nimport formatText from 'utils/formatText';\n\n/**\n * BroadcastHandler handles broadcasted messages and shows them in a toaster notification.\n */\nclass BroadcastHandler {\n\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\t// Bind callbacks\n\t\tthis._onOut = this._onOut.bind(this);\n\n\t\tthis.app.require([ 'api', 'toaster', 'auth' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.model = new Model({ data: { info: null }, eventBus: this.app.eventBus });\n\n\t\tthis.module.auth.getUserPromise()\n\t\t\t.then(() => this.module.api.get('core.info'))\n\t\t\t.then(info => {\n\t\t\t\tif (this.model) {\n\t\t\t\t\tthis.model.set({ info });\n\t\t\t\t\tinfo.on('out', this._onOut);\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch(err => console.error(\"Failed to get info: \", err));\n\t}\n\n\t_onOut(ev) {\n\t\tif (ev.type != 'broadcast') return;\n\n\t\tthis.module.toaster.open({\n\t\t\tid: ev.id,\n\t\t\ttitle: ev.title || l10n.l('broadcastHandler.broadcast', \"Broadcast\"),\n\t\t\tcontent: new Html(formatText(ev.msg), { className: 'common--formattext' }),\n\t\t\tcloseOn: 'button',\n\t\t\ttime: ev.time ? new Date(ev.time) : new Date(),\n\t\t});\n\t}\n\n\tdispose() {\n\t\tif (this.model) {\n\t\t\tthis.model.info.off('out', this._onOut);\n\t\t}\n\t\tthis.model = null;\n\t}\n}\n\nexport default BroadcastHandler;\n","import l10n from 'modapp-l10n';\n\n/**\n * CharCycle adds keyboard shortcut to cycle through controlled characters,\n * either using numbers or tab.\n */\nclass CharCycle {\n\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\t// Bind callbacks\n\t\tthis._onKeydown = this._onKeydown.bind(this);\n\n\t\tthis.app.require([ 'player', 'helpConsole' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.helpConsole.addShortcut({\n\t\t\tid: 'charCycle',\n\t\t\tusage: '<kbd>Shift</kbd> + <kbd>Tab</kbd>',\n\t\t\tdesc: l10n.l('charCycle.charCycleDesc', `<p>Cycle active character among currently awake characters.<p>`),\n\t\t\tsortOrder: 55,\n\t\t});\n\t\tthis.module.helpConsole.addShortcut({\n\t\t\tid: 'charSelect',\n\t\t\tusage: '<kbd>Ctrl</kbd> + <kbd>1</kbd><kbd>2</kbd>...<kbd>9</kbd><kbd>0</kbd>',\n\t\t\tdesc: l10n.l('charCycle.charSelectDesc', `<p>Select active character among currently awake characters.<p>`),\n\t\t\tsortOrder: 65,\n\t\t});\n\n\t\tdocument.addEventListener('keydown', this._onKeydown);\n\t}\n\n\t_onKeydown(e) {\n\t\tif (e.shiftKey && e.key === 'Tab') {\n\t\t\tif (this._cycleActive()) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t} else if (e.ctrlKey) {\n\t\t\tlet k = parseInt(e.key);\n\t\t\tif (!isNaN(k) && this._setActive((k + 9) % 10)) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t}\n\t}\n\n\t_cycleActive() {\n\t\tlet ctrls = this.module.player.getControlled();\n\t\tif (!ctrls || ctrls.length <= 1) return;\n\n\t\tlet idx = ctrls.indexOf(this.module.player.getActiveChar());\n\t\tif (idx < 0) return;\n\n\t\tidx = (idx + 1) % ctrls.length;\n\n\t\tthis.module.player.setActiveChar(ctrls.atIndex(idx).id);\n\t\treturn true;\n\t}\n\n\t_setActive(idx) {\n\t\tlet ctrls = this.module.player.getControlled();\n\t\tif (!ctrls || ctrls.length <= idx) return;\n\n\t\tthis.module.player.setActiveChar(ctrls.atIndex(idx).id);\n\t\treturn true;\n\t}\n\n\tdispose() {\n\t\tdocument.removeEventListener('keydown', this._onShiftTab);\n\t}\n}\n\nexport default CharCycle;\n","function flatten(o, obj, path) {\n\tif (typeof obj == 'object' && obj !== null) {\n\t\tpath = path ? path + '.' : path;\n\t\tfor (let k in obj) {\n\t\t\tflatten(o, obj[k], path + k);\n\t\t}\n\t} else {\n\t\to[path] = obj;\n\t}\n}\n\n/**\n * Flattens a nested object. It turns:\n * {\"foo\":{\"baz\":42},\"bar\":true} --> {\"foo.baz\":42,\"bar\":true}\n * If the object contains property keys with dots\n * in them, the behavior is unspecified.\n * @param {object} obj Object to flatten.\n * @returns {object} Flattened object\n */\nexport default function flattenObject(obj) {\n\tlet o = {};\n\tflatten(o, obj, \"\");\n\treturn o;\n}\n","import l10n from 'modapp-l10n';\nimport CharList from 'classes/CharList';\nimport flattenObject from 'utils/flattenObject';\nimport * as charEvent from 'utils/charEvent';\nimport { firstTriggerWord } from 'utils/formatText';\n\nconst focusStoragePrefix = 'charFocus.';\n\nconst focusTitle = l10n.l('charLog.newPost', \"New post\");\nconst focusBody = l10n.l('charLog.newPost', \"{char.name} made a new post\");\nconst mentionTitle = l10n.l('charLog.mention', \"Mention\");\nconst mentionBody = l10n.l('charLog.mentioned', \"{char.name} mentioned {mention}\");\n\nconst focusColors = {\n\tred: '#a00808',\n\tgreen: '#08a008',\n\tblue: '#4444de',\n\tyellow: '#c0c000',\n\tcyan: '#0fb7b7',\n\tpurple: '#7c00a2',\n\tpink: '#ef6e9e',\n\torange: '#ef8226',\n\twhite: '#f3f3f3',\n\tnone: null,\n};\n\nfunction isValidColor(color) {\n\treturn !!(color && (focusColors.hasOwnProperty(color) || color.match(/^#(?:[0-9a-fA-F]{3,3}){1,2}$/)));\n}\n\nfunction isPredefined(color) {\n\tfor (let k in focusColors) {\n\t\tif (color === focusColors[k]) {\n\t\t\treturn k;\n\t\t}\n\t}\n\treturn null;\n}\n\n/**\n * CharFocus handles focus on certain characters and sending of notifications on\n * charLog events.\n */\nclass CharFocus {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\t// Bind callbacks\n\t\tthis._onCtrlAdd = this._onCtrlAdd.bind(this);\n\t\tthis._onCtrlRemove = this._onCtrlRemove.bind(this);\n\t\tthis._onFocusChange = this._onFocusChange.bind(this);\n\t\tthis._onNotificationCharEvent = this._onNotificationCharEvent.bind(this);\n\n\t\tthis.app.require([\n\t\t\t'auth',\n\t\t\t'player',\n\t\t\t'notify',\n\t\t\t'api',\n\t\t\t'charLog',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\n\t\t/**\n\t\t * Stores current focus of characters and their stored color for each controlled character.\n\t\t * @type {{ [ctrlId: string]: CharFocusChars | PuppetFocusChars }}}\n\t\t */\n\t\tthis.focusChars = {};\n\n\t\t/**\n\t\t * Holds focus models for all currently controlled characters.\n\t\t * @type {{ [ctrlId: string]: CharSettings | PuppetSettings }}\n\t\t */\n\t\tthis.settings = {};\n\t\t/**\n\t\t * Last colors used when focusing on characters. Shared between all controlled characters.\n\t\t * The value is the color used.\n\t\t * @type { [charId: string]: string }\n\t\t */\n\t\tthis.lastColors = {};\n\n\t\tthis.notifyModel = this.module.notify.getModel();\n\n\t\tthis.focusCharList = new CharList(() => {\n\t\t\tlet c = this.module.player.getActiveChar();\n\t\t\tif (!c) return null;\n\t\t\tlet f = this.focusChars[c.id]?.props;\n\t\t\tif (!f) return null;\n\n\t\t\treturn Object.keys(f)\n\t\t\t\t.map(k => f[k])\n\t\t\t\t.filter(c => c?.name)\n\t\t\t\t.sort((a, b) => a.name.localeCompare(b.name) || a.surname.localeCompare(b.surname));\n\t\t});\n\t\tthis.style = document.createElement('style');\n\t\tdocument.head.appendChild(this.style);\n\n\t\tconst notificationHandlers = {\n\t\t\tsay: (charId, ev) => this.notifyOnMention(charId, ev, mentionTitle, mentionBody) || this.notifyOnFocus(charId, ev, focusTitle, focusBody),\n\t\t\tpose: (charId, ev) => this.notifyOnMention(charId, ev, mentionTitle, mentionBody) || this.notifyOnFocus(charId, ev, focusTitle, focusBody),\n\t\t\tsleep: (charId, ev) => this.notifyOnFocus(charId, ev, l10n.l('charLog.asleep', \"Asleep\"), l10n.l('charLog.charFellAsleep', \"{char.name} fell asleep\")),\n\t\t\tleave: (charId, ev) => this.notifyOnFocus(charId, ev, l10n.l('charLog.departure', \"Departure\"), l10n.l('charLog.charLeft', \"{char.name} left\")),\n\t\t\tarrive: (charId, ev) => this.notifyOnFocus(charId, ev, l10n.l('charLog.arrival', \"Arrival\"), l10n.l('charLog.charArrived', \"{char.name} arrived\")),\n\t\t\twhisper: (charId, ev) => this.notifyOnTargetEvent(charId, ev, l10n.l('charLog.whisper', \"Whisper\"), l10n.l('charLog.charWhisperTo', \"{char.name} whispered to {target.name}\")),\n\t\t\tmessage: (charId, ev) => this.notifyOnTargetEvent(charId, ev, l10n.l('charLog.message', \"Message\"), l10n.l('charLog.charMessagedTo', \"{char.name} messaged {target.name}\")),\n\t\t\tdescribe: (charId, ev) => this.notifyOnMention(charId, ev, mentionTitle, mentionBody) || this.notifyOnFocus(charId, ev, l10n.l('charLog.newDesc', \"Description\"), l10n.l('charLog.newDescBy', \"{char.name} made a description\")),\n\t\t\tsummon: (charId, ev) => this.notifyOnTargetEvent(charId, ev, l10n.l('charLog.summonRequest', \"Summon request\"), l10n.l('charLog.charSummoned', \"{char.name} summons {target.name}\")),\n\t\t\tjoin: (charId, ev) => this.notifyOnTargetEvent(charId, ev, l10n.l('charLog.joinRequest', \"Join request\"), l10n.l('charLog.charJoin', \"{char.name} wants to join {target.name}\")),\n\t\t\tleadRequest: (charId, ev) => this.notifyOnTargetEvent(charId, ev, l10n.l('charLog.leadRequest', \"Lead request\"), l10n.l('charLog.charLead', \"{char.name} wants to lead {target.name}\")),\n\t\t\tfollowRequest: (charId, ev) => this.notifyOnTargetEvent(charId, ev, l10n.l('charLog.followRequest', \"Follow request\"), l10n.l('charLog.charFollow', \"{char.name} wants to follow {target.name}\")),\n\t\t\tooc: (charId, ev) => this.notifyOnMention(charId, ev, mentionTitle, mentionBody) || this.notifyOnFocus(charId, ev, l10n.l('charLog.newOocPost', \"{char.name} made an Out of Character post\")),\n\t\t\twarn: (charId, ev) => this.notifyOnTargetEvent(charId, ev, l10n.l('charLog.warning', \"Warning\"), l10n.l('charLog.charWarningTo', \"{char.name} warned {target.name}\")),\n\t\t\taction: (charId, ev) => this.notifyOnFocus(charId, ev, l10n.l('charLog.newAction', \"{char.name} {msg}\")),\n\t\t\taddress: (charId, ev) => this.notifyOnTargetEvent(charId, ev, l10n.l('charLog.address', \"Address\"), l10n.l('charLog.charAddressed', \"{char.name} addressed {target.name}\")) || this.notifyOnMention(charId, ev, mentionTitle, mentionBody),\n\t\t\troll: (charId, ev) => this.notifyOnFocus(charId, ev, l10n.l('charLog.roll', \"Roll\"), l10n.l('charLog.charRolled', \"{char.name} rolled the dice\")),\n\t\t};\n\t\tfor (let k in notificationHandlers) {\n\t\t\tthis.module.charLog.addEventHandler(k, notificationHandlers[k]);\n\t\t}\n\n\t\t// Load last used colors\n\t\tthis._loadLastColors();\n\n\t\t// Migrate localStorage stored settings to server.\n\t\t// [TODO] Remove after 2025-01-01\n\t\tthis._migrateFocus() // Currently focused\n\t\t\t.then(() => this._migrateFocusAll());\n\n\t\tthis._setListeners(true);\n\t}\n\n\t/**\n\t * Adds focus on a character by calling focusChar on the player.\n\t * @param {Model} ctrl Controlled character doing the focusing.\n\t * @param {string} charId ID of character to focus on.\n\t * @param {string} color Focus color (e.g. 'red', 'blue', 'none') or hex color code starting with '#'\n\t * @returns {Promise}\n\t */\n\taddFocus(ctrl, charId, color) {\n\t\t// Convert color to lowercase if we have a string\n\t\tcolor = typeof color == 'string' ? color.toLowerCase() : '';\n\n\t\tif (!isValidColor(color)) {\n\t\t\t// Get last used color or next suggested color code.\n\t\t\tcolor = this.lastColors[charId] || this._getSuggestedColor(ctrl);\n\t\t}\n\n\t\tthis.lastColors[charId] = color;\n\t\tthis._saveLastColors();\n\n\t\t// Turn color name into hex code.\n\t\tcolor = focusColors.hasOwnProperty(color) ? focusColors[color] : color;\n\n\t\treturn this.module.player.getPlayer().call('focusChar', {\n\t\t\tcharId: ctrl.id,\n\t\t\tpuppeteerId: ctrl.puppeteer?.id || undefined,\n\t\t\ttargetId: charId,\n\t\t\tcolor,\n\t\t});\n\t}\n\n\t/**\n\t * Removes focus from a character by calling unfocusChar on the player.\n\t * @param {string} ctrl Controlled character doing the focusing.\n\t * @param {string} charId Character to remove focus from.\n\t * @returns {Promise} Promise of the character being unfocused.\n\t */\n\tremoveFocus(ctrl, charId) {\n\t\treturn this.module.player.getPlayer().call('unfocusChar', {\n\t\t\tcharId: ctrl.id,\n\t\t\tpuppeteerId: ctrl.puppeteer?.id || undefined,\n\t\t\ttargetId: charId,\n\t\t});\n\t}\n\n\t/**\n\t * Returns a CharList with the currently focused characters\n\t * @returns\t{CharList} Focused characters of the currently controlled character.\n\t */\n\tgetFocusCharList() {\n\t\treturn this.focusCharList;\n\t}\n\n\t/**\n\t * Returns an object with focused character ids as keys and an object of the\n\t * focus colors and translated color hex code as values.\n\t * @param {string} ctrlId Controlled character ID to list focused characters for.\n\t * @returns {[]{ char: object, color: string, hex: string }} Array of objects containing focused characters.\n\t */\n\tgetFocusCharColors(ctrlId) {\n\t\tlet chars = this.focusChars[ctrlId]?.props;\n\t\tlet focus = this.settings[ctrlId]?.focus.props;\n\t\t// Assert we have focusChars and controlled characters focus list.\n\t\tif (!chars || !focus) return [];\n\n\t\tlet list = Object.keys(focus).map(k => {\n\t\t\tlet color = focus[k].color;\n\t\t\tlet char = chars[k];\n\t\t\treturn { char, hex: color, color: isPredefined(color) || color };\n\t\t}).filter(o => o.char?.name);\n\t\tlist.sort((a, b) => a.char.name.localeCompare(b.char.name) || a.char.surname.localeCompare(b.char.surname));\n\t\treturn list;\n\t}\n\n\t/**\n\t * Gets an object with supported focus highlight colors.\n\t * @returns {object} Focus colors where key is the color name and value is\n\t * the color code.\n\t */\n\tgetFocusColors() {\n\t\treturn focusColors;\n\t}\n\n\t/**\n\t * Checks if a controlled character is focusing on a specific character.\n\t * It does not take focus all into account.\n\t * @param {*} ctrlId Controlled character ID.\n\t * @param {*} charId Focused character ID.\n\t * @returns {boolean} True if character is focused on, otherwise false.\n\t */\n\thasFocus(ctrlId, charId) {\n\t\tlet f = this.focusChars[ctrlId]?.props;\n\t\treturn !!(f && charId && f[charId]);\n\t}\n\n\t/**\n\t * Send a notification on other characters if the character is in focus.\n\t * @param {string} ctrlId Controlled character receiving the event.\n\t * @param {object} [ev] Event object.\n\t * @param {string|LocaleString} title Event title. Will get the char passed in as data.\n\t * @param {string|LocaleString} body Event message body. Will get the char passed in as data.\n\t * @returns {boolean} Returns true if a notification was sent.\n\t */\n\tnotifyOnFocus(ctrlId, ev, title, body) {\n\t\t// No notification on script events\n\t\tif (ev.script) {\n\t\t\treturn false;\n\t\t}\n\t\tif (ctrlId === ev.char?.id || this._usePush()) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (!this.hasFocus(ctrlId, ev.char?.id)) {\n\t\t\t// Check if muted event\n\t\t\tif (ev.mod?.muted || !this.isNotifyOnAll(ctrlId)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\tthis._notify(ctrlId, ev, title, body, flattenObject(ev));\n\t\treturn true;\n\t}\n\n\t/**\n\t * Send a notification for other characters unless the character is muted.\n\t * @param {string} ctrlId Controlled character receiving the event.\n\t * @param {object} [ev] Event object.\n\t * @param {string|LocaleString} title Event title. Will get the char passed in as data.\n\t * @param {string|LocaleString} body Event message body. Will get the char passed in as data.\n\t * @returns {boolean} Returns true if a notification was sent.\n\t */\n\tnotifyOnEvent(ctrlId, ev, title, body) {\n\t\t// No notification on script events\n\t\tif (ev.script) {\n\t\t\treturn false;\n\t\t}\n\t\tif (ctrlId === ev.char?.id || this._usePush() || ev.mod?.muted) {\n\t\t\treturn false;\n\t\t}\n\t\tthis._notify(ctrlId, ev, title, body, flattenObject(ev));\n\t}\n\n\t/**\n\t * Send a notification if your controlled character is mentioned in the\n\t * ev.msg string.\n\t * @param {string} ctrlId Controlled character receiving the event.\n\t * @param {object} [ev] Event object.\n\t * @param {string|LocaleString} title Event title. Will get the char passed in as data.\n\t * @param {string|LocaleString} body Event message body. Will get the char passed in as data.\n\t * @returns {boolean} Returns true if a notification was sent.\n\t */\n\tnotifyOnMention(ctrlId, ev, title, body) {\n\t\t// No notification on script events\n\t\tif (ev.script) {\n\t\t\treturn false;\n\t\t}\n\t\t// Unfocused muted events does not trigger\n\t\tif (ctrlId === ev.char?.id || this._usePush() || (!this.hasFocus(ctrlId, ev.char?.id) && ev.mod?.muted)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (!this.notifyModel.notifyOnMention || !ev.mod?.triggers) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis._notify(ctrlId, ev, title, body, flattenObject({ char: ev.char, mention: firstTriggerWord(ev.msg, ev.mod.triggers) }));\n\t\treturn true;\n\t}\n\n\t/**\n\t * Send a notification for other characters if the character is targeted\n\t * @param {string} ctrlId Controlled character receiving the event.\n\t * @param {object} [ev] Event object. Should contain a target property which is the targeted character.\n\t * @param {string|LocaleString} title Event title. Will get the char passed in as data.\n\t * @param {string|LocaleString} body Event message body. Will get the char passed in as data.\n\t * @returns {boolean} Returns true if a notification was sent.\n\t */\n\tnotifyOnTargetEvent(ctrlId, ev, title, body) {\n\t\t// No notification on script events\n\t\tif (ev.script) {\n\t\t\treturn false;\n\t\t}\n\t\tif (ctrlId === ev.char?.id || this._usePush()) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (!this.hasFocus(ctrlId, ev.char?.id)) {\n\t\t\t// Check if muted event\n\t\t\tif (ev.mod?.muted) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t// Check if we should not send event\n\t\t\tif (!this.isNotifyOnAll(ctrlId)) { // Notify on all\n\t\t\t\tif (!this.notifyModel.notifyOnEvent || !ev.mod?.targeted) { // Targeted event\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis._notify(ctrlId, ev, title, body, flattenObject({ char: ev.char, target: charEvent.extractTarget(ctrlId, ev) }));\n\t\treturn true;\n\t}\n\n\t/**\n\t * Toggles or sets the notifyOnAll value in character settings.\n\t * @param {CharCtrlModel} ctrl Controlled character.\n\t * @param {boolean} [notifyOnAll] Notify on all flag to set. Defaults to toggle.\n\t * @returns {Promise<boolean>} Promise of a flag telling of notifyOnAll was changed.\n\t */\n\ttoggleNotifyOnAll(ctrl, notifyOnAll) {\n\t\tlet oldNotifyOnAll = ctrl.settings.notifyOnAll;\n\t\tnotifyOnAll = typeof notifyOnAll == 'undefined' ? !oldNotifyOnAll : !!notifyOnAll;\n\n\t\t// No attempt to set the value if it is already set.\n\t\tif (oldNotifyOnAll == notifyOnAll) {\n\t\t\treturn Promise.resolve(false);\n\t\t}\n\n\t\treturn this.module.player.getPlayer().call('setCharSettings', {\n\t\t\tcharId: ctrl.id,\n\t\t\tpuppeteerId: ctrl.puppeteer?.id || undefined,\n\t\t\tnotifyOnAll,\n\t\t}).then(() => true);\n\t}\n\n\t/**\n\t * Checks if a controlled character has notifyOnAll set to true.\n\t * @param {string} ctrlId ID of a controlled character.\n\t * @returns {boolean}\n\t */\n\tisNotifyOnAll(ctrlId) {\n\t\treturn !!(this.settings[ctrlId]?.notifyOnAll);\n\t}\n\n\t_notify(ctrlId, ev, title, body, params) {\n\t\ttitle = typeof title == 'string'\n\t\t\t? title\n\t\t\t: l10n.t(title, params);\n\t\tbody = body && (\n\t\t\ttypeof body == 'string'\n\t\t\t\t? body\n\t\t\t\t: l10n.t(body, params)\n\t\t) || null;\n\n\t\tthis.module.notify.send(title, body, {\n\t\t\ttag: ev.id,\n\t\t\tcloseOnClick: true,\n\t\t\tonClick: () => {\n\t\t\t\tthis.module.player.setActiveChar(ctrlId).catch(() => {});\n\t\t\t\twindow.focus();\n\t\t\t},\n\t\t\tduration: 1000 * 60 * 15, // Max 15 min\n\t\t});\n\t}\n\n\t_usePush() {\n\t\treturn this.notifyModel.usePush;\n\t}\n\n\t_setListeners(on) {\n\t\tlet p = this.module.player;\n\t\tlet cb = on ? 'on' : 'off';\n\t\tp[cb]('ctrlAdd', this._onCtrlAdd);\n\t\tp[cb]('ctrlRemove', this._onCtrlRemove);\n\t\tthis.module.notify[on ? 'addNotificationHandler' : 'removeNotificationHandler']('charEvent', this._onNotificationCharEvent);\n\t}\n\n\t_onCtrlAdd(ev) {\n\t\tlet settings = ev.char.settings;\n\t\tif (this.focusChars && settings) {\n\t\t\tlet charId = ev.char.id;\n\t\t\tlet puppeteerId = ev.char.puppeteer?.id;\n\t\t\t// Start listening to focus change\n\t\t\tthis.settings[charId] = settings;\n\t\t\tsettings.focus.on('change', this._onFocusChange);\n\n\t\t\tlet promise = (puppeteerId\n\t\t\t\t? this.module.api.get(`core.char.${puppeteerId}.puppet.${charId}.focus.chars`)\n\t\t\t\t: this.module.api.get(`core.char.${charId}.focus.chars`)\n\t\t\t).then(chars => {\n\t\t\t\t// Assert the promise matches and no other event has replaced it.\n\t\t\t\tif (this.focusChars[charId] == promise) {\n\t\t\t\t\t// Replace the promise with the chars model\n\n\t\t\t\t\tchars.on();\n\t\t\t\t\tthis.focusChars[charId] = chars;\n\t\t\t\t}\n\t\t\t});\n\t\t\tthis.focusChars[charId] = promise;\n\n\t\t\tthis._updateStyle();\n\t\t}\n\t}\n\n\t_onCtrlRemove(ev) {\n\t\tif (this.focusChars) {\n\t\t\tlet charId = ev.char.id;\n\t\t\t// Assert we have an off function. If not, it might be a promise of\n\t\t\t// the focused characters being loaded.\n\t\t\tthis.focusChars[charId]?.off?.();\n\t\t\tdelete this.focusChars[charId];\n\n\t\t\t// Stop listening to focus change\n\t\t\tthis.settings[charId]?.focus.off('change', this._onFocusChange);\n\t\t\tdelete this.settings[charId];\n\n\t\t\tthis._updateStyle();\n\t\t}\n\t}\n\n\t_onFocusChange(ev) {\n\t\tthis._updateStyle();\n\t}\n\n\t_saveLastColors() {\n\t\tif (!localStorage) return;\n\n\t\tthis.module.auth.getUserPromise().then(user => {\n\t\t\tlocalStorage.setItem(focusStoragePrefix + user.id + '.colors', JSON.stringify(this.lastColors));\n\t\t});\n\t}\n\n\t_loadLastColors() {\n\t\tif (!localStorage) return;\n\n\t\tthis.module.auth.getUserPromise().then(user => {\n\t\t\tlet raw = localStorage.getItem(focusStoragePrefix + user.id + '.colors');\n\t\t\tif (raw) {\n\t\t\t\tthis.lastColors = JSON.parse(raw);\n\t\t\t}\n\t\t});\n\t}\n\n\t// Migrates focus settings from local storage over to backend. Remove after 2025-01-01.\n\tasync _migrateFocus() {\n\t\tif (!localStorage) return;\n\n\t\tlet player = await this.module.player.getPlayerPromise();\n\t\tlet key = focusStoragePrefix + player.id + '.focus';\n\t\tlet raw = localStorage.getItem(key);\n\t\tif (raw) {\n\t\t\ttry {\n\t\t\t\tlet dta = JSON.parse(raw);\n\t\t\t\tfor (let o of dta) {\n\t\t\t\t\t// Translate focus color to hex\n\t\t\t\t\tlet color = focusColors.hasOwnProperty(o.color) ? focusColors[o.color] : o.color;\n\t\t\t\t\tif (!color || isValidColor(color)) {\n\t\t\t\t\t\tawait player.call('focusChar', {\n\t\t\t\t\t\t\tcharId: o.ctrlId,\n\t\t\t\t\t\t\ttargetId: o.charId,\n\t\t\t\t\t\t\tcolor,\n\t\t\t\t\t\t}).catch(err => {\n\t\t\t\t\t\t\t// Char or target not found is considered non-errors.\n\t\t\t\t\t\t\t// It may happen because of character deletion, or that controlled character was a puppet.\n\t\t\t\t\t\t\tif (err.code != 'core.charNotFound' && err.code != 'core.targetCharNotFound') {\n\t\t\t\t\t\t\t\tthrow err;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\tawait new Promise(resolve => setTimeout(resolve, 1000)); // Migrate one every second to avoid flooding.\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Once successfully migrated, delete key.\n\t\t\t\tlocalStorage.removeItem(key);\n\t\t\t\tlocalStorage.removeItem('focus'); // Legacy key\n\t\t\t} catch (ex) {\n\t\t\t\tconsole.log(\"Error migrating focus:\", ex);\n\t\t\t}\n\t\t}\n\t}\n\n\tasync _migrateFocusAll() {\n\t\tif (!localStorage) return;\n\n\t\tlet player = await this.module.player.getPlayerPromise();\n\t\tlet key = focusStoragePrefix + player.id + '.all';\n\t\tlet raw = localStorage.getItem(key);\n\t\tif (raw) {\n\t\t\ttry {\n\t\t\t\tlet dta = JSON.parse(raw);\n\t\t\t\tfor (let charId in dta) {\n\t\t\t\t\tawait player.call('setCharSettings', {\n\t\t\t\t\t\tcharId,\n\t\t\t\t\t\tnotifyOnAll: true,\n\t\t\t\t\t}).catch(err => {\n\t\t\t\t\t\t// Char not found is considered a non-error.\n\t\t\t\t\t\tif (err.code != 'core.charNotFound') {\n\t\t\t\t\t\t\tthrow err;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t// Once successfully migrated, delete key.\n\t\t\t\tlocalStorage.removeItem(key);\n\t\t\t} catch (ex) {\n\t\t\t\tconsole.log(\"Error migrating focusAll:\", ex);\n\t\t\t}\n\t\t}\n\t}\n\n\t_updateStyle() {\n\t\tlet s = '';\n\t\tfor (let ctrlId in this.settings) {\n\t\t\tlet focus = this.settings[ctrlId].focus.props;\n\t\t\tfor (let charId in focus) {\n\t\t\t\tlet c = focus[charId].color;\n\t\t\t\tif (c) {\n\t\t\t\t\ts += '.f-' + ctrlId + '-' + charId + ' {border-left-color:' + c + '} .mf-' + ctrlId + '-' + charId + ' {border-color:' + c + '}\\n';\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.style.innerHTML = s;\n\t}\n\n\t/* Get the next suggested color. */\n\t_getSuggestedColor(ctrl) {\n\t\tlet f = ctrl?.settings?.focus.props;\n\n\t\t// Assert we have focus list. Else just return first color.\n\t\tif (!f) return Object.keys(focusColors)[0];\n\n\t\t// Count how many times each predefined focusColor is used.\n\t\tlet count = {};\n\t\tfor (let charId in f) {\n\t\t\tlet k = isPredefined(f[charId].color);\n\t\t\tif (k) {\n\t\t\t\tcount[k] = (count[k] || 0) + 1;\n\t\t\t}\n\t\t}\n\n\t\t// Pick the least used predefined focusColor\n\t\tlet i = 0;\n\t\twhile (true) {\n\t\t\tfor (let k in focusColors) {\n\t\t\t\tif (k !== 'none' && (count[k] || 0) === i) {\n\t\t\t\t\treturn k;\n\t\t\t\t}\n\t\t\t}\n\t\t\ti++;\n\t\t}\n\t}\n\n\t_onNotificationCharEvent(params) {\n\t\tif (params.charId) {\n\t\t\tthis.module.player.setActiveChar(params.charId).catch(() => {});\n\t\t}\n\t}\n\n\tdispose() {\n\t\tdocument.head.removeChild(this.style);\n\t\t// Unlisten to focused chars.\n\t\tthis._setListeners(false);\n\t\tfor (let ctrlId in this.focusChars) {\n\t\t\t// Assert we have an off function, or else it might just be a\n\t\t\t// promise of the characters loading.\n\t\t\tthis.focusChars[ctrlId]?.off?.();\n\t\t\t// Stop listening to focus models.\n\t\t\tthis.settings[ctrlId]?.focus.off();\n\t\t}\n\t\tthis.focusChars = null;\n\t\tthis.settings = null;\n\t}\n}\n\nexport default CharFocus;\n","const defaultDuration = 1000 * 60 * 15; // 15 minutes between successful pings\nconst defaultThreshold = 1000 * 60 * 60; // 60 minutes until character is put to sleep\nconst defaultRetry = 1000 * 60 * 1; // 1 minute between retries\n\nconst crossOrigin = API_CROSS_ORIGIN;\n\n/**\n * CharPing periodically sends a ping for all controlled characters\n * to ensure they are not released out of inactivity\n */\nclass CharPing {\n\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\t\tthis.duration = Number(params.duration || defaultDuration);\n\t\tthis.threshold = Number(params.threshold || defaultThreshold);\n\t\tthis.retry = Number(params.retry || defaultRetry);\n\t\tthis.useWs = params.method === \"ws\";\n\n\t\t// Bind callbacks\n\t\tthis._onModelChange = this._onModelChange.bind(this);\n\t\tthis._onAdd = this._onAdd.bind(this);\n\t\tthis._onRemove = this._onRemove.bind(this);\n\n\t\tthis.app.require([\n\t\t\t'auth',\n\t\t\t'player',\n\t\t\t'api',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t\tthis.controlled = null;\n\t\tthis.timers = {};\n\t\tthis.playerModel = this.module.player.getModel();\n\t\tthis.playerModel.on('change', this._onModelChange);\n\t\tthis._onModelChange();\n\t}\n\n\t_onModelChange() {\n\t\tlet c = this.module.player.getControlled();\n\t\tif (c === this.controlled) return;\n\n\t\tthis._setEventListeners(false);\n\t\tthis.controlled = c;\n\t\tthis._setEventListeners(true);\n\t}\n\n\t_setEventListeners(on) {\n\t\tlet c = this.controlled;\n\t\tif (!c) return;\n\t\tif (on) {\n\t\t\tc.on('add', this._onAdd);\n\t\t\tc.on('remove', this._onRemove);\n\t\t\tfor (let char of c) {\n\t\t\t\tthis._addChar(char);\n\t\t\t}\n\t\t} else {\n\t\t\tc.off('add', this._onAdd);\n\t\t\tc.off('remove', this._onRemove);\n\t\t\tfor (let char of c) {\n\t\t\t\tthis._removeChar(char);\n\t\t\t}\n\t\t\tthis.timers = {};\n\t\t}\n\t}\n\n\t/**\n\t * Sends a ping POST for the controlled char\n\t * @param {*} charId ID of character to ping.\n\t * @param {*} puppeteerId ID of the character puppeteer.\n\t * @param {*} since Time since last successful ping when called\n\t *\n\t */\n\t_pingChar(charId, puppeteerId, since) {\n\t\tsince = since || 0;\n\n\t\t// Clear any previous ping timer\n\t\tlet t = this.timers[charId];\n\t\tif (t) {\n\t\t\tclearTimeout(t);\n\t\t}\n\n\t\tlet url = this.module.api.getWebResourceUri('core') + '/char/' + (puppeteerId ? puppeteerId + '/puppet/' : '') + charId + '/ctrl/ping';\n\t\tfetch(url, {\n\t\t\tmethod: 'POST',\n\t\t\tmode: 'cors',\n\t\t\tcredentials: crossOrigin ? 'include' : 'same-origin',\n\t\t}).then(resp => {\n\t\t\tif (resp.status < 200 || resp.status >= 300) {\n\t\t\t\t// Access denied likely means the token cookie wasn't included\n\t\t\t\t// We try to refresh the token by calling authenticate endpoint.\n\t\t\t\tif (resp.status == 401) {\n\t\t\t\t\treturn this.module.auth.refreshTokens(true).then(() => {\n\t\t\t\t\t\tthrow resp;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn Promise.reject(resp);\n\t\t\t}\n\t\t\t// On successful ping\n\t\t\tt = setTimeout(() => {\n\t\t\t\tif (this.timers[charId] === t) {\n\t\t\t\t\tthis._pingChar(charId, puppeteerId);\n\t\t\t\t}\n\t\t\t}, this.duration);\n\t\t\tthis.timers[charId] = t;\n\t\t}).catch(resp => {\n\t\t\t// On failed ping\n\t\t\tlet d = since < this.threshold ? this.retry : this.duration;\n\t\t\tconsole.error(\"[CharPing worker] Error pinging \" + charId + \". Retrying in \" + (d / 1000) + \" seconds:\", resp);\n\t\t\tt = setTimeout(() => {\n\t\t\t\tif (this.timers[charId] === t) {\n\t\t\t\t\tthis._pingChar(charId, puppeteerId, since + d);\n\t\t\t\t}\n\t\t\t}, d);\n\t\t\tthis.timers[charId] = t;\n\t\t});\n\t}\n\n\t_wsPingChar(char, since) {\n\t\tsince = since || 0;\n\t\tchar.call('ping').then(() => {\n\t\t\t// On successful ping\n\t\t\tlet t = setTimeout(() => {\n\t\t\t\tif (this.timers[char.id] === t) {\n\t\t\t\t\tthis._wsPingChar(char);\n\t\t\t\t}\n\t\t\t}, this.duration);\n\t\t\tthis.timers[char.id] = t;\n\t\t}).catch(err => {\n\t\t\t// On failed ping\n\t\t\tlet d = since < this.threshold ? this.retry : this.duration;\n\t\t\tconsole.error(\"Error pinging \" + char.id + \". Retrying in \" + (d / 1000) + \" seconds: \", err);\n\t\t\tlet t = setTimeout(() => {\n\t\t\t\tif (this.timers[char.id] === t) {\n\t\t\t\t\tthis._wsPingChar(char, since + d);\n\t\t\t\t}\n\t\t\t}, d);\n\t\t\tthis.timers[char.id] = t;\n\t\t});\n\t}\n\n\t_addChar(char, forceWs) {\n\t\tif (this.useWs || forceWs) {\n\t\t\tthis._wsPingChar(char);\n\t\t} else {\n\t\t\tthis._pingChar(char.id, char.puppeteer ? char.puppeteer.id : null, 0);\n\t\t}\n\t}\n\n\t_removeChar(char) {\n\t\tlet t = this.timers[char.id];\n\t\tif (t) {\n\t\t\tclearTimeout(t);\n\t\t\tdelete this.timers[char.id];\n\t\t}\n\t}\n\n\t_onAdd(ev) {\n\t\tthis._addChar(ev.item);\n\t}\n\n\t_onRemove(ev) {\n\t\tthis._removeChar(ev.item);\n\t}\n\n\tdispose() {\n\t\tthis._setEventListeners(false);\n\t\tif (!this.useWs) {\n\t\t\tthis.worker.terminate();\n\t\t\tthis.worker = null;\n\t\t}\n\t\tthis.controlled = null;\n\t\tthis.playerModel.off('change', this._onModelChange);\n\t}\n}\n\nexport default CharPing;\n","import { Html } from 'modapp-base-component';\nimport l10n from 'modapp-l10n';\nimport escapeHtml from 'utils/escapeHtml';\n\n/**\n * CmdNotFoundExit adds a command not found handler that detects if the player\n * tried to use an exit with prefixing it with 'go'.\n */\nclass CmdNotFoundExit {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\t// Bind callbacks\n\t\tthis._onNotFound = this._onNotFound.bind(this);\n\n\t\tthis.app.require([ 'cmd', 'player' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\n\t\tthis.module.cmd.addNotFoundHandler({\n\t\t\tid: 'exit',\n\t\t\tonNotFound: (ctx, m, str) => this._onNotFound(ctx, str),\n\t\t\tsortOrder: 10,\n\t\t});\n\t}\n\n\t_onNotFound(ctx, str) {\n\t\tlet exits = ctx.char && ctx.char.inRoom && ctx.char.inRoom.exits;\n\t\tif (!exits) return;\n\n\t\tstr = str.trim().toLowerCase().replace(/\\s+/g, ' ');\n\t\tfor (let exit of exits) {\n\t\t\tfor (let key of exit.keys) {\n\t\t\t\tif (key == str) {\n\t\t\t\t\treturn new Html(\n\t\t\t\t\t\tl10n.t('cmdNotFoundExit.exitUsage', 'To use the exit, type <span class=\"cmd\">go {key}</span> instead, or type <span class=\"cmd\">help go</span> to learn more.', { key: escapeHtml(key) }),\n\t\t\t\t\t\t{ className: 'common--formattext' },\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tdispose() {\n\t\tthis.module.cmd.removeNotFoundHandler('exit');\n\t}\n}\n\nexport default CmdNotFoundExit;\n","import l10n from 'modapp-l10n';\nimport { addBeforeUnload, removeBeforeUnload } from 'utils/reload';\n\n/**\n * ConfirmClose shows a confirmation popup when trying to close the browser tab\n * while characters are awake.\n */\nclass ConfirmClose {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\t// Bind callbacks\n\t\tthis._onBeforeUnload = this._onBeforeUnload.bind(this);\n\n\t\tthis.app.require([ 'player', 'auth' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\n\t\taddBeforeUnload(this._onBeforeUnload);\n\t}\n\n\t_onBeforeUnload(e) {\n\t\tif ((this.module.player.getControlled() || []).length) {\n\t\t\te = e || window.event;\n\t\t\tlet msg = l10n.t('confirmClose.charactersAwake', \"Some characters are still awake.\");\n\t\t\tif (e) {\n\t\t\t\te.returnValue = msg;\n\t\t\t}\n\t\t\tif (e.stopPropagation) {\n\t\t\t\te.stopPropagation();\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t\treturn msg;\n\t\t}\n\t}\n\n\tdispose() {\n\t\tremoveBeforeUnload(this._onBeforeUnload);\n\t}\n}\n\nexport default ConfirmClose;\n","import l10n from 'modapp-l10n';\nimport { replyCmds, replyAllCmds, containsTarget } from 'utils/replyToEvent';\nimport { relistenResource } from 'utils/listenResource';\n\nfunction getReply(charId, ev, all) {\n\treturn (all ? replyAllCmds : replyCmds)[ev.type](charId, ev);\n}\n\n/**\n * ConsoleReplyLast adds Alt-R as a keymap to the console to reply to last replyable message.\n */\nclass ConsoleReplyLast {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\t// Size of the buffer for reply to messages.\n\t\tthis.bufferSize = parseInt(params?.bufferSize) || 10;\n\n\t\t// Bind callbacks\n\t\tthis._replyAll = this._replyLast.bind(this, true);\n\t\tthis._reply = this._replyLast.bind(this, false);\n\t\tthis._addEvent = this._addEvent.bind(this);\n\t\tthis._onStateChange = this._onStateChange.bind(this);\n\n\t\tthis.app.require([\n\t\t\t'console',\n\t\t\t'charLog',\n\t\t\t'helpConsole',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\t\tthis.lastState = null;\n\t\tthis.lastIdx = null;\n\t\tthis.lastReply = null;\n\n\t\tthis.chars = {};\n\n\t\tfor (let type in replyCmds) {\n\t\t\tthis.module.charLog.addEventHandler(type, this._addEvent);\n\t\t}\n\n\t\tthis.module.console.addKeymap('Alt-r', { run: this._replyAll });\n\t\tthis.module.console.addKeymap('Alt-R', { run: this._reply });\n\n\t\tthis.module.helpConsole.addShortcut({\n\t\t\tid: 'replyLastAll',\n\t\t\tusage: '<kbd>Alt</kbd> + <kbd>R</kbd>',\n\t\t\tdesc: l10n.l('consoleReplyLast.replyAllDesc', `<p>Reply to sender and receivers of recent messages. Cycle by pressing the keys repeatedly.<p>`),\n\t\t\tsortOrder: 70,\n\t\t});\n\t\tthis.module.helpConsole.addShortcut({\n\t\t\tid: 'replyLastSender',\n\t\t\tusage: '<kbd>Alt</kbd> + <kbd>Shift</kbd> + <kbd>R</kbd>',\n\t\t\tdesc: l10n.l('consoleReplyLast.replySenderDesc', `<p>Reply to sender of recent messages. Cycle by pressing the keys repeatedly.<p>`),\n\t\t\tsortOrder: 80,\n\t\t});\n\t}\n\n\t/**\n\t * Callback for keymap binding.\n\t * @param {bool} all Flag to reply to all.\n\t * @param {ConsoleState} state Console module's ConsoleState for the character.\n\t * @param {EditorView} ctx CodeMirror's EditorView.\n\t */\n\t_replyLast(all, state, ctx) {\n\t\tlet charId = state.getCtrlId();\n\t\tlet charEvents = this._getCharEvents(charId);\n\t\tlet l = charEvents.length;\n\t\t// Do nothing if we have nothing to reply to.\n\t\tif (!l) return;\n\n\t\tlet idx = this.lastIdx || 0;\n\t\tlet storeHistory = true;\n\t\tlet reply = '';\n\t\t// If it is the same state that we used last, we are cycling through the\n\t\t// events list till we find a different one. History is not stored.\n\t\tif (this.lastState == state) {\n\t\t\tstoreHistory = false;\n\t\t\tfor (let i = 0; i < l + 1; i++) {\n\t\t\t\tidx = (idx + 1) % l;\n\t\t\t\treply = getReply(charId, charEvents[idx], all);\n\t\t\t\tif (reply != this.lastReply) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\treply = getReply(charId, charEvents[idx], all);\n\t\t}\n\n\t\tthis.lastState = relistenResource(this.lastState, state, this._onStateChange);\n\t\tthis.lastIdx = idx;\n\t\tthis.lastReply = reply;\n\n\t\tthis.module.console.setCommand(charId, reply, storeHistory);\n\t}\n\n\t_addEvent(charId, ev) {\n\t\t// Ignore events, such as address, where character is neither the sender\n\t\t// nor a target.\n\t\tif (ev.char?.id != charId && !containsTarget(charId, ev)) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet charEvents = this._getCharEvents(charId);\n\t\tcharEvents.unshift(ev);\n\t\tif (charEvents.length > this.bufferSize) {\n\t\t\tcharEvents.pop();\n\t\t}\n\t\t// If we are currently cycling, add to lastIdx to match the shift.\n\t\tif (charId == this.lastState?.getCtrlId()) {\n\t\t\tthis.lastIdx++;\n\t\t}\n\t}\n\n\t_getCharEvents(charId) {\n\t\tlet charEvents = this.chars[charId];\n\t\tif (!charEvents) {\n\t\t\tcharEvents = [];\n\t\t\tthis.chars[charId] = charEvents;\n\t\t}\n\t\treturn charEvents;\n\t}\n\n\t_onStateChange() {\n\t\tif (!this.lastState) return;\n\n\t\t// Remove the stored state as we are no longer cycling.\n\t\tif (this.lastState.doc !== this.lastReply) {\n\t\t\tthis._removeLastState();\n\t\t}\n\t}\n\n\t_removeLastState() {\n\t\tthis.lastState = relistenResource(this.lastState, null, this._onStateChange);\n\t\tthis.lastIdx = null;\n\t\tthis.lastReply = null;\n\t}\n\n\tdispose() {\n\t\tthis._removeLastState();\n\t\tthis.module.console.removeKeymap('Alt-r');\n\t\tthis.module.console.removeKeymap('Alt-R');\n\t\tfor (let type in replyCmds) {\n\t\t\tthis.module.charLog.removeEventHandler(type, this._addEvent);\n\t\t}\n\t}\n}\n\nexport default ConsoleReplyLast;\n","import { Elem, Txt, Html } from 'modapp-base-component';\nimport l10n from 'modapp-l10n';\nimport escapeHtml from 'utils/escapeHtml';\nimport formatByteSize from 'utils/formatByteSize';\n\nconst txtBecomeSupporter = l10n.l('createLimits.becomeSupporter', \"Become supporter\");\nconst txtNevermind = l10n.l('createLimits.nervermind', \"Nevermind\");\nconst txtCharLimitReached = l10n.l('createLimits.charLimitReached', \"Character limit reached\");\nconst txtCharProfileLimitReachedPrune = (maxCharProfiles) => l10n.l('createLimits.charProfileLimitReachedPrune', \"You've reached the limit of {maxCharProfiles} profiles. Maybe it is time to prune some of them?\", { maxCharProfiles });\nconst txtProfileLimitReached = l10n.l('createLimits.profileLimitReached', \"Profile limit reached\");\nconst txtRoomProfileLimitReachedPrune = (maxRoomProfiles) => l10n.l('createLimits.roomProfileLimitReachedPrune', \"You've reached the limit of {maxRoomProfiles} profiles. Maybe it is time to prune some of them?\", { maxRoomProfiles });\nconst txtImageTooLarge = l10n.l('createLimits.imageTooLarge', \"Image too large\");\nconst txtImageTooLargeResize = (size) => l10n.l('createLimits.imageTooLargeResize', \"The max size of an image is {maxSize}. Maybe you can make it a bit smaller by resizing it?\", { maxSize: formatByteSize(size) });\nconst accountOverviewUrl = HUB_PATH + 'account#overview';\n\n/**\n * CreateLimits provides methods for validating if the player can create more\n * chars, rooms, or other entities.\n */\nclass CreateLimits {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\t// Bind callbacks\n\t\tthis._redirectToAccount = this._redirectToAccount.bind(this);\n\n\t\tthis.app.require([\n\t\t\t'info',\n\t\t\t'confirm',\n\t\t\t'player',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\t\tthis.coreInfo = this.module.info.getCore();\n\t}\n\n\t/**\n\t * Validates that owned chars is not at its limit, and that a new character\n\t * can be created. If limit is reached, a confirm dialog will be opened to\n\t * inform the player. Must not be called prior to being logged in.\n\t * @param {function} cb Callback called if limit is not reached.\n\t */\n\tvalidateOwnedChars(cb) {\n\t\tthis._limitSelector(\n\t\t\tthis.module.player.getChars().length,\n\t\t\tthis.coreInfo.maxOwnedChars,\n\t\t\tthis.coreInfo.adminMaxOwnedChars,\n\t\t\tthis.coreInfo.supporterMaxOwnedChars,\n\t\t\t// On limit reached\n\t\t\t(maxOwnedChars) => this.module.confirm.open(null, {\n\t\t\t\ttitle: txtCharLimitReached,\n\t\t\t\tbody: l10n.l('createLimits.charLimitReachedBody2', \"You've reached the limit of {maxOwnedChars} characters. Maybe it is time to prune some of them?\", { maxOwnedChars }),\n\t\t\t\tcancel: null,\n\t\t\t}),\n\t\t\t// On promote supporter\n\t\t\t(maxOwnedChars, supporterMaxOwnedChars) => this.module.confirm.open(() => this._redirectToAccount(), {\n\t\t\t\ttitle: txtCharLimitReached,\n\t\t\t\tconfirm: txtBecomeSupporter,\n\t\t\t\tbody: new Elem(n => n.elem('div', [\n\t\t\t\t\tn.component(new Txt(l10n.l('createLimits.charLimitReachedBody', \"You can only own {maxOwnedChars} characters.\", { maxOwnedChars }), { tagName: 'p' })),\n\t\t\t\t\tn.component(new Txt(l10n.l('createLimits.charLimitReachedSupporterLink', \"By becoming a supporter, you can raise the cap to {supporterMaxOwnedChars} characters.\", { supporterMaxOwnedChars }), { tagName: 'p' })),\n\t\t\t\t])),\n\t\t\t\tcancel: txtNevermind,\n\t\t\t\tsize: 'wide',\n\t\t\t}),\n\t\t\t// On limit not reached\n\t\t\tcb,\n\t\t);\n\t}\n\n\t/**\n\t * Validates that char profiles is not at its limit, and that a new profile\n\t * can be created. If limit is reached, a confirm dialog will be opened to\n\t * inform the player.\n\t * @param {Model} ctrl Controlled character model.\n\t * @param {function} cb Callback called if limit is not reached.\n\t */\n\tvalidateCharProfiles(ctrl, cb) {\n\t\tthis._limitSelector(\n\t\t\tctrl.profiles.length,\n\t\t\tthis.coreInfo.maxCharProfiles,\n\t\t\tthis.coreInfo.adminMaxCharProfiles,\n\t\t\tthis.coreInfo.supporterMaxCharProfiles,\n\t\t\t// On limit reached\n\t\t\t(maxCharProfiles) => this.module.confirm.open(null, {\n\t\t\t\ttitle: txtProfileLimitReached,\n\t\t\t\tbody: txtCharProfileLimitReachedPrune(maxCharProfiles),\n\t\t\t\tcancel: null,\n\t\t\t}),\n\t\t\t// On promote supporter\n\t\t\t(maxCharProfiles, supporterMaxCharProfiles) => this.module.confirm.open(() => this._redirectToAccount(), {\n\t\t\t\ttitle: txtProfileLimitReached,\n\t\t\t\tconfirm: txtBecomeSupporter,\n\t\t\t\tbody: new Elem(n => n.elem('div', [\n\t\t\t\t\tn.component(new Txt(l10n.l('createLimits.profileLimitReachedBody', \"You can only have {maxCharProfiles} profiles per character.\", { maxCharProfiles }), { tagName: 'p' })),\n\t\t\t\t\tn.component(new Txt(l10n.l('createLimits.profileLimitReachedSupporterLink', \"By becoming a supporter, you can raise the cap to {supporterMaxCharProfiles} profiles.\", { supporterMaxCharProfiles }), { tagName: 'p' })),\n\t\t\t\t])),\n\t\t\t\tcancel: txtNevermind,\n\t\t\t\tsize: 'wide',\n\t\t\t}),\n\t\t\t// On limit not reached\n\t\t\tcb,\n\t\t);\n\t}\n\n\t/**\n\t * Get a promise to a room profiles error component.\n\t * @param {Model} ctrl Controlled character model.\n\t * @param {*} opt Optional parameters for the component.\n\t * @returns {Promise.<Component>} Promise of a error message component, or null if no error.\n\t */\n\tgetCharProfilesError(ctrl, opt) {\n\t\treturn this._limitSelector(\n\t\t\tctrl.profiles.length,\n\t\t\tthis.coreInfo.maxCharProfiles,\n\t\t\tthis.coreInfo.adminMaxCharProfiles,\n\t\t\tthis.coreInfo.supporterMaxCharProfiles,\n\t\t\t// On limit reached\n\t\t\t(maxCharProfiles) => new Html(txtCharProfileLimitReachedPrune(maxCharProfiles), opt),\n\t\t\t// On promote supporter\n\t\t\t(maxCharProfiles, supporterMaxCharProfiles) => new Html(l10n.l('createLimit.maxCharProfilesPromote', `You can only have {maxCharProfiles} profiles. By <a href=\"{url}\" class=\"link\" target=\"_blank\">becoming a supporter</a>, you can raise the cap to {supporterMaxCharProfiles} profiles.`, { maxCharProfiles, supporterMaxCharProfiles, url: escapeHtml(accountOverviewUrl) }), opt),\n\t\t);\n\t}\n\n\t/**\n\t * Validates that room profiles is not at its limit, and that a new profile\n\t * can be created. If limit is reached, a confirm dialog will be opened to\n\t * inform the player.\n\t * @param {Collection} profiles Room profiles collection.\n\t * @param {function} cb Callback called if limit is not reached.\n\t */\n\tvalidateRoomProfiles(profiles, cb) {\n\t\tthis._limitSelector(\n\t\t\tprofiles.length,\n\t\t\tthis.coreInfo.maxRoomProfiles,\n\t\t\tthis.coreInfo.adminMaxRoomProfiles,\n\t\t\tthis.coreInfo.supporterMaxRoomProfiles,\n\t\t\t// On limit reached\n\t\t\t(maxRoomProfiles) => this.module.confirm.open(null, {\n\t\t\t\ttitle: txtProfileLimitReached,\n\t\t\t\tbody: txtRoomProfileLimitReachedPrune(maxRoomProfiles),\n\t\t\t\tcancel: null,\n\t\t\t}),\n\t\t\t// On promote supporter\n\t\t\t(maxRoomProfiles, supporterMaxRoomProfiles) => this.module.confirm.open(() => this._redirectToAccount(), {\n\t\t\t\ttitle: txtProfileLimitReached,\n\t\t\t\tconfirm: txtBecomeSupporter,\n\t\t\t\tbody: new Elem(n => n.elem('div', [\n\t\t\t\t\tn.component(new Txt(l10n.l('createLimits.roomProfileLimitReachedBody', \"You can only have {maxRoomProfiles} profiles per room.\", { maxRoomProfiles }), { tagName: 'p' })),\n\t\t\t\t\tn.component(new Txt(l10n.l('createLimits.roomProfileLimitReachedSupporterLink', \"By becoming a supporter, you can raise the cap to {supporterMaxRoomProfiles} profiles.\", { supporterMaxRoomProfiles }), { tagName: 'p' })),\n\t\t\t\t])),\n\t\t\t\tcancel: txtNevermind,\n\t\t\t\tsize: 'wide',\n\t\t\t}),\n\t\t\t// On limit not reached\n\t\t\tcb,\n\t\t);\n\t}\n\n\t/**\n\t * Get a promise to a room profiles error component.\n\t * @param {Collection} profiles Room profiles collection.\n\t * @param {*} opt Optional parameters for the component.\n\t * @returns {Promise.<Component>} Promise of a error message component, or null if no error.\n\t */\n\tgetRoomProfilesError(profiles, opt) {\n\t\treturn this._limitSelector(\n\t\t\tprofiles.length,\n\t\t\tthis.coreInfo.maxRoomProfiles,\n\t\t\tthis.coreInfo.adminMaxRoomProfiles,\n\t\t\tthis.coreInfo.supporterMaxRoomProfiles,\n\t\t\t// On limit reached\n\t\t\t(maxRoomProfiles) => new Html(txtRoomProfileLimitReachedPrune(maxRoomProfiles), opt),\n\t\t\t// On promote supporter\n\t\t\t(maxRoomProfiles, supporterMaxRoomProfiles) => new Html(l10n.l('createLimit.maxRoomProfilesPromote', `You can only have {maxRoomProfiles} profiles. By <a href=\"{url}\" class=\"link\" target=\"_blank\">becoming a supporter</a>, you can raise the cap to {supporterMaxRoomProfiles} profiles.`, { maxRoomProfiles, supporterMaxRoomProfiles, url: escapeHtml(accountOverviewUrl) }), opt),\n\t\t);\n\t}\n\n\t/**\n\t * Validates that the image file size is not exceeding the upload limits. If\n\t * limit is reached, a confirm dialog will be opened to inform the player.\n\t * @param {number} size File size in bytes.\n\t * @param {function} cb Callback called if limit is not reached.\n\t */\n\tvalidateImageSize(size, cb) {\n\t\tthis._limitSelector(\n\t\t\tsize,\n\t\t\tthis.coreInfo.maxImageSize,\n\t\t\tthis.coreInfo.maxImageSize,\n\t\t\tthis.coreInfo.supporterMaxImageSize,\n\t\t\t// On limit reached\n\t\t\t(maxImageSize) => this.module.confirm.open(null, {\n\t\t\t\ttitle: txtImageTooLarge,\n\t\t\t\tbody: txtImageTooLargeResize(maxImageSize),\n\t\t\t\tcancel: null,\n\t\t\t}),\n\t\t\t// On promote supporter\n\t\t\t(maxImageSize, supporterMaxImageSize) => this.module.confirm.open(() => this._redirectToAccount(), {\n\t\t\t\ttitle: txtImageTooLarge,\n\t\t\t\tconfirm: txtBecomeSupporter,\n\t\t\t\tbody: new Elem(n => n.elem('div', [\n\t\t\t\t\tn.component(new Txt(l10n.l('createLimits.roomProfileLimitReachedBody', \"The max size of an image is {maxSize}.\", { maxSize: formatByteSize(maxImageSize) }), { tagName: 'p' })),\n\t\t\t\t\tn.component(new Txt(l10n.l('createLimits.roomProfileLimitReachedSupporterLink', \"By becoming a supporter, you can increase the image max size to {supporterMaxSize}.\", { supporterMaxSize: formatByteSize(supporterMaxImageSize) }), { tagName: 'p' })),\n\t\t\t\t])),\n\t\t\t\tcancel: txtNevermind,\n\t\t\t\tsize: 'wide',\n\t\t\t}),\n\t\t\t// On limit not reached\n\t\t\tcb,\n\t\t\ttrue,\n\t\t);\n\t}\n\n\t_limitSelector(count, all, admin, supporter, onMax, onPromote, onProceed, inclusive = false) {\n\t\tlet playerMod = this.module.player;\n\t\tlet max = Math.max(\n\t\t\tall,\n\t\t\tplayerMod.hasAnyRole('admin') || playerMod.hasAnyIdRole('overseer') ? admin : 0,\n\t\t\tplayerMod.hasAnyIdRole('overseer', 'pioneer', 'supporter') ? supporter : 0,\n\t\t);\n\t\tif (inclusive ? max < count : max <= count) {\n\t\t\tif (inclusive ? supporter >= max && supporter >= count : supporter > max && supporter > count) {\n\t\t\t\treturn onPromote(max, supporter);\n\t\t\t}\n\t\t\treturn onMax(max);\n\t\t}\n\t\treturn onProceed && onProceed() || null;\n\t}\n\n\t_redirectToAccount() {\n\t\twindow.open(accountOverviewUrl, '_blank');\n\t}\n\n\tdispose() {}\n}\n\nexport default CreateLimits;\n","export const htmlStart = `<!doctype html><html lang=\"en\">`;\nexport const headStart = `<head><meta charset=\"UTF-8\"><meta name=\"viewport\" content=\"width=device-width,initial-scale=1,maximum-scale=1\">`;\nexport const titleStart = `<title>`;\nexport const titleEnd = `</title>`;\nexport const styleStart = `<style>`;\nexport const styleEnd = `</style>`;\nexport const headEnd = `</head>`;\nexport const bodyStart = `<body><div class=\"cont\">`;\nexport const bodyEnd = `</div></body>`;\nexport const htmlEnd = `</html>`;\n\nexport const style = `\nbody { font-family: \"Open Sans\", sans-serif; font-size: 16px; color: #7d818c; background-color: #161926; margin: 0; line-height: 1.4em; padding: 8px 16px; }\n.cont {\n\twidth: 100%;\n\tmax-width: 720px;\n\tposition: absolute;\n left: 50%;\n -moz-transform: translateX(-50%);\n -webkit-transform: translateX(-50%);\n transform: translateX(-50%);\n}\n.charlog--fieldset { position: relative; border: 1px solid #565961; padding: 6px 10px; border-radius: 8px; }\n.charlog--fieldset-label { color: #7d818c; position: absolute; font-size: 12px; line-height: 10px; top: -6px; left: 16px; padding: 0 4px; background: #161926; }\n.charlog--char { color: #6490a8; }\n.charlog--default { color: #7d818c; }\n.charlog--strong { color: #fffcf2; }\n.charlog--cmd { color: #c1a657; }\n.charlog--error { color: #9a593e; }\n.charlog--listitem { color: #6490a8; }\n.charlog--ooc { color: #565961; }\n.charlog--tag { font-size: 12px; color: #7d818c; position: absolute; margin-left: -12px; margin-top: -12px; }\n.charlog--pad-small { margin: 0; padding: 4px 0 2px 0; }\n.charlog--pad { margin: 0; padding: 6px 0 3px 0; }\n.charlog--pad-large { margin: 0; padding: 12px 0 6px 0; }\n.common--formattext span.ooc { color: #565961; }\n.common--formattext span.cmd { font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; color: #c1a657; }\n.common--formattext a { color: #4a9fc3; transition: color 0.2s; text-decoration: none; }\n.common--formattext a:hover { color: #69afcd; }\n.common--formattext a:active { color: #87c0d7; }\n`;\n// For code formatting support, include:\n// .charlog--code-simple { font-size: 14px; font-family: Consolas, Monaco, \"Andale Mono\", \"Ubuntu Mono\", monospace; color: #c1a657; }\n// .charlog--code, .charlog--code-inline { font-style: normal; font-size: 14px; padding: 6px 10px; background: #0f1119; border-radius: 8px; }\n// .charlog--code p, .charlog--code-inline p { font-size: 14px; margin-bottom: 2px; }\n// .charlog--code code, .charlog--code-inline code { font-size: 14px; font-family: Consolas, Monaco, \"Andale Mono\", \"Ubuntu Mono\", monospace; color: #c1a657; }\n// .charlog--code .opt::before, .charlog--code-inline .opt::before { content: \"[\"; color: #565961; }\n// .charlog--code .opt::after, .charlog--code-inline .opt::after { content: \"]\"; color: #565961; }\n// .charlog--code .param, .charlog--code-inline .param { color: #6490a8; }\n// .charlog--code .param::before, .charlog--code-inline .param::before { content: \"<\"; }\n// .charlog--code .param::after, .charlog--code-inline .param::after { content: \">\"; }\n// .charlog--code .comment, .charlog--code-inline .comment { color: #7d818c; }\n// .charlog--code sup, .charlog--code-inline sup { font-size: 75%; line-height: 0; position: relative; top: -0.5em; }\n\nexport const controlStyle = `font-size: 12px; padding: 9px 0 12px; line-height: 24px;`;\nexport const controlBorderStyle = `border-bottom: 1px solid #7d818c;`;\nexport const sayStyle = `white-space: pre-wrap; color: #a8abb2; padding: 6px 0 2px 0;`;\nexport const describeStyle = `font-size: 12px; white-space: pre-wrap; padding: 6px 0 2px 0;`;\nexport const infoStyle = `color: #565961; font-style: italic; padding-top: 4px;`;\nexport const whisperStyle = `white-space: pre-wrap; color: #a8abb2; padding: 10px 0 2px 0;`;\nexport const actionStyle = `padding: 6px 0 2px 0; font-style: italic;`;\nexport const travelRoomStyle = `padding: 16px 0 4px 0; color: #c1a657;`;\nexport const summonStyle = `padding: 10px 0 2px 0; font-style: italic;`;\nexport const warnStyle = `white-space: pre-wrap; color: #9a593e; padding: 10px 0 2px 0;`;\nexport const warnFieldsetStyle = `border-color: #9a593e;`;\nexport const warnFieldsetLabelStyle = `color: #9a593e;`;\nexport const dndStyle = `white-space: pre-wrap; padding: 10px 0 2px 0;`;\n","import Err from 'classes/Err';\nimport exportFile from 'utils/exportFile';\nimport formatISODate from 'utils/formatISODate';\nimport formatDateTime from 'utils/formatDateTime';\nimport escapeHtml from 'utils/escapeHtml';\nimport {\n\thtmlStart,\n\theadStart,\n\ttitleStart,\n\ttitleEnd,\n\tstyleStart,\n\tstyle,\n\tstyleEnd,\n\theadEnd,\n\tbodyStart,\n\tbodyEnd,\n\thtmlEnd,\n\n\tsayStyle,\n\tcontrolStyle,\n\tcontrolBorderStyle,\n\tdescribeStyle,\n\tinfoStyle,\n\twhisperStyle,\n\tactionStyle,\n\ttravelRoomStyle,\n\tsummonStyle,\n\twarnStyle,\n\twarnFieldsetStyle,\n\twarnFieldsetLabelStyle,\n\tdndStyle,\n} from './htmlTemplate';\n\nclass ExportLog {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\t// Bind callbacks\n\t\tthis._charLogConverter = this._charLogConverter.bind(this);\n\n\t\tthis.app.require([ 'charLog' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.eventTypes = {};\n\n\t\tconst eventTypes = {\n\t\t\tinfo: { style: infoStyle },\n\t\t\tcontrol: {\n\t\t\t\tconverter: (charId, ev) => this._charLogConverter(charId, ev, { noButton: true }),\n\t\t\t\tstyle: {\n\t\t\t\t\t'.ev-control': controlStyle,\n\t\t\t\t\t'.ev-control--border': controlBorderStyle,\n\t\t\t\t},\n\t\t\t},\n\t\t\tsay: { style: sayStyle },\n\t\t\tpose: { style: sayStyle },\n\t\t\twakeup: { style: actionStyle },\n\t\t\tsleep: { style: actionStyle },\n\t\t\tleave: { style: actionStyle },\n\t\t\tarrive: { style: actionStyle },\n\t\t\ttravel: { style: {\n\t\t\t\t'.ev-travel': actionStyle,\n\t\t\t\t'.ev-travel--room': travelRoomStyle,\n\t\t\t}},\n\t\t\twhisper: { style: whisperStyle },\n\t\t\tmessage: { style: whisperStyle },\n\t\t\tdescribe: { style: describeStyle },\n\t\t\tsummon: {\n\t\t\t\tconverter: (charId, ev) => this._charLogConverter(charId, ev, { noCode: true }),\n\t\t\t\tstyle: summonStyle,\n\t\t\t},\n\t\t\tjoin: {\n\t\t\t\tconverter: (charId, ev) => this._charLogConverter(charId, ev, { noCode: true }),\n\t\t\t\tstyle: summonStyle,\n\t\t\t},\n\t\t\tfollow: {\n\t\t\t\tconverter: (charId, ev) => this._charLogConverter(charId, ev, { noCode: true }),\n\t\t\t\tstyle: summonStyle,\n\t\t\t},\n\t\t\tleadRequest: {\n\t\t\t\tconverter: (charId, ev) => this._charLogConverter(charId, ev, { noCode: true }),\n\t\t\t\tstyle: summonStyle,\n\t\t\t},\n\t\t\tfollowRequest: {\n\t\t\t\tconverter: (charId, ev) => this._charLogConverter(charId, ev, { noCode: true }),\n\t\t\t\tstyle: summonStyle,\n\t\t\t},\n\t\t\tstopLead: { style: summonStyle },\n\t\t\tstopFollow: { style: summonStyle },\n\t\t\tooc: { style: sayStyle },\n\t\t\twarn: { style: {\n\t\t\t\t'.ev-warn': warnStyle,\n\t\t\t\t'.ev-warn .charlog--fieldset': warnFieldsetStyle,\n\t\t\t\t'.ev-warn .charlog--fieldset-label': warnFieldsetLabelStyle,\n\t\t\t}},\n\t\t\taction: { style: actionStyle },\n\t\t\tmail: { style: whisperStyle },\n\t\t\taddress: { style: sayStyle },\n\t\t\tdnd: { style: dndStyle },\n\t\t};\n\n\t\tfor (let k in eventTypes) {\n\t\t\tlet t = eventTypes[k];\n\t\t\tthis.addEventType(Object.assign({ id: k }, {\n\t\t\t\tconverter: t.converter || this._createCharLogConverter,\n\t\t\t\tstyle: t.style,\n\t\t\t}));\n\t\t}\n\t}\n\n\t/**\n\t * Adds an event type converter for generating HTML.\n\t * @param {object} type Event type object.\n\t * @param {string} type.id Event type id.\n\t * @param {function} [type.converter] Converter function. function(charId, ev) -> HTMLstring. Defaults to using the charLog event component factory.\n\t * @param {string|object} [type.style] Css style to add. If style is a string, the key will be assumed \".ev-<typeId>\". Otherwise the key is the selector and value is the css.\n\t * @returns {this}\n\t */\n\taddEventType(type) {\n\t\tif (this.eventTypes[type.id]) {\n\t\t\tthrow new Error(type.id + \" already registered.\");\n\t\t}\n\t\tthis.eventTypes[type.id] = {\n\t\t\tid: type.id,\n\t\t\tconverter: type.converter || this._charLogConverter,\n\t\t\tstyle: type.style,\n\t\t};\n\t\treturn this;\n\t}\n\n\tremoveEventType(typeId) {\n\t\tdelete this.eventTypes[typeId];\n\t\treturn this;\n\t}\n\n\texportHtml(char, timestamp) {\n\t\treturn this._getLog(char, timestamp).then(log => {\n\t\t\ttry {\n\t\t\t\tlet date = new Date(timestamp);\n\n\t\t\t\tlet a = [\n\t\t\t\t\thtmlStart,\n\t\t\t\t\theadStart,\n\t\t\t\t\ttitleStart,\n\t\t\t\t];\n\n\t\t\t\t// Add title\n\t\t\t\ta.push(escapeHtml(\"Log \" + char.name + ' - ' + formatDateTime(date)));\n\t\t\t\ta.push(titleEnd);\n\t\t\t\ta.push(styleStart);\n\t\t\t\ta.push(style);\n\t\t\t\tlet styleIdx = a.length;\n\t\t\t\ta.push(\"\"); // Style placeholder\n\n\t\t\t\ta.push(styleEnd);\n\t\t\t\ta.push(headEnd);\n\t\t\t\ta.push(bodyStart);\n\n\t\t\t\tlet usedTypes = {};\n\t\t\t\tfor (let ev of log) {\n\t\t\t\t\tlet t = this.eventTypes[ev.type];\n\t\t\t\t\tif (t) {\n\t\t\t\t\t\tlet v = t.converter(char.id, ev);\n\t\t\t\t\t\tif (v) {\n\t\t\t\t\t\t\tlet ec = ev.char;\n\t\t\t\t\t\t\ta.push(\n\t\t\t\t\t\t\t\t'<div class=\"ev ev-' + ev.type + '\"' + (ec\n\t\t\t\t\t\t\t\t\t? ' title=\"' + escapeHtml((ec.name + \" \" + ec.surname).trim()) + (ev.time ? \"
\" + escapeHtml(formatDateTime(new Date(ev.time))) : '') + '\"'\n\t\t\t\t\t\t\t\t\t: ev.time\n\t\t\t\t\t\t\t\t\t\t? ' title=\"' + escapeHtml(formatDateTime(new Date(ev.time))) + '\"'\n\t\t\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t\t\t) + \">\" +\n\t\t\t\t\t\t\t\tv +\n\t\t\t\t\t\t\t\t\"</div>\",\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tusedTypes[ev.type] = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\ta.push(bodyEnd);\n\t\t\t\ta.push(htmlEnd);\n\n\t\t\t\ta[styleIdx] = this._generateTypeStyles(Object.keys(usedTypes));\n\n\t\t\t\tlet out = new Blob(a, { type: 'text/html' });\n\t\t\t\tlet filename = char.name + '_' + formatISODate(date) + '_' + ('0' + date.getHours()).slice(-2) + ('0' + date.getMinutes()).slice(-2) + '.html';\n\t\t\t\texportFile(filename, out);\n\t\t\t} catch (ex) {\n\t\t\t\treturn Promise.reject(new Err('exportLog.failed', \"Failed to export log: {message}\", { message: ex.message }));\n\t\t\t}\n\t\t});\n\t}\n\n\t_getLog(char, timestamp, chunk, log) {\n\t\tchunk = chunk || 0;\n\t\tlog = log || [];\n\t\treturn this.module.charLog.getLog(char, chunk).then(l => {\n\t\t\tif (!l || !l.length) return log;\n\n\t\t\tif (!Array.isArray(l)) l = l.toArray();\n\n\t\t\tfor (let i = l.length - 1; i >= 0; i--) {\n\t\t\t\tlet ev = l[i];\n\t\t\t\tif (ev.time && ev.time < timestamp) {\n\t\t\t\t\treturn l.slice(i + 1).concat(log);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this._getLog(char, timestamp, chunk + 1, l.concat(log));\n\t\t});\n\t}\n\n\t_charLogConverter(charId, ev, opt) {\n\t\tif (ev.component) {\n\t\t\treturn null;\n\t\t}\n\t\tlet f = this.module.charLog.getEventComponentFactory(ev.type);\n\t\tlet c = f && f(charId, ev, opt);\n\t\tif (!c) return null;\n\t\tlet div = document.createElement('div');\n\t\tc.render(div);\n\t\tlet v = div.innerHTML;\n\t\tc.unrender();\n\t\treturn v;\n\t}\n\n\t_generateTypeStyles(types) {\n\t\ttypes.sort();\n\t\tlet styles = {};\n\t\tfor (let typeId of types) {\n\t\t\tlet st = this.eventTypes[typeId].style;\n\t\t\tif (st) {\n\t\t\t\tst = typeof st == 'string'\n\t\t\t\t\t? { ['.ev-' + typeId ]: st }\n\t\t\t\t\t: st;\n\n\t\t\t\tfor (let k in st) {\n\t\t\t\t\tlet csspart = st[k];\n\t\t\t\t\tlet selectors = styles[csspart];\n\t\t\t\t\tif (!selectors) {\n\t\t\t\t\t\tselectors = [];\n\t\t\t\t\t\tstyles[csspart] = selectors;\n\t\t\t\t\t}\n\t\t\t\t\tif (selectors.indexOf(k) < 0) {\n\t\t\t\t\t\tselectors.push(k);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet result = \"\";\n\t\tfor (let csspart in styles) {\n\t\t\tresult += styles[csspart].join(\", \") + \" { \" + csspart + \" }\\n\";\n\t\t}\n\t\treturn result;\n\t}\n}\n\nexport default ExportLog;\n","/**\n * Formats a Date object to an iso (1977-08-13) format.\n * @param {Date} date Date object.\n * @returns {string} Formatted string.\n */\nexport default function(date) {\n\treturn [\n\t\tdate.getFullYear(),\n\t\t('0' + (date.getMonth() + 1)).slice(-2),\n\t\t('0' + date.getDate()).slice(-2),\n\t].join('-');\n}\n","/**\n * Exports data as a file.\n * @param {string} filename Filename.\n * @param {string|Blob} data File content or a Blob object.\n * @param {string} mime Mime type for string data. Defaults to 'text/plain'\n */\nexport default function exportFile(filename, data, mime) {\n\tlet blob = data instanceof Blob ? data : new Blob([ data ], { type: mime || 'text/plain' });\n\tif (window.navigator.msSaveOrOpenBlob) {\n\t\twindow.navigator.msSaveBlob(blob, filename);\n\t} else {\n\t\tlet elem = window.document.createElement('a');\n\t\telem.href = window.URL.createObjectURL(blob);\n\t\telem.download = filename;\n\t\tdocument.body.appendChild(elem);\n\t\telem.click();\n\t\tdocument.body.removeChild(elem);\n\t}\n}\n","/**\n * Get the fullscreen element.\n * @returns {?Element} Fullscreen element if fullscreen is active, otherwise null.\n */\nexport function fullscreenElement() {\n\treturn document.fullscreenElement || null;\n}\n\n/**\n * Requests fullscreen\n * @param {Element} element DOM element.\n * @param {object} opt Optional params for requestFullscreen.\n * @returns {Promise} Promise to the full screen\n */\nexport function requestFullscreen(element, opt) {\n\treturn Promise.resolve(element.requestFullscreen\n\t\t? element.requestFullscreen(opt)\n\t\t: element.mozRequestFullScreen\n\t\t\t? element.mozRequestFullScreen(opt)\n\t\t\t: element.webkitRequestFullScreen\n\t\t\t\t? element.webkitRequestFullScreen(opt)\n\t\t\t\t: Promise.reject(new Error(\"requestFullscreen not supported\")),\n\t);\n}\n\n/**\n * Exits fullscreen\n * @returns {Promise} Promise to exiting full screen\n */\nexport function exitFullscreen() {\n\treturn Promise.resolve(fullscreenElement()\n\t\t? document.exitFullscreen\n\t\t\t? document.exitFullscreen()\n\t\t\t: document.mozCancelFullScreen\n\t\t\t\t? document.mozCancelFullScreen()\n\t\t\t\t: document.webkitExitFullscreen\n\t\t\t\t\t? document.webkitExitFullscreen()\n\t\t\t\t\t: Promise.reject(new Error(\"exitFullscreen not supported\"))\n\t\t: null,\n\t);\n}\n\n/**\n * Check if fullscreen is enabled in the browser.\n * @returns {boolean} True if fullscreen can be activated calling requestFullscreen, otherwise false.\n */\nexport function fullscreenEnabled() {\n\treturn document.fullscreenEnabled ||\n\t\tdocument.mozFullScreenEnabled ||\n\t\tdocument.documentElement.webkitRequestFullScreen;\n}\n","import { Elem, Txt } from 'modapp-base-component';\nimport { Model } from 'modapp-resource';\nimport l10n from 'modapp-l10n';\nimport FAIcon from 'components/FAIcon';\nimport * as fullscreen from 'utils/fullscreen';\n\nconst txtFullscreen = l10n.l('fullscreen.fullscreen', \"Fullscreen\");\nconst txtFramed = l10n.l('fullscreen.framed', \"Framed\");\n\n/**\n * Fullscreen draws player panel.\n */\nclass Fullscreen {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\t// Bind callbacks\n\t\tthis._onClick = this._onClick.bind(this);\n\n\t\tthis.app.require([\n\t\t\t'playerTools',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\n\t\tthis.model = new Model({ data: this._getData(), eventBus: this.app.eventBus });\n\t\tthis.fullscreenPromise = null;\n\n\t\t// Add kebab menu tool\n\t\tif (this.model.fullscreenEnabled) {\n\t\t\tthis.module.playerTools.addTool({\n\t\t\t\tid: 'fullscreen',\n\t\t\t\tsortOrder: 5,\n\t\t\t\tcomponentFactory: click => {\n\t\t\t\t\tthis.model.set(this._getData());\n\t\t\t\t\treturn new Elem(n => n.elem('div', {\n\t\t\t\t\t\tclassName: 'kebabmenu--itembtn flex-row pad8',\n\t\t\t\t\t\tevents: { click },\n\t\t\t\t\t}, [\n\t\t\t\t\t\tn.elem('div', { className: 'kebabmenu--itemicon flex-auto' }, [\n\t\t\t\t\t\t\tn.component(new FAIcon(this.model.isFullscreen ? 'compress' : 'expand')),\n\t\t\t\t\t\t]),\n\t\t\t\t\t\tn.component(new Txt(\n\t\t\t\t\t\t\tthis.model.isFullscreen\n\t\t\t\t\t\t\t\t? txtFramed\n\t\t\t\t\t\t\t\t: txtFullscreen,\n\t\t\t\t\t\t\t{ className: 'flex-1' },\n\t\t\t\t\t\t)),\n\t\t\t\t\t]));\n\t\t\t\t},\n\t\t\t\tonClick: this._onClick,\n\t\t\t});\n\t\t}\n\t}\n\n\tgetModel() {\n\t\treturn this.model;\n\t}\n\n\t_onClick() {\n\t\tthis.fullscreenPromise = this.fullscreenPromise ||\n\t\t\t(this.model.isFullscreen\n\t\t\t\t? fullscreen.exitFullscreen()\n\t\t\t\t: fullscreen.requestFullscreen(document.documentElement)\n\t\t\t)\n\t\t\t\t.then(() => this.model.set(this._getData()))\n\t\t\t\t.catch(err => console.error(err))\n\t\t\t\t.then(() => this.fullscreenPromise = null);\n\t}\n\n\t_getData() {\n\t\treturn {\n\t\t\tisFullscreen: !!fullscreen.fullscreenElement(),\n\t\t\tfullscreenEnabled: fullscreen.fullscreenEnabled(),\n\t\t};\n\t}\n\n\tdispose() {\n\t\tif (this.model.fullscreenEnabled) {\n\t\t\tthis.module.playerTools.removeTool('fullscreen');\n\t\t}\n\t}\n}\n\nexport default Fullscreen;\n","import { ModelComponent } from 'modapp-resource-component';\nimport l10n from 'modapp-l10n';\nimport LabelToggleBox from 'components/LabelToggleBox';\n\n/**\n * HighlightSettings adds a settings tool for CharLog to PagePlayerSettings.\n */\nclass HighlightSettings {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'settings', 'pagePlayerSettings', 'confirm' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\n\t\t// Settings\n\t\tthis.settingsPromise = this.module.settings.loadSettings('highlight', {\n\t\t\thighlightTriggers: true,\n\t\t\thighlightMentionMessages: true,\n\t\t\thighlightOwnMessages: true,\n\t\t});\n\n\t\tthis.settingsPromise.then(settings => {\n\t\t\tthis.module.pagePlayerSettings.addTool({\n\t\t\t\tid: 'highlightTriggers',\n\t\t\t\tsortOrder: 30,\n\t\t\t\tcomponentFactory: (user, player, state) => new ModelComponent(\n\t\t\t\t\tsettings,\n\t\t\t\t\tnew LabelToggleBox(l10n.l('highlightSettings.highlightTriggers', \"Highlight triggers\"), false, {\n\t\t\t\t\t\tclassName: 'common--formmargin',\n\t\t\t\t\t\tonChange: (v, c) => settings.set({ highlightTriggers: v }),\n\t\t\t\t\t\tpopupTip: l10n.l('highlightSettings.highlightTriggersInfo', \"Highlight your character's name and other mention triggers in the chat log.\"),\n\t\t\t\t\t\tpopupTipClassName: 'popuptip--width-s',\n\t\t\t\t\t}),\n\t\t\t\t\t(m, c) => c.setValue(settings.highlightTriggers, false),\n\t\t\t\t),\n\t\t\t});\n\t\t\tthis.module.pagePlayerSettings.addTool({\n\t\t\t\tid: 'highlightMentionMessages',\n\t\t\t\tsortOrder: 31,\n\t\t\t\tcomponentFactory: (user, player, state) => new ModelComponent(\n\t\t\t\t\tsettings,\n\t\t\t\t\tnew LabelToggleBox(l10n.l('highlightSettings.highlightMentionMessages', \"Highlight messages\"), false, {\n\t\t\t\t\t\tclassName: 'common--formmargin',\n\t\t\t\t\t\tonChange: (v, c) => settings.set({ highlightMentionMessages: v }),\n\t\t\t\t\t\tpopupTip: l10n.l('highlightSettings.highlightMentionMessagesInfo', \"Highlight communication either directly targeting your character, or in which your character is mentioned.\"),\n\t\t\t\t\t\tpopupTipClassName: 'popuptip--width-s',\n\t\t\t\t\t}),\n\t\t\t\t\t(m, c) => c.setValue(settings.highlightMentionMessages, false),\n\t\t\t\t),\n\t\t\t});\n\t\t\tthis.module.pagePlayerSettings.addTool({\n\t\t\t\tid: 'highlightOwnMessages',\n\t\t\t\tsortOrder: 32,\n\t\t\t\tcomponentFactory: (user, player, state) => new ModelComponent(\n\t\t\t\t\tsettings,\n\t\t\t\t\tnew LabelToggleBox(l10n.l('highlightSettings.highlightOwnMessages', \"Highlight own messages\"), false, {\n\t\t\t\t\t\tclassName: 'common--formmargin',\n\t\t\t\t\t\tonChange: (v, c) => settings.set({ highlightOwnMessages: v }),\n\t\t\t\t\t\tpopupTip: l10n.l('highlightSettings.highlightOwnMessagesInfo', \"Highlight communication sent by your own character.\"),\n\t\t\t\t\t\tpopupTipClassName: 'popuptip--width-s',\n\t\t\t\t\t}),\n\t\t\t\t\t(m, c) => c.setValue(settings.highlightOwnMessages, false),\n\t\t\t\t),\n\t\t\t});\n\t\t});\n\t}\n\n\t/**\n\t * @typedef {object} HighlightSettings\n\t * @property {bool} highlightTriggers Flag telling if mention triggers should be highlighted in chat log text.\n\t * @property {bool} highlightMentionMessages Flag telling if communication messages mentioning the character should be highlighted as a whole.\n\t * @property {bool} highlightOwnMessages Flag telling if communication from your character should be highlighted as a whole.\n\t */\n\n\t/**\n\t * Returns a promise to the highlightTriggers settings.\n\t * @returns {Promise.<HighlightSettings>} Promise of settings.\n\t */\n\tgetSettingsPromise() {\n\t\treturn this.settingsPromise;\n\t}\n\n\tdispose() {\n\t\tthis.module.pagePlayerSettings.removeTool('highlightTriggers');\n\t\tthis.module.pagePlayerSettings.removeTool('highlightMentionMessages');\n\t\tthis.module.pagePlayerSettings.removeTool('highlightOwnMessages');\n\t}\n}\n\nexport default HighlightSettings;\n","import { filterTriggers } from 'utils/formatText';\nimport { isTargeted } from 'utils/charEvent';\n\n\nconst msgEvents = {\n\tsay: ev => ev.msg,\n\tooc: ev => ev.msg,\n\tpose: ev => ev.msg,\n\tdescribe: ev => ev.msg,\n\tmessage: ev => ev.msg,\n\twhisper: ev => ev.msg,\n\tmail: ev => ev.msg,\n};\n\n/**\n * HighlightTriggers handles muting of events.\n */\nclass HighlightTriggers {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'charLog',\n\t\t\t'player',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\n\t\tthis.module.charLog.addEventModifier({\n\t\t\tid: 'highlightTriggers',\n\t\t\tsortOrder: 10,\n\t\t\tcallback: this._applyModifications.bind(this),\n\t\t});\n\t}\n\n\t_applyModifications(ev, ctrl, mod) {\n\t\tlet settings = ctrl.puppeteer\n\t\t\t? this.module.player.getPuppet(ctrl.id, ctrl.puppeteer.id)?.settings\n\t\t\t: this.module.player.getOwnedChar(ctrl.id)?.settings;\n\t\tif (!settings) {\n\t\t\tconsole.error(\"No settings found for char: \", ctrl);\n\t\t\treturn;\n\t\t}\n\n\t\tlet f = msgEvents[ev.type];\n\t\tif (f) {\n\t\t\tlet msg = f(ev);\n\t\t\tif (typeof msg == 'string') {\n\t\t\t\tlet triggers = settings && settings.triggers\n\t\t\t\t\t? settings.triggers.toArray()\n\t\t\t\t\t: [];\n\n\t\t\t\tlet filteredTriggers = filterTriggers(msg, triggers);\n\t\t\t\tif (filteredTriggers) {\n\t\t\t\t\tmod.triggers = filteredTriggers;\n\t\t\t\t\tmod.mentioned = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (isTargeted(ctrl.id, ev)) {\n\t\t\tmod.targeted = true;\n\t\t}\n\t}\n\n\tdispose() {\n\t\tthis.module.charLog.removeEventModifier('highlightTriggers');\n\t}\n}\n\nexport default HighlightTriggers;\n","import { ModelWrapper } from 'modapp-resource';\n\n/**\n * Info fetches info models.\n */\nclass Info {\n\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\tthis.params = params;\n\n\t\tthis.app.require([ 'api', 'auth' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t\tthis.core = new ModelWrapper(null, { eventBus: this.app.eventBus });\n\t\tthis.tag = new ModelWrapper(null, { eventBus: this.app.eventBus });\n\t\tthis.mail = new ModelWrapper(null, { eventBus: this.app.eventBus });\n\t\tthis.note = new ModelWrapper(null, { eventBus: this.app.eventBus });\n\t\tthis.report = new ModelWrapper(null, { eventBus: this.app.eventBus });\n\t\tthis.support = new ModelWrapper(null, { eventBus: this.app.eventBus });\n\t\tthis.client = new ModelWrapper(Object.assign({ version: APP_VERSION }, this.params.client), { eventBus: this.app.eventBus });\n\n\t\tthis.module.auth.getUserPromise().then(() => {\n\t\t\tthis.module.api.get('core.info').then(info => {\n\t\t\t\tif (this.core) {\n\t\t\t\t\tthis.core.setModel(info);\n\t\t\t\t}\n\t\t\t}).catch(err => console.error(\"Failed to get core info: \", err));\n\n\t\t\tthis.module.api.get('tag.info').then(info => {\n\t\t\t\tif (this.tag) {\n\t\t\t\t\tthis.tag.setModel(info);\n\t\t\t\t}\n\t\t\t}).catch(err => console.error(\"Failed to get tag info: \", err));\n\n\t\t\tthis.module.api.get('mail.info').then(info => {\n\t\t\t\tif (this.mail) {\n\t\t\t\t\tthis.mail.setModel(info);\n\t\t\t\t}\n\t\t\t}).catch(err => console.error(\"Failed to get mail info: \", err));\n\n\t\t\tthis.module.api.get('note.info').then(info => {\n\t\t\t\tif (this.note) {\n\t\t\t\t\tthis.note.setModel(info);\n\t\t\t\t}\n\t\t\t}).catch(err => console.error(\"Failed to get note info: \", err));\n\n\t\t\tthis.module.api.get('report.info').then(info => {\n\t\t\t\tif (this.report) {\n\t\t\t\t\tthis.report.setModel(info);\n\t\t\t\t}\n\t\t\t}).catch(err => console.error(\"Failed to get report info: \", err));\n\n\t\t\tthis.module.api.get('support.info').then(info => {\n\t\t\t\tif (this.support) {\n\t\t\t\t\tthis.support.setModel(info);\n\t\t\t\t}\n\t\t\t}).catch(err => console.error(\"Failed to get support info: \", err));\n\n\t\t\tthis.module.api.get('client.web.info').then(info => {\n\t\t\t\tif (this.client) {\n\t\t\t\t\tthis.client.setModel(info);\n\t\t\t\t}\n\t\t\t}).catch(err => console.error(\"Failed to get client info: \", err));\n\t\t});\n\t}\n\n\tgetCore() {\n\t\treturn this.core;\n\t}\n\n\tgetTag() {\n\t\treturn this.tag;\n\t}\n\n\tgetMail() {\n\t\treturn this.mail;\n\t}\n\n\tgetNote() {\n\t\treturn this.note;\n\t}\n\n\tgetReport() {\n\t\treturn this.report;\n\t}\n\n\tgetSupport() {\n\t\treturn this.support;\n\t}\n\n\tgetClient() {\n\t\treturn this.client;\n\t}\n\n\tdispose() {\n\t\tthis.core.dispose();\n\t\tthis.core = null;\n\t\tthis.tag.dispose();\n\t\tthis.tag = null;\n\t\tthis.mail.dispose();\n\t\tthis.mail = null;\n\t\tthis.note.dispose();\n\t\tthis.note = null;\n\t\tthis.report.dispose();\n\t\tthis.report = null;\n\t\tthis.support.dispose();\n\t\tthis.support = null;\n\t\tthis.client.dispose();\n\t\tthis.client = null;\n\t}\n}\n\nexport default Info;\n","import { Elem, Txt } from 'modapp-base-component';\nimport l10n from 'modapp-l10n';\nimport FAIcon from 'components/FAIcon';\n\nclass LogoutToolComponent {\n\tconstructor(module) {\n\t\tthis.module = module;\n\t}\n\n\trender(el) {\n\t\tthis.elem = new Elem(n => n.elem('button', { className: 'btn medium logouttool lighten', events: {\n\t\t\tclick: () => this.module.self.logout(),\n\t\t}}, [\n\t\t\tn.component(new FAIcon('sign-out')),\n\t\t\tn.component(new Txt(l10n.l('playerPanel.logout', \"Logout\"))),\n\t\t]));\n\t\treturn this.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n}\n\nexport default LogoutToolComponent;\n","import l10n from 'modapp-l10n';\nimport LogoutToolComponent from './LogoutToolComponent';\nimport './logoutTool.scss';\n\n/**\n * LogoutTool adds the logout tool.\n */\nclass LogoutTool {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'playerTools',\n\t\t\t'player',\n\t\t\t'confirm',\n\t\t\t'auth',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\n\t\t// Add logout tool\n\t\tthis.module.playerTools.addTool({\n\t\t\tid: 'logout',\n\t\t\tsortOrder: 1000,\n\t\t\tname: l10n.l('playerPanel.logout', \"Logout\"),\n\t\t\ticon: 'sign-out',\n\t\t\tonClick: () => this.logout(),\n\t\t});\n\n\t\t// Add logout footer tool\n\t\tthis.module.playerTools.addFooterTool({\n\t\t\tid: 'logout',\n\t\t\tsortOrder: 10,\n\t\t\tcomponentFactory: () => new LogoutToolComponent(this.module),\n\t\t\tclassName: 'flex-1',\n\t\t});\n\t}\n\n\tdispose() {\n\t\tthis.module.playerTools.removeFooterTool('logout');\n\t}\n\n\tlogout() {\n\t\treturn (this.module.player.getControlled() || []).length\n\t\t\t? this.module.confirm.open(() => this.module.auth.logout(), {\n\t\t\t\ttitle: l10n.l('playerPanel.confirmLogout', \"Confirm logout\"),\n\t\t\t\tbody: [\n\t\t\t\t\tl10n.l('playerPanel.logoutBody1', \"Some characters are still awake.\"),\n\t\t\t\t\tl10n.l('playerPanel.logoutBody2', \"Do you still wish to logout?\"),\n\t\t\t\t],\n\t\t\t\tconfirm: l10n.l('playerPanel.logout', \"Logout\"),\n\t\t\t})\n\t\t\t: this.module.auth.logout();\n\t}\n}\n\nexport default LogoutTool;\n","import { Model } from 'modapp-resource';\n\nconst defaultQueries = {\n\tcanHover: '(hover: hover)',\n\tpointerCoarse: '(pointer: coarse)',\n};\n\n/**\n * Media provides a model with css media information using media queries.\n */\nclass Media {\n\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\tthis.params = params;\n\n\t\tthis._init();\n\t}\n\n\t_init() {\n\t\tthis.queries = {};\n\t\tlet data = {};\n\t\tfor (let k in defaultQueries) {\n\t\t\tdata[k] = this._addQuery(k, defaultQueries[k]);\n\t\t}\n\n\t\tthis.model = new Model({ data, eventBus: this.app.eventBus });\n\t}\n\n\tgetModel() {\n\t\treturn this.model;\n\t}\n\n\t_onQueryChange(k, e) {\n\t\tthis.model.set({ [k]: e.matches });\n\t}\n\n\t_addQuery(k, query) {\n\t\tlet mql = window.matchMedia(query);\n\t\tlet cb = this._onQueryChange.bind(this, k);\n\t\tmql.addEventListener('change', cb);\n\t\tthis.queries[k] = { mql, cb };\n\t\treturn mql.matches;\n\t}\n\n\t_removeQuery(k) {\n\t\tlet o = this.queries[k];\n\t\to.mql.removeEventListener('change', o.cb);\n\t\tdeleted(this.queries[k]);\n\t}\n\n\tdispose() {\n\t\tfor (let k in this.queries) {\n\t\t\tthis._removeQuery(k);\n\t\t}\n\t}\n}\n\nexport default Media;\n","import { Context } from 'modapp-base-component';\nimport { ModelComponent } from 'modapp-resource-component';\nimport { ModelWrapper } from 'modapp-resource';\nimport './mobileCharToggle.scss';\n\n/**\n * MobileCharToggle adds an chat icon overlay to the activePanel main area that\n * is used to toggle open the mobile char panel.\n */\nclass MobileCharToggle {\n\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'charLog',\n\t\t\t'avatar',\n\t\t\t'charPages',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\n\t\tthis.module.charLog.addOverlay({\n\t\t\tid: 'mobileCharToggle',\n\t\t\tcomponentFactory: (char, state, layoutId) => new Context(\n\t\t\t\t() => new ModelWrapper(char, { eventBus: this.app.eventBus }),\n\t\t\t\tmodel => model.dispose(),\n\t\t\t\tmodel => new ModelComponent(\n\t\t\t\t\tchar,\n\t\t\t\t\tnew ModelComponent(\n\t\t\t\t\t\tnull,\n\t\t\t\t\t\tthis.module.avatar.newAvatar(model, {\n\t\t\t\t\t\t\tsize: 'medium',\n\t\t\t\t\t\t\tclassName: 'mobilechartoggle',\n\t\t\t\t\t\t\tevents: {\n\t\t\t\t\t\t\t\tclick: (c, ev) => {\n\t\t\t\t\t\t\t\t\tthis.module.charPages.openPanel();\n\t\t\t\t\t\t\t\t\tev.preventDefault();\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t(m, c) => model.setModel(m\n\t\t\t\t\t\t\t? m.char || m.unseen\n\t\t\t\t\t\t\t: char,\n\t\t\t\t\t\t),\n\t\t\t\t\t),\n\t\t\t\t\t(m, c) => c.setModel(m.lookingAt),\n\t\t\t\t),\n\t\t\t),\n\t\t\tfilter: (char, layoutId) => layoutId == 'mobile',\n\t\t});\n\t}\n\n\tdispose() {\n\t\tthis.module.charLog.removeOverlay('mobileCharToggle');\n\t}\n}\n\nexport default MobileCharToggle;\n","import Err from 'classes/Err';\n\nconst muteStoragePrefix = 'mute.';\n\nconst travelEvents = {\n\ttravel: true,\n\tarrive: true,\n\tleave: true,\n\twakeup: true,\n\tsleep: true,\n};\n\nconst unmutableEvents = {\n\twarn: true,\n\tfollow: true,\n\tstopFollow: true,\n\tstopLead: true,\n\tdnd: true,\n};\n\nconst oocEventType = 'ooc';\nconst messageEventType = 'message';\n\nconst alreadyMutedErrs = {\n\tmuteOoc: new Err('mute.oocAlreadyMuted', \"OOC messages are already getting muted.\"),\n\tmuteMessage: new Err('mute.messagesAlreadyMuted', \"Messages are already getting muted.\"),\n\tmuteTravel: new Err('mute.travelAlreadyMuted', \"Travel messages are already getting muted.\"),\n};\n\nconst notMutedErrs = {\n\tmuteOoc: new Err('mute.oocNotMuted', \"OOC messages are not being muted.\"),\n\tmuteMessage: new Err('mute.messagesNotMuted', \"Messages are not being muted.\"),\n\tmuteTravel: new Err('mute.travelNotMuted', \"Travel messages are not being muted.\"),\n};\n\n/**\n * Mute handles muting of events.\n */\nclass Mute {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'player',\n\t\t\t'charLog',\n\t\t\t'charFocus',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\n\t\tthis.module.charLog.addEventModifier({\n\t\t\tid: 'mute',\n\t\t\tsortOrder: 0,\n\t\t\tcallback: this._applyModifications.bind(this),\n\t\t});\n\n\t\t// Migrate localStorage stored settings to server.\n\t\t// [TODO] Remove after 2025-01-01\n\t\tthis._migrateMute('.ooc', 'muteOoc');\n\t\tthis._migrateMute('.message', 'muteMessage');\n\t\tthis._migrateMute('.travel', 'muteTravel');\n\t\tthis._migrateMuteChars();\n\t}\n\n\t/**\n\t * Sets the mute ooc character setting.\n\t * @param {Model} ctrl Controlled character model.\n\t * @param {boolean} [muteOoc] Flag to set mute ooc to. Defaults to toggle.\n\t * @param {boolean} [strict] Flag to set reject the promise if the value is already set.\n\t * @returns {Promise} Promise to setting being set.\n\t */\n\ttoggleMuteOoc(ctrl, muteOoc, strict) {\n\t\treturn this._toggleMute('muteOoc', ctrl, muteOoc, strict);\n\t}\n\n\t/**\n\t * Sets the mute messages character setting.\n\t * @param {Model} ctrl Controlled character model.\n\t * @param {boolean} muteMessage Flag to set mute messages to. Detaults to toggle.\n\t * @param {boolean} [strict] Flag to set reject the promise if the value is already set.\n\t * @returns {Promise} Promise to setting being set.\n\t */\n\ttoggleMuteMessage(ctrl, muteMessage, strict) {\n\t\treturn this._toggleMute('muteMessage', ctrl, muteMessage, strict);\n\t}\n\n\t/**\n\t * Sets the mute travel character setting.\n\t * @param {Model} ctrl Controlled character model.\n\t * @param {boolean} muteTravel Flag to set mute travel to. Defaults to toggle.\n\t * @param {boolean} [strict] Flag to set reject the promise if the value is already set.\n\t * @returns {Promise} Promise to setting being set.\n\t */\n\ttoggleMuteTravel(ctrl, muteTravel, strict) {\n\t\treturn this._toggleMute('muteTravel', ctrl, muteTravel, strict);\n\t}\n\n\t/**\n\t * Mutes or unmutes a characters.\n\t * @param {Model} charId ID of character to mute.\n\t * @param {boolean} [muteChar] Flag to mute or unmute character. Toggle if omitted.\n\t * @returns {Promise} Promise to the character being muted/unmuted.\n\t */\n\ttoggleMuteChar(charId, muteChar) {\n\t\tlet player = this.module.player.getPlayer();\n\t\tmuteChar = typeof muteChar == 'undefined' ? !player.mutedChars.props[charId] : !!muteChar;\n\t\treturn player.call('muteChars', {\n\t\t\tchars: { [charId]: muteChar },\n\t\t});\n\t}\n\n\t_toggleMute(prop, ctrl, mute, strict) {\n\t\tlet oldMute = ctrl.settings[prop];\n\t\tmute = typeof mute == 'undefined' ? !oldMute : !!mute;\n\t\tif (strict && mute == oldMute) {\n\t\t\treturn Promise.reject((mute ? alreadyMutedErrs : notMutedErrs)[prop]);\n\t\t}\n\t\treturn this.module.player.getPlayer().call('setCharSettings', {\n\t\t\tcharId: ctrl.id,\n\t\t\tpuppeteerId: ctrl.puppeteer?.id || undefined,\n\t\t\t[prop]: mute,\n\t\t});\n\t}\n\n\t/**\n\t * Checks if a character is muted.\n\t * @param {string} charId Character ID\n\t * @returns {bool} True if muted, otherwise false.\n\t */\n\tisMutedChar(charId) {\n\t\treturn !!(charId && this.module.player.getPlayer()?.mutedChars.props[charId]);\n\t}\n\n\t// Migrates mute settings from local storage over to backend. Remove after 2025-01-01.\n\tasync _migrateMute(type, prop) {\n\t\tif (!localStorage) return;\n\n\t\tlet player = await this.module.player.getPlayerPromise();\n\t\tlet key = muteStoragePrefix + player.id + type;\n\t\tlet raw = localStorage.getItem(key);\n\t\tif (raw) {\n\t\t\ttry {\n\t\t\t\tlet chars = JSON.parse(raw);\n\t\t\t\tfor (let charId in chars) {\n\t\t\t\t\tif (chars[charId]) {\n\t\t\t\t\t\t// Await to avoid spamming too much\n\t\t\t\t\t\tawait player.call('setCharSettings', {\n\t\t\t\t\t\t\tcharId: charId,\n\t\t\t\t\t\t\t[prop]: true,\n\t\t\t\t\t\t}).catch(err => {\n\t\t\t\t\t\t\t// Char not found is considered a non-error.\n\t\t\t\t\t\t\tif (err.code != 'core.charNotFound') {\n\t\t\t\t\t\t\t\tthrow err;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\tawait new Promise(resolve => setTimeout(resolve, 1000)); // Migrate one every second to avoid flooding.\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Once successfully migrated, delete key.\n\t\t\t\tlocalStorage.removeItem(key);\n\t\t\t} catch (ex) {\n\t\t\t\tconsole.log(\"Error migrating \" + prop + \":\", ex);\n\t\t\t}\n\t\t}\n\t}\n\n\t// Migrates muted chars from local storage over to backend. Remove after 2025-01-01.\n\tasync _migrateMuteChars() {\n\t\tif (!localStorage) return;\n\n\t\tlet player = await this.module.player.getPlayerPromise();\n\t\tlet key = muteStoragePrefix + player.id + '.chars';\n\t\tlet raw = localStorage.getItem(key);\n\t\tif (raw) {\n\t\t\ttry {\n\t\t\t\tlet chars = JSON.parse(raw);\n\t\t\t\tif (Object.keys(chars).length) {\n\t\t\t\t\tawait player.call('muteChars', { chars });\n\t\t\t\t}\n\t\t\t\t// Once successfully migrated, delete key.\n\t\t\t\tlocalStorage.removeItem(key);\n\t\t\t} catch (ex) {\n\t\t\t\tconsole.log(\"Error migrating muted chars: \", ex);\n\t\t\t}\n\t\t}\n\t}\n\n\t_applyModifications(ev, ctrl, mod) {\n\t\tlet muted = false;\n\t\tlet settings = ctrl.settings;\n\t\tlet charId = ev.char && ev.char.id;\n\t\tif (settings.muteTravel) {\n\t\t\tif (travelEvents[ev.type] && charId != ctrl.id && !this.module.charFocus.hasFocus(ctrl.id, charId)) {\n\t\t\t\tmuted = true;\n\t\t\t}\n\t\t}\n\n\t\tif (charId != ctrl.id && settings.muteOoc && (ev.ooc || ev.type === oocEventType)) {\n\t\t\tmuted = true;\n\t\t}\n\n\t\tif (charId != ctrl.id && settings.muteMessage && ev.type === messageEventType) {\n\t\t\tmuted = true;\n\t\t}\n\n\t\tif (!muted && this.isMutedChar(charId) && !unmutableEvents[ev.type]) {\n\t\t\tmuted = true;\n\t\t}\n\n\t\tif (muted) {\n\t\t\tmod.muted = true;\n\t\t}\n\t}\n\n\tdispose() {\n\t\tthis.module.charLog.removeEventModifier('mute');\n\t}\n}\n\nexport default Mute;\n","import { Elem, Txt } from 'modapp-base-component';\nimport { Model } from 'modapp-resource';\nimport l10n from 'modapp-l10n';\nimport PopupTip from 'components/PopupTip';\nimport listenResource from 'utils/listenResource';\nimport './onboarding.scss';\n\n/**\n * Onboarding handles onboarding popup tips for new players.\n *\n * It shows only a single popuptip at a time, and only as long as its step\n * is not completed. Multiple popuptip can use the same step.\n */\nclass Onboarding {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\t\tthis.params = params;\n\n\t\t// Bind callbacks\n\t\tthis._updateModel = this._updateModel.bind(this);\n\n\t\tthis.app.require([\n\t\t\t'screen',\n\t\t\t'player',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\n\t\tthis.model = new Model({ data: {\n\t\t\tcreateChar: false,\n\t\t\twakeupChar: false,\n\t\t}, eventBus: this.app.eventBus });\n\n\t\tthis.player = null;\n\n\t\tthis.module.player.getPlayerPromise().then(player => {\n\t\t\tif (!this.model) return;\n\n\t\t\tthis.player = player;\n\t\t\tthis._setListeners(true);\n\t\t\tthis._updateModel();\n\t\t});\n\n\t\tthis.tips = [];\n\t}\n\n\tgetModel() {\n\t\treturn this.model;\n\t}\n\n\t/**\n\t * Shows an onboarding tooltip.\n\t * @param {string} tipId Tip ID.\n\t * @param {Element} el Element to track.\n\t * @param {object} params Parameters.\n\t * @param {LocaleString|Component} [params.title] Title text.\n\t * @param {LocaleString|Component} params.content Tooltip content.\n\t * @param {string} [params.position] Position of the tooltip. May be 'left', 'right', 'top', 'bottom'. Defaults to 'right'. }\n\t * @param {Element} [params.parent] Parent element to render the tip inside. Defaults to body.\n\t * @param {number} [params.priority] Priority.\n\t */\n\topenTip(tipId, el, params) {\n\t\tif (!el) return;\n\n\t\tlet current = this._current();\n\t\t// Prevent reopening the same tip.\n\t\tif (current?.tipId == tipId) return;\n\n\t\tthis._clear(tipId);\n\n\t\tlet parent = params.parent || document.body;\n\t\tlet popupTip = new PopupTip(new Elem(n => n.elem('div', { className: 'onboarding--tip-body' }, [\n\t\t\tn.component(params.title\n\t\t\t\t? typeof params.title == 'string' || l10n.isLocaleString(params.title)\n\t\t\t\t\t? new Txt(params.title, { tagName: 'h3' })\n\t\t\t\t\t: params.title\n\t\t\t\t: null,\n\t\t\t),\n\t\t\tn.component(typeof params.content == 'string' || l10n.isLocaleString(params.content)\n\t\t\t\t? new Txt(params.content)\n\t\t\t\t: params.content,\n\t\t\t),\n\t\t])), {\n\t\t\tnoIcon: true,\n\t\t\tnoToggle: true,\n\t\t\tposition: params.position || 'right',\n\t\t\tclassName: 'onboarding--tip popuptip--width-m',\n\t\t\ttrack: el,\n\t\t});\n\t\tpopupTip.toggle(false);\n\t\tlet o = { tipId, popupTip, parent, priority: params.priority || 0 };\n\t\tthis.tips.push(o);\n\t\tthis.tips.sort((a, b) => a.priority - b.priority);\n\n\t\t// If we have a new tip with highest priority, unrender the previous and\n\t\t// render the new.\n\t\tlet newCurrent = this._current();\n\t\tif (newCurrent != current) {\n\t\t\tthis._unrenderTip(current);\n\t\t\tthis._renderTip(newCurrent);\n\t\t}\n\t}\n\n\t_renderTip(o) {\n\t\to.popupTip.toggle(false);\n\t\to.popupTip.render(o.parent);\n\t\to.rendered = true;\n\t\tsetTimeout(() => {\n\t\t\tif (o.rendered) {\n\t\t\t\to.popupTip.toggle(true);\n\t\t\t}\n\t\t}, 300);\n\t}\n\n\t_unrenderTip(o) {\n\t\tif (o?.rendered) {\n\t\t\to.popupTip.unrender();\n\t\t\to.rendered = false;\n\t\t}\n\t}\n\n\tcloseTip(tipId) {\n\t\tlet current = this._current();\n\t\tif (current) {\n\t\t\tif (current.tipId == tipId) {\n\t\t\t\tthis._unrenderTip(current);\n\t\t\t\tthis._clear(tipId);\n\t\t\t\tcurrent = this._current();\n\t\t\t\tif (current) {\n\t\t\t\t\tthis._renderTip(current);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis._clear(tipId);\n\t\t\t}\n\t\t}\n\t}\n\n\t_current() {\n\t\treturn (this.tips.length && this.tips[this.tips.length - 1]) || null;\n\t}\n\n\t_clear(tipId) {\n\t\tthis.tips = this.tips.filter(o => o.tipId != tipId);\n\t}\n\n\t_setListeners(on) {\n\t\tlistenResource(this.player.chars, on, this._updateModel, 'add');\n\t\tlistenResource(this.player.chars, on, this._updateModel, 'remove');\n\t\tlistenResource(this.player.controlled, on, this._updateModel, 'add');\n\t}\n\n\t_updateModel() {\n\t\tif (!this.player) return;\n\n\t\tlet o = {\n\t\t\tcreateChar: false,\n\t\t\twakeupChar: false,\n\t\t};\n\n\t\tif (!this.player.chars.length) {\n\t\t\to.createChar = true;\n\t\t} else {\n\t\t\to.wakeupChar = true;\n\t\t\tfor (let c of this.player.chars) {\n\t\t\t\tif (c.lastAwake) {\n\t\t\t\t\to.wakeupChar = false;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.model.set(o);\n\t}\n\n\tdispose() {\n\t\tthis._setListeners(false);\n\t\tthis.model = null;\n\t\tthis.player = null;\n\t}\n}\n\nexport default Onboarding;\n","import { Context } from 'modapp-base-component';\nimport { ModelComponent } from 'modapp-resource-component';\nimport Fader from 'components/Fader';\nimport AreaChildrenModel from 'classes/AreaChildrenModel';\n\n/**\n * OverlayNavArea is the badge and area map containercomponent.\n */\nclass OverlayNavArea {\n\n\tconstructor(module, ctrl, area, model, state) {\n\t\tthis.module = module;\n\t\tthis.ctrl = ctrl;\n\t\tthis.area = null;\n\t\tthis.model = model;\n\t\tthis.state = state;\n\n\t\tthis.setArea(area);\n\t}\n\n\trender(el) {\n\t\tthis.elem = new ModelComponent(\n\t\t\tthis.area,\n\t\t\tnew Fader(null, { className: 'overlaynav-area' }),\n\t\t\t(m, c, change) => {\n\t\t\t\tif (!change || change.hasOwnProperty('image')) {\n\t\t\t\t\tthis._setMap(m, c);\n\t\t\t\t}\n\t\t\t},\n\t\t);\n\n\t\treturn this.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n\n\tsetArea(area) {\n\t\tarea = area || null;\n\t\tif (this.area != area) {\n\t\t\tthis.area = area;\n\t\t\tif (this.elem) {\n\t\t\t\tthis.elem.setModel(area);\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t}\n\n\t_setMap(area, c) {\n\t\tif (!area || !area.image) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet state = this.state['area_' + area.id];\n\t\tif (!state) {\n\t\t\tstate = {};\n\t\t\tthis.state['area_' + area.id] = state;\n\t\t}\n\n\t\tc.setComponent(new Context(\n\t\t\t() => new AreaChildrenModel(this.ctrl, area, { eventBus: this.module.self.app.eventBus }),\n\t\t\tchildren => children.dispose(),\n\t\t\tchildren => this.module.pageArea.newImage(this.ctrl, area.id, area.image, children, this.model, state, {\n\t\t\t\tclassName: 'overlaynav-area--map',\n\t\t\t\tvw: 156,\n\t\t\t\tvh: 156,\n\t\t\t\tsize: 'small',\n\t\t\t}),\n\t\t));\n\t}\n}\n\nexport default OverlayNavArea;\n","import { ModelComponent, CollectionComponent } from 'modapp-resource-component';\nimport Fader from 'components/Fader';\nimport NavButtons from 'components/NavButtons';\nimport * as tooltip from 'utils/tooltip';\n\n/**\n * OverlayNavButtons is the navigation component.\n */\nclass OverlayNavButtons {\n\n\tconstructor(module, ctrl, opt) {\n\t\tthis.module = module;\n\t\tthis.ctrl = ctrl;\n\t\tthis.opt = opt;\n\n\t\tthis.fader = null;\n\t\tthis.exits = {};\n\n\t\t// Bind callbacks\n\t\tthis._update = this._update.bind(this);\n\t\tthis._onClick = this._onClick.bind(this);\n\t}\n\n\trender(el) {\n\n\t\tthis.fader = new Fader();\n\t\tthis.exits = {};\n\n\t\tthis.elem = new ModelComponent(\n\t\t\tthis.module.charLog.getViewportModel(),\n\t\t\tnew ModelComponent(\n\t\t\t\tthis.ctrl,\n\t\t\t\tnew CollectionComponent(\n\t\t\t\t\tnull,\n\t\t\t\t\tthis.fader,\n\t\t\t\t\t(col, c) => this._listenExits(col),\n\t\t\t\t),\n\t\t\t\t(m, c) => {\n\t\t\t\t\tc.setCollection(m.inRoom?.exits);\n\t\t\t\t\tthis.tooltip?.close();\n\t\t\t\t},\n\t\t\t),\n\t\t\t(m, c) => this._updateTooltip(),\n\t\t);\n\n\t\treturn this.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t\tthis.fader = null;\n\t\t\tthis._listenExits();\n\t\t\tthis.exits = null;\n\t\t}\n\t}\n\n\t_listenExits(col) {\n\t\tif (!this.exits) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet update = false;\n\t\tlet toDelete = Object.assign({}, this.exits);\n\n\t\tif (col) {\n\t\t\tfor (let exit of col) {\n\t\t\t\tlet id = exit.id;\n\t\t\t\tif (id) {\n\t\t\t\t\tif (toDelete[id]) {\n\t\t\t\t\t\tdelete toDelete[id];\n\t\t\t\t\t} else {\n\t\t\t\t\t\texit.on('change', this._update);\n\t\t\t\t\t\tthis.exits[id] = exit;\n\t\t\t\t\t\tupdate = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (let id in toDelete) {\n\t\t\tthis.exits[id].off('change', this._update);\n\t\t\tdelete this.exits[id];\n\t\t\tupdate = true;\n\t\t}\n\n\t\t// Call _update on any change.\n\t\tif (update) {\n\t\t\tthis._update();\n\t\t}\n\t}\n\n\t_update() {\n\t\tif (!this.fader) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet exits = this.ctrl.inRoom?.exits || [];\n\t\tlet state = {};\n\n\t\tfor (let exit of exits) {\n\t\t\tif (exit.nav && !state[exit.nav]) {\n\t\t\t\tstate[exit.nav] = { icon: exit.icon || '', title: exit.name };\n\t\t\t}\n\t\t}\n\t\tif (exits.length) {\n\t\t\tstate['c'] = { count: exits.length };\n\t\t}\n\n\t\tif (Object.keys(state).length) {\n\t\t\tthis.fader.setComponent(\n\t\t\t\tthis.fader.getComponent()?.setState(state) ||\n\t\t\t\tnew NavButtons(state, {\n\t\t\t\t\tshadow: true,\n\t\t\t\t\tcenter: true,\n\t\t\t\t\tonClick: this._onClick,\n\t\t\t\t\tclassName: 'overlaynav-buttons',\n\t\t\t\t}),\n\t\t\t);\n\t\t} else {\n\t\t\t// Hide nav buttons if no direction is set.\n\t\t\tthis.fader.setComponent(null);\n\t\t}\n\t}\n\n\t_onClick(dir) {\n\t\tif (dir == 'c') {\n\t\t\tthis._openExitsTooltip();\n\t\t\treturn;\n\t\t}\n\n\t\tlet exits = this.ctrl.inRoom?.exits || [];\n\t\tfor (let exit of exits) {\n\t\t\tif (exit.nav == dir) {\n\t\t\t\treturn this.ctrl.call('useExit', { exitId: exit.id })\n\t\t\t\t\t.catch(err => this.module.toaster.openError(err));\n\t\t\t}\n\t\t}\n\t}\n\n\t_openExitsTooltip() {\n\t\tlet el = this.fader?.getComponent()?.getElement();\n\t\tif (!el) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet exits = this.ctrl.inRoom?.exits;\n\t\tif (exits) {\n\t\t\tthis.tooltip = tooltip.click(\n\t\t\t\tel,\n\t\t\t\tthis.module.pageRoom.newRoomExits(this.ctrl, exits, {\n\t\t\t\t\tclassName: 'overlaynav-buttons--tooltip-hidescroll',\n\t\t\t\t}),\n\t\t\t\t{\n\t\t\t\t\tclassName: 'overlaynav-buttons--tooltip',\n\t\t\t\t\tposition: 'bottom',\n\t\t\t\t\tpadding: 'none',\n\t\t\t\t\tsize: 'auto',\n\t\t\t\t\thoverDelay: true,\n\t\t\t\t\tonClose: () => {\n\t\t\t\t\t\tthis.tooltip = null;\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t);\n\t\t\tthis._updateTooltip();\n\t\t}\n\t}\n\n\t_updateTooltip() {\n\t\tlet elem = this.tooltip?.getComponent();\n\t\tlet el = elem?.getElement();\n\t\tif (!elem || !el) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet m = this.module.charLog.getViewportModel();\n\t\tlet rect = el.getBoundingClientRect();\n\t\telem.setStyle('max-height', (m.height - rect.top - 4 + m.y) + 'px');\n\t}\n}\n\nexport default OverlayNavButtons;\n","import { Elem, Txt } from 'modapp-base-component';\nimport { ModelComponent } from 'modapp-resource-component';\nimport { Model } from 'modapp-resource';\nimport l10n from 'modapp-l10n';\nimport ModelFader from 'components/ModelFader';\nimport ModelCollapser from 'components/ModelCollapser';\nimport Fader from 'components/Fader';\nimport Collapser from 'components/Collapser';\nimport FAIcon from 'components/FAIcon';\nimport OverlayNavArea from './OverlayNavArea';\nimport OverlayNavButtons from './OverlayNavButtons';\n\n/**\n * OverlayNavComponent is an area map overlay component.\n */\nclass OverlayNavComponent {\n\n\tconstructor(module, ctrl, state, opt) {\n\t\tthis.module = module;\n\t\tthis.ctrl = ctrl;\n\t\tthis.state = state;\n\t\tthis.opt = opt;\n\t}\n\n\trender(el) {\n\t\tthis.model = new Model({ data: {\n\t\t\topen: this.state.hasOwnProperty('open') ? this.state.open : this.opt?.mode != 'mobile',\n\t\t\tselected: this.state.selected || null,\n\t\t}, eventBus: this.module.self.app.eventBus });\n\n\t\tlet faderComponent = new Fader();\n\t\tlet nameFaderComponent = new Fader();\n\t\tlet roomNameComponent = new Txt(\"\", {\n\t\t\ttagName: 'div',\n\t\t\tclassName: 'badge--text badge--nowrap overlaynav--name',\n\t\t});\n\t\tlet areaNameComponent = this.opt?.mode == 'mobile'\n\t\t\t? null\n\t\t\t: new Txt(\"\", {\n\t\t\t\ttagName: 'div',\n\t\t\t\tclassName: 'badge--strong badge--nowrap overlaynav--name',\n\t\t\t});\n\t\tlet popComponent = new Txt(\"\", {\n\t\t\ttagName: 'div',\n\t\t\tclassName: 'badge--text',\n\t\t\tduration: 0,\n\t\t});\n\t\tlet listenComponent = new Elem(n => n.elem('div', {\n\t\t\tclassName: 'overlaynav--listen counter small alert hide withtitle',\n\t\t\tattributes: {\n\t\t\t\ttitle: l10n.t('overlayNav.somethingIsListening', \"Something is listening\"),\n\t\t\t},\n\t\t}));\n\t\tlet roomComponent = new Elem(n => n.elem('div', { className: 'overlaynav' + (this.opt?.mode == 'mobile' ? ' mobile' : '') }, [\n\t\t\tn.elem('div', { className: 'flex-row' }, [\n\t\t\t\tn.elem('div', { className: 'overlaynav--badge flex-auto' }, [\n\t\t\t\t\tn.elem('div', { className: 'badge btn nooutline', events: {\n\t\t\t\t\t\tclick: (c, ev) => {\n\t\t\t\t\t\t\tthis.module.roomPages.openPanel();\n\t\t\t\t\t\t\t// In mobile layout, we don't zoom in the room/area, but\n\t\t\t\t\t\t\t// just open the panel.\n\t\t\t\t\t\t\tif (this.opt?.mode != 'mobile') {\n\t\t\t\t\t\t\t\tthis.module.roomPages.setArea(this.ctrl.id, this.ctrl.inRoom.area?.id || null);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tev.stopPropagation();\n\t\t\t\t\t\t},\n\t\t\t\t\t}}, [\n\t\t\t\t\t\tn.component(listenComponent),\n\t\t\t\t\t\tn.elem('div', { className: 'overlaynav--badgecont' }, [\n\t\t\t\t\t\t\tn.elem('div', { className: 'badge--select badge--select-margin flex-baseline' }, [\n\t\t\t\t\t\t\t\tn.elem('div', { className: 'badge--info' }, [\n\t\t\t\t\t\t\t\t\tn.component(nameFaderComponent),\n\t\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\t\tn.elem('div', { className: 'overlaynav--counter' }, [\n\t\t\t\t\t\t\t\t\tn.component(popComponent),\n\t\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t]),\n\t\t\t\t\t]),\n\t\t\t\t]),\n\t\t\t\tn.elem('div', { className: 'flex-auto' }, [\n\t\t\t\t\tn.elem('button', {\n\t\t\t\t\t\tclassName: 'overlaynav--toggle iconbtn small tinyicon',\n\t\t\t\t\t\tevents: {\n\t\t\t\t\t\t\tclick: (c, ev) => {\n\t\t\t\t\t\t\t\tthis._toggle();\n\t\t\t\t\t\t\t\tev.currentTarget.blur();\n\t\t\t\t\t\t\t\tev.stopPropagation();\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t}, [\n\t\t\t\t\t\tn.component(new ModelFader(this.model, [{\n\t\t\t\t\t\t\tfactory: m => new FAIcon(m.open ? 'times' : 'globe'),\n\t\t\t\t\t\t\thash: m => m.open,\n\t\t\t\t\t\t}])),\n\t\t\t\t\t]),\n\t\t\t\t]),\n\t\t\t]),\n\t\t\tn.component(new ModelCollapser(this.model, [{\n\t\t\t\tcondition: m => m.open,\n\t\t\t\tfactory: m => new Elem(n => n.elem('div', { className: 'flex-row' }, [\n\t\t\t\t\tn.component(new OverlayNavButtons(this.module, this.ctrl, this.opt)),\n\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\tthis.ctrl,\n\t\t\t\t\t\tnew ModelComponent(\n\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\tnew ModelComponent(\n\t\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\t\tnew Collapser(null, { horizontal: true }),\n\t\t\t\t\t\t\t\t(m, c) => c.setComponent(m?.image\n\t\t\t\t\t\t\t\t\t? c.getComponent()?.setArea(m) ||\n\t\t\t\t\t\t\t\t\t\tnew OverlayNavArea(this.module, this.ctrl, m, this.model, this.state)\n\t\t\t\t\t\t\t\t\t: null,\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t(m, c) => c.setModel(m?.area),\n\t\t\t\t\t\t),\n\t\t\t\t\t\t(m, c) => c.setModel(m?.inRoom),\n\t\t\t\t\t)),\n\t\t\t\t])),\n\t\t\t}], {\n\t\t\t\tclassName: 'overlaynav--content',\n\t\t\t})),\n\t\t]));\n\n\t\tthis.elem = new ModelComponent(\n\t\t\tthis.ctrl,\n\t\t\tnew ModelComponent(\n\t\t\t\tnull,\n\t\t\t\tnew ModelComponent(\n\t\t\t\t\tnull,\n\t\t\t\t\tfaderComponent,\n\t\t\t\t\t(m, c) => this._setBadge(popComponent, nameFaderComponent, roomNameComponent, areaNameComponent),\n\t\t\t\t),\n\t\t\t\t(m, c) => {\n\t\t\t\t\tif (areaNameComponent) {\n\t\t\t\t\t\tc.setModel(m?.area);\n\t\t\t\t\t}\n\t\t\t\t\tthis._setBadge(popComponent, nameFaderComponent, roomNameComponent, areaNameComponent);\n\t\t\t\t\tthis._setListen(listenComponent);\n\t\t\t\t\tfaderComponent.setComponent(m ? roomComponent : null);\n\t\t\t\t},\n\t\t\t),\n\t\t\t(m, c) => c.setModel(m?.inRoom),\n\t\t);\n\n\t\treturn this.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tObject.assign(this.state, this.model.props);\n\t\t\tthis.model = null;\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n\n\t_setBadge(popComponent, fader, roomNameComponent, areaNameComponent) {\n\t\tlet m = this.ctrl.inRoom;\n\t\tif (m) {\n\t\t\tlet pop = m.pop;\n\t\t\tlet area = areaNameComponent && m.area;\n\t\t\tif (area) {\n\t\t\t\tpop = (area.pop || \"0\") + (area.prv ? (' (+' + area.prv + ')') : '');\n\t\t\t\tareaNameComponent.setText(area.name);\n\t\t\t\tfader.setComponent(areaNameComponent);\n\t\t\t} else {\n\t\t\t\troomNameComponent.setText(m.name);\n\t\t\t\tfader.setComponent(roomNameComponent);\n\t\t\t}\n\t\t\tpopComponent.setText(pop || \"0\");\n\t\t}\n\t}\n\n\t_setListen(listenComponent) {\n\t\tif (this.ctrl.inRoom?.listen) {\n\t\t\tlistenComponent.removeClass('hide');\n\t\t} else {\n\t\t\tlistenComponent.addClass('hide');\n\t\t}\n\t}\n\n\t_toggle(open) {\n\t\tif (this.model) {\n\t\t\tthis.model.set({ open: typeof open == 'undefined' ? !this.model.open : !!open });\n\t\t}\n\t}\n}\n\nexport default OverlayNavComponent;\n","import OverlayNavComponent from './OverlayNavComponent';\nimport './overlayNav.scss';\n\n/**\n * OverlayNav adds an map and navigation overlay to the activePanel main area.\n */\nclass OverlayNav {\n\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'charLog',\n\t\t\t'pageArea',\n\t\t\t'roomPages',\n\t\t\t'pageRoom',\n\t\t\t'toaster',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\n\t\tthis.module.charLog.addOverlay({\n\t\t\tid: 'nav',\n\t\t\tcomponentFactory: (char, state, layoutId) => new OverlayNavComponent(this.module, char, state),\n\t\t\tfilter: (char, layoutId) => layoutId == 'desktop',\n\t\t});\n\t\tthis.module.charLog.addOverlay({\n\t\t\tid: 'mobileNav',\n\t\t\tcomponentFactory: (char, state, layoutId) => new OverlayNavComponent(this.module, char, state, { mode: 'mobile' }),\n\t\t\tfilter: (char, layoutId) => layoutId == 'mobile',\n\t\t});\n\t}\n\n\tdispose() {\n\t\tthis.module.charLog.removeOverlay('overlayNav');\n\t}\n}\n\nexport default OverlayNav;\n","import { Model } from 'modapp-resource';\n\n/**\n * PlayerEvent listens for player events and calls the matching handler.\n */\nclass PlayerEvent {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\t\t// Bind callbacks\n\t\tthis._onPlayerModelChange = this._onPlayerModelChange.bind(this);\n\t\tthis._onAuthModelChange = this._onAuthModelChange.bind(this);\n\t\tthis._onPlayerEvent = this._onPlayerEvent.bind(this);\n\t\tthis._onNoticeAdd = this._onNoticeAdd.bind(this);\n\t\tthis._onNoticeRemove = this._onNoticeRemove.bind(this);\n\n\t\tthis.app.require([ 'player', 'auth', 'api' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t\tthis.handlers = new Model({ eventBus: this.app.eventBus });\n\n\t\tthis.player = null;\n\t\tthis.user = null;\n\t\tthis.userNotices = null;\n\t\tthis.readNotices = {};\n\t\tthis._setListeners(true);\n\t\tthis._onPlayerModelChange();\n\t\tthis._onAuthModelChange();\n\n\t}\n\n\taddHandler(id, callback) {\n\t\tif (this.handlers.props.hasOwnProperty(id)) {\n\t\t\tthrow new Error(\"PlayerEvent handler already registered for \" + id);\n\t\t}\n\t\tthis.handlers.set({ [id]: callback });\n\t\treturn this;\n\t}\n\n\tremoveHandler(id) {\n\t\tthis.handlers.set({ [id]: undefined });\n\t\treturn this;\n\t}\n\n\t_setListeners(on) {\n\t\tthis.module.player.getModel()[on ? 'on' : 'off']('change', this._onPlayerModelChange);\n\t\tthis.module.auth.getModel()[on ? 'on' : 'off']('change', this._onAuthModelChange);\n\t}\n\n\t_onPlayerModelChange() {\n\t\tlet p = this.module.player.getPlayer();\n\t\tif (p === this.player) return;\n\n\t\tthis._setPlayerListeners(false);\n\t\tthis.player = p;\n\t\tthis._setPlayerListeners(true);\n\t}\n\n\t_setPlayerListeners(on) {\n\t\tif (this.player) {\n\t\t\tthis.player[on ? 'on' : 'off']('out', this._onPlayerEvent);\n\t\t}\n\t}\n\n\t_onPlayerEvent(ev) {\n\t\tlet h = this.handlers.props[ev.type];\n\t\tif (!h) {\n\t\t\tconsole.error(\"PlayerEvent missing handler for event type \" + ev.type, ev);\n\t\t} else {\n\t\t\th(ev);\n\t\t}\n\t}\n\n\t_onAuthModelChange() {\n\t\tlet user = this.module.auth.getUser();\n\t\tif (user === this.user) return;\n\n\t\tthis._setNoticeListeners(false);\n\t\tthis.user = user;\n\t\tthis.userNotices = null;\n\t\tthis._loadNotices();\n\t}\n\n\t_loadNotices() {\n\t\tif (!this.user) return;\n\n\t\tlet userId = this.user.id;\n\t\tthis.module.api.get('auth.user.' + userId + '.notices').then(notices => {\n\t\t\tif (this.user && this.user.id == userId) {\n\t\t\t\tthis.userNotices = notices;\n\t\t\t\tthis._setNoticeListeners(true);\n\t\t\t\tthis._onNoticeAdd();\n\t\t\t}\n\t\t});\n\n\t\tif (this.user.identity) {\n\t\t\tthis.module.api.get('identity.user.' + userId + '.notices').then(notices => {\n\t\t\t\tif (!this.user || this.user.id !== userId) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.identityNotices = notices;\n\t\t\t\tthis._setIdentityNoticeListeners(true);\n\t\t\t\tthis._onNoticeAdd();\n\t\t\t});\n\t\t}\n\t}\n\n\t_setNoticeListeners(on) {\n\t\tlet cb = on ? 'on' : 'off';\n\t\tif (this.userNotices) {\n\t\t\tthis.userNotices[cb]('add', this._onNoticeAdd);\n\t\t\tthis.userNotices[cb]('remove', this._onNoticeRemove);\n\t\t}\n\t}\n\n\t_setIdentityNoticeListeners(on) {\n\t\tlet cb = on ? 'on' : 'off';\n\t\tif (this.identityNotices) {\n\t\t\tthis.identityNotices[cb]('add', this._onNoticeAdd);\n\t\t\tthis.identityNotices[cb]('remove', this._onNoticeRemove);\n\t\t}\n\t}\n\n\t_onNoticeAdd(ev) {\n\t\tthis._showNextNotice();\n\t}\n\n\t_onNoticeRemove(ev) {\n\t\tif (this.noticeShowing && this.noticeShowing.noticeId == ev.item.id && this.noticeShowing.close) {\n\t\t\tthis.noticeShowing.close();\n\t\t}\n\t}\n\n\t_showNextNotice() {\n\t\tif (this.noticeShowing) return;\n\n\t\tlet notices = this.identityNotices;\n\t\t// Run two times. First with identityNotices, then with userNotices.\n\t\tfor (let i = 0; i < 2; i++) {\n\t\t\tif (notices) {\n\t\t\t\tfor (let notice of notices) {\n\t\t\t\t\tif (!this.readNotices[notice.id]) {\n\t\t\t\t\t\tlet h = this.handlers.props[notice.type];\n\t\t\t\t\t\tif (!h) {\n\t\t\t\t\t\t\tconsole.error(\"PlayerEvent missing handler for event type \" + notice.type, notice);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tlet close = h(notice.data, this._onNoticeClose.bind(this, notice));\n\t\t\t\t\t\t\tthis.noticeShowing = { noticeId: notice.id, close };\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tnotices = this.userNotices;\n\t\t}\n\t}\n\n\t_onNoticeClose(notice) {\n\t\tif (this.noticeShowing.noticeId == notice.id) {\n\t\t\tthis.noticeShowing = null;\n\t\t}\n\t\tthis.readNotices[notice.id] = true;\n\t\tnotice.call('read').catch(err => console.error(\"Error setting notice as read: \", err));\n\n\t\tthis._showNextNotice();\n\t}\n\n\tdispose() {\n\t\tthis._setIdentityNoticeListeners(false);\n\t\tthis._setNoticeListeners(false);\n\t\tthis._setPlayerListeners(false);\n\t\tthis._setListeners(false);\n\t\tthis.player = null;\n\t}\n}\n\nexport default PlayerEvent;\n","import { Elem, Txt } from 'modapp-base-component';\nimport l10n from 'modapp-l10n';\n\n/**\n * PlayerEventControlLost registers the control lost playerEvent handler.\n */\nclass PlayerEventControlLost {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\t// Bind callbacks\n\t\tthis._handleEvent = this._handleEvent.bind(this);\n\n\t\tthis.app.require([ 'playerEvent', 'toaster' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.playerEvent.addHandler('controlLost', this._handleEvent);\n\t}\n\n\t_handleEvent(ev, onClose) {\n\t\treturn this.module.toaster.open({\n\t\t\ttitle: l10n.l('playerEventControlLost.puppetControlLost', \"Puppet control lost\"),\n\t\t\tcontent: close => new Elem(n => n.elem('div', [\n\t\t\t\tn.component(new Txt(l10n.l('puppetWakeup.roleGranted', \"Someone else took control of puppet.\"), { tagName: 'p' })),\n\t\t\t\tn.elem('div', { className: 'common--sectionpadding' }, [\n\t\t\t\t\tn.component(new Txt((ev.puppet.name + ' ' + ev.puppet.surname).trim(), { tagName: 'div', className: 'dialog--strong' })),\n\t\t\t\t\tn.component(new Txt(\"(\" + (ev.puppeteer.name + ' ' + ev.puppeteer.surname).trim() + \")\", { tagName: 'div', className: 'dialog--small' })),\n\t\t\t\t]),\n\t\t\t])),\n\t\t\tcloseOn: 'click',\n\t\t\tonClose,\n\t\t});\n\t}\n\n\tdispose() {\n\t\tthis.module.playerEvent.removeHandler('controlLost');\n\t}\n}\n\nexport default PlayerEventControlLost;\n","import { Elem, Txt, Html } from 'modapp-base-component';\nimport l10n from 'modapp-l10n';\nimport * as idRoles from 'utils/idRoles';\n\nconst idRoleInfo = {\n\toverseer: l10n.l('playerEventIdRoleAdd.overseerInfo', `<div class=\"pad-bottom-m\">To learn more, type:</div>` +\n\t\t`<div class=\"charlog--code\"><code>help overseer</code></div>`),\n\tpioneer: l10n.l('playerEventIdRoleAdd.pioneerInfo', `<div class=\"pad-bottom-m\">To learn more, type:</div>` +\n\t\t`<div class=\"charlog--code\"><code>help pioneer</code></div>`),\n\tsupporter: l10n.l('playerEventIdRoleAdd.supporterInfo', `<div class=\"pad-bottom-m\">To learn more, type:</div>` +\n\t\t`<div class=\"charlog--code\"><code>help supporter</code></div>`),\n};\n\n/**\n * PlayerEventIdRoleAdd registers the idRoleAdd playerEvent handler.\n */\nclass PlayerEventIdRoleAdd {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\t// Bind callbacks\n\t\tthis._handleEvent = this._handleEvent.bind(this);\n\n\t\tthis.app.require([ 'playerEvent', 'toaster' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.playerEvent.addHandler('idRoleAdd', this._handleEvent);\n\t}\n\n\t_handleEvent(ev, onClose) {\n\t\tlet info = idRoleInfo[ev.idRole];\n\t\treturn this.module.toaster.open({\n\t\t\ttitle: l10n.l('playerEventIdRoleAdd.titleGranted', \"Title granted\"),\n\t\t\tcontent: close => new Elem(n => n.elem('div', [\n\t\t\t\tn.component(new Txt(l10n.l('playerEventIdRoleAdd.titleGrantedInfo', \"You've been granted a new account title:\"), { tagName: 'p' })),\n\t\t\t\tn.component(new Txt(idRoles.toLocaleString(ev.idRole), { tagName: 'p', className: 'dialog--strong dialog--large' })),\n\t\t\t\tn.component(info\n\t\t\t\t\t? new Html(info, { tagName: 'div', className: 'common--sectionpadding' })\n\t\t\t\t\t: null,\n\t\t\t\t),\n\t\t\t])),\n\t\t\tcloseOn: 'click',\n\t\t\tonClose,\n\t\t});\n\t}\n\n\tdispose() {\n\t\tthis.module.playerEvent.removeHandler('idRoleAdd');\n\t}\n}\n\nexport default PlayerEventIdRoleAdd;\n","import { Elem, Txt } from 'modapp-base-component';\nimport l10n from 'modapp-l10n';\nimport * as idRoles from 'utils/idRoles';\n\n/**\n * PlayerEventIdRoleRemove registers the idRoleRemove playerEvent handler.\n */\nclass PlayerEventIdRoleRemove {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\t// Bind callbacks\n\t\tthis._handleEvent = this._handleEvent.bind(this);\n\n\t\tthis.app.require([ 'playerEvent', 'toaster' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.playerEvent.addHandler('idRoleRemove', this._handleEvent);\n\t}\n\n\t_handleEvent(ev, onClose) {\n\t\treturn this.module.toaster.open({\n\t\t\ttitle: l10n.l('playerEventRoleRemove.titleRemoved', \"Title removed\"),\n\t\t\tcontent: close => new Elem(n => n.elem('div', [\n\t\t\t\tn.component(new Txt(l10n.l('playerEventRoleRemove.titleRemovedInfo', \"One of your account titles has been removed:\"), { tagName: 'p' })),\n\t\t\t\tn.component(new Txt(idRoles.toLocaleString(ev.idRole), { tagName: 'p', className: 'dialog--strong' })),\n\t\t\t])),\n\t\t\tcloseOn: 'click',\n\t\t\tonClose,\n\t\t});\n\t}\n\n\tdispose() {\n\t\tthis.module.playerEvent.removeHandler('idRoleRemove');\n\t}\n}\n\nexport default PlayerEventIdRoleRemove;\n","import { Elem, Txt, Html } from 'modapp-base-component';\nimport l10n from 'modapp-l10n';\n\nconst imageTxt = {\n\ttitle: l10n.l('playerEventImageWipe.imageRemoved', \"Image removed\"),\n\tdefault: l10n.l('playerEventImageWipe.imageRemovedInfo', \"An image has been removed:\"),\n\ttarget: {\n\t\tchar: l10n.l('playerEventImageWipe.charImageRemovedInfo', \"An image has been removed from your character:\"),\n\t\troom: l10n.l('playerEventImageWipe.roomImageRemovedInfo', \"An image has been removed from your room:\"),\n\t\tarea: l10n.l('playerEventImageWipe.areaImageRemovedInfo', \"An image has been removed from your area:\"),\n\t},\n};\nconst avatarTxt = {\n\ttitle: l10n.l('playerEventImageWipe.avatarRemoved', \"Avatar removed\"),\n\tdefault: l10n.l('playerEventImageWipe.avatarRemovedInfo', \"An avatar has been removed:\"),\n\ttarget: {\n\t\tchar: l10n.l('playerEventImageWipe.charAvatarRemovedInfo', \"An avatar has been removed from your character:\"),\n\t\t// room: l10n.l('playerEventImageWipe.roomAvatarRemovedInfo', \"An avatar has been removed from your room:\"),\n\t\t// area: l10n.l('playerEventImageWipe.areaAvatarRemovedInfo', \"An avatar has been removed from your area:\"),\n\t},\n};\n\nconst moreInfoTxt = l10n.l('playerEventImageWipe.moreInfo', `<div class=\"pad-bottom-m\">If you have questions or objections, get in contact with the moderator team. Type:</div>` +\n\t`<div class=\"charlog--code\"><code>help helpme</code></div>`);\n\n/**\n * PlayerEventImageWipe registers the imageWipe playerEvent handler.\n */\nclass PlayerEventImageWipe {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\t// Bind callbacks\n\t\tthis._handleEvent = this._handleEvent.bind(this);\n\n\t\tthis.app.require([ 'playerEvent', 'toaster' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.playerEvent.addHandler('imageWipe', this._handleEvent);\n\t}\n\n\t_handleEvent(ev, onClose) {\n\t\tlet txt = ev.avatar ? avatarTxt : imageTxt;\n\t\tlet info = txt.target[ev.target] || txt.default;\n\t\treturn this.module.toaster.open({\n\t\t\ttitle: txt.title,\n\t\t\tcontent: close => new Elem(n => n.elem('div', [\n\t\t\t\tn.component(new Txt(info, { tagName: 'p' })),\n\t\t\t\tn.component(new Txt(ev.name, { tagName: 'p', className: 'dialog--strong dialog--large' })),\n\t\t\t\tn.component(new Html(moreInfoTxt, { tagName: 'div', className: 'common--sectionpadding' })),\n\t\t\t])),\n\t\t\tcloseOn: 'click',\n\t\t\tonClose,\n\t\t});\n\t}\n\n\tdispose() {\n\t\tthis.module.playerEvent.removeHandler('imageWipe');\n\t}\n}\n\nexport default PlayerEventImageWipe;\n","import isVisible from 'utils/isVisible.js';\n\n// 2 seconds between a pendingPush and sending cancelPush. Since the server has\n// a 5 second delay before sending, delaying the cancelPush will reduce\n// cancel-spamming if there are bursts of pending push events.\nconst defaultDelay = 1000 * 2;\n\n/**\n * PlayerEventPendingPush registers the pending push playerEvent handler, to\n * cancel push notifications if the app is visible.\n */\nclass PlayerEventPendingPush {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\t\tthis.delay = Number(params.delay || defaultDelay);\n\n\t\t// Bind callbacks\n\t\tthis._handleEvent = this._handleEvent.bind(this);\n\n\t\tthis.app.require([\n\t\t\t'playerEvent',\n\t\t\t'player',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t\tthis.module.playerEvent.addHandler('pendingPush', this._handleEvent);\n\t}\n\n\t_handleEvent() {\n\t\tsetTimeout(() => {\n\t\t\t// Cancel the pushEvent if the app is visible.\n\t\t\tif (isVisible()) {\n\t\t\t\tthis.module.player.getPlayer()?.call('cancelPush').catch(err => {\n\t\t\t\t\tconsole.error(\"error calling cancelPush: \", err);\n\t\t\t\t});\n\t\t\t}\n\t\t}, this.delay);\n\t}\n\n\tdispose() {\n\t\tthis.module.playerEvent.removeHandler('pendingPush');\n\t}\n}\n\nexport default PlayerEventPendingPush;\n","import { Elem, Txt, Html } from 'modapp-base-component';\nimport l10n from 'modapp-l10n';\nimport * as roles from 'utils/roles';\n\nconst roleInfo = {\n\tmoderator: l10n.l('playerEventRoleAdd.moderatorInfo', `<div class=\"pad-bottom-m\">To learn more, type:</div>` +\n\t\t`<div class=\"charlog--code\"><code>help moderate</code></div>`),\n\tbuilder: l10n.l('playerEventRoleAdd.builderInfo', `<div class=\"pad-bottom-m\">To learn more, type:</div>` +\n\t\t`<div class=\"charlog--code\"><code>help builder</code></div>`),\n\tadmin: l10n.l('playerEventRoleAdd.adminInfo', `<div class=\"pad-bottom-m\">To learn more, type:</div>` +\n\t\t`<div class=\"charlog--code\"><code>help admin</code></div>`),\n\thelper: l10n.l('playerEventRoleAdd.helperInfo', `<div class=\"pad-bottom-m\">To learn more, type:</div>` +\n\t\t\t`<div class=\"charlog--code\"><code>help helper</code></div>`),\n};\n\n/**\n * PlayerEventRoleAdd registers the roleAdd playerEvent handler.\n */\nclass PlayerEventRoleAdd {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\t// Bind callbacks\n\t\tthis._handleEvent = this._handleEvent.bind(this);\n\n\t\tthis.app.require([ 'playerEvent', 'toaster' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.playerEvent.addHandler('roleAdd', this._handleEvent);\n\t}\n\n\t_handleEvent(ev, onClose) {\n\t\tlet info = roleInfo[ev.role];\n\t\treturn this.module.toaster.open({\n\t\t\ttitle: l10n.l('playerEventRoleAdd.roleGranted', \"Role granted\"),\n\t\t\tcontent: close => new Elem(n => n.elem('div', [\n\t\t\t\tn.component(new Txt(l10n.l('playerEventRoleAdd.roleGrantedInfo', \"You've been granted a new role:\"), { tagName: 'p' })),\n\t\t\t\tn.component(new Txt(roles.toLocaleString(ev.role), { tagName: 'p', className: 'dialog--strong dialog--large' })),\n\t\t\t\tn.component(info\n\t\t\t\t\t? new Html(info, { tagName: 'div', className: 'common--sectionpadding' })\n\t\t\t\t\t: null,\n\t\t\t\t),\n\t\t\t])),\n\t\t\tcloseOn: 'click',\n\t\t\tonClose,\n\t\t});\n\t}\n\n\tdispose() {\n\t\tthis.module.playerEvent.removeHandler('roleAdd');\n\t}\n}\n\nexport default PlayerEventRoleAdd;\n","import { Elem, Txt } from 'modapp-base-component';\nimport l10n from 'modapp-l10n';\nimport * as roles from 'utils/roles';\n\n/**\n * PlayerEventRoleRemove registers the roleRemove playerEvent handler.\n */\nclass PlayerEventRoleRemove {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\t// Bind callbacks\n\t\tthis._handleEvent = this._handleEvent.bind(this);\n\n\t\tthis.app.require([ 'playerEvent', 'toaster' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.playerEvent.addHandler('roleRemove', this._handleEvent);\n\t}\n\n\t_handleEvent(ev, onClose) {\n\t\treturn this.module.toaster.open({\n\t\t\ttitle: l10n.l('playerEventRoleRemove.roleRemoved', \"Role removed\"),\n\t\t\tcontent: close => new Elem(n => n.elem('div', [\n\t\t\t\tn.component(new Txt(l10n.l('playerEventRoleRemove.roleRemovedInfo', \"One of your roles has been removed:\"), { tagName: 'p' })),\n\t\t\t\tn.component(new Txt(roles.toLocaleString(ev.role), { tagName: 'p', className: 'dialog--strong' })),\n\t\t\t])),\n\t\t\tcloseOn: 'click',\n\t\t\tonClose,\n\t\t});\n\t}\n\n\tdispose() {\n\t\tthis.module.playerEvent.removeHandler('roleRemove');\n\t}\n}\n\nexport default PlayerEventRoleRemove;\n","import { Elem, Txt } from 'modapp-base-component';\nimport l10n from 'modapp-l10n';\nimport formatDateTime from 'utils/formatDateTime';\n\n/**\n * PlayerEventSuspend registers the suspend playerEvent handler.\n */\nclass PlayerEventSuspend {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\t// Bind callbacks\n\t\tthis._handleEvent = this._handleEvent.bind(this);\n\n\t\tthis.app.require([ 'playerEvent', 'confirm' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.playerEvent.addHandler('suspend', this._handleEvent);\n\t}\n\n\t_handleEvent(ev, onClose) {\n\t\treturn this.module.confirm.open(null, {\n\t\t\ttitle: l10n.l('playerEventSuspend.charSuspended', \"Character suspended\"),\n\t\t\tbody: new Elem(n => n.elem('div', [\n\t\t\t\tn.component(new Txt((ev.char.name + ' ' + ev.char.surname).trim(), { tagName: 'p', className: 'dialog--strong dialog--large' })),\n\t\t\t\tn.component(new Txt(l10n.l('playerEventSuspend.suspendedUntil', \"Suspended until\"), { className: 'margin-bottom-m', tagName: 'h3' })),\n\t\t\t\tn.component(new Txt(formatDateTime(new Date(ev.suspended)), { tagName: 'p' })),\n\t\t\t\tn.component(new Txt(l10n.l('playerEventSuspend.reason', \"Reason\"), { className: 'margin-bottom-m', tagName: 'h3' })),\n\t\t\t\tn.component(new Txt(ev.reason, { tagName: 'p' })),\n\t\t\t])),\n\t\t\tconfirm: l10n.l('playerEventSuspend.okay', \"Okay\"),\n\t\t\tcancel: null,\n\t\t\tonClose,\n\t\t});\n\t}\n\n\tdispose() {\n\t\tthis.module.playerEvent.removeHandler('suspend');\n\t}\n}\n\nexport default PlayerEventSuspend;\n","import { Elem, Txt } from 'modapp-base-component';\nimport { ModelComponent } from 'modapp-resource-component';\nimport l10n from 'modapp-l10n';\nimport { isResError } from 'resclient';\n\nfunction getPuppeteerId(p) {\n\treturn p.char.id + '_' + p.puppet.id;\n}\n\n/**\n * PuppetWakeup tries to control and wakeup a puppet as soon as a control\n * request is granted.\n */\nclass PuppetWakeup {\n\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\t// Bind callbacks\n\t\tthis._onPuppetAdd = this._onPuppetAdd.bind(this);\n\t\tthis._onPuppetRemove = this._onPuppetRemove.bind(this);\n\t\tthis._onPuppeteerChange = this._onPuppeteerChange.bind(this);\n\n\t\tthis.app.require([ 'player', 'toaster' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.puppets = null;\n\t\tthis.listenedPuppeteers = {};\n\t\tthis.module.player.getPlayerPromise().then(player => {\n\t\t\t// If listenedPuppeteers is null, we are disposed.\n\t\t\tif (!this.listenedPuppeteers) return;\n\n\t\t\tthis.puppets = player.puppets;\n\t\t\tthis._listenPuppets(true);\n\t\t});\n\t}\n\n\t_listenPuppets(on) {\n\t\tif (!this.puppets) return;\n\n\t\tlet cb = on ? 'on' : 'off';\n\t\tthis.puppets[cb]('add', this._onPuppetAdd);\n\t\tthis.puppets[cb]('remove', this._onPuppetRemove);\n\n\t\tif (on) {\n\t\t\tfor (let puppeteer of this.puppets) {\n\t\t\t\tthis._listenPuppeteer(puppeteer, true);\n\t\t\t\tthis._tryControl(puppeteer);\n\t\t\t}\n\t\t} else {\n\t\t\tfor (let id in this.listenedPuppeteers) {\n\t\t\t\tthis._listenPuppeteer(this.listenedPuppeteers[id], false);\n\t\t\t}\n\t\t}\n\t}\n\n\t_listenPuppeteer(puppeteer, on) {\n\t\tif (isResError(puppeteer)) return;\n\n\t\tlet id = getPuppeteerId(puppeteer);\n\t\tif (on) {\n\t\t\tthis.listenedPuppeteers[id] = puppeteer;\n\t\t} else {\n\t\t\tdelete this.listenedPuppeteers[id];\n\t\t}\n\t\tpuppeteer[on ? 'on' : 'off']('change', this._onPuppeteerChange);\n\t}\n\n\t_onPuppetAdd(ev) {\n\t\tif (this.puppets) {\n\t\t\tthis._listenPuppeteer(ev.item, true);\n\t\t}\n\t}\n\n\t_onPuppetRemove(ev) {\n\t\tif (this.puppets) {\n\t\t\tthis._listenPuppeteer(ev.item, false);\n\t\t}\n\t}\n\n\t_onPuppeteerChange(change, puppeteer) {\n\t\t// If we have a change in requestStatus, then we try to take control.\n\t\tif (change.hasOwnProperty('requestStatus')) {\n\t\t\tthis._tryControl(puppeteer, true);\n\t\t}\n\t}\n\n\t_tryControl(puppeteer, onEvent) {\n\t\tlet puppet = puppeteer.puppet;\n\t\tlet char = puppeteer.char;\n\n\t\t// Show toaster if request was rejected\n\t\tif (puppeteer.requestStatus == 'rejected' && onEvent) {\n\t\t\treturn this.module.toaster.open({\n\t\t\t\ttitle: l10n.l('puppetWakeup.puppetControlDenied', \"Puppet control denied\"),\n\t\t\t\tcontent: close => new Elem(n => n.elem('div', [\n\t\t\t\t\tn.component(new Txt(l10n.l('puppetWakeup.roleGranted', \"Control request was rejected.\"), { tagName: 'p' })),\n\t\t\t\t\tn.elem('div', { className: 'common--sectionpadding' }, [\n\t\t\t\t\t\tn.component(new Txt((puppet.name + ' ' + puppet.surname).trim(), { tagName: 'div', className: 'dialog--strong' })),\n\t\t\t\t\t\tn.component(new Txt(\"(\" + (puppeteer.requestPuppeteer.name + ' ' + puppeteer.requestPuppeteer.surname).trim() + \")\", { tagName: 'div', className: 'dialog--small' })),\n\t\t\t\t\t]),\n\t\t\t\t\tn.component(puppeteer.requestAnswer ? new Txt('\"' + puppeteer.requestAnswer + '\"', { tagName: 'p', className: 'dialog--emphasis' }) : null),\n\t\t\t\t])),\n\t\t\t\tcloseOn: 'click',\n\t\t\t});\n\t\t}\n\n\t\tif (puppeteer.requestStatus != 'accepted') return;\n\n\t\tthis.module.toaster.open({\n\t\t\ttitle: l10n.l('puppetWakeup.puppetControlGranted', \"Puppet control granted\"),\n\t\t\tcontent: close => new ModelComponent(\n\t\t\t\tpuppeteer,\n\t\t\t\tnew ModelComponent(\n\t\t\t\t\tpuppet,\n\t\t\t\t\tnew Elem(n => n.elem('div', [\n\t\t\t\t\t\tn.component(new Txt(l10n.l('puppetWakeup.roleGranted', \"Do you want to control puppet?\"), { tagName: 'p' })),\n\t\t\t\t\t\tn.elem('div', { className: 'common--sectionpadding' }, [\n\t\t\t\t\t\t\tn.component(new Txt((puppet.name + ' ' + puppet.surname).trim(), { tagName: 'div', className: 'dialog--strong' })),\n\t\t\t\t\t\t\tn.component(new Txt(\"(\" + (char.name + ' ' + char.surname).trim() + \")\", { tagName: 'div', className: 'dialog--small' })),\n\t\t\t\t\t\t]),\n\t\t\t\t\t\tn.elem('div', { className: 'flex-row margin8' }, [\n\t\t\t\t\t\t\tn.elem('button', {\n\t\t\t\t\t\t\t\tclassName: 'btn primary',\n\t\t\t\t\t\t\t\tevents: { click: () => {\n\t\t\t\t\t\t\t\t\tthis._control(puppeteer);\n\t\t\t\t\t\t\t\t\tclose();\n\t\t\t\t\t\t\t\t} },\n\t\t\t\t\t\t\t}, [\n\t\t\t\t\t\t\t\tn.component(new Txt(l10n.l('puppetWakeup.control', \"Control\"))),\n\n\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\tn.elem('button', {\n\t\t\t\t\t\t\t\tclassName: 'btn secondary',\n\t\t\t\t\t\t\t\tevents: { click: close },\n\t\t\t\t\t\t\t}, [\n\t\t\t\t\t\t\t\tn.component(new Txt(l10n.l('puppetWakeup.cancel', \"Cancel\"))),\n\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t]),\n\t\t\t\t\t])),\n\t\t\t\t\t(m, c) => {\n\t\t\t\t\t\tif (m.puppeteer && m.puppeteer.id == char.id) close();\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t\t(m, c) => {\n\t\t\t\t\tif (m.requestStatus != 'accepted') close();\n\t\t\t\t},\n\t\t\t),\n\t\t\tcloseOn: 'button',\n\t\t});\n\t}\n\n\t_control(puppeteer) {\n\t\tlet puppet = puppeteer.puppet;\n\t\tlet controlled = this.module.player.getControlledChar(puppet.id);\n\t\treturn (controlled && puppet.puppeteer == puppeteer.char.id\n\t\t\t? Promise.resolve(controlled)\n\t\t\t: this.module.player.getPlayer().call('controlPuppet', { charId: puppeteer.char.id, puppetId: puppet.id })\n\t\t)\n\t\t\t.then(c => {\n\t\t\t\tif (isResError(c)) {\n\t\t\t\t\tthrow c;\n\t\t\t\t}\n\t\t\t\tc.call('wakeup');\n\t\t\t})\n\t\t\t.catch(err => this.module.toaster.openError(err));\n\t}\n\n\n\tdispose() {\n\t\tthis._listenPuppets(false);\n\t\tthis.puppets = null;\n\t\tthis.listenedPuppeteers = null;\n\t}\n}\n\nexport default PuppetWakeup;\n","import { Model } from 'modapp-resource';\nimport TokenList from 'classes/TokenList';\nimport objectKeyDiff from 'utils/objectKeyDiff';\nimport {\n\tkeyTokenRegex,\n\tkeyExpandRegex,\n} from 'utils/regex';\n\n/**\n * RoomAccess listens to controlled character models and their rooms, fetching a\n * list of available room profiles and room scripts.\n *\n * The overly complex code of this module is because the access to room profiles\n * and scripts is based on controlled character, current room owner, and player\n * role. So in order to access available profiles and scripts, we need to listen\n * to all of that, and update accordingly.\n */\nclass RoomAccess {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\t// Bind callbacks\n\t\tthis._onCtrlChange = this._onCtrlChange.bind(this);\n\t\tthis._onCharChange = this._onCharChange.bind(this);\n\t\tthis._onRoomChange = this._onRoomChange.bind(this);\n\n\t\tthis.app.require([\n\t\t\t'player',\n\t\t\t'api',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.chars = {};\n\t\tthis.rooms = {};\n\t\tthis.roomsProfiles = new Model({ eventBus: this.app.eventBus });\n\t\tthis.roomsScripts = new Model({ eventBus: this.app.eventBus });\n\t\tthis.ctrlModel = this.module.player.getControlledModel();\n\n\t\tthis.inRoomProfiles = new TokenList(() => {\n\t\t\tlet c = this.module.player.getActiveChar();\n\t\t\treturn (c && this.roomsProfiles.props[c.inRoom.id]?.toArray()) || [];\n\t\t}, {\n\t\t\tregex: keyTokenRegex,\n\t\t\texpandRegex: keyExpandRegex,\n\t\t\tisMatch: (t, key) => key === t.key ? { key, value: t.id } : false,\n\t\t\tisPrefix: (t, prefix) => !prefix || t.key.substring(0, prefix.length) === prefix\n\t\t\t\t? t.key\n\t\t\t\t: null,\n\t\t});\n\n\t\tthis.inRoomScripts = new TokenList(() => {\n\t\t\tlet c = this.module.player.getActiveChar();\n\t\t\treturn (c && this.roomsScripts.props[c.inRoom.id]?.toArray()) || [];\n\t\t}, {\n\t\t\tregex: keyTokenRegex,\n\t\t\texpandRegex: keyExpandRegex,\n\t\t\tisMatch: (t, key) => key === t.key ? { key, value: t.id } : false,\n\t\t\tisPrefix: (t, prefix) => !prefix || t.key.substring(0, prefix.length) === prefix\n\t\t\t\t? t.key\n\t\t\t\t: null,\n\t\t});\n\n\t\tthis._listenCtrl(true);\n\t}\n\n\t/**\n\t * Returns a TokenList of available room profiles for the active characters\n\t * current room.\n\t * @returns {TokenList} Token list.\n\t */\n\tgetInRoomProfileTokens() {\n\t\treturn this.inRoomProfiles;\n\t}\n\n\n\t/**\n\t * Returns a TokenList of available room scripts for the active characters\n\t * current room.\n\t * @returns {TokenList} Token list.\n\t */\n\tgetInRoomScriptTokens() {\n\t\treturn this.inRoomScripts;\n\t}\n\n\t_listenCtrl(on) {\n\t\tlet cb = on ? 'on' : 'off';\n\t\tthis.ctrlModel[cb]('change', this._onCtrlChange);\n\t\tif (on) {\n\t\t\tthis._onCtrlChange();\n\t\t}\n\t}\n\n\t_onCtrlChange(ev) {\n\t\tif (!this.rooms) return;\n\t\tthis._listenChars(objectKeyDiff(this.chars, this.ctrlModel?.props));\n\t}\n\n\t_listenChars(change) {\n\t\tfor (let charId in change) {\n\t\t\tlet char = change[charId];\n\t\t\tlet prev = this.chars[charId];\n\t\t\tif (char) {\n\t\t\t\tif (!prev) {\n\t\t\t\t\tchar.on('change', this._onCharChange);\n\t\t\t\t\tthis.chars[charId] = char;\n\t\t\t\t}\n\t\t\t} else if (prev) {\n\t\t\t\tprev.off('change', this._onCharChange);\n\t\t\t\tdelete this.chars[charId];\n\t\t\t}\n\t\t}\n\t\tthis._onCharChange();\n\t}\n\n\t_onCharChange() {\n\t\tif (!this.rooms) return;\n\n\t\tlet rooms = {};\n\t\tfor (let charId in this.chars) {\n\t\t\tlet room = this.chars[charId].inRoom;\n\t\t\trooms[room.id] = room;\n\t\t}\n\t\tthis._listenRooms(objectKeyDiff(this.rooms, rooms));\n\t}\n\n\t_listenRooms(change) {\n\t\tfor (let roomId in change) {\n\t\t\tlet room = change[roomId];\n\t\t\tlet prev = this.rooms[roomId];\n\t\t\tif (room) {\n\t\t\t\tif (!prev) {\n\t\t\t\t\troom.on('change', this._onRoomChange);\n\t\t\t\t\tthis.rooms[roomId] = room;\n\t\t\t\t}\n\t\t\t} else if (prev) {\n\t\t\t\tprev.off('change', this._onRoomChange);\n\t\t\t\tdelete this.rooms[roomId];\n\t\t\t}\n\t\t}\n\t\tthis._onRoomChange();\n\t}\n\n\t_onRoomChange() {\n\t\tif (!this.rooms) return;\n\n\t\tlet editableRooms = {};\n\t\tlet scriptableRooms = {};\n\t\tfor (let roomId in this.rooms) {\n\t\t\tlet room = this.rooms[roomId];\n\t\t\tfor (let charId in this.chars) {\n\t\t\t\tif (this.canSetRoomProfile(this.chars[charId], room)) {\n\t\t\t\t\teditableRooms[roomId] = true;\n\t\t\t\t}\n\t\t\t\tif (this.canSetRoomScript(this.chars[charId], room)) {\n\t\t\t\t\tscriptableRooms[roomId] = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Editable rooms\n\t\tlet editableRoomsChange = objectKeyDiff(this.roomsProfiles, editableRooms);\n\t\tif (!Object.keys(editableRoomsChange)) {\n\t\t\treturn;\n\t\t}\n\t\tlet editableRoomsUpdate = {};\n\t\tfor (let roomId in editableRoomsChange) {\n\t\t\t// On new roomProfiles\n\t\t\tif (editableRoomsChange[roomId]) {\n\t\t\t\teditableRoomsUpdate[roomId] = null;\n\t\t\t\tthis.module.api.get('core.room.' + roomId + '.profiles').then(profiles => {\n\t\t\t\t\tif (this.roomsProfiles?.props[roomId] === null) {\n\t\t\t\t\t\tprofiles.on();\n\t\t\t\t\t\tthis.roomsProfiles.set({ [roomId]: profiles });\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t// On removed roomProfiles\n\t\t\t} else {\n\t\t\t\teditableRoomsUpdate[roomId] = undefined;\n\t\t\t\tthis.roomsProfiles.props[roomId]?.off();\n\t\t\t}\n\t\t}\n\t\tthis.roomsProfiles.set(editableRoomsUpdate);\n\n\t\t// Scriptable rooms\n\t\tlet scriptableRoomsChange = objectKeyDiff(this.roomsScripts, scriptableRooms);\n\t\tif (!Object.keys(scriptableRoomsChange)) {\n\t\t\treturn;\n\t\t}\n\t\tlet scriptableRoomsUpdate = {};\n\t\tfor (let roomId in scriptableRoomsChange) {\n\t\t\t// On new roomScripts\n\t\t\tif (scriptableRoomsChange[roomId]) {\n\t\t\t\tscriptableRoomsUpdate[roomId] = null;\n\t\t\t\tthis.module.api.get('core.room.' + roomId + '.scripts').then(scripts => {\n\t\t\t\t\tif (this.roomsScripts?.props[roomId] === null) {\n\t\t\t\t\t\tscripts.on();\n\t\t\t\t\t\tthis.roomsScripts.set({ [roomId]: scripts });\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t// On removed roomScripts\n\t\t\t} else {\n\t\t\t\tscriptableRoomsUpdate[roomId] = undefined;\n\t\t\t\tthis.roomsScripts.props[roomId]?.off();\n\t\t\t}\n\t\t}\n\t\tthis.roomsScripts.set(scriptableRoomsUpdate);\n\t}\n\n\t/**\n\t * Checks if a controlled character can set room profile.\n\t * @param {Model} ctrl Controlled character model.\n\t * @param {Model} room Room model.\n\t * @returns {boolean} True if allowed to set room profile, otherwise false.\n\t */\n\tcanSetRoomProfile(ctrl, room) {\n\t\treturn !ctrl.puppeteer && (this.module.player.isBuilder() || (room.owner && room.owner.id == ctrl.id));\n\t}\n\n\t/**\n\t * Checks if a controlled character can set room script.\n\t * @param {Model} ctrl Controlled character model.\n\t * @param {Model} room Room model.\n\t * @returns {boolean} True if allowed to set room script, otherwise false.\n\t */\n\tcanSetRoomScript(ctrl, room) {\n\t\treturn !ctrl.puppeteer && (this.module.player.isBuilder() || (room.owner && room.owner.id == ctrl.id));\n\t}\n\n\tdispose() {\n\t\tfor (let roomId in this.roomsProfiles) {\n\t\t\tthis.roomsProfiles[roomId].off();\n\t\t}\n\t\tfor (let roomId in this.roomsScripts) {\n\t\t\tthis.roomsScripts[roomId].off();\n\t\t}\n\t\tfor (let roomId in this.rooms) {\n\t\t\tthis.rooms[roomId].off('change', this._onRoomChange);\n\t\t}\n\t\tfor (let charId in this.chars) {\n\t\t\tthis.chars[charId].off('change', this._onCharChange);\n\t\t}\n\t\tthis.roomsProfiles = null;\n\t\tthis.roomsScripts = null;\n\t\tthis.rooms = null;\n\t\tthis.chars = null;\n\t\tthis._listenPlayer(false);\n\t}\n}\n\nexport default RoomAccess;\n","import { Model } from 'modapp-resource';\n\nconst settingsStoragePrefix = 'settings.user.';\n\n/**\n * Settings stores local settings in the local storage per player.\n */\nclass Settings {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\t\tthis.params = params;\n\n\t\tthis.app.require([ 'auth' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.settings = {};\n\t}\n\n\tloadSettings(id, defaultSettings) {\n\t\tif (this.settings[id]) {\n\t\t\tthrow new Error(\"Settings loaded registered for: \" + id);\n\t\t}\n\n\t\tlet m = new Model({ data: defaultSettings, eventBus: this.app.eventBus });\n\t\tlet c = {\n\t\t\tm,\n\t\t\tcb: null,\n\t\t\tdef: defaultSettings,\n\t\t\tuser: null,\n\t\t};\n\t\tthis.settings[id] = c;\n\n\t\treturn this.module.auth.getUserPromise()\n\t\t\t.then(user => {\n\t\t\t\tc.user = user;\n\t\t\t\treturn m.set(Object.assign({},\n\t\t\t\t\tthis._storedSettings(user, id),\n\t\t\t\t\tthis._paramSettings(id),\n\t\t\t\t));\n\t\t\t})\n\t\t\t.then(() => {\n\t\t\t\t// Listen and save any changes to settings\n\t\t\t\tc.cb = () => this._onSettingsChange(id);\n\t\t\t\tm.on('change', c.cb);\n\t\t\t\tc.cb();\n\t\t\t\treturn m;\n\t\t\t});\n\t}\n\n\t_storedSettings(user, id) {\n\t\tif (!localStorage) return null;\n\n\t\t// Load settings\n\t\tlet data = localStorage.getItem(settingsStoragePrefix + user.id + '.' + id);\n\t\tlet o = data ? JSON.parse(data) : null;\n\t\tif (!o || typeof o != 'object') {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn o;\n\t}\n\n\t_paramSettings(id) {\n\t\tlet p = this.params[id];\n\t\tif (!p || typeof p !== 'object') return null;\n\n\t\tlet o = {};\n\t\tfor (let k in p) {\n\t\t\ttry {\n\t\t\t\to[k] = JSON.parse(p[k]);\n\t\t\t} catch (e) {\n\t\t\t\to[k] = p[k];\n\t\t\t}\n\t\t}\n\t\treturn o;\n\t}\n\n\t_onSettingsChange(id) {\n\t\tlet c = this.settings[id];\n\t\t// Store the settings that are different from default\n\t\tif (c && localStorage) {\n\t\t\tlet props = c.m.props;\n\t\t\tlet o = props;\n\t\t\tif (c.def) {\n\t\t\t\to = {};\n\t\t\t\tfor (let k in props) {\n\t\t\t\t\tif (!c.def.hasOwnProperty(k) || props[k] !== c.def[k]) {\n\t\t\t\t\t\to[k] = props[k];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tlocalStorage.setItem(settingsStoragePrefix + c.user.id + '.' + id, JSON.stringify(o));\n\t\t}\n\t}\n\n\tdispose() {\n\t\tif (this.settings) {\n\t\t\tfor (let k in this.settings) {\n\t\t\t\tlet c = this.settings[k];\n\t\t\t\tif (c.cb) {\n\t\t\t\t\tc.m.off('change', c.cb);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.settings = null;\n\t\t}\n\t}\n}\n\nexport default Settings;\n","import getCtrlId from 'utils/getCtrlId';\n\n/**\n * SyncLog is attempts to fetch missing char log entries on connect and\n * reconnects.\n */\nclass SyncLog {\n\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\t// Bind callbacks\n\t\tthis._onCtrlAdd = this._onCtrlAdd.bind(this);\n\t\tthis._onCtrlRemove = this._onCtrlRemove.bind(this);\n\t\tthis._onDisconnect = this._onDisconnect.bind(this);\n\t\tthis._onConnect = this._onConnect.bind(this);\n\n\t\tthis.app.require([\n\t\t\t'charLog',\n\t\t\t'charLogStore',\n\t\t\t'player',\n\t\t\t'api',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t\tthis.checkedChars = {};\n\t\tthis.chars = {};\n\n\t\tthis._setListeners(true);\n\t}\n\n\t_setListeners(on) {\n\t\tlet p = this.module.player;\n\t\tlet cb = on ? 'on' : 'off';\n\t\tthis.module.api[cb]('connect', this._onConnect);\n\t\tthis.module.api[cb]('disconnect', this._onDisconnect);\n\t\tp[cb]('ctrlAdd', this._onCtrlAdd);\n\t\tp[cb]('ctrlRemove', this._onCtrlRemove);\n\t}\n\n\t_onConnect() {\n\t\t// On connect\n\t\tfor (let ctrlId in this.chars) {\n\t\t\tif (!this.checkedChars[ctrlId]) {\n\t\t\t\tthis._checkChar(ctrlId, this.chars[ctrlId]);\n\t\t\t}\n\t\t}\n\t}\n\n\t_onDisconnect() {\n\t\t// We are disconnected. All characters need to be resynced.\n\t\tthis.checkedChars = {};\n\t}\n\n\t_onCtrlAdd(ev) {\n\t\tlet char = ev.char;\n\t\tlet ctrlId = getCtrlId(char);\n\t\tthis.chars[ctrlId] = char;\n\t\tif (!this.checkedChars[ctrlId]) {\n\t\t\tthis._checkChar(ctrlId, char);\n\t\t}\n\t}\n\n\t_onCtrlRemove(ev) {\n\t\tdelete this.chars[getCtrlId(ev.char)];\n\t}\n\n\t_checkChar(ctrlId, char) {\n\t\tthis.checkedChars[ctrlId] = true;\n\t\tthis._getLastEvents(ctrlId)\n\t\t\t.then(evs => this.module.api.call('log.events', 'get', {\n\t\t\t\tcharId: char.id,\n\t\t\t\tpuppeteerId: char.puppeteer ? char.puppeteer.id : undefined,\n\t\t\t\tstartTime: evs.length ? evs[0].time : 0,\n\t\t\t}).then(result => {\n\t\t\t\tfor (let ev of result.events) {\n\t\t\t\t\t// If we don't have the event already, add it to charLog\n\t\t\t\t\tif (evs.findIndex(v => v.id == ev.id) == -1) {\n\t\t\t\t\t\tthis.module.charLog.addEvent(ev, char);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}))\n\t\t\t.catch(err => {\n\t\t\t\tconsole.error(\"[SyncLog] Error synchronizing char \" + ctrlId + \": \", err);\n\t\t\t});\n\t}\n\n\t_getLastEvents(ctrlId) {\n\t\tlet lastEvents = [];\n\t\treturn this.module.charLogStore.getEvents(ctrlId, null, ev => {\n\t\t\tif (lastEvents.length) {\n\t\t\t\tif (lastEvents[0].time != ev.time) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tlastEvents.push(ev);\n\t\t}).then(() => lastEvents);\n\t}\n\n\n\tdispose() {\n\t\tthis._setListeners(false);\n\t\tthis.module = null;\n\t}\n\n}\n\nexport default SyncLog;\n\n","import counterString from 'utils/counterString';\n\n/**\n * TabUnseen shows an unseen counter in the browser tab.\n */\nclass TabUnseen {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\t// Bind callbacks\n\t\tthis._onChange = this._onChange.bind(this);\n\n\t\tthis.app.require([ 'charLog' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t\tthis.originalTitle = document.title;\n\t\tthis.unseen = this.module.charLog.getUnseen();\n\t\tthis.unseenTargeted = this.module.charLog.getUnseenTargeted();\n\n\t\tthis.unseen.on('change', this._onChange);\n\t\tthis.unseenTargeted.on('change', this._onChange);\n\t\tthis._onChange();\n\t}\n\n\t_onChange() {\n\t\t// Get highest value instead of sum, because multiple character may have\n\t\t// counted the same log event.\n\t\tlet p = this.unseen.props;\n\t\tlet t = this.unseenTargeted.props;\n\t\tlet max = 0;\n\t\tlet hasTargeted = false;\n\t\tfor (let charId in p) {\n\t\t\tif (p[charId] > max) {\n\t\t\t\tmax = p[charId];\n\t\t\t}\n\t\t\tif (t[charId]) {\n\t\t\t\thasTargeted = true;\n\t\t\t}\n\t\t}\n\n\t\tdocument.title = (max > 0\n\t\t\t? hasTargeted\n\t\t\t\t? '[' + counterString(max) + '] '\n\t\t\t\t: '(' + counterString(max) + ') '\n\t\t\t: '') + this.originalTitle;\n\t}\n\n\tdispose() {\n\t\tdocument.title = this.originalTitle;\n\t\tthis.unseen.off('change', this._onChange);\n\t\tthis.unseenTargeted.off('change', this._onChange);\n\t}\n}\n\nexport default TabUnseen;\n","import { ModelWrapper, ModelToCollection } from 'modapp-resource';\nimport TokenList from 'classes/TokenList';\nimport ItemList from 'classes/ItemList';\nimport {\n\ttagTokenRegex,\n\ttagExpandRegex,\n} from 'utils/regex';\nimport l10n from 'modapp-l10n';\n\nconst preferences = [\n\t{ id: \"like\", name: l10n.l('tags.like', \"Like\") },\n\t{ id: \"dislike\", name: l10n.l('tags.dislike', \"Dislike\") },\n];\n\n/**\n * Tags holds a list of available global tags.\n */\nclass Tags {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\t// Bind callbacks\n\t\tthis._onPlayerChange = this._onPlayerChange.bind(this);\n\n\t\tthis.app.require([ 'auth', 'api', 'player' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t\tthis.tags = new ModelWrapper(null, {\n\t\t\teventBus: this.app.eventBus,\n\t\t});\n\t\tthis.collection = new ModelToCollection(this.tags, {\n\t\t\tcompare: (a, b) => {\n\t\t\t\ttry {\n\t\t\t\t\treturn a.value.key.localeCompare(b.value.key) || a.key.localeCompare(b.key);\n\t\t\t\t} catch (e) {\n\t\t\t\t\tconsole.error(\"Error comparing tags: \", e, a, b);\n\t\t\t\t}\n\t\t\t},\n\t\t\tfilter: (k, v) => (!v.role || this.module.player.hasAnyRole(v.role, 'admin'))\n\t\t\t\t&& (!v.idRole || this.module.player.hasAnyIdRole(v.idRole, 'overseer')),\n\t\t\teventBus: this.app.eventBus,\n\t\t});\n\t\tthis.tagsList = new TokenList(() => this.collection, {\n\t\t\tregex: tagTokenRegex,\n\t\t\texpandRegex: tagExpandRegex,\n\t\t\tisMatch: (t, key) => key === t.key ? { key, value: t.id } : false,\n\t\t\tisPrefix: (t, prefix) => !prefix || t.key.substring(0, prefix.length) === prefix\n\t\t\t\t? t.key\n\t\t\t\t: null,\n\t\t});\n\t\tthis.preferenceList = new ItemList({\n\t\t\titems: [\n\t\t\t\t{\n\t\t\t\t\tkey: \"like\",\n\t\t\t\t\tvalue: \"like\",\n\t\t\t\t\talias: [ \"yes\" ],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tkey: \"dislike\",\n\t\t\t\t\tvalue: \"dislike\",\n\t\t\t\t\talias: [ \"no\" ],\n\t\t\t\t},\n\t\t\t],\n\t\t});\n\t\tthis.groups = new ModelWrapper(null, {\n\t\t\teventBus: this.app.eventBus,\n\t\t});\n\t\tthis.groupsCollection = new ModelToCollection(this.groups, {\n\t\t\tcompare: (a, b) => a.value.order - b.value.order || a.key.localeCompare(b.key),\n\t\t\teventBus: this.app.eventBus,\n\t\t});\n\t\tthis.groupsList = new TokenList(() => this.groupsCollection, {\n\t\t\tregex: tagTokenRegex,\n\t\t\texpandRegex: tagExpandRegex,\n\t\t\tisMatch: (t, key) => key === t.key ? { key, value: t.key } : false,\n\t\t\tisPrefix: (t, prefix) => !prefix || t.key.substring(0, prefix.length) === prefix\n\t\t\t\t? t.key\n\t\t\t\t: null,\n\t\t});\n\n\t\tthis.module.auth.getUserPromise()\n\t\t\t.then(() => Promise.all([\n\t\t\t\tthis.module.api.get('tag.tags'),\n\t\t\t\tthis.module.api.get('tag.groups'),\n\t\t\t]))\n\t\t\t.then(result => {\n\t\t\t\tif (this.tags) {\n\t\t\t\t\tthis.tags.setModel(result[0]);\n\t\t\t\t}\n\t\t\t\tif (this.groups) {\n\t\t\t\t\tthis.groups.setModel(result[1]);\n\t\t\t\t}\n\t\t\t});\n\n\t\tthis._listenPlayer(true);\n\t}\n\n\tgetTags() {\n\t\treturn this.tags;\n\t}\n\n\t/**\n\t * Returns a collection of eligible tags.\n\t * @returns {Collection}\n\t */\n\tgetTagsCollection() {\n\t\treturn this.collection;\n\t}\n\n\tgetTagsList() {\n\t\treturn this.tagsList;\n\t}\n\n\tgetPreferenceList() {\n\t\treturn this.preferenceList;\n\t}\n\n\tgetPreferences() {\n\t\treturn preferences;\n\t}\n\n\tgetTag(key) {\n\t\tkey = key.trim().toLowerCase();\n\t\tlet tags = this.tags.props;\n\t\tfor (let id in tags) {\n\t\t\tlet t = tags[id];\n\t\t\tif (t.key == key) {\n\t\t\t\treturn t;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tgetGroups() {\n\t\treturn this.groups;\n\t}\n\n\tgetGroupsCollection() {\n\t\treturn this.groupsCollection;\n\t}\n\n\tgetGroupsList() {\n\t\treturn this.groupsList;\n\t}\n\n\t_listenPlayer(on) {\n\t\tlet m = this.module.player.getModel();\n\t\tm[on ? 'on' : 'off']('change', this._onPlayerChange);\n\t}\n\n\t_onPlayerChange(change) {\n\t\tif (!change || change.hasOwnProperty('roles') || change.hasOwnProperty('idRoles')) {\n\t\t\t// Yield before refreshing the collection.\n\t\t\t// This is because this.tags model wrapper is triggered\n\t\t\t// on the same event, causing a racing issue.\n\t\t\tsetTimeout(() => {\n\t\t\t\tif (this.collection) {\n\t\t\t\t\tthis.collection.refresh();\n\t\t\t\t}\n\t\t\t}, 10);\n\t\t}\n\t}\n\n\tdispose() {\n\t\tthis.collection.dispose();\n\t\tthis.groupsCollection.dispose();\n\t\tthis.tags.dispose();\n\t\tthis.groups.dispose();\n\t\tthis.collection = null;\n\t\tthis.groupsCollection = null;\n\t\tthis.tags = null;\n\t\tthis.groups = null;\n\t\tthis._listenPlayer(false);\n\t}\n}\n\nexport default Tags;\n","import { ModelComponent } from 'modapp-resource-component';\nimport l10n from 'modapp-l10n';\nimport LabelToggleBox from 'components/LabelToggleBox';\n\n/**\n * TeleportSettings adds a settings tool for teleports to PagePlayerSettings.\n */\nclass TeleportSettings {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'settings',\n\t\t\t'pagePlayerSettings',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\n\t\t// Settings\n\t\tthis.settingsPromise = this.module.settings.loadSettings('teleport', {\n\t\t\tshowOwnRoomsInTeleports: true,\n\t\t});\n\n\t\tthis.settingsPromise.then(settings => {\n\t\t\tthis.module.pagePlayerSettings.addTool({\n\t\t\t\tid: 'showOwnRoomsInTeleports',\n\t\t\t\tsortOrder: 33,\n\t\t\t\tcomponentFactory: (user, player, state) => new ModelComponent(\n\t\t\t\t\tsettings,\n\t\t\t\t\tnew LabelToggleBox(l10n.l('teleportSettings.showOwnRoomsInTeleports', \"List own room teleports\"), false, {\n\t\t\t\t\t\tclassName: 'common--formmargin',\n\t\t\t\t\t\tonChange: (v, c) => settings.set({ showOwnRoomsInTeleports: v }),\n\t\t\t\t\t\tpopupTip: l10n.l('teleportSettings.showOwnRoomsInTeleportsInfo', \"Show own rooms in the list of teleport destination.\"),\n\t\t\t\t\t\tpopupTipClassName: 'popuptip--width-s',\n\t\t\t\t\t}),\n\t\t\t\t\t(m, c) => c.setValue(settings.showOwnRoomsInTeleports, false),\n\t\t\t\t),\n\t\t\t});\n\t\t});\n\t}\n\n\t/**\n\t * @typedef {object} TeleportSettings\n\t * @property {bool} showOwnRoomsInTeleports Flag telling if owned rooms should show up in teleport list.\n\t */\n\n\t/**\n\t * Returns a promise to the teleport settings.\n\t * @returns {Promise.<TeleportSettings>} Promise of settings.\n\t */\n\tgetSettingsPromise() {\n\t\treturn this.settingsPromise;\n\t}\n\n\tdispose() {\n\t\tthis.module.pagePlayerSettings.removeTool('showOwnRoomsInTeleports');\n\t}\n}\n\nexport default TeleportSettings;\n","class Test {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\t\tthis.app.require([], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\n\t}\n\n\t_createDB() {\n\t\t// Let us open our database\n\t\tthis.db = null;\n\n\t\tvar DBOpenRequest = window.indexedDB.open(\"toDoList\", 5);\n\n\t\t// these two event handlers act on the IDBDatabase object,\n\t\t// when the database is opened successfully, or not\n\t\tDBOpenRequest.onerror = function(event) {\n\t\t\tconsole.log('Error loading database.');\n\t\t};\n\n\t\tDBOpenRequest.onsuccess = function(event) {\n\t\t\tconsole.log('Database initialised.');\n\n\t\t\t// store the result of opening the database in the db\n\t\t\t// variable. This is used a lot later on\n\t\t\tthis.db = DBOpenRequest.result;\n\n\t\t\t// Run the displayData() function to populate the task\n\t\t\t// list with all the to-do list data already in the IDB\n\t\t\t// displayData();\n\t\t};\n\n\t\t// This event handles the event whereby a new version of\n\t\t// the database needs to be created Either one has not\n\t\t// been created before, or a new version number has been\n\t\t// submitted via the window.indexedDB.open line above\n\n\t\tDBOpenRequest.onupgradeneeded = function(event) {\n\t\t\tconsole.log(\"Upgrading db: \", event);\n\t\t\tlet db = event.target.result;\n\n\t\t\tdb.onerror = function(event) {\n\t\t\t\tconsole.log('Error loading database.');\n\t\t\t};\n\n\t\t\t// Create an objectStore for this database using\n\t\t\t// IDBDatabase.createObjectStore\n\n\t\t\tlet objectStore = db.createObjectStore(\"toDoList\", { keyPath: \"taskTitle\" });\n\n\t\t\t// define what data items the objectStore will contain\n\n\t\t\tobjectStore.createIndex(\"hours\", \"hours\", { unique: false });\n\t\t\tobjectStore.createIndex(\"minutes\", \"minutes\", { unique: false });\n\t\t\tobjectStore.createIndex(\"day\", \"day\", { unique: false });\n\t\t\tobjectStore.createIndex(\"month\", \"month\", { unique: false });\n\t\t\tobjectStore.createIndex(\"year\", \"year\", { unique: false });\n\n\t\t\tobjectStore.createIndex(\"notified\", \"notified\", { unique: false });\n\n\t\t\tconsole.log('Object store created.');\n\t\t};\n\t}\n\n\tdispose() {\n\t}\n}\n\nexport default Test;\n","import { Elem, Txt } from 'modapp-base-component';\nimport l10n from 'modapp-l10n';\nimport FAIcon from 'components/FAIcon';\n\n/**\n * ToolPageCharNote adds the note tool to PageChar footer.\n */\nclass ToolPageCharNote {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'api',\n\t\t\t'pageChar',\n\t\t\t'player',\n\t\t\t'dialogReport',\n\t\t\t'dialogEditNote',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\n\t\t// Add logout tool\n\t\tthis.module.pageChar.addTool({\n\t\t\tid: 'note',\n\t\t\ttype: 'footer',\n\t\t\tsortOrder: 10,\n\t\t\tcomponentFactory: (ctrl, char) => new Elem(n => n.elem('button', {\n\t\t\t\tclassName: 'btn tiny tinyicon',\n\t\t\t\tevents: {\n\t\t\t\t\tclick: () => this.module.dialogEditNote.open(char.id),\n\t\t\t\t},\n\t\t\t}, [\n\t\t\t\tn.component(new FAIcon('file-text')),\n\t\t\t\tn.component(new Txt(l10n.l('toolPageCharNote.notes', \"Notes\"))),\n\t\t\t])),\n\t\t\tfilter: (ctrl, char) => !this.module.player.ownsChar(char.id),\n\t\t});\n\n\t}\n\n\t/**\n\t * Reports a character profile for char, using your controlled character,\n\t * ctrl, as noteer.\n\t * @param {Model} ctrl Controlled character making the note.\n\t * @param {Model} char Charater whose profile to note.\n\t */\n\tnote(ctrl, char) {\n\t\tthis.module.api.get('core.char.' + char.id).catch((err) => {\n\t\t\tconsole.error(\"Error getting char: \", err);\n\t\t\treturn char;\n\t\t}).then(c => {\n\t\t\tthis.module.dialogReport.open(ctrl.id, c.id, c.puppeteer?.id, {\n\t\t\t\tattachProfile: true,\n\t\t\t});\n\t\t});\n\t}\n\n\tdispose() {\n\t\tthis.module.pageChar.addTool('note');\n\t}\n}\n\nexport default ToolPageCharNote;\n","import { Elem, Txt } from 'modapp-base-component';\nimport l10n from 'modapp-l10n';\nimport FAIcon from 'components/FAIcon';\n\n/**\n * ToolPageCharReport adds the report char profile tool to PageChar footer.\n */\nclass ToolPageCharReport {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'api',\n\t\t\t'pageChar',\n\t\t\t'player',\n\t\t\t'dialogReport',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\n\t\t// Add logout tool\n\t\tthis.module.pageChar.addTool({\n\t\t\tid: 'reportProfile',\n\t\t\ttype: 'footer',\n\t\t\tsortOrder: 20,\n\t\t\tcomponentFactory: (ctrl, char) => new Elem(n => n.elem('button', {\n\t\t\t\tclassName: 'btn tiny tinyicon',\n\t\t\t\tevents: {\n\t\t\t\t\tclick: () => this.reportProfile(ctrl, char),\n\t\t\t\t},\n\t\t\t}, [\n\t\t\t\tn.component(new FAIcon('flag')),\n\t\t\t\tn.component(new Txt(l10n.l('toolPageCharReport.report', \"Report\"))),\n\t\t\t])),\n\t\t\tfilter: (ctrl, char) => !this.module.player.ownsChar(char.id),\n\t\t});\n\n\t}\n\n\t/**\n\t * Reports a character profile for char, using your controlled character,\n\t * ctrl, as reporter.\n\t * @param {Model} ctrl Controlled character making the report.\n\t * @param {Model} char Charater whose profile to report.\n\t */\n\treportProfile(ctrl, char) {\n\t\tthis.module.api.get('core.char.' + char.id).catch((err) => {\n\t\t\tconsole.error(\"Error getting char: \", err);\n\t\t\treturn char;\n\t\t}).then(c => {\n\t\t\tthis.module.dialogReport.open(ctrl.id, c.id, c.puppeteer?.id, {\n\t\t\t\tattachProfile: true,\n\t\t\t});\n\t\t});\n\t}\n\n\tdispose() {\n\t\tthis.module.pageChar.addTool('reportProfile');\n\t}\n}\n\nexport default ToolPageCharReport;\n","import { Elem, Txt } from 'modapp-base-component';\nimport l10n from 'modapp-l10n';\nimport reload from 'utils/reload';\n\nfunction versionCompare(a, b) {\n\tif (!a || !b) {\n\t\treturn { diff: null, level: null };\n\t}\n\n\tlet ap = a.split('.');\n\tlet bp = b.split('.');\n\n\tlet level = 0;\n\tlet diff = 0;\n\twhile (level < 4) {\n\t\tlet av = ap[level];\n\t\tlet bv = bp[level];\n\t\tif (!av || !bv) {\n\t\t\tif (av || bv) {\n\t\t\t\tdiff = av ? 1 : -1;\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\n\t\tdiff = ap[level].localeCompare(bp[level], 'en', { sensitivity: 'base', numeric: true });\n\t\tif (diff) break;\n\t\tlevel++;\n\t}\n\n\t// Before 1.0.0, a \"minor\" update will be considered \"major\".\n\tif (level > 0 && ap[0] === \"0\") {\n\t\tlevel--;\n\t}\n\n\treturn { diff, level };\n}\n\n/**\n * Version compares client and API version to ensure they match.\n */\nclass Version {\n\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\t// Bind callbacks\n\t\tthis._onInfoChange = this._onInfoChange.bind(this);\n\n\t\tthis.app.require([\n\t\t\t'info',\n\t\t\t'confirm',\n\t\t\t'toaster',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.latestVersion = APP_VERSION;\n\t\tthis.clientInfo = this.module.info.getClient();\n\t\tthis.coreInfo = this.module.info.getCore();\n\n\t\tthis._listen(true);\n\t}\n\n\t_listen(on) {\n\t\tlet cb = on ? 'on' : 'off';\n\t\tthis.clientInfo[cb]('change', this._onInfoChange);\n\t\tthis.coreInfo[cb]('change', this._onInfoChange);\n\t}\n\n\t_onInfoChange(change) {\n\t\tif (this.clientInfo.version == this.latestVersion || this.clientInfo.version == APP_VERSION || (change && !change.hasOwnProperty('version'))) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet apiVer = this.coreInfo.version;\n\t\tlet clientVer = this.clientInfo.version;\n\n\t\tif (!apiVer || !clientVer) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet { diff, level } = versionCompare(APP_VERSION, clientVer);\n\t\tif (!diff) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Check if client version works under api version.\n\t\t// Client minor version must be same or lower, but patch level may be greater.\n\t\tlet o = versionCompare(apiVer, clientVer);\n\t\tif (o.diff && o.diff < 0 && o.level < 2) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Store latestVersion we've shown for the user\n\t\tthis.latestVersion = clientVer;\n\n\t\tif (level == 0) {\n\t\t\tthis._confirm(\n\t\t\t\tl10n.l('version.majorUpdate', \"Major update\"),\n\t\t\t\tl10n.l('version.majorUpdateBody2', \"It is recommended that you update your client for things to continue to work properly.\"),\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tif (level == 1) {\n\t\t\tthis._confirm(\n\t\t\t\tl10n.l('version.minorUpdate', \"Minor update\"),\n\t\t\t\tl10n.l('version.minorUpdateBody2', \"You may continue playing. But updating your client can give you access to new features.\"),\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tif (level >= 2) {\n\t\t\tthis._confirm(\n\t\t\t\tl10n.l('version.patchUpdate', \"Patch update\"),\n\t\t\t\tl10n.l('version.patchUpdateBody2', \"You may continue playing. But if you have experienced some issues, updating your client may solve them.\"),\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t}\n\n\t_confirm(title, desc) {\n\t\tthis.module.toaster.open({\n\t\t\ttitle,\n\t\t\tcontent: close => new Elem(n => n.elem('div', [\n\t\t\t\tn.component(new Txt(l10n.l('version.gameIsUpdated', \"The game has been updated.\"), { tagName: 'p' })),\n\t\t\t\tn.component(new Txt(desc, { tagName: 'p' })),\n\t\t\t\tn.elem('div', { className: 'flex-row margin8' }, [\n\t\t\t\t\tn.elem('button', {\n\t\t\t\t\t\tclassName: 'btn primary',\n\t\t\t\t\t\tevents: { click: () => {\n\t\t\t\t\t\t\t// If the serviceWorker module exists, we use that\n\t\t\t\t\t\t\t// one to clear the cache and reload. Otherwise we\n\t\t\t\t\t\t\t// try to reload and clear the cache with a simple\n\t\t\t\t\t\t\t// fetch.\n\t\t\t\t\t\t\tlet serviceWorker = this.app.getModule('serviceWorker');\n\t\t\t\t\t\t\tif (serviceWorker) {\n\t\t\t\t\t\t\t\tserviceWorker.clearCacheAndReload(true).catch(err => {\n\t\t\t\t\t\t\t\t\tthis.module.confirm.open(() => reload(true), {\n\t\t\t\t\t\t\t\t\t\ttitle: l10n.l('version.error', \"An error occurred\"),\n\t\t\t\t\t\t\t\t\t\tconfirm: l10n.l('version.ok', \"Okay\"),\n\t\t\t\t\t\t\t\t\t\tbody: typeof err == 'string' ? err : err?.message || JSON.stringify(err),\n\t\t\t\t\t\t\t\t\t\tcancel: null,\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\treload(true);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} },\n\t\t\t\t\t}, [\n\t\t\t\t\t\tn.component(new Txt(l10n.l('version.update', \"Update\"))),\n\n\t\t\t\t\t]),\n\t\t\t\t\tn.elem('button', {\n\t\t\t\t\t\tclassName: 'btn secondary',\n\t\t\t\t\t\tevents: { click: close },\n\t\t\t\t\t}, [\n\t\t\t\t\t\tn.component(new Txt(l10n.l('version.later', \"Later\"))),\n\t\t\t\t\t]),\n\t\t\t\t]),\n\t\t\t])),\n\t\t\tcloseOn: 'button',\n\t\t});\n\t}\n\n\tdispose() {\n\t\tthis._listen(false);\n\t\tthis.coreInfo = null;\n\t\tthis.clientInfo = null;\n\t}\n}\n\nexport default Version;\n","/**\n * BundleLoader waits for the player to be logged in, and then loads additional\n * bundles depending on the player roles.\n */\nclass BundleLoader {\n\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\t\t// Bind callbacks\n\t\tthis._onModelChange = this._onModelChange.bind(this);\n\n\t\tthis.app.require([ 'player' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t\tthis.loaded = {};\n\t\tthis.promises = {};\n\t\tthis.playerModel = this.module.player.getModel();\n\t\tthis.playerModel.on('change', this._onModelChange);\n\t\tthis._onModelChange();\n\t}\n\n\t_onModelChange(change) {\n\t\tlet playerMod = this.module.player;\n\t\tif (!change || change.hasOwnProperty('roles')) {\n\t\t\tif (playerMod.isStaff()) {\n\t\t\t\tthis._loadStaffModules();\n\t\t\t}\n\t\t\tif (playerMod.isAdmin()) {\n\t\t\t\tthis._loadAdminModules();\n\t\t\t}\n\t\t\tif (playerMod.isModerator()) {\n\t\t\t\tthis._loadModModules();\n\t\t\t}\n\t\t\tif (playerMod.isBuilder()) {\n\t\t\t\tthis._loadBuildModules();\n\t\t\t}\n\t\t\tif (playerMod.isHelper()) {\n\t\t\t\tthis._loadHelperModules();\n\t\t\t}\n\t\t}\n\t\tif (!change || change.hasOwnProperty('idRoles')) {\n\t\t\tif (playerMod.isBonus()) {\n\t\t\t\tthis._loadBonusModules();\n\t\t\t}\n\t\t\tif (playerMod.isPioneer()) {\n\t\t\t\tthis._loadPioneerModules();\n\t\t\t}\n\t\t\tif (playerMod.isSupporter()) {\n\t\t\t\tthis._loadSupporterModules();\n\t\t\t}\n\t\t\tif (playerMod.isOverseer()) {\n\t\t\t\tthis._loadOverseerModules();\n\t\t\t\tthis._loadAdminModules();\n\t\t\t\tthis._loadModModules();\n\t\t\t\tthis._loadBuildModules();\n\t\t\t\tthis._loadStaffModules();\n\t\t\t\tthis._loadHelperModules();\n\t\t\t}\n\t\t}\n\t}\n\n\t_loadAdminModules() {\n\t\tif (this.loaded.admin) return;\n\t\tthis.loaded.admin = true;\n\t\t// Load admin modules\n\t\timport(/* webpackChunkName: \"admin\" */ 'modules/admin-modules').then(({ default: modules }) => {\n\t\t\tthis._getPromise('staff').then(() => app.loadBundle(modules).then(result => {\n\t\t\t\tconsole.log(\"Admin modules: \", result);\n\t\t\t\tthis._resolvePromise('admin');\n\t\t\t}));\n\t\t});\n\t}\n\n\t_loadModModules() {\n\t\tif (this.loaded.moderator) return;\n\t\tthis.loaded.moderator = true;\n\t\t// Load moderator modules\n\t\timport(/* webpackChunkName: \"moderator\" */ 'modules/moderator-modules').then(({ default: modules }) => {\n\t\t\tthis._getPromise('staff').then(() => app.loadBundle(modules).then(result => {\n\t\t\t\tconsole.log(\"Moderator modules: \", result);\n\t\t\t\tthis._resolvePromise('moderator');\n\t\t\t}));\n\t\t});\n\t}\n\n\t_loadBuildModules() {\n\t\tif (this.loaded.builder) return;\n\t\tthis.loaded.builder = true;\n\t\t// Load builder modules\n\t\timport(/* webpackChunkName: \"builder\" */ 'modules/builder-modules').then(({ default: modules }) => {\n\t\t\tthis._getPromise('staff').then(() => app.loadBundle(modules).then(result => {\n\t\t\t\tconsole.log(\"Builder modules: \", result);\n\t\t\t\tthis._resolvePromise('builder');\n\t\t\t}));\n\t\t});\n\t}\n\n\t_loadHelperModules() {\n\t\tif (this.loaded.helper) return;\n\t\tthis.loaded.helper = true;\n\t\t// Load helper modules\n\t\timport(/* webpackChunkName: \"helper\" */ 'modules/helper-modules').then(({ default: modules }) => {\n\t\t\tthis._getPromise('staff').then(() => app.loadBundle(modules).then(result => {\n\t\t\t\tconsole.log(\"Helper modules: \", result);\n\t\t\t\tthis._resolvePromise('helper');\n\t\t\t}));\n\t\t});\n\t}\n\n\t_loadOverseerModules() {\n\t\tif (this.loaded.overseer) return;\n\t\tthis.loaded.overseer = true;\n\t\t// Load overseer modules\n\t\timport(/* webpackChunkName: \"overseer\" */ 'modules/overseer-modules').then(({ default: modules }) => {\n\t\t\tthis._getPromise('admin').then(() => app.loadBundle(modules).then(result => {\n\t\t\t\tconsole.log(\"Overseer modules: \", result);\n\t\t\t\tthis._resolvePromise('overseer');\n\t\t\t}));\n\t\t});\n\t}\n\n\t_loadPioneerModules() {\n\t\tif (this.loaded.pioneer) return;\n\t\tthis.loaded.pioneer = true;\n\t\t// Load pioneer modules\n\t\timport(/* webpackChunkName: \"pioneer\" */ 'modules/pioneer-modules').then(({ default: modules }) => {\n\t\t\tapp.loadBundle(modules).then(result => {\n\t\t\t\tconsole.log(\"Pioneer modules: \", result);\n\t\t\t\tthis._resolvePromise('pioneer');\n\t\t\t});\n\t\t});\n\t}\n\n\t_loadSupporterModules() {\n\t\tif (this.loaded.supporter) return;\n\t\tthis.loaded.supporter = true;\n\t\t// Load supporter modules\n\t\timport(/* webpackChunkName: \"supporter\" */ 'modules/supporter-modules').then(({ default: modules }) => {\n\t\t\tapp.loadBundle(modules).then(result => {\n\t\t\t\tconsole.log(\"Supporter modules: \", result);\n\t\t\t\tthis._resolvePromise('supporter');\n\t\t\t});\n\t\t});\n\t}\n\n\t_loadStaffModules() {\n\t\tif (this.loaded.staff) return;\n\t\tthis.loaded.staff = true;\n\t\t// Load staff modules\n\t\timport(/* webpackChunkName: \"staff\" */ 'modules/staff-modules').then(({ default: modules }) => {\n\t\t\tapp.loadBundle(modules).then(result => {\n\t\t\t\tconsole.log(\"Staff modules: \", result);\n\t\t\t\tthis._resolvePromise('staff');\n\t\t\t});\n\t\t});\n\t}\n\n\t_loadBonusModules() {\n\t\tif (this.loaded.bonus) return;\n\t\tthis.loaded.bonus = true;\n\t\t// Load bonus modules\n\t\timport(/* webpackChunkName: \"bonus\" */ 'modules/bonus-modules').then(({ default: modules }) => {\n\t\t\tapp.loadBundle(modules).then(result => {\n\t\t\t\tconsole.log(\"Bonus modules: \", result);\n\t\t\t\tthis._resolvePromise('bonus');\n\t\t\t});\n\t\t});\n\t}\n\n\t_resolvePromise(bundle) {\n\t\tlet o = this.promises[bundle];\n\t\tif (o) {\n\t\t\tif (o.resolve) {\n\t\t\t\to.resolve();\n\t\t\t\tdelete o.resolve;\n\t\t\t}\n\t\t} else {\n\t\t\to = { promise: Promise.resolve() };\n\t\t\tthis.promises[bundle] = o;\n\t\t}\n\t}\n\n\t_getPromise(bundle) {\n\t\tlet o = this.promises[bundle];\n\t\tif (!o) {\n\t\t\to = {};\n\t\t\to.promise = new Promise((resolve) => {\n\t\t\t\to.resolve = resolve;\n\t\t\t});\n\t\t\tthis.promises[bundle] = o;\n\t\t}\n\t\treturn o.promise;\n\t}\n\n\tdispose() {\n\t\t// Can only stop listening to player model.\n\t\t// There is no way to unload modules.\n\t\tthis.playerModel.off('change', this._onModelChange);\n\t}\n}\n\nexport default BundleLoader;\n","import { Context, Elem, Txt } from 'modapp-base-component';\nimport { ModelComponent } from 'modapp-resource-component';\nimport { ModifyModel } from 'modapp-resource';\nimport Collapser from 'components/Collapser';\nimport LabelToggleBox from 'components/LabelToggleBox';\nimport FAIcon from 'components/FAIcon';\nimport l10n from 'modapp-l10n';\n\nclass CharSettingsDndComponent {\n\tconstructor(module, char, puppeteer, charSettings, state) {\n\t\tthis.module = module;\n\t\tthis.char = char;\n\t\tthis.puppeteer = puppeteer;\n\t\tthis.charSettings = charSettings;\n\t\tthis.state = state;\n\t}\n\n\trender(el) {\n\t\tlet components = {};\n\t\tthis.elem = new Context(\n\t\t\t() => new ModifyModel(this.charSettings, {\n\t\t\t\teventBus: this.module.self.app.eventBus,\n\t\t\t}),\n\t\t\tcharSettings => charSettings.dispose(),\n\t\t\tcharSettings => new Elem(n => n.elem('div', [\n\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\tcharSettings,\n\t\t\t\t\tnew LabelToggleBox(l10n.l('charSettingsDnd.enabledDoNotDisturb', \"Enable do not disturb\"), false, {\n\t\t\t\t\t\tclassName: 'common--formmargin',\n\t\t\t\t\t\tonChange: (v, c) => this._setValue(charSettings, v),\n\t\t\t\t\t\tpopupTip: l10n.l('charSettingsDnd.enabledDoNotDisturbInfo', \"Prevent messages to be sent to and from the character.\"),\n\t\t\t\t\t\tpopupTipClassName: 'popuptip--width-s',\n\t\t\t\t\t}),\n\t\t\t\t\t(m, c) => c.setValue(m.dnd, false),\n\t\t\t\t)),\n\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\tcharSettings,\n\t\t\t\t\tnew Collapser(),\n\t\t\t\t\t(m, c) => c.setComponent(components.setDndMsg = m.dnd\n\t\t\t\t\t\t? components.setDndMsg || new Elem(n => n.elem('button', { events: {\n\t\t\t\t\t\t\tclick: () => this.module.dialogEditDndMsg.open(this.char, this.puppeteer, this.charSettings),\n\t\t\t\t\t\t}, className: 'btn medium light full-width icon-left' }, [\n\t\t\t\t\t\t\tn.component(new FAIcon('pencil')),\n\t\t\t\t\t\t\tn.component(new Txt(l10n.l('charSettingsDnd.editMessage', \"Edit message\"))),\n\t\t\t\t\t\t]))\n\t\t\t\t\t\t: null,\n\t\t\t\t\t),\n\t\t\t\t)),\n\t\t\t])),\n\t\t);\n\t\tthis.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n\n\t_setValue(charSettings, v) {\n\t\tcharSettings.set({ dnd: v });\n\t\tthis.module.player.getPlayer().call('setCharSettings', {\n\t\t\tcharId: this.char.id,\n\t\t\tpuppeteerId: this.puppeteer ? this.puppeteer.id : undefined,\n\t\t\tdnd: v,\n\t\t}).catch(err => {\n\t\t\tif (charSettings.getModel()) {\n\t\t\t\tcharSettings.reset('dnd');\n\t\t\t}\n\t\t\tthis.module.toaster.openError(err);\n\t\t});\n\t}\n}\n\nexport default CharSettingsDndComponent;\n","import CharSettingsDndComponent from './CharSettingsDndComponent';\n\n/**\n * CharSettingsDnd adds a tool to PageCharSettings to set Do not disturb.\n */\nclass CharSettingsDnd {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'player',\n\t\t\t'pageCharSettings',\n\t\t\t'pagePuppeteerSettings',\n\t\t\t'toaster',\n\t\t\t'dialogEditDndMsg',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\n\t\tthis.module.pageCharSettings.addTool({\n\t\t\tid: 'dnd',\n\t\t\ttype: 'topSection',\n\t\t\tsortOrder: 10,\n\t\t\tcomponentFactory: (char, charSettings, state) => new CharSettingsDndComponent(this.module, char, null, charSettings, state),\n\t\t});\n\t\tthis.module.pagePuppeteerSettings.addTool({\n\t\t\tid: 'dnd',\n\t\t\ttype: 'topSection',\n\t\t\tsortOrder: 10,\n\t\t\tcomponentFactory: (puppeteer, charSettings, state) => new CharSettingsDndComponent(this.module, puppeteer.puppet, puppeteer.char, charSettings, state),\n\t\t});\n\t}\n\n\tdispose() {\n\t\tthis._listen(false);\n\t\tthis.module.pageCharSettings.removeTool('dnd');\n\t\tthis.module.pagePuppeteerSettings.removeTool('dnd');\n\t}\n}\n\nexport default CharSettingsDnd;\n","import { Elem } from 'modapp-base-component';\nimport { CollectionList, ModelTxt } from 'modapp-resource-component';\nimport FAIcon from './FAIcon';\nimport './keywordList.scss';\n\n/**\n * KeywordList shows a list of keywords.\n */\nclass KeywordList {\n\n\t/**\n\t * Creates an instance of KeywordList\n\t * @param {Model} keywords Model of char keywords.\n\t * @param {object} [opt] Optional parameters.\n\t * @param {function} [opt.keywordCallback] Callback function to get the keyword: function(keyword) => {String} . Defaults to: k => k\n\t * @param {boolean} [opt.onEdit] Callback called on edit icon click. Defaults to hiding the edit icon. function(keyword, pref, keywords)\n\t * @param {boolean} [opt.onDelete] Callback called on delete icon click. Defaults to hiding the delete icon. function(keyword, pref, keywords)\n\t * @param {EventBus} [opt.eventBus] Event bus.\n\t */\n\tconstructor(keywords, opt) {\n\t\topt = Object.assign({ horizontal: true }, opt);\n\t\topt.className = 'keywordlist' + (opt.className ? ' ' + opt.className : '');\n\t\tthis.opt = opt;\n\t\tthis.keywords = keywords;\n\t}\n\n\n\trender(el) {\n\t\tlet onEdit = this.opt.onEdit;\n\t\tlet onDelete = this.opt.onDelete;\n\t\tlet keywordCallback = this.opt.keywordCallback || (k => k);\n\t\tthis.elem = new Elem(n => n.elem('div', { className: this.opt.className }, [\n\t\t\tn.component(new CollectionList(\n\t\t\t\tthis.keywords,\n\t\t\t\tkeyword => new Elem(n => n.elem('div', {\n\t\t\t\t\tclassName: 'keywordlist--keyword ' + (onEdit ? ' editable' : ''),\n\t\t\t\t\tevents: {\n\t\t\t\t\t\tclick: (c, ev) => {\n\t\t\t\t\t\t\tif (onEdit) {\n\t\t\t\t\t\t\t\tonEdit(keyword, this.keywords);\n\t\t\t\t\t\t\t\tev.stopPropagation();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t}, [\n\t\t\t\t\tn.component(new ModelTxt(keyword, keywordCallback)),\n\t\t\t\t\tn.component(onDelete ? new Elem(n => n.elem('button', {\n\t\t\t\t\t\tclassName: 'keywordlist--delete',\n\t\t\t\t\t\tevents: {\n\t\t\t\t\t\t\tclick: (c, e) => {\n\t\t\t\t\t\t\t\tonDelete(keyword, this.keywords);\n\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t}, [\n\t\t\t\t\t\tn.component(new FAIcon('times')),\n\t\t\t\t\t])) : null),\n\t\t\t\t])),\n\t\t\t\t{\n\t\t\t\t\tclassName: 'keywordlist--list',\n\t\t\t\t\tsubClassName: () => 'keywordlist--item',\n\t\t\t\t\thorizontal: true,\n\t\t\t\t},\n\t\t\t)),\n\t\t]));\n\t\treturn this.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n}\n\nexport default KeywordList;\n","import { Elem, Txt, Context, Input } from 'modapp-base-component';\nimport { ModelComponent } from 'modapp-resource-component';\nimport { ModifyModel } from 'modapp-resource';\nimport l10n from 'modapp-l10n';\n// import LabelToggleBox from 'components/LabelToggleBox';\nimport PanelSection from 'components/PanelSection';\nimport KeywordList from 'components/KeywordList';\nimport FAIcon from 'components/FAIcon';\nimport objectDefault from 'utils/objectDefault';\n\nconst txtErrorAddingTrigger = l10n.l('charSettingsTriggers.failedToAddTrigger', \"Failed to add trigger\");\n\nclass CharSettingsTriggersComponent {\n\tconstructor(module, char, puppeteer, charSettings, state) {\n\t\tthis.module = module;\n\t\tthis.char = char;\n\t\tthis.puppeteer = puppeteer;\n\t\tthis.charSettings = charSettings;\n\t\tthis.state = objectDefault(state, {\n\t\t\ttrigger: '',\n\t\t});\n\t}\n\n\trender(el) {\n\t\tthis.elem = new PanelSection(\n\t\t\tl10n.l('charSettingsTriggers.mentionTriggers', \"Mention triggers\"),\n\t\t\tnew Context(\n\t\t\t\t() => new ModifyModel(this.charSettings, {\n\t\t\t\t\teventBus: this.module.self.app.eventBus,\n\t\t\t\t}),\n\t\t\t\tcharSettings => charSettings.dispose(),\n\t\t\t\tcharSettings => new ModelComponent(\n\t\t\t\t\tcharSettings,\n\t\t\t\t\tnew Elem(n => n.elem('div', [\n\t\t\t\t\t\t// n.component('highlightTriggers', new LabelToggleBox(l10n.l('charSettingsTriggers.enableHighlight', \"Highlight triggers\"), false, {\n\t\t\t\t\t\t// \tclassName: 'common--formmargin',\n\t\t\t\t\t\t// \tonChange: (v, c) => this._setValue(charSettings, v),\n\t\t\t\t\t\t// \tpopupTip: l10n.l('charSettingsTriggers.enableHighlightInfo', \"Highlight trigger words and phrases in the chat log.\"),\n\t\t\t\t\t\t// \tpopupTipClassName: 'popuptip--width-s'\n\t\t\t\t\t\t// })),\n\t\t\t\t\t\tn.elem('div', [\n\t\t\t\t\t\t\tn.elem('div', { className: 'common--sectionpadding' }, [\n\t\t\t\t\t\t\t\tn.elem('div', { className: 'charsettingstriggers--trigger' }, [\n\t\t\t\t\t\t\t\t\tn.component('trigger', new Input(this.state.trigger, {\n\t\t\t\t\t\t\t\t\t\tattributes: {\n\t\t\t\t\t\t\t\t\t\t\tplaceholder: l10n.t('charSettingsTriggers.typeTrigger', \"Enter trigger to add\"),\n\t\t\t\t\t\t\t\t\t\t\tspellcheck: 'false',\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tevents: {\n\t\t\t\t\t\t\t\t\t\t\tinput: c => this._setTrigger(c.getProperty('value')),\n\t\t\t\t\t\t\t\t\t\t\tkeydown: (c, e) => {\n\t\t\t\t\t\t\t\t\t\t\t\tif (e.key == 'Enter') {\n\t\t\t\t\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\t\t\t\t\t\tthis._addTrigger();\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t})),\n\t\t\t\t\t\t\t\t\tn.elem('add', 'button', {\n\t\t\t\t\t\t\t\t\t\tclassName: 'charsettingstriggers--add iconbtn medium tinyicon',\n\t\t\t\t\t\t\t\t\t\tattributes: { type: 'button' },\n\t\t\t\t\t\t\t\t\t\tevents: {\n\t\t\t\t\t\t\t\t\t\t\tclick: (c, e) => {\n\t\t\t\t\t\t\t\t\t\t\t\tthis._addTrigger();\n\t\t\t\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t}, [\n\t\t\t\t\t\t\t\t\t\tn.component(new FAIcon('plus')),\n\t\t\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\tn.component(new KeywordList(this.charSettings.triggers, {\n\t\t\t\t\t\t\t\tkeywordCallback: k => k.key,\n\t\t\t\t\t\t\t\teventBus: this.module.self.app.eventBus,\n\t\t\t\t\t\t\t\tonDelete: trigger => {\n\t\t\t\t\t\t\t\t\tthis.module.confirm.open(() => this._deleteTrigger(trigger), {\n\t\t\t\t\t\t\t\t\t\ttitle: l10n.l('charSettingsTriggers.confirmDelete', \"Confirm deletion\"),\n\t\t\t\t\t\t\t\t\t\tbody: new Elem(n => n.elem('div', [\n\t\t\t\t\t\t\t\t\t\t\tn.component(new Txt(l10n.l('charSettingsTriggers.deleteCustomTagBody', \"Do you wish to delete the trigger?\"), { tagName: 'p' })),\n\t\t\t\t\t\t\t\t\t\t\tn.component(new Txt(trigger.key, { tagName: 'p', className: 'dialog--strong' })),\n\t\t\t\t\t\t\t\t\t\t])),\n\t\t\t\t\t\t\t\t\t\tconfirm: l10n.l('charSettingsTriggers.delete', \"Delete\"),\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t})),\n\t\t\t\t\t\t]),\n\t\t\t\t\t])),\n\t\t\t\t\t(m, c, change) => {\n\t\t\t\t\t\tif (!change) {\n\t\t\t\t\t\t\tthis._setTrigger(this.state.trigger);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// c.getNode('highlightTriggers').setValue(m.highlightTriggers, false);\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t),\n\t\t\t{\n\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\tnoToggle: true,\n\t\t\t\tpopupTip: l10n.l('charSettingsTriggers.triggersInfo', \"Keywords or phrases, such as character name, nick names, or alternate spelling, used to notify you when someone mentions your character.\"),\n\t\t\t\tpopupTipClassName: 'popuptip--width-s',\n\t\t\t},\n\t\t);\n\t\tthis.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n\n\t// _setValue(charSettings, v) {\n\t// \tcharSettings.set({ highlightTriggers: v });\n\t// \tthis.module.player.getPlayer().call('setCharSettings', {\n\t// \t\tcharId: this.char.id,\n\t// \t\tpuppeteerId: this.puppeteer ? this.puppeteer.id : undefined,\n\t// \t\thighlightTriggers: v\n\t// \t}).catch(err => {\n\t// \t\tif (charSettings.getModel()) {\n\t// \t\t\tcharSettings.reset('highlightTriggers');\n\t// \t\t}\n\t// \t\tthis.module.toaster.openError(err);\n\t// \t});\n\t// }\n\n\t_setTrigger(trigger) {\n\t\tthis.state.trigger = trigger;\n\t\tif (this.elem) {\n\t\t\tlet ctx = this.elem.getComponent();\n\t\t\tctx.getComponent().getComponent().setNodeProperty('add', 'disabled', this._triggerIsValid(trigger) ? null : 'disabled');\n\t\t}\n\t}\n\n\t_triggerIsValid(v) {\n\t\tv = (v || \"\").trim().toLowerCase();\n\t\tif (!v) return false;\n\n\t\tlet triggers = this.charSettings.triggers;\n\t\tfor (let k of triggers) {\n\t\t\tif (k.key == v) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\t_deleteTrigger(trigger) {\n\t\treturn this.module.player.getPlayer().call('setCharSettings', {\n\t\t\tcharId: this.char.id,\n\t\t\tpuppeteerId: this.puppeteer ? this.puppeteer.id : undefined,\n\t\t\ttriggers: { [trigger.key]: false },\n\t\t}).catch(err => this.module.toaster.openError(err));\n\t}\n\n\t_addTrigger() {\n\t\tif (!this.elem) return;\n\n\t\tlet n = this.elem.getComponent().getComponent().getComponent().getNode('trigger');\n\t\tlet v = n.getProperty('value');\n\t\tif (this._triggerIsValid(v)) {\n\t\t\tthis.module.player.getPlayer().call('setCharSettings', {\n\t\t\t\tcharId: this.char.id,\n\t\t\t\tpuppeteerId: this.puppeteer ? this.puppeteer.id : undefined,\n\t\t\t\ttriggers: { [v]: true },\n\t\t\t}).then(() => {\n\t\t\t\tn.setProperty('value', '');\n\t\t\t\tthis._setTrigger('');\n\t\t\t}).catch(err => this.module.toaster.openError(err, {\n\t\t\t\ttitle: txtErrorAddingTrigger,\n\t\t\t}));\n\t\t}\n\t}\n}\n\nexport default CharSettingsTriggersComponent;\n","import CharSettingsTriggersComponent from './CharSettingsTriggersComponent';\nimport './charSettingsTriggers.scss';\n\n/**\n * CharSettingsTriggers adds a tool to PageCharSettings to set Do not disturb.\n */\nclass CharSettingsTriggers {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'player',\n\t\t\t'pageCharSettings',\n\t\t\t'pagePuppeteerSettings',\n\t\t\t'toaster',\n\t\t\t'confirm',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\n\t\tthis.module.pageCharSettings.addTool({\n\t\t\tid: 'triggers',\n\t\t\ttype: 'sections',\n\t\t\tsortOrder: 20,\n\t\t\tcomponentFactory: (char, charSettings, state) => new CharSettingsTriggersComponent(this.module, char, null, charSettings, state),\n\t\t});\n\t\tthis.module.pagePuppeteerSettings.addTool({\n\t\t\tid: 'triggers',\n\t\t\ttype: 'sections',\n\t\t\tsortOrder: 20,\n\t\t\tcomponentFactory: (puppeteer, charSettings, state) => new CharSettingsTriggersComponent(this.module, puppeteer.puppet, puppeteer.char, charSettings, state),\n\t\t});\n\t}\n\n\tdispose() {\n\t\tthis._listen(false);\n\t\tthis.module.pageCharSettings.removeTool('triggers');\n\t\tthis.module.pagePuppeteerSettings.removeTool('triggers');\n\t}\n}\n\nexport default CharSettingsTriggers;\n","import { escapeRegex } from 'utils/regex';\n\nconst idleCodes = {\n\t'active': 1,\n\t'idle': 2,\n\t'away': 3,\n\t'inactive': 3,\n};\n\n/**\n * CharFilter parses a filter string and matches it against characters.\n */\nclass CharFilter {\n\n\t/**\n\t * Creates an instance of CharFilter.\n\t * @param {string} filter Filter string.\n\t * @param {object} [opt] Optional filters.\n\t * @param {bool} [opt.showLfrp] Flag to filter out those not set as lrfp.\n\t */\n\tconstructor(filter, opt) {\n\t\tthis.opt = { showLfrp: false };\n\t\tthis.setFilter(filter, opt);\n\t}\n\n\t/**\n\t * Sets the filter string.\n\t * @param {string} filter Filter string.\n\t * @param {object} [opt] Optional filters.\n\t * @param {bool} [opt.showLfrp] Flag to filter out those not set as lrfp.\n\t * @returns {this}\n\t */\n\tsetFilter(filter, opt) {\n\t\tfilter = filter ? String(filter).toLowerCase() : '';\n\t\topt = Object.assign({}, this.opt, opt);\n\n\t\tif (filter == this.filter && this.opt.showLfrp == opt.showLfrp) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.opt.showLfrp = !!opt.showLfrp;\n\t\tif (filter != this.filter) {\n\t\t\tthis.filter = filter;\n\n\t\t\tlet steps = [];\n\t\t\tlet stepStrs = filter.split(',');\n\t\t\tfor (let stepStr of stepStrs) {\n\t\t\t\tlet keys = [];\n\t\t\t\tlet keyStrs = stepStr.split(/[|]/);\n\n\t\t\t\tfor (let key of keyStrs) {\n\t\t\t\t\tkey = key.trim();\n\n\t\t\t\t\tlet match = true;\n\t\t\t\t\tlet dislike = false;\n\t\t\t\t\tif (key[0] == '!') {\n\t\t\t\t\t\tmatch = false;\n\t\t\t\t\t\tkey = key.slice(1).trim();\n\t\t\t\t\t}\n\t\t\t\t\tif (key[0] == '~') {\n\t\t\t\t\t\tdislike = true;\n\t\t\t\t\t\tkey = key.slice(1).trim();\n\t\t\t\t\t}\n\t\t\t\t\t// In case of reverse order ~!\n\t\t\t\t\tif (key[0] == '!' && match) {\n\t\t\t\t\t\tmatch = false;\n\t\t\t\t\t\tkey = key.slice(1).trim();\n\t\t\t\t\t}\n\n\t\t\t\t\tif (key) {\n\t\t\t\t\t\tkeys.push({ key, match, dislike, regex: new RegExp('\\\\b' + escapeRegex(key) + '\\\\b', 'i') });\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (keys.length) {\n\t\t\t\t\tsteps.push({ keys });\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.steps = steps.length ? steps : null;\n\t\t}\n\t\treturn true;\n\t}\n\n\t/**\n\t * Matches the filter against a character.\n\t * @param {object} char Char model.\n\t * @returns {boolean} True on match, otherwise false.\n\t */\n\tmatch(char) {\n\t\t// Quick check if showLfrp is set.\n\t\tif (this.opt.showLfrp && char.rp != 'lfrp') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Quick exit if no filter is set\n\t\tif (!this.steps) return true;\n\n\t\tfor (let step of this.steps) {\n\t\t\tif (!this._matchKeys(char, step.keys)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * Check if the filter is empty and matches any character.\n\t * @returns {boolean} True if empty, otherwise false.\n\t */\n\tisEmpty() {\n\t\treturn !this.steps;\n\t}\n\n\t/**\n\t * Checks if the filter contains a specific tag.\n\t * @param {string} key Tag key.\n\t * @returns {boolean} True if the filter contains the tag, otherwise false.\n\t */\n\tcontainsTag(key) {\n\t\t// Quick exit\n\t\tif (!this.steps) return false;\n\n\t\tfor (let step of this.steps) {\n\t\t\tfor (let k of step.keys) {\n\t\t\t\tif (k.key == key) return true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t_matchKeys(char, keys) {\n\t\t// Match a single key\n\t\tfor (let k of keys) {\n\t\t\tif (k.match === this._matchKey(char, k)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n\t_matchKey(char, k) {\n\t\tlet key = k.key;\n\t\t// Dislike modifiers only matches tags\n\t\tif (!k.dislike) {\n\t\t\tif (\n\t\t\t\t(char.species && char.species.match(k.regex)) ||\n\t\t\t\t(char.gender && char.gender.match(k.regex)) ||\n\t\t\t\t((char.name + ' ' + char.surname).match(k.regex)) ||\n\t\t\t\t(idleCodes[k.key] == char.idle)\n\t\t\t) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\tif (!char.tags) return false;\n\n\t\tlet props = char.tags.props || char.tags;\n\t\tfor (let pk in props) {\n\t\t\tif ((pk.slice(pk.length - 8) == '_dislike') != k.dislike) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (props[pk].key == key) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n}\n\n\nexport default CharFilter;\n","import { Model, ModelToCollection, ModelWrapper, ModifyModel } from 'modapp-resource';\nimport l10n from 'modapp-l10n';\nimport { isResError } from 'resclient';\nimport CharFilter from 'classes/CharFilter';\n\nconst charsAwakeStoragePrefix = 'charsAwake.user.';\n\n/**\n * CharsAwake holds a list of awake characters.\n */\nclass CharsAwake {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\t// Bind callbacks\n\t\tthis._onChange = this._onChange.bind(this);\n\t\tthis._onWatchesChange = this._onWatchesChange.bind(this);\n\t\tthis._onTagChange = this._onTagChange.bind(this);\n\t\tthis._onCharTagsChange = this._onCharTagsChange.bind(this);\n\t\tthis._onCharEvent = this._onCharEvent.bind(this);\n\n\t\tthis.app.require([\n\t\t\t'auth',\n\t\t\t'api',\n\t\t\t'notify',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t\tthis.model = new Model({ data: { charsAwake: null, watches: null, notes: null, showLfrp: false, filter: '', showAll: true }, eventBus: this.app.eventBus });\n\t\tthis.filter = new CharFilter('');\n\t\tthis.charsAwake = new ModelWrapper(null, {\n\t\t\tmap: (k, v) => new ModifyModel(v, {\n\t\t\t\tprops: { match: this.filter.match(v), watch: this._isWatched(k) },\n\t\t\t\tisModifiedProperty: null,\n\t\t\t\tonChange: m => m.set({ match: this.filter.match(m.getModel()) }),\n\t\t\t}),\n\t\t\tdispose: (k, m) => m.dispose(),\n\t\t});\n\t\tthis.collection = new ModelToCollection(this.charsAwake, {\n\t\t\tcompare: (a, b) => (b.value.match - a.value.match) || (b.value.lastAwake - a.value.lastAwake) || a.key.localeCompare(b.key),\n\t\t\tfilter: (k, v) => v.awake == true,\n\t\t\teventBus: this.app.eventBus,\n\t\t});\n\t\tthis.watchedAwake = new ModelToCollection(this.charsAwake, {\n\t\t\tcompare: (a, b) => (b.value.match - a.value.match) || (b.value.lastAwake - a.value.lastAwake) || a.key.localeCompare(b.key),\n\t\t\tfilter: (k, v) => v.watch && v.awake,\n\t\t\teventBus: this.app.eventBus,\n\t\t});\n\t\tthis.unwatchedAwake = new ModelToCollection(this.charsAwake, {\n\t\t\tcompare: (a, b) => (b.value.match - a.value.match) || (b.value.lastAwake - a.value.lastAwake) || a.key.localeCompare(b.key),\n\t\t\tfilter: (k, v) => !v.watch && v.awake,\n\t\t\teventBus: this.app.eventBus,\n\t\t});\n\t\tthis.notes = new ModelWrapper(null, {\n\t\t\teventBus: this.app.eventBus,\n\t\t});\n\n\t\tthis.user = null;\n\t\tthis.module.auth.getUserPromise().then(user => {\n\t\t\tthis.user = user;\n\t\t\tthis._loadSettings(user);\n\t\t\tthis._getCharsAwake(user);\n\t\t});\n\t}\n\n\tgetModel() {\n\t\treturn this.model;\n\t}\n\n\tgetCharsAwake() {\n\t\treturn this.model.charsAwake;\n\t}\n\n\tgetWatches() {\n\t\treturn this.model.watches;\n\t}\n\n\n\tgetCollection() {\n\t\treturn this.collection;\n\t}\n\n\tgetWatchedAwake() {\n\t\treturn this.watchedAwake;\n\t}\n\n\tgetNotes() {\n\t\treturn this.notes;\n\t}\n\n\tgetUnwatchedAwake() {\n\t\treturn this.unwatchedAwake;\n\t}\n\n\ttoggleShowAll(showAll) {\n\t\tshowAll = typeof showAll == 'undefined' ? !this.model.showAll : !!showAll;\n\t\tlet p = this.model.set({ showAll });\n\t\tthis._saveSettings();\n\t\treturn p;\n\t}\n\n\ttoggleShowLfrp(showLfrp) {\n\t\tshowLfrp = typeof showLfrp == 'undefined' ? !this.model.showLfrp : !!showLfrp;\n\t\tlet p = this.model.set({ showLfrp });\n\t\tthis._saveSettings();\n\t\tthis._trySetFilter();\n\t\treturn p;\n\t}\n\n\tsetFilter(filter) {\n\t\tfilter = filter ? filter.trim() : '';\n\t\tif (filter == this.model.filter) {\n\t\t\treturn Promise.resolve(null);\n\t\t}\n\t\tlet p = this.model.set({ filter });\n\t\tthis._saveSettings();\n\t\tthis._trySetFilter();\n\t\treturn p;\n\t}\n\n\t_trySetFilter() {\n\t\tif (this.filter.setFilter(this.model.filter, { showLfrp: this.model.showLfrp })) {\n\t\t\tthis._updateFilter();\n\t\t}\n\t}\n\n\tfilterIsEmpty() {\n\t\treturn this.filter.isEmpty();\n\t}\n\n\t_getCharsAwake(user) {\n\t\tPromise.all([\n\t\t\tthis.module.api.get('core.chars.awake'),\n\t\t\tthis.module.api.get('note.player.' + user.id + '.watches'),\n\t\t\tthis.module.api.get('note.player.' + user.id + '.notes'),\n\t\t]).then(result => {\n\t\t\tlet charsAwake = result[0];\n\t\t\tlet watches = new ModelWrapper(result[1], {\n\t\t\t\t// Filter out delete characters\n\t\t\t\tfilter: (k, v) => v.char && !isResError(v.char) && !v.char.deleted,\n\t\t\t\teventBus: this.app.eventBus,\n\t\t\t});\n\t\t\tlet notes = result[2];\n\t\t\tthis.model.set({ charsAwake, watches, notes });\n\t\t\tthis.charsAwake.setModel(charsAwake);\n\t\t\tthis.notes.setModel(notes);\n\t\t\tthis._listen(true);\n\t\t});\n\t}\n\n\t_onChange(change, m) {\n\t\tlet nm = this.module.notify.getModel();\n\n\t\tfor (let k in change) {\n\t\t\t// No notification if the character was removed (fell asleep).\n\t\t\tlet char = this.charsAwake[k];\n\t\t\tif (!char) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (nm.notifyOnWakeup ||\n\t\t\t\t(nm.notifyOnWatched && char.watch) ||\n\t\t\t\t(nm.notifyOnMatched && !this.filter.isEmpty() && char.match)\n\t\t\t) {\n\t\t\t\tthis.module.notify.send(\n\t\t\t\t\tl10n.l('charsAwake.wakeup', \"Character awake\"),\n\t\t\t\t\tl10n.l('charsAwake.charWokeUp', \"{name} woke up\", { name: (char.name + ' ' + char.surname).trim() }),\n\t\t\t\t\t{\n\t\t\t\t\t\tduration: 1000 * 60 * 15, // Max 15 min\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\t_onWatchesChange(change) {\n\t\tif (!this.charsAwake) return;\n\n\t\t// Update the watch value for the affected charsAwake\n\t\tlet p = this.charsAwake.props;\n\t\tfor (let charId in change) {\n\t\t\tlet m = p[charId];\n\t\t\tif (m) {\n\t\t\t\tm.set({ watch: this._isWatched(charId) });\n\t\t\t}\n\t\t}\n\t}\n\n\t_onTagChange(change, tag, __, ev) {\n\t\t// Ensure it is a change event\n\t\tlet parts = ev.split('.');\n\t\tif (!this.charsAwake || parts.length != 2 || parts[1] != 'change') {\n\t\t\treturn;\n\t\t}\n\t\t// Check it is a key change that might affect the filter\n\t\tif (change.hasOwnProperty('key') &&\n\t\t\t(this.filter.containsTag(change.key) || this.filter.containsTag(tag.key))\n\t\t) {\n\t\t\t// Update the entire list\n\t\t\tthis._updateFilter();\n\t\t}\n\t}\n\n\t_onCharTagsChange(change, _, __, ev) {\n\t\t// Ensure it is a change event\n\t\tlet parts = ev.split('.');\n\t\tif (!this.charsAwake || parts.length != 3 || parts[1] != 'tags' || parts[2] != 'change') {\n\t\t\treturn;\n\t\t}\n\n\t\tlet m = this.charsAwake[parts[0]];\n\t\tif (m) {\n\t\t\tm.set({ match: this.filter.match(m.getModel()) });\n\t\t}\n\t}\n\n\t// Called on events on a character. Checks if the deleted flag has been\n\t// changed, and if so updates the watches model.\n\t_onCharEvent(change, char, __, ev) {\n\t\tlet watches = this.model.watches;\n\t\tif (watches) {\n\t\t\t// Ensure it is a change event\n\t\t\tlet parts = ev.split('.');\n\t\t\tif (parts.length != 2 || parts[1] != 'change' || !change.hasOwnProperty('deleted')) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\twatches.refresh(parts[0]);\n\t\t}\n\t}\n\n\t_loadSettings(user) {\n\t\tif (localStorage) {\n\t\t\tlet data = localStorage.getItem(charsAwakeStoragePrefix + user.id);\n\t\t\tif (data) {\n\t\t\t\tlet o = JSON.parse(data);\n\t\t\t\tthis.model.set(o);\n\t\t\t\tthis._trySetFilter();\n\t\t\t}\n\t\t}\n\t}\n\n\t_saveSettings() {\n\t\tif (localStorage && this.user) {\n\t\t\tlocalStorage.setItem(charsAwakeStoragePrefix + this.user.id, JSON.stringify({\n\t\t\t\tshowLfrp: this.model.showLfrp,\n\t\t\t\tfilter: this.model.filter,\n\t\t\t\tshowAll: this.model.showAll,\n\t\t\t}));\n\t\t}\n\t}\n\n\t_isWatched(charId) {\n\t\tlet w = this.model.watches;\n\t\treturn w && w.props[charId];\n\t}\n\n\t_updateFilter() {\n\t\tif (!this.charsAwake) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet p = this.charsAwake.props;\n\t\tfor (let charId in p) {\n\t\t\tlet m = p[charId];\n\t\t\tif (m) {\n\t\t\t\tm.set({ match: this.filter.match(m.getModel()) });\n\t\t\t}\n\t\t}\n\t}\n\n\t_listen(on) {\n\t\tlet cb = on ? 'on' : 'off';\n\t\tlet m = this.model;\n\t\tif (this.charsAwake) {\n\t\t\tthis.charsAwake[cb]('change', this._onChange);\n\t\t}\n\t\tif (m.watches) {\n\t\t\tthis.model.watches[cb]('change', this._onWatchesChange);\n\t\t}\n\t\tthis.module.api[cb + 'Event']('tag.tag', this._onTagChange);\n\t\tthis.module.api[cb + 'Event']('tag.char', this._onCharTagsChange);\n\t\tthis.module.api[cb + 'Event']('core.char', this._onCharEvent);\n\t}\n\n\tdispose() {\n\t\tthis._listen(false);\n\t\tif (this.model.watches) {\n\t\t\tthis.model.watches.dispose();\n\t\t}\n\t\tthis.model.set({ charsAwake: null, watches: null, notes: null });\n\t\tthis.collection.dispose();\n\t\tthis.watchedAwake.dispose();\n\t\tthis.unwatchedAwake.dispose();\n\t\tthis.charsAwake.dispose();\n\t\tthis.notes.dispose();\n\t}\n}\n\nexport default CharsAwake;\n","class CmdState {\n\tconstructor(step, stack, ctx, params, state, error, onExec) {\n\t\tthis.step = step;\n\t\tthis.stack = stack;\n\t\tthis.ctx = ctx;\n\t\tthis.params = params;\n\t\tthis.state = state;\n\t\tthis.error = error;\n\t\tthis.onExec = onExec;\n\t}\n\n\taddStep() {\n\t\tfor (let j = arguments.length - 1; j >= 0; j--) {\n\t\t\tlet steps = arguments[j];\n\t\t\tif (!steps) continue;\n\t\t\tif (!Array.isArray(steps)) {\n\t\t\t\tsteps = [ steps ];\n\t\t\t}\n\t\t\tfor (let i = steps.length - 1; i >= 0; i--) {\n\t\t\t\tthis.stack.push(steps[i]);\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t}\n\n\tsetStack(stack) {\n\t\tthis.stack = stack;\n\t\treturn this;\n\t}\n\n\tsetError(err, force) {\n\t\tif (!this.error || force) {\n\t\t\tthis.error = err;\n\t\t}\n\t\treturn this;\n\t}\n\n\tsetParam(key, value) {\n\t\tthis.params[key] = value;\n\t\treturn this;\n\t}\n\n\tgetParam(key) {\n\t\treturn this.params[key];\n\t}\n\n\tsetState(key, value) {\n\t\tthis.state[key] = value;\n\t\treturn this;\n\t}\n\n\tgetState(key) {\n\t\treturn this.state[key];\n\t}\n\n\tbackUp(stream) {\n\t\tstream.backUp(stream.current().length);\n\t\treturn this;\n\t}\n\n\taddOnExec(callback) {\n\t\tif (callback) {\n\t\t\tthis.onExec.push(callback);\n\t\t}\n\t}\n\n\tcallOnExec() {\n\t\tfor (let cb of this.onExec) {\n\t\t\tcb(this);\n\t\t}\n\t}\n\n\tgetCtx() {\n\t\treturn this.ctx;\n\t}\n\n\tclone() {\n\t\treturn new CmdState(\n\t\t\tthis.step,\n\t\t\tthis.stack.slice(0),\n\t\t\tthis.ctx,\n\t\t\tObject.assign({}, this.params),\n\t\t\tObject.assign({}, this.state),\n\t\t\tthis.error,\n\t\t\tthis.onExec.slice(0),\n\t\t);\n\t}\n\n\t/**\n\t * Returns the final state after calling any remaining steps with a null\n\t * stream.\n\t * @returns {CmdState} Final state\n\t */\n\tgetFinalState() {\n\t\tif (!this.stack.length) return this;\n\n\t\tlet clone = this.clone();\n\t\tlet i = 0;\n\t\twhile (clone.stack.length) {\n\t\t\tif (i++ > 100) {\n\t\t\t\tthrow new Error(\"Exceeded max recursions\");\n\t\t\t}\n\t\t\tclone.stack.pop().parse(null, clone);\n\t\t}\n\t\treturn clone;\n\t}\n}\n\nexport default CmdState;\n","import Err from './Err';\n\n/**\n * UnknownStep consumes all that is left of the stream and issues an error if\n * non-whitespace characters are found.\n */\nclass UnknownStep {\n\tconstructor() {}\n\n\tparse(stream, s) {\n\t\tif (!stream) return false;\n\n\t\tif (stream.eatSpace()) {\n\t\t\treturn null;\n\t\t}\n\t\tlet m = stream.match(/^(.*[^\\s])\\s*/);\n\t\ts.setParam('unknown', m[1]);\n\t\tif (s.error) {\n\t\t\treturn 'unknown';\n\t\t}\n\n\t\ts.setError(new Err('unknownStep.unableToParse', 'I don\\'t understand \"{match}\".', { match: m[1] }));\n\t\treturn 'error';\n\t}\n}\n\nexport default UnknownStep;\n","import CmdState from './CmdState';\nimport UnknownStep from 'classes/UnknownStep';\n\nconst tokenTags = {\n\terror: 'invalid',\n\tlistitem: 'attributeValue',\n\ttext: 'string',\n\tdelim: 'operator',\n\tcmd: 'name',\n\tattr: 'propertyName',\n\tunknown: 'comment',\n\tentityid: 'keyword',\n\tooc: 'meta',\n\tcode: 'macroName',\n};\n\nexport default function(cfg) {\n\treturn {\n\t\tstartState: function() {\n\t\t\treturn new CmdState(\n\t\t\t\tcfg.step,\n\t\t\t\t[ cfg.step ],\n\t\t\t\tcfg.ctx,\n\t\t\t\t{},\n\t\t\t\t{},\n\t\t\t\tnull,\n\t\t\t\t[],\n\t\t\t);\n\t\t},\n\n\t\tblankLine: function(state) {\n\t\t\tlet l = state.stack.length;\n\t\t\tlet step = l > 0 ? state.stack[l - 1] : null;\n\t\t\tif (step && typeof step.blank == 'function') {\n\t\t\t\tstep.blank(state);\n\t\t\t}\n\t\t},\n\n\t\ttoken: function(stream, state) {\n\t\t\tlet token = false;\n\t\t\tlet count = 0;\n\t\t\tlet step = null;\n\t\t\twhile (token === false) {\n\t\t\t\tstep = state.stack.pop() || new UnknownStep();\n\t\t\t\ttoken = step.parse(stream, state);\n\t\t\t\tcount++;\n\t\t\t\tif (count > 100) {\n\t\t\t\t\tlet message = \"Maximum parsing recursions exceeded.\";\n\t\t\t\t\tconsole.error(message, state);\n\t\t\t\t\tstate.setError({ code: 'cmd.recursionError', message });\n\t\t\t\t\tstate.setStack([ new UnknownStep() ]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tstate.step = step;\n\t\t\treturn (token && tokenTags[token]) || token;\n\t\t},\n\n\t\tcopyState: function(state) {\n\t\t\treturn state.clone();\n\t\t},\n\n\t};\n};\n","import { HighlightStyle, syntaxHighlighting } from '@codemirror/language';\nimport { tags as t } from '@lezer/highlight';\n\nexport const highlightStyle = HighlightStyle.define([\n\t{ tag: t.invalid, class: 'cmd--error' },\n\t{ tag: t.attributeValue, class: 'cmd--listitem' },\n\t{ tag: t.string, class: 'cmd--text' },\n\t{ tag: t.operator, class: 'cmd--delim' },\n\t{ tag: t.name, class: 'cmd--cmd' },\n\t{ tag: t.propertyName, class: 'cmd--attr' },\n\t{ tag: t.comment, class: 'cmd--unknown' },\n\t{ tag: t.keyword, class: 'cmd--entityid' },\n\t{ tag: t.meta, class: 'cmd--ooc' },\n\t{ tag: t.macroName, class: 'cmd--code' },\n]);\n\nexport default syntaxHighlighting(highlightStyle);\n","import { ViewPlugin, Decoration } from \"@codemirror/view\";\nimport { getToken } from \"utils/codemirror\";\nimport { formatTextTokens } from 'utils/formatText';\n\nconst formatterMark = Decoration.mark({ class: 'cmd--format-formatter' });\nconst emMark = Decoration.mark({ class: 'cmd--format-em' });\nconst strongMark = Decoration.mark({ class: 'cmd--format-strong' });\nconst oocMark = Decoration.mark({ class: 'cmd--format-ooc' });\nconst cmdMark = Decoration.mark({ class: 'cmd--format-cmd' });\nconst supMark = Decoration.mark({ class: 'cmd--format-sup' });\nconst subMark = Decoration.mark({ class: 'cmd--format-sub' });\nconst strikethroughMark = Decoration.mark({ class: 'cmd--format-strikethrough' });\nconst linkMark = Decoration.mark({ class: 'cmd--format-link' });\nconst linkUrlMark = Decoration.mark({ class: 'cmd--format-linkurl' });\n\nconst tokenTypes = {\n\t// Span tokens\n\t'cmd_start': { end: 'cmd_end', mark: cmdMark, startMark: formatterMark, endMark: formatterMark },\n\t'em_start': { end: 'em_end', mark: emMark, startMark: formatterMark, endMark: formatterMark },\n\t'strong_start': { end: 'strong_end', mark: strongMark, startMark: formatterMark, endMark: formatterMark },\n\t'ooc_start': { end: 'ooc_end', mark: oocMark, startMark: formatterMark, endMark: formatterMark },\n\t'sup_start': { end: 'sup_end', outerMark: supMark, startMark: formatterMark, endMark: formatterMark },\n\t'sub_start': { end: 'sub_end', outerMark: subMark, startMark: formatterMark, endMark: formatterMark },\n\t'strikethrough_start': { end: 'strikethrough_end', mark: strikethroughMark, startMark: formatterMark, endMark: formatterMark },\n\t// Single token\n\t'anchor_start': { end: 'anchor_end', mark: linkMark, startMark: formatterMark, endMark: formatterMark },\n\t'link_start': { end: 'link_end', mark: linkUrlMark, startMark: formatterMark, endMark: formatterMark },\n\t'anchor': { mark: linkMark },\n};\n\nfunction getItemById(a, id) {\n\tfor (let o of a) {\n\t\tif (o.id == id) {\n\t\t\treturn o;\n\t\t}\n\t}\n}\n\nconst codemirrorFormattingSyntax = ViewPlugin.fromClass(class {\n\tconstructor(view) {\n\t\tthis.view = view;\n\t\tthis.decorations = this._formattingSyntax();\n\t}\n\n\tupdate(update) {\n\t\tif (!update.docChanged) return;\n\n\t\tthis.decorations = this._formattingSyntax();\n\t}\n\n\t_formattingSyntax() {\n\t\tlet formattedTexts = [];\n\t\t// Collect total range of formattedText tokens\n\t\tgetToken(this.view.state, token => {\n\t\t\tif (token.type) {\n\t\t\t\tlet step = token.state.step;\n\t\t\t\tif (step && step.formatText) {\n\t\t\t\t\tlet opt = step.formatText();\n\t\t\t\t\tif (opt?.id) {\n\t\t\t\t\t\tlet ft = getItemById(formattedTexts, opt.id);\n\t\t\t\t\t\tif (!ft) {\n\t\t\t\t\t\t\tft = { id: opt.id, from: token.from, to: token.to, opt };\n\t\t\t\t\t\t\tformattedTexts.push(ft);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (ft.from > token.from) {\n\t\t\t\t\t\t\t\tft.from = token.from;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (ft.to < token.to) {\n\t\t\t\t\t\t\t\tft.to = token.to;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tlet set = [];\n\t\tif (formattedTexts.length) {\n\t\t\tlet doc = this.view.state.doc;\n\t\t\tfor (let ft of formattedTexts) {\n\t\t\t\tlet str = doc.sliceString(ft.from, ft.to);\n\n\t\t\t\tlet tokens = formatTextTokens(str, ft.opt);\n\t\t\t\tlet stack = [];\n\t\t\t\tlet pos = ft.from;\n\t\t\t\tfor (let t of tokens) {\n\t\t\t\t\t// Check if token ends stacked span\n\t\t\t\t\tlet len = t.content?.length || 0;\n\t\t\t\t\tif (stack.length) {\n\t\t\t\t\t\tlet s = stack[stack.length - 1];\n\t\t\t\t\t\tlet type = s.type;\n\t\t\t\t\t\tif (type.end == t.type) {\n\t\t\t\t\t\t\t// End of span\n\t\t\t\t\t\t\tif (type.startMark && s.len) {\n\t\t\t\t\t\t\t\tset.push(type.startMark.range(s.pos, s.pos + s.len));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (type.mark && s.pos + s.len < pos) {\n\t\t\t\t\t\t\t\tset.push(type.mark.range(s.pos + s.len, pos));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (type.outerMark && s.pos < pos + len) {\n\t\t\t\t\t\t\t\tset.push(type.outerMark.range(s.pos, pos + len));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (type.endMark && len) {\n\t\t\t\t\t\t\t\tset.push(type.endMark.range(pos, pos + len));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tstack.pop();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Check if it is a token to act upon\n\t\t\t\t\tlet type = tokenTypes[t.type];\n\t\t\t\t\tif (type) {\n\t\t\t\t\t\t// Check if it is a span token. If so, we put it on the stack.\n\t\t\t\t\t\tif (type.end) {\n\t\t\t\t\t\t\t// Spanning token. Put it on the stack.\n\t\t\t\t\t\t\tstack.push({ pos, len, type });\n\t\t\t\t\t\t} else if (len) {\n\t\t\t\t\t\t\t// Single token. Generate a decoration.\n\t\t\t\t\t\t\tset.push(type.mark.range(pos, pos + len));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpos += len;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tset.sort((a, b) => a.from - b.from);\n\t\treturn Decoration.set(set);\n\t}\n}, {\n\tdecorations: v => v.decorations,\n});\n\nexport default codemirrorFormattingSyntax;\n","import { Html } from 'modapp-base-component';\nimport { Collection, sortOrderCompare } from 'modapp-resource';\nimport { StreamLanguage } from '@codemirror/language';\nimport l10n from 'modapp-l10n';\nimport ItemList from 'classes/ItemList';\nimport ListStep from 'classes/ListStep';\nimport Err from 'classes/Err';\nimport escapeHtml from 'utils/escapeHtml';\nimport { getToken } from 'utils/codemirror';\nimport cmdParser from './cmdParser';\nimport cmdHighlightStyle from './cmdHighlightStyle';\nimport cmdFormattingStyle from './cmdFormattingStyle';\nimport './cmd.scss';\n\n/**\n * Cmd holds available commands.\n */\nclass Cmd {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\t// Bind callbacks\n\t\tthis._execPrefix = this._execPrefix.bind(this);\n\n\t\tthis.app.require([], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t\tthis.notFoundHandlers = new Collection({\n\t\t\tidAttribute: m => m.id,\n\t\t\tcompare: sortOrderCompare,\n\t\t\teventBus: this.app.eventBus,\n\t\t});\n\t\tthis.cmds = new ItemList({ regex: /^\\s*([\\p{L}\\p{N}/][\\p{L}\\p{N}]*)/u });\n\t\tthis.cmdStep = new ListStep('cmd', this.cmds, {\n\t\t\ttextId: 'cmdText',\n\t\t\tname: 'command',\n\t\t\ttoken: 'name',\n\t\t\tdelimToken: 'name',\n\t\t\terrRequired: null,\n\t\t\terrNotFound: (step, match) => new Err('cmd.commandNotFound', 'There is no command called \"{match}\".', { name: step.name, match: match }),\n\t\t});\n\t\tthis.prefixes = {};\n\t\tthis.lists = {};\n\t}\n\n\t/**\n\t * Returns the CodeMirror language for commands.\n\t * @param {string} charId ID of character for which\n\t * @returns {object} CodeMirror language.\n\t */\n\tgetCMLanguage(charId) {\n\t\treturn StreamLanguage.define(cmdParser({\n\t\t\tstep: this.cmdStep,\n\t\t\tctx: { charId },\n\t\t}));;\n\t}\n\n\t/**\n\t * Returns the CodeMirror highlight style for commands.\n\t * @returns {object} CodeMirror highlight style.\n\t */\n\tgetCMHighlightStyle() {\n\t\treturn cmdHighlightStyle;\n\t}\n\n\t/**\n\t * Returns the CodeMirror formatting style for formatted text in commands.\n\t * @returns {object} CodeMirror highlight style.\n\t */\n\tgetCMFormattingStyle() {\n\t\treturn cmdFormattingStyle;\n\t}\n\n\tgetCMTabComplete(editorState) {\n\t\tlet pos = editorState.selection.main.head;\n\t\tlet token = getToken(editorState, t => t.to > pos || (t.to == pos && t.type !== null && t.type !== 'delim'));\n\n\t\tlet step = token?.state.step;\n\t\tif (typeof step?.complete == 'function') {\n\t\t\t// Get the { list, from, to } range from the completer.\n\t\t\tlet line = editorState.doc.lineAt(token.from);\n\t\t\tlet range = step.complete(line.text.slice(token.from - line.from, token.to - line.from), pos - token.from, token.state);\n\t\t\tif (range && range.list && range.list.length) {\n\t\t\t\treturn {\n\t\t\t\t\tlist: range.list,\n\t\t\t\t\tfrom: range.from + token.from,\n\t\t\t\t\tto: range.to + token.from,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\t/**\n\t * Executes a command using a state parsed by the CodeMirror chartale mode.\n\t * @param {object} ctx Call context\n\t * @param {object} ctx.player Player object.\n\t * @param {object} ctx.char Controlled char object.\n\t * @param {object} state State returned by the chartale mode parser.\n\t * @returns {Promise} Promise to the call.\n\t */\n\texec(ctx, state) {\n\t\tstate = state.getFinalState();\n\n\t\tconsole.debug(\"Command state: \", state);\n\n\t\tvar p = state.params;\n\t\tlet err = state.error;\n\t\tif (err) {\n\t\t\treturn Promise.reject(typeof err == 'string'\n\t\t\t\t? new Err('cmd.parseError', err)\n\t\t\t\t: err.code == 'cmd.commandNotFound'\n\t\t\t\t\t? this._resolveNotFound(ctx, err, p.unknown || null)\n\t\t\t\t\t: err,\n\t\t\t);\n\t\t}\n\t\tlet f = p.cmd;\n\t\treturn Promise.resolve(f ? f(ctx, p) : null).then(() => {\n\t\t\tstate.callOnExec();\n\t\t});\n\t}\n\n\taddCmd(def) {\n\t\tthis.cmds.addItem(def);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds a command with a prefix, such as \"create room\"\n\t * @param {string} prefix Prefix name, such as 'create', 'set', etc.\n\t * @param {object} def Command item definition.\n\t * @param {function} exec Command execution callback.\n\t */\n\taddPrefixCmd(prefix, def, exec) {\n\t\tlet list = this.prefixes[prefix];\n\t\tif (!list) {\n\t\t\tlist = new ItemList('object', {\n\t\t\t\tname: \"object type\",\n\t\t\t});\n\t\t\tthis.prefixes[prefix] = list;\n\t\t\tthis.addCmd({\n\t\t\t\tkey: prefix,\n\t\t\t\tnext: new ListStep('object', list, {\n\t\t\t\t\tname: \"object type\",\n\t\t\t\t\ttoken: 'name',\n\t\t\t\t}),\n\t\t\t\tvalue: this._execPrefix,\n\t\t\t});\n\t\t}\n\n\t\tif (typeof exec == 'function') {\n\t\t\tdef = Object.assign({}, def, { value: exec });\n\t\t}\n\n\t\tlist.addItem(def);\n\t}\n\n\tgetList(id) {\n\t\tlet list = this.lists[id];\n\t\tif (!list) {\n\t\t\tlist = new ItemList();\n\t\t\tthis.lists[id] = list;\n\t\t}\n\t\treturn list;\n\t}\n\n\t/**\n\t * Registers a not found handler.\n\t * @param {object} notFoundHandler NotFound handler object\n\t * @param {string} notFoundHandler.id NotFound handler ID.\n\t * @param {function} notFoundHandler.onNotFound Callback called when a command is not found. If should return a { code, message, data } object if handled, or else null.\n\t * @param {number} notFoundHandler.sortOrder Sort order.\n\t * @returns {this}\n\t */\n\taddNotFoundHandler(notFoundHandler) {\n\t\tif (this.notFoundHandlers.get(notFoundHandler.id)) {\n\t\t\tthrow new Error(\"NotFoundHandler ID already registered: \", notFoundHandler.id);\n\t\t}\n\t\tthis.notFoundHandlers.add(notFoundHandler);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Unregisters a previously registered not found handler.\n\t * @param {string} notFoundHandlerId NotFound handler ID.\n\t * @returns {this}\n\t */\n\tremoveShortcut(notFoundHandlerId) {\n\t\tthis.notFoundHandlers.remove(notFoundHandlerId);\n\t\treturn this;\n\t}\n\n\t_execPrefix(ctx, p) {\n\t\tlet f = p.object;\n\t\tif (typeof f != 'function') {\n\t\t\tthrow new Error(\"Object value is not a function\");\n\t\t}\n\t\treturn f(ctx, p);\n\t}\n\n\t_resolveNotFound(ctx, err, unknown) {\n\t\tlet match = err.data.match;\n\t\tfor (let h of this.notFoundHandlers) {\n\t\t\tlet result = h.onNotFound(ctx, match, unknown ? match + ' ' + unknown : match);\n\t\t\tif (result) {\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t\treturn new Html(\n\t\t\tl10n.t('cmd.commandNotFound', 'There is no command named \"{match}\".', { match: escapeHtml(match) }) + ' Type <span class=\"cmd\">help</span> to learn more.',\n\t\t\t{ className: 'common--formattext' },\n\t\t);\n\t}\n}\n\nexport default Cmd;\n","import CharList from 'classes/CharList';\nimport ItemList from 'classes/ItemList';\nimport TokenList from 'classes/TokenList';\nimport Err from 'classes/Err';\nimport isNormalizedPrefix from 'utils/isNormalizedPrefix';\nimport mergeCharLists from 'utils/mergeCharLists';\nimport {\n\tkeyTokenRegex,\n\tkeyExpandRegex,\n\tcolonDelimTokenRegex,\n\tcolonDelimExpandRegex,\n\tanyTokenRegex,\n\tanyExpandRegex,\n} from 'utils/regex';\n\nconst defaultSortOrder = [ 'watch', 'room', 'awake' ];\n\n/**\n * CmdLists holds different types of lists for cmds.\n */\nclass CmdLists {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\t// Size of the prioritized characters per controlled character.\n\t\tthis.prioSize = parseInt(params?.prioSize) || 20;\n\n\t\tthis.app.require([\n\t\t\t'player',\n\t\t\t'auth',\n\t\t\t'charsAwake',\n\t\t\t'globalTeleports',\n\t\t\t'mute',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.prioChars = {};\n\n\t\tthis.ownedChars = new CharList(() => this.module.player.getChars() || null);\n\t\tthis.inRoomPuppets = new CharList((ctx) => {\n\t\t\tlet c = this.module.player.getActiveChar();\n\t\t\treturn (c && c.inRoom.chars) || null;\n\t\t}, {\n\t\t\tvalidation: (key, char) => char.type != 'puppet'\n\t\t\t\t? new Err('cmdLists.charNotAPuppet', \"Character is not a puppet.\")\n\t\t\t\t: null,\n\t\t});\n\t\tthis.watchedChars = new CharList(() => {\n\t\t\tlet m = this.module.charsAwake.getWatches();\n\t\t\tif (!m) return [];\n\t\t\treturn Object.keys(m.props).map(k => m[k].char);\n\t\t});\n\t\tthis.teleportNodes = new TokenList(() => {\n\t\t\tlet c = this.module.player.getActiveChar();\n\t\t\tlet gn = this.module.globalTeleports.getGlobalTeleports();\n\t\t\treturn ((c && c.nodes.toArray()) || []).concat((gn && gn.toArray()) || []);\n\t\t}, {\n\t\t\tregex: keyTokenRegex,\n\t\t\texpandRegex: keyExpandRegex,\n\t\t\tisMatch: (t, key) => key === t.key ? { key, value: t.id } : false,\n\t\t\tisPrefix: (t, prefix) => isNormalizedPrefix(prefix, t.key),\n\t\t});\n\t\tthis.inRoomExits = new TokenList(() => {\n\t\t\tlet c = this.module.player.getActiveChar();\n\t\t\treturn (c && c.inRoom.exits) || [];\n\t\t}, {\n\t\t\tregex: keyTokenRegex,\n\t\t\texpandRegex: keyExpandRegex,\n\t\t\tisMatch: (t, key) => {\n\t\t\t\tfor (let k of t.keys) {\n\t\t\t\t\tif (k === key) {\n\t\t\t\t\t\treturn { key: k, value: t.id };\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tisPrefix: (t, prefix) => {\n\t\t\t\tif (!prefix) return t.keys[0] || null;\n\t\t\t\tfor (let k of t.keys) {\n\t\t\t\t\tif (isNormalizedPrefix(prefix, k)) {\n\t\t\t\t\t\treturn k;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t},\n\t\t});\n\t\tthis.charProfiles = new TokenList(() => {\n\t\t\tlet c = this.module.player.getActiveChar();\n\t\t\treturn (c && c.profiles.toArray()) || [];\n\t\t}, {\n\t\t\tregex: keyTokenRegex,\n\t\t\texpandRegex: keyExpandRegex,\n\t\t\tisMatch: (t, key) => key === t.key ? { key, value: t.id } : false,\n\t\t\tisPrefix: (t, prefix) => isNormalizedPrefix(prefix, t.key),\n\t\t});\n\t\tthis.charOwnedAreas = new TokenList(() => {\n\t\t\tlet c = this.module.player.getActiveChar();\n\t\t\treturn (c && c.ownedAreas && c.ownedAreas.toArray()) || [];\n\t\t}, {\n\t\t\tregex: colonDelimTokenRegex,\n\t\t\texpandRegex: colonDelimExpandRegex,\n\t\t\tisMatch: (t, key) => key === t.name.toLowerCase().replace(/\\s+/g, ' ') ? { key: t.name, value: t.id } : false,\n\t\t\tisPrefix: (t, prefix) => isNormalizedPrefix(prefix, t.name.toLowerCase().replace(/\\s+/g, ' '), t.name),\n\t\t});\n\t\tthis.charOwnedAreasOrNone = new TokenList(() => {\n\t\t\tlet c = this.module.player.getActiveChar();\n\t\t\tlet arr = (c && c.ownedAreas && c.ownedAreas.toArray()) || [];\n\t\t\tarr.unshift({ id: '', name: 'none' });\n\t\t\treturn arr;\n\t\t}, {\n\t\t\tregex: colonDelimTokenRegex,\n\t\t\texpandRegex: colonDelimExpandRegex,\n\t\t\tisMatch: (t, key) => key === t.name.toLowerCase().replace(/\\s+/g, ' ') ? { key: t.name, value: t.id } : false,\n\t\t\tisPrefix: (t, prefix) => isNormalizedPrefix(prefix, t.name.toLowerCase().replace(/\\s+/g, ' '), t.name),\n\t\t});\n\t\tthis.charOwnedRooms = new TokenList(() => {\n\t\t\tlet c = this.module.player.getActiveChar();\n\t\t\treturn (c && c.ownedRooms && c.ownedRooms.toArray()) || [];\n\t\t}, {\n\t\t\tregex: anyTokenRegex,\n\t\t\texpandRegex: anyExpandRegex,\n\t\t\tisMatch: (t, key) => key === t.name.toLowerCase().replace(/\\s+/g, ' ') ? { key: t.name, value: t.id } : false,\n\t\t\tisPrefix: (t, prefix) => isNormalizedPrefix(prefix, t.name.toLowerCase().replace(/\\s+/g, ' '), t.name),\n\t\t});\n\t\tthis.bool = new ItemList({\n\t\t\titems: [\n\t\t\t\t{\n\t\t\t\t\tkey: \"true\",\n\t\t\t\t\tvalue: true,\n\t\t\t\t\talias: [ \"yes\" ],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tkey: \"false\",\n\t\t\t\t\tvalue: false,\n\t\t\t\t\talias: [ \"no\" ],\n\t\t\t\t},\n\t\t\t],\n\t\t});\n\t}\n\n\t/**\n\t * Prioritizes a character when using tab completion for a controlled character.\n\t * @param {string} ctrlId ID of controlled character\n\t * @param {string} charId ID of character to prioritize\n\t */\n\tprioritizeChar(ctrlId, charId) {\n\t\tif (!ctrlId || ! charId) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet prioList = this.prioChars[ctrlId];\n\t\tif (!prioList) {\n\t\t\tthis.prioChars[ctrlId] = prioList = [];\n\t\t}\n\n\t\tlet idx = prioList.indexOf(charId);\n\t\tif (idx < 0) {\n\t\t\tprioList.unshift(charId);\n\t\t\tif (idx.length > this.prioSize) {\n\t\t\t\tprioList.pop();\n\t\t\t}\n\t\t} else if (idx > 0) {\n\t\t\tprioList.splice(idx, 1);\n\t\t\tprioList.unshift(charId);\n\t\t}\n\t}\n\n\t/**\n\t * Get a CharList of owned characters.\n\t * @returns {CharList} List of characters.\n\t */\n\tgetOwnedChars() {\n\t\treturn this.ownedChars;\n\t}\n\n\t/**\n\t * Get a CharList of characters in the room.\n\t * @param {object} [opt] Optional parameters.\n\t * @param {bool} [opt.filterMuted] Flag to filter out muted characters.\n\t * @param {string[]} [opt.sortOrder] Sort order to use described as an array of values 'room', 'watch', 'awake'.\n\t * @returns {CharList} List of characters.\n\t */\n\tgetInRoomChars(opt) {\n\t\treturn new CharList(() => {\n\t\t\tlet c = this.module.player.getActiveChar();\n\t\t\treturn c?.inRoom.chars;\n\t\t}, {\n\t\t\tgetCompletionChars: (ctx, getChars) => this._getCompletedChars(ctx, getChars, opt),\n\t\t});\n\t}\n\n\t/**\n\t * Get a CharList of awake characters in the room.\n\t * @param {object} [opt] Optional parameters.\n\t * @param {bool} [opt.filterMuted] Flag to filter out muted characters.\n\t * @param {string[]} [opt.sortOrder] Sort order to use described as an array of values 'room', 'watch', 'awake'.\n\t * @returns {CharList} List of characters.\n\t */\n\tgetInRoomCharsAwake(opt) {\n\t\treturn new CharList(() => {\n\t\t\tlet c = this.module.player.getActiveChar();\n\t\t\treturn c?.inRoom.chars || null;\n\t\t}, {\n\t\t\tvalidation: (key, char) => char.state != 'awake'\n\t\t\t\t? new Err('cmdLists.charNotAwake', \"Character is not awake.\")\n\t\t\t\t: null,\n\t\t\tgetCompletionChars: (ctx, getChars) => this._getCompletedChars(ctx, getChars, opt),\n\t\t});\n\t}\n\n\t/**\n\t * Get a CharList of puppets in the room.\n\t * @returns {CharList} List of characters.\n\t */\n\tgetInRoomPuppets() {\n\t\treturn this.inRoomPuppets;\n\t}\n\n\t/**\n\t * Get a CharList of awake characters.\n\t * @param {object} [opt] Optional parameters.\n\t * @param {bool} [opt.filterMuted] Flag to filter out muted characters.\n\t * @param {string[]} [opt.sortOrder] Sort order to use described as an array of values 'room', 'watch', 'awake'.\n\t * @returns {CharList} List of characters.\n\t */\n\tgetCharsAwake(opt) {\n\t\treturn new CharList(() => this.module.charsAwake.getCollection(), {\n\t\t\terrNotFound: (l, m) => new Err('cmdList.awakeCharNotFound', 'There is no character awake named {match}.', { match: m }),\n\t\t\tgetCompletionChars: (ctx, getChars) => this._getCompletedChars(ctx, getChars, opt),\n\t\t});\n\t}\n\n\t/**\n\t * Get a CharList of watched characters.\n\t * @returns {CharList} List of characters.\n\t */\n\tgetWatchedChars() {\n\t\treturn this.watchedChars;\n\t}\n\n\t/**\n\t * Get a CharList of all available characters.\n\t * @param {object} [opt] Optional parameters.\n\t * @param {bool} [opt.filterMuted] Flag to filter out muted characters.\n\t * @param {string[]} [opt.sortOrder] Sort order to use described as an array of values 'room', 'watch', 'awake'.\n\t * @returns {CharList} List of characters.\n\t */\n\tgetAllChars(opt) {\n\t\treturn new CharList(() => {\n\t\t\tlet c = this.module.player.getActiveChar();\n\t\t\tlet watches = this.module.charsAwake.getWatches();\n\t\t\treturn mergeCharLists([\n\t\t\t\tthis.module.player.getChars(),\n\t\t\t\tc && c.inRoom.chars,\n\t\t\t\tthis.module.charsAwake.getCollection(),\n\t\t\t\twatches && Object.keys(watches.props).map(k => watches[k].char),\n\t\t\t]);\n\t\t}, {\n\t\t\tgetCompletionChars: (ctx, getChars) => this._getCompletedChars(ctx, getChars, opt),\n\t\t});\n\t}\n\n\tgetInRoomExits() {\n\t\treturn this.inRoomExits;\n\t}\n\n\tgetTeleportNodes() {\n\t\treturn this.teleportNodes;\n\t}\n\n\tgetCharProfiles() {\n\t\treturn this.charProfiles;\n\t}\n\n\tgetCharOwnedAreas(includeNone) {\n\t\treturn includeNone ? this.charOwnedAreasOrNone : this.charOwnedAreas;\n\t}\n\n\tgetCharOwnedRooms() {\n\t\treturn this.charOwnedRooms;\n\t}\n\n\tgetBool() {\n\t\treturn this.bool;\n\t}\n\n\t/**\n\t * Gets a list of chars to use for autocompletion.\n\t * @param {object} ctx Cmd state object.\n\t * @param {(ctx: object) => object[] | null} getChars Callback function that returns available of characters.\n\t * @param {object} [opt] Optional parameters.\n\t * @param {bool} [opt.filterMuted] Flag to filter out muted characters.\n\t * @param {string[]} [opt.sortOrder] Sort order to use described as an array of values 'room', 'watch', 'awake'.\n\t * @returns\n\t */\n\t_getCompletedChars(ctx, getChars, opt) {\n\t\tlet chars = getChars(ctx);\n\t\tif (!chars) {\n\t\t\treturn chars;\n\t\t}\n\n\t\tchars = chars.toArray?.() || chars;\n\t\tif (opt?.filterMuted) {\n\t\t\tchars = chars.filter(c => c?.id && !this.module.mute.isMutedChar(c?.id));\n\t\t}\n\n\t\t// Quick exit if no sorting is required\n\t\tif (chars.length <= 1) {\n\t\t\treturn chars;\n\t\t}\n\n\t\tlet charId = ctx.charId;\n\n\t\tlet prioMap = this.prioChars[ctx.charId]?.reduce((map, charId, i) => (map[charId] = i + 1, map), {}) || {};\n\t\tlet orderMaps = [];\n\n\t\tlet sortOrder = opt?.sortOrder || defaultSortOrder;\n\n\t\tfor (let s of sortOrder) {\n\t\t\tswitch (s) {\n\t\t\t\tcase 'watch':\n\t\t\t\t\torderMaps.push(this.module.charsAwake.getWatches().props);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'room':\n\t\t\t\t\tlet inRoomChars = this.module.player.getControlledChar(charId)?.inRoom.chars;\n\t\t\t\t\tif (inRoomChars) {\n\t\t\t\t\t\tlet roomMap = {};\n\t\t\t\t\t\tfor (let inRoomChar of inRoomChars) {\n\t\t\t\t\t\t\tlet id = inRoomChar?.id;\n\t\t\t\t\t\t\tif (id) {\n\t\t\t\t\t\t\t\troomMap[id] = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\torderMaps.push(roomMap);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'awake':\n\t\t\t\t\torderMaps.push(this.module.charsAwake.getCharsAwake().props);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tlet prioMiss = Number.MAX_SAFE_INTEGER;\n\n\t\treturn chars.sort((a, b) => {\n\t\t\tlet aid = a?.id;\n\t\t\tlet bid = b?.id;\n\n\t\t\t// Prio sorting\n\t\t\tlet va = prioMap[aid] || prioMiss;\n\t\t\tlet vb = prioMap[bid] || prioMiss;\n\t\t\tif (va != vb) {\n\t\t\t\treturn va - vb;\n\t\t\t}\n\n\t\t\t// Order map sorting\n\t\t\tfor (let map of orderMaps) {\n\t\t\t\tva = !map[aid];\n\t\t\t\tvb = !map[bid];\n\t\t\t\tif (va != vb) {\n\t\t\t\t\treturn va ? 1 : -1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Name sorting\n\t\t\treturn a.name.localeCompare(b.name) || a.surname.localeCompare(b.surname) || aid.localeCompare(b.id);\n\t\t});\n\t}\n}\n\nexport default CmdLists;\n","import ListStep from 'classes/ListStep';\nimport IDStep from 'classes/IDStep';\nimport Err from 'classes/Err';\n\nconst errCharacterRequired = new Err('inspect.characterRequired', \"Which character?\");\nconst defaultIDStepName = \"character name or ID\";\nconst defaultCharIdName = \"character\";\n\n/**\n * CmdSteps holds different types of command steps.\n */\nclass CmdSteps {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\t// Bind callbacks\n\t\tthis._onCharListExec = this._onCharListExec.bind(this);\n\n\t\tthis.app.require([\n\t\t\t'cmdLists',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t\tthis.charTargets = {};\n\t}\n\n\t_onCharListExec(state, char) {\n\t\tthis.module.cmdLists.prioritizeChar(state.getCtx().charId, char.value);\n\t}\n\n\t/**\n\t * Creates a new owned character step.\n\t * @param {object} [opt] Optional parameters.\n\t * @param {string} [opt.id] Id used as key when setting param values. Defaults to 'charId'.\n\t * @param {?function} [opt.errRequired] Callback function that returns an error when it fails to match. Null means it is not required.: function(this). Defaults to \"Which character?\"\n\t * @param {Step} [opt.next] Next step after matching a character.\n\t * @param {Step} [opt.else] Step after if the not matching any item. Will disabled any errRequired set.\n\t * @returns {IDStep}\n\t */\n\tnewOwnedCharStep(opt) {\n\t\tlet id = opt?.id || 'charId';\n\t\tlet next = opt?.next;\n\t\treturn new IDStep(id, {\n\t\t\tname: defaultIDStepName,\n\t\t\telse: new ListStep(id, this.module.cmdLists.getOwnedChars(), {\n\t\t\t\tname: defaultCharIdName,\n\t\t\t\terrRequired: opt && opt.hasOwnProperty('errRequired') ? opt.errRequired : (step => errCharacterRequired),\n\t\t\t\tnext,\n\t\t\t\telse: opt?.else,\n\t\t\t\tonExec: this._onCharListExec,\n\t\t\t}),\n\t\t\tnext,\n\t\t});\n\t}\n\n\t/**\n\t * Creates a new in room character step.\n\t * @param {object} [opt] Optional parameters.\n\t * @param {string} [opt.id] Id used as key when setting param values. Defaults to 'charId'.\n\t * @param {?function} [opt.errRequired] Callback function that returns an error when it fails to match. Null means it is not required.: function(this). Defaults to \"Which character?\"\n\t * @param {Step} [opt.next] Next step after matching a character.\n\t * @param {Step} [opt.else] Step after if the not matching any item. Will disabled any errRequired set.\n\t * @param {bool} [opt.filterMuted] Flag to filter out muted characters on tab completion.\n\t * @param {string[]} [opt.sortOrder] Sort order to use described as an array of values 'room', 'watch', 'awake'.\n\t * @returns {IDStep}\n\t */\n\tnewInRoomCharStep(opt) {\n\t\tlet id = opt?.id || 'charId';\n\t\tlet next = opt?.next;\n\t\treturn new IDStep(id, {\n\t\t\tname: defaultIDStepName,\n\t\t\telse: new ListStep(id, this.module.cmdLists.getInRoomChars(opt), {\n\t\t\t\tname: defaultCharIdName,\n\t\t\t\terrRequired: opt?.hasOwnProperty('errRequired') ? opt.errRequired : (step => errCharacterRequired),\n\t\t\t\tnext,\n\t\t\t\telse: opt?.else,\n\t\t\t\tonExec: this._onCharListExec,\n\t\t\t}),\n\t\t\tnext,\n\t\t});\n\t}\n\n\t/**\n\t * Creates a new in room awake character step.\n\t * @param {object} [opt] Optional parameters.\n\t * @param {string} [opt.id] Id used as key when setting param values. Defaults to 'charId'.\n\t * @param {?function} [opt.errRequired] Callback function that returns an error when it fails to match. Null means it is not required.: function(this). Defaults to \"Which character?\"\n\t * @param {Step} [opt.next] Next step after matching a character.\n\t * @param {Step} [opt.else] Step after if the not matching any item. Will disabled any errRequired set.\n\t * @param {bool} [opt.filterMuted] Flag to filter out muted characters on tab completion.\n\t * @param {string[]} [opt.sortOrder] Sort order to use described as an array of values 'room', 'watch', 'awake'.\n\t * @returns {IDStep}\n\t */\n\tnewInRoomAwakeCharStep(opt) {\n\t\tlet id = opt?.id || 'charId';\n\t\tlet next = opt?.next;\n\t\treturn new IDStep(id, {\n\t\t\tname: defaultIDStepName,\n\t\t\telse: new ListStep(id, this.module.cmdLists.getInRoomCharsAwake(opt), {\n\t\t\t\tname: defaultCharIdName,\n\t\t\t\terrRequired: opt?.hasOwnProperty('errRequired') ? opt.errRequired : (step => errCharacterRequired),\n\t\t\t\tnext,\n\t\t\t\telse: opt?.else,\n\t\t\t\tonExec: this._onCharListExec,\n\t\t\t}),\n\t\t\tnext,\n\t\t});\n\t}\n\n\t/**\n\t * Creates a new in room puppet step.\n\t * @param {object} [opt] Optional parameters.\n\t * @param {string} [opt.id] Id used as key when setting param values. Defaults to 'charId'.\n\t * @param {?function} [opt.errRequired] Callback function that returns an error when it fails to match. Null means it is not required.: function(this). Defaults to \"Which character?\"\n\t * @param {Step} [opt.next] Next step after matching a character.\n\t * @param {Step} [opt.else] Step after if the not matching any item. Will disabled any errRequired set.\n\t * @returns {IDStep}\n\t */\n\tnewInRoomPuppetStep(opt) {\n\t\tlet id = opt?.id || 'charId';\n\t\tlet next = opt?.next;\n\t\treturn new IDStep(id, {\n\t\t\tname: defaultIDStepName,\n\t\t\telse: new ListStep(id, this.module.cmdLists.getInRoomPuppets(), {\n\t\t\t\tname: defaultCharIdName,\n\t\t\t\terrRequired: opt?.hasOwnProperty('errRequired') ? opt.errRequired : (step => errCharacterRequired),\n\t\t\t\tnext,\n\t\t\t\telse: opt?.else,\n\t\t\t\tonExec: this._onCharListExec,\n\t\t\t}),\n\t\t\tnext,\n\t\t});\n\t}\n\n\t/**\n\t * Creates a new awake char.\n\t * @param {object} [opt] Optional parameters.\n\t * @param {string} [opt.id] Id used as key when setting param values. Defaults to 'charId'.\n\t * @param {?function} [opt.errRequired] Callback function that returns an error when it fails to match. Null means it is not required.: function(this). Defaults to \"Which character?\"\n\t * @param {Step} [opt.next] Next step after matching a character.\n\t * @param {Step} [opt.else] Step after if the not matching any item. Will disabled any errRequired set.\n\t * @param {bool} [opt.filterMuted] Flag to filter out muted characters on tab completion.\n\t * @param {string[]} [opt.sortOrder] Sort order to use described as an array of values 'room', 'watch', 'awake'.\n\t * @returns {IDStep}\n\t */\n\tnewAwakeCharStep(opt) {\n\t\tlet id = opt?.id || 'charId';\n\t\tlet next = opt?.next;\n\t\treturn new IDStep(id, {\n\t\t\tname: defaultIDStepName,\n\t\t\telse: new ListStep(id, this.module.cmdLists.getCharsAwake(opt), {\n\t\t\t\tname: defaultCharIdName,\n\t\t\t\terrRequired: opt?.hasOwnProperty('errRequired') ? opt.errRequired : (step => errCharacterRequired),\n\t\t\t\tnext,\n\t\t\t\telse: opt?.else,\n\t\t\t\tonExec: this._onCharListExec,\n\t\t\t}),\n\t\t\tnext,\n\t\t});\n\t}\n\n\t/**\n\t * Creates a new watched char step.\n\t * @param {object} [opt] Optional parameters.\n\t * @param {string} [opt.id] Id used as key when setting param values. Defaults to 'charId'.\n\t * @param {?function} [opt.errRequired] Callback function that returns an error when it fails to match. Null means it is not required.: function(this). Defaults to \"Which character?\"\n\t * @param {Step} [opt.next] Next step after matching a character.\n\t * @param {Step} [opt.else] Step after if the not matching any item. Will disabled any errRequired set.\n\t * @returns {IDStep}\n\t */\n\tnewWatchedCharStep(opt) {\n\t\tlet id = opt?.id || 'charId';\n\t\tlet next = opt?.next;\n\t\treturn new IDStep(id, {\n\t\t\tname: defaultIDStepName,\n\t\t\telse: new ListStep(id, this.module.cmdLists.getWatchedChars(), {\n\t\t\t\tname: defaultCharIdName,\n\t\t\t\terrRequired: opt?.hasOwnProperty('errRequired') ? opt.errRequired : (step => errCharacterRequired),\n\t\t\t\tnext,\n\t\t\t\telse: opt?.else,\n\t\t\t\tonExec: this._onCharListExec,\n\t\t\t}),\n\t\t\tnext,\n\t\t});\n\t}\n\n\t/**\n\t * Creates a new any char step.\n\t * @param {object} [opt] Optional parameters.\n\t * @param {string} [opt.id] Id used as key when setting param values. Defaults to 'charId'.\n\t * @param {string} [opt.idName] ID step name. Defaults to \"character name or ID\".\n\t * @param {string} [opt.name] Step name. Defaults to \"character\".\n\t * @param {string} [opt.textId] Id used as key when param text. Defaults to 'charName'.\n\t * @param {?function} [opt.errRequired] Callback function that returns an error when it fails to match. Null means it is not required.: function(this). Defaults to \"Which character?\"\n\t * @param {Step} [opt.next] Next step after matching a character.\n\t * @param {Step} [opt.else] Step after if the not matching any item. Will disabled any errRequired set.\n\t * @param {bool} [opt.filterMuted] Flag to filter out muted characters on tab completion.\n\t * @param {string[]} [opt.sortOrder] Sort order to use described as an array of values 'room', 'watch', 'awake'.\n\t * @returns {IDStep}\n\t */\n\tnewAnyCharStep(opt) {\n\t\tlet id = opt?.id || 'charId';\n\t\tlet next = opt?.next;\n\t\treturn new IDStep(id, {\n\t\t\tname: opt?.idName || defaultIDStepName,\n\t\t\telse: new ListStep(id, this.module.cmdLists.getAllChars(opt), {\n\t\t\t\ttextId: opt?.textId || 'charName',\n\t\t\t\tname: opt?.name || defaultCharIdName,\n\t\t\t\terrRequired: opt?.hasOwnProperty('errRequired') ? opt.errRequired : (step => errCharacterRequired),\n\t\t\t\tnext,\n\t\t\t\telse: opt?.else,\n\t\t\t\tonExec: this._onCharListExec,\n\t\t\t}),\n\t\t\tnext,\n\t\t});\n\t}\n}\n\nexport default CmdSteps;\n","import { Elem, Txt } from 'modapp-base-component';\nimport l10n from 'modapp-l10n';\nimport FormatTxt from 'components/FormatTxt';\nimport Err from 'classes/Err';\nimport './aboutArea.scss';\n\nconst usageText = 'about area';\nconst shortDesc = 'Show area about info of current location';\nconst helpText =\n`<p>Show the about information for the area you are in.</p>`;\n\n/**\n * AboutArea adds command to print area about info.\n */\nclass AboutArea {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'cmd', 'charLog', 'help' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.cmd.addPrefixCmd('about', {\n\t\t\tkey: 'area',\n\t\t\tvalue: (ctx, p) => this.aboutArea(ctx.char, p.attr),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'aboutArea',\n\t\t\tcategory: 'buildAreas',\n\t\t\tcmd: 'about area',\n\t\t\tusage: l10n.l('aboutArea.usage', usageText),\n\t\t\tshortDesc: l10n.l('aboutArea.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('aboutArea.helpText', helpText),\n\t\t\tsortOrder: 70,\n\t\t});\n\t}\n\n\taboutArea(char, attr) {\n\t\tlet a = char.inRoom.area;\n\t\tif (!a) {\n\t\t\tthis.module.charLog.logError(char, new Err('aboutArea.roomHasNoArea', \"This room doesn't belong to an area.\"));\n\t\t\treturn;\n\t\t}\n\n\t\tlet name = a.name.replace(/([^.])\\.$/, \"$1\");\n\t\tlet about = a.about;\n\t\tif (!about) {\n\t\t\tthis.module.charLog.logInfo(char, l10n.t('aboutArea.areaHasNoAbout', \"{name} has no about information.\", { name }));\n\t\t\treturn;\n\t\t}\n\n\t\tthis.module.charLog.logComponent(char, 'aboutArea', new Elem(n => n.elem('div', { className: 'aboutarea' }, [\n\t\t\tn.component(new Txt(l10n.t('aboutArea.aboutArea', \"About {name}\", { name }), { tagName: 'h3', className: 'margin-bottom-l' })),\n\t\t\tn.component(new FormatTxt(about, { className: 'area--about formattxt-charlog', noInteraction: true })),\n\t\t])));\n\t}\n}\n\nexport default AboutArea;\n","import l10n from 'modapp-l10n';\nimport DelimStep from 'classes/DelimStep';\nimport TextStep from 'classes/TextStep';\nimport Err from 'classes/Err';\n\nconst usageText = 'add note <span class=\"param\">Character</span> = <span class=\"param\">Note</span>';\nconst shortDesc = 'Add a private note for any character';\nconst helpText =\n`<p>Add a private note for any character. If other notes exist for that character, the note will be appended on a new line.</p>\n<p><code class=\"param\">Character</code> is the name of the character to add a note for.</p>\n<p><code class=\"param\">Note</code> is the note text. It may be formatted and span multiple paragraphs.</p>`;\n\n/**\n * AddNote adds the add note command.\n */\nclass AddNote {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'cmd',\n\t\t\t'cmdLists',\n\t\t\t'cmdSteps',\n\t\t\t'charLog',\n\t\t\t'help',\n\t\t\t'api',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.cmd.addPrefixCmd('add', {\n\t\t\tkey: 'note',\n\t\t\tnext: [\n\t\t\t\tthis.module.cmdSteps.newAnyCharStep({\n\t\t\t\t\terrRequired: step => new Err('addNote.characterRequired', \"Who do you want to add a note for?\"),\n\t\t\t\t\tsortOrder: [ 'awake', 'watch' ],\n\t\t\t\t}),\n\t\t\t\tnew DelimStep(\"=\", {\n\t\t\t\t\tnext: [\n\t\t\t\t\t\tnew TextStep('text', {\n\t\t\t\t\t\t\tspanLines: true,\n\t\t\t\t\t\t\terrRequired: step => new Err('addNote.noteRequired', \"What is the note you want to add?\"),\n\t\t\t\t\t\t\tcompleter: this.module.cmdLists.getAllChars(),\n\t\t\t\t\t\t\tformatText: true,\n\t\t\t\t\t\t}),\n\t\t\t\t\t],\n\t\t\t\t}),\n\t\t\t],\n\t\t\tvalue: (ctx, p) => this.addNote(ctx.player, ctx.char, p.charId\n\t\t\t\t? { charId: p.charId, text: p.text }\n\t\t\t\t: { charName: p.charName, text: p.text },\n\t\t\t),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'addNote',\n\t\t\tcategory: 'friends',\n\t\t\tcmd: 'add note',\n\t\t\tusage: l10n.l('addNote.usage', usageText),\n\t\t\tshortDesc: l10n.l('addNote.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('addNote.helpText', helpText),\n\t\t\tsortOrder: 50,\n\t\t});\n\t}\n\n\taddNote(player, char, params) {\n\t\treturn (params.charId\n\t\t\t? Promise.resolve({ id: params.charId })\n\t\t\t: player.call('getChar', { charName: params.charName })\n\t\t).then(c => this.module.api.call('note.player.' + player.id + '.note.' + c.id, 'append', {\n\t\t\ttext: params.text,\n\t\t})).then(result => {\n\t\t\tlet c = result.char;\n\t\t\tthis.module.charLog.logInfo(char, l10n.l('addNote.addedNoteFor', \"Added a note for {charName}.\", { charName: (c.name + \" \" + c.surname).trim() }));\n\t\t});\n\t}\n}\n\nexport default AddNote;\n","import l10n from 'modapp-l10n';\nimport RepeatStep from 'classes/RepeatStep';\nimport DelimStep from 'classes/DelimStep';\nimport ListStep from 'classes/ListStep';\nimport ValueStep from 'classes/ValueStep';\n// import TokenList from 'classes/TokenList';\n// import { tagTokenRegex } from 'utils/regex';\n\nconst usageText = 'add tag <span class=\"param\">Keyword</span><span class=\"opt\">:<span class=\"param\">Preference</span></span> <span class=\"opt\">, <span class=\"param\">Keyword</span><span class=\"opt\">:<span class=\"param\">Preference</span></span></span><span class=\"comment\">...</span>';\nconst shortDesc = 'Add one or more predefined tags to the character';\nconst helpText =\n`<p>Add one or more predefined tags to the character. Each keyword should be separated by a comma.</p>\n<p><code class=\"param\">Keyword</code> is the keyword for the tag.</p>\n<p><code class=\"param\">Preference</code> is the optional tag preference. May be <code>like</code> (default) or <code>dislike</code>.</p>\n<p>Example: <code>add tag public, ic, whispers:dislike</code></p>`;\n\n/**\n * AddTag adds command to add a tag to a character.\n */\nclass AddTag {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'cmd', 'charLog', 'help', 'tags', 'api', 'player' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\t// // Tags list where already added tags are removed\n\t\t// this.tagsList = new TokenList(() => {\n\t\t// \tlet c = this.module.player.getActiveChar();\n\t\t// \tlet p = (c && c.tags && c.tags.props) || {};\n\t\t// \tlet m = {};\n\t\t// \tObject.keys(p).map(k => m[p[k].id] = true);\n\t\t// \treturn this.module.tags.getTagsCollection().toArray().filter(tag => !m[tag.id]);\n\t\t// }, {\n\t\t// \tregex: tagTokenRegex,\n\t\t// \texpandRegex: { left: /\\w\\s/, right: /\\w\\s/ },\n\t\t// \tisMatch: (t, key) => key === t.key ? { key, value: t.id } : false,\n\t\t// \tisPrefix: (t, prefix) => !prefix || t.key.substring(0, prefix.length) === prefix\n\t\t// \t\t? t.key\n\t\t// \t\t: null\n\t\t// });\n\n\t\tthis.module.cmd.addPrefixCmd('add', {\n\t\t\tkey: 'tag',\n\t\t\tnext: [\n\t\t\t\tnew RepeatStep(\n\t\t\t\t\t'keys',\n\t\t\t\t\t(next, idx) => new ListStep('tagId-' + idx, this.module.tags.getTagsList(), {\n\t\t\t\t\t\tname: \"tag to add\",\n\t\t\t\t\t\tnext: [\n\t\t\t\t\t\t\tnew DelimStep(\":\", {\n\t\t\t\t\t\t\t\tnext: new ListStep('type-' + idx, this.module.tags.getPreferenceList(), { name: \"preference flag\" }),\n\t\t\t\t\t\t\t\telse: new ValueStep('type-' + idx, \"like\"),\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\tnext,\n\t\t\t\t\t\t],\n\t\t\t\t\t}),\n\t\t\t\t\t{\n\t\t\t\t\t\tdelimiter: \",\",\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t],\n\t\t\tvalue: (ctx, p) => {\n\t\t\t\tlet tags = {};\n\t\t\t\tlet i = 0;\n\t\t\t\twhile (p['tagId-' + i]) {\n\t\t\t\t\ttags[p['tagId-' + i]] = p['type-' + i] || 'like';\n\t\t\t\t\ti++;\n\t\t\t\t}\n\t\t\t\treturn this.addTag(ctx.char, tags);\n\t\t\t},\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'addTag',\n\t\t\tcategory: 'tags',\n\t\t\tcmd: 'add tag',\n\t\t\tusage: l10n.l('addTag.usage', usageText),\n\t\t\tshortDesc: l10n.l('addTag.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('addTag.helpText', helpText),\n\t\t\tsortOrder: 30,\n\t\t});\n\t}\n\n\taddTag(char, tags) {\n\t\treturn this.module.api.call('tag.char.' + char.id + '.tags', 'setTags', { tags }).then(result => {\n\t\t\tthis.module.charLog.logInfo(char, l10n.l('addTag.tagsAdded', \"Added tags.\"));\n\t\t});\n\t}\n}\n\nexport default AddTag;\n","import l10n from 'modapp-l10n';\nimport TextStep from 'classes/TextStep';\nimport DelimStep from 'classes/DelimStep';\nimport ValueStep from 'classes/ValueStep';\nimport RepeatStep from 'classes/RepeatStep';\nimport MultiDelimStep from 'classes/MultiDelimStep';\nimport Err from 'classes/Err';\nimport { communicationTooLong } from 'utils/cmdErr';\n\nconst usageText = 'address <span class=\"opt\"><span class=\"param\">Character</span> <span class=\"opt\">, <span class=\"param\">Character</span></span><span class=\"comment\">...</span></span> =<span class=\"opt\">></span><span class=\"opt\">:</span> <span class=\"param\">Message</span>';\nconst shortDesc = 'Address characters in the room';\nconst helpText =\n`<p>Address one or more characters, but let everyone else in the room hear it.<br>\nIf the message starts with <code>></code> (greater than), the message will be marked as out of character (OOC).<br>\nIf the message starts with <code>:</code> (colon), the message will be treated in the same way as a <code>pose</code> action rather than something being said.</p>\n<p><code class=\"param\">Character</code> is the name of the character being addressed. If omitted, it defaults to the character(s) last addressed.</p>\n<p><code class=\"param\">Message</code> is the message to the addressed. It may be formatted and span multiple paragraphs.</p>\n<p>Alias: <code>@</code>, <code>to</code></p>`;\nconst examples = [\n\t{ cmd: 'address Jane Doe = Welcome!', desc: l10n.l('address.addressSingleDesc', \"Addresses Jane Doe\") },\n\t{ cmd: '@John => Nice profile pic.', desc: l10n.l('address.whispeOocDesc', \"Addresses John out of character\") },\n\t{ cmd: 'to John, Jane =>: is new here.', desc: l10n.l('address.addressOocPoseMultipleDesc', \"Addresses John and Jane with an out of character pose\") },\n\t{ cmd: 'to =: returns the hug.', desc: l10n.l('address.addressPoseLastDesc', \"Addresses the last character(s) addressed with a pose\") },\n];\n\n/**\n * Address adds the address command.\n */\nclass Address {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'cmd',\n\t\t\t'cmdLists',\n\t\t\t'cmdSteps',\n\t\t\t'help',\n\t\t\t'info',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t\tthis.lastCharIds = {};\n\n\t\tlet charListOpt = {\n\t\t\tfilterMuted: true,\n\t\t\tsortOrder: [ 'awake', 'watch' ],\n\t\t};\n\n\t\tthis.module.cmd.addCmd({\n\t\t\tkey: 'address',\n\t\t\tnext: [\n\t\t\t\tnew RepeatStep(\n\t\t\t\t\t'chars',\n\t\t\t\t\t(next, idx) => this.module.cmdSteps.newInRoomCharStep({\n\t\t\t\t\t\tid: 'charId-' + idx,\n\t\t\t\t\t\terrRequired: null,\n\t\t\t\t\t\tnext,\n\t\t\t\t\t\t...charListOpt,\n\t\t\t\t\t}),\n\t\t\t\t\t{\n\t\t\t\t\t\tdelimiter: \",\",\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t\tnew DelimStep(\"=\", {\n\t\t\t\t\tnext: [\n\t\t\t\t\t\tnew MultiDelimStep({\n\t\t\t\t\t\t\t\">\": { next: new ValueStep('ooc', true), errRequired: null },\n\t\t\t\t\t\t\t\":\": { next: new ValueStep('pose', true), errRequired: null },\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tnew TextStep('msg', {\n\t\t\t\t\t\t\tspanLines: true,\n\t\t\t\t\t\t\ttoken: state => state.getParam('ooc') ? 'ooc' : 'text',\n\t\t\t\t\t\t\terrRequired: step => new Err('address.messageRequired', \"What do you want to communicate?\"),\n\t\t\t\t\t\t\tmaxLength: () => this.module.info.getCore().communicationMaxLength,\n\t\t\t\t\t\t\terrTooLong: communicationTooLong,\n\t\t\t\t\t\t\tcompleter: this.module.cmdLists.getInRoomChars(charListOpt),\n\t\t\t\t\t\t\tformatText: true,\n\t\t\t\t\t\t}),\n\t\t\t\t\t],\n\t\t\t\t}),\n\t\t\t],\n\t\t\tsymbol: '@',\n\t\t\talias: [ 'to' ],\n\t\t\tvalue: (ctx, p) => {\n\t\t\t\tlet charIds = [];\n\t\t\t\tlet i = 0;\n\t\t\t\twhile (p['charId-' + i]) {\n\t\t\t\t\tcharIds.push(p['charId-' + i]);\n\t\t\t\t\ti++;\n\t\t\t\t}\n\t\t\t\treturn this.address(ctx.char, { charIds, msg: p.msg, pose: p.pose, ooc: p.ooc });\n\t\t\t},\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'address',\n\t\t\tcategory: 'communicate',\n\t\t\tcmd: 'address',\n\t\t\talias: [ '@', 'to' ],\n\t\t\tusage: l10n.l('address.usage', usageText),\n\t\t\tshortDesc: l10n.l('address.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('address.helpText', helpText),\n\t\t\texamples,\n\t\t\tsortOrder: 50,\n\t\t});\n\t}\n\n\taddress(char, params) {\n\t\t// If we are missing target charIds, we fetch the last ones targeted.\n\t\tlet charIds = params.charIds || [];\n\t\tif (!charIds.length) {\n\t\t\tcharIds = this.lastCharIds[char.id];\n\t\t\tif (!charIds) {\n\t\t\t\treturn Promise.reject(new Err('address.noCharacter', \"Who do you want to address?\"));\n\t\t\t}\n\t\t\tparams.charIds = charIds;\n\t\t} else {\n\t\t\tthis.lastCharIds[char.id] = charIds;\n\t\t}\n\t\treturn char.call('address', params);\n\t}\n}\n\nexport default Address;\n","import { Elem, Txt } from 'modapp-base-component';\nimport l10n from 'modapp-l10n';\nimport FormatTxt from 'components/FormatTxt';\nimport Err from 'classes/Err';\nimport './areaRules.scss';\n\nconst usageText = 'area rules';\nconst shortDesc = 'Show area rules of current location';\nconst helpText =\n`<p>Show the area specific rules for the area you are in.</p>`;\n\n/**\n * RulesArea adds command to print area rules info.\n */\nclass RulesArea {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'cmd', 'charLog', 'help' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.cmd.addPrefixCmd('area', {\n\t\t\tkey: 'rules',\n\t\t\tvalue: (ctx, p) => this.areaRules(ctx.char, p.attr),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'areaRules',\n\t\t\tcategory: 'buildAreas',\n\t\t\tcmd: 'area rules',\n\t\t\tusage: l10n.l('areaRules.usage', usageText),\n\t\t\tshortDesc: l10n.l('areaRules.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('areaRules.helpText', helpText),\n\t\t\tsortOrder: 80,\n\t\t});\n\t}\n\n\tareaRules(char, attr) {\n\t\tlet a = char.inRoom.area;\n\t\tif (!a) {\n\t\t\tthis.module.charLog.logError(char, new Err('areaRules.roomHasNoArea', \"This room doesn't belong to an area.\"));\n\t\t\treturn;\n\t\t}\n\n\t\tlet name = a.name.replace(/([^.])\\.$/, \"$1\");\n\t\tlet rules = a.rules;\n\t\tif (!rules) {\n\t\t\tthis.module.charLog.logInfo(char, l10n.l('areaRules.areaHasNoRoles', \"{name} has no additional rules.\", { name }));\n\t\t\treturn;\n\t\t}\n\n\t\tthis.module.charLog.logComponent(char, 'areaRules', new Elem(n => n.elem('div', { className: 'arearules' }, [\n\t\t\tn.component(new Txt(l10n.t('areaRules.areaRules', \"{name} rules\", { name }), { tagName: 'h3', className: 'margin-bottom-l' })),\n\t\t\tn.component(new FormatTxt(rules, { className: 'area--rules formattxt-charlog', noInteraction: true })),\n\t\t])));\n\t}\n}\n\nexport default RulesArea;\n","import { Txt, Elem } from 'modapp-base-component';\nimport l10n from 'modapp-l10n';\nimport TextStep from 'classes/TextStep';\nimport ValueStep from 'classes/ValueStep';\nimport DelimStep from 'classes/DelimStep';\nimport { propertyTooLong } from 'utils/cmdErr';\n\nconst usageText = 'away <span class=\"opt\"><span class=\"opt\">=</span> <span class=\"param\">Status</span></span>';\nconst shortDesc = `Set the idle status as being away`;\nconst helpText =\n`<p>Set idle state to <em>away</em> with an optional status message.</p>\n<p><code class=\"param\">Status</code> is the optional status message.</p>\n<p>Alias: <code>afk</code></p>`;\n\nconst txtSetAsAway = l10n.l('away.setAsAway', \"Set as away.\");\nconst setAsAwayClearStatus = l10n.l('away.setAsAwayClearStatus', \"Set as away. To clear the status message, type:\");\n\n/**\n * Away adds the away command.\n */\nclass Away {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'cmd', 'help', 'charLog', 'info' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t\tthis.module.cmd.addCmd({\n\t\t\tkey: 'away',\n\t\t\tnext: [\n\t\t\t\tnew DelimStep(\"=\", { next: new ValueStep('withStatus', true), errRequired: null }),\n\t\t\t\tnew TextStep('status', {\n\t\t\t\t\tspanLines: false,\n\t\t\t\t\tmaxLength: () => module.info.getCore().propertyMaxLength,\n\t\t\t\t\terrTooLong: propertyTooLong,\n\t\t\t\t\terrRequired: null,\n\t\t\t\t}),\n\t\t\t],\n\t\t\talias: [ 'afk' ],\n\t\t\tvalue: (ctx, p) => this.away(ctx.char, { status: p.withStatus ? (p.status || '') : (p.status || null) }),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'away',\n\t\t\tcategory: 'basic',\n\t\t\tcmd: 'away',\n\t\t\talias: [ 'afk' ],\n\t\t\tusage: l10n.l('away.usage', usageText),\n\t\t\tshortDesc: l10n.l('away.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('away.helpText', helpText),\n\t\t\tsortOrder: 90,\n\t\t});\n\t}\n\n\taway(char, params) {\n\t\treturn char.call('away', params).then(() => {\n\t\t\tif (params.status) {\n\t\t\t\tthis.module.charLog.logComponent(char, 'info', new Elem(n => n.elem('div', [\n\t\t\t\t\tn.component(new Txt(setAsAwayClearStatus)),\n\t\t\t\t\tn.elem('div', { className: 'charlog--pad-small' }, [\n\t\t\t\t\t\tn.elem('div', { className: 'charlog--code' }, [\n\t\t\t\t\t\t\tn.elem('code', [ n.text(\"status\") ]),\n\t\t\t\t\t\t]),\n\t\t\t\t\t]),\n\t\t\t\t])));\n\t\t\t} else {\n\t\t\t\tthis.module.charLog.logInfo(char, txtSetAsAway);\n\t\t\t}\n\t });\n\t}\n}\n\nexport default Away;\n","import l10n from 'modapp-l10n';\nimport TextStep from 'classes/TextStep';\nimport Err from 'classes/Err';\nimport { itemNameTooLong } from 'utils/cmdErr';\n\nconst usageText = 'create area <span class=\"param\">Name</span>';\nconst shortDesc = 'Create a new area';\nconst helpText =\n`<p>Create a new area that your rooms can belong to.</p>\n<p><code class=\"param\">Name</code> is the name of the area.</p>`;\n\n/**\n * CreateArea adds command to create a new area.\n */\nclass CreateArea {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'cmd', 'charLog', 'help', 'info' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.cmd.addPrefixCmd('create', {\n\t\t\tkey: 'area',\n\t\t\tnext: [\n\t\t\t\tnew TextStep('name', {\n\t\t\t\t\terrRequired: () => new Err('createArea.nameRequired', \"What should the area be called?\"),\n\t\t\t\t\tmaxLength: () => module.info.getCore().itemNameMaxLength,\n\t\t\t\t\terrTooLong: itemNameTooLong,\n\t\t\t\t}),\n\t\t\t],\n\t\t\tvalue: (ctx, p) => this.createArea(ctx.char, {\n\t\t\t\tname: (p.name || '').trim(),\n\t\t\t}),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'createArea',\n\t\t\tcategory: 'buildAreas',\n\t\t\tcmd: 'create area',\n\t\t\tusage: l10n.l('createArea.usage', usageText),\n\t\t\tshortDesc: l10n.l('createArea.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('createArea.helpText', helpText),\n\t\t\tsortOrder: 10,\n\t\t});\n\t}\n\n\tcreateArea(char, params) {\n\t\treturn char.call('createArea', params).then(area => {\n\t\t\tthis.module.charLog.logInfo(char, l10n.l('createArea.areaCreated', \"Created area \\\"{name}\\\".\", { name: area.name }));\n\t\t});\n\t}\n}\n\nexport default CreateArea;\n","import l10n from 'modapp-l10n';\nimport TextStep from 'classes/TextStep';\nimport DelimStep from 'classes/DelimStep';\nimport ListStep from 'classes/ListStep';\nimport IDStep from 'classes/IDStep';\nimport prepareKeys from 'utils/prepareKeys';\nimport { itemNameTooLong } from 'utils/cmdErr';\n\nconst usageText = 'create exit <span class=\"param\">Name</span> <span class=\"opt\">= <span class=\"param\">#RoomID<span class=\"comment\">/</span>Room</span></span>';\nconst shortDesc = 'Create a new exit';\nconst helpText =\n`<p>Create a new exit from current room. If no destination room ID or name is provided, a new empty room will be created.</p>\n<p><code class=\"param\">Name</code> is the exit name and keyword used with the <code>go</code> command.</p>\n<p><code class=\"param\">#RoomID</code> is the optional ID of the destination room.</p>\n<p><code class=\"param\">Room</code> is the optional name of an owned destination room.</p>\n<p>A room's ID can be obtained using the <code>get room id</code> command.</p>\n<p>If another player's character owns the destination room, you must instead make a request using the <code>request exit</code> command.</p>`;\n\n\n/**\n * CreateExit adds command to create a new room exit.\n */\nclass CreateExit {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'cmd', 'cmdLists', 'charLog', 'help', 'player', 'info' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.cmd.addPrefixCmd('create', {\n\t\t\tkey: 'exit',\n\t\t\tnext: [\n\t\t\t\tnew TextStep('name', {\n\t\t\t\t\tregex: /^[^=]*[^=\\s]/,\n\t\t\t\t\tmaxLength: () => module.info.getCore().itemNameMaxLength,\n\t\t\t\t\terrTooLong: itemNameTooLong,\n\t\t\t\t}),\n\t\t\t\tnew DelimStep(\"=\", {\n\t\t\t\t\terrRequired: null,\n\t\t\t\t\tnext: new IDStep('targetRoom', {\n\t\t\t\t\t\tname: \"target room ID\",\n\t\t\t\t\t\tlist: () => {\n\t\t\t\t\t\t\tlet c = module.player.getActiveChar();\n\t\t\t\t\t\t\treturn ((c && c.ownedRooms && c.ownedRooms.toArray()) || []).map(v => v.id);\n\t\t\t\t\t\t},\n\t\t\t\t\t\telse: new ListStep('targetRoom', module.cmdLists.getCharOwnedRooms(), {\n\t\t\t\t\t\t\tname: \"target room\",\n\t\t\t\t\t\t}),\n\t\t\t\t\t}),\n\t\t\t\t}),\n\t\t\t],\n\t\t\tvalue: (ctx, p) => this.createExit(ctx.char, {\n\t\t\t\tname: p.name.trim(),\n\t\t\t\tkeys: prepareKeys(p.name),\n\t\t\t\ttargetRoom: p.targetRoom,\n\t\t\t}),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'createExit',\n\t\t\tcategory: 'buildRooms',\n\t\t\tcmd: 'create exit',\n\t\t\tusage: l10n.l('createExit.usage', usageText),\n\t\t\tshortDesc: l10n.l('createExit.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('createExit.helpText', helpText),\n\t\t\tsortOrder: 60,\n\t\t});\n\t}\n\n\tcreateExit(char, params) {\n\t\treturn char.call('createExit', params).then(result => {\n\t\t\tthis.module.charLog.logInfo(char, l10n.l('createExit.exitCreated', \"Created exit \\\"{exitName}\\\" to \\\"{targetRoomName}\\\".\", { exitName: result.exit.name, targetRoomName: result.targetRoom.name }));\n\t\t});\n\t}\n}\n\nexport default CreateExit;\n","import l10n from 'modapp-l10n';\nimport TextStep from 'classes/TextStep';\nimport DelimStep from 'classes/DelimStep';\nimport Err from 'classes/Err';\nimport { keyTooLong, itemNameTooLong } from 'utils/cmdErr';\n\nconst usageText = 'create profile <span class=\"param\">Keyword</span> = <span class=\"param\">Name</span>';\nconst shortDesc = 'Create a profile based on current appearance';\nconst helpText =\n`<p>Create a profile based on your character's current appearance. This stores the <em>gender</em>, <em>species</em>, <em>description</em>, and <em>image</em>.</p>\n<p><code class=\"param\">Keyword</code> is the keyword to use for the profile.</p>\n<p><code class=\"param\">Name</code> is a descriptive name for the profile.</p>`;\n\n/**\n * CreateProfile adds command to create a profile based on the character's current appearance.\n */\nclass CreateProfile {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'cmd',\n\t\t\t'charLog',\n\t\t\t'help',\n\t\t\t'info',\n\t\t\t'createLimits',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.cmd.addPrefixCmd('create', {\n\t\t\tkey: 'profile',\n\t\t\tnext: [\n\t\t\t\tnew TextStep('key', {\n\t\t\t\t\tregex: /^[\\w\\s]*\\w/,\n\t\t\t\t\tname: \"profile keyword\",\n\t\t\t\t\tmaxLength: () => this.module.info.getCore().keyMaxLength,\n\t\t\t\t\terrTooLong: keyTooLong,\n\t\t\t\t}),\n\t\t\t\tnew DelimStep(\"=\", {\n\t\t\t\t\tnext: [\n\t\t\t\t\t\tnew TextStep('name', {\n\t\t\t\t\t\t\tname: \"profile name\",\n\t\t\t\t\t\t\tmaxLength: () => this.module.info.getCore().itemNameMaxLength,\n\t\t\t\t\t\t\terrTooLong: itemNameTooLong,\n\t\t\t\t\t\t\terrRequired: step => new Err('createProfile.nameRequired', \"What would the descriptive name of the profile be?\"),\n\t\t\t\t\t\t}),\n\t\t\t\t\t],\n\t\t\t\t}),\n\t\t\t],\n\t\t\tvalue: (ctx, p) => this.createProfile(ctx.char, {\n\t\t\t\tkey: p.key,\n\t\t\t\tname: p.name,\n\t\t\t}),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'createProfile',\n\t\t\tcategory: 'profile',\n\t\t\tcmd: 'create profile',\n\t\t\tusage: l10n.l('createProfile.usage', usageText),\n\t\t\tshortDesc: l10n.l('createProfile.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('createProfile.helpText', helpText),\n\t\t\tsortOrder: 110,\n\t\t});\n\t}\n\n\tcreateProfile(char, params) {\n\t\tlet errComponent = this.module.createLimits.getCharProfilesError(char);\n\t\tif (errComponent) {\n\t\t\treturn this.module.charLog.logComponent(char, 'error', errComponent);\n\t\t}\n\t\treturn char.call('createProfile', params).then(result => {\n\t\t \tthis.module.charLog.logInfo(char, l10n.l('createProfile.profileCreated', \"Created profile \\\"{profileName}\\\".\", { profileName: result.profile.name }));\n\t\t});\n\t}\n}\n\nexport default CreateProfile;\n","import l10n from 'modapp-l10n';\nimport TextStep from 'classes/TextStep';\nimport { itemNameTooLong } from 'utils/cmdErr';\n\nconst usageText = 'create room <span class=\"opt\"><span class=\"param\">Name</span></span>';\nconst shortDesc = 'Create a new room';\nconst helpText =\n`<p>Create a new room and teleport your character there.</p>\n<p><code class=\"param\">Name</code> is the name of the room. If omitted, the room will get a default name.</p>`;\n\n/**\n * CreateRoom adds command to create a new room.\n */\nclass CreateRoom {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'cmd', 'charLog', 'help', 'info' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.cmd.addPrefixCmd('create', {\n\t\t\tkey: 'room',\n\t\t\tnext: [\n\t\t\t\tnew TextStep('name', {\n\t\t\t\t\terrRequired: null,\n\t\t\t\t\tmaxLength: () => module.info.getCore().itemNameMaxLength,\n\t\t\t\t\terrTooLong: itemNameTooLong,\n\t\t\t\t}),\n\t\t\t],\n\t\t\tvalue: (ctx, p) => this.createRoom(ctx.char, {\n\t\t\t\tname: (p.name || '').trim(),\n\t\t\t}),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'createRoom',\n\t\t\tcategory: 'buildRooms',\n\t\t\tcmd: 'create room',\n\t\t\tusage: l10n.l('createRoom.usage', usageText),\n\t\t\tshortDesc: l10n.l('createRoom.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('createRoom.helpText', helpText),\n\t\t\tsortOrder: 10,\n\t\t});\n\t}\n\n\tcreateRoom(char, params) {\n\t\treturn char.call('createRoom', params).then(room => {\n\t\t\tthis.module.charLog.logInfo(char, l10n.l('createRoom.roomCreated', \"Created room \\\"{name}\\\".\", { name: room.name }));\n\t\t\treturn char.call('teleport', { roomId: room.id });\n\t\t});\n\t}\n}\n\nexport default CreateRoom;\n","import l10n from 'modapp-l10n';\nimport TextStep from 'classes/TextStep';\nimport DelimStep from 'classes/DelimStep';\nimport Err from 'classes/Err';\nimport { keyTooLong, itemNameTooLong } from 'utils/cmdErr';\n\nconst usageText = 'create roomprofile <span class=\"param\">Keyword</span> = <span class=\"param\">Name</span>';\nconst shortDesc = 'Create a room profile based on current appearance';\nconst helpText =\n`<p>Create a room profile based on the room's current appearance. This stores the <em>description</em> and <em>image</em>.</p>\n<p><code class=\"param\">Keyword</code> is the keyword to use for the profile.</p>\n<p><code class=\"param\">Name</code> is a descriptive name for the profile.</p>`;\n\n/**\n * CreateRoomProfile adds command to create a profile based on the room's current appearance.\n */\nclass CreateRoomProfile {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'api',\n\t\t\t'cmd',\n\t\t\t'charLog',\n\t\t\t'help',\n\t\t\t'info',\n\t\t\t'createLimits',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.cmd.addPrefixCmd('create', {\n\t\t\tkey: 'roomprofile',\n\t\t\tnext: [\n\t\t\t\tnew TextStep('key', {\n\t\t\t\t\tregex: /^[\\w\\s]*\\w/,\n\t\t\t\t\tname: \"profile keyword\",\n\t\t\t\t\tmaxLength: () => this.module.info.getCore().keyMaxLength,\n\t\t\t\t\terrTooLong: keyTooLong,\n\t\t\t\t}),\n\t\t\t\tnew DelimStep(\"=\", {\n\t\t\t\t\tnext: [\n\t\t\t\t\t\tnew TextStep('name', {\n\t\t\t\t\t\t\tname: \"profile name\",\n\t\t\t\t\t\t\tmaxLength: () => this.module.info.getCore().itemNameMaxLength,\n\t\t\t\t\t\t\terrTooLong: itemNameTooLong,\n\t\t\t\t\t\t\terrRequired: step => new Err('createRoomProfile.nameRequired', \"What would the descriptive name of the profile be?\"),\n\t\t\t\t\t\t}),\n\t\t\t\t\t],\n\t\t\t\t}),\n\t\t\t],\n\t\t\tvalue: (ctx, p) => this.createRoomProfile(ctx.char, {\n\t\t\t\tkey: p.key,\n\t\t\t\tname: p.name,\n\t\t\t}),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'createRoomProfile',\n\t\t\tcategory: 'buildRooms',\n\t\t\tcmd: 'create roomprofile',\n\t\t\tusage: l10n.l('createRoomProfile.usage', usageText),\n\t\t\tshortDesc: l10n.l('createRoomProfile.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('createRoomProfile.helpText', helpText),\n\t\t\tsortOrder: 110,\n\t\t});\n\t}\n\n\tcreateRoomProfile(char, params) {\n\t\treturn this.module.api.get('core.room.' + char.inRoom.id + '.profiles').then(profiles => {\n\t\t\tlet errComponent = this.module.createLimits.getRoomProfilesError(profiles);\n\t\t\tif (errComponent) {\n\t\t\t\treturn this.module.charLog.logComponent(char, 'error', errComponent);\n\t\t\t}\n\t\t\treturn char.call('createRoomProfile', params).then(result => {\n\t\t\t\tthis.module.charLog.logInfo(char, l10n.l('createRoomProfile.roomProfileCreated', \"Created room profile \\\"{profileName}\\\".\", { profileName: result.profile.name }));\n\t\t\t});\n\t\t});\n\t}\n}\n\nexport default CreateRoomProfile;\n","import l10n from 'modapp-l10n';\nimport TextStep from 'classes/TextStep';\nimport DelimStep from 'classes/DelimStep';\nimport { keyTooLong, scriptTooLong } from 'utils/cmdErr';\nimport isError from 'utils/isError';\nimport ScriptCompileError from 'components/ScriptCompileError';\n\nconst usageText = 'create roomscript <span class=\"param\">Keyword</span> = <span class=\"param\">Source</span>';\nconst shortDesc = 'Create a room script';\nconst helpText =\n`<p>Create a room script.</p>\n<p>For info on how to active the script, type: <code>help set roomscript</code></p>\n<p class=\"common--formattext\">For more information and script examples, see the <a href=\"https://github.com/mucklet/mucklet-script#readme\" target=\"_blank\" rel=\"noopener noreferrer\" title=\"https://github.com/mucklet/mucklet-script\">mucklet-script</a> development resources.</p>\n<p><code class=\"param\">Keyword</code> is the keyword to use for the script.</p>\n<p><code class=\"param\">Source</code> is the room script source code.</p>`;\nconst examples = [\n\t{ cmd: 'create roomscript test = export function onActivate(): void {\\n Room.describe(\"Hello, world!\")\\n}', desc: l10n.l('createRoomScript.helloWorldDesc', \"Creates a <code>test</code> hello world room script.\") },\n];\n\n/**\n * CreateRoomScript adds command to create a room script.\n */\nclass CreateRoomScript {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'cmd',\n\t\t\t'charLog',\n\t\t\t'help',\n\t\t\t'info',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.cmd.addPrefixCmd('create', {\n\t\t\tkey: 'roomscript',\n\t\t\tnext: [\n\t\t\t\tnew TextStep('key', {\n\t\t\t\t\tregex: /^[\\w\\s]*\\w/,\n\t\t\t\t\tname: \"script keyword\",\n\t\t\t\t\tmaxLength: () => this.module.info.getCore().keyMaxLength,\n\t\t\t\t\terrTooLong: keyTooLong,\n\t\t\t\t}),\n\t\t\t\tnew DelimStep(\"=\", {\n\t\t\t\t\tnext: [\n\t\t\t\t\t\tnew TextStep('source', {\n\t\t\t\t\t\t\tname: \"source code\",\n\t\t\t\t\t\t\ttoken: 'code',\n\t\t\t\t\t\t\tmaxLength: () => this.module.info.getCore().scriptMaxLength,\n\t\t\t\t\t\t\terrTooLong: scriptTooLong,\n\t\t\t\t\t\t\terrRequired: null,\n\t\t\t\t\t\t\tspanLines: true,\n\t\t\t\t\t\t\ttrimSpace: false,\n\t\t\t\t\t\t\tspellcheck: false,\n\t\t\t\t\t\t}),\n\t\t\t\t\t],\n\t\t\t\t}),\n\t\t\t],\n\t\t\tvalue: (ctx, p) => this.createRoomScript(ctx.char, {\n\t\t\t\tkey: p.key,\n\t\t\t\tsource: p.source,\n\t\t\t}),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'createRoomScript',\n\t\t\tcategory: 'buildRooms',\n\t\t\tcmd: 'create roomscript',\n\t\t\tusage: l10n.l('createRoomScript.usage', usageText),\n\t\t\tshortDesc: l10n.l('createRoomScript.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('createRoomScript.helpText', helpText),\n\t\t\texamples,\n\t\t\tsortOrder: 210,\n\t\t});\n\t}\n\n\tcreateRoomScript(char, params) {\n\t\treturn char.call('createRoomScript', params).then(result => {\n\t\t \tthis.module.charLog.logInfo(char, l10n.l('createRoomScript.scriptCreated', \"Created script \\\"{scriptKey}\\\" for room \\\"{roomName}\\\".\", { scriptKey: result.script.key, roomName: result.room.name }));\n\t\t}).catch(err => {\n\t\t\tif (!isError(err, 'core.compileError')) {\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t\tthrow new ScriptCompileError(err);\n\t\t});\n\t}\n}\n\nexport default CreateRoomScript;\n","import l10n from 'modapp-l10n';\nimport TextStep from 'classes/TextStep';\nimport ListStep from 'classes/ListStep';\nimport DelimStep from 'classes/DelimStep';\nimport ValueStep from 'classes/ValueStep';\nimport { tagRegex } from 'utils/regex';\nimport { descriptionTooLong, keyTooLong } from 'utils/cmdErr';\n\nconst usageText = 'create tag <span class=\"param\">Keyword</span><span class=\"opt\">:<span class=\"param\">Preference</span></span> <span class=\"opt\">= <span class=\"param\">Description</span></span>';\nconst shortDesc = 'Create a custom character tag';\nconst helpText =\n`<p>Create a custom character tag.</p>\n<p><code class=\"param\">Keyword</code> is the keyword for the tag.</p>\n<p><code class=\"param\">Preference</code> is the optional tag preference. May be <code>like</code> (default) or <code>dislike</code>.</p>\n<p><code class=\"param\">Description</code> is the optional tag description.</p>`;\n\n/**\n * CreateTag adds command to create a custom character tag.\n */\nclass CreateTag {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'cmd', 'charLog', 'help', 'api', 'tags', 'info' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.cmd.addPrefixCmd('create', {\n\t\t\tkey: 'tag',\n\t\t\tnext: [\n\t\t\t\tnew TextStep('key', {\n\t\t\t\t\tregex: tagRegex,\n\t\t\t\t\tname: \"tag keyword\",\n\t\t\t\t\tmaxLength: () => this.module.info.getTag().tagKeyMaxLength,\n\t\t\t\t\terrTooLong: keyTooLong,\n\t\t\t\t}),\n\t\t\t\tnew DelimStep(\":\", {\n\t\t\t\t\tnext: new ListStep('pref', this.module.tags.getPreferenceList(), {\n\t\t\t\t\t\tname: \"preference flag\",\n\t\t\t\t\t\telse: new ValueStep('pref', \"like\"),\n\t\t\t\t\t}),\n\t\t\t\t\terrRequired: null,\n\t\t\t\t}),\n\t\t\t\tnew DelimStep(\"=\", {\n\t\t\t\t\tnext: [\n\t\t\t\t\t\tnew TextStep('desc', {\n\t\t\t\t\t\t\tmaxLength: () => this.module.info.getTag().tagDescMaxLength,\n\t\t\t\t\t\t\terrTooLong: descriptionTooLong,\n\t\t\t\t\t\t\terrRequired: null,\n\t\t\t\t\t\t}),\n\t\t\t\t\t],\n\t\t\t\t\terrRequired: null,\n\t\t\t\t}),\n\t\t\t],\n\t\t\tvalue: (ctx, p) => this.createTag(ctx.char, {\n\t\t\t\tkey: p.key,\n\t\t\t\tdesc: p.desc,\n\t\t\t\tpref: p.pref,\n\t\t\t}),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'createTag',\n\t\t\tcategory: 'tags',\n\t\t\tcmd: 'create tag',\n\t\t\tusage: l10n.l('createTag.usage', usageText),\n\t\t\tshortDesc: l10n.l('createTag.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('createTag.helpText', helpText),\n\t\t\tsortOrder: 50,\n\t\t});\n\t}\n\n\tcreateTag(char, params) {\n\t\treturn this.module.api.call('tag.char.' + char.id + '.tags', 'create', params).then(tag => {\n\t\t\tthis.module.charLog.logInfo(char, l10n.l('createTag.createdTag', \"Created custom tag [{tagKey}].\", { tagKey: tag.key }));\n\t\t});\n\t}\n}\n\nexport default CreateTag;\n","import l10n from 'modapp-l10n';\nimport IDStep from 'classes/IDStep';\nimport ListStep from 'classes/ListStep';\n\nconst usageText = 'delete area <span class=\"param\">#AreaID<span class=\"comment\">/</span>Area</span>';\nconst shortDesc = 'Delete an area';\nconst helpText =\n`<p>Delete an unused area without rooms or child areas.</p>\n<code class=\"param\">#AreaID</code> is the ID of the area to delete.</p>\n<code class=\"param\">Area</code> is the name of an owned area to delete.</p>`;\n\n/**\n * DeleteArea adds command to delete a character area.\n */\nclass DeleteArea {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'cmd', 'cmdLists', 'charLog', 'help', 'player' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.cmd.addPrefixCmd('delete', {\n\t\t\tkey: 'area',\n\t\t\tnext: [\n\t\t\t\tnew IDStep('areaId', {\n\t\t\t\t\tname: \"area ID\",\n\t\t\t\t\tlist: () => {\n\t\t\t\t\t\tlet c = this.module.player.getActiveChar();\n\t\t\t\t\t\treturn ((c && c.ownedAreas && c.ownedAreas.toArray()) || []).map(v => v.id);\n\t\t\t\t\t},\n\t\t\t\t\telse: new ListStep('areaId', this.module.cmdLists.getCharOwnedAreas(), {\n\t\t\t\t\t\tname: \"area\",\n\t\t\t\t\t}),\n\t\t\t\t}),\n\t\t\t],\n\t\t\tvalue: (ctx, p) => this.deleteArea(ctx.char, {\n\t\t\t\tareaId: p.areaId,\n\t\t\t}),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'deleteArea',\n\t\t\tcategory: 'buildAreas',\n\t\t\tcmd: 'delete area',\n\t\t\tusage: l10n.l('deleteArea.usage', usageText),\n\t\t\tshortDesc: l10n.l('deleteArea.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('deleteArea.helpText', helpText),\n\t\t\tsortOrder: 40,\n\t\t});\n\t}\n\n\tdeleteArea(char, params) {\n\t\treturn char.call('deleteArea', params)\n\t\t\t.then(result => this.module.charLog.logInfo(char, l10n.l('deleteArea.areaDeleted', \"Deleted area \\\"{areaName}\\\".\", { areaName: result.name })));\n\t}\n}\n\nexport default DeleteArea;\n","import l10n from 'modapp-l10n';\nimport ListStep from 'classes/ListStep';\nimport * as translateErr from 'utils/translateErr';\n\nconst usageText = 'delete exit <span class=\"param\">Keyword</span>';\nconst shortDesc = 'Delete an exit';\nconst helpText =\n`<p>Delete an exit.</p>\n<p><code class=\"param\">Keyword</code> is the keyword of the exit to delete.</p>`;\n\n/**\n * DeleteExit adds command to delete an existing room exit.\n */\nclass DeleteExit {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'cmd',\n\t\t\t'cmdLists',\n\t\t\t'charLog',\n\t\t\t'help',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.cmd.addPrefixCmd('delete', {\n\t\t\tkey: 'exit',\n\t\t\tnext: new ListStep('exitId', this.module.cmdLists.getInRoomExits(), {\n\t\t\t\tname: \"exit\",\n\t\t\t\ttextId: 'exitKey',\n\t\t\t\terrRequired: step => new Err('deleteExit.keyRequired', \"What exit do you want to delete?\"),\n\t\t\t}),\n\t\t\tvalue: (ctx, p) => this.deleteExit(ctx.char, p),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'deleteExit',\n\t\t\tcategory: 'buildRooms',\n\t\t\tcmd: 'delete exit',\n\t\t\tusage: l10n.l('deleteExit.usage', usageText),\n\t\t\tshortDesc: l10n.l('deleteExit.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('deleteExit.helpText', helpText),\n\t\t\tsortOrder: 80,\n\t\t});\n\t}\n\n\tdeleteExit(char, params) {\n\t\treturn char.call('deleteExit', params.exitId\n\t\t\t? { exitId: params.exitId }\n\t\t\t: { exitKey: params.exitKey },\n\t\t).then(() => {\n\t\t\tthis.module.charLog.logInfo(char, l10n.l('deleteExit.deletedExit', \"Exit was successfully deleted.\"));\n\t\t}).catch(err => {\n\t\t\tthrow translateErr.exitNotFound(err, params.exitKey);\n\t\t});\n\t}\n}\n\nexport default DeleteExit;\n","import l10n from 'modapp-l10n';\nimport Err from 'classes/Err';\n\nconst usageText = 'delete note <span class=\"param\">Character</span>';\nconst shortDesc = 'Delete any private notes for a character';\nconst helpText =\n`<p>Delete any private notes for a character.</p>\n<p><code class=\"param\">Character</code> is the name of the character to delete the notes for.</p>\n<p>Alias: <code>delete notes</code></p>`;\n\n/**\n * DeleteNote deletes the delete note command.\n */\nclass DeleteNote {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'cmd',\n\t\t\t'cmdSteps',\n\t\t\t'charLog',\n\t\t\t'help',\n\t\t\t'api',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.cmd.addPrefixCmd('delete', {\n\t\t\tkey: 'note',\n\t\t\talias: [ 'notes' ],\n\t\t\tnext: [\n\t\t\t\tthis.module.cmdSteps.newAnyCharStep({\n\t\t\t\t\terrRequired: step => new Err('deleteNote.characterRequired', \"Who do you want to delete the notes for?\"),\n\t\t\t\t\tsortOrder: [ 'awake', 'watch' ],\n\t\t\t\t}),\n\t\t\t],\n\t\t\tvalue: (ctx, p) => this.deleteNote(ctx.player, ctx.char, p.charId\n\t\t\t\t? { charId: p.charId, text: p.text }\n\t\t\t\t: { charName: p.charName, text: p.text },\n\t\t\t),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'deleteNote',\n\t\t\tcategory: 'friends',\n\t\t\tcmd: 'delete note',\n\t\t\talias: [ 'delete notes' ],\n\t\t\tusage: l10n.l('deleteNote.usage', usageText),\n\t\t\tshortDesc: l10n.l('deleteNote.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('deleteNote.helpText', helpText),\n\t\t\tsortOrder: 70,\n\t\t});\n\t}\n\n\tdeleteNote(player, char, params) {\n\t\treturn (params.charId\n\t\t\t? Promise.resolve({ id: params.charId })\n\t\t\t: player.call('getChar', { charName: params.charName })\n\t\t).then(c => this.module.api.call('note.player.' + player.id + '.note.' + c.id, 'delete')).then(result => {\n\t\t\tlet c = result.char;\n\t\t\tthis.module.charLog.logInfo(char, l10n.l('deleteNote.deletedNoteFor', \"Deleted notes for {charName}.\", { charName: (c.name + \" \" + c.surname).trim() }));\n\t\t});\n\t}\n}\n\nexport default DeleteNote;\n","import l10n from 'modapp-l10n';\nimport ListStep from 'classes/ListStep';\n\nconst usageText = 'delete profile <span class=\"param\">Keyword</span>';\nconst shortDesc = 'Delete a character profile';\nconst helpText =\n`<p>Delete a character profile.</p>\n<p><code class=\"param\">Keyword</code> is the keyword for the character profile.</p>`;\n\n/**\n * DeleteProfile adds command to delete a character profile.\n */\nclass DeleteProfile {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'cmd', 'cmdLists', 'charLog', 'help' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.cmd.addPrefixCmd('delete', {\n\t\t\tkey: 'profile',\n\t\t\tnext: [\n\t\t\t\tnew ListStep('profileId', this.module.cmdLists.getCharProfiles(), {\n\t\t\t\t\tname: \"character profile to delete\",\n\t\t\t\t}),\n\t\t\t],\n\t\t\tvalue: (ctx, p) => this.deleteProfile(ctx.char, {\n\t\t\t\tprofileId: p.profileId,\n\t\t\t}),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'deleteProfile',\n\t\t\tcategory: 'profile',\n\t\t\tcmd: 'delete profile',\n\t\t\tusage: l10n.l('deleteProfile.usage', usageText),\n\t\t\tshortDesc: l10n.l('deleteProfile.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('deleteProfile.helpText', helpText),\n\t\t\tsortOrder: 150,\n\t\t});\n\t}\n\n\tdeleteProfile(char, params) {\n\t\treturn char.call('deleteProfile', params)\n\t\t\t.then(result => this.module.charLog.logInfo(char, l10n.l('deleteProfile.characterProfileDeleted', \"Deleted character profile \\\"{profileName}\\\".\", { profileName: result.profile.name })));\n\t}\n}\n\nexport default DeleteProfile;\n","import { Elem, Txt } from 'modapp-base-component';\nimport { ModelTxt } from 'modapp-resource-component';\nimport l10n from 'modapp-l10n';\nimport FAIcon from 'components/FAIcon';\n\nconst usageText = 'delete room';\nconst shortDesc = 'Delete current room';\nconst helpText =\n`<p>Delete current room and all exits leading there.</p>`;\n\n/**\n * DeleteRoom adds command to delete current room.\n */\nclass DeleteRoom {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'cmd', 'charLog', 'confirm', 'help' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.cmd.addPrefixCmd('delete', {\n\t\t\tkey: 'room',\n\t\t\tvalue: (ctx, p) => this.deleteRoom(ctx.char),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'deleteRoom',\n\t\t\tcategory: 'buildRooms',\n\t\t\tcmd: 'delete room',\n\t\t\tusage: l10n.l('deleteRoom.usage', usageText),\n\t\t\tshortDesc: l10n.l('deleteRoom.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('deleteRoom.helpText', helpText),\n\t\t\tsortOrder: 40,\n\t\t});\n\t}\n\n\tdeleteRoom(char) {\n\t\tlet room = char.inRoom;\n\t\tthis.module.confirm.open(() => char.call('deleteRoom', { roomId: room.id }).then(() => {\n\t\t\tthis.module.charLog.logInfo(char, l10n.l('deleteRoom.deletedRoom', \"Room was successfully deleted.\"));\n\t\t}), {\n\t\t\ttitle: l10n.l('deleteRoom.confirmDelete', \"Confirm deletion\"),\n\t\t\tbody: new Elem(n => n.elem('div', [\n\t\t\t\tn.component(new Txt(l10n.l('deleteRoom.deleteRoomBody', \"Do you really wish to delete the current room?\"), { tagName: 'p' })),\n\t\t\t\tn.elem('p', [ n.component(new ModelTxt(room, m => m.name, { className: 'dialog--strong' })) ]),\n\t\t\t\tn.elem('p', { className: 'dialog--error' }, [\n\t\t\t\t\tn.component(new FAIcon('exclamation-triangle')),\n\t\t\t\t\tn.html(\" \"),\n\t\t\t\t\tn.component(new Txt(l10n.l('deleteRoom.deletionWarning', \"Deletion cannot be undone.\"))),\n\t\t\t\t]),\n\t\t\t])),\n\t\t\tconfirm: l10n.l('deleteRoom.delete', \"Delete\"),\n\t\t});\n\t}\n}\n\nexport default DeleteRoom;\n","import l10n from 'modapp-l10n';\nimport ListStep from 'classes/ListStep';\n\nconst usageText = 'delete roomprofile <span class=\"param\">Keyword</span>';\nconst shortDesc = 'Delete a room profile';\nconst helpText =\n`<p>Delete a room profile.</p>\n<p><code class=\"param\">Keyword</code> is the keyword for the room profile.</p>`;\n\n/**\n * DeleteRoomProfile adds command to delete a room profile.\n */\nclass DeleteRoomProfile {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'cmd',\n\t\t\t'charLog',\n\t\t\t'help',\n\t\t\t'roomAccess',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.cmd.addPrefixCmd('delete', {\n\t\t\tkey: 'roomprofile',\n\t\t\tnext: [\n\t\t\t\tnew ListStep('profileId', this.module.roomAccess.getInRoomProfileTokens(), {\n\t\t\t\t\tname: \"room profile to delete\",\n\t\t\t\t}),\n\t\t\t],\n\t\t\tvalue: (ctx, p) => this.deleteRoomProfile(ctx.char, {\n\t\t\t\tprofileId: p.profileId,\n\t\t\t}),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'deleteRoomProfile',\n\t\t\tcategory: 'buildRooms',\n\t\t\tcmd: 'delete roomprofile',\n\t\t\tusage: l10n.l('deleteRoomProfile.usage', usageText),\n\t\t\tshortDesc: l10n.l('deleteRoomProfile.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('deleteRoomProfile.helpText', helpText),\n\t\t\tsortOrder: 150,\n\t\t});\n\t}\n\n\tdeleteRoomProfile(char, params) {\n\t\treturn char.call('deleteRoomProfile', params)\n\t\t\t.then(result => this.module.charLog.logInfo(char, l10n.l('deleteRoomProfile.roomProfileDeleted', \"Deleted room profile \\\"{profileName}\\\".\", { profileName: result.profile.name })));\n\t}\n}\n\nexport default DeleteRoomProfile;\n","import l10n from 'modapp-l10n';\nimport ListStep from 'classes/ListStep';\nimport IDStep from 'classes/IDStep';\n\nconst usageText = 'delete roomscript <span class=\"param\">Keyword<span class=\"comment\">/</span>#Script ID</span>';\nconst shortDesc = 'Delete a room script';\nconst helpText =\n`<p>Delete a room script.</p>\n<p><code class=\"param\">Keyword</code> is the keyword for the room script.</p>\n<p><code class=\"param\">#ScriptID</code> is the ID of the script.</p>`;\nconst examples = [\n\t{ cmd: 'delete roomscript test', desc: l10n.l('deleteRoomScript.deleteTestDesc', \"Deletes the <code>test</code> room script.\") },\n];\n\n/**\n * DeleteRoomScript adds command to delete a room script.\n */\nclass DeleteRoomScript {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'cmd',\n\t\t\t'charLog',\n\t\t\t'help',\n\t\t\t'roomAccess',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.cmd.addPrefixCmd('delete', {\n\t\t\tkey: 'roomscript',\n\t\t\tnext: [\n\t\t\t\tnew IDStep('scriptId', {\n\t\t\t\t\tname: \"script key or ID\",\n\t\t\t\t\telse: new ListStep('scriptId', this.module.roomAccess.getInRoomScriptTokens(), {\n\t\t\t\t\t\tname: \"room script\",\n\t\t\t\t\t}),\n\t\t\t\t}),\n\t\t\t],\n\t\t\tvalue: (ctx, p) => this.deleteRoomScript(ctx.char, {\n\t\t\t\tscriptId: p.scriptId,\n\t\t\t}),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'deleteRoomScript',\n\t\t\tcategory: 'buildRooms',\n\t\t\tcmd: 'delete roomscript',\n\t\t\tusage: l10n.l('deleteRoomScript.usage', usageText),\n\t\t\tshortDesc: l10n.l('deleteRoomScript.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('deleteRoomScript.helpText', helpText),\n\t\t\texamples,\n\t\t\tsortOrder: 250,\n\t\t});\n\t}\n\n\tdeleteRoomScript(char, params) {\n\t\treturn char.call('deleteRoomScript', params)\n\t\t\t.then(result => this.module.charLog.logInfo(char, l10n.l('deleteRoomScript.roomScriptDeleted', \"Deleted room script \\\"{key}\\\".\", result.script)));\n\t}\n}\n\nexport default DeleteRoomScript;\n","import l10n from 'modapp-l10n';\nimport DelimStep from 'classes/DelimStep';\nimport TextStep from 'classes/TextStep';\nimport { communicationTooLong } from 'utils/cmdErr';\n\nconst usageText = 'deny control <span class=\"opt\"><span class=\"param\">Character</span></span> <span class=\"opt\">= <span class=\"param\">Message</span></span>';\nconst shortDesc = 'Deny control of a puppet';\nconst helpText =\n`<p>Deny control of a puppet to one more more characters who has requested to take over control.</p>\n<p><code class=\"param\">Character</code> is the optional name of the character to deny control to. Defaults to any requesting character.</p>\n<p><code class=\"param\">Message</code> is the optional message to include in the request denial.</p>`;\n\n/**\n * Deny adds the deny control command.\n */\nclass DenyControl {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'cmd',\n\t\t\t'cmdSteps',\n\t\t\t'help',\n\t\t\t'player',\n\t\t\t'charLog',\n\t\t\t'info',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t\tthis.module.cmd.addPrefixCmd('deny', {\n\t\t\tkey: 'control',\n\t\t\tnext: [\n\t\t\t\tthis.module.cmdSteps.newAnyCharStep({\n\t\t\t\t\terrRequired: null,\n\t\t\t\t\tsortOrder: [ 'awake' ],\n\t\t\t\t}),\n\t\t\t\tnew DelimStep(\"=\", {\n\t\t\t\t\tnext: new TextStep('msg', {\n\t\t\t\t\t\tspanLines: false,\n\t\t\t\t\t\tmaxLength: () => this.module.info.getCore().communicationMaxLength,\n\t\t\t\t\t\terrTooLong: communicationTooLong,\n\t\t\t\t\t\terrRequired: null,\n\t\t\t\t\t}),\n\t\t\t\t\terrRequired: null,\n\t\t\t\t}),\n\t\t\t],\n\t\t\tvalue: (ctx, p) => this.denyControl(ctx.char, p),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'denyControl',\n\t\t\tcategory: 'puppets',\n\t\t\tcmd: 'deny control',\n\t\t\tusage: l10n.l('denyControl.usage', usageText),\n\t\t\tshortDesc: l10n.l('denyControl.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('denyControl.helpText', helpText),\n\t\t\tsortOrder: 110,\n\t\t});\n\t}\n\n\tdenyControl(char, params) {\n\t\treturn (params.charId\n\t\t\t? Promise.resolve({ id: params.charId })\n\t\t\t: params.charName\n\t\t\t\t? this.module.player.getPlayer().call('getChar', { charName: params.charName })\n\t\t\t\t: Promise.resolve({})\n\t\t)\n\t\t\t.then(c => char.call('controlRequestReject', { charId: c.id, msg: params.msg ? params.msg.trim() : undefined }))\n\t\t\t.then(() => {\n\t\t\t\tthis.module.charLog.logInfo(char, l10n.l('denyControl.controlRequestRejected', \"Control request was rejected.\"));\n\t\t\t});\n\t}\n}\n\nexport default DenyControl;\n","import l10n from 'modapp-l10n';\nimport TextStep from 'classes/TextStep';\nimport Err from 'classes/Err';\nimport { communicationTooLong } from 'utils/cmdErr';\n\nconst usageText = 'describe <span class=\"param\">Description</span>';\nconst shortDesc = 'Describe an event for others in the room';\nconst helpText =\n`<p>Send a description to the all characters in the room. Unlike <code>say</code>, a description will not be prefixed by the character's name, and is used to describe events not directly tied to the character.</p>\n<p><code class=\"param\">Description</code> is the event description. It may be formatted and span multiple paragraphs.</p>\n<p>Alias: <code>desc</code>, <code>spoof</code></p>`;\n\n/**\n * Describe adds the describe command.\n */\nclass Describe {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'cmd', 'cmdLists', 'help', 'info' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t\tthis.module.cmd.addCmd({\n\t\t\tkey: 'describe',\n\t\t\tnext: new TextStep('msg', {\n\t\t\t\tspanLines: true,\n\t\t\t\terrRequired: step => new Err('describe.messageRequired', \"What do you wish to describe?\"),\n\t\t\t\tmaxLength: () => this.module.info.getCore().communicationMaxLength,\n\t\t\t\terrTooLong: communicationTooLong,\n\t\t\t\tcompleter: this.module.cmdLists.getInRoomChars({\n\t\t\t\t\tfilterMuted: true,\n\t\t\t\t\tsortOrder: [ 'awake', 'watch' ],\n\t\t\t\t}),\n\t\t\t\tformatText: true,\n\t\t\t}),\n\t\t\talias: [ 'desc', 'spoof' ],\n\t\t\tvalue: (ctx, p) => this.describe(ctx.char, { msg: p.msg }),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'describe',\n\t\t\tcategory: 'communicate',\n\t\t\tcmd: 'describe',\n\t\t\talias: [ 'desc', 'spoof' ],\n\t\t\tusage: l10n.l('describe.usage', usageText),\n\t\t\tshortDesc: l10n.l('describe.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('describe.helpText', helpText),\n\t\t\tsortOrder: 60,\n\t\t});\n\t}\n\n\tdescribe(char, params) {\n\t\treturn char.call('describe', params);\n\t}\n}\n\nexport default Describe;\n","import l10n from 'modapp-l10n';\nimport ListStep from 'classes/ListStep';\nimport ItemList from 'classes/ItemList';\nimport DelimStep from 'classes/DelimStep';\nimport Err from 'classes/Err';\nimport helpAttribDesc from 'utils/helpAttribDesc';\n\nconst usageText = 'evict <span class=\"param\">Character</span> <span class=\"opt\">: <span class=\"param\">Type</span> <span class=\"opt\">=</span> <span class=\"param\">Value</span></span>';\nconst shortDesc = 'Evict a registered character';\nconst helpText =\n`<p>Evict a character previously registered. If <code class=\"param\">Type</code> is omitted, the character will be evicted from the <code>home</code> and/or <code>teleport</code> of current room.</p>\n<p><code class=\"param\">Character</code> is the name of the character to evict.</p>`;\n\n/**\n * Evict adds the evict command.\n */\nclass Evict {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'cmd',\n\t\t\t'charLog',\n\t\t\t'cmdSteps',\n\t\t\t'help',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t\tthis.evictType = new ItemList({\n\t\t\tcompare: (a, b) => (a.sortOrder - b.sortOrder) || a.key.localeCompare(b.key),\n\t\t});\n\n\t\tthis.module.cmd.addCmd({\n\t\t\tkey: 'evict',\n\t\t\tnext: [\n\t\t\t\tthis.module.cmdSteps.newAnyCharStep({\n\t\t\t\t\terrRequired: step => new Err('evict.characterRequired', \"Who do you want to evict?\"),\n\t\t\t\t\tsortOrder: [ 'awake' ],\n\t\t\t\t}),\n\t\t\t\tnew DelimStep(\":\", {\n\t\t\t\t\tnext: new ListStep('type', this.evictType, {\n\t\t\t\t\t\tname: \"type of eviction\",\n\t\t\t\t\t\ttoken: 'attr',\n\t\t\t\t\t}),\n\t\t\t\t\terrRequired: null,\n\t\t\t\t}),\n\t\t\t],\n\t\t\tvalue: (ctx, p) => {\n\t\t\t\tlet f = p.type;\n\t\t\t\treturn typeof f == 'function'\n\t\t\t\t\t? f(ctx, p, this)\n\t\t\t\t\t: this.evict(ctx.char, p.charId\n\t\t\t\t\t\t? { charId: p.charId }\n\t\t\t\t\t\t: { charName: p.charName },\n\t\t\t\t\t);\n\t\t\t},\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'evict',\n\t\t\tcategory: 'cleanup',\n\t\t\tcmd: 'evict',\n\t\t\tusage: l10n.l('evict.usage', usageText),\n\t\t\tshortDesc: l10n.l('evict.shortDesc', shortDesc),\n\t\t\tdesc: () => helpAttribDesc(l10n.t('evict.helpText', helpText), this.evictType.getItems(), {\n\t\t\t\tattribute: l10n.l('evict.type', \"Type\"),\n\t\t\t\tvalue: '',\n\t\t\t}),\n\t\t\texamples: () => {\n\t\t\t\tlet types = this.evictType.getItems();\n\t\t\t\tlet examples = [];\n\t\t\t\tfor (let t of types) {\n\t\t\t\t\tif (t.examples) {\n\t\t\t\t\t\texamples = examples.concat(t.examples);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn examples;\n\t\t\t},\n\t\t\tsortOrder: 30,\n\t\t});\n\t}\n\n\taddType(type) {\n\t\tlet next = (type.nextFactory ? type.nextFactory(this.module) : type.next) || null;\n\t\tthis.evictType.addItem(Object.assign({}, type, { next }));\n\t\treturn this;\n\t}\n\n\tevict(char, params) {\n\t\treturn char.call('evict', params).then(result => {\n\t\t\tlet tc = result.targetChar;\n\t\t\tthis.module.charLog.logInfo(char, l10n.l('evict.charEvicted', \"Successfully evicted {targetCharName} from this room.\", {\n\t\t\t\ttargetCharName: (tc.name + \" \" + tc.surname).trim(),\n\t\t\t}));\n\t\t});\n\t}\n}\n\nexport default Evict;\n","import l10n from 'modapp-l10n';\n\n/**\n * EvictHome adds the home type to the evict command.\n */\nclass EvictHome {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'evict', 'charLog' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.evict.addType({\n\t\t\tkey: 'home',\n\t\t\tdesc: l10n.l('evictHome.desc', `Evict from current room, setting their home back to default. <code class=\"param\">Value</code> is omitted.`),\n\t\t\tvalue: (ctx, p) => this.evictHome(ctx.char, p.charId\n\t\t\t\t? { charId: p.charId }\n\t\t\t\t: { charName: p.charName },\n\t\t\t),\n\t\t\texamples: [{\n\t\t\t\tcmd: 'evict John Doe : home',\n\t\t\t\tdesc: l10n.l('evictHome.exampleDesc', \"Evicts John Doe from using current room as home.\"),\n\t\t\t}],\n\t\t\tsortOrder: 10,\n\t\t});\n\t}\n\n\tevictHome(char, params) {\n\t\treturn char.call('evictHome', params).then(result => {\n\t\t\tlet c = result.char;\n\t\t\tthis.module.charLog.logInfo(char, l10n.l('evictHome.charEvicted', \"Successfully evicted {charName} from this room.\", {\n\t\t\t\tcharName: (c.name + \" \" + c.surname).trim(),\n\t\t\t}));\n\t\t});\n\t}\n}\n\nexport default EvictHome;\n","import l10n from 'modapp-l10n';\nimport DelimStep from 'classes/DelimStep';\nimport Err from 'classes/Err';\n\n/**\n * EvictPuppeteer adds the puppeteer type to the evict command.\n */\nclass EvictPuppeteer {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'evict',\n\t\t\t'charLog',\n\t\t\t'cmdSteps',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.evict.addType({\n\t\t\tkey: 'puppeteer',\n\t\t\tdesc: l10n.l('evictPuppeteer.desc', `Evict from using a puppet. <code class=\"param\">Value</code> is the name of the puppet.`),\n\t\t\tnext: [\n\t\t\t\tnew DelimStep(\"=\", { errRequired: null }),\n\t\t\t\tthis.module.cmdSteps.newAnyCharStep({\n\t\t\t\t\tid: 'puppetId',\n\t\t\t\t\ttextId: 'puppetName',\n\t\t\t\t\tname: \"puppet\",\n\t\t\t\t\terrRequired: step => new Err('evictPuppeteer.puppetRequired', \"What puppet do you want to evict from?\"),\n\t\t\t\t\tsortOrder: [ 'awake' ],\n\t\t\t\t}),\n\t\t\t],\n\t\t\tvalue: (ctx, p) => this.evictPuppeteer(ctx.char, Object.assign(\n\t\t\t\tp.charId ? { charId: p.charId } : { charName: p.charName },\n\t\t\t\tp.puppetId ? { puppetId: p.puppetId } : { puppetName: p.puppetName },\n\t\t\t)),\n\t\t\texamples: [{\n\t\t\t\tcmd: 'evict John Doe : puppeteer = Jane Puppet',\n\t\t\t\tdesc: l10n.l('evictPuppeteer.exampleDesc', \"Evicts John Doe from using Jane Puppet as a puppet.\"),\n\t\t\t}],\n\t\t\tsortOrder: 30,\n\t\t});\n\t}\n\n\tevictPuppeteer(char, params) {\n\t\treturn char.call('evictPuppeteer', params).then(result => {\n\t\t\tlet c = result.char;\n\t\t\tlet p = result.puppet;\n\t\t\tthis.module.charLog.logInfo(char, l10n.l('evictPuppeteer.charEvicted', \"Successfully evicted {charName} from using {puppetName} as a puppet.\", {\n\t\t\t\tcharName: (c.name + \" \" + c.surname).trim(),\n\t\t\t\tpuppetName: (p.name + \" \" + p.surname).trim(),\n\t\t\t}));\n\t\t});\n\t}\n}\n\nexport default EvictPuppeteer;\n","import l10n from 'modapp-l10n';\n\n/**\n * EvictTeleport adds the teleport type to the evict command.\n */\nclass EvictTeleport {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'evict', 'charLog' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.evict.addType({\n\t\t\tkey: 'teleport',\n\t\t\tdesc: l10n.l('evictTeleport.desc', `Evict from using current room as a teleport destination. <code class=\"param\">Value</code> is omitted.`),\n\t\t\tvalue: (ctx, p) => this.evictTeleport(ctx.char, p.charId\n\t\t\t\t? { charId: p.charId }\n\t\t\t\t: { charName: p.charName },\n\t\t\t),\n\t\t\texamples: [{\n\t\t\t\tcmd: 'evict Jane Doe : teleport',\n\t\t\t\tdesc: l10n.l('evictTeleport.exampleDesc', \"Evicts Jane Doe from using current room as a teleport destination.\"),\n\t\t\t}],\n\t\t\tsortOrder: 20,\n\t\t});\n\t}\n\n\tevictTeleport(char, params) {\n\t\treturn char.call('evictTeleport', params).then(result => {\n\t\t\tlet c = result.char;\n\t\t\tthis.module.charLog.logInfo(char, l10n.l('evictTeleport.charEvicted', \"Successfully evicted {charName} from teleporting to this room.\", {\n\t\t\t\tcharName: (c.name + \" \" + c.surname).trim(),\n\t\t\t}));\n\t\t});\n\t}\n}\n\nexport default EvictTeleport;\n","import Err from './Err';\n/**\n * RegexStep consumes a string represented by a regex.\n */\nclass RegexStep {\n\n\t/**\n\t * Creates an instance of RegexStep.\n\t * @param {string} id Id used as key when setting param values.\n\t * @param {RegExp} regex Regular expression to match against.\n\t * @param {object} [opt] Optional params.\n\t * @param {string} [opt.name] Name used in error outputs. Defaults to the id value.\n\t * @param {string} [opt.token] Token name. Defaults to 'entityid'.\n\t * @param {boolean} [opt.trimSpace] Flag indicating if initial space should be trimmed. Defaults to false.\n\t * @param {(value: string, self: RegexStep) => Err | null} [opt.validate] Validation callback function that returns an error if the value is invalid.\n\t * @param {Array.<string>|(ctx: object) => string[]} [opt.list] Array or callback function returning array of available strings to use for tab completion.\n\t * @param {Step} [opt.next] Next step after a matched string.\n\t * @param {Step} [opt.else] Step after if the string is missing. Will disabled any errRequired set.\n\t * @param {?function} [opt.errRequired] Callback function that returns an error when it fails to match. Null means it is not required.: function(this)\n\t * @param {function} [opt.errInvalid] Callback function that returns an invalid error if the validate callback fails.\n\t * @param {?function} [opt.prepareValue] Callback function that prepares the value before setting it in params.\n\t */\n\tconstructor(id, regex, opt) {\n\t\topt = opt || {};\n\t\tthis.id = id;\n\t\tthis.regex = regex;\n\t\tthis.name = opt.name || id;\n\t\tthis.token = opt.token || 'entityid';\n\t\tthis.trimSpace = opt.hasOwnProperty('trimSpace') ? !!opt.trimSpace : false;\n\t\tthis.next = opt.next || null;\n\t\tthis.else = opt.else || null;\n\t\tthis.list = opt.list || null;\n\t\tthis.validate = opt.validate || null;\n\t\tthis.errRequired = opt.hasOwnProperty('errRequired')\n\t\t\t? opt.errRequired\n\t\t\t: self => new Err('idStep.required', 'Missing {name}.', { name: self.name });\n\t\tthis.prepareValue = opt.prepareValue || (v => v);\n\t}\n\n\tparse(stream, state) {\n\t\tif (!stream) {\n\t\t\treturn this._setRequired(state);\n\t\t}\n\n\t\tif (this.trimSpace) {\n\t\t\tstream.eatSpace();\n\t\t}\n\n\t\t// Match until next word break\n\t\tlet m = stream.match(this.regex);\n\t\t// Validate the match\n\t\tif (!m) {\n\t\t\tstate.backUp(stream);\n\t\t\treturn this._setRequired(state);\n\t\t}\n\n\t\tlet err = this.validate?.(self, m[0]);\n\t\tif (err) {\n\t\t\tstate.setError(err);\n\t\t\treturn 'error';\n\t\t}\n\n\t\t// Add ID with lowercase\n\t\tstate.setParam(this.id, this.prepareValue(m[0]));\n\n\t\t// Add followup steps\n\t\tif (this.next) {\n\t\t\tstate.addStep(this.next);\n\t\t}\n\n\t\treturn this.token;\n\t}\n\n\t_setRequired(state) {\n\t\tif (this.else) {\n\t\t\tstate.addStep(this.else);\n\t\t} else if (this.errRequired) {\n\t\t\tstate.setError(this.errRequired(this));\n\t\t}\n\t\treturn false;\n\t}\n}\n\nexport default RegexStep;\n","import DelimStep from 'classes/DelimStep';\nimport RegexStep from 'classes/RegexStep';\nimport Err from './Err';\n\n/**\n * ColorStep consumes a hex color code Eg. #c1a657\n */\nclass ColorStep extends DelimStep {\n\n\t/**\n\t * Creates an instance of ColorStep.\n\t * @param {string} id Id used as key when setting param values.\n\t * @param {object} [opt] Optional params.\n\t * @param {string} [opt.name] Name used in error outputs. Defaults to the id value.\n\t * @param {string} [opt.token] Token name. Defaults to 'entityid'.\n\t * @param {string} [opt.delimToken] Delimiter token name. Defaults to 'delim'.\n\t * @param {Step} [opt.next] Next step after a matched color code.\n\t * @param {Step} [opt.else] Step after if the color code is missing. Will disabled any errRequired set.\n\t * @param {?function} [opt.errRequired] Callback function that returns an error when it fails to match. Null means it is not required.: function(this)\n\t * @param {function} [opt.errInvalid] Callback function that returns an invalid error if the # is not followed by a valid color code.\n\t */\n\tconstructor(id, opt) {\n\t\tlet errInvalid = opt?.errInvalid || ((self, m) => (\n\t\t\tnew Err('idStep.invalid', 'The {name} value \"#{value}\" is invalid. Expected the #-sign to be followed by 3 or 6 hexadecimal digits.', { name: self.name, value: m })\n\t\t));\n\t\tlet regexStep = new RegexStep(id, /^\\w*\\b/, {\n\t\t\tname: opt?.name || id,\n\t\t\ttoken: opt?.token || 'listitem',\n\t\t\terrRequired: self => errInvalid(self, ''),\n\t\t\tvalidate: (self, value) => !value.match(/^(?:[0-9a-fA-F]{3,3}){1,2}$/)\n\t\t\t\t? errInvalid(self, value)\n\t\t\t\t: null,\n\t\t\tprepareValue: str => '#' + str.toLowerCase(),\n\t\t\tnext: opt?.next,\n\t\t});\n\t\tsuper('#', {\n\t\t\ttoken: opt?.delimToken || 'listitem',\n\t\t\terrRequired: opt.hasOwnProperty('errRequired')\n\t\t\t\t? opt.errRequired\n\t\t\t\t: self => new Err('idStep.required', 'There is no {name}. Expected a #-sign followed by 3 or 6 hexadecimal digits.', { name: self.name }),\n\t\t\tnext: [\n\t\t\t\tregexStep,\n\t\t\t],\n\t\t\telse: opt?.else,\n\t\t});\n\t}\n}\n\nexport default ColorStep;\n","import l10n from 'modapp-l10n';\nimport ListStep from 'classes/ListStep';\nimport DelimStep from 'classes/DelimStep';\nimport ErrorStep from 'classes/ErrorStep';\nimport ColorStep from 'classes/ColorStep';\nimport ItemList from 'classes/ItemList';\nimport Err from 'classes/Err';\n\nconst usageText = 'focus <span class=\"param\">Character</span> <span class=\"opt\">= <span class=\"param\">Color<span class=\"comment\">/</span>#Hex</span></span>';\nconst shortDesc = 'Focus on a character to highlight them';\nconst helpText =\n`<p>Focus on a character to highlight them in the chat log and, if notifications are activated, get notified on their actions.</p>\n<p><code class=\"param\">Character</code> is the name of the character to focus on. If the value is <code>@all</code>, notifications will be triggered on all events.</p>\n<p><code class=\"param\">Color</code> is an optional color to use for highlighting. May be <code>red</code>, <code>green</code>, <code>blue</code>, <code>yellow</code>, <code>cyan</code>, <code>purple</code>, <code>pink</code>, <code>orange</code>, <code>white</code>, or <code>none</code>.</p>\n<p><code class=\"param\">#Hex</code> is an optional HTML hex color code to use for highlighting instead of a preset color.</p>\n<p>Use <code>stop focus</code> (alias <code>unfocus</code>) to remove focus from a character.</p>`;\nconst examples = [\n\t{ cmd: 'focus Jane Doe', desc: l10n.l('focus.focusNoColorDesc', \"Focus on Jane Doe with a random highlight color\") },\n\t{ cmd: 'focus John = green', desc: l10n.l('focus.focusColorDesc', \"Focus on John with green hightlight color\") },\n\t{ cmd: 'focus Jane = #c1a657', desc: l10n.l('focus.focusHexDesc', \"Focus on Jane with a custom HTML color code\") },\n\t{ cmd: 'focus John = none', desc: l10n.l('focus.focusNoneDesc', \"Notifications on events from John without highlighting\") },\n\t{ cmd: 'focus @all', desc: l10n.l('focus.focusAllDesc', \"Notifications on all events\") },\n\t{ cmd: 'stop focus John', desc: l10n.l('focus.stopFocusJohnDesc', \"Remove focus from John\") },\n\t{ cmd: 'unfocus @all', desc: l10n.l('focus.unfocusJohnDesc', \"Remove focus on all event but not individually focused characters\") },\n];\n\n/**\n * Focus adds the focus command.\n */\nclass Focus {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'cmd',\n\t\t\t'cmdSteps',\n\t\t\t'charLog',\n\t\t\t'charFocus',\n\t\t\t'help',\n\t\t\t'api',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.colors = new ItemList({\n\t\t\titems: Object.keys(this.module.charFocus.getFocusColors()).map(key => ({ key })),\n\t\t});\n\n\t\tthis.module.cmd.addCmd({\n\t\t\tkey: 'focus',\n\t\t\tnext: [\n\t\t\t\tthis.module.cmdSteps.newAnyCharStep({\n\t\t\t\t\tfilterMuted: true,\n\t\t\t\t\tsortOrder: [ 'room', 'awake', 'watch' ],\n\t\t\t\t\tnext: [\n\t\t\t\t\t\tnew DelimStep(\"=\", {\n\t\t\t\t\t\t\terrRequired: null,\n\t\t\t\t\t\t\tnext: new ListStep('color', this.colors, {\n\t\t\t\t\t\t\t\tname: \"focus color\",\n\t\t\t\t\t\t\t\telse: new ColorStep('color', {\n\t\t\t\t\t\t\t\t\terrRequired: step => new Err('focus.colorRequired', \"What focus color do you want?\"),\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t}),\n\t\t\t\t\t],\n\t\t\t\t\telse: [\n\t\t\t\t\t\tnew DelimStep('@', {\n\t\t\t\t\t\t\terrRequired: step => new Err('focus.characterRequired', \"Who do you want to focus on?\"),\n\t\t\t\t\t\t\tnext: [\n\t\t\t\t\t\t\t\tnew ListStep('at', new ItemList({\n\t\t\t\t\t\t\t\t\titems: [{ key: 'all' }],\n\t\t\t\t\t\t\t\t}), {\n\t\t\t\t\t\t\t\t\tname: \"focus at\",\n\t\t\t\t\t\t\t\t\terrNotFound: step => new Err('focus.atNotFound', \"Did you mean to focus @all?\"),\n\t\t\t\t\t\t\t\t\terrRequired: step => new Err('focus.atRequired', \"Did you mean to focus @all?\"),\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\tnew ErrorStep(/\\s*(=)/, new Err('focus.colorNotAllowed', \"Highlight colors not avalable for @all.\")),\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t}),\n\t\t\t\t\t],\n\t\t\t\t}),\n\t\t\t],\n\t\t\tvalue: (ctx, p) => this.focus(ctx.player, ctx.char, p),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'focus',\n\t\t\tcategory: 'friends',\n\t\t\tcmd: 'focus',\n\t\t\tusage: l10n.l('focus.usage', usageText),\n\t\t\tshortDesc: l10n.l('focus.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('focus.helpText', helpText),\n\t\t\texamples,\n\t\t\tsortOrder: 30,\n\t\t});\n\t}\n\n\tfocus(player, char, params) {\n\t\treturn params.at == 'all'\n\t\t\t? this.module.charFocus.toggleNotifyOnAll(char, true)\n\t\t\t\t.then(change => {\n\t\t\t\t\tif (!change) {\n\t\t\t\t\t\tthrow new Err('focus.alreadyNotifyOnAll', \"{charName} already gets notified on all events.\", { charName: char.name });\n\t\t\t\t\t}\n\t\t\t\t\tthis.module.charLog.logInfo(char, l10n.l('focus.notifiedOnAll', \"{charName} gets notified on all events.\", { charName: char.name }));\n\t\t\t\t})\n\t\t\t: player.call('getChar', params)\n\t\t\t\t.then(c => this.module.charFocus.addFocus(char, c.id, params.color))\n\t\t\t\t.then(result => {\n\t\t\t\t\tthis.module.charLog.logInfo(char, l10n.l('focus.focusingOnChar', \"Focusing on {targetName}.\", { targetName: result.char.name }));\n\t\t\t\t});\n\t}\n}\n\nexport default Focus;\n","import l10n from 'modapp-l10n';\nimport Err from 'classes/Err';\n\nconst usageText = 'follow <span class=\"param\">Character</span>';\nconst shortDesc = 'Follow a character wherever they go';\nconst helpText =\n`<p>Follow another character wherever they go. The other character must be in the same room.</p>\n<p><code class=\"param\">Character</code> is the name of the character to follow.</p>\n<p>Alias: <code>hopon</code></p>`;\n\n/**\n * Follow adds the follow command.\n */\nclass Follow {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'cmd',\n\t\t\t'cmdSteps',\n\t\t\t'help',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t\tthis.module.cmd.addCmd({\n\t\t\tkey: 'follow',\n\t\t\tnext: [\n\t\t\t\tthis.module.cmdSteps.newInRoomAwakeCharStep({\n\t\t\t\t\terrRequired: step => new Err('follow.charRequired', \"Who do you wish to follow?\"),\n\t\t\t\t\tfilterMuted: true,\n\t\t\t\t\tsortOrder: [ 'watch' ],\n\t\t\t\t}),\n\t\t\t],\n\t\t\talias: [ 'hopon' ],\n\t\t\tvalue: (ctx, p) => this.follow(ctx.char, { charId: p.charId }),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'follow',\n\t\t\tcategory: 'transport',\n\t\t\tcmd: 'follow',\n\t\t\talias: [ 'hopon' ],\n\t\t\tusage: l10n.l('follow.usage', usageText),\n\t\t\tshortDesc: l10n.l('follow.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('follow.helpText', helpText),\n\t\t\tsortOrder: 130,\n\t\t});\n\t}\n\n\tfollow(char, params) {\n\t\treturn char.call('follow', params);\n\t}\n}\n\nexport default Follow;\n","import l10n from 'modapp-l10n';\nimport ItemList from 'classes/ItemList';\nimport Err from 'classes/Err';\nimport helpAttribDesc from 'utils/helpAttribDesc';\nimport fullname from 'utils/fullname';\nimport formatDateTime from 'utils/formatDateTime';\n\nconst usageText = 'get <span class=\"param\">Attribute</span>';\nconst shortDesc = 'Get info about your character';\nconst helpText =\n`<p>Get the value of an attribute of your character.</p>`;\n\nconst defaultAttr = [\n\t{\n\t\tkey: 'id',\n\t\tname: \"character id\",\n\t\tdesc: l10n.l('get.idDesc', \"ID of your character.\"),\n\t\tsortOrder: 10,\n\t},\n\t{\n\t\tkey: 'created',\n\t\tname: \"character created\",\n\t\tdesc: l10n.l('get.createdDesc', \"Creation date of your character.\"),\n\t\tsortOrder: 20,\n\t},\n];\n\n/**\n * Get adds command to get character attribute values.\n */\nclass Get {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'cmd',\n\t\t\t'charLog',\n\t\t\t'help',\n\t\t\t'player',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t\tthis.charAttr = new ItemList({\n\t\t\tcompare: (a, b) => (a.sortOrder - b.sortOrder) || a.key.localeCompare(b.key),\n\t\t});\n\t\tfor (let o of defaultAttr) {\n\t\t\tthis.addAttribute(o);\n\t\t}\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'get',\n\t\t\tcategory: 'profile',\n\t\t\tcmd: 'get',\n\t\t\tusage: l10n.l('get.usage', usageText),\n\t\t\tshortDesc: l10n.l('get.shortDesc', shortDesc),\n\t\t\tdesc: () => helpAttribDesc(l10n.t('get.helpText', helpText), this.charAttr.getItems(), {\n\t\t\t\tvalue: '',\n\t\t\t}),\n\t\t\tsortOrder: 12,\n\t\t});\n\t}\n\n\taddAttribute(attr) {\n\t\tlet next = attr.nextFactory ? attr.nextFactory(this.module) : attr.next;\n\t\tlet item = Object.assign({}, attr, { next });\n\t\tthis.charAttr.addItem(item);\n\n\t\tif (item.key) {\n\t\t\tif (!item.value) {\n\t\t\t\titem.value = (ctx, p) => this._exec(ctx.char, Object.assign({ attr: item.key }, p));\n\t\t\t}\n\t\t\tthis.module.cmd.addPrefixCmd('get', item);\n\t\t}\n\t\treturn this;\n\t}\n\n\t_exec(ctx, p) {\n\t\tlet f = p.attr;\n\t\treturn typeof f == 'function'\n\t\t\t? f(ctx, p, this)\n\t\t\t: this.get(ctx, p.attr);\n\t}\n\n\tget(char, attr) {\n\t\tswitch (attr) {\n\t\t\tcase 'id':\n\t\t\t\tthis.module.charLog.logInfo(char, l10n.l('get.charHasId', \"{fullname} has ID #{charId}\", { fullname: fullname(char), charId: char.id }));\n\t\t\t\tbreak;\n\t\t\tcase 'created':\n\t\t\t\tlet c = this.module.player.getOwnedChar(char.id);\n\t\t\t\tif (!c) {\n\t\t\t\t\tthis.module.charLog.logError(char, new Err('get.charNotOwned', \"You must own the character.\"));\n\t\t\t\t} else {\n\t\t\t\t\tthis.module.charLog.logInfo(char, l10n.l('get.roomHasOwner', \"{fullname} was created {created}\", { fullname: fullname(c), created: formatDateTime(new Date(c.created), { showYear: true }) }));\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthis.module.charLog.logError(char, new Err('get.unknownAttribute', \"Unknown attribute: {attr}\", { attr }));\n\t\t}\n\t}\n}\n\nexport default Get;\n","import l10n from 'modapp-l10n';\nimport ListStep from 'classes/ListStep';\nimport ItemList from 'classes/ItemList';\nimport Err from 'classes/Err';\n\nconst usageText = 'get area <span class=\"param\">Attribute</span>';\nconst shortDesc = 'Get info about the area of current room';\nconst helpText =\n`<p>Get the value of an attribute for the area you are in.</p>\n<table class=\"tbl-small\">\n<thead><tr><th><code class=\"param\">Attribute</code></th><th>Value</th></tr></thead>\n<tbody>\n<tr><td><code>id</code></td><td>ID of the area.</td></tr>\n<tr><td><code>owner</code></td><td>Owner of the area.</td></tr>\n<tr><td><code>parent</code></td><td>Parent area name and ID.</td></tr>\n</tbody>\n</table>`;\n\n/**\n * GetArea adds command to print area info.\n */\nclass GetArea {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'cmd', 'charLog', 'help' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.areaAttr = new ItemList({\n\t\t\titems: [\n\t\t\t\t{ key: 'id' },\n\t\t\t\t{ key: 'owner' },\n\t\t\t\t{ key: 'parent' },\n\t\t\t],\n\t\t});\n\n\t\tthis.module.cmd.addPrefixCmd('get', {\n\t\t\tkey: 'area',\n\t\t\tnext: new ListStep('attr', this.areaAttr, {\n\t\t\t\tname: \"area attribute\",\n\t\t\t\ttoken: 'attr',\n\t\t\t}),\n\t\t\tvalue: (ctx, p) => this.getArea(ctx.char, p.attr),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'getArea',\n\t\t\tcategory: 'buildAreas',\n\t\t\tcmd: 'get area',\n\t\t\tusage: l10n.l('getArea.usage', usageText),\n\t\t\tshortDesc: l10n.l('getArea.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('getArea.helpText', helpText),\n\t\t\tsortOrder: 30,\n\t\t});\n\t}\n\n\tgetArea(char, attr) {\n\t\tlet a = char.inRoom.area;\n\t\tif (!a) {\n\t\t\tthis.module.charLog.logError(char, new Err('getArea.roomHasNoArea', \"This room doesn't belong to an area.\"));\n\t\t} else {\n\t\t\tswitch (attr) {\n\t\t\t\tcase 'id':\n\t\t\t\t\tthis.module.charLog.logInfo(char, l10n.l('getArea.areaHasId', \"{name} has ID #{areaId}\", { name: a.name.replace(/([^.])\\.$/, \"$1\"), areaId: a.id }));\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'owner':\n\t\t\t\t\tthis.module.charLog.logInfo(char, l10n.l('getArea.areaHasOwner', \"{name} has owner {owner}\", { name: a.name.replace(/([^.])\\.$/, \"$1\"), owner: (a.owner.name + \" \" + a.owner.surname).trim() }));\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'parent':\n\t\t\t\t\tif (!a.parent) {\n\t\t\t\t\t\tthis.module.charLog.logError(char, new Err('getArea.roomIsNotASubarea', \"The area is not a subarea.\"));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.module.charLog.logInfo(char, l10n.l('getArea.areaHasOwner', \"{name} is a subarea of {parent}, with ID #{parentId}\", { name: a.name.replace(/([^.])\\.$/, \"$1\"), parent: a.parent.name.replace(/([^.])\\.$/, \"$1\"), parentId: a.parent.id }));\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport default GetArea;\n","import { Elem, Txt, Html } from 'modapp-base-component';\nimport l10n from 'modapp-l10n';\nimport DelimStep from 'classes/DelimStep';\nimport ListStep from 'classes/ListStep';\nimport ItemList from 'classes/ItemList';\nimport Err from 'classes/Err';\nimport * as translateErr from 'utils/translateErr';\nimport escapeHtml from 'utils/escapeHtml';\n\nconst usageText = 'get exit <span class=\"param\">Keyword</span>';\nconst shortDesc = 'Get info about an exit';\nconst helpText =\n`<p>Get info about a visible exit in the room.</p>\n<p>Room owners may also get info on hidden or inactive exits.</p>`;\n\n/**\n * GetExit adds command to get exit attributes.\n */\nclass GetExit {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'cmd',\n\t\t\t'cmdLists',\n\t\t\t'charLog',\n\t\t\t'help',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tconst defaultAttr = [\n\t\t\t{\n\t\t\t\tkey: 'id',\n\t\t\t\tvalue: (ctx, exit, p) => {\n\t\t\t\t\tthis.module.charLog.logInfo(ctx.char, l10n.l('getExit.exitHasId', \"{name} has ID #{exitId}\", { name: exit.name.replace(/([^.])\\.$/, \"$1\"), exitId: exit.id }));\n\t\t\t\t},\n\t\t\t\tdesc: l10n.l('getExit.idDesc', \"ID of the exit.\"),\n\t\t\t\tsortOrder: 10,\n\t\t\t},\n\t\t];\n\n\t\tthis.exitAttr = new ItemList({\n\t\t\tcompare: (a, b) => (a.sortOrder - b.sortOrder) || a.key.localeCompare(b.key),\n\t\t});\n\t\tfor (let o of defaultAttr) {\n\t\t\tthis.addAttribute(o);\n\t\t}\n\n\t\tthis.module.cmd.addPrefixCmd('get', {\n\t\t\tkey: 'exit',\n\t\t\tnext: [\n\t\t\t\tnew ListStep('exitId', this.module.cmdLists.getInRoomExits(), {\n\t\t\t\t\tname: \"exit\",\n\t\t\t\t\ttextId: 'exitKey',\n\t\t\t\t\terrRequired: step => new Err('getExit.keyRequired', \"What exit do you want to get info about?\"),\n\t\t\t\t}),\n\t\t\t\tnew DelimStep(\":\", { errRequired: null }),\n\t\t\t\tnew ListStep('attr', this.exitAttr, {\n\t\t\t\t\tname: \"exit attribute\",\n\t\t\t\t\ttoken: 'attr',\n\t\t\t\t\terrRequired: null,\n\t\t\t\t}),\n\t\t\t],\n\t\t\tvalue: this._exec.bind(this),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'getExit',\n\t\t\tcategory: 'buildRooms',\n\t\t\tcmd: 'get exit',\n\t\t\tusage: l10n.l('getExit.usage', usageText),\n\t\t\tshortDesc: l10n.l('getExit.shortDesc', shortDesc),\n\t\t\tdesc: l10n.t('getExit.helpText', helpText),\n\t\t\tsortOrder: 75,\n\t\t});\n\t}\n\n\taddAttribute(attr) {\n\t\tlet next = attr.nextFactory ? attr.nextFactory(this.module) : attr.next;\n\t\tthis.exitAttr.addItem(Object.assign({}, attr, { next }));\n\t\treturn this;\n\t}\n\n\t_exec(ctx, p) {\n\t\tlet f = p.attr;\n\t\treturn ctx.char.call('getExit', p.exitId\n\t\t\t? { exitId: p.exitId }\n\t\t\t: { exitKey: p.exitKey },\n\t\t).then(exit => {\n\t\t\treturn f\n\t\t\t\t? f(ctx, exit, p)\n\t\t\t\t: this.getExit(ctx.char, exit);\n\t\t}).catch(err => {\n\t\t\tthrow translateErr.exitNotFound(err, p.exitKey);\n\t\t});\n\t}\n\n\tgetExit(char, exit) {\n\t\ttry {\n\t\t\tlet rows = [\n\t\t\t\t[ \"Exit\", escapeHtml(exit.name), { className: 'charlog--strong' }],\n\t\t\t\t[ \"Exit ID\", \"<code>#\" + escapeHtml(exit.id) + \"</code>\" ],\n\t\t\t\t[ \"Keywords\", exit.keys.map(k => escapeHtml(k)).join(\", \") ],\n\t\t\t];\n\n\t\t\tlet elem = new Elem(n => {\n\t\t\t\treturn n.elem('div', { className: 'charlog--pad' }, [\n\t\t\t\t\tn.elem('div', { className: 'charlog--code' }, [\n\t\t\t\t\t\tn.elem('table', { className: 'tbl-small tbl-nomargin charlog--font-small' }, rows.map(m => n.elem('tr', [\n\t\t\t\t\t\t\tn.elem('td', { className: 'charlog--strong' }, [\n\t\t\t\t\t\t\t\tn.component(new Txt(m[0])),\n\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\tn.elem('td', [\n\t\t\t\t\t\t\t\tn.component(new Html(m[1], { className: m[2]?.className })),\n\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t]))),\n\t\t\t\t\t]),\n\t\t\t\t]);\n\t\t\t});\n\n\t\t\tthis.module.charLog.logComponent(char, 'getExit', elem);\n\t\t} catch (ex) {\n\t\t\tconsole.error(ex);\n\t\t}\n\t}\n}\n\nexport default GetExit;\n","import { Elem, Txt, Html } from 'modapp-base-component';\nimport l10n from 'modapp-l10n';\nimport Err from 'classes/Err';\nimport formatText from 'utils/formatText';\n\nconst usageText = 'get note <span class=\"param\">Character</span>';\nconst shortDesc = 'View any private notes for a character';\nconst helpText =\n`<p>View any private notes for a character.</p>\n<p><code class=\"param\">Character</code> is the name of the character to view the notes for.</p>\n<p>Alias: <code>get notes</code></p>`;\n\n/**\n * GetNote views the get note command.\n */\nclass GetNote {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'cmd',\n\t\t\t'cmdSteps',\n\t\t\t'charLog',\n\t\t\t'help',\n\t\t\t'api',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.cmd.addPrefixCmd('get', {\n\t\t\tkey: 'note',\n\t\t\talias: [ 'notes' ],\n\t\t\tnext: [\n\t\t\t\tthis.module.cmdSteps.newAnyCharStep({\n\t\t\t\t\terrRequired: step => new Err('getNote.characterRequired', \"Who do you want to view the notes for?\"),\n\t\t\t\t\tsortOrder: [ 'awake', 'watch' ],\n\t\t\t\t}),\n\t\t\t],\n\t\t\tvalue: (ctx, p) => this.getNote(ctx.player, ctx.char, p.charId\n\t\t\t\t? { charId: p.charId, text: p.text }\n\t\t\t\t: { charName: p.charName, text: p.text },\n\t\t\t),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'getNote',\n\t\t\tcategory: 'friends',\n\t\t\tcmd: 'get note',\n\t\t\talias: [ 'get notes' ],\n\t\t\tusage: l10n.l('getNote.usage', usageText),\n\t\t\tshortDesc: l10n.l('getNote.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('getNote.helpText', helpText),\n\t\t\tsortOrder: 60,\n\t\t});\n\t}\n\n\tgetNote(player, char, params) {\n\t\tlet charName = \"\";\n\t\treturn (params.charId\n\t\t\t? this.module.api.get('core.char.' + params.charId)\n\t\t\t: player.call('getChar', { charName: params.charName })\n\t\t).then(c => {\n\t\t\tcharName = (c.name + \" \" + c.surname).trim();\n\t\t\treturn this.module.api.get('note.player.' + player.id + '.note.' + c.id);\n\t\t}).then(note => {\n\t\t\tif (note.text.trim() == \"\") {\n\t\t\t\treturn Promise.reject({ code: 'system.notFound' });\n\t\t\t}\n\t\t\tthis.module.charLog.logComponent(char, 'getNote', new Elem(n => n.elem('div', { className: 'getnote charlog--pad' }, [\n\t\t\t\tn.component(new Txt(l10n.l('getNote.notesFor', \"Notes for {charName}\", { charName }), { tagName: 'h4', className: 'charlog--pad' })),\n\t\t\t\tn.component(new Html(formatText(note.text), { tagName: 'span', className: 'common--formattext charlog--font-small' })),\n\t\t\t])));\n\t\t}).catch(err => {\n\t\t\tif (err.code == 'system.notFound') {\n\t\t\t\tthis.module.charLog.logInfo(char, l10n.l('getNote.noNotesFor', \"No notes for {charName}.\", { charName }));\n\t\t\t} else {\n\t\t\t\treturn Promise.reject(err);\n\t\t\t}\n\t\t});\n\t}\n}\n\nexport default GetNote;\n","import { Elem, Txt, Html } from 'modapp-base-component';\n\nimport l10n from 'modapp-l10n';\nimport ListStep from 'classes/ListStep';\nimport ItemList from 'classes/ItemList';\nimport helpAttribDesc from 'utils/helpAttribDesc';\nimport escapeHtml from 'utils/escapeHtml';\nimport MultiDelimStep from 'classes/MultiDelimStep';\nimport NumberStep from 'classes/NumberStep';\nimport Err from 'classes/Err';\n\nconst itemsPerPage = 50;\n\nconst usageText = 'get room <span class=\"param\">Attribute</span> <span class=\"opt\">page <span class=\"param\">Page</span></span>';\nconst shortDesc = 'Get info about current room';\nconst helpText =\n`<p>Get the value of a room attribute.</p>\n<p><code class=\"param\">Page</code> is the optional page for lists. Starts at 1.</p>`;\nconst examples = [\n\t{ cmd: 'get room id', desc: l10n.l('getRoom.getRoomIdDesc', \"Shows current room's ID\") },\n\t{ cmd: 'get room owner', desc: l10n.l('getRoom.getRoomOwnerDesc', \"Shows current room's owner\") },\n\t{ cmd: 'get room teleporters', desc: l10n.l('getRoom.getRoomTeleportersDesc', \"Lists the first {limit} characters with room registered as a teleport node\", { limit: itemsPerPage }) },\n\t{ cmd: 'get room tenants page 2', desc: l10n.l('getRoom.getRoomTenantsDesc', \"Lists characters {from} - {to} with current room set as home\", { from: (itemsPerPage * 2 + 1), to: (itemsPerPage * 3) }) },\n];\n\n/**\n * GetRoom adds command to get room attributes values.\n */\nclass GetRoom {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'api',\n\t\t\t'cmd',\n\t\t\t'cmdLists',\n\t\t\t'charLog',\n\t\t\t'help',\n\t\t\t'player',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tconst defaultAttr = [\n\t\t\t{\n\t\t\t\tkey: 'id',\n\t\t\t\tvalue: (char, room, ctx, p) => {\n\t\t\t\t\tthis.module.charLog.logInfo(char, l10n.l('getRoom.roomHasId', \"{name} has ID #{roomId}\", { name: room.name.replace(/([^.])\\.$/, \"$1\"), roomId: room.id }));\n\t\t\t\t},\n\t\t\t\tdesc: l10n.l('getRoom.idDesc', \"ID of the room.\"),\n\t\t\t\tsortOrder: 10,\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: 'owner',\n\t\t\t\tvalue: (char, room, ctx, p) => {\n\t\t\t\t\tlet owner = room.owner;\n\t\t\t\t\tthis.module.charLog.logInfo(char, l10n.l('getRoom.roomHasOwner', \"{name} has owner {owner}\", { name: room.name.replace(/([^.])\\.$/, \"$1\"), owner: (owner.name + \" \" + owner.surname).trim() }));\n\t\t\t\t},\n\t\t\t\tdesc: l10n.l('getRoom.ownerDesc', \"Owner of the room.\"),\n\t\t\t\tsortOrder: 20,\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: 'tenants',\n\t\t\t\tnext: [\n\t\t\t\t\tnew MultiDelimStep([\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdelim: /page\\b/,\n\t\t\t\t\t\t\tstep: {\n\t\t\t\t\t\t\t\tnext: new NumberStep('page', {\n\t\t\t\t\t\t\t\t\tname: \"page step\",\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\terrRequired: null,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t], { token: 'attr' }),\n\t\t\t\t],\n\t\t\t\tvalue: (char, room, ctx, p) => {\n\t\t\t\t\tlet page = typeof p.page == 'number' ? p.page : 1;\n\t\t\t\t\tif (page < 1) {\n\t\t\t\t\t\treturn Promise.reject(new Err('getRoom.pageNumberBetween', \"Page number must be 1 or greater.\"));\n\t\t\t\t\t}\n\t\t\t\t\tthis.module.api.get(`core.room.${room.id}.tenants?offset=${(page - 1) * itemsPerPage}&limit=${itemsPerPage + 1}`).then(tenants => {\n\t\t\t\t\t\tlet list = [];\n\t\t\t\t\t\tfor (let m of tenants) {\n\t\t\t\t\t\t\tif (list.length == itemsPerPage) {\n\t\t\t\t\t\t\t\tlist.push('<tr><td rowspan=\"2\">' + escapeHtml(l10n.t('getRoom.andMore', \"... and more\")) + '</td></tr>');\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tlist.push('<tr><td><code>#' + escapeHtml(m.id) + '</code></td><td>' + escapeHtml((m.name + ' ' + m.surname).trim()) + '</td></tr>');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (list.length) {\n\t\t\t\t\t\t\tthis.module.charLog.logComponent(char, 'getRoomTenants', new Elem(n => n.elem('div', { className: 'getroom-tenants charlog--pad' }, [\n\t\t\t\t\t\t\t\tn.component(new Txt(\n\t\t\t\t\t\t\t\t\tpage == 1\n\t\t\t\t\t\t\t\t\t\t? l10n.l('getRoomTenants.roomTenants', \"Room tenants\")\n\t\t\t\t\t\t\t\t\t\t: l10n.l('getRoomTenants.roomTenants', \"Room tenants - page {page}\", { page }),\n\t\t\t\t\t\t\t\t\t{ tagName: 'h4', className: 'charlog--pad' },\n\t\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t\t\tn.elem('div', { className: 'charlog--code' }, [\n\t\t\t\t\t\t\t\t\tn.elem('table', { className: 'tbl-small tbl-nomargin' }, [\n\t\t\t\t\t\t\t\t\t\tn.component(new Html('<tr><th class=\"charlog--strong\">' +\n\t\t\t\t\t\t\t\t\t\t\tescapeHtml(l10n.t('getRoomTenants.area', \"Character ID\")) +\n\t\t\t\t\t\t\t\t\t\t\t'</th><th class=\"charlog--strong\">' +\n\t\t\t\t\t\t\t\t\t\t\tescapeHtml(l10n.t('getRoomTenants.id', \"Name\")) +\n\t\t\t\t\t\t\t\t\t\t\t'</th></tr>', { tagName: 'thead' },\n\t\t\t\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t\t\t\t\tn.component(new Html(list.join(''), { tagName: 'tbody' })),\n\t\t\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\t])));\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.module.charLog.logInfo(char, page == 1\n\t\t\t\t\t\t\t\t? this.module.charLog.logInfo(char, l10n.l('getRoomTenants.noTenants', \"The room has no tenants.\"))\n\t\t\t\t\t\t\t\t: this.module.charLog.logInfo(char, l10n.l('getRoomTenants.noTenants', \"This page has no room tenants.\")),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tdesc: l10n.l('getRoom.tenantsDesc', \"List characters with room set as home. {limit} per page.\", { limit: itemsPerPage }),\n\t\t\t\tsortOrder: 30,\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: 'teleporters',\n\t\t\t\tnext: [\n\t\t\t\t\tnew MultiDelimStep([\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdelim: /page\\b/,\n\t\t\t\t\t\t\tstep: {\n\t\t\t\t\t\t\t\tnext: new NumberStep('page', { name: \"page step\" }),\n\t\t\t\t\t\t\t\terrRequired: null,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t], { token: 'attr' }),\n\t\t\t\t],\n\t\t\t\tvalue: (char, room, ctx, p) => {\n\t\t\t\t\tlet page = typeof p.page == 'number' ? p.page : 1;\n\t\t\t\t\tif (page < 1) {\n\t\t\t\t\t\treturn Promise.reject(new Err('getRoom.pageNumberBetween', \"Page number must be 1 or greater.\"));\n\t\t\t\t\t}\n\t\t\t\t\tthis.module.api.get(`core.room.${room.id}.nodes?offset=${(page - 1) * itemsPerPage}&limit=${itemsPerPage + 1}`).then(teleporters => {\n\t\t\t\t\t\tlet list = [];\n\t\t\t\t\t\tfor (let m of teleporters) {\n\t\t\t\t\t\t\tif (list.length == itemsPerPage) {\n\t\t\t\t\t\t\t\tlist.push('<tr><td rowspan=\"2\">' + escapeHtml(l10n.t('getRoom.andMore', \"... and more\")) + '</td></tr>');\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tlist.push('<tr><td><code>#' + escapeHtml(m.id) + '</code></td><td>' + escapeHtml((m.name + ' ' + m.surname).trim()) + '</td></tr>');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (list.length) {\n\t\t\t\t\t\t\tthis.module.charLog.logComponent(char, 'getRoomNodes', new Elem(n => n.elem('div', { className: 'getroom-teleporters charlog--pad' }, [\n\t\t\t\t\t\t\t\tn.component(new Txt(\n\t\t\t\t\t\t\t\t\tpage == 1\n\t\t\t\t\t\t\t\t\t\t? l10n.l('getRoom.teleportNodeCharacters', \"Teleport node characters\")\n\t\t\t\t\t\t\t\t\t\t: l10n.l('getRoom.teleportNodeCharacters', \"Teleport node characters - page {page}\", { page }),\n\t\t\t\t\t\t\t\t\t{ tagName: 'h4', className: 'charlog--pad' },\n\t\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t\t\tn.elem('div', { className: 'charlog--code' }, [\n\t\t\t\t\t\t\t\t\tn.elem('table', { className: 'tbl-small tbl-nomargin' }, [\n\t\t\t\t\t\t\t\t\t\tn.component(new Html('<tr><th class=\"charlog--strong\">' +\n\t\t\t\t\t\t\t\t\t\t\tescapeHtml(l10n.t('getRoomTenants.area', \"Character ID\")) +\n\t\t\t\t\t\t\t\t\t\t\t'</th><th class=\"charlog--strong\">' +\n\t\t\t\t\t\t\t\t\t\t\tescapeHtml(l10n.t('getRoomTenants.id', \"Name\")) +\n\t\t\t\t\t\t\t\t\t\t\t'</th></tr>', { tagName: 'thead' },\n\t\t\t\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t\t\t\t\tn.component(new Html(list.join(''), { tagName: 'tbody' })),\n\t\t\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\t])));\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.module.charLog.logInfo(char, page == 1\n\t\t\t\t\t\t\t\t? this.module.charLog.logInfo(char, l10n.l('getRoomTenants.noTenants', \"The room has no registered teleport node characters.\"))\n\t\t\t\t\t\t\t\t: this.module.charLog.logInfo(char, l10n.l('getRoomTenants.noPageTenants', \"This page has no registered teleport node characters.\")),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tdesc: l10n.l('getRoom.teleportersDesc', \"List characters with room registered as a teleport node. {limit} per page.\", { limit: itemsPerPage }),\n\t\t\t\tsortOrder: 40,\n\t\t\t},\n\t\t];\n\n\t\tthis.roomAttr = new ItemList({\n\t\t\tcompare: (a, b) => (a.sortOrder - b.sortOrder) || a.key.localeCompare(b.key),\n\t\t});\n\t\tfor (let o of defaultAttr) {\n\t\t\tthis.addAttribute(o);\n\t\t}\n\n\t\tthis.module.cmd.addPrefixCmd('get', {\n\t\t\tkey: 'room',\n\t\t\tnext: new ListStep('attr', this.roomAttr, {\n\t\t\t\tname: \"room attribute\",\n\t\t\t\ttoken: 'attr',\n\t\t\t}),\n\t\t\tvalue: this._exec.bind(this),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'getRoom',\n\t\t\tcategory: 'buildRooms',\n\t\t\tcmd: 'get room',\n\t\t\tusage: l10n.l('getRoom.usage', usageText),\n\t\t\tshortDesc: l10n.l('getRoom.shortDesc', shortDesc),\n\t\t\tdesc: () => helpAttribDesc(l10n.t('getRoom.helpText', helpText), this.roomAttr.getItems(), {\n\t\t\t\tvalue: '',\n\t\t\t}),\n\t\t\texamples,\n\t\t\tsortOrder: 30,\n\t\t});\n\t}\n\n\taddAttribute(attr) {\n\t\tlet next = attr.nextFactory ? attr.nextFactory(this.module) : attr.next;\n\t\tthis.roomAttr.addItem(Object.assign({}, attr, { next }));\n\t\treturn this;\n\t}\n\n\t_exec(ctx, p) {\n\t\tlet char = ctx.char;\n\t\tlet room = char.inRoom;\n\n\t\tlet f = p.attr;\n\t\treturn f(char, room, ctx, p);\n\t}\n}\n\nexport default GetRoom;\n","import l10n from 'modapp-l10n';\nimport ListStep from 'classes/ListStep';\nimport Err from 'classes/Err';\nimport * as translateErr from 'utils/translateErr';\n\nconst usageText = 'go <span class=\"param\">Keyword</span>';\nconst shortDesc = 'Go to another room';\nconst helpText =\n`<p>Go to another room through an exit.</p>\n<p><code class=\"param\">Keyword</code> is the keyword of the exit to use.</p>`;\n\n/**\n * Go adds the go command.\n */\nclass Go {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'cmd', 'cmdLists', 'help' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t\tthis.module.cmd.addCmd({\n\t\t\tkey: 'go',\n\t\t\tnext: new ListStep('exitId', this.module.cmdLists.getInRoomExits(), {\n\t\t\t\tname: \"exit\",\n\t\t\t\ttextId: 'exitKey',\n\t\t\t\terrRequired: () => new Err('go.exitRequired', \"Where do you want to go?\"),\n\t\t\t}),\n\t\t\tvalue: this.go.bind(this),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'go',\n\t\t\tcategory: 'transport',\n\t\t\tcmd: 'go',\n\t\t\tusage: l10n.l('go.usage', usageText),\n\t\t\tshortDesc: l10n.l('go.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('go.helpText', helpText),\n\t\t\tsortOrder: 10,\n\t\t});\n\t}\n\n\tgo(ctx, p) {\n\t\treturn ctx.char.call('useExit', p.exitId\n\t\t\t? { exitId: p.exitId }\n\t\t\t: { exitKey: p.exitKey },\n\t\t).catch(err => {\n\t\t\tthrow translateErr.exitNotFound(err, p.exitKey);\n\t\t});\n\t}\n}\n\nexport default Go;\n","import l10n from 'modapp-l10n';\n\nconst usageText = 'grant control <span class=\"param\">Character</span>';\nconst shortDesc = 'Grant control of a puppet';\nconst helpText =\n`<p>Grant control of a puppet to a character who has requested to take over control.</p>\n<p><code class=\"param\">Character</code> is the name of the character to grant control to.</p>`;\n\n/**\n * GrantControl adds the grant control command.\n */\nclass GrantControl {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'cmd', 'cmdSteps', 'help', 'player', 'charLog' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t\tthis.module.cmd.addPrefixCmd('grant', {\n\t\t\tkey: 'control',\n\t\t\tnext: [\n\t\t\t\tthis.module.cmdSteps.newAnyCharStep({\n\t\t\t\t\terrRequired: null,\n\t\t\t\t\tsortOrder: [ 'awake' ],\n\t\t\t\t}),\n\t\t\t],\n\t\t\tvalue: (ctx, p) => this.grantControl(ctx.char, { charId: p.charId }),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'grantControl',\n\t\t\tcategory: 'puppets',\n\t\t\tcmd: 'grant control',\n\t\t\tusage: l10n.l('grantControl.usage', usageText),\n\t\t\tshortDesc: l10n.l('grantControl.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('grantControl.helpText', helpText),\n\t\t\tsortOrder: 100,\n\t\t});\n\t}\n\n\tgrantControl(char, params) {\n\t\treturn (params.charId\n\t\t\t? Promise.resolve({ id: params.charId })\n\t\t\t: params.charName\n\t\t\t\t? this.module.player.getPlayer().call('getChar', { charName: params.charName })\n\t\t\t\t: Promise.resolve({})\n\t\t)\n\t\t\t.then(c => char.call('controlRequestAccept', { charId: c.id }))\n\t\t\t.then(() => {\n\t\t\t\tthis.module.charLog.logInfo(char, l10n.l('grantControl.controlRequestAccepted', \"Control request was accepted.\"));\n\t\t\t});\n\t}\n}\n\nexport default GrantControl;\n","import l10n from 'modapp-l10n';\nimport TextStep from 'classes/TextStep';\nimport Err from 'classes/Err';\nimport { communicationTooLong } from 'utils/cmdErr';\n\nconst usageText = 'helpme <span class=\"param\">Message</span>';\nconst shortDesc = 'Send a message to helpers';\nconst helpText =\n`<p>Send a message to the helpers. Helpers are friendly people willing to help you out around here.</p>\n<p><code class=\"param\">Message</code> is the message being sent to the helpers.</p`;\nconst examples = [\n\t{ cmd: 'helpme Hi! I am new here.' },\n\t{ cmd: 'helpme How can I find people to roleplay with?' },\n\t{ cmd: 'helpme Can I create my own area?' },\n\t{ cmd: 'helpme I got lost! How do I get back?' },\n];\n\n/**\n * Helpme adds the helpme command.\n */\nclass Helpme {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'cmd', 'cmdLists', 'help', 'info' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t\tthis.module.cmd.addCmd({\n\t\t\tkey: 'helpme',\n\t\t\tnext: new TextStep('msg', {\n\t\t\t\tspanLines: true,\n\t\t\t\terrRequired: step => new Err('helpme.messageRequired', \"What do you want to helpme?\"),\n\t\t\t\tmaxLength: () => this.module.info.getCore().communicationMaxLength,\n\t\t\t\terrTooLong: communicationTooLong,\n\t\t\t\tcompleter: this.module.cmdLists.getInRoomChars({\n\t\t\t\t\tfilterMuted: true,\n\t\t\t\t\tsortOrder: [ 'awake', 'watch' ],\n\t\t\t\t}),\n\t\t\t\tformatText: true,\n\t\t\t}),\n\t\t\tvalue: this.helpme.bind(this),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'helpme',\n\t\t\tcategory: { 'basic': 15, 'helper': 110 },\n\t\t\tcmd: 'helpme',\n\t\t\tusage: l10n.l('helpme.usage', usageText),\n\t\t\tshortDesc: l10n.l('helpme.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('helpme.helpText', helpText),\n\t\t\texamples,\n\t\t\tsortOrder: 15,\n\t\t});\n\t}\n\n\thelpme(ctx, p) {\n\t\treturn ctx.char.call('helpme', { msg: p.cmdText == '\"' ? p.msg.replace(/\"$/, '') : p.msg });\n\t}\n}\n\nexport default Helpme;\n","import l10n from 'modapp-l10n';\n\nconst usageText = 'home';\nconst shortDesc = 'Teleport your character home';\nconst helpText =\n`<p>Teleport your character home.</p>\n<p>Alias: <code>gohome</code></p>`;\n\n/**\n * Home adds the home command that teleports the character home.\n */\nclass Home {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'cmd', 'help' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t\tthis.module.cmd.addCmd({\n\t\t\tkey: 'home',\n\t\t\tvalue: (ctx, p) => this.home(ctx.char),\n\t\t\talias: [ 'gohome' ],\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'home',\n\t\t\tcategory: 'basic',\n\t\t\tcmd: 'home',\n\t\t\talias: [ 'gohome' ],\n\t\t\tusage: l10n.l('home.usage', usageText),\n\t\t\tshortDesc: l10n.l('home.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('home.helpText', helpText),\n\t\t\tsortOrder: 40,\n\t\t});\n\t}\n\n\thome(char) {\n\t\treturn char.call('teleportHome');\n\t}\n}\n\nexport default Home;\n","import l10n from 'modapp-l10n';\nimport Err from 'classes/Err';\n\nconst usageText = 'join <span class=\"param\">Character</span>';\nconst shortDesc = 'Join a character who has summoned you';\nconst helpText =\n`<p>Join a character who has summoned you.</p>\n<p><code class=\"param\">Character</code> is the name of the character who sent the summons.</p>\n<p>Alias: <code>mjoin</code></p>`;\n\n/**\n * Join adds the join command.\n */\nclass Join {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'cmd',\n\t\t\t'cmdSteps',\n\t\t\t'help',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t\tthis.module.cmd.addCmd({\n\t\t\tkey: 'join',\n\t\t\tnext: [\n\t\t\t\tthis.module.cmdSteps.newAwakeCharStep({\n\t\t\t\t\terrRequired: step => new Err('join.charRequired', \"Who do you wish to join?\"),\n\t\t\t\t\tfilterMuted: true,\n\t\t\t\t\tsortOrder: [ 'watch' ],\n\t\t\t\t}),\n\t\t\t],\n\t\t\talias: [ 'mjoin' ],\n\t\t\tvalue: (ctx, p) => this.join(ctx.char, { charId: p.charId }),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'join',\n\t\t\tcategory: 'transport',\n\t\t\tcmd: 'join',\n\t\t\talias: [ 'mjoin' ],\n\t\t\tusage: l10n.l('join.usage', usageText),\n\t\t\tshortDesc: l10n.l('join.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('join.helpText', helpText),\n\t\t\tsortOrder: 110,\n\t\t});\n\t}\n\n\tjoin(char, params) {\n\t\treturn char.call('join', params);\n\t}\n}\n\nexport default Join;\n","import l10n from 'modapp-l10n';\nimport Err from 'classes/Err';\n\nconst usageText = 'lead <span class=\"param\">Character</span>';\nconst shortDesc = 'Have a character follow you wherever you go';\nconst helpText =\n`<p>Lead another character wherever you go. The other character must be in the same room.</p>\n<p><code class=\"param\">Character</code> is the name of the character to lead.</p>\n<p>Alias: <code>carry</code></p>`;\n\n/**\n * Lead adds the lead command.\n */\nclass Lead {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'cmd',\n\t\t\t'cmdSteps',\n\t\t\t'help',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t\tthis.module.cmd.addCmd({\n\t\t\tkey: 'lead',\n\t\t\tnext: [\n\t\t\t\tthis.module.cmdSteps.newInRoomAwakeCharStep({\n\t\t\t\t\terrRequired: step => new Err('lead.charRequired', \"Who do you wish to lead?\"),\n\t\t\t\t\tfilterMuted: true,\n\t\t\t\t\tsortOrder: [ 'watch' ],\n\t\t\t\t}),\n\t\t\t],\n\t\t\talias: [ 'carry' ],\n\t\t\tvalue: (ctx, p) => this.lead(ctx.char, { charId: p.charId }),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'lead',\n\t\t\tcategory: 'transport',\n\t\t\tcmd: 'lead',\n\t\t\talias: [ 'carry' ],\n\t\t\tusage: l10n.l('lead.usage', usageText),\n\t\t\tshortDesc: l10n.l('lead.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('lead.helpText', helpText),\n\t\t\tsortOrder: 120,\n\t\t});\n\t}\n\n\tlead(char, params) {\n\t\treturn char.call('lead', params);\n\t}\n}\n\nexport default Lead;\n","import l10n from 'modapp-l10n';\nimport TextStep from 'classes/TextStep';\nimport DelimStep from 'classes/DelimStep';\nimport ValueStep from 'classes/ValueStep';\nimport { descriptionTooLong } from 'utils/cmdErr';\n\nconst usageText = 'lfrp <span class=\"opt\">= <span class=\"param\">Description</span></span>';\nconst shortDesc = 'Look for roleplay';\nconst helpText =\n`<p>Set your character as looking for roleplay. Use the description for in character roleplay setup, out of character info on what type of roleplay you seek, or directions on where to find you.</p>\n<p>Use <code>stop lfrp</code> to stop looking for roleplay.</p>\n<p><code class=\"param\">Description</code> of the roleplay you are looking for. It may be formatted and span multiple paragraphs. If omitted, previous description will be used.</p>`;\nconst examples = [\n\t{ cmd: 'lfrp', desc: l10n.l('lfrp.lfrpDesc', \"Starting to look for roleplay\") },\n\t{ cmd: 'lfrp = Having a drink by the bar. ((`message` me for directions))', desc: l10n.l('lfrp.lfrpWithDescDesc', \"Starting to look for roleplay with new description\") },\n\t{ cmd: 'stop lfrp', desc: l10n.l('lfrp.stopLfrpDesc', \"Stop looking for roleplay\") },\n];\n\nconst txtSetAsLfrp = l10n.l('lfrp.setAsLookingForRoleplay', \"Set as looking for roleplay.\");\n\n/**\n * Lfrp adds the lfrp (looking for roleplay) command.\n */\nclass Lfrp {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'cmd',\n\t\t\t'cmdLists',\n\t\t\t'help',\n\t\t\t'info',\n\t\t\t'charLog',\n\t\t\t'player',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t\tthis.module.cmd.addCmd({\n\t\t\tkey: 'lfrp',\n\t\t\tnext: [\n\t\t\t\tnew DelimStep(\"=\", { next: new ValueStep('withDesc', true), errRequired: null }),\n\t\t\t\tnew TextStep('description', {\n\t\t\t\t\tspanLines: true,\n\t\t\t\t\tmaxLength: () => module.info.getCore().descriptionMaxLength,\n\t\t\t\t\terrTooLong: descriptionTooLong,\n\t\t\t\t\tcompleter: this.module.cmdLists.getAllChars({\n\t\t\t\t\t\tfilterMuted: true,\n\t\t\t\t\t\tsortOrder: [ 'watch', 'awake', 'room' ],\n\t\t\t\t\t}),\n\t\t\t\t\terrRequired: null,\n\t\t\t\t\tformatText: true,\n\t\t\t\t}),\n\t\t\t],\n\t\t\tvalue: (ctx, p) => this.lfrp(ctx.char, p.withDesc || p.description\n\t\t\t\t? { lfrpDesc: p.description || '' }\n\t\t\t\t: null,\n\t\t\t),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'lfrp',\n\t\t\tcategory: 'basic',\n\t\t\tcmd: 'lfrp',\n\t\t\tusage: l10n.l('lfrp.usage', usageText),\n\t\t\tshortDesc: l10n.l('lfrp.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('lfrp.helpText', helpText),\n\t\t\texamples,\n\t\t\tsortOrder: 110,\n\t\t});\n\t}\n\n\t/**\n\t * Set character as looking for group\n\t * @param {*} char Controlled character model.\n\t * @param {object} [opt] Optional parameters.\n\t * @param {string} [opt.lfrpDesc] Description of the roleplay you are looking for.\n\t * @returns {Promise}\n\t */\n\tlfrp(char, opt) {\n\t\t// First we set LFRP description, then we set rp state.\n\t\treturn Promise.resolve(typeof opt?.lfrpDesc == 'string'\n\t\t\t? this.module.player.getPlayer().call('setCharSettings', {\n\t\t\t\tcharId: char.id,\n\t\t\t\tpuppeteerId: char.puppeteer?.id || undefined,\n\t\t\t\tlfrpDesc: opt.lfrpDesc,\n\t\t\t})\n\t\t\t: null,\n\t\t)\n\t\t\t.then(() => char.call('set', { rp: 'lfrp' }))\n\t\t\t.then(() => {\n\t\t\t\tthis.module.charLog.logInfo(char, txtSetAsLfrp);\n\t\t\t});\n\t}\n}\n\nexport default Lfrp;\n","import DelimStep from 'classes/DelimStep';\nimport ListStep from 'classes/ListStep';\nimport IDStep from 'classes/IDStep';\nimport ItemList from 'classes/ItemList';\nimport Err from 'classes/Err';\n\n/**\n * ListArea adds command to show list of items belonging to an area.\n */\nclass ListArea {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'cmd',\n\t\t\t'cmdLists',\n\t\t\t'player',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t\tthis.areaAttr = new ItemList({\n\t\t\tcompare: (a, b) => (a.sortOrder - b.sortOrder) || a.key.localeCompare(b.key),\n\t\t});\n\n\t\tthis.module.cmd.addPrefixCmd('list', {\n\t\t\tkey: 'area',\n\t\t\tnext: [\n\t\t\t\tnew IDStep('areaId', {\n\t\t\t\t\tname: \"area ID\",\n\t\t\t\t\tlist: () => {\n\t\t\t\t\t\tlet c = this.module.player.getActiveChar();\n\t\t\t\t\t\treturn ((c && c.ownedAreas && c.ownedAreas.toArray()) || []).map(v => v.id);\n\t\t\t\t\t},\n\t\t\t\t\telse: new ListStep('areaId', this.module.cmdLists.getCharOwnedAreas(), {\n\t\t\t\t\t\tname: \"area\",\n\t\t\t\t\t}),\n\t\t\t\t}),\n\t\t\t\tnew DelimStep(\":\", { errRequired: null }),\n\t\t\t\tnew ListStep('attr', this.areaAttr, {\n\t\t\t\t\tname: \"area attribute\",\n\t\t\t\t\terrRequired: step => new Err('listArea.attributeRequired', \"What do you want to list for this area?\"),\n\t\t\t\t\ttoken: 'attr',\n\t\t\t\t}),\n\t\t\t],\n\t\t\tvalue: this._exec.bind(this),\n\t\t});\n\t}\n\n\taddAttribute(attr) {\n\t\tthis.areaAttr.addItem(Object.assign({}, attr));\n\t\treturn this;\n\t}\n\n\t_exec(ctx, p) {\n\t\treturn p.attr(ctx, p, this);\n\t}\n}\n\nexport default ListArea;\n","import { Elem, Txt, Html } from 'modapp-base-component';\nimport l10n from 'modapp-l10n';\nimport escapeHtml from 'utils/escapeHtml';\n\nconst usageText = 'list area <span class=\"param\">#AreaID<span class=\"comment\">/</span>Area</span> : locations';\nconst shortDesc = 'List all locations of an area';\nconst helpText =\n`<p>Get a list of all rooms and subareas belonging to an area.</p>`;\n\nconst txtRoom = l10n.l('listAreaLocations.room', \"Room\");\nconst txtSubarea = l10n.l('listAreaLocations.subarea', \"Subarea\");\nconst txtPrivateRoom = l10n.l('listAreaLocations.privateRoom', \"Private room\");\nconst txtPrivateSubarea = l10n.l('listAreaLocations.privateSubarea', \"Private subarea\");\n\nfunction getTypeName(loc) {\n\treturn loc.type == 'area'\n\t\t? loc.private\n\t\t\t? txtPrivateSubarea\n\t\t\t: txtSubarea\n\t\t: loc.private\n\t\t\t? txtPrivateRoom\n\t\t\t: txtRoom;\n}\n\nconst typeOrder = {\n\troom: 0,\n\tinstanceRoom: 0,\n\tarea: 1,\n};\n\n/**\n * ListAreaLocations adds command to list all locations of an area.\n */\nclass ListAreaLocations {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'api',\n\t\t\t'cmd',\n\t\t\t'charLog',\n\t\t\t'help',\n\t\t\t'listArea',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.listArea.addAttribute({\n\t\t\tkey: 'locations',\n\t\t\talias: [ 'location' ],\n\t\t\tvalue: (ctx, p) => this.listLocations(ctx.char, p.areaId),\n\t\t\tsortOrder: 10,\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'listAreaLocations',\n\t\t\tcategory: 'buildAreas',\n\t\t\tcmd: 'list area locations',\n\t\t\tusage: l10n.l('listAreaLocations.usage', usageText),\n\t\t\tshortDesc: l10n.l('listAreaLocations.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('listAreaLocations.helpText', helpText),\n\t\t\tsortOrder: 60,\n\t\t});\n\t}\n\n\tlistLocations(char, areaId) {\n\t\tlet apiModule = this.module.api;\n\t\treturn Promise.all([\n\t\t\tapiModule.get(`core.area.${areaId}.children`),\n\t\t\tapiModule.get(`core.area.${areaId}.children.private`),\n\t\t]).then(result => {\n\t\t\tlet allChildren = Object.assign({}, result[0]?.props, result[1]?.props);\n\t\t\tlet locations = Object.keys(allChildren).map(k => allChildren[k].toJSON?.() || {})\n\t\t\t\t.filter(m => m.id)\n\t\t\t\t.sort((a, b) => (typeOrder[a.type] - typeOrder[b.type]) || ((a.private || 0) - (b.private || 0)) || a.name.localeCompare(b.name))\n\t\t\t\t.map(m => '<tr><td><code>#' + escapeHtml(m.id) + '</code></td><td>' + escapeHtml(m.name) + '</td><td>' + escapeHtml(l10n.t(getTypeName(m))) + '</td></tr>');\n\n\t\t\tif (locations.length) {\n\t\t\t\tthis.module.charLog.logComponent(char, 'listAreaLocations', new Elem(n => n.elem('div', { className: 'listareas charlog--pad' }, [\n\t\t\t\t\tn.component(new Txt(l10n.l('listAreaLocations.areaLocations', \"Area locations\"), { tagName: 'h4', className: 'charlog--pad' })),\n\t\t\t\t\tn.elem('div', { className: 'charlog--code' }, [\n\t\t\t\t\t\tn.elem('table', { className: 'tbl-small tbl-nomargin' }, [\n\t\t\t\t\t\t\tn.component(new Html('<tr><th class=\"charlog--strong\">' +\n\t\t\t\t\t\t\t\tescapeHtml(l10n.t('listAreaLocations.locationId', \"Location ID\")) +\n\t\t\t\t\t\t\t\t'</th><th class=\"charlog--strong\">' +\n\t\t\t\t\t\t\t\tescapeHtml(l10n.t('listAreaLocations.name', \"Name\")) +\n\t\t\t\t\t\t\t\t'</th><th class=\"charlog--strong\">' +\n\t\t\t\t\t\t\t\tescapeHtml(l10n.t('listAreaLocations.type', \"Type\")) +\n\t\t\t\t\t\t\t\t'</th></tr>', { tagName: 'thead' },\n\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t\tn.component(new Html(locations.join(''), { tagName: 'tbody' })),\n\t\t\t\t\t\t]),\n\t\t\t\t\t]),\n\t\t\t\t])));\n\t\t\t} else {\n\t\t\t\tthis.module.charLog.logInfo(char, l10n.l('listAreaLocations.noLocations', \"The area has no locations.\"));\n\t\t\t}\n\t\t});\n\t}\n}\n\nexport default ListAreaLocations;\n","import { Elem, Txt, Html } from 'modapp-base-component';\nimport l10n from 'modapp-l10n';\nimport escapeHtml from 'utils/escapeHtml';\n\nconst usageText = 'list areas';\nconst shortDesc = 'List all areas your character owns';\nconst helpText =\n`<p>Get a list of all areas owned by the character.</p>`;\n\n/**\n * ListAreas adds command to list all area destinations.\n */\nclass ListAreas {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'cmd', 'charLog', 'help' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.cmd.addPrefixCmd('list', {\n\t\t\tkey: 'areas',\n\t\t\tvalue: (ctx, p) => this.listAreas(ctx.char),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'listAreas',\n\t\t\tcategory: 'buildAreas',\n\t\t\tcmd: 'list areas',\n\t\t\talias: [ 'list area' ],\n\t\t\tusage: l10n.l('listAreas.usage', usageText),\n\t\t\tshortDesc: l10n.l('listAreas.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('listAreas.helpText', helpText),\n\t\t\tsortOrder: 50,\n\t\t});\n\t}\n\n\tlistAreas(char) {\n\t\tif (!this.module.charLog.validateNotPuppet(char)) {\n\t\t\treturn;\n\t\t}\n\t\tlet owned = [];\n\t\tfor (let m of char.ownedAreas) {\n\t\t\towned.push('<tr><td><code>#' + escapeHtml(m.id) + '</code></td><td>' + escapeHtml(m.name) + '</td></tr>');\n\t\t}\n\t\tif (owned.length) {\n\t\t\tthis.module.charLog.logComponent(char, 'listAreas', new Elem(n => n.elem('div', { className: 'listareas charlog--pad' }, [\n\t\t\t\tn.component(new Txt(l10n.l('listAreas.ownedAreas', \"Owned areas\"), { tagName: 'h4', className: 'charlog--pad' })),\n\t\t\t\tn.elem('div', { className: 'charlog--code' }, [\n\t\t\t\t\tn.elem('table', { className: 'tbl-small tbl-nomargin' }, [\n\t\t\t\t\t\tn.component(new Html('<tr><th class=\"charlog--strong\">' +\n\t\t\t\t\t\t\tescapeHtml(l10n.t('listAreas.area', \"Area ID\")) +\n\t\t\t\t\t\t\t'</th><th class=\"charlog--strong\">' +\n\t\t\t\t\t\t\tescapeHtml(l10n.t('listAreas.id', \"Area\")) +\n\t\t\t\t\t\t\t'</th></tr>', { tagName: 'thead' },\n\t\t\t\t\t\t)),\n\t\t\t\t\t\tn.component(new Html(owned.join(''), { tagName: 'tbody' })),\n\t\t\t\t\t]),\n\t\t\t\t]),\n\t\t\t])));\n\t\t} else {\n\t\t\tthis.module.charLog.logInfo(char, l10n.l('listAreas.noAreas', \"You own no areas yet.\"));\n\t\t}\n\t}\n}\n\nexport default ListAreas;\n","import { Elem, Txt, Html } from 'modapp-base-component';\nimport l10n from 'modapp-l10n';\nimport escapeHtml from 'utils/escapeHtml';\n\nconst usageText = 'list exits';\nconst shortDesc = 'List all room exits';\nconst helpText =\n`<p>Get a list of room exits.</p>\n<p>Alias: <code>list exit</code></p>`;\n\n/**\n * ListExits adds command to list all exit destinations.\n */\nclass ListExits {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'cmd', 'charLog', 'help' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.cmd.addPrefixCmd('list', {\n\t\t\tkey: 'exits',\n\t\t\talias: [ 'exit' ],\n\t\t\tvalue: (ctx, p) => this.listExits(ctx.char),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'listExits',\n\t\t\tcategory: 'transport',\n\t\t\tcmd: 'list exits',\n\t\t\talias: [ 'list exit' ],\n\t\t\tusage: l10n.l('listExits.usage', usageText),\n\t\t\tshortDesc: l10n.l('listExits.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('listExits.helpText', helpText),\n\t\t\tsortOrder: 15,\n\t\t});\n\t}\n\n\tlistExits(char, attr) {\n\t\tlet list = [];\n\t\tfor (let m of char.inRoom.exits) {\n\t\t\tlist.push('<tr><td><code>go ' + escapeHtml(m.keys[0]) + '</code></td><td>' + escapeHtml(m.name) + '</td></tr>');\n\t\t}\n\t\tif (list.length) {\n\t\t\tthis.module.charLog.logComponent(char, 'listExits', new Elem(n => n.elem('div', { className: 'listexits charlog--pad' }, [\n\t\t\t\tn.component(new Txt(l10n.l('listExits.roomExits', \"Room exits\"), { tagName: 'h4', className: 'charlog--pad' })),\n\t\t\t\tn.elem('div', { className: 'charlog--code' }, [\n\t\t\t\t\tn.elem('table', { className: 'tbl-small tbl-nomargin' }, [\n\t\t\t\t\t\tn.component(new Html(list.join(''), { tagName: 'tbody' })),\n\t\t\t\t\t]),\n\t\t\t\t]),\n\t\t\t])));\n\t\t} else {\n\t\t\tthis.module.charLog.logInfo(char, l10n.l('listExits.noExits', \"This room has no exits.\"));\n\t\t}\n\t}\n}\n\nexport default ListExits;\n","import { Elem, Txt, Html } from 'modapp-base-component';\nimport escapeHtml from 'utils/escapeHtml';\nimport l10n from 'modapp-l10n';\n\nconst usageText = \"list focused\";\nconst shortDesc = \"List characters focused by the currently controlled character\";\nconst helpText =\n`<p>Get a list of your character's focus targets.</p>\n<p>Alias: <code>list focus</code></p>`;\n\n/**\n * ListFocused adds a command to list current focus targets.\n */\nclass ListFocused {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'cmd',\n\t\t\t'charLog',\n\t\t\t'charFocus',\n\t\t\t'help',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.cmd.addPrefixCmd('list', {\n\t\t\tkey: 'focused',\n\t\t\talias: [ 'focus' ],\n\t\t\tvalue: (ctx, p) => this.listFocused(ctx.char),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'listFocused',\n\t\t\tcategory: 'friends',\n\t\t\tcmd: 'list focused',\n\t\t\talias: [ 'list focus' ],\n\t\t\tusage: l10n.l('listFocused.usage', usageText),\n\t\t\tshortDesc: l10n.l('listFocused.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('listFocused.helpText', helpText),\n\t\t\tsortOrder: 35,\n\t\t});\n\t}\n\n\tlistFocused(ctrl) {\n\t\tlet ctrlId = ctrl.id;\n\t\tlet focusList = this.module.charFocus.getFocusCharColors(ctrlId);\n\n\t\tif (!focusList?.length){\n\t\t\tthis.module.charLog.logInfo(ctrl, l10n.l('listFocused.noFocuses', \"{charName} has no focused characters.\", { charName: ctrl.name }));\n\t\t\treturn;\n\t\t}\n\n\t\tlet outputList = focusList.filter(o => o.char).map(o => (`<tr>\n\t\t\t<td>${escapeHtml(o.char.name + ' ' + o.char.surname)}</td>\n\t\t\t<td>${o.hex ? '<i style=\"color:' + o.hex + '\" class=\"fa fa-circle\" aria-hidden></i>' : ''}</td><td>${escapeHtml(o.color)}</div></td></tr>`\n\t\t));\n\n\t\tthis.module.charLog.logComponent(ctrl, 'listFocused', new Elem(n => n.elem('div', { className: 'listfocused charlog--pad' }, [\n\t\t\tn.component(new Txt(l10n.l('listFocused.charFocusColors', \"Character focus colors\"), { tagName: 'h4', className: 'charlog--pad' })),\n\t\t\tn.elem('div', { className: 'charlog--code' }, [\n\t\t\t\tn.elem('table', { className: 'tbl-small tbl-nomargin' }, [\n\t\t\t\t\tn.component(new Html(outputList.join(''), { tagName: 'tbody' })),\n\t\t\t\t]),\n\t\t\t]),\n\t\t])));\n\t}\n}\n\nexport default ListFocused;\n","import { Elem, Txt, Html } from 'modapp-base-component';\nimport l10n from 'modapp-l10n';\nimport escapeHtml from 'utils/escapeHtml';\n\nconst usageText = 'list profiles';\nconst shortDesc = \"List your character's profiles\";\nconst helpText =\n`<p>Get a list of your character's profiles.</p>\n<p>Alias: <code>list profile</code></p>`;\n\n/**\n * ListProfiles adds command to list all character profiles.\n */\nclass ListProfiles {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'cmd',\n\t\t\t'charLog',\n\t\t\t'help',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.cmd.addPrefixCmd('list', {\n\t\t\tkey: 'profiles',\n\t\t\talias: [ 'profile' ],\n\t\t\tvalue: (ctx, p) => this.listProfiles(ctx.char),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'listProfiles',\n\t\t\tcategory: 'profile',\n\t\t\tcmd: 'list profiles',\n\t\t\talias: [ 'list profile' ],\n\t\t\tusage: l10n.l('listProfiles.usage', usageText),\n\t\t\tshortDesc: l10n.l('listProfiles.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('listProfiles.helpText', helpText),\n\t\t\tsortOrder: 120,\n\t\t});\n\t}\n\n\tlistProfiles(char, attr) {\n\t\tlet list = [];\n\t\tfor (let m of char.profiles) {\n\t\t\tlist.push('<tr><td><code>profile ' + escapeHtml(m.key) + '</code></td><td>' + escapeHtml(m.name) + '</td></tr>');\n\t\t}\n\t\tif (list.length) {\n\t\t\tthis.module.charLog.logComponent(char, 'listProfiles', new Elem(n => n.elem('div', { className: 'listprofiles charlog--pad' }, [\n\t\t\t\tn.component(new Txt(l10n.l('listProfiles.charProfiles', \"Character profiles\"), { tagName: 'h4', className: 'charlog--pad' })),\n\t\t\t\tn.elem('div', { className: 'charlog--code' }, [\n\t\t\t\t\tn.elem('table', { className: 'tbl-small tbl-nomargin' }, [\n\t\t\t\t\t\tn.component(new Html(list.join(''), { tagName: 'tbody' })),\n\t\t\t\t\t]),\n\t\t\t\t]),\n\t\t\t])));\n\t\t} else {\n\t\t\tthis.module.charLog.logInfo(char, l10n.l('listProfiles.noProfiles', \"{charName} has no profiles.\", { charName: char.name }));\n\t\t}\n\t}\n}\n\nexport default ListProfiles;\n","import { Elem, Txt, Html } from 'modapp-base-component';\nimport l10n from 'modapp-l10n';\nimport Err from 'classes/Err';\nimport escapeHtml from 'utils/escapeHtml';\n\nconst usageText = 'list roomprofiles';\nconst shortDesc = \"List the room's profiles\";\nconst helpText =\n`<p>Get a list of the room's profiles.</p>\n<p>Alias: <code>list roomprofile</code></p>`;\n\nconst errAccessDenied = new Err('listProfiles.accessToProfilesDenied', \"You must own the room to list room profiles.\");\n\n/**\n * ListRoomProfiles adds command to list all profiles of current room.\n */\nclass ListRoomProfiles {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'api',\n\t\t\t'cmd',\n\t\t\t'charLog',\n\t\t\t'help',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.cmd.addPrefixCmd('list', {\n\t\t\tkey: 'roomprofiles',\n\t\t\talias: [ 'roomprofile' ],\n\t\t\tvalue: (ctx, p) => this.listRoomProfiles(ctx.char),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'listRoomProfiles',\n\t\t\tcategory: 'buildRooms',\n\t\t\tcmd: 'list roomprofiles',\n\t\t\talias: [ 'list roomprofile' ],\n\t\t\tusage: l10n.l('listRoomProfiles.usage', usageText),\n\t\t\tshortDesc: l10n.l('listRoomProfiles.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('listRoomProfiles.helpText', helpText),\n\t\t\tsortOrder: 120,\n\t\t});\n\t}\n\n\tlistRoomProfiles(char, attr) {\n\t\tlet room = char.inRoom;\n\t\treturn this.module.api.get('core.room.' + room.id + '.profiles').then(profiles => {\n\t\t\tlet list = [];\n\t\t\tfor (let m of profiles) {\n\t\t\t\tlist.push('<tr><td><code>roomprofile ' + escapeHtml(m.key) + '</code></td><td>' + escapeHtml(m.name) + '</td></tr>');\n\t\t\t}\n\t\t\tif (list.length) {\n\t\t\t\tthis.module.charLog.logComponent(char, 'listRoomProfiles', new Elem(n => n.elem('div', { className: 'listprofiles charlog--pad' }, [\n\t\t\t\t\tn.component(new Txt(l10n.l('listRoomProfiles.roomProfiles', \"Room profiles\"), { tagName: 'h4', className: 'charlog--pad' })),\n\t\t\t\t\tn.elem('div', { className: 'charlog--code' }, [\n\t\t\t\t\t\tn.elem('table', { className: 'tbl-small tbl-nomargin' }, [\n\t\t\t\t\t\t\tn.component(new Html(list.join(''), { tagName: 'tbody' })),\n\t\t\t\t\t\t]),\n\t\t\t\t\t]),\n\t\t\t\t])));\n\t\t\t} else {\n\t\t\t\tthis.module.charLog.logInfo(char, l10n.l('listRoomProfiles.noRoomProfiles', \"{roomName} has no room profiles.\", { roomName: room.name }));\n\t\t\t}\n\t\t}).catch(err => {\n\t\t\tif (err.code == 'system.accessDenied') {\n\t\t\t\terr = errAccessDenied;\n\t\t\t}\n\t\t\tthis.module.charLog.logError(char, err);\n\t\t});\n\t}\n}\n\nexport default ListRoomProfiles;\n","import { Elem, Txt, Html } from 'modapp-base-component';\nimport l10n from 'modapp-l10n';\nimport Err from 'classes/Err';\nimport escapeHtml from 'utils/escapeHtml';\nimport formatDateTime from 'utils/formatDateTime';\nimport './listRoomScripts.scss';\n\nconst usageText = 'list roomscripts';\nconst shortDesc = \"List the room's scripts\";\nconst helpText =\n`<p>Get a list of the room's scripts.</p>\n<p>Alias: <code>list roomscript</code></p>`;\n\nconst errAccessDenied = new Err('listRoomScripts.accessToScriptsDenied', \"You must own the room to list room scripts.\");\n\n/**\n * ListRoomScripts adds command to list all scripts of current room.\n */\nclass ListRoomScripts {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'api',\n\t\t\t'cmd',\n\t\t\t'charLog',\n\t\t\t'help',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.cmd.addPrefixCmd('list', {\n\t\t\tkey: 'roomscripts',\n\t\t\talias: [ 'roomscript' ],\n\t\t\tvalue: (ctx, p) => this.listRoomScripts(ctx.char),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'listRoomScripts',\n\t\t\tcategory: 'buildRooms',\n\t\t\tcmd: 'list roomscripts',\n\t\t\talias: [ 'list roomscript' ],\n\t\t\tusage: l10n.l('listRoomScripts.usage', usageText),\n\t\t\tshortDesc: l10n.l('listRoomScripts.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('listRoomScripts.helpText', helpText),\n\t\t\tsortOrder: 220,\n\t\t});\n\t}\n\n\tlistRoomScripts(char, attr) {\n\t\tlet room = char.inRoom;\n\t\treturn this.module.api.get('core.room.' + room.id + '.scripts').then(scripts => {\n\t\t\tlet rows = [];\n\t\t\tfor (let m of scripts) {\n\t\t\t\trows.push('<tr>' +\n\t\t\t\t\t'<td><code>#' + escapeHtml(m.id) + '</code></td>' +\n\t\t\t\t\t'<td>' + escapeHtml(m.key) + '</td>' +\n\t\t\t\t\t'<td>' + escapeHtml(formatDateTime(new Date(m.updated))) + '</td>' +\n\t\t\t\t\t'<td><i class=\"fa fa-circle listroomscripts-' + (m.active ? 'active' : 'inactive') + '\" aria-hidden></i></td>' +\n\t\t\t\t\t'</tr>',\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (rows.length) {\n\t\t\t\tthis.module.charLog.logComponent(char, 'listRoomScripts', new Elem(n => n.elem('div', { className: 'listscripts charlog--pad' }, [\n\t\t\t\t\tn.component(new Txt(l10n.l('listRoomScripts.roomScripts', \"Room scripts\"), { tagName: 'h4', className: 'charlog--pad' })),\n\t\t\t\t\tn.elem('div', { className: 'charlog--code' }, [\n\t\t\t\t\t\tn.elem('table', { className: 'tbl-small tbl-nomargin' }, [\n\t\t\t\t\t\t\tn.component(new Html('<tr><th class=\"charlog--strong\">' +\n\t\t\t\t\t\t\t\tescapeHtml(l10n.t('listRoomScripts.scriptId', \"Script ID\")) +\n\t\t\t\t\t\t\t\t'</th><th class=\"charlog--strong\">' +\n\t\t\t\t\t\t\t\tescapeHtml(l10n.t('listRoomScripts.key', \"Key\")) +\n\t\t\t\t\t\t\t\t'</th><th class=\"charlog--strong\">' +\n\t\t\t\t\t\t\t\tescapeHtml(l10n.t('listRoomScripts.updated', \"Updated\")) +\n\t\t\t\t\t\t\t\t'</th><th class=\"charlog--strong\">' +\n\t\t\t\t\t\t\t\tescapeHtml(l10n.t('listRoomScripts.active', \"Active\")) +\n\t\t\t\t\t\t\t\t'</th></tr>', { tagName: 'thead' },\n\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t\tn.component(new Html(rows.join(''), { tagName: 'tbody' })),\n\t\t\t\t\t\t]),\n\t\t\t\t\t]),\n\t\t\t\t])));\n\t\t\t} else {\n\t\t\t\tthis.module.charLog.logInfo(char, l10n.l('listRoomScripts.noRoomScripts', \"{roomName} has no room scripts.\", { roomName: room.name }));\n\t\t\t}\n\t\t}).catch(err => {\n\t\t\tif (err.code == 'system.accessDenied') {\n\t\t\t\terr = errAccessDenied;\n\t\t\t}\n\t\t\tthis.module.charLog.logError(char, err);\n\t\t});\n\t}\n}\n\nexport default ListRoomScripts;\n","import { Elem, Txt, Html } from 'modapp-base-component';\nimport l10n from 'modapp-l10n';\nimport escapeHtml from 'utils/escapeHtml';\n\nconst usageText = 'list rooms';\nconst shortDesc = 'List all rooms your character owns';\nconst helpText =\n`<p>Get a list of all rooms owned by the character.</p>\n<p>Alias: <code>list room</code></p>`;\n\n/**\n * ListRooms adds command to list all room destinations.\n */\nclass ListRooms {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'cmd', 'charLog', 'help' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.cmd.addPrefixCmd('list', {\n\t\t\tkey: 'rooms',\n\t\t\talias: [ 'room' ],\n\t\t\tvalue: (ctx, p) => this.listRooms(ctx.char),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'listRooms',\n\t\t\tcategory: 'buildRooms',\n\t\t\tcmd: 'list rooms',\n\t\t\talias: [ 'list room' ],\n\t\t\tusage: l10n.l('listRooms.usage', usageText),\n\t\t\tshortDesc: l10n.l('listRooms.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('listRooms.helpText', helpText),\n\t\t\tsortOrder: 50,\n\t\t});\n\t}\n\n\tlistRooms(char) {\n\t\tif (!this.module.charLog.validateNotPuppet(char)) {\n\t\t\treturn;\n\t\t}\n\t\tlet owned = [];\n\t\tfor (let m of char.ownedRooms) {\n\t\t\towned.push('<tr><td><code>#' + escapeHtml(m.id) + '</code></td><td>' + escapeHtml(m.name) + '</td></tr>');\n\t\t}\n\t\tif (owned.length) {\n\t\t\tthis.module.charLog.logComponent(char, 'listRooms', new Elem(n => n.elem('div', { className: 'listrooms charlog--pad' }, [\n\t\t\t\tn.component(new Txt(l10n.l('listRooms.ownedRooms', \"Owned rooms\"), { tagName: 'h4', className: 'charlog--pad' })),\n\t\t\t\tn.elem('div', { className: 'charlog--code' }, [\n\t\t\t\t\tn.elem('table', { className: 'tbl-small tbl-nomargin' }, [\n\t\t\t\t\t\tn.component(new Html('<tr><th class=\"charlog--strong\">' +\n\t\t\t\t\t\t\tescapeHtml(l10n.t('listRooms.room', \"Room ID\")) +\n\t\t\t\t\t\t\t'</th><th class=\"charlog--strong\">' +\n\t\t\t\t\t\t\tescapeHtml(l10n.t('listRooms.id', \"Room\")) +\n\t\t\t\t\t\t\t'</th></tr>', { tagName: 'thead' },\n\t\t\t\t\t\t)),\n\t\t\t\t\t\tn.component(new Html(owned.join(''), { tagName: 'tbody' })),\n\t\t\t\t\t]),\n\t\t\t\t]),\n\t\t\t])));\n\t\t} else {\n\t\t\tthis.module.charLog.logInfo(char, l10n.l('listRooms.noRooms', \"You own no rooms yet.\"));\n\t\t}\n\t}\n}\n\nexport default ListRooms;\n","import { Elem, Txt } from 'modapp-base-component';\nimport l10n from 'modapp-l10n';\nimport escapeHtml from 'utils/escapeHtml';\n\nconst usageText = 'list tags';\nconst shortDesc = 'List all pre-defined tags';\nconst helpText =\n`<p>List all pre-defined tags.</p>\n<p>Alias: <code>list tag</code></p>`;\n\n/**\n * ListTags adds command to list all global tags.\n */\nclass ListTags {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'cmd', 'charLog', 'help', 'tags', 'player' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.cmd.addPrefixCmd('list', {\n\t\t\tkey: 'tags',\n\t\t\talias: [ 'tag' ],\n\t\t\tvalue: (ctx, p) => this.listTags(ctx.char),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'listTags',\n\t\t\tcategory: 'tags',\n\t\t\tcmd: 'list tags',\n\t\t\talias: [ 'list tag' ],\n\t\t\tusage: l10n.l('listTags.usage', usageText),\n\t\t\tshortDesc: l10n.l('listTags.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('listTags.helpText', helpText),\n\t\t\tsortOrder: 20,\n\t\t});\n\t}\n\n\tlistTags(char) {\n\t\tlet sections = [];\n\t\tfor (let g of this.module.tags.getGroupsCollection()) {\n\t\t\tthis._addSection(g, sections);\n\t\t}\n\t\tlet skipHeader = !sections.length;\n\t\tthis._addSection(\n\t\t\t{ name: l10n.t('listTags.other', \"Other\") },\n\t\t\tsections,\n\t\t\tskipHeader,\n\t\t);\n\t\tthis._addSection(\n\t\t\t{ name: l10n.t('listTags.titles', \"Titles\") },\n\t\t\tsections,\n\t\t\tskipHeader,\n\t\t\ttrue,\n\t\t);\n\n\t\tif (sections.length) {\n\t\t\tthis.module.charLog.logComponent(char, 'listTags', new Elem(n => n.elem('div', { className: 'listtags charlog--pad' }, [\n\t\t\t\tn.component(new Txt(l10n.l('listTags.tags', \"Tags\"), { tagName: 'h4', className: 'charlog--pad' })),\n\t\t\t\tn.elem('div', { className: 'charlog--code' }, [\n\t\t\t\t\tn.html('<table class=\"tbl-small' + (skipHeader ? ' tbl-nomargin' : '') + '\"><tbody>' + sections.join('') + '</tbody></table>'),\n\t\t\t\t]),\n\t\t\t])));\n\t\t} else {\n\t\t\tthis.module.charLog.logInfo(char, l10n.l('listTags.noTags', \"There are no tags defined.\"));\n\t\t}\n\t}\n\n\t_addSection(group, sections, skipHeader, hasRole) {\n\t\thasRole = !!hasRole;\n\t\tlet mod = this.module.tags;\n\t\tlet groups = mod.getGroups().props;\n\t\tlet key = group.key;\n\t\tlet list = [];\n\t\tfor (let m of mod.getTagsCollection()) {\n\t\t\tif (key ? m.group == key : !m.group || !groups[m.group]) {\n\t\t\t\tlet isRoleTag = !!(m.role || m.idRole);\n\t\t\t\tif (isRoleTag == hasRole) {\n\t\t\t\t\tlist.push('<tr><td><code class=\"common--nowrap\">' + (isRoleTag ? '<em>' + escapeHtml(m.key) + '</em>' : escapeHtml(m.key)) + '</code></td><td>' + escapeHtml(m.desc) + '</td></tr>');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (list.length) {\n\t\t\tsections.push(\n\t\t\t\t(skipHeader ? '' : '<tr class=\"tbl-hr tbl-header' + (sections.length ? ' tbl-padtop' : '') + '\"><td colspan=\"2\">' + escapeHtml(group.name) + '</td></tr>') +\n\t\t\t\tlist.join(''),\n\t\t\t);\n\t\t}\n\t}\n}\n\nexport default ListTags;\n","import { Elem, Txt, Html } from 'modapp-base-component';\nimport l10n from 'modapp-l10n';\nimport escapeHtml from 'utils/escapeHtml';\n\nconst usageText = 'list teleports';\nconst shortDesc = 'List available teleport destinations';\nconst helpText =\n`<p>Get a list of available teleport destinations.</p>\n<p>Alias: <code>list t</code>, <code>list tp</code>, <code>list teleport</code></p>`;\n\n/**\n * ListTeleports adds command to list all teleport destinations.\n */\nclass ListTeleports {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'cmd',\n\t\t\t'charLog',\n\t\t\t'help',\n\t\t\t'globalTeleports',\n\t\t\t'teleportSettings',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.cmd.addPrefixCmd('list', {\n\t\t\tkey: 'teleports',\n\t\t\talias: [ 't', 'tp', 'teleport' ],\n\t\t\tvalue: (ctx, p) => this.listTeleports(ctx.char),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'listTeleports',\n\t\t\tcategory: 'transport',\n\t\t\tcmd: 'list teleports',\n\t\t\talias: [ 'list t', 'list tp', 'list teleport' ],\n\t\t\tusage: l10n.l('listTeleports.usage', usageText),\n\t\t\tshortDesc: l10n.l('listTeleports.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('listTeleports.helpText', helpText),\n\t\t\tsortOrder: 210,\n\t\t});\n\t}\n\n\tlistTeleports(char) {\n\t\treturn this.module.teleportSettings.getSettingsPromise().then(teleportSettings => {\n\t\t\tlet list = [];\n\t\t\tlet owned = [];\n\t\t\tfor (let m of (this.module.globalTeleports.getGlobalTeleports() || [])) {\n\t\t\t\tlist.push('<tr><td><code>t ' + escapeHtml(m.key) + '</code></td><td class=\"charlog--strong\">' + escapeHtml(m.room.name) + '.</td></tr>');\n\t\t\t}\n\t\t\tfor (let m of char.nodes) {\n\t\t\t\tlist.push('<tr><td><code>t ' + escapeHtml(m.key) + '</code></td><td>' + escapeHtml(m.room.name) + '</td></tr>');\n\t\t\t}\n\t\t\tif (teleportSettings.showOwnRoomsInTeleports && !char.puppeteer) {\n\t\t\t\tfor (let m of char.ownedRooms) {\n\t\t\t\t\towned.push('<tr><td><code>t #' + escapeHtml(m.id) + '</code></td><td>' + escapeHtml(m.name) + '</td></tr>');\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (list.length || owned.length) {\n\t\t\t\tthis.module.charLog.logComponent(char, 'listTeleports', new Elem(n => {\n\t\t\t\t\tlet children = [];\n\t\t\t\t\tif (list.length) {\n\t\t\t\t\t\tchildren.push(n.component(new Txt(l10n.l('listTeleports.teleportDestinations', \"Teleport destinations\"), { tagName: 'h4', className: 'charlog--pad' })));\n\t\t\t\t\t\tchildren.push(n.elem('div', { className: 'charlog--code' }, [\n\t\t\t\t\t\t\tn.elem('table', { className: 'tbl-small tbl-nomargin' }, [\n\t\t\t\t\t\t\t\tn.component(new Html(list.join(''), { tagName: 'tbody' })),\n\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t]));\n\t\t\t\t\t};\n\t\t\t\t\tif (owned.length) {\n\t\t\t\t\t\tchildren.push(n.component(new Txt(l10n.l('listTeleports.ownedRooms', \"Owned rooms\"), { tagName: 'h4', className: 'charlog--pad' })));\n\t\t\t\t\t\tchildren.push(n.elem('div', { className: 'charlog--code' }, [\n\t\t\t\t\t\t\tn.elem('table', { className: 'tbl-small tbl-nomargin' }, [\n\t\t\t\t\t\t\t\tn.component(new Html(owned.join(''), { tagName: 'tbody' })),\n\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t]));\n\t\t\t\t\t}\n\t\t\t\t\treturn n.elem('div', { className: 'listteleports charlog--pad' }, children);\n\t\t\t\t}));\n\t\t\t} else {\n\t\t\t\tthis.module.charLog.logInfo(char, l10n.l('listTeleports.noTeleports', \"There are no teleport destinations.\"));\n\t\t\t}\n\t\t});\n\t}\n}\n\nexport default ListTeleports;\n","import l10n from 'modapp-l10n';\nimport Err from 'classes/Err';\n\nconst usageText = 'look <span class=\"param\">Character</span>';\nconst shortDesc = 'Look at a character in the room';\nconst helpText =\n`<p>Look at a character in the room.</p>\n<p><code class=\"param\">Character</code> is the name of the character to look at.</p>\n<p>Alias: <code>l</code>, <code>lookat</code></p>`;\n\n/**\n * Look adds the look command.\n */\nclass Look {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'cmd',\n\t\t\t'cmdSteps',\n\t\t\t'help',\n\t\t\t'charPages',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t\tthis.module.cmd.addCmd({\n\t\t\tkey: 'look',\n\t\t\tnext: this.module.cmdSteps.newInRoomCharStep({\n\t\t\t\terrRequired: () => new Err('look.required', 'Who do you want to look at?'),\n\t\t\t\tfilterMuted: true,\n\t\t\t\tsortOrder: [ 'awake', 'watch' ],\n\t\t\t}),\n\t\t\talias: [ 'l', 'lookat' ],\n\t\t\tvalue: this.look.bind(this),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'look',\n\t\t\tcategory: 'basic',\n\t\t\tcmd: 'look',\n\t\t\talias: [ 'l', 'lookat' ],\n\t\t\tusage: l10n.l('look.usage', usageText),\n\t\t\tshortDesc: l10n.l('look.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('look.helpText', helpText),\n\t\t\tsortOrder: 20,\n\t\t});\n\t}\n\n\tlook(ctx, p) {\n\t\treturn ctx.char.call('look', { charId: p.charId }).then(() => {\n\t\t\tthis.module.charPages.openPanel();\n\t\t});\n\t}\n}\n\nexport default Look;\n","import { Elem, Txt } from 'modapp-base-component';\nimport l10n from 'modapp-l10n';\nimport FAIcon from 'components/FAIcon';\nimport TextStep from 'classes/TextStep';\nimport DelimStep from 'classes/DelimStep';\nimport MultiDelimStep from 'classes/MultiDelimStep';\nimport ValueStep from 'classes/ValueStep';\nimport Err from 'classes/Err';\nimport { communicationTooLong } from 'utils/cmdErr';\n\nconst usageText = 'mail <span class=\"param\">Character</span> =<span class=\"opt\">></span><span class=\"opt\">:</span> <span class=\"param\">Message</span>';\nconst shortDesc = 'Send a mail message to a character, awake or asleep';\nconst helpText =\n`<p>Send a mail message to a character, awake or asleep. Mail can be read by the character's player even when the character is asleep.<br>\nIf the message starts with <code>></code> (greater than), the message will be marked as out of character (OOC).<br>\nIf the message starts with <code>:</code> (colon), the message will be treated in the same way as a <code>pose</code> action rather than something being texted.</p>\n<p><code class=\"param\">Character</code> is the name of the character to send a mail to.</p>\n<p><code class=\"param\">Message</code> is the mail message. It may be formatted and span multiple paragraphs.</p>`;\n\n/**\n * Mail adds the message command.\n */\nclass Mail {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'cmd', 'cmdLists', 'cmdSteps', 'help', 'api', 'charLog', 'confirm', 'info' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tlet charListOpt = {\n\t\t\tfilterMuted: true,\n\t\t\tsortOrder: [ 'watch', 'awake', 'room' ],\n\t\t};\n\n\t\tthis.module.cmd.addCmd({\n\t\t\tkey: 'mail',\n\t\t\tnext: [\n\t\t\t\tthis.module.cmdSteps.newAnyCharStep({\n\t\t\t\t\terrRequired: step => new Err('mail.characterRequired', \"Who do you want to send a mail to?\"),\n\t\t\t\t\t...charListOpt,\n\t\t\t\t}),\n\t\t\t\tnew DelimStep(\"=\", {\n\t\t\t\t\tnext: [\n\t\t\t\t\t\tnew MultiDelimStep({\n\t\t\t\t\t\t\t\">\": { next: new ValueStep('ooc', true), errRequired: null },\n\t\t\t\t\t\t\t\":\": { next: new ValueStep('pose', true), errRequired: null },\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tnew TextStep('msg', {\n\t\t\t\t\t\t\tspanLines: true,\n\t\t\t\t\t\t\ttoken: state => state.getParam('ooc') ? 'ooc' : 'text',\n\t\t\t\t\t\t\tmaxLength: () => this.module.info.getMail().mailMaxLength,\n\t\t\t\t\t\t\terrTooLong: communicationTooLong,\n\t\t\t\t\t\t\terrRequired: step => new Err('mail.messageRequired', \"What is the message you want to mail?\"),\n\t\t\t\t\t\t\tcompleter: this.module.cmdLists.getAllChars(charListOpt),\n\t\t\t\t\t\t\tformatText: true,\n\t\t\t\t\t\t}),\n\t\t\t\t\t],\n\t\t\t\t}),\n\t\t\t],\n\t\t\tvalue: (ctx, p) => this.mail(ctx.player, ctx.char, p),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'mail',\n\t\t\tcategory: 'communicate',\n\t\t\tcmd: 'mail',\n\t\t\tusage: l10n.l('mail.usage', usageText),\n\t\t\tshortDesc: l10n.l('mail.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('mail.helpText', helpText),\n\t\t\tsortOrder: 80,\n\t\t});\n\t}\n\n\tmail(player, char, params) {\n\t\treturn (params.charId\n\t\t\t? Promise.resolve({ id: params.charId })\n\t\t\t: player.call('getChar', { charName: params.charName })\n\t\t).then(c => {\n\t\t\tlet o = {\n\t\t\t\ttoCharId: c.id,\n\t\t\t\tfromCharId: char.id,\n\t\t\t\ttext: params.msg,\n\t\t\t\tpose: params.pose,\n\t\t\t\tooc: params.ooc,\n\t\t\t};\n\t\t\treturn this.module.api.call('mail.player.' + player.id + '.inbox', 'send', o).catch(err => {\n\t\t\t\tif (err.code != 'mail.toCharIsPuppet') {\n\t\t\t\t\treturn err;\n\t\t\t\t}\n\n\t\t\t\t// Show confirm window for mailing puppets\n\t\t\t\to.sendToPuppet = true;\n\t\t\t\tthis.module.confirm.open(() => this.module.api.call('mail.player.' + player.id + '.inbox', 'send', o).catch(err => {\n\t\t\t\t\tthis.module.charLog.logError(char, err);\n\t\t\t\t}), {\n\t\t\t\t\ttitle: l10n.l('mail.sendToPuppet', \"Send mail to puppet\"),\n\t\t\t\t\tbody: new Elem(n => n.elem('div', [\n\t\t\t\t\t\tn.component(new Txt(l10n.l('mail.mailPuppetBody', \"Do you really wish to mail a puppet?\"), { tagName: 'p' })),\n\t\t\t\t\t\tn.elem('p', { className: 'dialog--strong' }, [\n\t\t\t\t\t\t\tn.component(new FAIcon('info-circle')),\n\t\t\t\t\t\t\tn.html(\" \"),\n\t\t\t\t\t\t\tn.component(new Txt(l10n.l('mail.mailPuppetWarning', \"The mail will be sent to the puppet's owner, not the controlling puppeteer.\"))),\n\t\t\t\t\t\t]),\n\t\t\t\t\t])),\n\t\t\t\t\tconfirm: l10n.l('mail.sendMail', \"Send mail\"),\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t}\n}\n\nexport default Mail;\n","import l10n from 'modapp-l10n';\nimport TextStep from 'classes/TextStep';\nimport DelimStep from 'classes/DelimStep';\nimport MultiDelimStep from 'classes/MultiDelimStep';\nimport ValueStep from 'classes/ValueStep';\nimport RepeatStep from 'classes/RepeatStep';\nimport Err from 'classes/Err';\nimport { communicationTooLong } from 'utils/cmdErr';\n\nconst usageText = 'message <span class=\"opt\"><span class=\"param\">Character</span> <span class=\"opt\">, <span class=\"param\">Character</span></span><span class=\"comment\">...</span></span> =<span class=\"opt\">></span><span class=\"opt\">:</span> <span class=\"param\">Message</span>';\nconst shortDesc = 'Send a message to awake characters';\nconst helpText =\n`<p>Send a message to one or more awake characters in the realm.<br>\nIf the message starts with <code>></code> (greater than), the message will be marked as out of character (OOC).<br>\nIf the message starts with <code>:</code> (colon), the message will be treated in the same way as a <code>pose</code> action rather than something being texted.</p>\n<p><code class=\"param\">Character</code> is the name of the character to message. If omitted, it defaults to the character(s) last messaged.</p>\n<p><code class=\"param\">Message</code> is the messaged text. It may be formatted and span multiple paragraphs.</p>\n<p>Alias: <code>m</code>, <code>msg</code>, <code>p</code>, <code>page</code></p>`;\nconst examples = [\n\t{ cmd: 'message Jane Doe = Long time no see!', desc: l10n.l('message.messageSingleDesc', \"Messages Jane Doe\") },\n\t{ cmd: 'msg John => Are you busy?', desc: l10n.l('message.whispeOocDesc', \"Messages John out of character\") },\n\t{ cmd: 'm John, Jane =>: is no longer AFK.', desc: l10n.l('message.messageOocPoseMultipleDesc', \"Messages John and Jane with an out of character pose\") },\n\t{ cmd: 'page =: sends a thumbs up.', desc: l10n.l('message.messagePoseLastDesc', \"Messages the last character(s) messaged with a pose\") },\n];\n\n/**\n * Message adds the message command.\n */\nclass Message {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'cmd',\n\t\t\t'cmdLists',\n\t\t\t'cmdSteps',\n\t\t\t'help',\n\t\t\t'info',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t\tthis.lastCharIds = {};\n\n\t\tlet charListOpt = {\n\t\t\tfilterMuted: true,\n\t\t\tsortOrder: [ 'watch', 'room' ],\n\t\t};\n\n\t\tthis.module.cmd.addCmd({\n\t\t\tkey: 'message',\n\t\t\tnext: [\n\t\t\t\tnew RepeatStep(\n\t\t\t\t\t'chars',\n\t\t\t\t\t(next, idx) => this.module.cmdSteps.newAwakeCharStep({\n\t\t\t\t\t\tid: 'charId-' + idx,\n\t\t\t\t\t\terrRequired: null,\n\t\t\t\t\t\tnext,\n\t\t\t\t\t\t...charListOpt,\n\t\t\t\t\t}),\n\t\t\t\t\t{\n\t\t\t\t\t\tdelimiter: \",\",\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t\tnew DelimStep(\"=\", {\n\t\t\t\t\tnext: [\n\t\t\t\t\t\tnew MultiDelimStep({\n\t\t\t\t\t\t\t\">\": { next: new ValueStep('ooc', true), errRequired: null },\n\t\t\t\t\t\t\t\":\": { next: new ValueStep('pose', true), errRequired: null },\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tnew TextStep('msg', {\n\t\t\t\t\t\t\tspanLines: true,\n\t\t\t\t\t\t\ttoken: state => state.getParam('ooc') ? 'ooc' : 'text',\n\t\t\t\t\t\t\terrRequired: step => new Err('message.messageRequired', \"What do you want to message?\"),\n\t\t\t\t\t\t\tmaxLength: () => this.module.info.getCore().communicationMaxLength,\n\t\t\t\t\t\t\terrTooLong: communicationTooLong,\n\t\t\t\t\t\t\tcompleter: this.module.cmdLists.getCharsAwake(charListOpt),\n\t\t\t\t\t\t\tformatText: true,\n\t\t\t\t\t\t}),\n\t\t\t\t\t],\n\t\t\t\t}),\n\t\t\t],\n\t\t\talias: [ 'm', 'msg', 'p', 'page' ],\n\t\t\tvalue: (ctx, p) => {\n\t\t\t\tlet charIds = [];\n\t\t\t\tlet i = 0;\n\t\t\t\twhile (p['charId-' + i]) {\n\t\t\t\t\tcharIds.push(p['charId-' + i]);\n\t\t\t\t\ti++;\n\t\t\t\t}\n\t\t\t\treturn this.message(ctx.char, { charIds, msg: p.msg, pose: p.pose, ooc: p.ooc });\n\t\t\t},\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'message',\n\t\t\tcategory: 'communicate',\n\t\t\tcmd: 'message',\n\t\t\talias: [ 'm', 'msg', 'p', 'page' ],\n\t\t\tusage: l10n.l('message.usage', usageText),\n\t\t\tshortDesc: l10n.l('message.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('message.helpText', helpText),\n\t\t\texamples,\n\t\t\tsortOrder: 40,\n\t\t});\n\t}\n\n\tmessage(char, params) {\n\t\t// If we are missing target charIds, we fetch the last ones targeted.\n\t\tlet charIds = params.charIds || [];\n\t\tif (!charIds.length) {\n\t\t\tcharIds = this.lastCharIds[char.id];\n\t\t\tif (!charIds) {\n\t\t\t\treturn Promise.reject(new Err('message.noCharacter', \"Who do you want to message?\"));\n\t\t\t}\n\t\t\tparams.charIds = charIds;\n\t\t} else {\n\t\t\tthis.lastCharIds[char.id] = charIds;\n\t\t}\n\t\treturn char.call('message', params);\n\t}\n}\n\nexport default Message;\n","import l10n from 'modapp-l10n';\nimport Err from 'classes/Err';\n\nconst usageText = 'mute char <span class=\"param\">Character</span>';\nconst shortDesc = 'Mute a character';\nconst helpText =\n`<p>Mute all types of messages from a character. It affects all controlled characters.</p>\n<p><code class=\"param\">Character</code> is the name of the character to mute.</p>\n<p>Use <code>stop mute char <span class=\"param\">Character</span></code> to stop muting the character.</p>\n<p>Alias: <code>ignore</code>`;\n\n/**\n * MuteChar adds the mute char command.\n */\nclass MuteChar {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'cmd', 'muteCmd', 'charLog', 'mute', 'help', 'cmdSteps' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tlet opts = {\n\t\t\tnext: this.module.cmdSteps.newAnyCharStep({\n\t\t\t\terrRequired: step => new Err('muteChar.characterRequired', \"Who do you want to mute?\"),\n\t\t\t\tfilterMuted: true,\n\t\t\t\tsortOrder: [ 'awake', 'room' ],\n\t\t\t}),\n\t\t\tvalue: (ctx, p) => this.muteChar(ctx.player, ctx.char, p),\n\t\t};\n\n\t\tthis.module.muteCmd.addType(Object.assign({ key: 'char' }, opts));\n\t\tthis.module.cmd.addCmd(Object.assign({ key: 'ignore' }, opts));\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'muteChar',\n\t\t\tcategory: 'mute',\n\t\t\tcmd: 'mute char',\n\t\t\talias: [ 'ignore' ],\n\t\t\tusage: l10n.l('muteChar.usage', usageText),\n\t\t\tshortDesc: l10n.l('muteChar.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('muteChar.helpText', helpText),\n\t\t\tsortOrder: 30,\n\t\t});\n\t}\n\n\tmuteChar(player, char, params) {\n\t\treturn player.call('getChar', params.charId ? { charId: params.charId } : { charName: params.charName })\n\t\t\t.then(c => this.module.mute.toggleMuteChar(c.id, true).then(changed => {\n\t\t\t\tif (changed[c.id]) {\n\t\t\t\t\tthis.module.charLog.logInfo(char, l10n.l('muteChar.muteCharStart', \"Activated muting of {name}.\", { name: c.name }));\n\t\t\t\t} else {\n\t\t\t\t\tthis.module.charLog.logError(char, new Err('muteChar.alreadyMutingTravel', \"Already muting {name}.\", { name: c.name }));\n\t\t\t\t}\n\t\t\t}));\n\t}\n}\n\nexport default MuteChar;\n","import ItemList from 'classes/ItemList';\nimport ListStep from 'classes/ListStep';\nimport Err from 'classes/Err';\n\n/**\n * MuteCmd adds the mute command.\n */\nclass MuteCmd {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\t// Bind callbacks\n\t\tthis._exec = this._exec.bind(this);\n\n\t\tthis.app.require([ 'cmd' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.muteType = new ItemList('object', {\n\t\t\tname: \"message type\",\n\t\t});\n\n\t\tthis.module.cmd.addCmd({\n\t\t\tkey: 'mute',\n\t\t\tnext: new ListStep('object', this.muteType, {\n\t\t\t\tname: \"message type\",\n\t\t\t\ttoken: 'name',\n\t\t\t\terrRequired: step => new Err('muteCmd.messageTypeRequired', \"What sort of messages do you want to mute?\"),\n\t\t\t}),\n\t\t\tvalue: this._exec,\n\t\t});\n\t}\n\n\taddType(type) {\n\t\tthis.muteType.addItem(type);\n\t\treturn this;\n\t}\n\n\t_exec(ctx, p) {\n\t\tlet f = p.object;\n\t\tif (typeof f != 'function') {\n\t\t\tthrow new Error(\"Object value is not a function\");\n\t\t}\n\t\treturn f(ctx, p);\n\t}\n}\n\nexport default MuteCmd;\n","import l10n from 'modapp-l10n';\n\nconst usageText = 'mute message';\nconst shortDesc = 'Mute messages from other characters';\nconst helpText =\n\t`<p>Mute messages from other characters. Whispers, poses and say are not affected. It only affects the currently controlled character.</p>\n<p>Use <code>stop mute message</code> to stop muting messages.</p>`;\n\n/**\n * MuteMessage adds the mute message command.\n */\nclass MuteMessage {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'muteCmd', 'charLog', 'mute', 'help' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.muteCmd.addType({\n\t\t\tkey: 'message',\n\t\t\tvalue: (ctx, p) => this.muteMessage(ctx.char),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'muteMessage',\n\t\t\tcategory: 'mute',\n\t\t\tcmd: 'mute message',\n\t\t\tusage: l10n.l('muteMessage.usage', usageText),\n\t\t\tshortDesc: l10n.l('muteMessage.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('muteMessage.helpText', helpText),\n\t\t\tsortOrder: 50,\n\t\t});\n\t}\n\n\tmuteMessage(char) {\n\t\treturn this.module.mute.toggleMuteMessage(char, true, true)\n\t\t\t.then(() => this.module.charLog.logInfo(char, l10n.l('muteMessage.muteMessageStart', \"Activated muting of messages.\")));\n\t}\n}\n\nexport default MuteMessage;\n","import l10n from 'modapp-l10n';\n\nconst usageText = 'mute ooc';\nconst shortDesc = 'Mute out of character messages';\nconst helpText =\n\t`<p>Mute out of character messages of other characters. It only affects the currently controlled character.</p>\n<p>Use <code>stop mute ooc</code> to stop muting OOC messages.</p>`;\n\n/**\n * MuteOoc adds the mute ooc command.\n */\nclass MuteOoc {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'muteCmd', 'charLog', 'mute', 'help' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.muteCmd.addType({\n\t\t\tkey: 'ooc',\n\t\t\tvalue: (ctx, p) => this.muteOoc(ctx.char),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'muteOoc',\n\t\t\tcategory: 'mute',\n\t\t\tcmd: 'mute ooc',\n\t\t\tusage: l10n.l('muteOoc.usage', usageText),\n\t\t\tshortDesc: l10n.l('muteOoc.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('muteOoc.helpText', helpText),\n\t\t\tsortOrder: 70,\n\t\t});\n\t}\n\n\tmuteOoc(char) {\n\t\treturn this.module.mute.toggleMuteOoc(char, true, true)\n\t\t\t.then(() => this.module.charLog.logInfo(char, l10n.l('muteOoc.muteOocStart', \"Activated muting of OOC messages.\")));\n\t}\n}\n\nexport default MuteOoc;\n","import l10n from 'modapp-l10n';\n\nconst usageText = 'mute travel';\nconst shortDesc = 'Mute travel messages';\nconst helpText =\n`<p>Mute arrive, leave, and awake status messages of other characters. It only affects the currently controlled character.</p>\n<p>Use <code>stop mute travel</code> to stop muting travel messages.</p>`;\n\n/**\n * MuteTravel adds the mute travel command.\n */\nclass MuteTravel {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'muteCmd', 'charLog', 'mute', 'help' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.muteCmd.addType({\n\t\t\tkey: 'travel',\n\t\t\tvalue: (ctx, p) => this.muteTravel(ctx.char),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'muteTravel',\n\t\t\tcategory: 'mute',\n\t\t\tcmd: 'mute travel',\n\t\t\tusage: l10n.l('muteTravel.usage', usageText),\n\t\t\tshortDesc: l10n.l('muteTravel.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('muteTravel.helpText', helpText),\n\t\t\tsortOrder: 10,\n\t\t});\n\t}\n\n\tmuteTravel(char) {\n\t\treturn this.module.mute.toggleMuteTravel(char, true, true)\n\t\t\t.then(() => this.module.charLog.logInfo(char, l10n.l('muteTravel.muteTravelStart', \"Activated muting of travel messages.\")));\n\t}\n}\n\nexport default MuteTravel;\n","import l10n from 'modapp-l10n';\nimport TextStep from 'classes/TextStep';\nimport DelimStep from 'classes/DelimStep';\nimport ValueStep from 'classes/ValueStep';\nimport Err from 'classes/Err';\nimport { communicationTooLong } from 'utils/cmdErr';\n\nconst usageText = 'ooc <span class=\"param\">Message</span>';\nconst shortDesc = 'Say something out of character';\nconst helpText =\n`<p>Say something <em>Out of Character</em> to everyone in the room. OOC messages are sent from players to players and should be ignored by the characters.</p>\n<p>If the message starts with <code>:</code> (colon), the message will be treated in the same way as a <code>pose</code> action rather than something being said.</p>\n<p><code class=\"param\">Message</code> is the out of character message. It may be formatted and span multiple paragraphs.</p>\n<p>Alias: <code>></code> (greater than)`;\n\n/**\n * Ooc holds available commands.\n */\nclass Ooc {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'cmd', 'cmdLists', 'help', 'info' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t\tthis.module.cmd.addCmd({\n\t\t\tkey: 'ooc',\n\t\t\tnext: [\n\t\t\t\tnew DelimStep(\":\", { next: new ValueStep('pose', true), errRequired: null }),\n\t\t\t\tnew TextStep('msg', {\n\t\t\t\t\tspanLines: true,\n\t\t\t\t\ttoken: 'ooc',\n\t\t\t\t\terrRequired: step => new Err('ooc.messageRequired', \"What do you want to say?\"),\n\t\t\t\t\tmaxLength: () => this.module.info.getCore().communicationMaxLength,\n\t\t\t\t\terrTooLong: communicationTooLong,\n\t\t\t\t\tcompleter: this.module.cmdLists.getInRoomChars({\n\t\t\t\t\t\tfilterMuted: true,\n\t\t\t\t\t\tsortOrder: [ 'awake', 'watch' ],\n\t\t\t\t\t}),\n\t\t\t\t\tformatText: true,\n\t\t\t\t}),\n\t\t\t],\n\t\t\tsymbol: '>',\n\t\t\tvalue: (ctx, p) => this.ooc(ctx.char, { msg: p.msg, pose: p.pose }),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'ooc',\n\t\t\tcategory: 'communicate',\n\t\t\tcmd: 'ooc',\n\t\t\talias: [ '>' ],\n\t\t\tusage: l10n.l('ooc.usage', usageText),\n\t\t\tshortDesc: l10n.l('ooc.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('ooc.helpText', helpText),\n\t\t\tsortOrder: 70,\n\t\t});\n\t}\n\n\tooc(char, params) {\n\t\treturn char.call('ooc', params);\n\t}\n}\n\nexport default Ooc;\n","import l10n from 'modapp-l10n';\nimport TextStep from 'classes/TextStep';\nimport DelimStep from 'classes/DelimStep';\nimport ValueStep from 'classes/ValueStep';\nimport Err from 'classes/Err';\nimport { communicationTooLong } from 'utils/cmdErr';\n\nconst usageText = 'pose <span class=\"param\">Message</span>';\nconst shortDesc = 'Pose an action for the room';\nconst helpText =\n`<p>Depict an action for all the characters in the room.</p>\n<p>If the message starts with <code>></code> (greater than), the action will be marked as out of character (OOC).</p>\n<p><code class=\"param\">Action</code> is the depicted action. It may be formatted and span multiple paragraphs. If it starts with <code>'</code> (apostrophe), no space will be added between the character's name and the action text.</p>\n<p>Alias: <code>:</code> (colon), <code>/me</code></p>`;\n\n/**\n * Pose adds the pose command.\n */\nclass Pose {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'cmd', 'cmdLists', 'help', 'info' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t\tthis.module.cmd.addCmd({\n\t\t\tkey: 'pose',\n\t\t\tnext: [\n\t\t\t\tnew DelimStep(\">\", { next: new ValueStep('ooc', true), errRequired: null }),\n\t\t\t\tnew TextStep('msg', {\n\t\t\t\t\tspanLines: true,\n\t\t\t\t\ttoken: state => state.getParam('ooc') ? 'ooc' : 'text',\n\t\t\t\t\terrRequired: step => new Err('pose.messageRequired', \"What is your pose message?\"),\n\t\t\t\t\tmaxLength: () => this.module.info.getCore().communicationMaxLength,\n\t\t\t\t\terrTooLong: communicationTooLong,\n\t\t\t\t\tcompleter: this.module.cmdLists.getInRoomChars({\n\t\t\t\t\t\tfilterMuted: true,\n\t\t\t\t\t\tsortOrder: [ 'awake', 'watch' ],\n\t\t\t\t\t}),\n\t\t\t\t\tformatText: true,\n\t\t\t\t}),\n\t\t\t],\n\t\t\tsymbol: ':',\n\t\t\talias: [ '/me' ],\n\t\t\tvalue: this.pose.bind(this),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'pose',\n\t\t\tcategory: 'communicate',\n\t\t\tcmd: 'pose',\n\t\t\talias: [ ':', '/me' ],\n\t\t\tusage: l10n.l('pose.usage', usageText),\n\t\t\tshortDesc: l10n.l('pose.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('pose.helpText', helpText),\n\t\t\tsortOrder: 20,\n\t\t});\n\t}\n\n\tpose(ctx, p) {\n\t\treturn p.ooc\n\t\t\t? ctx.char.call('ooc', { msg: p.msg, pose: true })\n\t\t\t: ctx.char.call('pose', { msg: p.msg });\n\t}\n}\n\nexport default Pose;\n","import { Elem, Txt } from 'modapp-base-component';\nimport { ModelTxt } from 'modapp-resource-component';\nimport l10n from 'modapp-l10n';\nimport FAIcon from 'components/FAIcon';\nimport ListStep from 'classes/ListStep';\n\nconst usageText = 'profile <span class=\"param\">Keyword</span>';\nconst shortDesc = \"Change into one of your character's profiles\";\nconst helpText =\n`<p>Change your character's appearance to one of the profiles. This affects the <em>gender</em>, <em>species</em>, <em>description</em>, and <em>image</em>.</p>\n<p><code class=\"param\">Keyword</code> is the keyword for the character profile.</p>\n<p>Alias: <code>morph</code></p>`;\n\n/**\n * Profile adds the profile command.\n */\nclass Profile {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'cmd', 'cmdLists', 'help', 'charLog', 'confirm' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t\tthis.module.cmd.addCmd({\n\t\t\tkey: 'profile',\n\t\t\tnext: new ListStep('profileId', this.module.cmdLists.getCharProfiles(), {\n\t\t\t\tname: \"character profile\",\n\t\t\t}),\n\t\t\talias: [ 'morph' ],\n\t\t\tvalue: (ctx, p) => this.profile(ctx.char, p, true),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'profile',\n\t\t\tcategory: 'profile',\n\t\t\tcmd: 'profile',\n\t\t\talias: [ 'morph' ],\n\t\t\tusage: l10n.l('profile.usage', usageText),\n\t\t\tshortDesc: l10n.l('profile.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('profile.helpText', helpText),\n\t\t\tsortOrder: 100,\n\t\t});\n\t}\n\n\tprofile(char, p, safe) {\n\t\treturn char.call('useProfile', { profileId: p.profileId, safe })\n\t\t\t.then(result => {\n\t\t\t\tthis.module.charLog.logInfo(char, l10n.l('profile.changedToProfile', \"Changed to profile \\\"{profileName}\\\".\", { profileName: result.profile.name }));\n\t\t\t\treturn true;\n\t\t\t})\n\t\t\t.catch(err => {\n\t\t\t\tif (err.code != 'core.charProfileNotStored') {\n\t\t\t\t\treturn Promise.reject(err);\n\t\t\t\t}\n\n\t\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t\tlet cb = { resolve, reject };\n\t\t\t\t\t// Confirm to overwrite current appearance\n\t\t\t\t\tlet profile = this._getCharProfile(char, p.profileId);\n\t\t\t\t\tthis.module.confirm.open(() => this.profile(char, p, false).then(applied => {\n\t\t\t\t\t\tcb && cb.resolve(applied);\n\t\t\t\t\t}, err => cb && cb.reject(err)).then(() => cb = null), {\n\t\t\t\t\t\ttitle: l10n.l('profile.discardChanges', \"Discard changes\"),\n\t\t\t\t\t\tbody: new Elem(n => n.elem('div', [\n\t\t\t\t\t\t\tn.component(new Txt(l10n.l('profile.discardChangesBody', \"Current appearance is not stored in any profile. Do you wish to apply this profile?\"), { tagName: 'p' })),\n\t\t\t\t\t\t\tn.component(profile ? new ModelTxt(profile, m => m.name, { tagName: 'p', className: 'dialog--strong' }) : null),\n\t\t\t\t\t\t\tn.elem('p', { className: 'dialog--error' }, [\n\t\t\t\t\t\t\t\tn.component(new FAIcon('exclamation-triangle')),\n\t\t\t\t\t\t\t\tn.html(\" \"),\n\t\t\t\t\t\t\t\tn.component(new Txt(l10n.l('profile.discardWarning', \"Changes made to your character's appearance will be lost.\"))),\n\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t])),\n\t\t\t\t\t\tconfirm: l10n.l('profile.applyProfile', \"Apply profile\"),\n\t\t\t\t\t\tonClose: () => {\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tcb.resolve(false);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcb = null;\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t});\n\t}\n\n\t_getCharProfile(char, profileId) {\n\t\tlet profiles = char && char.profiles;\n\t\tif (profiles) {\n\t\t\tfor (let profile of profiles) {\n\t\t\t\tif (profile.id == profileId) {\n\t\t\t\t\treturn profile;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n}\n\nexport default Profile;\n","import l10n from 'modapp-l10n';\n\nconst usageText = 'register home';\nconst shortDesc = 'Set current room as home';\nconst helpText =\n`<p>Register current room as home for your character, if the room allows for residents.</p>`;\n\n/**\n * RegisterHome adds command to register the character's home.\n */\nclass RegisterHome {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'cmd', 'charLog', 'help' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.cmd.addPrefixCmd('register', {\n\t\t\tkey: 'home',\n\t\t\tvalue: (ctx, p) => this.registerHome(ctx.char, { [p.attr]: p.value }),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'registerHome',\n\t\t\tcategory: 'basic',\n\t\t\tcmd: 'register home',\n\t\t\tusage: l10n.l('registerHome.usage', usageText),\n\t\t\tshortDesc: l10n.l('registerHome.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('registerHome.helpText', helpText),\n\t\t\tsortOrder: 50,\n\t\t});\n\t}\n\n\tregisterHome(char, params) {\n\t\treturn char.call('setHome', params).then(() => {\n\t\t\tthis.module.charLog.logInfo(char, l10n.l('registerHome.homeWasRegistered', \"Current room is registered as home.\"));\n\t\t});\n\t}\n}\n\nexport default RegisterHome;\n","import l10n from 'modapp-l10n';\nimport DelimStep from 'classes/DelimStep';\n\nconst usageText = 'register puppet <span class=\"param\">Puppet</span>';\nconst shortDesc = 'Register a puppet character';\nconst helpText =\n`<p>Register a puppet character to allow you to wake them up and control them. The command will send a register request to the puppet owner.</p>\n<p><code class=\"param\">Puppet</code> is the puppet character to register.</p>`;\n\n/**\n * RegisterPuppet adds command to add a room as a teleport destination.\n */\nclass RegisterPuppet {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'cmd',\n\t\t\t'cmdSteps',\n\t\t\t'charLog',\n\t\t\t'help',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.cmd.addPrefixCmd('register', {\n\t\t\tkey: 'puppet',\n\t\t\tnext: [\n\t\t\t\tnew DelimStep(\"=\", { errRequired: null }),\n\t\t\t\tthis.module.cmdSteps.newInRoomPuppetStep({\n\t\t\t\t\terrRequired: null,\n\t\t\t\t}),\n\t\t\t],\n\t\t\tvalue: (ctx, p) => this.registerPuppet(ctx.char, {\n\t\t\t\tcharId: p.charId,\n\t\t\t}),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'registerPuppet',\n\t\t\tcategory: 'puppets',\n\t\t\tcmd: 'register puppet',\n\t\t\tusage: l10n.l('registerPuppet.usage', usageText),\n\t\t\tshortDesc: l10n.l('registerPuppet.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('registerPuppet.helpText', helpText),\n\t\t\tsortOrder: 10,\n\t\t});\n\t}\n\n\tregisterPuppet(char, params) {\n\t\treturn char.call('registerPuppet', params).then(result => {\n\t\t \tthis.module.charLog.logInfo(char, l10n.l('registerPuppet.teleportDestinationAdded', \"A request to register the puppet is sent.\"));\n\t\t});\n\t}\n}\n\nexport default RegisterPuppet;\n","import l10n from 'modapp-l10n';\nimport TextStep from 'classes/TextStep';\nimport DelimStep from 'classes/DelimStep';\n\nconst usageText = 'register teleport <span class=\"param\">Keyword</span>';\nconst shortDesc = 'Register current room as a teleport destination';\nconst helpText =\n`<p>Register current room as a teleport destination, if the room is a teleport node.</p>\n<p><code class=\"param\">Keyword</code> is the keyword to use for the teleport destination.</p>`;\n\n/**\n * RegisterTeleport adds command to register a room as a teleport destination.\n */\nclass RegisterTeleport {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'cmd', 'cmdLists', 'charLog', 'help' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.cmd.addPrefixCmd('register', {\n\t\t\tkey: 'teleport',\n\t\t\tnext: [\n\t\t\t\tnew DelimStep(\"=\", { errRequired: null }),\n\t\t\t\tnew TextStep('key', {\n\t\t\t\t\tregex: /^[\\w\\s]*\\w/,\n\t\t\t\t\tname: \"teleport destination keyword\",\n\t\t\t\t}),\n\t\t\t],\n\t\t\tvalue: (ctx, p) => this.registerTeleport(ctx.char, {\n\t\t\t\tkey: p.key,\n\t\t\t\troomId: ctx.char.inRoom.id,\n\t\t\t}),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'registerTeleport',\n\t\t\tcategory: 'transport',\n\t\t\tcmd: 'register teleport',\n\t\t\tusage: l10n.l('registerTeleport.usage', usageText),\n\t\t\tshortDesc: l10n.l('registerTeleport.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('registerTeleport.helpText', helpText),\n\t\t\tsortOrder: 220,\n\t\t});\n\t}\n\n\tregisterTeleport(char, params) {\n\t\treturn char.call('addTeleport', params).then(result => {\n\t\t \tthis.module.charLog.logInfo(char, l10n.l('registerTeleport.registeredTeleportDestination', \"Registered room as a teleport destination.\"));\n\t\t});\n\t}\n}\n\nexport default RegisterTeleport;\n","import l10n from 'modapp-l10n';\nimport RepeatStep from 'classes/RepeatStep';\nimport ListStep from 'classes/ListStep';\nimport TokenList from 'classes/TokenList';\nimport { isResError } from 'resclient';\nimport { tagTokenRegex, tagExpandRegex } from 'utils/regex';\n\nconst usageText = 'remove tag <span class=\"param\">Keyword</span></span> <span class=\"opt\">, <span class=\"param\">Keyword</span></span><span class=\"comment\">...</span>';\nconst shortDesc = 'Remove one or more tags from the character';\nconst helpText =\n`<p>Remove one or more tags from the character. Each keyword should be separated by a comma.</p>\n<p><code class=\"param\">Keyword</code> is the keyword for the tag to be removed.</p>\n<p>Example: <code>remove tag public, ic, whispers</code></p>`;\n\n/**\n * RemoveTag removes command to add a tag to a character.\n */\nclass RemoveTag {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'cmd', 'charLog', 'help', 'player', 'api' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.tagsList = new TokenList(() => {\n\t\t\tlet c = this.module.player.getActiveChar();\n\t\t\tlet p = (c && c.tags && c.tags.props) || {};\n\t\t\treturn Object.keys(p)\n\t\t\t\t.map(k => p[k])\n\t\t\t\t.filter(t => !isResError(t))\n\t\t\t\t.sort((a, b) => a.key.localeCompare(b.key) || a.id.localeCompare(b.id));\n\t\t}, {\n\t\t\tregex: tagTokenRegex,\n\t\t\texpandRegex: tagExpandRegex,\n\t\t\tisMatch: (t, key) => key === t.key ? { key, value: t.id } : false,\n\t\t\tisPrefix: (t, prefix) => !prefix || t.key.substring(0, prefix.length) === prefix\n\t\t\t\t? t.key\n\t\t\t\t: null,\n\t\t});\n\n\t\tthis.module.cmd.addPrefixCmd('remove', {\n\t\t\tkey: 'tag',\n\t\t\tnext: [\n\t\t\t\t// new DelimStep(\"=\", { errRequired: null }),\n\t\t\t\tnew RepeatStep(\n\t\t\t\t\t'keys',\n\t\t\t\t\t(next, idx) => new ListStep('tagId-' + idx, this.tagsList, {\n\t\t\t\t\t\tname: \"tag to remove\",\n\t\t\t\t\t\tnext,\n\t\t\t\t\t}),\n\t\t\t\t\t{\n\t\t\t\t\t\tdelimiter: \",\",\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t],\n\t\t\tvalue: (ctx, p) => {\n\t\t\t\tlet tags = {};\n\t\t\t\tlet i = 0;\n\t\t\t\twhile (p['tagId-' + i]) {\n\t\t\t\t\ttags[p['tagId-' + i]] = null;\n\t\t\t\t\ti++;\n\t\t\t\t}\n\t\t\t\treturn this.removeTag(ctx.char, tags);\n\t\t\t},\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'removeTag',\n\t\t\tcategory: 'tags',\n\t\t\tcmd: 'remove tag',\n\t\t\tusage: l10n.l('removeTag.usage', usageText),\n\t\t\tshortDesc: l10n.l('removeTag.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('removeTag.helpText', helpText),\n\t\t\tsortOrder: 40,\n\t\t});\n\t}\n\n\tremoveTag(char, tags) {\n\t\treturn this.module.api.call('tag.char.' + char.id + '.tags', 'setTags', { tags }).then(result => {\n\t\t \tthis.module.charLog.logInfo(char, l10n.l('removeTag.tagsRemoved', \"Removed tags.\"));\n\t\t});\n\t}\n}\n\nexport default RemoveTag;\n","import l10n from 'modapp-l10n';\nimport TextStep from 'classes/TextStep';\nimport DelimStep from 'classes/DelimStep';\nimport Err from 'classes/Err';\nimport { communicationTooLong } from 'utils/cmdErr';\n\nconst usageText = 'report <span class=\"param\">Character</span> <span class=\"opt\">= <span class=\"param\">Message</span></span>';\nconst shortDesc = 'Report a character';\nconst helpText =\n`<p>Open a dialog to report a character to the moderators. If the character is a puppet, the current puppeteer is reported.</p>\n<p>For more info on creating reports, type: <code>help reporting</code></p>\n<p><code class=\"param\">Character</code> is the name of the character to report.</p>\n<p><code class=\"param\">Message</code> is the optional report message. It may be formatted and span multiple paragraphs.</p>`;\nconst examples = [\n\t{ cmd: 'report John Mischief = Excessive spamming.', desc: l10n.l('report.reportExampleDesc', \"Opens a dialog to report John Mischief to the moderators\") },\n];\n\n/**\n * Report adds the report command.\n */\nclass Report {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'cmd',\n\t\t\t'cmdLists',\n\t\t\t'cmdSteps',\n\t\t\t'help',\n\t\t\t'info',\n\t\t\t'dialogReport',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.cmd.addCmd({\n\t\t\tkey: 'report',\n\t\t\tnext: [\n\t\t\t\tthis.module.cmdSteps.newAnyCharStep({\n\t\t\t\t\terrRequired: step => new Err('report.characterRequired', \"Who do you want to report?\"),\n\t\t\t\t\tsortOrder: [ 'awake', 'room' ],\n\t\t\t\t}),\n\t\t\t\tnew DelimStep(\"=\", {\n\t\t\t\t\terrRequired: null,\n\t\t\t\t\tnext: [\n\t\t\t\t\t\tnew TextStep('msg', {\n\t\t\t\t\t\t\tspanLines: true,\n\t\t\t\t\t\t\tmaxLength: () => this.module.info.getReport().reportMsgMaxLength,\n\t\t\t\t\t\t\terrTooLong: communicationTooLong,\n\t\t\t\t\t\t\terrRequired: step => new Err('report.messageRequired', \"What do you want to report?\"),\n\t\t\t\t\t\t\tcompleter: this.module.cmdLists.getCharsAwake(),\n\t\t\t\t\t\t\tformatText: true,\n\t\t\t\t\t\t}),\n\t\t\t\t\t],\n\t\t\t\t}),\n\t\t\t],\n\t\t\tvalue: (ctx, p) => this.report(ctx.player, ctx.char, p),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'report',\n\t\t\tcategory: 'reporting',\n\t\t\tcmd: 'report',\n\t\t\tusage: l10n.l('report.usage', usageText),\n\t\t\tshortDesc: l10n.l('report.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('report.helpText', helpText),\n\t\t\texamples,\n\t\t\tsortOrder: 10,\n\t\t});\n\t}\n\n\treport(player, char, params) {\n\t\treturn (params.charId\n\t\t\t? Promise.resolve({ id: params.charId })\n\t\t\t: player.call('getChar', { charName: params.charName })\n\t\t).then(c => {\n\t\t\tthis.module.dialogReport.open(char.id, c.id, c.puppeteer?.id, {\n\t\t\t\tmsg: params.msg || null,\n\t\t\t});\n\t\t});\n\t}\n}\n\nexport default Report;\n","import DelimStep from 'classes/DelimStep';\nimport ListStep from 'classes/ListStep';\nimport IDStep from 'classes/IDStep';\nimport ItemList from 'classes/ItemList';\n\n/**\n * RequestArea adds sub command to request changes to area attributes.\n */\nclass RequestArea {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'cmd', 'cmdLists', 'player' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t\tthis.areaAttr = new ItemList();\n\n\t\tthis.module.cmd.addPrefixCmd('request', {\n\t\t\tkey: 'area',\n\t\t\tnext: [\n\t\t\t\tnew IDStep('areaId', {\n\t\t\t\t\tname: \"area ID\",\n\t\t\t\t\tlist: () => {\n\t\t\t\t\t\tlet c = this.module.player.getActiveChar();\n\t\t\t\t\t\treturn ((c && c.ownedAreas && c.ownedAreas.toArray()) || []).map(v => v.id);\n\t\t\t\t\t},\n\t\t\t\t\telse: new ListStep('areaId', this.module.cmdLists.getCharOwnedAreas(), {\n\t\t\t\t\t\tname: \"area\",\n\t\t\t\t\t}),\n\t\t\t\t}),\n\t\t\t\tnew DelimStep(\":\", { errRequired: null }),\n\t\t\t\tnew ListStep('attr', this.areaAttr, {\n\t\t\t\t\tname: \"area attribute\",\n\t\t\t\t\ttoken: 'attr',\n\t\t\t\t}),\n\t\t\t],\n\t\t\tvalue: this._exec.bind(this),\n\t\t});\n\t}\n\n\tgetAreaAttr() {\n\t\treturn this.areaAttr;\n\t}\n\n\t_exec(ctx, p) {\n\t\tlet f = p.attr;\n\t\tif (typeof f != 'function') {\n\t\t\tthrow Error(\"Request area attribute value is not a function.\");\n\t\t}\n\t\treturn f(ctx, p);\n\t}\n}\n\nexport default RequestArea;\n","import l10n from 'modapp-l10n';\nimport DelimStep from 'classes/DelimStep';\nimport Err from 'classes/Err';\n\nconst usageText = 'request area <span class=\"param\">#AreaID<span class=\"comment\">/</span>Area</span> : owner = <span class=\"param\">Character</span>';\nconst shortDesc = \"Request to give area ownership to someone else's character\";\nconst helpText =\n`<p>Request to change area ownership to another player's character.</p>\n<code class=\"param\">#AreaID</code> is the ID of the owned area.</p>\n<code class=\"param\">Area</code> is the name of an owned area.</p>\n<p><code class=\"param\">Character</code> is the name of the character to transfer area ownership to.</p>`;\n\n/**\n * RequestAreaOwner adds command to request to changed area owner to a character\n * owned by another player.\n */\nclass RequestAreaOwner {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'requestArea', 'cmdSteps', 'charLog', 'help' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.requestArea.getAreaAttr().addItem({\n\t\t\tkey: 'owner',\n\t\t\tnext: [\n\t\t\t\tnew DelimStep(\"=\", { errRequired: null }),\n\t\t\t\tthis.module.cmdSteps.newAnyCharStep({\n\t\t\t\t\tname: \"new owner\",\n\t\t\t\t\terrRequired: step => new Err('requestAreaOwner.characterRequired', \"Who do you want to transfer ownership to?\"),\n\t\t\t\t\tsortOrder: [ 'awake', 'watch', 'room' ],\n\t\t\t\t}),\n\t\t\t],\n\t\t\tvalue: (ctx, p) => this.requestAreaOwner(ctx.char, Object.assign({ areaId: p.areaId }, p.charId\n\t\t\t\t? { charId: p.charId }\n\t\t\t\t: { charName: p.charName },\n\t\t\t)),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'requestAreaOwner',\n\t\t\tcategory: 'request',\n\t\t\tcmd: 'request area owner',\n\t\t\tusage: l10n.l('requestAreaOwner.usage', usageText),\n\t\t\tshortDesc: l10n.l('requestAreaOwner.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('requestAreaOwner.helpText', helpText),\n\t\t\tsortOrder: 200,\n\t\t});\n\t}\n\n\trequestAreaOwner(char, params) {\n\t\treturn char.call('requestSetAreaOwner', params).then(result => {\n\t\t\tthis.module.charLog.logInfo(char, l10n.l('requestAreaOwner.areaOwnerRequested', \"Requested to set {newOwner} as the new area owner.\", { newOwner: (result.newOwner.name + ' ' + result.newOwner.surname).trim() }));\n\t\t});\n\t}\n}\n\nexport default RequestAreaOwner;\n","import l10n from 'modapp-l10n';\nimport IDStep from 'classes/IDStep';\nimport DelimStep from 'classes/DelimStep';\n\nconst usageText = 'request area <span class=\"param\">#AreaID<span class=\"comment\">/</span>Area</span> : parent = <span class=\"param\">Parent #AreaID</span>';\nconst shortDesc = \"Request to set the parent area to an area owned by someone else's character\";\nconst helpText =\n`<p>Request to set the parent area to an area owned by someone else's character.</p>\n<code class=\"param\">#AreaID</code> is the ID of the owned area.</p>\n<code class=\"param\">Area</code> is the name of an owned area.</p>\n<p><code class=\"param\">Parent #AreaID</code> is the ID of the area to set as parent.</p>`;\n\n/**\n * RequestAreaParent adds command to request to changed area parent to an area\n * owned by another player.\n */\nclass RequestAreaParent {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'requestArea', 'cmdLists', 'charLog', 'help', 'player' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.requestArea.getAreaAttr().addItem({\n\t\t\tkey: 'parent',\n\t\t\tnext: [\n\t\t\t\tnew DelimStep(\"=\", { errRequired: null }),\n\t\t\t\tnew IDStep('parentId', {\n\t\t\t\t\tname: \"parent area ID\",\n\t\t\t\t\tlist: () => {\n\t\t\t\t\t\tlet c = module.player.getActiveChar();\n\t\t\t\t\t\treturn ((c && c.ownedAreas && c.ownedAreas.toArray()) || []).map(v => v.id);\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t],\n\t\t\tvalue: (ctx, p) => this.requestAreaParent(ctx.char, Object.assign({ areaId: p.areaId, parentId: p.parentId })),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'requestAreaParent',\n\t\t\tcategory: 'request',\n\t\t\tcmd: 'request area parent',\n\t\t\tusage: l10n.l('requestAreaParent.usage', usageText),\n\t\t\tshortDesc: l10n.l('requestAreaParent.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('requestAreaParent.helpText', helpText),\n\t\t\tsortOrder: 210,\n\t\t});\n\t}\n\n\trequestAreaParent(char, params) {\n\t\treturn char.call('requestSetArea', params).then(() => {\n\t\t\tthis.module.charLog.logInfo(char, l10n.l('requestAreaParent.areaParentRequested', \"Requested to set parent area.\"));\n\t\t});\n\t}\n}\n\nexport default RequestAreaParent;\n","import l10n from 'modapp-l10n';\nimport TextStep from 'classes/TextStep';\nimport DelimStep from 'classes/DelimStep';\nimport IDStep from 'classes/IDStep';\nimport prepareKeys from 'utils/prepareKeys';\n\nconst usageText = 'request exit <span class=\"param\">Name</span> = <span class=\"param\">#RoomID</span>';\nconst shortDesc = \"Request to create an exit to someone else's room\";\nconst helpText =\n`<p>Request to create a new exit from current room to a room owned by another player's character.</p>\n<p><code class=\"param\">Name</code> is the exit name and keyword used with the <code>go</code> command.</p>\n<p><code class=\"param\">#RoomID</code> is the destination room.</p>\n<p>A room's ID can be obtained using the <code>get room id</code> command.</p>`;\n\n/**\n * RequestExit adds command to request a new room exit with the target room\n * being owned by another player's character.\n */\nclass RequestExit {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'cmd', 'cmdLists', 'charLog', 'help' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.cmd.addPrefixCmd('request', {\n\t\t\tkey: 'exit',\n\t\t\tnext: [\n\t\t\t\tnew TextStep('name', {\n\t\t\t\t\tregex: /^[^=]*[^=\\s]/,\n\t\t\t\t}),\n\t\t\t\tnew DelimStep(\"=\", {\n\t\t\t\t\tnext: new IDStep('targetRoom', {\n\t\t\t\t\t\tname: \"target room ID\",\n\t\t\t\t\t}),\n\t\t\t\t}),\n\t\t\t],\n\t\t\tvalue: (ctx, p) => this.requestExit(ctx.char, {\n\t\t\t\tname: p.name.trim(),\n\t\t\t\tkeys: prepareKeys(p.name),\n\t\t\t\ttargetRoom: p.targetRoom,\n\t\t\t}),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'requestExit',\n\t\t\tcategory: 'request',\n\t\t\tcmd: 'request exit',\n\t\t\tusage: l10n.l('requestExit.usage', usageText),\n\t\t\tshortDesc: l10n.l('requestExit.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('requestExit.helpText', helpText),\n\t\t\tsortOrder: 10,\n\t\t});\n\t}\n\n\trequestExit(char, params) {\n\t\treturn char.call('requestCreateExit', params).then(result => {\n\t\t\tthis.module.charLog.logInfo(char, l10n.l('requestExit.exitRequested', \"Requested to create exit \\\"{exitName}\\\" to \\\"{targetRoomName}\\\".\", { exitName: result.exit.name, targetRoomName: result.targetRoom.name }));\n\t\t});\n\t}\n}\n\nexport default RequestExit;\n","import l10n from 'modapp-l10n';\nimport TextStep from 'classes/TextStep';\nimport DelimStep from 'classes/DelimStep';\nimport { communicationTooLong } from 'utils/cmdErr';\n\nconst usageText = 'request help <span class=\"opt\">= <span class=\"param\">Message</span></span>';\nconst shortDesc = 'Request help from the helpers';\nconst helpText =\n`<p>Request help from one of the helpers who will contact you. Help requests may be about anything; how to find a place, how a command works, or how to report someone being disrespectful.</p>\n<p><code class=\"param\">Message</code> is the optional help message. It may be formatted and span multiple paragraphs.</p>\n<p>Use <code>helpme <span class=\"param\">Message</span></code> to chat directly with awake helpers.</p>`;\nconst examples = [\n\t{ cmd: 'request help', desc: l10n.l('requestHelp.requestHelpExampleDesc', \"Requests help without a message\") },\n\t{ cmd: 'request help = How to make text bold?', desc: l10n.l('requestHelp.helpHelpWithMessageExampleDesc', \"Requests help with a message\") },\n];\n\n/**\n * RequestHelp adds the help command.\n */\nclass RequestHelp {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'cmd',\n\t\t\t'cmdLists',\n\t\t\t'help',\n\t\t\t'api',\n\t\t\t'charLog',\n\t\t\t'info',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.cmd.addPrefixCmd('request', {\n\t\t\tkey: 'help',\n\t\t\tnext: [\n\t\t\t\tnew DelimStep(\"=\", { errRequired: null }),\n\t\t\t\tnew TextStep('msg', {\n\t\t\t\t\tspanLines: true,\n\t\t\t\t\tmaxLength: () => this.module.info.getSupport().ticketMsgMaxLength,\n\t\t\t\t\terrTooLong: communicationTooLong,\n\t\t\t\t\terrRequired: null,\n\t\t\t\t\tcompleter: this.module.cmdLists.getCharsAwake(),\n\t\t\t\t\tformatText: true,\n\t\t\t\t}),\n\t\t\t],\n\t\t\tvalue: (ctx, p) => this.requestHelp(ctx.player, ctx.char, p),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'requestHelp',\n\t\t\tcategory: { 'helper': 120, 'request': 5 },\n\t\t\tcmd: 'request help',\n\t\t\tusage: l10n.l('requestHelp.usage', usageText),\n\t\t\tshortDesc: l10n.l('requestHelp.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('requestHelp.helpText', helpText),\n\t\t\texamples,\n\t\t});\n\t}\n\n\trequestHelp(player, char, params) {\n\t\treturn this.module.api.call('support.tickets', 'create', {\n\t\t\tcharId: char.id,\n\t\t\tmsg: params.msg || null,\n\t\t}).then(() => {\n\t\t\tthis.module.charLog.logInfo(char, l10n.l('requestHelp.helpRequestSent', \"The help request was sent. A helper will soon try to contact you.\"));\n\t\t});\n\t}\n}\n\nexport default RequestHelp;\n","import ListStep from 'classes/ListStep';\nimport ItemList from 'classes/ItemList';\n\n/**\n * RequestRoom adds sub command to request changes to room attributes.\n */\nclass RequestRoom {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'cmd' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t\tthis.roomAttr = new ItemList();\n\n\t\tthis.module.cmd.addPrefixCmd('request', {\n\t\t\tkey: 'room',\n\t\t\tnext: new ListStep('attr', this.roomAttr, {\n\t\t\t\tname: \"room attribute\",\n\t\t\t\ttoken: 'attr',\n\t\t\t}),\n\t\t\tvalue: this._exec.bind(this),\n\t\t});\n\t}\n\n\tgetRoomAttr() {\n\t\treturn this.roomAttr;\n\t}\n\n\t_exec(ctx, p) {\n\t\tlet f = p.attr;\n\t\tif (typeof f != 'function') {\n\t\t\tthrow Error(\"Request room attribute value is not a function.\");\n\t\t}\n\t\treturn f(ctx, p);\n\t}\n}\n\nexport default RequestRoom;\n","import l10n from 'modapp-l10n';\nimport IDStep from 'classes/IDStep';\nimport DelimStep from 'classes/DelimStep';\n\nconst usageText = 'request room area = <span class=\"param\">#AreaID</span>';\nconst shortDesc = \"Request to set the room area to an area owned by someone else's character\";\nconst helpText =\n`<p>Request to set the room area to an area owned by someone else's character.</p>\n<p><code class=\"param\">#AreaID</code> is the ID of the area to set for the room.</p>`;\n\n/**\n * RequestRoomArea adds command to request to changed room area to an area owned\n * by another player.\n */\nclass RequestRoomArea {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'requestRoom', 'cmdLists', 'charLog', 'help', 'player' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.requestRoom.getRoomAttr().addItem({\n\t\t\tkey: 'area',\n\t\t\tnext: [\n\t\t\t\tnew DelimStep(\"=\", { errRequired: null }),\n\t\t\t\tnew IDStep('areaId', {\n\t\t\t\t\tname: \"area ID\",\n\t\t\t\t\tlist: () => {\n\t\t\t\t\t\tlet c = module.player.getActiveChar();\n\t\t\t\t\t\treturn ((c && c.ownedAreas && c.ownedAreas.toArray()) || []).map(v => v.id);\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t],\n\t\t\tvalue: (ctx, p) => this.requestRoomArea(ctx.char, Object.assign({ roomId: ctx.char.inRoom.id, areaId: p.areaId })),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'requestRoomArea',\n\t\t\tcategory: 'request',\n\t\t\tcmd: 'request room area',\n\t\t\tusage: l10n.l('requestRoomArea.usage', usageText),\n\t\t\tshortDesc: l10n.l('requestRoomArea.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('requestRoomArea.helpText', helpText),\n\t\t\tsortOrder: 120,\n\t\t});\n\t}\n\n\trequestRoomArea(char, params) {\n\t\treturn char.call('requestSetRoom', params).then(() => {\n\t\t\tthis.module.charLog.logInfo(char, l10n.l('requestAreaParent.areaParentRequested', \"Requested to set room area.\"));\n\t\t});\n\t}\n}\n\nexport default RequestRoomArea;\n","import l10n from 'modapp-l10n';\nimport DelimStep from 'classes/DelimStep';\nimport Err from 'classes/Err';\n\nconst usageText = 'request room owner = <span class=\"param\">Character</span>';\nconst shortDesc = \"Request to give room ownership to someone else's character\";\nconst helpText =\n`<p>Request to change room ownership to another player's character.</p>\n<p><code class=\"param\">Character</code> is the name of the character to transfer room ownership to.</p>`;\n\n/**\n * RequestRoomOwner adds command to request to changed room owner to a character\n * owned by another player.\n */\nclass RequestRoomOwner {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'requestRoom', 'cmdSteps', 'charLog', 'help' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.requestRoom.getRoomAttr().addItem({\n\t\t\tkey: 'owner',\n\t\t\tnext: [\n\t\t\t\tnew DelimStep(\"=\", { errRequired: null }),\n\t\t\t\tthis.module.cmdSteps.newAnyCharStep({\n\t\t\t\t\tname: \"new owner\",\n\t\t\t\t\terrRequired: step => new Err('requestRoomOwner.characterRequired', \"Who do you want to transfer ownership to?\"),\n\t\t\t\t\tsortOrder: [ 'awake', 'watch', 'room' ],\n\t\t\t\t}),\n\t\t\t],\n\t\t\tvalue: (ctx, p) => this.requestRoomOwner(ctx.char, p.charId\n\t\t\t\t? { charId: p.charId, roomId: ctx.char.inRoom.id }\n\t\t\t\t: { charName: p.charName, roomId: ctx.char.inRoom.id },\n\t\t\t),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'requestRoomOwner',\n\t\t\tcategory: 'request',\n\t\t\tcmd: 'request room owner',\n\t\t\tusage: l10n.l('requestRoomOwner.usage', usageText),\n\t\t\tshortDesc: l10n.l('requestRoomOwner.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('requestRoomOwner.helpText', helpText),\n\t\t\tsortOrder: 100,\n\t\t});\n\t}\n\n\trequestRoomOwner(char, params) {\n\t\treturn char.call('requestSetRoomOwner', params).then(result => {\n\t\t\tthis.module.charLog.logInfo(char, l10n.l('requestRoomOwner.roomOwnerRequested', \"Requested to set {newOwner} as the new room owner.\", { newOwner: (result.newOwner.name + ' ' + result.newOwner.surname).trim() }));\n\t\t});\n\t}\n}\n\nexport default RequestRoomOwner;\n","/**\n * StateStep only calls a callbackback with the state without consuming anything\n * from the stream.\n */\nclass StateStep {\n\tconstructor(callback, opt) {\n\t\topt = opt || {};\n\t\tthis.callback = callback;\n\t\tthis.next = opt.next || null;\n\t}\n\n\tparse(stream, state) {\n\t\tthis.callback(state);\n\t\tif (this.next) {\n\t\t\tstate.addStep(this.next);\n\t\t}\n\t\treturn null;\n\t}\n}\n\nexport default StateStep;\n","import l10n from 'modapp-l10n';\nimport NumberStep from 'classes/NumberStep';\nimport RepeatStep from 'classes/RepeatStep';\nimport ListStep from 'classes/ListStep';\nimport ItemList from 'classes/ItemList';\nimport StateStep from 'classes/StateStep';\nimport ValueStep from 'classes/ValueStep';\nimport Err from 'classes/Err';\n\nconst usageText = 'roll <span class=\"opt\">quiet</span> <span class=\"opt\"><span class=\"param\">Roll</span></span>';\nconst shortDesc = 'Roll dice shown to the room';\nconst helpText =\n`<p>Roll dice and display the result.</p>\n<p>If <code>quiet</code> is included, the roll will only be shown to you, instead of all characters in the room.</p>\n<p><code class=\"param\">Roll</code> is the xdy±c notation of dice. If omitted, a roll between 1 and 100 will be made.</p>\n<p>Alias: <code>qroll</code> (roll quiet)</p>`;\nconst examples = [\n\t{ cmd: 'roll', desc: l10n.l('roll.rollDesc', \"Rolls between 1 - 100.\") },\n\t{ cmd: 'roll 6', desc: l10n.l('roll.roll6Desc', \"Rolls one six sided die.\") },\n\t{ cmd: 'roll 5d6', desc: l10n.l('roll.roll5d6Desc', \"Rolls five six sided dice.\") },\n\t{ cmd: 'roll 2d10 + 3', desc: l10n.l('roll.roll2d10+3Desc', \"Rolls two ten sided dice and adds 3.\") },\n\t{ cmd: 'roll 10 - 1d10', desc: l10n.l('roll.roll10-1d10Desc', \"Rolls a ten sided die and subtracts the result from 10.\") },\n\t{ cmd: 'roll quiet 2d10', desc: l10n.l('roll.rollQuiet2d10Desc', \"Quietly rolls two tens sided dice.\") },\n\t{ cmd: 'qroll 1d6', desc: l10n.l('roll.rollQuiet1d6Desc', \"Quietly rolls a six sided die.\") },\n];\n\n/**\n * Roll adds the roll command.\n */\nclass Roll {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\t// Bind callbacks\n\t\tthis._parseValue = this._parseValue.bind(this);\n\n\t\tthis.app.require([\n\t\t\t'api',\n\t\t\t'cmd',\n\t\t\t'help',\n\t\t\t'info',\n\t\t\t'charLog',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tlet modifierList = new ItemList({\n\t\t\tregex: /^[^0-9][\\w]*/,\n\t\t\titems: [\n\t\t\t\t{ key: 'quiet', next: new ValueStep('quiet', true) },\n\t\t\t],\n\t\t});\n\n\t\tlet diceStep = new RepeatStep(\n\t\t\t'dice',\n\t\t\t(next, idx) => {\n\t\t\t\tlet numStep = new NumberStep('count-' + idx, {\n\t\t\t\t\tname: \"number of dice\",\n\t\t\t\t\tregex: /^[1-9][0-9]*/,\n\t\t\t\t\terrRequired: idx ? () => new Err('roll.required', 'Must be a number that is greater than 0.') : null,\n\t\t\t\t\tnext: new ListStep('type-' + idx, new ItemList({\n\t\t\t\t\t\tregex: /^[a-zA-Z]/,\n\t\t\t\t\t\titems: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tkey: 'd',\n\t\t\t\t\t\t\t\tnext: new NumberStep('sides-' + idx, {\n\t\t\t\t\t\t\t\t\tname: \"number of sides\",\n\t\t\t\t\t\t\t\t\tregex: /^[1-9][0-9]*/,\n\t\t\t\t\t\t\t\t\terrRequired: () => new Err('roll.sidesRequired', \"The d should be followed by the number of sides on the dice.\"),\n\t\t\t\t\t\t\t\t\tnext: new StateStep(state => state.setParam('part-' + idx, state.getParam('count-' + idx) + 'd' + state.getParam('sides-' + idx)), { next }),\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t}), {\n\t\t\t\t\t\tname: 'dice type',\n\t\t\t\t\t\ttoken: 'name',\n\t\t\t\t\t\tdelimToken: 'name',\n\t\t\t\t\t\ttrimSpace: false,\n\t\t\t\t\t\terrRequired: null,\n\t\t\t\t\t\terrNotFound: (step, match) => new Err('roll.typeNotFound', 'There is no dice type \"{match}\". The supported dice type is d (standard multi-sided die).', { name: step.name, match: match }),\n\t\t\t\t\t\telse: new StateStep(state => state.setParam('part-' + idx, state.getParam('count-' + idx)), { next }),\n\t\t\t\t\t}),\n\t\t\t\t});\n\n\t\t\t\t// Between each set of dice, we must have +/-\n\t\t\t\tif (idx > 0) {\n\t\t\t\t\treturn new ListStep('mod-' + idx, new ItemList({\n\t\t\t\t\t\tregex: /^./,\n\t\t\t\t\t\titems: [\n\t\t\t\t\t\t\t{ key: '+' },\n\t\t\t\t\t\t\t{ key: '-' },\n\t\t\t\t\t\t],\n\t\t\t\t\t}), {\n\t\t\t\t\t\tname: 'plus or minus',\n\t\t\t\t\t\ttoken: 'number',\n\t\t\t\t\t\terrRequired: null,\n\t\t\t\t\t\terrNotFound: (step, match) => new Err('roll.typeNotFound', 'Multiple dice expression must be join with +/-'),\n\t\t\t\t\t\tnext: numStep,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn numStep;\n\t\t\t},\n\t\t);\n\n\t\tthis.module.cmd.addCmd({\n\t\t\tkey: 'roll',\n\t\t\tnext: [\n\t\t\t\tnew ListStep('modifier', modifierList, {\n\t\t\t\t\tname: \"roll modifier\",\n\t\t\t\t\ttoken: 'name',\n\t\t\t\t\terrRequired: null,\n\t\t\t\t}),\n\t\t\t\tdiceStep,\n\t\t\t],\n\t\t\tvalue: this._parseValue,\n\t\t});\n\n\t\tthis.module.cmd.addCmd({\n\t\t\tkey: 'qroll',\n\t\t\tnext: new ValueStep('quiet', true, {\n\t\t\t\tnext: diceStep,\n\t\t\t}),\n\t\t\tvalue: this._parseValue,\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'roll',\n\t\t\tcategory: 'communicate',\n\t\t\tcmd: 'roll',\n\t\t\talias: [ 'qroll' ],\n\t\t\tusage: l10n.l('roll.usage', usageText),\n\t\t\tshortDesc: l10n.l('roll.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('roll.helpText', helpText),\n\t\t\texamples,\n\t\t\tsortOrder: 90,\n\t\t});\n\t}\n\n\troll(ctrl, roll, quiet) {\n\t\treturn this.module.api.call('roller.char.' + ctrl.id, 'roll', { roll, quiet: quiet || undefined });\n\t}\n\n\t_parseValue(ctx, p) {\n\t\tlet roll = \"\";\n\t\tlet i = 0;\n\t\twhile (p['part-' + i]) {\n\t\t\troll += (p['mod-' + i] || '') + p['part-' + i];\n\t\t\ti++;\n\t\t}\n\t\t// Special case when we roll is used without input\n\t\tif (i == 0) {\n\t\t\troll = '1d100';\n\t\t// Special case when we only have a number\n\t\t} else if (i == 1 && !p['type-0']) {\n\t\t\troll = '1d' + roll;\n\t\t}\n\t\treturn this.roll(ctx.char, roll, !!p['quiet']);\n\t}\n}\n\nexport default Roll;\n","import { Elem, Txt } from 'modapp-base-component';\nimport { ModelTxt } from 'modapp-resource-component';\nimport l10n from 'modapp-l10n';\nimport FAIcon from 'components/FAIcon';\nimport ListStep from 'classes/ListStep';\n\nconst usageText = 'roomprofile <span class=\"param\">Keyword</span>';\nconst shortDesc = \"Change room appearance into one of its profiles\";\nconst helpText =\n`<p>Change the room's appearance to one of its profiles. This affects the <em>description</em> and <em>image</em>.</p>\n<p><code class=\"param\">Keyword</code> is the keyword for the profile.</p>`;\n\n/**\n * RoomProfile adds the room profile command.\n */\nclass RoomProfile {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'api',\n\t\t\t'cmd',\n\t\t\t'help',\n\t\t\t'charLog',\n\t\t\t'confirm',\n\t\t\t'roomAccess',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t\tthis.module.cmd.addCmd({\n\t\t\tkey: 'roomprofile',\n\t\t\tnext: new ListStep('profileId', this.module.roomAccess.getInRoomProfileTokens(), {\n\t\t\t\tname: \"room profile\",\n\t\t\t}),\n\t\t\tvalue: (ctx, p) => this.roomProfile(ctx.char, p.profileId, true),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'roomProfile',\n\t\t\tcategory: 'buildRooms',\n\t\t\tcmd: 'roomprofile',\n\t\t\tusage: l10n.l('roomProfile.usage', usageText),\n\t\t\tshortDesc: l10n.l('roomProfile.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('roomProfile.helpText', helpText),\n\t\t\tsortOrder: 100,\n\t\t});\n\t}\n\n\troomProfile(char, profileId, safe) {\n\t\treturn char.call('useRoomProfile', { profileId, safe })\n\t\t\t.then(result => {\n\t\t\t\tthis.module.charLog.logInfo(char, l10n.l('roomProfile.changedToRoomProfile', \"Changed room to profile \\\"{profileName}\\\".\", { profileName: result.profile.name }));\n\t\t\t\treturn result;\n\t\t\t})\n\t\t\t.catch(err => {\n\t\t\t\tif (err.code != 'core.roomProfileNotStored') {\n\t\t\t\t\treturn Promise.reject(err);\n\t\t\t\t}\n\n\t\t\t\treturn this.module.api.get('core.roomprofile.' + profileId).then(profile => new Promise((resolve, reject) => {\n\t\t\t\t\tlet cb = { resolve, reject };\n\t\t\t\t\t// Confirm to overwrite current appearance\n\t\t\t\t\tthis.module.confirm.open(() => this.roomProfile(char, profileId, false).then(result => {\n\t\t\t\t\t\tcb && cb.resolve(result);\n\t\t\t\t\t}, err => cb && cb.reject(err)).then(() => cb = null), {\n\t\t\t\t\t\ttitle: l10n.l('roomProfile.discardChanges', \"Discard changes\"),\n\t\t\t\t\t\tbody: new Elem(n => n.elem('div', [\n\t\t\t\t\t\t\tn.component(new Txt(l10n.l('roomProfile.discardChangesBody', \"Current appearance is not stored in any room profile. Do you wish to apply this profile?\"), { tagName: 'p' })),\n\t\t\t\t\t\t\tn.component(profile ? new ModelTxt(profile, m => m.name, { tagName: 'p', className: 'dialog--strong' }) : null),\n\t\t\t\t\t\t\tn.elem('p', { className: 'dialog--error' }, [\n\t\t\t\t\t\t\t\tn.component(new FAIcon('exclamation-triangle')),\n\t\t\t\t\t\t\t\tn.html(\" \"),\n\t\t\t\t\t\t\t\tn.component(new Txt(l10n.l('roomProfile.discardWarning', \"Changes made to the room's appearance will be lost.\"))),\n\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t])),\n\t\t\t\t\t\tconfirm: l10n.l('roomProfile.applyRoomProfile', \"Apply profile\"),\n\t\t\t\t\t\tonClose: () => {\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tcb.resolve(null);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcb = null;\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t}));\n\t\t\t});\n\t}\n}\n\nexport default RoomProfile;\n","import { Elem, Txt } from 'modapp-base-component';\nimport l10n from 'modapp-l10n';\nimport { isResError } from 'resclient';\nimport ListStep from 'classes/ListStep';\nimport IDStep from 'classes/IDStep';\nimport escapeHtml from 'utils/escapeHtml';\nimport formatDateTime from 'utils/formatDateTime';\nimport errToL10n from 'utils/errToL10n';\nimport formatByteSize from 'utils/formatByteSize';\n\nconst usageText = 'roomscript <span class=\"param\">Keyword<span class=\"comment\">/</span>#Script ID</span>';\nconst shortDesc = \"Show room script info\";\nconst helpText =\n`<p>Show detailed info and source code content of a room script.</p>\n<p>For info on how to create a room script, type: <code>help create roomscript</code></p>\n<p class=\"common--formattext\">For more information and script examples, see the <a href=\"https://github.com/mucklet/mucklet-script#readme\" target=\"_blank\" rel=\"noopener noreferrer\" title=\"https://github.com/mucklet/mucklet-script\">mucklet-script</a> development resources.</p>\n<p><code class=\"param\">Keyword</code> is the keyword for the script.</p>\n<p><code class=\"param\">#ScriptID</code> is the ID of the script.</p>`;\nconst examples = [\n\t{ cmd: 'roomscript test', desc: l10n.l('roomScript.exampletDesc', \"Shows information and logs for the <code>test</code> room script.\") },\n];\n\nconst logLvlClass = {\n\tlog: 'charlog--default',\n\tdebug: 'charlog--ooc',\n\tinfo: 'charlog--strong',\n\twarn: 'charlog--cmd',\n\terror: 'charlog--error',\n};\n\n/**\n * RoomScript adds the room script command.\n */\nclass RoomScript {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'api',\n\t\t\t'cmd',\n\t\t\t'help',\n\t\t\t'charLog',\n\t\t\t'roomAccess',\n\t\t\t'auth',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t\tthis.module.cmd.addCmd({\n\t\t\tkey: 'roomscript',\n\t\t\tnext: new IDStep('scriptId', {\n\t\t\t\tname: \"script key or ID\",\n\t\t\t\telse: new ListStep('scriptId', this.module.roomAccess.getInRoomScriptTokens(), {\n\t\t\t\t\tname: \"room script\",\n\t\t\t\t}),\n\t\t\t}),\n\t\t\tvalue: (ctx, p) => this.roomScript(ctx.char, p.scriptId),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'roomScript',\n\t\t\tcategory: 'buildRooms',\n\t\t\tcmd: 'roomscript',\n\t\t\tusage: l10n.l('roomScript.usage', usageText),\n\t\t\tshortDesc: l10n.l('roomScript.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('roomScript.helpText', helpText),\n\t\t\texamples,\n\t\t\tsortOrder: 200,\n\t\t});\n\t}\n\n\troomScript(char, scriptId) {\n\t\treturn this.module.api.get(`core.roomscript.${scriptId}.details`).then(script => {\n\t\t\tlet fetchError = true;\n\t\t\treturn (!script.source || isResError(script.source)\n\t\t\t\t? Promise.resolve(script.source ? l10n.t(errToL10n(script.source)) : null)\n\t\t\t\t// First refresh the tokens as the access token may have expired.\n\t\t\t\t: this.module.auth.refreshTokens().then(() => fetch(script.source.href, {\n\t\t\t\t\tcredentials: 'include',\n\t\t\t\t}).then(response => {\n\t\t\t\t\tfetchError = response.status >= 300;\n\t\t\t\t\treturn response.text();\n\t\t\t\t}).catch(err => {\n\t\t\t\t\treturn \"Error fetching script: \" + String(err);\n\t\t\t\t}))\n\t\t\t).then(source => {\n\t\t\t\ttry {\n\t\t\t\t\tlet rows = [\n\t\t\t\t\t\t[ l10n.t('roomScript.keyword', \"Keyword\"), script.key ],\n\t\t\t\t\t\t[ l10n.t('roomScript.scriptId', \"Script ID\"), '<span class=\"charlog--code-simple\">#' + script.id + '</span>', true ],\n\t\t\t\t\t\t[ l10n.t('roomScript.postAddress', \"Post address\"), '<span class=\"charlog--code-simple\">' + script.address + '</span>', true ],\n\t\t\t\t\t];\n\n\t\t\t\t\tlet binary = script.binary;\n\t\t\t\t\tif (binary?.href) {\n\t\t\t\t\t\trows.push([\n\t\t\t\t\t\t\tl10n.t('roomScript.binaryFile', \"Binary file\"),\n\t\t\t\t\t\t\t`<a href=\"${escapeHtml(binary.href)}\" class=\"link\" download>${escapeHtml(binary.filename)}</a> (${formatByteSize(script.binary.size)})`,\n\t\t\t\t\t\t\ttrue,\n\t\t\t\t\t\t]);\n\t\t\t\t\t}\n\n\t\t\t\t\trows.push([\n\t\t\t\t\t\tl10n.t('roomScript.active', \"Active\"),\n\t\t\t\t\t\t'<i class=\"fa fa-circle listroomscripts-' + (script.active ? 'active' : 'inactive') + '\" aria-hidden></i>',\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t]);\n\n\t\t\t\t\tlet elem = new Elem(n => {\n\t\t\t\t\t\tlet inner = [\n\t\t\t\t\t\t\tn.component(new Txt(l10n.t('roomScript.roomScriptInfo', \"Room script info\"), { tagName: 'h4' })),\n\t\t\t\t\t\t\tn.elem('table', { className: 'tbl-small tbl-nomargin charlog--font-small' }, rows.map(m => n.elem('tr', [\n\t\t\t\t\t\t\t\tn.elem('td', { className: 'charlog--strong' }, [\n\t\t\t\t\t\t\t\t\tn.text(m[0]),\n\t\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\t\tn.elem('td', [\n\t\t\t\t\t\t\t\t\tn.html(m[2] ? m[1] : escapeHtml(m[1])),\n\t\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\t]))),\n\t\t\t\t\t\t];\n\t\t\t\t\t\tif (source) {\n\t\t\t\t\t\t\tinner.push(n.component(new Txt(l10n.t('roomScript.sourceCode', \"Source code\"), { tagName: 'h4', className: 'charlog--pad' })));\n\t\t\t\t\t\t\tinner.push(n.elem('div', { className: 'charlog--code' }, [\n\t\t\t\t\t\t\t\tn.elem('pre', { className: fetchError ? 'common--error' : 'common--pre-wrap charlog--source' }, [\n\t\t\t\t\t\t\t\t\tn.text(source),\n\t\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\t]));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (script.logs.length) {\n\t\t\t\t\t\t\tinner.push(n.component(new Txt(l10n.t('roomScript.recentErrors', \"Recent logs\"), { tagName: 'h4', className: 'charlog--pad' })));\n\t\t\t\t\t\t\tinner.push(n.elem('div', { className: 'charlog--code' }, [\n\t\t\t\t\t\t\t\tn.elem('table', { className: 'tbl-small tbl-nomargin charlog--font-small' }, script.logs.toArray().reverse().map(m => n.elem('tr', [\n\t\t\t\t\t\t\t\t\tn.elem('td', { className: 'charlog--strong' }, [\n\t\t\t\t\t\t\t\t\t\tn.text(formatDateTime(new Date(m.time), { showMilliseconds: true })),\n\t\t\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\t\t\tn.elem('td', [\n\t\t\t\t\t\t\t\t\t\tn.elem('pre', { className: 'common--pre-wrap ' + (logLvlClass[m.lvl] || '') }, [\n\t\t\t\t\t\t\t\t\t\t\tn.text(m.msg),\n\t\t\t\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\t\t]))),\n\t\t\t\t\t\t\t]));\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn n.elem('div', { className: 'charlog--pad' }, inner);\n\t\t\t\t\t});\n\n\t\t\t\t\tthis.module.charLog.logComponent(char, 'roomScript', elem);\n\t\t\t\t} catch (ex) {\n\t\t\t\t\tconsole.error(ex);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n}\n\nexport default RoomScript;\n","import l10n from 'modapp-l10n';\nimport TextStep from 'classes/TextStep';\nimport Err from 'classes/Err';\nimport { communicationTooLong } from 'utils/cmdErr';\n\nconst usageText = 'say <span class=\"param\">Message</span>';\nconst shortDesc = 'Say something to others in the room';\nconst helpText =\n`<p>Say something to all characters in the room.</p>\n<p><code class=\"param\">Message</code> is the spoken message. It may be formatted and span multiple paragraphs.</p>\n<p>Alias: <code>\"</code> (quotation mark)</p>\n<p>When using the <code>\"</code> alias, the message may optionally end with a closing quote.</p>`;\n\n/**\n * Say adds the say command.\n */\nclass Say {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'cmd', 'cmdLists', 'help', 'info' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t\tthis.module.cmd.addCmd({\n\t\t\tkey: 'say',\n\t\t\tnext: new TextStep('msg', {\n\t\t\t\tspanLines: true,\n\t\t\t\terrRequired: step => new Err('say.messageRequired', \"What do you want to say?\"),\n\t\t\t\tmaxLength: () => this.module.info.getCore().communicationMaxLength,\n\t\t\t\terrTooLong: communicationTooLong,\n\t\t\t\tcompleter: this.module.cmdLists.getInRoomChars({\n\t\t\t\t\tfilterMuted: true,\n\t\t\t\t\tsortOrder: [ 'awake', 'watch' ],\n\t\t\t\t}),\n\t\t\t\tformatText: true,\n\t\t\t}),\n\t\t\tsymbol: '\"',\n\t\t\tvalue: this.say.bind(this),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'say',\n\t\t\tcategory: 'communicate',\n\t\t\tcmd: 'say',\n\t\t\talias: [ '\"' ],\n\t\t\tusage: l10n.l('say.usage', usageText),\n\t\t\tshortDesc: l10n.l('say.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('say.helpText', helpText),\n\t\t\tsortOrder: 10,\n\t\t});\n\t}\n\n\tsay(ctx, p) {\n\t\treturn ctx.char.call('say', { msg: p.cmdText == '\"' ? p.msg.replace(/\"$/, '') : p.msg });\n\t}\n}\n\nexport default Say;\n","import l10n from 'modapp-l10n';\nimport DelimStep from 'classes/DelimStep';\nimport TextStep from 'classes/TextStep';\nimport ItemList from 'classes/ItemList';\nimport helpAttribDesc from 'utils/helpAttribDesc';\nimport { descriptionTooLong, propertyTooLong } from 'utils/cmdErr';\n\nconst usageText = 'set <span class=\"param\">Attribute</span> <span class=\"opt\">=</span> <span class=\"param\">Value</span>';\nconst shortDesc = 'Set an attribute of your character';\nconst helpText =\n`<p>Set an attribute of your character.</p>`;\n\nconst defaultAttr = [\n\t{\n\t\tkey: 'name',\n\t\tname: \"character name\",\n\t\tdesc: l10n.l('set.nameDesc', \"Name which may contain numbers, letters, dash (-), and apostrophe (').\"),\n\t\tsortOrder: 10,\n\t},\n\t{\n\t\tkey: 'surname',\n\t\tname: \"character surname\",\n\t\tdesc: l10n.l('set.surnameDesc', \"Surname which may contain numbers, letters, dash (-), apostrophe ('), and spaces. It may also be titles (eg. \\\"the Beast\\\") or other creative name endings.\"),\n\t\tsortOrder: 20,\n\t},\n\t{\n\t\tkey: 'desc',\n\t\tstepFactory: module => new TextStep('value', {\n\t\t\tname: \"character description\",\n\t\t\tmaxLength: () => module.info.getCore().descriptionMaxLength,\n\t\t\terrTooLong: descriptionTooLong,\n\t\t\tspanLines: true,\n\t\t\tformatText: true,\n\t\t}),\n\t\tdesc: l10n.l('set.descDesc', \"Description of the character's appearance. It may be formatted and span multiple paragraphs.\"),\n\t\tsortOrder: 30,\n\t},\n\t{\n\t\tkey: 'about',\n\t\tstepFactory: module => new TextStep('value', {\n\t\t\tname: \"about the character\",\n\t\t\tmaxLength: () => module.info.getCore().descriptionMaxLength,\n\t\t\terrTooLong: descriptionTooLong,\n\t\t\tspanLines: true,\n\t\t\tformatText: true,\n\t\t}),\n\t\tdesc: l10n.l('set.aboutDesc', \"Information about the character and its player's preferences. It may be formatted and span multiple paragraphs.\"),\n\t\tsortOrder: 40,\n\t},\n\t{\n\t\tkey: 'gender',\n\t\tstepFactory: module => new TextStep('value', {\n\t\t\tname: \"character gender\",\n\t\t\tmaxLength: () => module.info.getCore().propertyMaxLength,\n\t\t\terrTooLong: propertyTooLong,\n\t\t}),\n\t\tdesc: l10n.l('set.genderDesc', \"Gender of the character.\"),\n\t\tsortOrder: 50,\n\t},\n\t{\n\t\tkey: 'species',\n\t\tstepFactory: module => new TextStep('value', {\n\t\t\tname: \"character species\",\n\t\t\tmaxLength: () => module.info.getCore().propertyMaxLength,\n\t\t\terrTooLong: propertyTooLong,\n\t\t}),\n\t\tdesc: l10n.l('set.speciesDesc', \"Species of the character.\"),\n\t\tsortOrder: 60,\n\t},\n];\n\n/**\n * Set adds command to set character attributes.\n */\nclass Set {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'cmd', 'charLog', 'help', 'info' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t\tthis.charAttr = new ItemList({\n\t\t\tcompare: (a, b) => (a.sortOrder - b.sortOrder) || a.key.localeCompare(b.key),\n\t\t});\n\t\tfor (let o of defaultAttr) {\n\t\t\tthis.addAttribute(o);\n\t\t}\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'set',\n\t\t\tcategory: 'profile',\n\t\t\tcmd: 'set',\n\t\t\tusage: l10n.l('set.usage', usageText),\n\t\t\tshortDesc: l10n.l('set.shortDesc', shortDesc),\n\t\t\tdesc: () => helpAttribDesc(l10n.t('set.helpText', helpText), this.charAttr.getItems()),\n\t\t\tsortOrder: 10,\n\t\t});\n\t}\n\n\taddAttribute(attr) {\n\t\tlet next = attr.nextFactory ? attr.nextFactory(this.module) : attr.next;\n\t\tnext = next || [\n\t\t\tnew DelimStep(\"=\", { errRequired: null }),\n\t\t\tattr.stepFactory\n\t\t\t\t? attr.stepFactory(this.module)\n\t\t\t\t: new TextStep('value', {\n\t\t\t\t\tname: attr.name || attr.key,\n\t\t\t\t}),\n\t\t];\n\t\tlet item = Object.assign({}, attr, { next });\n\t\tthis.charAttr.addItem(item);\n\n\t\tif (item.key) {\n\t\t\tif (!item.value) {\n\t\t\t\titem.value = (ctx, p) => this._exec(ctx, Object.assign({ attr: item.key }, p));\n\t\t\t}\n\t\t\tthis.module.cmd.addPrefixCmd('set', item);\n\t\t}\n\t\treturn this;\n\t}\n\n\t_exec(ctx, p) {\n\t\tlet f = p.attr;\n\t\treturn typeof f == 'function'\n\t\t\t? f(ctx, p, this)\n\t\t\t: this.set(ctx, p);\n\t}\n\n\tset(ctx, p) {\n\t\treturn ctx.char.call('set', {\n\t\t\t[p.attr]: p.value,\n\t\t}).then(() => {\n\t\t\tthis.module.charLog.logInfo(ctx.char, l10n.l('set.updatedCharacter', \"Character attribute was successfully set.\"));\n\t\t});\n\t}\n}\n\nexport default Set;\n","import l10n from 'modapp-l10n';\nimport DelimStep from 'classes/DelimStep';\nimport ListStep from 'classes/ListStep';\nimport TextStep from 'classes/TextStep';\nimport IDStep from 'classes/IDStep';\nimport ItemList from 'classes/ItemList';\nimport helpAttribDesc from 'utils/helpAttribDesc';\nimport { descriptionTooLong, shortDescriptionTooLong, itemNameTooLong } from 'utils/cmdErr';\n\nconst usageText = 'set area <span class=\"param\">#AreaID<span class=\"comment\">/</span>Area</span> : <span class=\"param\">Attribute</span> = <span class=\"param\">Value</span>';\nconst shortDesc = 'Set an area attribute';\nconst helpText =\n`<p>Set an area attribute.</p>\n<code class=\"param\">#AreaID</code> is the ID of the area to set.</p>\n<code class=\"param\">Area</code> is the name of an owned area to set.</p>`;\n\nconst defaultAttr = [\n\t{\n\t\tkey: 'name',\n\t\tstepFactory: module => new TextStep('value', {\n\t\t\tname: \"area name\",\n\t\t\tmaxLength: () => module.info.getCore().itemNameMaxLength,\n\t\t\terrTooLong: itemNameTooLong,\n\t\t}),\n\t\tdesc: l10n.l('setArea.nameDesc', \"Name of the area.\"),\n\t\tsortOrder: 10,\n\t},\n\t{\n\t\tkey: 'desc',\n\t\tvalue: 'shortDesc',\n\t\tstepFactory: module => new TextStep('value', {\n\t\t\tname: \"area short description\",\n\t\t\tspanLines: true,\n\t\t\tmaxLength: () => module.info.getCore().shortDescriptionMaxLength,\n\t\t\terrTooLong: shortDescriptionTooLong,\n\t\t}),\n\t\tdesc: l10n.l('setRoom.descDesc', \"Short description of the area. May span multiple paragraphs.\"),\n\t\tsortOrder: 20,\n\t},\n\t{\n\t\tkey: 'about',\n\t\tstepFactory: module => new TextStep('value', {\n\t\t\tname: \"about the area\",\n\t\t\tspanLines: true,\n\t\t\tmaxLength: () => module.info.getCore().descriptionMaxLength,\n\t\t\terrTooLong: descriptionTooLong,\n\t\t\tformatText: true,\n\t\t}),\n\t\tdesc: l10n.l('setChar.aboutDesc', \"Information about the area, such as setting, purpose, and rules. It may be formatted and span multiple paragraphs.\"),\n\t\tsortOrder: 30,\n\t},\n\t{\n\t\tkey: 'rules',\n\t\tstepFactory: module => new TextStep('value', {\n\t\t\tname: \"area rules\",\n\t\t\tspanLines: true,\n\t\t\tmaxLength: () => module.info.getCore().descriptionMaxLength,\n\t\t\terrTooLong: descriptionTooLong,\n\t\t\tformatText: true,\n\t\t}),\n\t\tdesc: l10n.l('setChar.rulesDesc', \"Area specific rules that adds to the realm rules. It may be formatted and span multiple paragraphs.\"),\n\t\tsortOrder: 40,\n\t},\n\t{\n\t\tkey: 'parent',\n\t\tstepFactory: module => new IDStep('value', {\n\t\t\tname: \"parent area ID\",\n\t\t\tlist: () => {\n\t\t\t\tlet c = module.player.getActiveChar();\n\t\t\t\treturn ((c && c.ownedAreas && c.ownedAreas.toArray()) || []).map(v => v.id);\n\t\t\t},\n\t\t\telse: new ListStep('value', module.cmdLists.getCharOwnedAreas(true), {\n\t\t\t\tname: \"parent area\",\n\t\t\t}),\n\t\t}),\n\t\tdesc: l10n.l('setArea.parentDesc', \"#AreaID, or name of owned area, to set as parent area. Or <code>none</code> to unset current parent area. List owned areas with <code>list areas</code>.\"),\n\t\tvalue: (ctx, p, self) => self.setAreaParent(ctx.char, p.areaId, p.value),\n\t\tsortOrder: 50,\n\t},\n];\n\n/**\n * SetArea adds command to set the area attributes.\n */\nclass SetArea {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'cmd', 'cmdLists', 'charLog', 'help', 'player', 'info' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t\tthis.areaAttr = new ItemList({\n\t\t\tcompare: (a, b) => (a.sortOrder - b.sortOrder) || a.key.localeCompare(b.key),\n\t\t});\n\t\tfor (let o of defaultAttr) {\n\t\t\tthis.addAttribute(o);\n\t\t}\n\n\t\tthis.module.cmd.addPrefixCmd('set', {\n\t\t\tkey: 'area',\n\t\t\tnext: [\n\t\t\t\tnew IDStep('areaId', {\n\t\t\t\t\tname: \"area ID\",\n\t\t\t\t\tlist: () => {\n\t\t\t\t\t\tlet c = this.module.player.getActiveChar();\n\t\t\t\t\t\treturn ((c && c.ownedAreas && c.ownedAreas.toArray()) || []).map(v => v.id);\n\t\t\t\t\t},\n\t\t\t\t\telse: new ListStep('areaId', this.module.cmdLists.getCharOwnedAreas(), {\n\t\t\t\t\t\tname: \"area\",\n\t\t\t\t\t}),\n\t\t\t\t}),\n\t\t\t\tnew DelimStep(\":\", { errRequired: null }),\n\t\t\t\tnew ListStep('attr', this.areaAttr, {\n\t\t\t\t\tname: \"area attribute\",\n\t\t\t\t\ttoken: 'attr',\n\t\t\t\t}),\n\t\t\t],\n\t\t\tvalue: this._exec.bind(this),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'setArea',\n\t\t\tcategory: 'buildAreas',\n\t\t\tcmd: 'set area',\n\t\t\tusage: l10n.l('setArea.usage', usageText),\n\t\t\tshortDesc: l10n.l('setArea.shortDesc', shortDesc),\n\t\t\tdesc: () => helpAttribDesc(l10n.t('setArea.helpText', helpText), this.areaAttr.getItems()),\n\t\t\tsortOrder: 20,\n\t\t});\n\t}\n\n\taddAttribute(attr) {\n\t\tlet next = attr.nextFactory ? attr.nextFactory(this.module) : attr.next;\n\t\tif (!next) {\n\t\t\tnext = attr.stepFactory\n\t\t\t\t? attr.stepFactory(this.module)\n\t\t\t\t: new TextStep('value', {\n\t\t\t\t\tname: attr.name || attr.key,\n\t\t\t\t});\n\t\t\tnext = Array.isArray(next) ? next : [ next ];\n\t\t\tnext.unshift(new DelimStep(\"=\", { errRequired: null }));\n\t\t}\n\t\tthis.areaAttr.addItem(Object.assign({}, attr, { next }));\n\t\treturn this;\n\t}\n\n\t_exec(ctx, p) {\n\t\tlet f = p.attr;\n\t\treturn typeof f == 'function'\n\t\t\t? f(ctx, p, this)\n\t\t\t: ctx.char.call('setArea', {\n\t\t\t\tareaId: p.areaId,\n\t\t\t\t[f]: p.value,\n\t\t\t}).then(() => {\n\t\t\t\tthis.module.charLog.logInfo(ctx.char, l10n.l('setArea.updatedArea', \"Area attribute was successfully set.\"));\n\t\t\t});;\n\t}\n\n\tsetAreaParent(ctrl, areaId, parentId) {\n\t\t// When removing the area from a parent area, we use removeLocation instead,\n\t\t// as both parent area and child area owners can call it.\n\t\treturn (parentId\n\t\t\t? ctrl.call('setArea', { areaId, parentId }).then(() => {\n\t\t\t\tthis.module.charLog.logInfo(ctrl, l10n.l('setArea.parentAreaSet', \"Area parent was successfully set.\"));\n\t\t\t})\n\t\t\t: ctrl.call('removeLocation', { locationId: areaId, type: 'area' }).then(() => {\n\t\t\t\tthis.module.charLog.logInfo(ctrl, l10n.l('setArea.areaRemovedFromParentArea', \"Area from successfully removed from parent area.\"));\n\t\t\t})\n\t\t);\n\t}\n}\n\nexport default SetArea;\n","import l10n from 'modapp-l10n';\nimport ListStep from 'classes/ListStep';\nimport NumberStep from 'classes/NumberStep';\nimport DelimStep from 'classes/DelimStep';\n\n/**\n * SetAreaLocation adds command to set the area's location attributes.\n */\nclass SetAreaLocation {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'cmdLists', 'setArea', 'charLog' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.setArea.addAttribute({\n\t\t\tkey: 'private',\n\t\t\tstepFactory: () => new ListStep('private', this.module.cmdLists.getBool(), { name: \"private flag\" }),\n\t\t\tdesc: l10n.l('setAreaLocation.privateDesc', \"Flag telling if the area is private, preventing from being listed in the parent area. Requires parent area ownership. Value is <code>yes</code> or <code>no</code>.\"),\n\t\t\tvalue: (ctx, p) => this.setAreaLocation(ctx.char, p.areaId, { private: p.private }),\n\t\t\tsortOrder: 200,\n\t\t});\n\t\tthis.module.setArea.addAttribute({\n\t\t\tkey: 'position',\n\t\t\tstepFactory: () => ([\n\t\t\t\tnew NumberStep('mapx', { name: \"parent area map X position\" }),\n\t\t\t\tnew DelimStep(\",\", { errRequired: null }),\n\t\t\t\tnew NumberStep('mapy', { name: \"parent area map Y position\" }),\n\t\t\t]),\n\t\t\tdesc: l10n.l('setAreaLocation.positionDesc', \"The X,Y pixel coordinates of the area's position on the parent area's map image, starting with 0,0 in the top-left corner. Requires parent area ownership.\"),\n\t\t\tvalue: (ctx, p) => this.setAreaLocation(ctx.char, p.areaId, { mapX: p.mapx, mapY: p.mapy }),\n\t\t\tsortOrder: 210,\n\t\t});\n\t}\n\n\tsetAreaLocation(char, areaId, params) {\n\t\treturn char.call('setLocation', Object.assign({ locationId: areaId, type: 'area' }, params)).then(() => {\n\t\t\tthis.module.charLog.logInfo(char, l10n.l('setAreaLocation.areaLocationSet', \"Area location attribute was successfully set\"));\n\t\t});\n\t}\n}\n\nexport default SetAreaLocation;\n","import l10n from 'modapp-l10n';\nimport Err from 'classes/Err';\n\n/**\n * SetAreaOwner adds the setArea attribute to set the area owner.\n */\nclass SetAreaOwner {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'cmdSteps', 'setArea', 'charLog' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.setArea.addAttribute({\n\t\t\tkey: 'owner',\n\t\t\tstepFactory: () => this.module.cmdSteps.newAnyCharStep({\n\t\t\t\tname: \"new owner\",\n\t\t\t\terrRequired: step => new Err('setAreaOwner.characterRequired', \"Who do you want to set as new owner?\"),\n\t\t\t\tsortOrder: [ 'awake', 'watch', 'room' ],\n\t\t\t}),\n\t\t\tdesc: l10n.l('setAreaOwner.ownerDesc', \"Name of the new owner. To give ownership to another player's character, use the <code>request area owner</code> command instead.\"),\n\t\t\tvalue: (ctx, p) => this.setAreaOwner(ctx.char, p.charId\n\t\t\t\t? { charId: p.charId, areaId: p.areaId }\n\t\t\t\t: { charName: p.charName, areaId: p.areaId },\n\t\t\t),\n\t\t\tsortOrder: 100,\n\t\t});\n\t}\n\n\tsetAreaOwner(char, params) {\n\t\treturn char.call('setAreaOwner', params).then(result => {\n\t\t\tlet c = result.newOwner;\n\t\t\tthis.module.charLog.logInfo(char, l10n.l('setAreaOwner.areaOwnerSet', \"Area owner was successfully set to {fullname}.\", { fullname: (c.name + ' ' + c.surname).trim() }));\n\t\t});\n\t}\n}\n\nexport default SetAreaOwner;\n","import l10n from 'modapp-l10n';\nimport DelimStep from 'classes/DelimStep';\nimport TextStep from 'classes/TextStep';\nimport ItemList from 'classes/ItemList';\nimport ListStep from 'classes/ListStep';\nimport ValueStep from 'classes/ValueStep';\nimport helpAttribDesc from 'utils/helpAttribDesc';\nimport { communicationTooLong } from 'utils/cmdErr';\n\nconst usageText = 'set area <span class=\"param\">#AreaID<span class=\"comment\">/</span>Area</span> : teleportmsgs : <span class=\"param\">Type</span> <span class=\"opt\">=</span> <span class=\"param\">Value</span>';\nconst shortDesc = 'Set a custom area teleport message';\nconst helpText =\n`<p>Set a custom area teleport message used as default when teleporting to and from rooms belonging to the area. It will not affect rooms in child areas.</p>\n<code class=\"param\">#AreaID</code> is the ID of the area to set.</p>\n<code class=\"param\">Area</code> is the name of an owned area to set.</p>`;\n\nconst defaultAttr = [\n\t{\n\t\tkey: 'leave',\n\t\tvalue: 'teleportLeaveMsg',\n\t\tname: \"leave message\",\n\t\tdesc: l10n.l('setAreaTeleportMsgs.leaveMsgDesc', \"Message seen by the room when a character teleports away from there. The character's name will be prepended.\"),\n\t\texamples: [{\n\t\t\tcmd: 'set area Town teleportmsgs : leave = is picked up by a taxi.',\n\t\t\tdesc: l10n.l('setAreaTeleportMsgs.leaveExample', \"Sets message seen when someone arrives to a room in the Town area.\"),\n\t\t}],\n\t\tsortOrder: 200,\n\t},\n\t{\n\t\tkey: 'arrive',\n\t\tvalue: 'teleportArriveMsg',\n\t\tname: \"arrival message\",\n\t\tdesc: l10n.l('setAreaTeleportMsgs.arriveMsgDesc', \"Message seen by the room when a character teleports there. The character's name will be prepended.\"),\n\t\texamples: [{\n\t\t\tcmd: 'set area Town teleportmsgs : arrive = is dropped off by a taxi.',\n\t\t\tdesc: l10n.l('setAreaTeleportMsgs.arriveExample', \"Sets message seen when someone leaves a room in the Town area.\"),\n\t\t}],\n\t\tsortOrder: 210,\n\t},\n\t{\n\t\tkey: 'travel',\n\t\tvalue: 'teleportTravelMsg',\n\t\tname: \"travel message\",\n\t\tdesc: l10n.l('setAreaTeleportMsgs.travelMsgDesc', \"Message seen by the teleporting character when they teleport into the area. The character's name will be prepended.\"),\n\t\texamples: [{\n\t\t\tcmd: 'set area Town teleportmsgs : travel = takes a taxi.',\n\t\t\tdesc: l10n.l('setAreaTeleportMsgs.travelExample', \"Sets message seen by the character arriving to a room in the Town area.\"),\n\t\t}],\n\t\tsortOrder: 220,\n\t},\n\t{\n\t\tkey: 'override',\n\t\tvalue: 'overrideCharTeleportMsgs',\n\t\tstepFactory: module => new ListStep('value', module.cmdLists.getBool(), { name: \"override character messages flag\" }),\n\t\tname: \"override character teleport message\",\n\t\tdesc: l10n.l('setAreaTeleportMsgs.overrideCharTeleportMsgsDesc', \"Flag to override any custom teleport messages set for the teleporting character. Value is <code>yes</code> or <code>no</code>.\"),\n\t\texamples: [{\n\t\t\tcmd: 'set area Town teleportmsgs : override = yes',\n\t\t\tdesc: l10n.l('setAreaTeleportMsgs.overrideExample', \"Sets flag to override character defined messages.\"),\n\t\t}],\n\t\tsortOrder: 230,\n\t},\n];\n\n/**\n * SetTeleportMsg adds teleportmsg settings to the set command.\n */\nclass SetTeleportMsg {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'help',\n\t\t\t'info',\n\t\t\t'setArea',\n\t\t\t'cmdLists',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t\tthis.teleportMsgType = new ItemList({\n\t\t\tcompare: (a, b) => (a.sortOrder - b.sortOrder) || a.key.localeCompare(b.key),\n\t\t});\n\t\tfor (let o of defaultAttr) {\n\t\t\tthis.addAttribute(o);\n\t\t}\n\n\t\tthis.module.setArea.addAttribute({\n\t\t\tkey: 'teleportmsgs',\n\t\t\tnextFactory: module => new DelimStep(\":\", {\n\t\t\t\tnext: new ListStep('attr', this.teleportMsgType, {\n\t\t\t\t\tname: \"teleport message type\",\n\t\t\t\t\ttoken: 'attr',\n\t\t\t\t}),\n\t\t\t\telse: [\n\t\t\t\t\tnew DelimStep(\"=\", { errRequired: null }),\n\t\t\t\t\tnew ValueStep('attr', 'customTeleportMsgs'),\n\t\t\t\t\tnew ListStep('value', this.module.cmdLists.getBool(), { name: \"yes or no value\" }),\n\t\t\t\t],\n\t\t\t}),\n\t\t\tdesc: l10n.l('setAreaTeleportMsg.teleportmsgsDesc', \"Use custom teleport messages. Value is <code>yes</code> or <code>no</code>. For setting specific messages, see <code>help set area teleportmsgs</code>.\"),\n\t\t\tsortOrder: 300,\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'setAreaTeleportMsgs',\n\t\t\tcmd: 'set area teleportmsgs',\n\t\t\tusage: l10n.l('setAreaTeleportMsgs.usage', usageText),\n\t\t\tshortDesc: l10n.l('setAreaTeleportMsgs.shortDesc', shortDesc),\n\t\t\tdesc: () => helpAttribDesc(l10n.t('setAreaTeleportMsgs.helpText', helpText), this.teleportMsgType.getItems(), {\n\t\t\t\tattribute: l10n.t('setAreaTeleportMsgs.type', `<code class=\"param\">Type</code>`),\n\t\t\t}),\n\t\t\texamples: () => {\n\t\t\t\tlet types = this.teleportMsgType.getItems();\n\t\t\t\tlet examples = [];\n\t\t\t\tfor (let t of types) {\n\t\t\t\t\tif (t.examples) {\n\t\t\t\t\t\texamples = examples.concat(t.examples);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn examples;\n\t\t\t},\n\t\t\tsortOrder: 25,\n\t\t});\n\t}\n\n\taddAttribute(attr) {\n\t\tlet next = attr.nextFactory ? attr.nextFactory(this.module) : attr.next;\n\t\tnext = next || [\n\t\t\tnew DelimStep(\"=\", { errRequired: null }),\n\t\t\tattr.stepFactory\n\t\t\t\t? attr.stepFactory(this.module)\n\t\t\t\t: new TextStep('value', {\n\t\t\t\t\tname: attr.name || attr.key,\n\t\t\t\t\tmaxLength: () => this.module.info.getCore().communicationMaxLength,\n\t\t\t\t\terrTooLong: communicationTooLong,\n\t\t\t\t}),\n\t\t];\n\t\tlet item = Object.assign({}, attr, { next });\n\t\tthis.teleportMsgType.addItem(item);\n\t\treturn this;\n\t}\n}\n\nexport default SetTeleportMsg;\n","import l10n from 'modapp-l10n';\nimport DelimStep from 'classes/DelimStep';\nimport ListStep from 'classes/ListStep';\nimport TextStep from 'classes/TextStep';\nimport ItemList from 'classes/ItemList';\nimport Err from 'classes/Err';\nimport helpAttribDesc from 'utils/helpAttribDesc';\n\nconst usageText = 'set char <span class=\"param\">Character</span> : <span class=\"param\">Attribute</span> <span class=\"opt\">=</span> <span class=\"param\">Value</span>';\nconst shortDesc = 'Set an attribute of another character';\nconst helpText =\n`<p>Set an attribute of another character.</p>\n<p><code class=\"param\">Character</code> is the name of the character to set.</p>`;\n\n\n/**\n * SetChar adds command to set character attributes.\n */\nclass SetChar {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'cmd', 'cmdSteps', 'charLog', 'info' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t\tthis.helpTopic = null;\n\t\tthis.charAttr = new ItemList({\n\t\t\tcompare: (a, b) => (a.sortOrder - b.sortOrder) || a.key.localeCompare(b.key),\n\t\t});\n\n\t\tthis.module.cmd.addPrefixCmd('set', {\n\t\t\tkey: 'char',\n\t\t\tnext: [\n\t\t\t\tthis.module.cmdSteps.newAnyCharStep({\n\t\t\t\t\terrRequired: step => new Err('transferChar.characterRequired', \"What character do you want to set?\"),\n\t\t\t\t\tsortOrder: [ 'awake', 'watch', 'room' ],\n\t\t\t\t}),\n\t\t\t\tnew DelimStep(\":\", { errRequired: null }),\n\t\t\t\tnew ListStep('attr', this.charAttr, {\n\t\t\t\t\tname: \"character attribute\",\n\t\t\t\t\ttoken: 'attr',\n\t\t\t\t}),\n\t\t\t],\n\t\t\tvalue: this._exec.bind(this),\n\t\t});\n\t}\n\n\taddAttribute(attr) {\n\t\tlet next = attr.nextFactory ? attr.nextFactory(this.module) : attr.next;\n\t\tnext = next || [\n\t\t\tnew DelimStep(\"=\", { errRequired: null }),\n\t\t\tattr.stepFactory\n\t\t\t\t? attr.stepFactory(this.module)\n\t\t\t\t: new TextStep('value', {\n\t\t\t\t\tname: attr.name || attr.key,\n\t\t\t\t}),\n\t\t];\n\t\tlet item = Object.assign({}, attr, { next });\n\t\tthis.charAttr.addItem(item);\n\n\t\tif (this.charAttr.length && !this.helpTopic) {\n\t\t\tthis.helpTopic = this.app.getModule('helpAdmin');\n\t\t\tif (this.helpTopic) {\n\t\t\t\tthis.helpTopic.addTopic({\n\t\t\t\t\tid: 'setChar',\n\t\t\t\t\tcmd: 'set char',\n\t\t\t\t\tusage: l10n.l('setChar.usage', usageText),\n\t\t\t\t\tshortDesc: l10n.l('setChar.shortDesc', shortDesc),\n\t\t\t\t\tdesc: () => helpAttribDesc(l10n.t('setChar.helpText', helpText), this.charAttr.getItems()),\n\t\t\t\t\tsortOrder: 200,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t_exec(ctx, p) {\n\t\tlet f = p.attr;\n\t\treturn typeof f == 'function'\n\t\t\t? f(ctx, p, this)\n\t\t\t: this.setChar(ctx, p);\n\t}\n\n\tsetChar(ctx, p) {\n\t\treturn ctx.player.call('setChar', Object.assign({\n\t\t\t[p.attr]: p.value,\n\t\t}, p.charId\t? { charId: p.charId } : { charName: p.charName })).then(result => {\n\t\t\tlet c = result.char;\n\t\t\tthis.module.charLog.logInfo(ctx.char, l10n.l('setChar.updatedCharacterAttribute', \"Attribute for {charName} successfully set.\", { charName: (c.name + \" \" + c.surname).trim() }));\n\t\t});\n\t}\n}\n\nexport default SetChar;\n","import l10n from 'modapp-l10n';\nimport TextStep from 'classes/TextStep';\nimport ListStep from 'classes/ListStep';\nimport ValueStep from 'classes/ValueStep';\nimport { communicationTooLong } from 'utils/cmdErr';\n\n/**\n * SetCharSettings adds common character settings to the set char command.\n */\nclass SetCharSettings {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'set', 'cmdLists', 'charLog' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tlet attr = [\n\t\t\t{\n\t\t\t\tkey: 'dnd',\n\t\t\t\tstepFactory: module => new ListStep('value', this.module.cmdLists.getBool(), { name: \"do not disturb flag\" }),\n\t\t\t\tdesc: l10n.l('setChar.dnd', \"Do not disturb flag, preventing messages to be sent to and from the character. Value is <code>yes</code> or <code>no</code>.\"),\n\t\t\t\tsortOrder: 200,\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: 'dndmsg',\n\t\t\t\tstepFactory: module => new ValueStep('value', '', {\n\t\t\t\t\tnext: new TextStep('value', {\n\t\t\t\t\t\tname: \"do not disturb message\",\n\t\t\t\t\t\tmaxLength: () => module.info.getCore().communicationMaxLength,\n\t\t\t\t\t\terrTooLong: communicationTooLong,\n\t\t\t\t\t\tspanLines: true,\n\t\t\t\t\t\terrRequired: null,\n\t\t\t\t\t\tformatText: true,\n\t\t\t\t\t}),\n\t\t\t\t}),\n\t\t\t\tdesc: l10n.l('setChar.dndDesc', \"Do not disturb message. It may be formatted and span multiple paragraphs.\"),\n\t\t\t\tsortOrder: 210,\n\t\t\t},\n\t\t];\n\t\tfor (let o of attr) {\n\t\t\tthis.module.set.addAttribute(Object.assign({\n\t\t\t\tvalue: (ctx, p) => this.setCharSettings(ctx, Object.assign({ attr: o.key }, p)),\n\t\t\t}, o));\n\t\t}\n\t}\n\n\tsetCharSettings(ctx, p) {\n\t\tlet c = ctx.char;\n\t\treturn ctx.player.call('setCharSettings', { charId: c.id, puppeteerId: c.puppeteer ? c.puppeteer.id : undefined, [p.attr]: p.value }).then(result => {\n\t\t\tthis.module.charLog.logInfo(ctx.char, l10n.l('setCharSettings.updatedCharacter', \"Character setting was successfully set.\"));\n\t\t});\n\t}\n}\n\nexport default SetCharSettings;\n","import l10n from 'modapp-l10n';\nimport DelimStep from 'classes/DelimStep';\nimport ListStep from 'classes/ListStep';\nimport TextStep from 'classes/TextStep';\nimport RepeatStep from 'classes/RepeatStep';\nimport ItemList from 'classes/ItemList';\nimport Err from 'classes/Err';\nimport { exitIcons } from 'components/ExitIcon';\nimport { directions } from 'components/NavButtons';\nimport helpAttribDesc from 'utils/helpAttribDesc';\nimport { communicationTooLong, keyTooLong, itemNameTooLong } from 'utils/cmdErr';\nimport * as translateErr from 'utils/translateErr';\n\nconst usageText = 'set exit <span class=\"param\">Keyword</span> : <span class=\"param\">Attribute</span> = <span class=\"param\">Value</span>';\nconst shortDesc = 'Set an exit attribute';\nconst helpText =\n`<p>Set an exit attribute.</p>\n<p><code class=\"param\">Keyword</code> is the keyword of the exit to set.</p>`;\nconst dirAlias = {\n\tn: [ 'north' ],\n\tne: [ 'northeast' ],\n\te: [ 'east' ],\n\tse: [ 'southeast' ],\n\ts: [ 'south' ],\n\tsw: [ 'southwest' ],\n\tw: [ 'west' ],\n\tnw: [ 'northwest' ],\n};\n\nconst defaultAttr = [\n\t{\n\t\tkey: 'name',\n\t\tstepFactory: module => new TextStep('value', {\n\t\t\tname: \"exit name\",\n\t\t\tmaxLength: () => module.info.getCore().itemNameMaxLength,\n\t\t\terrTooLong: itemNameTooLong,\n\t\t}),\n\t\tdesc: l10n.l('setExit.nameDesc', \"Name of the exit.\"),\n\t\tsortOrder: 10,\n\t},\n\t{\n\t\tkey: 'keywords',\n\t\tvalue: 'keys',\n\t\tname: \"exit name\",\n\t\tstepFactory: module => new RepeatStep(\n\t\t\t'keys',\n\t\t\t(next, idx) => new TextStep('key-' + idx, {\n\t\t\t\tnext,\n\t\t\t\tregex: /^[\\s\\w]*\\w/,\n\t\t\t\tname: \"exit keyword\",\n\t\t\t\tmaxLength: () => module.info.getCore().keyMaxLength,\n\t\t\t\terrTooLong: keyTooLong,\n\t\t\t\tcompleter: module.cmdLists.getInRoomExits(),\n\t\t\t}),\n\t\t\t{\n\t\t\t\teach: (state, step, idx) => {\n\t\t\t\t\tlet v = (state.getParam('value') || []).slice(0);\n\t\t\t\t\tv.push(state.getParam(step.id));\n\t\t\t\t\tstate.setParam('value', v);\n\t\t\t\t},\n\t\t\t\tdelimiter: \",\",\n\t\t\t},\n\t\t),\n\t\tdesc: l10n.l('setExit.keywordsDesc', \"Comma-separated list of case-insensitive keywords used with the <code>go</code> command.\"),\n\t\tsortOrder: 20,\n\t},\n\t{\n\t\tkey: 'icon',\n\t\tstepFactory: module => new ListStep('value', new ItemList({\n\t\t\titems: [\n\t\t\t\t...exitIcons.map(icon => ({\n\t\t\t\t\tkey: icon,\n\t\t\t\t\talias: dirAlias[icon],\n\t\t\t\t})),\n\t\t\t\t{\n\t\t\t\t\tkey: \"none\",\n\t\t\t\t\tvalue: '',\n\t\t\t\t},\n\t\t\t],\n\t\t}), { name: \"is exit icon\" }),\n\t\tdesc: l10n.l('setExit.iconDesc', \"Icon for the exit. Value is {values} or <code>none</code>.\", {\n\t\t\tvalues: exitIcons.map(icon => `<code>${icon}</code>`).join(', '),\n\t\t}),\n\t\tsortOrder: 30,\n\t},\n\t{\n\t\tkey: 'navigation',\n\t\tvalue: 'nav',\n\t\tstepFactory: module => new ListStep('value', new ItemList({\n\t\t\titems: [\n\t\t\t\t...directions.map(dir => ({\n\t\t\t\t\tkey: dir,\n\t\t\t\t\talias: dirAlias[dir],\n\t\t\t\t})),\n\t\t\t\t{\n\t\t\t\t\tkey: \"none\",\n\t\t\t\t\tvalue: '',\n\t\t\t\t},\n\t\t\t],\n\t\t}), { name: \"is navigation direction\" }),\n\t\tdesc: l10n.l('setExit.navigationDesc', \"Navigation direction for the exit. Value is {values} or <code>none</code>.\", {\n\t\t\tvalues: directions.map(dir => `<code>${dir}</code>`).join(', '),\n\t\t}),\n\t\tsortOrder: 40,\n\t\talias: [ 'nav' ],\n\t},\n\t{\n\t\tkey: 'hidden',\n\t\tstepFactory: module => new ListStep('value', module.cmdLists.getBool(), { name: \"is hidden flag\" }),\n\t\tdesc: l10n.l('setExit.hiddenDesc', \"Flag telling if the exit is hidden, preventing it from being listed. Value is <code>yes</code> or <code>no</code>.\"),\n\t\tsortOrder: 190,\n\t},\n\t{\n\t\tkey: 'inactive',\n\t\tstepFactory: module => new ListStep('value', module.cmdLists.getBool(), { name: \"is inactive flag\" }),\n\t\tdesc: l10n.l('setExit.hiddenDesc', \"Flag telling if the exit is inactive, preventing it from being listed and used. Value is <code>yes</code> or <code>no</code>.\"),\n\t\tsortOrder: 200,\n\t},\n\t{\n\t\tkey: 'transparent',\n\t\tstepFactory: module => new ListStep('value', module.cmdLists.getBool(), { name: \"is transparent flag\" }),\n\t\tdesc: l10n.l('setExit.transparentDesc', \"Flag telling if the exit is transparent, allowing you to see awake characters in the target room. Value is <code>yes</code> or <code>no</code>.\"),\n\t\tsortOrder: 210,\n\t},\n\t{\n\t\tkey: 'leaveMsg',\n\t\tname: \"leave message\",\n\t\tdesc: l10n.l('setExit.leaveMsgDesc', \"Message seen by the origin room. Usually in present tense (eg. \\\"leaves ...\\\").\"),\n\t\tsortOrder: 300,\n\t},\n\t{\n\t\tkey: 'arriveMsg',\n\t\tname: \"arrival message\",\n\t\tdesc: l10n.l('setExit.arriveMsgDesc', \"Message seen by the arrival room. Usually in present tense (eg. \\\"arrives from ...\\\").\"),\n\t\tsortOrder: 310,\n\t},\n\t{\n\t\tkey: 'travelMsg',\n\t\tname: \"travel message\",\n\t\tdesc: l10n.l('setExit.travelMsgDesc', \"Message seen by the exit user. Usually in present tense (eg. \\\"goes ...\\\").\"),\n\t\tsortOrder: 320,\n\t},\n];\n\n/**\n * SetExit adds command to set exit attributes.\n */\nclass SetExit {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'cmd', 'cmdLists', 'charLog', 'help', 'info' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t\tthis.exitAttr = new ItemList({\n\t\t\tcompare: (a, b) => (a.sortOrder - b.sortOrder) || a.key.localeCompare(b.key),\n\t\t});\n\t\tfor (let o of defaultAttr) {\n\t\t\tthis.addAttribute(o);\n\t\t}\n\n\t\tthis.module.cmd.addPrefixCmd('set', {\n\t\t\tkey: 'exit',\n\t\t\tnext: [\n\t\t\t\tnew ListStep('exitId', this.module.cmdLists.getInRoomExits(), {\n\t\t\t\t\tname: \"exit\",\n\t\t\t\t\ttextId: 'exitKey',\n\t\t\t\t\terrRequired: step => new Err('setExit.keyRequired', \"What exit do you want to set?\"),\n\t\t\t\t}),\n\t\t\t\tnew DelimStep(\":\", { errRequired: null }),\n\t\t\t\tnew ListStep('attr', this.exitAttr, {\n\t\t\t\t\tname: \"exit attribute\",\n\t\t\t\t\ttoken: 'attr',\n\t\t\t\t}),\n\t\t\t],\n\t\t\tvalue: this._exec.bind(this),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'setExit',\n\t\t\tcategory: 'buildRooms',\n\t\t\tcmd: 'set exit',\n\t\t\tusage: l10n.l('setExit.usage', usageText),\n\t\t\tshortDesc: l10n.l('setExit.shortDesc', shortDesc),\n\t\t\tdesc: () => helpAttribDesc(l10n.t('setExit.helpText', helpText), this.exitAttr.getItems()),\n\t\t\tsortOrder: 70,\n\t\t});\n\t}\n\n\taddAttribute(attr) {\n\t\tlet next = attr.nextFactory ? attr.nextFactory(this.module) : attr.next;\n\t\tnext = next || [\n\t\t\tnew DelimStep(\"=\", { errRequired: null }),\n\t\t\tattr.stepFactory\n\t\t\t\t? attr.stepFactory(this.module)\n\t\t\t\t: new TextStep('value', {\n\t\t\t\t\tname: attr.name || attr.key,\n\t\t\t\t\tmaxLength: () => this.module.info.getCore().communicationMaxLength,\n\t\t\t\t\terrTooLong: communicationTooLong,\n\t\t\t\t}),\n\t\t];\n\t\tthis.exitAttr.addItem(Object.assign({}, attr, { next }));\n\t\treturn this;\n\t}\n\n\t_exec(ctx, p) {\n\t\tlet f = p.attr;\n\t\treturn typeof f == 'function'\n\t\t\t? f(ctx, p, this)\n\t\t\t: this.setExit(ctx, p);\n\t}\n\n\tsetExit(ctx, p) {\n\t\treturn ctx.char.call('setExit', Object.assign({ [p.attr]: p.value }, p.exitId\n\t\t\t? { exitId: p.exitId }\n\t\t\t: { exitKey: p.exitKey },\n\t\t)).then(() => {\n\t\t\tthis.module.charLog.logInfo(ctx.char, l10n.l('setExit.updatedExit', \"Exit attribute was successfully set.\"));\n\t\t}).catch(err => {\n\t\t\tthrow translateErr.exitNotFound(err, p.exitKey);\n\t\t});\n\t}\n}\n\nexport default SetExit;\n","import l10n from 'modapp-l10n';\nimport NumberStep from 'classes/NumberStep';\nimport * as translateErr from 'utils/translateErr';\n\n/**\n * SetExitOrder adds command to set exit attributes.\n */\nclass SetExitOrder {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'setExit', 'charLog' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.setExit.addAttribute({\n\t\t\tkey: 'order',\n\t\t\tstepFactory: () => new NumberStep('order', { name: \"exit order position\" }),\n\t\t\tdesc: l10n.l('setExitOrder.orderDesc', \"Order position of the exit, starting with 1.\"),\n\t\t\tvalue: (ctx, p) => this.setExitOrder(ctx.char, p.exitId\n\t\t\t\t? { exitId: p.exitId, order: p.order - 1 }\n\t\t\t\t: { exitKey: p.exitKey, order: p.order - 1 },\n\t\t\t),\n\t\t\tsortOrder: 100,\n\t\t});\n\t}\n\n\tsetExitOrder(char, params) {\n\t\treturn char.call('setExitOrder', params).then(result => {\n\t\t\tthis.module.charLog.logInfo(char, l10n.l('setExitOrder.exitOrderSet', \"Exit order was successfully set.\"));\n\t\t}).catch(err => {\n\t\t\tthrow translateErr.exitNotFound(err, params.exitKey);\n\t\t});\n\t}\n}\n\nexport default SetExitOrder;\n","import l10n from 'modapp-l10n';\nimport DelimStep from 'classes/DelimStep';\nimport ListStep from 'classes/ListStep';\nimport TextStep from 'classes/TextStep';\nimport ItemList from 'classes/ItemList';\nimport helpAttribDesc from 'utils/helpAttribDesc';\nimport { descriptionTooLong, propertyTooLong, itemNameTooLong, keyTooLong } from 'utils/cmdErr';\n\nconst usageText = 'set profile <span class=\"param\">Keyword</span> : <span class=\"param\">Attribute</span> = <span class=\"param\">Value</span>';\nconst shortDesc = 'Set a character profile attribute';\nconst helpText =\n`<p>Set a character profile attribute.</p>\n<p><code class=\"param\">Keyword</code> is the keyword for the character profile.</p>`;\n\nconst defaultAttr = [\n\t{\n\t\tkey: 'name',\n\t\tstepFactory: module => new TextStep('value', {\n\t\t\tname: \"profile name\",\n\t\t\tmaxLength: () => module.info.getCore().itemNameMaxLength,\n\t\t\terrTooLong: itemNameTooLong,\n\t\t}),\n\t\tdesc: l10n.l('setProfile.nameDesc', \"A descriptive profile name.\"),\n\t\tsortOrder: 10,\n\t},\n\t{\n\t\tkey: 'keyword',\n\t\tvalue: 'key',\n\t\tstepFactory: module => new TextStep('value', {\n\t\t\tregex: /^[\\w\\s]*\\w/,\n\t\t\tname: \"character profile keyword\",\n\t\t\tmaxLength: () => module.info.getCore().keyMaxLength,\n\t\t\terrTooLong: keyTooLong,\n\t\t}),\n\t\tdesc: l10n.l('setProfile.keywordDesc', \"Profile keyword.\"),\n\t\tsortOrder: 20,\n\t},\n\t{\n\t\tkey: 'desc',\n\t\tstepFactory: module => new TextStep('value', {\n\t\t\tname: \"profile's character description\",\n\t\t\tmaxLength: () => module.info.getCore().descriptionMaxLength,\n\t\t\terrTooLong: descriptionTooLong,\n\t\t\tspanLines: true,\n\t\t\tformatText: true,\n\t\t}),\n\t\tdesc: l10n.l('setProfile.descDesc', \"Description of the character's appearance. It may be formatted and span multiple paragraphs.\"),\n\t\tsortOrder: 30,\n\t},\n\t{\n\t\tkey: 'gender',\n\t\tstepFactory: module => new TextStep('value', {\n\t\t\tname: \"profile's character gender\",\n\t\t\tmaxLength: () => module.info.getCore().propertyMaxLength,\n\t\t\terrTooLong: propertyTooLong,\n\t\t}),\n\t\tdesc: l10n.l('setProfile.genderDesc', \"Gender of the character.\"),\n\t\tsortOrder: 40,\n\t},\n\t{\n\t\tkey: 'species',\n\t\tstepFactory: module => new TextStep('value', {\n\t\t\tname: \"profile's character species\",\n\t\t\tmaxLength: () => module.info.getCore().propertyMaxLength,\n\t\t\terrTooLong: propertyTooLong,\n\t\t}),\n\t\tdesc: l10n.l('setProfile.speciesDesc', \"Species of the character.\"),\n\t\tsortOrder: 50,\n\t},\n];\n\n/**\n * SetProfile adds command to set profile attributes.\n */\nclass SetProfile {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'cmd', 'cmdLists', 'charLog', 'help', 'info' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t\tthis.profileAttr = new ItemList({\n\t\t\tcompare: (a, b) => (a.sortOrder - b.sortOrder) || a.key.localeCompare(b.key),\n\t\t});\n\t\tfor (let o of defaultAttr) {\n\t\t\tthis.addAttribute(o);\n\t\t}\n\n\t\tthis.module.cmd.addPrefixCmd('set', {\n\t\t\tkey: 'profile',\n\t\t\tnext: [\n\t\t\t\tnew ListStep('profileId', this.module.cmdLists.getCharProfiles(), {\n\t\t\t\t\tname: \"character profile\",\n\t\t\t\t}),\n\t\t\t\tnew DelimStep(\":\", { errRequired: null }),\n\t\t\t\tnew ListStep('attr', this.profileAttr, {\n\t\t\t\t\tname: \"character profile attribute\",\n\t\t\t\t\ttoken: 'attr',\n\t\t\t\t}),\n\t\t\t],\n\t\t\tvalue: (ctx, p) => typeof p.attr == 'function'\n\t\t\t\t? p.attr(ctx, p)\n\t\t\t\t: this.setProfile(ctx.char, {\n\t\t\t\t\tprofileId: p.profileId,\n\t\t\t\t\t[p.attr]: p.value,\n\t\t\t\t}),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'setProfile',\n\t\t\tcategory: 'profile',\n\t\t\tcmd: 'set profile',\n\t\t\tusage: l10n.l('setProfile.usage', usageText),\n\t\t\tshortDesc: l10n.l('setProfile.shortDesc', shortDesc),\n\t\t\tdesc: () => helpAttribDesc(l10n.t('setProfile.helpText', helpText), this.profileAttr.getItems()),\n\t\t\tsortOrder: 130,\n\t\t});\n\t}\n\n\taddAttribute(attr) {\n\t\tlet next = attr.nextFactory ? attr.nextFactory(this.module) : attr.next;\n\t\tnext = typeof next == 'undefined'\n\t\t\t? [\n\t\t\t\tnew DelimStep(\"=\", { errRequired: null }),\n\t\t\t\tattr.stepFactory\n\t\t\t\t\t? attr.stepFactory(this.module)\n\t\t\t\t\t: new TextStep('value', {\n\t\t\t\t\t\tname: attr.name || attr.key,\n\t\t\t\t\t}),\n\t\t\t]\n\t\t\t: next;\n\t\tthis.profileAttr.addItem(Object.assign({}, attr, { next }));\n\t\treturn this;\n\t}\n\n\tsetProfile(char, params) {\n\t\treturn char.call('setProfile', params)\n\t\t\t.then(result => this.module.charLog.logInfo(char, l10n.l('setProfile.characterProfileSet', \"Successfully set attribute of profile \\\"{name}\\\".\", result.profile)));\n\t}\n}\n\nexport default SetProfile;\n","import l10n from 'modapp-l10n';\n\n/**\n * SetProfileAvatar adds command to set profile avatar to current avatar.\n */\nclass SetProfileAvatar {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'setProfile', 'charLog' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.setProfile.addAttribute({\n\t\t\tkey: 'avatar',\n\t\t\tdesc: l10n.l('setProfileAvatar.avatarDesc', \"Value is omitted. Set profile avatar to character's current avatar.\"),\n\t\t\tvalue: this._setProfileAvatar.bind(this),\n\t\t\tnext: null,\n\t\t\tsortOrder: 100,\n\t\t});\n\t}\n\n\t_setProfileAvatar(ctx, params) {\n\t\tlet char = ctx.char;\n\t\treturn char.call('copyProfileAvatar', {\n\t\t\tprofileId: params.profileId,\n\t\t}).then(result => this.module.charLog.logInfo(char, l10n.l('setProfile.characterProfileSet', \"Successfully set avatar of profile \\\"{name}\\\".\", result.profile)));\n\t}\n}\n\nexport default SetProfileAvatar;\n","import l10n from 'modapp-l10n';\n\n/**\n * SetProfileImage adds command to set profile image to current image.\n */\nclass SetProfileImage {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'setProfile', 'charLog' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.setProfile.addAttribute({\n\t\t\tkey: 'image',\n\t\t\tdesc: l10n.l('setProfileImage.imageDesc', \"Value is omitted. Set profile image to character's current image.\"),\n\t\t\tvalue: this._setProfileImage.bind(this),\n\t\t\tnext: null,\n\t\t\tsortOrder: 100,\n\t\t});\n\t}\n\n\t_setProfileImage(ctx, params) {\n\t\tlet char = ctx.char;\n\t\treturn char.call('copyProfileImage', {\n\t\t\tprofileId: params.profileId,\n\t\t}).then(result => this.module.charLog.logInfo(char, l10n.l('setProfile.characterProfileSet', \"Successfully set image of profile \\\"{name}\\\".\", result.profile)));\n\t}\n}\n\nexport default SetProfileImage;\n","import l10n from 'modapp-l10n';\nimport DelimStep from 'classes/DelimStep';\nimport ListStep from 'classes/ListStep';\nimport TextStep from 'classes/TextStep';\nimport ItemList from 'classes/ItemList';\nimport helpAttribDesc from 'utils/helpAttribDesc';\nimport { descriptionTooLong } from 'utils/cmdErr';\n\nconst usageText = 'set puppet <span class=\"param\">Attribute</span> <span class=\"opt\">=</span> <span class=\"param\">Value</span>';\nconst shortDesc = 'Set a puppet attribute';\nconst helpText =\n`<p>Set a puppet specific attribute.</p>`;\n\nconst defaultAttr = [\n\t{\n\t\tkey: 'howtoplay',\n\t\tstepFactory: module => new TextStep('value', {\n\t\t\tname: \"how to play puppet\",\n\t\t\tmaxLength: () => module.info.getCore().descriptionMaxLength,\n\t\t\terrTooLong: descriptionTooLong,\n\t\t\tspanLines: true,\n\t\t\tformatText: true,\n\t\t}),\n\t\tdesc: l10n.l('setPuppet.howToPlayDesc', \"Information on how to play the puppet. It may be formatted and span multiple paragraphs.\"),\n\t\tsortOrder: 10,\n\t},\n];\n\n/**\n * SetPuppet adds command to set extended puppet attributes.\n */\nclass SetPuppet {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'cmd', 'charLog', 'help', 'info' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t\tthis.puppetAttr = new ItemList({\n\t\t\tcompare: (a, b) => (a.sortOrder - b.sortOrder) || a.key.localeCompare(b.key),\n\t\t});\n\t\tfor (let o of defaultAttr) {\n\t\t\tthis.addAttribute(o);\n\t\t}\n\n\t\tthis.module.cmd.addPrefixCmd('set', {\n\t\t\tkey: 'puppet',\n\t\t\tnext: new ListStep('attr', this.puppetAttr, {\n\t\t\t\tname: \"puppet attribute\",\n\t\t\t\ttoken: 'attr',\n\t\t\t}),\n\t\t\tvalue: this.setPuppet.bind(this),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'setPuppet',\n\t\t\tcategory: 'puppets',\n\t\t\tcmd: 'set puppet',\n\t\t\tusage: l10n.l('setPuppet.usage', usageText),\n\t\t\tshortDesc: l10n.l('setPuppet.shortDesc', shortDesc),\n\t\t\tdesc: () => helpAttribDesc(l10n.t('setPuppet.helpText', helpText), this.puppetAttr.getItems()),\n\t\t\tsortOrder: 200,\n\t\t});\n\t}\n\n\taddAttribute(attr) {\n\t\tlet next = attr.nextFactory ? attr.nextFactory(this.module) : attr.next;\n\t\tif (!next) {\n\t\t\tnext = attr.stepFactory\n\t\t\t\t? attr.stepFactory(this.module)\n\t\t\t\t: new TextStep('value', {\n\t\t\t\t\tname: attr.name || attr.key,\n\t\t\t\t});\n\t\t\tnext = Array.isArray(next) ? next : [ next ];\n\t\t\tnext.unshift(new DelimStep(\"=\", { errRequired: null }));\n\t\t}\n\t\tthis.puppetAttr.addItem(Object.assign({}, attr, { next }));\n\t\treturn this;\n\t}\n\n\tsetPuppet(ctx, p) {\n\t\treturn ctx.char.call('setPuppet', {\n\t\t\t[p.attr]: p.value,\n\t\t}).then(() => {\n\t\t\tthis.module.charLog.logInfo(ctx.char, l10n.l('setPuppet.updatedPuppet', \"Puppet attribute was successfully set.\"));\n\t\t});\n\t}\n}\n\nexport default SetPuppet;\n","import l10n from 'modapp-l10n';\nimport DelimStep from 'classes/DelimStep';\nimport ListStep from 'classes/ListStep';\nimport TextStep from 'classes/TextStep';\nimport IDStep from 'classes/IDStep';\nimport ItemList from 'classes/ItemList';\nimport Err from 'classes/Err';\nimport helpAttribDesc from 'utils/helpAttribDesc';\nimport parseDuration, { durationRegex } from 'utils/parseDuration';\nimport { descriptionTooLong, itemNameTooLong } from 'utils/cmdErr';\n\nconst usageText = 'set room <span class=\"param\">Attribute</span> = <span class=\"param\">Value</span>';\nconst shortDesc = 'Set a room attribute';\nconst helpText =\n`<p>Set an attribute of current room.</p>`;\n\nconst defaultAttr = [\n\t{\n\t\tkey: 'name',\n\t\tstepFactory: module => new TextStep('value', {\n\t\t\tname: \"room name\",\n\t\t\tmaxLength: () => module.info.getCore().itemNameMaxLength,\n\t\t\terrTooLong: itemNameTooLong,\n\t\t}),\n\t\tdesc: l10n.l('setRoom.nameDesc', \"Name of the room.\"),\n\t\tsortOrder: 10,\n\t},\n\t{\n\t\tkey: 'desc',\n\t\tstepFactory: module => new TextStep('value', {\n\t\t\tname: \"room description\",\n\t\t\tmaxLength: () => module.info.getCore().descriptionMaxLength,\n\t\t\terrTooLong: descriptionTooLong,\n\t\t\tspanLines: true,\n\t\t\tformatText: true,\n\t\t}),\n\t\tdesc: l10n.l('setRoom.descDesc', \"Description of the room. It may be formatted and span multiple paragraphs.\"),\n\t\tsortOrder: 20,\n\t},\n\t{\n\t\tkey: 'area',\n\t\tstepFactory: module => new IDStep('value', {\n\t\t\tname: \"area ID\",\n\t\t\tlist: () => {\n\t\t\t\tlet c = module.player.getActiveChar();\n\t\t\t\treturn ((c && c.ownedAreas && c.ownedAreas.toArray()) || []).map(v => v.id);\n\t\t\t},\n\t\t\telse: new ListStep('value', module.cmdLists.getCharOwnedAreas(true), {\n\t\t\t\tname: \"area\",\n\t\t\t}),\n\t\t}),\n\t\tdesc: l10n.l('setRoom.areaDesc', \"#AreaID, or name of owned area, to set for the room. Or <code>none</code> to unset current area. List owned areas with <code>list areas</code>.\"),\n\t\tvalue: (ctx, p, self) => self.setRoomArea(ctx.char, p.value),\n\t\tsortOrder: 25,\n\t},\n\t{\n\t\tkey: 'dark',\n\t\tvalue: 'isdark',\n\t\tlias: [ 'isdark' ],\n\t\tstepFactory: module => new ListStep('value', module.cmdLists.getBool(), { name: \"is dark flag\" }),\n\t\tdesc: l10n.l('setRoom.isDarkDesc', \"Flag telling if the room is dark, preventing characters to see who else are in the room. Value is <code>yes</code> or <code>no</code>.\"),\n\t\tsortOrder: 30,\n\t},\n\t{\n\t\tkey: 'quiet',\n\t\tvalue: 'isquiet',\n\t\talias: [ 'isquiet' ],\n\t\tstepFactory: module => new ListStep('value', module.cmdLists.getBool(), { name: \"is quiet flag\" }),\n\t\tdesc: l10n.l('setRoom.isQuietDesc', \"Flag telling if the room is quiet, preventing characters to communicate inside the room. Value is <code>yes</code> or <code>no</code>.\"),\n\t\tsortOrder: 40,\n\t},\n\t{\n\t\tkey: 'home',\n\t\tvalue: 'ishome',\n\t\talias: [ 'ishome' ],\n\t\tstepFactory: module => new ListStep('value', module.cmdLists.getBool(), { name: \"is home flag\" }),\n\t\tdesc: l10n.l('setRoom.isHomeDesc', \"Flag telling if the room allows residents, allowing characters to set it as home. Value is <code>yes</code> or <code>no</code>.\"),\n\t\tsortOrder: 50,\n\t},\n\t{\n\t\tkey: 'teleport',\n\t\tvalue: 'isteleport',\n\t\talias: [ 'isteleport' ],\n\t\tstepFactory: module => new ListStep('value', module.cmdLists.getBool(), { name: \"is teleport flag\" }),\n\t\tdesc: l10n.l('setRoom.isTeleportDesc', \"Flag telling if other characters can add the room as a teleport destination. Value is <code>yes</code> or <code>no</code>.\"),\n\t\tsortOrder: 60,\n\t},\n\t{\n\t\tkey: 'instance',\n\t\tvalue: 'isinstance',\n\t\talias: [ 'isinstance' ],\n\t\tstepFactory: module => new ListStep('value', module.cmdLists.getBool(), { name: \"is instance flag\" }),\n\t\tdesc: l10n.l('setRoom.isInstanceDesc', \"Flag telling if the room may host characters in multiple instances. Value is <code>yes</code> or <code>no</code>.\"),\n\t\tsortOrder: 70,\n\t},\n\t{\n\t\tkey: 'autosweep',\n\t\tstepFactory: module => new ListStep('value', module.cmdLists.getBool(), { name: \"autosweep flag\" }),\n\t\tdesc: l10n.l('setRoom.autosweepDesc', \"Flag telling if the room should be automatically swept from sleepers. Value is <code>yes</code> or <code>no</code>.\"),\n\t\tsortOrder: 80,\n\t},\n\t{\n\t\tkey: 'autosweepdelay',\n\t\tstepFactory: () => new TextStep('value', {\n\t\t\tname: \"autosweep delay\",\n\t\t\tregex: durationRegex,\n\t\t\terrRequired: () => new Err('setRoom.durationRequired', 'Enter a duration in format \"1h 2m 3s\" for (h)ours, (m)inutes, and (s)econds.'),\n\t\t\tspellcheck: false,\n\t\t}),\n\t\tdesc: l10n.l('setRoom.autosweepDelayDesc', 'Delay before a sleeper is auto-swept from the room. Value format is <code>1h 2m 3s</code> for (h)ours, (m)inutes, and (s)econds.'),\n\t\tvalue: (ctx, p, self) => self._exec(ctx, { attr: 'autosweepdelay', value: parseDuration(p.value) }),\n\t\tsortOrder: 90,\n\t},\n];\n\n/**\n * SetRoom adds command to set the room attributes.\n */\nclass SetRoom {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'cmd', 'cmdLists', 'charLog', 'help', 'player', 'info' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t\tthis.roomAttr = new ItemList({\n\t\t\tcompare: (a, b) => (a.sortOrder - b.sortOrder) || a.key.localeCompare(b.key),\n\t\t});\n\t\tfor (let o of defaultAttr) {\n\t\t\tthis.addAttribute(o);\n\t\t}\n\n\t\tthis.module.cmd.addPrefixCmd('set', {\n\t\t\tkey: 'room',\n\t\t\tnext: new ListStep('attr', this.roomAttr, {\n\t\t\t\tname: \"room attribute\",\n\t\t\t\ttoken: 'attr',\n\t\t\t}),\n\t\t\tvalue: this._exec.bind(this),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'setRoom',\n\t\t\tcategory: 'buildRooms',\n\t\t\tcmd: 'set room',\n\t\t\tusage: l10n.l('setRoom.usage', usageText),\n\t\t\tshortDesc: l10n.l('setRoom.shortDesc', shortDesc),\n\t\t\tdesc: () => helpAttribDesc(l10n.t('setRoom.helpText', helpText), this.roomAttr.getItems()),\n\t\t\tsortOrder: 20,\n\t\t});\n\t}\n\n\taddAttribute(attr) {\n\t\tlet next = attr.nextFactory ? attr.nextFactory(this.module) : attr.next;\n\t\tif (!next) {\n\t\t\tnext = attr.stepFactory\n\t\t\t\t? attr.stepFactory(this.module)\n\t\t\t\t: new TextStep('value', {\n\t\t\t\t\tname: attr.name || attr.key,\n\t\t\t\t});\n\t\t\tnext = Array.isArray(next) ? next : [ next ];\n\t\t\tnext.unshift(new DelimStep(\"=\", { errRequired: null }));\n\t\t}\n\t\tthis.roomAttr.addItem(Object.assign({}, attr, { next }));\n\t\treturn this;\n\t}\n\n\t_exec(ctx, p) {\n\t\tlet f = p.attr;\n\t\treturn typeof f == 'function'\n\t\t\t? f(ctx, p, this)\n\t\t\t: ctx.char.call('setRoom', {\n\t\t\t\t[f]: p.value,\n\t\t\t}).then(() => {\n\t\t\t\tthis.module.charLog.logInfo(ctx.char, l10n.l('setRoom.updatedRoom', \"Room attribute was successfully set.\"));\n\t\t\t});\n\t}\n\n\tsetRoomArea(ctrl, areaId) {\n\t\t// When removing the room from an area, we use removeLocation instead,\n\t\t// as both area and room owners can call it.\n\t\treturn (areaId\n\t\t\t? ctrl.call('setRoom', { areaId }).then(() => {\n\t\t\t\tthis.module.charLog.logInfo(ctrl, l10n.l('setRoom.roomAreaSet', \"Room area was successfully set.\"));\n\t\t\t})\n\t\t\t: ctrl.call('removeLocation', { locationId: ctrl.inRoom.id, type: 'room' }).then(() => {\n\t\t\t\tthis.module.charLog.logInfo(ctrl, l10n.l('setRoom.roomRemovedFromArea', \"Room was successfully removed from area.\"));\n\t\t\t})\n\t\t);\n\t}\n}\n\nexport default SetRoom;\n","import l10n from 'modapp-l10n';\nimport ListStep from 'classes/ListStep';\nimport NumberStep from 'classes/NumberStep';\nimport DelimStep from 'classes/DelimStep';\n\n/**\n * SetRoomLocation adds command to set the room's location attributes.\n */\nclass SetRoomLocation {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'cmdLists', 'setRoom', 'charLog' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.setRoom.addAttribute({\n\t\t\tkey: 'private',\n\t\t\tstepFactory: () => new ListStep('private', this.module.cmdLists.getBool(), { name: \"private flag\" }),\n\t\t\tdesc: l10n.l('setRoomLocation.privateDesc', \"Flag telling if the room is private, preventing it from being listed in the area. Requires area ownership. Value is <code>yes</code> or <code>no</code>.\"),\n\t\t\tvalue: (ctx, p) => this.setRoomLocation(ctx.char, { private: p.private }),\n\t\t\tsortOrder: 200,\n\t\t});\n\t\tthis.module.setRoom.addAttribute({\n\t\t\tkey: 'position',\n\t\t\tstepFactory: () => ([\n\t\t\t\tnew NumberStep('mapx', { name: \"area map X position\" }),\n\t\t\t\tnew DelimStep(\",\", { errRequired: null }),\n\t\t\t\tnew NumberStep('mapy', { name: \"area map Y position\" }),\n\t\t\t]),\n\t\t\tdesc: l10n.l('setRoomLocation.positionDesc', \"The X,Y pixel coordinates of the room's position on the area's map image, starting with 0,0 in the top-left corner. Requires area ownership.\"),\n\t\t\tvalue: (ctx, p) => this.setRoomLocation(ctx.char, { mapX: p.mapx, mapY: p.mapy }),\n\t\t\tsortOrder: 210,\n\t\t});\n\t}\n\n\tsetRoomLocation(char, params) {\n\t\treturn char.call('setLocation', Object.assign({ locationId: char.inRoom.id, type: 'room' }, params)).then(() => {\n\t\t\tthis.module.charLog.logInfo(char, l10n.l('setRoomLocation.roomLocationSet', \"Room location attribute was successfully set\"));\n\t\t});\n\t}\n}\n\nexport default SetRoomLocation;\n","import l10n from 'modapp-l10n';\nimport Err from 'classes/Err';\n\n/**\n * SetRoomOwner adds the setRoom attribute to set the room owner.\n */\nclass SetRoomOwner {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'cmdSteps', 'setRoom', 'charLog' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.setRoom.addAttribute({\n\t\t\tkey: 'owner',\n\t\t\tstepFactory: () => this.module.cmdSteps.newAnyCharStep({\n\t\t\t\terrRequired: step => new Err('setRoomOwner.characterRequired', \"Who do you want to set as new owner?\"),\n\t\t\t\tsortOrder: [ 'awake', 'watch', 'room' ],\n\t\t\t}),\n\t\t\tdesc: l10n.l('setRoomOwner.ownerDesc', \"Name of the new owner. To give ownership to another player's character, use the <code>request room owner</code> command instead.\"),\n\t\t\tvalue: (ctx, p) => this.setRoomOwner(ctx.char, p.charId\n\t\t\t\t? { charId: p.charId, roomId: ctx.char.inRoom.id }\n\t\t\t\t: { charName: p.charName, roomId: ctx.char.inRoom.id },\n\t\t\t),\n\t\t\tsortOrder: 100,\n\t\t});\n\t}\n\n\tsetRoomOwner(char, params) {\n\t\treturn char.call('setRoomOwner', params).then(result => {\n\t\t\tlet c = result.newOwner;\n\t\t\tthis.module.charLog.logInfo(char, l10n.l('setRoomOwner.roomOwnerSet', \"Room owner was successfully set to {fullname}.\", { fullname: (c.name + ' ' + c.surname).trim() }));\n\t\t});\n\t}\n}\n\nexport default SetRoomOwner;\n","import l10n from 'modapp-l10n';\nimport DelimStep from 'classes/DelimStep';\nimport ListStep from 'classes/ListStep';\nimport TextStep from 'classes/TextStep';\nimport ItemList from 'classes/ItemList';\nimport helpAttribDesc from 'utils/helpAttribDesc';\nimport { descriptionTooLong, itemNameTooLong, keyTooLong } from 'utils/cmdErr';\n\nconst usageText = 'set roomprofile <span class=\"param\">Keyword</span> : <span class=\"param\">Attribute</span> = <span class=\"param\">Value</span>';\nconst shortDesc = 'Set a room profile attribute';\nconst helpText =\n`<p>Set a room profile attribute.</p>\n<p><code class=\"param\">Keyword</code> is the keyword for the room profile.</p>`;\n\nconst defaultAttr = [\n\t{\n\t\tkey: 'name',\n\t\tstepFactory: module => new TextStep('value', {\n\t\t\tname: \"profile name\",\n\t\t\tmaxLength: () => module.info.getCore().itemNameMaxLength,\n\t\t\terrTooLong: itemNameTooLong,\n\t\t}),\n\t\tdesc: l10n.l('setRoomProfile.nameDesc', \"A descriptive profile name.\"),\n\t\tsortOrder: 10,\n\t},\n\t{\n\t\tkey: 'keyword',\n\t\tvalue: 'key',\n\t\tstepFactory: module => new TextStep('value', {\n\t\t\tregex: /^[\\w\\s]*\\w/,\n\t\t\tname: \"room profile keyword\",\n\t\t\tmaxLength: () => module.info.getCore().keyMaxLength,\n\t\t\terrTooLong: keyTooLong,\n\t\t}),\n\t\tdesc: l10n.l('setRoomProfile.keywordDesc', \"Profile keyword.\"),\n\t\tsortOrder: 20,\n\t},\n\t{\n\t\tkey: 'desc',\n\t\tstepFactory: module => new TextStep('value', {\n\t\t\tname: \"profile's room description\",\n\t\t\tmaxLength: () => module.info.getCore().descriptionMaxLength,\n\t\t\terrTooLong: descriptionTooLong,\n\t\t\tspanLines: true,\n\t\t\tformatText: true,\n\t\t}),\n\t\tdesc: l10n.l('setRoomProfile.descDesc', \"Description of the room's appearance. It may be formatted and span multiple paragraphs.\"),\n\t\tsortOrder: 30,\n\t},\n];\n\n/**\n * SetRoomProfile adds command to set room profile attributes.\n */\nclass SetRoomProfile {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'cmd',\n\t\t\t'charLog',\n\t\t\t'help',\n\t\t\t'info',\n\t\t\t'roomAccess',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t\tthis.profileAttr = new ItemList({\n\t\t\tcompare: (a, b) => (a.sortOrder - b.sortOrder) || a.key.localeCompare(b.key),\n\t\t});\n\t\tfor (let o of defaultAttr) {\n\t\t\tthis.addAttribute(o);\n\t\t}\n\n\t\tthis.module.cmd.addPrefixCmd('set', {\n\t\t\tkey: 'roomprofile',\n\t\t\tnext: [\n\t\t\t\tnew ListStep('profileId', this.module.roomAccess.getInRoomProfileTokens(), {\n\t\t\t\t\tname: \"room profile\",\n\t\t\t\t}),\n\t\t\t\tnew DelimStep(\":\", { errRequired: null }),\n\t\t\t\tnew ListStep('attr', this.profileAttr, {\n\t\t\t\t\tname: \"room profile attribute\",\n\t\t\t\t\ttoken: 'attr',\n\t\t\t\t}),\n\t\t\t],\n\t\t\tvalue: (ctx, p) => typeof p.attr == 'function'\n\t\t\t\t? p.attr(ctx, p)\n\t\t\t\t: this.setRoomProfile(ctx.char, {\n\t\t\t\t\tprofileId: p.profileId,\n\t\t\t\t\t[p.attr]: p.value,\n\t\t\t\t}),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'setRoomProfile',\n\t\t\tcategory: 'buildRooms',\n\t\t\tcmd: 'set roomprofile',\n\t\t\tusage: l10n.l('setRoomProfile.usage', usageText),\n\t\t\tshortDesc: l10n.l('setRoomProfile.shortDesc', shortDesc),\n\t\t\tdesc: () => helpAttribDesc(l10n.t('setRoomProfile.helpText', helpText), this.profileAttr.getItems()),\n\t\t\tsortOrder: 130,\n\t\t});\n\t}\n\n\taddAttribute(attr) {\n\t\tlet next = attr.nextFactory ? attr.nextFactory(this.module) : attr.next;\n\t\tnext = typeof next == 'undefined'\n\t\t\t? [\n\t\t\t\tnew DelimStep(\"=\", { errRequired: null }),\n\t\t\t\tattr.stepFactory\n\t\t\t\t\t? attr.stepFactory(this.module)\n\t\t\t\t\t: new TextStep('value', {\n\t\t\t\t\t\tname: attr.name || attr.key,\n\t\t\t\t\t}),\n\t\t\t]\n\t\t\t: next;\n\t\tthis.profileAttr.addItem(Object.assign({}, attr, { next }));\n\t\treturn this;\n\t}\n\n\tsetRoomProfile(char, params) {\n\t\treturn char.call('setRoomProfile', params)\n\t\t\t.then(result => this.module.charLog.logInfo(char, l10n.l('setRoomProfile.roomProfileSet', \"Successfully set attribute of room profile \\\"{name}\\\".\", result.profile)));\n\t}\n}\n\nexport default SetRoomProfile;\n","import l10n from 'modapp-l10n';\n\n/**\n * SetRoomProfileImage adds command to set room profile image to current room\n * image.\n */\nclass SetRoomProfileImage {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'setRoomProfile',\n\t\t\t'charLog',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.setRoomProfile.addAttribute({\n\t\t\tkey: 'image',\n\t\t\tdesc: l10n.l('setRoomProfileImage.imageDesc', \"Value is omitted. Set room profile image to room's current image.\"),\n\t\t\tvalue: this._setRoomProfileImage.bind(this),\n\t\t\tnext: null,\n\t\t\tsortOrder: 100,\n\t\t});\n\t}\n\n\t_setRoomProfileImage(ctx, params) {\n\t\tlet char = ctx.char;\n\t\treturn char.call('copyRoomProfileImage', {\n\t\t\tprofileId: params.profileId,\n\t\t}).then(result => this.module.charLog.logInfo(char, l10n.l('setRoomProfile.roomProfileSet', \"Successfully set image of room profile \\\"{name}\\\".\", result.profile)));\n\t}\n}\n\nexport default SetRoomProfileImage;\n","import l10n from 'modapp-l10n';\nimport DelimStep from 'classes/DelimStep';\nimport ListStep from 'classes/ListStep';\nimport TextStep from 'classes/TextStep';\nimport IDStep from 'classes/IDStep';\nimport ItemList from 'classes/ItemList';\nimport helpAttribDesc from 'utils/helpAttribDesc';\nimport { scriptTooLong, keyTooLong } from 'utils/cmdErr';\nimport isError from 'utils/isError';\nimport ScriptCompileError from 'components/ScriptCompileError';\n\nconst usageText = 'set roomscript <span class=\"param\">Keyword<span class=\"comment\">/</span>#Script ID</span> : <span class=\"param\">Attribute</span> = <span class=\"param\">Value</span>';\nconst shortDesc = 'Set a room script attribute';\nconst helpText =\n`<p>Set a room script attribute.</p>\n<p>For info on how to see room script info, type: <code>help roomscript</code></p>\n<p class=\"common--formattext\">For more information and script examples, see the <a href=\"https://github.com/mucklet/mucklet-script#readme\" target=\"_blank\" rel=\"noopener noreferrer\" title=\"https://github.com/mucklet/mucklet-script\">mucklet-script</a> development resources.</p>\n<p><code class=\"param\">Keyword</code> is the keyword for the room script.</p>\n<p><code class=\"param\">#ScriptID</code> is the ID of the script.</p>`;\nconst examples = [\n\t{ cmd: 'set roomscript test : active = yes', desc: l10n.l('setRoomScript.activateTestDesc', \"Activates the <code>test</code> room script.\") },\n];\n\nconst defaultAttr = [\n\t{\n\t\tkey: 'keyword',\n\t\tvalue: 'key',\n\t\tstepFactory: module => new TextStep('value', {\n\t\t\tregex: /^[\\w\\s]*\\w/,\n\t\t\tname: \"room script keyword\",\n\t\t\tmaxLength: () => module.info.getCore().keyMaxLength,\n\t\t\terrTooLong: keyTooLong,\n\t\t}),\n\t\tdesc: l10n.l('setRoomScript.keywordDesc', \"Script keyword.\"),\n\t\tsortOrder: 10,\n\t},\n\t{\n\t\tkey: 'source',\n\t\tstepFactory: module => new TextStep('value', {\n\t\t\tname: \"source code\",\n\t\t\ttoken: 'code',\n\t\t\tmaxLength: () => module.info.getCore().scriptMaxLength,\n\t\t\terrTooLong: scriptTooLong,\n\t\t\tspanLines: true,\n\t\t\ttrimSpace: false,\n\t\t\tspellcheck: false,\n\t\t}),\n\t\tdesc: l10n.l('setRoomScript.sourceDesc', \"Source code. It may be formatted and span multiple paragraphs.\"),\n\t\tsortOrder: 20,\n\t},\n\t{\n\t\tkey: 'active',\n\t\tstepFactory: module => new ListStep('value', module.cmdLists.getBool(), { name: \"active flag\" }),\n\t\tdesc: l10n.l('setRoomScript.activeDesc', \"Flag telling if the script is active. Value is <code>yes</code> or <code>no</code>.\"),\n\t\tsortOrder: 30,\n\t},\n];\n\n/**\n * SetRoomScript adds command to set room script attributes.\n */\nclass SetRoomScript {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'cmd',\n\t\t\t'cmdLists',\n\t\t\t'charLog',\n\t\t\t'help',\n\t\t\t'info',\n\t\t\t'roomAccess',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t\tthis.scriptAttr = new ItemList({\n\t\t\tcompare: (a, b) => (a.sortOrder - b.sortOrder) || a.key.localeCompare(b.key),\n\t\t});\n\t\tfor (let o of defaultAttr) {\n\t\t\tthis.addAttribute(o);\n\t\t}\n\n\t\tthis.module.cmd.addPrefixCmd('set', {\n\t\t\tkey: 'roomscript',\n\t\t\tnext: [\n\t\t\t\tnew IDStep('scriptId', {\n\t\t\t\t\tname: \"script key or ID\",\n\t\t\t\t\telse: new ListStep('scriptId', this.module.roomAccess.getInRoomScriptTokens(), {\n\t\t\t\t\t\tname: \"room script\",\n\t\t\t\t\t}),\n\t\t\t\t}),\n\t\t\t\tnew DelimStep(\":\", { errRequired: null }),\n\t\t\t\tnew ListStep('attr', this.scriptAttr, {\n\t\t\t\t\tname: \"room script attribute\",\n\t\t\t\t\ttoken: 'attr',\n\t\t\t\t}),\n\t\t\t],\n\t\t\tvalue: (ctx, p) => typeof p.attr == 'function'\n\t\t\t\t? p.attr(ctx, p)\n\t\t\t\t: this.setRoomScript(ctx.char, {\n\t\t\t\t\tscriptId: p.scriptId,\n\t\t\t\t\t[p.attr]: p.value,\n\t\t\t\t}),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'setRoomScript',\n\t\t\tcategory: 'buildRooms',\n\t\t\tcmd: 'set roomscript',\n\t\t\tusage: l10n.l('setRoomScript.usage', usageText),\n\t\t\tshortDesc: l10n.l('setRoomScript.shortDesc', shortDesc),\n\t\t\tdesc: () => helpAttribDesc(l10n.t('setRoomScript.helpText', helpText), this.scriptAttr.getItems()),\n\t\t\texamples,\n\t\t\tsortOrder: 230,\n\t\t});\n\t}\n\n\taddAttribute(attr) {\n\t\tlet next = attr.nextFactory ? attr.nextFactory(this.module) : attr.next;\n\t\tnext = typeof next == 'undefined'\n\t\t\t? [\n\t\t\t\tnew DelimStep(\"=\", { errRequired: null }),\n\t\t\t\tattr.stepFactory\n\t\t\t\t\t? attr.stepFactory(this.module)\n\t\t\t\t\t: new TextStep('value', {\n\t\t\t\t\t\tname: attr.name || attr.key,\n\t\t\t\t\t}),\n\t\t\t]\n\t\t\t: next;\n\t\tthis.scriptAttr.addItem(Object.assign({}, attr, { next }));\n\t\treturn this;\n\t}\n\n\tsetRoomScript(char, params) {\n\t\treturn char.call('setRoomScript', params)\n\t\t\t.then(result => this.module.charLog.logInfo(char, l10n.l('setRoomScript.roomScriptSet', \"Successfully updated room script \\\"{key}\\\".\", result.script)))\n\t\t\t.catch(err => {\n\t\t\t\tif (!isError(err, 'core.compileError')) {\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\t\t\t\tthrow new ScriptCompileError(err);\n\t\t\t});\n\t}\n}\n\nexport default SetRoomScript;\n","import l10n from 'modapp-l10n';\nimport DelimStep from 'classes/DelimStep';\nimport TextStep from 'classes/TextStep';\nimport ItemList from 'classes/ItemList';\nimport ListStep from 'classes/ListStep';\nimport ValueStep from 'classes/ValueStep';\nimport helpAttribDesc from 'utils/helpAttribDesc';\nimport { communicationTooLong } from 'utils/cmdErr';\n\nconst usageText = 'set room teleportmsgs : <span class=\"param\">Type</span> <span class=\"opt\">=</span> <span class=\"param\">Value</span>';\nconst shortDesc = 'Set a custom room teleport message';\nconst helpText =\n`<p>Set a custom teleport message for the current room.</p>`;\n\nconst defaultAttr = [\n\t{\n\t\tkey: 'leave',\n\t\tvalue: 'teleportLeaveMsg',\n\t\tname: \"leave message\",\n\t\tdesc: l10n.l('setRoomTeleportMsgs.leaveMsgDesc', \"Message seen by this room when a character teleports away from here. The character's name will be prepended.\"),\n\t\texamples: [{\n\t\t\tcmd: 'set room teleportmsgs : leave = enters the transport portal.',\n\t\t\tdesc: l10n.l('setRoomTeleportMsgs.leaveExample', \"Sets message seen when someone arrives.\"),\n\t\t}],\n\t\tsortOrder: 200,\n\t},\n\t{\n\t\tkey: 'arrive',\n\t\tvalue: 'teleportArriveMsg',\n\t\tname: \"arrival message\",\n\t\tdesc: l10n.l('setRoomTeleportMsgs.arriveMsgDesc', \"Message seen by this room when a character teleports here. The character's name will be prepended.\"),\n\t\texamples: [{\n\t\t\tcmd: 'set room teleportmsgs : arrive = exits the transport portal.',\n\t\t\tdesc: l10n.l('setRoomTeleportMsgs.arriveExample', \"Sets message seen when someone leaves.\"),\n\t\t}],\n\t\tsortOrder: 210,\n\t},\n\t{\n\t\tkey: 'travel',\n\t\tvalue: 'teleportTravelMsg',\n\t\tname: \"travel message\",\n\t\tdesc: l10n.l('setRoomTeleportMsgs.travelMsgDesc', \"Message seen by the teleporting character when they teleport here. The character's name will be prepended.\"),\n\t\texamples: [{\n\t\t\tcmd: 'set room teleportmsgs : travel = travels through the transport portal.',\n\t\t\tdesc: l10n.l('setRoomTeleportMsgs.travelExample', \"Sets message seen by the character arriving.\"),\n\t\t}],\n\t\tsortOrder: 220,\n\t},\n\t{\n\t\tkey: 'override',\n\t\tvalue: 'overrideCharTeleportMsgs',\n\t\tstepFactory: module => new ListStep('value', module.cmdLists.getBool(), { name: \"override character messages flag\" }),\n\t\tname: \"override character teleport message\",\n\t\tdesc: l10n.l('setRoomTeleportMsgs.overrideCharTeleportMsgsDesc', \"Flag to override any custom teleport messages set for the teleporting character. Value is <code>yes</code> or <code>no</code>.\"),\n\t\texamples: [{\n\t\t\tcmd: 'set room teleportmsgs : override = yes',\n\t\t\tdesc: l10n.l('setRoomTeleportMsgs.overrideExample', \"Sets flag to override character defined messages.\"),\n\t\t}],\n\t\tsortOrder: 230,\n\t},\n];\n\n/**\n * SetTeleportMsg adds teleportmsg settings to the set command.\n */\nclass SetTeleportMsg {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'help',\n\t\t\t'info',\n\t\t\t'setRoom',\n\t\t\t'cmdLists',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t\tthis.teleportMsgType = new ItemList({\n\t\t\tcompare: (a, b) => (a.sortOrder - b.sortOrder) || a.key.localeCompare(b.key),\n\t\t});\n\t\tfor (let o of defaultAttr) {\n\t\t\tthis.addAttribute(o);\n\t\t}\n\n\t\tthis.module.setRoom.addAttribute({\n\t\t\tkey: 'teleportmsgs',\n\t\t\tnextFactory: module => new DelimStep(\":\", {\n\t\t\t\tnext: new ListStep('attr', this.teleportMsgType, {\n\t\t\t\t\tname: \"teleport message type\",\n\t\t\t\t\ttoken: 'attr',\n\t\t\t\t}),\n\t\t\t\telse: [\n\t\t\t\t\tnew DelimStep(\"=\", { errRequired: null }),\n\t\t\t\t\tnew ValueStep('attr', 'customTeleportMsgs'),\n\t\t\t\t\tnew ListStep('value', this.module.cmdLists.getBool(), { name: \"yes or no value\" }),\n\t\t\t\t],\n\t\t\t}),\n\t\t\tdesc: l10n.l('setRoomTeleportMsg.teleportmsgsDesc', \"Use custom teleport messages. Value is <code>yes</code> or <code>no</code>. For setting specific messages, see <code>help set room teleportmsgs</code>.\"),\n\t\t\tsortOrder: 300,\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'setRoomTeleportMsgs',\n\t\t\tcmd: 'set room teleportmsgs',\n\t\t\tusage: l10n.l('setRoomTeleportMsgs.usage', usageText),\n\t\t\tshortDesc: l10n.l('setRoomTeleportMsgs.shortDesc', shortDesc),\n\t\t\tdesc: () => helpAttribDesc(l10n.t('setRoomTeleportMsgs.helpText', helpText), this.teleportMsgType.getItems(), {\n\t\t\t\tattribute: l10n.t('setRoomTeleportMsgs.type', `<code class=\"param\">Type</code>`),\n\t\t\t}),\n\t\t\texamples: () => {\n\t\t\t\tlet types = this.teleportMsgType.getItems();\n\t\t\t\tlet examples = [];\n\t\t\t\tfor (let t of types) {\n\t\t\t\t\tif (t.examples) {\n\t\t\t\t\t\texamples = examples.concat(t.examples);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn examples;\n\t\t\t},\n\t\t\tsortOrder: 25,\n\t\t});\n\t}\n\n\taddAttribute(attr) {\n\t\tlet next = attr.nextFactory ? attr.nextFactory(this.module) : attr.next;\n\t\tnext = next || [\n\t\t\tnew DelimStep(\"=\", { errRequired: null }),\n\t\t\tattr.stepFactory\n\t\t\t\t? attr.stepFactory(this.module)\n\t\t\t\t: new TextStep('value', {\n\t\t\t\t\tname: attr.name || attr.key,\n\t\t\t\t\tmaxLength: () => this.module.info.getCore().communicationMaxLength,\n\t\t\t\t\terrTooLong: communicationTooLong,\n\t\t\t\t}),\n\t\t];\n\t\tlet item = Object.assign({}, attr, { next });\n\t\tthis.teleportMsgType.addItem(item);\n\t\treturn this;\n\t}\n}\n\nexport default SetTeleportMsg;\n","import l10n from 'modapp-l10n';\nimport TextStep from 'classes/TextStep';\nimport DelimStep from 'classes/DelimStep';\nimport { propertyTooLong } from 'utils/cmdErr';\n\nconst usageText = 'status <span class=\"opt\"><span class=\"opt\">=</span> <span class=\"param\">Status</span></span>';\nconst shortDesc = `Set or clear status message`;\nconst helpText =\n`<p>Set or clear status message.</p>\n<p><code class=\"param\">Status</code> is the optional status message. If omitted, the current status is cleared.</p>\n<p>Alias: <code>set status</code></p>`;\n\nconst txtStatusSet = l10n.l('setStatus.statusSet', \"Status message set.\");\nconst txtStatusCleared = l10n.l('setStatus.statusCleared', \"Status message cleared.\");\n\n/**\n * SetStatus adds the set status command.\n */\nclass SetStatus {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'cmd', 'help', 'charLog', 'info' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t\tthis.module.cmd.addPrefixCmd('set', {\n\t\t\tkey: 'status',\n\t\t\tnext: [\n\t\t\t\tnew DelimStep(\"=\", { errRequired: null }),\n\t\t\t\tnew TextStep('status', {\n\t\t\t\t\tspanLines: false,\n\t\t\t\t\tmaxLength: () => module.info.getCore().propertyMaxLength,\n\t\t\t\t\terrTooLong: propertyTooLong,\n\t\t\t\t\terrRequired: null,\n\t\t\t\t}),\n\t\t\t],\n\t\t\tvalue: (ctx, p) => this.status(ctx.char, { status: p.status ? p.status.trim() : '' }),\n\t\t});\n\t\tthis.module.cmd.addCmd({\n\t\t\tkey: 'status',\n\t\t\tnext: [\n\t\t\t\tnew DelimStep(\"=\", { errRequired: null }),\n\t\t\t\tnew TextStep('status', {\n\t\t\t\t\tspanLines: false,\n\t\t\t\t\tmaxLength: () => module.info.getCore().propertyMaxLength,\n\t\t\t\t\terrTooLong: propertyTooLong,\n\t\t\t\t\terrRequired: null,\n\t\t\t\t}),\n\t\t\t],\n\t\t\tvalue: (ctx, p) => this.status(ctx.char, { status: p.status ? p.status.trim() : '' }),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'status',\n\t\t\tcategory: 'basic',\n\t\t\tcmd: 'status',\n\t\t\tusage: l10n.l('setStatus.usage', usageText),\n\t\t\tshortDesc: l10n.l('setStatus.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('setStatus.helpText', helpText),\n\t\t\tsortOrder: 100,\n\t\t});\n\t}\n\n\tstatus(char, params) {\n\t\treturn char.call('set', params).then(() => {\n\t\t\tthis.module.charLog.logInfo(char, params.status\n\t\t\t\t? txtStatusSet\n\t\t\t\t: txtStatusCleared,\n\t\t\t);\n\t });\n\t}\n}\n\nexport default SetStatus;\n","import l10n from 'modapp-l10n';\nimport DelimStep from 'classes/DelimStep';\nimport ListStep from 'classes/ListStep';\nimport TextStep from 'classes/TextStep';\nimport ValueStep from 'classes/ValueStep';\nimport ItemList from 'classes/ItemList';\nimport TokenList from 'classes/TokenList';\nimport { isResError } from 'resclient';\nimport { tagTokenRegex, tagExpandRegex } from 'utils/regex';\nimport helpAttribDesc from 'utils/helpAttribDesc';\nimport { keyRegex } from 'utils/regex';\nimport { descriptionTooLong, keyTooLong } from 'utils/cmdErr';\n\nconst usageText = 'set tag <span class=\"param\">Keyword</span> : <span class=\"param\">Attribute</span> = <span class=\"param\">Value</span>';\nconst shortDesc = 'Set a character tag attribute';\nconst helpText =\n`<p>Set a character tag attribute.</p>\n<p><code class=\"param\">Keyword</code> is the keyword for the tag.</p>`;\n\nconst defaultAttr = [\n\t{\n\t\tkey: 'keyword',\n\t\tvalue: 'key',\n\t\tstepFactory: module => new TextStep('value', {\n\t\t\tregex: keyRegex,\n\t\t\tname: \"tag keyword\",\n\t\t\tmaxLength: () => module.info.getTag().tagKeyMaxLength,\n\t\t\terrTooLong: keyTooLong,\n\t\t}),\n\t\tdesc: l10n.l('setTag.keywordDesc', \"Tag keyword. Only allowed for custom tags.\"),\n\t\tsortOrder: 10,\n\t},\n\t{\n\t\tkey: 'desc',\n\t\tstepFactory: module => new ValueStep('value', \"\", {\n\t\t\tnext: new TextStep('value', {\n\t\t\t\tname: \"tag description\",\n\t\t\t\tmaxLength: () => module.info.getTag().tagDescMaxLength,\n\t\t\t\terrTooLong: descriptionTooLong,\n\t\t\t\terrRequired: null,\n\t\t\t}),\n\t\t}),\n\t\tdesc: l10n.l('setTag.descDesc', \"Description of the tag. Only allowed for custom tags.\"),\n\t\tsortOrder: 20,\n\t},\n\t{\n\t\tkey: 'preference',\n\t\tvalue: 'pref',\n\t\tstepFactory: module => new ListStep('value', module.tags.getPreferenceList(), {\n\t\t\tname: \"preference\",\n\t\t}),\n\t\tdesc: l10n.l('setTag.prefDesc', \"Tag preference. May be <code>like</code> or <code>dislike</code>\"),\n\t\tsortOrder: 30,\n\t},\n];\n\n/**\n * SetTag adds command to set tag attributes.\n */\nclass SetTag {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'cmd', 'charLog', 'help', 'api', 'player', 'tags', 'info' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t\tthis.tagAttr = new ItemList({\n\t\t\tcompare: (a, b) => (a.sortOrder - b.sortOrder) || a.key.localeCompare(b.key),\n\t\t});\n\t\tfor (let o of defaultAttr) {\n\t\t\tthis.addAttribute(o);\n\t\t}\n\n\t\tthis.tagsList = new TokenList(() => {\n\t\t\tlet c = this.module.player.getActiveChar();\n\t\t\tlet p = (c && c.tags && c.tags.props) || {};\n\t\t\treturn Object.keys(p)\n\t\t\t\t.map(k => p[k])\n\t\t\t\t.filter(t => !isResError(t))\n\t\t\t\t.sort((a, b) => a.key.localeCompare(b.key) || a.id.localeCompare(b.id));\n\t\t}, {\n\t\t\tregex: tagTokenRegex,\n\t\t\texpandRegex: tagExpandRegex,\n\t\t\tisMatch: (t, key) => key === t.key ? { key, value: t.id } : false,\n\t\t\tisPrefix: (t, prefix) => !prefix || t.key.substring(0, prefix.length) === prefix\n\t\t\t\t? t.key\n\t\t\t\t: null,\n\t\t});\n\n\t\tthis.module.cmd.addPrefixCmd('set', {\n\t\t\tkey: 'tag',\n\t\t\tnext: [\n\t\t\t\tnew ListStep('tagId', this.tagsList, {\n\t\t\t\t\tname: \"tag\",\n\t\t\t\t}),\n\t\t\t\tnew DelimStep(\":\", { errRequired: null }),\n\t\t\t\tnew ListStep('attr', this.tagAttr, {\n\t\t\t\t\tname: \"tag attribute\",\n\t\t\t\t\ttoken: 'attr',\n\t\t\t\t}),\n\t\t\t],\n\t\t\tvalue: (ctx, p) => p.attr == 'pref'\n\t\t\t\t? this.setTagPref(ctx.char, p.tagId, p.value)\n\t\t\t\t: this.setTag(ctx.char, p.tagId, {\n\t\t\t\t\t[p.attr]: p.value,\n\t\t\t\t}),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'setTag',\n\t\t\tcategory: 'tags',\n\t\t\tcmd: 'set tag',\n\t\t\tusage: l10n.l('setTag.usage', usageText),\n\t\t\tshortDesc: l10n.l('setTag.shortDesc', shortDesc),\n\t\t\tdesc: () => helpAttribDesc(l10n.t('setTag.helpText', helpText), this.tagAttr.getItems()),\n\t\t\tsortOrder: 60,\n\t\t});\n\t}\n\n\taddAttribute(attr) {\n\t\tlet next = attr.nextFactory ? attr.nextFactory(this.module) : attr.next;\n\t\tnext = next || [\n\t\t\tnew DelimStep(\"=\", { errRequired: null }),\n\t\t\tattr.stepFactory\n\t\t\t\t? attr.stepFactory(this.module)\n\t\t\t\t: new TextStep('value', {\n\t\t\t\t\tname: attr.name || attr.key,\n\t\t\t\t}),\n\t\t];\n\t\tthis.tagAttr.addItem(Object.assign({}, attr, { next }));\n\t\treturn this;\n\t}\n\n\tsetTag(char, tagId, params) {\n\t\treturn this.module.api.call('tag.tag.' + tagId, 'set', params)\n\t\t\t.then(result => this.module.charLog.logInfo(char, l10n.l('setTag.tagAttributeSet', \"Successfully set attribute of tag [{tagKey}].\", { tagKey: result.tag.key })));\n\t}\n\n\tsetTagPref(char, tagId, pref) {\n\t\treturn this.module.api.call('tag.char.' + char.id + '.tags', 'setTags', { tags: { [tagId]: pref || 'like' }})\n\t\t\t.then(() => this.module.charLog.logInfo(char, l10n.l('setTag.tagPreferenceSet', \"Successfully set preference of tag\")));\n\t}\n}\n\nexport default SetTag;\n","import l10n from 'modapp-l10n';\nimport DelimStep from 'classes/DelimStep';\nimport ListStep from 'classes/ListStep';\nimport TextStep from 'classes/TextStep';\nimport ItemList from 'classes/ItemList';\nimport helpAttribDesc from 'utils/helpAttribDesc';\nimport { keyTooLong } from 'utils/cmdErr';\n\nconst usageText = 'set teleport <span class=\"param\">Keyword</span> : <span class=\"param\">Attribute</span> = <span class=\"param\">Value</span>';\nconst shortDesc = 'Set a teleport destination attribute';\nconst helpText =\n`<p>Set a teleport destination attribute.</p>\n<p><code class=\"param\">Keyword</code> is the keyword of the teleport destination to set.</p>`;\n\nconst defaultAttr = [\n\t{\n\t\tkey: 'keyword',\n\t\tvalue: 'key',\n\t\tstepFactory: module => new TextStep('value', {\n\t\t\tregex: /^[\\w\\s]*\\w/,\n\t\t\tname: \"teleport node keyword\",\n\t\t\tmaxLength: () => module.info.getCore().keyMaxLength,\n\t\t\terrTooLong: keyTooLong,\n\t\t}),\n\t\tdesc: l10n.l('setTeleportDesc', \"A new destination keyword.\"),\n\t\tsortOrder: 20,\n\t},\n];\n\n/**\n * SetTeleport adds command to set teleport attributes.\n */\nclass SetTeleport {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'cmd', 'cmdLists', 'charLog', 'help', 'info' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t\tthis.nodeAttr = new ItemList({\n\t\t\tcompare: (a, b) => (a.sortOrder - b.sortOrder) || a.key.localeCompare(b.key),\n\t\t});\n\t\tfor (let o of defaultAttr) {\n\t\t\tthis.addAttribute(o);\n\t\t}\n\n\t\tthis.module.cmd.addPrefixCmd('set', {\n\t\t\tkey: 'teleport',\n\t\t\tnext: [\n\t\t\t\tnew ListStep('nodeId', this.module.cmdLists.getTeleportNodes(), {\n\t\t\t\t\tname: \"teleport node\",\n\t\t\t\t}),\n\t\t\t\tnew DelimStep(\":\", { errRequired: null }),\n\t\t\t\tnew ListStep('attr', this.nodeAttr, {\n\t\t\t\t\tname: \"teleport node attribute\",\n\t\t\t\t\ttoken: 'attr',\n\t\t\t\t}),\n\t\t\t],\n\t\t\tvalue: (ctx, p) => this.setTeleport(ctx.char, {\n\t\t\t\tnodeId: p.nodeId,\n\t\t\t\t[p.attr]: p.value,\n\t\t\t}),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'setTeleport',\n\t\t\tcategory: 'transport',\n\t\t\tcmd: 'set teleport',\n\t\t\tusage: l10n.l('setTeleport.usage', usageText),\n\t\t\tshortDesc: l10n.l('setTeleport.shortDesc', shortDesc),\n\t\t\tdesc: () => helpAttribDesc(l10n.t('setTeleport.helpText', helpText), this.nodeAttr.getItems()),\n\t\t\tsortOrder: 230,\n\t\t});\n\t}\n\n\taddAttribute(attr) {\n\t\tlet next = attr.nextFactory ? attr.nextFactory(this.module) : attr.next;\n\t\tnext = next || [\n\t\t\tnew DelimStep(\"=\", { errRequired: null }),\n\t\t\tattr.stepFactory\n\t\t\t\t? attr.stepFactory(this.module)\n\t\t\t\t: new TextStep('value', {\n\t\t\t\t\tname: attr.name || attr.key,\n\t\t\t\t}),\n\t\t];\n\t\tthis.nodeAttr.addItem(Object.assign({}, attr, { next }));\n\t\treturn this;\n\t}\n\n\tsetTeleport(char, params) {\n\t\treturn char.call('setTeleport', params).then(() => {\n\t\t\tthis.module.charLog.logInfo(char, l10n.l('setTeleport.updatedTeleportNode', \"Teleport node was successfully set.\"));\n\t\t});\n\t}\n}\n\nexport default SetTeleport;\n","import l10n from 'modapp-l10n';\nimport DelimStep from 'classes/DelimStep';\nimport TextStep from 'classes/TextStep';\nimport ItemList from 'classes/ItemList';\nimport ListStep from 'classes/ListStep';\nimport ValueStep from 'classes/ValueStep';\nimport helpAttribDesc from 'utils/helpAttribDesc';\nimport { communicationTooLong } from 'utils/cmdErr';\n\nconst usageText = 'set teleportmsgs : <span class=\"param\">Type</span> <span class=\"opt\">=</span> <span class=\"param\">Value</span>';\nconst shortDesc = 'Set a custom teleport message for your character';\nconst helpText =\n`<p>Set a custom teleport message for your character.</p>`;\n\nconst defaultAttr = [\n\t{\n\t\tkey: 'leave',\n\t\tvalue: 'teleportLeaveMsg',\n\t\tname: \"leave message\",\n\t\tdesc: l10n.l('setTeleportMsgs.leaveMsgDesc', \"Message seen by the origin room when teleporting away. The character's name will be prepended.\"),\n\t\texamples: [{\n\t\t\tcmd: 'set teleportmsgs : leave = disappears in a cloud of smoke.',\n\t\t\tdesc: l10n.l('setTeleportMsgs.leaveExample', \"Sets message seen by the originating room.\"),\n\t\t}],\n\t\tsortOrder: 200,\n\t},\n\t{\n\t\tkey: 'arrive',\n\t\tvalue: 'teleportArriveMsg',\n\t\tname: \"arrival message\",\n\t\tdesc: l10n.l('setTeleportMsgs.arriveMsgDesc', \"Message seen by the arrival room when teleporting there. The character's name will be prepended.\"),\n\t\texamples: [{\n\t\t\tcmd: 'set teleportmsgs : arrive = appears in a cloud of smoke.',\n\t\t\tdesc: l10n.l('setTeleportMsgs.arriveExample', \"Sets message seen by the arrival room.\"),\n\t\t}],\n\t\tsortOrder: 210,\n\t},\n\t{\n\t\tkey: 'travel',\n\t\tvalue: 'teleportTravelMsg',\n\t\tname: \"travel message\",\n\t\tdesc: l10n.l('setTeleportMsgs.travelMsgDesc', \"Message seen by you when teleporting. The character's name will be prepended.\"),\n\t\texamples: [{\n\t\t\tcmd: 'set teleportmsgs : travel = teleports to a new place.',\n\t\t\tdesc: l10n.l('setTeleportMsgs.travelExample', \"Sets message seen by you when teleporting.\"),\n\t\t}],\n\t\tsortOrder: 220,\n\t},\n];\n\n/**\n * SetTeleportMsg adds teleportmsg settings to the set command.\n */\nclass SetTeleportMsg {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'help',\n\t\t\t'info',\n\t\t\t'set',\n\t\t\t'cmdLists',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t\tthis.teleportMsgType = new ItemList({\n\t\t\tcompare: (a, b) => (a.sortOrder - b.sortOrder) || a.key.localeCompare(b.key),\n\t\t});\n\t\tfor (let o of defaultAttr) {\n\t\t\tthis.addAttribute(o);\n\t\t}\n\n\t\tthis.module.set.addAttribute({\n\t\t\tkey: 'teleportmsgs',\n\t\t\tnextFactory: module => new DelimStep(\":\", {\n\t\t\t\tnext: new ListStep('attr', this.teleportMsgType, {\n\t\t\t\t\tname: \"teleport message type\",\n\t\t\t\t\ttoken: 'attr',\n\t\t\t\t}),\n\t\t\t\telse: [\n\t\t\t\t\tnew DelimStep(\"=\", { errRequired: null }),\n\t\t\t\t\tnew ValueStep('attr', 'customTeleportMsgs'),\n\t\t\t\t\tnew ListStep('value', this.module.cmdLists.getBool(), { name: \"yes or no value\" }),\n\t\t\t\t],\n\t\t\t}),\n\t\t\tdesc: l10n.l('setTeleportMsg.teleportmsgsDesc', \"Use custom teleport messages. Value is <code>yes</code> or <code>no</code>. For setting specific messages, see <code>help set teleportmsgs</code>.\"),\n\t\t\tsortOrder: 300,\n\t\t\t// value: this._exec.bind(this),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'setTeleportMsgs',\n\t\t\tcmd: 'set teleportmsgs',\n\t\t\tusage: l10n.l('setTeleportMsgs.usage', usageText),\n\t\t\tshortDesc: l10n.l('setTeleportMsgs.shortDesc', shortDesc),\n\t\t\tdesc: () => helpAttribDesc(l10n.t('setTeleportMsgs.helpText', helpText), this.teleportMsgType.getItems(), {\n\t\t\t\tattribute: l10n.t('setTeleportMsgs.type', `<code class=\"param\">Type</code>`),\n\t\t\t}),\n\t\t\texamples: () => {\n\t\t\t\tlet types = this.teleportMsgType.getItems();\n\t\t\t\tlet examples = [];\n\t\t\t\tfor (let t of types) {\n\t\t\t\t\tif (t.examples) {\n\t\t\t\t\t\texamples = examples.concat(t.examples);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn examples;\n\t\t\t},\n\t\t\tsortOrder: 15,\n\t\t});\n\t}\n\n\taddAttribute(attr) {\n\t\tlet next = attr.nextFactory ? attr.nextFactory(this.module) : attr.next;\n\t\tnext = next || [\n\t\t\tnew DelimStep(\"=\", { errRequired: null }),\n\t\t\tattr.stepFactory\n\t\t\t\t? attr.stepFactory(this.module)\n\t\t\t\t: new TextStep('value', {\n\t\t\t\t\tname: attr.name || attr.key,\n\t\t\t\t\tmaxLength: () => this.module.info.getCore().communicationMaxLength,\n\t\t\t\t\terrTooLong: communicationTooLong,\n\t\t\t\t}),\n\t\t];\n\t\tlet item = Object.assign({}, attr, { next });\n\t\tthis.teleportMsgType.addItem(item);\n\t\treturn this;\n\t}\n}\n\nexport default SetTeleportMsg;\n","import l10n from 'modapp-l10n';\nimport TextStep from 'classes/TextStep';\nimport { communicationTooLong } from 'utils/cmdErr';\n\nconst usageText = 'sleep <span class=\"opt\"><span class=\"param\">Message</span></span>';\nconst shortDesc = 'Put your character to sleep';\nconst helpText =\n`<p>Put your character to sleep.</p>\n<p><code class=\"param\">Message</code> is an optional sleep message shown to the characters in the room. If omitted, a default message will be used.</p>`;\n\n/**\n * Sleep holds available commands.\n */\nclass Sleep {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'cmd', 'cmdLists', 'help', 'info' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.cmd.addCmd({\n\t\t\tkey: 'sleep',\n\t\t\tnext: new TextStep('msg', {\n\t\t\t\tname: \"sleep message\",\n\t\t\t\tmaxLength: () => this.module.info.getCore().communicationMaxLength,\n\t\t\t\terrTooLong: communicationTooLong,\n\t\t\t\terrRequired: null,\n\t\t\t\tcompleter: this.module.cmdLists.getInRoomChars({\n\t\t\t\t\tfilterMuted: true,\n\t\t\t\t\tsortOrder: [ 'awake', 'watch' ],\n\t\t\t\t}),\n\t\t\t}),\n\t\t\talias: [ 'quit' ],\n\t\t\tvalue: this.sleep.bind(this),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'sleep',\n\t\t\tcategory: 'basic',\n\t\t\tcmd: 'sleep',\n\t\t\tusage: l10n.l('sleep.usage', usageText),\n\t\t\tshortDesc: l10n.l('sleep.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('sleep.helpText', helpText),\n\t\t\tsortOrder: 70,\n\t\t});\n\t}\n\n\tsleep(ctx, p) {\n\t\treturn ctx.char.call('release', { msg: p.msg });\n\t}\n}\n\nexport default Sleep;\n","import l10n from 'modapp-l10n';\nimport ListStep from 'classes/ListStep';\nimport DelimStep from 'classes/DelimStep';\nimport ItemList from 'classes/ItemList';\nimport Err from 'classes/Err';\n\nconst usageText = 'stop focus <span class=\"param\">Character</span>';\nconst shortDesc = 'Remove focus from a character';\nconst helpText =\n`<p>Remove focus from a character, previously focused on using <code>focus</code>.</p>\n<p><code class=\"param\">Character</code> is the name of the character to remove focus from, or <code>@all</code> to remove a focus on all events.</p>\n<p>Alias: <code>unfocus</code>`;\n\n/**\n * StopFocus adds the stop focus command.\n */\nclass StopFocus {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'cmd', 'cmdLists', 'charLog', 'charFocus', 'help', 'api' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tlet opts = {\n\t\t\tnext: [\n\t\t\t\tnew ListStep('charId', this.module.charFocus.getFocusCharList(), {\n\t\t\t\t\tname: \"character being focused on\",\n\t\t\t\t\telse: [\n\t\t\t\t\t\tnew DelimStep('@', {\n\t\t\t\t\t\t\terrRequired: step => new Err('stopFocus.characterRequired', \"Who do you want to remove focus from?\"),\n\t\t\t\t\t\t\tnext: [\n\t\t\t\t\t\t\t\tnew ListStep('at', new ItemList({\n\t\t\t\t\t\t\t\t\titems: [{ key: 'all' }],\n\t\t\t\t\t\t\t\t}), {\n\t\t\t\t\t\t\t\t\tname: \"stopFocus at\",\n\t\t\t\t\t\t\t\t\terrNotFound: step => new Err('focus.atNotFound', \"Did you mean to stop focus @all?\"),\n\t\t\t\t\t\t\t\t\terrRequired: step => new Err('focus.atRequired', \"Did you mean to stop focus @all?\"),\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t}),\n\t\t\t\t\t],\n\t\t\t\t}),\n\t\t\t],\n\t\t\tvalue: (ctx, p) => this.stopFocus(ctx.player, ctx.char, p),\n\t\t};\n\n\t\tthis.module.cmd.addPrefixCmd('stop', Object.assign({ key: 'focus' }, opts));\n\t\tthis.module.cmd.addCmd(Object.assign({ key: 'unfocus' }, opts));\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'stopFocus',\n\t\t\tcategory: 'friends',\n\t\t\tcmd: 'stop focus',\n\t\t\talias: [ 'unfocus' ],\n\t\t\tusage: l10n.l('stopFocus.usage', usageText),\n\t\t\tshortDesc: l10n.l('stopFocus.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('stopFocus.helpText', helpText),\n\t\t\tsortOrder: 40,\n\t\t});\n\t}\n\n\tstopFocus(player, char, params) {\n\t\treturn params.at == 'all'\n\t\t\t? this.module.charFocus.toggleNotifyOnAll(char, false, true)\n\t\t\t\t.then((change) => {\n\t\t\t\t\tif (!change) {\n\t\t\t\t\t\tthrow new Err('focus.alreadyNotNotifyOnAll', \"{charName} is already not being notified on all events.\", { charName: char.name });\n\t\t\t\t\t}\n\t\t\t\t\tthis.module.charLog.logInfo(char, l10n.l('focus.stopNotifyOnAll', \"Removed notifications on all events.\"));\n\t\t\t\t})\n\t\t\t: Promise.resolve(this.module.charFocus.removeFocus(char, params.charId))\n\t\t\t\t.then(result => {\n\t\t\t\t\tthis.module.charLog.logInfo(char, l10n.l('stopFocus.stopFocusingOnChar', \"Removed focus from {charName}.\", { charName: result.char.name }));\n\t\t\t\t});\n\t}\n}\n\nexport default StopFocus;\n","import l10n from 'modapp-l10n';\n\nconst usageText = 'stop follow';\nconst shortDesc = 'Stop following a character';\nconst helpText =\n`<p>Stop following a character around.</p>\n<p>Alias: <code>hopoff</code></p>`;\n\n/**\n * Follow adds the stop follow command.\n */\nclass Follow {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'cmd', 'help' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.cmd.addPrefixCmd('stop', {\n\t\t\tkey: 'follow',\n\t\t\tvalue: (ctx, p) => this.stopFollow(ctx.char),\n\t\t});\n\t\t// Add alias\n\t\tthis.module.cmd.addCmd({\n\t\t\tkey: 'hopoff',\n\t\t\tvalue: (ctx, p) => this.stopFollow(ctx.char),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'stopFollow',\n\t\t\tcategory: 'transport',\n\t\t\tcmd: 'stop follow',\n\t\t\talias: [ 'hopoff' ],\n\t\t\tusage: l10n.l('stopFollow.usage', usageText),\n\t\t\tshortDesc: l10n.l('stopFollow.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('stopFollow.helpText', helpText),\n\t\t\tsortOrder: 150,\n\t\t});\n\t}\n\n\tstopFollow(char) {\n\t\treturn char.call('stopFollow');\n\t}\n}\n\nexport default Follow;\n","import l10n from 'modapp-l10n';\n\nconst usageText = 'stop lead <span class=\"opt\"><span class=\"param\">Character</span></span>';\nconst shortDesc = 'Stop having characters follow you';\nconst helpText =\n`<p>Stop have characters following you around.</p>\n<p><code class=\"param\">Character</code> is the optional name of a specific character to stop following you.</p>\n<p>Alias: <code>dropoff</code></p>`;\n\n/**\n * StopLead adds the stopLead command.\n */\nclass StopLead {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'cmd',\n\t\t\t'cmdSteps',\n\t\t\t'help',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t\tlet opts = {\n\t\t\tnext: [\n\t\t\t\tthis.module.cmdSteps.newInRoomAwakeCharStep({\n\t\t\t\t\terrRequired: null,\n\t\t\t\t}),\n\t\t\t],\n\t\t\tvalue: (ctx, p) => this.stopLead(ctx.char, p.charId ? { charId: p.charId } : null),\n\t\t};\n\t\tthis.module.cmd.addPrefixCmd('stop', Object.assign({ key: 'lead' }, opts));\n\t\tthis.module.cmd.addCmd(Object.assign({ key: 'dropoff' }, opts));\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'stopLead',\n\t\t\tcategory: 'transport',\n\t\t\tcmd: 'stop lead',\n\t\t\talias: [ 'dropoff' ],\n\t\t\tusage: l10n.l('stopLead.usage', usageText),\n\t\t\tshortDesc: l10n.l('stopLead.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('stopLead.helpText', helpText),\n\t\t\tsortOrder: 140,\n\t\t});\n\t}\n\n\tstopLead(char, params) {\n\t\treturn char.call('stopLead', params);\n\t}\n}\n\nexport default StopLead;\n","import l10n from 'modapp-l10n';\n\nconst usageText = 'stop lfrp';\nconst shortDesc = 'Stop looking for roleplay';\nconst helpText =\n`<p>Stop looking for roleplay.</p>\n<p>Use <code>lfrp</code> to start looking for roleplay again.</p>`;\n\n\nconst txtSetAsNotLfrp = l10n.l('lfrp.setAsNotLookingForRoleplay', \"Set as not looking for roleplay.\");\n\n/**\n * StopLfrp adds the stopLfrp command.\n */\nclass StopLfrp {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'cmd',\n\t\t\t'help',\n\t\t\t'charLog',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t\tthis.module.cmd.addPrefixCmd('stop', {\n\t\t\tkey: 'lfrp',\n\t\t\tvalue: (ctx, p) => this.stopLfrp(ctx.char),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'stopLfrp',\n\t\t\tcategory: 'basic',\n\t\t\tcmd: 'stop lfrp',\n\t\t\tusage: l10n.l('stopLfrp.usage', usageText),\n\t\t\tshortDesc: l10n.l('stopLfrp.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('stopLfrp.helpText', helpText),\n\t\t\tsortOrder: 120,\n\t\t});\n\t}\n\n\tstopLfrp(char) {\n\t\treturn char.call('set', { rp: '' }).then(() => {\n\t\t\tthis.module.charLog.logInfo(char, txtSetAsNotLfrp);\n\t\t});\n\t}\n}\n\nexport default StopLfrp;\n","import ItemList from 'classes/ItemList';\nimport ListStep from 'classes/ListStep';\nimport Err from 'classes/Err';\n\n/**\n * StopMuteTravel adds the stop mute travel command.\n */\nclass StopMuteTravel {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\t// Bind callbacks\n\t\tthis._exec = this._exec.bind(this);\n\n\t\tthis.app.require([ 'cmd' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.stopMuteType = new ItemList('object', {\n\t\t\tname: \"message type\",\n\t\t});\n\n\t\tlet opts = {\n\t\t\tnext: [\n\t\t\t\tnew ListStep('object', this.stopMuteType, {\n\t\t\t\t\tname: \"message type\",\n\t\t\t\t\ttoken: 'name',\n\t\t\t\t\terrRequired: step => new Err('stopMuteTravel.messageTypeRequired', \"What sort of messages do you want to stop muting?\"),\n\t\t\t\t}),\n\t\t\t],\n\t\t\tvalue: this._exec,\n\t\t};\n\t\tthis.module.cmd.addPrefixCmd('stop', Object.assign({ key: 'mute' }, opts));\n\t\tthis.module.cmd.addCmd(Object.assign({ key: 'unmute' }, opts));\n\t}\n\n\taddType(type) {\n\t\tthis.stopMuteType.addItem(type);\n\t\treturn this;\n\t}\n\n\t_exec(ctx, p) {\n\t\tlet f = p.object;\n\t\tif (typeof f != 'function') {\n\t\t\tthrow new Error(\"Object value is not a function\");\n\t\t}\n\t\treturn f(ctx, p);\n\t}\n}\n\nexport default StopMuteTravel;\n","import l10n from 'modapp-l10n';\nimport Err from 'classes/Err';\n\nconst usageText = 'stop mute char <span class=\"param\">Character</span>';\nconst shortDesc = 'Stop muting a character';\nconst helpText =\n`<p>Stop muting a character previously muted with <code>mute char</code>. It affects all controlled characters.</p>\n<p><code class=\"param\">Character</code> is the name of the character to stop muting.</p>\n<p>Alias: <code>unignore</code>, <code>unmute char</code>`;\n\n/**\n * StopMuteChar adds the stop mute char command.\n */\nclass StopMuteChar {\n\tconstructor(app) {\n\t\tthis.app = app;\n\t\tthis.app.require([ 'cmd', 'stopMute', 'help', 'charLog', 'mute', 'cmdSteps' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tlet opts = {\n\t\t\tnext: this.module.cmdSteps.newAnyCharStep({\n\t\t\t\terrRequired: step => new Err('stopMuteChar.characterRequired', \"Who do you want to stop muting?\"),\n\t\t\t\tsortOrder: [ 'awake' ],\n\t\t\t}),\n\t\t\tvalue: (ctx, p) => this.stopMuteChar(ctx.player, ctx.char, p),\n\t\t};\n\n\t\tthis.module.stopMute.addType(Object.assign({ key: 'char' }, opts));\n\t\tthis.module.cmd.addCmd(Object.assign({ key: 'unignore' }, opts));\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'stopMuteChar',\n\t\t\tcategory: 'mute',\n\t\t\tcmd: 'stop mute char',\n\t\t\talias: [ 'unignore', 'unmute char' ],\n\t\t\tusage: l10n.l('stopMuteChar.usage', usageText),\n\t\t\tshortDesc: l10n.l('stopMuteChar.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('stopMuteChar.helpText', helpText),\n\t\t\tsortOrder: 40,\n\t\t});\n\t}\n\n\tstopMuteChar(player, char, params) {\n\t\treturn player.call('getChar', params.charId ? { charId: params.charId } : { charName: params.charName })\n\t\t\t.then(c => this.module.mute.toggleMuteChar(c.id, false).then(changed => {\n\t\t\t\tif (changed[c.id]) {\n\t\t\t\t\tthis.module.charLog.logInfo(char, l10n.l('stopMuteChar.stopMuteChar', \"Deactivated muting of {name}.\", { name: c.name }));\n\t\t\t\t} else {\n\t\t\t\t\tthis.module.charLog.logError(char, new Err('stopMuteChar.notMutingChar', \"Not currently muting {name}.\", { name: c.name }));\n\t\t\t\t}\n\t\t\t}));\n\t}\n}\n\nexport default StopMuteChar;\n","import l10n from 'modapp-l10n';\n\nconst usageText = 'stop mute message';\nconst shortDesc = 'Stop muting messages from other characters';\nconst helpText =\n`<p>Stop muting messages previously muted with <code>mute message</code>. It only affects the currently controlled character.</p>\n<p>Alias: <code>unmute message</code>`;\n\n/**\n * StopMuteMessage adds the stop mute message command.\n */\nclass StopMuteMessage {\n\tconstructor(app) {\n\t\tthis.app = app;\n\t\tthis.app.require([ 'stopMute', 'help', 'charLog', 'mute' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.stopMute.addType({\n\t\t\tkey: 'message',\n\t\t\tvalue: (ctx, p) => this.stopMuteMessage(ctx.char),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'stopMuteMessage',\n\t\t\tcategory: 'mute',\n\t\t\tcmd: 'stop mute message',\n\t\t\talias: [ 'unmute message' ],\n\t\t\tusage: l10n.l('stopMuteMessage.usage', usageText),\n\t\t\tshortDesc: l10n.l('stopMuteMessage.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('stopMuteMessage.helpText', helpText),\n\t\t\tsortOrder: 60,\n\t\t});\n\t}\n\n\tstopMuteMessage(char) {\n\t\treturn this.module.mute.toggleMuteMessage(char, false, true)\n\t\t\t.then(() => this.module.charLog.logInfo(char, l10n.l('stopMuteMessage.stopMuteMessage', \"Deactivated muting of messages.\")));\n\t}\n}\n\nexport default StopMuteMessage;\n","import l10n from 'modapp-l10n';\n\nconst usageText = 'stop mute ooc';\nconst shortDesc = 'Stop muting out of character messages';\nconst helpText =\n`<p>Stop muting out of character messages previously muted with <code>mute ooc</code>. It only affects the currently controlled character.</p>\n<p>Alias: <code>unmute ooc</code>`;\n\n/**\n * StopMuteOoc adds the stop mute ooc command.\n */\nclass StopMuteOoc {\n\tconstructor(app) {\n\t\tthis.app = app;\n\t\tthis.app.require([ 'stopMute', 'help', 'charLog', 'mute' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.stopMute.addType({\n\t\t\tkey: 'ooc',\n\t\t\tvalue: (ctx, p) => this.stopMuteOoc(ctx.char),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'stopMuteOoc',\n\t\t\tcategory: 'mute',\n\t\t\tcmd: 'stop mute ooc',\n\t\t\talias: [ 'unmute ooc' ],\n\t\t\tusage: l10n.l('stopMuteOoc.usage', usageText),\n\t\t\tshortDesc: l10n.l('stopMuteOoc.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('stopMuteOoc.helpText', helpText),\n\t\t\tsortOrder: 80,\n\t\t});\n\t}\n\n\tstopMuteOoc(char) {\n\t\treturn this.module.mute.toggleMuteOoc(char, false, true)\n\t\t\t.then(() => this.module.charLog.logInfo(char, l10n.l('stopMuteOoc.stopMuteOoc', \"Deactivated muting of OOC messages.\")));\n\t}\n}\n\nexport default StopMuteOoc;\n","import l10n from 'modapp-l10n';\n\nconst usageText = 'stop mute travel';\nconst shortDesc = 'Stop muting travel messages';\nconst helpText =\n`<p>Stop muting travel messages previously muted with <code>mute travel</code>. It only affects the currently controlled character.</p>\n<p>Alias: <code>unmute travel</code>`;\n\n/**\n * StopMuteTravel adds the stop mute travel command.\n */\nclass StopMuteTravel {\n\tconstructor(app) {\n\t\tthis.app = app;\n\t\tthis.app.require([ 'stopMute', 'help', 'charLog', 'mute' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.stopMute.addType({\n\t\t\tkey: 'travel',\n\t\t\tvalue: (ctx, p) => this.stopMuteTravel(ctx.char),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'stopMuteTravel',\n\t\t\tcategory: 'mute',\n\t\t\tcmd: 'stop mute travel',\n\t\t\talias: [ 'unmute travel' ],\n\t\t\tusage: l10n.l('stopMuteTravel.usage', usageText),\n\t\t\tshortDesc: l10n.l('stopMuteTravel.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('stopMuteTravel.helpText', helpText),\n\t\t\tsortOrder: 20,\n\t\t});\n\t}\n\n\tstopMuteTravel(char) {\n\t\treturn this.module.mute.toggleMuteTravel(char, false, true)\n\t\t\t.then(() => this.module.charLog.logInfo(char, l10n.l('stopMuteTravel.stopMuteTravel', \"Deactivated muting of travel messages.\")));\n\t}\n}\n\nexport default StopMuteTravel;\n","import l10n from 'modapp-l10n';\nimport Err from 'classes/Err';\n\nconst usageText = 'summon <span class=\"param\">Character</span>';\nconst shortDesc = 'Summon a character to join you';\nconst helpText =\n`<p>Summon a character to join you.</p>\n<p><code class=\"param\">Character</code> is the name of the character to summon.</p>\n<p>Alias: <code>msummon</code></p>`;\n\n/**\n * Summon adds the summon command.\n */\nclass Summon {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'cmd',\n\t\t\t'cmdSteps',\n\t\t\t'help',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t\tthis.module.cmd.addCmd({\n\t\t\tkey: 'summon',\n\t\t\tnext: [\n\t\t\t\tthis.module.cmdSteps.newAwakeCharStep({\n\t\t\t\t\terrRequired: step => new Err('summon.charRequired', \"Who do you wish to summon?\"),\n\t\t\t\t\tfilterMuted: true,\n\t\t\t\t\tsortOrder: [ 'watch' ],\n\t\t\t\t}),\n\t\t\t],\n\t\t\talias: [ 'msummon' ],\n\t\t\tvalue: (ctx, p) => this.summon(ctx.char, { charId: p.charId }),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'summon',\n\t\t\tcategory: 'transport',\n\t\t\tcmd: 'summon',\n\t\t\talias: [ 'msummon' ],\n\t\t\tusage: l10n.l('summon.usage', usageText),\n\t\t\tshortDesc: l10n.l('summon.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('summon.helpText', helpText),\n\t\t\tsortOrder: 100,\n\t\t});\n\t}\n\n\tsummon(char, params) {\n\t\treturn char.call('summon', params);\n\t}\n}\n\nexport default Summon;\n","import l10n from 'modapp-l10n';\n\nconst usageText = 'sweep <span class=\"opt\"><span class=\"param\">Character</span></span>';\nconst shortDesc = 'Send home sleeping characters';\nconst helpText =\n`<p>Sweep the room clean of sleeping characters by sending them home, or send a single awake character home from a room you own.</p>\n<p><code class=\"param\">Character</code> is the optional name of the character to send home. By default all sleepers are sent home.</p>`;\n\n/**\n * Sweep adds the sweep command.\n */\nclass Sweep {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'cmd',\n\t\t\t'cmdSteps',\n\t\t\t'help',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t\tthis.module.cmd.addCmd({\n\t\t\tkey: 'sweep',\n\t\t\tnext: this.module.cmdSteps.newInRoomCharStep({\n\t\t\t\terrRequired: null,\n\t\t\t}),\n\t\t\tvalue: (ctx, p) => this.sweep(ctx.char, p.charId ? { charId: p.charId } : null),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'sweep',\n\t\t\tcategory: 'cleanup',\n\t\t\tcmd: 'sweep',\n\t\t\tusage: l10n.l('sweep.usage', usageText),\n\t\t\tshortDesc: l10n.l('sweep.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('sweep.helpText', helpText),\n\t\t\tsortOrder: 20,\n\t\t});\n\t}\n\n\tsweep(char, params) {\n\t\treturn char.call('sweep', params);\n\t}\n}\n\nexport default Sweep;\n","import l10n from 'modapp-l10n';\nimport IDStep from 'classes/IDStep';\nimport ListStep from 'classes/ListStep';\n\nconst usageText = 'teleport <span class=\"param\">Keyword<span class=\"comment\">/</span>#RoomID</span>';\nconst shortDesc = 'Teleport to another room';\nconst helpText =\n`<p>Teleport to another room either by keyword or room ID.</p>\n<p><code class=\"param\">Keyword</code> is the keyword of the teleport destination.</p>\n<p><code class=\"param\">#RoomID</code> is the ID of a room your character owns.</p>\n<p>Alias: <code>t</code>, <code>tp</code>, <code>tport</code></p>`;\n\n/**\n * Teleport adds the teleport command.\n */\nclass Teleport {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'cmd', 'cmdLists', 'help', 'player' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t\tthis.module.cmd.addCmd({\n\t\t\tkey: 'teleport',\n\t\t\talias: [ 't', 'tp', 'tport' ],\n\t\t\tnext: new IDStep('roomId', {\n\t\t\t\tname: \"destination node or room ID\",\n\t\t\t\tlist: () => {\n\t\t\t\t\tlet c = module.player.getActiveChar();\n\t\t\t\t\treturn ((c && c.ownedRooms & c.ownedRooms.toArray()) || []).map(v => v.id);\n\t\t\t\t},\n\t\t\t\telse: new ListStep('nodeId', this.module.cmdLists.getTeleportNodes(), {\n\t\t\t\t\tname: \"destination node\",\n\t\t\t\t}),\n\t\t\t}),\n\t\t\tvalue: this.teleport.bind(this),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'teleport',\n\t\t\tcategory: 'transport',\n\t\t\tcmd: 'teleport',\n\t\t\talias: [ 't', 'tp', 'tport' ],\n\t\t\tusage: l10n.l('teleport.usage', usageText),\n\t\t\tshortDesc: l10n.l('teleport.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('teleport.helpText', helpText),\n\t\t\tsortOrder: 200,\n\t\t});\n\t}\n\n\tteleport(ctx, p) {\n\t\treturn ctx.char.call('teleport', p.nodeId ? { nodeId: p.nodeId } : { roomId: p.roomId });\n\t}\n}\n\nexport default Teleport;\n","import l10n from 'modapp-l10n';\nimport ListStep from 'classes/ListStep';\nimport DelimStep from 'classes/DelimStep';\n\nconst usageText = 'unregister teleport <span class=\"param\">Keyword<span class=\"comment\">';\nconst shortDesc = 'Unregister a previously registered teleport destination';\nconst helpText =\n`<p>Unregister a previously registered teleport destination.</p>\n<p><code class=\"param\">Keyword</code> is the keyword of the teleport destination.</p>`;\n\n/**\n * UnregisterTeleport adds command to unregister a teleport destination.\n */\nclass UnregisterTeleport {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'cmd', 'cmdLists', 'charLog', 'help' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.cmd.addPrefixCmd('unregister', {\n\t\t\tkey: 'teleport',\n\t\t\tnext: [\n\t\t\t\tnew DelimStep(\"=\", { errRequired: null }),\n\t\t\t\tnew ListStep('nodeId', this.module.cmdLists.getTeleportNodes(), {\n\t\t\t\t\tname: \"teleport node to unregister\",\n\t\t\t\t}),\n\t\t\t],\n\t\t\tvalue: (ctx, p) => this.unregisterTeleport(ctx.char, {\n\t\t\t\tnodeId: p.nodeId,\n\t\t\t}),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'unregisterTeleport',\n\t\t\tcategory: 'transport',\n\t\t\tcmd: 'unregister teleport',\n\t\t\tusage: l10n.l('unregisterTeleport.usage', usageText),\n\t\t\tshortDesc: l10n.l('unregisterTeleport.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('unregisterTeleport.helpText', helpText),\n\t\t\tsortOrder: 240,\n\t\t});\n\t}\n\n\tunregisterTeleport(char, params) {\n\t\treturn char.call('removeTeleport', params).then(result => {\n\t\t \tthis.module.charLog.logInfo(char, l10n.l('unregisterTeleport.unregisteredTeleportDestination', \"Unregistered teleport destination to {roomName}.\", { roomName: result.room.name }));\n\t\t});\n\t}\n}\n\nexport default UnregisterTeleport;\n","import l10n from 'modapp-l10n';\nimport Err from 'classes/Err';\n\nconst usageText = 'unwatch <span class=\"param\">Character</span>';\nconst shortDesc = 'Stop watching for a character';\nconst helpText =\n`<p>Stop watching for a character.</p>\n<p><code class=\"param\">Character</code> is the name of the character to stop watching for.</p>`;\n\n/**\n * Unwatch adds the unwatch command.\n */\nclass Unwatch {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'cmd',\n\t\t\t'cmdSteps',\n\t\t\t'charLog',\n\t\t\t'help',\n\t\t\t'api',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.cmd.addCmd({\n\t\t\tkey: 'unwatch',\n\t\t\tnext: [\n\t\t\t\tthis.module.cmdSteps.newWatchedCharStep({\n\t\t\t\t\tname: \"watched character\",\n\t\t\t\t\terrRequired: step => new Err('suspend.characterRequired', \"Who do you want to stop watching for?\"),\n\t\t\t\t}),\n\t\t\t],\n\t\t\tvalue: (ctx, p) => this.unwatch(ctx.player, ctx.char, { charId: p.charId }),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'unwatch',\n\t\t\tcategory: 'friends',\n\t\t\tcmd: 'unwatch',\n\t\t\tusage: l10n.l('unwatch.usage', usageText),\n\t\t\tshortDesc: l10n.l('unwatch.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('unwatch.helpText', helpText),\n\t\t\tsortOrder: 20,\n\t\t});\n\t}\n\n\tunwatch(player, char, params) {\n\t\treturn this.module.api.call('note.player.' + player.id + '.watch.' + params.charId, 'delete').then(result => {\n\t\t\tlet c = result.char;\n\t\t\tthis.module.charLog.logInfo(char, l10n.l('suspend.charUnwatched', \"Removed watch for {charName}.\", { charName: (c.name + \" \" + c.surname).trim() }));\n\t\t});\n\t}\n}\n\nexport default Unwatch;\n","import l10n from 'modapp-l10n';\nimport ListStep from 'classes/ListStep';\n\nconst usageText = 'update profile <span class=\"param\">Keyword</span>';\nconst shortDesc = \"Update a profile with your character's current appearance\";\nconst helpText =\n`<p>Update a profile with your character's current appearance. This stores the <em>gender</em>, <em>species</em>, <em>description</em>, and <em>image</em>.</p>\n<p><code class=\"param\">Keyword</code> is the keyword for the character profile.</p>`;\n\n/**\n * UpdateProfile adds the update profile command.\n */\nclass UpdateProfile {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'cmd', 'cmdLists', 'help', 'charLog' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t\tthis.module.cmd.addPrefixCmd('update', {\n\t\t\tkey: 'profile',\n\t\t\tnext: new ListStep('profileId', this.module.cmdLists.getCharProfiles(), {\n\t\t\t\tname: \"character profile\",\n\t\t\t}),\n\t\t\tvalue: (ctx, p) => this.updateProfile(ctx.char, p),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'updateProfile',\n\t\t\tcategory: 'profile',\n\t\t\tcmd: 'update profile',\n\t\t\tusage: l10n.l('updateProfile.usage', usageText),\n\t\t\tshortDesc: l10n.l('updateProfile.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('updateProfile.helpText', helpText),\n\t\t\tsortOrder: 140,\n\t\t});\n\t}\n\n\tupdateProfile(char, p) {\n\t\treturn char.call('updateProfile', { profileId: p.profileId })\n\t\t\t.then(result => this.module.charLog.logInfo(char, l10n.l('profile.updatedProfile', \"Updated profile \\\"{profileName}\\\".\", { profileName: result.profile.name })));\n\t}\n}\n\nexport default UpdateProfile;\n","import l10n from 'modapp-l10n';\nimport ListStep from 'classes/ListStep';\n\nconst usageText = 'update roomprofile <span class=\"param\">Keyword</span>';\nconst shortDesc = \"Update a room profile with the room's current appearance\";\nconst helpText =\n`<p>Update a room profile with the room's current appearance. This stores the <em>description</em> and <em>image</em>.</p>\n<p><code class=\"param\">Keyword</code> is the keyword for the profile.</p>`;\n\n/**\n * UpdateRoomProfile adds the update profile command.\n */\nclass UpdateRoomProfile {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'cmd',\n\t\t\t'help',\n\t\t\t'charLog',\n\t\t\t'roomAccess',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t\tthis.module.cmd.addPrefixCmd('update', {\n\t\t\tkey: 'roomprofile',\n\t\t\tnext: new ListStep('profileId', this.module.roomAccess.getInRoomProfileTokens(), {\n\t\t\t\tname: \"room profile\",\n\t\t\t}),\n\t\t\tvalue: (ctx, p) => this.updateRoomProfile(ctx.char, p),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'updateRoomProfile',\n\t\t\tcategory: 'buildRooms',\n\t\t\tcmd: 'update roomprofile',\n\t\t\tusage: l10n.l('updateRoomProfile.usage', usageText),\n\t\t\tshortDesc: l10n.l('updateRoomProfile.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('updateRoomProfile.helpText', helpText),\n\t\t\tsortOrder: 140,\n\t\t});\n\t}\n\n\tupdateRoomProfile(char, p) {\n\t\treturn char.call('updateRoomProfile', { profileId: p.profileId })\n\t\t\t.then(result => this.module.charLog.logInfo(char, l10n.l('updateRoomProfile.updatedRoomProfile', \"Updated room profile \\\"{profileName}\\\".\", { profileName: result.profile.name })));\n\t}\n}\n\nexport default UpdateRoomProfile;\n","import l10n from 'modapp-l10n';\nimport Err from 'classes/Err';\n\nconst usageText = 'watch <span class=\"param\">Character</span>';\nconst shortDesc = 'Add a watch for a character';\nconst helpText =\n`<p>Add a watch for a character to know when they are awake.</p>\n<p><code class=\"param\">Character</code> is the name of the character to watch for.</p>\n<p>Alias: <code>watchfor</code>, <code>wf</code></p>`;\n\n/**\n * Watch adds the watch command.\n */\nclass Watch {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'cmd', 'cmdSteps', 'charLog', 'help', 'api' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.module.cmd.addCmd({\n\t\t\tkey: 'watch',\n\t\t\tnext: [\n\t\t\t\tthis.module.cmdSteps.newAnyCharStep({\n\t\t\t\t\terrRequired: step => new Err('watch.characterRequired', \"Who do you want to watch for?\"),\n\t\t\t\t\tsortOrder: [ 'awake', 'room' ],\n\t\t\t\t}),\n\t\t\t],\n\t\t\talias: [ 'watchfor', 'wf' ],\n\t\t\tvalue: (ctx, p) => this.watch(ctx.player, ctx.char, p.charId\n\t\t\t\t? { charId: p.charId }\n\t\t\t\t: { charName: p.charName },\n\t\t\t),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'watch',\n\t\t\tcategory: 'friends',\n\t\t\tcmd: 'watch',\n\t\t\talias: [ 'watchfor', 'wf' ],\n\t\t\tusage: l10n.l('watch.usage', usageText),\n\t\t\tshortDesc: l10n.l('watch.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('watch.helpText', helpText),\n\t\t\tsortOrder: 10,\n\t\t});\n\t}\n\n\twatch(player, char, params) {\n\t\treturn (params.charId\n\t\t\t? Promise.resolve({ id: params.charId })\n\t\t\t: player.call('getChar', { charName: params.charName })\n\t\t).then(c => this.module.api.call('note.player.' + player.id + '.watch.' + c.id, 'addWatcher', {\n\t\t\tcharId: char.id,\n\t\t})).then(result => {\n\t\t\tlet c = result.char;\n\t\t\tthis.module.charLog.logInfo(char, l10n.l('watch.addedWatchFor', \"Added a watch for {charName}.\", { charName: (c.name + \" \" + c.surname).trim() }));\n\t\t});\n\t}\n}\n\nexport default Watch;\n","import l10n from 'modapp-l10n';\nimport TextStep from 'classes/TextStep';\nimport DelimStep from 'classes/DelimStep';\nimport MultiDelimStep from 'classes/MultiDelimStep';\nimport ValueStep from 'classes/ValueStep';\nimport RepeatStep from 'classes/RepeatStep';\nimport Err from 'classes/Err';\nimport { communicationTooLong } from 'utils/cmdErr';\n\nconst usageText = 'whisper <span class=\"opt\"><span class=\"param\">Character</span> <span class=\"opt\">, <span class=\"param\">Character</span></span><span class=\"comment\">...</span></span> =<span class=\"opt\">></span><span class=\"opt\">:</span> <span class=\"param\">Message</span>';\nconst shortDesc = 'Whisper something to characters in the room';\nconst helpText =\n`<p>Whisper something to one or more characters in the room.<br>\nIf the message starts with <code>></code> (greater than), the whisper will be marked as out of character (OOC).<br>\nIf the message starts with <code>:</code> (colon), the whisper will be treated in the same way as a <code>pose</code> action rather than something being said.</p>\n<p><code class=\"param\">Character</code> is the name of the character to whisper to. If omitted, it defaults to the character(s) last whispered to.</p>\n<p><code class=\"param\">Message</code> is the whispered message. It may be formatted and span multiple paragraphs.</p>\n<p>Alias: <code>w</code>, <code>wh</code></p>`;\nconst examples = [\n\t{ cmd: 'whisper Jane Doe = Hi there.', desc: l10n.l('whisper.whisperSingleDesc', \"Whispers to Jane Doe\") },\n\t{ cmd: 'whisper John => Phonecall. BRB.', desc: l10n.l('whisper.whispeOocDesc', \"Whispers out of character to John\") },\n\t{ cmd: 'wh John, Jane =>: has to go AFK.', desc: l10n.l('whisper.whisperOocPoseMultipleDesc', \"Whispers an out of character pose to John and Jane\") },\n\t{ cmd: 'w =: nods discreetly.', desc: l10n.l('whisper.whisperPoseLastDesc', \"Whispers a pose to last character(s) whispered to\") },\n];\n\n/**\n * Whisper adds the whisper command.\n */\nclass Whisper {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'cmd',\n\t\t\t'cmdLists',\n\t\t\t'cmdSteps',\n\t\t\t'help',\n\t\t\t'info',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t\tthis.lastCharIds = {};\n\n\t\tlet charListOpt = {\n\t\t\tfilterMuted: true,\n\t\t\tsortOrder: [ 'awake', 'watch' ],\n\t\t};\n\n\t\tthis.module.cmd.addCmd({\n\t\t\tkey: 'whisper',\n\t\t\tnext: [\n\t\t\t\tnew RepeatStep(\n\t\t\t\t\t'chars',\n\t\t\t\t\t(next, idx) => this.module.cmdSteps.newInRoomAwakeCharStep({\n\t\t\t\t\t\tid: 'charId-' + idx,\n\t\t\t\t\t\terrRequired: null,\n\t\t\t\t\t\tnext,\n\t\t\t\t\t\t...charListOpt,\n\t\t\t\t\t}),\n\t\t\t\t\t{\n\t\t\t\t\t\tdelimiter: \",\",\n\t\t\t\t\t},\n\t\t\t\t),\n\n\t\t\t\tnew DelimStep(\"=\", {\n\t\t\t\t\tnext: [\n\t\t\t\t\t\tnew MultiDelimStep({\n\t\t\t\t\t\t\t\">\": { next: new ValueStep('ooc', true), errRequired: null },\n\t\t\t\t\t\t\t\":\": { next: new ValueStep('pose', true), errRequired: null },\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tnew TextStep('msg', {\n\t\t\t\t\t\t\tspanLines: true,\n\t\t\t\t\t\t\ttoken: state => state.getParam('ooc') ? 'ooc' : 'text',\n\t\t\t\t\t\t\tmaxLength: () => this.module.info.getCore().communicationMaxLength,\n\t\t\t\t\t\t\terrTooLong: communicationTooLong,\n\t\t\t\t\t\t\terrRequired: step => new Err('whisper.messageRequired', \"What do you want to whisper?\"),\n\t\t\t\t\t\t\tcompleter: this.module.cmdLists.getInRoomChars(charListOpt),\n\t\t\t\t\t\t\tformatText: true,\n\t\t\t\t\t\t}),\n\t\t\t\t\t],\n\t\t\t\t}),\n\t\t\t],\n\t\t\talias: [ 'w', 'wh' ],\n\t\t\tvalue: (ctx, p) => {\n\t\t\t\tlet charIds = [];\n\t\t\t\tlet i = 0;\n\t\t\t\twhile (p['charId-' + i]) {\n\t\t\t\t\tcharIds.push(p['charId-' + i]);\n\t\t\t\t\ti++;\n\t\t\t\t}\n\t\t\t\treturn this.whisper(ctx.char, { charIds, msg: p.msg, pose: p.pose, ooc: p.ooc });\n\t\t\t},\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'whisper',\n\t\t\tcategory: 'communicate',\n\t\t\tcmd: 'whisper',\n\t\t\talias: [ 'w', 'wh' ],\n\t\t\tusage: l10n.l('whisper.usage', usageText),\n\t\t\tshortDesc: l10n.l('whisper.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('whisper.helpText', helpText),\n\t\t\texamples,\n\t\t\tsortOrder: 30,\n\t\t});\n\t}\n\n\twhisper(char, params) {\n\t\t// If we are missing target charIds, we fetch the last ones targeted.\n\t\tlet charIds = params.charIds || [];\n\t\tif (!charIds.length) {\n\t\t\tcharIds = this.lastCharIds[char.id];\n\t\t\tif (!charIds) {\n\t\t\t\treturn Promise.reject(new Err('whisper.noCharacter', \"Who do you want to whisper to?\"));\n\t\t\t}\n\t\t\tparams.charIds = charIds;\n\t\t} else {\n\t\t\tthis.lastCharIds[char.id] = charIds;\n\t\t}\n\t\treturn char.call('whisper', params);\n\t}\n}\n\nexport default Whisper;\n","import { Elem, Txt } from 'modapp-base-component';\nimport l10n from 'modapp-l10n';\nimport Err from 'classes/Err';\nimport firstLetterUppercase from 'utils/firstLetterUppercase';\nimport CharTagsList, { hasTags } from 'components/CharTagsList';\nimport { getCharIdleLevel } from 'utils/idleLevels';\nimport formatDateTime from 'utils/formatDateTime';\n\nconst usageText = 'whois <span class=\"param\">Character</span>';\nconst shortDesc = \"Show character information\";\nconst helpText =\n`<p>Show information about any character.</p>\n<p><code class=\"param\">Character</code> is the name of the character to show information about.</p>\n<p>Alias: <code>wi</code></p>`;\n\nconst textNotSet = l10n.l('whois.unknownGenderAndSpecies', \"Unknown gender and species\");\n\n/**\n * Whois adds the whois command.\n */\nclass Whois {\n\tconstructor(app) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'cmd',\n\t\t\t'cmdSteps',\n\t\t\t'help',\n\t\t\t'charLog',\n\t\t\t'player',\n\t\t\t'avatar',\n\t\t\t'dialogAboutChar',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t\tthis.module.cmd.addCmd({\n\t\t\tkey: 'whois',\n\t\t\tnext: this.module.cmdSteps.newAnyCharStep({\n\t\t\t\terrRequired: step => new Err('whoisCmd.characterRequired', \"Who do you want to show information about?\"),\n\t\t\t\tsortOrder: [ 'awake', 'room', 'watch' ],\n\t\t\t}),\n\t\t\talias: [ 'wi' ],\n\t\t\tvalue: (ctx, p) => this.whois(ctx.char, p),\n\t\t});\n\n\t\tthis.module.help.addTopic({\n\t\t\tid: 'whois',\n\t\t\tcategory: 'basic',\n\t\t\tcmd: 'whois',\n\t\t\talias: [ 'wi' ],\n\t\t\tusage: l10n.l('addTag.usage', usageText),\n\t\t\tshortDesc: l10n.l('addTag.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('addTag.helpText', helpText),\n\t\t\tsortOrder: 30,\n\t\t});\n\t}\n\n\twhois(char, params) {\n\t\treturn this.module.player.getPlayer().call('getChar', params.charId ? { charId: params.charId } : { charName: params.charName })\n\t\t\t.then(c => {\n\t\t\t\t// Create an anonymous static object of char.\n\t\t\t\tc = c.toJSON();\n\t\t\t\tlet charName = (c.name + ' ' + c.surname).trim();\n\t\t\t\tlet genderSpecies = (firstLetterUppercase(c.gender) + ' ' + firstLetterUppercase(c.species)).trim();\n\t\t\t\tlet lvl = getCharIdleLevel(c);\n\t\t\t\tthis.module.charLog.logComponent(char, 'whois', new Elem(n => n.elem('div', { className: 'whois charlog--pad' }, [\n\t\t\t\t\tn.elem('div', { className: 'badge btn large dark', events: {\n\t\t\t\t\t\tclick: (comp, ev) => {\n\t\t\t\t\t\t\tthis.module.dialogAboutChar.open(c);\n\t\t\t\t\t\t\tev.stopPropagation();\n\t\t\t\t\t\t},\n\t\t\t\t\t}}, [\n\t\t\t\t\t\tn.elem('div', { className: 'badge--select' }, [\n\t\t\t\t\t\t\tn.component(this.module.avatar.newAvatar(c, { className: 'badge--icon' })),\n\t\t\t\t\t\t\tn.elem('div', { className: 'badge--info large' }, [\n\t\t\t\t\t\t\t\tn.elem('div', { className: 'badge--title badge--nowrap' }, [\n\t\t\t\t\t\t\t\t\tn.component(new Txt(charName)),\n\t\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\t\tn.elem('div', { className: (genderSpecies ? 'badge--strong' : 'badge--text common--placeholder') + ' badge--nowrap' }, [\n\t\t\t\t\t\t\t\t\tn.component(new Txt(genderSpecies || textNotSet)),\n\t\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\t\tn.elem('div', { className: 'badge--text badge--nowrap' + (c.lastAwake\n\t\t\t\t\t\t\t\t\t? c.awake && lvl\n\t\t\t\t\t\t\t\t\t\t? (' ' + lvl.className)\n\t\t\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t\t\t\t: ' common--placeholder'\n\t\t\t\t\t\t\t\t) }, [\n\t\t\t\t\t\t\t\t\tn.component(new Txt(\n\t\t\t\t\t\t\t\t\t\tc.awake && lvl\n\t\t\t\t\t\t\t\t\t\t\t? lvl.text\n\t\t\t\t\t\t\t\t\t\t\t: c.lastAwake\n\t\t\t\t\t\t\t\t\t\t\t\t? l10n.l('whois.lastSeen', \"Last seen {time}\", { time: formatDateTime(new Date(c.lastAwake)) })\n\t\t\t\t\t\t\t\t\t\t\t\t: l10n.l('whois.neverSeen', \"Never seen\"),\n\t\t\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t\t\t\tn.component(c.status ? new Txt(' (' + c.status + ')') : null),\n\t\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t]),\n\t\t\t\t\t\tn.component(hasTags(c.tags)\n\t\t\t\t\t\t\t? new Elem(n => n.elem('div', { className: 'badge--select badge--margin' }, [\n\t\t\t\t\t\t\t\tn.component(new CharTagsList(c.tags, { eventBus: this.app.eventBus })),\n\t\t\t\t\t\t\t]))\n\t\t\t\t\t\t\t: null,\n\t\t\t\t\t\t),\n\t\t\t\t\t]),\n\t\t\t\t])));\n\t\t\t});\n\t}\n}\n\nexport default Whois;\n","import { Elem, Txt, Textarea } from 'modapp-base-component';\nimport { ModelComponent, ModelTxt } from 'modapp-resource-component';\nimport { Model } from 'modapp-resource';\nimport l10n from 'modapp-l10n';\nimport Dialog from 'classes/Dialog';\nimport Collapser from 'components/Collapser';\nimport PanelSection from 'components/PanelSection';\nimport firstLetterUppercase from 'utils/firstLetterUppercase';\nimport './dialogRequestControl.scss';\n\nconst txtNotSet = l10n.l('dialogRequestControl.unknownGenderAndSpecies', \"Unknown gender and species\");\n\nclass DialogRequestControl {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'api', 'player', 'avatar' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t}\n\n\topen(puppeteer) {\n\t\tif (this.dialog) return;\n\n\t\tlet model = new Model({ data: {\n\t\t\tmsg: \"\",\n\t\t}, eventBus: this.app.eventBus });\n\n\t\tthis.dialog = new Dialog({\n\t\t\ttitle: l10n.l('dialogRequestControl.requestControl', \"Request puppet control\"),\n\t\t\tclassName: 'dialogrequestcontrol',\n\t\t\tcontent: new Elem(n => n.elem('div', [\n\t\t\t\tn.elem('div', { className: 'flex-row pad12 pad-bottom-l' }, [\n\t\t\t\t\tn.elem('div', { className: 'flex-auto' }, [\n\t\t\t\t\t\tn.component(this.module.avatar.newAvatar(puppeteer.puppet, { size: 'large' })),\n\t\t\t\t\t]),\n\t\t\t\t\tn.elem('div', { className: 'flex-1' }, [\n\t\t\t\t\t\tn.component(new ModelTxt(puppeteer.puppet, m => (m.name + \" \" + m.surname).trim(), {\n\t\t\t\t\t\t\ttagName: 'div',\n\t\t\t\t\t\t\tclassName: 'dialogrequestcontrol--fullname',\n\t\t\t\t\t\t})),\n\t\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\t\tpuppeteer.puppet,\n\t\t\t\t\t\t\tnew Txt('', {\n\t\t\t\t\t\t\t\ttagName: 'div',\n\t\t\t\t\t\t\t\tclassName: 'dialogrequestcontrol--genderspecies',\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t(m, c) => {\n\t\t\t\t\t\t\t\tlet genderSpecies = (firstLetterUppercase(m.gender) + ' ' + firstLetterUppercase(m.species)).trim();\n\t\t\t\t\t\t\t\tc[genderSpecies ? 'removeClass' : 'addClass']('common--placeholder')\n\t\t\t\t\t\t\t\t\t.setText(genderSpecies || txtNotSet);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t)),\n\t\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\t\tpuppeteer.puppet,\n\t\t\t\t\t\t\tnew ModelComponent(\n\t\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\t\tnew Txt(\"\", { tagName: 'div', className: 'dialogrequestcontrol--controlledby' }),\n\t\t\t\t\t\t\t\t(m, c) => this._setControlledBy(c, puppeteer.puppet),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t(m, c, change) => {\n\t\t\t\t\t\t\t\tif (!change || change.hasOwnProperty('puppeteer')) {\n\t\t\t\t\t\t\t\t\tc.setModel(m.puppeteer);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthis._setControlledBy(c.getComponent(), m);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t)),\n\t\t\t\t\t]),\n\t\t\t\t]),\n\t\t\t\tn.component('msg', new PanelSection(\n\t\t\t\t\tl10n.l('dialogRequestControl.profileName', \"Optional message\"),\n\t\t\t\t\tnew ModelComponent(\n\t\t\t\t\t\tmodel,\n\t\t\t\t\t\tnew Textarea(model.msg, {\n\t\t\t\t\t\t\tclassName: 'dialogtag--msg dialog--input common--paneltextarea-small common--msg-size',\n\t\t\t\t\t\t\tevents: {\n\t\t\t\t\t\t\t\tinput: c => {\n\t\t\t\t\t\t\t\t\tlet v = c.getValue().replace(/\\r?\\n/gi, '');\n\t\t\t\t\t\t\t\t\tc.setValue(v);\n\t\t\t\t\t\t\t\t\tmodel.set({ msg: v });\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tattributes: { name: 'dialogtag-msg', spellcheck: 'true' },\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t(m, c) => c.setValue(m.msg, false),\n\t\t\t\t\t),\n\t\t\t\t\t{\n\t\t\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t\tpopupTip: l10n.l('dialogRequestControl.msgInfo', \"An optional message to include in the request to the current puppeteer.\"),\n\t\t\t\t\t},\n\t\t\t\t)),\n\t\t\t\tn.component('message', new Collapser(null)),\n\t\t\t\tn.elem('div', { className: 'pad-top-xl' }, [\n\t\t\t\t\tn.elem('create', 'button', {\n\t\t\t\t\t\tevents: { click: () => this._onRequestControl(puppeteer, model) },\n\t\t\t\t\t\tclassName: 'btn primary dialog--btn',\n\t\t\t\t\t}, [\n\t\t\t\t\t\tn.component(new Txt(l10n.l('dialogrequestcontrol.requestControl', \"Request control\"))),\n\t\t\t\t\t]),\n\t\t\t\t]),\n\t\t\t])),\n\t\t\tonClose: () => { this.dialog = null; },\n\t\t});\n\n\t\tthis.dialog.open();\n\t\tthis.dialog.getContent().getNode('msg').getComponent().getComponent().getElement().focus();\n\t}\n\n\t_setControlledBy(c, puppet) {\n\t\tlet puppeteer = puppet.puppeteer;\n\t\tc.setText(puppeteer\n\t\t\t? l10n.l('dialogRequestControl.controlledBy', \"Controlled by {fullName}\", { fullName: (puppeteer.name + ' ' + puppeteer.surname).trim() })\n\t\t\t: puppet.state == 'awake'\n\t\t\t\t? l10n.l('dialogRequestControl.controlledByOwner', \"Controlled by owner\")\n\t\t\t\t: l10n.l('dialogRequestControl.notControlled', \"Not controlled\"),\n\t\t);\n\t}\n\n\t_onRequestControl(puppeteer, model) {\n\t\tif (this.requestPromise) return this.requestPromise;\n\n\t\tthis.requestPromise = this.module.player.getPlayer().call('requestControl', {\n\t\t\tcharId: puppeteer.char.id,\n\t\t\tpuppetId: puppeteer.puppet.id,\n\t\t\tmsg: model.msg.trim() || null,\n\t\t}).then(() => {\n\t\t\tif (this.dialog) {\n\t\t\t\tthis.dialog.close();\n\t\t\t}\n\t\t}).catch(err => {\n\t\t\tif (!this.dialog) return;\n\t\t\tthis._setMessage(l10n.l(err.code, err.message, err.data));\n\t\t}).then(() => {\n\t\t\tthis.requestPromise = null;\n\t\t});\n\n\t\treturn this.requestPromise;\n\t}\n\n\t_setMessage(msg) {\n\t\tif (!this.dialog) return;\n\t\tlet n = this.dialog.getContent().getNode('message');\n\t\tn.setComponent(msg ? new Txt(msg, { className: 'dialog--error' }) : null);\n\t}\n}\n\nexport default DialogRequestControl;\n","import { Elem, Txt } from 'modapp-base-component';\nimport { ModelComponent, ModelTxt } from 'modapp-resource-component';\nimport l10n from 'modapp-l10n';\nimport CharTagsList from 'components/CharTagsList';\nimport FormatTxt from 'components/FormatTxt';\nimport Collapser from 'components/Collapser';\nimport Fader from 'components/Fader';\nimport PanelSection from 'components/PanelSection';\nimport FAIcon from 'components/FAIcon';\nimport Dialog from 'classes/Dialog';\nimport firstLetterUppercase from 'utils/firstLetterUppercase';\nimport idleLevels, { getCharIdleLevel } from 'utils/idleLevels';\nimport formatDateTime from 'utils/formatDateTime';\nimport './dialogAboutChar.scss';\n\nconst txtNotSet = l10n.l('dialogAboutChar.unknownGenderAndSpecies', \"Unknown gender and species\");\nconst txtWatch = l10n.l('dialogAboutChar.watch', \"Watch\");\nconst txtUnwatch = l10n.l('dialogAboutChar.unwatch', \"Unwatch\");\n\nclass DialogAboutChar {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'avatar', 'api', 'charsAwake', 'player', 'toaster' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t}\n\n\topen(char) {\n\t\tif (this.dialog) return;\n\n\t\tthis.dialog = true;\n\n\t\tthis.module.api.get('core.char.' + char.id + '.info').then(charInfo => {\n\n\t\t\tlet tags = new CharTagsList(char.tags, {\n\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\teventBus: this.app.eventBus,\n\t\t\t});\n\t\t\tlet lfrpComponent = new PanelSection(\n\t\t\t\tl10n.l('dialogAboutChar.lfrp', \"Looking for roleplay\"),\n\t\t\t\tnew ModelComponent(\n\t\t\t\t\tcharInfo,\n\t\t\t\t\tnew FormatTxt(\"\", { className: 'common--desc-size' }),\n\t\t\t\t\t(m, c) => c.setFormatText(m.lfrpDesc || ''),\n\t\t\t\t),\n\t\t\t\t{\n\t\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\t\topen: true,\n\t\t\t\t},\n\t\t\t);\n\t\t\tlet about = new PanelSection(\n\t\t\t\tl10n.l('dialogAboutChar.about', \"About\"),\n\t\t\t\tnew ModelComponent(\n\t\t\t\t\tcharInfo,\n\t\t\t\t\tnew FormatTxt(\"\", { className: 'common--desc-size' }),\n\t\t\t\t\t(m, c) => c.setFormatText(m.about),\n\t\t\t\t),\n\t\t\t\t{\n\t\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\t\topen: true,\n\t\t\t\t},\n\t\t\t);\n\n\t\t\tthis.dialog = new Dialog({\n\t\t\t\ttitle: l10n.l('dialogAboutChar.aboutChar', \"About character\"),\n\t\t\t\tclassName: 'dialogaboutchar',\n\t\t\t\tcontent: new ModelComponent(\n\t\t\t\t\tchar,\n\t\t\t\t\tnew Elem(n => n.elem('div', [\n\t\t\t\t\t\tn.elem('div', { className: 'flex-row pad12 pad-bottom-l' }, [\n\t\t\t\t\t\t\tn.elem('div', { className: 'flex-auto' }, [\n\t\t\t\t\t\t\t\tn.component(this.module.avatar.newAvatar(char, { size: 'large' })),\n\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\tn.elem('div', { className: 'flex-1' }, [\n\t\t\t\t\t\t\t\tn.component('name', new Txt('', {\n\t\t\t\t\t\t\t\t\ttagName: 'div',\n\t\t\t\t\t\t\t\t\tclassName: 'dialogaboutchar--fullname',\n\t\t\t\t\t\t\t\t})),\n\t\t\t\t\t\t\t\tn.component('genderspecies', new Txt('', {\n\t\t\t\t\t\t\t\t\ttagName: 'div',\n\t\t\t\t\t\t\t\t\tclassName: 'dialogaboutchar--genderspecies',\n\t\t\t\t\t\t\t\t})),\n\t\t\t\t\t\t\t\tn.elem('idleStatus', 'div', { className: 'dialogaboutchar--status flex-1' }, [\n\t\t\t\t\t\t\t\t\tn.component('idle', new Txt('')),\n\t\t\t\t\t\t\t\t\tn.component('status', new Txt('')),\n\t\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\tn.elem('div', { className: 'flex-auto' }, [\n\t\t\t\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\t\t\t\tthis.module.charsAwake.getWatches(),\n\t\t\t\t\t\t\t\t\tnew Fader(),\n\t\t\t\t\t\t\t\t\t(m, c, change) => {\n\t\t\t\t\t\t\t\t\t\tif (change && !change.hasOwnProperty(char.id)) return;\n\t\t\t\t\t\t\t\t\t\tlet isWatched = m && m[char.id];\n\n\t\t\t\t\t\t\t\t\t\tc.setComponent(new Elem(n => n.elem('button', {\n\t\t\t\t\t\t\t\t\t\t\tclassName: 'btn lighten medium icon-left',\n\t\t\t\t\t\t\t\t\t\t\tevents: {\n\t\t\t\t\t\t\t\t\t\t\t\tclick: () => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tlet rid = 'note.player.' + this.module.player.getPlayer().id + '.watch.' + char.id;\n\t\t\t\t\t\t\t\t\t\t\t\t\tthis.module.api.call(rid, isWatched ? 'delete' : 'addWatcher')\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t.then(() => this.module.toaster.open({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttitle: isWatched\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? l10n.l('dialogAboutChar.characterUnwatched', \"Character unwatched\")\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: l10n.l('dialogAboutChar.characterWatched', \"Character watched\"),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcontent: new Txt(isWatched\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? l10n.l('dialogAboutChar.unwatchedCharacter', \"Unwatched {name} {surname}\", char)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: l10n.l('dialogAboutChar.watchedCharacter', \"Watched {name} {surname}\", char),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcloseOn: 'click',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype: 'success',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tautoclose: true,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}))\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t.catch(err => this.module.toaster.openError(err));\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t}, [\n\t\t\t\t\t\t\t\t\t\t\tn.component('ico', new FAIcon(isWatched ? 'eye-slash' : 'eye')),\n\t\t\t\t\t\t\t\t\t\t\tn.component('txt', new Txt(isWatched ? txtUnwatch : txtWatch)),\n\t\t\t\t\t\t\t\t\t\t])));\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t]),\n\t\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\t\tcharInfo,\n\t\t\t\t\t\t\tnew Collapser(),\n\t\t\t\t\t\t\t(m, c) => c.setComponent(typeof m.lfrpDesc == 'string'\n\t\t\t\t\t\t\t\t? m.lfrpDesc\n\t\t\t\t\t\t\t\t\t? lfrpComponent\n\t\t\t\t\t\t\t\t\t: new Txt(l10n.l('dialogAboutChar.currentlyLookingForRoleplay', \"Currently looking for roleplay.\"), {\n\t\t\t\t\t\t\t\t\t\tclassName: 'dialogaboutchar--lfrp-placeholder',\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t: null,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t)),\n\t\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\t\tcharInfo,\n\t\t\t\t\t\t\tnew Collapser(),\n\t\t\t\t\t\t\t(m, c) => c.setComponent(m.about ? about : null),\n\t\t\t\t\t\t)),\n\t\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\t\tchar.tags,\n\t\t\t\t\t\t\tnew Collapser(),\n\t\t\t\t\t\t\t(m, c) => c.setComponent(Object.keys(m.props || m).length\n\t\t\t\t\t\t\t\t? tags\n\t\t\t\t\t\t\t\t: null,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t)),\n\t\t\t\t\t\tn.elem('div', { className: 'dialogaboutchar--info common--sectionpadding' }, [\n\t\t\t\t\t\t\tn.component('lastAwake', new Txt('', {\n\t\t\t\t\t\t\t\ttagName: 'div',\n\t\t\t\t\t\t\t\tclassName: 'dialogaboutchar--lastawake',\n\t\t\t\t\t\t\t})),\n\t\t\t\t\t\t\tn.component('puppeteer', new Collapser()),\n\t\t\t\t\t\t]),\n\t\t\t\t\t\tn.elem('div', { className: 'pad-top-xl pad-bottom-m flex-row margin16' }, [\n\t\t\t\t\t\t\tn.elem('close', 'button', {\n\t\t\t\t\t\t\t\tclassName: 'btn primary flex-auto common--btnwidth',\n\t\t\t\t\t\t\t\tevents: { click: () => this.close() },\n\t\t\t\t\t\t\t}, [\n\t\t\t\t\t\t\t\tn.component(new Txt(l10n.l('dialogAboutChar.close', \"Close\"))),\n\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t]),\n\t\t\t\t\t])),\n\t\t\t\t\t(m, c, change) => {\n\t\t\t\t\t\tlet genderSpecies = (firstLetterUppercase(m.gender) + ' ' + firstLetterUppercase(m.species)).trim();\n\t\t\t\t\t\tc.getNode('name').setText((m.name + \" \" + m.surname).trim());\n\t\t\t\t\t\tc.getNode('genderspecies')[genderSpecies ? 'removeClass' : 'addClass']('common--placeholder')\n\t\t\t\t\t\t\t.setText(genderSpecies || txtNotSet);\n\t\t\t\t\t\tc.getNode('lastAwake').setText(m.awake\n\t\t\t\t\t\t\t? l10n.l('dialogAboutChar.wokeUp', \"Woke up {time}\", { time: formatDateTime(new Date(m.lastAwake)) })\n\t\t\t\t\t\t\t: m.lastAwake\n\t\t\t\t\t\t\t\t? l10n.l('dialogAboutChar.lastSeen', \"Last seen {time}\", { time: formatDateTime(new Date(m.lastAwake)) })\n\t\t\t\t\t\t\t\t: l10n.l('dialogAboutChar.neverSeen', \"Never seen\"),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tlet lvl = getCharIdleLevel(m);\n\t\t\t\t\t\tc.getNode('idle').setText(lvl.text);\n\t\t\t\t\t\tc.getNode('status').setText(m.status ? ' (' + m.status + ')' : '');\n\t\t\t\t\t\tif (!change || change.hasOwnProperty('puppeteer')) {\n\t\t\t\t\t\t\tc.getNode('puppeteer').setComponent(m.puppeteer\n\t\t\t\t\t\t\t \t? new ModelTxt(\n\t\t\t\t\t\t\t\t\t m.puppeteer,\n\t\t\t\t\t\t\t\t\t m => l10n.l('dialogAboutChar.controlledBy', \"Controlled by {fullname}\", { fullname: (m.name + ' ' + m.surname).trim() }),\n\t\t\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\t\ttagName: 'div',\n\t\t\t\t\t\t\t\t\t\tclassName: 'dialogaboutchar--puppeteer',\n\t\t\t\t\t\t\t\t\t },\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t \t: null,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfor (let l of idleLevels) {\n\t\t\t\t\t\t\tc[l == lvl ? 'addNodeClass' : 'removeNodeClass']('idleStatus', l.className);\n\t\t\t\t\t\t}\n\n\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t\tonClose: () => { this.dialog = null; },\n\t\t\t});\n\n\t\t\tthis.dialog.open();\n\t\t\ttry {\n\t\t\t\tthis.dialog.getContent().getNode('close').focus();\n\t\t\t} catch (e) {}\n\t\t});\n\t}\n\n\tclose() {\n\t\tif (this.dialog) {\n\t\t\tthis.dialog.close();\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\t_updateAbout(char, charInfo, c) {\n\t\tc.getNode('about').setFormatText(charInfo.about);\n\t\tif (!change || change.hasOwnProperty('tags')) {\n\t\t\tc.getNode('tags').setComponent(char.tags ? new CharTagsList(char.tags, {\n\t\t\t\tclassName: 'dialogaboutchar--tags',\n\t\t\t\teventBus: this.app.eventBus,\n\t\t\t}) : null);\n\t\t}\n\t}\n}\n\nexport default DialogAboutChar;\n","import { Elem, Context } from 'modapp-base-component';\nimport { Txt, Input } from 'modapp-base-component';\nimport { ModelComponent } from 'modapp-resource-component';\nimport { Model } from 'modapp-resource';\nimport l10n from 'modapp-l10n';\nimport Dialog from 'classes/Dialog';\nimport Collapser from 'components/Collapser';\nimport PanelSection from 'components/PanelSection';\nimport PopupTip from 'components/PopupTip';\nimport './dialogCreateChar.scss';\n\nconst tips = {\n\tName: {\n\t\tel: 'name',\n\t\ttitle: l10n.l('dialogCreateChar.chooseName', \"Choose a name\"),\n\t\tcontent: l10n.l('dialogCreateChar.chooseNameDesc', \"Select a nice name for your character. Don't worry too much! You can always change it later.\"),\n\t},\n\tNameNoSpace: {\n\t\tel: 'name',\n\t\ttitle: l10n.l('dialogCreateChar.noSpaceInName', \"No space in name\"),\n\t\tcontent: l10n.l('dialogCreateChar.noSpaceInNameDesc', \"A name cannot contain space. But the surname may contain multiple words.\"),\n\t},\n\tNameInvalid: {\n\t\tel: 'name',\n\t\ttitle: l10n.l('dialogCreateChar.noSymbols', \"No symbols\"),\n\t\tcontent: l10n.l('dialogCreateChar.noSymbolsInNameDesc', \"Names can only contain letters, numbers, dash, or apostrophe.\"),\n\t},\n\tSurname: {\n\t\tel: 'surname',\n\t\ttitle: l10n.l('dialogCreateChar.chooseSurname', \"Choose a surname\"),\n\t\tcontent: l10n.l('dialogCreateChar.chooseSurnameDesc', \"Select a surname to distinguish your character from others with the same name. Don't have a surname? Try a title instead; maybe \\\"the visitor\\\", or \\\"the explorer\\\"?\"),\n\t},\n\tSurnameInvalid: {\n\t\tel: 'surname',\n\t\ttitle: l10n.l('dialogCreateChar.noSymbols', \"No symbols\"),\n\t\tcontent: l10n.l('dialogCreateChar.noSymbolsInSurnameDesc', \"Surnames can only contain letters, numbers, dash, apostrophe, or space.\"),\n\t},\n\tCreate: {\n\t\tel: 'button',\n\t\tposition: [ 'right', 'bottom-right' ],\n\t\ttitle: l10n.l('dialogCreateChar.createChar', \"Create your character\"),\n\t\tcontent: l10n.l('dialogCreateChar.createCharDesc', \"Satisfied with the name? Click here to create the character.\"),\n\t},\n};\n\nclass DialogCreateChar {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'api',\n\t\t\t'player',\n\t\t\t'onboarding',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t}\n\n\t/**\n\t * Opens a dialog to create a new character.\n\t * @param {object} [opt] Optional parameters.\n\t */\n\topen(opt) {\n\t\tif (this.dialog) return;\n\n\t\tlet model = new Model({ data: {\n\t\t\tname: \"\",\n\t\t\tsurname: \"\",\n\t\t\tfocus: null,\n\t\t}, eventBus: this.app.eventBus });\n\n\t\tlet nameComponent = new Input(\"\", {\n\t\t\tevents: {\n\t\t\t\tinput: c => model.set({ name: c.getValue() }),\n\t\t\t\tfocusout: c => {\n\t\t\t\t\tif (model.focus == 'name') {\n\t\t\t\t\t\tmodel.set({ focus: null });\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tfocus: c => model.set({ focus: 'name' }),\n\t\t\t},\n\t\t\tattributes: { spellcheck: 'false' },\n\t\t\tclassName: 'dialog--input',\n\t\t});\n\n\t\tlet surnameComponent = new Input(\"\", {\n\t\t\tevents: {\n\t\t\t\tinput: c => model.set({ surname: c.getValue() }),\n\t\t\t\tfocusout: c => {\n\t\t\t\t\tif (model.focus == 'surname') {\n\t\t\t\t\t\tmodel.set({ focus: null });\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tfocus: c => model.set({ focus: 'surname' }),\n\t\t\t},\n\t\t\tattributes: { name: 'dialogcreatechar-surname', spellcheck: 'false' },\n\t\t\tclassName: 'dialog--input',\n\t\t});\n\n\t\tlet messageComponent = new Collapser(null);\n\n\t\tlet buttonComponent = new Elem(n => n.elem('create', 'button', {\n\t\t\tevents: { click: () => this._onCreate(model, messageComponent) },\n\t\t\tclassName: 'btn primary dialog--btn',\n\t\t}, [\n\t\t\tn.component(new Txt(l10n.l('dialogCreateChar.create', \"Create\"))),\n\t\t]));\n\n\t\tthis.dialog = new Dialog({\n\t\t\ttitle: l10n.l('dialogCreateChar.createNewChar', \"Create new character\"),\n\t\t\tclassName: 'dialogcreatechar',\n\t\t\tcontent: new Context(\n\t\t\t\t() => ({ tipId: null }),\n\t\t\t\tctx => this._closeTip(ctx),\n\t\t\t\tctx => new ModelComponent(\n\t\t\t\t\tmodel,\n\t\t\t\t\tnew Elem(n => n.elem('div', [\n\t\t\t\t\t\tn.elem('div', { className: 'flex-row dialogcreatechar--disclaimer' }, [\n\t\t\t\t\t\t\tn.component(new Txt(l10n.l('dialogCreateChar.noCanonNames', \"No canon characters or established figures.\"), { className: 'flex-1 dialogcreatechar--disclaimer-info' })),\n\t\t\t\t\t\t\tn.component(new PopupTip(l10n.l('dialogCreateChar.noCanonNamesInfo', \"Roleplaying real people, established figures, or characters created or owned by someone else is not allowed.\"), {\n\t\t\t\t\t\t\t\tclassName: 'popuptip--width-m flex-auto',\n\t\t\t\t\t\t\t\tposition: 'left-bottom',\n\t\t\t\t\t\t\t})),\n\t\t\t\t\t\t]),\n\t\t\t\t\t\tn.component('name', new PanelSection(\n\t\t\t\t\t\t\tl10n.l('dialogCreateChar.name', \"Name\"),\n\t\t\t\t\t\t\tnameComponent,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t\t\t\tpopupTip: l10n.l('dialogCreateChar.nameInfo', \"Character name may contain numbers, letters, dash (-), and apostrophe (').\\nIt can be changed later.\"),\n\t\t\t\t\t\t\t\tpopupTipPosition: 'left',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t)),\n\t\t\t\t\t\tn.component(new PanelSection(\n\t\t\t\t\t\t\tl10n.l('dialogCreateChar.surname', \"Surname\"),\n\t\t\t\t\t\t\tsurnameComponent,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t\t\t\tpopupTip: l10n.l('dialogCreateChar.surnameInfo', \"Surname is used for unique identification, and may contain numbers, letters, dash (-), apostrophe ('), and spaces. It may also be titles (eg. \\\"the Beast\\\") or other creative name endings.\\nIt can be changed later.\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t)),\n\t\t\t\t\t\tn.component(messageComponent),\n\t\t\t\t\t\tn.elem('div', { className: 'pad-top-xl' }, [\n\t\t\t\t\t\t\tn.component(buttonComponent),\n\t\t\t\t\t\t]),\n\t\t\t\t\t])),\n\t\t\t\t\t(m, c) => {\n\t\t\t\t\t\tif (this.module.onboarding.getModel().createChar) {\n\t\t\t\t\t\t\tthis._setTip(m, ctx, nameComponent, surnameComponent, buttonComponent);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t{ postrenderUpdate: true },\n\t\t\t\t),\n\t\t\t),\n\t\t\tonClose: () => {\n\t\t\t\tthis.dialog = null;\n\t\t\t},\n\t\t});\n\n\t\tthis.dialog.open();\n\t\tnameComponent.getElement().focus();\n\t}\n\n\t_onCreate(model, messageComponent) {\n\t\tif (this.createPromise) return this.createPromise;\n\n\t\tthis.createPromise = this.module.player.getPlayer().call('createChar', {\n\t\t\tname: model.name,\n\t\t\tsurname: model.surname,\n\t\t}).then(char => {\n\t\t\tif (this.dialog) {\n\t\t\t\tthis.dialog.close();\n\t\t\t}\n\t\t}).catch(err => {\n\t\t\tif (!this.dialog) return;\n\t\t\tthis._setMessage(messageComponent, l10n.l(err.code, err.message, err.data));\n\t\t}).then(() => {\n\t\t\tthis.createPromise = null;\n\t\t});\n\n\t\treturn this.createPromise;\n\t}\n\n\t_setMessage(messageComponent, msg) {\n\t\tmessageComponent.setComponent(msg ? new Txt(msg, { className: 'dialog--error' }) : null);\n\t}\n\n\t_setTip(m, ctx, nameComponent, surnameComponent, buttonComponent) {\n\t\tlet tipId = null;\n\t\tif (m.name.trim().length < 2) {\n\t\t\ttipId = 'Name';\n\t\t} else if (m.name.match(/^\\s*[\\p{L}\\p{N}\\-']+\\s+[\\p{L}\\p{N}\\-']/u)) {\n\t\t\ttipId = 'NameNoSpace';\n\t\t} else if (m.name.match(/[^\\s\\p{L}\\p{N}\\-']/u)) {\n\t\t\ttipId = 'NameInvalid';\n\t\t} else if (m.focus == 'name') {\n\t\t\ttipId = 'Name';\n\t\t} else if (m.surname.trim().length < 2) {\n\t\t\ttipId = 'Surname';\n\t\t} else if (m.surname.match(/[^\\s\\p{L}\\p{N}\\-']/u)) {\n\t\t\ttipId = 'SurnameInvalid';\n\t\t} else if (m.focus == 'surname') {\n\t\t\ttipId = 'Surname';\n\t\t} else {\n\t\t\ttipId = 'Create';\n\t\t}\n\n\t\tlet o = tips[tipId];\n\n\t\ttipId = 'dialogCreateChar' + tipId;\n\t\tif (ctx.tipId == tipId) return;\n\n\t\tlet el = o.el == 'name'\n\t\t\t? nameComponent.getElement()\n\t\t\t: o.el == 'surname'\n\t\t\t\t? surnameComponent.getElement()\n\t\t\t\t: buttonComponent.getElement();\n\n\t\tthis._closeTip(ctx);\n\t\tthis.module.onboarding.openTip(tipId, el, {\n\t\t\tpriority: 30,\n\t\t\tposition: o.position || [ 'right', 'bottom' ],\n\t\t\ttitle: o.title,\n\t\t\tcontent: o.content,\n\t\t});\n\t\tctx.tipId = tipId;\n\t}\n\n\t_closeTip(ctx) {\n\t\tif (ctx.tipId) {\n\t\t\tthis.module.onboarding.closeTip(ctx.tipId);\n\t\t\tctx.tipId = null;\n\t\t}\n\t}\n}\n\nexport default DialogCreateChar;\n","import { Elem } from 'modapp-base-component';\nimport { Txt, Input } from 'modapp-base-component';\nimport { Model } from 'modapp-resource';\nimport l10n from 'modapp-l10n';\nimport Dialog from 'classes/Dialog';\nimport Collapser from 'components/Collapser';\nimport PanelSection from 'components/PanelSection';\nimport './dialogCreateCharProfile.scss';\n\nclass DialogCreateCharProfile {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'api', 'player' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t}\n\n\topen(ctrl) {\n\t\tif (this.dialog) return;\n\n\t\tlet model = new Model({ data: {\n\t\t\tname: \"\",\n\t\t\tkey: \"\",\n\t\t}, eventBus: this.app.eventBus });\n\n\t\tthis.dialog = new Dialog({\n\t\t\ttitle: l10n.l('dialogCreateCharProfile.createNewProfile', \"Create new profile\"),\n\t\t\tclassName: 'dialogcreatecharprofile',\n\t\t\tcontent: new Elem(n => n.elem('div', [\n\t\t\t\tn.component('name', new PanelSection(\n\t\t\t\t\tl10n.l('dialogCreateCharProfile.profileName', \"Profile name\"),\n\t\t\t\t\tnew Input(\"\", {\n\t\t\t\t\t\tevents: { input: c => model.set({ name: c.getValue() }) },\n\t\t\t\t\t\tattributes: { spellcheck: 'false' },\n\t\t\t\t\t\tclassName: 'dialog--input',\n\t\t\t\t\t}),\n\t\t\t\t\t{\n\t\t\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t\tpopupTip: l10n.l('dialogCreateCharProfile.nameInfo', \"A short but descriptive name for the profile.\"),\n\t\t\t\t\t\tpopupTipPosition: 'left-bottom',\n\t\t\t\t\t},\n\t\t\t\t)),\n\t\t\t\tn.component(new PanelSection(\n\t\t\t\t\tl10n.l('dialogCreateCharProfile.keyword', \"Keyword\"),\n\t\t\t\t\tnew Input(model.key, {\n\t\t\t\t\t\tevents: { input: c => model.set({ key: c.getValue() }) },\n\t\t\t\t\t\tattributes: { spellcheck: 'false' },\n\t\t\t\t\t\tclassName: 'dialog--input',\n\t\t\t\t\t}),\n\t\t\t\t\t{\n\t\t\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t\tpopupTip: l10n.l('dialogCreateCharProfile.keyInfo', \"Keyword is used to identify the character profile in console commands.\"),\n\t\t\t\t\t},\n\t\t\t\t)),\n\t\t\t\tn.component('message', new Collapser(null)),\n\t\t\t\tn.elem('div', { className: 'pad-top-xl' }, [\n\t\t\t\t\tn.elem('create', 'button', {\n\t\t\t\t\t\tevents: { click: () => this._onCreate(ctrl, model) },\n\t\t\t\t\t\tclassName: 'btn primary dialog--btn',\n\t\t\t\t\t}, [\n\t\t\t\t\t\tn.component(new Txt(l10n.l('dialogCreateCharProfile.create', \"Create\"))),\n\t\t\t\t\t]),\n\t\t\t\t]),\n\t\t\t])),\n\t\t\tonClose: () => { this.dialog = null; },\n\t\t});\n\n\t\tthis.dialog.open();\n\t\tthis.dialog.getContent().getNode('name').getComponent().getElement().focus();\n\t}\n\n\t_onCreate(ctrl, model) {\n\t\tif (this.createPromise) return this.createPromise;\n\n\t\tthis.createPromise = ctrl.call('createProfile', {\n\t\t\tname: model.name,\n\t\t\tkey: model.key,\n\t\t}).then(char => {\n\t\t\tif (this.dialog) {\n\t\t\t\tthis.dialog.close();\n\t\t\t}\n\t\t}).catch(err => {\n\t\t\tif (!this.dialog) return;\n\t\t\tthis._setMessage(l10n.l(err.code, err.message, err.data));\n\t\t}).then(() => {\n\t\t\tthis.createPromise = null;\n\t\t});\n\n\t\treturn this.createPromise;\n\t}\n\n\t_setMessage(msg) {\n\t\tif (!this.dialog) return;\n\t\tlet n = this.dialog.getContent().getNode('message');\n\t\tn.setComponent(msg ? new Txt(msg, { className: 'dialog--error' }) : null);\n\t}\n}\n\nexport default DialogCreateCharProfile;\n","import { Elem, Txt, Input } from 'modapp-base-component';\nimport { ModelComponent } from 'modapp-resource-component';\nimport { Model } from 'modapp-resource';\nimport l10n from 'modapp-l10n';\nimport Dialog from 'classes/Dialog';\nimport Collapser from 'components/Collapser';\nimport AutoComplete from 'components/AutoComplete';\nimport LabelToggleBox from 'components/LabelToggleBox';\nimport PanelSection from 'components/PanelSection';\nimport labelCompare from 'utils/labelCompare';\nimport patternMatch, { patternMatchRender } from 'utils/patternMatch';\nimport prepareKeys from 'utils/prepareKeys';\nimport './dialogCreateExit.scss';\n\nfunction isId(v) {\n\treturn v.trim().match(/^#?[a-vA-V0-9]{20,20}$/);\n}\n\nclass DialogCreateExit {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\t// Bind callbacks\n\t\tthis._onClose = this._onClose.bind(this);\n\t\tthis._onCreate = this._onCreate.bind(this);\n\n\t\tthis.app.require([ 'api', 'player', 'createExit', 'requestExit', 'confirm' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t}\n\n\t/**\n\t * Opens a dialog to createa new exit for the room.\n\t * @param {Model} ctrl Controlled character.\n\t * @param {Model} room Room to create the exit from.\n\t * @param {object} [opt] Optional parameters\n\t * @param {boolean} [opt.hidden] Flag telling if exit should be hidden. Defaults to false.\n\t */\n\topen(ctrl, room, opt) {\n\t\tif (this.dialog) return;\n\t\topt = opt || {};\n\n\t\tlet model = new Model({ data: {\n\t\t\tname: \"\",\n\t\t\tnewRoom: true,\n\t\t\ttargetRoom: \"\",\n\t\t\ttargetRoomValue: \"\",\n\t\t\tkeys: \"\",\n\t\t}, eventBus: this.app.eventBus });\n\n\t\tthis.dialog = new Dialog({\n\t\t\ttitle: opt.hidden\n\t\t\t\t? l10n.l('dialogCreateHiddenExit.createHiddenExit', \"Create hidden exit\")\n\t\t\t\t: l10n.l('dialogCreateExit.createNewExit', \"Create new exit\"),\n\t\t\tclassName: 'dialogcreateexit',\n\t\t\tcontent: new Elem(n => n.elem('div', [\n\t\t\t\tn.component('name', new PanelSection(\n\t\t\t\t\tl10n.l('pageEditExit.exitName', \"Exit name\"),\n\t\t\t\t\tnew Input(model.name, {\n\t\t\t\t\t\tevents: { input: c => model.set({ name: c.getValue() }) },\n\t\t\t\t\t\tattributes: { spellcheck: 'false' },\n\t\t\t\t\t\tclassName: 'dialog--input',\n\t\t\t\t\t}),\n\t\t\t\t\t{\n\t\t\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t},\n\t\t\t\t)),\n\t\t\t\tn.component(new PanelSection(\n\t\t\t\t\tl10n.l('pageEditExit.exitName', \"Keywords\"),\n\t\t\t\t\tnew Input(model.keys, {\n\t\t\t\t\t\tevents: { input: c => model.set({ keys: c.getValue() }) },\n\t\t\t\t\t\tattributes: { spellcheck: 'false' },\n\t\t\t\t\t\tclassName: 'dialog--input',\n\t\t\t\t\t}),\n\t\t\t\t\t{\n\t\t\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t\tpopupTip: l10n.l('pageEditExit.keysInfo', \"Comma-separated list of case-insensitive keywords used for identifying the exit.\"),\n\t\t\t\t\t},\n\t\t\t\t)),\n\t\t\t\tn.component(new PanelSection(\n\t\t\t\t\tl10n.l('dialogCreateExit.destination', \"Destination\"),\n\t\t\t\t\tnew Elem(n => n.elem('div', [\n\t\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\t\tmodel,\n\t\t\t\t\t\t\tnew LabelToggleBox(l10n.l('dialogCreateExit.createNewRoom', \"Create new room\"), false, {\n\t\t\t\t\t\t\t\tclassName: 'common--formmargin',\n\t\t\t\t\t\t\t\tonChange: v => model.set({ newRoom: v }),\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t(m, c) => c.setValue(m.newRoom, false),\n\t\t\t\t\t\t)),\n\t\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\t\tmodel,\n\t\t\t\t\t\t\tnew Collapser(),\n\t\t\t\t\t\t\t(m, c, change) => {\n\t\t\t\t\t\t\t\tif (change && !change.hasOwnProperty('newRoom')) return;\n\t\t\t\t\t\t\t\tc.setComponent(m.newRoom ? null : new AutoComplete({\n\t\t\t\t\t\t\t\t\tclassName: 'dialog--input dialog--incomplete',\n\t\t\t\t\t\t\t\t\tattributes: { placeholder: \"Search owned room or enter a room #ID\", name: 'dialogcreateexit-targetroom', spellcheck: 'false' },\n\t\t\t\t\t\t\t\t\tfetch: (text, update, c) => {\n\t\t\t\t\t\t\t\t\t\tmodel.set({ targetRoom: null });\n\t\t\t\t\t\t\t\t\t\tif (!isId(text)) {\n\t\t\t\t\t\t\t\t\t\t\tc.addClass('dialog--incomplete');\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tlet list = (ctrl.ownedRooms ? ctrl.ownedRooms.toArray() : [])\n\t\t\t\t\t\t\t\t\t\t\t.filter(m => patternMatch(m.name, text))\n\t\t\t\t\t\t\t\t\t\t\t.map(m => ({ value: m.id, label: m.name }))\n\t\t\t\t\t\t\t\t\t\t\t.sort(labelCompare);\n\t\t\t\t\t\t\t\t\t\tupdate(list);\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tevents: {\n\t\t\t\t\t\t\t\t\t\tinput: c => {\n\t\t\t\t\t\t\t\t\t\t\tlet v = c.getProperty('value');\n\t\t\t\t\t\t\t\t\t\t\tmodel.set({ targetRoomValue: v });\n\t\t\t\t\t\t\t\t\t\t\tif (isId(v)) {\n\t\t\t\t\t\t\t\t\t\t\t\tc.removeClass('dialog--incomplete');\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\trender: patternMatchRender,\n\t\t\t\t\t\t\t\t\tminLength: 1,\n\t\t\t\t\t\t\t\t\tonSelect: (c, item) => {\n\t\t\t\t\t\t\t\t\t\tc.removeClass('dialog--incomplete');\n\t\t\t\t\t\t\t\t\t\tmodel.set({ targetRoom: item.value });\n\t\t\t\t\t\t\t\t\t\tc.setProperty('value', item.label);\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t}));\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t)),\n\t\t\t\t\t])),\n\t\t\t\t\t{\n\t\t\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t\tpopupTip: l10n.l('dialogCreateExit.destinationInfo', \"Create a new room, search for an owned room, or enter a room #ID as exit destination.\"),\n\t\t\t\t\t},\n\t\t\t\t)),\n\t\t\t\tn.component('message', new Collapser(null)),\n\t\t\t\tn.elem('div', { className: 'pad-top-xl' }, [\n\t\t\t\t\tn.elem('create', 'button', {\n\t\t\t\t\t\tevents: { click: () => this._onCreate(ctrl, room, opt, model) },\n\t\t\t\t\t\tclassName: 'btn primary dialog--btn',\n\t\t\t\t\t}, [\n\t\t\t\t\t\tn.component(new Txt(l10n.l('dialogcreateexit.createExit', \"Create exit\"))),\n\t\t\t\t\t]),\n\t\t\t\t]),\n\t\t\t])),\n\t\t\tonClose: this._onClose,\n\t\t});\n\n\t\tthis.dialog.open();\n\t\tthis.dialog.getContent().getNode('name').getComponent().getElement().focus();\n\t}\n\n\t_onClose() {\n\t\tthis.dialog = null;\n\t}\n\n\t_onCreate(ctrl, room, opt, model) {\n\t\tif (this.createPromise) return this.createPromise;\n\n\t\tif (ctrl.inRoom.id != room.id) {\n\t\t\tthis._setMessage(l10n.l('dialogCreateExit.notInRoom', \"You are no longer in the same room.\"));\n\t\t\treturn;\n\t\t}\n\n\t\tlet params = {\n\t\t\tname: model.name,\n\t\t\tkeys: prepareKeys(model.keys),\n\t\t\ttargetRoom: model.targetRoom || model.targetRoomValue.replace(/^#/, '') || null,\n\t\t\thidden: opt.hidden || undefined,\n\t\t};\n\n\t\tthis.createPromise = this.module.createExit.createExit(ctrl, params).then(char => {\n\t\t\tif (this.dialog) {\n\t\t\t\tthis.dialog.close();\n\t\t\t}\n\t\t}).catch(err => {\n\t\t\tif (err.code == 'core.targetRoomNotOwned') {\n\t\t\t\tthis.dialog.close();\n\t\t\t\tthis._requestExit(ctrl, params);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!this.dialog) return;\n\t\t\tthis._setMessage(l10n.l(err.code, err.message, err.data));\n\t\t}).then(() => {\n\t\t\tthis.createPromise = null;\n\t\t});\n\n\t\treturn this.createPromise;\n\t}\n\n\t_requestExit(ctrl, params) {\n\t\tthis.module.confirm.open(() => this.module.requestExit.requestExit(ctrl, params)\n\t\t\t.catch(err => this.module.confirm.openError(err)),\n\t\t{\n\t\t\ttitle: l10n.l('dialogCreateExit.requestExit', \"Request to create exit\"),\n\t\t\tbody: l10n.l('dialogCreateExit.requestExitBody', \"Your character doesn't own the destination room. Do you wish to make a request to the room owner?\"),\n\t\t\tconfirm: l10n.l('dialogCreateExit.makeRequest', \"Make request\"),\n\t\t\tcancel: l10n.l('dialogCreateExit.nevermind', \"Nevermind\"),\n\t\t});\n\t}\n\n\t_setMessage(msg) {\n\t\tif (!this.dialog) return;\n\t\tlet n = this.dialog.getContent().getNode('message');\n\t\tn.setComponent(msg ? new Txt(msg, { className: 'dialog--error' }) : null);\n\t}\n}\n\nexport default DialogCreateExit;\n","import { Elem } from 'modapp-base-component';\nimport { Txt, Input } from 'modapp-base-component';\nimport { Model } from 'modapp-resource';\nimport l10n from 'modapp-l10n';\nimport Dialog from 'classes/Dialog';\nimport Collapser from 'components/Collapser';\nimport PanelSection from 'components/PanelSection';\nimport './dialogCreateRoomProfile.scss';\n\n/**\n * Opens a dialog to create a room profile for the room the controlled character\n * is currently in.\n */\nclass DialogCreateRoomProfile {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'api',\n\t\t\t'player',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t}\n\n\t/**\n\t * Opens a create room profile dialog.\n\t * @param {Model} ctrl Controlled character.\n\t */\n\topen(ctrl) {\n\t\tif (this.dialog) return;\n\n\t\tlet model = new Model({ data: {\n\t\t\tname: \"\",\n\t\t\tkey: \"\",\n\t\t}, eventBus: this.app.eventBus });\n\n\t\tthis.dialog = new Dialog({\n\t\t\ttitle: l10n.l('dialogCreateRoomProfile.createNewRoomProfile', \"Create new room profile\"),\n\t\t\tclassName: 'dialogcreateroomprofile',\n\t\t\tcontent: new Elem(n => n.elem('div', [\n\t\t\t\tn.component('name', new PanelSection(\n\t\t\t\t\tl10n.l('dialogCreateRoomProfile.profileName', \"Profile name\"),\n\t\t\t\t\tnew Input(\"\", {\n\t\t\t\t\t\tevents: { input: c => model.set({ name: c.getValue() }) },\n\t\t\t\t\t\tattributes: { spellcheck: 'false' },\n\t\t\t\t\t\tclassName: 'dialog--input',\n\t\t\t\t\t}),\n\t\t\t\t\t{\n\t\t\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t\tpopupTip: l10n.l('dialogCreateRoomProfile.nameInfo', \"A short but descriptive name for the profile.\"),\n\t\t\t\t\t\tpopupTipPosition: 'left-bottom',\n\t\t\t\t\t},\n\t\t\t\t)),\n\t\t\t\tn.component(new PanelSection(\n\t\t\t\t\tl10n.l('dialogCreateRoomProfile.keyword', \"Keyword\"),\n\t\t\t\t\tnew Input(model.key, {\n\t\t\t\t\t\tevents: { input: c => model.set({ key: c.getValue() }) },\n\t\t\t\t\t\tattributes: { spellcheck: 'false' },\n\t\t\t\t\t\tclassName: 'dialog--input',\n\t\t\t\t\t}),\n\t\t\t\t\t{\n\t\t\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t\tpopupTip: l10n.l('dialogCreateRoomProfile.keyInfo', \"Keyword is used to identify the room profile in console commands.\"),\n\t\t\t\t\t},\n\t\t\t\t)),\n\t\t\t\tn.component('message', new Collapser(null)),\n\t\t\t\tn.elem('div', { className: 'pad-top-xl' }, [\n\t\t\t\t\tn.elem('create', 'button', {\n\t\t\t\t\t\tevents: { click: () => this._onCreate(ctrl, model) },\n\t\t\t\t\t\tclassName: 'btn primary dialog--btn',\n\t\t\t\t\t}, [\n\t\t\t\t\t\tn.component(new Txt(l10n.l('dialogCreateRoomProfile.create', \"Create\"))),\n\t\t\t\t\t]),\n\t\t\t\t]),\n\t\t\t])),\n\t\t\tonClose: () => { this.dialog = null; },\n\t\t});\n\n\t\tthis.dialog.open();\n\t\tthis.dialog.getContent().getNode('name').getComponent().getElement().focus();\n\t}\n\n\t_onCreate(ctrl, model) {\n\t\tif (this.createPromise) return this.createPromise;\n\n\t\tthis.createPromise = ctrl.call('createRoomProfile', {\n\t\t\tname: model.name,\n\t\t\tkey: model.key,\n\t\t}).then(() => {\n\t\t\tif (this.dialog) {\n\t\t\t\tthis.dialog.close();\n\t\t\t}\n\t\t}).catch(err => {\n\t\t\tif (!this.dialog) return;\n\t\t\tthis._setMessage(l10n.l(err.code, err.message, err.data));\n\t\t}).then(() => {\n\t\t\tthis.createPromise = null;\n\t\t});\n\n\t\treturn this.createPromise;\n\t}\n\n\t_setMessage(msg) {\n\t\tif (!this.dialog) return;\n\t\tlet n = this.dialog.getContent().getNode('message');\n\t\tn.setComponent(msg ? new Txt(msg, { className: 'dialog--error' }) : null);\n\t}\n}\n\nexport default DialogCreateRoomProfile;\n","import { RootElem } from 'modapp-base-component';\nimport croppie from 'croppie';\nimport './croppie.scss';\n\n/**\n * Croppie is a wrapper around https://foliotek.github.io/Croppie/.\n *\n * The options may contain any option from {@link https://github.com/jirenius/modapp-base-component/blob/master/src/RootElem.js|RootElem}\n * and options of {@link https://foliotek.github.io/Croppie/|croppie}.\n * @param {object} [opt] Options.\n */\nclass Croppie extends RootElem {\n\tconstructor(opt) {\n\t\topt = Object.assign({}, opt);\n\t\tsuper('div', opt);\n\t\tthis._croppie = null;\n\t\tthis.opt = opt;\n\t}\n\n\tget croppie() {\n\t\treturn this._croppie;\n\t}\n\n\t/**\n\t * Bind an image to the croppie. Returns a promise to be resolved when the image has been loaded and the croppie has been initialized.\n\t * @param {*} opt Options as defined by {@link https://foliotek.github.io/Croppie/#bind|croppie.bind}\n\t * @returns {Promise} Promise when croppie has been initialized.\n\t */\n\tbind(opt) {\n\t\tif (!this._croppie) {\n\t\t\treturn Promise.reject(new Error(\"Croppie component must be rendered before calling bind\"));\n\t\t}\n\t\treturn this._croppie.bind(opt);\n\t}\n\n\trender(el) {\n\t\tlet rel = super.render(el);\n\t\tthis._croppie = new croppie(rel, this.opt);\n\t\treturn rel;\n\t}\n\n\tunrender() {\n\t\tif (this._croppie) {\n\t\t\tthis._croppie.destroy();\n\t\t\tthis._croppie = null;\n\t\t}\n\t\tsuper.unrender();\n\t}\n}\n\nexport default Croppie;\n","import { Elem } from 'modapp-base-component';\nimport { Txt } from 'modapp-base-component';\nimport l10n from 'modapp-l10n';\nimport Dialog from 'classes/Dialog';\nimport Collapser from 'components/Collapser';\nimport Croppie from 'components/Croppie';\nimport './dialogCropImage.scss';\n\nclass DialogCropImage {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\t}\n\n\t/**\n\t * Opens a crop image dialog.\n\t * @param {string} dataUrl Data URL string with image information.\n\t * @param {function} onCrop Callback called on crop: function(dataUrl, croppiePoints)\n\t * @param {object} [opt] Optional parameters.\n\t * @param {string|LocaleString} [opt.title] Title of the dialog. Defaults to \"Crop image\".\n\t * @param {string|LocaleString} [opt.submit] Submit button text. Defaults to \"Upload image\".\n\t * @param {Component} [opt.footer] Footer component to render under the cropper.\n\t */\n\topen(dataUrl, onCrop, opt) {\n\t\tif (this.dialog) return;\n\n\t\topt = opt || {};\n\n\t\tlet croppie = new Croppie(Object.assign({\n\t\t\tviewport: { width: 200, height: 200, type: 'square' },\n\t\t\tboundary: { width: 400, height: 400 },\n\t\t}, opt));\n\t\tthis.dialog = new Dialog({\n\t\t\ttitle: opt.title || l10n.l('dialogCropImage.dialogCropImage', \"Crop image\"),\n\t\t\tclassName: 'dialogcropimage',\n\t\t\tanimated: false, // Animation messes with Croppie's transform\n\t\t\tcontent: new Elem(n => n.elem('div', { className: 'dialogcropimage--content' }, [\n\t\t\t\tn.elem('div', { className: 'dialogcropimage--container' }, [\n\t\t\t\t\tn.component(croppie),\n\t\t\t\t]),\n\t\t\t\tn.component(opt.footer\n\t\t\t\t\t? new Elem(n => n.elem('div', { className: 'common--sectionpadding' }, [\n\t\t\t\t\t\tn.component(opt.footer),\n\t\t\t \t\t]))\n\t\t\t\t\t: null,\n\t\t\t\t),\n\t\t\t\tn.component('message', new Collapser()),\n\t\t\t\tn.elem('div', { className: 'dialogcropimage--footer' }, [\n\t\t\t\t\tn.elem('button', { events: {\n\t\t\t\t\t\tclick: () => Promise.resolve(onCrop(dataUrl, croppie.croppie.get().points))\n\t\t\t\t\t\t\t.then(() => {\n\t\t\t\t\t\t\t\tif (this.dialog) {\n\t\t\t\t\t\t\t\t\tthis.dialog.close();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.catch(err => this._setMessage(err)),\n\t\t\t\t\t}, className: 'btn primary form' }, [\n\t\t\t\t\t\tn.component(new Txt(opt.submit || l10n.l('dialogCropImage.uploadImage', \"Upload image\"))),\n\t\t\t\t\t]),\n\t\t\t\t]),\n\t\t\t])),\n\t\t\tonClose: () => this._onClose(),\n\t\t});\n\n\t\tthis.dialog.open();\n\t\tcroppie.bind({ url: dataUrl })\n\t\t\t.catch(err => {\n\t\t\t\tif (this.dialog) {\n\t\t\t\t\tthis.dialog.close();\n\t\t\t\t}\n\t\t\t\tthis._showMessage([ l10n.l('dialogCropImage.errorLoadingImage', \"Filen kunde inte laddas.\"), l10n.l('dialogCropImage.errorLoadingImageDesc', \"Är du säker på att det är en bild?\") ]);\n\t\t\t});\n\t}\n\n\t_onClose() {\n\t\tthis.dialog = null;\n\t}\n\n\t_setMessage(msg) {\n\t\tif (!this.dialog) return;\n\t\tlet n = this.dialog.getContent().getNode('message');\n\t\tmsg = typeof msg == 'object' && msg !== null && msg.code ?\n\t\t\tl10n.l(msg.code, msg.message || \"\", msg.data)\n\t\t\t: msg;\n\t\tn.setComponent(msg ? new Txt(msg, { className: 'dialog--error' }) : null);\n\t}\n}\n\nexport default DialogCropImage;\n","import { Elem, Txt } from 'modapp-base-component';\nimport { CollectionComponent, ModelTxt } from 'modapp-resource-component';\nimport { Model } from 'modapp-resource';\nimport l10n from 'modapp-l10n';\nimport Dialog from 'classes/Dialog';\nimport Collapser from 'components/Collapser';\nimport AutoComplete from 'components/AutoComplete';\nimport PanelSection from 'components/PanelSection';\nimport FAIcon from 'components/FAIcon';\nimport labelCompare from 'utils/labelCompare';\nimport patternMatch, { patternMatchRender } from 'utils/patternMatch';\nimport './dialogDeleteChar.scss';\n\nclass DialogDeleteChar {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'api', 'player' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t}\n\n\topen(char) {\n\t\tif (this.dialog) return;\n\n\t\tlet model = new Model({ data: {\n\t\t\their: \"\",\n\t\t}, eventBus: this.app.eventBus });\n\n\t\tlet ownedChars = this.module.player.getChars();\n\n\t\tthis.dialog = new Dialog({\n\t\t\ttitle: l10n.l('dialogDeleteChar.deleteChar', \"Delete character\"),\n\t\t\tclassName: 'dialogdeletechar',\n\t\t\tcontent: new CollectionComponent(\n\t\t\t\townedChars,\n\t\t\t\tnew Collapser(),\n\t\t\t\t(col, c, ev) => {\n\t\t\t\t\tlet len = col.toArray().filter(m => m.id !== char.id).length;\n\t\t\t\t\tif (!len) {\n\t\t\t\t\t\tc.setComponent(new Elem(n => n.elem('div', [\n\t\t\t\t\t\t\tn.elem('div', { className: 'common--formmargin' }, [\n\t\t\t\t\t\t\t\tn.component(new Txt(l10n.l('dialogDeleteChar.noHeir1', \"You cannot delete your last character as you need someone to inherit any room or item owned by the character.\"))),\n\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\tn.elem('div', { className: 'pad-top-xl' }, [\n\t\t\t\t\t\t\t\tn.elem('button', { className: 'btn primary', events: {\n\t\t\t\t\t\t\t\t\tclick: () => {\n\t\t\t\t\t\t\t\t\t\tif (this.dialog) {\n\t\t\t\t\t\t\t\t\t\t\tthis.dialog.close();\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t}}, [\n\t\t\t\t\t\t\t\t\tn.component(new Txt(l10n.l('dialogdeletechar.okay', \"Okay\"))),\n\t\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t])));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!ev || (len === 1 && ev.event == 'add')) {\n\t\t\t\t\t\tc.setComponent(new Elem(n => n.elem('div', [\n\t\t\t\t\t\t\tn.elem('div', [\n\t\t\t\t\t\t\t\tn.component(new Txt(l10n.l('dialogDeleteChar.deleteCharBody', \"Do you really wish to delete the character?\"), { tagName: 'p' })),\n\t\t\t\t\t\t\t\tn.component(new ModelTxt(char, m => (m.name + \" \" + m.surname).trim(), { className: 'dialogdeletechar--fullname' })),\n\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\tn.elem('p', { className: 'dialog--error' }, [\n\t\t\t\t\t\t\t\tn.component(new FAIcon('exclamation-triangle')),\n\t\t\t\t\t\t\t\tn.html(\" \"),\n\t\t\t\t\t\t\t\tn.component(new Txt(l10n.l('dialogDeleteChar.deletionWarning', \"Deletion cannot be undone.\"))),\n\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\tn.component('heir', new PanelSection(\n\t\t\t\t\t\t\t\tl10n.l('dialogDeleteChar.characterHeir', \"Character heir\"),\n\t\t\t\t\t\t\t\tnew AutoComplete({\n\t\t\t\t\t\t\t\t\tclassName: 'dialog--input dialog--incomplete',\n\t\t\t\t\t\t\t\t\tattributes: { placeholder: l10n.t('dialogDeleteChar.selectAChar', \"Search for an heir\"), spellcheck: 'false' },\n\t\t\t\t\t\t\t\t\tfetch: (text, update, c) => {\n\t\t\t\t\t\t\t\t\t\tmodel.set({ heir: null });\n\t\t\t\t\t\t\t\t\t\tc.addClass('dialog--incomplete');\n\t\t\t\t\t\t\t\t\t\tlet list = ownedChars.toArray()\n\t\t\t\t\t\t\t\t\t\t\t.filter(m => m.id != char.id && patternMatch((m.name + \" \" + m.surname).trim(), text))\n\t\t\t\t\t\t\t\t\t\t\t.map(m => ({ value: m.id, label: (m.name + \" \" + m.surname).trim() }))\n\t\t\t\t\t\t\t\t\t\t\t.sort(labelCompare);\n\t\t\t\t\t\t\t\t\t\tupdate(list);\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tevents: { blur: c => {\n\t\t\t\t\t\t\t\t\t\tif (!model.heir) {\n\t\t\t\t\t\t\t\t\t\t\tc.setProperty('value', \"\");\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t} },\n\t\t\t\t\t\t\t\t\trender: patternMatchRender,\n\t\t\t\t\t\t\t\t\tminLength: 1,\n\t\t\t\t\t\t\t\t\tonSelect: (c, item) => {\n\t\t\t\t\t\t\t\t\t\tc.removeClass('dialog--incomplete');\n\t\t\t\t\t\t\t\t\t\tmodel.set({ heir: item.value });\n\t\t\t\t\t\t\t\t\t\tc.setProperty('value', item.label);\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t\t\t\t\trequired: true,\n\t\t\t\t\t\t\t\t\tpopupTip: l10n.l('dialogDeleteChar.characterHeirInfo', \"The heir inherits any room or item owned by the deleted character.\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t\tn.component('message', new Collapser(null)),\n\t\t\t\t\t\t\tn.elem('div', { className: 'dialog--footer flex-row margin16' }, [\n\t\t\t\t\t\t\t\tn.elem('button', {\n\t\t\t\t\t\t\t\t\tevents: { click: () => this._onDelete(char, model) },\n\t\t\t\t\t\t\t\t\tclassName: 'btn primary flex-1',\n\t\t\t\t\t\t\t\t}, [\n\t\t\t\t\t\t\t\t\tn.component(new Txt(l10n.l('dialogDeleteChar.delete', \"Delete character\"))),\n\t\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\t\tn.elem('button', {\n\t\t\t\t\t\t\t\t\tclassName: 'btn secondary flex-1',\n\t\t\t\t\t\t\t\t\tevents: { click: () => this.close() },\n\t\t\t\t\t\t\t\t}, [\n\t\t\t\t\t\t\t\t\tn.component(new Txt(l10n.l('dialogDeleteChar.cancel', \"Cancel\"))),\n\t\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t])));\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t),\n\t\t\tonClose: () => { this.dialog = null; },\n\t\t});\n\n\t\tthis.dialog.open();\n\t\ttry {\n\t\t\tthis.dialog.getContent().getComponent().getComponent().getNode('heir').getComponent().getElement().focus();\n\t\t} catch (e) {}\n\t}\n\n\tclose() {\n\t\tif (this.dialog) {\n\t\t\tthis.dialog.close();\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\t_onDelete(char, model) {\n\t\tif (this.deletePromise) return this.deletePromise;\n\n\t\tthis.deletePromise = this.module.player.getPlayer().call('deleteChar', {\n\t\t\tcharId: char.id,\n\t\t\their: model.heir,\n\t\t}).then(() => {\n\t\t\tthis.close();\n\t\t}).catch(err => {\n\t\t\tif (!this.dialog) return;\n\t\t\tthis._setMessage(l10n.l(err.code, err.message, err.data));\n\t\t}).then(() => {\n\t\t\tthis.deletePromise = null;\n\t\t});\n\n\t\treturn this.deletePromise;\n\t}\n\n\t_setMessage(msg) {\n\t\tif (!this.dialog) return;\n\t\ttry {\n\t\t\tlet n = this.dialog.getContent().getComponent().getComponent().getNode('message');\n\t\t\tn.setComponent(msg ? new Txt(msg, { className: 'dialog--error' }) : null);\n\t\t} catch (e) {}\n\t}\n}\n\nexport default DialogDeleteChar;\n","import { Elem, Txt, Textarea, Context } from 'modapp-base-component';\nimport { ModelTxt, ModelComponent } from 'modapp-resource-component';\nimport { ModifyModel } from 'modapp-resource';\nimport l10n from 'modapp-l10n';\nimport Collapser from 'components/Collapser';\nimport PopupTip from 'components/PopupTip';\nimport Dialog from 'classes/Dialog';\nimport './dialogEditDndMsg.scss';\n\nclass DialogEditDndMsg {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'api', 'auth', 'player', 'confirm' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t}\n\n\topen(char, puppeteer, charSettings) {\n\t\tif (this.dialog) return;\n\n\t\tthis.dialog = new Dialog({\n\t\t\ttitle: l10n.l('dialogEditDndMsg.doNotDisturbMessage', \"Do not disturb message\"),\n\t\t\tclassName: 'dialogeditdndmsg',\n\t\t\tcontent: new Context(\n\t\t\t\t() => new ModifyModel(charSettings, { eventBus: this.app.eventBus }),\n\t\t\t\tmodel => model.dispose(),\n\t\t\t\tmodel => new Elem(n => n.elem('div', [\n\t\t\t\t\tn.elem('div', { className: 'common--sectionpadding' }, [\n\t\t\t\t\t\tn.elem('div', { className: 'flex-row' }, [\n\t\t\t\t\t\t\tn.component(new ModelTxt(char, m => (m.name + \" \" + m.surname).trim(), { className: 'dialogeditdndmsg--fullname flex-1' })),\n\t\t\t\t\t\t\tn.component(new PopupTip(l10n.l('dialogEditDndMsg.dndMsgInfo', \"The do not disturb message is sent to any character trying to message you while set as do not disturb.\\nA default message will be sent if empty.\"), { className: 'popuptip--width-m flex-auto' })),\n\t\t\t\t\t\t]),\n\t\t\t\t\t\tn.component('dndMsg', new ModelComponent(\n\t\t\t\t\t\t\tmodel,\n\t\t\t\t\t\t\tnew Textarea(model.dndMsg, {\n\t\t\t\t\t\t\t\tevents: { input: c => model.set({ dndMsg: c.getValue() }) },\n\t\t\t\t\t\t\t\tattributes: {\n\t\t\t\t\t\t\t\t\tspellcheck: 'true',\n\t\t\t\t\t\t\t\t\tplaceholder: l10n.t('dialogEditDndMsg.textPlaceholder', \"Use default message.\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tclassName: 'dialog--input common--paneltextarea-small',\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t(m, c) => c.setValue(m.dndMsg),\n\t\t\t\t\t\t)),\n\t\t\t\t\t]),\n\t\t\t\t\tn.component('message', new Collapser(null)),\n\t\t\t\t\tn.elem('div', { className: 'pad-top-xl pad-bottom-m' }, [\n\t\t\t\t\t\tn.elem('submit', 'button', {\n\t\t\t\t\t\t\tevents: { click: () => this._onSave(char, puppeteer, model) },\n\t\t\t\t\t\t\tclassName: 'btn primary dialogeditdndmsg--submit',\n\t\t\t\t\t\t}, [\n\t\t\t\t\t\t\tn.component(new ModelTxt(model, m => m.isModified\n\t\t\t\t\t\t\t\t? model.dndMsg.trim()\n\t\t\t\t\t\t\t\t\t? l10n.l('dialogEditDndMsg.saveMessage', \"Save message\")\n\t\t\t\t\t\t\t\t\t: l10n.l('dialogEditDndMsg.clearMessage', \"Clear message\")\n\t\t\t\t\t\t\t\t: l10n.l('dialogEditDndMsg.close', \"Close\"),\n\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t]),\n\t\t\t\t\t]),\n\t\t\t\t])),\n\t\t\t),\n\t\t\tonClose: () => { this.dialog = null; },\n\t\t});\n\n\t\tthis.dialog.open();\n\t\tthis.dialog.getContent().getComponent().getNode('dndMsg').getComponent().getElement().focus();\n\t}\n\n\t_onSave(char, puppeteer, model) {\n\t\tif (this.savePromise) return this.savePromise;\n\n\t\t// Quick close if there are no modifications\n\t\tif (!model.isModified) {\n\t\t\tif (this.dialog) {\n\t\t\t\tthis.dialog.close();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tthis.module.player.getPlayer().call('setCharSettings', Object.assign({\n\t\t\tcharId: char.id,\n\t\t\tpuppeteerId: (puppeteer && puppeteer.id) || undefined,\n\t\t}, model.getModifications())).then(() => {\n\t\t\tif (this.dialog) {\n\t\t\t\tthis.dialog.close();\n\t\t\t}\n\t\t}).catch(err => {\n\t\t\tif (!this.dialog) return;\n\t\t\tthis._setMessage(l10n.l(err.code, err.message, err.data));\n\t\t}).then(() => {\n\t\t\tthis.savePromise = null;\n\t\t});\n\n\t\treturn this.savePromise;\n\t}\n\n\t_setMessage(msg) {\n\t\tif (!this.dialog) return;\n\t\tlet n = this.dialog.getContent().getComponent().getNode('message');\n\t\tn.setComponent(msg ? new Txt(msg, { className: 'dialog--error' }) : null);\n\t}\n}\n\nexport default DialogEditDndMsg;\n","import { Elem, Txt, Textarea, Context } from 'modapp-base-component';\nimport { ModelTxt, ModelComponent } from 'modapp-resource-component';\nimport { ModifyModel } from 'modapp-resource';\nimport l10n from 'modapp-l10n';\nimport Collapser from 'components/Collapser';\nimport PopupTip from 'components/PopupTip';\nimport Dialog from 'classes/Dialog';\nimport './dialogEditNote.scss';\n\nclass DialogEditNote {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'api', 'auth', 'player', 'confirm' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t}\n\n\t/**\n\t * Opens edit note dialog for a given character ID.\n\t * @param {string} charId Character ID.\n\t */\n\topen(charId) {\n\t\tif (this.dialog) return;\n\n\t\tthis.dialog = true;\n\n\t\tthis.module.auth.getUserPromise()\n\t\t\t.then(user => Promise.all([\n\t\t\t\tthis.module.api.get('note.player.' + user.id + '.note.' + charId),\n\t\t\t\tthis.module.api.get('core.char.' + charId),\n\t\t\t]))\n\t\t\t.then(result => {\n\t\t\t\tlet [ note, char ] = result;\n\t\t\t\tthis.dialog = new Dialog({\n\t\t\t\t\ttitle: l10n.l('dialogEditNote.createNewChar', \"Character notes\"),\n\t\t\t\t\tclassName: 'dialogeditnote',\n\t\t\t\t\tcontent: new Context(\n\t\t\t\t\t\t() => new ModifyModel(note, { eventBus: this.app.eventBus }),\n\t\t\t\t\t\tmodel => model.dispose(),\n\t\t\t\t\t\tmodel => new Elem(n => n.elem('div', [\n\t\t\t\t\t\t\tn.elem('div', { className: 'flex-row' }, [\n\t\t\t\t\t\t\t\tn.component(new ModelTxt(char, m => (m.name + \" \" + m.surname).trim(), { className: 'dialogeditnote--fullname flex-1' })),\n\t\t\t\t\t\t\t\tn.component(new PopupTip(l10n.l('dialogEditNote.notesInfo', \"The notes are your personal records about a character. No one else can read them.\"), { className: 'popuptip--width-m flex-auto' })),\n\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\tn.component('notes', new ModelComponent(\n\t\t\t\t\t\t\t\tmodel,\n\t\t\t\t\t\t\t\tnew Textarea(model.text, {\n\t\t\t\t\t\t\t\t\tevents: { input: c => model.set({ text: c.getValue() }) },\n\t\t\t\t\t\t\t\t\tattributes: {\n\t\t\t\t\t\t\t\t\t\tspellcheck: 'false',\n\t\t\t\t\t\t\t\t\t\tplaceholder: l10n.t('dialogEditNote.textPlaceholder', \"Enter some notes\"),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tclassName: 'dialog--input common--paneltextarea',\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t(m, c) => c.setValue(m.text),\n\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t\tn.component('message', new Collapser(null)),\n\t\t\t\t\t\t\tn.elem('div', { className: 'dialog--footer' }, [\n\t\t\t\t\t\t\t\tn.elem('submit', 'button', {\n\t\t\t\t\t\t\t\t\tevents: { click: () => this._onSave(model) },\n\t\t\t\t\t\t\t\t\tclassName: 'btn primary dialogeditnote--submit',\n\t\t\t\t\t\t\t\t}, [\n\t\t\t\t\t\t\t\t\tn.component(new ModelTxt(model, m => m.isModified\n\t\t\t\t\t\t\t\t\t\t? model.text.trim()\n\t\t\t\t\t\t\t\t\t\t\t? l10n.l('dialogEditNote.saveNotes', \"Save notes\")\n\t\t\t\t\t\t\t\t\t\t\t: l10n.l('dialogEditNote.clearNotes', \"Clear notes\")\n\t\t\t\t\t\t\t\t\t\t: l10n.l('dialogEditNote.closeNotes', \"Close notes\"),\n\t\t\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t])),\n\t\t\t\t\t),\n\t\t\t\t\tonClose: () => { this.dialog = null; },\n\t\t\t\t});\n\n\t\t\t\tthis.dialog.open();\n\t\t\t\tthis.dialog.getContent().getComponent().getNode('submit').focus();\n\t\t\t})\n\t\t\t.catch(err => {\n\t\t\t\tthis.dialog = null;\n\t\t\t\tthis.module.confirm.openError(err);\n\t\t\t});\n\t}\n\n\t_onSave(model) {\n\t\tif (this.savePromise) return this.savePromise;\n\n\t\t// Quick close if there are no modifications\n\t\tif (!model.isModified) {\n\t\t\tif (this.dialog) {\n\t\t\t\tthis.dialog.close();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tmodel.getModel().call('set', model.getModifications()).then(() => {\n\t\t\tif (this.dialog) {\n\t\t\t\tthis.dialog.close();\n\t\t\t}\n\t\t}).catch(err => {\n\t\t\tif (!this.dialog) return;\n\t\t\tthis._setMessage(l10n.l(err.code, err.message, err.data));\n\t\t}).then(() => {\n\t\t\tthis.savePromise = null;\n\t\t});\n\n\t\treturn this.savePromise;\n\t}\n\n\t_setMessage(msg) {\n\t\tif (!this.dialog) return;\n\t\tlet n = this.dialog.getContent().getNode('message');\n\t\tn.setComponent(msg ? new Txt(msg, { className: 'dialog--error' }) : null);\n\t}\n}\n\nexport default DialogEditNote;\n","import { Elem, Txt } from 'modapp-base-component';\nimport { ModelTxt } from 'modapp-resource-component';\nimport l10n from 'modapp-l10n';\nimport Dialog from 'classes/Dialog';\nimport Collapser from 'components/Collapser';\nimport PanelSection from 'components/PanelSection';\nimport FAIcon from 'components/FAIcon';\nimport formatDateTime from 'utils/formatDateTime';\nimport './dialogExportLog.scss';\n\nclass DialogExportLog {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'charLog', 'exportLog' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t}\n\n\topen(char, timestamp) {\n\t\tif (this.dialog) return;\n\n\t\tthis.dialog = new Dialog({\n\t\t\ttitle: l10n.l('dialogExportLog.exportLog', \"Export log\"),\n\t\t\tclassName: 'dialogexportlog',\n\t\t\tcontent: new Elem(n => n.elem('div', [\n\t\t\t\tn.component(new PanelSection(\n\t\t\t\t\tl10n.l('pageEditExit.character', \"Character\"),\n\t\t\t\t\tnew ModelTxt(char, m => (m.name + \" \" + m.surname).trim(), { className: 'dialog--strong' }),\n\t\t\t\t\t{\n\t\t\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t},\n\t\t\t\t)),\n\t\t\t\tn.component(new PanelSection(\n\t\t\t\t\tl10n.l('pageEditExit.startingFrom', \"From\"),\n\t\t\t\t\tnew Txt(formatDateTime(new Date(timestamp))),\n\t\t\t\t\t{\n\t\t\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t},\n\t\t\t\t)),\n\t\t\t\tn.component('message', new Collapser(null)),\n\t\t\t\tn.elem('div', { className: 'pad-top-xl' }, [\n\t\t\t\t\tn.elem('create', 'button', {\n\t\t\t\t\t\tevents: { click: () => this._onExport(char, timestamp) },\n\t\t\t\t\t\tclassName: 'btn primary icon-left dialog--btn',\n\t\t\t\t\t}, [\n\t\t\t\t\t\tn.component(new FAIcon('download')),\n\t\t\t\t\t\tn.component(new Txt(l10n.l('dialogexportlog.export', \"Export\"))),\n\t\t\t\t\t]),\n\t\t\t\t]),\n\t\t\t])),\n\t\t\tonClose: () => this._onClose(),\n\t\t});\n\n\t\tthis.dialog.open();\n\t\tthis.dialog.getContent().getNode('create').focus();\n\t}\n\n\t_onClose() {\n\t\tthis.dialog = null;\n\t}\n\n\t_onExport(char, timestamp) {\n\t\tif (this.exportPromise) return this.exportPromise;\n\n\t\tthis.exportPromise = this.module.exportLog.exportHtml(char, timestamp)\n\t\t\t.then(() => {\n\t\t\t\tif (this.dialog) {\n\t\t\t\t\tthis.dialog.close();\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch(err => {\n\t\t\t\tif (!this.dialog) return;\n\t\t\t\tthis._setMessage(l10n.l(err.code, err.message, err.data));\n\t\t\t}).then(() => {\n\t\t\t\tthis.exportPromise = null;\n\t\t\t});\n\n\t\treturn this.exportPromise;\n\t}\n\n\t_setMessage(msg) {\n\t\tif (!this.dialog) return;\n\t\tlet n = this.dialog.getContent().getNode('message');\n\t\tn.setComponent(msg ? new Txt(msg, { className: 'dialog--error' }) : null);\n\t}\n}\n\nexport default DialogExportLog;\n","import { RootElem } from 'modapp-base-component';\nimport * as noUiSlider from 'nouislider';\n// import 'nouislider/dist/nouislider.css';\nimport './noUiSlider.scss';\n\n/**\n * NoUiSlider is a wrapper around noUiSlider.\n *\n * The options may also contain any option {@link https://refreshless.com/nouislider/}.\n * @param {object} [opt] Options.\n * @param {function} [opt.onUpdate] Callback called on change.\n */\nclass NoUiSlider extends RootElem {\n\tconstructor(opt) {\n\t\topt = Object.assign({ tagName: 'div' }, opt);\n\t\topt.className = 'comp-nouislider' + (opt.className ? ' ' + opt.className : '');\n\t\tsuper(opt.tagName, opt);\n\t\tthis._slider = null;\n\n\t\topt.onUpdate = this._includeThis(opt.onUpdate);\n\t\tthis._opt = opt;\n\t}\n\n\trender(el) {\n\t\tlet e = super.render(el);\n\t\tthis._slider = noUiSlider.create(e, this._opt);\n\t\tif (this._opt.onUpdate) {\n\t\t\tthis._slider.on('update', this._opt.onUpdate);\n\t\t}\n\t\treturn e;\n\t}\n\n\tunrender() {\n\t\tif (this._slider) {\n\t\t\tif (this._opt.onUpdate) {\n\t\t\t\tthis._slider.off('update');\n\t\t\t}\n\t\t\tthis._slider.destroy();\n\t\t\tthis._slider = null;\n\t\t\tsuper.unrender();\n\t\t}\n\t}\n\n\t_includeThis(cb) {\n\t\tif (!cb) return cb;\n\t\tlet self = this;\n\t\treturn function() {\n\t\t\tlet args = [].slice.call(arguments);\n\t\t\targs.unshift(self);\n\t\t\tcb.apply(this, args);\n\t\t};\n\t}\n}\n\nexport default NoUiSlider;\n","import { Context, Elem, Txt, Textarea } from 'modapp-base-component';\nimport { ModelTxt, ModelComponent } from 'modapp-resource-component';\nimport { Model } from 'modapp-resource';\nimport l10n from 'modapp-l10n';\nimport Collapser from 'components/Collapser';\nimport PanelSection from 'components/PanelSection';\nimport LabelToggleBox from 'components/LabelToggleBox';\nimport NoUiSlider from 'components/NoUiSlider';\nimport ModelCollapser from 'components/ModelCollapser';\nimport Dialog from 'classes/Dialog';\nimport formatTime from 'utils/formatTime';\nimport { isTargeted } from 'utils/charEvent';\nimport './dialogReport.scss';\n\nfunction addMin(time, minDiff) {\n\treturn new Date(time + 60 * 1000 * minDiff);\n}\n\nfunction toTime(time, diff) {\n\treturn formatTime(addMin(time, diff));\n}\n\nconst privateEvents = {\n\tdnd: true,\n\twhisper: true,\n\tmail: true,\n\tmessage: true,\n\twarn: true,\n\thelpme: true,\n};\n\nfunction isPrivateWithOthers(ev, charId, puppeteerId) {\n\tif (!privateEvents[ev.type]) {\n\t\treturn false;\n\t}\n\treturn !(ev.char.id == charId && (!puppeteerId || ev.puppeteer?.id == puppeteerId)) && !isTargeted(charId, ev);\n}\n\nclass DialogReport {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'api',\n\t\t\t'charLog',\n\t\t\t'confirm',\n\t\t\t'toaster',\n\t\t\t'player',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t}\n\n\t/**\n\t * Open dialog to send a report.\n\t * @param {string} ctrlId ID of controlled character sending the report.\n\t * @param {string} charId ID of target character of the report.\n\t * @param {string} puppeteerId ID of target puppeteer of the report.\n\t * @param {object} [opt] Optional params\n\t * @param {object} [opt.msg] Message to use initially.\n\t * @param {object} [opt.attachEvent] Event object to use as time reference for the report.\n\t * @param {boolean} [opt.attachProfile] Flag to tell if the current charater profile should be attached.\n\t */\n\topen(ctrlId, charId, puppeteerId, opt) {\n\t\tif (this.dialog) return;\n\n\t\tthis.dialog = true;\n\n\t\tthis.module.api.get('core.char.' + charId)\n\t\t\t.then(char => {\n\t\t\t\tlet hasEvent = !!opt?.attachEvent;\n\t\t\t\tlet model = new Model({ data: {\n\t\t\t\t\tmsg: opt?.msg || \"\",\n\t\t\t\t\tattachLog: hasEvent,\n\t\t\t\t\tattachProfile: !!opt?.attachProfile,\n\t\t\t\t\texcludePrivate: true,\n\t\t\t\t\ttime: opt?.attachEvent?.time || Date.now(),\n\t\t\t\t\tstart: -20,\n\t\t\t\t\tend: 10,\n\t\t\t\t\tsnapshotPromise: null,\n\n\t\t\t\t}, eventBus: this.app.eventBus });\n\n\t\t\t\tthis._setCharSnapshot(model, charId);\n\n\t\t\t\tthis.dialog = new Dialog({\n\t\t\t\t\ttitle: l10n.l('dialogReport.reportCharacter', \"Report character\"),\n\t\t\t\t\tclassName: 'dialogreport',\n\t\t\t\t\tcontent: new Elem(n => n.elem('div', [\n\t\t\t\t\t\tn.component(new Txt(l10n.l('dialogReport.thanksForReport', \"Thanks for helping us keep this place friendly and safe!\"), { tagName: 'div', className: 'dialogreport--disclaimer' })),\n\t\t\t\t\t\tn.component(new ModelTxt(char, m => (m.name + \" \" + m.surname).trim(), { className: 'dialogreport--fullname flex-1' })),\n\t\t\t\t\t\t// n.component(eventComponent),\n\t\t\t\t\t\tn.component('msg', new PanelSection(\n\t\t\t\t\t\t\tl10n.l('dialogReport.message', \"Report message\"),\n\t\t\t\t\t\t\tnew Textarea(model.msg, {\n\t\t\t\t\t\t\t\tclassName: 'dialogreport--msg dialog--input common--paneltextarea-small common--desc-size',\n\t\t\t\t\t\t\t\tevents: {\n\t\t\t\t\t\t\t\t\tinput: c => {\n\t\t\t\t\t\t\t\t\t\tlet v = c.getValue().replace(/\\r?\\n/gi, '');\n\t\t\t\t\t\t\t\t\t\tc.setValue(v);\n\t\t\t\t\t\t\t\t\t\tmodel.set({ msg: v });\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tattributes: {\n\t\t\t\t\t\t\t\t\tname: 'dialogreport-msg',\n\t\t\t\t\t\t\t\t\tspellcheck: 'true',\n\t\t\t\t\t\t\t\t\tplaceholder: l10n.t('dialogReport.messagePlaceholder', \"What do you wish for us to look into?\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t\t\t\tpopupTip: l10n.l('dialogReport.messageInfo', \"Describe what you wish to report. This will only be seen by moderators.\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t)),\n\t\t\t\t\t\tn.elem('div', [\n\t\t\t\t\t\t\tn.component(new LabelToggleBox(l10n.l('dialogReport.attachLog', \"Attach log to report\"), model.attachLog, {\n\t\t\t\t\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\t\t\t\t\tonChange: (v, c) => {\n\t\t\t\t\t\t\t\t\tmodel.set({ attachLog: v });\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tpopupTip: l10n.l('dialogReport.attachLogInfo', \"Attaches a section of your character's log to the report.\\nIt will only be seen by moderators.\"),\n\t\t\t\t\t\t\t\tpopupTipClassName: 'popuptip--width-m',\n\t\t\t\t\t\t\t})),\n\t\t\t\t\t\t\tn.component(new ModelCollapser(model, [{\n\t\t\t\t\t\t\t\tcondition: m => m.attachLog,\n\t\t\t\t\t\t\t\tfactory: m => new Elem(n => n.elem('div', { className: 'common--formsubsection' }, [\n\t\t\t\t\t\t\t\t\tn.component(new LabelToggleBox(l10n.l('dialogReport.excludePrivateWithOthers', \"Exclude private communication with others\"), model.excludePrivate, {\n\t\t\t\t\t\t\t\t\t\tclassName: 'common--formmargin small',\n\t\t\t\t\t\t\t\t\t\tonChange: (v, c) => model.set({ excludePrivate: v }),\n\t\t\t\t\t\t\t\t\t\tpopupTip: l10n.l('dialogReport.excludePrivateWithOthersdInfo', \"Exclude private communication, such as whispers or messages, with other characters. Private communication with the reported character will still be included.\"),\n\t\t\t\t\t\t\t\t\t\tpopupTipClassName: 'popuptip--width-m',\n\t\t\t\t\t\t\t\t\t})),\n\t\t\t\t\t\t\t\t\tn.component(new PanelSection(\n\t\t\t\t\t\t\t\t\t\tl10n.l('dialogReport.logInterval', \"Log interval\"),\n\t\t\t\t\t\t\t\t\t\tnew Elem(n => n.elem('div', { className: 'pad-bottom-l' }, [\n\t\t\t\t\t\t\t\t\t\t\tn.elem('div', [\n\t\t\t\t\t\t\t\t\t\t\t\tn.component(new ModelTxt(\n\t\t\t\t\t\t\t\t\t\t\t\t\tmodel,\n\t\t\t\t\t\t\t\t\t\t\t\t\tm => toTime(m.time, m.start),\n\t\t\t\t\t\t\t\t\t\t\t\t\t{ duration: 0 },\n\t\t\t\t\t\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t\t\t\t\t\t\tn.text(\" – \"),\n\t\t\t\t\t\t\t\t\t\t\t\tn.component(new Context(\n\t\t\t\t\t\t\t\t\t\t\t\t\t() => ({ timer: null }),\n\t\t\t\t\t\t\t\t\t\t\t\t\to => clearTimeout(o.timer),\n\t\t\t\t\t\t\t\t\t\t\t\t\to => new ModelComponent(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmodel,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tnew Txt('', { duration: 0 }),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t(m, c, change) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (change && !change.hasOwnProperty('end')) return;\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclearTimeout(o.timer);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tlet endTime = addMin(m.time, m.end);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tlet diff = endTime - Date.now();\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tc.setText(diff > 0\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? l10n.l('dialogReport.now', \"now\")\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: formatTime(endTime),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (diff > 0) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\to.timer = setTimeout(() => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tc.setText(formatTime(endTime));\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}, diff);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\t\t\t\t\tn.component(new NoUiSlider({\n\t\t\t\t\t\t\t\t\t\t\t\tstart: [ model.start, model.end ],\n\t\t\t\t\t\t\t\t\t\t\t\tstep: 5,\n\t\t\t\t\t\t\t\t\t\t\t\trange: hasEvent\n\t\t\t\t\t\t\t\t\t\t\t\t\t? { min: [ -60 ], max: [ 60 ] }\n\t\t\t\t\t\t\t\t\t\t\t\t\t: { min: [ -150 ], max: [ 10 ] },\n\t\t\t\t\t\t\t\t\t\t\t\tconnect: [ false, true, false ],\n\t\t\t\t\t\t\t\t\t\t\t\tpips: {\n\t\t\t\t\t\t\t\t\t\t\t\t\tmode: 'steps',\n\t\t\t\t\t\t\t\t\t\t\t\t\tdensity: 60,\n\t\t\t\t\t\t\t\t\t\t\t\t\tfilter: v => v == 0 ? 0 : -1,\n\t\t\t\t\t\t\t\t\t\t\t\t\tformat: {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tto: v => toTime(model.time, v),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfrom: v => v,\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\tclassName: 'dialogreport--slider pips-centered',\n\t\t\t\t\t\t\t\t\t\t\t\tonUpdate: (c, v, handle, unencoded, tap, positions, slider) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tlet start = parseInt(v[0]);\n\t\t\t\t\t\t\t\t\t\t\t\t\tlet end = parseInt(v[1]);\n\t\t\t\t\t\t\t\t\t\t\t\t\t// If we have an event, always include it (pos 0).\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (hasEvent) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (start > 0) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstart = 0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tslider.setHandle(0, 0, false);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (end < 0) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tend = 0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tslider.setHandle(1, 0, false);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tmodel.set({ start, end });\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t})),\n\t\t\t\t\t\t\t\t\t\t])),\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tclassName: 'common--sectionpadding small',\n\t\t\t\t\t\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t\t\t\t\t\t\tpopupTip: l10n.l('dialogReport.logIntevalInfo', \"Time interval of log events to include in the attachment.\"),\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t\t\t])),\n\t\t\t\t\t\t\t}])),\n\t\t\t\t\t\t]),\n\t\t\t\t\t\tn.component(new LabelToggleBox(l10n.l('dialogReport.attachProfile', \"Attach character profile to report\"), model.attachProfile, {\n\t\t\t\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\t\t\t\tonChange: (v, c) => {\n\t\t\t\t\t\t\t\tmodel.set({ attachProfile: v });\n\t\t\t\t\t\t\t\tthis._setCharSnapshot(model, charId);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tpopupTip: l10n.l('dialogReport.attachProfileInfo', \"Attaches the character's current profile to the report. This includes information such as image, name, gender, species, description, about, and tags.\"),\n\t\t\t\t\t\t\tpopupTipClassName: 'popuptip--width-m',\n\t\t\t\t\t\t})),\n\t\t\t\t\t\tn.component('message', new Collapser(null)),\n\t\t\t\t\t\tn.elem('div', { className: 'pad-top-xl' }, [\n\t\t\t\t\t\t\tn.elem('submit', 'button', {\n\t\t\t\t\t\t\t\tevents: { click: () => this._sendReport(ctrlId, charId, puppeteerId, model) },\n\t\t\t\t\t\t\t\tclassName: 'btn primary dialog-btn dialogreport--submit',\n\t\t\t\t\t\t\t}, [\n\t\t\t\t\t\t\t\tn.component(new Txt(l10n.l('dialogReport.sendReport', \"Send report\"))),\n\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t]),\n\t\t\t\t\t])),\n\t\t\t\t\tonClose: () => { this.dialog = null; },\n\t\t\t\t});\n\n\t\t\t\tthis.dialog.open();\n\t\t\t\tthis.dialog.getContent().getNode('msg').getComponent().getElement().focus();\n\t\t\t})\n\t\t\t.catch(err => {\n\t\t\t\tthis.dialog = null;\n\t\t\t\tthis.module.confirm.openError(err);\n\t\t\t});\n\t}\n\n\t_sendReport(ctrlId, charId, puppeteerId, model) {\n\t\tif (this.reportPromise) return this.reportPromise;\n\n\t\tlet ctrl = this.module.player.getControlledChar(ctrlId);\n\t\tif (!ctrl) {\n\t\t\tthis._setMessage(l10n.l('dialogReport.charNotControlled', \"Must control the character making the report.\"));\n\t\t\treturn;\n\t\t}\n\n\t\tlet attachments = [];\n\t\tlet filter = model.excludePrivate\n\t\t\t? (ev) => !ev.noReport && !isPrivateWithOthers(ev, charId, puppeteerId)\n\t\t\t: (ev) => !ev.noReport;\n\n\t\t// Attach logs if needed\n\t\tthis.reportPromise = (model.attachLog\n\t\t\t? this._getLog(ctrl, addMin(model.time, model.start).getTime(), addMin(model.time, model.end).getTime(), filter).then(events => {\n\t\t\t\tattachments.push({\n\t\t\t\t\ttype: 'log',\n\t\t\t\t\tparams: { events },\n\t\t\t\t});\n\t\t\t})\n\t\t\t: Promise.resolve()\n\t\t).then(() => {\n\t\t\t// Attach charSnapshot if needed\n\t\t\treturn (model.attachProfile\n\t\t\t\t? model.snapshotPromise.then(snapshotId => {\n\t\t\t\t\tattachments.push({\n\t\t\t\t\t\ttype: 'charSnapshot',\n\t\t\t\t\t\tparams: { snapshotId },\n\t\t\t\t\t});\n\t\t\t\t})\n\t\t\t\t: Promise.resolve()\n\t\t\t).then(() => {\n\t\t\t\t// Create report\n\t\t\t\treturn this.module.api.call('report.reports', 'create', {\n\t\t\t\t\tcharId: ctrlId,\n\t\t\t\t\ttargetId: charId,\n\t\t\t\t\tpuppeteer: puppeteerId || undefined,\n\t\t\t\t\tmsg: model.msg,\n\t\t\t\t\tattachments: attachments.length ? attachments : undefined,\n\t\t\t\t}).then(() => {\n\t\t\t\t\tif (this.dialog) {\n\t\t\t\t\t\tthis.dialog.close();\n\t\t\t\t\t}\n\t\t\t\t\tthis.module.toaster.open({\n\t\t\t\t\t\ttitle: l10n.l('dialogReport.reportSent', \"Report sent\"),\n\t\t\t\t\t\tcontent: new Txt(l10n.l('dialogReport.reportSentBody', \"The report was successfully sent to the moderators.\")),\n\t\t\t\t\t\tcloseOn: 'click',\n\t\t\t\t\t\ttype: 'success',\n\t\t\t\t\t\tautoclose: true,\n\t\t\t\t\t});\n\t\t\t\t}).catch(err => {\n\t\t\t\t\tif (!this.dialog) return;\n\t\t\t\t\tthis._setMessage(l10n.l(err.code, err.message, err.data));\n\t\t\t\t}).then(() => {\n\t\t\t\t\tthis.reportPromise = null;\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\n\t\treturn this.reportPromise;\n\t}\n\n\t_setMessage(msg) {\n\t\tif (!this.dialog) return;\n\t\tlet n = this.dialog.getContent().getNode('message');\n\t\tn.setComponent(msg ? new Txt(msg, { className: 'dialog--error' }) : null);\n\t}\n\n\t_getLog(char, startTime, endTime, filter, chunk, log) {\n\t\tchunk = chunk || 0;\n\t\tlog = log || [];\n\t\treturn this.module.charLog.getLog(char, chunk).then(l => {\n\t\t\tif (!l || !l.length) return log;\n\n\t\t\tif (!Array.isArray(l)) l = l.toArray();\n\n\t\t\tlet end = l.length;\n\t\t\tfor (let i = end - 1; i >= 0; i--) {\n\t\t\t\tlet ev = l[i];\n\t\t\t\tif (ev.time) {\n\t\t\t\t\tif (ev.time > endTime) {\n\t\t\t\t\t\tend = i;\n\t\t\t\t\t}\n\t\t\t\t\tif (ev.time < startTime) {\n\t\t\t\t\t\treturn l.slice(i + 1, end).filter(filter).concat(log);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this._getLog(char, startTime, endTime, filter, chunk + 1, end ? l.slice(0, end).filter(filter).concat(log) : log);\n\t\t});\n\t}\n\n\t/**\n\t * Checks if a charSnapshot needs to be created, and if so creates it.\n\t * Subsequent calls to this function will not create a new snapshot.\n\t * @param {Model} model Dialog model.\n\t * @param {string} charId Character ID.\n\t */\n\t_setCharSnapshot(model, charId) {\n\t\tif (model.snapshotPromise || !model.attachProfile) {\n\t\t\treturn;\n\t\t}\n\t\tmodel.set({ snapshotPromise: this.module.api.call('report.charsnapshots', 'create', { charId })\n\t\t\t.catch(err => {\n\t\t\t\tthis._setMessage(l10n.l(err.code, err.message, err.data));\n\t\t\t\tmodel.set({\n\t\t\t\t\tattachProfile: false,\n\t\t\t\t\tsnapshotPromise: null,\n\t\t\t\t});\n\t\t\t}),\n\t\t});\n\t}\n}\n\nexport default DialogReport;\n","import { Elem, Txt } from 'modapp-base-component';\nimport { ModelTxt, ModelComponent } from 'modapp-resource-component';\nimport { Model } from 'modapp-resource';\nimport l10n from 'modapp-l10n';\nimport Dialog from 'classes/Dialog';\nimport Collapser from 'components/Collapser';\nimport AutoComplete from 'components/AutoComplete';\nimport PanelSection from 'components/PanelSection';\nimport patternMatch, { patternMatchRender } from 'utils/patternMatch';\nimport mergeCharLists from 'utils/mergeCharLists';\nimport labelCompare from 'utils/labelCompare';\nimport './dialogSetAreaOwner.scss';\n\nclass DialogSetAreaOwner {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'api',\n\t\t\t'player',\n\t\t\t'charsAwake',\n\t\t\t'confirm',\n\t\t\t'setAreaOwner',\n\t\t\t'requestAreaOwner',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t}\n\n\topen(ctrl, area) {\n\t\tif (this.dialog) return;\n\n\t\tlet model = new Model({ data: {\n\t\t\towner: \"\",\n\t\t}, eventBus: this.app.eventBus });\n\n\t\tthis.dialog = new Dialog({\n\t\t\ttitle: l10n.l('dialogSetAreaOwner.setAreaOwner', \"Set area owner\"),\n\t\t\tclassName: 'dialogsetareaowner',\n\t\t\tcontent: new Elem(n => n.elem('div', [\n\t\t\t\tn.elem('div', [\n\t\t\t\t\tn.component(new Txt(l10n.l('dialogSetAreaOwner.confirmBody', \"Do you want to change area ownership?\"), { tagName: 'p' })),\n\t\t\t\t\tn.component(new ModelTxt(area, m => m.name, { tagName: 'p', className: 'dialog--strong' })),\n\t\t\t\t]),\n\t\t\t\tn.component('owner', new PanelSection(\n\t\t\t\t\tl10n.l('dialogSetAreaOwner.newOwner', \"New owner\"),\n\t\t\t\t\tnew AutoComplete({\n\t\t\t\t\t\tclassName: 'dialog--input dialog--incomplete',\n\t\t\t\t\t\tattributes: { placeholder: l10n.t('dialogSetAreaOwner.selectAChar', \"Search for an new owner\"), spellcheck: 'false' },\n\t\t\t\t\t\tfetch: (text, update, c) => {\n\t\t\t\t\t\t\tmodel.set({ owner: null });\n\t\t\t\t\t\t\tc.addClass('dialog--incomplete');\n\t\t\t\t\t\t\tlet ac = this.module.player.getActiveChar();\n\t\t\t\t\t\t\tlet list = mergeCharLists([\n\t\t\t\t\t\t\t\tthis.module.player.getChars(),\n\t\t\t\t\t\t\t\tac && ac.inRoom.chars,\n\t\t\t\t\t\t\t\tthis.module.charsAwake.getCollection(),\n\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\t\t.filter(m => patternMatch((m.name + \" \" + m.surname).trim(), text))\n\t\t\t\t\t\t\t\t.map(m => ({ value: m.id, label: (m.name + \" \" + m.surname).trim() }))\n\t\t\t\t\t\t\t\t.sort(labelCompare)\n\t\t\t\t\t\t\t\t.slice(0, 10);\n\t\t\t\t\t\t\tupdate(list);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tevents: { blur: c => {\n\t\t\t\t\t\t\tif (!model.owner) {\n\t\t\t\t\t\t\t\tc.setProperty('value', \"\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} },\n\t\t\t\t\t\trender: patternMatchRender,\n\t\t\t\t\t\tminLength: 1,\n\t\t\t\t\t\tonSelect: (c, item) => {\n\t\t\t\t\t\t\tc.removeClass('dialog--incomplete');\n\t\t\t\t\t\t\tmodel.set({ owner: item.value });\n\t\t\t\t\t\t\tc.setProperty('value', item.label);\n\t\t\t\t\t\t},\n\t\t\t\t\t}),\n\t\t\t\t\t{\n\t\t\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t\trequired: true,\n\t\t\t\t\t\tpopupTip: l10n.l('dialogSetAreaOwner.playerConsent', \"If the character is owned by another player, a request will be sent to that player.\"),\n\t\t\t\t\t},\n\t\t\t\t)),\n\t\t\t\tn.component('message', new Collapser(null)),\n\t\t\t\tn.elem('div', { className: 'dialog--footer flex-row margin16' }, [\n\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\tmodel,\n\t\t\t\t\t\tnew Elem(n => n.elem('button', {\n\t\t\t\t\t\t\tevents: { click: () => this._setAreaOwner(ctrl, area, model) },\n\t\t\t\t\t\t\tclassName: 'btn primary flex-1',\n\t\t\t\t\t\t}, [\n\t\t\t\t\t\t\tn.component(new Txt(l10n.l('dialogSetAreaOwner.setOwner', \"Set owner\"))),\n\t\t\t\t\t\t])),\n\t\t\t\t\t\t(m, c) => c.setProperty('disabled', (m.owner || '').trim() ? null : 'disabled'),\n\t\t\t\t\t)),\n\t\t\t\t\tn.elem('button', {\n\t\t\t\t\t\tclassName: 'btn secondary flex-1',\n\t\t\t\t\t\tevents: { click: () => this.close() },\n\t\t\t\t\t}, [\n\t\t\t\t\t\tn.component(new Txt(l10n.l('dialogSetAreaOwner.cancel', \"Cancel\"))),\n\t\t\t\t\t]),\n\t\t\t\t]),\n\t\t\t])),\n\t\t\tonClose: () => { this.dialog = null; },\n\t\t});\n\n\t\tthis.dialog.open();\n\t\ttry {\n\t\t\tthis.dialog.getContent().getComponent().getComponent().getNode('owner').getComponent().getElement().focus();\n\t\t} catch (e) {}\n\t}\n\n\tclose() {\n\t\tif (this.dialog) {\n\t\t\tthis.dialog.close();\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\t_setAreaOwner(ctrl, area, model) {\n\t\tif (this.setOwnerPromise) return this.setOwnerPromise;\n\n\t\tlet params = {\n\t\t\tareaId: area.id,\n\t\t\tcharId: model.owner,\n\t\t};\n\t\tthis.setOwnerPromise = this.module.setAreaOwner.setAreaOwner(ctrl, params).then(() => {\n\t\t\tthis.close();\n\t\t}).catch(err => {\n\t\t\tif (err.code == 'core.newOwnerNotAllowed') {\n\t\t\t\tthis.dialog.close();\n\t\t\t\tthis._requestSetOwner(ctrl, params);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!this.dialog) return;\n\t\t\tthis._setMessage(l10n.l(err.code, err.message, err.data));\n\t\t}).then(() => {\n\t\t\tthis.setOwnerPromise = null;\n\t\t});\n\n\t\treturn this.setOwnerPromise;\n\t}\n\n\t_requestSetOwner(ctrl, params) {\n\t\tthis.module.confirm.open(() => this.module.requestAreaOwner.requestAreaOwner(ctrl, params)\n\t\t\t.catch(err => this.module.confirm.openError(err)),\n\t\t{\n\t\t\ttitle: l10n.l('dialogSetAreaOwner.requestSetOwner', \"Request new owner\"),\n\t\t\tbody: l10n.l('dialogSetAreaOwner.requestExitBody', \"The new owner belongs to a different player. Do you wish to make a request to that character's player?\"),\n\t\t\tconfirm: l10n.l('dialogSetAreaOwner.makeRequest', \"Make request\"),\n\t\t\tcancel: l10n.l('dialogSetAreaOwner.nevermind', \"Nevermind\"),\n\t\t});\n\t}\n\n\t_setMessage(msg) {\n\t\tif (!this.dialog) return;\n\t\ttry {\n\t\t\tlet n = this.dialog.getContent().getComponent().getComponent().getNode('message');\n\t\t\tn.setComponent(msg ? new Txt(msg, { className: 'dialog--error' }) : null);\n\t\t} catch (e) {}\n\t}\n}\n\nexport default DialogSetAreaOwner;\n","import { Elem, Txt } from 'modapp-base-component';\nimport { ModelTxt, ModelComponent } from 'modapp-resource-component';\nimport { Model } from 'modapp-resource';\nimport l10n from 'modapp-l10n';\nimport Dialog from 'classes/Dialog';\nimport Collapser from 'components/Collapser';\nimport AutoComplete from 'components/AutoComplete';\nimport PanelSection from 'components/PanelSection';\nimport patternMatch, { patternMatchRender } from 'utils/patternMatch';\nimport mergeCharLists from 'utils/mergeCharLists';\nimport labelCompare from 'utils/labelCompare';\nimport './dialogSetRoomOwner.scss';\n\nclass DialogSetRoomOwner {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'api', 'player', 'charsAwake', 'confirm', 'setRoomOwner', 'requestRoomOwner' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t}\n\n\topen(ctrl, room) {\n\t\tif (this.dialog) return;\n\n\t\tlet model = new Model({ data: {\n\t\t\towner: \"\",\n\t\t}, eventBus: this.app.eventBus });\n\n\t\tthis.dialog = new Dialog({\n\t\t\ttitle: l10n.l('dialogSetRoomOwner.setRoomOwner', \"Set room owner\"),\n\t\t\tclassName: 'dialogsetroomowner',\n\t\t\tcontent: new Elem(n => n.elem('div', [\n\t\t\t\tn.elem('div', [\n\t\t\t\t\tn.component(new Txt(l10n.l('dialogSetRoomOwner.confirmBody', \"Do you want to change room ownership?\"), { tagName: 'p' })),\n\t\t\t\t\tn.component(new ModelTxt(room, m => m.name, { tagName: 'p', className: 'dialog--strong' })),\n\t\t\t\t]),\n\t\t\t\tn.component('owner', new PanelSection(\n\t\t\t\t\tl10n.l('dialogSetRoomOwner.newOwner', \"New owner\"),\n\t\t\t\t\tnew AutoComplete({\n\t\t\t\t\t\tclassName: 'dialog--input dialog--incomplete',\n\t\t\t\t\t\tattributes: { placeholder: l10n.t('dialogSetRoomOwner.selectAChar', \"Search for an new owner\"), spellcheck: 'false' },\n\t\t\t\t\t\tfetch: (text, update, c) => {\n\t\t\t\t\t\t\tmodel.set({ owner: null });\n\t\t\t\t\t\t\tc.addClass('dialog--incomplete');\n\t\t\t\t\t\t\tlet ac = this.module.player.getActiveChar();\n\t\t\t\t\t\t\tlet list = mergeCharLists([\n\t\t\t\t\t\t\t\tthis.module.player.getChars(),\n\t\t\t\t\t\t\t\tac && ac.inRoom.chars,\n\t\t\t\t\t\t\t\tthis.module.charsAwake.getCollection(),\n\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\t\t.filter(m => patternMatch((m.name + \" \" + m.surname).trim(), text))\n\t\t\t\t\t\t\t\t.map(m => ({ value: m.id, label: (m.name + \" \" + m.surname).trim() }))\n\t\t\t\t\t\t\t\t.sort(labelCompare)\n\t\t\t\t\t\t\t\t.slice(0, 10);\n\t\t\t\t\t\t\tupdate(list);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tevents: { blur: c => {\n\t\t\t\t\t\t\tif (!model.owner) {\n\t\t\t\t\t\t\t\tc.setProperty('value', \"\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} },\n\t\t\t\t\t\trender: patternMatchRender,\n\t\t\t\t\t\tminLength: 1,\n\t\t\t\t\t\tonSelect: (c, item) => {\n\t\t\t\t\t\t\tc.removeClass('dialog--incomplete');\n\t\t\t\t\t\t\tmodel.set({ owner: item.value });\n\t\t\t\t\t\t\tc.setProperty('value', item.label);\n\t\t\t\t\t\t},\n\t\t\t\t\t}),\n\t\t\t\t\t{\n\t\t\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t\trequired: true,\n\t\t\t\t\t\tpopupTip: l10n.l('dialogSetRoomOwner.playerConsent', \"If the character is owned by another player, a request will be sent to that player.\"),\n\t\t\t\t\t},\n\t\t\t\t)),\n\t\t\t\tn.component('message', new Collapser(null)),\n\t\t\t\tn.elem('div', { className: 'dialog--footer flex-row margin16' }, [\n\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\tmodel,\n\t\t\t\t\t\tnew Elem(n => n.elem('button', {\n\t\t\t\t\t\t\tevents: { click: () => this._setRoomOwner(ctrl, room, model) },\n\t\t\t\t\t\t\tclassName: 'btn primary flex-1',\n\t\t\t\t\t\t}, [\n\t\t\t\t\t\t\tn.component(new Txt(l10n.l('dialogSetRoomOwner.setOwner', \"Set owner\"))),\n\t\t\t\t\t\t])),\n\t\t\t\t\t\t(m, c) => c.setProperty('disabled', (m.owner || '').trim() ? null : 'disabled'),\n\t\t\t\t\t)),\n\t\t\t\t\tn.elem('button', {\n\t\t\t\t\t\tclassName: 'btn secondary flex-1',\n\t\t\t\t\t\tevents: { click: () => this.close() },\n\t\t\t\t\t}, [\n\t\t\t\t\t\tn.component(new Txt(l10n.l('dialogSetRoomOwner.cancel', \"Cancel\"))),\n\t\t\t\t\t]),\n\t\t\t\t]),\n\t\t\t])),\n\t\t\tonClose: () => { this.dialog = null; },\n\t\t});\n\n\t\tthis.dialog.open();\n\t\ttry {\n\t\t\tthis.dialog.getContent().getComponent().getComponent().getNode('owner').getComponent().getElement().focus();\n\t\t} catch (e) {}\n\t}\n\n\tclose() {\n\t\tif (this.dialog) {\n\t\t\tthis.dialog.close();\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\t_setRoomOwner(ctrl, room, model) {\n\t\tif (this.setOwnerPromise) return this.setOwnerPromise;\n\n\t\tlet params = {\n\t\t\troomId: room.id,\n\t\t\tcharId: model.owner,\n\t\t};\n\t\tthis.setOwnerPromise = this.module.setRoomOwner.setRoomOwner(ctrl, params).then(() => {\n\t\t\tthis.close();\n\t\t}).catch(err => {\n\t\t\tif (err.code == 'core.newOwnerNotAllowed') {\n\t\t\t\tthis.dialog.close();\n\t\t\t\tthis._requestSetOwner(ctrl, params);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!this.dialog) return;\n\t\t\tthis._setMessage(l10n.l(err.code, err.message, err.data));\n\t\t}).then(() => {\n\t\t\tthis.setOwnerPromise = null;\n\t\t});\n\n\t\treturn this.setOwnerPromise;\n\t}\n\n\t_requestSetOwner(ctrl, params) {\n\t\tthis.module.confirm.open(() => this.module.requestRoomOwner.requestRoomOwner(ctrl, params)\n\t\t\t.catch(err => this.module.confirm.openError(err)),\n\t\t{\n\t\t\ttitle: l10n.l('dialogSetRoomOwner.requestSetOwner', \"Request new owner\"),\n\t\t\tbody: l10n.l('dialogSetRoomOwner.requestExitBody', \"The new owner belongs to a different player. Do you wish to make a request to that character's player?\"),\n\t\t\tconfirm: l10n.l('dialogSetRoomOwner.makeRequest', \"Make request\"),\n\t\t\tcancel: l10n.l('dialogSetRoomOwner.nevermind', \"Nevermind\"),\n\t\t});\n\t}\n\n\t_setMessage(msg) {\n\t\tif (!this.dialog) return;\n\t\ttry {\n\t\t\tlet n = this.dialog.getContent().getComponent().getComponent().getNode('message');\n\t\t\tn.setComponent(msg ? new Txt(msg, { className: 'dialog--error' }) : null);\n\t\t} catch (e) {}\n\t}\n}\n\nexport default DialogSetRoomOwner;\n","import { Elem, Txt, Textarea, Context } from 'modapp-base-component';\nimport { ModelComponent, CollectionList, ModelTxt } from 'modapp-resource-component';\nimport { ModifyModel } from 'modapp-resource';\nimport l10n from 'modapp-l10n';\nimport Dialog from 'classes/Dialog';\nimport Err from 'classes/Err';\nimport Collapser from 'components/Collapser';\nimport LabelToggleBox from 'components/LabelToggleBox';\nimport PanelSection from 'components/PanelSection';\nimport './dialogTag.scss';\n\n\nclass DialogTag {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\t// Bind callbacks\n\t\tthis._onClose = this._onClose.bind(this);\n\t\tthis._onSubmit = this._onSubmit.bind(this);\n\n\t\tthis.app.require([ 'api', 'tags' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t}\n\n\t/**\n\t * Opens a dialog to add a new tag to a character.\n\t * @param {Model} ctrl Controlled character.\n\t * @param {string|Model} tag Tag key or add, or tag Model to edit.\n\t * @param {object} [opt] Optional parameters.\n\t * @param {string} [opt.pref] Preference id. May be 'like' or 'dislike'. Defaults to 'like'.\n\t */\n\topen(ctrl, tag, opt) {\n\t\tif (this.dialog) return;\n\n\t\topt = opt || {};\n\t\tlet isEdit = typeof tag != 'string';\n\t\tlet prefs = this.module.tags.getPreferences();\n\t\tlet key = isEdit ? tag.key : tag.trim().toLowerCase();\n\t\tlet global = this.module.tags.getTag(key);\n\t\tlet props = {\n\t\t\tpref: opt.pref || prefs[0].id,\n\t\t\tcustom: !global || (isEdit && tag.id != global.id),\n\t\t};\n\t\tlet isRoleTag = global && (global.role || global.idRole);\n\n\t\tthis.dialog = new Dialog({\n\t\t\ttitle: isRoleTag\n\t\t\t\t? l10n.l('dialogTag.titleTag', \"Title tag\")\n\t\t\t\t: isEdit\n\t\t\t\t\t? l10n.l('dialogTag.editTag', \"Edit tag\")\n\t\t\t\t\t: l10n.l('dialogTag.addTag', \"Add tag\"),\n\t\t\tclassName: 'dialogtag',\n\t\t\tcontent: new Context(\n\t\t\t\t() => new ModifyModel(isEdit ? tag : (global || { key, desc: '' }), {\n\t\t\t\t\tprops,\n\t\t\t\t\tmodifiedOnNew: true,\n\t\t\t\t\teventBus: this.app.eventBus,\n\t\t\t\t}),\n\t\t\t\tmodel => model.dispose(),\n\t\t\t\tmodel => new Elem(n => n.elem('div', [\n\t\t\t\t\tn.elem('div', { className: 'common--itemtitle common--sectionpadding' }, [ n.text(key) ]),\n\t\t\t\t\tn.component('desc', new PanelSection(\n\t\t\t\t\t\tl10n.l('pageAddTag.description', \"Description\"),\n\t\t\t\t\t\tnew Elem(n => n.elem('div', [\n\t\t\t\t\t\t\tn.component('desc', new ModelComponent(\n\t\t\t\t\t\t\t\tglobal,\n\t\t\t\t\t\t\t\tnew ModelComponent(\n\t\t\t\t\t\t\t\t\tmodel,\n\t\t\t\t\t\t\t\t\tnew Textarea(model.desc, {\n\t\t\t\t\t\t\t\t\t\tclassName: 'dialogtag--desc dialog--input common--paneltextarea-small common--desc-size',\n\t\t\t\t\t\t\t\t\t\tevents: {\n\t\t\t\t\t\t\t\t\t\t\tinput: c => {\n\t\t\t\t\t\t\t\t\t\t\t\tlet v = c.getValue().replace(/\\r?\\n/gi, '');\n\t\t\t\t\t\t\t\t\t\t\t\tc.setValue(v);\n\t\t\t\t\t\t\t\t\t\t\t\tmodel.set({ desc: v });\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tattributes: { name: 'dialogtag-desc', spellcheck: 'true' },\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t(m, c) => {\n\t\t\t\t\t\t\t\t\t\tc.setValue(m.custom ? m.desc : global.desc);\n\t\t\t\t\t\t\t\t\t\tc.setProperty('disabled', m.custom ? null : 'disabled');\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t(m, c) => {\n\t\t\t\t\t\t\t\t\tif (m && !model.custom) {\n\t\t\t\t\t\t\t\t\t\tc.getComponent().setValue(m.desc);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t\tn.component(global && !isRoleTag ? new LabelToggleBox(l10n.l('dialogTag.customDescription', \"Custom description\"), !!model.custom, {\n\t\t\t\t\t\t\t\tclassName: 'pad-top-l',\n\t\t\t\t\t\t\t\tonChange: v => model.set({ custom: v }),\n\t\t\t\t\t\t\t}) : null),\n\t\t\t\t\t\t])),\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t)),\n\t\t\t\t\tn.component(isRoleTag ? null : new PanelSection(\n\t\t\t\t\t\tl10n.l('pageAddTag.preference', \"Preference\"),\n\t\t\t\t\t\tnew CollectionList(\n\t\t\t\t\t\t\tprefs,\n\t\t\t\t\t\t\tp => new ModelComponent(\n\t\t\t\t\t\t\t\tmodel,\n\t\t\t\t\t\t\t\tnew LabelToggleBox(p.name, model.pref == p.id, {\n\t\t\t\t\t\t\t\t\tclassName: 'dialogtag--pref-' + p.id,\n\t\t\t\t\t\t\t\t\tevents: {\n\t\t\t\t\t\t\t\t\t\tclick: (c, e) => {\n\t\t\t\t\t\t\t\t\t\t\tmodel.set({ pref: p.id });\n\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tdisableClick: true,\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t(m, c) => c.setValue(m.pref == p.id, false),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tclassName: 'pad-top-s flex-row pad16',\n\t\t\t\t\t\t\t\thorizontal: true,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t),\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t)),\n\t\t\t\t\tn.component('message', new Collapser(null)),\n\t\t\t\t\tn.elem('div', { className: 'pad-top-xl' }, [\n\t\t\t\t\t\tn.elem('add', 'button', {\n\t\t\t\t\t\t\tevents: { click: () => this._onSubmit(ctrl, model, isEdit, global) },\n\t\t\t\t\t\t\tclassName: 'dialogtag--btn btn primary common--btnwidth',\n\t\t\t\t\t\t}, [\n\t\t\t\t\t\t\tn.component(isEdit\n\t\t\t\t\t\t\t\t? new ModelTxt(model, m => (m.getModel().desc != m.desc && m.custom) || props.custom != m.custom || props.pref != m.pref\n\t\t\t\t\t\t\t\t\t? l10n.l('dialogTag.update', \"Update\")\n\t\t\t\t\t\t\t\t\t: l10n.l('dialogTag.close', \"Close\"),\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t: new Txt(l10n.l('dialogTag.addTag', \"Add tag\")),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t]),\n\t\t\t\t\t]),\n\t\t\t\t])),\n\t\t\t),\n\t\t\tonClose: this._onClose,\n\t\t});\n\n\t\tthis.dialog.open();\n\t\t// Focus depends on if it is a custom tag\n\t\tlet c = this.dialog.getContent().getComponent();\n\t\tif (props.custom) {\n\t\t\tc.getNode('desc').getComponent().getNode('desc').getComponent().getComponent().getElement().focus();\n\t\t} else {\n\t\t\tc.getNode('add').focus();\n\t\t}\n\t}\n\n\t_onClose() {\n\t\tthis.dialog = null;\n\t}\n\n\t_onSubmit(ctrl, model, isEdit, global) {\n\t\tif (this.submitPromise) return this.submitPromise;\n\n\t\tlet mods = model.getModifications();\n\t\tlet promise = Promise.resolve();\n\n\t\tif (isEdit) {\n\t\t\tif (mods.hasOwnProperty('custom')) {\n\t\t\t\tif (model.custom) {\n\t\t\t\t\t// Change from global to custom\n\t\t\t\t\tpromise = this._callSetPref(ctrl, model.id, null)\n\t\t\t\t\t\t.then(() => this._callCreate(ctrl, model));\n\t\t\t\t} else if (global) {\n\t\t\t\t\t// Change from custom to global\n\t\t\t\t\tpromise = this._callSetPref(ctrl, model.id, null)\n\t\t\t\t\t\t.then(() => this._callSetPref(ctrl, global.id, model.pref));\n\t\t\t\t} else {\n\t\t\t\t\tpromise = Promise.reject(new Err('dialogTag.noGlobalTag', \"There is no global tag [{tag}]\", { tag: model.key }));\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Updating preference\n\t\t\t\tpromise = this._callSetPref(ctrl, model.id, model.pref);\n\t\t\t\tif (model.custom && mods.hasOwnProperty('desc')) {\n\t\t\t\t\t// Updating description for custom tags.\n\t\t\t\t\tpromise = promise.then(() => this._callSetDesc(model.id, model.desc));\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tpromise = model.custom\n\t\t\t\t? this._callCreate(ctrl, model)\n\t\t\t\t: this._callSetPref(ctrl, global.id, model.pref);\n\t\t}\n\n\t\tpromise.then(() => {\n\t\t\tif (this.dialog) {\n\t\t\t\tthis.dialog.close();\n\t\t\t}\n\t\t}).catch(err => {\n\t\t\tif (!this.dialog) return;\n\t\t\tthis._setMessage(l10n.l(err.code, err.message, err.data));\n\t\t}).then(() => {\n\t\t\tthis.submitPromise = null;\n\t\t});\n\n\t\treturn this.submitPromise;\n\t}\n\n\t_callCreate(ctrl, model) {\n\t\treturn this.module.api.call('tag.char.' + ctrl.id + '.tags', 'create', {\n\t\t\tkey: model.key,\n\t\t\tdesc: model.desc,\n\t\t\tpref: model.pref,\n\t\t});\n\t}\n\n\t_callSetPref(ctrl, tagId, pref) {\n\t\treturn this.module.api.call('tag.char.' + ctrl.id + '.tags', 'setTags', { tags: { [ tagId ]: pref }});\n\t}\n\n\t_callSetDesc(tagId, desc) {\n\t\treturn this.module.api.call('tag.tag.' + tagId, 'set', { desc });\n\t}\n\n\n\t_setMessage(msg) {\n\t\tif (!this.dialog) return;\n\t\tlet n = this.dialog.getContent().getComponent().getNode('message');\n\t\tn.setComponent(msg ? new Txt(msg, { className: 'dialog--error' }) : null);\n\t}\n}\n\nexport default DialogTag;\n","import { Elem, Txt } from 'modapp-base-component';\nimport { ModelTxt } from 'modapp-resource-component';\nimport l10n from 'modapp-l10n';\nimport Dialog from 'classes/Dialog';\nimport Collapser from 'components/Collapser';\nimport './dialogUnregisterPuppet.scss';\n\nclass DialogUnregisterPuppet {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'api', 'player' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t}\n\n\topen(puppeteer) {\n\t\tif (this.dialog) return;\n\n\t\tthis.dialog = new Dialog({\n\t\t\ttitle: l10n.l('dialogUnregisterPuppet.unregisterPuppet', \"Unregister puppet\"),\n\t\t\tclassName: 'dialogunregisterpuppet',\n\t\t\tcontent: new Elem(n => n.elem('div', [\n\t\t\t\tn.elem('div', [\n\t\t\t\t\tn.component(new Txt(l10n.l('dialogUnregisterPuppet.unregisterPuppetBody', \"Do you really wish to unregister the puppet?\"), { tagName: 'p' })),\n\t\t\t\t\tn.component(new ModelTxt(puppeteer.puppet, m => (m.name + \" \" + m.surname).trim(), { className: 'dialogunregisterpuppet--fullname' })),\n\t\t\t\t]),\n\t\t\t\tn.component('message', new Collapser(null)),\n\t\t\t\tn.elem('div', { className: 'dialog--footer flex-row margin16' }, [\n\t\t\t\t\tn.elem('button', {\n\t\t\t\t\t\tevents: { click: () => this._onUnregister(puppeteer) },\n\t\t\t\t\t\tclassName: 'btn primary flex-1',\n\t\t\t\t\t}, [\n\t\t\t\t\t\tn.component(new Txt(l10n.l('dialogUnregisterPuppet.unregister', \"Unregister puppet\"))),\n\t\t\t\t\t]),\n\t\t\t\t\tn.elem('button', {\n\t\t\t\t\t\tclassName: 'btn secondary flex-1',\n\t\t\t\t\t\tevents: { click: () => this.close() },\n\t\t\t\t\t}, [\n\t\t\t\t\t\tn.component(new Txt(l10n.l('dialogUnregisterPuppet.cancel', \"Cancel\"))),\n\t\t\t\t\t]),\n\t\t\t\t]),\n\t\t\t])),\n\t\t\tonClose: () => { this.dialog = null; },\n\t\t});\n\n\t\tthis.dialog.open();\n\t\ttry {\n\t\t\tthis.dialog.getContent().getComponent().getComponent().getNode('heir').getComponent().getElement().focus();\n\t\t} catch (e) {}\n\t}\n\n\tclose() {\n\t\tif (this.dialog) {\n\t\t\tthis.dialog.close();\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\t_onUnregister(puppeteer) {\n\t\tif (this.unregisterPromise) return this.unregisterPromise;\n\n\t\tthis.unregisterPromise = this.module.player.getPlayer().call('unregisterPuppet', {\n\t\t\tcharId: puppeteer.char.id,\n\t\t\tpuppetId: puppeteer.puppet.id,\n\t\t}).then(() => {\n\t\t\tthis.close();\n\t\t}).catch(err => {\n\t\t\tif (!this.dialog) return;\n\t\t\tthis._setMessage(l10n.l(err.code, err.message, err.data));\n\t\t}).then(() => {\n\t\t\tthis.unregisterPromise = null;\n\t\t});\n\n\t\treturn this.unregisterPromise;\n\t}\n\n\t_setMessage(msg) {\n\t\tif (!this.dialog) return;\n\t\tlet n = this.dialog.getContent().getNode('message');\n\t\tn.setComponent(msg ? new Txt(msg, { className: 'dialog--error' }) : null);\n\t}\n}\n\nexport default DialogUnregisterPuppet;\n","import { Model } from 'modapp-resource';\nimport TokenList from 'classes/TokenList';\n\n/**\n * GlobalTeleports holds a list of global teleport nodes.\n */\nclass GlobalTeleports {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\t\tthis.app.require([ 'auth', 'api' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t\tthis.model = new Model({ data: { globalTeleports: null }, eventBus: this.app.eventBus });\n\t\tthis.module.auth.getUserPromise().then(() => this._getGlobalTeleports());\n\t\tthis.list = new TokenList(() => this.getGlobalTeleports(), {\n\t\t\tregex: /^([\\w\\s]*\\w)\\s*/,\n\t\t\texpandRegex: { left: /\\w\\s/, right: /\\w\\s/ },\n\t\t\tisMatch: (t, key) => key === t.key ? { key, value: t.id } : false,\n\t\t\tisPrefix: (t, prefix) => !prefix || t.key.substring(0, prefix.length) === prefix\n\t\t\t\t? t.key\n\t\t\t\t: null,\n\t\t});\n\t}\n\n\tgetModel() {\n\t\treturn this.model;\n\t}\n\n\tgetNode(nodeId) {\n\t\tlet c = this.getGlobalTeleports();\n\t\tif (c) {\n\t\t\tfor (let node of c) {\n\t\t\t\tif (node.id == nodeId) {\n\t\t\t\t\treturn node;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tgetGlobalTeleports() {\n\t\treturn this.model.globalTeleports || null;\n\t}\n\n\tgetGlobalTeleportsList() {\n\t\treturn this.list;\n\t}\n\n\t_getGlobalTeleports() {\n\t\tthis.module.api.get('core.nodes').then(globalTeleports => {\n\t\t\tglobalTeleports.on();\n\t\t\tthis.model.set({ globalTeleports });\n\t\t});\n\t}\n\n\tdispose() {\n\t\tif (this.model.globalTeleports) {\n\t\t\tthis.model.globalTeleports.off();\n\t\t}\n\t\tthis.model.set({ globalTeleports: null });\n\t}\n}\n\nexport default GlobalTeleports;\n","import { Html } from 'modapp-base-component';\nimport l10n from 'modapp-l10n';\nimport escapeHtml from 'utils/escapeHtml';\n\n\nclass HelpComponent extends Html {\n\tconstructor(module, categories) {\n\t\tcategories = categories.toArray().filter(m => m.promoted);\n\n\t\tlet list = [];\n\t\tfor (let m of categories) {\n\t\t\tlist.push('<tr><td><code class=\"common--nowrap\">help ' + escapeHtml(m.cmd) + '</code></td><td>' + escapeHtml(l10n.t(m.shortDesc || m.title)) + '</td></tr>');\n\t\t}\n\n\t\tsuper(`<h3 class=\"margin-bottom-m\">${l10n.t('help.help', \"Welcome to {name}\", { name: module.info.getCore()?.title || l10n.t('help.thisRealm', \"this realm\") })}</h3>\n<div class=\"help--desc\">\n\t<section class=\"charlog--pad\">\n\t\t<p>${l10n.t('help.helpIntro', \"This is a social game of roleplaying with characters blissfully unaware of the real world.\")}</p>\n\t\t<p>${l10n.t('help.helpIntro2', \"Most things are done by typing commands in the <em>console</em>, like you just did (well done!). You can try to say hello by typing:\")}</p><section class=\"charlog--pad\">\n\t\t\t<div class=\"charlog--code\"><code>${l10n.t('help.cmdSay', \"say Hello!\")}</code></div>\n\t\t</section>\n\t\t<p>${l10n.t('help.introHelpme', \"Quickest way to get help is to chat with our helpers, by typing:\")}</p>\n\t\t<section class=\"charlog--pad\">\n\t\t\t<div class=\"charlog--code\"><code>${l10n.t('help.cmdHelpme', \"helpme Hi! I am new here.\")}</code></div>\n\t\t</section>\n\t\t<p>${l10n.t('help.helpTopicsIntro', \"If you prefer learning by yourself, you can try some other help topics:\")}</p>\n\t\t<section class=\"charlog--pad\">\n\t\t\t<div class=\"charlog--code\">\n\t\t\t\t<table class=\"tbl-small tbl-nomargin\">\n\t\t\t\t\t<tbody>${list.join('')}</tbody>\n\t\t\t\t</table>\n\t\t\t</div>\n\t\t</section>\n\t\t<p>To view a full list of help topics, type:</p>\n\t\t<section class=\"charlog--pad\">\n\t\t\t<div class=\"charlog--code\"><code>help topics</code></div>\n\t\t</section>\n\t</section>\n</div>`, { className: 'help' });\n\n\t}\n}\n\nexport default HelpComponent;\n","import { Elem, Txt, Html } from 'modapp-base-component';\nimport l10n from 'modapp-l10n';\nimport escapeHtml from 'utils/escapeHtml';\n\nfunction createTable(col) {\n\tlet list = [];\n\tfor (let m of col) {\n\t\tlist.push('<tr><td><code class=\"common--nowrap\">help ' + escapeHtml(m.cmd) + '</code></td><td>' + escapeHtml(l10n.t(m.shortDesc || m.title || '')) + '</td></tr>');\n\t}\n\treturn list.join('');\n};\n\nclass HelpRelatedTopics {\n\tconstructor(categories, topics) {\n\t\tthis.categories = categories && categories.length ? categories : null;\n\t\tthis.topics = topics && topics.length ? topics : null;\n\t}\n\n\trender(el) {\n\t\t// Render nothing if we have no categories or topics\n\t\tif (!this.categories && !this.topics) return;\n\n\t\tthis.elem = new Elem(n => n.elem('div', { className: 'help-relatedtopic' }, [\n\t\t\tn.component(this.categories ? new Elem(n => n.elem('div', [\n\t\t\t\tn.component(new Txt(l10n.l('help.relatedHelpTopics', \"Related help topics\"), { tagName: 'h4', className: 'charlog--pad' })),\n\t\t\t\tn.elem('div', { className: 'charlog--code' }, [\n\t\t\t\t\tn.elem('table', { className: 'tbl-small tbl-nomargin' }, [\n\t\t\t\t\t\tn.component(new Html(createTable(this.categories), { tagName: 'tbody' })),\n\t\t\t\t\t]),\n\t\t\t\t]),\n\t\t\t])) : null),\n\t\t\tn.component(this.topics ? new Elem(n => n.elem('div', [\n\t\t\t\tn.component(new Txt(l10n.l('help.relatedCommands', \"Related commands\"), { tagName: 'h4', className: 'charlog--pad' })),\n\t\t\t\tn.elem('div', { className: 'charlog--code' }, [\n\t\t\t\t\tn.elem('table', { className: 'tbl-small tbl-nomargin' }, [\n\t\t\t\t\t\tn.component(new Html(createTable(this.topics), { tagName: 'tbody' })),\n\t\t\t\t\t]),\n\t\t\t\t]),\n\t\t\t])) : null),\n\t\t]));\n\t\treturn this.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n}\n\nexport default HelpRelatedTopics;\n","import { Elem, Txt, Html } from 'modapp-base-component';\nimport isComponent from 'utils/isComponent';\nimport HelpRelatedTopics from './HelpRelatedTopics';\n\n\nclass HelpCategory {\n\tconstructor(module, categories, category) {\n\t\tthis.module = module;\n\t\tthis.categories = categories;\n\t\tthis.category = category;\n\t\t// Clone topics to prevent updates.\n\t\tthis.topics = category.topics.toArray();\n\t}\n\n\trender(el) {\n\t\tlet c = this.category;\n\t\tlet desc = typeof c.desc == 'function' ? c.desc() : c.desc;\n\t\tthis.elem = new Elem(n => n.elem('div', { className: 'help-category' }, [\n\t\t\tn.component(new Txt(c.title, { tagName: 'h3', className: 'margin-bottom-m' })),\n\t\t\tn.component(isComponent(desc) ? desc : new Html(desc, { className: 'help-category--desc' })),\n\t\t\tn.component(new HelpRelatedTopics(this._getRelatedCategories(), this.category.topics)),\n\t\t]));\n\t\treturn this.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n\n\t_getRelatedCategories() {\n\t\tlet c = this.category.categories;\n\t\tif (!c || !c.length) return null;\n\n\t\treturn c.map(id => this.categories.get(id)).filter(c => c);\n\t}\n}\n\nexport default HelpCategory;\n","import { Elem, Html } from 'modapp-base-component';\nimport l10n from 'modapp-l10n';\nimport helpAttribDesc from 'utils/helpAttribDesc';\n\nclass HelpTopic {\n\tconstructor(module, topic, cmd) {\n\t\tthis.module = module;\n\t\tthis.topic = topic;\n\t\tthis.cmd = cmd;\n\t}\n\n\trender(el) {\n\t\tlet t = this.topic;\n\t\tlet examples = null;\n\t\tif (t.examples) {\n\t\t\tlet ex = typeof t.examples == 'function' ? t.examples() : t.examples;\n\t\t\tif (ex && ex.length) {\n\t\t\t\tlet hasDesc = false;\n\t\t\t\tlet items = ex.map(e => {\n\t\t\t\t\thasDesc |= !!e.desc;\n\t\t\t\t\treturn { key: e.cmd, desc: e.desc };\n\t\t\t\t});\n\t\t\t\texamples = helpAttribDesc('', items, {\n\t\t\t\t\tattribute: l10n.l('help.example', \"Example\"),\n\t\t\t\t\tvalue: hasDesc ? l10n.l('help.description', \"Description\") : '',\n\t\t\t\t\tattributeClass: 'common--pre-wrap',\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tthis.elem = new Elem(n => n.elem('div', { className: 'help-topic' }, [\n\t\t\tn.elem('div', { className: 'charlog--code' }, [\n\t\t\t\tn.component(new Html(typeof t.usage == 'function' ? t.usage() : t.usage, { tagName: 'code', className: 'help-topic--title margin-bottom-m' })),\n\t\t\t\tn.component(new Html(typeof t.desc == 'function' ? t.desc() : t.desc, { className: 'help-topic--desc' })),\n\t\t\t\tn.component(examples ? new Html(examples, { className: 'margin-top-s' }) : null),\n\t\t\t]),\n\t\t]));\n\t\treturn this.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n}\n\nexport default HelpTopic;\n","import { Elem, Html } from 'modapp-base-component';\nimport l10n from 'modapp-l10n';\nimport escapeHtml from 'utils/escapeHtml';\n\nclass HelpTopics {\n\tconstructor(module, categories) {\n\t\tthis.module = module;\n\t\tthis.categories = categories.toArray();\n\t}\n\n\trender(el) {\n\t\tlet list = [];\n\t\tfor (let m of this.categories) {\n\t\t\tif (m.id != 'topics') {\n\t\t\t\tlist.push('<tr><td><code class=\"common--nowrap\">help ' + escapeHtml(m.cmd) + '</code></td><td>' + escapeHtml(l10n.t(m.shortDesc || m.title)) + '</td></tr>');\n\t\t\t}\n\t\t}\n\t\tthis.elem = new Elem(n => n.elem('div', { className: 'help-topics' }, [\n\t\t\tn.elem('div', { className: 'charlog--pad' }, [\n\t\t\t\tn.elem('div', { className: 'charlog--code' }, [\n\t\t\t\t\tn.elem('table', { className: 'tbl-small tbl-nomargin' }, [\n\t\t\t\t\t\tn.component(new Html(list.join(''), { tagName: 'tbody' })),\n\t\t\t\t\t]),\n\t\t\t\t]),\n\t\t\t]),\n\t\t]));\n\t\treturn this.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n}\n\nexport default HelpTopics;\n","import { Model, Collection, sortOrderCompare } from 'modapp-resource';\nimport TokenList from 'classes/TokenList';\nimport ListStep from 'classes/ListStep';\nimport RepeatStep from 'classes/RepeatStep';\nimport l10n from 'modapp-l10n';\nimport HelpComponent from './HelpComponent';\nimport HelpCategory from './HelpCategory';\nimport HelpTopic from './HelpTopic';\nimport HelpTopics from './HelpTopics';\nimport HelpRelatedTopics from './HelpRelatedTopics';\nimport './help.scss';\n\nconst defaultCategories = [\n\t(self) => ({\n\t\tid: 'topics',\n\t\ttitle: l10n.l('help.topicTitle', \"List of help topics\"),\n\t\tshortDesc: l10n.l('help.topicShortdesc', \"List available help topics\"),\n\t\tdesc: () => new HelpTopics(self.module, self.categories),\n\t\tsortOrder: 1,\n\t\talias: [ 'topic' ],\n\t}),\n\t{\n\t\tid: 'basic',\n\t\ttitle: l10n.l('help.basicTitle', \"Basic commands\"),\n\t\tshortDesc: l10n.l('help.basicShortdesc', \"Learn some basic commands\"),\n\t\tdesc: l10n.l('help.basicDesc',\n\t\t\t`<p class=\"common--formattext\">The most basic and useful command is <span class=\"cmd\">help</span>, which can show you help topics.</p>` +\n\t\t\t`<p class=\"common--formattext\">The <em>help</em> command also gives details on how to use a command, including the help command itself (meta!). Try typing:</p>` +\n\t\t\t`<section class=\"charlog--pad\">` +\n\t\t\t`<div class=\"charlog--code\"><code>help help</code></div>` +\n\t\t\t`</section>` +\n\t\t\t`<p>Below is a list of some basic commands:</p>`,\n\t\t),\n\t\tsortOrder: 10,\n\t\talias: [ 'basics' ],\n\t\tpromoted: true,\n\t},\n\t{\n\t\tid: 'communicate',\n\t\ttitle: l10n.l('help.communicateTitle', \"Communication commands\"),\n\t\tshortDesc: l10n.l('help.communicateShortDesc', \"How to communicate in different ways\"),\n\t\tdesc: l10n.l('help.communicateDesc', `<p>Commands for talking, whispering, messaging, and more.</p>`),\n\t\tsortOrder: 20,\n\t\talias: [ 'communication', 'talk', 'communications' ],\n\t},\n\t{\n\t\tid: 'reporting',\n\t\ttitle: l10n.l('help.requestTitle', \"How to report incidents\"),\n\t\tshortDesc: l10n.l('help.requestShortDesc', \"How to reports incidents to the moderators\"),\n\t\tdesc: l10n.l('help.requestDesc',\n\t\t\t`<p>Moderators are here to help us keep this place nice, friendly, and respectful. Don't hesitate to report when someone is being disrespectful, toxic, or breaking realm or area rules. Reports can only be seen by moderators.</p>` +\n\t\t\t`<section class=\"charlog--pad\">` +\n\t\t\t`\t<h4>Report a character</h4>` +\n\t\t\t`\t<p>To create a report, follow these steps:</p>` +\n\t\t\t` <ol class=\"charlog--ol\">` +\n\t\t\t` <li>Hover over the reportable text in the chat log, or tap the text on mobile.</li>` +\n\t\t\t` <li>Click on the menu icon (⋮) that appears to the right.</li>` +\n\t\t\t` <li>Select <em>Report</em> to open the <em>Report character</em> dialog.</li>` +\n\t\t\t` <li>Type a message explaining the report.</li>` +\n\t\t\t` <li>Optionally choose the time interval of your log to attach.</li>` +\n\t\t\t` <li>Click <em>Send report</em>.</li>` +\n\t\t\t` </ol>` +\n\t\t\t`\t<p>If you don't have any logs to attach, you can also use the <code>report</code> command:</p>` +\n\t\t\t`\t<section class=\"charlog--pad\"><div class=\"charlog--code\"><code>report John Mischief = Keeps spamming the room.</code></div></section>` +\n\t\t\t`</section>` +\n\t\t\t`<section class=\"charlog--pad\">` +\n\t\t\t`\t<h4>Report a moderator</h4>` +\n\t\t\t`\t<p>It is completely fine to report moderators if you find them acting abusive or unjust. When reporting a moderator, <em>another</em> moderator will review the report and get in contact with you. Remember to keep your own language respectful.</p>` +\n\t\t\t`</section>`,\n\t\t),\n\t\tsortOrder: 30,\n\t\talias: [ 'abuse' ],\n\t},\n\t{\n\t\tid: 'transport',\n\t\ttitle: l10n.l('help.transportTitle', \"Transportation commands\"),\n\t\tshortDesc: l10n.l('help.transportShortDesc', \"How to move between rooms\"),\n\t\tdesc: l10n.l('help.transportDesc', `<p>Commands for transporting between rooms, and manage teleport destinations.</p>`),\n\t\tsortOrder: 40,\n\t\talias: [ 'transportation', 'move' ],\n\t},\n\t{\n\t\tid: 'profile',\n\t\tcmd: 'profiles',\n\t\ttitle: l10n.l('help.charTitle', \"Profile commands\"),\n\t\tshortDesc: l10n.l('help.charShortDesc', \"How to manage your character's appearance and profiles\"),\n\t\tdesc: l10n.l('help.charDesc', `<p>Commands for managing your character's appearance and profiles.</p>`),\n\t\tsortOrder: 50,\n\t\talias: [ 'manage profile', 'character', 'appearance' ],\n\t},\n\t{\n\t\tid: 'tags',\n\t\ttitle: l10n.l('help.tagsTitle', \"Character tags\"),\n\t\tshortDesc: l10n.l('help.tagsShortDesc', \"How to view and manage character tags\"),\n\t\tdesc: l10n.l('help.basicDesc',\n\t\t\t`<p class=\"common--formattext\">Tags are out of character info that gives a quick view of a character, and what kind of roleplay they are interested in. You can list a character's tags with the <em>whois</em> command:</p>` +\n\t\t\t`<section class=\"charlog--pad\">` +\n\t\t\t`\t<div class=\"charlog--code\"><code>whois Jane Doe</code></div>` +\n\t\t\t`</section>` +\n\t\t\t`<section class=\"charlog--pad\">` +\n\t\t\t`\t<h4>Tag colors</h4>` +\n\t\t\t`\t<p><div class=\"chartagslist--item\" style=\"display:inline-block\"><div title=\"A character attribute or player preference.\" class=\"chartagslist--tag like hasdesc\"><span>grey tag</span></div></div> is a character attribute or player preference.<br/>` +\n\t\t\t`\t<div class=\"chartagslist--item\" style=\"display:inline-block\"><div title=\"Something the player dislikes as part of roleplay.\" class=\"chartagslist--tag dislike hasdesc\"><span>red tag</span></div></div> is something the player dislikes as part of roleplay.<br/>` +\n\t\t\t`\t<div class=\"chartagslist--item\" style=\"display:inline-block\"><div title=\"A title held by the player.\" class=\"chartagslist--tag title hasdesc\"><span>blue tag</span></div></div> is a title held by the character's player, such as <em>moderator</em> or <em>admin</em>.</p>` +\n\t\t\t`</section>` +\n\t\t\t`<section class=\"charlog--pad\">` +\n\t\t\t`\t<h4>Tag description</h4>` +\n\t\t\t`\t<p>Hovering over a tag will show a description of the tag, if available. A tag name written in <i>italics</i> indicates a custom tag or a custom description. Custom descriptions can be used to clarify the scope of the tag.</p>` +\n\t\t\t`</section>`,\n\t\t),\n\t\tsortOrder: 60,\n\t\talias: [ 'tag', 'manage tags' ],\n\t},\n\t{\n\t\tid: 'friends',\n\t\ttitle: l10n.l('help.friendsTitle', \"Friends commands\"),\n\t\tshortDesc: l10n.l('help.friendsShortDesc', \"How to watch for friends and remember them\"),\n\t\tdesc: l10n.l('help.friendsDesc', `<p>Commands for managing friends and remembering them.</p>`),\n\t\tsortOrder: 70,\n\t\talias: [ 'friend' ],\n\t},\n\t{\n\t\tid: 'mute',\n\t\ttitle: l10n.l('help.muteTitle', \"Mute commands\"),\n\t\tshortDesc: l10n.l('help.muteShortDesc', \"How to mute unwanted messages\"),\n\t\tdesc: l10n.l('help.muteDesc', `<p>Commands for muting unwanted messages.</p>`),\n\t\tsortOrder: 80,\n\t\talias: [ 'muting' ],\n\t},\n\t{\n\t\tid: 'puppets',\n\t\ttitle: l10n.l('help.puppetsTitle', \"How to play with puppets\"),\n\t\tshortDesc: l10n.l('help.puppetsShortDesc', \"How to control and manage puppet characters\"),\n\t\tdesc: l10n.l('help.puppetsDesc',\n\t\t\t`<p>Puppets are shared characters that may be controlled by more than just the owner.</p>` +\n\t\t\t`<section class=\"charlog--pad\">` +\n\t\t\t`\t<h4>Identifying a puppet</h4>` +\n\t\t\t`\t<p>Puppets are identified by a lighter blue background color of their character badges seen in the <em>Awake</em> or <em>In Room</em> lists. If they are awake, you can show the name of the current puppeteer by hovering over the character badge or a chat log message.</p>` +\n\t\t\t`</section>` +\n\t\t\t`<section class=\"charlog--pad\">` +\n\t\t\t`\t<h4>Controlling a puppet</h4>` +\n\t\t\t`\t<p>To control a puppet, you first have to register it. To register a puppet (e.g. Jane Shopkeeper), go the the same room and type:</p>` +\n\t\t\t`\t<section class=\"charlog--pad\"><div class=\"charlog--code\"><code>register puppet Jane Shopkeeper</code></div></section>` +\n\t\t\t`\t<p>This will send a request to the owner of the puppet. Once that request is accepted, the puppet will be available in the <em>Character Select</em> page, where you can wake them up.</p>` +\n\t\t\t`\t<p>If another puppeteer is using the puppet, the <em>Wake up</em> button will instead be replaced by the option to send a control request. If the puppeteer accepts the request, or if they do not respond within 5 minutes, you can take over control of the puppet.</p>` +\n\t\t\t`</section>` +\n\t\t\t`<section class=\"charlog--pad\">` +\n\t\t\t`\t<h4>Playing a puppet</h4>` +\n\t\t\t`\t<p>Most puppets have a <em>How to play</em> section below their description, only visible for the puppeteer. This section provides info on how the puppet is intented to be played.</p>` +\n\t\t\t`</section>` +\n\t\t\t`<section class=\"charlog--pad\">` +\n\t\t\t`\t<h4>Interacting with a puppet</h4>` +\n\t\t\t`\t<p>Each puppeteer will add their own personal touch to a puppet. Respect if a puppeteer plays a puppet differently than you would have preferred, and do not expect roleplay contingency between different puppeteers.</p>` +\n\t\t\t`</section>` +\n\t\t\t`<section class=\"charlog--pad\">` +\n\t\t\t`\t<h4>Reporting a puppet</h4>` +\n\t\t\t`\t<p>If a puppeteer breaks any rules while playing the puppet, you can report them as usual. Note that breaking character, not following the <em>How to play</em> guidelines, is not against the rules. To complain about how a puppet is played, contact the puppet's owner by sending a mail to the puppet. Mails sent to a puppet always lands in the owner's inbox.</p>` +\n\t\t\t`</section>`,\n\t\t),\n\t\tsortOrder: 90,\n\t\talias: [ 'puppet' ],\n\t},\n\t{\n\t\tid: 'buildRooms',\n\t\tcmd: 'build rooms',\n\t\ttitle: l10n.l('help.buildRoomsTitle', \"How to build rooms and exits\"),\n\t\tshortDesc: l10n.l('help.buildRoomsShortDesc', \"How to build rooms and exits\"),\n\t\tdesc: l10n.l('help.buildRoomsDesc',\n\t\t\t`<p>Do you wish to create your own private place, or maybe a new public hangout? Let's get you started.</p>` +\n\t\t\t`<section class=\"charlog--pad\">` +\n\t\t\t`\t<h4>Create rooms</h4>` +\n\t\t\t`\t<p>To create a new room, type:</p>` +\n\t\t\t`\t<section class=\"charlog--pad\"><div class=\"charlog--code\"><code>create room</code></div></section>` +\n\t\t\t`\t<p>This will teleport you to a new room with a default name. If you wish to set it as your home, type:</p>` +\n\t\t\t`\t<section class=\"charlog--pad\"><div class=\"charlog--code\"><code>register home</code></div></section>` +\n\t\t\t`\t<p>When you own a room, a little pencil (<i aria-hidden=\"true\" class=\"fa fa-pencil\"></i>) icon will show up in the <em>Room Info</em> panel. Click this icon to edit the room.</p>` +\n\t\t\t`</section>` +\n\t\t\t`<section class=\"charlog--pad\">` +\n\t\t\t`\t<h4>Create exits</h4>` +\n\t\t\t`\t<p>In the <em>Room Info</em> panel, by the <em>Exits</em> section, you will also see a plus (<i aria-hidden=\"true\" class=\"fa fa-plus\"></i>) icon. Click this icon to create an exit to a new room, or to an old room of yours. If you create a new room, a return exit will automatically be created.</p>` +\n\t\t\t`\t<p>Each exit will also have a pencil (<i aria-hidden=\"true\" class=\"fa fa-pencil\"></i>) icon that lets you edit the exit's attributes and messages shown when using the exit.</p>` +\n\t\t\t`</section>` +\n\t\t\t`<section class=\"charlog--pad\">` +\n\t\t\t`\t<h4>Teleporting</h4>` +\n\t\t\t`\t<p>You can teleport to any room you own, or back to rest of the world once you are done building:` +\n\t\t\t`\t<section class=\"charlog--pad\"><div class=\"charlog--code\"><code>list teleports</code></div></section>` +\n\t\t\t`\t<p>If you wish to allow others to be able to teleport to your new place, go to the room where teleporters should arrive and type:</p>` +\n\t\t\t`\t<section class=\"charlog--pad\"><div class=\"charlog--code\"><code>set room isteleport = yes</code></div></section>` +\n\t\t\t`\t<p class=\"common--formattext\">When others visit your place, maybe through a <span class=\"cmd\">summon</span>, they can register that room as a teleport destination:</p>` +\n\t\t\t`\t<section class=\"charlog--pad\"><div class=\"charlog--code\"><code>help register teleport</code></div></section>` +\n\t\t\t`</section>`,\n\t\t),\n\t\tsortOrder: 100,\n\t\talias: [ 'build room', 'building rooms', 'building room' ],\n\t\tcategories: [ 'buildAreas' ],\n\t},\n\t{\n\t\tid: 'buildAreas',\n\t\tcmd: 'build areas',\n\t\ttitle: l10n.l('help.buildAreasTitle', \"How to build areas\"),\n\t\tshortDesc: l10n.l('help.buildAreasShortDesc', \"How to build and manage areas\"),\n\t\tdesc: l10n.l('help.buildAreasDesc',\n\t\t\t`<p>Areas gives structure to rooms, allows for maps, and gives you an overview of where characters are gathered.</p>` +\n\t\t\t`<section class=\"charlog--pad\">` +\n\t\t\t`\t<h4>Create areas</h4>` +\n\t\t\t`\t<p>To create a new area, type:</p>` +\n\t\t\t`\t<section class=\"charlog--pad\"><div class=\"charlog--code\"><code>create area My place</code></div></section>` +\n\t\t\t`\t<p>Now you can go to all rooms that should be part of the area, and in each type:</p>` +\n\t\t\t`\t<section class=\"charlog--pad\"><div class=\"charlog--code\"><code>set room area = My place</code></div></section>` +\n\t\t\t`</section>`,\n\t\t),\n\t\tsortOrder: 110,\n\t\talias: [ 'build area', 'building areas', 'building area' ],\n\t\tcategories: [ 'buildRooms' ],\n\t},\n\t{\n\t\tid: 'request',\n\t\ttitle: l10n.l('help.requestTitle', \"Request commands\"),\n\t\tshortDesc: l10n.l('help.requestShortDesc', \"How to make requests to other players' characters\"),\n\t\tdesc: l10n.l('help.requestDesc', `<p>Commands for sending requests to other players' characters.</p>`),\n\t\tsortOrder: 120,\n\t\talias: [ 'requests' ],\n\t},\n\t{\n\t\tid: 'cleanup',\n\t\ttitle: l10n.l('help.requestTitle', \"Cleanup commands\"),\n\t\tshortDesc: l10n.l('help.requestShortDesc', \"How to clean up littering sleepers or unwanted tenants\"),\n\t\tdesc: l10n.l('help.requestDesc',\n\t\t\t`<p>Here you can find commands for cleaning up rooms and areas of littering sleepers, unwanted tenants, or other nuisances.</p>` +\n\t\t\t`<p>For info on how to report incidents to the moderators, type:</p>` +\n\t\t\t`<section class=\"charlog--pad\"><div class=\"charlog--code\"><code>help reporting</code></div></section>`,\n\t\t),\n\t\tsortOrder: 130,\n\t},\n];\n\nconst usageText = 'help <span class=\"opt\"><span class=\"param\">Command</span></span>';\nconst shortDesc = 'Show help about a command or topic';\nconst helpText =\n`<p>Show help about a command or topic. Typing only <code>help</code> will show the introductory help text with info on how to list topics and more.</p>\n<p><code class=\"param\">Command</code> is either a help topic, a command (eg. <code>create room</code>), or a partial command (eg. <code>create</code> or <code>room</code>).</p>`;\nconst examples = [\n\t{ cmd: 'help', desc: l10n.l('help.helpDesc', \"Show the introductory help text.\") },\n\t{ cmd: 'help roll', desc: l10n.l('help.helpRollDesc', \"Show help on the roll command.\") },\n\t{ cmd: 'help reporting', desc: l10n.l('help.helpCommunicateDesc', \"Show help on how to report a character.\") },\n];\n\nfunction isBoundary(i, str) {\n\treturn i < 0 || i >= str.length || str[i] == ' ';\n}\n\n// matchesCmd checks if a topic is matched by the subcommand.\nfunction matchesCmd(topic, cmd) {\n\tlet t = topic.cmd;\n\tlet a = topic.alias;\n\tlet i = 0;\n\twhile (t) {\n\t\tlet idx = t.indexOf(cmd);\n\t\tif (idx >= 0 && isBoundary(idx - 1, t) && isBoundary(idx + cmd.length, t)) {\n\t\t\treturn t.substring(0, idx).split(\" \").length - 1;\n\t\t}\n\t\tt = a && a[i++];\n\t}\n\treturn -1;\n}\n\n/**\n * Help allows other modules to registers help topics to different categories.\n */\nclass Help {\n\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\t\tthis.app.require([\n\t\t\t'cmd',\n\t\t\t'player',\n\t\t\t'charLog',\n\t\t\t'info',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\n\t\tthis.categories = new Collection({\n\t\t\tidAttribute: m => m.id,\n\t\t\tcompare: sortOrderCompare,\n\t\t\teventBus: this.app.eventBus,\n\t\t});\n\n\t\tthis.topics = new Model({\n\t\t\teventBus: this.app.eventBus,\n\t\t});\n\n\t\t// Add all default categories\n\t\tfor (let cat of defaultCategories) {\n\t\t\tthis.addCategory(typeof cat == 'function' ? cat(this) : cat);\n\t\t}\n\n\t\tthis.module.cmd.addCmd({\n\t\t\tkey: 'help',\n\t\t\tnext: new RepeatStep(\n\t\t\t\t'part',\n\t\t\t\t(next, idx, state) => new ListStep(\n\t\t\t\t\t'part-' + idx,\n\t\t\t\t\tthis._getTopicTokenList(state.getParam('topic')),\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'topic',\n\t\t\t\t\t\ttextId: 'unknown',\n\t\t\t\t\t\ttoken: 'attr',\n\t\t\t\t\t\tnext,\n\t\t\t\t\t\terrRequired: null,\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t\t{\n\t\t\t\t\teach: (state, step, idx) => {\n\t\t\t\t\t\tlet v = state.getParam('topic') || '';\n\t\t\t\t\t\tstate.setParam('topic', v + (v ? ' ' : '') + (state.getParam(step.id) || state.getParam('unknown')));\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t),\n\t\t\tvalue: (ctx, p) => this._showHelp(ctx.char, p.topic),\n\t\t});\n\n\t\tthis.addTopic({\n\t\t\tid: 'help',\n\t\t\tcategory: 'basic',\n\t\t\tcmd: 'help',\n\t\t\tusage: l10n.l('help.usage', usageText),\n\t\t\tshortDesc: l10n.l('help.shortDesc', shortDesc),\n\t\t\tdesc: l10n.l('help.helpText', helpText),\n\t\t\texamples,\n\t\t\tsortOrder: 10,\n\t\t});\n\t}\n\n\t/**\n\t * Get a collection of help categories.\n\t * @returns {Collection} Collection of categories.\n\t */\n\tgetCategories() {\n\t\treturn this.categories;\n\t}\n\n\t/**\n\t * Get a help topic by ID.\n\t * @param {*} topicId Topic ID\n\t * @returns {?object} Topic object or null if not found.\n\t */\n\tgetTopic(topicId) {\n\t\treturn this.topics.props[topicId] || null;\n\t}\n\n\t/**\n\t * Registers a category.\n\t * @param {object} category Category object\n\t * @param {string} category.id Category ID.\n\t * @param {string} category.cmd Category command to use with help. Defaults to category ID.\n\t * @param {LocaleString} category.title Category title.\n\t * @param {LocaleString} category.shortDesc Short category description.\n\t * @param {Array.<string|LocaleString>} category.desc Description HTML strings where each string is a stand alone paragraph.\n\t * @param {number} category.sortOrder Sort order.\n\t * @param {Array.<string>} category.alias Aliases for the help command.\n\t * @param {boolean} category.promoted Flag to add the category to the main help topic.\n\t * @returns {this}\n\t */\n\taddCategory(category) {\n\t\tif (this.categories.get(category.id)) {\n\t\t\tthrow new Error(\"Category ID already registered: \", category.id);\n\t\t}\n\t\tlet topics = new Collection({\n\t\t\tidAttribute: m => m.id,\n\t\t\tcompare: sortOrderCompare,\n\t\t\teventBus: this.app.eventBus,\n\t\t});\n\t\tcategory = {\n\t\t\tid: category.id,\n\t\t\tcmd: category.cmd || category.id,\n\t\t\ttitle: category.title,\n\t\t\tshortDesc: category.shortDesc,\n\t\t\tdesc: category.desc,\n\t\t\tsortOrder: category.sortOrder,\n\t\t\talias: category.alias,\n\t\t\tpromoted: category.promoted || false,\n\t\t\tcategories: category.categories,\n\t\t\ttopics,\n\t\t};\n\t\tthis.categories.add(category);\n\n\t\tlet allTopics = this.topics.props;\n\t\tfor (let topicId in allTopics) {\n\t\t\tlet topic = allTopics[topicId];\n\t\t\tthis._tryAddTopicToCategory(topic, category);\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t * Unregisters a previously registered category.\n\t * @param {string} categoryId Category ID.\n\t * @returns {this}\n\t */\n\tremoveCategory(categoryId) {\n\t\tthis.categories.remove(categoryId);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Registers a help topic.\n\t * @param {object} topic Topic object\n\t * @param {string} topic.id Topic ID.\n\t * @param {string|{ [categoryId: string]: number}} [topic.category] Category ID or object with category ID and sortorder value for that category.\n\t * @param {string|LocaleString} topic.title Topic title.\n\t * @param {string} topic.cmd Topic command (eg. \"create room\").\n\t * @param {Array.<string>} topic.alias Topic command aliases (eg. [ \"msg\", \"page\" ]).\n\t * @param {string|LocaleString|function} topic.usage Usage HTML string or callback function returning a HTML string.\n\t * @param {string|LocaleString|function} topic.desc Description HTML string or callback function returning a HTML string.\n\t * @param {Array.<string|LocaleString>} topic.examples Topic command examples (eg. [ \"create room My room\" ]).\n\t * @param {number} topic.sortOrder Sort order.\n\t * @returns {this}\n\t */\n\taddTopic(topic) {\n\t\tif (this.topics.props[topic.id]) {\n\t\t\tthrow new Error(\"Topic ID already registered: \" + topic.id);\n\t\t}\n\t\tthis.topics.set({ [topic.id]: topic });\n\t\tthis._addRemoveTopicToCategories(topic, true);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Unregisters a previously registered help topic.\n\t * @param {string} topicId Topic ID.\n\t * @returns {this}\n\t */\n\tremoveTopic(topicId) {\n\t\tlet topic = this.topics.props[topicId];\n\t\tif (topic) {\n\t\t\tthis.topics.set({ [topicId]: undefined });\n\t\t\tthis._addRemoveTopicToCategories(topic, false);\n\t\t}\n\t\treturn this;\n\t}\n\n\t_addRemoveTopicToCategories(topic, add) {\n\t\tif (!topic.category) return;\n\n\t\tlet cats = typeof topic.category == 'string' ? { [topic.category]: topic.sortOrder } : topic.category;\n\t\tfor (let cat in cats) {\n\t\t\tlet category = this.categories.get(cat);\n\t\t\tif (category) {\n\t\t\t\tif (add) {\n\t\t\t\t\tcategory.topics.add(Object.assign({}, topic, { sortOrder: cats[cat] || 0 }));\n\t\t\t\t} else {\n\t\t\t\t\tcategory.topics.remove(topic.id);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t_tryAddTopicToCategory(topic, category) {\n\t\tlet catId = category.id;\n\t\tif (topic.category) {\n\t\t\tlet cats = typeof topic.category == 'string' ? { [topic.category]: topic.sortOrder } : topic.category;\n\t\t\tif (cats.hasOwnProperty(catId)) {\n\t\t\t\tcategory.topics.add(Object.assign({}, topic, { sortOrder: cats[catId] || 0 }));\n\t\t\t}\n\t\t}\n\t}\n\n\t_showHelp(char, cmd) {\n\t\tif (!char) {\n\t\t\tthrow new Error(\"No active char\");\n\t\t}\n\n\t\t// Default help page\n\t\tif (!cmd) {\n\t\t\tthis.module.charLog.logComponent(char, 'helpCategory', new HelpComponent(this.module, this.categories));\n\t\t\treturn;\n\t\t}\n\n\t\t// Find matching categories and topics\n\t\tlet categories = [];\n\t\tlet topics = [];\n\t\tfor (let c of this.categories) {\n\t\t\tif (c.cmd === cmd || (c.alias && c.alias.indexOf(cmd) >= 0)) {\n\t\t\t\tthis.module.charLog.logComponent(char, 'helpCategory', new HelpCategory(this.module, this.categories, c));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlet m = matchesCmd(c, cmd);\n\t\t\tif (m >= 0) {\n\t\t\t\tcategories.push(c);\n\t\t\t}\n\t\t}\n\n\t\tfor (let topicId in this.topics.props) {\n\t\t\tlet t = this.topics.props[topicId];\n\t\t\tif (t.cmd === cmd || (t.alias && t.alias.indexOf(cmd) >= 0)) {\n\t\t\t\tthis.module.charLog.logComponent(char, 'helpTopic', new HelpTopic(this.module, t, cmd));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet m = matchesCmd(t, cmd);\n\t\t\tif (m >= 0) {\n\t\t\t\ttopics.push(t);\n\t\t\t}\n\t\t}\n\t\ttopics.sort((a, b) => (a.cmd || a.id).localeCompare(b.cmd || b.id));\n\n\t\tif (!categories.length && !topics.length) {\n\t\t\tthis.module.charLog.logError(char, {\n\t\t\t\tcode: 'help.topicNotFound',\n\t\t\t\tmessage: 'There is no help topic for \"{topic}\".',\n\t\t\t\tdata: { topic: cmd },\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tthis.module.charLog.logComponent(char, 'helpTopic', new HelpRelatedTopics(categories, topics));\n\t}\n\n\t_getTopicTokenList(prefix) {\n\t\tprefix = (prefix || '').trim();\n\t\tprefix += prefix ? ' ' : '';\n\n\t\treturn new TokenList((ctx, key) => {\n\t\t\tlet map = {};\n\t\t\t// Add categories\n\t\t\tfor (let cat of this.categories) {\n\t\t\t\t// Does the category start with the prefix\n\t\t\t\tlet matchMain = false;\n\t\t\t\tif (cat.cmd.substring(0, prefix.length) === prefix) {\n\t\t\t\t\tlet token = cat.cmd.substring(prefix.length).split(\" \")[0];\n\t\t\t\t\tmap[token] = true;\n\t\t\t\t\tmatchMain = !key || token.substring(0, key.length) == key;\n\t\t\t\t}\n\t\t\t\t// Add alias in case the real token doesn't match main key\n\t\t\t\tif (cat.alias && !matchMain) {\n\t\t\t\t\tfor (let a of cat.alias) {\n\t\t\t\t\t\t// Does any of the category alias start with the prefix\n\t\t\t\t\t\tif (a.substring(0, prefix.length) === prefix) {\n\t\t\t\t\t\t\tmap[a.substring(prefix.length).split(\" \")[0]] = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tlet props = this.topics.props;\n\t\t\tfor (let k in props) {\n\t\t\t\tlet matchMain = false;\n\t\t\t\tlet topic = props[k];\n\t\t\t\t// Does the topic cmd start with the prefix\n\t\t\t\tif (topic.cmd && topic.cmd.substring(0, prefix.length) === prefix) {\n\t\t\t\t\tlet token = topic.cmd.substring(prefix.length).split(\" \")[0];\n\t\t\t\t\tmap[token] = true;\n\t\t\t\t\tmatchMain = !key || token.substring(0, key.length) == key;\n\t\t\t\t}\n\t\t\t\t// Add alias in case the real token doesn't match main key\n\t\t\t\tif (topic.alias && !matchMain) {\n\t\t\t\t\tfor (let a of topic.alias) {\n\t\t\t\t\t\t// Does any of the topic alias start with the prefix\n\t\t\t\t\t\tif (a.substring(0, prefix.length) === prefix) {\n\t\t\t\t\t\t\tmap[a.substring(prefix.length).split(\" \")[0]] = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn Object.keys(map).sort();\n\t\t}, {\n\t\t\tregex: /^([^\\s]+)/,\n\t\t\texpandRegex: { left: /[^\\s]/, right: /[^\\s]/ },\n\t\t\tisMatch: (t, key) => key === t ? { key, value: t } : false,\n\t\t\tisPrefix: (t, prefix) => !prefix || t.substring(0, prefix.length) === prefix\n\t\t\t\t? t\n\t\t\t\t: null,\n\t\t});\n\t}\n\n}\n\nexport default Help;\n","import FormatTxt from 'components/FormatTxt';\nimport l10n from 'modapp-l10n';\n\nclass HelpAboutComponent extends FormatTxt{\n\tconstructor(module) {\n\t\tsuper(module.info.getCore().about || l10n.t('helpAbout.placeholderInfo', \"This is a new realm yet to be described.\"), { className: 'helpabout formattxt-charlog', noInteraction: true });\n\t}\n}\n\nexport default HelpAboutComponent;\n","import l10n from 'modapp-l10n';\nimport HelpAboutComponent from './HelpAboutComponent';\nimport './helpAbout.scss';\n\n/**\n * HelpAbout adds the format help category and allows other modules to registers keyboard formats.\n */\nclass HelpAbout {\n\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\t\tthis.app.require([\n\t\t\t'help',\n\t\t\t'info',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\n\t\tthis.module.help.addCategory({\n\t\t\tid: 'about',\n\t\t\ttitle: l10n.l('help.aboutTitle', \"About the realm\"),\n\t\t\tshortDesc: l10n.l('help.aboutShortDesc', \"Learn more about the realm\"),\n\t\t\tdesc: () => new HelpAboutComponent(this.module),\n\t\t\tsortOrder: 15,\n\t\t\tpromoted: true,\n\t\t});\n\t}\n\n\tdispose() {\n\t\tthis.module.help.removeCategory('format');\n\t}\n}\n\nexport default HelpAbout;\n","import { Elem, Txt, Html } from 'modapp-base-component';\nimport l10n from 'modapp-l10n';\n\nconst helpText =\n`<section class=\"charlog--pad\">\n\t<p>The console is used to issue all commands. But there is more to it.</p>\n</section>\n<section class=\"charlog--pad\">\n\t<h4>Color coding</h4>\n\t<p>The editor will show the text in different colors as you type. This is to give you hints whether the text you are typing is a valid <span class=\"charlog--cmd\">command</span> or <span class=\"charlog--cmd\">attribute</span>, a valid value such as an exit <span class=\"charlog--listitem\">keyword</span> or character <span class=\"charlog--listitem\">name</span>, or if it is an <span class=\"charlog--error\">error</span>.</p>\n</section>\n<section class=\"charlog--pad\">\n\t<h4>Character tabs</h4>\n\t<p>The tabs on top of the console shows all awake characters you are controlling. Switch between characters by clicking on them. Click on currently active character to have them look at themselves.</p>\n</section>\n`;\n\n\nclass HelpConsoleComponent {\n\tconstructor(module, shortcuts) {\n\t\tthis.module = module;\n\t\tthis.shortcuts = shortcuts.toArray();\n\t}\n\n\trender(el) {\n\t\tlet list = [];\n\t\tfor (let m of this.shortcuts) {\n\t\t\tlist.push('<tr><td class=\"helpconsole--usage\">' + m.usage + '</td><td>' + l10n.t(m.desc) + '</td></tr>');\n\t\t}\n\t\tthis.elem = new Elem(n => n.elem('div', { className: 'helpconsole' }, [\n\t\t\tn.component(new Html(l10n.l('helpConsole.helpDesc', helpText), { className: 'help--desc' })),\n\t\t\tn.component(new Txt(l10n.l('help.helpShortcuts', \"Keyboard shortcuts\"), { tagName: 'h4', className: 'charlog--pad' })),\n\t\t\tn.elem('div', { className: 'charlog--pad' }, [\n\t\t\t\tn.elem('table', { className: 'tbl tbl-nomargin' }, [\n\t\t\t\t\tn.component(new Html(list.join(''), { tagName: 'tbody' })),\n\t\t\t\t]),\n\t\t\t]),\n\t\t]));\n\t\treturn this.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n}\n\nexport default HelpConsoleComponent;\n","import { Collection, sortOrderCompare } from 'modapp-resource';\nimport l10n from 'modapp-l10n';\nimport HelpConsoleComponent from './HelpConsoleComponent';\nimport './helpConsole.scss';\n\nconst shortcuts = [\n\t{\n\t\tid: 'tabcompletion',\n\t\tusage: '<kbd>Tab</kbd>',\n\t\tdesc: l10n.l('helpConsole.tabcompletionDesc', `<p>Complete the current command or name. Cycle through all options by pressing the key repeatedly.<p>`),\n\t\tsortOrder: 10,\n\t},\n\t{\n\t\tid: 'linebreak',\n\t\tusage: '<kbd>Shift</kbd>/<kbd>Ctrl</kbd> + <kbd>Enter</kbd>',\n\t\tdesc: l10n.l('helpConsole.linebreakDesc', `<p>Insert a line break in the console.<p>`),\n\t\tsortOrder: 20,\n\t},\n\t{\n\t\tid: 'history',\n\t\tusage: '<kbd>Ctrl</kbd> + <kbd>Up</kbd>/<kbd>Down</kbd>',\n\t\tdesc: l10n.l('helpConsole.historyDesc', `<p>Cycle through editor history. Any text currently in the console will be saved to history.<p>`),\n\t\tsortOrder: 30,\n\t},\n];\n\n/**\n * HelpConsole adds the console help category and allows other modules to registers keyboard shortcuts.\n */\nclass HelpConsole {\n\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\t\tthis.app.require([ 'help' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\n\t\tthis.shortcuts = new Collection({\n\t\t\tidAttribute: m => m.id,\n\t\t\tcompare: sortOrderCompare,\n\t\t\teventBus: this.app.eventBus,\n\t\t});\n\n\t\tfor (let shortcut of shortcuts) {\n\t\t\tthis.addShortcut(shortcut);\n\t\t}\n\n\t\tthis.module.help.addCategory({\n\t\t\tid: 'console',\n\t\t\ttitle: l10n.l('help.consoleTitle', \"Console tips and tricks\"),\n\t\t\tshortDesc: l10n.l('help.consoleTitle', \"Learn about console features and keyboard shortcuts\"),\n\t\t\tdesc: () => new HelpConsoleComponent(this.module, this.shortcuts),\n\t\t\tsortOrder: 15,\n\t\t});\n\t}\n\n\t/**\n\t * Get a collection of help shortcuts.\n\t * @returns {Collection} Collection of shortcuts.\n\t */\n\tgetShortcuts() {\n\t\treturn this.shortcuts;\n\t}\n\n\t/**\n\t * Registers a shortcut.\n\t * @param {object} shortcut Shortcut object\n\t * @param {string} shortcut.id Shortcut ID.\n\t * @param {LocaleString} shortcut.usage Shortcut title.\n\t * @param {LocaleString} shortcut.desc Shortcut description.\n\t * @param {number} shortcut.sortOrder Sort order.\n\t * @returns {this}\n\t */\n\taddShortcut(shortcut) {\n\t\tif (this.shortcuts.get(shortcut.id)) {\n\t\t\tthrow new Error(\"Shortcut ID already registered: \", shortcut.id);\n\t\t}\n\t\tthis.shortcuts.add(shortcut);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Unregisters a previously registered shortcut.\n\t * @param {string} shortcutId Shortcut ID.\n\t * @returns {this}\n\t */\n\tremoveShortcut(shortcutId) {\n\t\tthis.shortcuts.remove(shortcutId);\n\t\treturn this;\n\t}\n\n\tdispose() {\n\t\tthis.module.help.removeCategory('console');\n\t}\n}\n\nexport default HelpConsole;\n","import { Html } from 'modapp-base-component';\nimport l10n from 'modapp-l10n';\n\nconst helpText =\n`<section class=\"charlog--pad\">\n\t<p>The <em>Awake</em> list in the far-left <em>Realm</em> panel may be filtered to help find characters you are looking for.\n\tIn the <em>Search filter</em> input, type in the name, gender, species, tag, or idle status you wish to match.</p>\n\t<p class=\"common--formattext\"><code class=\"charlog--code-inline\">male</code> will match any character set as male.</p>\n</section>\n<section class=\"charlog--pad\">\n\t<h4 class=\"charlog--pad\">Idle status</h4>\n\t<p class=\"common--formattext\"><code class=\"charlog--code-inline\">active</code>, <code class=\"charlog--code-inline\">idle</code> and <code class=\"charlog--code-inline\">away</code> will match characters on idle status.</p>\n</section>\n<section class=\"charlog--pad\">\n\t<h4 class=\"charlog--pad\">Multiple criteria</h4>\n\t<p>To match multiple critera, separate them using comma (,).</p>\n\t<p class=\"common--formattext\"><code class=\"charlog--code-inline\">female, public roleplay</code> will match female characters with a \"public roleplay\" tag.</p>\n</section>\n<section class=\"charlog--pad\">\n\t<h4 class=\"charlog--pad\">Set of critera alternatives</h4>\n\t<p>Separating a set of critera with pipe (|) will match characters fulfilling at least one of the alternatives in the set.</p>\n\t<p class=\"common--formattext\"><code class=\"charlog--code-inline\">wolf | werewolf | timberwolf</code> will match characters with the species matching either \"wolf\", \"werewolf\", or \"timberwolf\".</p>\n</section>\n<section class=\"charlog--pad\">\n\t<h4 class=\"charlog--pad\">Negative criteria</h4>\n\t<p>Putting an exclamation mark (!) in front of a criteria, will match characters who does not fulfil that criteria.</p>\n\t<p class=\"common--formattext\"><code class=\"charlog--code-inline\">!away</code> will match characters with an idle status not set to away.</p>\n</section>\n<section class=\"charlog--pad\">\n\t<h4 class=\"charlog--pad\">Disliked tags</h4>\n\t<p>Putting a tilde (~) in front of a criteria, will match characters with a matching dislike tag.</p>\n\t<p class=\"common--formattext\"><code class=\"charlog--code-inline\">~males</code> will match characters who have a dislike \"males\" tag.</p>\n</section>\n<section class=\"charlog--pad\">\n\t<h4 class=\"charlog--pad\">Complex critera</h4>\n\t<p>The above syntax forms may be combined into more complex filters.</p>\n\t<p class=\"common--formattext\"><code class=\"charlog--code-inline\">male, !~private roleplay, wolf|fox</code> will match male wolf or fox characters without a dislike \"private roleplay\" tag.</p>\n</section>`;\n\nclass HelpFilterComponent extends Html{\n\tconstructor(module) {\n\t\tsuper(l10n.l('helpFilter.helpDesc', helpText), { className: 'helpfilter' });\n\t}\n}\n\nexport default HelpFilterComponent;\n","import l10n from 'modapp-l10n';\nimport HelpFilterComponent from './HelpFilterComponent';\nimport './helpFilter.scss';\n\n/**\n * HelpFilter adds the filter help category and allows other modules to registers keyboard filters.\n */\nclass HelpFilter {\n\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\t\tthis.app.require([ 'help' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\n\t\tthis.module.help.addCategory({\n\t\t\tid: 'filter',\n\t\t\ttitle: l10n.l('help.filterTitle', \"Character filtering syntax\"),\n\t\t\tshortDesc: l10n.l('help.filterSortDesc', \"How to write character search filters\"),\n\t\t\tdesc: () => new HelpFilterComponent(this.module),\n\t\t\tsortOrder: 38,\n\t\t});\n\t}\n\n\tdispose() {\n\t\tthis.module.help.removeCategory('filter');\n\t}\n}\n\nexport default HelpFilter;\n","import { Html } from 'modapp-base-component';\nimport l10n from 'modapp-l10n';\nimport escapeHtml from 'utils/escapeHtml';\n\nconst url = escapeHtml(window.location.href.split('?')[0].replace(/\\/+$/, '') + '/siteicon.svg');\nconst helpText =\n`<section class=\"charlog--pad\">\n\t<p>Texts such as descriptions and communication may be formatted to better express meaning.</p>\n</section>\n<section class=\"charlog--pad\">\n\t<h4 class=\"charlog--pad\">Formatting</h4>\n\t<p class=\"common--formattext\"><code class=\"charlog--code-inline\">**bold**</code> will produce <strong>bold</strong> text.</p>\n\t<p class=\"common--formattext\"><code class=\"charlog--code-inline\">_italic_</code> will produce <em>italicized</em> text.</p>\n\t<p class=\"common--formattext\"><code class=\"charlog--code-inline\">++superscript++</code> will produce <sup>superscripted</sup> text.</p>\n\t<p class=\"common--formattext\"><code class=\"charlog--code-inline\">--subscript--</code> will produce <sub>subscripted</sub> text.</p>\n\t<p class=\"common--formattext\"><code class=\"charlog--code-inline\">~~strikethrough~~</code> will produce <s>strikethrough</s> text.</p>\n\t<p class=\"common--formattext\"><code class=\"charlog--code-inline\">((ooc))</code> will produce <span class=\"ooc\">((out of character))</span> text.</p>\n\t<p class=\"common--formattext\"><code class=\"charlog--code-inline\">\\`command\\`</code> will produce <span class=\"cmd\">command</span> example text.</p>\n\t<p class=\"common--formattext\"><code class=\"charlog--code-inline\">https://example.com</code> will produce a clickable <a target=\"_blank\" rel=\"noopener noreferrer\">link</a>.</p>\n\t<p class=\"common--formattext\"><code class=\"charlog--code-inline\">[Link name](https://example.com)</code> will produce a clickable <a target=\"_blank\" rel=\"noopener noreferrer\">named link</a>.</p>\n</section>\n<section class=\"charlog--pad\">\n\t<h4 class=\"charlog--pad\">Examples</h4>\n\t<div class=\"charlog--pad\">\n\t\t<div class=\"charlog--code\">\n\t\t\t<table class=\"tbl-small tbl-nomargin\"><tbody>\n\t\t\t\t<tr><td><code>say I will **never** give up!</code></td><td class=\"common--formattext\"><span class=\"charlog--char\">John</span> says, \"I will <strong>never</strong> give up!\"</td></tr>\n\t\t\t\t<tr><td><code>desc The room is _freezing_ cold.</code></td><td>⌈The room is <em>freezing</em> cold.⌋</td></tr>\n\t\t\t\t<tr><td><code>pose hears a high pitched ++beep beep++.</code></td><td class=\"common--formattext\"><span class=\"charlog--char\">Jane</span> hears a high pitched <sup>beep beep</sup>.</span></td></tr>\n\t\t\t\t<tr><td><code>pose 's stomach rumbles. --Growl--</code></td><td class=\"common--formattext\"><span class=\"charlog--char\">John</span>'s stomach rumbles. <sub>Growl</sub></span></td></tr>\n\t\t\t\t<tr><td><code>pose writes a note: \"I ~~like~~ love you.\"</td><td class=\"common--formattext\"><span class=\"charlog--char\">Jane</span> writes a note: \"I <s>like</s> love you.\"</td></tr>\n\t\t\t\t<tr><td><code>pose dozes off. ((Phonecall. BRB))</code></td><td class=\"common--formattext\"><span class=\"charlog--char\">John</span> dozes off. <span class=\"ooc\">((Phonecall. BRB))</span></td></tr>\n\t\t\t\t<tr><td><code>ooc :suggests typing: \\`help\\`</code></td><td class=\"common--formattext\"><span class=\"charlog--char\">Jane</span> <span class=\"charlog--tag\">ooc </span><span class=\"charlog--ooc\"> suggests typing: <span class=\"cmd\">help</span></span></td></tr>\n\t\t\t\t<tr><td><code>ooc Ref img: ` + url + `</code></td><td class=\"common--formattext\"><span class=\"charlog--char\">John</span> <span class=\"charlog--tag\">ooc </span><span class=\"charlog--ooc\"> says, \"Ref img: <a href=\"` + url + `\" target=\"_blank\" rel=\"noopener noreferrer\">` + url + `</a>\"</span></td></tr>\n\t\t\t\t<tr><td><code>ooc :referred to [this image](` + url + `)</code></td><td class=\"common--formattext\"><span class=\"charlog--char\">Jane</span> <span class=\"charlog--tag\">ooc </span><span class=\"charlog--ooc\"> referred to <a href=\"` + url + `\" target=\"_blank\" rel=\"noopener noreferrer\">this image</a></span></td></tr>\n\t\t\t</tbody></table>\n\t\t</div>\n\t</div>\n</section>\n<section class=\"charlog--pad\">\n\t<h4 class=\"charlog--pad\">Sections</h4>\n\t<p><em>Description</em>, and <em>About</em> texts may be formatted with collapsible subsection.</p>\n\t<p class=\"common--formattext\"><code class=\"charlog--code-inline\">[[Section title]]</code> alone on a line will create a new section with the content below.</p>\n\t<p class=\"common--formattext\"><code class=\"charlog--code-inline\">[[Limited section]] { ... }</code> will create a limited section containing the rows enclosed within the {curly brackets}.</p>\n</section>\n<section class=\"charlog--pad\">\n\t<h4 class=\"charlog--pad\">Section example</h4>\n\t<div class=\"charlog--pad\">\n\t\t<div class=\"charlog--code\">\n\t\t\t<code>set room desc = The room is empty except for a chest on the floor.</code><br>\n\t\t\t<code>[[Chest]]</code><br>\n\t\t\t<code>It is a worn down wooden chest.</code><br>\n\t\t\t<code>[[Walls]] {</code><br>\n\t\t\t<code>There are scratch marks on the walls.</code><br>\n\t\t\t<code>}</code><br>\n\t\t\t<code>The room has a single door and no windows.</code>\n\t\t</div>\n\t</div>\n</section>`;\n\nclass HelpFormatComponent extends Html{\n\tconstructor(module) {\n\t\tsuper(l10n.l('helpFormat.helpDesc', helpText), { className: 'helpformat' });\n\t}\n}\n\nexport default HelpFormatComponent;\n","import l10n from 'modapp-l10n';\nimport HelpFormatComponent from './HelpFormatComponent';\nimport './helpFormat.scss';\n\n/**\n * HelpFormat adds the format help category and allows other modules to registers keyboard formats.\n */\nclass HelpFormat {\n\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\t\tthis.app.require([ 'help' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\n\t\tthis.module.help.addCategory({\n\t\t\tid: 'format',\n\t\t\ttitle: l10n.l('help.formatTitle', \"Text formatting\"),\n\t\t\tshortDesc: l10n.l('help.formatSortDesc', \"How to format communication and description texts\"),\n\t\t\tdesc: () => new HelpFormatComponent(this.module),\n\t\t\tsortOrder: 35,\n\t\t});\n\t}\n\n\tdispose() {\n\t\tthis.module.help.removeCategory('format');\n\t}\n}\n\nexport default HelpFormat;\n","import { Html } from 'modapp-base-component';\nimport l10n from 'modapp-l10n';\n\nconst helpText =\n`<section class=\"charlog--pad\">\n\t<h4 class=\"charlog--pad\">Player Etiquette</h4>\n\t<table class=\"tbl-small tbl-nomargin charlog--font-small\"><tbody>\n\t\t<tr><td class=\"charlog--strong\">Be nice</td><td>Be nice to other players. Some may have poor grammar or spelling. Some may have low quality descriptions or images. Some may be new to roleplaying. You might not want to roleplay with them, but you can still be nice and polite towards them.</td></tr>\n\t\t<tr><td class=\"charlog--strong\">Be clear</td><td class=\"common--formattext\">If you are not interested in playing with someone, or if something is bothering you, it is best to tell them nicely but clearly instead of ignoring them. Use <span class=\"ooc\">((out of character text))</span> for extra clarification.</td></tr>\n\t\t<tr><td class=\"charlog--strong\">Be respectful</td><td>Be respectful to others. If someone tells you they are busy or not interested, respect their wishes. It is never fun to be ignored or discarded, but we have no right to anyone elses time or attention. Move on and try finding some other wanton lad or lass.</td></tr>\n\t</tbody></table>\n</section>\n<section class=\"charlog--pad\">\n\t<h4 class=\"charlog--pad\">Rules</h4>\n\t<table class=\"tbl-small tbl-nomargin charlog--font-small\"><tbody>\n\t\t<tr><td class=\"charlog--strong\">No illegal activity</td><td>Any illegal activity, or using the realm to plan illegal activities, will result in a ban.</td></tr>\n\t\t<tr><td class=\"charlog--strong\">No illegal content</td><td>Uploading illegal content, or linking to illegal content, will result in a ban.</td></tr>\n\t\t<tr><td class=\"charlog--strong\">No minors</td><td>Players must be 18 years of age or older. Younger players will get banned.</td></tr>\n\t\t<tr><td class=\"charlog--strong\">No spamming</td><td>Spamming a room or a character, or causing other intentional disruptions may get you suspended or banned.</td></tr>\n\t\t<tr><td class=\"charlog--strong\">No harassment</td><td>Harassing someone, including continuing to contact them even when they've told you to stop, may get you suspended.</td></tr>\n\t\t<tr><td class=\"charlog--strong\">No abuse</td><td>Abusive, hateful, or severly disrespectful communication may get you suspended.</td></tr>\n\t\t<tr><td class=\"charlog--strong\">No inflammatory topics</td><td>Pushing inflammatory out-of-character topics such as religion or politics may get you suspended.</td></tr>\n\t\t<tr><td class=\"charlog--strong\">No public toxicity</td><td>Creating a poor roleplay environment by venting negative emotions in public areas may get you suspended.</td></tr>\n\t\t<tr><td class=\"charlog--strong\">No identity theft</td><td>Representing yourself as another player's character or as a moderator may get you suspended.</td></tr>\n\t\t<tr><td class=\"charlog--strong\">No player reveal</td><td>Revealing or without consent trying to obtain private information about a player or their characters may get you suspended.</td></tr>\n\t\t<tr><td class=\"charlog--strong\">No bypass account</td><td>Creating an account to bypass a ban or a suspend lockout will get the new account banned.</td></tr>\n\t\t<tr><td class=\"charlog--strong\">No lawless account</td><td>Creating an account for the purpose of breaking any of these rules will result in a ban.</td></tr>\n\t\t<tr><td class=\"charlog--strong\">No underaged humans</td><td>Sexual roleplay with underaged human characters may get you suspended.</td></tr>\n\t</tbody></table>\n</section>\n<section class=\"charlog--pad\">\n\t<h4 class=\"charlog--pad\">Realm specific rules</h4>\n\t<table class=\"tbl-small tbl-nomargin charlog--font-small\"><tbody>\n\t\t<tr><td class=\"charlog--strong\">No canon characters</td><td>Roleplaying real people, established figures, or characters created or owned by someone else is not allowed.</td></tr>\n\t\t<tr><td class=\"charlog--strong\">No object characters</td><td>Characters representing objects or props without personality are not allowed. Bot scripts are exempted from this rule.</td></tr>\n\t\t<tr><td class=\"charlog--strong\">English only</td><td>While characters may occasionally use other languages, communication should be kept in English. The first name of your character must be able to be typed on an English keyboard - diacritics (accent marks) may be used.</td></tr>\n\t</tbody></table>\n</section>\n<section class=\"charlog--pad\">\n\t<h4 class=\"charlog--pad\">Area specific rules</h4>\n\t<p class=\"charlog--font-small\">Different areas may have additional rules. See the area's Rules section, or type:</p>\n\t<section class=\"charlog--pad\">\n\t\t<div class=\"charlog--code\"><code>area rules</code></div>\n\t</section>\n</section>\n<section class=\"charlog--pad\">\n\t<h4 class=\"charlog--pad\">Reporting incidents</h4>\n\t<p class=\"charlog--font-small\">To learn how to report a character to the moderators, type:</p>\n\t<section class=\"charlog--pad\">\n\t\t<div class=\"charlog--code\"><code>help reporting</code></div>\n\t</section>\n</section>`;\n\nclass HelpRulesComponent extends Html{\n\tconstructor(module) {\n\t\tsuper(l10n.l('helpRules.helpDesc', helpText), { className: 'helprules' });\n\t}\n}\n\nexport default HelpRulesComponent;\n","import l10n from 'modapp-l10n';\nimport HelpRulesComponent from './HelpRulesComponent';\nimport './helpRules.scss';\n\n/**\n * HelpRules adds the format help category and allows other modules to registers keyboard formats.\n */\nclass HelpRules {\n\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\t\tthis.app.require([ 'help' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\n\t\tthis.module.help.addCategory({\n\t\t\tid: 'rules',\n\t\t\ttitle: l10n.l('help.rulesTitle', \"Realm rules and etiquette\"),\n\t\t\tshortDesc: l10n.l('help.rulesShortDesc', \"Learn about realm rules and etiquette\"),\n\t\t\tdesc: () => new HelpRulesComponent(this.module),\n\t\t\tsortOrder: 18,\n\t\t\tpromoted: true,\n\t\t});\n\t}\n\n\taddTopic(topic) {\n\t\tthis.module.help.addTopic(Object.assign({ category: 'rules' }, topic));\n\t\treturn this;\n\t}\n\n\tdispose() {\n\t\tthis.module.help.removeCategory('format');\n\t}\n}\n\nexport default HelpRules;\n","import { Elem } from 'modapp-base-component';\nimport { Collection, sortOrderCompare } from 'modapp-resource';\nimport Fader from 'components/Fader';\nimport './layout.scss';\n\n/**\n * Layout handles the different types of layouts.\n */\nclass Layout {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\tthis.mode = typeof params.mode == 'string'\n\t\t\t? params.mode.toLowerCase()\n\t\t\t: null;\n\n\t\t// Bind callbacks\n\t\tthis._onPlayerChange = this._onPlayerChange.bind(this);\n\t\tthis._onQueryChange = this._onQueryChange.bind(this);\n\n\t\tthis.app.require([ 'screen', 'player' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t\tthis.defaultComponent = null;\n\t\tthis.queries = {};\n\t\tthis.queryState = {};\n\n\t\tthis.currentLayout = null;\n\n\t\tthis.layouts = new Collection({\n\t\t\tidAttribute: m => m.id,\n\t\t\tcompare: sortOrderCompare,\n\t\t\teventBus: this.app.eventBus,\n\t\t});\n\n\t\tthis.elem = new Elem(n => (\n\t\t\tn.elem('div', { className: 'layout' }, [\n\t\t\t\tn.elem('div', { className: 'layout--container' }, [\n\t\t\t\t\tn.component('playerPanel', new Fader(null, { className: 'layout--playerpanel' })),\n\t\t\t\t\tn.component('activePanel', new Fader(null, { className: 'layout--activepanel' })),\n\t\t\t\t]),\n\t\t\t])\n\t\t));\n\t\tthis.playerModel = this.module.player.getModel();\n\t\tthis.playerModel.on('change', this._onPlayerChange);\n\t\tthis._onPlayerChange();\n\t}\n\n\tgetCurrentLayout() {\n\t\treturn this.currentLayout;\n\t}\n\n\t/**\n\t * Sets the default layout used when no other media queries match.\n\t * @param {Component} component Layout component.\n\t */\n\tsetDefaultLayout(component) {\n\t\tthis.defaultComponent = component;\n\t\tthis._trySetLayout();\n\t}\n\n\t/**\n\t * Registers a media query layout.\n\t * @param {object} layout Layout object\n\t * @param {string} layout.id Layout ID.\n\t * @param {number} layout.sortOrder Sort order.\n\t * @param {function} layout.component Layout component.\n\t * @param {number} [layout.query] Media query for the layout.\n\t * @returns {this}\n\t */\n\t addLayout(layout) {\n\t\tlet id = layout.id;\n\t\tif (this.layouts.get(id)) {\n\t\t\tthrow new Error(\"Layout ID already registered: \", id);\n\t\t}\n\t\tthis.layouts.add(layout);\n\t\tlet mql = window.matchMedia(layout.query);\n\t\tlet cb = this._onQueryChange.bind(this, id);\n\t\tmql.addEventListener('change', cb);\n\t\tthis.queries[id] = { mql, cb };\n\t\tthis._onQueryChange(id, mql);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Unregisters a previously registered layout.\n\t * @param {string} layoutId Layout ID.\n\t * @returns {this}\n\t */\n\tremoveLayout(layoutId) {\n\t\tlet o = this.queries[k];\n\t\tif (o) {\n\t\t\to.mql.removeEventListener('change', o.cb);\n\t\t\tdeleted(this.queries[k]);\n\t\t}\n\t\tthis.layouts.remove(layoutId);\n\t\tthis._trySetLayout();\n\t\treturn this;\n\t}\n\n\t_onQueryChange(k, e) {\n\t\tthis.queryState[k] = e.matches;\n\t\tthis._trySetLayout();\n\t}\n\n\t_onPlayerChange(changed) {\n\t\tif (!changed || changed.hasOwnProperty('player')) {\n\t\t\tthis._trySetLayout();\n\t\t}\n\t}\n\n\t_trySetLayout() {\n\t\tif (!this.playerModel.player) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet component = this.defaultComponent;\n\t\tlet currentLayout = 'desktop';\n\t\tfor (let layout of this.layouts) {\n\t\t\tif ((!this.mode || this.mode == 'auto')\n\t\t\t\t? this.queryState[layout.id]\n\t\t\t\t: this.mode == layout.id\n\t\t\t) {\n\t\t\t\tcomponent = layout.component;\n\t\t\t\tcurrentLayout = layout.id;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tthis.currentLayout = currentLayout;\n\t\tthis.module.screen.setComponent(component);\n\t}\n}\n\nexport default Layout;\n","import PopupPill from 'components/PopupPill';\n\nconst dark = 'dark';\nconst border = 'border';\nconst channelBorder = 'channelBorder';\nconst eventTypes = {\n\ttravel: dark,\n\tarrive: dark,\n\tleave: dark,\n\twakeup: dark,\n\tsleep: dark,\n\troll: dark,\n\n\twhisper: border,\n\tmessage: border,\n\tmail: border,\n\taddress: border,\n\tcontrolRequest: border,\n\tsummon: border,\n\tjoin: border,\n\tleadRequest: border,\n\tfollowRequest: border,\n\tfollow: border,\n\tstopFollow: border,\n\tstopLead: border,\n\tdnd: border,\n\thelpme: channelBorder,\n};\n\nclass CharLogMutedEvent extends PopupPill {\n\tconstructor(module, char, ctx, ev) {\n\t\tlet ec = ev.char;\n\t\tlet charId = char.id;\n\t\tsuper(() => module.self.getLogEventComponent(charId, ev, { noFocus: true, noMessageHighlight: true }), {\n\t\t\tctx,\n\t\t\ttype: eventTypes[ev.type],\n\t\t\tpillClassName: ec ? 'mf-' + charId + '-' + ec.id : '',\n\t\t});\n\t}\n}\n\nexport default CharLogMutedEvent;\n","import { Collection } from 'modapp-resource';\nimport { CollectionList } from 'modapp-resource-component';\nimport CharLogMutedEvent from './CharLogMutedEvent';\n\n\nclass CharLogMuted {\n\tconstructor(module, char, ctx, list) {\n\t\tthis.module = module;\n\t\tthis.char = char;\n\t\tthis.ctx = ctx;\n\t\tthis._collection = new Collection({ data: list, idAttribute: null, eventBus: this.module.self.app.eventBus });\n\t}\n\n\tget length() {\n\t\treturn this._collection.length;\n\t}\n\n\taddEvent(ev, idx) {\n\t\treturn this._collection.add(ev, idx);\n\t}\n\n\trender(el) {\n\t\tthis.elem = new CollectionList(this._collection, ev => new CharLogMutedEvent(this.module, this.char, this.ctx, ev), {\n\t\t\thorizontal: true,\n\t\t\tclassName: 'charlog-muted',\n\t\t});\n\t\treturn this.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n}\n\nexport default CharLogMuted;\n","import { Elem, Context } from 'modapp-base-component';\nimport { CollectionList, ModelComponent } from 'modapp-resource-component';\nimport { Collection, CollectionWrapper } from 'modapp-resource';\nimport SimpleBar from 'components/SimpleBar';\nimport CharLogMuted from './CharLogMuted';\n\nconst LOAD_CHUNK_THRESHOLD = 200;\n\nclass CharLogComponent {\n\tconstructor(module, char, opt) {\n\t\topt = opt || {};\n\t\tthis.module = module;\n\t\tthis.char = char;\n\t\tthis.onAtBottom = opt.onAtBottom;\n\t\tthis.chunks = [];\n\t\tthis.nextChunk = 0;\n\t\tthis.overlayState = {};\n\t\tthis.renderedOverlays = {};\n\t\tthis.mutedCtx = {};\n\n\t\t// Bind callbacks\n\t\tthis._onScroll = this._onScroll.bind(this);\n\t\tthis._onEventAdd = this._onEventAdd.bind(this);\n\t\tthis._onLogClick = this._onLogClick.bind(this);\n\n\t\tthis.prerender = document.createElement('div');\n\t\tthis.prerender.className = 'charlog--list';\n\t\tthis.prerender.render = function(el) { el.appendChild(this); };\n\t\tthis.prerender.unrender = function() { this.parentElement.removeChild(this); };\n\t\tthis._loadNextChunk();\n\t}\n\n\tisRendered() {\n\t\treturn !!this.elem;\n\t}\n\n\trender(el) {\n\t\tlet layout = this.module.layout.getCurrentLayout();\n\t\tthis.simpleBar = new SimpleBar(\n\t\t\tthis.prerender,\n\t\t\t{\n\t\t\t\tclassName: 'charlog--log',\n\t\t\t\tforceVisible: 'y',\n\t\t\t\tautoHide: false,\n\t\t\t\tlockToBottom: true,\n\t\t\t\tonAtBottom: this.onAtBottom,\n\t\t\t\tevents: {\n\t\t\t\t\tclick: this._onLogClick,\n\t\t\t\t},\n\t\t\t},\n\t\t);\n\t\tthis.elem = new Elem(n => n.elem('div', { className: 'charlog' }, [\n\t\t\tn.component('simpleBar', new ModelComponent(\n\t\t\t\tnull,\n\t\t\t\tthis.simpleBar,\n\t\t\t\t(m, c) => {\n\t\t\t\t\tc[m?.highlightTriggers ? 'addClass' : 'removeClass']('charlog--highlight-triggers');\n\t\t\t\t\tc[m?.highlightMentionMessages ? 'addClass' : 'removeClass']('charlog--highlight-mention');\n\t\t\t\t\tc[m?.highlightOwnMessages ? 'addClass' : 'removeClass']('charlog--highlight-own');\n\t\t\t\t},\n\t\t\t)),\n\t\t\tn.component(new Context(\n\t\t\t\t() => new CollectionWrapper(\n\t\t\t\t\tthis.module.self.getOverlays(),\n\t\t\t\t\t{\n\t\t\t\t\t\tfilter: t => t.filter ? t.filter(this.char, layout) : true,\n\t\t\t\t\t\teventBus: this.module.self.app.eventBus,\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t\toverlays => overlays.dispose(),\n\t\t\t\toverlays => new CollectionList(overlays,\n\t\t\t\t\toverlay => {\n\t\t\t\t\t\tlet state = this.overlayState[overlay.id];\n\t\t\t\t\t\tif (!state) {\n\t\t\t\t\t\t\tstate = {};\n\t\t\t\t\t\t\tthis.overlayState[overlay.id] = state;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn overlay.componentFactory(this.char, state);\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tclassName: 'charlog--overlays',\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t)),\n\t\t]));\n\n\t\tlet elem = this.elem;\n\t\tthis.module.highlightSettings.getSettingsPromise().then(settings => {\n\t\t\tif (this.elem == elem) {\n\t\t\t\tthis.elem.getNode('simpleBar').setModel(settings);\n\t\t\t}\n\t\t});\n\n\t\tlet rel = this.elem.render(el);\n\t\tif (this.simpleBar.atBottom && this.onAtBottom) {\n\t\t\tthis.onAtBottom(true);\n\t\t}\n\t\tthis._scrollElem().addEventListener('scroll', this._onScroll);\n\t\treturn rel;\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis._scrollElem().removeEventListener('scroll', this._onScroll);\n\t\t\tif (this.simpleBar.atBottom && this.onAtBottom) {\n\t\t\t\tthis.onAtBottom(false);\n\t\t\t}\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t\tthis.simpleBar = null;\n\t\t}\n\t}\n\n\tdispose() {\n\t\tthis.unrender();\n\t\tif (this.chunks) {\n\t\t\tif (this.chunks.length) {\n\t\t\t\tthis.chunks[0].log.off('add', this._onEventAdd);\n\t\t\t\tfor (let chunk of this.chunks) {\n\t\t\t\t\tchunk.component.unrender();\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.chunks = null;\n\t\t}\n\t}\n\n\t_loadNextChunk() {\n\t\t// Assert we are not loading twice;\n\t\tlet chunkIdx = this.chunks.length;\n\t\tif (chunkIdx < this.nextChunk) return;\n\t\tthis.nextChunk++;\n\n\t\tthis.module.self.getLog(this.char, chunkIdx).then(log => {\n\t\t\tif (!this.chunks || !log) return;\n\n\t\t\tlet se = this._scrollElem();\n\t\t\tlet fromBottom = se ? se.scrollHeight - se.scrollTop : 0;\n\n\t\t\tlet muteTrail = this._moveMuteTrail(log, chunkIdx);\n\n\t\t\tlet components = new Collection({ data: this._componentsFromLog(log, muteTrail), idAttribute: null, eventBus: this.module.self.app.eventBus });\n\t\t\tlet c = new CollectionList(components, m => m);\n\t\t\tif (!chunkIdx) {\n\t\t\t\tlog.on('add', this._onEventAdd);\n\t\t\t}\n\t\t\tthis.chunks[chunkIdx] = { component: c, log, components, len: log.length };\n\t\t\tlet div = document.createElement('div');\n\t\t\tthis.prerender.insertBefore(div, this.prerender.firstChild);\n\t\t\tc.render(div);\n\n\t\t\tif (se) {\n\t\t\t\tse.scrollTop = se.scrollHeight - fromBottom;\n\t\t\t\tthis._onScroll();\n\t\t\t}\n\t\t});\n\t}\n\n\t_scrollElem() {\n\t\treturn this.simpleBar && this.simpleBar.simplebar.getScrollElement() || null;\n\t}\n\n\t_onScroll() {\n\t\tlet se = this._scrollElem();\n\t\tif (se && se.scrollTop < LOAD_CHUNK_THRESHOLD) {\n\t\t\tthis._loadNextChunk();\n\t\t}\n\t}\n\n\t// Moves any muted events at the bottom of the chunk's log to the\n\t// CharLogMuted container at the start of the following chunk. This\n\t// is to prevent muted events to be split up in two components even if they\n\t// belong to different chunks. */\n\t_moveMuteTrail(log, chunkIdx) {\n\t\tif (!chunkIdx) return 0;\n\n\t\tlet muteTrail = 0;\n\t\tfor (let idx = log.length - 1; idx >= 0; idx--) {\n\t\t\tlet ev = log[idx];\n\t\t\tif (this._isMuted(ev)) {\n\t\t\t\tmuteTrail++;\n\t\t\t\tlet i = chunkIdx;\n\t\t\t\twhile (i--) {\n\t\t\t\t\tlet o = this.chunks[i];\n\t\t\t\t\tif (!i || o.components.length) {\n\t\t\t\t\t\tlet comp = o.components.atIndex(0);\n\t\t\t\t\t\tif (comp instanceof CharLogMuted) {\n\t\t\t\t\t\t\tcomp.addEvent(ev, 0);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\to.components.add(new CharLogMuted(this.module, this.char, this.mutedCtx, [ ev ]), 0);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\to.muteTrail++;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn muteTrail;\n\t}\n\n\t_componentsFromLog(log, muteTrail) {\n\t\tlet len = log.length - muteTrail;\n\n\t\tlet list = [];\n\t\tlet muted = null;\n\t\tfor (let ev of log) {\n\t\t\tif (!len) break;\n\t\t\tlen--;\n\n\t\t\t// Check for muted events\n\t\t\tif (this._isMuted(ev)) {\n\t\t\t\tmuted = muted || new CharLogMuted(this.module, this.char, this.mutedCtx);\n\t\t\t\tmuted.addEvent(ev, muted.length);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (muted) {\n\t\t\t\tlist.push(muted);\n\t\t\t\tmuted = null;\n\t\t\t}\n\t\t\tlist.push(this.module.self.getLogEventComponent(this.char.id, ev));\n\t\t}\n\t\tif (muted) {\n\t\t\tlist.push(muted);\n\t\t}\n\n\t\treturn list;\n\t}\n\n\t_onEventAdd(e) {\n\t\tif (!this.chunks) return;\n\n\t\tlet o = this.chunks[0];\n\t\tlet components = o.components;\n\t\tlet offset = o.len;\n\t\tlet idx = e.idx;\n\t\tlet ev = e.item;\n\t\tlet muted = this._isMuted(ev);\n\t\tlet i = components.length;\n\n\t\twhile (i-- && idx < offset) {\n\t\t\tlet comp = components.atIndex(i);\n\t\t\tif (comp instanceof CharLogMuted) {\n\t\t\t\toffset -= comp.length;\n\t\t\t} else {\n\t\t\t\toffset--;\n\t\t\t}\n\t\t}\n\t\ti++;\n\n\t\to.len++;\n\n\t\tif (muted) {\n\t\t\t// Add muted event to the correct CharLogMuted,\n\t\t\t// or create a new CharLogMuted no adjecent is available.\n\t\t\tlet c = components.atIndex(i);\n\t\t\tif (c instanceof CharLogMuted) {\n\t\t\t\tc.addEvent(ev, idx - offset);\n\t\t\t} else {\n\t\t\t\tc = components.atIndex(i - 1);\n\t\t\t\tif (c instanceof CharLogMuted) {\n\t\t\t\t\tc.addEvent(ev, c.length);\n\t\t\t\t} else {\n\t\t\t\t\tcomponents.add(new CharLogMuted(this.module, this.char, this.mutedCtx, [ ev ]), i);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif (idx > offset) {\n\t\t\t\t// [TODO] Split the CharLogMuted component into two, and insert\n\t\t\t\t// this event in between. Now we just put it in front.\n\t\t\t\ti++;\n\t\t\t}\n\t\t\tcomponents.add(this.module.self.getLogEventComponent(this.char.id, ev), i);\n\t\t}\n\t}\n\n\t_isMuted(ev) {\n\t\treturn !!(ev.mod && ev.mod.muted);\n\t}\n\n\t_onLogClick(c, ev) {\n\t\tif (this.mutedCtx.tip) {\n\t\t\tthis.mutedCtx.tip.close();\n\t\t}\n\t}\n\n\tatBottom() {\n\t\treturn !!(this.simpleBar && this.simpleBar.atBottom);\n\t}\n}\n\nexport default CharLogComponent;\n","import formatText from 'utils/formatText';\n\n/**\n * Appends character name node to element.\n * @param {Elem} el HTML element\n * @param {object} char Character\n */\nexport function appendCharName(el, char) {\n\tlet span = document.createElement('span');\n\tspan.className = 'charlog--char';\n\tspan.textContent = char && char.name;\n\tel.appendChild(span);\n}\n\n/**\n * Appends a superscripted tagnode to element.\n * @param {Elem} el HTML element\n * @param {string} tag Tag text\n */\nexport function appendTag(el, tag) {\n\tlet span = document.createElement('span');\n\tspan.className = 'charlog--tag';\n\tspan.textContent = tag;\n\tel.appendChild(span);\n}\n\n/**\n * Appends a formatted text to element.\n * @param {Elem} el HTML element\n * @param {object} msg Formatted text\n * @param {object} [mod] Modifiers.\n * @param {Array.<object>} [mod.triggers] Trigger list text\n */\nexport function appendFormatText(el, msg, mod) {\n\tlet span = document.createElement('span');\n\tspan.className = 'common--formattext';\n\tspan.innerHTML = formatText(msg, mod || null);\n\tel.appendChild(span);\n}\n\n/**\n * Appends a space unless the message starts with apostrophy (') or comma (,).\n * @param {Elem} el HTML element\n * @param {string} msg Pose message.\n */\nexport function appendPoseSpacing(el, msg) {\n\tlet c = msg[0];\n\tif (c && c != \"'\" && c != ',') {\n\t\tel.appendChild(document.createTextNode(' '));\n\t}\n}\n\n/**\n * Adds the render and unrender methods to an element, to make it implement the\n * Component interface.Formats a duration in milliseconds to the format 1d 2h 3m\n * 4s 5ms.\n * @param {Elem} el HTML element\n * @param {boolean} isComm If the component should be marked as communication.\n * @returns {Elem} The same element.\n */\nexport function toComponent(el, isComm) {\n\tel.render = e => e.appendChild(el);\n\tel.unrender = () => el.parentElement.removeChild(el);\n\tif (isComm) {\n\t\tel.canHighlight = true;\n\t}\n\treturn el;\n}\n","import {\n\tappendCharName,\n\tappendPoseSpacing,\n\tappendFormatText,\n\tappendTag,\n\ttoComponent,\n} from './charLogUtils';\n\n// Msg event (for any type of pose like character event)\nexport function msgEvent(charId, ev, isComm) {\n\tlet div = document.createElement('div');\n\tappendCharName(div, ev.char);\n\tlet textSpan = div;\n\tif (isComm) {\n\t\tdiv.className = 'charlog--highlight';\n\t\ttextSpan = document.createElement('span');\n\t\ttextSpan.className = 'charlog--comm';\n\t\tdiv.appendChild(textSpan);\n\t}\n\tappendPoseSpacing(textSpan, ev.msg);\n\tappendFormatText(textSpan, ev.msg, ev.mod);\n\treturn toComponent(div, isComm);\n}\n\n// Say event\nexport function sayEvent(charId, ev, isComm) {\n\tlet div = document.createElement('div');\n\tappendCharName(div, ev.char);\n\tlet textSpan = div;\n\tif (isComm) {\n\t\tdiv.className = 'charlog--highlight';\n\t\ttextSpan = document.createElement('span');\n\t\ttextSpan.className = 'charlog--comm';\n\t\tdiv.appendChild(textSpan);\n\t}\n\ttextSpan.appendChild(document.createTextNode(' says, \"'));\n\tappendFormatText(textSpan, ev.msg, ev.mod);\n\ttextSpan.appendChild(document.createTextNode('\"'));\n\treturn toComponent(div, isComm);\n}\n\n\n// Msg event for events with a method\nexport function methodMsgEvent(charId, ev, method) {\n\tlet div = document.createElement('div');\n\tappendCharName(div, ev.char);\n\tif (method) {\n\t\tappendTag(div, \" \" + method);\n\t}\n\tappendPoseSpacing(div, ev.msg);\n\tappendFormatText(div, ev.msg, ev.mod);\n\treturn toComponent(div);\n}\n\n\n// Travel event\nexport function travelEvent(charId, ev) {\n\tlet div = document.createElement('div');\n\tmethodMsgEvent(charId, ev, ev.method).render(div);\n\n\tlet rdiv = document.createElement('div');\n\tlet t = ev.targetRoom;\n\trdiv.className = 'ev-travel--room';\n\trdiv.textContent = t && t.name;\n\tdiv.appendChild(rdiv);\n\n\treturn toComponent(div);\n}\n\n// // Follow event\n// export function followEvent(charId, ev) {\n// \tlet div = document.createElement('div');\n// \tappendCharName(div, ev.char);\n// \tdiv.appendChild(document.createTextNode(' starts to follow '));\n// \tappendCharName(div, ev.target);\n// \tdiv.appendChild(document.createTextNode('.'));\n// \treturn toComponent(div);\n// }\n\n// Stop follow event\nexport function stopFollowEvent(charId, ev) {\n\tlet fieldset = document.createElement('div');\n\tfieldset.className = 'charlog--fieldset';\n\tlet fieldsetSpan = document.createElement('span');\n\tfieldsetSpan.appendChild(document.createTextNode(\"Stop follow\"));\n\tlet fieldsetLabel = document.createElement('div');\n\tfieldsetLabel.className = 'charlog--fieldset-label';\n\tfieldsetLabel.appendChild(fieldsetSpan);\n\tfieldset.appendChild(fieldsetLabel);\n\tappendCharName(fieldset, ev.char);\n\tfieldset.appendChild(document.createTextNode(' stops following '));\n\tappendCharName(fieldset, ev.target);\n\tfieldset.appendChild(document.createTextNode('.'));\n\tlet div = document.createElement('div');\n\tdiv.appendChild(fieldset);\n\treturn toComponent(div);\n}\n\n// Stop lead event\nexport function stopLeadEvent(charId, ev) {\n\tlet fieldset = document.createElement('div');\n\tfieldset.className = 'charlog--fieldset';\n\tlet fieldsetSpan = document.createElement('span');\n\tfieldsetSpan.appendChild(document.createTextNode(\"Stop lead\"));\n\tlet fieldsetLabel = document.createElement('div');\n\tfieldsetLabel.className = 'charlog--fieldset-label';\n\tfieldsetLabel.appendChild(fieldsetSpan);\n\tfieldset.appendChild(fieldsetLabel);\n\tappendCharName(fieldset, ev.char);\n\tfieldset.appendChild(document.createTextNode(' stops leading '));\n\tappendCharName(fieldset, ev.target);\n\tfieldset.appendChild(document.createTextNode('.'));\n\tlet div = document.createElement('div');\n\tdiv.appendChild(fieldset);\n\treturn toComponent(div);\n}\n\n","import { Elem, Txt } from 'modapp-base-component';\nimport { CollectionList } from 'modapp-resource-component';\nimport FAIcon from 'components/FAIcon';\n\nclass CharLogEventMenu {\n\tconstructor(module, charId, ev, menuItems) {\n\t\tthis.module = module;\n\t\tthis.charId = charId;\n\t\tthis.ev = ev;\n\t\tthis.menuItems = menuItems;\n\n\t\t// Bind callbacks\n\t\tthis._close = (e) => {\n\t\t\tlet n = this._menu && this._menu.getElement();\n\t\t\tif (n && !n.contains(e.target)) {\n\t\t\t\tsetTimeout(() => this.toggle(false), 0);\n\t\t\t}\n\t\t};\n\t}\n\n\trender(el) {\n\t\tthis.elem = new Elem(n => n.elem('button', {\n\t\t\tclassName: 'charlog-eventmenu iconbtn tiny tinyicon',\n\t\t\tevents: {\n\t\t\t\tclick: (c, ev) => {\n\t\t\t\t\tthis.toggle();\n\t\t\t\t\tev.currentTarget.blur();\n\t\t\t\t\tev.stopPropagation();\n\t\t\t\t\tev.preventDefault();\n\t\t\t\t},\n\t\t\t},\n\t\t}, [\n\t\t\tn.component(new FAIcon('ellipsis-v')),\n\t\t]));\n\t\tthis._setListeners(true);\n\t\treturn this.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tthis._unrenderMenu();\n\t\tif (this.elem) {\n\t\t\tthis._setListeners(false);\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t\tif (this.onFadeOut) {\n\t\t\tthis.onFadeOut();\n\t\t\tthis.onFadeOut = null;\n\t\t}\n\t}\n\n\tfadeIn() {\n\t\tthis.onFadeOut = null;\n\t}\n\n\tfadeOut(onFadeOut) {\n\t\tthis.onFadeOut = onFadeOut;\n\t\tif (!this._open) {\n\t\t\tthis.unrender();\n\t\t}\n\t}\n\n\t/**\n\t * Toggles the tooltip between open and closed.\n\t * @param {boolean} [open] Optional state to set the popup tip to. Defaults to toggle between open/close.\n\t * @returns {this}\n\t */\n\ttoggle(open) {\n\t\tthis._open = typeof open == 'undefined' ? !this._open : !!open;\n\t\tthis._setComponent();\n\t\treturn this;\n\t}\n\n\t_setComponent() {\n\t\tif (!this.elem) return;\n\n\t\tif (!this._open) {\n\t\t\tif (this.onFadeOut) {\n\t\t\t\tthis.unrender();\n\t\t\t} else {\n\t\t\t\tthis._unrenderMenu();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._menu) return;\n\n\t\tlet el = this.elem.getElement();\n\t\tlet rect = el.getBoundingClientRect();\n\t\tthis._menu = new Elem(n => n.elem('div', {\n\t\t\tclassName: 'charlog-eventmenu--menu', attributes: {\n\t\t\t\tstyle: 'position: absolute; top: ' + (rect.top + document.documentElement.scrollTop + el.offsetHeight + 6) + 'px; left: ' + (rect.left + document.documentElement.scrollLeft + el.offsetWidth) + 'px;',\n\t\t\t},\n\t\t}, [\n\t\t\tn.component(new CollectionList(\n\t\t\t\tthis.menuItems,\n\t\t\t\tm => new Elem(n => n.elem('div', {\n\t\t\t\t\tclassName: 'charlog-eventmenu--btn flex-row pad8',\n\t\t\t\t\tevents: {\n\t\t\t\t\t\tclick: (c, ev) => {\n\t\t\t\t\t\t\tm.onClick(this.charId, this.ev);\n\t\t\t\t\t\t\tthis.toggle(false);\n\t\t\t\t\t\t\tev.stopPropagation();\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t}, [\n\t\t\t\t\tn.elem('div', { className: 'charlog-eventmenu--btnicon flex-auto' }, [ n.component(m.icon ? new FAIcon(m.icon) : null) ]),\n\t\t\t\t\tn.component(new Txt(m.name, { className: 'charlog-eventmenu--btnname flex-1' })),\n\t\t\t\t])),\n\t\t\t)),\n\t\t]));\n\t\tthis._menu.render(document.body);\n\t}\n\n\t_unrenderMenu() {\n\t\tif (this._menu) {\n\t\t\tthis._menu.unrender();\n\t\t\tthis._menu = null;\n\t\t}\n\t}\n\n\t_setListeners(on) {\n\t\tlet cb = on ? 'addEventListener' : 'removeEventListener';\n\t\tdocument[cb]('keydown', this._close, true);\n\t\tdocument[cb]('click', this._close, true);\n\t}\n}\n\nexport default CharLogEventMenu;\n","import { Txt } from 'modapp-base-component';\nimport l10n from 'modapp-l10n';\nimport formatDateTime from 'utils/formatDateTime';\nimport * as tooltip from 'utils/tooltip';\nimport CharLogEventMenu from './CharLogEventMenu';\n\nconst txtTampered = l10n.l('charLog.tamperedWith', \"Event is likely tampered with.\");\n\nclass CharLogEvent {\n\tconstructor(modules, charId, ev, opt) {\n\t\tthis.modules = modules;\n\t\tthis.charId = charId;\n\t\tthis.ev = ev;\n\n\t\tthis._onMouseEnter = this._onMouseEnter.bind(this);\n\t\tthis._onMouseLeave = this._onMouseLeave.bind(this);\n\t\tthis._onClick = this._onClick.bind(this);\n\n\t\t// Prerender component\n\t\tlet c = ev.component;\n\t\tif (!c) {\n\t\t\tlet f = this.modules.self.getEventComponentFactory(ev.type);\n\t\t\tc = f ? f(charId, ev, opt) : new Txt(JSON.stringify(ev), { tagName: 'pre' });\n\t\t}\n\t\tlet ec = ev.char;\n\t\tlet invalid = ev.invalid;\n\t\tlet mod = ev.mod;\n\t\tlet div = document.createElement('div');\n\t\tlet own = ec && ec.id == charId;\n\t\tdiv.className = 'ev-' + (ev.type || 'unknown');\n\t\tlet subdiv = document.createElement('div');\n\t\tsubdiv.className = 'charlog--ev'\n\t\t\t+ ((opt?.noFocus)\n\t\t\t\t? ' charlog--nofocus'\n\t\t\t\t: ec ? ' f-' + charId + '-' + ec.id : ''\n\t\t\t)\n\t\t\t+ (c.canHighlight && !(opt?.noMessageHighlight)\n\t\t\t\t? (own ? ' own' : '')\n\t\t\t\t+ (!own && (mod?.triggers?.length || mod?.mentioned) ? ' mentioned' : '')\n\t\t\t\t+ (ev.target?.id == charId || mod?.targeted ? ' targeted' : '')\n\t\t\t\t: ''\n\t\t\t)\n\t\t\t+ (invalid ? ' charlog--invalid' : '');\n\t\tdiv.appendChild(subdiv);\n\t\tc.render(subdiv);\n\n\t\tsubdiv.addEventListener('mouseenter', this._onMouseEnter);\n\t\tsubdiv.addEventListener('mouseleave', this._onMouseLeave);\n\t\tsubdiv.addEventListener('click', this._onClick);\n\n\t\tthis.subdiv = subdiv;\n\t\tthis.c = c;\n\t\tthis.div = div;\n\t\tthis.noMenu = !!(ev.noMenu || c.noMenu || (opt && opt.noMenu));\n\t}\n\n\trender(el) {\n\t\tel.appendChild(this.div);\n\t\treturn this.div;\n\t}\n\n\tunrender() {\n\t\tthis.c.unrender();\n\t\tif (this.menu) {\n\t\t\tthis.menu.unrender();\n\t\t\tthis.menu = null;\n\t\t}\n\t\tthis.div.parentElement.removeChild(this.div);\n\t}\n\n\t_getTooltipText() {\n\t\tlet ev = this.ev;\n\t\tlet ec = ev.char;\n\t\tlet invalid = ev.invalid;\n\t\tlet txt = \"\";\n\t\tif (ec) {\n\t\t\tlet ep = ev.puppeteer;\n\t\t\ttxt = (ec.name + \" \" + ec.surname).trim() + (ep ? \"\\n(\" + (ep.name + \" \" + ep.surname).trim() + \")\" : '') + (ev.time ? \"\\n\" + formatDateTime(new Date(ev.time)) : '');\n\t\t} else if (ev.time) {\n\t\t\ttxt = formatDateTime(new Date(ev.time));\n\t\t}\n\t\tif (this.c.getTooltipText) {\n\t\t\tlet tt = this.c.getTooltipText(ev);\n\t\t\tif (tt) {\n\t\t\t\ttxt += \"\\n\" + tt;\n\t\t\t}\n\t\t}\n\t\tif (invalid) {\n\t\t\ttxt += \"\\n\" + l10n.t(invalid.code, invalid.message, invalid.data) + \"\\n\" + l10n.t(txtTampered);\n\t\t}\n\t\treturn txt;\n\t}\n\n\t_onClick(ev) {\n\t\tlet txt = this._getTooltipText();\n\t\tif (txt) {\n\t\t\tthis.tooltip = tooltip.click(ev.currentTarget, txt, { className: 'charlog-event--tooltip', offset: ev.clientX, margin: 'm', hoverDelay: true });\n\t\t}\n\t\tev.stopPropagation();\n\t}\n\n\t_onMouseEnter(ev) {\n\t\t// let txt = this._getTooltipText();\n\t\t// if (txt) {\n\t\t// \tthis.tooltip = tooltip.mouseEnter(ev.currentTarget, txt, { offset: ev.clientX, margin: 'm', hoverDelay: true });\n\t\t// }\n\t\tif (!this.noMenu) {\n\t\t\tthis._renderMenu();\n\t\t}\n\t}\n\n\t_onMouseLeave(ev) {\n\t\t// this.tooltip = tooltip.mouseLeave(ev.currentTarget);\n\t\tif (!this.noMenu) {\n\t\t\tthis._unrenderMenu();\n\t\t}\n\t}\n\n\t_renderMenu() {\n\t\tif (!this.menu) {\n\t\t\tlet menuItems = this.modules.self.getMenuItems()\n\t\t\t\t.toArray()\n\t\t\t\t.filter(m => m.filter ? m.filter(this.charId, this.ev) : true);\n\t\t\tif (menuItems.length) {\n\t\t\t\tthis.menu = new CharLogEventMenu(this.modules, this.charId, this.ev, menuItems);\n\t\t\t\tthis.menu.render(this.subdiv);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.menu.fadeIn();\n\t\t}\n\t}\n\n\t_unrenderMenu() {\n\t\tif (this.menu) {\n\t\t\tthis.menu.fadeOut(() => this.menu = null);\n\t\t}\n\t}\n}\n\nexport default CharLogEvent;\n","import { Txt } from 'modapp-base-component';\nimport l10n from 'modapp-l10n';\n\nclass ErrorEvent extends Txt {\n\tconstructor(charId, ev) {\n\t\tsuper(l10n.l(ev.error.code, ev.error.message, ev.error.data), { className: 'charlog--error' });\n\t}\n}\n\nexport default ErrorEvent;\n","import { Html } from 'modapp-base-component';\nimport formatText from 'utils/formatText';\nimport l10n from 'modapp-l10n';\n\nclass InfoEvent extends Html {\n\tconstructor(charId, ev) {\n\t\tsuper(formatText(typeof ev.msg == 'string' ? ev.msg : l10n.t(ev.msg)), { tagName: 'div', className: 'charlog--info common--formattext' });\n\t}\n}\n\nexport default InfoEvent;\n","import { Elem, Txt, Html } from 'modapp-base-component';\nimport l10n from 'modapp-l10n';\nimport formatText from 'utils/formatText';\nimport poseSpacing from 'utils/poseSpacing';\nimport fullname from 'utils/fullname';\nimport * as charEvent from 'utils/charEvent';\n\nclass WhisperEvent extends Elem {\n\tconstructor(charId, ev) {\n\t\tlet c = ev.char;\n\t\tlet t = charEvent.extractTarget(charId, ev);\n\t\tlet more = ev.targets?.length - (ev.target ? 0 : 1);\n\t\tsuper(n => n.elem('div', [\n\t\t\tn.elem('div', { className: 'charlog--fieldset' }, [\n\t\t\t\tn.elem('div', { className: 'charlog--fieldset-label' }, [\n\t\t\t\t\tn.component(new Txt(ev.ooc\n\t\t\t\t\t\t? more\n\t\t\t\t\t\t\t? l10n.l('charLog.whisperOocTo', \"Whisper ooc to {fullname} +{more} more\", { fullname: fullname(t), more })\n\t\t\t\t\t\t\t: l10n.l('charLog.whisperOocTo', \"Whisper ooc to {fullname}\", { fullname: fullname(t) })\n\t\t\t\t\t\t: more\n\t\t\t\t\t\t\t? l10n.l('charLog.whisperTo', \"Whisper to {fullname} +{more} more\", { fullname: fullname(t), more })\n\t\t\t\t\t\t\t: l10n.l('charLog.whisperTo', \"Whisper to {fullname}\", { fullname: fullname(t) }),\n\t\t\t\t\t)),\n\t\t\t\t]),\n\t\t\t\tn.component(new Txt(c && c.name, { className: 'charlog--char' })),\n\t\t\t\tn.elem('span', { className: ev.ooc ? 'charlog--ooc' : 'charlog--comm' }, [\n\t\t\t\t\tn.text(ev.pose ? poseSpacing(ev.msg) : ' whispers, \"'),\n\t\t\t\t\tn.component(new Html(formatText(ev.msg, ev.mod), { tagName: 'span', className: 'common--formattext' })),\n\t\t\t\t\tn.text(ev.pose ? '' : '\"'),\n\t\t\t\t]),\n\t\t\t]),\n\t\t]));\n\t}\n\n\tget canHighlight() {\n\t\treturn true;\n\t}\n\n\tgetTooltipText(ev) {\n\t\treturn charEvent.targetTooltipText(ev);\n\t}\n}\n\nexport default WhisperEvent;\n","import { Elem, Html } from 'modapp-base-component';\nimport formatText from 'utils/formatText';\n\nclass DescribeEvent extends Elem {\n\tconstructor(charId, ev) {\n\t\tsuper(n => n.elem('div', { className: 'charlog--highlight' }, [\n\t\t\tn.text('⌈'),\n\t\t\tn.component(new Html(formatText(ev.msg, ev.mod), { tagName: 'span', className: 'common--formattext' })),\n\t\t\tn.text('⌋'),\n\t\t]));\n\t}\n\n\tget canHighlight() {\n\t\treturn true;\n\t}\n}\n\nexport default DescribeEvent;\n","import { Elem, Txt, Html } from 'modapp-base-component';\nimport l10n from 'modapp-l10n';\nimport formatText from 'utils/formatText';\nimport poseSpacing from 'utils/poseSpacing';\nimport fullname from 'utils/fullname';\nimport * as charEvent from 'utils/charEvent';\n\nclass MessageEvent extends Elem {\n\tconstructor(charId, ev) {\n\t\tlet c = ev.char;\n\t\tlet t = charEvent.extractTarget(charId, ev);\n\t\tlet more = ev.targets?.length - (ev.target ? 0 : 1);\n\t\tsuper(n => n.elem('div', [\n\t\t\tn.elem('div', { className: 'charlog--fieldset' }, [\n\t\t\t\tn.elem('div', { className: 'charlog--fieldset-label' }, [\n\t\t\t\t\tn.component(new Txt(ev.ooc\n\t\t\t\t\t\t? more\n\t\t\t\t\t\t\t? l10n.l('charLog.messageOocTo', \"Message ooc to {fullname} +{more} more\", { fullname: fullname(t), more })\n\t\t\t\t\t\t\t: l10n.l('charLog.messageOocTo', \"Message ooc to {fullname}\", { fullname: fullname(t) })\n\t\t\t\t\t\t: more\n\t\t\t\t\t\t\t? l10n.l('charLog.messageTo', \"Message to {fullname} +{more} more\", { fullname: fullname(t), more })\n\t\t\t\t\t\t\t: l10n.l('charLog.messageTo', \"Message to {fullname}\", { fullname: fullname(t) }),\n\t\t\t\t\t)),\n\t\t\t\t]),\n\t\t\t\tn.component(new Txt(c && c.name, { className: 'charlog--char' })),\n\t\t\t\tn.elem('span', { className: ev.ooc ? 'charlog--ooc' : 'charlog--comm' }, [\n\t\t\t\t\tn.text(ev.pose ? poseSpacing(ev.msg) : ' writes, \"'),\n\t\t\t\t\tn.component(new Html(formatText(ev.msg, ev.mod), { tagName: 'span', className: 'common--formattext' })),\n\t\t\t\t\tn.text(ev.pose ? '' : '\"'),\n\t\t\t\t]),\n\t\t\t]),\n\t\t]));\n\t}\n\n\tget canHighlight() {\n\t\treturn true;\n\t}\n\n\tgetTooltipText(ev) {\n\t\treturn charEvent.targetTooltipText(ev);\n\t}\n}\n\nexport default MessageEvent;\n","import { Elem, Txt } from 'modapp-base-component';\nimport l10n from 'modapp-l10n';\nimport fullname from 'utils/fullname';\n\nconst txtSummon = l10n.l('charLog.summon', \"Summon\");\nconst txtHowToJoin = l10n.l('charLog.howToJoin', \". To accept the summons, type:\");\n\nclass SummonEvent extends Elem {\n\tconstructor(charId, ev, opt) {\n\t\topt = opt || {};\n\t\tlet c = ev.char;\n\t\tlet t = ev.target;\n\t\tlet self = c && c.id == charId;\n\t\tsuper(n => n.elem('div', [\n\t\t\tn.elem('div', { className: 'charlog--fieldset' }, [\n\t\t\t\tn.elem('div', { className: 'charlog--fieldset-label' }, [\n\t\t\t\t\tn.component(new Txt(txtSummon)),\n\t\t\t\t]),\n\t\t\t\tn.component(new Txt(c && c.name, { className: 'charlog--char' })),\n\t\t\t\tn.text(' tries to summon '),\n\t\t\t\tn.component(new Txt(t && t.name, { className: 'charlog--char' })),\n\t\t\t\tn.component(new Txt(self || opt.noCode ? '.' : txtHowToJoin)),\n\t\t\t\tn.component(self || opt.noCode\n\t\t\t\t\t? null\n\t\t\t\t\t: new Elem(n => n.elem('div', { className: 'charlog--pad-small' }, [\n\t\t\t\t\t\tn.elem('div', { className: 'charlog--code' }, [\n\t\t\t\t\t\t\tn.component(new Txt(\"join \" + fullname(c), { tagName: 'code' })),\n\t\t\t\t\t\t]),\n\t\t\t\t\t])),\n\t\t\t\t),\n\t\t\t]),\n\t\t]));\n\t}\n}\n\nexport default SummonEvent;\n","import { Elem, Txt } from 'modapp-base-component';\nimport l10n from 'modapp-l10n';\nimport fullname from 'utils/fullname';\n\nconst txtJoin = l10n.l('charLog.join', \"Join\");\nconst txtHowToSummon = l10n.l('charLog.howToSummon', \". To summon, type:\");\n\nclass JoinEvent extends Elem {\n\tconstructor(charId, ev, opt) {\n\t\topt = opt || {};\n\t\tlet c = ev.char;\n\t\tlet t = ev.target;\n\t\tlet self = c && c.id == charId;\n\t\tsuper(n => n.elem('div', [\n\t\t\tn.elem('div', { className: 'charlog--fieldset' }, [\n\t\t\t\tn.elem('div', { className: 'charlog--fieldset-label' }, [\n\t\t\t\t\tn.component(new Txt(txtJoin)),\n\t\t\t\t]),\n\t\t\t\tn.component(new Txt(c && c.name, { className: 'charlog--char' })),\n\t\t\t\tn.text(' wants to join '),\n\t\t\t\tn.component(new Txt(t && t.name, { className: 'charlog--char' })),\n\t\t\t\tn.component(new Txt(self || opt.noCode ? '.' : txtHowToSummon)),\n\t\t\t\tn.component(self || opt.noCode\n\t\t\t\t\t? null\n\t\t\t\t\t: new Elem(n => n.elem('div', { className: 'charlog--pad-small' }, [\n\t\t\t\t\t\tn.elem('div', { className: 'charlog--code' }, [\n\t\t\t\t\t\t\tn.component(new Txt(\"summon \" + fullname(c), { tagName: 'code' })),\n\t\t\t\t\t\t]),\n\t\t\t\t\t])),\n\t\t\t\t),\n\t\t\t]),\n\t\t]));\n\t}\n}\n\nexport default JoinEvent;\n","import { Elem, Txt, Html } from 'modapp-base-component';\nimport formatText from 'utils/formatText';\nimport poseSpacing from 'utils/poseSpacing';\n\nclass OocEvent extends Elem {\n\tconstructor(charId, ev) {\n\t\tlet c = ev.char;\n\t\tsuper(n => n.elem('div', { className: 'charlog--highlight' }, [\n\t\t\tn.component(new Txt(c && c.name, { className: 'charlog--char' })),\n\t\t\tn.elem('span', { className: 'charlog--tag' }, [ n.text(\" ooc\") ]),\n\t\t\tn.elem('span', { className: 'charlog--ooc' }, [\n\t\t\t\tn.text(ev.pose ? poseSpacing(ev.msg) : ' says, \"'),\n\t\t\t\tn.component(new Html(formatText(ev.msg, ev.mod), { tagName: 'span', className: 'common--formattext' })),\n\t\t\t\tn.text(ev.pose ? '' : '\"'),\n\t\t\t]),\n\t\t]));\n\t}\n\n\tget canHighlight() {\n\t\treturn true;\n\t}\n}\n\nexport default OocEvent;\n","import { Elem, Txt, Html } from 'modapp-base-component';\nimport l10n from 'modapp-l10n';\nimport formatText from 'utils/formatText';\nimport poseSpacing from 'utils/poseSpacing';\nimport fullname from 'utils/fullname';\nimport * as charEvent from 'utils/charEvent';\n\nclass WarnEvent extends Elem {\n\tconstructor(charId, ev) {\n\t\tlet c = ev.char;\n\t\tlet t = charEvent.extractTarget(charId, ev);\n\t\tlet more = ev.targets?.length - (ev.target ? 0 : 1);\n\t\tsuper(n => n.elem('div', [\n\t\t\tn.elem('div', { className: 'charlog--fieldset' }, [\n\t\t\t\tn.elem('div', { className: 'charlog--fieldset-label' }, [\n\t\t\t\t\tn.component(new Txt(more\n\t\t\t\t\t\t? l10n.l('charLog.messageTo', \"Message to {fullname} +{more} more\", { fullname: fullname(t), more })\n\t\t\t\t\t\t: l10n.l('charLog.messageTo', \"Message to {fullname}\", { fullname: fullname(t) }),\n\t\t\t\t\t)),\n\t\t\t\t]),\n\t\t\t\tn.component(new Txt(c && c.name, { className: 'charlog--default' })),\n\t\t\t\tn.text(ev.pose ? poseSpacing(ev.msg) : ' warns, \"'),\n\t\t\t\tn.component(new Html(formatText(ev.msg, ev.mod), { tagName: 'span', className: 'common--formattext' })),\n\t\t\t\tn.text(ev.pose ? '' : '\"'),\n\t\t\t]),\n\t\t]));\n\t}\n\n\tget canHighlight() {\n\t\treturn true;\n\t}\n\n\tgetTooltipText(ev) {\n\t\treturn charEvent.targetTooltipText(ev);\n\t}\n}\n\nexport default WarnEvent;\n","import { Elem, Txt, Html } from 'modapp-base-component';\nimport l10n from 'modapp-l10n';\nimport formatText from 'utils/formatText';\nimport poseSpacing from 'utils/poseSpacing';\nimport fullname from 'utils/fullname';\n\nclass MailEvent extends Elem {\n\tconstructor(charId, ev) {\n\t\tsuper(n => {\n\t\t\tlet c = ev.char;\n\t\t\tlet t = ev.target;\n\t\t\tlet children = [\n\t\t\t\tn.elem('div', { className: 'charlog--fieldset-label' }, [\n\t\t\t\t\tn.component(new Txt(c && c.id === charId\n\t\t\t\t\t\t? ev.ooc\n\t\t\t\t\t\t\t? l10n.l('charLog.mailOocTo', \"Mail sent ooc to {fullname}\", { fullname: fullname(t) })\n\t\t\t\t\t\t\t: l10n.l('charLog.mailTo', \"Mail sent to {fullname}\", { fullname: fullname(t) })\n\t\t\t\t\t\t: ev.ooc\n\t\t\t\t\t\t\t? l10n.l('charLog.mailOocFrom', \"Mail received ooc from {fullname}\", { fullname: fullname(c) })\n\t\t\t\t\t\t\t: l10n.l('charLog.mailFrom', \"Mail received from {fullname}\", { fullname: fullname(c) }),\n\t\t\t\t\t)),\n\t\t\t\t]),\n\t\t\t];\n\t\t\tif (ev.pose) {\n\t\t\t\tchildren.push(n.component(new Txt(c && c.name, { className: 'charlog--char' })));\n\t\t\t\tlet sp = poseSpacing(ev.msg);\n\t\t\t\tif (sp) {\n\t\t\t\t\tchildren.push(n.text(sp));\n\t\t\t\t}\n\t\t\t}\n\t\t\tchildren.push(n.component(new Html(formatText(ev.msg), { tagName: 'span', className: 'common--formattext' })));\n\t\t\treturn n.elem('div', [\n\t\t\t\tn.elem('div', { className: 'charlog--fieldset ' + (ev.ooc ? 'charlog--ooc' : 'charlog--comm') }, children),\n\t\t\t]);\n\t\t});\n\t}\n\n\tget canHighlight() {\n\t\treturn true;\n\t}\n}\n\nexport default MailEvent;\n","import { Elem, Txt, Html } from 'modapp-base-component';\nimport l10n from 'modapp-l10n';\nimport formatText from 'utils/formatText';\nimport poseSpacing from 'utils/poseSpacing';\nimport fullname from 'utils/fullname';\nimport * as charEvent from 'utils/charEvent';\n\nclass AddressEvent extends Elem {\n\tconstructor(charId, ev) {\n\t\tlet c = ev.char;\n\t\tlet t = charEvent.extractTarget(charId, ev);\n\t\tlet more = ev.targets?.length - (ev.target ? 0 : 1);\n\t\tsuper(n => n.elem('div', { className: 'charlog--highlight' }, [\n\t\t\tn.component(new Txt(c && c.name, { className: 'charlog--char' })),\n\t\t\tn.elem('span', { className: 'charlog--tag' }, [ n.text(ev.ooc\n\t\t\t\t? more\n\t\t\t\t\t? l10n.t('charLog.oocTo', \"ooc to {fullname} +{more} more\", { fullname: fullname(t), more })\n\t\t\t\t\t: l10n.t('charLog.oocTo', \"ooc to {fullname}\", { fullname: fullname(t) })\n\t\t\t\t: more\n\t\t\t\t\t? l10n.t('charLog.to', \" to {fullname} +{more} more\", { fullname: fullname(t), more })\n\t\t\t\t\t: l10n.t('charLog.to', \" to {fullname}\", { fullname: fullname(t) }),\n\t\t\t) ]),\n\t\t\tn.elem('span', { className: ev.ooc ? 'charlog--ooc' : 'charlog--comm' }, [\n\t\t\t\tn.text(ev.pose ? poseSpacing(ev.msg) : ' says, \"'),\n\t\t\t\tn.component(new Html(formatText(ev.msg, ev.mod), { tagName: 'span', className: 'common--formattext' })),\n\t\t\t\tn.text(ev.pose ? '' : '\"'),\n\t\t\t]),\n\t\t]));\n\t}\n\n\tget canHighlight() {\n\t\treturn true;\n\t}\n\n\tgetTooltipText(ev) {\n\t\treturn charEvent.targetTooltipText(ev);\n\t}\n}\n\nexport default AddressEvent;\n","import { Elem, Txt } from 'modapp-base-component';\nimport l10n from 'modapp-l10n';\nimport fullname from 'utils/fullname';\n\nconst txtLeadRequest = l10n.l('charLog.leadRequest', \"Lead request\");\nconst txtHowToFollow = l10n.l('charLog.howToFollow', \". To follow, type:\");\n\nclass LeadRequestEvent extends Elem {\n\tconstructor(charId, ev, opt) {\n\t\topt = opt || {};\n\t\tlet c = ev.char;\n\t\tlet t = ev.target;\n\t\tlet self = c && c.id == charId;\n\t\tsuper(n => n.elem('div', [\n\t\t\tn.elem('div', { className: 'charlog--fieldset' }, [\n\t\t\t\tn.elem('div', { className: 'charlog--fieldset-label' }, [\n\t\t\t\t\tn.component(new Txt(txtLeadRequest)),\n\t\t\t\t]),\n\t\t\t\tn.component(new Txt(c && c.name, { className: 'charlog--char' })),\n\t\t\t\tn.text(' wants to lead '),\n\t\t\t\tn.component(new Txt(t && t.name, { className: 'charlog--char' })),\n\t\t\t\tn.component(new Txt(self || opt.noCode ? '.' : txtHowToFollow)),\n\t\t\t\tn.component(self || opt.noCode\n\t\t\t\t\t? null\n\t\t\t\t\t: new Elem(n => n.elem('div', { className: 'charlog--pad-small' }, [\n\t\t\t\t\t\tn.elem('div', { className: 'charlog--code' }, [\n\t\t\t\t\t\t\tn.component(new Txt(\"follow \" + fullname(c), { tagName: 'code' })),\n\t\t\t\t\t\t]),\n\t\t\t\t\t])),\n\t\t\t\t),\n\t\t\t]),\n\t\t]));\n\t}\n}\n\nexport default LeadRequestEvent;\n","import { Elem, Txt } from 'modapp-base-component';\nimport l10n from 'modapp-l10n';\nimport fullname from 'utils/fullname';\n\nconst txtFollowRequest = l10n.l('charLog.followRequest', \"Follow request\");\nconst txtHowToLead = l10n.l('charLog.howToLead', \". To take the lead, type:\");\n\nclass FollowRequestEvent extends Elem {\n\tconstructor(charId, ev, opt) {\n\t\topt = opt || {};\n\t\tlet c = ev.char;\n\t\tlet t = ev.target;\n\t\tlet self = c && c.id == charId;\n\t\tsuper(n => n.elem('div', [\n\t\t\tn.elem('div', { className: 'charlog--fieldset' }, [\n\t\t\t\tn.elem('div', { className: 'charlog--fieldset-label' }, [\n\t\t\t\t\tn.component(new Txt(txtFollowRequest)),\n\t\t\t\t]),\n\t\t\t\tn.component(new Txt(c && c.name, { className: 'charlog--char' })),\n\t\t\t\tn.text(' wants to follow '),\n\t\t\t\tn.component(new Txt(t && t.name, { className: 'charlog--char' })),\n\t\t\t\tn.component(new Txt(self || opt.noCode ? '.' : txtHowToLead)),\n\t\t\t\tn.component(self || opt.noCode\n\t\t\t\t\t? null\n\t\t\t\t\t: new Elem(n => n.elem('div', { className: 'charlog--pad-small' }, [\n\t\t\t\t\t\tn.elem('div', { className: 'charlog--code' }, [\n\t\t\t\t\t\t\tn.component(new Txt(\"lead \" + fullname(c), { tagName: 'code' })),\n\t\t\t\t\t\t]),\n\t\t\t\t\t])),\n\t\t\t\t),\n\t\t\t]),\n\t\t]));\n\t}\n}\n\nexport default FollowRequestEvent;\n","import { Elem, Txt } from 'modapp-base-component';\nimport l10n from 'modapp-l10n';\nimport fullname from 'utils/fullname';\n\nconst txtFollow = l10n.l('charLog.follow', \"Follow\");\nconst txtStartsToFollow = l10n.l('charlog.startsToFollow', \" starts to follow \");\nconst txtHowToStopFollow = l10n.l('charLog.howToStopFollow', \". To stop following, type:\");\nconst txtHowToStopLead = l10n.l('charLog.howToStopLead', \". To stop leading, type:\");\n\nclass FollowEvent extends Elem {\n\tconstructor(charId, ev, opt) {\n\t\topt = opt || {};\n\t\tlet c = ev.char;\n\t\tlet t = ev.target;\n\t\tlet self = c && c.id == charId;\n\t\tsuper(n => n.elem('div', [\n\t\t\tn.elem('div', { className: 'charlog--fieldset' }, [\n\t\t\t\tn.elem('div', { className: 'charlog--fieldset-label' }, [\n\t\t\t\t\tn.component(new Txt(txtFollow)),\n\t\t\t\t]),\n\t\t\t\tn.component(new Txt(c && c.name, { className: 'charlog--char' })),\n\t\t\t\tn.component(new Txt(txtStartsToFollow)),\n\t\t\t\tn.component(new Txt(t && t.name, { className: 'charlog--char' })),\n\t\t\t\tn.component(new Txt(opt.noCode\n\t\t\t\t\t? \".\"\n\t\t\t\t\t: self\n\t\t\t\t\t\t? txtHowToStopFollow\n\t\t\t\t\t\t: txtHowToStopLead,\n\t\t\t\t)),\n\t\t\t\tn.component(opt.noCode\n\t\t\t\t\t? null\n\t\t\t\t\t: new Elem(n => n.elem('div', { className: 'charlog--pad-small' }, [\n\t\t\t\t\t\tn.elem('div', { className: 'charlog--code' }, [\n\t\t\t\t\t\t\tn.component(new Txt(\n\t\t\t\t\t\t\t\tself || opt.noCode\n\t\t\t\t\t\t\t\t\t? \"stop follow\"\n\t\t\t\t\t\t\t\t\t: \"stop lead \" + fullname(c)\n\t\t\t\t\t\t\t\t, { tagName: 'code' })),\n\t\t\t\t\t\t]),\n\t\t\t\t\t])),\n\t\t\t\t),\n\t\t\t]),\n\t\t]));\n\t}\n}\n\nexport default FollowEvent;\n","import { Elem, Txt, Html } from 'modapp-base-component';\nimport l10n from 'modapp-l10n';\nimport escapeHtml from 'utils/escapeHtml';\nimport fullname from 'utils/fullname';\n\nconst txtControlRequest = l10n.l('charLog.controlRequest', \"Control request\");\nconst txtRequestToTakeControl = l10n.l('charlog.requestToTakeControl', \" request to take over control of \");\nconst txtHowtoGrantControl = l10n.l('charLog.howtoGrantControl', \". To grant the request, type:\");\nconst txtHowtoDenyControl = l10n.l('charLog.howtoDenyControl', \"To deny the request, type:\");\n\nclass ControlRequestEvent extends Elem {\n\tconstructor(charId, ev, opt) {\n\t\topt = opt || {};\n\t\tlet c = ev.char;\n\t\tlet t = ev.target;\n\t\tsuper(n => n.elem('div', [\n\t\t\tn.elem('div', { className: 'charlog--fieldset' }, [\n\t\t\t\tn.elem('div', { className: 'charlog--fieldset-label' }, [\n\t\t\t\t\tn.component(new Txt(txtControlRequest)),\n\t\t\t\t]),\n\t\t\t\tn.component(new Txt(c && c.name, { className: 'charlog--char' })),\n\t\t\t\tn.component(new Txt(txtRequestToTakeControl)),\n\t\t\t\tn.component(new Txt(t && t.name, { className: 'charlog--char' })),\n\t\t\t\tn.component(opt.noCode ? '.' : new Txt(txtHowtoGrantControl)),\n\t\t\t\tn.component(opt.noCode\n\t\t\t\t\t? null\n\t\t\t\t\t: new Elem(n => n.elem('div', { className: 'charlog--pad-small' }, [\n\t\t\t\t\t\tn.elem('div', { className: 'charlog--code' }, [\n\t\t\t\t\t\t\tn.component(new Html('grant control <span class=\"opt\">' + escapeHtml(fullname(c)) + '</span>', { tagName: 'code' })),\n\t\t\t\t\t\t]),\n\t\t\t\t\t])),\n\t\t\t\t),\n\t\t\t\tn.component(opt.noCode ? null : new Txt(txtHowtoDenyControl)),\n\t\t\t\tn.component(opt.noCode\n\t\t\t\t\t? null\n\t\t\t\t\t: new Elem(n => n.elem('div', { className: 'charlog--pad-small' }, [\n\t\t\t\t\t\tn.elem('div', { className: 'charlog--code' }, [\n\t\t\t\t\t\t\tn.component(new Html('deny control <span class=\"opt\">' + escapeHtml(fullname(c)) + '</span> <span class=\"opt\">= <span class=\"param\">Reason</span></span>', { tagName: 'code' })),\n\t\t\t\t\t\t]),\n\t\t\t\t\t])),\n\t\t\t\t),\n\t\t\t\tn.component(ev.msg\n\t\t\t\t\t? new Txt('\"' + ev.msg + '\"')\n\t\t\t\t\t: null,\n\t\t\t\t),\n\t\t\t]),\n\t\t]));\n\t}\n}\n\nexport default ControlRequestEvent;\n","import { Elem, Txt, Html } from 'modapp-base-component';\nimport l10n from 'modapp-l10n';\nimport formatText from 'utils/formatText';\nimport fullname from 'utils/fullname';\n\nclass DndEvent extends Elem {\n\tconstructor(charId, ev) {\n\t\tlet c = ev.char;\n\t\tsuper(n => n.elem('div', [\n\t\t\tn.elem('div', { className: 'charlog--fieldset' }, [\n\t\t\t\tn.elem('div', { className: 'charlog--fieldset-label' }, [\n\t\t\t\t\tn.component(new Txt(l10n.l('charLog.notSentTo', \"{fullname} is set as Do not Disturb\", { fullname: fullname(c) }))),\n\t\t\t\t]),\n\t\t\t\tn.component(new Html(formatText(ev.msg), { tagName: 'span', className: 'common--formattext' })),\n\t\t\t]),\n\t\t]));\n\t}\n}\n\nexport default DndEvent;\n","import CharLogComponent from './CharLogComponent';\nimport { Transition } from 'modapp-base-component';\nimport { Model, Collection, sortOrderCompare } from 'modapp-resource';\nimport ResizeObserverComponent from 'components/ResizeObserverComponent';\nimport Err from 'classes/Err';\nimport getCtrlId from 'utils/getCtrlId';\nimport { isTargeted } from 'utils/charEvent';\nimport {\n\tmsgEvent,\n\tsayEvent,\n\tmethodMsgEvent,\n\ttravelEvent,\n\tstopFollowEvent,\n\tstopLeadEvent,\n} from './charLogEvents';\nimport CharLogEvent from './CharLogEvent';\nimport ErrorEvent from './ErrorEvent';\nimport InfoEvent from './InfoEvent';\nimport WhisperEvent from './WhisperEvent';\nimport DescribeEvent from './DescribeEvent';\nimport MessageEvent from './MessageEvent';\nimport SummonEvent from './SummonEvent';\nimport JoinEvent from './JoinEvent';\nimport OocEvent from './OocEvent';\nimport WarnEvent from './WarnEvent';\nimport MailEvent from './MailEvent';\nimport AddressEvent from './AddressEvent';\nimport LeadRequestEvent from './LeadRequestEvent';\nimport FollowRequestEvent from './FollowRequestEvent';\nimport FollowEvent from './FollowEvent';\nimport ControlRequestEvent from './ControlRequestEvent';\nimport DndEvent from './DndEvent';\nimport './charLog.scss';\nimport './charLogEvent.scss';\nimport './charLogHighlight.scss';\n\n\nconst componentFactories = {\n\tcomponent: (charId, ev) => ev.component,\n\terror: (charId, ev) => new ErrorEvent(charId, ev),\n\tinfo: (charId, ev) => new InfoEvent(charId, ev),\n\tsay: (charId, ev) => sayEvent(charId, ev, true),\n\tpose: (charId, ev) => msgEvent(charId, ev, true),\n\twakeup: (charId, ev) => methodMsgEvent(charId, ev, 'wakeup'),\n\tsleep: (charId, ev) => methodMsgEvent(charId, ev, 'sleep'),\n\tleave: (charId, ev) => methodMsgEvent(charId, ev, ev.method),\n\tarrive: (charId, ev) => methodMsgEvent(charId, ev, ev.method),\n\ttravel: (charId, ev) => travelEvent(charId, ev),\n\twhisper: (charId, ev) => new WhisperEvent(charId, ev),\n\tmessage: (charId, ev) => new MessageEvent(charId, ev),\n\tdescribe: (charId, ev) => new DescribeEvent(charId, ev),\n\tsummon: (charId, ev, opt) => new SummonEvent(charId, ev, opt),\n\tjoin: (charId, ev, opt) => new JoinEvent(charId, ev, opt),\n\tooc: (charId, ev) => new OocEvent(charId, ev),\n\twarn: (charId, ev) => new WarnEvent(charId, ev),\n\taction: (charId, ev) => msgEvent(charId, ev),\n\tmail: (charId, ev) => new MailEvent(charId, ev),\n\taddress: (charId, ev) => new AddressEvent(charId, ev),\n\tleadRequest: (charId, ev, opt) => new LeadRequestEvent(charId, ev, opt),\n\tfollowRequest: (charId, ev, opt) => new FollowRequestEvent(charId, ev, opt),\n\tfollow: (charId, ev, opt) => new FollowEvent(charId, ev, opt),\n\tstopFollow: (charId, ev, opt) => stopFollowEvent(charId, ev, opt),\n\tstopLead: (charId, ev, opt) => stopLeadEvent(charId, ev, opt),\n\tcontrolRequest: (charId, ev, opt) => new ControlRequestEvent(charId, ev, opt),\n\tdnd: (charId, ev) => new DndEvent(charId, ev),\n};\n\n// Event types that should not increase unseen counter.\nconst ignoreUnseen = {\n\tcontrol: true,\n\trelease: true,\n};\n\n/**\n * CharLog draws the log for characters.\n */\nclass CharLog {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\tthis.initialChunkSize = params && parseInt(params.initialChunkSize) || 100;\n\t\tthis.chunkSize = params && parseInt(params.chunkSize) || 20;\n\n\t\t// Bind callbacks\n\t\tthis._onCtrlAdd = this._onCtrlAdd.bind(this);\n\t\tthis._onCtrlRemove = this._onCtrlRemove.bind(this);\n\t\tthis._onActiveChange = this._onActiveChange.bind(this);\n\t\tthis._onOut = this._onOut.bind(this);\n\t\tthis._onVisibilityChange = this._onVisibilityChange.bind(this);\n\n\t\tthis.app.require([\n\t\t\t'player',\n\t\t\t'charLogStore',\n\t\t\t'layout',\n\t\t\t'highlightSettings',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\t\tthis.localId = 0;\n\t\tthis.sessionId = Math.random().toString(36).substring(7);\n\t\tthis.activeCharId = null;\n\t\tthis.isHidden = 0;\n\n\t\tthis.logs = {};\n\t\tthis.hasMore = {};\n\t\tthis.factories = {};\n\t\tthis.handlers = {};\n\t\tthis.controlled = null;\n\t\tthis.addingEvent = {};\n\n\t\tthis.viewport = new Model({ data: { x: 0, y: 0, width: 0, height: 0 }, eventbus: this.app.eventBus });\n\t\tthis.unseen = new Model({ eventBus: this.app.eventBus });\n\t\tthis.unseenTargeted = new Model({ eventBus: this.app.eventBus });\n\t\tthis.menuItems = new Collection({\n\t\t\tidAttribute: m => m.id,\n\t\t\tcompare: sortOrderCompare,\n\t\t\teventBus: this.app.eventBus,\n\t\t});\n\t\tthis.overlays = new Collection({\n\t\t\tidAttribute: m => m.id,\n\t\t\tcompare: sortOrderCompare,\n\t\t\teventBus: this.app.eventBus,\n\t\t});\n\t\tthis.modifiers = new Collection({\n\t\t\tidAttribute: m => m.id,\n\t\t\tcompare: sortOrderCompare,\n\t\t\teventBus: this.app.eventBus,\n\t\t});\n\n\t\tfor (let k in componentFactories) {\n\t\t\tthis.addEventComponentFactory(k, componentFactories[k]);\n\t\t}\n\n\t\tthis.transition = new Transition({ className: 'charlog' });\n\t\tthis.component = new ResizeObserverComponent(this.transition, (rect) => rect && this.viewport.set(rect));\n\t\tthis.charComponents = {};\n\n\t\tthis._setListeners(true);\n\t\tdocument.addEventListener('visibilitychange', this._onVisibilityChange);\n\t}\n\n\t/**\n\t * Returns the charLog component.\n\t * @returns {Component} CharLog component.\n\t */\n\tgetComponent() {\n\t\treturn this.component;\n\t}\n\n\t/**\n\t * Returns the viewport model that gives the x, y, width, and height of the\n\t * charlog viewport.\n\t * @returns {Model} Viewport model.\n\t */\n\tgetViewportModel() {\n\t\treturn this.viewport;\n\t}\n\n\t/**\n\t * Returns the log collection for the given ctrlId.\n\t * @param {string} char Controlled character.\n\t * @param {number} [chunk] Chunk number. Defaults to 0;\n\t * @returns {Promise.<Collection>} Promise of a log collection.\n\t */\n\tgetLog(char, chunk) {\n\t\tlet ctrlId = getCtrlId(char);\n\t\tchunk = chunk || 0;\n\t\tlet l = this.logs[ctrlId];\n\t\tif (!l) {\n\t\t\tl = [];\n\t\t\tthis.logs[ctrlId] = l;\n\t\t}\n\n\t\tif (l[chunk]) {\n\t\t\treturn l[chunk];\n\t\t}\n\n\t\tif (chunk > l.length) {\n\t\t\tthrow new Error(\"Cannot read log chunk \" + String(chunk) + \" before reading chunk \" + String(chunk - 1));\n\t\t}\n\n\t\tif (chunk && !this.hasMore[ctrlId]) {\n\t\t\treturn Promise.resolve(null);\n\t\t}\n\n\t\tl[chunk] = (chunk > 0\n\t\t\t? l[chunk - 1]\n\t\t\t: Promise.resolve(null)\n\t\t).then(prevBlock => {\n\t\t\tlet lastEv = null;\n\t\t\tif (prevBlock) {\n\t\t\t\tlastEv = Array.isArray(prevBlock) ? prevBlock[0] : prevBlock.atIndex(0);\n\t\t\t}\n\n\t\t\tlet started = !lastEv;\n\t\t\tlet hasMore = false;\n\t\t\tlet events = [];\n\t\t\tlet chunkSize = chunk ? this.chunkSize : this.initialChunkSize;\n\t\t\treturn this.module.charLogStore.getEvents(ctrlId, lastEv ? lastEv.time : null, ev => {\n\t\t\t\t// Skip events with identical timestamps, until we've passed last event.\n\t\t\t\tif (!started) {\n\t\t\t\t\tif (lastEv.time > ev.time) {\n\t\t\t\t\t\tstarted = true;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (lastEv.id == ev.id) {\n\t\t\t\t\t\t\tstarted = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (events.length >= chunkSize) {\n\t\t\t\t\thasMore = true;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\t// Add the event\n\t\t\t\tevents.unshift(ev);\n\t\t\t}).catch(err => {\n\t\t\t\tconsole.error(\"[CharLog] Failed to load log for char \" + ctrlId + \" (\" + chunk + \"): \", err);\n\t\t\t}).then(() => {\n\t\t\t\tthis.hasMore[ctrlId] = hasMore;\n\t\t\t\treturn chunk\n\t\t\t\t\t? events\n\t\t\t\t\t: new Collection({ data: events, eventBus: this.app.eventBus });\n\t\t\t});\n\t\t});\n\n\t\treturn l[chunk];\n\t}\n\n\t/**\n\t * Returns the unseen model.\n\t * @returns {Model} Model where the key is the char ID and value is numbers of unseen log entries.\n\t */\n\tgetUnseen() {\n\t\treturn this.unseen;\n\t}\n\n\t/**\n\t * Returns the unseen targeted model.\n\t * @returns {Model} Model where the key is the char ID and value is numbers of unseen targeted log entries.\n\t */\n\tgetUnseenTargeted() {\n\t\treturn this.unseenTargeted;\n\t}\n\n\t/**\n\t * Adds a component to a character log, generating a local event ID.\n\t * @param {string} char Controlled character.\n\t * @param {string} type Event type.\n\t * @param {Component} component Component.\n\t * @param {object}[opt] Optional params.\n\t * @param {Date} [opt.time] Optional timestamp. Defaults to now.\n\t * @param {boolean} [opt.noMenu] Optional noMenu flag. Defaults to true.\n\t */\n\tlogComponent(char, type, component, opt) {\n\t\tthis.getLog(char).then(l => l.add({\n\t\t\tid: this._getLogId(),\n\t\t\ttype,\n\t\t\ttime: this._getTimestamp(l, opt?.time),\n\t\t\tcomponent,\n\t\t\tnoMenu: opt && opt.hasOwnProperty('noMenu') ? opt.noMenu : true,\n\t\t\tnoReport: true,\n\t\t}));\n\t}\n\n\t/**\n\t * Adds an info event to a character log, generating a local event ID.\n\t * @param {string} char Controlled character.\n\t * @param {string|LocaleString} msg Info message.\n\t * @param {object}[opt] Optional params.\n\t * @param {Date} [opt.time] Optional timestamp. Defaults to now.\n\t * @param {boolean} [opt.noMenu] Optional noMenu flag. Defaults to true.\n\t */\n\tlogInfo(char, msg, opt) {\n\t\tthis.getLog(char).then(l => l.add({\n\t\t\tid: this._getLogId(),\n\t\t\ttype: 'info',\n\t\t\ttime: this._getTimestamp(l, opt?.time),\n\t\t\tmsg,\n\t\t\tnoMenu: opt && opt.hasOwnProperty('noMenu') ? opt.noMenu : true,\n\t\t\tnoReport: true,\n\t\t}));\n\t}\n\n\t/**\n\t * Adds an error event to a character log, generating a local event ID.\n\t * @param {string} char Controlled character.\n\t * @param {object} err Error object with a message property.\n\t * @param {object}[opt] Optional params.\n\t * @param {Date} [opt.time] Optional timestamp. Defaults to now.\n\t * @param {boolean} [opt.noMenu] Optional noMenu flag. Defaults to true.\n\t */\n\tlogError(char, err, opt) {\n\t\tthis.getLog(char).then(l => l.add({\n\t\t\tid: this._getLogId(),\n\t\t\ttype: 'error',\n\t\t\ttime: this._getTimestamp(l, opt?.time),\n\t\t\terror: err,\n\t\t\tnoMenu: opt && opt.hasOwnProperty('noMenu') ? opt.noMenu : true,\n\t\t\tnoReport: true,\n\t\t}));\n\t}\n\n\tgetEventComponentFactory(typ) {\n\t\treturn this.factories[typ];\n\t}\n\n\taddEventComponentFactory(typ, factory) {\n\t\tif (this.factories[typ]) {\n\t\t\tthrow new Error(typ + \" already registered.\");\n\t\t}\n\t\tthis.factories[typ] = factory;\n\t\treturn this;\n\t}\n\n\tremoveEventComponentFactory(typ) {\n\t\tdelete this.factories[typ];\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds an event handler.\n\t * @param {string} typ Event type.\n\t * @param {function} callback Callback function: function(charId, ev)\n\t * @returns {this}\n\t */\n\taddEventHandler(typ, callback) {\n\t\tlet hs = this.handlers[typ];\n\t\tif (!hs) {\n\t\t\ths = [];\n\t\t\tthis.handlers[typ] = hs;\n\t\t}\n\t\ths.push(callback);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Removes an event handler.\n\t * @param {string} typ Event type.\n\t * @param {function} callback Registered callback function\n\t * @returns {this}\n\t */\n\tremoveEventHandler(typ, callback) {\n\t\tlet hs = this.handlers[typ];\n\t\tif (hs) {\n\t\t\tlet idx = hs.indexOf(callback);\n\t\t\tif (idx >= 0) {\n\t\t\t\tif (hs.length == 1) {\n\t\t\t\t\tdelete this.handlers[typ];\n\t\t\t\t} else {\n\t\t\t\t\ths.splice(idx, 1);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds an item to the char log event menu.\n\t * @param {object} menuItem Menu item object.\n\t * @param {string} menuItem.id Menu item ID. Eg. 'reportAbuse'\n\t * @param {LocaleString} menuItem.name Display name. Eg. l10n.l('example.reportAbuse', \"Report abuse\")\n\t * @param {string} menuItem.icon Icon name as passed to FAIcon.\n\t * @param {function} menuItem.onClick Callback called on click.\n\t * @param {function} [menuItem.filter] Filter callback function: (charId, ev) => boolean\n\t * @param {number} [menuItem.sortOrder] Sort order number.\n\t * @returns {this}\n\t */\n\taddMenuItem(menuItem) {\n\t\tif (this.menuItems.get(menuItem.id)) {\n\t\t\tthrow new Error(\"Menu item ID already registered: \", menuItem.id);\n\t\t}\n\t\tthis.menuItems.add(menuItem);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Unregisters a previously registered menu item..\n\t * @param {string} menuItemId Menu item ID.\n\t * @returns {this}\n\t */\n\tremoveMenuItem(menuItemId) {\n\t\tthis.menuItems.remove(menuItemId);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Gets a collection of registered menu items.\n\t * @returns {Collection} Collection of registered menu items.\n\t */\n\tgetMenuItems() {\n\t\treturn this.menuItems;\n\t}\n\n\t/**\n\t * Registers a char log overlay component.\n\t * @param {object} overlay Overlay object\n\t * @param {string} overlay.id Overlay ID.\n\t * @param {number} overlay.sortOrder Sort order.\n\t * @param {function} overlay.componentFactory Overlay component factory: function(ctrl) -> Component\n\t * @returns {this}\n\t */\n\taddOverlay(overlay) {\n\t\tif (this.overlays.get(overlay.id)) {\n\t\t\tthrow new Error(\"Overlay ID already registered: \", overlay.id);\n\t\t}\n\t\tthis.overlays.add(overlay);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Unregisters a previously registered char log overlay.\n\t * @param {string} overlayId Overlay ID.\n\t * @returns {this}\n\t */\n\tremoveOverlay(overlayId) {\n\t\tthis.overlays.remove(overlayId);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Gets a collection of char log overlays.\n\t * @returns {Collection} Collection of registered char log overlays.\n\t */\n\tgetOverlays() {\n\t\treturn this.overlays;\n\t}\n\n\t/**\n\t * Registers an event modifier.\n\t * @param {object} modifier EventModifier object\n\t * @param {string} modifier.id EventModifier ID.\n\t * @param {number} modifier.sortOrder Sort order.\n\t * @param {(ctrl: Model, ev: object, mod: object) => void | Promise<void>} modifier.callback EventModifier callback. It thought mutate the mod object before returning or resolving its promise.\n\t * @returns {this}\n\t */\n\taddEventModifier(modifier) {\n\t\tif (this.modifiers.get(modifier.id)) {\n\t\t\tthrow new Error(\"EventModifier ID already registered: \", modifier.id);\n\t\t}\n\t\tthis.modifiers.add(modifier);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Unregisters a previously registered event modifier.\n\t * @param {string} modifierId EventModifier ID.\n\t * @returns {this}\n\t */\n\tremoveEventModifier(modifierId) {\n\t\tthis.modifiers.remove(modifierId);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Gets a collection of event modifiers.\n\t * @returns {Collection} Collection of registered event modifiers.\n\t */\n\tgetEventModifiers() {\n\t\treturn this.modifiers;\n\t}\n\n\t/**\n\t * Creates a new LogEvent component.\n\t * @param {*} charId ID of character receiving the event.\n\t * @param {*} ev Event\n\t * @param {*} opt Optional parameters.\n\t * @returns {Component}\n\t */\n\tgetLogEventComponent(charId, ev, opt) {\n\t\treturn new CharLogEvent(this.module, charId, ev, opt);\n\t}\n\n\t/**\n\t * Validates that the character is not controlled by a puppeteer.\n\t * @param {object} char Character model.\n\t * @param {object} err Error objects with code, message, and optional data parameter. Defaults to \"Puppets are not allowed to do that.\" error.\n\t * @returns {boolean} True if not controlled by a puppeteer, otherwise false.\n\t */\n\tvalidateNotPuppet(char, err) {\n\t\tif (char && char.puppeteer) {\n\t\t\tthis.logError(char.id, err || new Err('charLog.puppetAccessDenied', \"Puppets are not allowed to do that.\"));\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\t_setListeners(on) {\n\t\tlet p = this.module.player;\n\t\tlet cb = on ? 'on' : 'off';\n\t\tp[cb]('ctrlAdd', this._onCtrlAdd);\n\t\tp[cb]('ctrlRemove', this._onCtrlRemove);\n\t\tp[cb]('activeChange', this._onActiveChange);\n\t}\n\n\t_onCtrlAdd(ev) {\n\t\tlet char = ev.char;\n\t\tthis.charComponents[char.id] = new CharLogComponent(this.module, char, {\n\t\t\tonAtBottom: this._onAtBottom.bind(this, char.id),\n\t\t});\n\t\tchar.on('out', this._onOut);\n\t\tthis.unseen.set({ [char.id]: 0 });\n\t\tthis.unseenTargeted.set({ [char.id]: 0 });\n\n\t\t// Check if last event was after character was controlled.\n\t\t// If so, we shouldn't add a control event.\n\t\tthis.getLog(char).then(l => {\n\t\t\tlet idx = l.length - 1;\n\t\t\tif (idx >= 0) {\n\t\t\t\tlet last = l.atIndex(idx);\n\t\t\t\tif (last.time && char.ctrlSince && last.time >= char.ctrlSince) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.addEvent({\n\t\t\t\tid: this._getLogId(),\n\t\t\t\ttype: 'control',\n\t\t\t\ttime: char.ctrlSince || this._getTimestamp(l),\n\t\t\t\thchar: {\n\t\t\t\t\tid: char.id,\n\t\t\t\t\tname: char.name,\n\t\t\t\t\tsurname: char.surname,\n\t\t\t\t},\n\t\t\t}, char);\n\t\t});\n\t}\n\n\t_onCtrlRemove(ev) {\n\t\tlet char = ev.char;\n\t\tlet comp = this.charComponents[char.id];\n\t\tdelete this.charComponents[char.id];\n\t\tif (comp) {\n\t\t\tcomp.dispose();\n\t\t}\n\t\tchar.off('out', this._onOut);\n\t\tthis.unseen.set({ [char.id]: undefined });\n\t\tthis.unseenTargeted.set({ [char.id]: undefined });\n\t\tthis.getLog(char).then(l => {\n\t\t\tthis.addEvent({\n\t\t\t\tid: this._getLogId(),\n\t\t\t\ttype: 'release',\n\t\t\t\ttime: this._getTimestamp(l),\n\t\t\t}, char);\n\t\t});\n\t}\n\n\t_onActiveChange(ev) {\n\t\tlet char = ev.char;\n\t\tif (char) {\n\t\t\tlet c = this.charComponents[char.id];\n\t\t\tif (ev.dir > 0) {\n\t\t\t\tthis.transition.slideLeft(c);\n\t\t\t} if (ev.dir < 0) {\n\t\t\t\tthis.transition.slideRight(c);\n\t\t\t} else {\n\t\t\t\tthis.transition.fade(c);\n\t\t\t}\n\t\t}\n\t\tthis.activeCharId = char ? char.id : null;\n\t}\n\n\t_onOut(ev, ctrl) {\n\t\tthis.addEvent(ev, ctrl);\n\t}\n\n\t/**\n\t * Adds a raw event to the log.\n\t * @param {object} ev Event to add\n\t * @param {object} ctrl Controlled character\n\t * @returns {Promise} Promise of the event being added.\n\t */\n\tasync addEvent(ev, ctrl) {\n\t\tlet l = await this.getLog(ctrl);\n\n\t\t// Creates a unique id for the controller and event to be used with\n\t\t// this.addingEvent to ensure it is duplicated by being added from two\n\t\t// sources.\n\t\tlet ctrlId = getCtrlId(ctrl);\n\t\tlet ctrlEvId = ctrlId + '_' + ev.id;\n\n\t\t// Quick exit if log entry already exists\n\t\tif (l.get(ev.id) || this.addingEvent[ctrlEvId]) {\n\t\t\treturn;\n\t\t}\n\t\tthis.addingEvent[ctrlEvId] = ev;\n\n\t\ttry {\n\n\t\t\t// Add event modifiers\n\t\t\tlet mod = await this._getEventModifications(ev, ctrl);\n\t\t\tif (mod) {\n\t\t\t\tev.mod = mod;\n\t\t\t}\n\n\t\t\t// Ensure to insert it at right position\n\t\t\tlet i = l.length;\n\t\t\tlet time = ev.time;\n\t\t\tif (time) {\n\t\t\t\twhile (i > 0 && (l.atIndex(i - 1).time || 0) > time) {\n\t\t\t\t\ti--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ttime = (new Date()).getTime();\n\t\t\t\tif (l.length) {\n\t\t\t\t\tlet lastTime = l.atIndex(l.length - 1).time || 0;\n\t\t\t\t\tif (time < lastTime) {\n\t\t\t\t\t\ttime = lastTime + 1;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tev.time = time;\n\t\t\t}\n\t\t\tl.add(ev, i);\n\n\n\t\t\tthis.module.charLogStore.addEvent(ctrlId, ev);\n\t\t\t// Call (notification) handler if we have one\n\t\t\tlet hs = this.handlers[ev.type];\n\t\t\tif (hs) {\n\t\t\t\tfor (let h of hs) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\th(ctrl.id, ev);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tconsole.error(\"[CharLog] Error calling event handler: \", e);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// If log is not visible, increase unseen with 1\n\t\t\tif (!this._isVisible(ctrl.id) &&\n\t\t\t\tthis.unseen.props.hasOwnProperty(ctrl.id) &&\n\t\t\t\t!ignoreUnseen[ev.type] &&\n\t\t\t\t(!mod || !mod.muted)\n\t\t\t) {\n\t\t\t\tthis.unseen.set({ [ctrl.id]: this.unseen.props[ctrl.id] + 1 });\n\t\t\t\t// Increase targeted if character is the target\n\t\t\t\tif (isTargeted(ctrl.id, ev)) {\n\t\t\t\t\tthis.unseenTargeted.set({ [ctrl.id]: this.unseenTargeted.props[ctrl.id] + 1 });\n\t\t\t\t}\n\t\t\t}\n\t\t} finally {\n\t\t\tdelete this.addingEvent[ctrlEvId];\n\t\t}\n\t}\n\n\tsetIsHidden(hidden) {\n\t\tthis.isHidden += hidden ? 1 : -1;\n\t\tthis._onVisibilityChange();\n\t}\n\n\t// Checks if the characters log is visible and scrolled to the bottom.\n\t_isVisible(charId) {\n\t\tif (document.visibilityState == 'visible' &&\n\t\t\tcharId === this.activeCharId &&\n\t\t\t!this.isHidden\n\t\t) {\n\t\t\tlet c = this.charComponents[charId];\n\t\t\treturn c && c.isRendered() && c.atBottom();\n\t\t}\n\t\treturn false;\n\t}\n\n\t// Check if we are at the bottom, and if so, set unseen to seen.\n\t_onAtBottom(charId, v) {\n\t\tif (charId == this.activeCharId && this._isVisible(charId)) {\n\t\t\t// If we are at bottom, set unseen to 0\n\t\t\tif (v) {\n\t\t\t\tif (this.unseen.props.hasOwnProperty(charId)) {\n\t\t\t\t\tthis.unseen.set({ [charId]: 0 });\n\t\t\t\t\tthis.unseenTargeted.set({ [charId]: 0 });\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t_onVisibilityChange() {\n\t\tthis._onAtBottom(this.activeCharId, true);\n\t}\n\n\t_getLogId() {\n\t\treturn '_' + this.sessionId + '_' + this.localId++;\n\t}\n\n\t_getTimestamp(log, time) {\n\t\tif (time) {\n\t\t\treturn typeof time == 'number' ? time : time.getTime();\n\t\t}\n\n\t\ttime = (new Date()).getTime();\n\t\tif (log.length) {\n\t\t\tlet lastTime = log.atIndex(log.length - 1).time || 0;\n\t\t\tif (time < lastTime) {\n\t\t\t\ttime = lastTime + 1;\n\t\t\t}\n\t\t}\n\t\treturn time;\n\t}\n\n\t// Gets modifications to be applied client side to an event.\n\t// These modifications may be things like muted, or highlighted words.\n\tasync _getEventModifications(ev, ctrl) {\n\t\tlet mod = {};\n\t\tfor (let m of this.modifiers) {\n\t\t\tawait Promise.resolve(m.callback(ev, ctrl, mod));\n\t\t}\n\n\t\treturn Object.keys(mod).length ? mod : null;\n\t}\n\n\tdispose() {\n\t\tthis._setListeners(false);\n\t\tthis.charComponents = {};\n\t\tdocument.removeEventListener('visibilitychange', this._onVisibilityChange);\n\t}\n}\n\nexport default CharLog;\n","import { Elem, Txt } from 'modapp-base-component';\nimport { ModelComponent } from 'modapp-resource-component';\nimport l10n from 'modapp-l10n';\nimport LabelToggleBox from 'components/LabelToggleBox';\nimport FAIcon from 'components/FAIcon';\n\n/**\n * CharLogSettings adds a settings tool for CharLog to PagePlayerSettings.\n */\nclass CharLogSettings {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'settings', 'pagePlayerSettings', 'confirm' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\n\t\t// Settings\n\t\tthis.settingsPromise = this.module.settings.loadSettings('charLog', {\n\t\t\tuseLocalStorage: true,\n\t\t});\n\n\t\tthis.settingsPromise.then(settings => {\n\t\t\tthis.module.pagePlayerSettings.addTool({\n\t\t\t\tid: 'charLog',\n\t\t\t\tsortOrder: 20,\n\t\t\t\tcomponentFactory: (user, player, state) => new ModelComponent(\n\t\t\t\t\tsettings,\n\t\t\t\t\tnew LabelToggleBox(l10n.l('charLogSettings.storeLog', \"Store log between sessions\"), false, {\n\t\t\t\t\t\tclassName: 'common--formmargin',\n\t\t\t\t\t\tonChange: (v, c) => {\n\t\t\t\t\t\t\tif (v === settings.useLocalStorage) return;\n\n\t\t\t\t\t\t\tthis.module.confirm.open(() => settings.set({ useLocalStorage: v }), {\n\t\t\t\t\t\t\t\ttitle: v\n\t\t\t\t\t\t\t\t\t? l10n.l('charLogSettings.confirmStoreLogs', \"Confirm store logs\")\n\t\t\t\t\t\t\t\t\t: l10n.l('charLogSettings.confirmDiscardLogs', \"Confirm discard logs\"),\n\t\t\t\t\t\t\t\tbody: new Elem(n => n.elem('div', [\n\t\t\t\t\t\t\t\t\tn.component(new Txt(v\n\t\t\t\t\t\t\t\t\t\t? l10n.l('charLogSettings.storeLogsBody', \"Do you wish to store chat logs in your browser between sessions?\")\n\t\t\t\t\t\t\t\t\t\t: l10n.l('charLogSettings.discardLogsBody', \"Do you wish to discard chat logs between sessions?\"), { tagName: 'p' })),\n\t\t\t\t\t\t\t\t\tn.elem('p', { className: 'dialog--error' }, [\n\t\t\t\t\t\t\t\t\t\tn.component(new FAIcon('exclamation-triangle')),\n\t\t\t\t\t\t\t\t\t\tn.html(\" \"),\n\t\t\t\t\t\t\t\t\t\tn.component(new Txt(v\n\t\t\t\t\t\t\t\t\t\t\t? l10n.l('charLogSettings.storeLogsWarning', \"Others using the same computer may be able to access your logs.\")\n\t\t\t\t\t\t\t\t\t\t\t: l10n.l('charLogSettings.discardLogsWarning', \"Any logs stored on this browser will be irretrievably lost.\"),\n\t\t\t\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\t\t])),\n\t\t\t\t\t\t\t\tconfirm: v\n\t\t\t\t\t\t\t\t\t? l10n.l('charLogSettings.storeLogs', \"Store logs\")\n\t\t\t\t\t\t\t\t\t: l10n.l('charLogSettings.discardLogs', \"Discard logs\"),\n\t\t\t\t\t\t\t\tonClose: () => c.setValue(settings.useLocalStorage, false),\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t},\n\t\t\t\t\t\tpopupTip: l10n.l('charLogSettings.storeLogInfo', \"Keep the chat logs between sessions, even if you close the tab or browser.\\nBeware that others using the same computer may be able to access them.\"),\n\t\t\t\t\t\tpopupTipClassName: 'popuptip--width-s',\n\t\t\t\t\t}),\n\t\t\t\t\t(m, c) => c.setValue(settings.useLocalStorage, false),\n\t\t\t\t),\n\t\t\t});\n\t\t});\n\t}\n\n\t/**\n\t * @typedef {object} CharLogSettings\n\t * @property {bool} useLocalStorage Flag telling if localStorage should be used, instead of sessionStorage, to store logs.\n\t */\n\n\t/**\n\t * Returns a promise to the charLog settings.\n\t * @returns {Promise.<CharLogSettings>} Promise of settings.\n\t */\n\tgetSettingsPromise() {\n\t\treturn this.settingsPromise;\n\t}\n\n\tdispose() {\n\t\tthis.module.pagePlayerSettings.removeTool('charLog');\n\t}\n}\n\nexport default CharLogSettings;\n","/**\n * Turns an indexedDB request into a promise.\n * @param {*} req IndexedDB request.\n * @param {function} [onSuccess] Optional callback that handles a success and returns the resolved value. Defaults to: function(req, ev) -> ev\n * @param {function} [onError] Optional callback that handles an error and returns the rejected value. Defaults to: function(req, ev) -> ev\n * @returns {Promise} Promise of the request.\n */\nexport default function requestToPromise(req, onSuccess, onError) {\n\treturn new Promise((resolve, reject) => {\n\t\treq.onsuccess = ev => {\n\t\t\tresolve(onSuccess ? onSuccess(req, ev) : ev);\n\t\t};\n\t\treq.onerror = ev => {\n\t\t\treject(onError ? onError(req, ev) : ev);\n\t\t};\n\t});\n}\n","import indexedDB from 'utils/indexedDB';\nimport requestToPromise from 'utils/requestToPromise';\n\nconst charLogDBPrefix = 'charLog.';\nconst eventStore = 'event';\nconst timeIndex = 'time';\nconst charIdIndex = 'charId';\nconst logStoragePrefix = 'log.';\n\nfunction getKey(ctrlId, ev) {\n\treturn logStoragePrefix + ('0' + ev.time).slice(-13) + '.' + ev.id + '.' + ctrlId;\n}\n\n/**\n * CharLogStore stores character logs.\n */\nclass CharLogStore {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\tthis.useLocalStorage = params.useLocalStorage || !indexedDB;\n\n\t\t// Bind callbacks\n\t\tthis._onSettingsChange = this._onSettingsChange.bind(this);\n\n\t\tthis.app.require([ 'charLogSettings', 'player', 'auth' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\n\t\tthis.module.charLogSettings.getSettingsPromise().then(settings => {\n\t\t\tthis.settings = settings;\n\t\t\tthis._listenSettings(true);\n\t\t\tthis._onSettingsChange();\n\t\t\treturn settings;\n\t\t});\n\n\t\tthis.dbPromise = null;\n\t\tthis.db = null;\n\t}\n\n\t_listenSettings(on) {\n\t\tif (this.settings) {\n\t\t\tthis.settings[on ? 'on' : 'off']('change', this._onSettingsChange);\n\t\t}\n\t}\n\n\t_getDb() {\n\t\tif (!this.dbPromise) {\n\t\t\tthis.dbPromise = this.module.charLogSettings.getSettingsPromise()\n\t\t\t\t.then(settings => this._openDB(settings));\n\t\t}\n\t\treturn this.dbPromise;\n\t}\n\n\t/**\n\t * Add an event to the store.\n\t * @param {string} ctrlId ID of controlled character. May be a combined ID if a puppet.\n\t * @param {object} ev Object event. Must have a unique id value.\n\t * @returns {Promise.<boolean>} Promise to setting the event object. The boolean flags if the setting was successful.\n\t */\n\taddEvent(ctrlId, ev) {\n\t\treturn this._getDb()\n\t\t\t.then(db => this._addIndexedDBEvent(db, ctrlId, ev))\n\t\t\t.catch(() => this._addStorageEvent(ctrlId, ev));\n\t}\n\n\t/**\n\t * Get a char object as seen last by a controlled character from the store.\n\t * @param {string} ctrlId ID of controlled character. May be a combined ID if a puppet.\n\t * @param {number} time Timestamp in milliseconds from where to start fetching.\n\t * @param {function} onEach Callback that that is called on each found item. If it returns false, the iteration will stop\n\t * @returns {Promise.<object>} Promise to char object.\n\t */\n\tgetEvents(ctrlId, time, onEach) {\n\t\treturn this._getDb()\n\t\t\t.then(db => this._getIndexedDBEvents(db, ctrlId, time, onEach))\n\t\t\t.catch(() => this._getStorageEvents(ctrlId, time, onEach));\n\t}\n\n\t_addIndexedDBEvent(db, ctrlId, ev) {\n\t\treturn requestToPromise(\n\t\t\tdb.transaction(eventStore, 'readwrite')\n\t\t\t\t.objectStore(eventStore)\n\t\t\t\t.put({ ctrlId, ev }),\n\t\t\t(req, ev) => true,\n\t\t\t(req, ev) => console.error(\"Failed to store event: \", ctrlId, ev),\n\t\t);\n\t}\n\n\t_addStorageEvent(ctrlId, ev) {\n\t\tthis._loadSessionStore();\n\t\tif (!this.keys) return;\n\n\t\tlet store = window.sessionStorage;\n\t\tlet key = getKey(ctrlId, ev);\n\t\tlet data = JSON.stringify(ev);\n\t\tlet retry = 100;\n\t\twhile (retry) {\n\t\t\ttry {\n\t\t\t\tstore.setItem(key, data);\n\t\t\t\tthis.keys.push(key);\n\t\t\t\treturn;\n\t\t\t} catch (e) {\n\t\t\t\tconsole.error(\"Error writing char log: \", key, e);\n\t\t\t\t// Probably out of space. Try to remove oldest key\n\t\t\t\tif (!this.keys.length) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tretry--;\n\t\t\t\tif (!retry) throw e;\n\t\t\t\tstore.removeItem(this.keys.shift());\n\t\t\t}\n\t\t}\n\t}\n\n\t_getIndexedDBEvents(db, ctrlId, time, onEach, mode) {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlet req = db.transaction(eventStore, mode || 'readonly')\n\t\t\t\t.objectStore(eventStore)\n\t\t\t\t.index(timeIndex)\n\t\t\t\t.openCursor(IDBKeyRange.upperBound([ ctrlId, time || Number.MAX_SAFE_INTEGER ]), 'prev');\n\t\t\treq.onsuccess = e => {\n\t\t\t\tlet cursor = e.target.result;\n\n\t\t\t\tif (cursor) {\n\t\t\t\t\tlet v = cursor.value;\n\t\t\t\t\tif (v.ctrlId == ctrlId && onEach(cursor.value.ev, cursor) !== false) {\n\t\t\t\t\t\tcursor.continue();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tresolve(req);\n\t\t\t};\n\t\t\treq.onerror = e => {\n\t\t\t\treject(e);\n\t\t\t};\n\t\t});\n\t}\n\n\t_getStorageEvents(ctrlId, time, onEach) {\n\t\tlet l = this._getSessionLog(ctrlId);\n\t\tif (!l) {\n\t\t\treturn Promise.resolve();\n\t\t}\n\n\t\treturn new Promise((resolve) => {\n\t\t\tfor (let i = l.length - 1; i >= 0; i--) {\n\t\t\t\tlet ev = l[i];\n\t\t\t\tif (time && time < ev.time) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (onEach(ev) === false) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tresolve();\n\t\t});\n\t}\n\n\t_getSessionLog(ctrlId) {\n\t\tthis._loadSessionStore();\n\t\treturn this.charLogs && this.charLogs[ctrlId];\n\t}\n\n\t_loadSessionStore() {\n\t\tlet store = window.sessionStorage;\n\t\tif (!store || this.keys) return;\n\n\t\tlet len = store.length;\n\t\tlet keys = [];\n\t\tlet charLogs = {};\n\t\tfor (let i = 0; i < len; i++) {\n\t\t\tlet k = store.key(i);\n\t\t\tif (k && k.substring(0, logStoragePrefix.length) == logStoragePrefix) {\n\t\t\t\tkeys.push(k);\n\t\t\t}\n\t\t}\n\n\t\tkeys.sort();\n\n\t\tfor (let k of keys) {\n\t\t\tlet idx = k.lastIndexOf('.');\n\t\t\tif (idx < 0) continue;\n\n\t\t\ttry {\n\t\t\t\tlet ev = JSON.parse(store.getItem(k));\n\t\t\t\tif (ev) {\n\t\t\t\t\tlet ctrlId = k.slice(idx + 1);\n\t\t\t\t\tlet l = charLogs[ctrlId];\n\t\t\t\t\tif (!l) {\n\t\t\t\t\t\tl = [];\n\t\t\t\t\t\tcharLogs[ctrlId] = l;\n\t\t\t\t\t}\n\t\t\t\t\tl.push(ev);\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\tconsole.error(\"Error loading log key \" + k + \": \", e);\n\t\t\t}\n\t\t}\n\n\t\tthis.keys = keys;\n\t\tthis.charLogs = charLogs;\n\t}\n\n\t_openDB(settings) {\n\t\tif (settings && !settings.useLocalStorage) return Promise.reject();\n\n\t\treturn this.module.auth.getUserPromise().then(user => {\n\t\t\tlet dbName = charLogDBPrefix + user.id;\n\t\t\tlet req = indexedDB.open(dbName, 1);\n\t\t\treq.onupgradeneeded = (ev) => {\n\t\t\t\tlet db = ev.target.result;\n\t\t\t\tlet store = db.createObjectStore(eventStore, { keyPath: [ \"ctrlId\", \"ev.id\" ] });\n\t\t\t\tstore.createIndex(timeIndex, [ \"ctrlId\", \"ev.time\" ]);\n\t\t\t\tstore.createIndex(charIdIndex, [ \"ctrlId\", \"ev.char.id\" ]);\n\t\t\t};\n\n\t\t\treturn requestToPromise(\n\t\t\t\treq,\n\t\t\t\t(r, ev) => {\n\t\t\t\t\tthis.db = r.result;\n\t\t\t\t\treturn this.db;\n\t\t\t\t},\n\t\t\t\t(r, ev) => {\n\t\t\t\t\tconsole.error(\"Error opening \" + dbName + \": \", ev);\n\t\t\t\t\tthis.useLocalStorage = true;\n\t\t\t\t},\n\t\t\t);\n\t\t});\n\t}\n\n\t_onSettingsChange(change) {\n\t\tlet useLocal = this.settings.useLocalStorage;\n\n\t\tif (!change) {\n\t\t\tif (useLocal) {\n\t\t\t\tthis._migrateToIndexedDB();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (change.hasOwnProperty('useLocalStorage')) {\n\t\t\tthis._getPlayerCtrlIds().then(ctrlIds => {\n\t\t\t\tif (useLocal) {\n\t\t\t\t\tthis._moveToIndexedDB(ctrlIds);\n\t\t\t\t} else {\n\t\t\t\t\tthis._moveToSessionStorage(ctrlIds);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\t_getPlayerCtrlIds() {\n\t\treturn this.module.player.getPlayerPromise().then(player => {\n\t\t\tlet ctrlIds = player.chars.toArray().map(c => c.id);\n\t\t\treturn ctrlIds.concat(player.puppets.toArray().map(p => p.puppet.id + '_' + p.char.id));\n\t\t});\n\t}\n\n\t// [Legacy] Migrates events from localStorage to IndexedDB\n\t_migrateToIndexedDB() {\n\t\tlet store = window.localStorage;\n\t\tif (!store) return;\n\n\t\tthis._getDb().then(db => {\n\t\t\tlet keys = [];\n\t\t\tlet len = store.length;\n\t\t\tfor (let i = 0; i < len; i++) {\n\t\t\t\tlet k = store.key(i);\n\t\t\t\tif (k && k.substring(0, logStoragePrefix.length) == logStoragePrefix) {\n\t\t\t\t\tkeys.push(k);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!keys.length) return;\n\n\t\t\tlet objstore = db.transaction(eventStore, 'readwrite')\n\t\t\t\t.objectStore(eventStore);\n\n\t\t\tfor (let k of keys) {\n\t\t\t\tlet idx = k.lastIndexOf('.');\n\t\t\t\tif (idx < 0) continue;\n\n\t\t\t\ttry {\n\t\t\t\t\tlet ev = JSON.parse(store.getItem(k));\n\t\t\t\t\tlet req = objstore.put({ ctrlId: k.slice(idx + 1), ev });\n\t\t\t\t\treq.onerror = ev => console.error(\"Failed to store migrated log key \" + k + \": \", ev);\n\t\t\t\t\treq.onsuccess = () => store.removeItem(k);\n\t\t\t\t} catch (e) {\n\t\t\t\t\tconsole.error(\"Error migrating log key: \" + k);\n\t\t\t\t}\n\t\t\t}\n\t\t}).catch(err => {\n\t\t\tconsole.error(\"Error migrating: \", err);\n\t\t});\n\t}\n\n\t_moveToIndexedDB(ctrlIds) {\n\t\tthis.dbPromise = null;\n\t\tthis._getDb().then(db => {\n\t\t\tthis._loadSessionStore();\n\t\t\tif (!this.keys) return;\n\n\t\t\tlet objstore = db.transaction(eventStore, 'readwrite')\n\t\t\t\t.objectStore(eventStore);\n\n\t\t\tlet ctrlIdMap = {};\n\t\t\tfor (let ctrlId of ctrlIds) {\n\t\t\t\tctrlIdMap[ctrlId] = true;\n\t\t\t\tlet l = this.charLogs[ctrlId];\n\t\t\t\tif (l) {\n\t\t\t\t\tfor (let ev of l) {\n\t\t\t\t\t\tlet req = objstore.put({ ctrlId, ev });\n\t\t\t\t\t\treq.onerror = ev => console.error(\"Failed to move log event \" + ctrlId + \": \", ev);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Clear all log entries for owned characters and puppets from sessionStorage\n\t\t\tlet store = window.sessionStorage;\n\t\t\tfor (let k of this.keys) {\n\t\t\t\tlet idx = k.lastIndexOf('.');\n\t\t\t\tif (idx < 0) continue;\n\t\t\t\tif (ctrlIdMap[k.slice(idx + 1)]) {\n\t\t\t\t\tstore.removeItem(k);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.keys = null;\n\t\t\tthis.charLogs = null;\n\t\t}).catch(err => {\n\t\t\tconsole.error(\"Error moving logs to indexedDB: \", err);\n\t\t});\n\t}\n\n\t_moveToSessionStorage(ctrlIds) {\n\t\t(this.db\n\t\t\t? Promise.resolve(this.db)\n\t\t\t: this._openDB()\n\t\t).then(db => {\n\t\t\tlet store = window.sessionStorage;\n\t\t\tif (!store) return;\n\n\t\t\tlet hasError = false;\n\t\t\tfor (let ctrlId of ctrlIds) {\n\t\t\t\tthis._getIndexedDBEvents(db, ctrlId, null, (ev, cur) => {\n\t\t\t\t\tlet key = getKey(ctrlId, ev);\n\t\t\t\t\tlet data = JSON.stringify(ev);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tstore.setItem(key, data);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tif (!hasError) {\n\t\t\t\t\t\t\tconsole.error(\"Error moving logs to sessionStorage: \", e);\n\t\t\t\t\t\t\thasError = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcur.delete();\n\t\t\t\t}, 'readwrite');\n\t\t\t}\n\t\t\tthis._closeDb();\n\t\t});\n\t}\n\n\t_closeDb() {\n\t\tif (this.db) {\n\t\t\tthis.db.close();\n\t\t\tthis.db = null;\n\t\t}\n\t\tthis.dbPromise = null;\n\t\tthis.keys = null;\n\t\tthis.charLogs = null;\n\t}\n\n\tdispose() {\n\t\tthis._closeDb();\n\t}\n}\n\nexport default CharLogStore;\n","import { Elem, Txt } from 'modapp-base-component';\nimport FAIcon from 'components/FAIcon';\nimport formatDateTime from 'utils/formatDateTime';\n\nclass ControlEventComponent extends Elem {\n\tconstructor(module, charId, ev, opt) {\n\t\topt = opt || {};\n\t\tlet c = ev.hchar;\n\t\tsuper(n => n.elem('div', { className: 'ev-control--border' + (opt.noButton ? '' : ' flex-row') }, [\n\t\t\tn.component(new Txt(c && (c.name + \" \" + c.surname).trim() + \" – \" + formatDateTime(new Date(ev.time)), {\n\t\t\t\tclassName: opt.noButton ? null : 'flex-1',\n\t\t\t})),\n\t\t\tn.component(opt.noButton ? null : new Elem(n => n.elem('button', {\n\t\t\t\tclassName: 'iconbtn tiny tinyicon',\n\t\t\t\tevents: {\n\t\t\t\t\tclick: (c, e) => {\n\t\t\t\t\t\tmodule.dialogExportLog.open(module.player.getControlledChar(charId), ev.time);\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}, [\n\t\t\t\tn.component(new FAIcon('file-text-o')),\n\t\t\t]))),\n\t\t]));\n\t}\n\n\tget noMenu() {\n\t\treturn true;\n\t}\n}\n\nexport default ControlEventComponent;\n","class ReleaseEventComponent {\n\tconstructor() {}\n\trender() {}\n\tunrender() {}\n\n\tget noMenu() {\n\t\treturn true;\n\t}\n}\n\nexport default ReleaseEventComponent;\n","import ControlEventComponent from './ControlEventComponent';\nimport ReleaseEventComponent from './ReleaseEventComponent';\nimport './controlEvent.scss';\n\n/**\n * ControlEvent adds charlog events components for control and release events.\n */\nclass ControlEvent {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'charLog', 'dialogExportLog', 'player' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t\tthis.module.charLog\n\t\t\t.addEventComponentFactory('control', (charId, ev, opt) => new ControlEventComponent(this.module, charId, ev, opt))\n\t\t\t.addEventComponentFactory('release', (charId, ev) => new ReleaseEventComponent(charId, ev));\n\t}\n\n\tdispose() {\n\t\tthis.module.charLog\n\t\t\t.removeEventComponentFactory('control')\n\t\t\t.removeEventComponentFactory('release');\n\t}\n}\n\nexport default ControlEvent;\n","import { Elem, Txt, Html } from 'modapp-base-component';\nimport l10n from 'modapp-l10n';\nimport formatText from 'utils/formatText';\nimport poseSpacing from 'utils/poseSpacing';\nimport fullname from 'utils/fullname';\nimport * as charEvent from 'utils/charEvent';\n\nclass HelpmeEvent extends Elem {\n\tconstructor(charId, ev) {\n\t\tlet c = ev.char;\n\t\tlet t = ev.target;\n\t\tsuper(n => n.elem('div', [\n\t\t\tn.elem('div', { className: 'charlog--fieldset' }, [\n\t\t\t\tn.elem('div', { className: 'charlog--fieldset-label' }, [\n\t\t\t\t\tn.component(new Txt(t\n\t\t\t\t\t\t? t.id == charId\n\t\t\t\t\t\t\t? l10n.l('charLog.fromHelper', \"From helper {fullname}\", { fullname: fullname(c) })\n\t\t\t\t\t\t\t: l10n.l('charLog.helping', \"Helping {fullname}\", { fullname: fullname(t) })\n\t\t\t\t\t\t: c.id == charId\n\t\t\t\t\t\t\t? l10n.l('charLog.toHelpers', \"To helpers\")\n\t\t\t\t\t\t\t: l10n.l('charLog.fromHelper', \"Help {fullname}\", { fullname: fullname(c) }),\n\t\t\t\t\t)),\n\t\t\t\t]),\n\t\t\t\tn.component(new Txt(c && c.name, { className: 'charlog--char' })),\n\t\t\t\tn.elem('span', [\n\t\t\t\t\tn.text(ev.pose ? poseSpacing(ev.msg) : ' writes, \"'),\n\t\t\t\t\tn.component(new Html(formatText(ev.msg, ev.mod), { tagName: 'span', className: 'common--formattext' })),\n\t\t\t\t\tn.text(ev.pose ? '' : '\"'),\n\t\t\t\t]),\n\t\t\t]),\n\t\t]));\n\t}\n\n\tget canHighlight() {\n\t\t// While it technically can be highlighted as it is communication, we\n\t\t// don't want to do that, to avoid confusing newcomers.\n\t\treturn false;\n\t}\n\n\tgetTooltipText(ev) {\n\t\treturn charEvent.targetTooltipText(ev);\n\t}\n}\n\nexport default HelpmeEvent;\n","import l10n from 'modapp-l10n';\nimport HelpmeEventComponent from './HelpmeEventComponent';\nimport './helpmeEvent.scss';\n\nconst txtHelp = l10n.l('helpmeEvent.help', \"Help\");\n\n/**\n * HelpmeEvent adds charlog event component for helpme events.\n */\nclass HelpmeEvent {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'charLog',\n\t\t\t'charFocus',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t\tthis.module.charLog.addEventComponentFactory('helpme', (charId, ev) => new HelpmeEventComponent(charId, ev));\n\t\tthis.module.charLog.addEventHandler('helpme', (charId, ev) => (\n\t\t\t(ev.target && this.module.charFocus.notifyOnTargetEvent(charId, ev, txtHelp, l10n.l('helpmeEvent.charHelps', \"{char.name} helps {target.name}.\"))) ||\n\t\t\tthis.module.charFocus.notifyOnEvent(charId, ev, txtHelp, l10n.l('helpmeEvent.charNeedsHelp', \"{char.name} needs help.\"))\n\t\t));\n\t}\n\n\tdispose() {\n\t\tthis.module.charLog.removeEventComponentFactory('helpme');\n\t\tthis.module.charLog.removeEventHandler('helpme');\n\t}\n}\n\nexport default HelpmeEvent;\n","import l10n from 'modapp-l10n';\n\n/**\n * MenuItemExportLog adds the char log menu item to export log\n */\nclass MenuItemExportLog {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'charLog', 'player', 'dialogExportLog' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\n\t\tthis.module.charLog.addMenuItem({\n\t\t\tid: 'exportLog',\n\t\t\tname: l10n.l('menuItemExport.export', \"Export\"),\n\t\t\ticon: 'file-text-o',\n\t\t\tonClick: this._onClick.bind(this),\n\t\t\tsortOrder: 20,\n\t\t});\n\t}\n\n\t_onClick(charId, ev) {\n\t\tthis.module.dialogExportLog.open(this.module.player.getControlledChar(charId), ev.time);\n\t}\n\n\tdispose() {\n\t\tthis.module.charLog.removeMenuItem('exportLog');\n\t}\n}\n\nexport default MenuItemExportLog;\n","import l10n from 'modapp-l10n';\nimport { getTargets, replyCmds, replyAllCmds, countTargets } from 'utils/replyToEvent';\n\n\n/**\n * MenuItemReply adds the char log menu item to reply to targeted communication\n */\nclass MenuItemReply {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'charLog',\n\t\t\t'console',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\n\t\tthis.module.charLog.addMenuItem({\n\t\t\tid: 'reply',\n\t\t\tname: l10n.l('menuItemReply.reply', \"Reply\"),\n\t\t\ticon: 'comment',\n\t\t\tonClick: this._onReply.bind(this),\n\t\t\tfilter: (charId, ev) => replyCmds[ev.type] && (ev.char.id != charId || countTargets(ev) == 1),\n\t\t\tsortOrder: 10,\n\t\t});\n\n\t\tthis.module.charLog.addMenuItem({\n\t\t\tid: 'replyAll',\n\t\t\tname: l10n.l('menuItemReply.replyAll', \"Reply all\"),\n\t\t\ticon: 'comments',\n\t\t\tonClick: this._onReplyAll.bind(this),\n\t\t\tfilter: (charId, ev) => replyAllCmds[ev.type] && getTargets(charId, ev).length > 1,\n\t\t\tsortOrder: 15,\n\t\t});\n\t}\n\n\t_onReply(charId, ev) {\n\t\tthis.module.console.setCommand(charId, replyCmds[ev.type](charId, ev), true);\n\t}\n\n\t_onReplyAll(charId, ev) {\n\t\tthis.module.console.setCommand(charId, replyAllCmds[ev.type](charId, ev), true);\n\t}\n\n\tdispose() {\n\t\tthis.module.charLog.removeMenuItem('reply');\n\t\tthis.module.charLog.removeMenuItem('replyAll');\n\t}\n}\n\nexport default MenuItemReply;\n","import l10n from 'modapp-l10n';\n\n/**\n * MenuItemReport adds the char log menu item to report abuse\n */\nclass MenuItemReport {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'charLog', 'dialogReport' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\n\t\tthis.module.charLog.addMenuItem({\n\t\t\tid: 'report',\n\t\t\tname: l10n.l('menuItemReport.report', \"Report\"),\n\t\t\ticon: 'flag',\n\t\t\tonClick: this._onClick.bind(this),\n\t\t\tfilter: (charId, ev) => ev.char && ev.char.id != charId,\n\t\t\tsortOrder: 500,\n\t\t});\n\t}\n\n\t_onClick(charId, ev) {\n\t\tthis.module.dialogReport.open(charId, ev.char.id, ev.puppeteer && ev.puppeteer.id, {\n\t\t\tattachEvent: ev,\n\t\t});\n\t}\n\n\tdispose() {\n\t\tthis.module.charLog.removeMenuItem('report');\n\t}\n}\n\nexport default MenuItemReport;\n","import { Elem, Txt, Html } from 'modapp-base-component';\nimport l10n from 'modapp-l10n';\nimport PopupPill from 'components/PopupPill';\n\nconst txtQuietRoll = l10n.l('rollEvent.quiet roll', \"Quiet roll\");\n\nclass RollEventComponent extends Elem {\n\tconstructor(charId, ev, opt) {\n\t\topt = opt || {};\n\t\tlet c = ev.char;\n\n\t\tlet s = \"\";\n\t\tlet showDetails = ev.result.length > 1;\n\t\tfor (let p of ev.result) {\n\t\t\tif (s) {\n\t\t\t\ts += '<span> ' + (p.op || \"+\") + ' </span>';\n\t\t\t} else if (p.op == \"-\") {\n\t\t\t\ts += '<span>-</span>';\n\t\t\t}\n\t\t\tswitch (p.type) {\n\t\t\t\tcase \"mod\":\n\t\t\t\t\ts += '<span class=\"charlog--default\">' + Number(p.value) + '</span>';\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"std\":\n\t\t\t\t\ts += '<span class=\"charlog--default\">' + Number(p.count) + '</span>'\n\t\t\t\t\t\t+ '<span class=\"charlog--cmd\">d</span>'\n\t\t\t\t\t\t+ '<span class=\"charlog--default\">' + Number(p.sides) + '</span>';\n\t\t\t\t\tshowDetails |= p.count > 1;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\ts += escapeHtml(p.type);\n\t\t\t}\n\t\t}\n\n\t\tlet d = \"\";\n\t\tif (showDetails) {\n\t\t\tfor (let p of ev.result) {\n\t\t\t\tif (d) {\n\t\t\t\t\td += '<span> ' + (p.op || \"+\") + ' </span>';\n\t\t\t\t} else if (p.op == \"-\") {\n\t\t\t\t\td += '<span>-</span>';\n\t\t\t\t}\n\t\t\t\tswitch (p.type) {\n\t\t\t\t\tcase \"mod\":\n\t\t\t\t\t\td += '<span>' + Number(p.value) + '</span>';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"std\":\n\t\t\t\t\t\tlet multi = p.dice.length > 1;\n\t\t\t\t\t\td += (multi ? '<span>(</span>' : '')\n\t\t\t\t\t\t\t+ '<span>' + p.dice.join(', ') + '</span>'\n\t\t\t\t\t\t\t+ (multi ? '<span>)</span>' : '')\n\t\t\t\t\t\t\t+ '<sub>' + p.sides + '</sub>';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\td += escapeHtml(p.type);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet inner = n => ([\n\t\t\tn.text(' rolls '),\n\t\t\tn.component(new Html(s, { tagName: 'span' })),\n\t\t\tn.text('. Result: '),\n\t\t\tn.elem('span', { className: 'charlog--comm' }, [ n.text(ev.total) ]),\n\t\t\tn.text('.'),\n\t\t\tn.component(d\n\t\t\t\t? c.id === charId || ev.mod?.muted\n\t\t\t\t\t? new Html(\" \" + d, { tagName: 'span', className: 'charlog--ooc' })\n\t\t\t\t\t: new PopupPill(() => new Html(d, { tagName: 'span', className: 'charlog--ooc' }), {\n\t\t\t\t\t\ttype: 'dark',\n\t\t\t\t\t\tclassName: 'ev-roll--pill',\n\t\t\t\t\t})\n\t\t\t\t: null,\n\t\t\t),\n\t\t]);\n\n\t\tsuper(ev.quiet\n\t\t\t? n => n.elem('div', [\n\t\t\t\tn.elem('div', { className: 'charlog--fieldset' }, [\n\t\t\t\t\tn.elem('div', { className: 'charlog--fieldset-label' }, [\n\t\t\t\t\t\tn.component(new Txt(txtQuietRoll)),\n\t\t\t\t\t]),\n\t\t\t\t\tn.component(new Txt(c && c.name, { className: 'charlog--char' })),\n\t\t\t\t\tn.elem('span', { className: 'charlog--ooc' }, inner(n)),\n\t\t\t\t]),\n\t\t\t])\n\t\t\t: n => n.elem('div', { className: 'charlog--highlight' }, [\n\t\t\t\tn.component(new Txt(c && c.name, { className: 'charlog--char' })),\n\t\t\t\tn.elem('span', { className: 'charlog--tag' }, [ n.text(\" roll\") ]),\n\t\t\t\tn.elem('span', { className: 'charlog--ooc' }, inner(n)),\n\t\t\t]),\n\t\t);\n\t}\n\n\tget canHighlight() {\n\t\treturn true;\n\t}\n}\n\nexport default RollEventComponent;\n","import RollEventComponent from './RollEventComponent';\nimport './rollEvent.scss';\n\n/**\n * RollEvent adds charlog event component for roll events.\n */\nclass RollEvent {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'charLog',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t\tthis.module.charLog\n\t\t\t.addEventComponentFactory('roll', (charId, ev, opt) => new RollEventComponent(charId, ev, opt));\n\t}\n\n\tdispose() {\n\t\tthis.module.charLog\n\t\t\t.removeEventComponentFactory('roll');\n\t}\n}\n\nexport default RollEvent;\n","import { Model } from 'modapp-resource';\n\n/**\n * CharPagesChar holds information about a charPages for a character on char panel.\n */\nclass CharPagesChar {\n\n\t/**\n\t * Creates an instance of CharPagesChar.\n\t * @param {object} module Modapp modules.\n\t * @param {Model} ctrl Controlled character.\n\t * @param {function} update Callback to call whenever a model changes so that it may affect which component to show.\n\t */\n\tconstructor(module, ctrl, update) {\n\t\tthis.module = module;\n\t\tthis.ctrl = ctrl;\n\t\tthis.update = update;\n\n\t\tthis.lookingAt = undefined;\n\t\tthis.charId = null;\n\t\tthis.char = undefined;\n\t\tthis.charPages = {};\n\t\tthis.state = {};\n\n\t\t// Models is a map of Model for chars\n\t\tthis.models = {};\n\t\tthis.model = null;\n\n\t\t// Bind callback\n\t\tthis._onCtrlChange = this._onCtrlChange.bind(this);\n\t\tthis._onLookAtChange = this._onLookAtChange.bind(this);\n\t\tthis._onCharChange = this._onCharChange.bind(this);\n\n\t\tthis._setCtrlListeners(true);\n\t\tthis._onCtrlChange();\n\t}\n\n\t/**\n\t * Adds a page to a specific look at char ID.\n\t * @param {string} charId Char ID\n\t * @param {function} pageFactory Page factory callback function: function(ctrl, char, roomState, close) -> { component, [title], [onClose], [closeIcon] }\n\t * @param {function} [onClose] Optional callback called on page close.\n \t * @returns {function} Function that closes the page.\n\t */\n\taddPage(charId, pageFactory, onClose) {\n\t\tlet pages = this.charPages[charId];\n\t\tif (!pages) {\n\t\t\tpages = [];\n\t\t\tthis.charPages[charId] = pages;\n\t\t}\n\n\t\tlet page = { factory: pageFactory, state: {}, onClose };\n\t\tpage.close = this._closePage.bind(this, charId, page);\n\t\tpages.push(page);\n\t\tif (charId === this.charId) {\n\t\t\tthis.update(this.ctrl.id);\n\t\t}\n\t\treturn page.close;\n\t}\n\n\t/**\n\t * Gets the page for the char currently looked at.\n\t * @returns {object} Page object.\n\t */\n\tgetPage() {\n\t\tlet pages = this.charPages[this.charId];\n\t\treturn pages\n\t\t\t? pages[pages.length - 1]\n\t\t\t: this.charPage;\n\t}\n\n\t/**\n\t * Creates a new component object for a page.\n\t * @param {object} page Page object\n\t * @returns {object} Object with component: { component, [title], [onClose], [closeIcon] }\n\t */\n\tcreateFactory(page) {\n\t\treturn (layoutId) => page.factory(this.ctrl, this.model, page.state, page.close, layoutId);\n\t}\n\n\t_setCtrlListeners(on) {\n\t\tthis.ctrl[on ? 'on' : 'off']('change', this._onCtrlChange);\n\t}\n\n\t_setLookAtListeners(on) {\n\t\tif (this.lookingAt) {\n\t\t\tthis.lookingAt[on ? 'on' : 'off']('change', this._onLookAtChange);\n\t\t}\n\t}\n\n\t_setCharListeners(on) {\n\t\tif (this.char) {\n\t\t\tthis.char[on ? 'on' : 'off']('change', this._onCharChange);\n\t\t}\n\t}\n\n\t_onCtrlChange(change) {\n\t\tif (this.ctrl.lookingAt === this.lookingAt) return;\n\n\t\t// Stop listening to previous and start listening to new\n\t\tthis._setLookAtListeners(false);\n\t\tthis.lookingAt = this.ctrl.lookingAt;\n\t\tthis._setLookAtListeners(true);\n\n\t\tthis._onLookAtChange();\n\t}\n\n\t_onLookAtChange() {\n\t\tlet l = this.lookingAt;\n\t\tif (l && l.charId !== this.ctrl.id) {\n\t\t\tthis._setChar(l.charId, l.char || l.unseen, !!l.char);\n\t\t} else {\n\t\t\tthis._setChar(this.ctrl.id, this.ctrl, true);\n\t\t}\n\t}\n\n\t_onCharChange(change, m) {\n\t\tif (m === this.char) {\n\t\t\tthis._updateModel();\n\t\t}\n\t}\n\n\t_setChar(charId, char, seen) {\n\t\tif (char === this.char) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._setCharListeners(false);\n\t\tthis.char = char;\n\t\tthis.isSeen = seen;\n\t\tthis.model = this._getModel(charId);\n\t\tthis._updateModel();\n\t\tthis._setCharListeners(true);\n\n\t\t// Did we switch character we are looking at?\n\t\tif (this.charId !== charId) {\n\t\t\tthis.charId = charId;\n\t\t\tthis.charPage = {\n\t\t\t\tfactory: this.module.self.getDefaultPageFactory(),\n\t\t\t\tstate: this.state,\n\t\t\t\tclose: null,\n\t\t\t};\n\t\t\tthis.update(this.ctrl.id);\n\t\t}\n\t}\n\n\t_getModel(charId) {\n\t\tlet m = this.models[charId];\n\t\tif (!m) {\n\t\t\tm = new Model({ eventBus: this.module.self.app.eventBus });\n\t\t\tthis.models[charId] = m;\n\n\t\t\tif (!this.isSeen) {\n\t\t\t\tthis.module.charPagesStore.getChar(this.ctrl.id, charId).then(char => {\n\t\t\t\t\t// Make sure we haven't gotten an update since trying to fetch\n\t\t\t\t\tif (!m.timestamp) {\n\t\t\t\t\t\tm.set(char);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\treturn m;\n\t}\n\n\t_updateModel() {\n\t\tif (!this.char) return;\n\n\t\tlet props = this.char.props;\n\t\tif (this.isSeen) {\n\t\t\tlet c = this.char;\n\t\t\tlet timestamp = Date.now();\n\t\t\tthis.module.charPagesStore.setChar(this.ctrl.id, {\n\t\t\t\tid: c.id,\n\t\t\t\timage: c.image ? c.image.toJSON() : null,\n\t\t\t\tdesc: c.desc,\n\t\t\t\tabout: c.about,\n\t\t\t\ttimestamp,\n\t\t\t});\n\t\t\tprops = Object.assign({ timestamp }, props);\n\t\t}\n\t\tthis.model.set(props);\n\t}\n\n\t_closePage(charId, page) {\n\t\tlet pages = this.charPages[charId];\n\t\tif (pages) {\n\t\t\tfor (let i = 0; i < pages.length; i++) {\n\t\t\t\tif (pages[i] == page) {\n\t\t\t\t\tif (pages.length == 1) {\n\t\t\t\t\t\tdelete this.charPages[charId];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpages.splice(i, 1);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (this.charId === charId) {\n\t\t\tthis.update(this.ctrl.id);\n\t\t}\n\n\t\tif (page.onClose) {\n\t\t\tpage.onClose();\n\t\t}\n\t}\n\n\tdispose() {\n\t\tthis._setCharListeners(false);\n\t\tthis._setLookAtListeners(false);\n\t\tthis._setCtrlListeners(false);\n\t\tthis.char = undefined;\n\t\tthis.lookingAt = undefined;\n\t\tthis.ctrl = null;\n\t}\n}\n\nexport default CharPagesChar;\n","import { Model } from 'modapp-resource';\nimport CharPagesChar from './CharPagesChar';\n\nconst namespace = 'module.charPages';\n\n/**\n * CharPages holds the char panel pages.\n */\nclass CharPages {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\t// Bind callbacks\n\t\tthis._onCtrlAdd = this._onCtrlAdd.bind(this);\n\t\tthis._onCtrlRemove = this._onCtrlRemove.bind(this);\n\t\tthis._onActiveChange = this._onActiveChange.bind(this);\n\t\tthis._onUpdate = this._onUpdate.bind(this);\n\n\t\tthis.app.require([\n\t\t\t'api',\n\t\t\t'player',\n\t\t\t'charPagesStore',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\n\t\tthis.model = new Model({ data: { page: null, factory: null }});\n\t\tthis.chars = {};\n\n\t\tthis._setListeners(true);\n\t}\n\n\t/**\n\t * Attach an event handler function for one or more player module events.\n\t * @param {?string} events One or more space-separated events. Null means any event. Available events are 'open'.\n\t * @param {Event~eventCallback} handler A function to execute when the event is emitted.\n\t */\n\ton(events, handler) {\n\t\tthis.app.eventBus.on(this, events, handler, namespace);\n\t}\n\n\t/**\n\t * Remove an event handler.\n\t * @param {?string} events One or more space-separated events. Null means any event.\n\t * @param {Event~eventCallback} [handler] An option handler function. The handler will only be remove if it is the same handler.\n\t */\n\toff(events, handler) {\n\t\tthis.app.eventBus.off(this, events, handler, namespace);\n\t}\n\n\tgetModel() {\n\t\treturn this.model;\n\t}\n\n\t/**\n\t * Sets the component factory function for creating the default char page.\n\t * @param {function} pageFactory Page factory callback function: function(ctrl, char, panelState) -> { component, [title], [onClose], [closeIcon] }\n\t * @returns {this}\n\t */\n\tsetDefaultPageFactory(pageFactory) {\n\t\tthis.defaultPageFactory = pageFactory;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Gets the default page component factory function.\n\t * @returns {?function} Component factory callback function: function(ctrl, char, panelState) -> { component, [title], [onClose], [closeIcon] }\n\t */\n\tgetDefaultPageFactory() {\n\t\treturn this.defaultPageFactory;\n\t}\n\n\t/**\n\t * Opens a in-panel page set to a specific char ID.\n\t * @param {string} ctrlId Char ID of controlled character.\n\t * @param {string} charId Char ID\n\t * @param {function} pageFactory Page factory callback function: function(ctrl, char, roomState, close) -> { component, [title], [onClose], [closeIcon] }\n\t * @param {function} [onClose] Optional callback called on page close.\n \t * @returns {function} Function that closes the page.\n\t */\n\topenPage(ctrlId, charId, pageFactory, onClose) {\n\t\tlet c = this.chars[ctrlId];\n\t\tif (!c) {\n\t\t\tthrow new Error(\"No controlled char \" + charId);\n\t\t}\n\t\treturn c.addPage(charId, pageFactory, onClose);\n\t}\n\n\t// Triggers an open event that panels may be listening to.\n\topenPanel() {\n\t\tthis.app.eventBus.emit(this, namespace + '.open');\n\t}\n\n\t_setListeners(on) {\n\t\tlet p = this.module.player;\n\t\tlet cb = on ? 'on' : 'off';\n\t\tp[cb]('ctrlAdd', this._onCtrlAdd);\n\t\tp[cb]('ctrlRemove', this._onCtrlRemove);\n\t\tp[cb]('activeChange', this._onActiveChange);\n\t}\n\n\t_onCtrlAdd(ev) {\n\t\tlet char = ev.char;\n\t\tthis.chars[char.id] = new CharPagesChar(this.module, char, this._onUpdate);\n\t}\n\n\t_onCtrlRemove(ev) {\n\t\tlet c = this.chars[ev.char.id];\n\t\tdelete this.chars[ev.char.id];\n\t\tc.dispose();\n\t}\n\n\t_onActiveChange() {\n\t\tthis._setPage();\n\t}\n\n\t_onUpdate(charId) {\n\t\tlet active = this.module.player.getActiveChar();\n\t\tif (active && active.id === charId) {\n\t\t\tthis._setPage();\n\t\t}\n\t}\n\n\t_setPage() {\n\t\tlet active = this.module.player.getActiveChar();\n\t\tif (!active) {\n\t\t\tthis._setModel();\n\t\t\treturn;\n\t\t}\n\n\t\tlet panelChar = this.chars[active.id];\n\t\t// Quick exit if the panelChar isn't created yet.\n\t\tif (!panelChar) {\n\t\t\treturn;\n\t\t}\n\t\tlet page = panelChar.getPage();\n\t\tif (this.model.page == page) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._setModel(active, page, panelChar.createFactory(page));\n\n\t}\n\n\t_setModel(char, page, factory) {\n\t\tthis.model.set({\n\t\t\tchar: char || null,\n\t\t\tpage: page || null,\n\t\t\tfactory: factory || null,\n\t\t});\n\t}\n\n\tdispose() {\n\t\tthis._setListeners(false);\n\t\tthis._setModel();\n\t\tthis.chars = {};\n\t}\n}\n\nexport default CharPages;\n","import indexedDB from 'utils/indexedDB';\n\nconst charPagesDB = 'charPanel';\nconst charPagesDBPrefix = charPagesDB + '.';\nconst charStore = 'char';\n\nfunction toPromise(req, onSuccess, onError) {\n\treturn new Promise((resolve, reject) => {\n\t\treq.onsuccess = ev => {\n\t\t\tresolve(onSuccess ? onSuccess(req, ev) : ev);\n\t\t};\n\t\treq.onerror = ev => {\n\t\t\treject(onError ? onError(req, ev) : ev);\n\t\t};\n\t});\n}\n\n/**\n * CharPagesStore stores characters after being looked at.\n */\nclass CharPagesStore {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\tthis.useLocalStorage = params.useLocalStorage || !indexedDB;\n\n\t\tthis._init();\n\t}\n\n\t_init(module) {\n\t\tthis.dbPromise = this._openDB();\n\t}\n\n\t/**\n\t * Set a char in the store as seen by a controlled character.\n\t * @param {string} ctrlId Id of controlled character.\n\t * @param {Model} char Character model.\n\t * @returns {Promise.<boolean>} Promise to setting the char object. The boolean flags if the setting was successful.\n\t */\n\tsetChar(ctrlId, char) {\n\t\treturn this.dbPromise.then(db => toPromise(\n\t\t\tdb.transaction(charStore, 'readwrite')\n\t\t\t\t.objectStore(charStore)\n\t\t\t\t.put({ ctrlId, charId: char.id, char }),\n\t\t\t(req, ev) => true,\n\t\t\t(req, ev) => console.error(\"Failed to store char: \", char, ev),\n\t\t)).catch(ev => {\n\t\t\tif (localStorage) {\n\t\t\t\tlocalStorage.setItem(charPagesDBPrefix + ctrlId + '.' + char.id, JSON.stringify(char));\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t});\n\t}\n\n\t/**\n\t * Get a char object as seen last by a controlled character from the store.\n\t * @param {string} ctrlId Id of controlled character.\n\t * @param {string} charId Id of character.\n\t * @returns {Promise.<object>} Promise to char object.\n\t */\n\tgetChar(ctrlId, charId) {\n\t\treturn this.dbPromise.then(db => toPromise(\n\t\t\tdb.transaction(charStore)\n\t\t\t\t.objectStore(charStore)\n\t\t\t\t.get([ ctrlId, charId ]),\n\t\t\t(r, ev) => r.result ? r.result.char : { id: charId },\n\t\t\t(r, ev) => console.error(\"Error getting char: \", ev),\n\t\t)).catch(() => {\n\t\t\tlet data = localStorage ? localStorage.getItem(charPagesDBPrefix + ctrlId + '.' + charId) : null;\n\t\t\treturn data ? JSON.parse(data) : { id: charId };\n\t\t});\n\t}\n\n\t_openDB() {\n\t\tif (this.useLocalStorage) return Promise.reject();\n\n\t\tlet req = indexedDB.open(charPagesDB, 1);\n\t\treq.onupgradeneeded = (ev) => {\n\t\t\tlet db = ev.target.result;\n\t\t\tthis.charStore = db.createObjectStore(charStore, { keyPath: [ \"ctrlId\", \"charId\" ] });\n\t\t};\n\n\t\treturn toPromise(\n\t\t\treq,\n\t\t\t(r, ev) => r.result,\n\t\t\t(r, ev) => {\n\t\t\t\tconsole.error(\"Error opening \" + charPagesDB + \": \", ev);\n\t\t\t\tthis.useLocalStorage = true;\n\t\t\t},\n\t\t);\n\t}\n\n\tdispose() {\n\n\t}\n}\n\nexport default CharPagesStore;\n","import { Elem, Txt } from 'modapp-base-component';\nimport { ModelTxt, ModelComponent } from 'modapp-resource-component';\nimport counterString from 'utils/counterString';\n\nclass ConsoleControlledChar extends Elem {\n\tconstructor(module, char, opt) {\n\t\tsuper();\n\t\topt = opt || {};\n\t\tthis.module = module;\n\t\tthis.char = char;\n\t\tlet playerModel = this.module.player.getModel();\n\t\tthis.setRootNode(n => n.component(new ModelComponent(\n\t\t\tplayerModel,\n\t\t\tnew Elem(n => n.elem('div', {\n\t\t\t\tclassName: 'console-controlledchar',\n\t\t\t\tattributes: { 'data-charid': this.char.id },\n\t\t\t}, [\n\t\t\t\tn.elem('button', {\n\t\t\t\t\tclassName: 'btn medium', events: {\n\t\t\t\t\t\tclick: () => this._onClick(),\n\t\t\t\t\t},\n\t\t\t\t}, [\n\t\t\t\t\tn.component(this.module.avatar.newAvatar(this.char, { size: 'tiny', className: 'console-controlledchar--avatar' })),\n\t\t\t\t\tn.component(opt.layout == 'mobile' ? null : new ModelTxt(this.char, m => m.name)),\n\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\tthis.module.charLog.getUnseenTargeted(),\n\t\t\t\t\t\tnew ModelComponent(\n\t\t\t\t\t\t\tthis.module.charLog.getUnseen(),\n\t\t\t\t\t\t\tnew Elem(n => n.elem('div', { className: 'console-controlledchar--counter counter' }, [\n\t\t\t\t\t\t\t\tn.component('txt', new Txt(\"\")),\n\t\t\t\t\t\t\t])),\n\t\t\t\t\t\t\t(m, c) => {\n\t\t\t\t\t\t\t\tlet l = m.props[char.id];\n\t\t\t\t\t\t\t\tc.getNode('txt').setText(counterString(l));\n\t\t\t\t\t\t\t\tc[l ? 'removeClass' : 'addClass']('hide');\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t),\n\t\t\t\t\t\t(m, c) => c.getComponent()[m.props[char.id] ? 'addClass' : 'removeClass']('alert'),\n\t\t\t\t\t)),\n\t\t\t\t]),\n\t\t\t])),\n\t\t\t(m, c) => {\n\t\t\t\tif (this.char === m.activeChar) {\n\t\t\t\t\tc.addClass('active');\n\t\t\t\t} else {\n\t\t\t\t\tc.removeClass('active');\n\t\t\t\t}\n\t\t\t},\n\t\t)));\n\n\t\tthis.onClick = opt.onClick;\n\t}\n\n\t_onClick() {\n\t\tlet a = this.module.player.getActiveChar();\n\t\t// Look at self if already active\n\t\tif (a && a.id == this.char.id) {\n\t\t\ta.call('look', { charId: a.id });\n\t\t} else {\n\t\t\tthis.module.player.setActiveChar(this.char.id);\n\t\t}\n\n\t\tif (this.onClick) {\n\t\t\tthis.onClick(this);\n\t\t}\n\t}\n}\n\nexport default ConsoleControlledChar;\n","import { keymap } from '@codemirror/view';\nimport { StateField, StateEffect, Facet, combineConfig } from '@codemirror/state';\n\nconst tabCompleteEffect = StateEffect.define();\n\nconst tabCompletionConfig = Facet.define({\n\tcombine(configs) {\n\t\treturn combineConfig(configs, {\n\t\t\tcomplete: () => null,\n\t\t});\n\t},\n});\n\nconst tabCompletionState = StateField.define({\n\tcreate() {\n\t\treturn new TabCompletionState(false, null, null, null);\n\t},\n\tupdate(value, tr) {\n\t\treturn value.update(tr);\n\t},\n});\n\nexport function tabComplete(view) {\n\tlet tr = view.state.update({ effects: tabCompleteEffect.of(null) });\n\tlet cState = tr.state.field(tabCompletionState, false);\n\tif (cState && cState.active) {\n\t\tview.dispatch(tr);\n\n\t\tlet result = cState.result;\n\t\tlet last = cState.last;\n\t\tlet current = cState.current;\n\t\tlet apply = result.list[current];\n\n\t\tview.dispatch(\n\t\t\t{\n\t\t\t\tchanges: { from: result.from, to: last === null ? result.to : result.from + last.length, insert: apply },\n\t\t\t\tselection: { anchor: result.from + apply.length },\n\t\t\t\tuserEvent: \"input.tabcomplete\",\n\t\t\t},\n\t\t);\n\t}\n\treturn true;\n};\n\nfunction tabCompletionKeymap(opt) {\n\treturn keymap.of([\n\t\t{ key: opt.key || 'Tab', run: tabComplete },\n\t]);\n}\n\nclass TabCompletionState {\n\tconstructor(active, result, last, current) {\n\t\tthis.active = active;\n\t\tthis.result = result;\n\t\tthis.last = last;\n\t\tthis.current = current;\n\t}\n\n\tupdate(tr) {\n\t\tlet updated = null;\n\t\tfor (let effect of tr.effects) {\n\t\t\tif (effect.is(tabCompleteEffect)) {\n\t\t\t\tupdated = this.tabComplete(tr);\n\t\t\t}\n\t\t}\n\n\t\t// Reset tab completion when changing selection or editing the document\n\t\tif ((tr.selection || tr.docChanged) && !tr.isUserEvent(\"input.tabcomplete\")) {\n\t\t\tupdated = updated || new TabCompletionState(false, null, null, null);\n\t\t}\n\n\t\treturn updated || this;\n\t}\n\n\ttabComplete(tr) {\n\t\tlet last = null;\n\t\tlet current = 0;\n\t\tlet result = this.result;\n\t\tif (this.active) {\n\t\t\tlast = result.list[this.current];\n\t\t\tcurrent = (this.current + 1) % result.list.length;\n\t\t} else {\n\t\t\tlet cfg = tr.state.facet(tabCompletionConfig);\n\t\t\t// Try get a new list of complete results\n\t\t\tresult = cfg.complete(tr.state);\n\t\t\t// No results means no completion\n\t\t\tif (!result || !result.list || !result.list.length) {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}\n\n\t\treturn new TabCompletionState(true, result, last, current);\n\t}\n}\n\n\nexport default function consoleTabCompletion(cfg) {\n\tcfg = cfg || {};\n\treturn [\n\t\ttabCompletionConfig.of(cfg),\n\t\ttabCompletionState,\n\t\ttabCompletionKeymap(cfg),\n\t];\n};\n","import { ViewPlugin, Decoration } from '@codemirror/view';\nimport { getToken } from './codemirror';\n\nconst spellcheckMark = Decoration.mark({ attributes: { spellcheck: 'true' }});\n\nconst codemirrorSpellcheck = ViewPlugin.fromClass(class {\n\tconstructor(view) {\n\t\tthis.view = view;\n\t\tthis.decorations = this._spellchecks();\n\t}\n\n\tupdate(update) {\n\t\tif (!update.docChanged) return;\n\n\t\tthis.decorations = this._spellchecks();\n\t}\n\n\t_spellchecks() {\n\t\tlet set = [];\n\t\tgetToken(this.view.state, token => {\n\t\t\tif (token.type) {\n\t\t\t\tlet step = token.state.step;\n\t\t\t\tif (step && step.spellcheck) {\n\t\t\t\t\tset.push(spellcheckMark.range(token.from, token.to));\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn Decoration.set(set);\n\t}\n}, {\n\tdecorations: v => v.decorations,\n});\n\nexport default codemirrorSpellcheck;\n","import { Elem, Txt } from 'modapp-base-component';\nimport { ModelComponent } from 'modapp-resource-component';\nimport { EditorView, keymap } from '@codemirror/view';\nimport { EditorState } from '@codemirror/state';\nimport { standardKeymap, insertNewline } from '@codemirror/commands';\nimport l10n from 'modapp-l10n';\nimport tabCompletion, { tabComplete } from 'utils/codemirrorTabCompletion';\nimport spellcheck from 'utils/codemirrorSpellcheck';\nimport { getToken } from 'utils/codemirror';\n\nconst txtPlaceholder = l10n.l('console.enterYourCommand', \"Enter your command (or type help)\");\n\nclass ConsoleEditor {\n\tconstructor(module, state) {\n\t\tthis.module = module;\n\t\tthis.state = state || null;\n\n\t\t// Bind callbacks\n\t\tthis._onEnter = this._onEnter.bind(this);\n\t\tthis._onEditorUpdate = this._onEditorUpdate.bind(this);\n\t\tthis._cyclePrev = this._cycleHistory.bind(this, true);\n\t\tthis._cycleNext = this._cycleHistory.bind(this, false);\n\t}\n\n\trender(el) {\n\t\tthis.elem = new ModelComponent(\n\t\t\tthis.module.self.getKeymapModel(),\n\t\t\tnew ModelComponent(\n\t\t\t\tthis.state,\n\t\t\t\tnew Elem(n => n.elem('div', { className: 'console-editor' }, [\n\t\t\t\t\tn.component(new Txt(txtPlaceholder, { tagName: 'div', className: 'console-editor--placeholder' })),\n\t\t\t\t])),\n\t\t\t\t(m, c, change) => {\n\t\t\t\t\tif (change && this.cm && m) {\n\t\t\t\t\t\t// Creates a new editor state if the state.doc has changed. This\n\t\t\t\t\t\t// should not happen due to simple edits to the console as the\n\t\t\t\t\t\t// editor's doc and the state's doc would match. This is rather\n\t\t\t\t\t\t// an affect of changing history.\n\t\t\t\t\t\tif (m.doc.trim() != this.cm.state.doc.toString().trim()) {\n\t\t\t\t\t\t\tthis.cm.setState(this._newEditorState(m));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t),\n\t\t\t(m, c, change) => {\n\t\t\t\t// If there is a change to the keymap model, set a new state.\n\t\t\t\tif (change) {\n\t\t\t\t\tthis.cm.setState(this._newEditorState(this.state));\n\t\t\t\t}\n\t\t\t},\n\t\t);\n\t\tlet rel = this.elem.render(el);\n\t\tthis._createEditor(this.state);\n\t\tthis._setEmpty();\n\n\t\treturn rel;\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tlet sel = this._getSelection();\n\t\t\tthis.state?.setDoc(this._getValue(), sel.anchor, sel.head);\n\t\t\tthis._destroyEditor();\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n\n\t/**\n\t * Creates the editor if we have are rendered and have a state, otherwise\n\t * destroys the editor. If an editor already exists, we set a new state.\n\t * @param {object} state State object\n\t */\n\t_createEditor(state) {\n\t\tlet rel = this.elem?.getComponent().getComponent().getElement();\n\t\tif (rel && state) {\n\t\t\tlet editorState = this._newEditorState(state);\n\t\t\tif (this.cm) {\n\t\t\t\tthis.cm.setState(editorState);\n\t\t\t} else {\n\t\t\t\tthis.cm = new EditorView({\n\t\t\t\t\tstate: editorState,\n\t\t\t\t\tparent: rel,\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tthis._destroyEditor();\n\t\t}\n\t}\n\n\t/**\n\t * Destroys the editor if it exists.\n\t */\n\t_destroyEditor() {\n\t\tif (this.cm) {\n\t\t\tthis.cm.destroy();\n\t\t\tthis.cm = null;\n\t\t}\n\t}\n\n\t/**\n\t * Set a new state. This will set a new editor state if rendered.\n\t * @param {object} state State object.\n\t */\n\tsetState(state) {\n\t\tstate = state || null;\n\t\tif (state !== this.state) {\n\t\t\tthis.state = state;\n\t\t\tif (this.elem) {\n\t\t\t\tthis.elem.getComponent().setModel(this.state);\n\t\t\t\tthis._createEditor(state);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Tries to set the focus to the editor, if it is rendered.\n\t */\n\tfocus() {\n\t\tif (this.cm) {\n\t\t\tthis.cm.focus();\n\t\t}\n\t}\n\n\tcyclePrev() {\n\t\tthis._cycleHistory(true, this.cm);\n\t}\n\n\tcycleNext() {\n\t\tthis._cycleHistory(false, this.cm);\n\t}\n\n\tinserNewLine() {\n\t\tinsertNewline(this.cm);\n\t}\n\n\tsend() {\n\t\tthis._onSend(this.cm);\n\t}\n\n\ttabComplete() {\n\t\ttabComplete(this.cm);\n\t}\n\n\t_newEditorState(state) {\n\t\tlet keymapArray = [];\n\n\t\tlet keymapProps = this.module.self.getKeymapModel().props;\n\t\tfor (let key in keymapProps) {\n\t\t\tlet v = keymapProps[key];\n\t\t\tkeymapArray.push(Object.assign({}, v, { key, run: (ctx) => v.run(state, ctx) }));\n\t\t}\n\n\t\tkeymapArray.push(...[\n\t\t\t{ key: 'Enter', run: this._onEnter },\n\t\t\t{ key: 'Ctrl-Enter', run: insertNewline },\n\t\t\t{ key: 'Ctrl-ArrowUp', run: this._cyclePrev },\n\t\t\t{ key: 'Cmd-ArrowUp', run: this._cyclePrev },\n\t\t\t{ key: 'Ctrl-P', run: this._cyclePrev },\n\t\t\t{ key: 'Cmd-P', run: this._cyclePrev },\n\t\t\t{ key: 'Ctrl-ArrowDown', run: this._cycleNext },\n\t\t\t{ key: 'Cmd-ArrowDown', run: this._cycleNext },\n\t\t\t{ key: 'Ctrl-N', run: this._cycleNext },\n\t\t\t{ key: 'Cmd-N', run: this._cycleNext },\n\t\t\t...standardKeymap,\n\t\t]);\n\t\tlet editorState = EditorState.create({\n\t\t\tdoc: state.doc,\n\t\t\tselection: { anchor: state.anchor || 0, head: state.head || 0 },\n\t\t\textensions: [\n\t\t\t\ttabCompletion({\n\t\t\t\t\tcomplete: editorState => this.module.cmd.getCMTabComplete(editorState),\n\t\t\t\t}),\n\t\t\t\tspellcheck,\n\t\t\t\tthis.module.cmd.getCMFormattingStyle(),\n\t\t\t\tkeymap.of(keymapArray),\n\t\t\t\tstate.getCMLanguage(),\n\t\t\t\tthis.module.cmd.getCMHighlightStyle(),\n\t\t\t\tEditorView.lineWrapping,\n\t\t\t\tEditorView.updateListener.of(this._onEditorUpdate),\n\t\t\t],\n\t\t});\n\t\treturn editorState;\n\t}\n\n\t// Sets a new editor state with the provided doc string value, and updates the state\n\t_setConsole(doc) {\n\t\tthis.state?.setDoc(doc, doc.length);\n\t\tif (this.cm) {\n\t\t\tthis.cm.setState(this._newEditorState(this.state));\n\t\t}\n\t}\n\n\t_onEnter(ctx) {\n\t\treturn this.module.self.getModel().mode == 'touch'\n\t\t\t? insertNewline(ctx)\n\t\t\t: this._onSend(ctx);\n\t}\n\n\t_onSend(ctx) {\n\t\tlet token = getToken(ctx.state);\n\n\t\tlet char = this.module.player.getActiveChar();\n\t\tthis.module.cmd.exec({\n\t\t\tplayer: this.module.player.getPlayer(),\n\t\t\tchar,\n\t\t}, token.state).catch(err => {\n\t\t\tif (typeof err == 'object' && err) {\n\t\t\t\tif (err.code) {\n\t\t\t\t\tthis.module.charLog.logError(char, err);\n\t\t\t\t} else if (err.render) {\n\t\t\t\t\tthis.module.charLog.logComponent(char, 'errorComponent', err);\n\t\t\t\t}\n\t\t\t\tconsole.error(err, token.state);\n\t\t\t} else {\n\t\t\t\tconsole.error(err, token.state);\n\t\t\t}\n\t\t});\n\n\t\tthis.state?.storeHistory();\n\t\tthis._setConsole('');\n\t\treturn true;\n\t}\n\n\t_onEditorUpdate(update) {\n\t\tlet view = update.view;\n\t\tlet sel = this._getSelection();\n\t\tthis.state?.setDoc(view.state.doc.toString(), sel.anchor, sel.head);\n\n\t\tthis._setEmpty();\n\t}\n\n\t_setEmpty() {\n\t\tif (this.elem && this.cm) {\n\t\t\tthis.elem.getComponent().getComponent()[this.cm.state.doc.toString() ? 'removeClass' : 'addClass']('empty');\n\t\t}\n\t}\n\n\t_getValue() {\n\t\treturn (this.cm ? this.cm.state.doc.toString() : this.state?.doc || '').trim();\n\t}\n\n\t_getSelection() {\n\t\treturn this.cm ? this.cm.state.selection.main : { anchor: 0, head: 0 };\n\t}\n\n\t_cycleHistory(prev, ctx) {\n\t\tthis._setConsole(this.state\n\t\t\t? prev\n\t\t\t\t? this.state.prevHistory()\n\t\t\t\t: this.state.nextHistory()\n\t\t\t: '',\n\t\t);\n\t\treturn true;\n\t}\n}\n\nexport default ConsoleEditor;\n","import { Elem, Txt } from 'modapp-base-component';\nimport { CollectionList, ModelComponent, CollectionComponent } from 'modapp-resource-component';\nimport FAIcon from 'components/FAIcon';\nimport SimpleBar from 'components/SimpleBar';\nimport Collapser from 'components/Collapser';\nimport Fader from 'components/Fader';\nimport counterString from 'utils/counterString';\nimport ConsoleControlledChar from './ConsoleControlledChar';\nimport ConsoleEditor from './ConsoleEditor';\n\nclass ConsoleComponent {\n\tconstructor(module, model, layoutId) {\n\t\tthis.module = module;\n\t\tthis.model = model;\n\t\tthis.layout = layoutId || 'desktop';\n\t\tthis.editor = new ConsoleEditor(this.module, model.state);\n\n\t\t// Bind callbacks\n\t\tthis._onClick = this._onClick.bind(this);\n\t}\n\n\trender(el) {\n\n\t\tlet components = {};\n\t\tthis.elem = new ModelComponent(\n\t\t\tthis.module.self.getModel(),\n\t\t\tnew Elem(n => n.elem('div', { className: 'console console--layout' + this.layout }, [\n\t\t\t\tn.elem('div', { className: 'console--container' }, [\n\t\t\t\t\tn.elem('div', { className: 'console--controlled' }, [\n\t\t\t\t\t\tn.component(new CollectionComponent(\n\t\t\t\t\t\t\tthis.module.player.getControlled(),\n\t\t\t\t\t\t\tnew Collapser(),\n\t\t\t\t\t\t\t(col, c) => {\n\t\t\t\t\t\t\t\tc.setComponent(components.controlled = col.length > 1 || this.layout == 'desktop'\n\t\t\t\t\t\t\t\t\t? components.controlled || new CollectionList(\n\t\t\t\t\t\t\t\t\t\tthis.module.player.getControlled(),\n\t\t\t\t\t\t\t\t\t\tm => new ConsoleControlledChar(this.module, m, { onClick: this._onClick, layout: this.layout }),\n\t\t\t\t\t\t\t\t\t\t{ className: 'console--controlledlist', horizontal: true },\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t: null,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t)),\n\t\t\t\t\t]),\n\t\t\t\t\tn.elem('div', { className: 'console--editorcont' }, [\n\t\t\t\t\t\tn.elem('div', { className: 'console--sendtools console--touchonly' }, [\n\t\t\t\t\t\t\tn.elem('button', {\n\t\t\t\t\t\t\t\tclassName: 'console--toolbtnfull iconbtn small primary',\n\t\t\t\t\t\t\t\tevents: {\n\t\t\t\t\t\t\t\t\tclick: (c, e) => {\n\t\t\t\t\t\t\t\t\t\tthis.editor.send();\n\t\t\t\t\t\t\t\t\t\tthis.editor.focus();\n\t\t\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t}, [\n\t\t\t\t\t\t\t\tn.component(new FAIcon('paper-plane')),\n\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t]),\n\t\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\t\tthis.model,\n\t\t\t\t\t\t\tnew ModelComponent(\n\t\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\t\tnew Elem(n => n.elem('div', { className: 'console--historytools' }, [\n\t\t\t\t\t\t\t\t\tn.elem('cyclePrev', 'button', {\n\t\t\t\t\t\t\t\t\t\tclassName: 'console--toolbtn iconbtn small',\n\t\t\t\t\t\t\t\t\t\tevents: {\n\t\t\t\t\t\t\t\t\t\t\tclick: (c, e) => {\n\t\t\t\t\t\t\t\t\t\t\t\tthis.editor.cyclePrev();\n\t\t\t\t\t\t\t\t\t\t\t\tthis.editor.focus();\n\t\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t}, [\n\t\t\t\t\t\t\t\t\t\tn.component(new FAIcon('caret-up')),\n\t\t\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\t\t\tn.elem('button', {\n\t\t\t\t\t\t\t\t\t\tclassName: 'console--toolbtn console--touchonly iconbtn small',\n\t\t\t\t\t\t\t\t\t\tevents: {\n\t\t\t\t\t\t\t\t\t\t\tclick: (c, e) => {\n\t\t\t\t\t\t\t\t\t\t\t\tthis.editor.tabComplete();\n\t\t\t\t\t\t\t\t\t\t\t\tthis.editor.focus();\n\t\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t}, [\n\t\t\t\t\t\t\t\t\t\tn.component(new FAIcon('step-forward')),\n\t\t\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\t\t\tn.elem('cycleNext', 'button', {\n\t\t\t\t\t\t\t\t\t\tclassName: 'console--toolbtn iconbtn small',\n\t\t\t\t\t\t\t\t\t\tevents: {\n\t\t\t\t\t\t\t\t\t\t\tclick: (c, e) => {\n\t\t\t\t\t\t\t\t\t\t\t\tthis.editor.cycleNext();\n\t\t\t\t\t\t\t\t\t\t\t\tthis.editor.focus();\n\t\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t}, [\n\t\t\t\t\t\t\t\t\t\tn.component(new FAIcon('caret-down')),\n\t\t\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\t\t])),\n\t\t\t\t\t\t\t\t(m, c) => {\n\t\t\t\t\t\t\t\t\tc.setNodeProperty('cyclePrev', 'disabled', m && m.historyIdx ? null : 'disabled');\n\t\t\t\t\t\t\t\t\tc.setNodeProperty('cycleNext', 'disabled', !m || (m.historyIdx >= m.historyLength && m.isClean) ? 'disabled' : null);\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t(m, c) => {\n\t\t\t\t\t\t\t\tc.setModel(m.state);\n\t\t\t\t\t\t\t\tthis.editor.setState(m.state);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t)),\n\t\t\t\t\t\tn.elem('div', { className: 'console--main' }, [\n\t\t\t\t\t\t\tn.component('editor', new SimpleBar(this.editor, { className: 'console--editor', autoHide: false })),\n\t\t\t\t\t\t\tn.component(new CollectionComponent(\n\t\t\t\t\t\t\t\tthis.module.player.getControlled(),\n\t\t\t\t\t\t\t\tnew Fader(null, { className: 'console--counter' }),\n\t\t\t\t\t\t\t\t(col, c) => {\n\t\t\t\t\t\t\t\t\tif (col.length != 1 || this.layout == 'desktop') {\n\t\t\t\t\t\t\t\t\t\tc.setComponent(null);\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tlet char = col.atIndex(0);\n\t\t\t\t\t\t\t\t\tc.setComponent(new ModelComponent(\n\t\t\t\t\t\t\t\t\t\tthis.module.charLog.getUnseenTargeted(),\n\t\t\t\t\t\t\t\t\t\tnew ModelComponent(\n\t\t\t\t\t\t\t\t\t\t\tthis.module.charLog.getUnseen(),\n\t\t\t\t\t\t\t\t\t\t\tnew Elem(n => n.elem('div', { className: 'counter' }, [\n\t\t\t\t\t\t\t\t\t\t\t\tn.component('txt', new Txt(\"\")),\n\t\t\t\t\t\t\t\t\t\t\t])),\n\t\t\t\t\t\t\t\t\t\t\t(m, c) => {\n\t\t\t\t\t\t\t\t\t\t\t\tlet l = m.props[char.id];\n\t\t\t\t\t\t\t\t\t\t\t\tc.getNode('txt').setText(counterString(l));\n\t\t\t\t\t\t\t\t\t\t\t\tc[l ? 'removeClass' : 'addClass']('hide');\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t(m, c) => c.getComponent()[m.props[char.id] ? 'addClass' : 'removeClass']('alert'),\n\t\t\t\t\t\t\t\t\t));\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t]),\n\t\t\t\t\t]),\n\t\t\t\t]),\n\t\t\t])),\n\t\t\t(m, c) => c[m.mode == 'touch' ? 'addClass' : 'removeClass']('console--touch'),\n\t\t);\n\t\treturn this.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n\n\t_onClick() {\n\t\tif (!this.elem) return;\n\n\t\t// let editor = this.elem.getComponent().getNode('editor');\n\t\t// if (editor) {\n\t\t// \t// editor.getComponent().focus();\n\t\t// }\n\t}\n}\n\nexport default ConsoleComponent;\n","import { Model } from 'modapp-resource';\n\nconst consoleStateStoragePrefix = 'console.state.';\nconst historyStorageSuffix = '.history';\n\nclass ConsoleState extends Model {\n\n\t/**\n\t * Creates an instance of ConsoleState.\n\t * @param {object} module Module object.\n\t * @param {string} ctrlId Controlled character ID.\n\t * @param {object} [opt] Optional params.\n\t * @param {number} [opt.historySize] History size. Defaults to 64.\n\t * @param {module:modapp~EventBus} [opt.eventBus] Event bus.\n\t */\n\tconstructor(module, ctrlId, opt) {\n\t\topt = Object.assign({ eventBus: module.self.app.eventBus }, opt);\n\t\tsuper(opt);\n\n\t\t// Store constants\n\t\tthis._ctrlId = ctrlId;\n\t\tthis._historySize = opt.historySize || 64;\n\t\t// Store data\n\t\tthis._doc = \"\";\n\t\tthis._anchor = 0;\n\t\tthis._head = 0;\n\t\tthis._history = [];\n\t\tthis._historyIdx = 0;\n\t\tthis._cmLanguage = module.cmd.getCMLanguage(ctrlId);\n\n\t\tthis._load();\n\t\tthis._updateModel(false, true);\n\t}\n\n\t_updateModel(emit, reset) {\n\t\treturn super._update({\n\t\t\tdoc: this._doc,\n\t\t\tanchor: this._anchor,\n\t\t\thead: this._head,\n\t\t\thistoryIdx: this._historyIdx,\n\t\t\thistoryLength: this._history.length,\n\t\t\tisEmpty: !this._doc,\n\t\t\tisClean: !(this._doc.trim()),\n\t\t\tisModified: this.isModified(),\n\t\t}, emit, reset);\n\t}\n\n\t/**\n\t * Get the ID of the controlled character.\n\t * @returns {string} Controlled character ID.\n\t */\n\tgetCtrlId() {\n\t\treturn this._ctrlId;\n\t}\n\n\t/**\n\t * returns the CodeMirror language for this character.\n\t * @returns {object} CodeMirror language object.\n\t */\n\tgetCMLanguage() {\n\t\treturn this._cmLanguage;\n\t}\n\n\t/**\n\t * Set current text of the doc.\n\t * @param {string} doc Console doc text.\n\t * @param {number} anchor Main selection anchor.\n\t * @param {number} [head] Main selection head. Defaults to the same as anchor if omitted.\n\t */\n\tsetDoc(doc, anchor, head) {\n\t\tthis._doc = doc;\n\t\tthis._anchor = anchor || 0;\n\t\tthis._head = (typeof head == 'number' ? head : anchor) || 0;\n\t\tthis._saveDoc();\n\t\tthis._updateModel(true);\n\t}\n\n\t/**\n\t * Tries to store away any modified entry, moving index to end no matter.\n\t * @returns {string} Current doc text.\n\t */\n\tstoreHistory() {\n\t\tthis._addHistory();\n\t\treturn this._getHistory(this._history.length, true);\n\t}\n\n\t/**\n\t * Cycles to next history, and storing away any modified entry to history.\n\t * @returns {string} Current doc text.\n\t */\n\tnextHistory() {\n\t\treturn this._getHistory(this._addHistory() ? this._history.length : this._historyIdx + 1, true);\n\t}\n\n\t/**\n\t * Cycles to previous history, and storing away any modified entry to\n\t * history.\n\t * @returns {string} Current doc text.\n\t */\n\tprevHistory() {\n\t\treturn this._getHistory(this._addHistory() ? this._history.length - 2 : this._historyIdx - 1, true);\n\t}\n\n\t/**\n\t * Check if the document is modified in comparison to the history document\n\t * at current index. It compares the trimmed version of the document.\n\t * @returns {boolean} True if modified, otherwise false.\n\t */\n\tisModified() {\n\t\treturn (this._history[this._historyIdx] || \"\") != (this._doc.trim());\n\t}\n\n\t/**\n\t * Loads the history at an index and stores away any modifications as a new history entry.\n\t * @param {number} idx History index to load.\n\t * @returns {string} Loaded doc text.\n\t */\n\t_getHistory(idx) {\n\t\tidx = idx || 0;\n\t\tlet doc = \"\";\n\t\tif (idx < 0) {\n\t\t\tidx = 0;\n\t\t}\n\t\tif (idx >= this._history.length) {\n\t\t\tidx = this._history.length;\n\t\t} else {\n\t\t\tdoc = this._history[idx] || \"\";\n\t\t}\n\n\t\tthis._doc = doc;\n\t\tthis._historyIdx = idx;\n\t\tthis._saveDoc();\n\t\tthis._updateModel(true);\n\n\t\treturn doc;\n\t}\n\n\t_load() {\n\t\tif (!localStorage) return;\n\n\t\ttry {\n\t\t\tlet raw = localStorage.getItem(consoleStateStoragePrefix + this._ctrlId);\n\t\t\tif (raw) {\n\t\t\t\tlet dta = JSON.parse(raw);\n\t\t\t\tthis._doc = dta.doc || '';\n\t\t\t\tthis._anchor = dta.anchor || this._doc.length;\n\t\t\t\tthis._head = dta.head || this._doc.length;\n\t\t\t\tthis._historyIdx = dta.historyIdx || 0;\n\t\t\t}\n\t\t} catch (ex) {\n\t\t\tconsole.error(ex);\n\t\t}\n\n\t\ttry {\n\t\t\tlet raw = localStorage.getItem(consoleStateStoragePrefix + this._ctrlId + historyStorageSuffix);\n\t\t\tif (raw) {\n\t\t\t\tlet dta = JSON.parse(raw);\n\t\t\t\tif (Array.isArray(dta)) {\n\t\t\t\t\tthis._history = dta;\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (ex) {\n\t\t\tconsole.error(ex);\n\t\t}\n\t}\n\n\t_saveDoc() {\n\t\tif (!localStorage) return;\n\n\t\ttry {\n\t\t\tlocalStorage.setItem(consoleStateStoragePrefix + this._ctrlId, JSON.stringify({\n\t\t\t\tdoc: this._doc,\n\t\t\t\tanchor: this._anchor,\n\t\t\t\thead: this._head,\n\t\t\t\thistoryIdx: this._historyIdx,\n\t\t\t}));\n\t\t} catch (ex) {\n\t\t\tconsole.error(ex);\n\t\t}\n\t}\n\n\t_saveHistory() {\n\t\tif (!localStorage) return;\n\n\t\ttry {\n\t\t\tlocalStorage.setItem(consoleStateStoragePrefix + this._ctrlId + historyStorageSuffix, JSON.stringify(this._history));\n\t\t} catch (ex) {\n\t\t\tconsole.error(ex);\n\t\t}\n\t}\n\n\n\t/**\n\t * Tries to add current document to history, if it has been modified from\n\t * current history entry.\n\t * @returns {object} Null if no history was added, otherwise an object { shifted: boolean } if the history was shifted.\n\t */\n\t_addHistory() {\n\t\tlet l = this._history.length;\n\t\t// Get current history, or last history if we are at the end\n\t\tlet historyDoc = this._history[this._historyIdx >= l ? l - 1 : this._historyIdx] || \"\";\n\t\tlet trimDoc = this._doc.trim();\n\n\t\t// If we are clean, nothing is added\n\t\tif (!trimDoc || historyDoc == trimDoc) return null;\n\n\t\tthis._history.push(trimDoc);\n\n\t\t// Delete the last history entry if size if exceeded\n\t\tif (this._history.length > this._historySize) {\n\t\t\tthis._history.shift();\n\t\t\tthis._historyIdx--;\n\t\t}\n\n\t\tthis._saveHistory();\n\n\t\treturn true;\n\t}\n}\n\nexport default ConsoleState;\n","import { Model } from 'modapp-resource';\nimport ConsoleComponent from './ConsoleComponent';\nimport ConsoleState from './ConsoleState';\nimport getCtrlId from 'utils/getCtrlId';\nimport './console.scss';\n\n/**\n * Console draws player char menu.\n */\nclass Console {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\tthis.mode = typeof params.mode == 'string'\n\t\t\t? params.mode.toLowerCase()\n\t\t\t: null;\n\t\tif (this.mode != 'touch' && this.mode != 'keyboard') {\n\t\t\tthis.mode = 'auto';\n\t\t}\n\n\t\t// Bind callbacks\n\t\tthis._onActiveChange = this._onActiveChange.bind(this);\n\t\tthis._onMediaChange = this._onMediaChange.bind(this);\n\n\t\tthis.app.require([\n\t\t\t'api',\n\t\t\t'player',\n\t\t\t'cmd',\n\t\t\t'charLog',\n\t\t\t'avatar',\n\t\t\t'media',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\t\tthis.model = new Model({ data: { state: null, mode: this._getMode() }, eventBus: this.app.eventBus });\n\t\tthis.keymapModel = new Model({ eventBus: this.app.eventBus });\n\t\tthis.charStates = {};\n\n\t\tthis._setListeners(true);\n\t\tthis._onActiveChange({ char: this.module.player.getActiveChar() });\n\t}\n\n\tgetModel() {\n\t\treturn this.model;\n\t}\n\n\tgetKeymapModel() {\n\t\treturn this.keymapModel;\n\t}\n\n\t/**\n\t * Sets the current command text for a controlled character.\n\t * @param {string} ctrlId Controlled character ID.\n\t * @param {string} doc Console doc text.\n\t * @param {boolean} [storeHistory] Flag to store history before setting. Defaults to false.\n\t */\n\tsetCommand(ctrlId, doc, storeHistory) {\n\t\tlet state = this._getCharState(ctrlId);\n\t\tif (storeHistory) {\n\t\t\tstate.storeHistory();\n\t\t}\n\t\tstate.setDoc(doc, doc.length);\n\t}\n\n\t/**\n\t * Adds a keymap callback to the console.\n\t * @param {string} key Key to mapped, as defined by CodeMirror6.\n\t * @param {KeyBinding} binding Key binding, as defined by CodeMirror 6. It\n\t * differs in the run-Command getting the ConsoleState as the first\n\t * argument, and that the key is overwritten by the key.\n\t */\n\taddKeymap(key, binding) {\n\t\tthis.keymapModel.set({ [key]: binding });\n\t}\n\n\t/**\n\t * Removes a keymap callback.\n\t * @param {string} key Key to mapped, as defined by CodeMirror6.\n\t */\n\tremoveKeymap(key) {\n\t\tthis.keymapModel.set({ [key]: undefined });\n\t}\n\n\t_setListeners(on) {\n\t\tlet cb = on ? 'on' : 'off';\n\t\tthis.module.player[cb]('activeChange', this._onActiveChange);\n\t\tif (this.mode == 'auto') {\n\t\t\tthis.module.media.getModel()[cb]('change', this._onMediaChange);\n\t\t}\n\t}\n\n\t_onActiveChange(ev) {\n\t\tlet char = ev?.char;\n\t\tlet state = null;\n\t\tif (char) {\n\t\t\tlet ctrlId = getCtrlId(char);\n\t\t\tstate = this._getCharState(ctrlId);\n\t\t\tstate = this.charStates[ctrlId];\n\t\t\tif (!state) {\n\t\t\t\tstate = new ConsoleState(this.module, ctrlId);\n\t\t\t\tthis.charStates[ctrlId] = state;\n\t\t\t}\n\t\t}\n\t\tthis.model.set({ state });\n\t}\n\n\t_getCharState(ctrlId) {\n\t\tlet state = this.charStates[ctrlId];\n\t\tif (!state) {\n\t\t\tstate = new ConsoleState(this.module, ctrlId);\n\t\t\tthis.charStates[ctrlId] = state;\n\t\t}\n\t\treturn state;\n\t}\n\n\t_onMediaChange(ev) {\n\t\tthis.model.set({ mode: this._getMode() });\n\t}\n\n\t_getMode() {\n\t\treturn this.mode == 'auto'\n\t\t\t? this.module.media.getModel().pointerCoarse ? 'touch' : 'keyboard'\n\t\t\t: this.mode;\n\t}\n\n\tnewConsole(layoutId) {\n\t\treturn new ConsoleComponent(this.module, this.model, layoutId);\n\t}\n\n\tdispose() {\n\t\tthis._setListeners(false);\n\t}\n}\n\nexport default Console;\n","import { Elem } from 'modapp-base-component';\nimport Fader from 'components/Fader';\nimport './layoutDesktop.scss';\n\n/**\n * LayoutDesktop draws the main layout wireframe for desktop (default).\n */\nclass LayoutDesktop {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'layout' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\n\t\tthis.elem = new Elem(n => (\n\t\t\tn.elem('div', { className: 'layoutdesktop' }, [\n\t\t\t\tn.elem('div', { className: 'layoutdesktop--container' }, [\n\t\t\t\t\tn.component('playerPanel', new Fader(null, { className: 'layoutdesktop--playerpanel' })),\n\t\t\t\t\tn.component('activePanel', new Fader(null, { className: 'layoutdesktop--activepanel' })),\n\t\t\t\t]),\n\t\t\t])\n\t\t));\n\n\t\tthis.module.layout.setDefaultLayout(this.elem);\n\t}\n\n\tsetNode(node, component) {\n\t\tthis.elem.getNode(node).setComponent(component);\n\t}\n\n\n\tdispose() {\n\t\tthis.module.layout.setDefaultLayout(null);\n\t}\n}\n\nexport default LayoutDesktop;\n","import { Elem } from 'modapp-base-component';\nimport { ModelHtml } from 'modapp-resource-component';\n\nclass ActivePanelPlaceholder {\n\tconstructor(module, info) {\n\t\tthis.module = module;\n\t\tthis.info = info;\n\t}\n\n\trender(el) {\n\t\tthis.elem = new Elem(n => n.elem('div', { className: 'activepanel-placeholder' }, [\n\t\t\tn.component(new ModelHtml(this.info, m => typeof m.greeting == 'undefined'\n\t\t\t\t? '<p>All characters are asleep.<br>Maybe we should wake someone up?</p>'\n\t\t\t\t: m.greeting,\n\t\t\t)),\n\t\t]));\n\t\treturn this.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n}\n\nexport default ActivePanelPlaceholder;\n","import { Elem } from 'modapp-base-component';\nimport { Collection, sortOrderCompare } from 'modapp-resource';\nimport Fader from 'components/Fader';\nimport ActivePanelPlaceholder from './ActivePanelPlaceholder';\nimport './activePanel.scss';\n\n/**\n * ActivePanel draws the active character area.\n */\nclass ActivePanel {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\t\tthis.app.require([\n\t\t\t'layoutDesktop',\n\t\t\t'player',\n\t\t\t'api',\n\t\t\t'info',\n\t\t], this._init.bind(this));\n\n\t\t// Bind callbacks\n\t\tthis._onActiveChange = this._onActiveChange.bind(this);\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ activePanel: this }, module);\n\t\tthis.playerModel = this.module.player.getModel();\n\n\t\tthis.overlays = new Collection({\n\t\t\tidAttribute: m => m.id,\n\t\t\tcompare: sortOrderCompare,\n\t\t\teventBus: this.app.eventBus,\n\t\t});\n\t\tthis.renderedOverlays = {};\n\n\t\tthis.info = this.module.info.getCore();\n\n\t\tthis.elem = new Elem(n => n.elem('div', { className: 'activepanel' }, [\n\t\t\tn.component('charPanel', new Fader(null, { className: 'activepanel--charpanel' })),\n\t\t\tn.elem('main', 'div', { className: 'activepanel--main' }, [\n\t\t\t\tn.component('logPanel', new Fader(null, { className: 'activepanel--logpanel' })),\n\t\t\t\tn.component('consolePanel', new Fader(null, { className: 'activepanel--consolepanel' })),\n\t\t\t]),\n\t\t\tn.component('roomPanel', new Fader(null, { className: 'activepanel--roompanel' })),\n\t\t]));\n\n\t\tthis._setListeners(true);\n\t\tthis._onActiveChange();\n\t}\n\n\tsetNode(node, component) {\n\t\tthis.elem.getNode(node).setComponent(component);\n\t}\n\n\trender(el) {\n\t\tlet rel = this.elem.render(el);\n\t\t// Render main area overlays\n\t\tlet main = this.elem.getNode('main');\n\t\tfor (let overlay of this.overlays) {\n\t\t\tlet comp = overlay.componentFactory(this.playerModel.player);\n\t\t\tif (comp) {\n\t\t\t\tcomp.render(main);\n\t\t\t\tthis.renderedOverlays[overlay.id] = comp;\n\t\t\t}\n\t\t}\n\t\treturn rel;\n\t}\n\n\tunrender() {\n\t\tfor (let overlayId in this.renderedOverlays) {\n\t\t\tthis.renderedOverlays[overlayId].unrender();\n\t\t}\n\t\tthis.renderedOverlays = {};\n\t\tthis.elem.unrender();\n\t}\n\n\t/**\n\t * Registers a main area overlay component.\n\t * @param {object} overlay Overlay object\n\t * @param {string} overlay.id Overlay ID.\n\t * @param {number} overlay.sortOrder Sort order.\n\t * @param {function} overlay.componentFactory Overlay component factory: function(player) -> Component\n\t * @returns {this}\n\t */\n\taddOverlay(overlay) {\n\t\tif (this.overlays.get(overlay.id)) {\n\t\t\tthrow new Error(\"Overlay ID already registered: \", overlay.id);\n\t\t}\n\t\tthis.overlays.add(overlay);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Unregisters a previously registered main area overlay.\n\t * @param {string} overlayId Overlay ID.\n\t * @returns {this}\n\t */\n\tremoveOverlay(overlayId) {\n\t\tthis.overlays.remove(overlayId);\n\t\tlet comp = this.renderedOverlays[overlayId];\n\t\tif (comp) {\n\t\t\tcomp.unrender();\n\t\t\tdelete this.renderedOverlays[overlayId];\n\t\t}\n\t\treturn this;\n\t}\n\n\t_setListeners(on) {\n\t\tthis.playerModel[on ? 'on' : 'off']('change', this._onActiveChange);\n\t}\n\n\t_onActiveChange(changed) {\n\t\tif (changed && !changed.hasOwnProperty('activeChar')) {\n\t\t\treturn;\n\t\t}\n\t\tthis.module.layoutDesktop.setNode('activePanel', this.playerModel.activeChar ? this : new ActivePanelPlaceholder(this.module, this.info));\n\t}\n\n\n\tdispose() {\n\t\tthis.module.layoutDesktop.setActivePanel(null);\n\t\tif (this.info) {\n\t\t\tthis.info.dispose();\n\t\t\tthis.info = null;\n\t\t}\n\t}\n}\n\nexport default ActivePanel;\n","/**\n * ActivePanelSetter adds the Console and CharLog components to the active panel.\n */\nclass ActivePanelSetter {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\t\tthis.app.require([\n\t\t\t'activePanel',\n\t\t\t'charLog',\n\t\t\t'console',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\n\t\tthis.module.activePanel.setNode('logPanel', this.module.charLog.getComponent());\n\t\tthis.module.activePanel.setNode('consolePanel', this.module.console.newConsole('desktop'));\n\t}\n\n\tdispose() {\n\t\tthis.module.activePanel.setNode('consolePanel', null);\n\t\tthis.module.activePanel.setNode('logPanel', null);\n\t}\n}\n\nexport default ActivePanelSetter;\n","import { Model } from 'modapp-resource';\nimport Panel from 'components/Panel';\nimport './charPanel.scss';\n\n/**\n * CharPanel draws player char menu.\n */\nclass CharPanel {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\t// Bind callbacks\n\t\tthis._onCharPagesChange = this._onCharPagesChange.bind(this);\n\t\tthis._onModelChange = this._onModelChange.bind(this);\n\t\tthis._onCharPanelOpen = this._onCharPanelOpen.bind(this);\n\n\t\tthis.app.require([\n\t\t\t'activePanel',\n\t\t\t'charPages',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\n\t\tthis.model = new Model({\n\t\t\tdata: Object.assign({ pageInfo: null }, this.module.charPages.getModel().props),\n\t\t\teventBus: this.module.self.app.eventBus,\n\t\t});\n\t\tthis.component = new Panel(\"\", null, { align: 'left', className: 'charpanel' });\n\n\t\tthis.module.activePanel.setNode('charPanel', this.component);\n\t\tthis._setListeners(true);\n\t\tthis._onCharPagesChange();\n\t\tthis._onModelChange();\n\t}\n\n\t/**\n\t * Toggles the panel between open or close.\n\t * @param {bool} open State to toggle to. Defaults to toggle between open and close.\n\t * @returns {this}\n\t */\n\ttoggle(open) {\n\t\tthis.component.toggle(open);\n\t\treturn this;\n\t}\n\n\t_setListeners(on) {\n\t\tlet cb = on ? 'on' : 'off';\n\t\tthis.module.charPages.getModel()[cb]('change', this._onCharPagesChange);\n\t\tthis.model[cb]('change', this._onModelChange);\n\t\tthis.module.charPages[cb]('open', this._onCharPanelOpen);\n\t}\n\n\t_onCharPagesChange(change) {\n\t\tif (!change || change.hasOwnProperty('factory')) {\n\t\t\tlet m = this.module.charPages.getModel();\n\t\t\tlet factory = m.factory;\n\t\t\tthis.model.set(Object.assign({\n\t\t\t\tpageInfo: factory\n\t\t\t\t\t? factory('desktop')\n\t\t\t\t\t: null,\n\t\t\t}, m.props));\n\t\t}\n\t}\n\n\t_onModelChange(change) {\n\t\tif (change && !change.hasOwnProperty('pageInfo')) {\n\t\t\treturn;\n\t\t}\n\n\n\t\tlet m = this.model;\n\t\tlet pi = m.pageInfo;\n\t\tlet page = m.page;\n\n\t\tif (!pi) {\n\t\t\tthis.component.setTitle(\"\").setButton(null).setComponent(null);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.component\n\t\t\t.setTitle(pi.title || '')\n\t\t\t.setButton(pi.close || (page && page.close) || null, pi.closeIcon || 'chevron-circle-left')\n\t\t\t.setComponent(pi.component, {\n\t\t\t\tonRender: () => {\n\t\t\t\t\t// Restore scrolling of page\n\t\t\t\t\tlet sb = this.component.getSimpleBar();\n\t\t\t\t\tif (sb) {\n\t\t\t\t\t\tsb.getScrollElement().scrollTop = page.state.scrollTop || 0;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tonUnrender: () => {\n\t\t\t\t\t// Store scrolling of page\n\t\t\t\t\tlet sb = this.component.getSimpleBar();\n\t\t\t\t\tif (sb) {\n\t\t\t\t\t\tpage.state.scrollTop = sb.getScrollElement().scrollTop;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t});\n\t}\n\n\t_onCharPanelOpen() {\n\t\tthis.toggle(true);\n\t}\n\n\tdispose() {\n\t\tthis._setListeners(false);\n\t\tthis.module.activePanel.setNode('charPanel', null);\n\t}\n}\n\nexport default CharPanel;\n","import { Context } from 'modapp-base-component';\nimport { CollectionList } from 'modapp-resource-component';\nimport { CollectionWrapper } from 'modapp-resource';\n\nclass PlayerPanelFooter {\n\tconstructor(module) {\n\t\tthis.module = module;\n\t}\n\n\trender(el) {\n\t\tthis.elem = new Context(\n\t\t\t() => new CollectionWrapper(this.module.playerTools.getFooterTools(), {\n\t\t\t\tfilter: t => t.filter ? t.filter() : true,\n\t\t\t}),\n\t\t\ttools => tools.dispose(),\n\t\t\ttools => new CollectionList(\n\t\t\t\ttools,\n\t\t\t\tt => t.componentFactory(),\n\t\t\t\t{\n\t\t\t\t\tclassName: 'playerpanel-footer flex-row flex-center',\n\t\t\t\t\tsubClassName: t => t.className || null,\n\t\t\t\t\thorizontal: true,\n\t\t\t\t},\n\t\t\t),\n\t\t);\n\t\treturn this.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n}\n\nexport default PlayerPanelFooter;\n","import { Transition } from 'modapp-base-component';\nimport { Model, Collection, sortOrderCompare } from 'modapp-resource';\nimport Panel from 'components/Panel';\nimport PlayerPanelFooter from './PlayerPanelFooter';\nimport './playerPanel.scss';\n\n/**\n * PlayerPanel draws player panel.\n */\nclass PlayerPanel {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\t// Bind callbacks\n\t\tthis._onPlayerTabsChange = this._onPlayerTabsChange.bind(this);\n\t\tthis._onModelChange = this._onModelChange.bind(this);\n\n\t\tthis.app.require([\n\t\t\t'layoutDesktop',\n\t\t\t'playerTabs',\n\t\t\t'playerTools',\n\t\t\t'api',\n\t\t\t'player',\n\t\t\t'confirm',\n\t\t\t'auth',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\n\t\tthis.footerTools = new Collection({\n\t\t\tidAttribute: m => m.id,\n\t\t\tcompare: sortOrderCompare,\n\t\t\teventBus: this.app.eventBus,\n\t\t});\n\n\t\tthis.model = new Model({\n\t\t\tdata: Object.assign({ pageInfo: null }, this.module.playerTabs.getModel().props),\n\t\t\teventBus: this.module.self.app.eventBus,\n\t\t});\n\n\t\tthis.tabPage = new Transition({ className: 'playerpanel--tabpage' });\n\t\tthis.component = new Panel(\"\", null, {\n\t\t\talign: 'left',\n\t\t\tinstant: true,\n\t\t\tclassName: 'playerpanel',\n\t\t\tfooterComponent: new PlayerPanelFooter(this.module),\n\t\t\tsubheaderComponent: this.module.playerTabs.newTabs({\n\t\t\t\tclassName: 'playerpanel--tabs',\n\t\t\t\tcloseOnReselect: true,\n\t\t\t\thideDefaultTab: true,\n\t\t\t}),\n\t\t\tbtnClass: 'light',\n\t\t});\n\n\t\tthis._setListeners(true);\n\t\tthis._onPlayerTabsChange();\n\t\tthis._onModelChange();\n\n\t\tthis.module.layoutDesktop.setNode('playerPanel', this.component);\n\t}\n\n\t/**\n\t * Gets a collection of footer tools.\n\t * @returns {Collection} Collection of tools.\n\t */\n\tgetFooterTools() {\n\t\treturn this.footerTools;\n\t}\n\n\t/**\n\t * Registers a footer tool.\n\t * @param {object} tool Tool object\n\t * @param {string} tool.id Tool ID.\n\t * @param {number} tool.sortOrder Sort order.\n\t * @param {function} tool.componentFactory Tool component factory: function() -> Component\n\t * @param {number} [tool.filter] Filter function: function() -> bool\n\t * @param {number} [tool.className] Class to give to the list item container.\n\t * @returns {this}\n\t */\n\taddFooterTool(tool) {\n\t\tif (this.footerTools.get(tool.id)) {\n\t\t\tthrow new Error(\"Footer tool ID already registered: \", tool.id);\n\t\t}\n\t\tthis.footerTools.add(tool);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Unregisters a previously registered footer tool.\n\t * @param {string} toolId Tool ID.\n\t * @returns {this}\n\t */\n\tremoveFooterTool(toolId) {\n\t\tthis.footerTools.remove(toolId);\n\t\treturn this;\n\t}\n\n\t_setListeners(on) {\n\t\tlet cb = on ? 'on' : 'off';\n\t\tthis.module.playerTabs.getModel()[cb]('change', this._onPlayerTabsChange);\n\t\tthis.model[cb]('change', this._onModelChange);\n\t}\n\n\t_onPlayerTabsChange(change) {\n\t\tlet m = this.module.playerTabs.getModel();\n\t\tif (!change || change.hasOwnProperty('factory') || (change.hasOwnProperty('defaultTab') && !m.tabId)) {\n\t\t\tlet m = this.module.playerTabs.getModel();\n\t\t\tlet factory = m.factory || this.module.playerTabs.getDefaultTabFactory();\n\t\t\tthis.model.set(Object.assign({\n\t\t\t\tpageInfo: factory\n\t\t\t\t\t? factory('desktop')\n\t\t\t\t\t: null,\n\t\t\t}, m.props));\n\t\t}\n\t}\n\n\t_onModelChange(change) {\n\t\tif (change && !change.hasOwnProperty('pageInfo')) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet m = this.model;\n\t\tlet pi = m.pageInfo;\n\n\t\tif (pi) {\n\t\t\tlet dir = 0;\n\t\t\tif (change && change.hasOwnProperty('tabId')) {\n\t\t\t\tdir = this.module.playerTabs.getTabDirection(change.tabId, m.tabId);\n\t\t\t}\n\t\t\tthis.tabPage[dir == 0\n\t\t\t\t? 'fade'\n\t\t\t\t: dir > 0\n\t\t\t\t\t? 'slideLeft'\n\t\t\t\t\t: 'slideRight'\n\t\t\t](pi.component);\n\n\t\t\tthis.component\n\t\t\t\t.setTitle(pi.title || '')\n\t\t\t\t.setButton((m.page && m.page.close) || null, pi.closeIcon || (m.pageIdx > 0\n\t\t\t\t\t? 'chevron-circle-left'\n\t\t\t\t\t: 'times'\n\t\t\t\t))\n\t\t\t\t.setComponent(this.tabPage);\n\t\t}\n\t}\n\n\tdispose() {\n\t\tthis._setListeners(false);\n\t\tthis.module.layoutDesktop.setNode('playerPanel', null);\n\t}\n}\n\nexport default PlayerPanel;\n","import { Transition } from 'modapp-base-component';\nimport { ModelComponent } from 'modapp-resource-component';\nimport Panel from 'components/Panel';\nimport OnRender from 'components/OnRender';\n\nfunction getAreaIdx(areas, area) {\n\treturn areas ? areas.indexOf(area) : -1;\n}\n\nclass RoomPanelComponent {\n\tconstructor(module) {\n\t\tthis.module = module;\n\n\t\tthis.transition = new Transition(null, { duration: 150 }),\n\t\tthis.panel = new Panel(\"\", this.transition, {\n\t\t\talign: 'right',\n\t\t\tclassName: 'roompanel',\n\t\t\tsubheaderComponent: this.module.roomPages.newZoomBar({ className: 'roompanel--zoombar' }),\n\t\t});\n\t}\n\n\trender(el) {\n\t\tthis.elem = new ModelComponent(\n\t\t\tthis.module.roomPages.getModel(),\n\t\t\tthis.panel,\n\t\t\t(m, c, change) => {\n\t\t\t\tif (!change || change.hasOwnProperty('factory')) {\n\t\t\t\t\tlet pageInfo = m.factory?.('desktop');\n\n\t\t\t\t\tif (!pageInfo) {\n\t\t\t\t\t\tc.setTitle(\"\").setButton(null).setComponent(null);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tlet cb = 'fade';\n\t\t\t\t\tif (!change?.hasOwnProperty('char') && change?.hasOwnProperty('area')) {\n\t\t\t\t\t\tlet before = getAreaIdx(change?.hasOwnProperty('areas') ? change.areas : m.areas, change.area);\n\t\t\t\t\t\tlet after = getAreaIdx(m.areas, m.area);\n\t\t\t\t\t\tif (before >= 0 && after >= 0 && before != after) {\n\t\t\t\t\t\t\tcb = (after - before) > 0 ? 'slideLeft' : 'slideRight';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tlet page = m.page;\n\t\t\t\t\tthis.transition[cb](new OnRender(pageInfo.component, {\n\t\t\t\t\t\tafterRender: () => {\n\t\t\t\t\t\t\t// Restore scrolling of page\n\t\t\t\t\t\t\tlet sb = c.getSimpleBar();\n\t\t\t\t\t\t\tif (sb) {\n\t\t\t\t\t\t\t\tsb.getScrollElement().scrollTop = page.state.scrollTop || 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tbeforeUnrender: () => {\n\t\t\t\t\t\t\t// Store scrolling of page\n\t\t\t\t\t\t\tlet sb = c.getSimpleBar();\n\t\t\t\t\t\t\tif (sb) {\n\t\t\t\t\t\t\t\tpage.state.scrollTop = sb.getScrollElement().scrollTop;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t}));\n\n\t\t\t\t\tc\n\t\t\t\t\t\t.setTitle(pageInfo.title || '')\n\t\t\t\t\t\t.setButton(pageInfo.close || page?.close || null, pageInfo.closeIcon || page?.closeIcon || 'chevron-circle-left')\n\t\t\t\t\t\t.setComponent(this.transition);\n\t\t\t\t}\n\t\t\t},\n\t\t);\n\t\tthis.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n\n\t/**\n\t * Toggles the panel between open or close.\n\t * @param {bool} open State to toggle to. Defaults to toggle between open and close.\n\t * @returns {this}\n\t */\n\ttoggle(open) {\n\t\tthis.panel.toggle(open);\n\t\treturn this;\n\t}\n}\n\nexport default RoomPanelComponent;\n","\nimport RoomPanelComponent from './RoomPanelComponent';\nimport './roomPanel.scss';\n\n/**\n * RoomPanel draws player room panel.\n */\nclass RoomPanel {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\t// Bind callbacks\n\t\tthis._onRoomPanelOpen = this._onRoomPanelOpen.bind(this);\n\n\t\tthis.app.require([\n\t\t\t'activePanel',\n\t\t\t'roomPages',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\n\t\tthis.component = new RoomPanelComponent(this.module);\n\n\t\tthis.module.activePanel.setNode('roomPanel', this.component);\n\t\tthis._setListeners(true);\n\t}\n\n\t/**\n\t * Toggles the panel between open or close.\n\t * @param {bool} open State to toggle to. Defaults to toggle between open and close.\n\t * @returns {this}\n\t */\n\ttoggle(open) {\n\t\tthis.component.toggle(open);\n\t\treturn this;\n\t}\n\n\t_setListeners(on) {\n\t\tlet cb = on ? 'on' : 'off';\n\t\tthis.module.roomPages[cb]('open', this._onRoomPanelOpen);\n\t}\n\n\t_onRoomPanelOpen() {\n\t\tthis.toggle(true);\n\t}\n\n\tdispose() {\n\t\tthis._setListeners(false);\n\t\tthis.module.activePanel.setNode('roomPanel', null);\n\t}\n}\n\nexport default RoomPanel;\n","import { Elem, Txt } from 'modapp-base-component';\nimport { CollectionList } from 'modapp-resource-component';\nimport FAIcon from 'components/FAIcon';\nimport './kebabMenu.scss';\n\nclass KebabMenu {\n\tconstructor(menuItems, opt) {\n\t\tthis.menuItems = menuItems;\n\t\tthis.opt = opt || {};\n\t\tthis.topMargin = this.opt.topMargin || 6;\n\t\tthis.absolutePositioned = !!this.opt.absolutePositioned;\n\n\t\t// Bind callbacks\n\t\tthis._close = this._close.bind(this);\n\t}\n\n\trender(el) {\n\t\tthis.elem = new Elem(n => n.elem('div', { className: 'kebabmenu' + (this.opt.className ? ' ' + this.opt.className : '') }, [\n\t\t\tn.elem('button', {\n\t\t\t\tclassName: 'kebabmenu--btn ' + (this.opt.btnClassName ? this.opt.btnClassName : 'iconbtn tiny tinyicon'),\n\t\t\t\tevents: {\n\t\t\t\t\tclick: (c, ev) => {\n\t\t\t\t\t\tthis.toggle();\n\t\t\t\t\t\tev.currentTarget.blur();\n\t\t\t\t\t\tev.stopPropagation();\n\t\t\t\t\t\tev.preventDefault();\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}, [\n\t\t\t\tn.component(new FAIcon('ellipsis-v')),\n\t\t\t]),\n\t\t]));\n\t\tthis._setListeners(true);\n\t\treturn this.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tthis._unrenderMenu();\n\t\tif (this.elem) {\n\t\t\tthis._setListeners(false);\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t\tif (this.onFadeOut) {\n\t\t\tthis.onFadeOut();\n\t\t\tthis.onFadeOut = null;\n\t\t}\n\t}\n\n\tfadeIn() {\n\t\tthis.onFadeOut = null;\n\t}\n\n\tfadeOut(onFadeOut) {\n\t\tthis.onFadeOut = onFadeOut;\n\t\tif (!this._open) {\n\t\t\tthis.unrender();\n\t\t}\n\t}\n\n\t/**\n\t * Toggles the tooltip between open and closed.\n\t * @param {boolean} [open] Optional state to set the popup tip to. Defaults to toggle between open/close.\n\t * @returns {this}\n\t */\n\ttoggle(open) {\n\t\tthis._open = typeof open == 'undefined' ? !this._open : !!open;\n\t\tthis._setComponent();\n\t\treturn this;\n\t}\n\n\t_setComponent() {\n\t\tif (!this.elem) return;\n\n\t\tif (!this._open) {\n\t\t\tif (this.onFadeOut) {\n\t\t\t\tthis.unrender();\n\t\t\t} else {\n\t\t\t\tthis._unrenderMenu();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._menu) return;\n\n\t\tlet el = this.elem.getElement();\n\t\tlet rect = el.getBoundingClientRect();\n\t\tthis._menu = new Elem(n => n.elem('div', {\n\t\t\tclassName: 'kebabmenu--menu' + (this.absolutePositioned ? ' kebabmenu--menu-absolute' : '') + (this.opt.menuClassName ? ' ' + this.opt.menuClassName : ''),\n\t\t\tattributes: {\n\t\t\t\tstyle: this.absolutePositioned\n\t\t\t\t\t? 'top: ' + (rect.top + document.documentElement.scrollTop + el.offsetHeight + this.topMargin) + 'px; left: ' + (rect.left + document.documentElement.scrollLeft + el.offsetWidth) + 'px;'\n\t\t\t\t\t: 'margin-top:' + this.topMargin + 'px; right: 0px;',\n\t\t\t},\n\t\t}, [\n\t\t\tn.component(new CollectionList(\n\t\t\t\tthis.menuItems,\n\t\t\t\tm => {\n\t\t\t\t\tlet click = (c, ev) => {\n\t\t\t\t\t\tm.onClick && m.onClick(m);\n\t\t\t\t\t\tthis.toggle(false);\n\t\t\t\t\t\tev.stopPropagation();\n\t\t\t\t\t};\n\t\t\t\t\treturn m.componentFactory\n\t\t\t\t\t\t? m.componentFactory(click)\n\t\t\t\t\t\t: new Elem(n => n.elem('div', {\n\t\t\t\t\t\t\tclassName: 'kebabmenu--itembtn flex-row pad8',\n\t\t\t\t\t\t\tevents: { click },\n\t\t\t\t\t\t}, [\n\t\t\t\t\t\t\tn.elem('div', { className: 'kebabmenu--itemicon flex-auto' }, [ n.component(m.icon ? new FAIcon(m.icon) : null) ]),\n\t\t\t\t\t\t\tn.component(new Txt(m.name, { className: 'flex-1' })),\n\t\t\t\t\t\t]));\n\t\t\t\t},\n\t\t\t)),\n\t\t]));\n\t\tthis._menu.render(this.absolutePositioned ? document.body : this.elem.getElement());\n\t}\n\n\t_unrenderMenu() {\n\t\tif (this._menu) {\n\t\t\tthis._menu.unrender();\n\t\t\tthis._menu = null;\n\t\t}\n\t}\n\n\t_setListeners(on) {\n\t\tlet cb = on ? 'addEventListener' : 'removeEventListener';\n\t\tdocument[cb]('keydown', this._close, true);\n\t\tdocument[cb]('click', this._close, true);\n\t}\n\n\t_close(e) {\n\t\tlet n = this._menu && this._menu.getElement();\n\t\tif (n && !n.contains(e.target)) {\n\t\t\tsetTimeout(() => this.toggle(false), 0);\n\t\t}\n\t}\n}\n\nexport default KebabMenu;\n","import { Elem, Txt } from 'modapp-base-component';\nimport { ModelComponent } from 'modapp-resource-component';\nimport FAIcon from 'components/FAIcon';\nimport Fader from 'components/Fader';\n\nclass LayoutMobileTitleBar {\n\tconstructor(module, model) {\n\t\tthis.module = module;\n\t\tthis.model = model;\n\t}\n\n\trender(el) {\n\t\tlet currentIcon = null;\n\t\tthis.elem = new ModelComponent(\n\t\t\tthis.model,\n\t\t\tnew Elem(n => (\n\t\t\t\tn.elem('div', { className: 'layoutmobile-titlebar' }, [\n\t\t\t\t\tn.elem('div', { className: 'layoutmobile-titlebar--btncont' }, [\n\t\t\t\t\t\tn.elem('button', {\n\t\t\t\t\t\t\tclassName: 'layoutmobile-titlebar--btn iconbtn medium',\n\t\t\t\t\t\t\tevents: {\n\t\t\t\t\t\t\t\tclick: (c, e) => {\n\t\t\t\t\t\t\t\t\tlet m = this.module.playerTabs.getModel();\n\t\t\t\t\t\t\t\t\tif (m && m.page && m.page.close) {\n\t\t\t\t\t\t\t\t\t\tm.page.close();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}, [\n\t\t\t\t\t\t\tn.component('icon', new Fader()),\n\t\t\t\t\t\t]),\n\t\t\t\t\t]),\n\t\t\t\t\tn.elem('div', { className: 'layoutmobile-titlebar--title' }, [\n\t\t\t\t\t\tn.component('txt', new Txt(null, { tagName: 'h3', className: 'layoutmobile-titlebar--titletxt' })),\n\t\t\t\t\t]),\n\t\t\t\t])\n\t\t\t)),\n\t\t\t(m, c) => {\n\t\t\t\tif (!m || !m.pageInfo) return;\n\n\t\t\t\tlet pi = m.pageInfo;\n\t\t\t\tc.getNode('txt').setText(pi.title || (m.page && m.page.id) || m.tabId);\n\t\t\t\tlet icon = pi.closeIcon || (m.pageIdx > 0\n\t\t\t\t\t? 'chevron-circle-left'\n\t\t\t\t\t: 'times'\n\t\t\t\t);\n\t\t\t\tif (currentIcon != icon) {\n\t\t\t\t\tc.getNode('icon').setComponent(new FAIcon(icon));\n\t\t\t\t\tcurrentIcon = icon;\n\t\t\t\t}\n\t\t\t},\n\t\t);\n\t\tthis.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n}\n\nexport default LayoutMobileTitleBar;\n","import { Elem, Transition, Context } from 'modapp-base-component';\nimport { ModelComponent, CollectionList } from 'modapp-resource-component';\nimport { Model, CollectionWrapper } from 'modapp-resource';\nimport Collapser from 'components/Collapser';\nimport Fader from 'components/Fader';\nimport KebabMenu from 'components/KebabMenu';\nimport LayoutMobileTitleBar from './LayoutMobileTitleBar';\n\nclass LayoutMobileComponent {\n\tconstructor(module, mainComponent) {\n\t\tthis.module = module;\n\t\tthis.mainComponent = mainComponent;\n\t}\n\n\trender(el) {\n\t\tlet component = {};\n\t\tlet tabPage = new Transition({ className: 'layoutmobile--tabpage' });\n\t\tlet model = new Model({ data: { pageInfo: null, tabId: null }, eventBus: this.module.self.app.eventBus });\n\t\tthis.elem = new ModelComponent(\n\t\t\tthis.module.playerTabs.getModel(),\n\t\t\tnew ModelComponent(\n\t\t\t\tmodel,\n\t\t\t\tnew Elem(n => (\n\t\t\t\t\tn.elem('div', { className: 'layoutmobile' }, [\n\t\t\t\t\t\tn.elem('div', { className: 'layoutmobile--container' }, [\n\t\t\t\t\t\t\tn.elem('div', { className: 'layoutmobile--topbar' }, [\n\t\t\t\t\t\t\t\tn.component('titleBar', new Collapser()),\n\t\t\t\t\t\t\t\tn.elem('div', { className: 'layoutmobile--tabscont' }, [\n\t\t\t\t\t\t\t\t\tn.component(this.module.playerTabs.newTabs({\n\t\t\t\t\t\t\t\t\t\tclassName: 'layoutmobile--tabs',\n\t\t\t\t\t\t\t\t\t\tcloseOnReselect: true,\n\t\t\t\t\t\t\t\t\t})),\n\t\t\t\t\t\t\t\t\tn.component(new KebabMenu(this.module.playerTools.getTools(), {\n\t\t\t\t\t\t\t\t\t\tclassName: 'layoutmobile--kebabmenu',\n\t\t\t\t\t\t\t\t\t\tbtnClassName: 'iconbtn medium light',\n\t\t\t\t\t\t\t\t\t\ttopMargin: 10,\n\t\t\t\t\t\t\t\t\t})),\n\t\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\t\tn.component(new Context(\n\t\t\t\t\t\t\t\t\t() => new CollectionWrapper(\n\t\t\t\t\t\t\t\t\t\tthis.module.self.getOverlays(),\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tfilter: t => !t.type || t.type == 'topbar',\n\t\t\t\t\t\t\t\t\t\t\teventBus: this.module.self.app.eventBus,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\toverlays => overlays.dispose(),\n\t\t\t\t\t\t\t\t\toverlays => new CollectionList(overlays,\n\t\t\t\t\t\t\t\t\t\tt => t.componentFactory(),\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tsubClassName: t => t.className || null,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\tn.component('main', new Fader(null, { className: 'layoutmobile--main' })),\n\t\t\t\t\t\t]),\n\t\t\t\t\t])\n\t\t\t\t)),\n\t\t\t\t(m, c, change) => {\n\t\t\t\t\tif (!change || change.hasOwnProperty('pageInfo')) {\n\t\t\t\t\t\tc.getNode('titleBar').setComponent(component.titleBar = m.pageInfo\n\t\t\t\t\t\t\t? component.titleBar || new LayoutMobileTitleBar(this.module, model)\n\t\t\t\t\t\t\t: null,\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tif (m.pageInfo) {\n\t\t\t\t\t\t\tlet dir = 0;\n\t\t\t\t\t\t\tif (change && change.hasOwnProperty('tabId')) {\n\t\t\t\t\t\t\t\tdir = this.module.playerTabs.getTabDirection(change.tabId, m.tabId);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttabPage[dir == 0\n\t\t\t\t\t\t\t\t? 'fade'\n\t\t\t\t\t\t\t\t: dir > 0\n\t\t\t\t\t\t\t\t\t? 'slideLeft'\n\t\t\t\t\t\t\t\t\t: 'slideRight'\n\t\t\t\t\t\t\t](m.pageInfo.component);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tc.getNode('main').setComponent(m.pageInfo\n\t\t\t\t\t\t\t? tabPage\n\t\t\t\t\t\t\t: this.mainComponent,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t),\n\t\t\t(m, c, change) => {\n\t\t\t\tif (!change || change.hasOwnProperty('factory')) {\n\t\t\t\t\tmodel.set(Object.assign({\n\t\t\t\t\t\tpageInfo: m.factory\n\t\t\t\t\t\t\t? m.factory('mobile')\n\t\t\t\t\t\t\t: null,\n\t\t\t\t\t}, m.props));\n\t\t\t\t}\n\t\t\t},\n\t\t);\n\t\tthis.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n}\n\nexport default LayoutMobileComponent;\n","import Fader from 'components/Fader';\nimport { Collection, sortOrderCompare } from 'modapp-resource';\nimport LayoutMobileComponent from './LayoutMobileComponent';\nimport './layoutMobile.scss';\n\n/**\n * LayoutMobile draws the main layout wireframe for mobile.\n */\nclass LayoutMobile {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'layout',\n\t\t\t'playerTabs',\n\t\t\t'playerTools',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\n\t\tthis.defaultMain = new Fader(null, { className: 'layoutmobile--main' });\n\n\t\tthis.overlays = new Collection({\n\t\t\tidAttribute: m => m.id,\n\t\t\tcompare: sortOrderCompare,\n\t\t\teventBus: this.app.eventBus,\n\t\t});\n\n\t\tthis.elem = new LayoutMobileComponent(this.module, this.defaultMain);\n\n\t\tthis.module.layout.addLayout({\n\t\t\tid: 'mobile',\n\t\t\tsortOrder: 10,\n\t\t\tquery: 'screen and (max-width: 720px)',\n\t\t\tcomponent: this.elem,\n\t\t});\n\t}\n\n\tsetMainComponent(component) {\n\t\tthis.defaultMain.setComponent(component);\n\t}\n\n\t/**\n\t * Registers a layout overlay component.\n\t * @param {object} overlay Overlay object\n\t * @param {string} overlay.id Overlay ID.\n\t * @param {number} overlay.sortOrder Sort order.\n\t * @param {string} [overlay.type] Target type. May be 'topbar'. Defaults to 'topbar';\n\t * @param {function} overlay.componentFactory Overlay component factory: function() -> Component\n\t * @returns {this}\n\t */\n\taddOverlay(overlay) {\n\t\tif (this.overlays.get(overlay.id)) {\n\t\t\tthrow new Error(\"Overlay ID already registered: \", overlay.id);\n\t\t}\n\t\tthis.overlays.add(overlay);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Unregisters a previously registered layout overlay.\n\t * @param {string} overlayId Overlay ID.\n\t * @returns {this}\n\t */\n\tremoveOverlay(overlayId) {\n\t\tthis.overlays.remove(overlayId);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Gets a collection of layout overlays.\n\t * @returns {Collection} Collection of registered layout overlays.\n\t */\n\tgetOverlays() {\n\t\treturn this.overlays;\n\t}\n\n\tdispose() {\n\t\tthis.module.layout.removeLayout('mobile');\n\t}\n}\n\nexport default LayoutMobile;\n","import { Elem } from 'modapp-base-component';\nimport { ModelHtml } from 'modapp-resource-component';\n\nclass MobileActivePanelPlaceholder {\n\tconstructor(module, info) {\n\t\tthis.module = module;\n\t\tthis.info = info;\n\t}\n\n\trender(el) {\n\t\tthis.elem = new Elem(n => n.elem('div', { className: 'mobileactivepanel-placeholder' }, [\n\t\t\tn.component(new ModelHtml(this.info, m => typeof m.greeting == 'undefined'\n\t\t\t\t? '<p>All characters are asleep.<br>Maybe we should wake someone up?</p>'\n\t\t\t\t: m.greeting,\n\t\t\t)),\n\t\t]));\n\t\treturn this.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n}\n\nexport default MobileActivePanelPlaceholder;\n","import { Elem } from 'modapp-base-component';\nimport { Collection, Model, sortOrderCompare } from 'modapp-resource';\nimport Fader from 'components/Fader';\nimport MobileActivePanelPlaceholder from './MobileActivePanelPlaceholder';\nimport './mobileActivePanel.scss';\n\n/**\n * MobileActivePanel draws the active character area.\n */\nclass MobileActivePanel {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\t\tthis.app.require([\n\t\t\t'layoutMobile',\n\t\t\t'player',\n\t\t\t'api',\n\t\t\t'info',\n\t\t\t'charPages',\n\t\t\t'roomPages',\n\t\t\t'layout',\n\t\t\t'charLog',\n\t\t], this._init.bind(this));\n\n\t\t// Bind callbacks\n\t\tthis._onActiveChange = this._onActiveChange.bind(this);\n\t\tthis._onCharPanelOpen = this._setModelIfMobile.bind(this, true, false);\n\t\tthis._onCharPanelClose = this._orModelIfMobile.bind(this, false, true);\n\t\tthis._onRoomPanelOpen = this._setModelIfMobile.bind(this, false, true);\n\t\tthis._onRoomPanelClose = this._orModelIfMobile.bind(this, true, false);\n\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\t\tthis.playerModel = this.module.player.getModel();\n\n\t\tthis.model = new Model({ data: {\n\t\t\tcharPanelOpen: false,\n\t\t\troomPanelOpen: false,\n\t\t}, eventBus: this.app.eventBus });\n\n\t\tthis.overlays = new Collection({\n\t\t\tidAttribute: m => m.id,\n\t\t\tcompare: sortOrderCompare,\n\t\t\teventBus: this.app.eventBus,\n\t\t});\n\t\tthis.renderedOverlays = {};\n\n\t\tthis.info = this.module.info.getCore();\n\t\tthis.isHidden = false;\n\n\t\tthis.elem = new Elem(n => n.elem('div', { className: 'mobileactivepanel' }, [\n\t\t\tn.elem('main', 'div', { className: 'mobileactivepanel--main' }, [\n\t\t\t\tn.component('charPanel', new Fader(null, { className: 'mobileactivepanel--charpanel' })),\n\t\t\t\tn.component('roomPanel', new Fader(null, { className: 'mobileactivepanel--roompanel' })),\n\t\t\t\tn.component('logPanel', new Fader(null, { className: 'mobileactivepanel--logpanel' })),\n\t\t\t]),\n\t\t\tn.component('consolePanel', new Fader(null, { className: 'mobileactivepanel--consolepanel' })),\n\t\t]));\n\n\t\tthis._setListeners(true);\n\t\tthis._onActiveChange();\n\t}\n\n\tsetNode(node, component) {\n\t\tthis.elem.getNode(node).setComponent(component);\n\t}\n\n\tgetModel() {\n\t\treturn this.model;\n\t}\n\n\trender(el) {\n\t\tthis._setCharLogHidden(true);\n\t\tlet rel = this.elem.render(el);\n\t\t// Render main area overlays\n\t\tlet main = this.elem.getNode('main');\n\t\tfor (let overlay of this.overlays) {\n\t\t\tlet comp = overlay.componentFactory(this.playerModel.player);\n\t\t\tif (comp) {\n\t\t\t\tcomp.render(main);\n\t\t\t\tthis.renderedOverlays[overlay.id] = comp;\n\t\t\t}\n\t\t}\n\t\treturn rel;\n\t}\n\n\tunrender() {\n\t\tfor (let overlayId in this.renderedOverlays) {\n\t\t\tthis.renderedOverlays[overlayId].unrender();\n\t\t}\n\t\tthis.renderedOverlays = {};\n\t\tthis.elem.unrender();\n\t\tthis._setCharLogHidden(false);\n\t}\n\n\ttoggleCharPanel(open) {\n\t\topen = typeof open == 'undefined'\n\t\t\t? !this.model.charPanelOpen\n\t\t\t: !!open;\n\t\tthis._setModel(open, this.model.roomPanelOpen && !open);\n\t}\n\n\ttoggleRoomPanel(open) {\n\t\topen = typeof open == 'undefined'\n\t\t\t? !this.model.roomPanelOpen\n\t\t\t: !!open;\n\t\tthis._setModel(this.model.charPanelOpen && !open, open);\n\t}\n\n\t/**\n\t * Registers a main area overlay component.\n\t * @param {object} overlay Overlay object\n\t * @param {string} overlay.id Overlay ID.\n\t * @param {number} overlay.sortOrder Sort order.\n\t * @param {function} overlay.componentFactory Overlay component factory: function(player) -> Component\n\t * @returns {this}\n\t */\n\taddOverlay(overlay) {\n\t\tif (this.overlays.get(overlay.id)) {\n\t\t\tthrow new Error(\"Overlay ID already registered: \", overlay.id);\n\t\t}\n\t\tthis.overlays.add(overlay);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Unregisters a previously registered main area overlay.\n\t * @param {string} overlayId Overlay ID.\n\t * @returns {this}\n\t */\n\tremoveOverlay(overlayId) {\n\t\tthis.overlays.remove(overlayId);\n\t\tlet comp = this.renderedOverlays[overlayId];\n\t\tif (comp) {\n\t\t\tcomp.unrender();\n\t\t\tdelete this.renderedOverlays[overlayId];\n\t\t}\n\t\treturn this;\n\t}\n\n\t_setListeners(on) {\n\t\tlet cb = on ? 'on' : 'off';\n\t\tthis.playerModel[cb]('change', this._onActiveChange);\n\t\tthis.module.charPages[cb]('open', this._onCharPanelOpen);\n\t\tthis.module.charPages[cb]('close', this._onCharPanelClose);\n\t\tthis.module.roomPages[cb]('open', this._onRoomPanelOpen);\n\t\tthis.module.roomPages[cb]('close', this._onRoomPanelClose);\n\t}\n\n\t_onActiveChange(changed) {\n\t\tif (changed && !changed.hasOwnProperty('activeChar')) {\n\t\t\treturn;\n\t\t}\n\t\tthis.module.layoutMobile.setMainComponent(this.playerModel.activeChar ? this : new MobileActivePanelPlaceholder(this.module, this.info));\n\t}\n\n\t_setModelIfMobile(charPanelOpen, roomPanelOpen) {\n\t\tif (this.module.layout.getCurrentLayout() == 'mobile') {\n\t\t\tthis._setModel(charPanelOpen, roomPanelOpen);\n\t\t}\n\t}\n\n\t_orModelIfMobile(charPanelOpen, roomPanelOpen) {\n\t\tif (this.module.layout.getCurrentLayout() == 'mobile') {\n\t\t\tlet m = this.model;\n\t\t\tthis._setModel(m.charPanelOpen || charPanelOpen, m.roomPanelOpen || roomPanelOpen);\n\t\t}\n\t}\n\n\t_setModel(charPanelOpen, roomPanelOpen) {\n\t\tthis.model.set({ charPanelOpen, roomPanelOpen });\n\t\tthis._setCharLogHidden();\n\t}\n\n\t_setCharLogHidden(rendered) {\n\t\trendered = typeof rendered == 'undefined' ? !!this.elem.getElement() : rendered;\n\t\tlet hidden = !!(rendered && (this.model.charPanelOpen || this.model.roomPanelOpen));\n\t\tif (this.isHidden !== hidden) {\n\t\t\tthis.isHidden = hidden;\n\t\t\tthis.module.charLog.setIsHidden(hidden);\n\t\t}\n\t}\n\n\tdispose() {\n\t\tthis._setListeners(false);\n\t\tthis.module.layoutMobile.setMainComponent(null);\n\t\tif (this.info) {\n\t\t\tthis.info.dispose();\n\t\t\tthis.info = null;\n\t\t}\n\t}\n}\n\nexport default MobileActivePanel;\n","/**\n * MobileActivePanelSetter adds the Console and CharLog components to the active panel.\n */\nclass MobileActivePanelSetter {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\t\tthis.app.require([\n\t\t\t'mobileActivePanel',\n\t\t\t'charLog',\n\t\t\t'console',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\n\t\tthis.module.mobileActivePanel.setNode('logPanel', this.module.charLog.getComponent());\n\t\tthis.module.mobileActivePanel.setNode('consolePanel', this.module.console.newConsole('mobile'));\n\t}\n\n\tdispose() {\n\t\tthis.module.mobileActivePanel.setNode('consolePanel', null);\n\t\tthis.module.mobileActivePanel.setNode('logPanel', null);\n\t}\n}\n\nexport default MobileActivePanelSetter;\n","import { Model } from 'modapp-resource';\nimport l10n from 'modapp-l10n';\nimport MobilePanel from 'components/MobilePanel';\nimport './mobileCharPanel.scss';\n\nconst defaultTitle = l10n.l('mobileCharPanel.characterInfo', \"Character Info\");\n\n/**\n * MobileCharPanel draws player char menu.\n */\nclass MobileCharPanel {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\t// Bind callbacks\n\t\tthis._onCharPagesChange = this._onCharPagesChange.bind(this);\n\t\tthis._onModelChange = this._onModelChange.bind(this);\n\t\tthis._onActivePanelModelChange = this._onActivePanelModelChange.bind(this);\n\n\t\tthis.app.require([\n\t\t\t'mobileActivePanel',\n\t\t\t'charPages',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\n\t\tthis.model = new Model({\n\t\t\tdata: Object.assign({ pageInfo: null }, this.module.charPages.getModel().props),\n\t\t\teventBus: this.module.self.app.eventBus,\n\t\t});\n\t\tthis.activePanelModel = this.module.mobileActivePanel.getModel();\n\t\tthis.component = new MobilePanel(\"\", null, {\n\t\t\tclosed: !this.activePanelModel.charPanelOpen,\n\t\t\talign: 'left',\n\t\t\tclassName: 'mobilecharpanel',\n\t\t\tonClose: () => this.module.mobileActivePanel.toggleCharPanel(false),\n\t\t});\n\n\t\tthis.module.mobileActivePanel.setNode('charPanel', this.component);\n\t\tthis._setListeners(true);\n\t\tthis._onCharPagesChange();\n\t\tthis._onModelChange();\n\t}\n\n\t/**\n\t * Toggles the panel between open or close.\n\t * @param {bool} open State to toggle to. Defaults to toggle between open and close.\n\t * @returns {this}\n\t */\n\ttoggle(open) {\n\t\tthis.module.mobileActivePanel.toggleCharPanel(open);\n\t\treturn this;\n\t}\n\n\t_setListeners(on) {\n\t\tlet cb = on ? 'on' : 'off';\n\t\tthis.module.charPages.getModel()[cb]('change', this._onCharPagesChange);\n\t\tthis.model[cb]('change', this._onModelChange);\n\t\tthis.activePanelModel[cb]('change', this._onActivePanelModelChange);\n\t}\n\n\t_onCharPagesChange(change) {\n\t\tif (!change || change.hasOwnProperty('factory')) {\n\t\t\tlet m = this.module.charPages.getModel();\n\t\t\tlet factory = m.factory;\n\t\t\tthis.model.set(Object.assign({\n\t\t\t\tpageInfo: factory\n\t\t\t\t\t? factory('mobile')\n\t\t\t\t\t: null,\n\t\t\t}, m.props));\n\t\t}\n\t}\n\n\t_onModelChange(change) {\n\t\tif (change && !change.hasOwnProperty('pageInfo')) {\n\t\t\treturn;\n\t\t}\n\n\n\t\tlet m = this.model;\n\t\tlet pi = m.pageInfo;\n\t\tlet page = m.page;\n\n\t\tif (!pi) {\n\t\t\tthis.component.setTitle(\"\").setButton(null).setComponent(null);\n\t\t\treturn;\n\t\t}\n\t\tlet close = pi.close || (page && page.close);\n\n\t\tthis.component\n\t\t\t.setTitle(pi.title || defaultTitle)\n\t\t\t.setButton(close || (() => this.toggle(false)), close ? pi.closeIcon || 'chevron-circle-left' : 'times')\n\t\t\t.setComponent(pi.component, {\n\t\t\t\tonRender: () => {\n\t\t\t\t\t// Restore scrolling of page\n\t\t\t\t\tlet sb = this.component.getSimpleBar();\n\t\t\t\t\tif (sb) {\n\t\t\t\t\t\tsb.getScrollElement().scrollTop = page.state.scrollTop || 0;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tonUnrender: () => {\n\t\t\t\t\t// Store scrolling of page\n\t\t\t\t\tlet sb = this.component.getSimpleBar();\n\t\t\t\t\tif (sb) {\n\t\t\t\t\t\tpage.state.scrollTop = sb.getScrollElement().scrollTop;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t});\n\t}\n\n\t_onActivePanelModelChange() {\n\t\tthis.component.toggle(this.activePanelModel.charPanelOpen);\n\t}\n\n\tdispose() {\n\t\tthis._setListeners(false);\n\t\tthis.module.mobileActivePanel.setNode('charPanel', null);\n\t}\n}\n\nexport default MobileCharPanel;\n","import { RootElem } from 'modapp-base-component';\nimport './mobileReconnecting.scss';\n\n/**\n * MobileReconnecting adds an spinner overlay to mobile layout's topbar, showing\n * it whenever the API is disconnected.\n */\nclass MobileReconnecting {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\t// Bind callbacks\n\t\tthis._onApiEvent = this._onApiEvent.bind(this);\n\n\t\tthis.app.require([\n\t\t\t'api',\n\t\t\t'layoutMobile',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\n\t\tthis.component = new RootElem('div', { className: 'mobilereconnecting spinner small hide' });\n\t\tthis.module.api.on(null, this._onApiEvent);\n\n\t\tthis.module.layoutMobile.addOverlay({\n\t\t\tid: 'reconnecting',\n\t\t\tsortOrder: 0,\n\t\t\ttype: 'topbar',\n\t\t\tcomponentFactory: () => this.component,\n\t\t});\n\t}\n\n\t_onApiEvent() {\n\t\tthis.component[this.module.api.connected ? 'addClass' : 'removeClass']('hide');\n\t}\n\n\tdispose() {\n\t\tthis.module.api.off(null, this._onApiEvent);\n\t\tthis.module.layoutMobile.removeOverlay('reconnecting');\n\t}\n}\n\nexport default MobileReconnecting;\n","import { Transition } from 'modapp-base-component';\nimport { ModelComponent } from 'modapp-resource-component';\nimport MobilePanel from 'components/MobilePanel';\nimport OnRender from 'components/OnRender';\n\nfunction getAreaIdx(areas, area) {\n\treturn areas ? areas.indexOf(area) : -1;\n}\n\nclass RoomPanelComponent {\n\tconstructor(module, opt) {\n\t\tthis.module = module;\n\n\t\tthis.transition = new Transition(null, { duration: 150 }),\n\t\tthis.panel = new MobilePanel(\"\", null, {\n\t\t\tclosed: !opt?.open,\n\t\t\talign: 'right',\n\t\t\tclassName: 'mobileroompanel',\n\t\t\tonClose: () => this.module.mobileActivePanel.toggleRoomPanel(false),\n\t\t\tsubheaderComponent: this.module.roomPages.newZoomBar({ className: 'mobileroompanel--zoombar' }),\n\t\t});\n\t}\n\n\trender(el) {\n\t\tthis.elem = new ModelComponent(\n\t\t\tthis.module.roomPages.getModel(),\n\t\t\tthis.panel,\n\t\t\t(m, c, change) => {\n\t\t\t\tif (!change || change.hasOwnProperty('factory')) {\n\t\t\t\t\tlet pageInfo = m.factory?.('mobile');\n\n\t\t\t\t\tif (!pageInfo) {\n\t\t\t\t\t\tc.setTitle(\"\").setButton(null).setComponent(null);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tlet cb = 'fade';\n\t\t\t\t\tif (!change?.hasOwnProperty('char') && change?.hasOwnProperty('area')) {\n\t\t\t\t\t\tlet before = getAreaIdx(change?.hasOwnProperty('areas') ? change.areas : m.areas, change.area);\n\t\t\t\t\t\tlet after = getAreaIdx(m.areas, m.area);\n\t\t\t\t\t\tif (before >= 0 && after >= 0 && before != after) {\n\t\t\t\t\t\t\tcb = (after - before) > 0 ? 'slideLeft' : 'slideRight';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tlet page = m.page;\n\t\t\t\t\tthis.transition[cb](new OnRender(pageInfo.component, {\n\t\t\t\t\t\tafterRender: () => {\n\t\t\t\t\t\t\t// Restore scrolling of page\n\t\t\t\t\t\t\tlet sb = c.getSimpleBar();\n\t\t\t\t\t\t\tif (sb) {\n\t\t\t\t\t\t\t\tsb.getScrollElement().scrollTop = page.state.scrollTop || 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tbeforeUnrender: () => {\n\t\t\t\t\t\t\t// Store scrolling of page\n\t\t\t\t\t\t\tlet sb = c.getSimpleBar();\n\t\t\t\t\t\t\tif (sb) {\n\t\t\t\t\t\t\t\tpage.state.scrollTop = sb.getScrollElement().scrollTop;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t}));\n\t\t\t\t\tlet close = pageInfo.close || page?.close;\n\n\t\t\t\t\tc\n\t\t\t\t\t\t.setTitle(pageInfo.title || \"\")\n\t\t\t\t\t\t.setButton(close || (() => this.toggle(false)), close ? pageInfo.closeIcon || page?.closeIcon || 'chevron-circle-left' : 'times')\n\t\t\t\t\t\t.setComponent(this.transition);\n\t\t\t\t}\n\t\t\t},\n\t\t);\n\t\tthis.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n\n\t/**\n\t * Toggles the panel between open or close.\n\t * @param {bool} open State to toggle to. Defaults to toggle between open and close.\n\t * @returns {this}\n\t */\n\ttoggle(open) {\n\t\tthis.panel.toggle(open);\n\t\treturn this;\n\t}\n}\n\nexport default RoomPanelComponent;\n","import MobileRoomPanelComponent from './MobileRoomPanelComponent';\nimport './mobileRoomPanel.scss';\n\n\n/**\n * MobileRoomPanel draws player char menu.\n */\nclass MobileRoomPanel {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\t// Bind callbacks\n\t\tthis._onActivePanelModelChange = this._onActivePanelModelChange.bind(this);\n\n\t\tthis.app.require([\n\t\t\t'mobileActivePanel',\n\t\t\t'roomPages',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\n\t\tthis.activePanelModel = this.module.mobileActivePanel.getModel();\n\t\tthis.component = new MobileRoomPanelComponent(this.module, {\n\t\t\topen: this.activePanelModel.roomPanelOpen,\n\t\t});\n\n\t\tthis.module.mobileActivePanel.setNode('roomPanel', this.component);\n\t\tthis._setListeners(true);\n\t}\n\n\t/**\n\t * Toggles the panel between open or close.\n\t * @param {bool} open State to toggle to. Defaults to toggle between open and close.\n\t * @returns {this}\n\t */\n\ttoggle(open) {\n\t\tthis.module.mobileActivePanel.toggleRoomPanel(open);\n\t\treturn this;\n\t}\n\n\t_setListeners(on) {\n\t\tlet cb = on ? 'on' : 'off';\n\t\tthis.activePanelModel[cb]('change', this._onActivePanelModelChange);\n\t}\n\n\n\t_onActivePanelModelChange() {\n\t\tthis.component.toggle(this.activePanelModel.roomPanelOpen);\n\t}\n\n\tdispose() {\n\t\tthis._setListeners(false);\n\t\tthis.module.mobileActivePanel.setNode('roomPanel', null);\n\t}\n}\n\nexport default MobileRoomPanel;\n","import { Elem } from 'modapp-base-component';\nimport { ModelComponent } from 'modapp-resource-component';\n\nclass PlayerTabsTab {\n\tconstructor(module, tab, onClick) {\n\t\tthis.module = module;\n\t\tthis.tab = tab;\n\t\tthis.onClick = onClick;\n\t}\n\n\trender(el) {\n\t\tthis.elem = new ModelComponent(this.module.self.getModel(),\n\t\t\tnew Elem(n => n.elem('div', { className: 'playertabs-tab' }, [\n\t\t\t\tn.component(this.tab.tabFactory(() => this.onClick(this.tab))),\n\t\t\t])),\n\t\t\t(m, c) => c[this.tab.id === m.tabId ? 'addClass' : 'removeClass']('active'),\n\t\t);\n\t\tthis.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n}\n\nexport default PlayerTabsTab;\n","import { Context } from 'modapp-base-component';\nimport { CollectionWrapper } from 'modapp-resource';\nimport { CollectionList } from 'modapp-resource-component';\nimport PlayerTabsTab from './PlayerTabsTab';\n\nclass PlayerTabsTabs {\n\n\t/**\n\t * Creates an instance of PlayerTabsTabs.\n\t * @param {object} module Module object.\n\t * @param {object} [opt] Optional parameters as defined by CollectionList.\n\t * @param {string} [opt.className] Class name to set on the tabs component.\n\t * @param {boolean} [opt.closeOnReselect] Flag to close tabs when clicking on a tab that is already selected. Defaults to false.\n\t * @param {boolean} [opt.hideDefaultTab] Flag to hide the default tab. Defaults to false.\n\t */\n\tconstructor(module, opt) {\n\t\topt = Object.assign({ horizontal: true }, opt);\n\t\topt.className = 'playertabs-tabs' + (opt.className ? ' ' + opt.className : '');\n\t\tthis.module = module;\n\t\tthis.opt = opt;\n\n\t\t// Bind callback\n\t\tthis._onTabClick = this._onTabClick.bind(this);\n\t\tthis._onModelChange = this._onModelChange.bind(this);\n\t}\n\n\trender(el) {\n\t\tthis.elem = new Context(\n\t\t\t() => {\n\t\t\t\tif (this.opt.hideDefaultTab) {\n\t\t\t\t\tlet model = this.module.self.getModel();\n\t\t\t\t\tmodel.on('change', this._onModelChange);\n\t\t\t\t\treturn new CollectionWrapper(\n\t\t\t\t\t\tthis.module.self.getTabs(),\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfilter: t => t.id != model.defaultTab,\n\t\t\t\t\t\t\teventBus: this.module.self.app.eventBus,\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn this.module.self.getTabs();\n\t\t\t},\n\t\t\ttabs => {\n\t\t\t\tif (this.opt.hideDefaultTab) {\n\t\t\t\t\ttabs.dispose();\n\t\t\t\t\tthis.module.self.getModel().off('change', this._onModelChange);\n\t\t\t\t}\n\t\t\t},\n\t\t\ttabs => new CollectionList(\n\t\t\t\ttabs,\n\t\t\t\tm => new PlayerTabsTab(this.module, m, this._onTabClick),\n\t\t\t\tthis.opt,\n\t\t\t),\n\t\t);\n\t\treturn this.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n\n\t_onTabClick(tab) {\n\t\tlet playerTabs = this.module.self;\n\t\tif (tab.id == playerTabs.getModel().tabId && this.opt.closeOnReselect) {\n\t\t\tplayerTabs.closeTabs();\n\t\t} else {\n\t\t\tplayerTabs.openTab(tab.id);\n\t\t}\n\t}\n\n\t_onModelChange() {\n\t\tlet ctx = this.elem && this.elem.getContext();\n\t\tif (ctx) {\n\t\t\tctx.refresh();\n\t\t}\n\t}\n}\n\nexport default PlayerTabsTabs;\n","import { Model, Collection, sortOrderCompare } from 'modapp-resource';\nimport './playerTabs.scss';\nimport PlayerTabsTabs from './PlayerTabsTabs';\n\nfunction getPageIdx(pageId, pages) {\n\tif (pageId) {\n\t\tfor (let i = 0; i < pages.length; i++) {\n\t\t\tif (pages[i].id === pageId) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t}\n\treturn -1;\n};\n\n/**\n * PlayerTabs draws the player tabs for mobile layout and for desktop realm panel.\n */\nclass PlayerTabs {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\tthis._init();\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\n\t\tthis.tabs = new Collection({\n\t\t\tidAttribute: m => m.id,\n\t\t\tcompare: sortOrderCompare,\n\t\t\teventBus: this.app.eventBus,\n\t\t});\n\n\t\tthis.model = new Model({\n\t\t\tdata: {\n\t\t\t\ttabId: null,\n\t\t\t\tpage: null,\n\t\t\t\tpageIdx: 0,\n\t\t\t\tfactory: null,\n\t\t\t\tdefaultTab: null,\n\t\t\t},\n\t\t\teventBus: this.module.self.app.eventBus,\n\t\t});\n\n\t\tthis.state = {};\n\t\tthis.tabPages = {};\n\t\tthis.nullPages = [];\n\t}\n\n\tgetModel() {\n\t\treturn this.model;\n\t}\n\n\tgetCurrentTab() {\n\t\treturn this.model.tabId;\n\t}\n\n\t/**\n\t * Open a tab.\n\t * @param {string} tabId Tab ID. If null of missing, all tabs will be closed.\n\t * @param {bool} reset Flag if the tab should be reset to show the default page. Defaults to false.\n\t */\n\topenTab(tabId, reset) {\n\t\ttabId = tabId || null;\n\t\tlet tab = this.tabs.get(tabId);\n\t\tif (!tab) {\n\t\t\tthis.closeTabs();\n\t\t\treturn;\n\t\t}\n\t\tlet pages = this._getTabPages(tab);\n\t\tif (reset) {\n\t\t\tthis._closePages(tabId);\n\t\t}\n\t\tlet pageIdx = pages.length - 1;\n\t\tthis._setModel(tabId, pages[pageIdx], pageIdx);\n\t\tthis._closePages(null);\n\t}\n\n\t/**\n\t * Opens a page not attached to any given tab.\n\t * @param {string} pageId Tab page ID. If a page with the same ID is already open on the tab, that page will be moved to the top.\n\t * @param {function} pageFactory Page factory callback function: function(state, close, layoutId) -> { component: {Component}, [title]: {string|LocaleString}, [close]: {function}, [closeIcon]: {string} }\n\t * @param {object} [opt] Optional parameters.\n\t * @param {bool} [opt.reset] Flag if the tab should be opened upon the default page, closing all others. Defaults to false.\n\t * @param {function} [opt.beforeClose] Callback called before closing a page. If the beforeClose is set, the provided close method must be called for the page to close: function(close)\n\t * @param {function} [opt.onClose] Callback called when page is closed: function()\n\t * @returns {function} Close function for the tab page. If force is true, the page will be closed without calling beforeClose: function(force)\n\t */\n\topenPage(pageId, pageFactory, opt) {\n\t\treturn this.openTabPage(null, pageId, pageFactory, opt);\n\t}\n\n\t/**\n\t * Opens a page on a given tab.\n\t * @param {string} tabId Tab ID.\n\t * @param {string} pageId Tab page ID. If a page with the same ID is already open on the tab, that page will be moved to the top.\n\t * @param {function} pageFactory Page factory callback function: function(state, close, layoutId) -> { component: {Component}, [title]: {string|LocaleString}, [closeIcon]: {string} }\n\t * @param {object} [opt] Optional parameters.\n\t * @param {bool} [opt.reset] Flag if the tab should be opened upon the default page, closing all others. Defaults to false.\n\t * @param {function} [opt.beforeClose] Callback called before closing a page. If the beforeClose is set, the provided close method must be called for the page to close: function(close)\n\t * @param {function} [opt.onClose] Callback called when page is closed: function()\n\t * @returns {function} Close function for the tab page. If force is true, the page will be closed without calling beforeClose: function(force)\n\t */\n\topenTabPage(tabId, pageId, pageFactory, opt) {\n\t\ttabId = tabId || null;\n\t\topt = opt || {};\n\t\tlet tab = this.tabs.get(tabId);\n\t\tlet pages = this._getTabPages(tab);\n\t\tlet firstIdx = tab ? 1 : 0;\n\t\t// Check if page with that ID already existed\n\t\tlet pageIdx = getPageIdx(pageId, pages);\n\t\tif (opt.reset) {\n\t\t\tthis._closePages(tabId, pageId);\n\t\t} else if (pageIdx >= firstIdx && i < pages.length - 1) {\n\t\t\t// Move page from stack to end.\n\t\t\tpages.push(pages.splice(pageIdx, 1)[0]);\n\t\t}\n\n\t\t// If we are opening an non-tabbed page, if we had a tab opened before,\n\t\t// store the tabId as a 'reference' page.\n\t\tif (!tab && !pages.length && this.model.tabId) {\n\t\t\tpages.push({ refTabId: this.model.tabId });\n\t\t}\n\n\t\t// If we didn't have page before, add it.\n\t\tif (pageIdx < 0) {\n\t\t\tlet close = () => this._closePage(tabId, pageId, true);\n\t\t\tpages.push({\n\t\t\t\tid: pageId,\n\t\t\t\tstate: {},\n\t\t\t\tfactory: pageFactory,\n\t\t\t\tclose: opt.beforeClose\n\t\t\t\t\t? force => force ? close : opt.beforeClose(close)\n\t\t\t\t\t: close,\n\t\t\t\tonClose: opt.onClose,\n\t\t\t});\n\t\t}\n\n\t\t// When switching to a tab, all other non-tabbed pages are closed\n\t\tif (tab) {\n\t\t\tthis._closePages(null);\n\t\t}\n\n\t\tpageIdx = pages.length - 1;\n\t\tlet page = pages[pageIdx];\n\t\tthis._setModel(tabId, page, pageIdx);\n\n\t\treturn page.close;\n\t}\n\n\t/**\n\t * Closes all tabs so that no tab is selected.\n\t */\n\tcloseTabs() {\n\t\tthis._setModel(null, null, 0);\n\t}\n\n\t/**\n\t * Gets a collection of tabs.\n\t * @returns {Collection} Collection of tabs.\n\t */\n\tgetTabs() {\n\t\treturn this.tabs;\n\t}\n\n\tgetTabDirection(beforeTabId, afterTabId) {\n\t\tif (beforeTabId === afterTabId || !beforeTabId || !afterTabId) {\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn this._getTabIdx(afterTabId) - this._getTabIdx(beforeTabId);\n\t}\n\n\t/**\n\t * Registers a realm tab.\n\t * @param {object} tab Tab object\n\t * @param {string} tab.id Tab ID.\n\t * @param {number} tab.sortOrder Sort order.\n\t * @param {function} tab.tabFactory Tab component factory: function(click) -> Component\n\t * @param {function} tab.factory Tab component factory: function(state, close) -> { component: {Component}, [title]: {string|LocaleString}, [closeIcon]: {string} }\n\t * @param {string|LocaleString} tab.title Tab title\n\t * @param {boolean} isDefault Flag marking the tab as default.\n\t * @returns {this}\n\t */\n\taddTab(tab, isDefault) {\n\t\tif (this.tabs.get(tab.id)) {\n\t\t\tthrow new Error(\"Tab ID already registered: \", tab.id);\n\t\t}\n\t\tthis.tabs.add(tab);\n\t\tif (isDefault) {\n\t\t\tthis.model.set({ defaultTab: tab.id });\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t * Unregisters a previously registered tab.\n\t * @param {string} tabId Tab ID.\n\t * @returns {this}\n\t */\n\tremoveTab(tabId) {\n\t\tlet tab = this.tabs.get(tabId);\n\t\tif (tab) {\n\t\t\tthis.tabs.remove(tabId);\n\t\t\tif (this.model.defaultTab == tab.id) {\n\t\t\t\tthis.model.set({ defaultTab: null });\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t * Creates an instance of PlayerTabsTabs.\n\t * @param {object} [opt] Optional parameters as defined by CollectionList.\n\t * @param {string} [opt.className] Class name to set on the tabs component.\n\t * @param {boolean} [opt.closeOnReselect] Flag to close tabs when clicking on a tab that is already selected. Defaults to false.\n\t * @param {boolean} [opt.hideDefaultTab] Flag to hide the default tab. Defaults to false.\n\t * @returns {PlayerTabsTabs} Tabs component.\n\t */\n\tnewTabs(opt) {\n\t\treturn new PlayerTabsTabs(this.module, opt);\n\t}\n\n\tgetDefaultTabFactory() {\n\t\tlet tabId = this.model.defaultTab;\n\t\tif (tabId) {\n\t\t\tlet tab = this.tabs.get(this.model.defaultTab);\n\t\t\tif (tab) {\n\t\t\t\tlet page = this._getTabPages(tab)[0];\n\t\t\t\treturn layoutId => page.factory(page.state, page.close, layoutId);\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\t_setModel(tabId, page, pageIdx) {\n\t\ttabId = tabId || null;\n\t\tpage = page || null;\n\t\tpageIdx = pageIdx && pageIdx > 0 ? pageIdx : 0;\n\t\tlet factory = this.model.factory || null;\n\t\tif (this.model.page !== page) {\n\t\t\tfactory = page\n\t\t\t\t? layoutId => page.factory(page.state, page.close, layoutId)\n\t\t\t\t: null;\n\t\t}\n\t\tthis.model.set({ tabId, page: page, pageIdx, factory });\n\t}\n\n\t_closePage(tabId, pageId, updateModel) {\n\t\ttabId = tabId || null;\n\t\tlet tab = this.tabs.get(tabId);\n\t\tlet pages = this._getTabPages(tab);\n\t\t// Check if page with that ID already existed\n\t\tlet pageIdx = getPageIdx(pageId, pages);\n\n\t\t// Assert page is found\n\t\tif (pageIdx < 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet page = pages.splice(pageIdx, 1)[0];\n\t\tif (updateModel && this.model.tabId === tabId) {\n\t\t\tif (pages.length) {\n\t\t\t\tlet i = pages.length - 1;\n\t\t\t\tlet nextPage = pages[i];\n\t\t\t\tif (nextPage.refTabId) {\n\t\t\t\t\tpages.pop();\n\t\t\t\t\tthis.openTab(nextPage.refTabId);\n\t\t\t\t} else {\n\t\t\t\t\tthis._setModel(tabId, pages[i], i);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.closeTabs();\n\t\t\t}\n\t\t}\n\n\t\tif (page.onClose) {\n\t\t\tpage.onClose();\n\t\t}\n\t}\n\n\t_closePages(tabId, skipPageId) {\n\t\t// Close all other pages\n\t\ttabId = tabId || null;\n\t\tlet tab = this.tabs.get(tabId);\n\t\tlet pages = this._getTabPages(tab);\n\t\tlet firstIdx = tab ? 1 : 0;\n\t\tfor (let i = pages.length - 1; i >= firstIdx; i--) {\n\t\t\tif (pages[i].id !== skipPageId) {\n\t\t\t\tthis._closePage(tabId, pages[i].id);\n\t\t\t}\n\t\t}\n\t}\n\n\t_getTabPages(tab) {\n\t\tif (!tab) {\n\t\t\treturn this.nullPages;\n\t\t}\n\t\tlet pages = this.tabPages[tab.id];\n\t\tif (!pages) {\n\t\t\tpages = [{\n\t\t\t\tid: null,\n\t\t\t\tstate: {},\n\t\t\t\tfactory: tab.factory,\n\t\t\t\tclose: () => this.closeTabs(),\n\t\t\t}];\n\t\t\tthis.tabPages[tab.id] = pages;\n\t\t}\n\n\t\treturn pages;\n\t}\n\n\t_getTabIdx(tabId) {\n\t\tlet idx = 0;\n\t\tfor (let tab of this.tabs) {\n\t\t\tif (tab.id == tabId) {\n\t\t\t\treturn idx;\n\t\t\t}\n\t\t\tidx++;\n\t\t}\n\t\treturn -1;\n\t}\n\n\tdispose() {\n\t\tthis.module.mobileLayout.setNode('topbar', null);\n\t}\n}\n\nexport default PlayerTabs;\n","import getRoomInstanceId from 'utils/getRoomInstanceId';\n\nfunction getPageIdx(pageId, pages) {\n\tif (pageId) {\n\t\tfor (let i = 0; i < pages.length; i++) {\n\t\t\tif (pages[i].id === pageId) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t}\n\treturn -1;\n}\n\n/**\n * Holds the state of a character's room panel, which pages are opened, and if\n * an area is being viewed.\n */\nclass RoomPagesChar {\n\tconstructor(module, ctrl, update, opt) {\n\t\tthis.module = module;\n\t\tthis.ctrl = ctrl;\n\t\tthis.update = update;\n\n\t\tthis.roomInstanceId = null;\n\t\tthis.areaId = null;\n\t\t// Page stacks\n\t\tthis.roomPages = {};\n\t\tthis.areaPages = {};\n\t\tthis.charPages = [];\n\t\tthis.defaultRoomStates = {};\n\t\tthis.defaultAreaStates = {};\n\n\t\tthis.setDefaultRoomPageFactory(opt?.defaultRoomPageFactory);\n\t\tthis.setDefaultAreaPageFactory(opt?.defaultAreaPageFactory);\n\t}\n\n\t/**\n\t * Sets the ID of the area to view.\n\t * @param {string | null} areaId Area ID to view, or null to view the room.\n\t */\n\tsetAreaId(areaId) {\n\t\tthis.areaId = areaId || null;\n\t}\n\n\t/**\n\t * Gets the ID of the area being viewed.\n\t * @returns {string | null} Area ID or null if the room is viewed.\n\t */\n\tgetAreaId() {\n\t\treturn this.areaId;\n\t}\n\n\t/**\n\t * Opens a page to for a specific room ID or area ID. The page will be\n\t * placed on top of the stack for the specific roomInstanceId or areaId. If\n\t * both roomInstanceId and areaId is null, the charPages stack will be used,\n\t * and will have priority over any other page set.\n\t * @param {string} pageId Page ID. If a page with the same ID is already open for that room, that page will be moved to the top.\n\t * @param {string | null} roomInstanceId Room instance ID\n\t * @param {string | null} areaId Area ID. Ignored if roomInstanceId is not null.\n\t * @param {function} pageFactory Page factory callback function: function(ctrl, room, roomState, close) -> { component, [title], [onClose], [closeIcon] }\n\t * @param {object} [opt] Optional parameters.\n\t * @param {function} [opt.onClose] Callback called when page is closed.\n\t * @param {function} [opt.stateFactory] Initial state factory function.\n\t * @returns {function} Function that closes the page.\n\t */\n\topenPage(pageId, roomInstanceId, areaId, pageFactory, opt) {\n\t\topt = opt || {};\n\t\tlet stack = this._getPageStack(roomInstanceId, areaId);\n\t\tlet firstIdx = roomInstanceId ? 1 : 0;\n\t\t// Check if page with that ID already existed\n\t\tlet pageIdx = getPageIdx(pageId, stack);\n\n\t\tif (opt.reset) {\n\t\t\tthis._closePages(roomInstanceId, areaId);\n\t\t} else if (pageIdx >= firstIdx) {\n\t\t\t// Move page from stack to end.\n\t\t\tstack.push(stack.splice(pageIdx, 1)[0]);\n\t\t}\n\n\t\t// Check if page didn't exist before\n\t\tif (pageIdx < 0) {\n\t\t\tlet close = () => this._closePage(roomInstanceId, areaId, pageId, true);\n\t\t\tstack.push({\n\t\t\t\tid: pageId,\n\t\t\t\tfactory: pageFactory,\n\t\t\t\tstate: opt.stateFactory ? opt.stateFactory(this.ctrl) : {},\n\t\t\t\tclose: opt.beforeClose\n\t\t\t\t\t? force => force ? close : opt.beforeClose(close)\n\t\t\t\t\t: close,\n\t\t\t\tonClose: opt.onClose,\n\t\t\t});\n\t\t}\n\n\t\tthis.update(this.ctrl);\n\n\t\treturn stack[stack.length - 1].close || null;\n\t}\n\n\t/**\n\t * Gets the top-most page from the relevant stack of pages. If there are\n\t * pages in the charPages stack, that stack is used. If areaId is not null,\n\t * the areaPages stack is used. Otherwise, the character's current\n\t * roomInstance is used.\n\t * @returns {Object | null} Page object.\n\t */\n\tgetPage() {\n\t\tlet stack = this.charPages;\n\t\tif (!stack.length) {\n\t\t\tstack = this._getPageStack(this.areaId ? null : getRoomInstanceId(this.ctrl.inRoom), this.areaId);\n\t\t}\n\t\treturn stack?.length ? stack[stack.length - 1] : null;\n\t}\n\n\tcreateFactory(page, room, area) {\n\t\treturn (layoutId) => page.factory?.(this.ctrl, page.state, page.close, layoutId, {\n\t\t\troom,\n\t\t\tarea,\n\t\t});\n\t}\n\n\t/**\n\t * Gets a page stack for a specific roomInstance or area. If both\n\t * roomInstanceId and areaId is null, it will return the stack for the\n\t * character.\n\t * @param {string | null} roomInstanceId Room instance ID\n\t * @param {string | null} areaId Area ID. Ignored if roomInstanceId is not null.\n\t * @returns {Array.<Object>} Array of page objects.\n\t */\n\t_getPageStack(roomInstanceId, areaId) {\n\t\tlet pages = this.charPages;\n\t\tif (roomInstanceId) {\n\t\t\tpages = this.roomPages[roomInstanceId];\n\t\t\tif (!pages) {\n\t\t\t\tpages = [ this.defaultRoomPage ];\n\t\t\t\tthis.roomPages[roomInstanceId] = pages;\n\t\t\t}\n\t\t} else if (areaId) {\n\t\t\tpages = this.areaPages[areaId];\n\t\t\tif (!pages) {\n\t\t\t\tpages = [ this.defaultAreaPage ];\n\t\t\t\tthis.areaPages[areaId] = pages;\n\t\t\t}\n\t\t}\n\t\treturn pages;\n\t}\n\n\tsetDefaultRoomPageFactory(pageFactory) {\n\t\tlet f = pageFactory?.componentFactory;\n\n\n\t\tthis.defaultRoomPage = {\n\t\t\tid: null,\n\t\t\tstate: (pageFactory?.stateFactory ? pageFactory.stateFactory(this.ctrl) : {}),\n\t\t\tfactory: f\n\t\t\t\t? (ctrl, state, close, layoutId, opt) => f(ctrl, opt.room, state, layoutId)\n\t\t\t\t: null,\n\t\t\tclose: null,\n\t\t};\n\t}\n\n\tsetDefaultAreaPageFactory(pageFactory) {\n\t\tlet f = pageFactory?.componentFactory;\n\t\tthis.defaultAreaPage = {\n\t\t\tid: null,\n\t\t\tstate: (pageFactory?.stateFactory ? pageFactory.stateFactory(this.ctrl) : {}),\n\t\t\tfactory: f\n\t\t\t\t? (ctrl, state, close, layoutId, opt) => f(ctrl, opt.area, state, layoutId)\n\t\t\t\t: null,\n\t\t\tclose: null,\n\t\t};\n\t}\n\n\t_closePages(roomInstanceId, areaId, skipPageId) {\n\t\tlet stack = this._getPageStack(roomInstanceId, areaId);\n\t\tlet firstIdx = roomInstanceId ? 1 : 0;\n\t\tfor (let i = stack.length - 1; i >= firstIdx; i--) {\n\t\t\tif (stack[i].id !== skipPageId) {\n\t\t\t\tthis._closePage(roomInstanceId, areaId, stack[i].id);\n\t\t\t}\n\t\t}\n\t}\n\n\t_closePage(roomInstanceId, areaId, pageId, triggerUpdate) {\n\t\tlet stack = this._getPageStack(roomInstanceId, areaId);\n\t\t// Find index position of page\n\t\tlet pageIdx = getPageIdx(pageId, stack);\n\n\t\t// Assert page is found\n\t\tif (pageIdx < 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet page = stack.splice(pageIdx, 1)[0];\n\t\tif (triggerUpdate && pageIdx >= stack.length) {\n\t\t\tthis.update(this.ctrl);\n\t\t}\n\n\t\tif (page.onClose) {\n\t\t\tpage.onClose();\n\t\t}\n\t}\n\n\tdispose() {}\n}\n\nexport default RoomPagesChar;\n","import { Elem } from 'modapp-base-component';;\nimport { CollectionList, ModelComponent } from 'modapp-resource-component';\nimport FAIcon from 'components/FAIcon';\n\n\nfunction getAreaId(area) {\n\treturn area ? area.id : null;\n}\n\n/**\n * RoomPagesZoomBar renders the zoom bar.\n */\nclass RoomPagesZoomBar {\n\tconstructor(module, ctrlId, areas, model, opt) {\n\t\tthis.module = module;\n\t\tthis.ctrlId = ctrlId;\n\t\tthis.areas = areas;\n\t\tthis.model = model;\n\t\tthis.opt = opt;\n\t}\n\n\trender(el) {\n\t\tthis.elem = new ModelComponent(\n\t\t\tthis.model,\n\t\t\tnew Elem(n => n.elem('div', { className: 'roompages-zoombar' + (this.opt?.className ? ' ' + this.opt?.className : '') }, [\n\t\t\t\tn.elem('div', { className: 'roompages-zoombar--zoomin' }, [\n\t\t\t\t\tn.elem('zoomin', 'button', { className: 'iconbtn medium', events: { click: () => this._zoom(-1) }}, [\n\t\t\t\t\t\tn.component(new FAIcon('search-plus')),\n\t\t\t\t\t]),\n\t\t\t\t]),\n\t\t\t\tn.component(new CollectionList(this.areas, area => new ModelComponent(\n\t\t\t\t\tthis.model,\n\t\t\t\t\tnew Elem(n => n.elem('div', { className: 'roompages-zoombar--area' }, [\n\t\t\t\t\t\tn.elem('bar', 'div', {\n\t\t\t\t\t\t\tclassName: 'roompages-zoombar--bar',\n\t\t\t\t\t\t\tevents: { click: () => this.module.self.setArea(this.ctrlId, area?.id) },\n\t\t\t\t\t\t}),\n\t\t\t\t\t])),\n\t\t\t\t\t(m, c) => c[area == m.area ? 'addNodeClass' : 'removeNodeClass']('bar', 'current'),\n\t\t\t\t), {\n\t\t\t\t\tclassName: 'roompages-zoombar--areas',\n\t\t\t\t\tduration: 600,\n\t\t\t\t\thorizontal: true,\n\t\t\t\t})),\n\t\t\t\tn.elem('div', { className: 'roompages-zoombar--zoomout' }, [\n\t\t\t\t\tn.elem('zoomout', 'button', { className: 'iconbtn medium', events: { click: () => this._zoom(1) }}, [\n\t\t\t\t\t\tn.component(new FAIcon('search-minus')),\n\t\t\t\t\t]),\n\t\t\t\t]),\n\t\t\t])),\n\t\t\t(m, c, change) => {\n\t\t\t\tif (change && !change.hasOwnProperty('area')) return;\n\n\t\t\t\tlet idx = this._getAreaIndex();\n\t\t\t\tc.setNodeProperty('zoomin', 'disabled', idx > 0 ? null : 'disabled');\n\t\t\t\tc.setNodeProperty('zoomout', 'disabled', idx < (this.areas.length - 1) ? null : 'disabled');\n\t\t\t},\n\t\t);\n\t\treturn this.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n\n\t_getAreaIndex() {\n\t\tlet area = this.model.area;\n\t\tlet idx = 0;\n\t\tfor (let a of this.areas) {\n\t\t\tif (area == a) {\n\t\t\t\treturn idx;\n\t\t\t}\n\t\t\tidx++;\n\t\t}\n\t\treturn -1;\n\t}\n\n\t_zoom(dir) {\n\t\tlet idx = this._getAreaIndex();\n\t\tif (idx < 0) {\n\t\t\tidx = 0;\n\t\t} else {\n\t\t\tidx += dir;\n\t\t\tif (idx < 0) {\n\t\t\t\tidx = 0;\n\t\t\t}\n\t\t\tif (idx >= this.areas.length) {\n\t\t\t\tidx = this.areas.length - 1;\n\t\t\t}\n\t\t}\n\n\t\tthis.module.self.setArea(this.ctrlId, getAreaId(this.areas[idx]));\n\t}\n}\n\nexport default RoomPagesZoomBar;\n","import { Model } from 'modapp-resource';\nimport { ModelComponent } from 'modapp-resource-component';\nimport ModelCollapser from 'components/ModelCollapser';\nimport Fader from 'components/Fader';\nimport objectKeyDiff from 'utils/objectKeyDiff';\nimport arraysEqual from 'utils/arraysEqual';\nimport { relistenResource } from 'utils/listenResource';\nimport RoomPagesChar from './RoomPagesChar';\nimport RoomPagesZoomBar from './RoomPagesZoomBar';\nimport './roomPages.scss';\n\nconst namespace = 'module.roomPages';\nconst emptyModelValues = {\n\t// Controlled character\n\tchar: null,\n\t// Current room\n\tinRoom: null,\n\t// Current area\n\tarea: null,\n\t// Current collection of areas. First item is always null.\n\tareas: null,\n\t// Current page in display\n\tpage: null,\n\t// Page info factory function for the page\n\tfactory: null,\n};\n\n/**\n * RoomPages holds the room panels room or area pages per controlled character.\n */\nclass RoomPages {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\t// Bind callbacks\n\t\tthis._onCtrlChange = this._onCtrlChange.bind(this);\n\t\tthis._onPlayerChange = this._onPlayerChange.bind(this);\n\t\tthis._onCharChange = this._onCharChange.bind(this);\n\t\tthis._onAreaChange = this._onAreaChange.bind(this);\n\t\tthis._update = this._update.bind(this);\n\n\t\tthis.app.require([\n\t\t\t'api',\n\t\t\t'player',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\t\tthis.model = new Model({ data: emptyModelValues });\n\n\t\tthis.playerModel = this.module.player.getModel();\n\t\tthis.ctrlModel = this.module.player.getControlledModel();\n\n\t\tthis.charStates = {};\n\t\tthis.defaultRoomPageFactory = null;\n\t\tthis.defaultAreaPageFactory = null;\n\n\t\tthis._setListeners(true);\n\t}\n\n\t/**\n\t * Attach an event handler function for one or more player module events.\n\t * @param {?string} events One or more space-separated events. Null means any event. Available events are 'open'.\n\t * @param {Event~eventCallback} handler A function to execute when the event is emitted.\n\t */\n\ton(events, handler) {\n\t\tthis.app.eventBus.on(this, events, handler, namespace);\n\t}\n\n\t/**\n\t * Remove an event handler.\n\t * @param {?string} events One or more space-separated events. Null means any event.\n\t * @param {Event~eventCallback} [handler] An option handler function. The handler will only be remove if it is the same handler.\n\t */\n\toff(events, handler) {\n\t\tthis.app.eventBus.off(this, events, handler, namespace);\n\t}\n\n\tgetModel() {\n\t\treturn this.model;\n\t}\n\n\t/**\n\t * Sets the area to show.\n\t * @param {string} ctrlId Controlled character ID\n\t * @param {string | null} areaId Area ID to show. Null means to show the room.\n\t */\n\tsetArea(ctrlId, areaId) {\n\t\tlet c = this._getChar(ctrlId);\n\t\tc.setAreaId(areaId);\n\t\tif (ctrlId === this.model.char.id) {\n\t\t\tthis._onAreaChange();\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t * @typedef {object} RoomPagesDefaultPageFactory\n\t * @property {(ctrl: Model, state: Object, layoutId: string) => { component: Component, title?: String | LocaleString }} componentFactory Default page compoent factory callback function\n\t * @property {(ctrl: Model) => Object} stateFactory Initial state factory function.\n\t */\n\n\t/**\n\t * Sets the default page factory for the room pages.\n\t * @param {?RoomPagesDefaultPageFactory} pageFactory Default page room factory.\n\t * @returns {this}\n\t */\n\tsetDefaultRoomPageFactory(pageFactory) {\n\t\tthis.defaultRoomPageFactory = pageFactory || null;\n\t\t// Set it for all existing character components.\n\t\tfor (let k in this.charStates) {\n\t\t\tthis.charStates[k].setDefaultRoomPageFactory(pageFactory);\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t * Gets the default page factory for the room pages.\n\t * @returns {?RoomPagesDefaultPageFactory} Default room page factory.\n\t */\n\tgetDefaultRoomPageFactory() {\n\t\treturn this.defaultRoomPageFactory;\n\t}\n\n\t/**\n\t * Sets the default page factory for the area pages.\n\t * @param {?RoomPagesDefaultPageFactory} pageFactory Default page area factory.\n\t * @returns {this}\n\t */\n\tsetDefaultAreaPageFactory(pageFactory) {\n\t\tthis.defaultAreaPageFactory = pageFactory || null;\n\t\t// Set it for all existing character states.\n\t\tfor (let k in this.charStates) {\n\t\t\tthis.charStates[k].setDefaultAreaPageFactory(pageFactory);\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t * Gets the default page factory for the area pages.\n\t * @returns {?RoomPagesDefaultPageFactory} Default area page factory.\n\t */\n\tgetDefaultAreaPageFactory() {\n\t\treturn this.defaultAreaPageFactory;\n\t}\n\n\t/**\n\t * Creates a new instance of a RoomPagesZoomBar.\n\t * @param {object} [opt] Optional parameters.\n\t * @param {string} [opt.className] Additional class name to add to the ZoomBar.\n\t * @returns {RoomPagesZoomBar} ZoomBar component.\n\t */\n\tnewZoomBar(opt) {\n\t\treturn new ModelCollapser(this.model, [{\n\t\t\tcondition: m => m.areas?.length > 1,\n\t\t\tfactory: m => new ModelComponent(\n\t\t\t\tm,\n\t\t\t\tnew Fader(),\n\t\t\t\t(m, c, change) => {\n\t\t\t\t\tif ((!change || change.hasOwnProperty('areas') || change.hasOwnProperty('char')) && m.areas?.length > 1 && m.char) {\n\t\t\t\t\t\tc.setComponent(new RoomPagesZoomBar(this.module, m.char.id, m.areas, m, opt));\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t),\n\t\t}], { duration: 150 });\n\t}\n\n\n\t/**\n\t * Opens a in-panel page set to a specific room ID.\n\t * @param {string} pageId Page ID. If a page with the same ID is already open for that character and room, that page will be moved to the top.\n\t * @param {string} ctrlId Char ID of controlled character.\n\t * @param {string} roomInstanceId Room instance ID\n\t * @param {(ctrl: Model, room: Model, roomState: any, close: () => void, layoutId: string) => { component: Component, title?: string | LocaleString, onClose?: () => void, closeIcon?: string }} pageFactory Page factory callback function.\n\t * @param {object} [opt] Optional parameters.\n\t * @param {bool} [opt.openPanel] Flag to tell if the panel should be opened when opening the page.\n\t * @param {function} [opt.onClose] Callback called when page is closed.\n\t * @param {(ctrl: Model) => Object} [opt.stateFactory] Initial state factory function.\n \t * @returns {function} Function that closes the page.\n\t */\n\topenRoomPage(pageId, ctrlId, roomInstanceId, pageFactory, opt) {\n\t\treturn this._openPage(pageId, ctrlId, roomInstanceId, null, (ctrl, state, close, layoutId, opt) => pageFactory(ctrl, opt.room, state, close, layoutId), opt);\n\t}\n\n\n\t/**\n\t * Opens a in-panel page set to a specific area ID.\n\t * @param {string} pageId Page ID. If a page with the same ID is already open for that character and room, that page will be moved to the top.\n\t * @param {string} ctrlId Char ID of controlled character.\n\t * @param {string} areaId Area ID\n\t * @param {(ctrl: Model, area: Model, roomState: any, close: () => void, layoutId: string) => { component: Component, title?: string | LocaleString, onClose?: () => void, closeIcon?: string }} pageFactory Page factory callback function.\n\t * @param {object} [opt] Optional parameters.\n\t * @param {bool} [opt.openPanel] Flag to tell if the panel should be opened when opening the page.\n\t * @param {function} [opt.onClose] Callback called when page is closed.\n\t * @param {(ctrl: Model) => Object} [opt.stateFactory] Initial state factory function.\n \t * @returns {function} Function that closes the page.\n\t */\n\topenAreaPage(pageId, ctrlId, areaId, pageFactory, opt) {\n\t\treturn this._openPage(pageId, ctrlId, null, areaId, (ctrl, state, close, layoutId, opt) => pageFactory(ctrl, opt.area, state, close, layoutId), opt);\n\t}\n\n\n\t/**\n\t * Opens a in-panel page set to a specific room ID or area ID.\n\t * @param {string} pageId Page ID. If a page with the same ID is already open for that character and room, that page will be moved to the top.\n\t * @param {string} ctrlId Char ID of controlled character.\n\t * @param {string?} roomInstanceId Room instance ID\n\t * @param {string?} areaId Area ID. Ignored if roomInstanceId is not null.\n\t * @param {(ctrl: Model, room: Model, roomState: any, close: () => void, layoutId: string) => { component: Component, title?: string | LocaleString, onClose?: () => void, closeIcon?: string }} pageFactory Page factory callback function.\n\t * @param {object} [opt] Optional parameters.\n\t * @param {bool} [opt.openPanel] Flag to tell if the panel should be opened when opening the page.\n\t * @param {function} [opt.onClose] Callback called when page is closed.\n\t * @param {(ctrl: Model) => Object} [opt.stateFactory] Initial state factory function.\n \t * @returns {function} Function that closes the page.\n\t */\n\t_openPage(pageId, ctrlId, roomInstanceId, areaId, pageFactory, opt) {\n\t\tlet ret = this._getChar(ctrlId).openPage(pageId, roomInstanceId, areaId, pageFactory, opt);\n\t\tif (opt?.openPanel) {\n\t\t\tthis.openPanel();\n\t\t}\n\n\t\treturn ret;\n\t}\n\n\t// Triggers an open event that panels may be listening to.\n\topenPanel() {\n\t\tthis.app.eventBus.emit(this, namespace + '.open');\n\t}\n\n\t/**\n\t * Gets a character state\n\t * @param {string} ctrlId Character ID.\n\t * @returns {RoomPagesChar} Character state.\n\t */\n\t_getChar(ctrlId) {\n\t\tlet c = this.charStates[ctrlId];\n\t\tif (!c) {\n\t\t\tthrow new Error(\"No state for char \" + ctrlId);\n\t\t}\n\t\treturn c;\n\t}\n\n\t_setListeners(on) {\n\t\tlet cb = on ? 'on' : 'off';\n\n\t\tthis.ctrlModel[cb]('change', this._onCtrlChange);\n\t\tthis.playerModel[cb]('change', this._onPlayerChange);\n\t\tif (on) {\n\t\t\tthis._onCtrlChange();\n\t\t}\n\t}\n\n\t_onCtrlChange() {\n\t\tthis._listenChars(objectKeyDiff(this.charStates, this.ctrlModel?.props));\n\t\tthis._onPlayerChange();\n\t}\n\n\t_listenChars(change) {\n\t\tfor (let charId in change) {\n\t\t\tlet char = change[charId];\n\t\t\tlet prev = this.charStates[charId];\n\t\t\tif (char) {\n\t\t\t\tif (!prev) {\n\t\t\t\t\tthis.charStates[charId] = new RoomPagesChar(this.module, char, this._update, {\n\t\t\t\t\t\tdefaultRoomPageFactory: this.getDefaultRoomPageFactory(),\n\t\t\t\t\t\tdefaultAreaPageFactory: this.getDefaultAreaPageFactory(),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else if (prev) {\n\t\t\t\tprev.dispose();\n\t\t\t\tdelete this.charStates[charId];\n\t\t\t}\n\t\t}\n\t}\n\n\t_onPlayerChange(ev) {\n\t\tthis._updateModel(this.playerModel.activeChar);\n\t}\n\n\t_onCharChange(change, char) {\n\t\tif ((change && !change.hasOwnProperty('inRoom')) || char != this.model.char) return;\n\n\t\tthis._updateModel(this.model.char);\n\t}\n\n\t_onAreaChange() {\n\t\tthis._updateModel(this.model.char);\n\t}\n\n\t_update(ctrl) {\n\t\t// Only update the model if the character is the active one\n\t\tif (this.model.char == ctrl) {\n\t\t\tthis._updateModel(ctrl);\n\t\t}\n\t}\n\n\t_updateModel(char) {\n\t\tlet c = char ? this.charStates[char.id] : null;\n\t\tif (!c) {\n\t\t\tif (!char) {\n\t\t\t\trelistenResource(this.model.char, null, this._onCharChange);\n\t\t\t\tthis._listenAreas(this.model.areas, null);\n\t\t\t\tthis.model.set(emptyModelValues);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tlet changedChar = this.model.char !== char;\n\t\tif (changedChar) {\n\t\t\trelistenResource(this.model.char, char, this._onCharChange);\n\t\t}\n\n\t\t// Get area list. If we switch character, we still change the areas list\n\t\t// even if both characters are in the same area.\n\t\tlet areas = this._getAreas(char);\n\t\tif (!changedChar && arraysEqual(areas, this.model.areas)) {\n\t\t\tareas = this.model.areas;\n\t\t} else {\n\t\t\tthis._listenAreas(this.model.areas, areas);\n\t\t}\n\n\t\t// Current area.\n\t\tlet area = this._getCurrentArea(c.getAreaId(), this.model.areas, areas);\n\t\tc.setAreaId(area?.id);\n\n\t\t// Current in room unless we have an area.\n\t\tlet inRoom = (!area && char.inRoom) || null;\n\n\t\t// Get current page.\n\t\tlet page = c.getPage() || null;\n\t\t// Current factory.\n\t\tlet factory = this.model.factory;\n\t\t// Update factory if we've changed the page, the area, or the room.\n\t\tif (this.model.page !== page || this.model.area !== area || this.model.inRoom !== inRoom) {\n\t\t\tfactory = (page && c.createFactory(page, inRoom, area)) || null;\n\t\t}\n\n\t\treturn this.model.set({ char, inRoom, area, areas, page, factory });\n\t}\n\n\t_listenAreas(before, after) {\n\t\tfor (let b of before || []) {\n\t\t\tb?.off('change', this._onAreaChange);\n\t\t}\n\t\tfor (let a of after || []) {\n\t\t\ta?.on('change', this._onAreaChange);\n\t\t}\n\t}\n\n\t_getAreas(ctrl) {\n\t\tif (!ctrl) {\n\t\t\treturn null;\n\t\t}\n\t\tlet list = [ null ];\n\t\tlet area = ctrl.inRoom?.area;\n\t\twhile (area) {\n\t\t\tlist.push(area);\n\t\t\tarea = area.parent;\n\t\t}\n\t\treturn list;\n\t}\n\n\t// Gets the area that is to be set as current, depending on what areaId was\n\t// previous set as current, what areas we had before, and what areas we have\n\t// now.\n\t_getCurrentArea(areaId, before, after) {\n\t\t// Assert that we have areas\n\t\tif (areaId && after?.length > 1) {\n\t\t\t// If we were watching the room's current area, we will continue do\n\t\t\t// so even after entering a room belonging to a new area.\n\t\t\tif (before && before[1]?.id === areaId) {\n\t\t\t\treturn after[1];\n\t\t\t}\n\t\t\t// Try to see if the area we used to watch still exists after the\n\t\t\t// changes. If so, select that area.\n\t\t\tfor (let area of after) {\n\t\t\t\tif (area?.id == areaId) {\n\t\t\t\t\treturn area;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// Default to show the room\n\t\treturn null;\n\t}\n\n\tdispose() {\n\t\tthis._updateModel(null);\n\t\tthis._setListeners(false);\n\t\tthis._listenChars(Object.keys(this.charStates).map(k => undefined));\n\t}\n}\n\nexport default RoomPages;\n","/**\n * Encodes an ArrayBuffer into a base64 encoded string.\n * @param {ArrayBuffer} buffer Array buffer.\n * @param {boolean} urlSafe Optional flag to use URL safe encoding.\n * @param {boolean} raw Optional flag to use use the raw encoding without trailing padding (=).\n * @returns {string} Base64 encoded string.\n */\nexport function fromArrayBuffer(buffer, urlSafe, raw) {\n\tlet str = btoa(String.fromCharCode.apply(null, new Uint8Array(buffer)));\n\tif (raw) {\n\t\tstr = str.replace(/=+$/, '');\n\t}\n\treturn urlSafe\n\t\t? str.replace(/\\//g, '_').replace(/\\+/g, '-')\n\t\t: str;\n}\n","import { Html } from 'modapp-base-component';\nimport { Model } from 'modapp-resource';\nimport l10n from 'modapp-l10n';\nimport * as base64 from 'utils/base64.js';\nimport isVisible from 'utils/isVisible.js';\n\nconst notifyStoragePrefix = 'notify.user.';\n\nconst notifySettingKeys = [ 'notifyOnWakeup', 'notifyOnWatched', 'notifyOnMatched', 'notifyOnEvent', 'notifyOnMention', 'notifyOnRequests' ];\n\nfunction defaultOnClick(ev) {\n\twindow.focus();\n\tev.target.close();\n}\n\n/**\n * Notify shows system notifications.\n */\nclass Notify {\n\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\t\tthis.defaultIcon = params.defaultIcon || '/android-chrome-192x192.png';\n\t\tthis.defaultBadge = params.defaultBadge || '/badgemask-96x96.png';\n\t\tthis.alwaysNotify = !!params.alwaysNotify;\n\n\t\t// Notify modes:\n\t\t// * push - Use service worker with Push API\n\t\t// * local - Use service worker without Push API (local notifications)\n\t\t// * auto - Behave like 'push' if app is running in display-mode: standalone, otherwise behave like 'local'. Default.\n\t\t// * legacy - Don't use service worker or Push API (uses new Notification instead).\n\t\tthis.mode = [ 'push', 'local', 'legacy' ].find(v => v == params.mode) || 'auto';\n\n\t\t// Bind callbacks\n\t\tthis._onModelChange = this._onModelChange.bind(this);\n\t\tthis._onVisibilityChange = this._onVisibilityChange.bind(this);\n\n\t\tthis.app.require([\n\t\t\t'api',\n\t\t\t'confirm',\n\t\t\t'player',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\n\t\tthis.model = new Model({ data: {\n\t\t\tenabled: false,\n\t\t\tusePush: false,\n\t\t\tnotifyOnWakeup: true,\n\t\t\tnotifyOnWatched: true,\n\t\t\tnotifyOnMatched: true,\n\t\t\tnotifyOnEvent: true,\n\t\t\tnotifyOnMention: true,\n\t\t\tnotifyOnRequests: true,\n\t\t}, eventBus: this.app.eventBus });\n\t\tthis.tags = {};\n\t\tthis.player = null;\n\t\tthis.endpoint = null;\n\t\tthis.module.player.getPlayerPromise().then(player => {\n\t\t\tthis.player = player;\n\t\t\tthis._loadSettings();\n\t\t\tthis.model.on('change', this._onModelChange);\n\t\t});\n\n\t\tdocument.addEventListener('visibilitychange', this._onVisibilityChange);\n\t}\n\n\tgetModel() {\n\t\treturn this.model;\n\t}\n\n\t/**\n\t * Send a local notification.\n\t * @param {string|LocaleString} title Title of the notification.\n\t * @param {string|LocaleString} body Message body of the notification.\n\t * @param {object} [opt] Optional parameters. Same as the Notification API with some additions.\n\t * @param {string} [opt.tag] Tag to set on the notification.\n\t * @param {number} [opt.duration] Duration the notification will be open in milliseconds. Defaults to 5000.\n\t * @param {function} [opt.onClick] Callback called when notifications is clicked.\n\t * @param {boolean} [opt.skipOnPush] Flag to skip sending the notification if push is enabled.\n\t */\n\tsend(title, body, opt) {\n\t\tif (!this.player || !this.model.enabled || (opt?.skipOnPush && this.model.usePush)) return;\n\n\t\tlet tag = opt?.tag;\n\t\t// Prevent new notifications on the same tag\n\t\tif (tag) {\n\t\t\tif (this.tags[tag]) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.tags[tag] = true;\n\t\t\tsetTimeout(() => delete this.tags[tag], 200);\n\t\t}\n\t\topt = Object.assign({\n\t\t\tbody: (body && (typeof body == 'string' ? body : l10n.t(body))) || undefined,\n\t\t\ticon: this.defaultIcon,\n\t\t\tbadge: this.defaultBadge,\n\t\t\tonClick: defaultOnClick,\n\t\t\talwaysNotify: this.alwaysNotify,\n\t\t}, opt, {\n\t\t\t// Replace the provided tag with the user ID. This is because iPhone won't\n\t\t\t// allow us to close previous notifications, so the tag must be the group\n\t\t\t// identifier. This is to prevent notification spamming, ensuring we only\n\t\t\t// have a single event showing on the phone per player, at any one time.\n\t\t\ttag: this._userTag(),\n\t\t});\n\t\ttitle = typeof title == 'string' ? title : l10n.t(title);\n\n\t\tconst serviceWorker = this.app.getModule('serviceWorker');\n\t\t((this.mode != 'legacy' && serviceWorker?.getPromise()) || Promise.reject()).then((registration) => {\n\t\t\treturn registration\n\t\t\t\t? serviceWorker.showNotification(title, opt)\n\t\t\t\t: Promise.reject();\n\t\t}).catch(() => {\n\t\t\tif (typeof Notification != 'undefined' && (!isVisible() || this.alwaysNotify)) {\n\t\t\t\t// Fallback using new Notifcation\n\t\t\t\tlet n = new Notification(title, opt);\n\t\t\t\tif (opt.duration) {\n\t\t\t\t\tsetTimeout(() => n.close(), opt.duration);\n\t\t\t\t}\n\t\t\t\t// Click callback\n\t\t\t\tn.onclick = (ev) => {\n\t\t\t\t\tev.target?.close();\n\t\t\t\t\topt.onClick?.(ev);\n\t\t\t\t};\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Toggles notifications between enabled and disabled.\n\t * @param {boolean} [enable] State to toggle to.\n\t * @param {boolean} [noRequest] Flag that prevents a request to be made or a dialog to be shown if permission isn't granted.\n\t * @returns {Promise} Promise that rejects if enabling notifications failed.\n\t */\n\ttoggle(enable, noRequest) {\n\t\tenable = typeof enable == 'boolean' ? enable : !this.model.enabled;\n\t\tif (this.model.enabled == enable) return Promise.resolve();\n\n\t\tif (!enable) {\n\t\t\tthis.permissionPromise = null;\n\t\t\treturn this._setEnabled(false, false);\n\t\t}\n\n\t\tlet promise = this._requestPermission(noRequest)\n\t\t\t.then(() => {\n\t\t\t\tif (this.permissionPromise == promise) {\n\t\t\t\t\tif (this._usePush()) {\n\t\t\t\t\t\treturn this._subscribeToPush()\n\t\t\t\t\t\t\t.then(pushSubscription => {\n\t\t\t\t\t\t\t\t// On successful subscribe to push, make sure\n\t\t\t\t\t\t\t\t// the promise hasn't changed. If not, set as\n\t\t\t\t\t\t\t\t// enabled and store the endpoint. Else,\n\t\t\t\t\t\t\t\t// unregister the endpoint again.\n\t\t\t\t\t\t\t\tif (this.permissionPromise == promise) {\n\t\t\t\t\t\t\t\t\tthis._setEnabled(true, true, pushSubscription.endpoint);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthis._unregisterPushSub(pushSubscription.endpoint);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.catch(err => {\n\t\t\t\t\t\t\t\tconsole.error(\"Error subscribing to push: \", err);\n\t\t\t\t\t\t\t\tthis.mode = 'local';\n\t\t\t\t\t\t\t\tthis._setEnabled(true, false);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\treturn this._setEnabled(true, false);\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch(err => {\n\t\t\t\tif (this.permissionPromise == promise) {\n\t\t\t\t\tif (!noRequest) {\n\t\t\t\t\t\tthis.module.confirm.open(null, {\n\t\t\t\t\t\t\ttitle: l10n.l('notify.notificationsDisabled', \"Notifications disabled\"),\n\t\t\t\t\t\t\tconfirm: l10n.l('confirm.ok', \"Okay\"),\n\t\t\t\t\t\t\tbody: new Html(err),\n\t\t\t\t\t\t\tcancel: null,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis._setEnabled(false, false);\n\t\t\t\treturn Promise.reject(err);\n\t\t\t})\n\t\t\t.finally(() => {\n\t\t\t\tif (this.permissionPromise == promise) {\n\t\t\t\t\tthis.permissionPromise = null;\n\t\t\t\t}\n\t\t\t});\n\n\t\tthis.permissionPromise = promise;\n\t\treturn promise;\n\t}\n\n\t/**\n\t * Adds a push notification click handler for a specific notification event.\n\t * If serviceWorker module isn't loaded, this is a non-op.\n\t * @param {string} event Event name. Eg. 'charFocus', 'newMail', 'newReport', etc.\n\t * @param {(params: any) => void} callback Callback function on click.\n\t */\n\taddNotificationHandler(event, callback) {\n\t\tlet serviceWorker = this.app.getModule('serviceWorker');\n\t\tif (serviceWorker) {\n\t\t\tserviceWorker.on(event, callback);\n\t\t}\n\t}\n\n\t/**\n\t * Removes a push notification click handler previously registered with\n\t * addNotificationHandler.\n\t * If serviceWorker module isn't loaded, this is a non-op.\n\t * @param {string} event Event name. Eg. 'charFocus', 'newMail', 'newReport', etc.\n\t * @param {(params: any) => void} callback Callback function on click.\n\t */\n\tremoveNotificationHandler(event, callback) {\n\t\tlet serviceWorker = this.app.getModule('serviceWorker');\n\t\tif (serviceWorker) {\n\t\t\tserviceWorker.off(event, callback);\n\t\t}\n\t}\n\n\t_loadSettings() {\n\t\tif (localStorage && this.player) {\n\t\t\tlet data = localStorage.getItem(notifyStoragePrefix + this.player.id);\n\t\t\tif (data) {\n\t\t\t\tlet o = JSON.parse(data);\n\t\t\t\t// Set notify settings with the priority order; localStorage, player settings, model default\n\t\t\t\tthis.model.set(notifySettingKeys\n\t\t\t\t\t.reduce((a, k) => ({\n\t\t\t\t\t\t...a,\n\t\t\t\t\t\t[k]: !!(o.hasOwnProperty(k)\n\t\t\t\t\t\t\t? o[k]\n\t\t\t\t\t\t\t// [TODO] Delete once player.props no longer contains notify preferences.\n\t\t\t\t\t\t\t: this.player.props.hasOwnProperty(k)\n\t\t\t\t\t\t\t\t? this.player.props[k]\n\t\t\t\t\t\t\t\t: this.model.props[k]\n\t\t\t\t\t\t),\n\t\t\t\t\t}), {}),\n\t\t\t\t);\n\t\t\t\tif (o.hasOwnProperty('enabled')) {\n\t\t\t\t\tthis.toggle(o.enabled, true);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t_onModelChange(change) {\n\t\tthis._saveSettings();\n\n\t\t// If notify settings are change, as we use push, updating push settings\n\t\tif (this.model.usePush && notifySettingKeys.filter(k => change.hasOwnProperty(k)).length) {\n\t\t\tthis._getServiceWorker()\n\t\t\t\t.then(registration => registration.pushManager.getSubscription())\n\t\t\t\t.then(pushSubscription => {\n\t\t\t\t\t// Assert we still use push\n\t\t\t\t\tif (this.model.usePush) {\n\t\t\t\t\t\t// Re-register to update notification settings\n\t\t\t\t\t\treturn this._registerPushSub(pushSubscription);\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.catch(err => console.error(\"Error updating pushSub settings: \", err));\n\n\t\t}\n\t}\n\n\t_onVisibilityChange() {\n\t\tif (!this.alwaysNotify && isVisible()) {\n\t\t\tthis.app.getModule('serviceWorker')?.closeNotification(this._userTag());\n\t\t}\n\t}\n\n\t_userTag() {\n\t\treturn this.player ? `user_${this.player.id}` : '';\n\t}\n\n\t_saveSettings() {\n\t\tif (localStorage && this.player) {\n\t\t\tlocalStorage.setItem(notifyStoragePrefix + this.player.id, JSON.stringify(this.model.props));\n\t\t}\n\t}\n\n\t_setEnabled(enabled, usePush, endpoint) {\n\t\tif (enabled) {\n\t\t\tconsole.log(\"[Notify] Enabled notification: \" + (usePush ? \"push\" : \"local\"));\n\t\t}\n\t\tthis._setEndpoint(endpoint);\n\t\treturn this.model.set({ enabled, usePush });\n\t}\n\n\t// Stores the endpoint in the local storage. If another endpoint exists\n\t// there, it unregisters it.\n\t_setEndpoint(endpoint) {\n\t\tthis.endpoint = endpoint;\n\t\tif (localStorage && this.player) {\n\t\t\tendpoint = endpoint || null;\n\t\t\tlet key = notifyStoragePrefix + this.player.id + '.endpoint';\n\t\t\tlet oldEndpoint = localStorage.getItem(key) || null;\n\t\t\tif (endpoint === oldEndpoint) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._unregisterPushSub(oldEndpoint);\n\t\t\tif (endpoint) {\n\t\t\t\tlocalStorage.setItem(key, endpoint);\n\t\t\t} else {\n\t\t\t\tlocalStorage.removeItem(key);\n\t\t\t}\n\t\t}\n\t}\n\n\t_requestPermission(noRequest) {\n\t\t// Test if browser supports Notification\n\t\tif (!('Notification' in window)) {\n\t\t\treturn Promise.reject(l10n.l('notify.notSupported', \"<p>Notifications are not supported by this browser.</p>\"));\n\t\t}\n\n\t\tif (Notification.permission && Notification.permission == 'granted') {\n\t\t\treturn Promise.resolve();\n\t\t}\n\n\t\tif (noRequest) {\n\t\t\treturn Promise.reject(l10n.l('notify.notEnabled', \"<p>Notifications are not enabled.</p>\"));\n\t\t}\n\n\t\t// Safari uses a callback instead of Promises.\n\t\tlet promise;\n\t\ttry {\n\t\t\tpromise = Notification.requestPermission();\n\t\t} catch (e) {\n\t\t\tpromise = new Promise(resolve => Notification.requestPermission(resolve));\n\t\t}\n\n\t\treturn promise.then(result => {\n\t\t\tif (result === 'default') {\n\t\t\t\treturn Promise.reject(l10n.l('notify.mustAllowPermission', \"<p>You must grant permission for using system notifications.</p>\"));\n\t\t\t}\n\t\t\tif (result === 'denied') {\n\t\t\t\treturn Promise.reject(l10n.l('notify.permissionDenied', \"<p>Permission to use notifications was denied.</p><p>To activate it, you must unblock notifications for this site in your browser.</p>\"));\n\t\t\t}\n\t\t});\n\t}\n\n\t_getServiceWorker() {\n\t\treturn (this.app.getModule('serviceWorker')?.getPromise() || Promise.reject(\"ServiceWorker module not loaded.\"));\n\t}\n\n\t_subscribeToPush() {\n\t\treturn this._getServiceWorker()\n\t\t\t.then(registration => {\n\t\t\t\treturn this.module.api.get('core.info').then(coreInfo => {\n\t\t\t\t\treturn registration.pushManager.getSubscription()\n\t\t\t\t\t\t.then(pushSubscription => {\n\t\t\t\t\t\t\t// If we have a pushSubscription using a different public key, we first need to unsubscribe it.\n\t\t\t\t\t\t\tif (pushSubscription && base64.fromArrayBuffer(pushSubscription.options.applicationServerKey, true, true) != coreInfo.vapidPublicKey) {\n\t\t\t\t\t\t\t\treturn this._unsubscribeToPush(pushSubscription);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.then(() => {\n\t\t\t\t\t\t\treturn registration.pushManager.subscribe({\n\t\t\t\t\t\t\t\tuserVisibleOnly: true,\n\t\t\t\t\t\t\t\tapplicationServerKey: coreInfo.vapidPublicKey,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t})\n\t\t\t.then((pushSubscription) => {\n\t\t\t\treturn this._registerPushSub(pushSubscription)\n\t\t\t\t\t.then(() => pushSubscription);\n\t\t\t});\n\t}\n\n\t_registerPushSub(pushSubscription) {\n\t\treturn this.player.call('registerPushSub', {\n\t\t\tendpoint: pushSubscription.endpoint,\n\t\t\tp256dh: base64.fromArrayBuffer(pushSubscription.getKey(\"p256dh\")),\n\t\t\tauth: base64.fromArrayBuffer(pushSubscription.getKey(\"auth\")),\n\t\t\t...this._getNotifySettings(),\n\t\t});\n\t}\n\n\t_getNotifySettings() {\n\t\treturn notifySettingKeys.reduce((a, k) => ({ ...a, [k]: this.model.props[k] }), {});\n\t}\n\n\t_unsubscribeToPush(pushSubscription) {\n\t\tlet endpoint = pushSubscription.endpoint;\n\t\treturn pushSubscription.unsubscribe()\n\t\t\t.catch(err => console.error(\"Error unsubscribing to pushSubscription \" + endpoint, err))\n\t\t\t.then(() => this._unregisterPushSub(endpoint));\n\t}\n\n\t/**\n\t * Unregister the pushSub from the core service for the specific\n\t * pushSubscription endpoint. It does not attempt to unsubscribe to the\n\t * pushSubscription. Any error is caught.\n\t * @param {string} endpoint Endpoint string.\n\t */\n\t_unregisterPushSub(endpoint) {\n\t\treturn this.player.call('unregisterPushSub', { endpoint })\n\t\t\t.catch(err => console.error(\"Error unregistering pushSub \" + endpoint + \": \", err));\n\t}\n\n\t/**\n\t * Tests if the Push API should be used instead of just using WebSocket\n\t * triggered notifications. If this.mode is 'auto', then push will be used\n\t * if the app is running in display-mode: standalone.\n\t * @returns {Boolean}\n\t */\n\t_usePush() {\n\t\treturn this.mode == 'push' || (this.mode == 'auto' && window.matchMedia('(display-mode: standalone)').matches);\n\t}\n\n\tdispose() {\n\t\tdocument.removeEventListener('visibilitychange', this._onVisibilityChange);\n\t\tthis.model.off('change', this._onModelChange);\n\t}\n}\n\nexport default Notify;\n","import { Elem } from 'modapp-base-component';\nimport { ModelComponent } from 'modapp-resource-component';\nimport Collapser from 'components/Collapser';\nimport LabelToggleBox from 'components/LabelToggleBox';\nimport l10n from 'modapp-l10n';\n\nclass NotifySettingsComponent {\n\tconstructor(module) {\n\t\tthis.module = module;\n\t}\n\n\trender(el) {\n\t\tthis.elem = new Elem(n => n.elem('div', [\n\t\t\tn.component(new ModelComponent(\n\t\t\t\tthis.module.notify.getModel(),\n\t\t\t\tnew LabelToggleBox(l10n.l('notify.enableNotifications', \"Enable notifications\"), false, {\n\t\t\t\t\tclassName: 'common--formmargin',\n\t\t\t\t\tonChange: (v, c) => this.module.notify.toggle(v).catch(err => {\n\t\t\t\t\t\tc.setValue(this.module.notify.getModel().enabled, false);\n\t\t\t\t\t}),\n\t\t\t\t\tpopupTip: l10n.l('notify.enableNotificationsInfo', \"Allow system notifications to show on certain events.\"),\n\t\t\t\t\tpopupTipClassName: 'popuptip--width-s',\n\t\t\t\t}),\n\t\t\t\t(m, c) => c.setValue(m.enabled, false),\n\t\t\t)),\n\t\t\tn.component(new ModelComponent(\n\t\t\t\tthis.module.notify.getModel(),\n\t\t\t\tnew Collapser(),\n\t\t\t\t(model, c, change) => {\n\t\t\t\t\tif (change && !change.hasOwnProperty('enabled')) return;\n\t\t\t\t\tc.setComponent(model.enabled\n\t\t\t\t\t\t? new Elem(n => n.elem('div', { className: 'common--formsubsection' }, [\n\t\t\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\t\t\tmodel,\n\t\t\t\t\t\t\t\tnew LabelToggleBox(l10n.l('notify.notifyOnWakeup', \"Notify on any wakeup\"), false, {\n\t\t\t\t\t\t\t\t\tclassName: 'common--formmargin small',\n\t\t\t\t\t\t\t\t\tonChange: (v, c) => model.set({ notifyOnWakeup: v }),\n\t\t\t\t\t\t\t\t\tpopupTip: l10n.l('notify.notifyOnWakeupInfo', \"Notify whenever any character wakes up.\"),\n\t\t\t\t\t\t\t\t\tpopupTipClassName: 'popuptip--width-s',\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t(m, c) => c.setValue(m.notifyOnWakeup, false),\n\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\t\t\tmodel,\n\t\t\t\t\t\t\t\tnew LabelToggleBox(l10n.l('notify.notifyOnWatched', \"Notify on watched\"), false, {\n\t\t\t\t\t\t\t\t\tclassName: 'common--formmargin small',\n\t\t\t\t\t\t\t\t\tonChange: (v, c) => model.set({ notifyOnWatched: v }),\n\t\t\t\t\t\t\t\t\tpopupTip: l10n.l('notify.notifyOnWatchedInfo', \"Notify whenever a watched character wakes up. Limited support on mobile devices.\"),\n\t\t\t\t\t\t\t\t\tpopupTipClassName: 'popuptip--width-s',\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t(m, c) => {\n\t\t\t\t\t\t\t\t\tc.setDisabled(m.notifyOnWakeup);\n\t\t\t\t\t\t\t\t\tc.setValue(m.notifyOnWakeup || m.notifyOnWatched, false);\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\t\t\tmodel,\n\t\t\t\t\t\t\t\tnew LabelToggleBox(l10n.l('notify.notifyOnMatched', \"Notify on matched\"), false, {\n\t\t\t\t\t\t\t\t\tclassName: 'common--formmargin small',\n\t\t\t\t\t\t\t\t\tonChange: (v, c) => model.set({ notifyOnMatched: v }),\n\t\t\t\t\t\t\t\t\tpopupTip: l10n.l('notify.notifyOnMatchedInfo', \"Notify whenever a character wakes up that matches current filter. Limited support on mobile devices.\"),\n\t\t\t\t\t\t\t\t\tpopupTipClassName: 'popuptip--width-s',\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t(m, c) => {\n\t\t\t\t\t\t\t\t\tc.setDisabled(m.notifyOnWakeup);\n\t\t\t\t\t\t\t\t\tc.setValue(m.notifyOnWakeup || m.notifyOnMatched, false);\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\t\t\tmodel,\n\t\t\t\t\t\t\t\tnew LabelToggleBox(l10n.l('notify.notifyOnEvent', \"Notify when targeted\"), false, {\n\t\t\t\t\t\t\t\t\tclassName: 'common--formmargin small',\n\t\t\t\t\t\t\t\t\tonChange: (v, c) => model.set({ notifyOnEvent: v }),\n\t\t\t\t\t\t\t\t\tpopupTip: l10n.l('notify.notifyOnEventInfo', \"Notify on events targeting your character. Eg. whispers, summons, etc.\"),\n\t\t\t\t\t\t\t\t\tpopupTipClassName: 'popuptip--width-s',\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t(m, c) => c.setValue(m.notifyOnEvent, false),\n\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\t\t\tmodel,\n\t\t\t\t\t\t\t\tnew LabelToggleBox(l10n.l('notify.notifyOnMention', \"Notify when mentioned\"), false, {\n\t\t\t\t\t\t\t\t\tclassName: 'common--formmargin small',\n\t\t\t\t\t\t\t\t\tonChange: (v, c) => model.set({ notifyOnMention: v }),\n\t\t\t\t\t\t\t\t\tpopupTip: l10n.l('notify.notifyOnMentionInfo', \"Notify whenever someone mentions the name of your character.\"),\n\t\t\t\t\t\t\t\t\tpopupTipClassName: 'popuptip--width-s',\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t(m, c) => c.setValue(m.notifyOnMention, false),\n\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\t\t\tmodel,\n\t\t\t\t\t\t\t\tnew LabelToggleBox(l10n.l('notify.notifyOnRequests', \"Notify on mail & requests\"), false, {\n\t\t\t\t\t\t\t\t\tclassName: 'common--formmargin small',\n\t\t\t\t\t\t\t\t\tonChange: (v, c) => model.set({ notifyOnRequests: v }),\n\t\t\t\t\t\t\t\t\tpopupTip: l10n.l('notify.notifyOnRequestsInfo', \"Notify on new mail, requests, or other incoming events that may happen even if your character is asleep.\"),\n\t\t\t\t\t\t\t\t\tpopupTipClassName: 'popuptip--width-s',\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t(m, c) => c.setValue(m.notifyOnRequests, false),\n\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t]))\n\t\t\t\t\t\t: null,\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t)),\n\t\t]));\n\t\tthis.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n}\n\nexport default NotifySettingsComponent;\n","import NotifySettingsComponent from './NotifySettingsComponent';\n\n/**\n * NotifySettings adds a settings tool for Notify to PagePlayerSettings.\n */\nclass NotifySettings {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'notify',\n\t\t\t'pagePlayerSettings',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\n\t\tthis.module.pagePlayerSettings.addTool({\n\t\t\tid: 'notify',\n\t\t\tsortOrder: 10,\n\t\t\tcomponentFactory: (user, player, state) => new NotifySettingsComponent(this.module),\n\t\t});\n\t}\n\n\tdispose() {\n\t\tthis.module.pagePlayerSettings.removeTool('notify');\n\t}\n}\n\nexport default NotifySettings;\n","import { Elem, Txt } from 'modapp-base-component';\nimport { ModelComponent } from 'modapp-resource-component';\nimport Collapser from 'components/Collapser';\nimport Fader from 'components/Fader';\n\n\nfunction getLocationType(location) {\n\treturn location.type || (location.props.hasOwnProperty('area')\n\t\t? location.isInstance\n\t\t\t? 'instanceRoom'\n\t\t\t: 'room'\n\t\t: location.inInstance\n\t\t\t? 'instanceArea'\n\t\t\t: 'area'\n\t);\n}\n\nconst locationTypeClass = {\n\t'area': 'badge--strong',\n\t'instanceRoom': 'badge--highlight',\n};\n\nclass PageAreaLocation {\n\tconstructor(module, location, inLocations, selectedModel, click) {\n\t\tthis.module = module;\n\t\tthis.location = location;\n\t\tthis.inLocations = inLocations;\n\t\tthis.selectedModel = selectedModel;\n\t\tthis.click = click;\n\t}\n\n\trender(el) {\n\t\tlet countComponent = new Txt('', {\n\t\t\ttagName: 'div',\n\t\t\tclassName: 'badge--text',\n\t\t\tduration: 0,\n\t\t});\n\t\tlet nameComponent = new Txt('', { tagName: 'div' });\n\t\tlet component = new Elem(n => n.elem('div', { className: 'pagearea-location' }, [\n\t\t\tn.elem('cont', 'div', { className: 'pagearea-location--cont' }, [\n\t\t\t\tn.elem('badge', 'div', {\n\t\t\t\t\tevents: {\n\t\t\t\t\t\tclick: () => this.click(this.location),\n\t\t\t\t\t},\n\t\t\t\t}, [\n\t\t\t\t\tn.elem('div', { className: 'badge--select' }, [\n\t\t\t\t\t\tn.elem('div', { className: 'badge--info' }, [\n\t\t\t\t\t\t\tn.component(nameComponent),\n\t\t\t\t\t\t]),\n\t\t\t\t\t\tn.elem('div', { className: 'badge--counter' }, [\n\t\t\t\t\t\t\tn.component(countComponent),\n\t\t\t\t\t\t]),\n\t\t\t\t\t]),\n\t\t\t\t\tn.component('content', new Collapser(null)),\n\t\t\t\t]),\n\t\t\t]),\n\t\t]));\n\t\tthis.elem = new ModelComponent(\n\t\t\tthis.selectedModel,\n\t\t\tnew ModelComponent(\n\t\t\t\tthis.location,\n\t\t\t\tnew ModelComponent(\n\t\t\t\t\tthis.inLocations,\n\t\t\t\t\tcomponent,\n\t\t\t\t\t(m, c, change) => {\n\t\t\t\t\t\tcomponent[this._inLocation() ? 'addNodeClass' : 'removeNodeClass']('cont', 'inlocation');\n\t\t\t\t\t\tthis._updateCount(countComponent);\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t\t(m, c) => {\n\t\t\t\t\tthis._updateCount(countComponent);\n\t\t\t\t\tcomponent.setNodeClassName('badge', 'badge btn' + (m.private ? ' pagearea-location--private' : ''));\n\t\t\t\t\tnameComponent.setText(m.name),\n\t\t\t\t\tnameComponent.setClassName((locationTypeClass[getLocationType(m)] || 'badge--text') + ' badge--nowrap');\n\t\t\t\t},\n\t\t\t),\n\t\t\t(m, c) => {\n\t\t\t\tlet selected = this.location.id == m.selected;\n\t\t\t\tcomponent[selected ? 'addClass' : 'removeClass']('selected');\n\t\t\t\tcomponent.getNode('content').setComponent(selected && this.location.hasOwnProperty('shortDesc')\n\t\t\t\t\t? new ModelComponent(this.location, new Fader(null, { className: 'badge--select' }), (m, c) => c.setComponent(m.shortDesc\n\t\t\t\t\t\t? new Txt(m.shortDesc, { className: 'pagearea-location--content badge--margin badge--text badge--info' })\n\t\t\t\t\t\t: null,\n\t\t\t\t\t))\n\t\t\t\t\t: null,\n\t\t\t\t);\n\t\t\t},\n\t\t);\n\t\treturn this.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n\n\t_updateCount(c) {\n\t\tc.setText(Math.max(this.location.pop, this.inLocations.props[this.location.id] || 0));\n\t}\n\n\t_inLocation() {\n\t\treturn this.inLocations.props.hasOwnProperty(this.location.id);\n\t}\n\n}\n\nexport default PageAreaLocation;\n","import { Elem } from 'modapp-base-component';\nimport { ModelComponent, ModelFragment } from 'modapp-resource-component';\nimport { Model } from 'modapp-resource';\nimport Img from 'components/Img';\nimport FAIcon from 'components/FAIcon';\n// import ImgModal from 'classes/ImgModal';\nimport objectDefault from 'utils/objectDefault';\nimport nextFrame from 'utils/nextFrame';\n\n/**\n * PageAreaImage renders an area map image.\n */\nclass PageAreaImage {\n\tconstructor(module, ctrl, areaId, image, children, selectedModel, state, opt) {\n\t\topt = opt || {};\n\t\tthis.module = module;\n\t\tthis.ctrl = ctrl;\n\t\tthis.areaId = areaId;\n\t\tthis.image = image;\n\t\tthis.children = children;\n\t\tthis.selectedModel = selectedModel;\n\t\tthis.vw = opt.vw || 286;\n\t\tthis.vh = opt.vh || 286;\n\t\tthis.state = objectDefault(state, {\n\t\t\tfocus: 'current',\n\t\t\tscale: Math.max(0.5, this.vw / this.image.width, this.vh / this.image.height),\n\t\t\tx: this.image.width / 2,\n\t\t\ty: this.image.height / 2,\n\t\t});\n\t\tthis.className = opt.className ? ' ' + opt.className : '';\n\t\tthis.size = opt.size || '';\n\n\t\t// Bind callback\n\t\tthis._endAction = this._endAction.bind(this);\n\t\tthis._onMove = this._onMove.bind(this);\n\t\tthis._onCtrlChange = this._onCtrlChange.bind(this);\n\t\tthis._onSelectedChange = this._onSelectedChange.bind(this);\n\t}\n\n\trender(el) {\n\t\tthis.model = new Model({\n\t\t\tdata: {\n\t\t\t\tcurrent: this._getLocation(),\n\t\t\t\tselected: this._getSelected(),\n\t\t\t\tfocus: this.state.focus,\n\t\t\t},\n\t\t\teventBus: this.module.self.app.eventBus,\n\t\t});\n\t\tthis._listen(true);\n\n\t\tlet btnSize = this.size == 'small' ? ' tiny' : ' small';\n\n\t\tthis.elem = new ModelComponent(\n\t\t\tthis.model,\n\t\t\tnew ModelComponent(\n\t\t\t\tnull,\n\t\t\t\tnew Elem(n => n.elem('div', {\n\t\t\t\t\tclassName: 'pagearea-image' + this.className + (this.size ? ' ' + this.size : ''),\n\t\t\t\t\tattributes: {\n\t\t\t\t\t\tstyle: 'width:' + this.vw + 'px; height:' + this.vh + 'px;',\n\t\t\t\t\t},\n\t\t\t\t}, [\n\t\t\t\t\tn.elem('body', 'div', { className: 'pagearea-image--body transition' }, [\n\t\t\t\t\t\tn.component('img', new Img(this.image.href, { className: 'pagearea-image--img', events: {\n\t\t\t\t\t\t\t// click: () => new ImgModal(this.image.href).open()\n\t\t\t\t\t\t\tmousedown: (c, ev) => {\n\t\t\t\t\t\t\t\tthis._grab(ev.clientX, ev.clientY);\n\t\t\t\t\t\t\t\tev.stopPropagation();\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdragstart: (c, ev) => ev.preventDefault(),\n\t\t\t\t\t\t\tdrop: (c, ev) => ev.preventDefault(),\n\t\t\t\t\t\t\twheel: (c, ev) => {\n\t\t\t\t\t\t\t\tthis._zoom(0.98 ** (ev.deltaY / 10));\n\t\t\t\t\t\t\t\tev.preventDefault();\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}})),\n\t\t\t\t\t\tn.component(new ModelFragment(\n\t\t\t\t\t\t\tthis.children,\n\t\t\t\t\t\t\t(k, v) => new ModelComponent(\n\t\t\t\t\t\t\t\tthis.model,\n\t\t\t\t\t\t\t\tnew ModelComponent(\n\t\t\t\t\t\t\t\t\tv,\n\t\t\t\t\t\t\t\t\tnew Elem(n => n.elem('div', { className: 'pagearea-image--location fade' })),\n\t\t\t\t\t\t\t\t\t(m, c) => {\n\t\t\t\t\t\t\t\t\t\tc.setStyle('left', String(m.mapX) + 'px');\n\t\t\t\t\t\t\t\t\t\tc.setStyle('top', String(m.mapY) + 'px');\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t(m, c) => {\n\t\t\t\t\t\t\t\t\tc.getComponent()[(m.current && m.current.id) === v.id ? 'addClass' : 'removeClass']('current');\n\t\t\t\t\t\t\t\t\tc.getComponent()[(m.selected && m.selected.id) === v.id ? 'addClass' : 'removeClass']('selected');\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tonAdd: (c, el) => {\n\t\t\t\t\t\t\t\t\tlet e = c.getComponent().getComponent();\n\t\t\t\t\t\t\t\t\te.addClass('hide');\n\t\t\t\t\t\t\t\t\tc.render(el);\n\t\t\t\t\t\t\t\t\tnextFrame(() => e.removeClass('hide'));\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tonRemove: (c, unrender) => {\n\t\t\t\t\t\t\t\t\tlet e = c.getComponent().getComponent();\n\t\t\t\t\t\t\t\t\te.addClass('hide');\n\t\t\t\t\t\t\t\t\tsetTimeout(unrender, 500);\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t)),\n\t\t\t\t\t]),\n\t\t\t\t\tn.elem('button', { className: 'pagearea-image--zoomout pagearea-image--btn iconbtn' + btnSize, events: {\n\t\t\t\t\t\tmousedown: (c, ev) => {\n\t\t\t\t\t\t\tthis._clickZoom(0.98);\n\t\t\t\t\t\t\tev.stopPropagation();\n\t\t\t\t\t\t},\n\t\t\t\t\t}}, [\n\t\t\t\t\t\tn.component(new FAIcon('search-minus')),\n\t\t\t\t\t]),\n\t\t\t\t\tn.elem('button', { className: 'pagearea-image--zoomin pagearea-image--btn iconbtn' + btnSize, events: {\n\t\t\t\t\t\tmousedown: (c, ev) => {\n\t\t\t\t\t\t\tthis._clickZoom(1 / 0.98);\n\t\t\t\t\t\t\tev.stopPropagation();\n\t\t\t\t\t\t},\n\t\t\t\t\t}}, [\n\t\t\t\t\t\tn.component(new FAIcon('search-plus')),\n\t\t\t\t\t]),\n\t\t\t\t\tn.elem('button', { className: 'pagearea-image--center pagearea-image--btn iconbtn' + btnSize, events: {\n\t\t\t\t\t\tclick: (c, ev) => {\n\t\t\t\t\t\t\tthis._center();\n\t\t\t\t\t\t\tev.stopPropagation();\n\t\t\t\t\t\t},\n\t\t\t\t\t}}, [\n\t\t\t\t\t\tn.component(new FAIcon('dot-circle-o')),\n\t\t\t\t\t]),\n\t\t\t\t])),\n\t\t\t\t(m, c, change) => {\n\t\t\t\t\t// Center on current location if needed\n\t\t\t\t\tif (m && (!change || change.hasOwnProperty('mapX') || change.hasOwnProperty('mapY'))) {\n\t\t\t\t\t\tthis.state.x = m.mapX;\n\t\t\t\t\t\tthis.state.y = m.mapY;\n\t\t\t\t\t\tthis._setTransform();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t),\n\t\t\t(m, c) => c.setModel(m.focus == 'current'\n\t\t\t\t? m.current\n\t\t\t\t: m.focus == 'selected'\n\t\t\t\t\t? m.selected\n\t\t\t\t\t: null,\n\t\t\t),\n\t\t);\n\n\t\tthis._setTransform();\n\t\treturn this.elem.render(el);\n\t}\n\n\t_listen(on) {\n\t\tlet cb = on ? 'on' : 'off';\n\t\tthis.ctrl[cb]('change', this._onCtrlChange);\n\t\tthis.selectedModel[cb]('change', this._onSelectedChange);\n\t}\n\n\t_onCtrlChange(change) {\n\t\tif (!this.model) return;\n\n\t\t// Set current\n\t\tif (change.hasOwnProperty('inRoom')) {\n\t\t\tlet current = this._getLocation();\n\t\t\t// Every time we change room, we focus on current room\n\t\t\tthis.model.set({ current, focus: current ? 'current' : null });\n\t\t}\n\t}\n\n\t_getSelected() {\n\t\tlet s = this.selectedModel.selected;\n\t\treturn (s && this.children.props[s]) || null;\n\t}\n\n\t_onSelectedChange(change) {\n\t\tif (change && !change.hasOwnProperty('selected')) return;\n\n\t\tlet selected = this._getSelected();\n\n\t\tthis._setModel({\n\t\t\tselected,\n\t\t\tfocus: selected\n\t\t\t\t? 'selected'\n\t\t\t\t: this.state.focus == 'selected'\n\t\t\t\t\t? null\n\t\t\t\t\t: this.state.focus,\n\t\t});\n\t\treturn this;\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis._listen(false);\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t\tthis._endAction();\n\t}\n\n\t_setModel(o) {\n\t\tif (this.model) {\n\t\t\tthis.model.set(o);\n\t\t}\n\t\tif (o.hasOwnProperty('focus')) {\n\t\t\tthis.state.focus = o.focus;\n\t\t}\n\t}\n\n\t_setTransform() {\n\t\tif (!this.elem) return;\n\n\t\tlet st = this.state;\n\t\tlet vw = this.vw / st.scale;\n\t\tlet vh = this.vh / st.scale;\n\t\tlet x = st.x - (vw / 2);\n\t\tlet y = st.y - (vh / 2);\n\t\tlet w = this.image.width;\n\t\tlet h = this.image.height;\n\t\tif (x < 0) {\n\t\t\tx = 0;\n\t\t} else if (x > (w - vw)) {\n\t\t\tx = w - vw;\n\t\t}\n\n\t\tif (y < 0) {\n\t\t\ty = 0;\n\t\t} else if (y > (h - vh)) {\n\t\t\ty = h - vh;\n\t\t}\n\n\t\tlet s = 'scale(' + st.scale + ') translateX(-' + x + 'px) translateY(-' + y + 'px)';\n\t\tthis.elem.getComponent().getComponent().setNodeStyle('body', 'transform', s);\n\t}\n\n\t_clickZoom(m) {\n\t\tif (this.action) return;\n\n\t\tthis.action = 'zoom';\n\t\tdocument.addEventListener('mouseup', this._endAction);\n\t\tthis._onZoom(m);\n\t}\n\n\t_onZoom(m) {\n\t\tif (this.action == 'zoom') {\n\t\t\tthis._zoom(m);\n\t\t\trequestAnimationFrame(() => this._onZoom(m));\n\t\t}\n\t}\n\n\t_endAction() {\n\t\tswitch (this.action) {\n\t\t\tcase 'zoom':\n\t\t\t\tdocument.removeEventListener('mouseup', this._endAction);\n\t\t\t\tbreak;\n\t\t\tcase 'grab':\n\t\t\t\tif (this.elem) {\n\t\t\t\t\tthis.elem.getComponent().getComponent().removeClass('grabbed');\n\t\t\t\t}\n\t\t\t\tthis.offset = null;\n\t\t\t\tdocument.removeEventListener('mousemove', this._onMove);\n\t\t\t\tdocument.removeEventListener('mouseup', this._endAction);\n\t\t\t\tbreak;\n\t\t}\n\t\tthis.action = null;\n\t}\n\n\t_zoom(m) {\n\t\tlet scale = this.state.scale * m;\n\t\tif (scale > 1) {\n\t\t\tscale = 1;\n\t\t} else if (scale < 0.125) {\n\t\t\tscale = 0.125;\n\t\t}\n\t\tif (scale < (this.vw / this.image.width)) {\n\t\t\tscale = this.vw / this.image.width;\n\t\t}\n\t\tif (scale < (this.vh / this.image.height)) {\n\t\t\tscale = this.vh / this.image.height;\n\t\t}\n\n\t\tthis.state.scale = scale;\n\n\t\tthis._setTransform();\n\t}\n\n\t_center() {\n\t\tthis._setModel({ focus: 'current' });\n\t}\n\n\t_getLocation() {\n\t\tlet location = this.ctrl.inRoom;\n\t\tlet area = location.area;\n\t\twhile (area) {\n\t\t\tif (area.id == this.areaId) {\n\t\t\t\treturn location;\n\t\t\t}\n\t\t\tlocation = area;\n\t\t\tarea = area.parent;\n\t\t}\n\t\treturn null;\n\t}\n\n\t_grab(x, y) {\n\t\tif (this.action || !this.elem) return;\n\n\t\tthis.action = 'grab';\n\t\tthis.offset = { x, y };\n\t\tdocument.addEventListener('mouseup', this._endAction);\n\t\tdocument.addEventListener('mousemove', this._onMove);\n\n\t\tthis.elem.getComponent().getComponent().addClass('grabbed');\n\t}\n\n\t_onMove(ev) {\n\t\tlet x = ev.clientX;\n\t\tlet y = ev.clientY;\n\t\tlet st = this.state;\n\t\tlet sx = st.x - (x - this.offset.x) / st.scale;\n\t\tlet sy = st.y - (y - this.offset.y) / st.scale;\n\t\tlet vw = this.vw / st.scale / 2;\n\t\tlet vh = this.vh / st.scale / 2;\n\t\tif (sx < vw) {\n\t\t\tsx = vw;\n\t\t} else if (sx > (this.image.width - vw)) {\n\t\t\tsx = this.image.width - vw;\n\t\t}\n\t\tif (sy < vh) {\n\t\t\tsy = vh;\n\t\t} else if (sy > (this.image.height - vh)) {\n\t\t\tsy = this.image.height - vh;\n\t\t}\n\t\tst.x = sx;\n\t\tst.y = sy;\n\t\tthis.offset = { x, y };\n\t\tthis._setModel({ focus: null });\n\t\tthis._setTransform();\n\t}\n}\n\nexport default PageAreaImage;\n","import { Context, Elem, Txt } from 'modapp-base-component';\nimport { ModelComponent, CollectionList, CollectionComponent } from 'modapp-resource-component';\nimport { Model, ModelToCollection } from 'modapp-resource';\nimport l10n from 'modapp-l10n';\nimport Collapser from 'components/Collapser';\nimport Fader from 'components/Fader';\nimport NameSection from 'components/NameSection';\nimport PanelSection from 'components/PanelSection';\nimport FormatTxt from 'components/FormatTxt';\nimport AreaChildrenModel from 'classes/AreaChildrenModel';\nimport listenResource, { relistenResource } from 'utils/listenResource';\nimport PageAreaLocation from './PageAreaLocation';\nimport PageAreaImage from './PageAreaImage';\n\n/**\n * PageAreaComponent renders an area page.\n */\nclass PageAreaComponent {\n\tconstructor(module, ctrl, area, state, close) {\n\t\tstate.changes = state.changes || {};\n\n\t\tthis.module = module;\n\t\tthis.ctrl = ctrl;\n\t\tthis.area = area;\n\t\tthis.state = state;\n\t\tthis.close = close;\n\n\t\tthis.areaState = this.state['area_' + area.id] || {};\n\t\tthis.state['area_' + area.id] = this.areaState;\n\t\tthis.areaState.about = this.areaState.about || {};\n\t\tthis.areaState.rules = this.areaState.rules || {};\n\n\t\t// Bind callbacks\n\t\tthis._onLocationClick = this._onLocationClick.bind(this);\n\t\tthis._onLocationsChange = this._onLocationsChange.bind(this);\n\t\tthis.listeners = null;\n\t}\n\n\trender(el) {\n\t\tthis.children = new AreaChildrenModel(this.ctrl, this.area, { eventBus: this.module.self.app.eventBus });\n\t\tthis.model = new Model({ data: {\n\t\t\tselected: this.state.selected || null,\n\t\t}, eventBus: this.module.self.app.eventBus });\n\t\tthis.inLocations = new Model({ data: this._getAndListenInLocations(), eventBus: this.module.self.app.eventBus });\n\n\t\tlet imgFader = new Fader(null, { className: 'pagearea--image' });\n\t\tlet about = new PanelSection(\n\t\t\tl10n.l('pageArea.about', \"About\"),\n\t\t\tnew ModelComponent(\n\t\t\t\tthis.area,\n\t\t\t\tnew FormatTxt(\"\", { className: 'common--desc-size', state: this.areaState.about }),\n\t\t\t\t(m, c) => c.setFormatText(m.about),\n\t\t\t),\n\t\t\t{\n\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\topen: this.state.aboutOpen,\n\t\t\t\tonToggle: (c, v) => this.state.aboutOpen = v,\n\t\t\t},\n\t\t);\n\t\tlet rules = new PanelSection(\n\t\t\tl10n.l('pageArea.rules', \"Rules\"),\n\t\t\tnew ModelComponent(\n\t\t\t\tthis.area,\n\t\t\t\tnew FormatTxt(\"\", { className: 'common--desc-size', state: this.areaState.rules }),\n\t\t\t\t(m, c) => c.setFormatText(m.rules),\n\t\t\t),\n\t\t\t{\n\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\topen: this.state.rulesOpen,\n\t\t\t\tonToggle: (c, v) => this.state.rulesOpen = v,\n\t\t\t},\n\t\t);\n\n\t\tthis.elem = new Elem(n => n.elem('div', { className: 'pagearea' }, [\n\t\t\tn.component(new ModelComponent(\n\t\t\t\tthis.area,\n\t\t\t\tnew Context(\n\t\t\t\t\t() => new ModelToCollection(this.module.self.getTools(), {\n\t\t\t\t\t\tfilter: (k, v) => (v.type || 'area') == 'area' && (v.filter ? v.filter(this.ctrl, this.area, this._canEdit()) : true),\n\t\t\t\t\t\teventBus: this.module.self.eventBus,\n\t\t\t\t\t}),\n\t\t\t\t\ttools => tools.dispose(),\n\t\t\t\t\ttools => new CollectionComponent(\n\t\t\t\t\t\ttools,\n\t\t\t\t\t\tnew Collapser(),\n\t\t\t\t\t\t(col, c, ev) => {\n\t\t\t\t\t\t\t// Collapse if we have no tools to show\n\t\t\t\t\t\t\tif (!col.length) {\n\t\t\t\t\t\t\t\tc.setComponent(null);\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (!ev || (col.length == 1 && ev.event == 'add')) {\n\t\t\t\t\t\t\t\tc.setComponent(new CollectionList(\n\t\t\t\t\t\t\t\t\ttools,\n\t\t\t\t\t\t\t\t\tt => t.componentFactory(this.ctrl, this.area),\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tclassName: 'pagearea--tools',\n\t\t\t\t\t\t\t\t\t\tsubClassName: t => t.className || null,\n\t\t\t\t\t\t\t\t\t\thorizontal: true,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t\t(m, c, change) => {\n\t\t\t\t\t// Reset filtering of tools is ownership of the area changes.\n\t\t\t\t\tif (change && change.hasOwnProperty('owner')) {\n\t\t\t\t\t\tc.getContext().refresh();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t)),\n\t\t\tn.component(new ModelComponent(\n\t\t\t\tthis.area,\n\t\t\t\tnew NameSection('', null, {\n\t\t\t\t\topen: this.state.areaImageOpen,\n\t\t\t\t\tonToggle: (c, v) => this.state.areaImageOpen = v,\n\t\t\t\t}),\n\t\t\t\t(m, c, change) => {\n\t\t\t\t\tif (!change || change.hasOwnProperty('image')) {\n\t\t\t\t\t\tif (m && m.image) {\n\t\t\t\t\t\t\timgFader.setComponent(new PageAreaImage(this.module, this.ctrl, this.area.id, m.image, this.children, this.model, this.state));\n\t\t\t\t\t\t\tc.setComponent(imgFader);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tc.setComponent(null);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tc.setTitle((m && m.name) || '');\n\t\t\t\t},\n\t\t\t)),\n\t\t\tn.component(new ModelComponent(\n\t\t\t\tthis.area,\n\t\t\t\tnew Elem(n => n.elem('div', { className: 'pagearea--population flex-row pad8' }, [\n\t\t\t\t\tn.component(new Txt(l10n.l('pageArea.population', \"Population\"), {\n\t\t\t\t\t\ttagName: 'div',\n\t\t\t\t\t\tclassName: 'pagearea--population-title flex-1',\n\t\t\t\t\t})),\n\t\t\t\t\tn.component('pop', new Txt(null, { className: 'pagearea--population-count flex-auto', duration: 0 })),\n\t\t\t\t])),\n\t\t\t\t(m, c) => {\n\t\t\t\t\tc.getNode('pop').setText((m.pop || \"0\") + (m.prv ? (' (+' + m.prv + ')') : ''));\n\t\t\t\t\tc.setAttribute(\n\t\t\t\t\t\t'title',\n\t\t\t\t\t\tl10n.t('pageArea.inPublic', \"{count} in public\", { count: m.pop || '0' }) +\n\t\t\t\t\t\t(m.prv\n\t\t\t\t\t\t\t? \"\\n\" + l10n.t('pageArea.inPrivate', \"{count} in private\", { count: m.prv })\n\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t)),\n\t\t\tn.component(new PanelSection(\n\t\t\t\tl10n.l('pageArea.locations', \"Locations\"),\n\t\t\t\tnew Context(\n\t\t\t\t\t() => new ModelToCollection(this.children, {\n\t\t\t\t\t\tcompare: (a, b) => {\n\t\t\t\t\t\t\tlet av = a.value;\n\t\t\t\t\t\t\tlet bv = b.value;\n\t\t\t\t\t\t\treturn (bv.pop - av.pop) || av.name.localeCompare(bv.name) || a.key.localeCompare(b.key);\n\t\t\t\t\t\t},\n\t\t\t\t\t\teventBus: this.module.self.app.eventBus,\n\t\t\t\t\t}),\n\t\t\t\t\tcol => col.dispose(),\n\t\t\t\t\tcol => new CollectionList(col, m => new PageAreaLocation(this.module, m, this.inLocations, this.model, this._onLocationClick)),\n\t\t\t\t),\n\t\t\t\t{\n\t\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\t\topen: this.state.locationOpen,\n\t\t\t\t\tonToggle: (c, v) => this.state.locationOpen = v,\n\t\t\t\t},\n\t\t\t)),\n\t\t\tn.component(new ModelComponent(\n\t\t\t\tthis.area,\n\t\t\t\tnew Collapser(),\n\t\t\t\t(m, c) => c.setComponent(this.area.about ? about : null),\n\t\t\t)),\n\t\t\tn.component(new ModelComponent(\n\t\t\t\tthis.area,\n\t\t\t\tnew Collapser(),\n\t\t\t\t(m, c) => c.setComponent(this.area.rules ? rules : null),\n\t\t\t)),\n\t\t]));\n\t\treturn this.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t\tthis.children.dispose();\n\t\t\tthis.children = null;\n\t\t\tthis._unlistenInLocations(false);\n\t\t\tthis.inLocations = null;\n\t\t}\n\t}\n\n\t_onLocationClick(m) {\n\t\tlet selected = m.id;\n\t\tif (this.state.selected == selected) {\n\t\t\tselected = null;\n\t\t}\n\n\t\tthis.state.selected = selected;\n\t\tif (this.model) {\n\t\t\tthis.model.set({ selected });\n\t\t}\n\t}\n\n\t_canEdit() {\n\t\treturn !this.ctrl.puppeteer && (this.module.player.isBuilder() || this.module.player.ownsChar(this.area.owner));\n\t}\n\n\t_getAndListenInLocations() {\n\t\tif (!this.listeners) {\n\t\t\tthis.listeners = { char: this.ctrl, room: null, areas: [] };\n\t\t\tlistenResource(this.ctrl, true, this._onLocationsChange);\n\t\t}\n\t\tthis.listeners.room = relistenResource(this.listeners.room, this.ctrl.inRoom, this._onLocationsChange);\n\t\tlet o = {};\n\t\tlet areaIdx = 0;\n\t\tlet areas = this.listeners.areas;\n\t\tlet room = this.ctrl.inRoom;\n\t\tif (room) {\n\t\t\to[room.id] = room.pop;\n\t\t\tlet area = room.area;\n\t\t\t// Traverse areas as long as we have parents that does not loop.\n\t\t\twhile (area && areas.slice(0, areaIdx).indexOf(area) < 0) {\n\t\t\t\tareas[areaIdx] = relistenResource(areas[areaIdx], area, this._onLocationsChange);\n\t\t\t\to[area.id] = area.pop;\n\t\t\t\tarea = area.parent;\n\t\t\t\tareaIdx++;\n\t\t\t}\n\t\t}\n\t\t// Stop listening to additional areas\n\t\tfor (let i = areas.length - 1; i >= areaIdx; i--) {\n\t\t\tlistenResource(areas[i], false, this._onLocationsChange);\n\t\t\tareas.pop();\n\t\t}\n\t\treturn o;\n\t}\n\n\t_unlistenInLocations() {\n\t\tif (this.listeners) {\n\t\t\tlistenResource(this.listeners.char, false, this._onLocationsChange);\n\t\t\tlistenResource(this.listeners.room, false, this._onLocationsChange);\n\t\t\tfor (let area of this.listeners.areas) {\n\t\t\t\tlistenResource(area, false, this._onLocationsChange);\n\t\t\t}\n\t\t}\n\t\tthis.listeners = null;\n\t}\n\n\t_onLocationsChange(change) {\n\t\tif (this.inLocations && (\n\t\t\tchange.hasOwnProperty('inRoom') ||\n\t\t\tchange.hasOwnProperty('pop') ||\n\t\t\tchange.hasOwnProperty('parent')\n\t\t)) {\n\t\t\tthis.inLocations.reset(this._getAndListenInLocations());\n\t\t}\n\t}\n}\n\nexport default PageAreaComponent;\n","import l10n from 'modapp-l10n';\n\nexport const areaInfo = l10n.l('pageArea.areaInfo', \"Area Info\");\n","import { Model } from 'modapp-resource';\nimport PageAreaComponent from './PageAreaComponent';\nimport PageAreaImage from './PageAreaImage';\nimport { areaInfo } from './pageAreaTxt';\nimport './pageArea.scss';\n\n/**\n * PageArea opens an in-panel edit room page in the room panel.\n */\nclass PageArea {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'roomPages',\n\t\t\t'player',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\n\t\tthis.tools = new Model({ eventBus: this.app.eventBus });\n\t\tthis.module.roomPages.setDefaultAreaPageFactory({\n\t\t\tcomponentFactory: (ctrl, area, state, layout) => ({\n\t\t\t\tcomponent: new PageAreaComponent(this.module, ctrl, area, state, layout),\n\t\t\t\ttitle: areaInfo,\n\t\t\t}),\n\t\t});\n\t}\n\n\t/**\n\t * Gets a model of tools.\n\t * @returns {Model} Model of tools.\n\t */\n\tgetTools() {\n\t\treturn this.tools;\n\t}\n\n\t/**\n\t * Registers an area page tool.\n\t * @param {object} tool Tool object\n\t * @param {string} tool.id Tool ID.\n\t * @param {number} tool.sortOrder Sort order.\n\t * @param {function} tool.componentFactory Tool component factory: function(ctrl, area) -> Component\n\t * @param {number} [tool.filter] Filter function: function(ctrl, area) -> bool\n\t * @param {string} [tool.type] Target type. May be 'area'. Defaults to 'area';\n\t * @param {number} [tool.className] Class to give to the list item container.\n\t * @returns {this}\n\t */\n\taddTool(tool) {\n\t\tif (this.tools.props[tool.id]) {\n\t\t\tthrow new Error(\"Tool ID already registered: \", tool.id);\n\t\t}\n\t\tthis.tools.set({ [tool.id]: tool });\n\t\treturn this;\n\t}\n\n\t/**\n\t * Unregisters a previously registered tool.\n\t * @param {string} toolId Tool ID.\n\t * @returns {this}\n\t */\n\tremoveTool(toolId) {\n\t\tthis.tools.set({ [toolId]: undefined });\n\t\treturn this;\n\t}\n\n\t/**\n\t * Creates a new PageArea image component.\n\t * @param {Model} ctrl Controlled character.\n\t * @param {string} areaId Id of area to show.\n\t * @param {Model} image Image model.\n\t * @param {AreaChildrenModel} children Area children model.\n\t * @param {Model} selectedModel Model with a selected property.\n\t * @param {object} state State object.\n\t * @param {object} [opt] Optional parameters.\n \t * @returns {Component} Area map image component.\n\t */\n\tnewImage(ctrl, areaId, image, children, selectedModel, state, opt) {\n\t\treturn new PageAreaImage(this.module, ctrl, areaId, image, children, selectedModel, state, opt);\n\t}\n\n\tdispose() {\n\t\tthis.module.roomPages.setDefaultAreaPageFactory(null);\n\t}\n}\n\nexport default PageArea;\n","import { Elem, Txt } from 'modapp-base-component';\nimport { ModelComponent } from 'modapp-resource-component';\nimport FAIcon from 'components/FAIcon';\nimport firstLetterUppercase from 'utils/firstLetterUppercase';\nimport idleLevels, { getCharIdleLevel } from 'utils/idleLevels';\n\nclass PageAwakeChar {\n\tconstructor(module, char, onChange) {\n\t\tthis.module = module;\n\t\tthis.char = char;\n\t\tthis.onChange = onChange;\n\t}\n\n\trender(el) {\n\t\tthis.elem = new ModelComponent(\n\t\t\tthis.char,\n\t\t\tnew ModelComponent(\n\t\t\t\tnull,\n\t\t\t\tnew Elem(n => n.elem('div', { className: 'pageawake-char' }, [\n\t\t\t\t\tn.elem('badge', 'div', { className: 'pageawake-char--badge badge btn margin4', events: {\n\t\t\t\t\t\tclick: (c, ev) => {\n\t\t\t\t\t\t\tthis.module.dialogAboutChar.open(this.char);\n\t\t\t\t\t\t\tev.stopPropagation();\n\t\t\t\t\t\t},\n\t\t\t\t\t}}, [\n\t\t\t\t\t\tn.elem('div', { className: 'badge--select' }, [\n\t\t\t\t\t\t\tn.component(this.module.avatar.newAvatar(this.char, { size: 'small', className: 'badge--icon' })),\n\t\t\t\t\t\t\tn.elem('div', { className: 'badge--info' }, [\n\t\t\t\t\t\t\t\tn.elem('fullname', 'div', { className: 'pageawake-char--name badge--title badge--nowrap' }, [\n\t\t\t\t\t\t\t\t\tn.component('name', new Txt()),\n\t\t\t\t\t\t\t\t\tn.text(' '),\n\t\t\t\t\t\t\t\t\tn.component('surname', new Txt()),\n\t\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\t\tn.elem('div', { className: 'badge--text badge--nowrap' }, [\n\t\t\t\t\t\t\t\t\tn.component('status', new Txt('')),\n\t\t\t\t\t\t\t\t\tn.component('gender', new Txt()),\n\t\t\t\t\t\t\t\t\tn.text(' '),\n\t\t\t\t\t\t\t\t\tn.component('species', new Txt()),\n\t\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\t\t\tthis.module.charsAwake.getNotes(),\n\t\t\t\t\t\t\t\tnew Elem(n => n.elem('div', { className: 'badge--tools' }, [\n\t\t\t\t\t\t\t\t\tn.elem('note', 'button', { className: 'pageawake-char--note iconbtn medium tinyicon', events: {\n\t\t\t\t\t\t\t\t\t\tclick: (c, ev) => {\n\t\t\t\t\t\t\t\t\t\t\tthis.module.dialogEditNote.open(this.char.id);\n\t\t\t\t\t\t\t\t\t\t\tev.stopPropagation();\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t}}, [\n\t\t\t\t\t\t\t\t\t\tn.component(new FAIcon('file-text')),\n\t\t\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\t\t])),\n\t\t\t\t\t\t\t\t(m, c) => c[m.props[this.char.id] ? 'addNodeClass' : 'removeNodeClass']('note', 'hasnote'),\n\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t]),\n\t\t\t\t\t\tn.elem('lfrp', 'div', { className: 'counter small highlight indent' }),\n\t\t\t\t\t\t// n.component(new ModelComponent(\n\t\t\t\t\t\t// \tthis.model,\n\t\t\t\t\t\t// \tnew Collapser(null),\n\t\t\t\t\t\t// \t(m, c, change) => {\n\t\t\t\t\t\t// \t\tif (change && !change.hasOwnProperty('selectedCharId')) return;\n\t\t\t\t\t\t// \t\tc.setComponent(m.selectedCharId === this.char.id\n\t\t\t\t\t\t// \t\t\t? new PageAwakeCharContent(this.module, this.char, (show) => this._toggleInfo(show))\n\t\t\t\t\t\t// \t\t\t: null\n\t\t\t\t\t\t// \t\t);\n\t\t\t\t\t\t// \t}\n\t\t\t\t\t\t// ))\n\t\t\t\t\t]),\n\t\t\t\t])),\n\t\t\t\t(m, c) => this._setTooltip(this.char, c),\n\t\t\t),\n\t\t\t(m, c, change) => {\n\t\t\t\tc.setModel(m.puppeteer);\n\t\t\t\tc = c.getComponent();\n\t\t\t\tc.getNode('name').setText(m.name);\n\t\t\t\tc.getNode('surname').setText(m.surname);\n\t\t\t\tc.getNode('gender').setText(firstLetterUppercase(m.gender));\n\t\t\t\tc.getNode('species').setText(firstLetterUppercase(m.species));\n\t\t\t\tc.getNode('status').setText(m.status ? '(' + m.status + ') ' : '');\n\t\t\t\tthis._setTooltip(m, c);\n\n\t\t\t\tc[m.match ? 'removeNodeClass' : 'addNodeClass']('badge', 'inactive');\n\t\t\t\tc[m.type == 'puppet' ? 'addNodeClass' : 'removeNodeClass']('badge', 'highlight');\n\t\t\t\tlet lvl = getCharIdleLevel(m);\n\t\t\t\tfor (let l of idleLevels) {\n\t\t\t\t\tc[lvl == l ? 'addNodeClass' : 'removeNodeClass']('fullname', l.className);\n\t\t\t\t}\n\t\t\t\t// Callback if change occured that may affect count\n\t\t\t\tif (change && (change.hasOwnProperty('match') || change.hasOwnProperty('watch'))) {\n\t\t\t\t\tthis.onChange();\n\t\t\t\t}\n\t\t\t\t// Set lfrp marker\n\t\t\t\tc[m.rp == 'lfrp' ? 'removeNodeClass' : 'addNodeClass']('lfrp', 'hide');\n\t\t\t},\n\t\t);\n\t\treturn this.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n\n\t_setTooltip(m, c) {\n\t\tlet genderSpecies = (firstLetterUppercase(m.gender) + ' ' + firstLetterUppercase(m.species)).trim();\n\t\tlet p = m.puppeteer;\n\t\tc.setNodeAttribute('badge', 'title', (m.name + ' ' + m.surname).trim() +\n\t\t\t(genderSpecies ? \"\\n\" + genderSpecies : '') +\n\t\t\t(p ? \"\\n(\" + (p.name + ' ' + p.surname).trim() + \")\" : '') +\n\t\t\t(m.status ? \"\\n\" + m.status : ''),\n\t\t);\n\t}\n\n\t// _toggleInfo(show) {\n\t// \tshow = typeof show == 'undefined'\n\t// \t\t? !this.model.selectedCharId || this.model.selectedCharId != this.char.id\n\t// \t\t: !!show;\n\n\t// \tthis.model.set({ selectedCharId: show ? this.char.id : null });\n\t// }\n}\n\nexport default PageAwakeChar;\n","import { Elem, Txt, Context, Input } from 'modapp-base-component';\nimport { CollectionList, CollectionComponent, ModelComponent } from 'modapp-resource-component';\nimport { CollectionWrapper, Model } from 'modapp-resource';\nimport l10n from 'modapp-l10n';\nimport Collapser from 'components/Collapser';\nimport Fader from 'components/Fader';\nimport LabelToggleBox from 'components/LabelToggleBox';\nimport FAIcon from 'components/FAIcon';\nimport PageAwakeChar from './PageAwakeChar';\n\nfunction countMatches(col) {\n\tlet count = 0;\n\tfor (let c of col) {\n\t\tif (c?.match) {\n\t\t\tcount++;\n\t\t}\n\t}\n\treturn count;\n}\n\nclass PageAwakeComponent {\n\tconstructor(module, state) {\n\t\tthis.module = module;\n\t\tthis.state = Object.assign(state, { watchForOpen: true }, state); //, selectedCharId: null }, state);\n\t\tthis.model = null;\n\n\t\t// Bind callbacks\n\t\tthis._onCountChange = this._onCountChange.bind(this);\n\t}\n\n\trender(el) {\n\t\tthis.model = new Model({ data: this.state, eventBus: this.module.self.app.eventBus });\n\t\tlet charsAwakeModel = this.module.charsAwake.getModel();\n\t\tlet watchedAwake = this.module.charsAwake.getWatchedAwake();\n\t\tthis.countCtx = { fader: new Fader() };\n\n\t\tthis.elem = new Elem(n => n.elem('div', { className: 'pageawake' }, [\n\t\t\tn.component(new Context(\n\t\t\t\t() => new CollectionWrapper(this.module.self.getTools(), {\n\t\t\t\t\tfilter: t => (t.type || 'realm') == 'realm' && (t.filter ? t.filter() : true),\n\t\t\t\t}),\n\t\t\t\ttools => tools.dispose(),\n\t\t\t\ttools => new CollectionComponent(\n\t\t\t\t\ttools,\n\t\t\t\t\tnew Collapser(),\n\t\t\t\t\t(col, c, ev) => {\n\t\t\t\t\t\t// Collapse if we have no tools to show\n\t\t\t\t\t\tif (!col.length) {\n\t\t\t\t\t\t\tc.setComponent(null);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!ev || (col.length == 1 && ev.event == 'add')) {\n\t\t\t\t\t\t\tc.setComponent(new CollectionList(\n\t\t\t\t\t\t\t\ttools,\n\t\t\t\t\t\t\t\tt => t.componentFactory(),\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tclassName: 'pageawake--tools',\n\t\t\t\t\t\t\t\t\tsubClassName: t => t.className || null,\n\t\t\t\t\t\t\t\t\thorizontal: true,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t));\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t)),\n\t\t\tn.component(new ModelComponent(\n\t\t\t\tcharsAwakeModel,\n\t\t\t\tnew Elem(n => n.elem('div', [\n\t\t\t\t\tn.component('showLfrp', new LabelToggleBox(l10n.l('pageAwake.showLfrp', \"Show looking for RP\"), false, {\n\t\t\t\t\t\tclassName: 'common--formmargin ',\n\t\t\t\t\t\tonChange: v => this.module.charsAwake.toggleShowLfrp(v),\n\t\t\t\t\t\tpopupTip: l10n.l('pageAwake.showLfrpInfo', \"Filter the list to show characters currently set as looking for roleplay.\"),\n\t\t\t\t\t\tpopupTipClassName: 'popuptip--width-s popuptip--position-left-bottom',\n\t\t\t\t\t})),\n\t\t\t\t\tn.elem('div', { className: 'pageawake--filter' }, [\n\t\t\t\t\t\tn.component('filter', new Input('', {\n\t\t\t\t\t\t\tclassName: 'margin-bottom-l',\n\t\t\t\t\t\t\tevents: { input: c => this.module.charsAwake.setFilter(c.getValue()) },\n\t\t\t\t\t\t\tattributes: {\n\t\t\t\t\t\t\t\tplaceholder: l10n.t('pageAwake.searchFilter', \"Search filter\"),\n\t\t\t\t\t\t\t\tspellcheck: 'false',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t})),\n\t\t\t\t\t\tn.elem('clear', 'button', {\n\t\t\t\t\t\t\tclassName: 'pageawake--filter-clear iconbtn medium tinyicon',\n\t\t\t\t\t\t\tattributes: { type: 'button' },\n\t\t\t\t\t\t\tevents: {\n\t\t\t\t\t\t\t\tclick: (c, e) => {\n\t\t\t\t\t\t\t\t\tthis.module.charsAwake.setFilter(\"\");\n\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}, [\n\t\t\t\t\t\t\tn.component(new FAIcon('times')),\n\t\t\t\t\t\t]),\n\t\t\t\t\t]),\n\t\t\t\t\tn.elem('div', { className: 'pageawake--count' }, [\n\t\t\t\t\t\tn.component(new CollectionComponent(\n\t\t\t\t\t\t\tthis.module.charsAwake.getCollection(),\n\t\t\t\t\t\t\tthis.countCtx.fader,\n\t\t\t\t\t\t\t(col, c) => this._updateCount(),\n\t\t\t\t\t\t)),\n\t\t\t\t\t]),\n\t\t\t\t\t// Watched for characters\n\t\t\t\t\tn.component(new CollectionComponent(\n\t\t\t\t\t\twatchedAwake,\n\t\t\t\t\t\tnew Collapser(),\n\t\t\t\t\t\t(col, c, ev) => c.setComponent(col.length\n\t\t\t\t\t\t\t? null\n\t\t\t\t\t\t\t: new Txt(l10n.l('pageAwake.nooneAwake', \"Everyone watched is asleep\"), { className: 'common--nolistplaceholder' }),\n\t\t\t\t\t\t),\n\t\t\t\t\t)),\n\t\t\t\t\tn.component(new CollectionList(watchedAwake, m => new PageAwakeChar(this.module, m, this._onCountChange), {\n\t\t\t\t\t\tclassName: 'pageawake--watched',\n\t\t\t\t\t})),\n\t\t\t\t\tn.elem('div', {\n\t\t\t\t\t\tclassName: 'pageawake--showall',\n\t\t\t\t\t\tevents: {\n\t\t\t\t\t\t\tclick: (c, ev) => {\n\t\t\t\t\t\t\t\tthis.module.charsAwake.toggleShowAll();\n\t\t\t\t\t\t\t\tev.stopPropagation();\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t}, [\n\t\t\t\t\t\tn.elem('div', { className: 'pageawake--showall-line' }),\n\t\t\t\t\t\tn.component('showAll', new FAIcon(null, { className: 'pageawake--showall-icon' })),\n\t\t\t\t\t]),\n\t\t\t\t\t// Non-watched for characters\n\t\t\t\t\tn.component('unwatched', new Collapser()),\n\t\t\t\t])),\n\t\t\t\t(m, c, change) => {\n\t\t\t\t\t// Update unwatched\n\t\t\t\t\tthis._setUnwatched(m, c.getNode('unwatched'));\n\t\t\t\t\t// Update show lfrp togglebox\n\t\t\t\t\tc.getNode('showLfrp').setValue(m.showLfrp, false);\n\t\t\t\t\t// Set filter input value\n\t\t\t\t\tc.getNode('filter').setValue(m.filter, false);\n\t\t\t\t\t// set hide unwatched filter\n\t\t\t\t\tc.getNode('showAll').setIcon(m.showAll ? 'minus-square-o' : 'plus-square-o');\n\t\t\t\t\t// Set clear button enabled/disabled\n\t\t\t\t\tc.setNodeProperty('clear', 'disabled', m.filter ? null : 'disabled');\n\t\t\t\t\t// Update count\n\t\t\t\t\tif (change && (change.hasOwnProperty('showLfrp') || change.hasOwnProperty('showAll') || change.hasOwnProperty('filter'))) {\n\t\t\t\t\t\tthis._onCountChange();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t)),\n\t\t]));\n\t\tthis.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tObject.assign(this.state, this.model.props);\n\t\t\tthis.model = null;\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t\tthis._clearTimer(this.countCtx);\n\t\t\tthis.countCtx = null;\n\t\t}\n\t}\n\n\t_onCountChange() {\n\t\tlet ctx = this.countCtx;\n\t\tif (ctx && !ctx.timer) {\n\t\t\t// 100 millisecond delay on updating the count to prevent multiple\n\t\t\t// updates caused by a filter change.\n\t\t\tctx.timer = setTimeout(() => this._updateCount(), 100);\n\t\t}\n\t}\n\n\t_clearTimer(ctx) {\n\t\tif (ctx.timer) {\n\t\t\tclearTimeout(ctx.timer);\n\t\t\tctx.timer = null;\n\t\t}\n\t}\n\n\t_updateCount() {\n\t\tlet ctx = this.countCtx;\n\t\tif (!ctx) return;\n\n\t\tthis._clearTimer(ctx);\n\t\tlet charsAwake = this.module.charsAwake;\n\t\tlet total = charsAwake.getCollection().length;\n\t\tlet filterIsEmpty = charsAwake.filterIsEmpty();\n\t\tlet showLfrp = charsAwake.getModel().showLfrp;\n\t\tlet showAll = charsAwake.getModel().showAll;\n\t\tlet col = showAll ? charsAwake.getCollection() : charsAwake.getWatchedAwake();\n\n\t\tlet str = null;\n\t\tlet state = \"\";\n\t\tif (filterIsEmpty && !showLfrp) {\n\t\t\tif (showAll) {\n\t\t\t\tstate = 't';\n\t\t\t\tstr = l10n.l('pageAwake.totalAwake', \"{total} awake\", { total });\n\t\t\t} else {\n\t\t\t\tstate = 'woa';\n\t\t\t\tstr = l10n.l('pageAwake.watchingOfTotalAwake', \"Watching {showCount} of {total} awake\", { showCount: col.length, total });\n\t\t\t}\n\t\t} else {\n\t\t\tstate = showAll ? 'moa' : 'mwoa';\n\t\t\tstr = l10n.l('pageAwake.matchingOfTotalAwake', \"Matching {matchCount} of {total} awake\", { matchCount: countMatches(col), total });\n\t\t}\n\n\t\t// Determine if we should create a new Txt.\n\t\t// This is to make a nice fading transition between changing state.\n\t\tif (state != ctx.state) {\n\t\t\tctx.state = state;\n\t\t\tctx.txt = new Txt(\"\", { duration: 0 });\n\t\t}\n\n\t\tlet txtComp = ctx.txt;\n\t\ttxtComp.setText(str);\n\t\tctx.fader.setComponent(txtComp);\n\t}\n\n\t_setUnwatched(model, collapser) {\n\t\tlet unwatchedAwake = this.module.charsAwake.getUnwatchedAwake();\n\t\tcollapser.setComponent(model.showAll\n\t\t\t? collapser.getComponent() || new Elem(n => n.elem('div', [\n\t\t\t\tn.component(new CollectionList(unwatchedAwake, m => new PageAwakeChar(this.module, m, this._onCountChange), {\n\t\t\t\t\tclassName: 'pageawake--unwatched',\n\t\t\t\t})),\n\t\t\t\tn.component(new CollectionComponent(\n\t\t\t\t\tunwatchedAwake,\n\t\t\t\t\tnew Collapser(),\n\t\t\t\t\t(col, c, ev) => c.setComponent(col.length\n\t\t\t\t\t\t? null\n\t\t\t\t\t\t: new CollectionComponent(\n\t\t\t\t\t\t\tthis.module.charsAwake.getCollection(),\n\t\t\t\t\t\t\tnew Txt(\"\", { className: 'common--nolistplaceholder' }),\n\t\t\t\t\t\t\t(col, c) => c.setText(col.length\n\t\t\t\t\t\t\t\t? l10n.l('pageAwake.butNooneElseAwake', \"... everyone else is asleep.\")\n\t\t\t\t\t\t\t\t: l10n.l('pageAwake.nooneAwake', \"... and so is everyone else.\"),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t),\n\t\t\t\t\t),\n\t\t\t\t)),\n\t\t\t]))\n\t\t\t: null,\n\t\t);\n\t}\n}\n\nexport default PageAwakeComponent;\n","import { Elem } from 'modapp-base-component';\nimport { Collection, sortOrderCompare } from 'modapp-resource';\nimport l10n from 'modapp-l10n';\nimport FAIcon from 'components/FAIcon';\nimport PageAwakeComponent from './PageAwakeComponent';\nimport './pageAwake.scss';\n\n/**\n * PageAwake draws player panel.\n */\nclass PageAwake {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\t\tthis.app.require([\n\t\t\t'playerTabs',\n\t\t\t'charsAwake',\n\t\t\t'avatar',\n\t\t\t'dialogEditNote',\n\t\t\t'dialogAboutChar',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\n\t\tthis.tools = new Collection({\n\t\t\tidAttribute: m => m.id,\n\t\t\tcompare: sortOrderCompare,\n\t\t\teventBus: this.app.eventBus,\n\t\t});\n\n\t\t// Add awake tab;\n\t\tthis.module.playerTabs.addTab({\n\t\t\tid: 'awake',\n\t\t\tsortOrder: 10,\n\t\t\ttabFactory: click => new Elem(n => n.elem('button', { className: 'iconbtn medium light', events: {\n\t\t\t\tclick: (c, e) => {\n\t\t\t\t\tclick();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t},\n\t\t\t}}, [\n\t\t\t\tn.component(new FAIcon('users')),\n\t\t\t])),\n\t\t\tfactory: (state, close, layoutId) => ({\n\t\t\t\tcomponent: new PageAwakeComponent(this.module, state),\n\t\t\t\ttitle: l10n.l('pageAwake.awake', \"Awake\"),\n\t\t\t}),\n\t\t}, true);\n\t}\n\n\t/**\n\t * Gets a collection of tools.\n\t * @returns {Collection} Collection of tools.\n\t */\n\tgetTools() {\n\t\treturn this.tools;\n\t}\n\n\t/**\n\t * Registers a realm tool.\n\t * @param {object} tool Tool object\n\t * @param {string} tool.id Tool ID.\n\t * @param {number} tool.sortOrder Sort order.\n\t * @param {function} tool.componentFactory Tool component factory: function() -> Component\n\t * @param {number} [tool.filter] Filter function: function() -> bool\n\t * @param {string} [tool.type] Target type. May be 'realm' or 'awake'. Defaults to 'realm';\n\t * @param {number} [tool.className] Class to give to the list item container.\n\t * @returns {this}\n\t */\n\taddTool(tool) {\n\t\tif (this.tools.get(tool.id)) {\n\t\t\tthrow new Error(\"Tool ID already registered: \", tool.id);\n\t\t}\n\t\tthis.tools.add(tool);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Unregisters a previously registered tool.\n\t * @param {string} toolId Tool ID.\n\t * @returns {this}\n\t */\n\tremoveTool(toolId) {\n\t\tthis.tools.remove(toolId);\n\t\treturn this;\n\t}\n\n\tdispose() {\n\t\tthis.module.playerTabs.removeTab('awake');\n\t}\n}\n\nexport default PageAwake;\n","import { Elem, Txt, Context } from 'modapp-base-component';\nimport { ModelTxt, ModelComponent, CollectionList, CollectionComponent } from 'modapp-resource-component';\nimport { CollectionWrapper } from 'modapp-resource';\nimport l10n from 'modapp-l10n';\nimport Collapser from 'components/Collapser';\nimport Img from 'components/Img';\nimport PanelSection from 'components/PanelSection';\nimport NameSection from 'components/NameSection';\nimport Fader from 'components/Fader';\nimport FormatTxt from 'components/FormatTxt';\nimport ModelCollapser from 'components/ModelCollapser';\nimport CharTagsList, { hasTags } from 'components/CharTagsList';\nimport ImgModal from 'classes/ImgModal';\nimport firstLetterUppercase from 'utils/firstLetterUppercase';\n\nconst textNotSet = l10n.l('pageChar.notSet', \"Not set\");\n\n/**\n * PageCharComponent renders character info.\n */\nclass PageCharComponent {\n\tconstructor(module, ctrl, char, state) {\n\t\tthis.module = module;\n\t\tthis.ctrl = ctrl;\n\t\tthis.char = char;\n\t\tthis.state = state;\n\t\tthis.charState = this.state['char_' + char.id] || {};\n\t\tthis.state['char_' + char.id] = this.charState;\n\t\tthis.charState.description = this.charState.description || {};\n\t\tthis.charState.lfrp = this.charState.lfrp || {};\n\t}\n\n\trender(el) {\n\t\tlet image = new Elem(n => n.elem('div', { className: 'pagechar--image-cont' }, [\n\t\t\tn.component('img', new Img('', { className: 'pagechar--image', events: {\n\t\t\t\tclick: () => new ImgModal(this.char.image.href).open(),\n\t\t\t}})),\n\t\t]));\n\t\tlet about = new PanelSection(\n\t\t\tl10n.l('pageChar.about', \"About\"),\n\t\t\tnew ModelComponent(\n\t\t\t\tthis.char,\n\t\t\t\tnew Elem(n => n.elem('div', [\n\t\t\t\t\tn.component('about', new FormatTxt(\"\", { className: 'common--desc-size', state: this.charState.about })),\n\t\t\t\t\tn.component('tags', new Collapser()),\n\t\t\t\t])),\n\t\t\t\t(m, c, change) => {\n\t\t\t\t\tc.getNode('about').setFormatText(m.about);\n\t\t\t\t\tif (!change || change.hasOwnProperty('tags')) {\n\t\t\t\t\t\tc.getNode('tags').setComponent(m.tags ? new CharTagsList(m.tags, {\n\t\t\t\t\t\t\tclassName: 'pagechar--tags',\n\t\t\t\t\t\t\tstatic: false,\n\t\t\t\t\t\t\teventBus: this.module.self.app.eventBus,\n\t\t\t\t\t\t\ttooltipMargin: 'm',\n\t\t\t\t\t\t}) : null);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t),\n\t\t\t{\n\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\topen: this.state.aboutOpen || false,\n\t\t\t\tonToggle: (c, v) => this.state.aboutOpen = v,\n\t\t\t},\n\t\t);\n\t\tlet o = {};\n\t\tlet elem = new Elem(n => n.elem('div', [\n\t\t\tn.component(new Context(\n\t\t\t\t() => new CollectionWrapper(this.module.self.getTools(), {\n\t\t\t\t\tfilter: t => (t.type || 'header') == 'header' && (!t.filter || t.filter(this.ctrl, this.char)),\n\t\t\t\t}),\n\t\t\t\ttools => tools.dispose(),\n\t\t\t\ttools => new CollectionComponent(\n\t\t\t\t\ttools,\n\t\t\t\t\tnew Collapser(),\n\t\t\t\t\t(col, c, ev) => {\n\t\t\t\t\t\t// Collapse if we have no tools to show\n\t\t\t\t\t\tif (!col.length) {\n\t\t\t\t\t\t\tc.setComponent(null);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!ev || (col.length == 1 && ev.event == 'add')) {\n\t\t\t\t\t\t\tc.setComponent(new CollectionList(\n\t\t\t\t\t\t\t\ttools,\n\t\t\t\t\t\t\t\tt => t.componentFactory(this.ctrl, this.char),\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tclassName: 'pagechar--tools',\n\t\t\t\t\t\t\t\t\tsubClassName: t => t.className || null,\n\t\t\t\t\t\t\t\t\thorizontal: true,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t));\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t)),\n\t\t\tn.component(new ModelComponent(\n\t\t\t\tthis.char,\n\t\t\t\tnew NameSection(new ModelTxt(this.char, c => c.name + ' ' + c.surname), null, {\n\t\t\t\t\topen: this.state.charImageOpen,\n\t\t\t\t\tonToggle: (c, v) => this.state.charImageOpen = v,\n\t\t\t\t}),\n\t\t\t\t(m, c, changed) => {\n\t\t\t\t\tif (m.image) {\n\t\t\t\t\t\timage.getNode('img').setSrc(m.image.href + \"?thumb=xxl\");\n\t\t\t\t\t\tc.setComponent(image);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tc.setComponent(null);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t)),\n\t\t\tn.elem('div', { className: 'flex-row pad8 common--sectionpadding' }, [\n\t\t\t\tn.elem('div', { className: 'flex-1' }, [\n\t\t\t\t\tn.component(new Txt(l10n.l('pageChar.gender', \"Gender\"), { tagName: 'h3', className: 'margin-bottom-m' })),\n\t\t\t\t\tn.elem('div', [\n\t\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\t\tthis.char,\n\t\t\t\t\t\t\tnew Txt(),\n\t\t\t\t\t\t\t(m, c) => {\n\t\t\t\t\t\t\t\tc.setText(m.gender ? firstLetterUppercase(m.gender) : textNotSet);\n\t\t\t\t\t\t\t\tc[m.gender ? 'removeClass' : 'addClass']('pagechar--notset');\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t)),\n\t\t\t\t\t]),\n\t\t\t\t]),\n\t\t\t\tn.elem('div', { className: 'flex-1' }, [\n\t\t\t\t\tn.component(new Txt(l10n.l('pageChar.species', \"Species\"), { tagName: 'h3', className: 'margin-bottom-m' })),\n\t\t\t\t\tn.elem('div', [\n\t\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\t\tthis.char,\n\t\t\t\t\t\t\tnew Txt(),\n\t\t\t\t\t\t\t(m, c) => {\n\t\t\t\t\t\t\t\tc.setText(m.species ? firstLetterUppercase(m.species) : textNotSet);\n\t\t\t\t\t\t\t\tc[m.species ? 'removeClass' : 'addClass']('pagechar--notset');\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t)),\n\t\t\t\t\t]),\n\t\t\t\t]),\n\t\t\t]),\n\t\t\tn.component(new ModelCollapser(this.char, [\n\t\t\t\t{\n\t\t\t\t\tcondition: m => m.rp == 'lfrp' && m.lfrpDesc,\n\t\t\t\t\tfactory: m => new PanelSection(\n\t\t\t\t\t\tl10n.l('pageChar.lookingForRoleplay', \"Looking for roleplay\"),\n\t\t\t\t\t\tnew ModelComponent(\n\t\t\t\t\t\t\tm,\n\t\t\t\t\t\t\tnew FormatTxt(\"\", { className: 'common--desc-size', state: this.charState.lfrp }),\n\t\t\t\t\t\t\t(m, c) => c.setFormatText(m.lfrpDesc),\n\t\t\t\t\t\t),\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\t\t\t\topen: this.state.lfrpOpen,\n\t\t\t\t\t\t\tonToggle: (c, v) => this.state.lfrpOpen = v,\n\t\t\t\t\t\t},\n\t\t\t\t\t),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tcondition: m => m.rp == 'lfrp',\n\t\t\t\t\tfactory: m => new Txt(l10n.l('dialogAboutChar.currentlyLookingForRoleplay', \"Currently looking for roleplay.\"), {\n\t\t\t\t\t\tclassName: 'dialogaboutchar--lfrp-placeholder',\n\t\t\t\t\t}),\n\t\t\t\t},\n\t\t\t])),\n\t\t\tn.component(new PanelSection(\n\t\t\t\tl10n.l('pageChar.description', \"Description\"),\n\t\t\t\tnew ModelComponent(\n\t\t\t\t\tthis.char,\n\t\t\t\t\tnew FormatTxt(\"\", { className: 'common--desc-size', state: this.charState.description }),\n\t\t\t\t\t(m, c) => {\n\t\t\t\t\t\tc.setFormatText(m.desc ? m.desc : l10n.t(textNotSet));\n\t\t\t\t\t\tc[m.desc ? 'removeClass' : 'addClass']('pagechar--notset');\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t\t{\n\t\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\t\topen: this.state.descriptionOpen,\n\t\t\t\t\tonToggle: (c, v) => this.state.descriptionOpen = v,\n\t\t\t\t},\n\t\t\t)),\n\t\t\tn.component(new ModelComponent(\n\t\t\t\tthis.char,\n\t\t\t\tnew ModelComponent(\n\t\t\t\t\tnull,\n\t\t\t\t\tnew Collapser(),\n\t\t\t\t\t(m, c) => {\n\t\t\t\t\t\to.howToPlay = m && m.howToPlay\n\t\t\t\t\t\t\t? o.howToPlay || new PanelSection(\n\t\t\t\t\t\t\t\tl10n.l('pageChar.howToPlay', \"How to play\"),\n\t\t\t\t\t\t\t\tnew ModelComponent(\n\t\t\t\t\t\t\t\t\tm,\n\t\t\t\t\t\t\t\t\tnew FormatTxt(\"\", { className: 'common--desc-size', state: this.charState.howToPlay }),\n\t\t\t\t\t\t\t\t\t(m, c) => {\n\t\t\t\t\t\t\t\t\t\tc.setFormatText(m.howToPlay ? m.howToPlay : l10n.t(textNotSet));\n\t\t\t\t\t\t\t\t\t\tc[m.howToPlay ? 'removeClass' : 'addClass']('pagechar--notset');\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\t\t\t\t\t\topen: this.state.howToPlayOpen,\n\t\t\t\t\t\t\t\t\tonToggle: (c, v) => this.state.howToPlayOpen = v,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t: null;\n\t\t\t\t\t\tc.setComponent(o.howToPlay);\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t\t(m, c) => c.setModel(m.puppetInfo),\n\t\t\t)),\n\t\t\tn.component(new ModelComponent(\n\t\t\t\tthis.char,\n\t\t\t\tnew ModelComponent(\n\t\t\t\t\tthis.char.tags,\n\t\t\t\t\tnew Collapser(null),\n\t\t\t\t\t(m, c) => this._showAbout(c, about),\n\t\t\t\t),\n\t\t\t\t(m, c) => this._showAbout(c.getComponent(), about),\n\t\t\t)),\n\t\t\tn.component(new Context(\n\t\t\t\t() => new CollectionWrapper(this.module.self.getTools(), {\n\t\t\t\t\tfilter: t => t.type == 'footer' && (!t.filter || t.filter(this.ctrl, this.char)),\n\t\t\t\t}),\n\t\t\t\ttools => tools.dispose(),\n\t\t\t\ttools => new CollectionComponent(\n\t\t\t\t\ttools,\n\t\t\t\t\tnew Collapser(),\n\t\t\t\t\t(col, c, ev) => {\n\t\t\t\t\t\t// Collapse if we have no tools to show\n\t\t\t\t\t\tif (!col.length) {\n\t\t\t\t\t\t\tc.setComponent(null);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!ev || (col.length == 1 && ev.event == 'add')) {\n\t\t\t\t\t\t\tc.setComponent(new CollectionList(\n\t\t\t\t\t\t\t\ttools,\n\t\t\t\t\t\t\t\tt => t.componentFactory(this.ctrl, this.char),\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tclassName: 'pagechar--footertools',\n\t\t\t\t\t\t\t\t\tsubClassName: t => t.className || null,\n\t\t\t\t\t\t\t\t\thorizontal: true,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t));\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t)),\n\t\t]));\n\n\t\tthis.elem = new ModelComponent(\n\t\t\tthis.char,\n\t\t\tnew Fader(null, { className: 'pagechar' }),\n\t\t\t(m, c) => c.setComponent(m.hasOwnProperty('name')\n\t\t\t\t? elem\n\t\t\t\t: new Txt(l10n.l('pageChar.whoWasIt', \"... Who was I looking at?\"), { className: 'common--nolistplaceholder' }),\n\t\t\t),\n\t\t);\n\n\t\treturn this.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n\n\t_isOwned() {\n\t\tfor (let c of this.module.player.getChars()) {\n\t\t\tif (c.id === this.char.id) return true;\n\t\t}\n\t\treturn false;\n\t}\n\n\t_isControlled() {\n\t\treturn this.ctrl.id == this.char.id;\n\t}\n\n\t_isAwake() {\n\t\tlet c = this.module.player.getControlledModel()[this.char.id];\n\t\treturn c && (c.state == 'awake');\n\t}\n\n\t_wakeupChar() {\n\t\tif (!this._isControlled) throw new Error(\"Cannot wake up char that is controlled.\");\n\t\treturn this.ctrl.call('wakeup');\n\t}\n\n\t_releaseChar() {\n\t\tif (!this._isControlled) throw new Error(\"Char is not controlled\");\n\n\t\treturn this.ctrl.call('release');\n\t}\n\n\t_showAbout(c, about) {\n\t\tc.setComponent(this.char.about || hasTags(this.char.tags)\n\t\t\t? about\n\t\t\t: null,\n\t\t);\n\t}\n}\n\nexport default PageCharComponent;\n","import { Elem, Txt } from 'modapp-base-component';\nimport { ModelComponent } from 'modapp-resource-component';\nimport l10n from 'modapp-l10n';\nimport Fader from 'components/Fader';\nimport FAIcon from 'components/FAIcon';\n\n/**\n * PageCharSleep renders character info.\n */\nclass PageCharSleep {\n\tconstructor(module, ctrl) {\n\t\tthis.module = module;\n\t\tthis.ctrl = ctrl;\n\t}\n\n\trender(el) {\n\t\tthis.elem = new ModelComponent(\n\t\t\tthis.ctrl,\n\t\t\tnew Fader(null, { className: 'pagechar--statebutton' }),\n\t\t\t(m, c, change) => {\n\t\t\t\tif (change && (!change.hasOwnProperty('state') || (m.state != 'awake' && change.state != 'awake'))) return;\n\n\t\t\t\tc.setComponent(m.state != 'awake'\n\t\t\t\t\t? new Elem(n => n.elem('button', { className: 'btn medium primary', events: {\n\t\t\t\t\t\tclick: () => this._wakeupChar(),\n\t\t\t\t\t}}, [\n\t\t\t\t\t\tn.component(new FAIcon('sign-in')),\n\t\t\t\t\t\tn.component(new Txt(l10n.l('pageChar.wakeUp', \"Wake up\"))),\n\t\t\t\t\t]))\n\t\t\t\t\t: new Elem(n => n.elem('button', { className: 'btn small', events: {\n\t\t\t\t\t\tclick: () => this._releaseChar(),\n\t\t\t\t\t}}, [\n\t\t\t\t\t\tn.component(new FAIcon('sign-out')),\n\t\t\t\t\t\tn.component(new Txt(l10n.l('pageChar.sleep', \"Sleep\"))),\n\t\t\t\t\t])),\n\t\t\t\t);\n\t\t\t},\n\t\t);\n\t\treturn this.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n\n\t_wakeupChar() {\n\t\treturn this.ctrl.call('wakeup');\n\t}\n\n\t_releaseChar() {\n\t\treturn this.ctrl.call('release');\n\t}\n}\n\nexport default PageCharSleep;\n","import { Collection, sortOrderCompare } from 'modapp-resource';\nimport l10n from 'modapp-l10n';\nimport PageCharComponent from './PageCharComponent';\nimport PageCharSleep from './PageCharSleep';\nimport './pageChar.scss';\n\n/**\n * PageChar sets the default page in the char panel.\n */\nclass PageChar {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\t\tthis.app.require([ 'charPages', 'player', 'confirm' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\n\t\tthis.tools = new Collection({\n\t\t\tidAttribute: m => m.id,\n\t\t\tcompare: sortOrderCompare,\n\t\t\teventBus: this.app.eventBus,\n\t\t});\n\t\tthis.module.charPages.setDefaultPageFactory((ctrl, char, state) => ({\n\t\t\tcomponent: new PageCharComponent(this.module, ctrl, char, state),\n\t\t\ttitle: l10n.l('pageChar.characterInfo', \"Character Info\"),\n\t\t\tclose: char && char.id != ctrl.id\n\t\t\t\t? () => ctrl.call('look', { charId: ctrl.id })\n\t\t\t\t: null,\n\t\t\tcloseIcon: 'eye-slash',\n\t\t}));\n\n\t\t// Add sleep tool\n\t\tthis.addTool({\n\t\t\tid: 'sleep',\n\t\t\tsortOrder: 1000,\n\t\t\tcomponentFactory: (ctrl, char) => new PageCharSleep(this.module, ctrl),\n\t\t\tfilter: (ctrl, char) => ctrl.id == char.id,\n\t\t\tclassName: 'pagechar--sleep',\n\t\t});\n\t}\n\n\t/**\n\t * Gets a collection of tools.\n\t * @returns {Collection} Collection of tools.\n\t */\n\tgetTools() {\n\t\treturn this.tools;\n\t}\n\n\t/**\n\t * Registers a char page tool.\n\t * @param {object} tool Tool object\n\t * @param {string} tool.id Tool ID.\n\t * @param {number} tool.sortOrder Sort order.\n\t * @param {function} tool.componentFactory Tool component factory: function(ctrl, char) -> Component\n\t * @param {number} [tool.filter] Filter function: function(ctrl, char) -> bool\n\t * @param {number} [tool.className] Class to give to the list item container.\n\t * @param {string} [tool.type] Target type. May be 'header', or 'footer'. Defaults to 'header';\n\t * @returns {this}\n\t */\n\taddTool(tool) {\n\t\tif (this.tools.get(tool.id)) {\n\t\t\tthrow new Error(\"Tool ID already registered: \", tool.id);\n\t\t}\n\t\tthis.tools.add(tool);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Unregisters a previously registered tool.\n\t * @param {string} toolId Tool ID.\n\t * @returns {this}\n\t */\n\tremoveTool(toolId) {\n\t\tthis.tools.remove(toolId);\n\t\treturn this;\n\t}\n\n\tdispose() {\n\t\tthis.module.charPages.setDefaultPageFactory(null);\n\t}\n}\n\nexport default PageChar;\n","import { Elem, Txt } from 'modapp-base-component';\nimport { ModelTxt, ModelComponent } from 'modapp-resource-component';\nimport l10n from 'modapp-l10n';\nimport FAIcon from 'components/FAIcon';\nimport Collapser from 'components/Collapser';\n\nclass PageCharProfileProfileContent {\n\tconstructor(module, ctrl, profile, toggle, close) {\n\t\tthis.module = module;\n\t\tthis.ctrl = ctrl;\n\t\tthis.profile = profile;\n\t\tthis.toggle = toggle;\n\t\tthis.close = close;\n\t}\n\n\trender(el) {\n\t\tlet editProfile = new Elem(n => n.elem('div', { className: 'badge--select badge--select-margin' }, [\n\t\t\tn.elem('button', { className: 'iconbtn medium solid smallicon', events: {\n\t\t\t\tclick: (c, ev) => {\n\t\t\t\t\tthis._updateProfile();\n\t\t\t\t\tev.stopPropagation();\n\t\t\t\t},\n\t\t\t}}, [\n\t\t\t\tn.component(new FAIcon('refresh')),\n\t\t\t]),\n\t\t\tn.elem('button', { className: 'iconbtn medium solid smallicon', events: {\n\t\t\t\tclick: (c, ev) => {\n\t\t\t\t\tthis.module.pageEditCharProfile.open(this.ctrl, this.profile.id);\n\t\t\t\t\tev.stopPropagation();\n\t\t\t\t},\n\t\t\t}}, [\n\t\t\t\tn.component(new FAIcon('pencil')),\n\t\t\t]),\n\t\t]));\n\t\tthis.elem = new Elem(n => n.elem('div', [\n\t\t\tn.elem('div', { className: 'badge--select badge--margin badge--select-margin' }, [\n\t\t\t\tn.elem('button', { className: 'btn medium primary flex-1', events: {\n\t\t\t\t\tclick: (el, e) => {\n\t\t\t\t\t\tthis._useProfile();\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t},\n\t\t\t\t}}, [\n\t\t\t\t\tn.component(new FAIcon('user')),\n\t\t\t\t\tn.component(new Txt(l10n.l('pageCharProfile.apply', \"Apply\"))),\n\t\t\t\t]),\n\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\tthis.ctrl,\n\t\t\t\t\tnew Collapser(null, { horizontal: true }),\n\t\t\t\t\t(m, c) => c.setComponent(m.puppeteer ? null : editProfile),\n\t\t\t\t)),\n\t\t\t]),\n\t\t]));\n\t\treturn this.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n\n\t_updateProfile() {\n\t\tthis.module.confirm.open(() => this.module.updateProfile.updateProfile(this.ctrl, { profileId: this.profile.id })\n\t\t\t.catch(err => this.module.confirm.openError(err)),\n\t\t{\n\t\t\ttitle: l10n.l('pageCharProfile.confirmProfileUpdate', \"Confirm profile update\"),\n\t\t\tbody: new Elem(n => n.elem('div', [\n\t\t\t\tn.component(new Txt(l10n.l('pageCharProfile.profileUpdateBody', \"Do you really wish to overwrite the profile with the character's current appearance?\"), { tagName: 'p' })),\n\t\t\t\tn.elem('p', [ n.component(new ModelTxt(this.profile, m => m.name, { className: 'dialog--strong' })) ]),\n\t\t\t])),\n\t\t\tconfirm: l10n.l('pageCharProfile.update', \"Update\"),\n\t\t});\n\t}\n\n\t_useProfile() {\n\t\tthis.module.profile.profile(this.ctrl, { profileId: this.profile.id }, true)\n\t\t\t.then(applied => {\n\t\t\t\tif (applied) {\n\t\t\t\t\tthis.close();\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch(err => this.module.confirm.openError(err));\n\t}\n\n}\n\nexport default PageCharProfileProfileContent;\n","import { Elem } from 'modapp-base-component';\nimport { ModelComponent, ModelTxt } from 'modapp-resource-component';\nimport l10n from 'modapp-l10n';\nimport Collapser from 'components/Collapser';\nimport formatDateTime from 'utils/formatDateTime';\nimport PageCharProfileProfileContent from './PageCharProfileProfileContent';\n\nclass PageCharProfileProfile {\n\tconstructor(module, ctrl, profile, model, close) {\n\t\tthis.ctrl = ctrl;\n\t\tthis.profile = profile;\n\t\tthis.module = module;\n\t\tthis.model = model;\n\t\tthis.close = close;\n\t}\n\n\trender(el) {\n\t\tthis.elem = new ModelComponent(\n\t\t\tthis.model,\n\t\t\tnew Elem(n =>\n\t\t\t\tn.elem('div', { className: 'pagecharprofile-profile' }, [\n\t\t\t\t\tn.elem('btn', 'div', { className: 'badge btn large', events: {\n\t\t\t\t\t\tclick: () => this._toggleActions(),\n\t\t\t\t\t}}, [\n\t\t\t\t\t\tn.elem('div', { className: 'badge--select' }, [\n\t\t\t\t\t\t\tn.component(this.module.avatar.newCharImg(this.profile, { className: 'badge--icon' })),\n\t\t\t\t\t\t\tn.elem('div', { className: 'badge--info large' }, [\n\t\t\t\t\t\t\t\tn.elem('div', { className: 'pagecharprofile-profile--title badge--title badge--nowrap' }, [\n\t\t\t\t\t\t\t\t\tn.component(new ModelTxt(this.profile, p => p.name)),\n\t\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\t\tn.elem('div', { className: 'badge--strong badge--nowrap' }, [\n\t\t\t\t\t\t\t\t\tn.component(new ModelTxt(this.profile, p => p.lastUsed\n\t\t\t\t\t\t\t\t\t\t? l10n.l('pageCharProfile.lastUsed', \"Last used {time}\", { time: formatDateTime(new Date(p.lastUsed)) })\n\t\t\t\t\t\t\t\t\t\t: l10n.l('pageCharProfile.neverUsed', \"Never used\"),\n\t\t\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\t\tn.elem('div', { className: 'badge--text badge--nowrap' }, [\n\t\t\t\t\t\t\t\t\tn.component(new ModelTxt(this.profile, p => p.key)),\n\t\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t]),\n\t\t\t\t\t\tn.component('actions', new Collapser(null)),\n\t\t\t\t\t]),\n\t\t\t\t]),\n\t\t\t),\n\t\t\t(m, c, change) => {\n\t\t\t\tif (change && !change.hasOwnProperty('profileId')) return;\n\n\t\t\t\tc.getNode('actions').setComponent(m.profileId === this.profile.id\n\t\t\t\t\t? new PageCharProfileProfileContent(this.module, this.ctrl, this.profile, (show) => this._toggleActions(show), this.close)\n\t\t\t\t\t: null,\n\t\t\t\t);\n\t\t\t},\n\t\t);\n\t\treturn this.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n\n\t_toggleActions(show) {\n\t\tshow = typeof show == 'undefined'\n\t\t\t? !this.model.profileId || this.model.profileId != this.profile.id\n\t\t\t: !!show;\n\n\t\tthis.model.set({ profileId: show ? this.profile.id : null });\n\t}\n\n}\n\nexport default PageCharProfileProfile;\n","import { Elem, Txt } from 'modapp-base-component';\nimport { CollectionList, CollectionComponent, ModelComponent } from 'modapp-resource-component';\nimport { Model } from 'modapp-resource';\nimport l10n from 'modapp-l10n';\nimport Collapser from 'components/Collapser';\nimport FAIcon from 'components/FAIcon';\nimport PageCharProfileProfile from './PageCharProfileProfile';\n\nclass PageCharProfileComponent {\n\tconstructor(module, ctrl, state, close) {\n\t\tthis.module = module;\n\t\tthis.ctrl = ctrl;\n\t\tstate.profileId = state.profileId || null;\n\t\tthis.state = state;\n\t\tthis.close = close;\n\t\tthis.model = null;\n\n\t\t// Bind callbacks\n\t\tthis._onCreate = this._onCreate.bind(this);\n\t}\n\n\trender(el) {\n\t\tthis.model = new Model({ data: this.state, eventBus: this.module.self.app.eventBus });\n\t\tlet createProfile = new Elem(n => n.elem('div', { className: 'common--addpadding' }, [\n\t\t\tn.elem('button', { events: { click: this._onCreate }, className: 'btn icon-left common--addbtn' }, [\n\t\t\t\tn.component(new FAIcon('plus')),\n\t\t\t\tn.component(new Txt(l10n.l('pageCharProfile.createProfile', \"Create new profile\"))),\n\t\t\t]),\n\t\t]));\n\t\tthis.elem = new Elem(n => n.elem('div', { className: 'pagecharprofile' }, [\n\t\t\tn.component(new CollectionList(\n\t\t\t\tthis.ctrl.profiles,\n\t\t\t\tprofile => new PageCharProfileProfile(this.module, this.ctrl, profile, this.model, this.close),\n\t\t\t\t{ className: 'pagecharprofile--profiles' },\n\t\t\t)),\n\t\t\tn.component(new CollectionComponent(\n\t\t\t\tthis.ctrl.profiles,\n\t\t\t\tnew Collapser(),\n\t\t\t\t(col, c, ev) => c.setComponent(col.length\n\t\t\t\t\t? null\n\t\t\t\t\t: new Txt(l10n.l('pageCharProfile.noProfiles', \"There are no stored profiles\"), { className: 'common--nolistplaceholder' }),\n\t\t\t\t),\n\t\t\t)),\n\t\t\tn.component(new ModelComponent(\n\t\t\t\tthis.ctrl,\n\t\t\t\tnew Collapser(),\n\t\t\t\t(m, c) => c.setComponent(m.puppeteer ? null : createProfile),\n\t\t\t)),\n\t\t]));\n\t\tthis.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tObject.assign(this.state, this.model.props);\n\t\t\tthis.model = null;\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n\n\t_onCreate() {\n\t\tthis.module.createLimits.validateCharProfiles(this.ctrl, () => this.module.dialogCreateCharProfile.open(this.ctrl));\n\t}\n}\n\nexport default PageCharProfileComponent;\n","import { Elem } from 'modapp-base-component';\nimport FAIcon from 'components/FAIcon';\nimport l10n from 'modapp-l10n';\nimport PageCharProfileComponent from './PageCharProfileComponent';\nimport './pageCharProfile.scss';\n\n/**\n * PageCharProfile opens an page in the char panel listing the characters's profiles.\n */\nclass PageCharProfile {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\t\tthis.app.require([\n\t\t\t'charPages',\n\t\t\t'pageChar',\n\t\t\t'dialogCreateCharProfile',\n\t\t\t'avatar',\n\t\t\t'confirm',\n\t\t\t'profile',\n\t\t\t'updateProfile',\n\t\t\t'pageEditCharProfile',\n\t\t\t'createLimits',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\t\tthis.module.pageChar.addTool({\n\t\t\tid: 'profile',\n\t\t\tsortOrder: 20,\n\t\t\tcomponentFactory: (ctrl, char) => new Elem(n => n.elem('button', { className: 'iconbtn small', events: {\n\t\t\t\tclick: () => this.open(ctrl),\n\t\t\t}}, [\n\t\t\t\tn.component(new FAIcon('id-card-o')),\n\t\t\t])),\n\t\t\tfilter: (ctrl, char) => ctrl.id == char.id,\n\t\t});\n\t}\n\n\t/**\n\t * Opens an in-panel teleport char page in the char panel.\n\t * @param {*} ctrl Controlled char model.\n\t * @returns {function} Close function.\n\t */\n\topen(ctrl) {\n\t\treturn this.module.charPages.openPage(\n\t\t\tctrl.id,\n\t\t\tctrl.id,\n\t\t\t(ctrl, char, state, close) => ({\n\t\t\t\tcomponent: new PageCharProfileComponent(this.module, ctrl, state, close),\n\t\t\t\tonClose: close,\n\t\t\t\ttitle: l10n.l('pageCharProfile.characterProfiles', \"Character Profiles\"),\n\t\t\t}),\n\t\t);\n\t}\n\n\tdispose() {\n\t\tthis.module.pageChar.removeTool('profile');\n\t}\n}\n\nexport default PageCharProfile;\n","import { Elem, Txt } from 'modapp-base-component';\nimport { ModelTxt, ModelComponent } from 'modapp-resource-component';\nimport l10n from 'modapp-l10n';\nimport FAIcon from 'components/FAIcon';\nimport Collapser from 'components/Collapser';\nimport Fader from 'components/Fader';\nimport formatDateTime from 'utils/formatDateTime';\n\nclass PageCharSelectCharContent {\n\tconstructor(module, char, toggle, close) {\n\t\tthis.char = char;\n\t\tthis.module = module;\n\t\tthis.toggle = toggle;\n\t\tthis.close = close;\n\t}\n\n\trender(el) {\n\t\tlet o = {};\n\t\tlet actionFader = new Fader();\n\t\tlet wakeupComponent = new ModelComponent(\n\t\t\tthis.module.onboarding.getModel(),\n\t\t\tnew Elem(n => n.elem('div', { className: 'badge--select badge--margin' }, [\n\t\t\t\tn.elem('button', { className: 'btn medium primary flex-1', events: {\n\t\t\t\t\tclick: (el, e) => {\n\t\t\t\t\t\tthis._wakeupChar();\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t},\n\t\t\t\t}}, [\n\t\t\t\t\tn.component(new FAIcon('sign-in')),\n\t\t\t\t\tn.component(new ModelTxt(this.char, m => m.puppeteer\n\t\t\t\t\t\t? l10n.l('pageCharSelect.control', \"Control\")\n\t\t\t\t\t\t: l10n.l('pageCharSelect.wakeUp', \"Wake up\"),\n\t\t\t\t\t)),\n\t\t\t\t]),\n\t\t\t])),\n\t\t\t(m, c) => this._setTip(c, m),\n\t\t\t{ postrenderUpdate: true },\n\t\t);\n\n\t\tthis.elem = new Elem(n => n.elem('div', [\n\t\t\tn.elem('div', { className: 'badge--select badge--margin' }, [\n\t\t\t\tn.elem('button', { className: 'badge--faicon iconbtn medium solid', events: {\n\t\t\t\t\tclick: (c, ev) => {\n\t\t\t\t\t\tthis.module.pageCharSettings.open(this.char);\n\t\t\t\t\t\tev.stopPropagation();\n\t\t\t\t\t},\n\t\t\t\t}}, [\n\t\t\t\t\tn.component(new FAIcon('cog')),\n\t\t\t\t]),\n\t\t\t\tn.elem('div', { className: 'badge--info small' }, [\n\t\t\t\t\tn.component(new ModelTxt(\n\t\t\t\t\t\tthis.char,\n\t\t\t\t\t\tm => m.state == 'asleep'\n\t\t\t\t\t\t\t? l10n.l('pageCharSelect.lastAwake', \"Last awake\")\n\t\t\t\t\t\t\t: l10n.l('pageCharSelect.wokeUp', \"Woke up\"),\n\t\t\t\t\t\t{ tagName: 'div', className: 'badge--text' },\n\t\t\t\t\t)),\n\t\t\t\t\tn.component(new ModelTxt(\n\t\t\t\t\t\tthis.char,\n\t\t\t\t\t\tm => m.lastAwake\n\t\t\t\t\t\t\t? formatDateTime(new Date(m.lastAwake))\n\t\t\t\t\t\t\t: l10n.l('pageCharSelect.never', \"Never\"),\n\t\t\t\t\t\t{ tagName: 'div', className: 'badge--text' },\n\t\t\t\t\t)),\n\t\t\t\t]),\n\t\t\t]),\n\t\t\tn.component(new ModelComponent(\n\t\t\t\tthis.char,\n\t\t\t\tnew Collapser(),\n\t\t\t\t(m, c, change) => {\n\t\t\t\t\tlet action = null;\n\t\t\t\t\tif (m.suspended) {\n\t\t\t\t\t\taction = o.suspended || new Elem(n => n.elem('div', { className: 'badge--margin' }, [\n\t\t\t\t\t\t\tn.elem('div', { className: 'badge--select' }, [\n\t\t\t\t\t\t\t\tn.component(new Txt(l10n.l('pageCharSelect.suspended', \"Suspend\"), { className: 'badge--iconcol badge--subtitle' })),\n\t\t\t\t\t\t\t\tn.component(new ModelTxt(this.char, m => l10n.l('pageCharSelect.until', \"Until {time}\", { time: formatDateTime(new Date(m.suspended)) }), { className: 'badge--info badge--error' })),\n\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\tn.elem('div', { className: 'badge--select' }, [\n\t\t\t\t\t\t\t\tn.component(new Txt(l10n.l('pageCharSelect.reason', \"Reason\"), { className: 'badge--iconcol badge--subtitle' })),\n\t\t\t\t\t\t\t\tn.component(new ModelTxt(this.char, m => m.suspendReason, { className: 'badge--info badge--text' })),\n\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t]));\n\t\t\t\t\t\to.suspended = action;\n\t\t\t\t\t} else if (m.controller == 'bot') {\n\t\t\t\t\t\taction = o.release || new Elem(n => n.elem('div', { className: 'badge--select badge--margin' }, [\n\t\t\t\t\t\t\tn.elem('button', { className: 'btn medium primary flex-1', events: {\n\t\t\t\t\t\t\t\tclick: (el, e) => {\n\t\t\t\t\t\t\t\t\tthis._releaseChar();\n\t\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t}}, [\n\t\t\t\t\t\t\t\tn.component(new FAIcon('sign-out')),\n\t\t\t\t\t\t\t\tn.component(new ModelTxt(this.char, m => m.state != 'awake'\n\t\t\t\t\t\t\t\t\t? l10n.l('pageCharSelect.release', \"Release\")\n\t\t\t\t\t\t\t\t\t: l10n.l('pageCharSelect.sleep', \"Sleep\"),\n\t\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t]));\n\t\t\t\t\t\to.release = action;\n\n\t\t\t\t\t} else if (m.state == 'asleep' || m.puppeteer) {\n\t\t\t\t\t\taction = wakeupComponent;\n\t\t\t\t\t\to.wakeup = action;\n\t\t\t\t\t}\n\t\t\t\t\tactionFader.setComponent(action);\n\t\t\t\t\tc.setComponent(action ? actionFader : null);\n\t\t\t\t},\n\t\t\t)),\n\n\t\t]));\n\t\treturn this.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis._closeTip();\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n\n\t_wakeupChar() {\n\t\tlet controlled = this.module.player.getControlledChar(this.char.id);\n\t\tlet promise = controlled\n\t\t\t? Promise.resolve(controlled)\n\t\t\t: this.module.player.getPlayer().call('controlChar', { charId: this.char.id });\n\n\t\treturn promise\n\t\t\t.then(c => c.call('wakeup'))\n\t\t\t.then(() => {\n\t\t\t\tif (this.close) {\n\t\t\t\t\tthis.close();\n\t\t\t\t}\n\t\t\t\tthis.toggle(false);\n\t\t\t\tthis.module.player.setActiveChar(this.char.id);\n\t\t\t})\n\t\t\t.catch(err => this.module.confirm.openError(err));\n\t}\n\n\t_releaseChar() {\n\t\treturn this.module.player.getPlayer().call('releaseChar', { charId: this.char.id })\n\t\t\t.catch(err => this.module.confirm.openError(err));\n\t}\n\n\t_setTip(component, onboarding) {\n\t\tlet el = component.getElement();\n\n\t\t// To show the onboarding tip, check the conditions\n\t\tif (el && onboarding.wakeupChar) {\n\t\t\tthis._openTip(el);\n\t\t} else {\n\t\t\tthis._closeTip();\n\t\t}\n\t}\n\n\t_openTip(el) {\n\t\tthis.module.onboarding.openTip('pageCharSelectWakeup', el, {\n\t\t\tpriority: 20,\n\t\t\tposition: [ 'right', 'bottom' ],\n\t\t\ttitle: l10n.l('pageCharSelect.getStarted', \"Get started\"),\n\t\t\tcontent: l10n.l('pageCharSelect.clickWakeup', \"Click \\\"Wake up\\\" to start exploring a world of roleplay!\"),\n\t\t});\n\t}\n\n\t_closeTip() {\n\t\tthis.module.onboarding.closeTip('pageCharSelectWakeup');\n\t}\n\n}\n\nexport default PageCharSelectCharContent;\n","import { Elem } from 'modapp-base-component';\nimport { ModelComponent, ModelTxt } from 'modapp-resource-component';\nimport l10n from 'modapp-l10n';\nimport Collapser from 'components/Collapser';\nimport firstLetterUppercase from 'utils/firstLetterUppercase';\nimport PageCharSelectCharContent from './PageCharSelectCharContent';\nimport idleLevels, { getCharIdleLevel } from 'utils/idleLevels';\n\nclass PageCharSelectChar {\n\tconstructor(module, char, chars, model, close, puppeteer) {\n\t\tthis.char = char;\n\t\tthis.chars = chars;\n\t\tthis.module = module;\n\t\tthis.model = model;\n\t\tthis.close = close;\n\t\tthis.puppeteer = puppeteer || null;\n\t}\n\n\trender(el) {\n\t\tlet component = new Elem(n =>\n\t\t\tn.elem('div', { className: 'pagecharselect-char' }, [\n\t\t\t\tn.elem('btn', 'div', { className: 'badge btn large', events: {\n\t\t\t\t\tclick: () => this._toggleActions(),\n\t\t\t\t}}, [\n\t\t\t\t\tn.elem('div', { className: 'badge--select' }, [\n\t\t\t\t\t\tn.component(this.module.avatar.newAvatar(this.char, { className: 'badge--icon' })),\n\t\t\t\t\t\tn.elem('div', { className: 'badge--info large' }, [\n\t\t\t\t\t\t\tn.elem('fullname', 'div', { className: 'pagecharselect-char--title badge--title badge--nowrap' }, [\n\t\t\t\t\t\t\t\tn.component(new ModelTxt(this.char, c => c.name)),\n\t\t\t\t\t\t\t\tn.text(' '),\n\t\t\t\t\t\t\t\tn.component(new ModelTxt(this.char, c => c.surname)),\n\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\tn.elem('div', { className: 'badge--strong badge--nowrap' }, [\n\t\t\t\t\t\t\t\tn.component(new ModelTxt(this.char, p => firstLetterUppercase(p.gender))),\n\t\t\t\t\t\t\t\tn.text(' '),\n\t\t\t\t\t\t\t\tn.component(new ModelTxt(this.char, p => firstLetterUppercase(p.species))),\n\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\tn.elem('div', { className: 'badge--text badge--nowrap' }, [\n\t\t\t\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\t\t\t\tthis.char,\n\t\t\t\t\t\t\t\t\tnew ModelTxt(null, m => m && m.name),\n\t\t\t\t\t\t\t\t\t(m, c) => c.setModel(m.inRoom),\n\t\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t]),\n\t\t\t\t\t]),\n\t\t\t\t\tn.component('actions', new Collapser(null)),\n\t\t\t\t]),\n\t\t\t]),\n\t\t);\n\n\t\tlet onboarding = this.module.onboarding.getModel();\n\n\t\tthis.elem = new ModelComponent(\n\t\t\tonboarding,\n\t\t\tnew ModelComponent(\n\t\t\t\tthis.model,\n\t\t\t\tnew ModelComponent(\n\t\t\t\t\tthis.char,\n\t\t\t\t\tcomponent,\n\t\t\t\t\t(m, c) => {\n\t\t\t\t\t\tc[m.state !== 'asleep' ? 'addNodeClass' : 'removeNodeClass']('btn', 'inactive');\n\t\t\t\t\t\tc[m.type == 'puppet' ? 'addNodeClass' : 'removeNodeClass']('btn', 'highlight');\n\t\t\t\t\t\tc[m.suspended ? 'addClass' : 'removeClass']('suspended');\n\t\t\t\t\t\tlet lvl = getCharIdleLevel(m);\n\t\t\t\t\t\tfor (let l of idleLevels) {\n\t\t\t\t\t\t\tc[m.state != 'asleep' && l == lvl ? 'addNodeClass' : 'removeNodeClass']('fullname', l.className);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t\t(m, c, change) => {\n\t\t\t\t\tif (change && !change.hasOwnProperty('itemId')) return;\n\n\t\t\t\t\tc.getComponent().getNode('actions').setComponent(m.itemId === this.char.id\n\t\t\t\t\t\t? new PageCharSelectCharContent(this.module, this.char, (show) => this._toggleActions(show), this.close)\n\t\t\t\t\t\t: null,\n\t\t\t\t\t);\n\t\t\t\t\tif (change) {\n\t\t\t\t\t\tthis._setTip(component, onboarding);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t),\n\t\t\t(m, c) => this._setTip(component, onboarding),\n\t\t\t{ postrenderUpdate: true },\n\t\t);\n\t\treturn this.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis._closeTip();\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n\n\t_toggleActions(show) {\n\t\tshow = typeof show == 'undefined'\n\t\t\t? !this.model.itemId || this.model.itemId != this.char.id\n\t\t\t: !!show;\n\n\t\tthis.model.set({ itemId: show ? this.char.id : null });\n\t}\n\n\t_setTip(component, onboarding) {\n\t\tlet el = component.getElement();\n\n\t\t// To show the onboarding tip, all conditions must be fulfilled:\n\t\tif (el // We are rendered\n\t\t\t&& onboarding.wakeupChar // The step is to wakeup a character\n\t\t\t&& !this.model.itemId // No character is selected\n\t\t\t&& this.chars.length && this.chars.atIndex(0) == this.char // It is the first owned character\n\t\t) {\n\t\t\tthis._openTip(el);\n\t\t} else {\n\t\t\tthis._closeTip();\n\t\t}\n\t}\n\n\t_openTip(el) {\n\t\tthis.module.onboarding.openTip('pageCharSelectSelect', el, {\n\t\t\tpriority: 20,\n\t\t\tposition: [ 'right', 'bottom' ],\n\t\t\ttitle: l10n.l('pageCharSelect.getStarted', \"Get started\"),\n\t\t\tcontent: l10n.l('pageCharSelect.selectByClicking', \"You've got a new character! Click on the character to select it.\"),\n\t\t});\n\t}\n\n\t_closeTip() {\n\t\tthis.module.onboarding.closeTip('pageCharSelectSelect');\n\t}\n}\n\nexport default PageCharSelectChar;\n","import { Elem, Txt } from 'modapp-base-component';\nimport { ModelTxt, ModelComponent } from 'modapp-resource-component';\nimport l10n from 'modapp-l10n';\nimport FAIcon from 'components/FAIcon';\nimport Collapser from 'components/Collapser';\nimport formatDateTime from 'utils/formatDateTime';\n\nclass PageCharSelectPuppetContent {\n\tconstructor(module, puppeteer, toggle, close) {\n\t\tthis.puppeteer = puppeteer;\n\t\tthis.char = puppeteer.char;\n\t\tthis.puppet = puppeteer.puppet;\n\t\tthis.module = module;\n\t\tthis.toggle = toggle;\n\t\tthis.close = close;\n\t}\n\n\trender(el) {\n\t\tlet o = {};\n\t\tthis.elem = new ModelComponent(\n\t\t\tthis.puppeteer,\n\t\t\tnew ModelComponent(\n\t\t\t\tthis.puppet,\n\t\t\t\tnew ModelComponent(\n\t\t\t\t\tthis.char,\n\t\t\t\t\tnew Elem(n => n.elem('div', [\n\t\t\t\t\t\tn.elem('div', { className: 'badge--select badge--margin' }, [\n\t\t\t\t\t\t\tn.elem('button', { className: 'badge--faicon iconbtn medium darken', events: {\n\t\t\t\t\t\t\t\tclick: (c, ev) => {\n\t\t\t\t\t\t\t\t\tthis.module.pagePuppeteerSettings.open(this.puppeteer);\n\t\t\t\t\t\t\t\t\tev.stopPropagation();\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t}}, [\n\t\t\t\t\t\t\t\tn.component(new FAIcon('cog')),\n\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\tn.elem('div', { className: 'badge--info small' }, [\n\t\t\t\t\t\t\t\tn.component(new ModelTxt(\n\t\t\t\t\t\t\t\t\tthis.puppet,\n\t\t\t\t\t\t\t\t\tm => m.puppeteer && m.puppeteer.id == this.char.id\n\t\t\t\t\t\t\t\t\t\t? l10n.l('pageCharSelect.controlledSince', \"Controlled since\")\n\t\t\t\t\t\t\t\t\t\t: l10n.l('pageCharSelect.lastControlled', \"Last controlled\"),\n\t\t\t\t\t\t\t\t\t{ tagName: 'div', className: 'badge--text' },\n\t\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t\t\tn.component(new ModelTxt(\n\t\t\t\t\t\t\t\t\tthis.puppeteer,\n\t\t\t\t\t\t\t\t\tm => m.lastUsed\n\t\t\t\t\t\t\t\t\t\t? formatDateTime(new Date(m.lastUsed))\n\t\t\t\t\t\t\t\t\t\t: l10n.l('pageCharSelect.never', \"Never\"),\n\t\t\t\t\t\t\t\t\t{ tagName: 'div', className: 'badge--text' },\n\t\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t\t\tn.component('controlledBy', new ModelTxt(\n\t\t\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\t\t\tm => m ? '(' + (m.name + ' ' + m.surname).trim() + ')' : '',\n\t\t\t\t\t\t\t\t\t{ tagName: 'div', className: 'badge--text' },\n\t\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t]),\n\t\t\t\t\t\tn.component('action', new Collapser()),\n\t\t\t\t\t])),\n\t\t\t\t\t(m, c) => this._setAction(c, o),\n\t\t\t\t),\n\t\t\t\t(m, c) => {\n\t\t\t\t\tthis._setAction(c.getComponent(), o);\n\t\t\t\t\tc.getComponent().getNode('controlledBy').setModel(m.puppeteer && m.puppeteer.id != this.char.id ? m.puppeteer : null);\n\t\t\t\t},\n\t\t\t),\n\t\t\t(m, c) => this._setAction(c.getComponent().getComponent(), o),\n\t\t);\n\t\treturn this.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n\n\t_setAction(c, o) {\n\t\tlet action = null;\n\t\tif (this.char.suspended) {\n\t\t\taction = o.suspended || new Elem(n => n.elem('div', { className: 'badge--margin' }, [\n\t\t\t\tn.elem('div', { className: 'badge--select' }, [\n\t\t\t\t\tn.component(new Txt(l10n.l('pageCharSelect.suspended', \"Suspend\"), { className: 'badge--iconcol badge--subtitle' })),\n\t\t\t\t\tn.component(new ModelTxt(this.char, m => l10n.l('pageCharSelect.until', \"Until {time}\", { time: formatDateTime(new Date(m.suspended)) }), { className: 'badge--info badge--error' })),\n\t\t\t\t]),\n\t\t\t\tn.elem('div', { className: 'badge--select' }, [\n\t\t\t\t\tn.component(new Txt(l10n.l('pageCharSelect.reason', \"Reason\"), { className: 'badge--iconcol badge--subtitle' })),\n\t\t\t\t\tn.component(new ModelTxt(this.char, m => m.suspendReason, { className: 'badge--info badge--text' })),\n\t\t\t\t]),\n\t\t\t]));\n\t\t\to.suspended = action;\n\t\t} else {\n\t\t\tlet isControlling = this.puppet.puppeteer && this.puppet.puppeteer.id == this.char.id;\n\t\t\tlet reqStatus = this.puppeteer.requestStatus;\n\t\t\tif (!isControlling) {\n\t\t\t\tif (this.puppet.state != 'awake' || reqStatus == 'accepted') {\n\t\t\t\t\taction = o.wakeup || new Elem(n => n.elem('div', { className: 'badge--select badge--margin' }, [\n\t\t\t\t\t\tn.elem('button', { className: 'btn medium primary flex-1', events: {\n\t\t\t\t\t\t\tclick: (el, e) => {\n\t\t\t\t\t\t\t\tthis._wakeupPuppet();\n\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}}, [\n\t\t\t\t\t\t\tn.component(new FAIcon('sign-in')),\n\t\t\t\t\t\t\tn.component(new ModelTxt(this.puppet, m => this.puppet.state == 'awake'\n\t\t\t\t\t\t\t\t? l10n.l('pageCharSelect.control', \"Control\")\n\t\t\t\t\t\t\t\t: l10n.l('pageCharSelect.wakeUp', \"Wake up\"),\n\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t]),\n\t\t\t\t\t]));\n\t\t\t\t\to.wakeup = action;\n\t\t\t\t} else if (!reqStatus) {\n\t\t\t\t\taction = o.requestControl || new Elem(n => n.elem('div', { className: 'badge--select badge--margin' }, [\n\t\t\t\t\t\tn.elem('button', { className: 'btn medium primary flex-1', events: {\n\t\t\t\t\t\t\tclick: (el, e) => {\n\t\t\t\t\t\t\t\tthis._requestControl();\n\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}}, [\n\t\t\t\t\t\t\tn.component(new FAIcon('refresh')),\n\t\t\t\t\t\t\tn.component(new Txt(l10n.l('pageCharSelect.requestControl', \"Request control\"))),\n\t\t\t\t\t\t]),\n\t\t\t\t\t]));\n\t\t\t\t\to.requestControl = action;\n\t\t\t\t} else if (reqStatus == 'pending') {\n\t\t\t\t\taction = o.pending || new Elem(n => n.elem('div', { className: 'badge--margin' }, [\n\t\t\t\t\t\tn.elem('div', { className: 'badge--select' }, [\n\t\t\t\t\t\t\tn.component(new Txt(l10n.l('pageCharSelect.status', \"Status\"), { className: 'badge--iconcol badge--subtitle' })),\n\t\t\t\t\t\t\tn.component(new ModelTxt(this.char, m => l10n.l('pageCharSelect.pendingControlRequest', \"Pending control request\"), { className: 'badge--info badge--strong' })),\n\t\t\t\t\t\t]),\n\t\t\t\t\t]));\n\t\t\t\t\to.pending = action;\n\t\t\t\t} else if (reqStatus == 'rejected') {\n\t\t\t\t\taction = o.rejected || new Elem(n => n.elem('div', { className: 'badge--margin' }, [\n\t\t\t\t\t\tn.elem('div', { className: 'badge--select' }, [\n\t\t\t\t\t\t\tn.component(new Txt(l10n.l('pageCharSelect.status', \"Status\"), { className: 'badge--iconcol badge--subtitle' })),\n\t\t\t\t\t\t\tn.component(new ModelTxt(this.char, m => l10n.l('pageCharSelect.rejected', \"Control request denied\"), { className: 'badge--info badge--error' })),\n\t\t\t\t\t\t]),\n\t\t\t\t\t\tn.component(this.puppeteer.requestAnswer\n\t\t\t\t\t\t\t? new Elem(n => n.elem('div', { className: 'badge--select' }, [\n\t\t\t\t\t\t\t\tn.component(new Txt(l10n.l('pageCharSelect.reason', \"Reason\"), { className: 'badge--iconcol badge--subtitle' })),\n\t\t\t\t\t\t\t\tn.component(new Txt(this.puppeteer.requestAnswer, { className: 'badge--info badge--text' })),\n\t\t\t\t\t\t\t]))\n\t\t\t\t\t\t\t: null,\n\t\t\t\t\t\t),\n\t\t\t\t\t]));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tc.getNode('action').setComponent(action);\n\t}\n\n\t_wakeupPuppet() {\n\t\tlet controlled = this.module.player.getControlledChar(this.puppet.id);\n\t\treturn (controlled && this.puppet.puppeteer == this.char.id\n\t\t\t? Promise.resolve(controlled)\n\t\t\t: this.module.player.getPlayer().call('controlPuppet', { charId: this.char.id, puppetId: this.puppet.id })\n\t\t)\n\t\t\t.then(c => c.call('wakeup'))\n\t\t\t.then(() => {\n\t\t\t\tif (this.close) {\n\t\t\t\t\tthis.close();\n\t\t\t\t}\n\t\t\t\tthis.toggle(false);\n\t\t\t\tthis.module.player.setActiveChar(this.puppet.id);\n\t\t\t})\n\t\t\t.catch(err => this.module.confirm.openError(err));\n\t}\n\n\t_requestControl() {\n\t\treturn this.module.dialogRequestControl.open(this.puppeteer);\n\t}\n\n}\n\nexport default PageCharSelectPuppetContent;\n","import { Elem, Txt } from 'modapp-base-component';\nimport { ModelComponent, ModelTxt } from 'modapp-resource-component';\nimport Collapser from 'components/Collapser';\nimport firstLetterUppercase from 'utils/firstLetterUppercase';\nimport PageCharSelectPuppetContent from './PageCharSelectPuppetContent';\nimport idleLevels from 'utils/idleLevels';\n\nclass PageCharSelectPuppet {\n\tconstructor(module, puppeteer, model, close) {\n\t\tthis.puppeteer = puppeteer;\n\t\tthis.puppet = puppeteer.puppet;\n\t\tthis.module = module;\n\t\tthis.model = model;\n\t\tthis.close = close;\n\t\tthis.itemId = this.puppet.id + '_' + this.puppeteer.char.id;\n\t}\n\n\trender(el) {\n\t\tthis.elem = new ModelComponent(\n\t\t\tthis.model,\n\t\t\tnew ModelComponent(\n\t\t\t\tthis.puppet,\n\t\t\t\tnew Elem(n =>\n\t\t\t\t\tn.elem('div', { className: 'pagecharselect-puppet' }, [\n\t\t\t\t\t\tn.elem('btn', 'div', { className: 'pagecharselect-puppet--btn badge btn large highlight', events: {\n\t\t\t\t\t\t\tclick: () => this._toggleActions(),\n\t\t\t\t\t\t}}, [\n\t\t\t\t\t\t\tn.elem('div', { className: 'badge--select' }, [\n\t\t\t\t\t\t\t\tn.component(this.module.avatar.newAvatar(this.puppet, { className: 'badge--icon' })),\n\t\t\t\t\t\t\t\tn.elem('div', { className: 'badge--info large' }, [\n\t\t\t\t\t\t\t\t\tn.elem('fullname', 'div', { className: 'pagecharselect-puppet--title badge--title badge--nowrap' }, [\n\t\t\t\t\t\t\t\t\t\tn.component(new ModelTxt(this.puppet, c => c.name)),\n\t\t\t\t\t\t\t\t\t\tn.text(' '),\n\t\t\t\t\t\t\t\t\t\tn.component(new ModelTxt(this.puppet, c => c.surname)),\n\t\t\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\t\t\tn.elem('div', { className: 'badge--strong badge--nowrap' }, [\n\t\t\t\t\t\t\t\t\t\tn.component(new ModelTxt(this.puppet, p => firstLetterUppercase(p.gender))),\n\t\t\t\t\t\t\t\t\t\tn.text(' '),\n\t\t\t\t\t\t\t\t\t\tn.component(new ModelTxt(this.puppet, p => firstLetterUppercase(p.species))),\n\t\t\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\t\t\t\t\tthis.puppeteer.char,\n\t\t\t\t\t\t\t\t\t\tnew Elem(n => n.elem('div', { className: 'badge--text badge--nowrap' }, [\n\t\t\t\t\t\t\t\t\t\t\tn.component('name', new Txt()),\n\t\t\t\t\t\t\t\t\t\t\tn.text(' '),\n\t\t\t\t\t\t\t\t\t\t\tn.component('surname', new Txt()),\n\t\t\t\t\t\t\t\t\t\t])),\n\t\t\t\t\t\t\t\t\t\t(m, c) => {\n\t\t\t\t\t\t\t\t\t\t\tc[m.suspended ? 'addClass' : 'removeClass']('suspended');\n\t\t\t\t\t\t\t\t\t\t\tc.getNode('name').setText(m.name);\n\t\t\t\t\t\t\t\t\t\t\tc.getNode('surname').setText(m.surname);\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\tn.component('actions', new Collapser(null)),\n\t\t\t\t\t\t]),\n\t\t\t\t\t]),\n\t\t\t\t),\n\t\t\t\t(m, c) => {\n\t\t\t\t\tc[m.state !== 'asleep' ? 'addNodeClass' : 'removeNodeClass']('btn', 'inactive');\n\t\t\t\t\tfor (let i = 0; i < idleLevels.length; i++) {\n\t\t\t\t\t\tlet lvl = idleLevels[i];\n\t\t\t\t\t\tc[m.state != 'asleep' && i == m.idle ? 'addNodeClass' : 'removeNodeClass']('fullname', lvl.className);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t),\n\t\t\t(m, c, change) => {\n\t\t\t\tif (change && !change.hasOwnProperty('itemId')) return;\n\n\t\t\t\tlet isOpen = m.itemId === this.itemId;\n\t\t\t\tc.getComponent()[isOpen ? 'addNodeClass' : 'removeNodeClass']('btn', 'open');\n\t\t\t\tc.getComponent().getNode('actions').setComponent(isOpen\n\t\t\t\t\t? new PageCharSelectPuppetContent(this.module, this.puppeteer, (show) => this._toggleActions(show), this.close)\n\t\t\t\t\t: null,\n\t\t\t\t);\n\t\t\t},\n\t\t);\n\t\treturn this.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n\n\t_toggleActions(show) {\n\t\tshow = typeof show == 'undefined'\n\t\t\t? !this.model.itemId || this.model.itemId != this.itemId\n\t\t\t: !!show;\n\n\t\tthis.model.set({ itemId: show ? this.itemId : null });\n\t}\n\n}\n\nexport default PageCharSelectPuppet;\n","import { Elem, Txt } from 'modapp-base-component';\nimport { CollectionList, CollectionComponent, ModelComponent } from 'modapp-resource-component';\nimport { Model } from 'modapp-resource';\nimport l10n from 'modapp-l10n';\nimport FAIcon from 'components/FAIcon';\nimport PanelSection from 'components/PanelSection';\nimport Collapser from 'components/Collapser';\nimport PageCharSelectChar from './PageCharSelectChar';\nimport PageCharSelectPuppet from './PageCharSelectPuppet';\n\nclass PageCharSelectComponent {\n\tconstructor(module, state, close) {\n\t\tthis.module = module;\n\t\tstate.itemId = state.itemId || null;\n\t\tthis.state = state;\n\t\tthis.close = close;\n\t\tthis.model = null;\n\t}\n\n\trender(el) {\n\t\tthis.model = new Model({ data: this.state, eventBus: this.module.self.app.eventBus });\n\t\tlet puppetsComponent = new PanelSection(\n\t\t\tl10n.l('pageCharSelect.puppets', \"Puppets\"),\n\t\t\tnew CollectionList(\n\t\t\t\tthis.module.player.getPuppets(),\n\t\t\t\tm => new PageCharSelectPuppet(this.module, m, this.model, this.close),\n\t\t\t\t{ className: 'pagecharselect--puppets' },\n\t\t\t),\n\t\t\t{\n\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t},\n\t\t);\n\n\t\tlet chars = this.module.player.getChars();\n\t\tthis.elem = new Elem(n => n.elem('div', { className: 'pagecharselect' }, [\n\t\t\tn.component(new CollectionList(\n\t\t\t\tchars,\n\t\t\t\tchar => new PageCharSelectChar(this.module, char, chars, this.model, this.close),\n\t\t\t\t{ className: 'pagecharselect--chars' },\n\t\t\t)),\n\t\t\tn.elem('div', { className: 'pagecharselect--add' }, [\n\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\tthis.module.onboarding.getModel(),\n\t\t\t\t\tnew Elem(n => n.elem('add', 'button', { events: { click: () => this._onCreate() }, className: 'btn icon-left' }, [\n\t\t\t\t\t\tn.component(new FAIcon('plus')),\n\t\t\t\t\t\tn.component(new Txt(l10n.l('pageCharSelect.createNew', \"Create New\"))),\n\t\t\t\t\t])),\n\t\t\t\t\t(m, c) => m.createChar\n\t\t\t\t\t\t? this._openTip(c.getElement())\n\t\t\t\t\t\t: this._closeTip(),\n\t\t\t\t\t{ postrenderUpdate: true },\n\t\t\t\t)),\n\t\t\t]),\n\t\t\tn.component(new CollectionComponent(\n\t\t\t\tthis.module.player.getPuppets(),\n\t\t\t\tnew Collapser(),\n\t\t\t\t(col, c) => c.setComponent(col.length\n\t\t\t\t\t? puppetsComponent\n\t\t\t\t\t: null,\n\t\t\t\t),\n\t\t\t)),\n\t\t]));\n\n\t\treturn this.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis._closeTip(),\n\t\t\tObject.assign(this.state, this.model.props);\n\t\t\tthis.model = null;\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n\n\t_onCreate() {\n\t\tthis.module.createLimits.validateOwnedChars(() => this.module.dialogCreateChar.open());\n\t}\n\n\t_openTip(el) {\n\t\tthis.module.onboarding.openTip('pageCharCreateNew', el, {\n\t\t\tpriority: 20,\n\t\t\tposition: [ 'right', 'bottom' ],\n\t\t\ttitle: l10n.l('pageCharSelect.getStarted', \"Get started\"),\n\t\t\tcontent: l10n.l('pageCharSelect.clickCreateNew', \"You have no characters yet. Click \\\"Create New\\\" to create your first.\"),\n\t\t});\n\t}\n\n\t_closeTip() {\n\t\tthis.module.onboarding.closeTip('pageCharCreateNew');\n\t}\n}\n\nexport default PageCharSelectComponent;\n","import { Elem } from 'modapp-base-component';\nimport l10n from 'modapp-l10n';\nimport FAIcon from 'components/FAIcon';\nimport PageCharSelectComponent from './PageCharSelectComponent';\nimport './pageCharSelect.scss';\n\n/**\n * PageCharSelect draws player panel.\n */\nclass PageCharSelect {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\t// Bind callbacks\n\t\tthis._openOnNoControl = this._openOnNoControl.bind(this);\n\t\tthis._onPlayerChange = this._onPlayerChange.bind(this);\n\n\t\tthis.app.require([\n\t\t\t'playerTabs',\n\t\t\t'player',\n\t\t\t'dialogCreateChar',\n\t\t\t'confirm',\n\t\t\t'auth',\n\t\t\t'pageCharSettings',\n\t\t\t'pagePuppeteerSettings',\n\t\t\t'avatar',\n\t\t\t'dialogRequestControl',\n\t\t\t'screen',\n\t\t\t'createLimits',\n\t\t\t'onboarding',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\n\t\t// Add charSelect player tab\n\t\tthis.module.playerTabs.addTab({\n\t\t\tid: 'charSelect',\n\t\t\tsortOrder: 5,\n\t\t\ttabFactory: click => new Elem(n => n.elem('button', { className: 'iconbtn medium light', events: {\n\t\t\t\tclick: (c, e) => {\n\t\t\t\t\tclick();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t},\n\t\t\t}}, [\n\t\t\t\tn.component(new FAIcon('user-plus')),\n\t\t\t])),\n\t\t\tfactory: (state, close, layoutId) => ({\n\t\t\t\tcomponent: new PageCharSelectComponent(this.module, state, close),\n\t\t\t\ttitle: l10n.l('pageCharSelect.characterSelect', \"Character Select\"),\n\t\t\t}),\n\t\t});\n\n\t\tthis._setListeners(true);\n\t\tthis._openOnNoControl();\n\t}\n\n\t/**\n\t * Opens an in-panel char select page in the player panel.\n\t * @param {bool} reset Flag if the tab should be reset to show the default page. Defaults to false.\n\t * @returns {function} Close function.\n\t */\n\topen(reset) {\n\t\treturn this.module.playerTabs.openTab('charSelect', reset);\n\t}\n\n\t_setListeners(on) {\n\t\tlet p = this.module.player;\n\t\tlet cb = on ? 'on' : 'off';\n\t\tp[cb]('ctrlRemove', this._openOnNoControl);\n\t\tp.getModel()[cb]('change', this._onPlayerChange);\n\t}\n\n\t_onPlayerChange(change) {\n\t\tif (change.hasOwnProperty('player')) {\n\t\t\tthis._openOnNoControl();\n\t\t}\n\t}\n\n\t_openOnNoControl() {\n\t\tlet ctrls = this.module.player.getControlled();\n\t\tif (!ctrls || ctrls.length) return;\n\n\t\tthis.open(true);\n\t}\n\n\tdispose() {\n\t\tthis._setListeners(false);\n\t\tthis.module.playerTabs.removeTab('charSelect');\n\t}\n}\n\nexport default PageCharSelect;\n","import { Context, Elem, Txt } from 'modapp-base-component';\nimport { ModelTxt, ModelComponent, CollectionComponent, CollectionList } from 'modapp-resource-component';\nimport { ModifyModel, CollectionWrapper } from 'modapp-resource';\nimport l10n from 'modapp-l10n';\nimport Collapser from 'components/Collapser';\nimport FAIcon from 'components/FAIcon';\n\nclass PageCharSettingsComponent {\n\tconstructor(module, char, charSettings, state, close) {\n\t\tstate.changes = state.changes || {};\n\n\t\tthis.module = module;\n\t\tthis.char = char;\n\t\tthis.charSettings = charSettings;\n\t\tthis.state = state;\n\t\tthis.close = close;\n\t}\n\n\trender(el) {\n\t\tthis.model = new ModifyModel(this.ctrl, {\n\t\t\tprops: this.state.changes,\n\t\t\teventBus: this.module.self.app.eventBus,\n\t\t});\n\t\tthis.elem = new CollectionComponent(\n\t\t\tthis.module.player.getChars(),\n\t\t\tnew Elem(n => n.elem('div', { className: 'pagecharsettings' }, [\n\t\t\t\tn.elem('div', { className: 'common--sectionpadding' }, [\n\t\t\t\t\tn.component(new ModelTxt(this.char, m => (m.name + \" \" + m.surname).trim(), { tagName: 'div', className: 'pagecharsettings--name' })),\n\t\t\t\t\tn.component(new Context(\n\t\t\t\t\t\t() => new CollectionWrapper(this.module.self.getTools(), {\n\t\t\t\t\t\t\tfilter: t => t.type == 'topSection',\n\t\t\t\t\t\t}),\n\t\t\t\t\t\ttools => tools.dispose(),\n\t\t\t\t\t\ttools => new CollectionList(\n\t\t\t\t\t\t\ttools,\n\t\t\t\t\t\t\tt => t.componentFactory(this.char, this.charSettings, this.state),\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tsubClassName: t => t.className || null,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t),\n\t\t\t\t\t)),\n\t\t\t\t]),\n\t\t\t\tn.component(new Context(\n\t\t\t\t\t() => new CollectionWrapper(this.module.self.getTools(), {\n\t\t\t\t\t\tfilter: t => t.type == 'sections',\n\t\t\t\t\t}),\n\t\t\t\t\ttools => tools.dispose(),\n\t\t\t\t\ttools => new CollectionList(\n\t\t\t\t\t\ttools,\n\t\t\t\t\t\tt => t.componentFactory(this.char, this.charSettings, this.state),\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tsubClassName: t => t.className || null,\n\t\t\t\t\t\t},\n\t\t\t\t\t),\n\t\t\t\t)),\n\t\t\t\tn.component('message', new Collapser(null)),\n\t\t\t\tn.elem('div', { className: 'pad-top-xl flex-row margin8 flex-end' }, [\n\t\t\t\t\tn.elem('div', { className: 'flex-1' }, [\n\t\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\t\tthis.model,\n\t\t\t\t\t\t\tnew Elem(n => n.elem('update', 'button', { events: {\n\t\t\t\t\t\t\t\tclick: () => this._save(this.model),\n\t\t\t\t\t\t\t}, className: 'btn primary flex-1' }, [\n\t\t\t\t\t\t\t\tn.component('text', new Txt()),\n\t\t\t\t\t\t\t])),\n\t\t\t\t\t\t\t(m, c) => c.getNode('text').setText(m.isModified\n\t\t\t\t\t\t\t\t? l10n.l('pageCharSettings.update', \"Save edits\")\n\t\t\t\t\t\t\t\t: l10n.l('pageCharSettings.close', \"Close\"),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t)),\n\t\t\t\t\t]),\n\t\t\t\t\tn.elem('button', { events: {\n\t\t\t\t\t\tclick: () => this.module.dialogDeleteChar.open(this.char),\n\t\t\t\t\t}, className: 'iconbtn medium light' }, [\n\t\t\t\t\t\tn.component(new FAIcon('trash')),\n\t\t\t\t\t]),\n\t\t\t\t]),\n\t\t\t])),\n\t\t\t(col, c) => {\n\t\t\t\t// Close if we no longer own the char\n\t\t\t\tfor (var char of col) {\n\t\t\t\t\tif (char.id === this.char.id) return;\n\t\t\t\t}\n\t\t\t\tsetTimeout(() => this.close(), 0);\n\t\t\t},\n\t\t);\n\t\tthis.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t\tif (this.model) {\n\t\t\tthis.state.changes = this.model.getModifications() || {};\n\t\t\tthis.model.dispose();\n\t\t\tthis.model = null;\n\t\t}\n\t}\n\n\t_save(model) {\n\t\tlet change = model.getModifications();\n\t\tlet p = change && Object.keys(change)\n\t\t\t? Promise.reject(\"Not implemented\")\n\t\t\t: Promise.resolve();\n\n\t\treturn p.then(() => {\n\t\t\tthis._close();\n\t\t}).catch(err => {\n\t\t\tthis._setMessage(l10n.l(err.code, err.message, err.data));\n\t\t});\n\t}\n\n\t_setMessage(msg) {\n\t\tif (!this.elem) return;\n\t\tthis.elem.getNode('message').setComponent(msg\n\t\t\t? new Txt(msg, { className: 'dialog--error' })\n\t\t\t: null,\n\t\t);\n\t}\n\n\t_close() {\n\t\tthis.close();\n\t\tif (this.model) {\n\t\t\tthis.model.dispose();\n\t\t\tthis.model = null;\n\t\t}\n\t\tthis.state.changes = {};\n\t}\n}\n\nexport default PageCharSettingsComponent;\n","import { Collection, sortOrderCompare } from 'modapp-resource';\nimport l10n from 'modapp-l10n';\nimport PageCharSettingsComponent from './PageCharSettingsComponent';\nimport './pageCharSettings.scss';\n\n/**\n * PageCharSettings draws player panel.\n */\nclass PageCharSettings {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'api',\n\t\t\t'playerTabs',\n\t\t\t'confirm',\n\t\t\t'dialogDeleteChar',\n\t\t\t'player',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\t\tthis.charPages = {};\n\n\t\tthis.tools = new Collection({\n\t\t\tidAttribute: m => m.id,\n\t\t\tcompare: sortOrderCompare,\n\t\t\teventBus: this.app.eventBus,\n\t\t});\n\t}\n\n\t/**\n\t * Gets a collection of tools.\n\t * @returns {Collection} Collection of tools.\n\t */\n\tgetTools() {\n\t\treturn this.tools;\n\t}\n\n\t/**\n\t * Registers a settings component tool.\n\t * @param {object} tool Tool object\n\t * @param {string} tool.id Tool ID.\n\t * @param {number} tool.sortOrder Sort order.\n\t * @param {function} tool.componentFactory Tool component factory: function(char, charSettings, state) -> Component\n\t * @param {string} [tool.type] Target type. May be 'preference' or 'section'. Defaults to 'preference';\n\t * @param {number} [tool.className] Class to give to the list item container.\n\t * @returns {this}\n\t */\n\taddTool(tool) {\n\t\tif (this.tools.get(tool.id)) {\n\t\t\tthrow new Error(\"Tool ID already registered: \", tool.id);\n\t\t}\n\t\tthis.tools.add(tool);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Unregisters a previously registered tool.\n\t * @param {string} toolId Tool ID.\n\t * @returns {this}\n\t */\n\tremoveTool(toolId) {\n\t\tthis.tools.remove(toolId);\n\t\treturn this;\n\t}\n\n\n\t/**\n\t * Opens an in-panel char settings page in the player panel.\n\t * @param {Model} char Char to edit settings for.\n\t * @returns {Promise.<function>} Promise of a close function.\n\t */\n\topen(char) {\n\t\tif (this.charPages[char.id]) {\n\t\t\tthrow new Error(\"Char settings page already open\");\n\t\t}\n\n\t\tlet d = {};\n\t\tthis.charPages[char.id] = d;\n\n\t\tlet close = this.module.playerTabs.openTabPage(\n\t\t\t'charSelect',\n\t\t\t'charSettings_' + char.id,\n\t\t\t(state, close) => ({\n\t\t\t\tcomponent: new PageCharSettingsComponent(this.module, char, char.settings, state, close),\n\t\t\t\ttitle: l10n.l('pageCharSettings.characterSettings', \"Character Settings\"),\n\t\t\t}),\n\t\t\t{\n\t\t\t\tonClose: () => this._onClose(char),\n\t\t\t},\n\t\t);\n\n\t\td.close = close;\n\n\t\treturn close;\n\t}\n\n\t/**\n\t * Closes an in-panel char settings page.\n\t * @param {string} charId Char ID.\n\t */\n\tclose(charId) {\n\t\tlet d = this.charPages[charId];\n\t\tif (d) {\n\t\t\td.close();\n\t\t}\n\t}\n\n\t_onClose(char) {\n\t\tlet d = this.charPages[char.id];\n\t\tif (d) {\n\t\t\tdelete this.charPages[char.id];\n\t\t}\n\t}\n}\n\nexport default PageCharSettings;\n","import { Elem, Txt, Input, Textarea } from 'modapp-base-component';\nimport { ModelComponent, ModelTxt } from 'modapp-resource-component';\nimport { ModifyModel } from 'modapp-resource';\nimport l10n from 'modapp-l10n';\nimport Collapser from 'components/Collapser';\nimport FAIcon from 'components/FAIcon';\nimport FileButton from 'components/FileButton';\nimport Img from 'components/Img';\nimport PanelSection from 'components/PanelSection';\nimport LabelToggleBox from 'components/LabelToggleBox';\nimport ImgModal from 'classes/ImgModal';\n\nconst txtUpdate = l10n.l('pageEditArea.update', \"Save edits\");\nconst txtClose = l10n.l('pageEditArea.close', \"Close\");\n\n/**\n * PageEditAreaComponent renders an area edit page.\n */\nclass PageEditAreaComponent {\n\tconstructor(module, ctrl, area, areaSettings, state, close) {\n\t\tstate.changes = state.changes || {};\n\n\t\tthis.module = module;\n\t\tthis.ctrl = ctrl;\n\t\tthis.area = area;\n\t\tthis.areaSettings = areaSettings;\n\t\tthis.state = state;\n\t\tthis.close = close;\n\t}\n\n\trender(el) {\n\t\tlet eventBus = this.module.self.app.eventBus;\n\t\tthis.model = new ModifyModel(this.area, {\n\t\t\tprops: this.state.changes,\n\t\t\teventBus,\n\t\t});\n\t\tthis.settingsModel = new ModifyModel(this.areaSettings, {\n\t\t\tprops: this.state.settingsChanges,\n\t\t\teventBus,\n\t\t});\n\t\tthis.elem = new Elem(n => n.elem('div', { className: 'pageeditarea' }, [\n\t\t\tn.component(new PanelSection(\n\t\t\t\tl10n.l('pageEditArea.mapImage', \"Map Image\"),\n\t\t\t\tnew Elem(n => n.elem('div', { className: 'flex-row flex-stretch pad8' }, [\n\t\t\t\t\tn.elem('div', { className: 'flex-1' }, [\n\t\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\t\tthis.area,\n\t\t\t\t\t\t\tnew Img('', { className: 'pageeditarea--image', events: {\n\t\t\t\t\t\t\t\tclick: c => {\n\t\t\t\t\t\t\t\t\tif (!c.hasClass('placeholder')) {\n\t\t\t\t\t\t\t\t\t\tnew ImgModal(this.area.image.href).open();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t}}),\n\t\t\t\t\t\t\t(m, c, changed) => {\n\t\t\t\t\t\t\t\tc.setSrc(m.image ? m.image.href + '?thumb=xl' : '/img/area-l.png');\n\t\t\t\t\t\t\t\tc[m.image ? 'removeClass' : 'addClass']('placeholder');\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t)),\n\t\t\t\t\t]),\n\t\t\t\t\tn.elem('div', { className: 'pageeditarea--imagebtn flex-1' }, [\n\t\t\t\t\t\tn.component(new FileButton(\n\t\t\t\t\t\t\tnew Elem(n => n.elem('div', [\n\t\t\t\t\t\t\t\tn.component(new FAIcon('camera')),\n\t\t\t\t\t\t\t\tn.component(new Txt(l10n.l('pageEditArea.upload', \"Upload\"))),\n\t\t\t\t\t\t\t])),\n\t\t\t\t\t\t\t(file) => this.module.createLimits.validateImageSize(\n\t\t\t\t\t\t\t\tfile.size,\n\t\t\t\t\t\t\t\t() => this._setAreaImage(file),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tclassName: 'btn medium icon-left',\n\t\t\t\t\t\t\t\tnoFileReader: true,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t)),\n\t\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\t\tthis.area,\n\t\t\t\t\t\t\tnew Elem(n => n.elem('button', {\n\t\t\t\t\t\t\t\tclassName: 'btn medium icon-left',\n\t\t\t\t\t\t\t\tevents: {\n\t\t\t\t\t\t\t\t\tclick: () => this.module.confirm.open(() => this._deleteAreaImage(), {\n\t\t\t\t\t\t\t\t\t\ttitle: l10n.l('pageEditArea.confirmDelete', \"Confirm deletion\"),\n\t\t\t\t\t\t\t\t\t\tbody: l10n.l('pageEditArea.deleteImageBody', \"Do you really wish to delete the area map image?\"),\n\t\t\t\t\t\t\t\t\t\tconfirm: l10n.l('pageEditArea.delete', \"Delete\"),\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t}, [\n\t\t\t\t\t\t\t\tn.component(new FAIcon('trash')),\n\t\t\t\t\t\t\t\tn.component(new Txt(l10n.l('pageEditArea.delete', \"Delete\"))),\n\t\t\t\t\t\t\t])),\n\t\t\t\t\t\t\t(m, c) => c.setProperty('disabled', m.image ? null : 'disabled'),\n\t\t\t\t\t\t)),\n\t\t\t\t\t]),\n\t\t\t\t])),\n\t\t\t\t{\n\t\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\t\tnoToggle: true,\n\t\t\t\t},\n\t\t\t)),\n\t\t\tn.component(new PanelSection(\n\t\t\t\tl10n.l('pageEditArea.area', \"Area name\"),\n\t\t\t\tnew ModelComponent(\n\t\t\t\t\tthis.model,\n\t\t\t\t\tnew Input(this.model.name, {\n\t\t\t\t\t\tevents: { input: c => this.model.set({ name: c.getValue() }) },\n\t\t\t\t\t\tattributes: { spellcheck: 'false' },\n\t\t\t\t\t}),\n\t\t\t\t\t(m, c) => c.setValue(m.name),\n\t\t\t\t),\n\t\t\t\t{\n\t\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\t\tnoToggle: true,\n\t\t\t\t},\n\t\t\t)),\n\t\t\tn.component(new PanelSection(\n\t\t\t\tl10n.l('pageEditArea.shortDesc', \"Short description\"),\n\t\t\t\tnew ModelComponent(\n\t\t\t\t\tthis.model,\n\t\t\t\t\tnew Textarea(this.model.shortDesc, {\n\t\t\t\t\t\tclassName: 'common--paneltextarea-small common--desc-size',\n\t\t\t\t\t\tevents: { input: c => this.model.set({ shortDesc: c.getValue() }) },\n\t\t\t\t\t}),\n\t\t\t\t\t(m, c) => c.setValue(m.shortDesc),\n\t\t\t\t),\n\t\t\t\t{\n\t\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\t\tnoToggle: true,\n\t\t\t\t\tpopupTip: l10n.l('pageEditArea.shortDescInfo', \"Short description of the area, shown in area listings.\"),\n\t\t\t\t},\n\t\t\t)),\n\t\t\tn.component(new PanelSection(\n\t\t\t\tl10n.l('pageEditArea.about', \"About\"),\n\t\t\t\tnew ModelComponent(\n\t\t\t\t\tthis.model,\n\t\t\t\t\tnew Textarea(this.model.about, {\n\t\t\t\t\t\tclassName: 'common--paneltextarea common--desc-size',\n\t\t\t\t\t\tevents: { input: c => this.model.set({ about: c.getValue() }) },\n\t\t\t\t\t}),\n\t\t\t\t\t(m, c) => c.setValue(m.about),\n\t\t\t\t),\n\t\t\t\t{\n\t\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\t\tnoToggle: true,\n\t\t\t\t\tpopupTip: l10n.l('pageEditArea.aboutInfo', \"Information about the area, such as setting and purpose. It may be formatted and span multiple paragraphs.\"),\n\t\t\t\t},\n\t\t\t)),\n\t\t\tn.component(new PanelSection(\n\t\t\t\tl10n.l('pageEditArea.rules', \"Rules\"),\n\t\t\t\tnew ModelComponent(\n\t\t\t\t\tthis.model,\n\t\t\t\t\tnew Textarea(this.model.rules, {\n\t\t\t\t\t\tclassName: 'common--paneltextarea common--desc-size',\n\t\t\t\t\t\tevents: { input: c => this.model.set({ rules: c.getValue() }) },\n\t\t\t\t\t}),\n\t\t\t\t\t(m, c) => c.setValue(m.rules),\n\t\t\t\t),\n\t\t\t\t{\n\t\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\t\tnoToggle: true,\n\t\t\t\t\tpopupTip: l10n.l('pageEditArea.rulesInfo', \"Area specific rules that adds to the realm rules. It may be formatted and span multiple paragraphs.\"),\n\t\t\t\t},\n\t\t\t)),\n\t\t\tn.component(new ModelComponent(\n\t\t\t\tthis.settingsModel,\n\t\t\t\tnew LabelToggleBox(l10n.l('pageEditArea.customTeleportMessages', \"Custom teleport messages\"), false, {\n\t\t\t\t\tclassName: 'common--formmargin',\n\t\t\t\t\tonChange: v => this.settingsModel.set({ customTeleportMsgs: v }),\n\t\t\t\t\tpopupTip: l10n.l('pageEditArea.customTeleportMessagesInfo', \"Customize teleport messages shown when characters teleport to and from the area, unless the room or character has a custom teleport message set.\"),\n\t\t\t\t}),\n\t\t\t\t(m, c) => c.setValue(m.customTeleportMsgs, false),\n\t\t\t)),\n\t\t\tn.component(new ModelComponent(\n\t\t\t\tthis.settingsModel,\n\t\t\t\tnew Collapser(null),\n\t\t\t\t(m, c, change) => {\n\t\t\t\t\tif (change && !change.hasOwnProperty('customTeleportMsgs')) return;\n\n\t\t\t\t\t// Reset custom messages if we hide them.\n\t\t\t\t\tif (!m.customTeleportMsgs) {\n\t\t\t\t\t\tm.set({\n\t\t\t\t\t\t\tteleportLeaveMsg: this.areaSettings.teleportLeaveMsg,\n\t\t\t\t\t\t\tteleportArriveMsg: this.areaSettings.teleportArriveMsg,\n\t\t\t\t\t\t\tteleportTravelMsg: this.areaSettings.teleportTravelMsg,\n\t\t\t\t\t\t\toverrideCharTeleportMsgs: this.areaSettings.overrideCharTeleportMsgs,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tc.setComponent(m.customTeleportMsgs\n\t\t\t\t\t\t? new Elem(n => n.elem('div', { className: 'common--formsubsection' }, [\n\t\t\t\t\t\t\tn.component(new PanelSection(\n\t\t\t\t\t\t\t\tl10n.l('pageEditArea.teleportLeaveMessage', \"Teleport leave message\"),\n\t\t\t\t\t\t\t\tnew ModelComponent(\n\t\t\t\t\t\t\t\t\tthis.settingsModel,\n\t\t\t\t\t\t\t\t\tnew Textarea(this.settingsModel.teleportLeaveMsg, {\n\t\t\t\t\t\t\t\t\t\tclassName: 'common--paneltextarea-small common--paneltextarea-smallfont',\n\t\t\t\t\t\t\t\t\t\tevents: { input: c => this.settingsModel.set({ teleportLeaveMsg: c.getValue() }) },\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t(m, c) => c.setValue(m.teleportLeaveMsg),\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tclassName: 'small common--sectionpadding',\n\t\t\t\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t\t\t\t\tpopupTip: l10n.l('pageEditArea.teleportLeaveMessageInfo', \"Message seen by the room when a character teleports away from there. The character's name will be prepended.\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t\tn.component(new PanelSection(\n\t\t\t\t\t\t\t\tl10n.l('pageEditArea.teleportArriveMessage', \"Teleport arrival message\"),\n\t\t\t\t\t\t\t\tnew ModelComponent(\n\t\t\t\t\t\t\t\t\tthis.settingsModel,\n\t\t\t\t\t\t\t\t\tnew Textarea(this.settingsModel.teleportArriveMsg, {\n\t\t\t\t\t\t\t\t\t\tclassName: 'common--paneltextarea-small common--paneltextarea-smallfont',\n\t\t\t\t\t\t\t\t\t\tevents: { input: c => this.settingsModel.set({ teleportArriveMsg: c.getValue() }) },\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t(m, c) => c.setValue(m.teleportArriveMsg),\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tclassName: 'small common--sectionpadding',\n\t\t\t\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t\t\t\t\tpopupTip: l10n.l('pageEditArea.teleportArriveMessageInfo', \"Message seen by the room when a character teleports there. The character's name will be prepended.\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t\tn.component(new PanelSection(\n\t\t\t\t\t\t\t\tl10n.l('pageEditArea.teleportTravelMessage', \"Teleport travel message\"),\n\t\t\t\t\t\t\t\tnew ModelComponent(\n\t\t\t\t\t\t\t\t\tthis.settingsModel,\n\t\t\t\t\t\t\t\t\tnew Textarea(this.settingsModel.teleportTravelMsg, {\n\t\t\t\t\t\t\t\t\t\tclassName: 'common--paneltextarea-small common--paneltextarea-smallfont',\n\t\t\t\t\t\t\t\t\t\tevents: { input: c => this.settingsModel.set({ teleportTravelMsg: c.getValue() }) },\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t(m, c) => c.setValue(m.teleportTravelMsg),\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tclassName: 'small common--sectionpadding',\n\t\t\t\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t\t\t\t\tpopupTip: l10n.l('pageEditArea.teleportTravelMessageInfo', \"Message seen by the teleporting character when they teleport into the area. The character's name will be prepended.\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\t\t\tthis.settingsModel,\n\t\t\t\t\t\t\t\tnew LabelToggleBox(l10n.l('pageEditArea.overrideCharacterMessages', \"Override character messages\"), false, {\n\t\t\t\t\t\t\t\t\tclassName: 'small common--sectionpadding',\n\t\t\t\t\t\t\t\t\tonChange: v => this.settingsModel.set({ overrideCharTeleportMsgs: v }),\n\t\t\t\t\t\t\t\t\tpopupTip: l10n.l('pageEditArea.overrideCharacterMessagesInfo', \"Override any customized character teleport messages with those defined for the area.\"),\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t(m, c) => c.setValue(m.overrideCharTeleportMsgs, false),\n\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t])) : null,\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t)),\n\t\t\tn.component('message', new Collapser(null)),\n\t\t\tn.component(new ModelComponent(\n\t\t\t\tthis.area,\n\t\t\t\tnew Elem(n => n.elem('div', { className: 'pad-top-xl flex-row margin8 flex-end' }, [\n\t\t\t\t\tn.elem('div', { className: 'flex-1' }, [\n\t\t\t\t\t\tn.elem('update', 'button', { events: {\n\t\t\t\t\t\t\tclick: () => this._save(),\n\t\t\t\t\t\t}, className: 'btn primary common--btnwidth' }, [\n\t\t\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\t\t\tthis.model,\n\t\t\t\t\t\t\t\tnew ModelComponent(\n\t\t\t\t\t\t\t\t\tthis.settingsModel,\n\t\t\t\t\t\t\t\t\tnew Txt(),\n\t\t\t\t\t\t\t\t\t(m, c) => this._setSaveButton(c),\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t(m, c) => this._setSaveButton(c.getComponent()),\n\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t]),\n\t\t\t\t\t]),\n\t\t\t\t\tn.elem('setOwner', 'button', { events: {\n\t\t\t\t\t\tclick: () => this.module.dialogSetAreaOwner.open(this.ctrl, this.area),\n\t\t\t\t\t}, className: 'iconbtn medium' }, [\n\t\t\t\t\t\tn.component(new FAIcon('key')),\n\t\t\t\t\t]),\n\t\t\t\t\tn.elem('delete', 'button', { events: {\n\t\t\t\t\t\tclick: () => this._deleteArea(),\n\t\t\t\t\t}, className: 'iconbtn medium' }, [\n\t\t\t\t\t\tn.component(new FAIcon('trash')),\n\t\t\t\t\t]),\n\t\t\t\t])),\n\t\t\t\t(m, c) => {\n\t\t\t\t\tlet prop = this._canDeleteArea() ? null : 'disabled';\n\t\t\t\t\tc.setNodeProperty('delete', 'disabled', prop);\n\t\t\t\t\tc.setNodeProperty('setOwner', 'disabled', prop);\n\t\t\t\t},\n\t\t\t)),\n\t\t]));\n\t\treturn this.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t\tif (this.model) {\n\t\t\tthis.state.changes = this.model.getModifications() || {};\n\t\t\tthis.model.dispose();\n\t\t\tthis.model = null;\n\t\t}\n\t\tif (this.settingsModel) {\n\t\t\tthis.state.settingsChanges = this.settingsModel.getModifications() || {};\n\t\t\tthis.settingsModel.dispose();\n\t\t\tthis.settingsModel = null;\n\t\t}\n\t}\n\n\t_save() {\n\t\tlet p;\n\t\tif (!this.model) {\n\t\t\tp = Promise.resolve();\n\t\t} else {\n\t\t\tlet change = this._getChanges();\n\t\t\tp = Object.keys(change).length\n\t\t\t\t? this.ctrl.call('setArea', Object.assign({ areaId: this.area.id }, change))\n\t\t\t\t: Promise.resolve();\n\t\t}\n\n\t\treturn p.then(() => {\n\t\t\tthis._close();\n\t\t}).catch(err => {\n\t\t\tthis._setMessage(l10n.l(err.code, err.message, err.data));\n\t\t});\n\t}\n\n\t_getChanges() {\n\t\tif (!this.model || !this.settingsModel) return {};\n\n\t\tlet change = Object.assign({}, this.model.getModifications(), this.settingsModel.getModifications());\n\t\t// If custom teleport messages is disabled, we don't save the hidden text values.\n\t\tif (!this.settingsModel.customTeleportMsgs) {\n\t\t\tdelete change.teleportLeaveMsg;\n\t\t\tdelete change.teleportArriveMsg;\n\t\t\tdelete change.teleportTravelMsg;\n\t\t\tdelete change.overrideCharTeleportMsgs;\n\t\t}\n\t\treturn change;\n\t}\n\n\t_setMessage(msg) {\n\t\tif (!this.elem) return;\n\t\tthis.elem.getNode('message').setComponent(msg\n\t\t\t? new Txt(msg, { className: 'dialog--error' })\n\t\t\t: null,\n\t\t);\n\t}\n\n\t_close() {\n\t\tthis.close();\n\t\tif (this.model) {\n\t\t\tthis.model.dispose();\n\t\t\tthis.model = null;\n\t\t}\n\t\tthis.state.changes = {};\n\t}\n\n\t_setAreaImage(file) {\n\t\treturn this.module.file.upload(file, 'core.upload.image')\n\t\t\t.then(result => this.ctrl.call('setAreaImage', {\n\t\t\t\tareaId: this.area.id,\n\t\t\t\tuploadId: result.uploadId,\n\t\t\t})).then(() => this.module.toaster.open({\n\t\t\t\ttitle: l10n.l('pageEditArea.mapImageUploaded', \"Map image uploaded\"),\n\t\t\t\tcontent: new Txt(l10n.l('pageEditArea.mapImageUploadedBody', \"Map image was uploaded and saved.\")),\n\t\t\t\tcloseOn: 'click',\n\t\t\t\ttype: 'success',\n\t\t\t\tautoclose: true,\n\t\t\t})).catch(err => this.module.confirm.openError(err, {\n\t\t\t\ttitle: l10n.l('pageEditArea.mapImageNotUploaded', \"Map image not uploaded\"),\n\t\t\t}));\n\t}\n\n\t_deleteAreaImage() {\n\t\treturn this.ctrl.call('deleteAreaImage', {\n\t\t\tareaId: this.area.id,\n\t\t})\n\t\t\t.then(() => this.module.toaster.open({\n\t\t\t\ttitle: l10n.l('pageEditArea.mapImageDeleted', \"Map image deleted\"),\n\t\t\t\tcontent: new Txt(l10n.l('pageEditArea.mapImageDeletedBody', \"Map image was successfully deleted.\")),\n\t\t\t\tcloseOn: 'click',\n\t\t\t\ttype: 'success',\n\t\t\t\tautoclose: true,\n\t\t\t}))\n\t\t\t.catch(err => this.module.confirm.openError(err));\n\t}\n\n\t_deleteArea() {\n\t\tthis.dialog = this.module.confirm.open(\n\t\t\t() => this.ctrl.call('deleteArea', { areaId: this.area.id })\n\t\t\t\t.then(() => this.module.toaster.open({\n\t\t\t\t\ttitle: l10n.l('pageEditArea.areaDeleted', \"Area deleted\"),\n\t\t\t\t\tcontent: new Txt(l10n.l('pageEditArea.mapImageDeletedBody', \"Area was successfully deleted.\")),\n\t\t\t\t\tcloseOn: 'click',\n\t\t\t\t\ttype: 'success',\n\t\t\t\t\tautoclose: true,\n\t\t\t\t}))\n\t\t\t\t.catch(err => this.module.confirm.openError(err)),\n\t\t\t{\n\t\t\t\ttitle: l10n.l('pageEditArea.confirmDelete', \"Confirm deletion\"),\n\t\t\t\tbody: new Elem(n => n.elem('div', [\n\t\t\t\t\tn.component(new Txt(l10n.l('pageEditArea.deleteAreaBody', \"Do you really wish to delete the area?\"), { tagName: 'p' })),\n\t\t\t\t\tn.elem('p', [ n.component(new ModelTxt(this.area, m => m.name, { className: 'dialog--strong' })) ]),\n\t\t\t\t\tn.elem('p', { className: 'dialog--error' }, [\n\t\t\t\t\t\tn.component(new FAIcon('exclamation-triangle')),\n\t\t\t\t\t\tn.html(\" \"),\n\t\t\t\t\t\tn.component(new Txt(l10n.l('pageEditArea.deletionWarning', \"Deletion cannot be undone.\"))),\n\t\t\t\t\t]),\n\t\t\t\t])),\n\t\t\t\tconfirm: l10n.l('pageEditArea.delete', \"Delete\"),\n\t\t\t},\n\t\t);\n\t}\n\n\t_canDeleteArea() {\n\t\treturn this.module.player.isAdmin() || (this.area.owner && this.area.owner.id == this.ctrl.id);\n\t}\n\n\t_setSaveButton(c) {\n\t\tc.setText(Object.keys(this._getChanges()).length ? txtUpdate : txtClose);\n\t}\n}\n\nexport default PageEditAreaComponent;\n","import { Elem } from 'modapp-base-component';\nimport FAIcon from 'components/FAIcon';\nimport l10n from 'modapp-l10n';\nimport PageEditAreaComponent from './PageEditAreaComponent';\nimport './pageEditArea.scss';\n\n/**\n * PageEditArea opens an in-panel edit room page in the room panel.\n */\nclass PageEditArea {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\t\tthis.app.require([\n\t\t\t'api',\n\t\t\t'roomPages',\n\t\t\t'pageArea',\n\t\t\t'confirm',\n\t\t\t'dialogSetAreaOwner',\n\t\t\t'player',\n\t\t\t'toaster',\n\t\t\t'file',\n\t\t\t'createLimits',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\n\t\tthis.module.pageArea.addTool({\n\t\t\tid: 'editArea',\n\t\t\tsortOrder: 10,\n\t\t\tcomponentFactory: (ctrl, area) => new Elem(n => n.elem('button', { className: 'iconbtn small', events: {\n\t\t\t\tclick: () => this.open(ctrl, area),\n\t\t\t}}, [\n\t\t\t\tn.component(new FAIcon('pencil')),\n\t\t\t])),\n\t\t\tfilter: (ctrl, area, canEdit) => canEdit,\n\t\t});\n\t}\n\n\t/**\n\t * Opens an in-panel edit room page in the room panel.\n\t * @param {*} ctrl Controlled char model.\n\t * @param {*} area Area model of the area to edit.\n\t * @param {bool} toggleOpen Flag if the room panel should be toggled open.\n\t * @returns {Promise.<function>} Promise of a close function.\n\t */\n\topen(ctrl, area, toggleOpen) {\n\t\treturn this.module.api.get('core.area.' + area.id + '.settings').then(areaSettings => {\n\t\t\tareaSettings.on();\n\t\t\tlet close = this.module.roomPages.openAreaPage(\n\t\t\t\t'editArea',\n\t\t\t\tctrl.id,\n\t\t\t\tarea.id,\n\t\t\t\t(ctrl, area, state, close) => ({\n\t\t\t\t\tcomponent: new PageEditAreaComponent(this.module, ctrl, area, areaSettings, state, close),\n\t\t\t\t\ttitle: l10n.l('pageEditArea.editArea', \"Edit Area\"),\n\t\t\t\t}),\n\t\t\t\t{\n\t\t\t\t\tonClose: () => {\n\t\t\t\t\t\tareaSettings.off();\n\t\t\t\t\t},\n\t\t\t\t\topenPanel: toggleOpen,\n\t\t\t\t},\n\t\t\t);\n\t\t\treturn close;\n\t\t});\n\t}\n\n\tdispose() {\n\t\tthis.module.pageArea.removeTool('editArea');\n\t}\n}\n\nexport default PageEditArea;\n","import { Elem, Txt, Input, Textarea, Context } from 'modapp-base-component';\nimport { ModelComponent, CollectionList } from 'modapp-resource-component';\nimport { ModifyModel, CollectionWrapper } from 'modapp-resource';\nimport l10n from 'modapp-l10n';\nimport Collapser from 'components/Collapser';\nimport FAIcon from 'components/FAIcon';\nimport FileButton from 'components/FileButton';\nimport PanelSection from 'components/PanelSection';\nimport LabelToggleBox from 'components/LabelToggleBox';\nimport Img from 'components/Img';\nimport ImgModal from 'classes/ImgModal';\n\nclass PageEditCharComponent {\n\tconstructor(module, ctrl, state, close) {\n\t\tstate.changes = state.changes || {};\n\n\t\tthis.module = module;\n\t\tthis.ctrl = ctrl;\n\t\tthis.state = state;\n\t\tthis.close = close;\n\t}\n\n\trender(el) {\n\t\tthis.model = new ModifyModel(this.ctrl, {\n\t\t\tprops: this.state.changes,\n\t\t\teventBus: this.module.self.app.eventBus,\n\t\t});\n\t\tthis.elem = new Elem(n => n.elem('div', { className: 'pageeditchar' }, [\n\t\t\tn.component(new PanelSection(\n\t\t\t\tl10n.l('pageEditChar.image', \"Image\"),\n\t\t\t\tnew Elem(n => n.elem('div', { className: 'flex-row flex-stretch pad8' }, [\n\t\t\t\t\tn.elem('div', { className: 'flex-1' }, [\n\t\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\t\tthis.ctrl,\n\t\t\t\t\t\t\tnew Img('', { className: 'pageeditchar--image', events: {\n\t\t\t\t\t\t\t\tclick: c => {\n\t\t\t\t\t\t\t\t\tif (!c.hasClass('placeholder')) {\n\t\t\t\t\t\t\t\t\t\tnew ImgModal(this.ctrl.image.href).open();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t}}),\n\t\t\t\t\t\t\t(m, c, changed) => {\n\t\t\t\t\t\t\t\tc.setSrc(m.image ? m.image.href + '?thumb=xl' : '/img/avatar-l.png');\n\t\t\t\t\t\t\t\tc[m.image ? 'removeClass' : 'addClass']('placeholder');\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t)),\n\t\t\t\t\t]),\n\t\t\t\t\tn.elem('div', { className: 'pageeditchar--imagebtn flex-1' }, [\n\t\t\t\t\t\tn.component(new FileButton(\n\t\t\t\t\t\t\tnew Elem(n => n.elem('div', [\n\t\t\t\t\t\t\t\tn.component(new FAIcon('camera')),\n\t\t\t\t\t\t\t\tn.component(new Txt(l10n.l('pageEditChar.upload', \"Upload\"))),\n\t\t\t\t\t\t\t])),\n\t\t\t\t\t\t\t(file, dataUrl) => this.module.createLimits.validateImageSize(\n\t\t\t\t\t\t\t\tfile.size,\n\t\t\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\t\t\tlet footer = new LabelToggleBox(l10n.l('pageEditChar.useThumbAsAvatar', \"Use thumbnail as avatar\"), !this.ctrl.avatar);\n\t\t\t\t\t\t\t\t\tthis.module.dialogCropImage.open(\n\t\t\t\t\t\t\t\t\t\tdataUrl,\n\t\t\t\t\t\t\t\t\t\t(dataUrl, points) => this._setCharImage(file, points, footer.getValue()),\n\t\t\t\t\t\t\t\t\t\t{ footer },\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t{ className: 'btn medium icon-left' },\n\t\t\t\t\t\t)),\n\t\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\t\tthis.ctrl,\n\t\t\t\t\t\t\tnew Elem(n => n.elem('button', {\n\t\t\t\t\t\t\t\tclassName: 'btn medium icon-left',\n\t\t\t\t\t\t\t\tevents: {\n\t\t\t\t\t\t\t\t\tclick: () => this.module.confirm.open(() => this._deleteCharImage(), {\n\t\t\t\t\t\t\t\t\t\ttitle: l10n.l('pageEditChar.confirmDelete', \"Confirm deletion\"),\n\t\t\t\t\t\t\t\t\t\tbody: l10n.l('pageEditChar.deleteImageBody', \"Do you really wish to delete the image?\"),\n\t\t\t\t\t\t\t\t\t\tconfirm: l10n.l('pageEditChar.delete', \"Delete\"),\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t}, [\n\t\t\t\t\t\t\t\tn.component(new FAIcon('trash')),\n\t\t\t\t\t\t\t\tn.component(new Txt(l10n.l('pageEditChar.delete', \"Delete\"))),\n\t\t\t\t\t\t\t])),\n\t\t\t\t\t\t\t(m, c) => c.setProperty('disabled', m.image ? null : 'disabled'),\n\t\t\t\t\t\t)),\n\t\t\t\t\t]),\n\t\t\t\t])),\n\t\t\t\t{\n\t\t\t\t\tclassName: 'common--sectionpadding pageeditchar--imagesection',\n\t\t\t\t\tnoToggle: true,\n\t\t\t\t},\n\t\t\t)),\n\t\t\tn.component(new PanelSection(\n\t\t\t\tl10n.l('pageEditChar.avatar', \"Avatar\"),\n\t\t\t\tnew Elem(n => n.elem('div', { className: 'flex-row flex-stretch pad8' }, [\n\t\t\t\t\tn.elem('div', { className: 'flex-auto' }, [\n\t\t\t\t\t\tn.component(this.module.avatar.newAvatar(this.ctrl, { size: 'large' })),\n\t\t\t\t\t]),\n\t\t\t\t\tn.elem('div', { className: 'pageeditchar--avatarbtn flex-1' }, [\n\t\t\t\t\t\tn.component(new FileButton(\n\t\t\t\t\t\t\tnew Elem(n => n.elem('div', [\n\t\t\t\t\t\t\t\tn.component(new FAIcon('camera')),\n\t\t\t\t\t\t\t\tn.component(new Txt(l10n.l('pageEditChar.upload', \"Upload\"))),\n\t\t\t\t\t\t\t])),\n\t\t\t\t\t\t\t(file, dataUrl) => this.module.createLimits.validateImageSize(\n\t\t\t\t\t\t\t\tfile.size,\n\t\t\t\t\t\t\t\t() => this.module.dialogCropImage.open(\n\t\t\t\t\t\t\t\t\tdataUrl,\n\t\t\t\t\t\t\t\t\t(dataUrl, points) => this._setCharAvatar(file, points),\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t{ className: 'btn small icon-left' },\n\t\t\t\t\t\t)),\n\t\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\t\tthis.ctrl,\n\t\t\t\t\t\t\tnew Elem(n => n.elem('button', {\n\t\t\t\t\t\t\t\tclassName: 'btn small icon-left',\n\t\t\t\t\t\t\t\tevents: {\n\t\t\t\t\t\t\t\t\tclick: () => this.module.confirm.open(() => this._deleteCharAvatar(), {\n\t\t\t\t\t\t\t\t\t\ttitle: l10n.l('pageEditChar.confirmDelete', \"Confirm deletion\"),\n\t\t\t\t\t\t\t\t\t\tbody: l10n.l('pageEditChar.deleteImageBody', \"Do you really wish to delete the avatar?\"),\n\t\t\t\t\t\t\t\t\t\tconfirm: l10n.l('pageEditChar.delete', \"Delete\"),\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t}, [\n\t\t\t\t\t\t\t\tn.component(new FAIcon('trash')),\n\t\t\t\t\t\t\t\tn.component(new Txt(l10n.l('pageEditChar.delete', \"Delete\"))),\n\t\t\t\t\t\t\t])),\n\t\t\t\t\t\t\t(m, c) => c.setProperty('disabled', m.avatar ? null : 'disabled'),\n\t\t\t\t\t\t)),\n\t\t\t\t\t]),\n\t\t\t\t])),\n\t\t\t\t{\n\t\t\t\t\tclassName: 'common--sectionpadding pageeditchar--imagesection',\n\t\t\t\t\tnoToggle: true,\n\t\t\t\t\tpopupTip: l10n.l('pageEditChar.avatarInfo', \"Avatar is a small image used to represent the character. Others can see it without having to look at the character. Optimal size is 192x192.\"),\n\t\t\t\t},\n\t\t\t)),\n\t\t\tn.elem('div', { className: 'pageeditchar--editname flex-row pad8' }, [\n\t\t\t\tn.component(new PanelSection(\n\t\t\t\t\tl10n.l('pageEditChar.name', \"Name\"),\n\t\t\t\t\tnew ModelComponent(\n\t\t\t\t\t\tthis.model,\n\t\t\t\t\t\tnew Input(this.model.name, {\n\t\t\t\t\t\t\tevents: { input: c => this.model.set({ name: c.getValue() }) },\n\t\t\t\t\t\t\tattributes: { name: 'editchar-name', spellcheck: 'false' },\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t(m, c) => c.setValue(m.name),\n\t\t\t\t\t),\n\t\t\t\t\t{\n\t\t\t\t\t\tclassName: 'flex-1 common--sectionpadding',\n\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t\tpopupTip: l10n.l('pageEditChar.nameInfo', \"Character name may contain numbers, letters, dash (-), and apostrophe (').\"),\n\t\t\t\t\t\tpopupTipPosition: 'top',\n\t\t\t\t\t},\n\t\t\t\t)),\n\t\t\t\tn.component(new PanelSection(\n\t\t\t\t\tl10n.l('pageEditChar.surname', \"Surname\"),\n\t\t\t\t\tnew ModelComponent(\n\t\t\t\t\t\tthis.model,\n\t\t\t\t\t\tnew Input(this.model.surname, {\n\t\t\t\t\t\t\tevents: { input: c => this.model.set({ surname: c.getValue() }) },\n\t\t\t\t\t\t\tattributes: { name: 'editchar-surname', spellcheck: 'false' },\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t(m, c) => c.setValue(m.surname),\n\t\t\t\t\t),\n\t\t\t\t\t{\n\t\t\t\t\t\tclassName: 'flex-1 common--sectionpadding',\n\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t\tpopupTip: l10n.l('pageEditChar.surnameInfo', \"Surname is used for unique identification, and may contain numbers, letters, dash (-), apostrophe ('), and spaces. It may also be titles (eg. \\\"the Beast\\\") or other creative name endings.\"),\n\t\t\t\t\t},\n\t\t\t\t)),\n\t\t\t]),\n\t\t\tn.elem('div', { className: 'pageeditchar--details flex-row pad8' }, [\n\t\t\t\tn.component(new PanelSection(\n\t\t\t\t\tl10n.l('pageEditChar.gender', \"Gender\"),\n\t\t\t\t\tnew ModelComponent(\n\t\t\t\t\t\tthis.model,\n\t\t\t\t\t\tnew Input(this.model.gender, {\n\t\t\t\t\t\t\tevents: { input: c => this.model.set({ gender: c.getValue() }) },\n\t\t\t\t\t\t\tattributes: { name: 'editchar-gender', spellcheck: 'false' },\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t(m, c) => c.setValue(m.gender),\n\t\t\t\t\t),\n\t\t\t\t\t{\n\t\t\t\t\t\tclassName: 'flex-1 common--sectionpadding',\n\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t},\n\t\t\t\t)),\n\t\t\t\tn.component(new PanelSection(\n\t\t\t\t\tl10n.l('pageEditChar.species', \"Species\"),\n\t\t\t\t\tnew ModelComponent(\n\t\t\t\t\t\tthis.model,\n\t\t\t\t\t\tnew Input(this.model.species, {\n\t\t\t\t\t\t\tevents: { input: c => this.model.set({ species: c.getValue() }) },\n\t\t\t\t\t\t\tattributes: { name: 'editchar-species', spellcheck: 'false' },\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t(m, c) => c.setValue(m.species),\n\t\t\t\t\t),\n\t\t\t\t\t{\n\t\t\t\t\t\tclassName: 'flex-1 common--sectionpadding',\n\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t},\n\t\t\t\t)),\n\t\t\t]),\n\t\t\tn.component(new PanelSection(\n\t\t\t\tl10n.l('pageEditChar.desc', \"Description\"),\n\t\t\t\tnew ModelComponent(\n\t\t\t\t\tthis.model,\n\t\t\t\t\tnew Textarea(this.model.desc, {\n\t\t\t\t\t\tclassName: 'common--paneltextarea common--desc-size',\n\t\t\t\t\t\tevents: { input: c => this.model.set({ desc: c.getValue() }) },\n\t\t\t\t\t\tattributes: { name: 'editchar-desc', spellcheck: 'true' },\n\t\t\t\t\t}),\n\t\t\t\t\t(m, c) => c.setValue(m.desc),\n\t\t\t\t),\n\t\t\t\t{\n\t\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\t\tnoToggle: true,\n\t\t\t\t\tpopupTip: l10n.l('pageEditChar.descInfo', \"Description of the character's appearance as percieved by other characters.\"),\n\t\t\t\t},\n\t\t\t)),\n\t\t\tn.component(new ModelComponent(\n\t\t\t\tthis.ctrl,\n\t\t\t\tnew Collapser(),\n\t\t\t\t(m, c, change) => {\n\t\t\t\t\tif (change && !change.hasOwnProperty('puppetInfo')) return;\n\t\t\t\t\tlet puppetInfo = m.puppetInfo;\n\t\t\t\t\tif (this.puppetInfoModel) {\n\t\t\t\t\t\tthis.puppetInfoModel.dispose();\n\t\t\t\t\t}\n\t\t\t\t\tthis.puppetInfoModel = puppetInfo\n\t\t\t\t\t\t? new ModifyModel(puppetInfo, {\n\t\t\t\t\t\t\tprops: this.state.puppetInfoChanges,\n\t\t\t\t\t\t\teventBus: this.module.self.app.eventBus,\n\t\t\t\t\t\t})\n\t\t\t\t\t\t: null;\n\t\t\t\t\tc.setComponent(puppetInfo\n\t\t\t\t\t\t? new ModelComponent(\n\t\t\t\t\t\t\tthis.puppetInfoModel,\n\t\t\t\t\t\t\tnew PanelSection(\n\t\t\t\t\t\t\t\tl10n.l('pageEditChar.howToPlay', \"How to play\"),\n\t\t\t\t\t\t\t\tnew Textarea(this.puppetInfoModel.howToPlay, {\n\t\t\t\t\t\t\t\t\tclassName: 'common--paneltextarea common--desc-size',\n\t\t\t\t\t\t\t\t\tevents: { input: c => this.puppetInfoModel.set({ howToPlay: c.getValue() }) },\n\t\t\t\t\t\t\t\t\tattributes: { name: 'editchar-desc', spellcheck: 'true' },\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t\t\t\t\tpopupTip: l10n.l('pageEditChar.howToPlayInfo', \"Suggestions and guidelines on how to play and act with this puppet.\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t(m, c, change) => {\n\t\t\t\t\t\t\t\tthis._setSaveButton();\n\t\t\t\t\t\t\t\tif (change && change.hasOwnProperty('howToPlay')) {\n\t\t\t\t\t\t\t\t\tc.getComponent().setValue(m.howToPlay);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t)\n\t\t\t\t\t\t: null,\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t)),\n\t\t\tn.component(new PanelSection(\n\t\t\t\tl10n.l('pageEditChar.about', \"About\"),\n\t\t\t\tnew ModelComponent(\n\t\t\t\t\tthis.model,\n\t\t\t\t\tnew Textarea(this.model.about, {\n\t\t\t\t\t\tclassName: 'common--paneltextarea common--desc-size',\n\t\t\t\t\t\tevents: { input: c => this.model.set({ about: c.getValue() }) },\n\t\t\t\t\t\tattributes: { name: 'editchar-about', spellcheck: 'true' },\n\t\t\t\t\t}),\n\t\t\t\t\t(m, c) => c.setValue(m.about),\n\t\t\t\t),\n\t\t\t\t{\n\t\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\t\tnoToggle: true,\n\t\t\t\t\tpopupTip: l10n.l('pageEditChar.aboutInfo', \"Information about the character, such as background story or player preferences.\"),\n\t\t\t\t},\n\t\t\t)),\n\t\t\tn.component(new ModelComponent(\n\t\t\t\tthis.model,\n\t\t\t\tnew LabelToggleBox(l10n.l('pageEditChar.customTeleportMessages', \"Custom teleport messages\"), false, {\n\t\t\t\t\tclassName: 'common--formmargin',\n\t\t\t\t\tonChange: v => this.model.set({ customTeleportMsgs: v }),\n\t\t\t\t\tpopupTip: l10n.l('pageEditChar.customTeleportMessagesInfo', \"Customize teleport messages shown when teleporting. May be overridden by custom teleport messages set for the rooms.\"),\n\t\t\t\t}),\n\t\t\t\t(m, c) => c.setValue(m.customTeleportMsgs, false),\n\t\t\t)),\n\t\t\tn.component(new ModelComponent(\n\t\t\t\tthis.model,\n\t\t\t\tnew Collapser(null),\n\t\t\t\t(m, c, change) => {\n\t\t\t\t\tif (change && !change.hasOwnProperty('customTeleportMsgs')) return;\n\n\t\t\t\t\t// Reset custom messages if we hide them.\n\t\t\t\t\tif (!m.customTeleportMsgs) {\n\t\t\t\t\t\tm.set({\n\t\t\t\t\t\t\tteleportLeaveMsg: this.ctrl.teleportLeaveMsg,\n\t\t\t\t\t\t\tteleportArriveMsg: this.ctrl.teleportArriveMsg,\n\t\t\t\t\t\t\tteleportTravelMsg: this.ctrl.teleportTravelMsg,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tc.setComponent(m.customTeleportMsgs\n\t\t\t\t\t\t? new Elem(n => n.elem('div', { className: 'common--formsubsection' }, [\n\t\t\t\t\t\t\tn.component(new PanelSection(\n\t\t\t\t\t\t\t\tl10n.l('pageEditChar.teleportLeaveMessage', \"Teleport leave message\"),\n\t\t\t\t\t\t\t\tnew ModelComponent(\n\t\t\t\t\t\t\t\t\tthis.model,\n\t\t\t\t\t\t\t\t\tnew Textarea(this.model.teleportLeaveMsg, {\n\t\t\t\t\t\t\t\t\t\tclassName: 'common--paneltextarea-small common--paneltextarea-smallfont',\n\t\t\t\t\t\t\t\t\t\tevents: { input: c => this.model.set({ teleportLeaveMsg: c.getValue() }) },\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t(m, c) => c.setValue(m.teleportLeaveMsg),\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tclassName: 'small common--sectionpadding',\n\t\t\t\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t\t\t\t\tpopupTip: l10n.l('pageEditChar.teleportLeaveMessageInfo', \"Message seen by the origin room when teleporting away. The character's name will be prepended.\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t\tn.component(new PanelSection(\n\t\t\t\t\t\t\t\tl10n.l('pageEditChar.teleportArriveMessage', \"Teleport arrival message\"),\n\t\t\t\t\t\t\t\tnew ModelComponent(\n\t\t\t\t\t\t\t\t\tthis.model,\n\t\t\t\t\t\t\t\t\tnew Textarea(this.model.teleportArriveMsg, {\n\t\t\t\t\t\t\t\t\t\tclassName: 'common--paneltextarea-small common--paneltextarea-smallfont',\n\t\t\t\t\t\t\t\t\t\tevents: { input: c => this.model.set({ teleportArriveMsg: c.getValue() }) },\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t(m, c) => c.setValue(m.teleportArriveMsg),\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tclassName: 'small common--sectionpadding',\n\t\t\t\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t\t\t\t\tpopupTip: l10n.l('pageEditChar.teleportArriveMessageInfo', \"Message seen by the arrival room when teleporting there. The character's name will be prepended.\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t\tn.component(new PanelSection(\n\t\t\t\t\t\t\t\tl10n.l('pageEditChar.teleportTravelMessage', \"Teleport travel message\"),\n\t\t\t\t\t\t\t\tnew ModelComponent(\n\t\t\t\t\t\t\t\t\tthis.model,\n\t\t\t\t\t\t\t\t\tnew Textarea(this.model.teleportTravelMsg, {\n\t\t\t\t\t\t\t\t\t\tclassName: 'common--paneltextarea-small common--paneltextarea-smallfont',\n\t\t\t\t\t\t\t\t\t\tevents: { input: c => this.model.set({ teleportTravelMsg: c.getValue() }) },\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t(m, c) => c.setValue(m.teleportTravelMsg),\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tclassName: 'small common--sectionpadding',\n\t\t\t\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t\t\t\t\tpopupTip: l10n.l('pageEditChar.teleportTravelMessageInfo', \"Message seen by you when teleporting. The character's name will be prepended.\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t])) : null,\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t)),\n\t\t\tn.component(new Context(\n\t\t\t\t() => new CollectionWrapper(this.module.self.getTools(), {\n\t\t\t\t\tfilter: t => (!t.type || t.type == 'section') && (t.filter ? t.filter(this.ctrl) : true),\n\t\t\t\t}),\n\t\t\t\ttools => tools.dispose(),\n\t\t\t\ttools => new CollectionList(\n\t\t\t\t\ttools,\n\t\t\t\t\tt => t.componentFactory(this.ctrl, this.state),\n\t\t\t\t\t{\n\t\t\t\t\t\tclassName: 'pageeditchar--sections',\n\t\t\t\t\t\tsubClassName: t => t.className || null,\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t)),\n\t\t\tn.component('message', new Collapser(null)),\n\t\t\tn.elem('div', { className: 'pad-top-xl' }, [\n\t\t\t\tn.elem('button', { events: {\n\t\t\t\t\tclick: () => this._save(),\n\t\t\t\t}, className: 'btn primary common--btnwidth' }, [\n\t\t\t\t\tn.component('save', new ModelComponent(\n\t\t\t\t\t\tthis.model,\n\t\t\t\t\t\tnew Txt(),\n\t\t\t\t\t\t(m, c) => this._setSaveButton(),\n\t\t\t\t\t)),\n\t\t\t\t]),\n\t\t\t]),\n\t\t]));\n\t\treturn this.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t\tif (this.model) {\n\t\t\tthis.state.changes = this.model.getModifications() || {};\n\t\t\tthis.model.dispose();\n\t\t\tthis.model = null;\n\t\t}\n\t\tif (this.puppetInfoModel) {\n\t\t\tthis.state.puppetInfoChanges = this.puppetInfoModel.getModifications() || {};\n\t\t\tthis.puppetInfoModel.dispose();\n\t\t\tthis.puppetInfoModel = null;\n\t\t}\n\t}\n\n\t_save() {\n\t\tlet p;\n\t\tif (!this.model) {\n\t\t\tp = Promise.resolve();\n\t\t} else {\n\t\t\tlet change = this._getChanges();\n\t\t\tp = Object.keys(change).length\n\t\t\t\t? this.ctrl.call('set', change)\n\t\t\t\t: Promise.resolve();\n\t\t}\n\n\t\tif (this.puppetInfoModel) {\n\t\t\tlet puppetInfoChange = this.puppetInfoModel.getModifications();\n\t\t\tif (puppetInfoChange) {\n\t\t\t\tp = p.then(() => this.ctrl.call('setPuppet', puppetInfoChange));\n\t\t\t}\n\t\t}\n\n\t\treturn p.then(() => {\n\t\t\tthis._close();\n\t\t}).catch(err => {\n\t\t\tthis._setMessage(l10n.l(err.code, err.message, err.data));\n\t\t});\n\t}\n\n\t_getChanges() {\n\t\tif (!this.model) return {};\n\n\t\tlet change = Object.assign({}, this.model.getModifications());\n\t\t// If custom teleport messages is disabled, we don't save the hidden text values.\n\t\tif (!this.model.customTeleportMsgs) {\n\t\t\tdelete change.teleportLeaveMsg;\n\t\t\tdelete change.teleportArriveMsg;\n\t\t\tdelete change.teleportTravelMsg;\n\t\t}\n\t\treturn change;\n\t}\n\n\t_setMessage(msg) {\n\t\tif (!this.elem) return;\n\t\tthis.elem.getNode('message').setComponent(msg\n\t\t\t? new Txt(msg, { className: 'dialog--error' })\n\t\t\t: null,\n\t\t);\n\t}\n\n\t_close() {\n\t\tthis.close();\n\t\tif (this.model) {\n\t\t\tthis.model.dispose();\n\t\t\tthis.model = null;\n\t\t}\n\t\tif (this.puppetInfoModel) {\n\t\t\tthis.puppetInfoModel.dispose();\n\t\t\tthis.puppetInfoModel = null;\n\t\t}\n\t\tthis.state.changes = {};\n\t}\n\n\t_setSaveButton() {\n\t\tif (!this.elem) return;\n\n\t\tlet save = this.elem.getNode('save').getComponent();\n\t\tlet hasChange = Object.keys(this._getChanges()).length;\n\t\tsave.setText(hasChange || (this.puppetInfoModel && this.puppetInfoModel.isModified)\n\t\t\t? l10n.l('pageEditChar.update', \"Save edits\")\n\t\t\t: l10n.l('pageEditChar.close', \"Close\"),\n\t\t);\n\t}\n\n\t_setCharImage(file, points, thumbAsAvatar) {\n\t\treturn this.module.file.upload(file, 'core.upload.image')\n\t\t\t.then(result => this.ctrl.call('setImage', {\n\t\t\t\tuploadId: result.uploadId,\n\t\t\t\tx1: parseInt(points[0]),\n\t\t\t\ty1: parseInt(points[1]),\n\t\t\t\tx2: parseInt(points[2]),\n\t\t\t\ty2: parseInt(points[3]),\n\t\t\t\tthumbAsAvatar,\n\t\t\t})).then(() => this.module.toaster.open({\n\t\t\t\ttitle: l10n.l('pageEditChar.imageUploaded', \"Image uploaded\"),\n\t\t\t\tcontent: new Txt(l10n.l('pageEditChar.imageUploadedBody', \"Image was uploaded and saved.\")),\n\t\t\t\tcloseOn: 'click',\n\t\t\t\ttype: 'success',\n\t\t\t\tautoclose: true,\n\t\t\t}));\n\t}\n\n\t_deleteCharImage() {\n\t\treturn this.ctrl.call('deleteImage')\n\t\t\t.then(() => this.module.toaster.open({\n\t\t\t\ttitle: l10n.l('pageEditChar.imageDeleted', \"Image deleted\"),\n\t\t\t\tcontent: new Txt(l10n.l('pageEditChar.imageDeletedBody', \"Image was successfully deleted.\")),\n\t\t\t\tcloseOn: 'click',\n\t\t\t\ttype: 'success',\n\t\t\t\tautoclose: true,\n\t\t\t}))\n\t\t\t.catch(err => this.module.confirm.openError(err));\n\t}\n\n\t_setCharAvatar(file, points) {\n\t\treturn this.module.file.upload(file, 'core.upload.image')\n\t\t\t.then(result => this.ctrl.call('setAvatar', {\n\t\t\t\tuploadId: result.uploadId,\n\t\t\t\tx1: parseInt(points[0]),\n\t\t\t\ty1: parseInt(points[1]),\n\t\t\t\tx2: parseInt(points[2]),\n\t\t\t\ty2: parseInt(points[3]),\n\t\t\t})).then(() => this.module.toaster.open({\n\t\t\t\ttitle: l10n.l('pageEditChar.avatarUploaded', \"Avatar uploaded\"),\n\t\t\t\tcontent: new Txt(l10n.l('pageEditChar.avatarUploadedBody', \"The avatar was uploaded and saved.\")),\n\t\t\t\tcloseOn: 'click',\n\t\t\t\ttype: 'success',\n\t\t\t\tautoclose: true,\n\t\t\t}));\n\t}\n\n\t_deleteCharAvatar() {\n\t\treturn this.ctrl.call('deleteAvatar')\n\t\t\t.then(() => this.module.toaster.open({\n\t\t\t\ttitle: l10n.l('pageEditChar.avatarDeleted', \"Avatar deleted\"),\n\t\t\t\tcontent: new Txt(l10n.l('pageEditChar.avatarDeletedBody', \"The avatar was successfully deleted.\")),\n\t\t\t\tcloseOn: 'click',\n\t\t\t\ttype: 'success',\n\t\t\t\tautoclose: true,\n\t\t\t}))\n\t\t\t.catch(err => this.module.confirm.openError(err));\n\t}\n}\n\nexport default PageEditCharComponent;\n","import { Elem } from 'modapp-base-component';\nimport { Collection, sortOrderCompare } from 'modapp-resource';\nimport FAIcon from 'components/FAIcon';\nimport l10n from 'modapp-l10n';\nimport PageEditCharComponent from './PageEditCharComponent';\nimport './pageEditChar.scss';\n\n/**\n * PageEditChar opens an in-panel edit char page in the char panel.\n */\nclass PageEditChar {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\t\tthis.app.require([\n\t\t\t'charPages',\n\t\t\t'dialogCropImage',\n\t\t\t'pageChar',\n\t\t\t'confirm',\n\t\t\t'avatar',\n\t\t\t'toaster',\n\t\t\t'api',\n\t\t\t'tags',\n\t\t\t'player',\n\t\t\t'file',\n\t\t\t'createLimits',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\n\t\tthis.tools = new Collection({\n\t\t\tidAttribute: m => m.id,\n\t\t\tcompare: sortOrderCompare,\n\t\t\teventBus: this.app.eventBus,\n\t\t});\n\n\t\tthis.module.pageChar.addTool({\n\t\t\tid: 'editChar',\n\t\t\tsortOrder: 10,\n\t\t\tcomponentFactory: (ctrl, char) => new Elem(n => n.elem('button', { className: 'iconbtn small', events: {\n\t\t\t\tclick: () => this.open(ctrl),\n\t\t\t}}, [\n\t\t\t\tn.component(new FAIcon('pencil')),\n\t\t\t])),\n\t\t\tfilter: (ctrl, char) => ctrl.id == char.id && !ctrl.puppeteer,\n\t\t});\n\t}\n\n\t/**\n\t * Opens an in-panel edit char page in the char panel.\n\t * @param {*} ctrl Controlled char model.\n\t * @returns {function} Close function.\n\t */\n\topen(ctrl) {\n\t\treturn this.module.charPages.openPage(\n\t\t\tctrl.id,\n\t\t\tctrl.id,\n\t\t\t(ctrl, char, state, close) => ({\n\t\t\t\tcomponent: new PageEditCharComponent(this.module, ctrl, state, close),\n\t\t\t\ttitle: l10n.l('pageEditChar.editChar', \"Edit Character\"),\n\t\t\t\tonClose: close,\n\t\t\t}),\n\t\t);\n\t}\n\n\t/**\n\t * Gets a collection of tools.\n\t * @returns {Collection} Collection of tools.\n\t */\n\tgetTools() {\n\t\treturn this.tools;\n\t}\n\n\t/**\n\t * Registers a room page tool.\n\t * @param {object} tool Tool object\n\t * @param {string} tool.id Tool ID.\n\t * @param {number} tool.sortOrder Sort order.\n\t * @param {function} tool.componentFactory Tool component factory: function(ctrl, state) -> Component\n\t * @param {number} [tool.filter] Filter function: function(ctrl) -> bool\n\t * @param {string} [tool.type] Target type. May be 'section'. Defaults to 'section';\n\t * @param {number} [tool.className] Class to give to the list item container.\n\t * @returns {this}\n\t */\n\taddTool(tool) {\n\t\tif (this.tools.get(tool.id)) {\n\t\t\tthrow new Error(\"Tool ID already registered: \", tool.id);\n\t\t}\n\t\tthis.tools.add(tool);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Unregisters a previously registered tool.\n\t * @param {string} toolId Tool ID.\n\t * @returns {this}\n\t */\n\tremoveTool(toolId) {\n\t\tthis.tools.remove(toolId);\n\t\treturn this;\n\t}\n\n\tdispose() {\n\t\tthis.module.pageChar.removeTool('editChar');\n\t}\n}\n\nexport default PageEditChar;\n","import { Elem, Txt, Context } from 'modapp-base-component';\nimport { ModelTxt, CollectionList } from 'modapp-resource-component';\nimport { CollectionWrapper } from 'modapp-resource';\nimport l10n from 'modapp-l10n';\nimport PanelSection from 'components/PanelSection';\nimport CharTagsList from 'components/CharTagsList';\nimport AutoComplete from 'components/AutoComplete';\nimport FAIcon from 'components/FAIcon';\nimport patternMatch, { patternMatchRender } from 'utils/patternMatch';\nimport labelCompare from 'utils/labelCompare';\n\n\nclass EditCharTagsComponent {\n\tconstructor(module, ctrl, state) {\n\t\tthis.module = module;\n\t\tthis.ctrl = ctrl;\n\t\tthis.state = state.editCharTags || { tag: '' };\n\t\tstate.editCharTags = this.state;\n\t}\n\n\trender(el) {\n\t\tthis.elem = new PanelSection(\n\t\t\tnew Elem(n => n.elem('div', { className: 'editchartags--title' }, [\n\t\t\t\tn.component(new Txt(l10n.l('editCharTags.tags', \"Tags\"), { tagName: 'h3' })),\n\t\t\t\tn.component(new Context(\n\t\t\t\t\t() => new CollectionWrapper(this.module.self.getTools(), {\n\t\t\t\t\t\tfilter: t => (!t.type || t.type == 'title') && (t.filter ? t.filter(this.ctrl) : true),\n\t\t\t\t\t}),\n\t\t\t\t\ttools => tools.dispose(),\n\t\t\t\t\ttools => new CollectionList(\n\t\t\t\t\t\ttools,\n\t\t\t\t\t\tt => t.componentFactory(this.ctrl, this.state),\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tclassName: 'editchartags--tools',\n\t\t\t\t\t\t\tsubClassName: t => t.className || null,\n\t\t\t\t\t\t\thorizontal: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t),\n\t\t\t\t)),\n\t\t\t])),\n\t\t\tnew Elem(n => n.elem('div', [\n\t\t\t\tn.elem('div', { className: 'common--sectionpadding' }, [\n\t\t\t\t\tn.elem('div', { className: 'editchartags--tag' }, [\n\t\t\t\t\t\tn.component('tag', new AutoComplete(this.state.tag, {\n\t\t\t\t\t\t\tattributes: {\n\t\t\t\t\t\t\t\tplaceholder: l10n.t('editCharTags.typeTagKey', \"Enter tag keyword to add\"),\n\t\t\t\t\t\t\t\tspellcheck: 'false',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tfetch: (text, update, c) => {\n\t\t\t\t\t\t\t\tlet tags = this.module.tags.getTagsCollection();\n\t\t\t\t\t\t\t\tupdate(tags.toArray()\n\t\t\t\t\t\t\t\t\t.filter(m => patternMatch(m.key, text) && this._tagIsValid(m.key))\n\t\t\t\t\t\t\t\t\t.map(m => ({ value: m.id, label: m.key }))\n\t\t\t\t\t\t\t\t\t.sort(labelCompare)\n\t\t\t\t\t\t\t\t\t.slice(0, 10),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tevents: {\n\t\t\t\t\t\t\t\tinput: c => this._setTag(c.getProperty('value')),\n\t\t\t\t\t\t\t\tkeydown: (c, e) => {\n\t\t\t\t\t\t\t\t\tif (e.key == 'Enter' && !c.isSelecting()) {\n\t\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\t\t\tthis._addTag();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\trender: patternMatchRender,\n\t\t\t\t\t\t\tminLength: 1,\n\t\t\t\t\t\t\tpreventSubmit: true,\n\t\t\t\t\t\t\tonSelect: (c, item) => {\n\t\t\t\t\t\t\t\tthis._setTag(item.label);\n\t\t\t\t\t\t\t\tc.setProperty('value', item.label);\n\t\t\t\t\t\t\t\tthis._addTag();\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t})),\n\t\t\t\t\t\tn.elem('add', 'button', {\n\t\t\t\t\t\t\tclassName: 'editchartags--add iconbtn medium tinyicon',\n\t\t\t\t\t\t\tattributes: { type: 'button' },\n\t\t\t\t\t\t\tevents: {\n\t\t\t\t\t\t\t\tclick: (c, e) => {\n\t\t\t\t\t\t\t\t\tthis._addTag();\n\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}, [\n\t\t\t\t\t\t\tn.component(new FAIcon('plus')),\n\t\t\t\t\t\t]),\n\t\t\t\t\t]),\n\t\t\t\t]),\n\t\t\t\tn.component(new CharTagsList(this.ctrl.tags, {\n\t\t\t\t\teventBus: this.module.self.app.eventBus,\n\t\t\t\t\tonEdit: (tag, pref, tags) => this._editTag(tag, pref),\n\t\t\t\t\tonDelete: (tag, pref, tags) => {\n\t\t\t\t\t\tif (tag.custom) {\n\t\t\t\t\t\t\tthis.module.confirm.open(() => this._deleteTag(tag), {\n\t\t\t\t\t\t\t\ttitle: l10n.l('editCharTags.confirmDelete', \"Confirm deletion\"),\n\t\t\t\t\t\t\t\tbody: new Elem(n => n.elem('div', [\n\t\t\t\t\t\t\t\t\tn.component(new Txt(l10n.l('editCharTags.deleteCustomTagBody', \"Do you wish to delete the custom tag?\"), { tagName: 'p' })),\n\t\t\t\t\t\t\t\t\tn.elem('p', [ n.component(new ModelTxt(tag, m => m.key, { className: 'dialog--strong' })) ]),\n\t\t\t\t\t\t\t\t])),\n\t\t\t\t\t\t\t\tconfirm: l10n.l('editCharTags.delete', \"Delete\"),\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis._deleteTag(tag);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t})),\n\t\t\t])),\n\t\t\t{\n\t\t\t\tclassName: 'editchartags common--sectionpadding',\n\t\t\t\tnoToggle: true,\n\t\t\t\tpopupTip: l10n.l('editCharTags.tagsInfo', \"Tags are searchable keywords describing a character/player's likes and dislikes, or other properties.\"),\n\t\t\t},\n\t\t);\n\t\tthis._setTag(this.state.tag);\n\t\treturn this.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n\n\t_setTag(tag) {\n\t\tthis.state.tag = tag;\n\t\tif (this.elem) {\n\t\t\tthis.elem.getComponent().setNodeProperty('add', 'disabled', this._tagIsValid(tag.trim().toLowerCase()) ? null : 'disabled');\n\t\t}\n\t}\n\n\t_tagIsValid(v) {\n\t\tif (!v) return false;\n\n\t\tlet tags = this.ctrl.tags.props;\n\t\tfor (let k in tags) {\n\t\t\tif (tags[k].key == v) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\t_deleteTag(tag) {\n\t\treturn this.module.api.call('tag.char.' + this.ctrl.id + '.tags', 'setTags', { tags: { [ tag.id ]: null }})\n\t\t\t.catch(err => this.module.toaster.openError(err));\n\t}\n\n\t_editTag(tag, pref) {\n\t\tthis.module.dialogTag.open(this.ctrl, tag, { pref });\n\t}\n\n\t_addTag() {\n\t\tif (!this.elem) return;\n\n\t\tlet n = this.elem.getComponent().getNode('tag');\n\t\tlet v = n.getProperty('value');\n\t\tif (this._tagIsValid(v)) {\n\t\t\tthis.module.dialogTag.open(this.ctrl, v);\n\t\t\tn.setProperty('value', '');\n\t\t\tthis._setTag('');\n\t\t}\n\t}\n}\n\nexport default EditCharTagsComponent;\n","import { Collection, sortOrderCompare } from 'modapp-resource';\nimport EditCharTagsComponent from './EditCharTagsComponent';\nimport './editCharTags.scss';\n\n/**\n * EditCharTags adds the Tags-section to PageEditChar.\n */\nclass EditCharTags {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\t\tthis.app.require([ 'pageEditChar', 'toaster', 'api', 'tags', 'dialogTag', 'confirm' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\n\t\tthis.tools = new Collection({\n\t\t\tidAttribute: m => m.id,\n\t\t\tcompare: sortOrderCompare,\n\t\t\teventBus: this.app.eventBus,\n\t\t});\n\n\t\tthis.module.pageEditChar.addTool({\n\t\t\tid: 'editCharTags',\n\t\t\tsortOrder: 10,\n\t\t\tcomponentFactory: (ctrl, state) => new EditCharTagsComponent(this.module, ctrl, state),\n\t\t});\n\t}\n\n\t/**\n\t * Gets a collection of tools.\n\t * @returns {Collection} Collection of tools.\n\t */\n\tgetTools() {\n\t\treturn this.tools;\n\t}\n\n\t/**\n\t * Registers a tags tool.\n\t * @param {object} tool Tool object\n\t * @param {string} tool.id Tool ID.\n\t * @param {number} tool.sortOrder Sort order.\n\t * @param {function} tool.componentFactory Tool component factory: function(ctrl, state) -> Component\n\t * @param {number} [tool.filter] Filter function: function(ctrl) -> bool\n\t * @param {string} [tool.type] Target type. May be 'title'. Defaults to 'title';\n\t * @param {number} [tool.className] Class to give to the list item container.\n\t * @returns {this}\n\t */\n\taddTool(tool) {\n\t\tif (this.tools.get(tool.id)) {\n\t\t\tthrow new Error(\"Tool ID already registered: \", tool.id);\n\t\t}\n\t\tthis.tools.add(tool);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Unregisters a previously registered tool.\n\t * @param {string} toolId Tool ID.\n\t * @returns {this}\n\t */\n\tremoveTool(toolId) {\n\t\tthis.tools.remove(toolId);\n\t\treturn this;\n\t}\n\n\tdispose() {\n\t\tthis.module.pageEditChar.removeTool('editCharTags');\n\t}\n}\n\nexport default EditCharTags;\n","import { Context, Elem, Txt, Input, Textarea } from 'modapp-base-component';\nimport { ModelComponent, CollectionComponent, ModelTxt } from 'modapp-resource-component';\nimport { ModifyModel } from 'modapp-resource';\nimport l10n from 'modapp-l10n';\nimport Collapser from 'components/Collapser';\nimport FAIcon from 'components/FAIcon';\nimport FileButton from 'components/FileButton';\nimport PanelSection from 'components/PanelSection';\nimport LabelToggleBox from 'components/LabelToggleBox';\n\n\nclass PageEditCharProfileComponent {\n\tconstructor(module, ctrl, profile, state, close) {\n\t\tstate.changes = state.changes || {};\n\n\t\tthis.module = module;\n\t\tthis.ctrl = ctrl;\n\t\tthis.profile = profile;\n\t\tthis.state = state;\n\t\tthis.close = close;\n\t}\n\n\trender(el) {\n\t\tthis.model = new ModifyModel(this.profile, {\n\t\t\tprops: this.state.changes,\n\t\t\teventBus: this.module.self.app.eventBus,\n\t\t});\n\t\tthis.elem = new CollectionComponent(\n\t\t\tthis.ctrl.profiles,\n\t\t\tnew Elem(n => n.elem('div', { className: 'pageeditcharprofile' }, [\n\t\t\t\tn.component(new PanelSection(\n\t\t\t\t\tl10n.l('pageEditCharProfile.image', \"Image\"),\n\t\t\t\t\tnew Elem(n => n.elem('div', { className: 'flex-row flex-stretch pad8' }, [\n\t\t\t\t\t\tn.elem('div', { className: 'flex-1' }, [\n\t\t\t\t\t\t\tn.component(this.module.avatar.newCharImg(this.profile, { modalOnClick: true, size: 'xlarge' })),\n\t\t\t\t\t\t]),\n\t\t\t\t\t\tn.elem('div', { className: 'pageeditcharprofile--imagebtn flex-1' }, [\n\t\t\t\t\t\t\tn.component(new FileButton(\n\t\t\t\t\t\t\t\tnew Elem(n => n.elem('div', [\n\t\t\t\t\t\t\t\t\tn.component(new FAIcon('camera')),\n\t\t\t\t\t\t\t\t\tn.component(new Txt(l10n.l('pageEditCharProfile.upload', \"Upload\"))),\n\t\t\t\t\t\t\t\t])),\n\t\t\t\t\t\t\t\t(file, dataUrl) => this.module.createLimits.validateImageSize(\n\t\t\t\t\t\t\t\t\tfile.size,\n\t\t\t\t\t\t\t\t\t() => this.module.dialogCropImage.open(\n\t\t\t\t\t\t\t\t\t\tdataUrl,\n\t\t\t\t\t\t\t\t\t\t(dataUrl, points) => this._setProfileImage(file, points),\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t{ className: 'btn medium icon-left' },\n\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t\tn.component(new Context(\n\t\t\t\t\t\t\t\t() => ({ dialog: null }),\n\t\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\t\tctx => new ModelComponent(\n\t\t\t\t\t\t\t\t\tthis.profile,\n\t\t\t\t\t\t\t\t\tnew ModelComponent(\n\t\t\t\t\t\t\t\t\t\tthis.ctrl,\n\t\t\t\t\t\t\t\t\t\tnew Elem(n => n.elem('button', {\n\t\t\t\t\t\t\t\t\t\t\tclassName: 'btn medium icon-left',\n\t\t\t\t\t\t\t\t\t\t\tevents: {\n\t\t\t\t\t\t\t\t\t\t\t\tclick: () => ctx.dialog = this.module.confirm.open(() => this._copyProfileImage(), {\n\t\t\t\t\t\t\t\t\t\t\t\t\ttitle: l10n.l('pageEditCharProfile.confirmUpdate', \"Confirm image update\"),\n\t\t\t\t\t\t\t\t\t\t\t\t\tbody: new Elem(n => n.elem('div', [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tn.component(new Txt(l10n.l('pageEditCharProfile.deleteImageBody', \"Do you really wish to update the profile with current character image?\"), { tagName: 'p' })),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tn.component(this.module.avatar.newCharImg(this.ctrl, {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize: 'xlarge',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tresolve: v => v.href,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t})),\n\t\t\t\t\t\t\t\t\t\t\t\t\t])),\n\t\t\t\t\t\t\t\t\t\t\t\t\tconfirm: l10n.l('pageEditCharProfile.update', \"Update\"),\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClose: () => ctx.dialog = null,\n\t\t\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t}, [\n\t\t\t\t\t\t\t\t\t\t\tn.component(new FAIcon('refresh')),\n\t\t\t\t\t\t\t\t\t\t\tn.component(new Txt(l10n.l('pageEditCharProfile.update', \"Update\"))),\n\t\t\t\t\t\t\t\t\t\t])),\n\t\t\t\t\t\t\t\t\t\t(m, c) => this._setUpdateImageDisabled(c, ctx),\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t(m, c) => this._setUpdateImageDisabled(c.getComponent(), ctx),\n\t\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\t\t\tthis.profile,\n\t\t\t\t\t\t\t\tnew Elem(n => n.elem('button', {\n\t\t\t\t\t\t\t\t\tclassName: 'btn medium icon-left',\n\t\t\t\t\t\t\t\t\tevents: {\n\t\t\t\t\t\t\t\t\t\tclick: () => this.module.confirm.open(() => this._deleteCharImage(), {\n\t\t\t\t\t\t\t\t\t\t\ttitle: l10n.l('pageEditCharProfile.confirmDelete', \"Confirm deletion\"),\n\t\t\t\t\t\t\t\t\t\t\tbody: new Elem(n => n.elem('div', [\n\t\t\t\t\t\t\t\t\t\t\t\tn.component(new Txt(l10n.l('pageEditCharProfile.deleteImageBody', \"Do you really wish to delete the image for the profile?\"), { tagName: 'p' })),\n\t\t\t\t\t\t\t\t\t\t\t\tn.elem('p', [ n.component(new ModelTxt(this.profile, m => m.name, { className: 'dialog--strong' })) ]),\n\t\t\t\t\t\t\t\t\t\t\t])),\n\t\t\t\t\t\t\t\t\t\t\tconfirm: l10n.l('pageEditCharProfile.delete', \"Delete\"),\n\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t}, [\n\t\t\t\t\t\t\t\t\tn.component(new FAIcon('trash')),\n\t\t\t\t\t\t\t\t\tn.component(new Txt(l10n.l('pageEditCharProfile.delete', \"Delete\"))),\n\t\t\t\t\t\t\t\t])),\n\t\t\t\t\t\t\t\t(m, c) => c.setProperty('disabled', m.image ? null : 'disabled'),\n\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t]),\n\t\t\t\t\t])),\n\t\t\t\t\t{\n\t\t\t\t\t\tclassName: 'common--sectionpadding pageeditcharprofile--imagesection',\n\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t},\n\t\t\t\t)),\n\t\t\t\tn.component(new PanelSection(\n\t\t\t\t\tl10n.l('pageEditCharProfile.avatar', \"Avatar\"),\n\t\t\t\t\tnew Elem(n => n.elem('div', { className: 'flex-row pad8' }, [\n\t\t\t\t\t\tn.elem('div', { className: 'flex-auto' }, [\n\t\t\t\t\t\t\tn.component(this.module.avatar.newAvatar(this.profile, { char: this.ctrl, size: 'large' })),\n\t\t\t\t\t\t]),\n\t\t\t\t\t\tn.elem('div', { className: 'pageeditchar--avatarbtn flex-auto' }, [\n\t\t\t\t\t\t\tn.component(new FileButton(\n\t\t\t\t\t\t\t\tnew Elem(n => n.elem('div', [\n\t\t\t\t\t\t\t\t\tn.component(new FAIcon('camera')),\n\t\t\t\t\t\t\t\t\tn.component(new Txt(l10n.l('pageEditCharProfile.upload', \"Upload\"))),\n\t\t\t\t\t\t\t\t])),\n\t\t\t\t\t\t\t\t(file, dataUrl) => this.module.createLimits.validateImageSize(\n\t\t\t\t\t\t\t\t\tfile.size,\n\t\t\t\t\t\t\t\t\t() => this.module.dialogCropImage.open(\n\t\t\t\t\t\t\t\t\t\tdataUrl,\n\t\t\t\t\t\t\t\t\t\t(dataUrl, points) => this._setProfileAvatar(file, points),\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t{ className: 'btn small icon-left' },\n\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t\tn.component(new Context(\n\t\t\t\t\t\t\t\t() => ({ dialog: null }),\n\t\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\t\tctx => new ModelComponent(\n\t\t\t\t\t\t\t\t\tthis.profile,\n\t\t\t\t\t\t\t\t\tnew ModelComponent(\n\t\t\t\t\t\t\t\t\t\tthis.ctrl,\n\t\t\t\t\t\t\t\t\t\tnew Elem(n => n.elem('button', {\n\t\t\t\t\t\t\t\t\t\t\tclassName: 'btn small icon-left',\n\t\t\t\t\t\t\t\t\t\t\tevents: {\n\t\t\t\t\t\t\t\t\t\t\t\tclick: () => ctx.dialog = this.module.confirm.open(() => this._copyProfileAvatar(), {\n\t\t\t\t\t\t\t\t\t\t\t\t\ttitle: l10n.l('pageEditCharProfile.confirmUpdate', \"Confirm avatar update\"),\n\t\t\t\t\t\t\t\t\t\t\t\t\tbody: new Elem(n => n.elem('div', [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tn.component(new Txt(l10n.l('pageEditCharProfile.deleteAvatarBody', \"Do you really wish to update the profile with current character avatar?\"), { tagName: 'p' })),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tn.component(this.module.avatar.newAvatar(this.ctrl, { size: 'large' })),\n\t\t\t\t\t\t\t\t\t\t\t\t\t])),\n\t\t\t\t\t\t\t\t\t\t\t\t\tconfirm: l10n.l('pageEditCharProfile.update', \"Update\"),\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClose: () => ctx.dialog = null,\n\t\t\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t}, [\n\t\t\t\t\t\t\t\t\t\t\tn.component(new FAIcon('refresh')),\n\t\t\t\t\t\t\t\t\t\t\tn.component(new Txt(l10n.l('pageEditCharProfile.update', \"Update\"))),\n\t\t\t\t\t\t\t\t\t\t])),\n\t\t\t\t\t\t\t\t\t\t(m, c) => this._setUpdateAvatarDisabled(c, ctx),\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t(m, c) => this._setUpdateAvatarDisabled(c.getComponent(), ctx),\n\t\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t]),\n\t\t\t\t\t\tn.elem('div', { className: 'pageeditchar--avatarbtn flex-auto' }, [\n\t\t\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\t\t\tthis.profile,\n\t\t\t\t\t\t\t\tnew Elem(n => n.elem('button', {\n\t\t\t\t\t\t\t\t\tclassName: 'btn small icon-left',\n\t\t\t\t\t\t\t\t\tevents: {\n\t\t\t\t\t\t\t\t\t\tclick: () => this.module.confirm.open(() => this._deleteProfileAvatar(), {\n\t\t\t\t\t\t\t\t\t\t\ttitle: l10n.l('pageEditCharProfile.confirmDelete', \"Confirm deletion\"),\n\t\t\t\t\t\t\t\t\t\t\tbody: new Elem(n => n.elem('div', [\n\t\t\t\t\t\t\t\t\t\t\t\tn.component(new Txt(l10n.l('pageEditCharProfile.deleteImageBody', \"Do you really wish to delete the avatar for the profile?\"), { tagName: 'p' })),\n\t\t\t\t\t\t\t\t\t\t\t\tn.elem('p', [ n.component(new ModelTxt(this.profile, m => m.name, { className: 'dialog--strong' })) ]),\n\t\t\t\t\t\t\t\t\t\t\t])),\n\t\t\t\t\t\t\t\t\t\t\tconfirm: l10n.l('pageEditCharProfile.delete', \"Delete\"),\n\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t}, [\n\t\t\t\t\t\t\t\t\tn.component(new FAIcon('trash')),\n\t\t\t\t\t\t\t\t\tn.component(new Txt(l10n.l('pageEditCharProfile.delete', \"Delete\"))),\n\t\t\t\t\t\t\t\t])),\n\t\t\t\t\t\t\t\t(m, c) => c.setProperty('disabled', m.avatar ? null : 'disabled'),\n\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t]),\n\t\t\t\t\t])),\n\t\t\t\t\t{\n\t\t\t\t\t\tclassName: 'common--sectionpadding pageeditchar--imagesection',\n\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t\tpopupTip: l10n.l('pageEditCharProfile.avatarInfo', \"Avatar is a small image used to represent the character. Others can see it without having to look at the character. Optimal size is 192x192.\"),\n\t\t\t\t\t},\n\t\t\t\t)),\n\t\t\t\tn.component(new PanelSection(\n\t\t\t\t\tl10n.l('pageEditCharProfile.profileName', \"Profile name\"),\n\t\t\t\t\tnew ModelComponent(\n\t\t\t\t\t\tthis.model,\n\t\t\t\t\t\tnew Input(this.model.name, {\n\t\t\t\t\t\t\tevents: { input: c => this.model.set({ name: c.getValue() }) },\n\t\t\t\t\t\t\tattributes: { name: 'editcharprofile-name', spellcheck: 'true' },\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t(m, c) => c.setValue(m.name),\n\t\t\t\t\t),\n\t\t\t\t\t{\n\t\t\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t\tpopupTip: l10n.l('pageEditCharProfile.nameInfo', \"A short but descriptive name for the profile.\"),\n\t\t\t\t\t},\n\t\t\t\t)),\n\t\t\t\tn.component(new PanelSection(\n\t\t\t\t\tl10n.l('pageEditCharProfile.keyword', \"Keyword\"),\n\t\t\t\t\tnew ModelComponent(\n\t\t\t\t\t\tthis.model,\n\t\t\t\t\t\tnew Input(this.model.key, {\n\t\t\t\t\t\t\tevents: { input: c => this.model.set({ key: c.getValue() }) },\n\t\t\t\t\t\t\tattributes: { name: 'editcharprofile-key', spellcheck: 'false' },\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t(m, c) => c.setValue(m.key),\n\t\t\t\t\t),\n\t\t\t\t\t{\n\t\t\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t\tpopupTip: l10n.l('pageEditCharProfile.keyInfo', \"Keyword is used to identify the character profile in console commands.\"),\n\t\t\t\t\t},\n\t\t\t\t)),\n\t\t\t\tn.elem('div', { className: 'pageeditcharprofile--details flex-row pad8' }, [\n\t\t\t\t\tn.component(new PanelSection(\n\t\t\t\t\t\tl10n.l('pageEditCharProfile.gender', \"Gender\"),\n\t\t\t\t\t\tnew ModelComponent(\n\t\t\t\t\t\t\tthis.model,\n\t\t\t\t\t\t\tnew Input(this.model.gender, {\n\t\t\t\t\t\t\t\tevents: { input: c => this.model.set({ gender: c.getValue() }) },\n\t\t\t\t\t\t\t\tattributes: { name: 'editcharprofile-gender', spellcheck: 'false' },\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t(m, c) => c.setValue(m.gender),\n\t\t\t\t\t\t),\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tclassName: 'flex-1 common--sectionpadding',\n\t\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t)),\n\t\t\t\t\tn.component(new PanelSection(\n\t\t\t\t\t\tl10n.l('pageEditCharProfile.species', \"Species\"),\n\t\t\t\t\t\tnew ModelComponent(\n\t\t\t\t\t\t\tthis.model,\n\t\t\t\t\t\t\tnew Input(this.model.species, {\n\t\t\t\t\t\t\t\tevents: { input: c => this.model.set({ species: c.getValue() }) },\n\t\t\t\t\t\t\t\tattributes: { name: 'editcharprofile-species', spellcheck: 'false' },\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t(m, c) => c.setValue(m.species),\n\t\t\t\t\t\t),\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tclassName: 'flex-1 common--sectionpadding',\n\t\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t)),\n\t\t\t\t]),\n\t\t\t\tn.component(new PanelSection(\n\t\t\t\t\tl10n.l('pageEditCharProfile.desc', \"Description\"),\n\t\t\t\t\tnew ModelComponent(\n\t\t\t\t\t\tthis.model,\n\t\t\t\t\t\tnew Textarea(this.model.desc, {\n\t\t\t\t\t\t\tclassName: 'common--paneltextarea common--desc-size',\n\t\t\t\t\t\t\tevents: { input: c => this.model.set({ desc: c.getValue() }) },\n\t\t\t\t\t\t\tattributes: { name: 'editcharprofile-desc', spellcheck: 'false' },\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t(m, c) => c.setValue(m.desc),\n\t\t\t\t\t),\n\t\t\t\t\t{\n\t\t\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t},\n\t\t\t\t)),\n\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\tthis.model,\n\t\t\t\t\tnew LabelToggleBox(l10n.l('pageEditCharProfile.customTeleportMessages', \"Custom teleport messages\"), false, {\n\t\t\t\t\t\tclassName: 'common--formmargin',\n\t\t\t\t\t\tonChange: v => this.model.set({ customTeleportMsgs: v }),\n\t\t\t\t\t\tpopupTip: l10n.l('pageEditCharProfile.customTeleportMessagesInfo', \"Customize teleport messages shown when teleporting. May be overridden by custom teleport messages set for the rooms.\"),\n\t\t\t\t\t}),\n\t\t\t\t\t(m, c) => c.setValue(m.customTeleportMsgs, false),\n\t\t\t\t)),\n\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\tthis.model,\n\t\t\t\t\tnew Collapser(null),\n\t\t\t\t\t(m, c, change) => {\n\t\t\t\t\t\tif (change && !change.hasOwnProperty('customTeleportMsgs')) return;\n\n\t\t\t\t\t\t// Reset custom messages if we hide them.\n\t\t\t\t\t\tif (!m.customTeleportMsgs) {\n\t\t\t\t\t\t\tm.set({\n\t\t\t\t\t\t\t\tteleportLeaveMsg: this.profile.teleportLeaveMsg,\n\t\t\t\t\t\t\t\tteleportArriveMsg: this.profile.teleportArriveMsg,\n\t\t\t\t\t\t\t\tteleportTravelMsg: this.profile.teleportTravelMsg,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tc.setComponent(m.customTeleportMsgs\n\t\t\t\t\t\t\t? new Elem(n => n.elem('div', { className: 'common--formsubsection' }, [\n\t\t\t\t\t\t\t\tn.component(new PanelSection(\n\t\t\t\t\t\t\t\t\tl10n.l('pageEditCharProfile.teleportLeaveMessage', \"Teleport leave message\"),\n\t\t\t\t\t\t\t\t\tnew ModelComponent(\n\t\t\t\t\t\t\t\t\t\tthis.model,\n\t\t\t\t\t\t\t\t\t\tnew Textarea(this.model.teleportLeaveMsg, {\n\t\t\t\t\t\t\t\t\t\t\tclassName: 'common--paneltextarea-small common--paneltextarea-smallfont',\n\t\t\t\t\t\t\t\t\t\t\tevents: { input: c => this.model.set({ teleportLeaveMsg: c.getValue() }) },\n\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\t(m, c) => c.setValue(m.teleportLeaveMsg),\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tclassName: 'small common--sectionpadding',\n\t\t\t\t\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t\t\t\t\t\tpopupTip: l10n.l('pageEditCharProfile.teleportLeaveMessageInfo', \"Message seen by the origin room when teleporting away. The character's name will be prepended.\"),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t\t\tn.component(new PanelSection(\n\t\t\t\t\t\t\t\t\tl10n.l('pageEditCharProfile.teleportArriveMessage', \"Teleport arrival message\"),\n\t\t\t\t\t\t\t\t\tnew ModelComponent(\n\t\t\t\t\t\t\t\t\t\tthis.model,\n\t\t\t\t\t\t\t\t\t\tnew Textarea(this.model.teleportArriveMsg, {\n\t\t\t\t\t\t\t\t\t\t\tclassName: 'common--paneltextarea-small common--paneltextarea-smallfont',\n\t\t\t\t\t\t\t\t\t\t\tevents: { input: c => this.model.set({ teleportArriveMsg: c.getValue() }) },\n\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\t(m, c) => c.setValue(m.teleportArriveMsg),\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tclassName: 'small common--sectionpadding',\n\t\t\t\t\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t\t\t\t\t\tpopupTip: l10n.l('pageEditCharProfile.teleportArriveMessageInfo', \"Message seen by the arrival room when teleporting there. The character's name will be prepended.\"),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t\t\tn.component(new PanelSection(\n\t\t\t\t\t\t\t\t\tl10n.l('pageEditCharProfile.teleportTravelMessage', \"Teleport travel message\"),\n\t\t\t\t\t\t\t\t\tnew ModelComponent(\n\t\t\t\t\t\t\t\t\t\tthis.model,\n\t\t\t\t\t\t\t\t\t\tnew Textarea(this.model.teleportTravelMsg, {\n\t\t\t\t\t\t\t\t\t\t\tclassName: 'common--paneltextarea-small common--paneltextarea-smallfont',\n\t\t\t\t\t\t\t\t\t\t\tevents: { input: c => this.model.set({ teleportTravelMsg: c.getValue() }) },\n\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\t(m, c) => c.setValue(m.teleportTravelMsg),\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tclassName: 'small common--sectionpadding',\n\t\t\t\t\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t\t\t\t\t\tpopupTip: l10n.l('pageEditCharProfile.teleportTravelMessageInfo', \"Message seen by you when teleporting. The character's name will be prepended.\"),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t\t])) : null,\n\t\t\t\t\t\t);\n\t\t\t\t\t},\n\t\t\t\t)),\n\t\t\t\tn.component('message', new Collapser(null)),\n\t\t\t\tn.elem('div', { className: 'pad-top-xl flex-row margin8 flex-end' }, [\n\t\t\t\t\tn.elem('div', { className: 'flex-1' }, [\n\t\t\t\t\t\tn.elem('update', 'button', { events: {\n\t\t\t\t\t\t\tclick: () => this._save(),\n\t\t\t\t\t\t}, className: 'btn primary common--btnwidth' }, [\n\t\t\t\t\t\t\tn.component(new ModelTxt(this.model, m => this.model && Object.keys(this._getChanges()).length\n\t\t\t\t\t\t\t\t? l10n.l('pageEditCharProfile.update', \"Save edits\")\n\t\t\t\t\t\t\t\t: l10n.l('pageEditCharProfile.close', \"Close\"))),\n\t\t\t\t\t\t]),\n\t\t\t\t\t]),\n\t\t\t\t\tn.elem('button', { events: {\n\t\t\t\t\t\tclick: () => this.module.confirm.open(() => this._delete(), {\n\t\t\t\t\t\t\ttitle: l10n.l('pageEditCharProfile.confirmDelete', \"Confirm deletion\"),\n\t\t\t\t\t\t\tbody: l10n.l('pageEditCharProfile.deleteProfileBody', \"Do you really wish to delete this profile?\"),\n\t\t\t\t\t\t\tconfirm: l10n.l('pageEditCharProfile.delete', \"Delete\"),\n\t\t\t\t\t\t}),\n\t\t\t\t\t}, className: 'iconbtn medium' }, [\n\t\t\t\t\t\tn.component(new FAIcon('trash')),\n\t\t\t\t\t]),\n\t\t\t\t]),\n\t\t\t])),\n\t\t\t(col, c, ev) => {\n\t\t\t\t// Check that the profile still exists\n\t\t\t\tlet id = this.profile.id;\n\t\t\t\tfor (let p of col) {\n\t\t\t\t\tif (p.id === id) return;\n\t\t\t\t}\n\t\t\t\tthis._close();\n\t\t\t},\n\t\t);\n\t\treturn this.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t\tif (this.model) {\n\t\t\tthis.state.changes = this.model.getModifications() || {};\n\t\t\tthis.model.dispose();\n\t\t\tthis.model = null;\n\t\t}\n\t}\n\n\t_save() {\n\t\tlet p;\n\t\tif (!this.model) {\n\t\t\tp = Promise.resolve();\n\t\t} else {\n\t\t\tlet change = this._getChanges();\n\t\t\tp = Object.keys(change).length\n\t\t\t\t? this.ctrl.call('setProfile', Object.assign(change, { profileId: this.profile.id }))\n\t\t\t\t: Promise.resolve();\n\t\t}\n\n\t\treturn p.then(() => {\n\t\t\tthis._close();\n\t\t}).catch(err => {\n\t\t\tthis._setMessage(l10n.l(err.code, err.message, err.data));\n\t\t});\n\t}\n\n\t_getChanges() {\n\t\tif (!this.model) return {};\n\n\t\tlet change = Object.assign({}, this.model.getModifications());\n\t\t// If custom teleport messages is disabled, we don't save the hidden text values.\n\t\tif (!this.model.customTeleportMsgs) {\n\t\t\tdelete change.teleportLeaveMsg;\n\t\t\tdelete change.teleportArriveMsg;\n\t\t\tdelete change.teleportTravelMsg;\n\t\t}\n\t\treturn change;\n\t}\n\n\t_setMessage(msg) {\n\t\tif (!this.elem) return;\n\t\tthis.elem.getComponent().getNode('message').setComponent(msg\n\t\t\t? new Txt(msg, { className: 'dialog--error' })\n\t\t\t: null,\n\t\t);\n\t}\n\n\t_close() {\n\t\tthis.close();\n\t\tif (this.model) {\n\t\t\tthis.model.dispose();\n\t\t\tthis.model = null;\n\t\t}\n\t\tthis.state.changes = {};\n\t}\n\n\t_setProfileImage(file, points) {\n\t\treturn this.module.file.upload(file, 'core.upload.image')\n\t\t\t.then(result => this.ctrl.call('setProfileImage', {\n\t\t\t\tprofileId: this.profile.id,\n\t\t\t\tuploadId: result.uploadId,\n\t\t\t\tx1: parseInt(points[0]),\n\t\t\t\ty1: parseInt(points[1]),\n\t\t\t\tx2: parseInt(points[2]),\n\t\t\t\ty2: parseInt(points[3]),\n\t\t\t})).then(() => this.module.toaster.open({\n\t\t\t\ttitle: l10n.l('pageEditCharProfile.imageUploaded', \"Image uploaded\"),\n\t\t\t\tcontent: new Txt(l10n.l('pageEditCharProfile.imageUploadedBody', \"Profile image was uploaded and saved.\")),\n\t\t\t\tcloseOn: 'click',\n\t\t\t\ttype: 'success',\n\t\t\t\tautoclose: true,\n\t\t\t}));\n\t}\n\n\t_copyProfileImage() {\n\t\treturn this.ctrl.call('copyProfileImage', { profileId: this.profile.id })\n\t\t\t.then(() => this.module.toaster.open({\n\t\t\t\ttitle: l10n.l('pageEditCharProfile.imageUpdate', \"Image updated\"),\n\t\t\t\tcontent: new Txt(l10n.l('pageEditCharProfile.imageUpdateBody', \"Profile image was updated and saved.\")),\n\t\t\t\tcloseOn: 'click',\n\t\t\t\ttype: 'success',\n\t\t\t\tautoclose: true,\n\t\t\t}));\n\t}\n\n\t_deleteCharImage() {\n\t\treturn this.ctrl.call('deleteProfileImage', { profileId: this.profile.id })\n\t\t\t.then(() => this.module.toaster.open({\n\t\t\t\ttitle: l10n.l('pageEditCharProfile.imageDeleted', \"Image deleted\"),\n\t\t\t\tcontent: new Txt(l10n.l('pageEditCharProfile.imageDeletedBody', \"Profile image was successfully deleted.\")),\n\t\t\t\tcloseOn: 'click',\n\t\t\t\ttype: 'success',\n\t\t\t\tautoclose: true,\n\t\t\t}))\n\t\t\t.catch(err => this.module.confirm.openError(err));\n\t}\n\n\t_setProfileAvatar(file, points) {\n\t\treturn this.module.file.upload(file, 'core.upload.image')\n\t\t\t.then(result => this.ctrl.call('setProfileAvatar', {\n\t\t\t\tprofileId: this.profile.id,\n\t\t\t\tuploadId: result.uploadId,\n\t\t\t\tx1: parseInt(points[0]),\n\t\t\t\ty1: parseInt(points[1]),\n\t\t\t\tx2: parseInt(points[2]),\n\t\t\t\ty2: parseInt(points[3]),\n\t\t\t})).then(() => this.module.toaster.open({\n\t\t\t\ttitle: l10n.l('pageEditCharProfile.avatarUploaded', \"Avatar uploaded\"),\n\t\t\t\tcontent: new Txt(l10n.l('pageEditCharProfile.avatarUploadedBody', \"Profile avatar was uploaded and saved.\")),\n\t\t\t\tcloseOn: 'click',\n\t\t\t\ttype: 'success',\n\t\t\t\tautoclose: true,\n\t\t\t}));\n\t}\n\n\t_copyProfileAvatar() {\n\t\treturn this.ctrl.call('copyProfileAvatar', { profileId: this.profile.id })\n\t\t\t.then(() => this.module.toaster.open({\n\t\t\t\ttitle: l10n.l('pageEditCharProfile.avatarUpdate', \"Avatar updated\"),\n\t\t\t\tcontent: new Txt(l10n.l('pageEditCharProfile.avatarUpdateBody', \"Profile avatar was updated and saved.\")),\n\t\t\t\tcloseOn: 'click',\n\t\t\t\ttype: 'success',\n\t\t\t\tautoclose: true,\n\t\t\t}));\n\t}\n\n\t_deleteProfileAvatar() {\n\t\treturn this.ctrl.call('deleteProfileAvatar', { profileId: this.profile.id })\n\t\t\t.then(() => this.module.toaster.open({\n\t\t\t\ttitle: l10n.l('pageEditCharProfile.avatarDeleted', \"Avatar deleted\"),\n\t\t\t\tcontent: new Txt(l10n.l('pageEditCharProfile.avatarDeletedBody', \"Profile avatar was successfully deleted.\")),\n\t\t\t\tcloseOn: 'click',\n\t\t\t\ttype: 'success',\n\t\t\t\tautoclose: true,\n\t\t\t}))\n\t\t\t.catch(err => this.module.confirm.openError(err));\n\t}\n\n\t_delete() {\n\t\tthis.module.deleteProfile.deleteProfile(this.ctrl, { profileId: this.profile.id })\n\t\t\t.catch(err => this._setMessage(l10n.l(err.code, err.message, err.data)));\n\t}\n\n\t_setUpdateImageDisabled(component, ctx) {\n\t\tthis._setUpdateDisabled(component, ctx, !this.ctrl.image || this.module.avatar.charImgHref(this.profile) == this.ctrl.image.href);\n\t}\n\n\t_setUpdateAvatarDisabled(component, ctx) {\n\t\tthis._setUpdateDisabled(component, ctx, !this.ctrl.avatar || this.profile.avatar == this.ctrl.avatar);\n\t}\n\n\t_setUpdateDisabled(component, ctx, disable) {\n\t\tcomponent.setProperty('disabled', disable ? 'disabled' : null);\n\t\tif (disable && ctx.dialog) {\n\t\t\tctx.dialog.close();\n\t\t\tctx.dialog = null;\n\t\t}\n\t}\n}\n\nexport default PageEditCharProfileComponent;\n","import l10n from 'modapp-l10n';\nimport PageEditCharProfileComponent from './PageEditCharProfileComponent';\nimport './pageEditCharProfile.scss';\n\n/**\n * PageEditCharProfile opens an in-panel edit char profile page in the char panel.\n */\nclass PageEditCharProfile {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\t\tthis.app.require([\n\t\t\t'api',\n\t\t\t'charPages',\n\t\t\t'dialogCropImage',\n\t\t\t'pageChar',\n\t\t\t'confirm',\n\t\t\t'avatar',\n\t\t\t'deleteProfile',\n\t\t\t'toaster',\n\t\t\t'file',\n\t\t\t'createLimits',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\t}\n\n\t/**\n\t * Opens an in-panel edit char page in the char panel.\n\t * @param {Model} ctrl Controlled char model.\n\t * @param {string} profileId Profile ID of the controlled character.\n\t * @returns {Promise.<function>} Promise of a close function.\n\t */\n\topen(ctrl, profileId) {\n\t\treturn this.module.api.get('core.profile.' + profileId + '.details').then(profile => {\n\t\t\tprofile.on();\n\t\t\treturn this.module.charPages.openPage(\n\t\t\t\tctrl.id,\n\t\t\t\tctrl.id,\n\t\t\t\t(ctrl, char, state, close) => ({\n\t\t\t\t\tcomponent: new PageEditCharProfileComponent(this.module, ctrl, profile, state, close),\n\t\t\t\t\ttitle: l10n.l('pageEditCharProfile.editCharProfile', \"Edit Character Profile\"),\n\t\t\t\t\tonClose: () => {\n\t\t\t\t\t\tprofile.off();\n\t\t\t\t\t\tclose();\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t);\n\t\t});\n\t}\n}\n\nexport default PageEditCharProfile;\n","import { Elem, Txt, Input, Textarea, Context } from 'modapp-base-component';\nimport { ModelComponent, ModelTxt, CollectionList } from 'modapp-resource-component';\nimport { ModifyModel, Model } from 'modapp-resource';\nimport l10n from 'modapp-l10n';\nimport Collapser from 'components/Collapser';\nimport Fader from 'components/Fader';\nimport PanelSection from 'components/PanelSection';\nimport FAIcon from 'components/FAIcon';\nimport LabelToggleBox from 'components/LabelToggleBox';\nimport ExitIcon from 'components/ExitIcon';\nimport NavButtons, { directions } from 'components/NavButtons';\nimport ModelCollapser from 'components/ModelCollapser';\nimport prepareKeys from 'utils/prepareKeys';\n\n/**\n * PageEditExitComponent renders a room exit edit page.\n */\nclass PageEditExitComponent {\n\tconstructor(module, ctrl, room, exitId, model, state, close) {\n\t\tstate.model = state.model || {};\n\t\tstate.exit = state.exit || {};\n\t\tstate.exitInfo = state.exitInfo || {};\n\n\t\tthis.module = module;\n\t\tthis.ctrl = ctrl;\n\t\tthis.room = room;\n\t\tthis.exitId = exitId;\n\t\tthis.model = model;\n\t\tthis.state = state;\n\t\tthis.close = close;\n\t\tthis._message = new Collapser();\n\t}\n\n\trender(el) {\n\t\tthis.elem = new ModelComponent(\n\t\t\tthis.model,\n\t\t\tnew Fader(null),\n\t\t\t(m, c, change) => {\n\t\t\t\tif (change && !change.hasOwnProperty('exit')) return;\n\t\t\t\tthis._setComponent(c, m.exit);\n\t\t\t},\n\t\t);\n\t\treturn this.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n\n\t_setComponent(c, exit) {\n\t\tif (!exit) {\n\t\t\tc.setComponent(null);\n\t\t\treturn;\n\t\t}\n\t\tc.setComponent(new Context(\n\t\t\t() => ({\n\t\t\t\tmodel: new Model({\n\t\t\t\t\tdata: { keys: this.state.hasOwnProperty('keys') ? this.state.keys : exit.keys.join(\", \") },\n\t\t\t\t\teventBus: this.module.self.app.eventbus,\n\t\t\t\t}),\n\t\t\t\texit: new ModifyModel(exit, {\n\t\t\t\t\tprops: this.state.exit,\n\t\t\t\t\teventBus: this.module.self.app.eventBus,\n\t\t\t\t}),\n\t\t\t}),\n\t\t\tctx => {\n\t\t\t\tthis.state.exit = ctx.exit.getModifications() || {};\n\t\t\t\tctx.exit.dispose();\n\t\t\t},\n\t\t\tctx => new Elem(n => n.elem('div', { className: 'pageeditexit' }, [\n\t\t\t\tn.component(new PanelSection(\n\t\t\t\t\tl10n.l('pageEditExit.originRoom', \"Origin\"),\n\t\t\t\t\tnew ModelTxt(this.room, m => m.name),\n\t\t\t\t\t{\n\t\t\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t},\n\t\t\t\t)),\n\t\t\t\tn.component(new PanelSection(\n\t\t\t\t\tl10n.l('pageEditExit.targetRoom', \"Destination\"),\n\t\t\t\t\tnew ModelTxt(exit.targetRoom, m => m.name),\n\t\t\t\t\t{\n\t\t\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t},\n\t\t\t\t)),\n\t\t\t\tn.component(new PanelSection(\n\t\t\t\t\tl10n.l('pageEditExit.exitName', \"Exit name\"),\n\t\t\t\t\tnew ModelComponent(\n\t\t\t\t\t\tctx.exit,\n\t\t\t\t\t\tnew Input(ctx.exit.name, {\n\t\t\t\t\t\t\tevents: { input: c => ctx.exit.set({ name: c.getValue() }) },\n\t\t\t\t\t\t\tattributes: { spellcheck: 'false' },\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t(m, c) => c.setValue(m.name),\n\t\t\t\t\t),\n\t\t\t\t\t{\n\t\t\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t},\n\t\t\t\t)),\n\t\t\t\tn.component(new PanelSection(\n\t\t\t\t\tl10n.l('pageEditExit.exitName', \"Keywords\"),\n\t\t\t\t\tnew Input(ctx.model.keys, {\n\t\t\t\t\t\tevents: { input: c => ctx.model.set({ keys: c.getValue() }) },\n\t\t\t\t\t\tattributes: { spellcheck: 'false' },\n\t\t\t\t\t}),\n\t\t\t\t\t{\n\t\t\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t\tpopupTip: l10n.l('pageEditExit.keysInfo', \"Comma-separated list of case-insensitive keywords used for identifying the exit.\"),\n\t\t\t\t\t},\n\t\t\t\t)),\n\t\t\t\tn.elem('div', { className: 'flex-row pad8 common--sectionpadding' }, [\n\t\t\t\t\tn.component(new PanelSection(\n\t\t\t\t\t\tl10n.l('pageEditExit.navigation', \"Navigation\"),\n\t\t\t\t\t\tnew ModelComponent(\n\t\t\t\t\t\t\tctx.exit,\n\t\t\t\t\t\t\tnew NavButtons(null, {\n\t\t\t\t\t\t\t\tonClick: (dir) => ctx.exit.set({ nav: ctx.exit.nav == dir ? '' : dir }),\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t(m, c, change) => {\n\t\t\t\t\t\t\t\tif (!change || change.hasOwnProperty('nav')) {\n\t\t\t\t\t\t\t\t\tc.setState(this._getNavState(m.nav));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t),\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tclassName: 'flex-1',\n\t\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t)),\n\t\t\t\t\tn.component(new PanelSection(\n\t\t\t\t\t\tl10n.l('pageEditExit.icon', \"Icon\"),\n\t\t\t\t\t\tnew Elem(n => n.elem('div', { className: 'flex-row' }, [\n\t\t\t\t\t\t\tn.component(this._newIconSet(ctx.exit, [\n\t\t\t\t\t\t\t\t[ 'nw', 'n', 'ne' ],\n\t\t\t\t\t\t\t\t[ 'w', '', 'e' ],\n\t\t\t\t\t\t\t\t[ 'sw', 's', 'se' ],\n\t\t\t\t\t\t\t], {\n\t\t\t\t\t\t\t\tclassName: 'pageeditexit--dir-icons flex-auto',\n\t\t\t\t\t\t\t})),\n\t\t\t\t\t\t\tn.component(this._newIconSet(ctx.exit, [\n\t\t\t\t\t\t\t\t[ 'in', 'out' ],\n\t\t\t\t\t\t\t\t[ 'up', 'down' ],\n\t\t\t\t\t\t\t], {\n\t\t\t\t\t\t\t\tclassName: 'pageeditexit--misc-icons flex-1',\n\t\t\t\t\t\t\t})),\n\t\t\t\t\t\t])),\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tclassName: 'flex-1',\n\t\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t)),\n\t\t\t\t]),\n\t\t\t\tn.component(new PanelSection(\n\t\t\t\t\tl10n.l('pageEditExit.leaveMessage', \"Leave message\"),\n\t\t\t\t\tnew ModelComponent(\n\t\t\t\t\t\tctx.exit,\n\t\t\t\t\t\tnew Textarea(ctx.exit.leaveMsg, {\n\t\t\t\t\t\t\tclassName: 'common--paneltextarea-small',\n\t\t\t\t\t\t\tevents: { input: c => ctx.exit.set({ leaveMsg: c.getValue() }) },\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t(m, c) => c.setValue(m.leaveMsg),\n\t\t\t\t\t),\n\t\t\t\t\t{\n\t\t\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t\tpopupTip: l10n.l('pageEditExit.leaveMessageInfo', \"Message seen by the origin room. Usually starts with \\\"leaves ...\\\".\"),\n\t\t\t\t\t},\n\t\t\t\t)),\n\t\t\t\tn.component(new PanelSection(\n\t\t\t\t\tl10n.l('pageEditExit.arriveMessage', \"Arrival message\"),\n\t\t\t\t\tnew ModelComponent(\n\t\t\t\t\t\tctx.exit,\n\t\t\t\t\t\tnew Textarea(ctx.exit.arriveMsg, {\n\t\t\t\t\t\t\tclassName: 'common--paneltextarea-small',\n\t\t\t\t\t\t\tevents: { input: c => ctx.exit.set({ arriveMsg: c.getValue() }) },\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t(m, c) => c.setValue(m.arriveMsg),\n\t\t\t\t\t),\n\t\t\t\t\t{\n\t\t\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t\tpopupTip: l10n.l('pageEditExit.arriveMessageInfo', \"Message seen by the arrival room. Usually starts with \\\"arrives from ...\\\".\"),\n\t\t\t\t\t},\n\t\t\t\t)),\n\t\t\t\tn.component(new PanelSection(\n\t\t\t\t\tl10n.l('pageEditExit.travelMessage', \"Travel message\"),\n\t\t\t\t\tnew ModelComponent(\n\t\t\t\t\t\tctx.exit,\n\t\t\t\t\t\tnew Textarea(ctx.exit.travelMsg, {\n\t\t\t\t\t\t\tclassName: 'common--paneltextarea-small',\n\t\t\t\t\t\t\tevents: { input: c => ctx.exit.set({ travelMsg: c.getValue() }) },\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t(m, c) => c.setValue(m.travelMsg),\n\t\t\t\t\t),\n\t\t\t\t\t{\n\t\t\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t\tpopupTip: l10n.l('pageEditExit.travelMessageInfo', \"Message seen by the exit user. Usually starts with \\\"goes ...\\\".\"),\n\t\t\t\t\t},\n\t\t\t\t)),\n\t\t\t\tn.elem('div', { className: 'pageeditexit--flags' }, [\n\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\tctx.exit,\n\t\t\t\t\t\tnew LabelToggleBox(l10n.l('pageEditExit.isInactive', \"Is inactive\"), false, {\n\t\t\t\t\t\t\tclassName: 'common--formmargin',\n\t\t\t\t\t\t\tonChange: v => ctx.exit.set({ inactive: v }),\n\t\t\t\t\t\t\tpopupTip: l10n.l('pageEditExit.activeInfo', \"An inactive exit is not listed, and may not be used. Room scripts may still redirect to the exit.\"),\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t(m, c) => c.setValue(m.inactive, false),\n\t\t\t\t\t)),\n\t\t\t\t]),\n\t\t\t\tn.elem('div', { className: 'pageeditexit--flags' }, [\n\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\tctx.exit,\n\t\t\t\t\t\tnew LabelToggleBox(l10n.l('pageEditExit.isHidden', \"Is hidden\"), false, {\n\t\t\t\t\t\t\tclassName: 'common--formmargin',\n\t\t\t\t\t\t\tonChange: v => ctx.exit.set({ hidden: v }),\n\t\t\t\t\t\t\tpopupTip: l10n.l('pageEditExit.hiddenInfo', \"A hidden exit is not listed among room exits, but characters may still use it if they know the keyword(s).\"),\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t(m, c) => c.setValue(m.hidden, false),\n\t\t\t\t\t)),\n\t\t\t\t\tn.component(new ModelCollapser(ctx.exit, [{\n\t\t\t\t\t\tcondition: m => !m.hidden,\n\t\t\t\t\t\tcomponent: new ModelComponent(\n\t\t\t\t\t\t\tctx.exit,\n\t\t\t\t\t\t\tnew LabelToggleBox(l10n.l('pageEditExit.isTransparent', \"Is transparent\"), false, {\n\t\t\t\t\t\t\t\tclassName: 'pad-bottom-l',\n\t\t\t\t\t\t\t\tonChange: v => ctx.exit.set({ transparent: v }),\n\t\t\t\t\t\t\t\tpopupTip: l10n.l('pageEditExit.transparentInfo', \"A transparent exit allows you to see what characters are awake in the target room.\"),\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t(m, c) => c.setValue(m.transparent, false),\n\t\t\t\t\t\t),\n\t\t\t\t\t}])),\n\t\t\t\t]),\n\t\t\t\tn.component(this._message),\n\t\t\t\tn.elem('div', { className: 'pad-top-xl flex-row margin8 flex-end' }, [\n\t\t\t\t\tn.elem('div', { className: 'flex-1' }, [\n\t\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\t\tctx.model,\n\t\t\t\t\t\t\tnew ModelComponent(\n\t\t\t\t\t\t\t\tctx.exit,\n\t\t\t\t\t\t\t\tnew Elem(n => n.elem('update', 'button', { events: {\n\t\t\t\t\t\t\t\t\tclick: () => this._save(ctx),\n\t\t\t\t\t\t\t\t}, className: 'btn primary common--btnwidth' }, [\n\t\t\t\t\t\t\t\t\tn.component('text', new Txt()),\n\t\t\t\t\t\t\t\t])),\n\t\t\t\t\t\t\t\t(m, c) => this._setSaveText(ctx, c),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t(m, c) => this._setSaveText(ctx, c.getComponent()),\n\t\t\t\t\t\t)),\n\t\t\t\t\t]),\n\t\t\t\t\tn.elem('button', { events: {\n\t\t\t\t\t\tclick: () => this.module.confirm.open(() => this._delete(), {\n\t\t\t\t\t\t\ttitle: l10n.l('pageEditExit.confirmDelete', \"Confirm deletion\"),\n\t\t\t\t\t\t\tbody: l10n.l('pageEditExit.deleteExitBody', \"Do you really wish to delete this exit?\"),\n\t\t\t\t\t\t\tconfirm: l10n.l('pageEditExit.delete', \"Delete\"),\n\t\t\t\t\t\t}),\n\t\t\t\t\t}, className: 'iconbtn medium' }, [\n\t\t\t\t\t\tn.component(new FAIcon('trash')),\n\t\t\t\t\t]),\n\t\t\t\t]),\n\t\t\t])),\n\t\t));\n\t}\n\n\t_newIconSet(model, set, opt) {\n\t\treturn new CollectionList(set, row => new CollectionList(\n\t\t\trow,\n\t\t\ticon => new ModelComponent(\n\t\t\t\tmodel,\n\t\t\t\tnew Elem(n => n.elem('div', { className: 'pageeditexit--icon' }, [\n\t\t\t\t\tn.elem('btn', 'button', {\n\t\t\t\t\t\tclassName: 'iconbtn tiny tinyicon',\n\t\t\t\t\t\tattributes: icon ? null : { disabled: '' },\n\t\t\t\t\t\tevents: {\n\t\t\t\t\t\t\tclick: (e, ev) => {\n\t\t\t\t\t\t\t\tmodel.set({ icon: model.icon == icon ? '' : icon });\n\t\t\t\t\t\t\t\tev.stopPropagation();\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t}, [\n\t\t\t\t\t\tn.component(new ExitIcon(icon)),\n\t\t\t\t\t]),\n\t\t\t\t])),\n\t\t\t\t(m, c) => c[icon && model.icon == icon ? 'addNodeClass' : 'removeNodeClass']('btn', 'active'),\n\t\t\t),\n\t\t\t{\n\t\t\t\tclassName: 'pageeditexit--icon-row flex-row',\n\t\t\t\thorizontal: true,\n\t\t\t},\n\t\t), opt);\n\t}\n\n\t_getNavState(nav) {\n\t\treturn directions.reduce((state, dir) => (state[dir] = {\n\t\t\tselected: dir == nav,\n\t\t}, state), {});\n\t}\n\n\t_setSaveText(ctx, c) {\n\t\tc.getNode('text').setText(this._getModifications(ctx)\n\t\t\t? l10n.l('pageEditExit.update', \"Save edits\")\n\t\t\t: l10n.l('pageEditExit.close', \"Close\"),\n\t\t);\n\t}\n\n\t_getModifications(ctx) {\n\t\tlet mods = ctx.exit.getModifications() || {};\n\t\tif (mods && ctx.exit.hidden) {\n\t\t\tdelete mods.transparent;\n\t\t}\n\t\tlet keys = prepareKeys(ctx.model.keys);\n\t\tif (!this._equalKeys(keys, ctx.exit.keys)) {\n\t\t\tmods.keys = keys;\n\t\t}\n\t\treturn Object.keys(mods).length ? mods : null;\n\t}\n\n\t/**\n\t * Tests if two arrays of key strings are equal.\n\t * @param {Array.<string>} a Array of strings.\n\t * @param {Array.<string>} b Array of strings.\n\t * @returns {boolean} True if equal, otherwise false.\n\t */\n\t_equalKeys(a, b) {\n\t\tlet l = a.length;\n\t\tif (l !== b.length) return false;\n\t\tfor (let i = 0; i < l; i++) {\n\t\t\tif (a[i] !== b[i]) return false;\n\t\t}\n\t\treturn true;\n\t}\n\n\t_save(ctx) {\n\t\tlet p;\n\t\tlet params = this._getModifications(ctx);\n\t\tif (params) {\n\t\t\tparams.exitId = this.exitId;\n\t\t\tp = this.ctrl.call('setExit', params);\n\t\t} else {\n\t\t\tp = Promise.resolve();\n\t\t}\n\n\t\treturn p.then(() => {\n\t\t\tthis._close();\n\t\t}).catch(err => {\n\t\t\tthis._setMessage(l10n.l(err.code, err.message, err.data));\n\t\t});\n\t}\n\n\t_setMessage(msg) {\n\t\tthis._message.setComponent(msg\n\t\t\t? new Txt(msg, { className: 'dialog--error' })\n\t\t\t: null,\n\t\t);\n\t}\n\n\t_delete() {\n\t\tthis.module.deleteExit.deleteExit(this.ctrl, { exitId: this.exitId })\n\t\t\t.catch(err => this._setMessage(l10n.l(err.code, err.message, err.data)));\n\t}\n\n\t_close() {\n\t\tthis.close();\n\t}\n}\n\nexport default PageEditExitComponent;\n","import { Model } from 'modapp-resource';\nimport PageEditExitComponent from './PageEditExitComponent';\nimport l10n from 'modapp-l10n';\nimport getRoomInstanceId from 'utils/getRoomInstanceId';\nimport './pageEditExit.scss';\n\n/**\n * PageEditExit opens an in-panel edit room exit page in the room panel.\n */\nclass PageEditExit {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\t\tthis.app.require([ 'api', 'roomPages', 'confirm', 'deleteExit' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\t}\n\n\n\t/**\n\t * Opens an in-panel edit exit page in the room panel.\n\t * @param {*} ctrl Controlled char model.\n\t * @param {*} room Room model.\n\t * @param {*} exit Exit model of the exit to edit.\n\t * @returns {function} Close function.\n\t */\n\topen(ctrl, room, exit) {\n\n\t\tlet exitId = exit.id;\n\t\t// Lazyload hidden exits.\n\t\tlet model = new Model({ data: { exit: null, error: null }, eventBus: this.app.eventBus });\n\t\tlet open = true;\n\t\tlet exitDetails = null;\n\t\tlet closer = null;\n\t\tlet onDelete = () => closer ? closer() : null;\n\t\tthis.module.api.get('core.exit.' + exitId + '.details')\n\t\t\t.then(exit => {\n\t\t\t\tif (open) {\n\t\t\t\t\texitDetails = exit;\n\t\t\t\t\texit.on('delete', onDelete);\n\t\t\t\t\tmodel.set({ exit });\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch(error => {\n\t\t\t\tif (open) {\n\t\t\t\t\tmodel.set({ error });\n\t\t\t\t}\n\t\t\t});\n\n\t\tcloser = this.module.roomPages.openRoomPage(\n\t\t\t'editExit_' + exitId,\n\t\t\tctrl.id,\n\t\t\tgetRoomInstanceId(room),\n\t\t\t(ctrl, room, state, close) => ({\n\t\t\t\tcomponent: new PageEditExitComponent(this.module, ctrl, room, exitId, model, state, close),\n\t\t\t\ttitle: l10n.l('pageEditExit.editExit', \"Edit Exit\"),\n\t\t\t}),\n\t\t\t{\n\t\t\t\tonClose: () => {\n\t\t\t\t\topen = false;\n\t\t\t\t\tif (exitDetails) {\n\t\t\t\t\t\texitDetails.off('delete', onDelete);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t},\n\t\t);\n\t\treturn closer;\n\t}\n\n\tdispose() {}\n}\n\nexport default PageEditExit;\n","import { Elem } from 'modapp-base-component';\nimport { ModelTxt, CollectionComponent, ModelComponent } from 'modapp-resource-component';\nimport FAIcon from 'components/FAIcon';\n\nclass PageEditExitsExit {\n\tconstructor(module, ctrl, room, exit, opt) {\n\t\topt = opt || {};\n\t\tthis.module = module;\n\t\tthis.ctrl = ctrl;\n\t\tthis.room = room;\n\t\tthis.exit = exit;\n\t\tthis.hidden = opt.hidden;\n\t}\n\n\trender(el) {\n\t\tthis.elem = new ModelComponent(\n\t\t\tthis.exit,\n\t\t\tnew Elem(n => n.elem('div', { className: 'pageeditexits-exit' }, [\n\t\t\t\tn.elem('btn', 'div', { className: 'badge' }, [\n\t\t\t\t\tn.elem('div', { className: 'badge--select' }, [\n\t\t\t\t\t\tn.component(this.hidden ? null : new Elem(n => n.elem('div', { className: 'orderbtn' }, [\n\t\t\t\t\t\t\tn.component(new CollectionComponent(\n\t\t\t\t\t\t\t\tthis.room.exits,\n\t\t\t\t\t\t\t\tnew Elem(n => n.elem('button', {\n\t\t\t\t\t\t\t\t\tclassName: 'iconbtn medium order',\n\t\t\t\t\t\t\t\t\tevents: { click: (c, e) => {\n\t\t\t\t\t\t\t\t\t\tthis._move(-1);\n\t\t\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\t\t} },\n\t\t\t\t\t\t\t\t}, [\n\t\t\t\t\t\t\t\t\tn.component(new FAIcon('caret-up')),\n\t\t\t\t\t\t\t\t])),\n\t\t\t\t\t\t\t\t(col, c) => c.setProperty('disabled', col.atIndex(0) == this.exit ? 'disabled' : null),\n\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t\tn.component(new CollectionComponent(\n\t\t\t\t\t\t\t\tthis.room.exits,\n\t\t\t\t\t\t\t\tnew Elem(n => n.elem('button', {\n\t\t\t\t\t\t\t\t\tclassName: 'iconbtn medium order',\n\t\t\t\t\t\t\t\t\tevents: { click: (c, e) => {\n\t\t\t\t\t\t\t\t\t\tthis._move(1);\n\t\t\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\t\t} },\n\t\t\t\t\t\t\t\t}, [\n\t\t\t\t\t\t\t\t\tn.component(new FAIcon('caret-down')),\n\t\t\t\t\t\t\t\t])),\n\t\t\t\t\t\t\t\t(col, c) => c.setProperty('disabled', col.atIndex(col.length - 1) == this.exit ? 'disabled' : null),\n\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t]))),\n\t\t\t\t\t\tn.elem('div', { className: 'badge--info' }, [\n\t\t\t\t\t\t\tn.component(new ModelTxt(this.exit, m => m.name, { tagName: 'div', className: 'badge--title pageeditexits-exit--title' })),\n\t\t\t\t\t\t\tn.component(new ModelTxt(this.exit, m => m.keys.join(\", \"), { tagName: 'div', className: 'badge--text' })),\n\t\t\t\t\t\t]),\n\t\t\t\t\t\tn.elem('div', { className: 'badge--tools' }, [\n\t\t\t\t\t\t\tn.elem('button', { className: 'iconbtn medium tinyicon', events: {\n\t\t\t\t\t\t\t\tclick: (c, ev) => {\n\t\t\t\t\t\t\t\t\tthis._edit();\n\t\t\t\t\t\t\t\t\tev.stopPropagation();\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t}}, [\n\t\t\t\t\t\t\t\tn.component(new FAIcon('pencil')),\n\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t]),\n\t\t\t\t\t]),\n\t\t\t\t]),\n\t\t\t])),\n\t\t\t(m, c) => c[m.inactive ? 'addClass' : 'removeClass']('inactive'),\n\t\t);\n\t\treturn this.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n\n\t_edit() {\n\t\tthis.module.pageEditExit.open(this.ctrl, this.room, this.exit);\n\t}\n\n\t_move(dir) {\n\t\tlet idx = this.room.exits.toArray().indexOf(this.exit);\n\n\t\tif (idx < 0) return;\n\t\tidx += dir;\n\n\t\tif (idx < 0 || idx >= this.room.exits.length) return;\n\n\t\tthis.ctrl.call('setExitOrder', { exitId: this.exit.id, order: idx })\n\t\t\t.catch(err => this.module.toaster.openError(err));\n\t}\n\n}\n\nexport default PageEditExitsExit;\n","import { Context, Elem, Txt } from 'modapp-base-component';\nimport { CollectionList, CollectionComponent, ModelComponent, ModelTxt } from 'modapp-resource-component';\nimport { ModelToCollection } from 'modapp-resource';\nimport l10n from 'modapp-l10n';\nimport FAIcon from 'components/FAIcon';\nimport Collapser from 'components/Collapser';\nimport PanelSection from 'components/PanelSection';\nimport PageEditExitsExit from './PageEditExitsExit';\n\n/**\n * PageEditExitsComponent renders an edit exits page.\n */\nclass PageEditExitsComponent {\n\tconstructor(module, ctrl, room, model, state) {\n\t\tthis.module = module;\n\t\tthis.ctrl = ctrl;\n\t\tthis.room = room;\n\t\tthis.model = model;\n\t\tthis.roomState = state['editexits_' + room.id] || { exitsOpen: true, hiddenExitsOpen: false };\n\t\tstate['editexits_' + room.id] = this.roomState;\n\n\t}\n\n\trender(el) {\n\t\tthis.elem = new Elem(n => n.elem('div', { className: 'pageeditexits' }, [\n\t\t\tn.component(new ModelTxt(this.room, c => c.name, { tagName: 'div', className: 'common--itemtitle common--sectionpadding' })),\n\t\t\tn.component(new PanelSection(\n\t\t\t\tnew Elem(n => n.elem('div', { className: 'pageeditexits--exitsheader' }, [\n\t\t\t\t\tn.component(new Txt(l10n.l('pageEditExits.exits', \"Exits\"), { tagName: 'h3' })),\n\t\t\t\t])),\n\t\t\t\tnew Elem(n => n.elem('div', [\n\t\t\t\t\tn.component(new CollectionList(\n\t\t\t\t\t\tthis.room.exits,\n\t\t\t\t\t\tm => new PageEditExitsExit(this.module, this.ctrl, this.room, m),\n\t\t\t\t\t)),\n\t\t\t\t\tn.component(new CollectionComponent(\n\t\t\t\t\t\tthis.room.exits,\n\t\t\t\t\t\tnew Collapser(),\n\t\t\t\t\t\t(col, c, ev) => c.setComponent(col.length\n\t\t\t\t\t\t\t? null\n\t\t\t\t\t\t\t: new Txt(l10n.l('pageEditExits.noExits', \"There are no exits\"), { className: 'common--nolistplaceholder' }),\n\t\t\t\t\t\t),\n\t\t\t\t\t)),\n\t\t\t\t\tn.elem('div', { className: 'common--addpadding' }, [\n\t\t\t\t\t\tn.elem('button', { events: {\n\t\t\t\t\t\t\tclick: () => this._onCreate(false),\n\t\t\t\t\t\t}, className: 'btn icon-left common--addbtn' }, [\n\t\t\t\t\t\t\tn.component(new FAIcon('plus')),\n\t\t\t\t\t\t\tn.component(new Txt(l10n.l('pageEditExits.createExit', \"Create new exit\"))),\n\t\t\t\t\t\t]),\n\t\t\t\t\t]),\n\t\t\t\t])),\n\t\t\t\t{\n\t\t\t\t\tclassName: 'pageeditexits--exits common--sectionpadding',\n\t\t\t\t\topen: this.roomState.exitsOpen,\n\t\t\t\t\tonToggle: (c, v) => this.roomState.exitsOpen = v,\n\t\t\t\t},\n\t\t\t)),\n\t\t\tn.component(new PanelSection(\n\t\t\t\tnew Elem(n => n.elem('div', { className: 'pageeditexits--exitsheader' }, [\n\t\t\t\t\tn.component(new Txt(l10n.l('pageEditExits.hiddenExits', \"Hidden exits\"), { tagName: 'h3' })),\n\t\t\t\t])),\n\t\t\t\tnew ModelComponent(\n\t\t\t\t\tthis.model,\n\t\t\t\t\tnew Collapser(),\n\t\t\t\t\t(m, c, change) => {\n\t\t\t\t\t\tif (change && !change.hasOwnProperty('hiddenExits')) return;\n\n\t\t\t\t\t\tc.setComponent(m.hiddenExits ? new Context(\n\t\t\t\t\t\t\t() => new ModelToCollection(m.hiddenExits, {\n\t\t\t\t\t\t\t\tcompare: (a, b) => a.value.name.localeCompare(b.value.name) || a.key.localeCompare(b.key),\n\t\t\t\t\t\t\t\teventBus: this.module.self.app.eventBus,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\texits => exits.dispose(),\n\t\t\t\t\t\t\texits => new Elem(n => n.elem('div', [\n\t\t\t\t\t\t\t\tn.component(new CollectionList(\n\t\t\t\t\t\t\t\t\texits,\n\t\t\t\t\t\t\t\t\tm => new PageEditExitsExit(this.module, this.ctrl, this.room, m, { hidden: true }),\n\t\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t\t\tn.component(new CollectionComponent(\n\t\t\t\t\t\t\t\t\texits,\n\t\t\t\t\t\t\t\t\tnew Collapser(),\n\t\t\t\t\t\t\t\t\t(col, c, ev) => c.setComponent(col.length\n\t\t\t\t\t\t\t\t\t\t? null\n\t\t\t\t\t\t\t\t\t\t: new Txt(l10n.l('pageEditExits.noHiddenExits', \"There are no hidden exits\"), { className: 'common--nolistplaceholder' }),\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t\t\tn.elem('div', { className: 'common--addpadding' }, [\n\t\t\t\t\t\t\t\t\tn.elem('button', { events: {\n\t\t\t\t\t\t\t\t\t\tclick: () => this._onCreate(true),\n\t\t\t\t\t\t\t\t\t}, className: 'btn icon-left common--addbtn' }, [\n\t\t\t\t\t\t\t\t\t\tn.component(new FAIcon('plus')),\n\t\t\t\t\t\t\t\t\t\tn.component(new Txt(l10n.l('pageEditExits.createHiddenExit', \"Create hidden exit\"))),\n\t\t\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\t])),\n\t\t\t\t\t\t) : null);\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t\t{\n\t\t\t\t\tclassName: 'pageeditexits--exits common--sectionpadding',\n\t\t\t\t\topen: this.roomState.hiddenExitsOpen,\n\t\t\t\t\tonToggle: (c, v) => this.roomState.hiddenExitsOpen = v,\n\t\t\t\t},\n\t\t\t)),\n\t\t]));\n\n\t\treturn this.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n\n\t_onCreate(hidden) {\n\t\tthis.module.dialogCreateExit.open(this.ctrl, this.room, {\n\t\t\thidden,\n\t\t});\n\t}\n}\n\nexport default PageEditExitsComponent;\n","import { Elem } from 'modapp-base-component';\nimport { Model } from 'modapp-resource';\nimport FAIcon from 'components/FAIcon';\nimport l10n from 'modapp-l10n';\nimport getRoomInstanceId from 'utils/getRoomInstanceId';\nimport PageEditExitsComponent from './PageEditExitsComponent';\nimport './pageEditExits.scss';\n\n/**\n * PageEditRoom opens an in-panel edit exits page in the room panel.\n */\nclass PageEditRoom {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\t\tthis.app.require([\n\t\t\t'roomPages',\n\t\t\t'pageRoom',\n\t\t\t'confirm',\n\t\t\t'player',\n\t\t\t'pageEditExit',\n\t\t\t'dialogCreateExit',\n\t\t\t'toaster',\n\t\t\t'api',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\n\t\tthis.module.pageRoom.addTool({\n\t\t\tid: 'editExits',\n\t\t\ttype: 'exit',\n\t\t\tsortOrder: 10,\n\t\t\tcomponentFactory: (ctrl, room) => new Elem(n => n.elem('button', { className: 'iconbtn tiny', events: {\n\t\t\t\tclick: (c, e) => {\n\t\t\t\t\tthis.open(ctrl, room);\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t},\n\t\t\t}}, [\n\t\t\t\tn.component(new FAIcon('pencil')),\n\t\t\t])),\n\t\t\tfilter: (ctrl, room, canEdit, canDelete) => canEdit,\n\t\t});\n\t}\n\n\t/**\n\t * Opens an in-panel edit exits page in the room panel.\n\t * @param {*} ctrl Controlled char model.\n\t * @param {*} room Room model of the room to edit the exits for.\n\t * @returns {function} Close function.\n\t */\n\topen(ctrl, room) {\n\t\t// Lazyload hidden exits.\n\t\tlet model = new Model({ data: { hiddenExits: null, error: null }, eventBus: this.app.eventBus });\n\t\tlet open = true;\n\t\tthis.module.api.get('core.room.' + room.id + '.exits.hidden')\n\t\t\t.then(hiddenExits => {\n\t\t\t\tif (open) {\n\t\t\t\t\thiddenExits.on();\n\t\t\t\t\tmodel.set({ hiddenExits });\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch(error => {\n\t\t\t\tif (open) {\n\t\t\t\t\tmodel.set({ error });\n\t\t\t\t}\n\t\t\t});\n\n\t\treturn this.module.roomPages.openRoomPage(\n\t\t\t'editExits',\n\t\t\tctrl.id,\n\t\t\tgetRoomInstanceId(room),\n\t\t\t(ctrl, room, state, close) => ({\n\t\t\t\tcomponent: new PageEditExitsComponent(this.module, ctrl, room, model, state, close),\n\t\t\t\ttitle: l10n.l('pageEditExits.editExits', \"Edit Exits\"),\n\t\t\t}),\n\t\t\t{\n\t\t\t\tonClose: () => {\n\t\t\t\t\topen = false;\n\t\t\t\t\tif (model.hiddenExits) {\n\t\t\t\t\t\tmodel.hiddenExits.off();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t},\n\t\t);\n\t}\n\n\tdispose() {}\n}\n\nexport default PageEditRoom;\n","import { Elem, Txt, Textarea, Context } from 'modapp-base-component';\nimport { ModelComponent, CollectionList } from 'modapp-resource-component';\nimport { ModifyModel, CollectionWrapper } from 'modapp-resource';\nimport l10n from 'modapp-l10n';\nimport Collapser from 'components/Collapser';\nimport PanelSection from 'components/PanelSection';\n\nconst txtLfrpInfo = l10n.l('pageEditLfrp.lfrpInfo', \"When set as looking for roleplay, it helps other players find you.\");\nconst txtLfrpDescInfo = l10n.l('pageEditLfrp.lfrpDescInfo', \"Use the description for in-character roleplay setup, out-of-character info on what type of roleplay you seek, or directions on where to find you. It may be formatted and span multiple paragraphs.\");\n\nclass PageEditLfrpComponent {\n\tconstructor(module, ctrl, settings, state, close) {\n\t\tstate.changes = state.changes || {};\n\n\t\tthis.module = module;\n\t\tthis.ctrl = ctrl;\n\t\tthis.settings = settings;\n\t\tthis.state = state;\n\t\tthis.close = close;\n\t}\n\n\trender(el) {\n\t\tthis.model = new ModifyModel(this.settings, {\n\t\t\tprops: this.state.changes,\n\t\t\teventBus: this.module.self.app.eventBus,\n\t\t});\n\t\tthis.elem = new Elem(n => n.elem('div', { className: 'pageeditlfrp' }, [\n\n\t\t\tn.component(new Txt(txtLfrpInfo, { className: 'pageeditlfrp--info' })),\n\t\t\tn.component(new PanelSection(\n\t\t\t\tl10n.l('pageEditLfrp.roleplyDesc', \"Roleplay description\"),\n\t\t\t\tnew ModelComponent(\n\t\t\t\t\tthis.model,\n\t\t\t\t\tnew Textarea(this.model.lfrpDesc, {\n\t\t\t\t\t\tclassName: 'common--paneltextarea common--desc-size',\n\t\t\t\t\t\tevents: { input: c => this.model.set({ lfrpDesc: c.getValue() }) },\n\t\t\t\t\t\tattributes: { name: 'editlfrp-lfrp', spellcheck: 'true' },\n\t\t\t\t\t}),\n\t\t\t\t\t(m, c) => c.setValue(m.lfrpDesc),\n\t\t\t\t),\n\t\t\t\t{\n\t\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\t\tnoToggle: true,\n\t\t\t\t\tpopupTip: txtLfrpDescInfo,\n\t\t\t\t\tpopupTipClassName: 'popuptip--width-m popuptip--position-left-bottom',\n\t\t\t\t},\n\t\t\t)),\n\t\t\tn.component(new Context(\n\t\t\t\t() => new CollectionWrapper(this.module.self.getTools(), {\n\t\t\t\t\tfilter: t => (!t.type || t.type == 'section') && (t.filter ? t.filter(this.ctrl) : true),\n\t\t\t\t}),\n\t\t\t\ttools => tools.dispose(),\n\t\t\t\ttools => new CollectionList(\n\t\t\t\t\ttools,\n\t\t\t\t\tt => t.componentFactory(this.ctrl, this.state),\n\t\t\t\t\t{\n\t\t\t\t\t\tclassName: 'pageeditlfrp--sections',\n\t\t\t\t\t\tsubClassName: t => t.className || null,\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t)),\n\t\t\tn.component('message', new Collapser(null)),\n\t\t\tn.elem('div', { className: 'pad-top-xl flex-row margin16' }, [\n\n\t\t\t\tn.elem('button', { events: {\n\t\t\t\t\tclick: () => this._save('lfrp'),\n\t\t\t\t}, className: 'btn primary common--btnwidth flex-1' }, [\n\t\t\t\t\tn.component('btnConfirm', new Txt()),\n\t\t\t\t]),\n\n\t\t\t\tn.elem('button', { events: {\n\t\t\t\t\tclick: () => this._save(''),\n\t\t\t\t}, className: 'btn secondary common--btnwidth flex-1' }, [\n\t\t\t\t\tn.component('btnCancel', new Txt()),\n\t\t\t\t]),\n\t\t\t]),\n\t\t]));\n\t\tthis.wrapper = new ModelComponent(\n\t\t\tthis.ctrl,\n\t\t\tnew ModelComponent(\n\t\t\t\tthis.model,\n\t\t\t\tthis.elem,\n\t\t\t\t(m, c) => this._setButtons(),\n\t\t\t),\n\t\t\t(m, c) => this._setButtons(),\n\t\t);\n\t\treturn this.wrapper.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.wrapper) {\n\t\t\tthis.wrapper.unrender();\n\t\t\tthis.wrapper = null;\n\t\t\tthis.elem = null;\n\t\t}\n\t\tif (this.model) {\n\t\t\tthis.state.changes = this.model.getModifications() || {};\n\t\t\tthis.model.dispose();\n\t\t\tthis.model = null;\n\t\t}\n\t}\n\n\t_save(rpState) {\n\t\tlet change = this.model && this._getChanges();\n\n\t\t// Start with a promise to remove LFRP state if that is what we are\n\t\t// doing. We do things in this order so that we don't get two events\n\t\t// following eachother.\n\t\treturn (rpState !== this.ctrl.rp && rpState != 'lfrp'\n\t\t\t? this.ctrl.call('set', { rp: rpState })\n\t\t\t: Promise.resolve()\n\t\t)\n\t\t\t// Continue with a promise to update lfrpDesc if we've changed it\n\t\t\t.then(() => (change && Object.keys(change).length\n\t\t\t\t? this.module.player.getPlayer().call('setCharSettings', Object.assign({\n\t\t\t\t\tcharId: this.ctrl.id,\n\t\t\t\t\tpuppeteerId: this.ctrl.puppeteer?.id || undefined,\n\t\t\t\t}, change))\n\t\t\t\t: Promise.resolve()\n\t\t\t))\n\t\t\t// Continue to set LFRP state if that is what we are doing\n\t\t\t.then(() => (rpState !== this.ctrl.rp && rpState == 'lfrp'\n\t\t\t\t? this.ctrl.call('set', { rp: rpState })\n\t\t\t\t: Promise.resolve()\n\t\t\t))\n\t\t\t.then(() => {\n\t\t\t\tthis._close();\n\t\t\t})\n\t\t\t.catch(err => {\n\t\t\t\tthis._setMessage(l10n.l(err.code, err.message, err.data));\n\t\t\t});\n\t}\n\n\t_getChanges() {\n\t\tif (!this.model) return {};\n\n\t\treturn Object.assign({}, this.model.getModifications());\n\t}\n\n\t_setMessage(msg) {\n\t\tif (!this.elem) return;\n\t\tthis.elem.getNode('message').setComponent(msg\n\t\t\t? new Txt(msg, { className: 'dialog--error' })\n\t\t\t: null,\n\t\t);\n\t}\n\n\t_close() {\n\t\tthis.close();\n\t\tif (this.model) {\n\t\t\tthis.model.dispose();\n\t\t\tthis.model = null;\n\t\t}\n\t\tthis.state.changes = {};\n\t}\n\n\t_setButtons() {\n\t\tif (!this.elem) return;\n\n\t\tlet hasChange = Object.keys(this._getChanges()).length;\n\t\tlet isLfrp = this.ctrl.rp == 'lfrp';\n\n\t\tthis.elem.getNode('btnConfirm').setText(isLfrp\n\t\t\t? hasChange\n\t\t\t\t? l10n.l('pageEditLfrp.update', \"Save edits\")\n\t\t\t\t: l10n.l('pageEditLfrp.close', \"Close\")\n\t\t\t: l10n.l('pageEditLfrp.activate', \"Start LFRP\"),\n\t\t);\n\t\tthis.elem.getNode('btnCancel').setText(isLfrp\n\t\t\t? l10n.l('pageEditLfrp.deactivate', \"Stop LFRP\")\n\t\t\t: hasChange\n\t\t\t\t? l10n.l('pageEditLfrp.update', \"Save edits\")\n\t\t\t\t: l10n.l('pageEditLfrp.close', \"Close\"),\n\t\t);\n\t}\n}\n\nexport default PageEditLfrpComponent;\n","import { Elem } from 'modapp-base-component';\nimport { ModelComponent } from 'modapp-resource-component';\nimport { Collection, sortOrderCompare } from 'modapp-resource';\nimport FAIcon from 'components/FAIcon';\nimport l10n from 'modapp-l10n';\nimport PageEditLfrpComponent from './PageEditLfrpComponent';\nimport './pageEditLfrp.scss';\n\n/**\n * PageEditLfrp opens an in-panel edit char page in the char panel.\n */\nclass PageEditLfrp {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\t\tthis.app.require([\n\t\t\t'charPages',\n\t\t\t'pageChar',\n\t\t\t'player',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\n\t\tthis.tools = new Collection({\n\t\t\tidAttribute: m => m.id,\n\t\t\tcompare: sortOrderCompare,\n\t\t\teventBus: this.app.eventBus,\n\t\t});\n\n\t\tthis.module.pageChar.addTool({\n\t\t\tid: 'editLfrp',\n\t\t\tsortOrder: 30,\n\t\t\tcomponentFactory: (ctrl, char) => new ModelComponent(\n\t\t\t\tctrl,\n\t\t\t\tnew Elem(n => n.elem('button', { className: 'pageeditlfrp-btn iconbtn small', events: {\n\t\t\t\t\tclick: () => this.open(ctrl),\n\t\t\t\t}}, [\n\t\t\t\t\tn.component(new FAIcon('icosahedron')),\n\t\t\t\t\tn.elem('lfrp', 'div', { className: 'counter small highlight' }),\n\t\t\t\t])),\n\t\t\t\t(m, c) => c[m.rp == 'lfrp' ? 'removeNodeClass' : 'addNodeClass']('lfrp', 'hide'),\n\t\t\t),\n\t\t\tfilter: (ctrl, char) => ctrl.id == char.id,\n\t\t});\n\t}\n\n\t/**\n\t * Opens an in-panel edit char page in the char panel.\n\t * @param {*} ctrl Controlled char model.\n\t * @returns {function} Close function.\n\t */\n\topen(ctrl) {\n\t\tlet settings = (ctrl.puppeteer\n\t\t\t? this.module.player.getPuppet(ctrl.id, ctrl.puppeteer.id)\n\t\t\t: this.module.player.getOwnedChar(ctrl.id)\n\t\t)?.settings;\n\n\t\tif (!settings) {\n\t\t\tconsole.error(\"Failed to get settings for controled char: \", ctrl);\n\t\t\treturn;\n\t\t}\n\n\t\treturn this.module.charPages.openPage(\n\t\t\tctrl.id,\n\t\t\tctrl.id,\n\t\t\t(ctrl, char, state, close) => ({\n\t\t\t\tcomponent: new PageEditLfrpComponent(this.module, ctrl, settings, state, close),\n\t\t\t\ttitle: l10n.l('pageEditLfrp.editLfrp', \"Looking for roleplay\"),\n\t\t\t\tonClose: close,\n\t\t\t}),\n\t\t);\n\t}\n\n\t/**\n\t * Gets a collection of tools.\n\t * @returns {Collection} Collection of tools.\n\t */\n\tgetTools() {\n\t\treturn this.tools;\n\t}\n\n\t/**\n\t * Registers a room page tool.\n\t * @param {object} tool Tool object\n\t * @param {string} tool.id Tool ID.\n\t * @param {number} tool.sortOrder Sort order.\n\t * @param {function} tool.componentFactory Tool component factory: function(ctrl, state) -> Component\n\t * @param {number} [tool.filter] Filter function: function(ctrl) -> bool\n\t * @param {string} [tool.type] Target type. May be 'section'. Defaults to 'section';\n\t * @param {number} [tool.className] Class to give to the list item container.\n\t * @returns {this}\n\t */\n\taddTool(tool) {\n\t\tif (this.tools.get(tool.id)) {\n\t\t\tthrow new Error(\"Tool ID already registered: \", tool.id);\n\t\t}\n\t\tthis.tools.add(tool);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Unregisters a previously registered tool.\n\t * @param {string} toolId Tool ID.\n\t * @returns {this}\n\t */\n\tremoveTool(toolId) {\n\t\tthis.tools.remove(toolId);\n\t\treturn this;\n\t}\n\n\tdispose() {\n\t\tthis.module.pageChar.removeTool('editLfrp');\n\t}\n}\n\nexport default PageEditLfrp;\n","const units = [\n\t{ unit: 'ms', m: 1000 },\n\t{ unit: 's', m: 60 },\n\t{ unit: 'm', m: 60 },\n\t{ unit: 'h', m: 24 },\n\t{ unit: 'd', m: 0 },\n];\n\n/**\n * Formats a duration in milliseconds to the format 1d 2h 3m 4s 5ms.\n * @param {number} d Duration in milliseconds.\n * @param {string} [zero] The zero string returned if the value is equal or less than 0. Defaults to \"0h 0m 0s\"\n * @returns {string} Formatted string\n */\nexport default function formatDuration(d, zero) {\n\tif (typeof d != 'number') {\n\t\treturn '';\n\t}\n\tif (d <= 0) {\n\t\treturn zero || '0h 0m 0s';\n\t}\n\n\td = Math.floor(d);\n\tlet s = \"\";\n\tfor (let u of units) {\n\t\tlet m = u.m;\n\t\tlet p = m ? d % m : d;\n\t\td = Math.floor(d / m);\n\t\tif (s || p) {\n\t\t\ts = p.toString() + u.unit + (s ? ' ' + s : '');\n\t\t}\n\t\tif (!d) {\n\t\t\tbreak;\n\t\t}\n\t}\n\treturn s;\n}\n","import { RootElem } from 'modapp-base-component';\nimport formatDuration from 'utils/formatDuration';\nimport parseDuration from 'utils/parseDuration';\n\n/**\n * DurationInput renders an input field which lets you input a duration.\n */\nclass DurationInput extends RootElem {\n\n\t/**\n\t * Creates an instance of DurationInput\n\t * @param {number} duration Initial duration value in milliseconds.\n\t * @param {object} [opt] Optional parameters.\n\t * @param {string} [opt.className] Class name\n\t * @param {object} [opt.attributes] Key/value attributes object\n\t * @param {object} [opt.events] Key/value events object, where the key is the event name, and value is the callback. The input event should not be included unless you know what you are doing.\n\t * @param {function} [opt.onChange] Callback called whenever the duration value is changed: function(duration, this)\n\t * @param {function} [opt.onValid] Callback called whenever the valid status is changed: function(isValid, this)\n\t * @param {function} [opt.invalidClassName] Classname to use when the input text is not a valid duration. Defaults to 'invalid',\n\t */\n\tconstructor(duration, opt) {\n\t\tsuper();\n\t\topt = Object.assign({ attributes: null, events: null }, opt);\n\t\topt.attributes = Object.assign({ type: 'text' }, opt.attributes, { spellcheck: 'false' });\n\t\topt.events = Object.assign({ input: this._onInput.bind(this) }, opt.events);\n\t\tsuper.setRootNode(n => n.elem('input', opt));\n\t\tthis._valid = true;\n\t\tthis._onChange = opt.onChange;\n\t\tthis._onValid = opt.onValid;\n\t\tthis._invalidClassName = opt.invalidClassName || 'invalid';\n\t\tthis.setDuration(duration, false);\n\t}\n\n\t/**\n\t * Gets the duration.\n\t * @returns {number} Duration value in milliseconds\n\t */\n\tgetDuration() {\n\t\treturn this._duration;\n\t}\n\n\t/**\n\t * Sets the duration.\n\t * @param {number?} duration Duration value in milliseconds. Null means an unset/invalid duration.\n\t * @param {boolean} [triggerChange] Flag to tell if changes should trigger the onChange callback. Defaults to true.\n\t * @returns {this}\n\t */\n\tsetDuration(duration, triggerChange) {\n\t\tduration = typeof duration == 'number' ? duration : null;\n\t\tif (this._duration === duration) return;\n\n\t\tthis.setProperty('value', formatDuration(duration));\n\t\tthis._setInvalidClass(false);\n\t\tthis._setDuration(duration, triggerChange);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Checks if the input text is valid.\n\t * @returns {bool} True if the input is valid, otherwise false.\n\t */\n\tisValid() {\n\t\treturn this._valid;\n\t}\n\n\t_setDuration(d, triggerChange) {\n\t\tthis._duration = d;\n\t\t// Trigger onChange\n\t\tif (triggerChange !== false && this._onChange) {\n\t\t\tthis._onChange(d, this);\n\t\t}\n\t}\n\n\t_onInput(ev) {\n\t\tlet d = parseDuration(this.getProperty('value'));\n\t\tlet valid = typeof d == 'number';\n\t\tthis._setInvalidClass(!valid);\n\t\tthis._setDuration(d);\n\t}\n\n\t_setInvalidClass(set) {\n\t\tif (this._valid == !set) return;\n\t\tthis._valid = !set;\n\t\tif (this._invalidClassName) {\n\t\t\tsuper[set ? 'addClass' : 'removeClass'](this._invalidClassName);\n\t\t}\n\t\tif (this._onValid) {\n\t\t\tthis._onValid(!set, this);\n\t\t}\n\t}\n}\n\nexport default DurationInput;\n","import { Elem, Txt, Input, Textarea } from 'modapp-base-component';\nimport { ModelComponent } from 'modapp-resource-component';\nimport { ModifyModel } from 'modapp-resource';\nimport l10n from 'modapp-l10n';\nimport Collapser from 'components/Collapser';\nimport FAIcon from 'components/FAIcon';\nimport FileButton from 'components/FileButton';\nimport Img from 'components/Img';\nimport PanelSection from 'components/PanelSection';\nimport ImgModal from 'classes/ImgModal';\nimport Err from 'classes/Err';\nimport LabelToggleBox from 'components/LabelToggleBox';\nimport DurationInput from 'components/DurationInput';\n\nconst txtUpdate = l10n.l('pageEditRoom.update', \"Save edits\");\nconst txtClose = l10n.l('pageEditRoom.close', \"Close\");\n\n/**\n * PageEditRoomComponent renders a room edit page.\n */\nclass PageEditRoomComponent {\n\tconstructor(module, ctrl, room, roomSettings, state, close) {\n\t\tstate.changes = state.changes || {};\n\n\t\tthis.module = module;\n\t\tthis.ctrl = ctrl;\n\t\tthis.room = room;\n\t\tthis.roomSettings = roomSettings;\n\t\tthis.state = state;\n\t\tthis.close = close;\n\t}\n\n\trender(el) {\n\t\tlet eventBus = this.module.self.app.eventBus;\n\t\tthis.model = new ModifyModel(this.room, {\n\t\t\tprops: this.state.changes,\n\t\t\teventBus,\n\t\t});\n\t\tthis.settingsModel = new ModifyModel(this.roomSettings, {\n\t\t\tprops: this.state.settingsChanges,\n\t\t\teventBus,\n\t\t});\n\t\tthis.elem = new ModelComponent(\n\t\t\tthis.room,\n\t\t\tnew Elem(n => n.elem('div', { className: 'pageeditroom' }, [\n\t\t\t\tn.component(new PanelSection(\n\t\t\t\t\tl10n.l('pageEditRoom.image', \"Image\"),\n\t\t\t\t\tnew Elem(n => n.elem('div', { className: 'flex-row flex-stretch pad8' }, [\n\t\t\t\t\t\tn.elem('div', { className: 'flex-1' }, [\n\t\t\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\t\t\tthis.room,\n\t\t\t\t\t\t\t\tnew Img('', { className: 'pageeditroom--image', events: {\n\t\t\t\t\t\t\t\t\tclick: c => {\n\t\t\t\t\t\t\t\t\t\tif (!c.hasClass('placeholder')) {\n\t\t\t\t\t\t\t\t\t\t\tnew ImgModal(this.room.image.href).open();\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t}}),\n\t\t\t\t\t\t\t\t(m, c, changed) => {\n\t\t\t\t\t\t\t\t\tc.setSrc(m.image ? m.image.href + '?thumb=xl' : '/img/room-l.png');\n\t\t\t\t\t\t\t\t\tc[m.image ? 'removeClass' : 'addClass']('placeholder');\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t]),\n\t\t\t\t\t\tn.elem('div', { className: 'pageeditroom--imagebtn flex-1' }, [\n\t\t\t\t\t\t\tn.component(new FileButton(\n\t\t\t\t\t\t\t\tnew Elem(n => n.elem('div', [\n\t\t\t\t\t\t\t\t\tn.component(new FAIcon('camera')),\n\t\t\t\t\t\t\t\t\tn.component(new Txt(l10n.l('pageEditRoom.upload', \"Upload\"))),\n\t\t\t\t\t\t\t\t])),\n\t\t\t\t\t\t\t\t(file, dataUrl) => this.module.createLimits.validateImageSize(\n\t\t\t\t\t\t\t\t\tfile.size,\n\t\t\t\t\t\t\t\t\t() => this.module.dialogCropImage.open(\n\t\t\t\t\t\t\t\t\t\tdataUrl,\n\t\t\t\t\t\t\t\t\t\t(dataUrl, points) => this._setRoomImage(file, points),\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t{ className: 'btn medium icon-left' },\n\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\t\t\tthis.room,\n\t\t\t\t\t\t\t\tnew Elem(n => n.elem('button', {\n\t\t\t\t\t\t\t\t\tclassName: 'btn medium icon-left',\n\t\t\t\t\t\t\t\t\tevents: {\n\t\t\t\t\t\t\t\t\t\tclick: () => this.module.confirm.open(() => this._deleteRoomImage(), {\n\t\t\t\t\t\t\t\t\t\t\ttitle: l10n.l('pageEditRoom.confirmDelete', \"Confirm deletion\"),\n\t\t\t\t\t\t\t\t\t\t\tbody: l10n.l('pageEditRoom.deleteImageBody', \"Do you really wish to delete the room image?\"),\n\t\t\t\t\t\t\t\t\t\t\tconfirm: l10n.l('pageEditRoom.delete', \"Delete\"),\n\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t}, [\n\t\t\t\t\t\t\t\t\tn.component(new FAIcon('trash')),\n\t\t\t\t\t\t\t\t\tn.component(new Txt(l10n.l('pageEditRoom.delete', \"Delete\"))),\n\t\t\t\t\t\t\t\t])),\n\t\t\t\t\t\t\t\t(m, c) => c.setProperty('disabled', m.image ? null : 'disabled'),\n\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t]),\n\t\t\t\t\t])),\n\t\t\t\t\t{\n\t\t\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t},\n\t\t\t\t)),\n\t\t\t\tn.component(new PanelSection(\n\t\t\t\t\tl10n.l('pageEditRoom.roomName', \"Room name\"),\n\t\t\t\t\tnew ModelComponent(\n\t\t\t\t\t\tthis.model,\n\t\t\t\t\t\tnew Input(this.model.name, {\n\t\t\t\t\t\t\tevents: { input: c => this.model.set({ name: c.getValue() }) },\n\t\t\t\t\t\t\tattributes: { spellcheck: 'false' },\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t(m, c) => c.setValue(m.name),\n\t\t\t\t\t),\n\t\t\t\t\t{\n\t\t\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t},\n\t\t\t\t)),\n\t\t\t\tn.component(new PanelSection(\n\t\t\t\t\tl10n.l('pageEditRoom.desc', \"Description\"),\n\t\t\t\t\tnew ModelComponent(\n\t\t\t\t\t\tthis.model,\n\t\t\t\t\t\tnew Textarea(this.model.desc, {\n\t\t\t\t\t\t\tclassName: 'common--paneltextarea common--desc-size',\n\t\t\t\t\t\t\tevents: { input: c => this.model.set({ desc: c.getValue() }) },\n\t\t\t\t\t\t\tattributes: { name: 'editroom-desc', spellcheck: 'false' },\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t(m, c) => c.setValue(m.desc),\n\t\t\t\t\t),\n\t\t\t\t\t{\n\t\t\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t},\n\t\t\t\t)),\n\t\t\t\tn.elem('div', { className: 'pageeditroom--flags' }, [\n\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\tthis.model,\n\t\t\t\t\t\tnew LabelToggleBox(l10n.l('pageEditRoom.isHome', \"Allow set home\"), false, {\n\t\t\t\t\t\t\tclassName: 'common--formmargin',\n\t\t\t\t\t\t\tonChange: v => this.model.set({ isHome: v }),\n\t\t\t\t\t\t\tpopupTip: l10n.l('pageEditRoom.isHomeInfo', \"Allow any character to set the room as their home.\"),\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t(m, c) => c.setValue(m.isHome, false),\n\t\t\t\t\t)),\n\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\tthis.model,\n\t\t\t\t\t\tnew LabelToggleBox(l10n.l('pageEditRoom.isTeleport', \"Allow teleport to room\"), false, {\n\t\t\t\t\t\t\tclassName: 'common--formmargin',\n\t\t\t\t\t\t\tonChange: v => this.model.set({ isTeleport: v }),\n\t\t\t\t\t\t\tpopupTip: l10n.l('pageEditRoom.isTeleportInfo', \"Allow any character to add the room as a teleport node.\"),\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t(m, c) => c.setValue(m.isTeleport, false),\n\t\t\t\t\t)),\n\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\tthis.model,\n\t\t\t\t\t\tnew LabelToggleBox(l10n.l('pageEditRoom.isDark', \"Is dark\"), false, {\n\t\t\t\t\t\t\tclassName: 'common--formmargin',\n\t\t\t\t\t\t\tonChange: v => this.model.set({ isDark: v }),\n\t\t\t\t\t\t\tpopupTip: l10n.l('pageEditRoom.isDarkInfo', \"Prevents characters from seeing what other characters are inside the room.\"),\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t(m, c) => c.setValue(m.isDark, false),\n\t\t\t\t\t)),\n\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\tthis.model,\n\t\t\t\t\t\tnew LabelToggleBox(l10n.l('pageEditRoom.isQuiet', \"Is quiet\"), false, {\n\t\t\t\t\t\t\tclassName: 'common--formmargin',\n\t\t\t\t\t\t\tonChange: v => this.model.set({ isQuiet: v }),\n\t\t\t\t\t\t\tpopupTip: l10n.l('pageEditRoom.isQuietInfo', \"Prevents characters from communicating publicly inside the room.\"),\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t(m, c) => c.setValue(m.isQuiet, false),\n\t\t\t\t\t)),\n\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\tthis.model,\n\t\t\t\t\t\tnew LabelToggleBox(l10n.l('pageEditRoom.isInstance', \"Is instance\"), false, {\n\t\t\t\t\t\t\tclassName: 'common--formmargin',\n\t\t\t\t\t\t\tonChange: v => this.model.set({ isInstance: v }),\n\t\t\t\t\t\t\tpopupTip: l10n.l('pageEditRoom.isInstanceInfo', \"Characters entering the room will reside in their own private instance.\"),\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t(m, c) => c.setValue(m.isInstance, false),\n\t\t\t\t\t)),\n\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\tthis.model,\n\t\t\t\t\t\tnew LabelToggleBox(l10n.l('pageEditRoom.autoSweepSleepers', \"Auto sweep sleepers\"), false, {\n\t\t\t\t\t\t\tclassName: 'common--formmargin',\n\t\t\t\t\t\t\tonChange: v => this.model.set({ autosweep: v }),\n\t\t\t\t\t\t\tpopupTip: l10n.l('pageEditRoom.autosweepInfo', \"Automatically send home characters sleeping in the room\"),\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t(m, c) => c.setValue(m.autosweep, false),\n\t\t\t\t\t)),\n\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\tthis.model,\n\t\t\t\t\t\tnew Collapser(null),\n\t\t\t\t\t\t(m, c, change) => {\n\t\t\t\t\t\t\tif (change && !change.hasOwnProperty('autosweep')) return;\n\n\t\t\t\t\t\t\t// Reset autosweep delay if we hide it.\n\t\t\t\t\t\t\tif (!m.autosweep) {\n\t\t\t\t\t\t\t\tm.set({ autosweepDelay: this.room.autosweepDelay });\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tc.setComponent(m.autosweep\n\t\t\t\t\t\t\t\t? new Elem(n => n.elem('div', { className: 'common--formsubsection' }, [\n\t\t\t\t\t\t\t\t\tn.component(new PanelSection(\n\t\t\t\t\t\t\t\t\t\tl10n.l('pageEditRoom.autosweepDelay', \"Auto sweep delay\"),\n\t\t\t\t\t\t\t\t\t\tnew ModelComponent(\n\t\t\t\t\t\t\t\t\t\t\tm,\n\t\t\t\t\t\t\t\t\t\t\tnew DurationInput(m.autosweepDelay, {\n\t\t\t\t\t\t\t\t\t\t\t\tclassName: 'common--formmargin common--durationinput',\n\t\t\t\t\t\t\t\t\t\t\t\tonChange: v => m.set({ autosweepDelay: v }),\n\t\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\t\t(m, c) => c.setDuration(m.autosweepDelay, false),\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tclassName: 'small',\n\t\t\t\t\t\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t\t\t\t\t\t\tpopupTip: l10n.l('pageEditRoom.autoDelaysweepInfo', 'Delay before a sleeping character is auto-swept from the room.\\nThe format is \"2h 3m 4s\" for (h)ours, (m)inutes, and (s)econds.'),\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t\t\t])) : null,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t},\n\t\t\t\t\t)),\n\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\tthis.settingsModel,\n\t\t\t\t\t\tnew LabelToggleBox(l10n.l('pageEditRoom.customTeleportMessages', \"Custom teleport messages\"), false, {\n\t\t\t\t\t\t\tclassName: 'common--formmargin',\n\t\t\t\t\t\t\tonChange: v => this.settingsModel.set({ customTeleportMsgs: v }),\n\t\t\t\t\t\t\tpopupTip: l10n.l('pageEditRoom.customTeleportMessagesInfo', \"Customize teleport messages shown when characters teleport to and from the room.\"),\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t(m, c) => c.setValue(m.customTeleportMsgs, false),\n\t\t\t\t\t)),\n\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\tthis.settingsModel,\n\t\t\t\t\t\tnew Collapser(null),\n\t\t\t\t\t\t(m, c, change) => {\n\t\t\t\t\t\t\tif (change && !change.hasOwnProperty('customTeleportMsgs')) return;\n\n\t\t\t\t\t\t\t// Reset custom messages if we hide them.\n\t\t\t\t\t\t\tif (!m.customTeleportMsgs) {\n\t\t\t\t\t\t\t\tm.set({\n\t\t\t\t\t\t\t\t\tteleportLeaveMsg: this.roomSettings.teleportLeaveMsg,\n\t\t\t\t\t\t\t\t\tteleportArriveMsg: this.roomSettings.teleportArriveMsg,\n\t\t\t\t\t\t\t\t\tteleportTravelMsg: this.roomSettings.teleportTravelMsg,\n\t\t\t\t\t\t\t\t\toverrideCharTeleportMsgs: this.roomSettings.overrideCharTeleportMsgs,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tc.setComponent(m.customTeleportMsgs\n\t\t\t\t\t\t\t\t? new Elem(n => n.elem('div', { className: 'common--formsubsection' }, [\n\t\t\t\t\t\t\t\t\tn.component(new PanelSection(\n\t\t\t\t\t\t\t\t\t\tl10n.l('pageEditRoom.teleportLeaveMessage', \"Teleport leave message\"),\n\t\t\t\t\t\t\t\t\t\tnew ModelComponent(\n\t\t\t\t\t\t\t\t\t\t\tthis.settingsModel,\n\t\t\t\t\t\t\t\t\t\t\tnew Textarea(this.settingsModel.teleportLeaveMsg, {\n\t\t\t\t\t\t\t\t\t\t\t\tclassName: 'common--paneltextarea-small common--paneltextarea-smallfont',\n\t\t\t\t\t\t\t\t\t\t\t\tevents: { input: c => this.settingsModel.set({ teleportLeaveMsg: c.getValue() }) },\n\t\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\t\t(m, c) => c.setValue(m.teleportLeaveMsg),\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tclassName: 'small common--sectionpadding',\n\t\t\t\t\t\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t\t\t\t\t\t\tpopupTip: l10n.l('pageEditRoom.teleportLeaveMessageInfo', \"Message seen by this room when a character teleports away from here. The character's name will be prepended.\"),\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t\t\t\tn.component(new PanelSection(\n\t\t\t\t\t\t\t\t\t\tl10n.l('pageEditRoom.teleportArriveMessage', \"Teleport arrival message\"),\n\t\t\t\t\t\t\t\t\t\tnew ModelComponent(\n\t\t\t\t\t\t\t\t\t\t\tthis.settingsModel,\n\t\t\t\t\t\t\t\t\t\t\tnew Textarea(this.settingsModel.teleportArriveMsg, {\n\t\t\t\t\t\t\t\t\t\t\t\tclassName: 'common--paneltextarea-small common--paneltextarea-smallfont',\n\t\t\t\t\t\t\t\t\t\t\t\tevents: { input: c => this.settingsModel.set({ teleportArriveMsg: c.getValue() }) },\n\t\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\t\t(m, c) => c.setValue(m.teleportArriveMsg),\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tclassName: 'small common--sectionpadding',\n\t\t\t\t\t\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t\t\t\t\t\t\tpopupTip: l10n.l('pageEditRoom.teleportArriveMessageInfo', \"Message seen by this room when a character teleports here. The character's name will be prepended.\"),\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t\t\t\tn.component(new PanelSection(\n\t\t\t\t\t\t\t\t\t\tl10n.l('pageEditRoom.teleportTravelMessage', \"Teleport travel message\"),\n\t\t\t\t\t\t\t\t\t\tnew ModelComponent(\n\t\t\t\t\t\t\t\t\t\t\tthis.settingsModel,\n\t\t\t\t\t\t\t\t\t\t\tnew Textarea(this.settingsModel.teleportTravelMsg, {\n\t\t\t\t\t\t\t\t\t\t\t\tclassName: 'common--paneltextarea-small common--paneltextarea-smallfont',\n\t\t\t\t\t\t\t\t\t\t\t\tevents: { input: c => this.settingsModel.set({ teleportTravelMsg: c.getValue() }) },\n\t\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\t\t(m, c) => c.setValue(m.teleportTravelMsg),\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tclassName: 'small common--sectionpadding',\n\t\t\t\t\t\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t\t\t\t\t\t\tpopupTip: l10n.l('pageEditRoom.teleportTravelMessageInfo', \"Message seen by the teleporting character when they teleport here. The character's name will be prepended.\"),\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\t\t\t\t\tthis.settingsModel,\n\t\t\t\t\t\t\t\t\t\tnew LabelToggleBox(l10n.l('pageEditRoom.overrideCharacterMessages', \"Override character messages\"), false, {\n\t\t\t\t\t\t\t\t\t\t\tclassName: 'small common--sectionpadding',\n\t\t\t\t\t\t\t\t\t\t\tonChange: v => this.settingsModel.set({ overrideCharTeleportMsgs: v }),\n\t\t\t\t\t\t\t\t\t\t\tpopupTip: l10n.l('pageEditRoom.overrideCharacterMessagesInfo', \"Override any customized character teleport messages with those defined for the room.\"),\n\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\t(m, c) => c.setValue(m.overrideCharTeleportMsgs, false),\n\t\t\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t\t\t])) : null,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t},\n\t\t\t\t\t)),\n\t\t\t\t]),\n\t\t\t\tn.component('message', new Collapser(null)),\n\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\tthis.room,\n\t\t\t\t\tnew Elem(n => n.elem('div', { className: 'pad-top-xl flex-row margin8 flex-end' }, [\n\t\t\t\t\t\tn.elem('div', { className: 'flex-1' }, [\n\t\t\t\t\t\t\tn.elem('update', 'button', { events: {\n\t\t\t\t\t\t\t\tclick: () => this._save(),\n\t\t\t\t\t\t\t}, className: 'btn primary common--btnwidth' }, [\n\t\t\t\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\t\t\t\tthis.model,\n\t\t\t\t\t\t\t\t\tnew ModelComponent(\n\t\t\t\t\t\t\t\t\t\tthis.settingsModel,\n\t\t\t\t\t\t\t\t\t\tnew Txt(),\n\t\t\t\t\t\t\t\t\t\t(m, c) => this._setSaveButton(c),\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t(m, c) => this._setSaveButton(c.getComponent()),\n\t\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t]),\n\t\t\t\t\t\tn.elem('setOwner', 'button', { events: {\n\t\t\t\t\t\t\tclick: () => this.module.dialogSetRoomOwner.open(this.ctrl, this.room),\n\t\t\t\t\t\t}, className: 'iconbtn medium' }, [\n\t\t\t\t\t\t\tn.component(new FAIcon('key')),\n\t\t\t\t\t\t]),\n\t\t\t\t\t\tn.elem('delete', 'button', { events: {\n\t\t\t\t\t\t\tclick: () => this.module.deleteRoom.deleteRoom(this.ctrl),\n\t\t\t\t\t\t}, className: 'iconbtn medium' }, [\n\t\t\t\t\t\t\tn.component(new FAIcon('trash')),\n\t\t\t\t\t\t]),\n\t\t\t\t\t])),\n\t\t\t\t\t(m, c) => {\n\t\t\t\t\t\tlet prop = this._canDeleteRoom() ? null : 'disabled';\n\t\t\t\t\t\tc.setNodeProperty('delete', 'disabled', prop);\n\t\t\t\t\t\tc.setNodeProperty('setOwner', 'disabled', prop);\n\t\t\t\t\t},\n\t\t\t\t)),\n\t\t\t])),\n\t\t\t(m, c) => {\n\t\t\t\t// Close if character stops being able to edit the room\n\t\t\t\tif (!this.module.pageRoom.canEdit(this.ctrl, this.room)) {\n\t\t\t\t\tsetTimeout(() => this._close(), 0);\n\t\t\t\t}\n\t\t\t},\n\t\t);\n\t\treturn this.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t\tif (this.model) {\n\t\t\tthis.state.changes = this.model.getModifications() || {};\n\t\t\tthis.model.dispose();\n\t\t\tthis.model = null;\n\t\t}\n\t\tif (this.settingsModel) {\n\t\t\tthis.state.settingsChanges = this.settingsModel.getModifications() || {};\n\t\t\tthis.settingsModel.dispose();\n\t\t\tthis.settingsModel = null;\n\t\t}\n\t}\n\n\t_save() {\n\t\tlet p;\n\t\tif (!this.model) {\n\t\t\tp = Promise.resolve();\n\t\t} else if (this.model.autosweep && this.model.autosweepDelay === null) {\n\t\t\tp = Promise.reject(new Err('pageEditRoom.invalidAutosweepDelay', \"Auto sweep delay is invalid.\"));\n\t\t} else {\n\t\t\tlet change = this._getChanges();\n\t\t\tp = Object.keys(change).length\n\t\t\t\t? this.ctrl.call('setRoom', change)\n\t\t\t\t: Promise.resolve();\n\t\t}\n\n\t\treturn p.then(() => {\n\t\t\tthis._close();\n\t\t}).catch(err => {\n\t\t\tthis._setMessage(l10n.l(err.code, err.message, err.data));\n\t\t});\n\t}\n\n\t_getChanges() {\n\t\tif (!this.model || !this.settingsModel) return {};\n\n\t\tlet change = Object.assign({}, this.model.getModifications(), this.settingsModel.getModifications());\n\t\t// If autosweep is disabled, we don't save the hidden delay value.\n\t\tif (!this.model.autosweep) {\n\t\t\tdelete change.autosweepDelay;\n\t\t}\n\t\t// If custom teleport messages is disabled, we don't save the hidden text values.\n\t\tif (!this.settingsModel.customTeleportMsgs) {\n\t\t\tdelete change.teleportLeaveMsg;\n\t\t\tdelete change.teleportArriveMsg;\n\t\t\tdelete change.teleportTravelMsg;\n\t\t\tdelete change.overrideCharTeleportMsgs;\n\t\t}\n\t\treturn change;\n\t}\n\n\t_setMessage(msg) {\n\t\tif (!this.elem) return;\n\t\tthis.elem.getComponent().getNode('message').setComponent(msg\n\t\t\t? new Txt(msg, { className: 'dialog--error' })\n\t\t\t: null,\n\t\t);\n\t}\n\n\t_close() {\n\t\tthis.close();\n\t\tif (this.model) {\n\t\t\tthis.model.dispose();\n\t\t\tthis.model = null;\n\t\t}\n\t\tthis.state.changes = {};\n\t}\n\n\t_setRoomImage(file, points) {\n\t\treturn this.module.file.upload(file, 'core.upload.image')\n\t\t\t.then(result => this.ctrl.call('setRoomImage', {\n\t\t\t\tuploadId: result.uploadId,\n\t\t\t\tx1: parseInt(points[0]),\n\t\t\t\ty1: parseInt(points[1]),\n\t\t\t\tx2: parseInt(points[2]),\n\t\t\t\ty2: parseInt(points[3]),\n\t\t\t})).then(() => this.module.toaster.open({\n\t\t\t\ttitle: l10n.l('pageEditRoom.imageUploaded', \"Image uploaded\"),\n\t\t\t\tcontent: new Txt(l10n.l('pageEditRoom.imageUploadedBody', \"Image was uploaded and saved.\")),\n\t\t\t\tcloseOn: 'click',\n\t\t\t\ttype: 'success',\n\t\t\t\tautoclose: true,\n\t\t\t}));\n\t}\n\n\t_deleteRoomImage() {\n\t\treturn this.ctrl.call('deleteRoomImage')\n\t\t\t.then(() => this.module.toaster.open({\n\t\t\t\ttitle: l10n.l('pageEditRoom.imageDeleted', \"Image deleted\"),\n\t\t\t\tcontent: new Txt(l10n.l('pageEditRoom.imageDeletedBody', \"Image was successfully deleted.\")),\n\t\t\t\tcloseOn: 'click',\n\t\t\t\ttype: 'success',\n\t\t\t\tautoclose: true,\n\t\t\t}))\n\t\t\t.catch(err => this.module.confirm.openError(err));\n\t}\n\n\t_canDeleteRoom() {\n\t\treturn this.module.player.isAdmin() || (this.room.owner && this.room.owner.id == this.ctrl.id);\n\t}\n\n\t_setSaveButton(c) {\n\t\tc.setText(Object.keys(this._getChanges()).length ? txtUpdate : txtClose);\n\t}\n}\n\nexport default PageEditRoomComponent;\n","import { Elem } from 'modapp-base-component';\nimport FAIcon from 'components/FAIcon';\nimport l10n from 'modapp-l10n';\nimport getRoomInstanceId from 'utils/getRoomInstanceId';\nimport PageEditRoomComponent from './PageEditRoomComponent';\nimport './pageEditRoom.scss';\n\n/**\n * PageEditRoom opens an in-panel edit room page in the room panel.\n */\nclass PageEditRoom {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\t\tthis.app.require([\n\t\t\t'api',\n\t\t\t'roomPages',\n\t\t\t'pageRoom',\n\t\t\t'dialogCropImage',\n\t\t\t'confirm',\n\t\t\t'deleteRoom',\n\t\t\t'dialogSetRoomOwner',\n\t\t\t'player',\n\t\t\t'toaster',\n\t\t\t'file',\n\t\t\t'createLimits',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\n\t\tthis.module.pageRoom.addTool({\n\t\t\tid: 'editRoom',\n\t\t\tsortOrder: 10,\n\t\t\tcomponentFactory: (ctrl, room) => new Elem(n => n.elem('button', { className: 'iconbtn small', events: {\n\t\t\t\tclick: () => this.open(ctrl, room),\n\t\t\t}}, [\n\t\t\t\tn.component(new FAIcon('pencil')),\n\t\t\t])),\n\t\t\tfilter: (ctrl, room, canEdit, canDelete) => canEdit,\n\t\t});\n\t}\n\n\t/**\n\t * Opens an in-panel edit room page in the room panel.\n\t * @param {*} ctrl Controlled char model.\n\t * @param {*} room Room model of the room to edit.\n\t * @returns {Promise.<function>} Promise of a close function.\n\t */\n\topen(ctrl, room) {\n\t\treturn this.module.api.get('core.room.' + room.id + '.settings').then(roomSettings => {\n\t\t\troomSettings.on();\n\t\t\treturn this.module.roomPages.openRoomPage(\n\t\t\t\t'editRoom',\n\t\t\t\tctrl.id,\n\t\t\t\tgetRoomInstanceId(room),\n\t\t\t\t(ctrl, room, state, close) => ({\n\t\t\t\t\tcomponent: new PageEditRoomComponent(this.module, ctrl, room, roomSettings, state, close),\n\t\t\t\t\ttitle: l10n.l('pageEditRoom.editRoom', \"Edit Room\"),\n\t\t\t\t}),\n\t\t\t\t{\n\t\t\t\t\tonClose: () => {\n\t\t\t\t\t\troomSettings.off();\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t);\n\t\t});\n\t}\n\n\tdispose() {}\n}\n\nexport default PageEditRoom;\n","import { Context, Elem, Txt, Input, Textarea } from 'modapp-base-component';\nimport { ModelComponent, CollectionComponent, ModelTxt } from 'modapp-resource-component';\nimport { ModifyModel } from 'modapp-resource';\nimport l10n from 'modapp-l10n';\nimport Collapser from 'components/Collapser';\nimport FAIcon from 'components/FAIcon';\nimport FileButton from 'components/FileButton';\nimport PanelSection from 'components/PanelSection';\n\n\nclass PageEditRoomProfileComponent {\n\tconstructor(module, ctrl, room, profile, roomProfiles, state, close) {\n\t\tstate.changes = state.changes || {};\n\n\t\tthis.module = module;\n\t\tthis.ctrl = ctrl;\n\t\tthis.room = room;\n\t\tthis.profile = profile;\n\t\tthis.roomProfiles = roomProfiles;\n\t\tthis.state = state;\n\t\tthis.close = close;\n\t}\n\n\trender(el) {\n\t\tthis.model = new ModifyModel(this.profile, {\n\t\t\tprops: this.state.changes,\n\t\t\teventBus: this.module.self.app.eventBus,\n\t\t});\n\t\tthis.elem = new CollectionComponent(\n\t\t\tthis.roomProfiles,\n\t\t\tnew Elem(n => n.elem('div', { className: 'pageeditroomprofile' }, [\n\t\t\t\tn.component(new ModelTxt(this.room, m => m.name, { tagName: 'div', className: 'common--itemtitle common--sectionpadding' })),\n\t\t\t\tn.component(new PanelSection(\n\t\t\t\t\tl10n.l('pageEditRoomProfile.image', \"Image\"),\n\t\t\t\t\tnew Elem(n => n.elem('div', { className: 'flex-row flex-stretch pad8' }, [\n\t\t\t\t\t\tn.elem('div', { className: 'flex-1' }, [\n\t\t\t\t\t\t\tn.component(this.module.avatar.newRoomImg(this.profile, { modalOnClick: true, size: 'xlarge' })),\n\t\t\t\t\t\t]),\n\t\t\t\t\t\tn.elem('div', { className: 'pageeditroomprofile--imagebtn flex-1' }, [\n\t\t\t\t\t\t\tn.component(new FileButton(\n\t\t\t\t\t\t\t\tnew Elem(n => n.elem('div', [\n\t\t\t\t\t\t\t\t\tn.component(new FAIcon('camera')),\n\t\t\t\t\t\t\t\t\tn.component(new Txt(l10n.l('pageEditRoomProfile.upload', \"Upload\"))),\n\t\t\t\t\t\t\t\t])),\n\t\t\t\t\t\t\t\t(file, dataUrl) => this.module.createLimits.validateImageSize(\n\t\t\t\t\t\t\t\t\tfile.size,\n\t\t\t\t\t\t\t\t\t() => this.module.dialogCropImage.open(\n\t\t\t\t\t\t\t\t\t\tdataUrl,\n\t\t\t\t\t\t\t\t\t\t(dataUrl, points) => this._setRoomProfileImage(file, points),\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t{ className: 'btn medium icon-left' },\n\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t\tn.component(new Context(\n\t\t\t\t\t\t\t\t() => ({ dialog: null }),\n\t\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\t\tctx => new ModelComponent(\n\t\t\t\t\t\t\t\t\tthis.profile,\n\t\t\t\t\t\t\t\t\tnew ModelComponent(\n\t\t\t\t\t\t\t\t\t\tthis.room,\n\t\t\t\t\t\t\t\t\t\tnew Elem(n => n.elem('button', {\n\t\t\t\t\t\t\t\t\t\t\tclassName: 'btn medium icon-left',\n\t\t\t\t\t\t\t\t\t\t\tevents: {\n\t\t\t\t\t\t\t\t\t\t\t\tclick: () => ctx.dialog = this.module.confirm.open(() => this._copyRoomProfileImage(), {\n\t\t\t\t\t\t\t\t\t\t\t\t\ttitle: l10n.l('pageEditRoomProfile.confirmUpdate', \"Confirm image update\"),\n\t\t\t\t\t\t\t\t\t\t\t\t\tbody: new Elem(n => n.elem('div', [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tn.component(new Txt(l10n.l('pageEditRoomProfile.deleteImageBody', \"Do you really wish to update the profile with current room image?\"), { tagName: 'p' })),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tn.component(this.module.avatar.newRoomImg(this.room, {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize: 'xlarge',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tresolve: v => v.href,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t})),\n\t\t\t\t\t\t\t\t\t\t\t\t\t])),\n\t\t\t\t\t\t\t\t\t\t\t\t\tconfirm: l10n.l('pageEditRoomProfile.update', \"Update\"),\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClose: () => ctx.dialog = null,\n\t\t\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t}, [\n\t\t\t\t\t\t\t\t\t\t\tn.component(new FAIcon('refresh')),\n\t\t\t\t\t\t\t\t\t\t\tn.component(new Txt(l10n.l('pageEditRoomProfile.update', \"Update\"))),\n\t\t\t\t\t\t\t\t\t\t])),\n\t\t\t\t\t\t\t\t\t\t(m, c) => this._setUpdateImageDisabled(c, ctx),\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t(m, c) => this._setUpdateImageDisabled(c.getComponent(), ctx),\n\t\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\t\t\tthis.profile,\n\t\t\t\t\t\t\t\tnew Elem(n => n.elem('button', {\n\t\t\t\t\t\t\t\t\tclassName: 'btn medium icon-left',\n\t\t\t\t\t\t\t\t\tevents: {\n\t\t\t\t\t\t\t\t\t\tclick: () => this.module.confirm.open(() => this._deleteRoomProfileImage(), {\n\t\t\t\t\t\t\t\t\t\t\ttitle: l10n.l('pageEditRoomProfile.confirmDelete', \"Confirm deletion\"),\n\t\t\t\t\t\t\t\t\t\t\tbody: new Elem(n => n.elem('div', [\n\t\t\t\t\t\t\t\t\t\t\t\tn.component(new Txt(l10n.l('pageEditRoomProfile.deleteImageBody', \"Do you really wish to delete the image for the profile?\"), { tagName: 'p' })),\n\t\t\t\t\t\t\t\t\t\t\t\tn.elem('p', [ n.component(new ModelTxt(this.profile, m => m.name, { className: 'dialog--strong' })) ]),\n\t\t\t\t\t\t\t\t\t\t\t])),\n\t\t\t\t\t\t\t\t\t\t\tconfirm: l10n.l('pageEditRoomProfile.delete', \"Delete\"),\n\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t}, [\n\t\t\t\t\t\t\t\t\tn.component(new FAIcon('trash')),\n\t\t\t\t\t\t\t\t\tn.component(new Txt(l10n.l('pageEditRoomProfile.delete', \"Delete\"))),\n\t\t\t\t\t\t\t\t])),\n\t\t\t\t\t\t\t\t(m, c) => c.setProperty('disabled', m.image ? null : 'disabled'),\n\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t]),\n\t\t\t\t\t])),\n\t\t\t\t\t{\n\t\t\t\t\t\tclassName: 'common--sectionpadding pageeditroomprofile--imagesection',\n\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t},\n\t\t\t\t)),\n\t\t\t\tn.component(new PanelSection(\n\t\t\t\t\tl10n.l('pageEditRoomProfile.profileName', \"Profile name\"),\n\t\t\t\t\tnew ModelComponent(\n\t\t\t\t\t\tthis.model,\n\t\t\t\t\t\tnew Input(this.model.name, {\n\t\t\t\t\t\t\tevents: { input: c => this.model.set({ name: c.getValue() }) },\n\t\t\t\t\t\t\tattributes: { name: 'editroomprofile-name', spellcheck: 'true' },\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t(m, c) => c.setValue(m.name),\n\t\t\t\t\t),\n\t\t\t\t\t{\n\t\t\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t\tpopupTip: l10n.l('pageEditRoomProfile.nameInfo', \"A short but descriptive name for the room profile.\"),\n\t\t\t\t\t},\n\t\t\t\t)),\n\t\t\t\tn.component(new PanelSection(\n\t\t\t\t\tl10n.l('pageEditRoomProfile.keyword', \"Keyword\"),\n\t\t\t\t\tnew ModelComponent(\n\t\t\t\t\t\tthis.model,\n\t\t\t\t\t\tnew Input(this.model.key, {\n\t\t\t\t\t\t\tevents: { input: c => this.model.set({ key: c.getValue() }) },\n\t\t\t\t\t\t\tattributes: { name: 'editroomprofile-key', spellcheck: 'false' },\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t(m, c) => c.setValue(m.key),\n\t\t\t\t\t),\n\t\t\t\t\t{\n\t\t\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t\tpopupTip: l10n.l('pageEditRoomProfile.keyInfo', \"Keyword is used to identify the room profile in console commands.\"),\n\t\t\t\t\t},\n\t\t\t\t)),\n\t\t\t\tn.component(new PanelSection(\n\t\t\t\t\tl10n.l('pageEditRoomProfile.desc', \"Description\"),\n\t\t\t\t\tnew ModelComponent(\n\t\t\t\t\t\tthis.model,\n\t\t\t\t\t\tnew Textarea(this.model.desc, {\n\t\t\t\t\t\t\tclassName: 'common--paneltextarea common--desc-size',\n\t\t\t\t\t\t\tevents: { input: c => this.model.set({ desc: c.getValue() }) },\n\t\t\t\t\t\t\tattributes: { name: 'editroomprofile-desc', spellcheck: 'false' },\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t(m, c) => c.setValue(m.desc),\n\t\t\t\t\t),\n\t\t\t\t\t{\n\t\t\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t},\n\t\t\t\t)),\n\t\t\t\tn.component('message', new Collapser(null)),\n\t\t\t\tn.elem('div', { className: 'pad-top-xl flex-row margin8 flex-end' }, [\n\t\t\t\t\tn.elem('div', { className: 'flex-1' }, [\n\t\t\t\t\t\tn.elem('update', 'button', { events: {\n\t\t\t\t\t\t\tclick: () => this._save(),\n\t\t\t\t\t\t}, className: 'btn primary common--btnwidth' }, [\n\t\t\t\t\t\t\tn.component(new ModelTxt(this.model, m => m.isModified\n\t\t\t\t\t\t\t\t? l10n.l('pageEditRoomProfile.update', \"Save edits\")\n\t\t\t\t\t\t\t\t: l10n.l('pageEditRoomProfile.close', \"Close\"))),\n\t\t\t\t\t\t]),\n\t\t\t\t\t]),\n\t\t\t\t\tn.elem('button', { events: {\n\t\t\t\t\t\tclick: () => this.module.confirm.open(() => this._delete(), {\n\t\t\t\t\t\t\ttitle: l10n.l('pageEditRoomProfile.confirmDelete', \"Confirm deletion\"),\n\t\t\t\t\t\t\tbody: l10n.l('pageEditRoomProfile.deleteProfileBody', \"Do you really wish to delete this room profile?\"),\n\t\t\t\t\t\t\tconfirm: l10n.l('pageEditRoomProfile.delete', \"Delete\"),\n\t\t\t\t\t\t}),\n\t\t\t\t\t}, className: 'iconbtn medium' }, [\n\t\t\t\t\t\tn.component(new FAIcon('trash')),\n\t\t\t\t\t]),\n\t\t\t\t]),\n\t\t\t])),\n\t\t\t(col, c, ev) => {\n\t\t\t\t// Check that the profile still exists\n\t\t\t\tlet id = this.profile.id;\n\t\t\t\tfor (let p of col) {\n\t\t\t\t\tif (p.id === id) return;\n\t\t\t\t}\n\t\t\t\tthis._close();\n\t\t\t},\n\t\t);\n\t\treturn this.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t\tif (this.model) {\n\t\t\tthis.state.changes = this.model.getModifications() || {};\n\t\t\tthis.model.dispose();\n\t\t\tthis.model = null;\n\t\t}\n\t}\n\n\t_save() {\n\t\tlet p;\n\t\tif (!this.model) {\n\t\t\tp = Promise.resolve();\n\t\t} else {\n\t\t\tlet change = this.model.getModifications();\n\t\t\tp = change\n\t\t\t\t? this.ctrl.call('setRoomProfile', Object.assign(change, { profileId: this.profile.id }))\n\t\t\t\t: Promise.resolve();\n\t\t}\n\n\t\treturn p.then(() => {\n\t\t\tthis._close();\n\t\t}).catch(err => {\n\t\t\tthis._setMessage(l10n.l(err.code, err.message, err.data));\n\t\t});\n\t}\n\n\t_setMessage(msg) {\n\t\tif (!this.elem) return;\n\t\tthis.elem.getComponent().getNode('message').setComponent(msg\n\t\t\t? new Txt(msg, { className: 'dialog--error' })\n\t\t\t: null,\n\t\t);\n\t}\n\n\t_close() {\n\t\tthis.close();\n\t\tif (this.model) {\n\t\t\tthis.model.dispose();\n\t\t\tthis.model = null;\n\t\t}\n\t\tthis.state.changes = {};\n\t}\n\n\t_setRoomProfileImage(file, points) {\n\t\treturn this.module.file.upload(file, 'core.upload.image')\n\t\t\t.then(result => this.ctrl.call('setRoomProfileImage', {\n\t\t\t\tprofileId: this.profile.id,\n\t\t\t\tuploadId: result.uploadId,\n\t\t\t\tx1: parseInt(points[0]),\n\t\t\t\ty1: parseInt(points[1]),\n\t\t\t\tx2: parseInt(points[2]),\n\t\t\t\ty2: parseInt(points[3]),\n\t\t\t})).then(() => this.module.toaster.open({\n\t\t\t\ttitle: l10n.l('pageEditRoomProfile.imageUploaded', \"Image uploaded\"),\n\t\t\t\tcontent: new Txt(l10n.l('pageEditRoomProfile.imageUploadedBody', \"Room profile image was uploaded and saved.\")),\n\t\t\t\tcloseOn: 'click',\n\t\t\t\ttype: 'success',\n\t\t\t\tautoclose: true,\n\t\t\t}));\n\t}\n\n\t_copyRoomProfileImage() {\n\t\treturn this.ctrl.call('copyRoomProfileImage', { profileId: this.profile.id })\n\t\t\t.then(() => this.module.toaster.open({\n\t\t\t\ttitle: l10n.l('pageEditRoomProfile.imageUpdate', \"Image updated\"),\n\t\t\t\tcontent: new Txt(l10n.l('pageEditRoomProfile.imageUpdateBody', \"Room profile image was updated and saved.\")),\n\t\t\t\tcloseOn: 'click',\n\t\t\t\ttype: 'success',\n\t\t\t\tautoclose: true,\n\t\t\t}));\n\t}\n\n\t_deleteRoomProfileImage() {\n\t\treturn this.ctrl.call('deleteRoomProfileImage', { profileId: this.profile.id })\n\t\t\t.then(() => this.module.toaster.open({\n\t\t\t\ttitle: l10n.l('pageEditRoomProfile.imageDeleted', \"Image deleted\"),\n\t\t\t\tcontent: new Txt(l10n.l('pageEditRoomProfile.imageDeletedBody', \"Room profile image was successfully deleted.\")),\n\t\t\t\tcloseOn: 'click',\n\t\t\t\ttype: 'success',\n\t\t\t\tautoclose: true,\n\t\t\t}))\n\t\t\t.catch(err => this.module.confirm.openError(err));\n\t}\n\n\t_delete() {\n\t\tthis.module.deleteRoomProfile.deleteRoomProfile(this.ctrl, { profileId: this.profile.id })\n\t\t\t.catch(err => this._setMessage(l10n.l(err.code, err.message, err.data)));\n\t}\n\n\t_setUpdateImageDisabled(component, ctx) {\n\t\tthis._setUpdateDisabled(component, ctx, !this.room.image || this.module.avatar.roomImgHref(this.profile) == this.room.image.href);\n\t}\n\n\t_setUpdateDisabled(component, ctx, disable) {\n\t\tcomponent.setProperty('disabled', disable ? 'disabled' : null);\n\t\tif (disable && ctx.dialog) {\n\t\t\tctx.dialog.close();\n\t\t\tctx.dialog = null;\n\t\t}\n\t}\n}\n\nexport default PageEditRoomProfileComponent;\n","import l10n from 'modapp-l10n';\nimport getRoomInstanceId from 'utils/getRoomInstanceId';\nimport PageEditRoomProfileComponent from './PageEditRoomProfileComponent';\nimport './pageEditRoomProfile.scss';\n\n/**\n * PageEditRoomProfile opens an in-panel edit room profile page in the room\n * panel.\n */\nclass PageEditRoomProfile {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\t\tthis.app.require([\n\t\t\t'api',\n\t\t\t'roomPages',\n\t\t\t'dialogCropImage',\n\t\t\t'pageRoom',\n\t\t\t'confirm',\n\t\t\t'avatar',\n\t\t\t'deleteRoomProfile',\n\t\t\t'toaster',\n\t\t\t'file',\n\t\t\t'createLimits',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\t}\n\n\t/**\n\t * Opens an in-panel edit room profile page in the room panel.\n\t * @param {Model} ctrl Controlled char model.\n\t * @param {Model} room Room model.\n\t * @param {string} profileId Profile ID of the room.\n\t * @returns {Promise.<function>} Promise of a close function.\n\t */\n\topen(ctrl, room, profileId) {\n\t\treturn Promise.all([\n\t\t\tthis.module.api.get('core.roomprofile.' + profileId + '.details'),\n\t\t\tthis.module.api.get('core.room.' + room.id + '.profiles'),\n\t\t]).then(result => {\n\t\t\tresult[0].on(); // Profile\n\t\t\tresult[1].on(); // Room profiles\n\t\t\treturn this.module.roomPages.openRoomPage(\n\t\t\t\t'editRoomProfile',\n\t\t\t\tctrl.id,\n\t\t\t\tgetRoomInstanceId(room),\n\t\t\t\t(ctrl, room, state, close) => ({\n\t\t\t\t\tcomponent: new PageEditRoomProfileComponent(this.module, ctrl, room, result[0], result[1], state, close),\n\t\t\t\t\ttitle: l10n.l('pageEditRoomProfile.editRoomProfile', \"Edit Room Profile\"),\n\t\t\t\t\tonClose: () => {\n\t\t\t\t\t\tresult[0].off();\n\t\t\t\t\t\tresult[1].off();\n\t\t\t\t\t\tclose();\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t);\n\t\t});\n\t}\n}\n\nexport default PageEditRoomProfile;\n","import { Elem, Txt, Input } from 'modapp-base-component';\nimport { ModelComponent, ModelTxt } from 'modapp-resource-component';\nimport { ModifyModel } from 'modapp-resource';\nimport l10n from 'modapp-l10n';\nimport Collapser from 'components/Collapser';\nimport PanelSection from 'components/PanelSection';\nimport FAIcon from 'components/FAIcon';\nimport errString from 'utils/errString';\n\n/**\n * PageEditTeleportComponent renders a teleport node edit page.\n */\nclass PageEditTeleportComponent {\n\tconstructor(module, ctrl, node, isGlobal, state, close) {\n\t\tstate.model = state.model || {};\n\t\tstate.node = state.node || {};\n\t\tstate.nodeInfo = state.nodeInfo || {};\n\n\t\tthis.module = module;\n\t\tthis.ctrl = ctrl;\n\t\tthis.node = node;\n\t\tthis.isGlobal = isGlobal;\n\t\tthis.state = state;\n\t\tthis.close = close;\n\t\tthis.nodeInfo = null;\n\t\tthis.targetRoom = null;\n\t\tthis._message = new Collapser();\n\t}\n\n\trender(el) {\n\t\tlet model = new ModifyModel(this.node, { eventBus: this.module.self.app.eventBus });\n\t\tthis.elem = new Elem(n => n.elem('div', { className: 'pageeditteleport' }, [\n\t\t\tn.component(new PanelSection(\n\t\t\t\tl10n.l('pageEditTeleport.destination', \"Destination\"),\n\t\t\t\tnew ModelTxt(this.node.room, m => m.name),\n\t\t\t\t{\n\t\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\t\tnoToggle: true,\n\t\t\t\t},\n\t\t\t)),\n\t\t\tn.component(new PanelSection(\n\t\t\t\tl10n.l('pageEditTeleport.keyword', \"Keyword\"),\n\t\t\t\tnew Input(model.key, {\n\t\t\t\t\tevents: { input: c => model.set({ key: c.getValue() }) },\n\t\t\t\t\tattributes: { spellcheck: 'false' },\n\t\t\t\t}),\n\t\t\t\t{\n\t\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\t\tnoToggle: true,\n\t\t\t\t\tpopupTip: l10n.l('pageEditTeleport.keyInfo', \"A keyword used for identifying the teleport destination.\"),\n\t\t\t\t},\n\t\t\t)),\n\t\t\tn.component(this._message),\n\t\t\tn.elem('div', { className: 'pad-top-xl flex-row margin8 flex-end' }, [\n\t\t\t\tn.elem('div', { className: 'flex-1' }, [\n\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\tmodel,\n\t\t\t\t\t\tnew Elem(n => n.elem('update', 'button', { events: {\n\t\t\t\t\t\t\tclick: () => this._save(model),\n\t\t\t\t\t\t}, className: 'btn primary' }, [\n\t\t\t\t\t\t\tn.component(new Txt(l10n.l('pageEditTeleport.update', \"Save edits\"))),\n\t\t\t\t\t\t])),\n\t\t\t\t\t\t(m, c) => c.setProperty('disabled', m.isModified ? null : 'disabled'),\n\t\t\t\t\t)),\n\t\t\t\t]),\n\t\t\t\tn.elem('button', { events: {\n\t\t\t\t\tclick: () => this._delete(),\n\t\t\t\t}, className: 'iconbtn medium' }, [\n\t\t\t\t\tn.component(new FAIcon('trash')),\n\t\t\t\t]),\n\t\t\t]),\n\t\t]));\n\t\treturn this.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n\n\t_save(model) {\n\t\tlet params = Object.assign({ nodeId: model.id }, model.getModifications());\n\n\t\treturn this.ctrl.call('setTeleport', params).then(() => {\n\t\t\tthis._close();\n\t\t}).catch(err => {\n\t\t\tthis._setMessage(errString(err));\n\t\t});\n\t}\n\n\t_setMessage(msg) {\n\t\tthis._message.setComponent(msg\n\t\t\t? new Txt(msg, { className: 'dialog--error' })\n\t\t\t: null,\n\t\t);\n\t}\n\n\t_delete() {\n\t\tlet p = { nodeId: this.node.id };\n\t\tif (this.isGlobal) {\n\t\t\tlet mod = this.module.self.app.getModule('deleteTeleport');\n\t\t\tif (!mod) {\n\t\t\t\tthis._setMessage(l10n.l('pageEditTeleport.missingDeleteTeleportModule', \"Can't find the deleteTeleport module.\"));\n\t\t\t} else {\n\t\t\t\tmod.deleteTeleport(this.ctrl, p);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tthis.module.confirm.open(() => this.module.unregisterTeleport.unregisterTeleport(this.ctrl, p)\n\t\t\t.catch(err => this._setMessage(errString(err))),\n\t\t{\n\t\t\ttitle: l10n.l('pageEditTeleport.confirmRemove', \"Confirm remove\"),\n\t\t\tbody: new Elem(n => n.elem('div', [\n\t\t\t\tn.component(new Txt(l10n.l('pageEditTeleport.removeNodeBody', \"Do you really wish to remove the teleport node?\"), { tagName: 'p' })),\n\t\t\t\tn.elem('p', [ n.component(new ModelTxt(this.node.room, m => m.name, { className: 'dialog--strong' })) ]),\n\t\t\t])),\n\t\t\tconfirm: l10n.l('pageEditTeleport.remove', \"Remove\"),\n\t\t});\n\t}\n\n\t_close() {\n\t\tthis.close();\n\t}\n}\n\nexport default PageEditTeleportComponent;\n","import PageEditTeleportComponent from './PageEditTeleportComponent';\nimport l10n from 'modapp-l10n';\nimport './pageEditTeleport.scss';\n\n/**\n * PageEditTeleport opens an in-panel edit teleport node page in the char panel.\n */\nclass PageEditTeleport {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\t\tthis.app.require([ 'api', 'charPages', 'confirm', 'unregisterTeleport' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\t\tthis.nodePages = {};\n\t}\n\n\n\t/**\n\t * Opens an in-panel edit node page in the char panel.\n\t * @param {*} ctrl Controlled char model.\n\t * @param {*} node Node model of the node to edit.\n\t * @param {*} isGlobal Flag telling if the node is a global node.\n\t * @returns {function} Close function.\n\t */\n\topen(ctrl, node, isGlobal) {\n\t\tif (this.nodePages[node.id]) {\n\t\t\tthrow new Error(\"Edit teleport page already open\");\n\t\t}\n\n\t\tlet close = this.module.charPages.openPage(\n\t\t\tctrl.id,\n\t\t\tctrl.id,\n\t\t\t(ctrl, char, state, close) => ({\n\t\t\t\tcomponent: new PageEditTeleportComponent(this.module, ctrl, node, isGlobal, state, close),\n\t\t\t\ttitle: l10n.l('pageEditTeleport.editTeleportNode', \"Edit teleport node\"),\n\t\t\t\tonClose: close,\n\t\t\t}),\n\t\t\t() => this._onClose(node),\n\t\t);\n\n\t\t// Close the page if the node gets deleted\n\t\tlet d = { close, onDelete: () => this._onDelete(node) };\n\t\tthis.nodePages[node.id] = d;\n\t\tnode.on('delete', d.onDelete);\n\n\t\treturn close;\n\t}\n\n\t_onClose(node) {\n\t\tlet d = this.nodePages[node.id];\n\t\tif (d) {\n\t\t\tnode.off('delete', d.onDelete);\n\t\t\tdelete this.nodePages[node.id];\n\t\t}\n\t}\n\n\t_onDelete(node) {\n\t\tlet d = this.nodePages[node.id];\n\t\tif (d) {\n\t\t\td.close();\n\t\t}\n\t}\n}\n\nexport default PageEditTeleport;\n","import { Elem, Txt } from 'modapp-base-component';\nimport { ModelComponent, CollectionList, ModelTxt } from 'modapp-resource-component';\nimport l10n from 'modapp-l10n';\nimport Fader from 'components/Fader';\n\n/**\n * PageInRoomComponent renders an in room character list page.\n */\nclass PageInRoomComponent {\n\tconstructor(module, ctrl, room, state, close) {\n\t\tstate.changes = state.changes || {};\n\n\t\tthis.module = module;\n\t\tthis.ctrl = ctrl;\n\t\tthis.room = room;\n\t\tthis.state = state;\n\t\tthis.close = close;\n\t}\n\n\trender(el) {\n\t\tthis.elem = new Elem(n => n.elem('div', { className: 'pageinroom' }, [\n\t\t\tn.component(new ModelTxt(this.room, m => m.name, { tagName: 'div', className: 'common--itemtitle common--sectionpadding' })),\n\t\t\tn.component(new ModelComponent(\n\t\t\t\tthis.room,\n\t\t\t\tnew Fader(),\n\t\t\t\t(m, c, changed) => {\n\t\t\t\t\tif (changed && !changed.hasOwnProperty('chars')) return;\n\t\t\t\t\tc.setComponent(m.chars\n\t\t\t\t\t\t? new CollectionList(m.chars, m => this.module.pageRoom.newRoomChar(this.ctrl, m), { className: 'pageinroom--chars' })\n\t\t\t\t\t\t: new Txt(l10n.l('pageInRoom.isDark', \"The room is too dark.\"), { className: 'common--nolistplaceholder' }),\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t)),\n\t\t]));\n\n\t\treturn this.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n}\n\nexport default PageInRoomComponent;\n","import { Elem } from 'modapp-base-component';\nimport FAIcon from 'components/FAIcon';\nimport l10n from 'modapp-l10n';\nimport getRoomInstanceId from 'utils/getRoomInstanceId';\nimport PageInRoomComponent from './PageInRoomComponent';\nimport './pageInRoom.scss';\n\n/**\n * PageInRoom opens an in-panel page to show in room characters in the room panel.\n */\nclass PageInRoom {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\t\tthis.app.require([\n\t\t\t'roomPages',\n\t\t\t'pageRoom',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\n\t\tthis.module.pageRoom.addTool({\n\t\t\tid: 'inRoom',\n\t\t\ttype: 'inRoom',\n\t\t\tsortOrder: 10,\n\t\t\tcomponentFactory: (ctrl, room) => new Elem(n => n.elem('button', { className: 'iconbtn small', events: {\n\t\t\t\tclick: (c, ev) => {\n\t\t\t\t\tthis.open(ctrl, room);\n\t\t\t\t\tev.stopPropagation();\n\t\t\t\t},\n\t\t\t}}, [\n\t\t\t\tn.component(new FAIcon('expand')),\n\t\t\t])),\n\t\t});\n\t}\n\n\t/**\n\t * Opens an in-panel page to show in room characters in the room panel.\n\t * @param {*} ctrl Controlled char model.\n\t * @param {*} room Room model of the room to edit.\n\t * @returns {function} Close function.\n\t */\n\topen(ctrl, room) {\n\t\treturn this.module.roomPages.openRoomPage(\n\t\t\t'inRoom',\n\t\t\tctrl.id,\n\t\t\tgetRoomInstanceId(room),\n\t\t\t(ctrl, room, state, close) => ({\n\t\t\t\tcomponent: new PageInRoomComponent(this.module, ctrl, room, state, close),\n\t\t\t\ttitle: l10n.l('pageInRoom.inRoom', \"In Room\"),\n\t\t\t}),\n\t\t);\n\t}\n\n\tdispose() {}\n}\n\nexport default PageInRoom;\n","import { Elem, Txt } from 'modapp-base-component';\nimport { ModelHtml, ModelTxt } from 'modapp-resource-component';\nimport l10n from 'modapp-l10n';\nimport FAIcon from 'components/FAIcon';\nimport formatDateTime from 'utils/formatDateTime';\nimport errString from 'utils/errString';\nimport formatText from 'utils/formatText';\n\nconst txtOoc = l10n.l('pageMail.ooc', \"ooc \");\n\nclass PageMailMailContent {\n\tconstructor(module, mail, toggle) {\n\t\tthis.module = module;\n\t\tthis.mail = mail;\n\t\tthis.toggle = toggle;\n\t}\n\n\trender(el) {\n\t\tthis._setRead();\n\t\tthis.elem = new Elem(n => {\n\t\t\tlet msg = this.mail.message;\n\t\t\tlet text = [];\n\t\t\tif (msg.ooc) {\n\t\t\t\ttext.push(n.component(new Txt(txtOoc, { className: 'pagemail-mailcontent--ooc' })));\n\t\t\t}\n\t\t\tif (msg.pose) {\n\t\t\t\ttext.push(n.component(new ModelTxt(this.mail, m => m.from.name, { className: 'charlog--char' })));\n\t\t\t\tif (msg.text[0] !== \"'\") {\n\t\t\t\t\ttext.push(n.text(' '));\n\t\t\t\t}\n\t\t\t}\n\t\t\ttext.push(n.component(new ModelHtml(msg, m => formatText(m.text), { tagName: 'span', className: 'common--formattext' + (msg.ooc ? ' charlog--ooc' : '') })));\n\n\t\t\treturn n.elem('div', [\n\t\t\t\tn.elem('div', { className: 'badge--select pagemail-mailcontent--text' }, [\n\t\t\t\t\tn.elem('div', { className: 'badge--text' }, text),\n\t\t\t\t]),\n\t\t\t\tn.elem('div', { className: 'badge--divider' }),\n\t\t\t\tn.elem('div', { className: 'badge--select badge--margin' }, [\n\t\t\t\t\tn.elem('div', { className: 'flex-1' }, [\n\t\t\t\t\t\tn.elem('div', { className: 'flex-row' }, [\n\t\t\t\t\t\t\tn.component(new Txt(l10n.l('pageMail.to', \"To\"), { className: 'badge--iconcol badge--subtitle' })),\n\t\t\t\t\t\t\tn.component(new ModelTxt(this.mail.to, m => errString(m, m => (m.name + ' ' + m.surname), l10n.l('pageMail.unknown', \"(Unknown)\")), {\n\t\t\t\t\t\t\t\tclassName: 'badge--info badge--strong',\n\t\t\t\t\t\t\t})),\n\t\t\t\t\t\t]),\n\t\t\t\t\t\tn.elem('div', { className: 'flex-row' }, [\n\t\t\t\t\t\t\tn.component(new Txt(l10n.l('pageMail.read', \"Read\"), { className: 'badge--iconcol badge--subtitle' })),\n\t\t\t\t\t\t\tn.component(new ModelTxt(this.mail, m => m.read ? formatDateTime(new Date(m.received)) : l10n.l('pageMail.unread', \"Reading...\"), {\n\t\t\t\t\t\t\t\tclassName: 'badge--info badge--text',\n\t\t\t\t\t\t\t})),\n\t\t\t\t\t\t]),\n\t\t\t\t\t]),\n\t\t\t\t\tn.elem('button', { className: 'iconbtn medium tinyicon', events: {\n\t\t\t\t\t\tclick: (c, ev) => {\n\t\t\t\t\t\t\tthis.module.confirm.open(() => this._delete(), {\n\t\t\t\t\t\t\t\ttitle: l10n.l('pageMail.confirmDelete', \"Confirm delete\"),\n\t\t\t\t\t\t\t\tbody: new Elem(n => n.elem('div', [\n\t\t\t\t\t\t\t\t\tn.component(new Txt(l10n.l('pageMail.deleteWatchBody', \"Do you really wish delete this mail?\"), { tagName: 'p' })),\n\t\t\t\t\t\t\t\t])),\n\t\t\t\t\t\t\t\tconfirm: l10n.l('pageMail.delete', \"Delete\"),\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tev.stopPropagation();\n\t\t\t\t\t\t},\n\t\t\t\t\t}}, [\n\t\t\t\t\t\tn.component(new FAIcon('trash')),\n\t\t\t\t\t]),\n\t\t\t\t]),\n\t\t\t]);\n\t\t});\n\t\treturn this.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n\n\t_setRead() {\n\t\tif (!this.mail.read) {\n\t\t\tthis.mail.call('read');\n\t\t}\n\t}\n\n\t_delete() {\n\t\tthis.mail.call('delete').catch(err => this.module.confirm.openError(err));\n\t}\n}\n\nexport default PageMailMailContent;\n","import { Elem } from 'modapp-base-component';\nimport { ModelTxt, ModelComponent } from 'modapp-resource-component';\nimport Collapser from 'components/Collapser';\nimport formatDateTime from 'utils/formatDateTime';\nimport PageMailMailContent from './PageMailMailContent';\n\nclass PageMailMessage {\n\tconstructor(module, mail, model) {\n\t\tthis.module = module;\n\t\tthis.mail = mail;\n\t\tthis.model = model;\n\t}\n\n\trender(el) {\n\t\tthis.elem = new ModelComponent(\n\t\t\tthis.mail,\n\t\t\tnew Elem(n => n.elem('div', { className: 'pagemail-mail' }, [\n\t\t\t\tn.elem('badge', 'div', { className: 'pagemail-mail--badge badge btn margin4', events: {\n\t\t\t\t\tclick: () => this._toggleInfo(),\n\t\t\t\t}}, [\n\t\t\t\t\tn.elem('div', { className: 'badge--select' }, [\n\t\t\t\t\t\tn.component(this.module.avatar.newAvatar(this.mail.from, { size: 'small', className: 'badge--icon' })),\n\t\t\t\t\t\tn.elem('div', { className: 'badge--info' }, [\n\t\t\t\t\t\t\tn.elem('div', { className: 'badge--title badge--nowrap' }, [\n\t\t\t\t\t\t\t\tn.component(new ModelTxt(this.mail, m => (m.from.name + ' ' + m.from.surname).trim())),\n\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\tn.elem('div', { className: 'badge--text badge--nowrap' }, [\n\t\t\t\t\t\t\t\tn.component(new ModelTxt(this.mail, m => formatDateTime(new Date(m.received)))),\n\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t]),\n\t\t\t\t\t]),\n\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\tthis.model,\n\t\t\t\t\t\tnew Collapser(null),\n\t\t\t\t\t\t(m, c, change) => {\n\t\t\t\t\t\t\tif (change && !change.hasOwnProperty('mailId')) return;\n\t\t\t\t\t\t\tc.setComponent(m.mailId === this.mail.getResourceId()\n\t\t\t\t\t\t\t\t? new PageMailMailContent(this.module, this.mail, (show) => this._toggleInfo(show))\n\t\t\t\t\t\t\t\t: null,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t},\n\t\t\t\t\t)),\n\t\t\t\t]),\n\t\t\t])),\n\t\t\t(m, c) => {\n\t\t\t\tc[m.read ? 'removeNodeClass' : 'addNodeClass']('badge', 'unread');\n\t\t\t},\n\t\t);\n\t\treturn this.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n\n\t_toggleInfo(show) {\n\t\tlet rid = this.mail.getResourceId();\n\t\tshow = typeof show == 'undefined'\n\t\t\t? !this.model.mailId || this.model.mailId != rid\n\t\t\t: !!show;\n\n\t\tthis.model.set({ mailId: show ? rid : null });\n\t}\n}\n\nexport default PageMailMessage;\n","import { Elem, Transition, Context, Txt } from 'modapp-base-component';\nimport { CollectionList, CollectionComponent, ModelComponent, ModelTxt } from 'modapp-resource-component';\nimport { Model, CollectionWrapper } from 'modapp-resource';\nimport l10n from 'modapp-l10n';\nimport Fader from 'components/Fader';\nimport FAIcon from 'components/FAIcon';\nimport PageMailMail from './PageMailMail';\n\nconst defaultLimit = 25;\n\nclass PageMailComponent {\n\tconstructor(module, state, close) {\n\t\tthis.module = module;\n\t\tstate.mailId = state.mailId || null;\n\t\tstate.offset = state.offset || 0;\n\t\tstate.count = null;\n\t\tthis.state = state;\n\t\tthis.close = close;\n\t\tthis.model = null;\n\t}\n\n\trender(el) {\n\t\tthis.model = new Model({ data: this.state, eventBus: this.module.self.app.eventBus });\n\n\t\tlet noMailComponent = new Txt(l10n.l('pageMail.noMail', \"No mail here\"), { className: 'pagemail--nomail' });\n\t\tlet mailCountComponent = new Elem(n => n.elem('div', { className: 'pagemail--page' }, [\n\t\t\tn.component(new Txt(l10n.l('pageMail.mail', \"Mail\"))),\n\t\t\tn.text(' '),\n\t\t\tn.component(new ModelTxt(this.model, m => m.offset + 1)),\n\t\t\tn.text(\" – \"),\n\t\t\tn.component(new ModelTxt(this.model, (m, c) => m.count\n\t\t\t\t? m.offset + (m.count > defaultLimit ? defaultLimit : m.count)\n\t\t\t\t: c.getText(),\n\t\t\t)),\n\t\t]));\n\n\t\tthis.elem = new Elem(n => n.elem('div', { className: 'pagemail' }, [\n\t\t\tn.component(new ModelComponent(\n\t\t\t\tthis.model,\n\t\t\t\tnew CollectionComponent(\n\t\t\t\t\tnull,\n\t\t\t\t\tnew Elem(n => n.elem('div', { className: 'pagemail--head flex-row flex-center margin4' }, [\n\t\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\t\tthis.model,\n\t\t\t\t\t\t\tnew Fader(null, { className: 'flex-1' }),\n\t\t\t\t\t\t\t(m, c) => c.setComponent(m.mails\n\t\t\t\t\t\t\t\t? m.count || m.offset // If we have mail, or are on a later page.\n\t\t\t\t\t\t\t\t\t? mailCountComponent\n\t\t\t\t\t\t\t\t\t: noMailComponent\n\t\t\t\t\t\t\t\t: null,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t)),\n\t\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\t\tthis.model,\n\t\t\t\t\t\t\tnew Elem(n => n.elem('button', { className: 'iconbtn medium light', events: {\n\t\t\t\t\t\t\t\tclick: () => this._loadMail(this.model.offset < defaultLimit ? 0 : this.model.offset - defaultLimit),\n\t\t\t\t\t\t\t}}, [\n\t\t\t\t\t\t\t\tn.component(new FAIcon('angle-left')),\n\t\t\t\t\t\t\t])),\n\t\t\t\t\t\t\t(m, c) => c.setProperty('disabled', m.offset ? null : 'disabled'),\n\t\t\t\t\t\t)),\n\t\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\t\tthis.model,\n\t\t\t\t\t\t\tnew Elem(n => n.elem('button', { className: 'iconbtn medium light', events: {\n\t\t\t\t\t\t\t\tclick: () => this._loadMail(this.model.offset + defaultLimit),\n\t\t\t\t\t\t\t}}, [\n\t\t\t\t\t\t\t\tn.component(new FAIcon('angle-right')),\n\t\t\t\t\t\t\t])),\n\t\t\t\t\t\t\t(m, c) => c.setProperty('disabled', m.count > defaultLimit ? null : 'disabled'),\n\t\t\t\t\t\t)),\n\t\t\t\t\t])),\n\t\t\t\t\t(col, m) => this.model.set({ count: col ? col.length : null }),\n\t\t\t\t),\n\t\t\t\t(m, c, change) => c.setCollection(m.mails),\n\t\t\t)),\n\t\t\tn.component('list', new Transition(null)),\n\t\t]));\n\t\tthis.elem.render(el);\n\n\t\tthis._loadMail(this.model.offset);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tlet m = this.model;\n\t\t\tObject.assign(this.state, { mailId: m.mailId, offset: m.offset });\n\t\t\tthis.model = null;\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n\n\t_loadMail(offset) {\n\t\tif (!this.model || this.loadingOffset === offset) return;\n\n\t\tif (this.model.mails && this.model.offset === offset) {\n\t\t\tthis.loadingOffset = null;\n\t\t\treturn;\n\t\t}\n\n\t\tthis.loadingOffset = offset;\n\n\t\tthis.module.auth.getUserPromise().then(user => {\n\t\t\tif (!this.model || offset !== this.loadingOffset) return;\n\t\t\tthis.module.api.get('mail.player.' + user.id + '.inbox?offset=' + offset + '&limit=' + (defaultLimit + 1)).then(mails => {\n\t\t\t\tif (!this.model || offset !== this.loadingOffset) return;\n\n\t\t\t\tlet m = this.model;\n\t\t\t\tlet dir = offset - m.offset;\n\t\t\t\tlet cb = m.mails\n\t\t\t\t\t? dir > 0\n\t\t\t\t\t\t? 'slideLeft'\n\t\t\t\t\t\t: dir < 0\n\t\t\t\t\t\t\t? 'slideRight'\n\t\t\t\t\t\t\t: 'fade'\n\t\t\t\t\t: 'fade';\n\t\t\t\tthis.elem.getNode('list')[cb](new Elem(n => n.elem('div', [\n\t\t\t\t\tn.component(new Context(\n\t\t\t\t\t\t() => new CollectionWrapper(mails, { begin: 0, end: defaultLimit, eventBus: this.module.self.app.eventBus }),\n\t\t\t\t\t\tmails => mails.dispose(),\n\t\t\t\t\t\tmails => new CollectionList(\n\t\t\t\t\t\t\tmails,\n\t\t\t\t\t\t\tm => new PageMailMail(this.module, m, this.model),\n\t\t\t\t\t\t\t{ className: 'pagemail--list' },\n\t\t\t\t\t\t),\n\t\t\t\t\t)),\n\t\t\t\t])));\n\n\t\t\t\tthis.loadingOffset = null;\n\t\t\t\tthis.model.set({ mails, offset });\n\t\t\t});\n\t\t});\n\t}\n}\n\nexport default PageMailComponent;\n","import { Elem, Txt } from 'modapp-base-component';\nimport { ModelComponent } from 'modapp-resource-component';\nimport { ModelWrapper } from 'modapp-resource';\nimport l10n from 'modapp-l10n';\nimport FAIcon from 'components/FAIcon';\nimport counterString from 'utils/counterString';\nimport PageMailComponent from './PageMailComponent';\nimport './pageMail.scss';\n\n/**\n * PageMail adds the mail for player panel page\n */\nclass PageMail {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\t// Bind callbacks\n\t\tthis._onUnreadChange = this._onUnreadChange.bind(this);\n\t\tthis._onNotificationNewMailEvent = this._onNotificationNewMailEvent.bind(this);\n\n\t\tthis.app.require([\n\t\t\t'playerTabs',\n\t\t\t'confirm',\n\t\t\t'auth',\n\t\t\t'api',\n\t\t\t'avatar',\n\t\t\t'notify',\n\t\t\t'playerEvent',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\t\tthis.unread = new ModelWrapper(null, { eventBus: this.app.eventBus });\n\t\tthis.state = { mailId: null, offset: 0 };\n\n\t\t// Add mail player tab\n\t\tthis.module.playerTabs.addTab({\n\t\t\tid: 'mail',\n\t\t\tsortOrder: 30,\n\t\t\ttabFactory: click => new Elem(n => n.elem('button', { className: 'iconbtn medium light pagemail--tool-btn', events: {\n\t\t\t\tclick: (c, e) => {\n\t\t\t\t\tclick();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t},\n\t\t\t}}, [\n\t\t\t\tn.component(new FAIcon('envelope')),\n\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\tthis.unread,\n\t\t\t\t\tnew Elem(n => n.elem('div', { className: 'counter alert' }, [\n\t\t\t\t\t\tn.component('txt', new Txt(\"\")),\n\t\t\t\t\t])),\n\t\t\t\t\t(m, c) => {\n\t\t\t\t\t\tlet l = Object.keys(m.props).length;\n\t\t\t\t\t\tc.getNode('txt').setText(counterString(l));\n\t\t\t\t\t\tc[l ? 'removeClass' : 'addClass']('hide');\n\t\t\t\t\t},\n\t\t\t\t)),\n\t\t\t])),\n\t\t\tfactory: (state, close, layoutId) => ({\n\t\t\t\tcomponent: new PageMailComponent(this.module, this.state, close),\n\t\t\t\ttitle: l10n.l('pageMail.mailInbox', \"Mail Inbox\"),\n\t\t\t}),\n\t\t});\n\n\t\tthis.module.auth.getUserPromise().then(user => {\n\t\t\tif (!this.unread) return;\n\n\t\t\tthis.module.api.get('mail.player.' + user.id + '.unread')\n\t\t\t\t.then(unread => {\n\t\t\t\t\tif (this.unread) {\n\t\t\t\t\t\tthis.unread.setModel(unread);\n\n\t\t\t\t\t\tthis._listen(true);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t});\n\n\t\tthis._listenNotification(true);\n\t}\n\n\t/**\n\t * Opens an in-panel char select page in the player panel.\n\t * @param {bool} reset Flag if the tab should be reset to show the default page. Defaults to false.\n\t * @returns {function} Close function.\n\t */\n\topen(reset) {\n\t\treturn this.module.playerTabs.openTab('mail', reset);\n\t}\n\n\t_listen(on) {\n\t\tlet m = this.unread.getModel();\n\t\tif (m) {\n\t\t\tm[on ? 'on' : 'off']('change', this._onUnreadChange);\n\t\t}\n\t}\n\n\t_listenNotification(on) {\n\t\tthis.module.notify[on ? 'addNotificationHandler' : 'removeNotificationHandler']('newMail', this._onNotificationNewMailEvent);\n\t}\n\n\t_onUnreadChange(change, unread) {\n\t\tlet nm = this.module.notify.getModel();\n\t\tif (!nm.notifyOnRequests) return;\n\n\t\tfor (let k in change) {\n\t\t\tif (!change[k]) {\n\t\t\t\tlet ref = unread.props[k];\n\t\t\t\tif (ref) {\n\t\t\t\t\tref.get().then(mail => this._notifyMail(mail));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t_notifyMail(mail) {\n\t\tlet c = mail.from;\n\t\tthis.module.notify.send(\n\t\t\tl10n.l('pageMail.newMail', \"New mail\"),\n\t\t\tl10n.l('pageMail.sentAMail', \"{name} sent a mail\", { name: (c.name + ' ' + c.surname).trim() }),\n\t\t\t{\n\t\t\t\tonClick: () => {\n\t\t\t\t\tthis.open();\n\t\t\t\t\twindow.focus();\n\t\t\t\t},\n\t\t\t\tduration: 1000 * 60 * 60 * 24, // Max 1 day\n\t\t\t\tskipOnPush: true,\n\t\t\t},\n\t\t);\n\t}\n\n\t_onNotificationNewMailEvent(params) {\n\t\tthis.open();\n\t}\n\n\tdispose() {\n\t\tthis._listenNotification(false);\n\t\tthis._listen(false);\n\t\tthis.module.playerTabs.removeTab('mail');\n\t\tthis.unread.dispose();\n\t\tthis.unread = null;\n\t}\n}\n\nexport default PageMail;\n","import { Context, Elem } from 'modapp-base-component';\nimport { CollectionList } from 'modapp-resource-component';\nimport { CollectionWrapper } from 'modapp-resource';\nimport PanelSection from 'components/PanelSection';\nimport l10n from 'modapp-l10n';\n\nclass PagePlayerSettingsComponent {\n\tconstructor(module, user, player, state, close) {\n\t\tthis.module = module;\n\t\tthis.user = user;\n\t\tthis.identity = user.identity && !this.module.api.isError(user.identity) ? user.identity : null;\n\t\tthis.player = player;\n\t\tthis.state = state;\n\t\tthis.close = close;\n\t}\n\n\trender(el) {\n\t\tthis.elem = new Elem(n => n.elem('div', { className: 'pageplayersettings' }, [\n\t\t\tn.component(new Context(\n\t\t\t\t() => new CollectionWrapper(this.module.self.getTools(), {\n\t\t\t\t\tfilter: t => t.type == 'topSection',\n\t\t\t\t}),\n\t\t\t\ttools => tools.dispose(),\n\t\t\t\ttools => new CollectionList(\n\t\t\t\t\ttools,\n\t\t\t\t\tt => t.componentFactory(this.user, this.player, this.state),\n\t\t\t\t\t{\n\t\t\t\t\t\tsubClassName: t => t.className || null,\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t)),\n\t\t\tn.component(new PanelSection(\n\t\t\t\tl10n.l('pagePlayerSettings.preferences', \"Preferences\"),\n\t\t\t\tnew Elem(n => n.elem('div', [\n\t\t\t\t\tn.component(new Context(\n\t\t\t\t\t\t() => new CollectionWrapper(this.module.self.getTools(), {\n\t\t\t\t\t\t\tfilter: t => !t.type || t.type == 'preference',\n\t\t\t\t\t\t}),\n\t\t\t\t\t\ttools => tools.dispose(),\n\t\t\t\t\t\ttools => new CollectionList(\n\t\t\t\t\t\t\ttools,\n\t\t\t\t\t\t\tt => t.componentFactory(this.user, this.player, this.state),\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tsubClassName: t => t.className || null,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t),\n\t\t\t\t\t)),\n\t\t\t\t])),\n\t\t\t\t{\n\t\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\t\tnoToggle: true,\n\t\t\t\t},\n\t\t\t)),\n\t\t\tn.component(new Context(\n\t\t\t\t() => new CollectionWrapper(this.module.self.getTools(), {\n\t\t\t\t\tfilter: t => t.type == 'section',\n\t\t\t\t}),\n\t\t\t\ttools => tools.dispose(),\n\t\t\t\ttools => new CollectionList(\n\t\t\t\t\ttools,\n\t\t\t\t\tt => t.componentFactory(this.user, this.player, this.state),\n\t\t\t\t\t{\n\t\t\t\t\t\tclassName: 'pageplayersettings--preferences',\n\t\t\t\t\t\tsubClassName: t => t.className || null,\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t)),\n\t\t]));\n\t\tthis.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n}\n\nexport default PagePlayerSettingsComponent;\n","import { Elem } from 'modapp-base-component';\nimport { ModelComponent } from 'modapp-resource-component';\nimport { Collection, Model, sortOrderCompare } from 'modapp-resource';\nimport l10n from 'modapp-l10n';\nimport FAIcon from 'components/FAIcon';\nimport PagePlayerSettingsComponent from './PagePlayerSettingsComponent';\nimport './pagePlayerSettings.scss';\n\n/**\n * PagePlayerSettings draws player panel.\n */\nclass PagePlayerSettings {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\t// Bind callbacks\n\t\tthis._updateAlert = this._updateAlert.bind(this);\n\t\tthis._onClick = this._onClick.bind(this);\n\n\t\tthis.app.require([\n\t\t\t'playerTabs',\n\t\t\t'playerTools',\n\t\t\t'auth',\n\t\t\t'player',\n\t\t\t'dialogChangePassword',\n\t\t\t'api',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\n\t\tthis.model = new Model({ data: { alert: 0 }, eventBus: this.app.eventBus });\n\n\t\tthis.tools = new Collection({\n\t\t\tidAttribute: m => m.id,\n\t\t\tcompare: sortOrderCompare,\n\t\t\teventBus: this.app.eventBus,\n\t\t});\n\n\t\t// Add kebab menu tool\n\t\tthis.module.playerTools.addTool({\n\t\t\tid: 'playerSettings',\n\t\t\tsortOrder: 10,\n\t\t\tname: l10n.l('pagePlayerSettings.settings', \"Settings\"),\n\t\t\ticon: 'cog',\n\t\t\tonClick: this._onClick,\n\t\t});\n\n\t\t// Add logout tool\n\t\tthis.module.playerTools.addFooterTool({\n\t\t\tid: 'playerSettings',\n\t\t\tsortOrder: 100,\n\t\t\tcomponentFactory: () => new ModelComponent(\n\t\t\t\tthis.model,\n\t\t\t\tnew Elem(n => n.elem('button', { className: 'iconbtn medium lighten pageplayersettings--tool-btn', events: {\n\t\t\t\t\tclick: this._onClick,\n\t\t\t\t}}, [\n\t\t\t\t\tn.component(new FAIcon('cog')),\n\t\t\t\t\tn.elem('alert', 'div', { className: 'counter small alert' }),\n\t\t\t\t])),\n\t\t\t\t(m, c) => c[m.alert ? 'removeNodeClass' : 'addNodeClass']('alert', 'hide'),\n\t\t\t),\n\t\t\tclassName: 'pageplayersettings--tool',\n\t\t});\n\n\t\tthis.closer = null;\n\t}\n\n\t_onClick() {\n\t\tif (this.closer) {\n\t\t\tthis.closer();\n\t\t} else {\n\t\t\tthis.open();\n\t\t}\n\t}\n\n\t/**\n\t * Gets a collection of tools.\n\t * @returns {Collection} Collection of tools.\n\t */\n\tgetTools() {\n\t\treturn this.tools;\n\t}\n\n\t/**\n\t * Registers a settings component tool.\n\t * @param {object} tool Tool object\n\t * @param {string} tool.id Tool ID.\n\t * @param {number} tool.sortOrder Sort order.\n\t * @param {function} tool.componentFactory Tool component factory: function(user, player, state) -> Component\n\t * @param {string} [tool.type] Target type. May be 'preference' 'topSection', or 'section'. Defaults to 'preference';\n\t * @param {number} [tool.className] Class to give to the list item container.\n\t * @param {Model} [tool.alertModel] Model with an \"alert\" property. If the alert property resolves to true, an marker will show on settings icon\n\t * @returns {this}\n\t */\n\taddTool(tool) {\n\t\tif (this.tools.get(tool.id)) {\n\t\t\tthrow new Error(\"Tool ID already registered: \", tool.id);\n\t\t}\n\t\tthis.tools.add(tool);\n\t\tthis._listenTool(tool, true);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Unregisters a previously registered tool.\n\t * @param {string} toolId Tool ID.\n\t * @returns {this}\n\t */\n\tremoveTool(toolId) {\n\t\tlet tool = this.tools.get(toolId);\n\t\tthis._listenTool(tool, false);\n\t\tthis.tools.remove(toolId);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Opens an in-panel player settings page in the player panel.\n\t * @returns {function} Close function.\n\t */\n\topen() {\n\t\tlet player = this.module.player.getPlayer();\n\t\tif (!player) return null;\n\n\t\tthis.closer = this.module.playerTabs.openPage(\n\t\t\t'playerSettings',\n\t\t\t(state, close, layoutId) => ({\n\t\t\t\tcomponent: new PagePlayerSettingsComponent(this.module, this.module.auth.getUser(), player, state, close),\n\t\t\t\ttitle: l10n.l('pagePlayerSettings.playerSettings', \"Player Settings\"),\n\t\t\t}),\n\t\t\t{\n\t\t\t\tonClose: () => this.closer = null,\n\t\t\t},\n\t\t);\n\n\t\treturn this.closer;\n\t}\n\n\t_listenTool(tool, on) {\n\t\tif (!tool.alertModel) return;\n\n\t\ttool.alertModel[on ? 'on' : 'off']('change', this._updateAlert);\n\t\tif (on) {\n\t\t\tthis._updateAlert();\n\t\t}\n\t}\n\n\t_updateAlert() {\n\t\tlet alert = 0;\n\t\tfor (let tool of this.tools) {\n\t\t\tlet m = tool.alertModel;\n\t\t\tif (m && m.alert) {\n\t\t\t\talert++;\n\t\t\t}\n\t\t}\n\t\tthis.model.set({ alert });\n\t}\n\n\tdispose() {\n\t\tthis.module.playerTools.removeFooterTool('playerSettings');\n\t}\n}\n\nexport default PagePlayerSettings;\n","import { Context, Elem, Txt } from 'modapp-base-component';\nimport { ModelTxt, ModelComponent, CollectionComponent, CollectionList } from 'modapp-resource-component';\nimport { ModifyModel, CollectionWrapper } from 'modapp-resource';\nimport l10n from 'modapp-l10n';\nimport Collapser from 'components/Collapser';\nimport FAIcon from 'components/FAIcon';\nimport formatDateTime from 'utils/formatDateTime';\n\nclass PagePuppeteerSettingsComponent {\n\tconstructor(module, puppeteer, charSettings, state, close) {\n\t\tstate.changes = state.changes || {};\n\n\t\tthis.module = module;\n\t\tthis.puppeteer = puppeteer;\n\t\tthis.charSettings = charSettings;\n\t\tthis.state = state;\n\t\tthis.close = close;\n\t}\n\n\trender(el) {\n\t\tthis.model = new ModifyModel(this.ctrl, {\n\t\t\tprops: this.state.changes,\n\t\t\teventBus: this.module.self.app.eventBus,\n\t\t});\n\n\t\tthis.elem = new CollectionComponent(\n\t\t\tthis.module.player.getPuppets(),\n\t\t\tnew Elem(n => n.elem('div', { className: 'pagepuppeteersettings' }, [\n\t\t\t\tn.component(new ModelTxt(this.puppeteer.puppet, m => (m.name + \" \" + m.surname).trim(), { tagName: 'div', className: 'pagepuppeteersettings--name' })),\n\t\t\t\tn.elem('div', { className: 'common--sectionpadding' }, [\n\t\t\t\t\tn.component(new Txt(l10n.l('pagePuppeteerSettings.puppeteer', \"Puppeteer\"), { tagName: 'h4' })),\n\t\t\t\t\tn.component(new ModelTxt(this.puppeteer.char, m => (m.name + ' ' + m.surname).trim(), { tagName: 'div', className: 'common--font-small' })),\n\t\t\t\t]),\n\t\t\t\tn.elem('div', { className: 'common--sectionpadding' }, [\n\t\t\t\t\tn.component(new Txt(l10n.l('pagePuppeteerSettings.lastControlled', \"Last controlled\"), { tagName: 'h4' })),\n\t\t\t\t\tn.component(new ModelTxt(\n\t\t\t\t\t\tthis.puppeteer,\n\t\t\t\t\t\tm => m.lastUsed\n\t\t\t\t\t\t\t? formatDateTime(new Date(m.lastUsed))\n\t\t\t\t\t\t\t: l10n.l('pagePuppeteerSettings.never', \"Never\"),\n\t\t\t\t\t\t{ tagName: 'div', className: 'common--font-small' },\n\t\t\t\t\t)),\n\t\t\t\t]),\n\t\t\t\tn.component(new Context(\n\t\t\t\t\t() => new CollectionWrapper(this.module.self.getTools(), {\n\t\t\t\t\t\tfilter: t => t.type == 'topSection',\n\t\t\t\t\t}),\n\t\t\t\t\ttools => tools.dispose(),\n\t\t\t\t\ttools => new CollectionList(\n\t\t\t\t\t\ttools,\n\t\t\t\t\t\tt => t.componentFactory(this.puppeteer, this.charSettings, this.state),\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\t\t\t\tsubClassName: t => t.className || null,\n\t\t\t\t\t\t},\n\t\t\t\t\t),\n\t\t\t\t)),\n\t\t\t\tn.component(new Context(\n\t\t\t\t\t() => new CollectionWrapper(this.module.self.getTools(), {\n\t\t\t\t\t\tfilter: t => t.type == 'sections',\n\t\t\t\t\t}),\n\t\t\t\t\ttools => tools.dispose(),\n\t\t\t\t\ttools => new CollectionList(\n\t\t\t\t\t\ttools,\n\t\t\t\t\t\tt => t.componentFactory(this.puppeteer, this.charSettings, this.state),\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\t\t\t\tsubClassName: t => t.className || null,\n\t\t\t\t\t\t},\n\t\t\t\t\t),\n\t\t\t\t)),\n\t\t\t\tn.component('message', new Collapser(null)),\n\t\t\t\tn.elem('div', { className: 'pad-top-xl flex-row margin8 flex-end' }, [\n\t\t\t\t\tn.elem('div', { className: 'flex-1' }, [\n\t\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\t\tthis.model,\n\t\t\t\t\t\t\tnew Elem(n => n.elem('update', 'button', { events: {\n\t\t\t\t\t\t\t\tclick: () => this._save(this.model),\n\t\t\t\t\t\t\t}, className: 'btn primary flex-1' }, [\n\t\t\t\t\t\t\t\tn.component('text', new Txt()),\n\t\t\t\t\t\t\t])),\n\t\t\t\t\t\t\t(m, c) => c.getNode('text').setText(m.isModified\n\t\t\t\t\t\t\t\t? l10n.l('pagePuppeteerSettings.update', \"Save edits\")\n\t\t\t\t\t\t\t\t: l10n.l('pagePuppeteerSettings.close', \"Close\"),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t)),\n\t\t\t\t\t]),\n\t\t\t\t\tn.elem('button', { events: {\n\t\t\t\t\t\tclick: () => this.module.dialogUnregisterPuppet.open(this.puppeteer),\n\t\t\t\t\t}, className: 'iconbtn medium light' }, [\n\t\t\t\t\t\tn.component(new FAIcon('trash')),\n\t\t\t\t\t]),\n\t\t\t\t]),\n\t\t\t])),\n\t\t\t(col, c) => {\n\t\t\t\t// Close if we are no longer puppeteers\n\t\t\t\tfor (var puppeteer of col) {\n\t\t\t\t\tif (puppeteer.char.id == this.puppeteer.char.id && puppeteer.puppet.id == this.puppeteer.puppet.id) return;\n\t\t\t\t}\n\t\t\t\tsetTimeout(() => this.close(), 0);\n\t\t\t},\n\t\t);\n\t\tthis.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t\tif (this.model) {\n\t\t\tthis.state.changes = this.model.getModifications() || {};\n\t\t\tthis.model.dispose();\n\t\t\tthis.model = null;\n\t\t}\n\t}\n\n\t_save(model) {\n\t\tlet change = model.getModifications();\n\t\tlet p = change && Object.keys(change)\n\t\t\t? Promise.reject(\"Not implemented\")\n\t\t\t: Promise.resolve();\n\n\t\treturn p.then(() => {\n\t\t\tthis._close();\n\t\t}).catch(err => {\n\t\t\tthis._setMessage(l10n.l(err.code, err.message, err.data));\n\t\t});\n\t}\n\n\t_setMessage(msg) {\n\t\tif (!this.elem) return;\n\t\tthis.elem.getNode('message').setComponent(msg\n\t\t\t? new Txt(msg, { className: 'dialog--error' })\n\t\t\t: null,\n\t\t);\n\t}\n\n\t_close() {\n\t\tthis.close();\n\t\tif (this.model) {\n\t\t\tthis.model.dispose();\n\t\t\tthis.model = null;\n\t\t}\n\t\tthis.state.changes = {};\n\t}\n}\n\nexport default PagePuppeteerSettingsComponent;\n","import { Collection, sortOrderCompare } from 'modapp-resource';\nimport l10n from 'modapp-l10n';\nimport PagePuppeteerSettingsComponent from './PagePuppeteerSettingsComponent';\nimport './pagePuppeteerSettings.scss';\n\nfunction getPuppeteerId(puppeteer) {\n\treturn puppeteer.char.id + '_' + puppeteer.puppet.id;\n}\n\n/**\n * PagePuppeteerSettings draws player panel.\n */\nclass PagePuppeteerSettings {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'playerTabs',\n\t\t\t'dialogUnregisterPuppet',\n\t\t\t'player',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\t\tthis.puppeteerPages = {};\n\n\t\tthis.tools = new Collection({\n\t\t\tidAttribute: m => m.id,\n\t\t\tcompare: sortOrderCompare,\n\t\t\teventBus: this.app.eventBus,\n\t\t});\n\t}\n\n\t/**\n\t * Gets a collection of tools.\n\t * @returns {Collection} Collection of tools.\n\t */\n\tgetTools() {\n\t\treturn this.tools;\n\t}\n\n\t/**\n\t * Registers a settings component tool.\n\t * @param {object} tool Tool object\n\t * @param {string} tool.id Tool ID.\n\t * @param {number} tool.sortOrder Sort order.\n\t * @param {function} tool.componentFactory Tool component factory: function(puppeteer, charSettings, state) -> Component\n\t * @param {string} [tool.type] Target type. May be 'preference' or 'section'. Defaults to 'preference';\n\t * @param {number} [tool.className] Class to give to the list item container.\n\t * @returns {this}\n\t */\n\taddTool(tool) {\n\t\tif (this.tools.get(tool.id)) {\n\t\t\tthrow new Error(\"Tool ID already registered: \", tool.id);\n\t\t}\n\t\tthis.tools.add(tool);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Unregisters a previously registered tool.\n\t * @param {string} toolId Tool ID.\n\t * @returns {this}\n\t */\n\tremoveTool(toolId) {\n\t\tthis.tools.remove(toolId);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Opens an in-panel puppeteer settings page in the player panel.\n\t * @param {Model} puppeteer Puppeteer model to edit settings for.\n\t * @returns {Promise.<function>} Promise of a close function.\n\t */\n\topen(puppeteer) {\n\t\tlet puppeteerId = getPuppeteerId(puppeteer);\n\t\tif (this.puppeteerPages[puppeteerId]) {\n\t\t\tthrow new Error(\"Char settings page already open\");\n\t\t}\n\n\t\tlet d = {};\n\t\tthis.puppeteerPages[puppeteerId] = d;\n\n\t\tlet close = this.module.playerTabs.openTabPage(\n\t\t\t'charSelect',\n\t\t\t'puppeteerSettings_' + puppeteerId,\n\t\t\t(state, close) => ({\n\t\t\t\tcomponent: new PagePuppeteerSettingsComponent(this.module, puppeteer, puppeteer.settings, state, close),\n\t\t\t\ttitle: l10n.l('pagePuppeteerSettings.puppetSettings', \"Puppet Settings\"),\n\t\t\t}),\n\t\t\t{\n\t\t\t\tonClose: () => this._onClose(puppeteer),\n\t\t\t},\n\t\t);\n\n\t\td.close = close;\n\n\t\treturn close;\n\t}\n\n\t_onClose(puppeteer) {\n\t\tlet puppeteerId = getPuppeteerId(puppeteer);\n\t\tlet d = this.puppeteerPages[puppeteerId];\n\t\tif (d) {\n\t\t\tdelete this.puppeteerPages[puppeteerId];\n\t\t}\n\t}\n}\n\nexport default PagePuppeteerSettings;\n","import { Elem, Txt } from 'modapp-base-component';\nimport { ModelComponent, ModelTxt } from 'modapp-resource-component';\nimport l10n from 'modapp-l10n';\nimport Collapser from 'components/Collapser';\nimport FAIcon from 'components/FAIcon';\nimport formatDateTime from 'utils/formatDateTime';\nimport errString from 'utils/errString';\n\nconst stateIcons = {\n\tpending: 'question',\n\taccepted: 'check',\n\trejected: 'times',\n\tfailed: 'check',\n};\n\nconst stateTime = {\n\tpending: m => l10n.l('pageRequest.expires', \"Expires {time}\", { time: formatDateTime(new Date(m.expires)) }),\n\taccepted: m => l10n.l('pageRequest.accepted', \"Accepted {time}\", { time: formatDateTime(new Date(m.answered)) }),\n\trejected: m => l10n.l('pageRequest.rejected', \"Rejected {time}\", { time: formatDateTime(new Date(m.answered)) }),\n\tfailed: m => l10n.l('pageRequest.failed', \"Failed {time}\", { time: formatDateTime(new Date(m.answered)) }),\n};\n\nclass PageRequestsRequest {\n\tconstructor(module, request, model, outgoing) {\n\t\tthis.module = module;\n\t\tthis.request = request;\n\t\tthis.model = model;\n\t\tthis.outgoing = outgoing;\n\n\t\tthis.type = this.module.self.getRequestType(this.request.type) || {};\n\t}\n\n\tget stateProp() {\n\t\treturn this.outgoing ? 'outgoingRequestId' : 'incomingRequestId';\n\t}\n\n\trender(el) {\n\t\tthis.elem = new ModelComponent(\n\t\t\tthis.model,\n\t\t\tnew ModelComponent(\n\t\t\t\tthis.request,\n\t\t\t\tnew Elem(n => n.elem('div', { className: 'pagerequests-request' }, [\n\t\t\t\t\tn.elem('btn', 'div', { className: 'badge btn margin4', events: {\n\t\t\t\t\t\tclick: () => this._toggleActions(),\n\t\t\t\t\t}}, [\n\t\t\t\t\t\tn.elem('div', { className: 'badge--select' }, [\n\t\t\t\t\t\t\tn.elem('icon', 'div', { className: 'pagerequests-request--icon badge--faicon' }, [\n\t\t\t\t\t\t\t\tn.component('faicon', new FAIcon()),\n\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\tn.elem('div', { className: 'badge--info' }, [\n\t\t\t\t\t\t\t\tn.elem('div', { className: 'badge--title badge--nowrap' }, [\n\t\t\t\t\t\t\t\t\tn.component(new ModelTxt(this.request.from, c => errString(\n\t\t\t\t\t\t\t\t\t\tc,\n\t\t\t\t\t\t\t\t\t\tc => (c.name + ' ' + c.surname).trim(),\n\t\t\t\t\t\t\t\t\t\tl10n.l('pageRequests.unknown', \"(Unknown)\"),\n\t\t\t\t\t\t\t\t\t))),\n\t\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\t\tn.elem('div', { className: 'badge--text badge--nowrap' }, [\n\t\t\t\t\t\t\t\t\tn.component(new ModelTxt(this.request, m => (this.type.titleFactory ? this.type.titleFactory(this.request) : null) || m.type)),\n\t\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t]),\n\t\t\t\t\t\tn.component('actions', new Collapser(null)),\n\t\t\t\t\t]),\n\t\t\t\t])),\n\t\t\t\t(m, c) => {\n\t\t\t\t\tc[m.state == 'pending' ? 'removeNodeClass' : 'addNodeClass']('btn', 'inactive');\n\t\t\t\t\tfor (let state in stateIcons) {\n\t\t\t\t\t\tc[m.state == state ? 'addNodeClass' : 'removeNodeClass']('icon', state);\n\t\t\t\t\t}\n\t\t\t\t\tc.getNode('faicon').setIcon(stateIcons[m.state] || 'question');\n\t\t\t\t},\n\t\t\t),\n\t\t\t(m, c, change) => {\n\t\t\t\tlet prop = this.stateProp;\n\t\t\t\tif (change && !change.hasOwnProperty(prop)) return;\n\t\t\t\tc.getComponent().getNode('actions').setComponent(m[prop] === this.request.id\n\t\t\t\t\t? new Elem(n => n.elem('div', { className: 'badge--actions' }, [\n\t\t\t\t\t\tn.component(this.type.componentFactory\n\t\t\t\t\t\t\t? this.type.componentFactory(this.request)\n\t\t\t\t\t\t\t: null,\n\t\t\t\t\t\t),\n\t\t\t\t\t\tn.elem('div', { className: 'flex-row badge--margin' }, [\n\t\t\t\t\t\t\tn.component(new Txt(l10n.l('pageRequest.expires', \"Time\"), { tagName: 'div', className: 'pagerequests-request--expire badge--iconcol badge--subtitle' })),\n\t\t\t\t\t\t\tn.elem('div', { className: 'badge--info' }, [\n\t\t\t\t\t\t\t\tn.component(new ModelTxt(\n\t\t\t\t\t\t\t\t\tthis.request,\n\t\t\t\t\t\t\t\t\tm => stateTime[m.state](m),\n\t\t\t\t\t\t\t\t\t{ tagName: 'div', className: 'badge--text' },\n\t\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\t\t\t\tthis.request,\n\t\t\t\t\t\t\t\t\tnew Collapser(),\n\t\t\t\t\t\t\t\t\t(m, c, change) => {\n\t\t\t\t\t\t\t\t\t\tif (change && !change.hasOwnProperty('error')) return;\n\t\t\t\t\t\t\t\t\t\tlet err = m.error;\n\t\t\t\t\t\t\t\t\t\tc.setComponent(err\n\t\t\t\t\t\t\t\t\t\t\t? new Txt(l10n.l(err.code, err.message, err.data), { tagName: 'div', className: 'badge--error' })\n\t\t\t\t\t\t\t\t\t\t\t: null,\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t]),\n\t\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\t\tthis.request,\n\t\t\t\t\t\t\tnew Collapser(),\n\t\t\t\t\t\t\t(m, c, change) => {\n\t\t\t\t\t\t\t\tif (change && !change.hasOwnProperty('state')) return;\n\n\t\t\t\t\t\t\t\tc.setComponent(m.state == 'pending'\n\t\t\t\t\t\t\t\t\t? this.outgoing\n\t\t\t\t\t\t\t\t\t\t? new Elem(n => n.elem('div', [\n\t\t\t\t\t\t\t\t\t\t\tn.elem('div', { className: 'flex-row margin4 badge--margin' }, [\n\t\t\t\t\t\t\t\t\t\t\t\tn.elem('button', { className: 'btn icon-left medium warning flex-1', events: {\n\t\t\t\t\t\t\t\t\t\t\t\t\tclick: (el, e) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis._revoke();\n\t\t\t\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t}}, [\n\t\t\t\t\t\t\t\t\t\t\t\t\tn.component(new FAIcon('trash')),\n\t\t\t\t\t\t\t\t\t\t\t\t\tn.component(new Txt(l10n.l('pageRequest.revoke', \"Revoke\"))),\n\t\t\t\t\t\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\t\t\t\t]))\n\t\t\t\t\t\t\t\t\t\t: new Elem(n => n.elem('div', [\n\t\t\t\t\t\t\t\t\t\t\tn.elem('div', { className: 'flex-row margin4 badge--margin' }, [\n\t\t\t\t\t\t\t\t\t\t\t\tn.elem('button', { className: 'btn icon-left medium primary flex-1', events: {\n\t\t\t\t\t\t\t\t\t\t\t\t\tclick: (el, e) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis._accept();\n\t\t\t\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t}}, [\n\t\t\t\t\t\t\t\t\t\t\t\t\tn.component(new FAIcon('check')),\n\t\t\t\t\t\t\t\t\t\t\t\t\tn.component(new Txt(l10n.l('pageRequest.reject', \"Accept\"))),\n\t\t\t\t\t\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\t\t\t\t\t\tn.elem('button', { className: 'btn icon-left medium warning flex-1', events: {\n\t\t\t\t\t\t\t\t\t\t\t\t\tclick: (el, e) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis._reject();\n\t\t\t\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t}}, [\n\t\t\t\t\t\t\t\t\t\t\t\t\tn.component(new FAIcon('times')),\n\t\t\t\t\t\t\t\t\t\t\t\t\tn.component(new Txt(l10n.l('pageRequest.reject', \"Reject\"))),\n\t\t\t\t\t\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\t\t\t\t]))\n\t\t\t\t\t\t\t\t\t: null,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t)),\n\t\t\t\t\t]))\n\t\t\t\t\t: null,\n\t\t\t\t);\n\t\t\t},\n\t\t);\n\t\treturn this.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n\n\t_toggleActions(show) {\n\t\tlet prop = this.stateProp;\n\t\tshow = typeof show == 'undefined'\n\t\t\t? !this.model[prop] || this.model[prop] != this.request.id\n\t\t\t: !!show;\n\n\t\tthis.model.set({ [prop]: show ? this.request.id : null });\n\t}\n\n\t_accept() {\n\t\tthis.module.player.getPlayer().call('acceptRequest', {\n\t\t\trequestId: this.request.id,\n\t\t})\n\t\t\t.then(result => {\n\t\t\t\tif (result.error) {\n\t\t\t\t\tlet err = result.error;\n\t\t\t\t\tthis.module.confirm.open(null, {\n\t\t\t\t\t\ttitle: l10n.l('pageRequest.error', \"Request failed\"),\n\t\t\t\t\t\tconfirm: l10n.l('confirm.ok', \"Okay\"),\n\t\t\t\t\t\tbody: new Elem(n => n.elem('div', [\n\t\t\t\t\t\t\tn.component(new Txt(l10n.l('pageRequest.errorBody', \"Something went wrong when trying to fulfil the request.\"), { tagName: 'p' })),\n\t\t\t\t\t\t\tn.component(new Txt(l10n.l(err.code, err.message, err.data), { tagName: 'i' })),\n\t\t\t\t\t\t])),\n\t\t\t\t\t\tcancel: null,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tthis._close();\n\t\t\t})\n\t\t\t.catch(err => this.module.confirm.openError(err));\n\t}\n\n\t_reject() {\n\t\tthis.module.player.getPlayer().call('rejectRequest', {\n\t\t\trequestId: this.request.id,\n\t\t})\n\t\t\t.then(() => this._close())\n\t\t\t.catch(err => this.module.confirm.openError(err));\n\t}\n\n\t_revoke() {\n\t\tthis.module.confirm.open(() => this.module.player.getPlayer()\n\t\t\t.call('revokeRequest', { requestId: this.request.id })\n\t\t\t.then(() => this._close())\n\t\t\t.catch(err => this.module.confirm.openError(err)),\n\t\t{\n\t\t\ttitle: l10n.l('pageRequests.confirmRevocation', \"Confirm revocation\"),\n\t\t\tbody: l10n.l('pageRequests.revokeBody', \"Do you really wish to revoke the request?\"),\n\t\t\tconfirm: l10n.l('pageRequests.revoke', \"Revoke\"),\n\t\t});\n\t}\n\n\t_close() {\n\t\tlet prop = this.stateProp;\n\t\tif (this.model[prop] == this.request.id) {\n\t\t\tthis.model.set({ [prop]: null });\n\t\t}\n\t}\n\n}\n\nexport default PageRequestsRequest;\n","import { Elem, Txt, Context } from 'modapp-base-component';\nimport { CollectionList, CollectionComponent } from 'modapp-resource-component';\nimport { Model, CollectionWrapper } from 'modapp-resource';\nimport l10n from 'modapp-l10n';\nimport PanelSection from 'components/PanelSection';\nimport Collapser from 'components/Collapser';\nimport PageRequestsRequest from './PageRequestsRequest';\n\nclass PageRequestsComponent {\n\tconstructor(module, incoming, outgoing, state, close) {\n\t\tthis.module = module;\n\t\tthis.incoming = incoming;\n\t\tthis.outgoing = outgoing;\n\t\tstate.incomingRequestId = state.incomingRequestId || null;\n\t\tstate.outgoingRequestId = state.outgoingRequestId || null;\n\t\tthis.state = state;\n\t\tthis.close = close;\n\t\tthis.model = null;\n\t}\n\n\trender(el) {\n\t\tthis.model = new Model({ data: this.state, eventBus: this.module.self.app.eventBus });\n\t\tthis.elem = new Elem(n => n.elem('div', { className: 'pagerequests' }, [\n\t\t\tn.component(new PanelSection(\n\t\t\t\tl10n.l('pageRequests.incoming', \"Incoming\"),\n\t\t\t\tnew Elem(n => n.elem('div', [\n\t\t\t\t\tn.component(new Context(\n\t\t\t\t\t\t() => new CollectionWrapper(this.incoming, { compare: (a, b) => b.expires - a.expires }),\n\t\t\t\t\t\tincoming => incoming.dispose(),\n\t\t\t\t\t\tincoming => new CollectionList(\n\t\t\t\t\t\t\tincoming,\n\t\t\t\t\t\t\tm => new PageRequestsRequest(this.module, m, this.model, false),\n\t\t\t\t\t\t),\n\t\t\t\t\t)),\n\t\t\t\t\t// Placeholder text\n\t\t\t\t\tn.component(new CollectionComponent(\n\t\t\t\t\t\tthis.incoming,\n\t\t\t\t\t\tnew Collapser(),\n\t\t\t\t\t\t(col, c, ev) => c.setComponent(col.length\n\t\t\t\t\t\t\t? null\n\t\t\t\t\t\t\t: new Txt(l10n.l('pageRealm.noPending', \"No incoming requests.\"), { className: 'common--nolistplaceholder' }),\n\t\t\t\t\t\t),\n\t\t\t\t\t)),\n\t\t\t\t])),\n\t\t\t\t{\n\t\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\t},\n\t\t\t)),\n\t\t\tn.component(new PanelSection(\n\t\t\t\tl10n.l('pageRequests.outgoing', \"Outgoing\"),\n\t\t\t\tnew Elem(n => n.elem('div', [\n\t\t\t\t\tn.component(new Context(\n\t\t\t\t\t\t() => new CollectionWrapper(this.outgoing, { compare: (a, b) => b.expires - a.expires }),\n\t\t\t\t\t\toutgoing => outgoing.dispose(),\n\t\t\t\t\t\toutgoing => new CollectionList(\n\t\t\t\t\t\t\toutgoing,\n\t\t\t\t\t\t\tm => new PageRequestsRequest(this.module, m, this.model, true),\n\t\t\t\t\t\t),\n\t\t\t\t\t)),\n\t\t\t\t\t// Placeholder text\n\t\t\t\t\tn.component(new CollectionComponent(\n\t\t\t\t\t\tthis.outgoing,\n\t\t\t\t\t\tnew Collapser(),\n\t\t\t\t\t\t(col, c, ev) => c.setComponent(col.length\n\t\t\t\t\t\t\t? null\n\t\t\t\t\t\t\t: new Txt(l10n.l('pageRealm.noPending', \"No outgoing requests.\"), { className: 'common--nolistplaceholder' }),\n\t\t\t\t\t\t),\n\t\t\t\t\t)),\n\t\t\t\t])),\n\t\t\t\t{\n\t\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\t},\n\t\t\t)),\n\t\t]));\n\t\tthis.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tObject.assign(this.state, this.model.props);\n\t\t\tthis.model = null;\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n}\n\nexport default PageRequestsComponent;\n","import { Elem, Txt, Context } from 'modapp-base-component';\nimport { Model, Collection, CollectionWrapper } from 'modapp-resource';\nimport { CollectionComponent } from 'modapp-resource-component';\nimport l10n from 'modapp-l10n';\nimport FAIcon from 'components/FAIcon';\nimport counterString from 'utils/counterString';\nimport PageRequestsComponent from './PageRequestsComponent';\nimport './pageRequests.scss';\n\n/**\n * PageRequests adds the requests panel and requests button to player panel's\n * footer.\n */\nclass PageRequests {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\t// Bind callbacks\n\t\tthis._onRequestAdd = this._onRequestAdd.bind(this);\n\t\tthis._onNotificationNewRequestEvent = this._onNotificationNewRequestEvent.bind(this);\n\n\t\tthis.app.require([\n\t\t\t'playerTabs',\n\t\t\t'auth',\n\t\t\t'player',\n\t\t\t'api',\n\t\t\t'confirm',\n\t\t\t'notify',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\t\tthis.model = new Model({ eventBus: this.app.eventBus });\n\t\tthis.requestTypes = new Collection({\n\t\t\tidAttribute: m => m.id,\n\t\t\teventBus: this.app.eventBus,\n\t\t});\n\n\t\tthis.module.auth.getUserPromise()\n\t\t\t.then(user => Promise.all([\n\t\t\t\tthis.module.api.get('core.player.' + user.id + '.incoming.requests'),\n\t\t\t\tthis.module.api.get('core.player.' + user.id + '.outgoing.requests'),\n\t\t\t]))\n\t\t\t.then(result => {\n\t\t\t\tif (!this.model) return;\n\t\t\t\tlet incoming = result[0];\n\t\t\t\tlet outgoing = result[1];\n\t\t\t\tthis.model.set({ incoming, outgoing });\n\n\t\t\t\t// Make sure it is not unsubscribed\n\t\t\t\tthis._listen(true);\n\n\t\t\t\t// Add request player tab\n\t\t\t\tthis.module.playerTabs.addTab({\n\t\t\t\t\tid: 'requests',\n\t\t\t\t\tsortOrder: 100,\n\t\t\t\t\ttabFactory: click => new Elem(n => n.elem('button', { className: 'iconbtn medium light pagerequests--tool-btn', events: {\n\t\t\t\t\t\tclick: (c, e) => {\n\t\t\t\t\t\t\tclick();\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t},\n\t\t\t\t\t}}, [\n\t\t\t\t\t\tn.component(new FAIcon('bell')),\n\t\t\t\t\t\tn.component(new Context(\n\t\t\t\t\t\t\t() => new CollectionWrapper(incoming, { filter: m => m.state == 'pending', eventBus: this.app.eventBus }),\n\t\t\t\t\t\t\trequests => requests.dispose(),\n\t\t\t\t\t\t\trequests => new CollectionComponent(\n\t\t\t\t\t\t\t\trequests,\n\t\t\t\t\t\t\t\tnew Elem(n => n.elem('div', { className: 'counter alert' }, [\n\t\t\t\t\t\t\t\t\tn.component('txt', new Txt(\"\")),\n\t\t\t\t\t\t\t\t])),\n\t\t\t\t\t\t\t\t(col, c) => {\n\t\t\t\t\t\t\t\t\tc.getNode('txt').setText(counterString(col.length));\n\t\t\t\t\t\t\t\t\tc[col.length ? 'removeClass' : 'addClass']('hide');\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t)),\n\t\t\t\t\t])),\n\t\t\t\t\tfactory: (state, close, layoutId) => ({\n\t\t\t\t\t\tcomponent: new PageRequestsComponent(this.module, this.model.incoming, this.model.outgoing, state, close),\n\t\t\t\t\t\ttitle: l10n.l('pageRequests.requests', \"Requests\"),\n\t\t\t\t\t}),\n\t\t\t\t});\n\t\t\t});\n\t}\n\n\t/**\n\t * Opens an in-panel request page in the player panel.\n\t * @param {bool} reset Flag if the tab should be reset to show the default page. Defaults to false.\n\t * @returns {function} Close function.\n\t */\n\topen(reset) {\n\t\treturn this.module.playerTabs.openTab('requests', reset);\n\t}\n\n\t/**\n\t * Gets a specifig request type, or null if not found.\n\t * @param {string} id Request type ID.\n\t * @returns {?object} Request type.\n\t */\n\tgetRequestType(id) {\n\t\treturn this.requestTypes.get(id) || null;\n\t}\n\n\t/**\n\t * Registers a request type.\n\t * @param {object} requestType Request type.\n\t * @param {string} requestType.id Request type ID.\n\t * @param {string} requestType.titleFactory RequestType title factory: function(request) -> string|LocaleString\n\t * @param {function} requestType.componentFactory Request type info component factory: function(request) -> Component\n\t * @returns {this}\n\t */\n\taddRequestType(requestType) {\n\t\tif (this.requestTypes.get(requestType.id)) {\n\t\t\tthrow new Error(\"Request type ID already registered: \", requestType.id);\n\t\t}\n\t\tthis.requestTypes.add(requestType);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Unregisters a previously registered request type.\n\t * @param {string} id Request type ID.\n\t * @returns {this}\n\t */\n\tremoveRequestType(id) {\n\t\tthis.requestTypes.remove(id);\n\t\treturn this;\n\t}\n\n\t_listen(on) {\n\t\tif (!this.model) return;\n\t\tlet cb = on ? 'on' : 'off';\n\t\tlet inc = this.model.incoming;\n\t\tif (inc) {\n\t\t\tinc[cb]('add', this._onRequestAdd);\n\t\t}\n\t\tlet out = this.model.outgoing;\n\t\tif (out) {\n\t\t\tout[cb]();\n\t\t}\n\t\tthis.module.notify[on ? 'addNotificationHandler' : 'removeNotificationHandler']('newRequest', this._onNotificationNewRequestEvent);\n\t}\n\n\t_onRequestAdd(ev) {\n\t\tlet nm = this.module.notify.getModel();\n\t\tif (nm.notifyOnRequests) {\n\t\t\tlet c = ev.item.from;\n\t\t\tthis.module.notify.send(\n\t\t\t\tl10n.l('pageRequests.newRequest', \"New request\"),\n\t\t\t\tl10n.l('pageRequests.charSentRequest', \"{name} sent a request\", { name: (c.name + ' ' + c.surname).trim() }),\n\t\t\t\t{\n\t\t\t\t\tonClick: () => {\n\t\t\t\t\t\tthis.open();\n\t\t\t\t\t\twindow.focus();\n\t\t\t\t\t},\n\t\t\t\t\tduration: 1000 * 60 * 60 * 24, // Max 1 day\n\t\t\t\t\tskipOnPush: true,\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\t}\n\n\t_onNotificationNewRequestEvent(params) {\n\t\tthis.open();\n\t}\n\n\tdispose() {\n\t\tthis._listen(false);\n\t\tif (this.model.incoming) {\n\t\t\tthis.module.playerTabs.removeTab('requests');\n\t\t}\n\t\tthis.model = null;\n\t\tthis.requestTypes = null;\n\t}\n}\n\nexport default PageRequests;\n","import { Elem, Txt } from 'modapp-base-component';\nimport { ModelTxt } from 'modapp-resource-component';\nimport l10n from 'modapp-l10n';\nimport errString from 'utils/errString';\nimport './requestCreateExit.scss';\n\n/**\n * RequestCreateExit adds the \"createExit\" request type.\n */\nclass RequestCreateExit {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'pageRequests' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\t\tthis.module.pageRequests.addRequestType({\n\t\t\tid: 'createExit',\n\t\t\ttitleFactory: r => l10n.l('requestCreateExit.wantsToCreateExit', \"wants to create an exit\"),\n\t\t\tcomponentFactory: r => new Elem(n => n.elem('div', { className: 'requestcreateexit' }, [\n\t\t\t\tn.elem('div', { className: 'flex-row' }, [\n\t\t\t\t\tn.component(new Txt(l10n.l('requestCreateExit.from', \"From\"), { className: 'badge--iconcol badge--subtitle' })),\n\t\t\t\t\tn.component(new ModelTxt(r.params.room, m => errString(m, m => m.name, l10n.l('requestCreateExit.unknown', \"(Unknown)\")), { className: 'badge--info badge--strong' })),\n\t\t\t\t]),\n\t\t\t\tn.elem('div', { className: 'flex-row' }, [\n\t\t\t\t\tn.component(new Txt(l10n.l('requestCreateExit.to', \"To\"), { className: 'badge--iconcol badge--subtitle' })),\n\t\t\t\t\tn.elem('div', { className: 'badge--info' }, [\n\t\t\t\t\t\tn.component(new ModelTxt(r.params.targetRoom, m => errString(m, m => m.name, l10n.l('requestCreateExit.unknown', \"(Unknown)\")), { tagName: 'div', className: 'badge--strong' })),\n\t\t\t\t\t\tn.component(new ModelTxt(\n\t\t\t\t\t\t\tr.to,\n\t\t\t\t\t\t\tm => l10n.l('requestCreateExit.ownedBy', \"owned by {fullname}.\", { fullname: errString(m, m => (m.name + ' ' + m.surname), l10n.l('requestCreateExit.unknown', \"unknown\")).trim() }),\n\t\t\t\t\t\t\t{ tagName: 'div', className: 'badge--text' },\n\t\t\t\t\t\t)),\n\t\t\t\t\t]),\n\t\t\t\t]),\n\t\t\t])),\n\t\t});\n\t}\n\n\tdispose() {\n\t\tthis.requestTypes = null;\n\t}\n}\n\nexport default RequestCreateExit;\n","import { Elem, Txt } from 'modapp-base-component';\nimport { ModelTxt } from 'modapp-resource-component';\nimport l10n from 'modapp-l10n';\nimport errString from 'utils/errString';\nimport './requestRegisterPuppet.scss';\n\n/**\n * RequestRegisterPuppet adds the \"registerPuppet\" request type.\n */\nclass RequestRegisterPuppet {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'pageRequests' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\t\tthis.module.pageRequests.addRequestType({\n\t\t\tid: 'registerPuppet',\n\t\t\ttitleFactory: r => l10n.l('requestRegisterPuppet.wantsToRegisterPuppet', \"wants to register puppet\"),\n\t\t\tcomponentFactory: r => new Elem(n => n.elem('div', { className: 'requestregisterpuppet' }, [\n\t\t\t\tn.elem('div', { className: 'flex-row' }, [\n\t\t\t\t\tn.component(new Txt(l10n.l('requestRegisterPuppet.who', \"Who\"), { className: 'badge--iconcol badge--subtitle' })),\n\t\t\t\t\tn.component(new ModelTxt(r.params.puppet, m => errString(m, m => (m.name + ' ' + m.surname).trim(), l10n.l('requestRegisterPuppet.unknown', \"(Unknown)\")), {\n\t\t\t\t\t\tclassName: 'badge--info badge--strong',\n\t\t\t\t\t})),\n\t\t\t\t]),\n\t\t\t])),\n\t\t});\n\t}\n\n\tdispose() {\n\t\tthis.requestTypes = null;\n\t}\n}\n\nexport default RequestRegisterPuppet;\n","import { Elem, Txt } from 'modapp-base-component';\nimport { ModelTxt } from 'modapp-resource-component';\nimport l10n from 'modapp-l10n';\nimport errString from 'utils/errString';\nimport './requestSetArea.scss';\n\n/**\n * RequestSetArea adds the \"setArea\" request type.\n */\nclass RequestSetArea {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'pageRequests' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\t\tthis.module.pageRequests.addRequestType({\n\t\t\tid: 'setArea',\n\t\t\ttitleFactory: r => l10n.l('requestSetArea.wantsToSetArea', \"wants to update area\"),\n\t\t\tcomponentFactory: r => new Elem(n => n.elem('div', { className: 'requestsetarea' }, [\n\t\t\t\tn.elem('div', { className: 'flex-row' }, [\n\t\t\t\t\tn.component(new Txt(l10n.l('requestSetArea.area', \"Area\"), { className: 'badge--iconcol badge--subtitle' })),\n\t\t\t\t\tn.component(new ModelTxt(r.params.area, m => errString(m, m => m.name, l10n.l('requestSetArea.unknown', \"(Unknown)\")), {\n\t\t\t\t\t\tclassName: 'badge--info badge--strong',\n\t\t\t\t\t})),\n\t\t\t\t]),\n\t\t\t\tn.elem('div', { className: 'flex-row' }, [\n\t\t\t\t\tn.component(new Txt(l10n.l('requestSetArea.from', \"Parent\"), { className: 'badge--iconcol badge--subtitle' })),\n\t\t\t\t\tn.component(new ModelTxt(r.params.parent, m => errString(m, m => m.name, l10n.l('requestSetArea.unknown', \"(Unknown)\")), {\n\t\t\t\t\t\tclassName: 'badge--info badge--strong',\n\t\t\t\t\t})),\n\t\t\t\t]),\n\t\t\t])),\n\t\t});\n\t}\n\n\tdispose() {\n\t\tthis.requestTypes = null;\n\t}\n}\n\nexport default RequestSetArea;\n","import { Elem, Txt } from 'modapp-base-component';\nimport { ModelTxt } from 'modapp-resource-component';\nimport l10n from 'modapp-l10n';\nimport errString from 'utils/errString';\nimport './requestSetAreaOwner.scss';\n\n/**\n * RequestSetAreaOwner adds the \"setAreaOwner\" request type.\n */\nclass RequestSetAreaOwner {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'pageRequests' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\t\tthis.module.pageRequests.addRequestType({\n\t\t\tid: 'setAreaOwner',\n\t\t\ttitleFactory: r => l10n.l('requestSetAreaOwner.wantsToSetAreaOwner', \"wants to give area ownership\"),\n\t\t\tcomponentFactory: r => new Elem(n => n.elem('div', { className: 'requestsetareaowner' }, [\n\t\t\t\tn.elem('div', { className: 'flex-row' }, [\n\t\t\t\t\tn.component(new Txt(l10n.l('requestSetAreaOwner.area', \"Area\"), { className: 'badge--iconcol badge--subtitle' })),\n\t\t\t\t\tn.component(new ModelTxt(r.params.area, m => errString(m, m => m.name, l10n.l('requestSetAreaOwner.unknown', \"(Unknown)\")), {\n\t\t\t\t\t\tclassName: 'badge--info badge--strong',\n\t\t\t\t\t})),\n\t\t\t\t]),\n\t\t\t\tn.elem('div', { className: 'flex-row' }, [\n\t\t\t\t\tn.component(new Txt(l10n.l('requestSetAreaOwner.from', \"From\"), { className: 'badge--iconcol badge--subtitle' })),\n\t\t\t\t\tn.component(new ModelTxt(r.params.owner, m => errString(m, m => (m.name + ' ' + m.surname).trim(), l10n.l('requestSetAreaOwner.unknown', \"(Unknown)\")), {\n\t\t\t\t\t\tclassName: 'badge--info badge--strong',\n\t\t\t\t\t})),\n\t\t\t\t]),\n\t\t\t\tn.elem('div', { className: 'flex-row' }, [\n\t\t\t\t\tn.component(new Txt(l10n.l('requestSetAreaOwner.to', \"To\"), { className: 'badge--iconcol badge--subtitle' })),\n\t\t\t\t\tn.component(new ModelTxt(r.to, m => errString(m, m => (m.name + ' ' + m.surname).trim(), l10n.l('requestSetAreaOwner.unknown', \"(Unknown)\")), {\n\t\t\t\t\t\tclassName: 'badge--info badge--strong',\n\t\t\t\t\t})),\n\t\t\t\t]),\n\t\t\t])),\n\t\t});\n\t}\n\n\tdispose() {\n\t\tthis.requestTypes = null;\n\t}\n}\n\nexport default RequestSetAreaOwner;\n","import { Elem, Txt } from 'modapp-base-component';\nimport { ModelTxt } from 'modapp-resource-component';\nimport l10n from 'modapp-l10n';\nimport errString from 'utils/errString';\nimport './requestSetRoom.scss';\n\n/**\n * RequestSetRoom adds the \"setRoom\" request type.\n */\nclass RequestSetRoom {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'pageRequests' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\t\tthis.module.pageRequests.addRequestType({\n\t\t\tid: 'setRoom',\n\t\t\ttitleFactory: r => l10n.l('requestSetRoom.wantsToSetRoom', \"wants to update room\"),\n\t\t\tcomponentFactory: r => new Elem(n => n.elem('div', { className: 'requestsetroom' }, [\n\t\t\t\tn.elem('div', { className: 'flex-row' }, [\n\t\t\t\t\tn.component(new Txt(l10n.l('requestSetRoom.room', \"Room\"), { className: 'badge--iconcol badge--subtitle' })),\n\t\t\t\t\tn.component(new ModelTxt(r.params.room, m => errString(m, m => m.name, l10n.l('requestSetRoom.unknown', \"(Unknown)\")), {\n\t\t\t\t\t\tclassName: 'badge--info badge--strong',\n\t\t\t\t\t})),\n\t\t\t\t]),\n\t\t\t\tn.elem('div', { className: 'flex-row' }, [\n\t\t\t\t\tn.component(new Txt(l10n.l('requestSetRoom.area', \"Area\"), { className: 'badge--iconcol badge--subtitle' })),\n\t\t\t\t\tn.component(new ModelTxt(r.params.area, m => errString(m, m => m.name, l10n.l('requestSetRoom.unknown', \"(Unknown)\")), {\n\t\t\t\t\t\tclassName: 'badge--info badge--strong',\n\t\t\t\t\t})),\n\t\t\t\t]),\n\t\t\t])),\n\t\t});\n\t}\n\n\tdispose() {\n\t\tthis.requestTypes = null;\n\t}\n}\n\nexport default RequestSetRoom;\n","import { Elem, Txt } from 'modapp-base-component';\nimport { ModelTxt } from 'modapp-resource-component';\nimport l10n from 'modapp-l10n';\nimport errString from 'utils/errString';\nimport './requestSetRoomOwner.scss';\n\n/**\n * RequestSetRoomOwner adds the \"setRoomOwner\" request type.\n */\nclass RequestSetRoomOwner {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([ 'pageRequests' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\t\tthis.module.pageRequests.addRequestType({\n\t\t\tid: 'setRoomOwner',\n\t\t\ttitleFactory: r => l10n.l('requestSetRoomOwner.wantsToSetRoomOwner', \"wants to give room ownership\"),\n\t\t\tcomponentFactory: r => new Elem(n => n.elem('div', { className: 'requestsetroomowner' }, [\n\t\t\t\tn.elem('div', { className: 'flex-row' }, [\n\t\t\t\t\tn.component(new Txt(l10n.l('requestSetRoomOwner.room', \"Room\"), { className: 'badge--iconcol badge--subtitle' })),\n\t\t\t\t\tn.component(new ModelTxt(r.params.room, m => errString(m, m => m.name, l10n.l('requestSetRoomOwner.unknown', \"(Unknown)\")), {\n\t\t\t\t\t\tclassName: 'badge--info badge--strong',\n\t\t\t\t\t})),\n\t\t\t\t]),\n\t\t\t\tn.elem('div', { className: 'flex-row' }, [\n\t\t\t\t\tn.component(new Txt(l10n.l('requestSetRoomOwner.from', \"From\"), { className: 'badge--iconcol badge--subtitle' })),\n\t\t\t\t\tn.component(new ModelTxt(r.params.owner, m => errString(m, m => (m.name + ' ' + m.surname).trim(), l10n.l('requestSetRoomOwner.unknown', \"(Unknown)\")), {\n\t\t\t\t\t\tclassName: 'badge--info badge--strong',\n\t\t\t\t\t})),\n\t\t\t\t]),\n\t\t\t\tn.elem('div', { className: 'flex-row' }, [\n\t\t\t\t\tn.component(new Txt(l10n.l('requestSetRoomOwner.to', \"To\"), { className: 'badge--iconcol badge--subtitle' })),\n\t\t\t\t\tn.component(new ModelTxt(r.to, m => errString(m, m => (m.name + ' ' + m.surname).trim(), l10n.l('requestSetRoomOwner.unknown', \"(Unknown)\")), {\n\t\t\t\t\t\tclassName: 'badge--info badge--strong',\n\t\t\t\t\t})),\n\t\t\t\t]),\n\t\t\t])),\n\t\t});\n\t}\n\n\tdispose() {\n\t\tthis.requestTypes = null;\n\t}\n}\n\nexport default RequestSetRoomOwner;\n","import { Txt, Elem } from 'modapp-base-component';\nimport { ModelComponent } from 'modapp-resource-component';\nimport FAIcon from 'components/FAIcon';\nimport firstLetterUppercase from 'utils/firstLetterUppercase';\nimport idleLevels, { getCharIdleLevel } from 'utils/idleLevels';\n\nclass PageRoomChar {\n\tconstructor(module, ctrl, char) {\n\t\tthis.module = module;\n\t\tthis.ctrl = ctrl;\n\t\tthis.char = char;\n\t}\n\n\trender(el) {\n\t\tthis.elem = new ModelComponent(\n\t\t\tthis.char,\n\t\t\tnew ModelComponent(\n\t\t\t\tnull,\n\t\t\t\tnew ModelComponent(\n\t\t\t\t\tthis.ctrl.lookedAt,\n\t\t\t\t\tnew Elem(n => n.elem('div', { className: 'pageroom-char' }, [\n\t\t\t\t\t\tn.elem('cont', 'div', { className: 'pageroom-char--cont' }, [\n\t\t\t\t\t\t\tn.elem('btn', 'div', { className: 'pageroom-char--badge badge btn margin4', events: {\n\t\t\t\t\t\t\t\tclick: () => this._lookChar(),\n\t\t\t\t\t\t\t}}, [\n\t\t\t\t\t\t\t\tn.elem('div', { className: 'badge--select' }, [\n\t\t\t\t\t\t\t\t\tn.component(this.module.avatar.newAvatar(this.char, { size: 'small', className: 'badge--icon' })),\n\t\t\t\t\t\t\t\t\tn.elem('div', { className: 'badge--info' }, [\n\t\t\t\t\t\t\t\t\t\tn.elem('fullname', 'div', { className: 'pageroom-char--name badge--title badge--nowrap' }, [\n\t\t\t\t\t\t\t\t\t\t\tn.component('name', new Txt()),\n\t\t\t\t\t\t\t\t\t\t\tn.text(' '),\n\t\t\t\t\t\t\t\t\t\t\tn.component('surname', new Txt()),\n\t\t\t\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\t\t\t\tn.elem('div', { className: 'badge--text badge--nowrap' }, [\n\t\t\t\t\t\t\t\t\t\t\tn.component('status', new Txt()),\n\t\t\t\t\t\t\t\t\t\t\tn.component('gender', new Txt()),\n\t\t\t\t\t\t\t\t\t\t\tn.text(' '),\n\t\t\t\t\t\t\t\t\t\t\tn.component('species', new Txt()),\n\t\t\t\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\t\t\t]),\n\n\t\t\t\t\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\t\t\t\t\tthis.module.charsAwake.getNotes(),\n\t\t\t\t\t\t\t\t\t\tnew Elem(n => n.elem('div', { className: 'badge--tools' }, [\n\t\t\t\t\t\t\t\t\t\t\tn.elem('note', 'button', { className: 'pageroom-char--note iconbtn medium tinyicon', events: {\n\t\t\t\t\t\t\t\t\t\t\t\tclick: (c, ev) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthis.module.dialogEditNote.open(this.char.id);\n\t\t\t\t\t\t\t\t\t\t\t\t\tev.stopPropagation();\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t}}, [\n\t\t\t\t\t\t\t\t\t\t\t\tn.component(new FAIcon('file-text')),\n\t\t\t\t\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\t\t\t\t])),\n\t\t\t\t\t\t\t\t\t\t(m, c) => c[m.props[this.char.id] ? 'addNodeClass' : 'removeNodeClass']('note', 'hasnote'),\n\t\t\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\t\tn.elem('lfrp', 'div', { className: 'counter small highlight indent' }),\n\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t]),\n\t\t\t\t\t])),\n\t\t\t\t\t(m, c) => c[m[this.char.id] ? 'addNodeClass' : 'removeNodeClass']('cont', 'looking'),\n\t\t\t\t),\n\t\t\t\t(m, c) => this._setTooltip(this.char, c.getComponent()),\n\t\t\t),\n\t\t\t(m, c, change) => {\n\t\t\t\tlet sc = c.getComponent().getComponent();\n\t\t\t\tsc.getNode('name').setText(m.name);\n\t\t\t\tsc.getNode('surname').setText(m.surname);\n\t\t\t\tsc.getNode('gender').setText(firstLetterUppercase(m.gender));\n\t\t\t\tsc.getNode('species').setText(firstLetterUppercase(m.species));\n\t\t\t\tsc.getNode('status').setText(m.status ? '(' + m.status + ') ' : '');\n\t\t\t\tthis._setTooltip(m, sc);\n\t\t\t\tsc[m.state == 'asleep' ? 'addNodeClass' : 'removeNodeClass']('btn', 'inactive');\n\t\t\t\tsc[m.type == 'puppet' ? 'addNodeClass' : 'removeNodeClass']('btn', 'highlight');\n\t\t\t\tlet lvl = getCharIdleLevel(m);\n\t\t\t\tfor (let l of idleLevels) {\n\t\t\t\t\tsc[lvl == l ? 'addNodeClass' : 'removeNodeClass']('fullname', l.className);\n\t\t\t\t}\n\t\t\t\t// Set lfrp marker\n\t\t\t\tsc[m.rp == 'lfrp' ? 'removeNodeClass' : 'addNodeClass']('lfrp', 'hide');\n\t\t\t},\n\t\t);\n\t\treturn this.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n\n\t_setTooltip(m, c) {\n\t\tlet genderSpecies = (firstLetterUppercase(m.gender) + ' ' + firstLetterUppercase(m.species)).trim();\n\t\tlet p = m.puppeteer;\n\t\tc.setNodeAttribute('btn', 'title', (m.name + ' ' + m.surname).trim() +\n\t\t\t(genderSpecies ? \"\\n\" + genderSpecies : '') +\n\t\t\t(p ? \"\\n(\" + (p.name + ' ' + p.surname).trim() + \")\" : '') +\n\t\t\t(m.status ? \"\\n\" + m.status : ''),\n\t\t);\n\t}\n\n\t_lookChar() {\n\t\tthis.ctrl.call('look', { charId: this.char.id }).then(() => {\n\t\t\tthis.module.charPages.openPanel();\n\t\t}).catch(err => this.module.toaster.openError(err));\n\t}\n}\n\nexport default PageRoomChar;\n","import { RootElem, Elem, Txt } from 'modapp-base-component';\nimport { CollectionComponent, CollectionList, ModelComponent } from 'modapp-resource-component';\nimport { Collection, CollectionWrapper } from 'modapp-resource';\nimport ResizeObserverComponent from 'components/ResizeObserverComponent';\nimport * as tooltip from 'utils/tooltip';\nimport firstLetterUppercase from 'utils/firstLetterUppercase';\nimport idleLevels, { getCharIdleLevel } from 'utils/idleLevels';\n\nclass PageRoomExitChars {\n\tconstructor(module, chars, opt = {}) {\n\t\tthis.module = module;\n\t\tthis.chars = chars;\n\t\tthis.opt = opt;\n\t\tthis.perRow = 0;\n\t\tthis.elem = null;\n\t\tthis.rows = null;\n\t\tthis.component = null;\n\t}\n\n\trender(el) {\n\t\tthis.rows = new Collection({\n\t\t\tidAttribute: null,\n\t\t\teventBus: this.module.self.app.eventBus,\n\t\t});\n\t\tthis.elem = new ResizeObserverComponent(new RootElem('div', { className: 'pageroom-exitchars' }), (rect, oldRect) => {\n\t\t\tif (oldRect) {\n\t\t\t\trequestAnimationFrame(() => this._setComponent());\n\t\t\t} else {\n\t\t\t\tthis._setComponent();\n\t\t\t}\n\t\t});\n\t\treturn this.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis._disposeComponent();\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t\tthis.perRow = 0;\n\t\t}\n\t}\n\n\t_setComponent() {\n\t\tlet el = this.elem?.getComponent().getElement();\n\t\tif (!el) return;\n\n\t\tlet newPerRow = Math.max(Math.floor((el.offsetWidth + 4) / (24 + 4)), 1);\n\t\tif (newPerRow == this.perRow) return;\n\n\t\t// Dispose any previously rendered component\n\t\tthis._disposeComponent();\n\n\t\tthis.perRow = newPerRow;\n\t\tthis.rows = new Collection({\n\t\t\tidAttribute: null,\n\t\t\teventBus: this.module.self.app.eventBus,\n\t\t});\n\t\tthis.component = new CollectionComponent(\n\t\t\tthis.chars,\n\t\t\tnew CollectionList(\n\t\t\t\tthis.rows,\n\t\t\t\trow => new CollectionList(\n\t\t\t\t\trow,\n\t\t\t\t\tchar => new ModelComponent(\n\t\t\t\t\t\tchar,\n\t\t\t\t\t\tnew Elem(n => n.elem('div', {\n\t\t\t\t\t\t\tclassName: 'pageroom-exitchars--char' + (this.opt.clickTooltip ? '' : ' common--tooltip'),\n\t\t\t\t\t\t\tevents: {\n\t\t\t\t\t\t\t\tclick: (c, ev) => {\n\t\t\t\t\t\t\t\t\tif (this.opt.clickTooltip) {\n\t\t\t\t\t\t\t\t\t\tthis._onClick(c.getNode('cont'), char);\n\t\t\t\t\t\t\t\t\t\tev.stopPropagation();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}, [\n\t\t\t\t\t\t\tn.elem('cont', 'div', [\n\t\t\t\t\t\t\t\tn.component(this.module.avatar.newAvatar(char, {\n\t\t\t\t\t\t\t\t\tsize: 'tiny',\n\t\t\t\t\t\t\t\t})),\n\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t])),\n\t\t\t\t\t\t(m, c) => {\n\t\t\t\t\t\t\tif (!this.opt.clickTooltip) {\n\t\t\t\t\t\t\t\tlet genderSpecies = (m.gender + ' ' + m.species).trim();\n\t\t\t\t\t\t\t\tc.setAttribute('title', m.name + ' ' + m.surname + (genderSpecies ? '\\n' + genderSpecies : ''));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t),\n\t\t\t\t\t{\n\t\t\t\t\t\tclassName: 'pageroom-exitchars--row',\n\t\t\t\t\t\thorizontal: true,\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t),\n\t\t\t(chars) => this._updateRows(),\n\t\t);\n\t\tthis.component.render(el);\n\t}\n\n\t_onClick(el, char) {\n\t\tif (!el) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet nameComponent = new Txt();\n\t\tlet surnameComponent = new Txt();\n\t\tlet genderComponent = new Txt();\n\t\tlet speciesComponent = new Txt();\n\n\t\tthis.tooltip = tooltip.click(\n\t\t\tel,\n\t\t\tnew ModelComponent(\n\t\t\t\tchar,\n\t\t\t\tnew Elem(n => n.elem('div', { className: 'pageroom-exitchars--tooltip' }, [\n\t\t\t\t\tn.elem('fullname', 'div', { className: 'pageroom-exitchars--fullname' }, [\n\t\t\t\t\t\tn.component(nameComponent),\n\t\t\t\t\t\tn.text(' '),\n\t\t\t\t\t\tn.component(surnameComponent),\n\t\t\t\t\t]),\n\t\t\t\t\tn.elem('div', { className: '' }, [\n\t\t\t\t\t\tn.component(genderComponent),\n\t\t\t\t\t\tn.text(' '),\n\t\t\t\t\t\tn.component(speciesComponent),\n\t\t\t\t\t]),\n\t\t\t\t])),\n\t\t\t\t(m, c) => {\n\t\t\t\t\tnameComponent.setText(m.name);\n\t\t\t\t\tsurnameComponent.setText(m.surname);\n\t\t\t\t\tgenderComponent.setText(firstLetterUppercase(m.gender));\n\t\t\t\t\tspeciesComponent.setText(firstLetterUppercase(m.species));\n\t\t\t\t\tlet lvl = getCharIdleLevel(m);\n\t\t\t\t\tfor (let l of idleLevels) {\n\t\t\t\t\t\tc[lvl == l ? 'addNodeClass' : 'removeNodeClass']('fullname', l.className);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t),\n\t\t\t{\n\t\t\t\tmargin: 'xs',\n\t\t\t\tpadding: 'm',\n\t\t\t\tposition: 'bottom',\n\t\t\t\tsize: 'auto',\n\t\t\t\tonClose: () => {\n\t\t\t\t\tthis.tooltip = null;\n\t\t\t\t},\n\t\t\t},\n\t\t);\n\t}\n\n\t_updateRows() {\n\t\tif (!this.rows) return;\n\n\t\tlet rowCount = Math.ceil(this.chars.length / this.perRow);\n\t\tlet currentCount = this.rows.length;\n\n\t\tif (rowCount == currentCount) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (rowCount < currentCount) {\n\t\t\t for (let i = currentCount - 1; i >= rowCount; i--) {\n\t\t\t\tlet row = this.rows.removeAtIndex(i);\n\t\t\t\trow.dispose();\n\t\t\t }\n\t\t} else {\n\t\t\tfor (let i = currentCount; i < rowCount; i++) {\n\t\t\t\tlet row = new CollectionWrapper(this.chars, {\n\t\t\t\t\tbegin: i * this.perRow,\n\t\t\t\t\tend: (i + 1) * this.perRow,\n\t\t\t\t\teventBus: this.module.self.app.eventBus,\n\t\t\t\t});\n\t\t\t\tthis.rows.add(row, i);\n\t\t\t}\n\t\t}\n\t}\n\n\t_disposeComponent() {\n\t\tif (this.component) {\n\t\t\tthis.component.unrender();\n\t\t\tthis.component = null;\n\t\t\tfor (let row of this.rows) {\n\t\t\t\trow.dispose();\n\t\t\t}\n\t\t\tthis.rows = null;\n\t\t}\n\t}\n}\n\nexport default PageRoomExitChars;\n","import { Elem } from 'modapp-base-component';\nimport { ModelTxt, ModelComponent } from 'modapp-resource-component';\nimport ExitIcon from 'components/ExitIcon';\nimport ModelCollapser from 'components/ModelCollapser';\nimport isError from 'utils/isError';\nimport PageRoomExitChars from './PageRoomExitChars';\n\nclass PageRoomExit {\n\tconstructor(module, ctrl, exit, onClick, opt) {\n\t\tthis.module = module;\n\t\tthis.ctrl = ctrl;\n\t\tthis.exit = exit;\n\t\tthis.onClick = onClick;\n\t\tthis.opt = opt;\n\t}\n\n\trender(el) {\n\t\tthis.elem = new Elem(n => n.elem('div', { className: 'pageroom-exit' }, [\n\t\t\tn.elem('btn', 'div', { className: 'badge btn', events: {\n\t\t\t\tclick: (c, ev) => this.onClick(this.exit.id, ev),\n\t\t\t}}, [\n\t\t\t\tn.elem('div', { className: 'badge--select' }, [\n\t\t\t\t\tn.elem('div', { className: 'badge--faicon smallicon' }, [\n\t\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\t\tthis.exit,\n\t\t\t\t\t\t\tnew ExitIcon('', { default: 'dot' }),\n\t\t\t\t\t\t\t(m, c) => c.setIcon(m.icon),\n\t\t\t\t\t\t)),\n\t\t\t\t\t]),\n\t\t\t\t\tn.elem('div', { className: 'badge--info' }, [\n\t\t\t\t\t\tn.component(new ModelTxt(this.exit, m => m.name, { tagName: 'div', className: 'badge--title' })),\n\t\t\t\t\t\tn.component(new ModelTxt(this.exit, m => m.keys.join(\", \"), { tagName: 'div', className: 'badge--text' })),\n\t\t\t\t\t]),\n\t\t\t\t]),\n\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\tthis.exit,\n\t\t\t\t\tnew ModelCollapser(null, [{\n\t\t\t\t\t\tcondition: m => m?.awake && !isError(m.awake),\n\t\t\t\t\t\tfactory: m => new PageRoomExitChars(this.module, m.awake, this.opt),\n\t\t\t\t\t}]),\n\t\t\t\t\t(m, c) => c.setModel(m.target),\n\t\t\t\t)),\n\t\t\t]),\n\t\t]));\n\t\treturn this.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n}\n\nexport default PageRoomExit;\n","import { Txt } from 'modapp-base-component';\nimport { CollectionList, CollectionComponent } from 'modapp-resource-component';\nimport l10n from 'modapp-l10n';\nimport Fader from 'components/Fader';\nimport PageRoomExit from './PageRoomExit';\n\nclass PageRoomExits extends CollectionComponent {\n\tconstructor(module, ctrl, exits, opt = {}) {\n\n\t\tlet onClick = opt?.onExitClick || ((exitId, ev) => {\n\t\t\tctrl.call('useExit', { exitId })\n\t\t\t\t.catch(err => module.toaster.openError(err));\n\t\t});\n\n\t\tsuper(\n\t\t\texits,\n\t\t\tnew Fader(null, opt),\n\t\t\t(col, c, e) => {\n\t\t\t\tif (!col || !col.length) {\n\t\t\t\t\tc.setComponent(new Txt(l10n.l('pageRoom.noExits', \"There are no exits.\"), { className: 'common--nolistplaceholder' }));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (!e || (col.length == 1 && e.event == 'add')) {\n\t\t\t\t\tc.setComponent(new CollectionList(\n\t\t\t\t\t\tcol,\n\t\t\t\t\t\tm => new PageRoomExit(module, ctrl, m, onClick, opt),\n\t\t\t\t\t));\n\t\t\t\t}\n\t\t\t},\n\t\t);\n\t}\n}\n\nexport default PageRoomExits;\n","import l10n from 'modapp-l10n';\n\nexport const roomInfo = l10n.l('pageRoom.roomInfo', \"Room Info\");\nexport const notSet = l10n.l('pageRoom.notSet', \"Not set\");\n","import { Elem, Txt, Context } from 'modapp-base-component';\nimport { ModelTxt, ModelComponent, CollectionList, CollectionComponent } from 'modapp-resource-component';\nimport { CollectionWrapper } from 'modapp-resource';\nimport l10n from 'modapp-l10n';\nimport Collapser from 'components/Collapser';\nimport Img from 'components/Img';\nimport Fader from 'components/Fader';\nimport PanelSection from 'components/PanelSection';\nimport NameSection from 'components/NameSection';\nimport FormatTxt from 'components/FormatTxt';\nimport ModelCollapser from 'components/ModelCollapser';\nimport ImgModal from 'classes/ImgModal';\nimport PageRoomChar from './PageRoomChar';\nimport PageRoomExits from './PageRoomExits';\nimport { notSet } from './pageRoomTxt';\n\n/**\n * PageRoomComponent renders a room info page.\n */\nclass PageRoomComponent {\n\tconstructor(module, ctrl, room, state, layout) {\n\t\tthis.module = module;\n\t\tthis.ctrl = ctrl;\n\t\tthis.room = room;\n\t\tthis.state = state;\n\t\tthis.layout = layout;\n\t\tthis.roomState = this.state['room_' + room.id] || {};\n\t\tthis.state['room_' + room.id] = this.roomState;\n\t\tthis.roomState.description = this.roomState.description || {};\n\t}\n\n\trender(el) {\n\t\tlet image = new Elem(n => n.elem('div', { className: 'pageroom--image-cont' }, [\n\t\t\tn.component('img', new Img('', { className: 'pageroom--image', events: {\n\t\t\t\tclick: () => new ImgModal(this.room.image.href).open(),\n\t\t\t}})),\n\t\t]));\n\t\tthis.elem = new ModelComponent(\n\t\t\tthis.room,\n\t\t\tnew Context(\n\t\t\t\t() => new CollectionWrapper(this.module.self.getTools(), {\n\t\t\t\t\tfilter: t => t.filter ? t.filter(this.ctrl, this.room, this._canEdit(), this._canDelete(), this.layout) : true,\n\t\t\t\t}),\n\t\t\t\tallTools => allTools.dispose(),\n\t\t\t\tallTools => new Elem(n => n.elem('div', { className: 'pageroom' }, [\n\t\t\t\t\tn.component(new Context(\n\t\t\t\t\t\t() => new CollectionWrapper(allTools, {\n\t\t\t\t\t\t\tfilter: t => (t.type || 'room') == 'room',\n\t\t\t\t\t\t}),\n\t\t\t\t\t\ttools => tools.dispose(),\n\t\t\t\t\t\ttools => new CollectionComponent(\n\t\t\t\t\t\t\ttools,\n\t\t\t\t\t\t\tnew Collapser(),\n\t\t\t\t\t\t\t(col, c, ev) => {\n\t\t\t\t\t\t\t\t// Collapse if we have no tools to show\n\t\t\t\t\t\t\t\tif (!col.length) {\n\t\t\t\t\t\t\t\t\tc.setComponent(null);\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (!ev || (col.length == 1 && ev.event == 'add')) {\n\t\t\t\t\t\t\t\t\tc.setComponent(new CollectionList(\n\t\t\t\t\t\t\t\t\t\ttools,\n\t\t\t\t\t\t\t\t\t\tt => t.componentFactory(this.ctrl, this.room),\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tclassName: 'pageroom--tools',\n\t\t\t\t\t\t\t\t\t\t\tsubClassName: t => t.className || null,\n\t\t\t\t\t\t\t\t\t\t\thorizontal: true,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t),\n\t\t\t\t\t)),\n\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\tthis.room,\n\t\t\t\t\t\tnew NameSection(new ModelTxt(this.room, c => c.name), null, {\n\t\t\t\t\t\t\topen: this.state.roomImageOpen,\n\t\t\t\t\t\t\tonToggle: (c, v) => this.state.roomImageOpen = v,\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t(m, c, changed) => {\n\t\t\t\t\t\t\tif (m.image) {\n\t\t\t\t\t\t\t\timage.getNode('img').setSrc(m.image.href + \"?thumb=xxl\");\n\t\t\t\t\t\t\t\tc.setComponent(image);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tc.setComponent(null);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t)),\n\t\t\t\t\tn.component(new ModelCollapser(this.room, [{\n\t\t\t\t\t\tcondition: m => !m.isDark,\n\t\t\t\t\t\tfactory: m => new ModelComponent(\n\t\t\t\t\t\t\tthis.room,\n\t\t\t\t\t\t\tnew Elem(n => n.elem('div', { className: 'pageroom--population flex-row pad8' }, [\n\t\t\t\t\t\t\t\tn.component(new Txt(l10n.l('pageArea.population', \"Population\"), {\n\t\t\t\t\t\t\t\t\ttagName: 'div',\n\t\t\t\t\t\t\t\t\tclassName: 'pageroom--population-title flex-1',\n\t\t\t\t\t\t\t\t})),\n\t\t\t\t\t\t\t\tn.component('pop', new Txt(null, { className: 'pageroom--population-count flex-auto', duration: 0 })),\n\t\t\t\t\t\t\t])),\n\t\t\t\t\t\t\t(m, c) => c.getNode('pop').setText(m.pop || \"0\"),\n\t\t\t\t\t\t),\n\t\t\t\t\t}])),\n\t\t\t\t\tn.component(new Context(\n\t\t\t\t\t\t() => new CollectionWrapper(allTools, {\n\t\t\t\t\t\t\tfilter: t => t.type == 'section',\n\t\t\t\t\t\t}),\n\t\t\t\t\t\ttools => tools.dispose(),\n\t\t\t\t\t\ttools => new CollectionList(\n\t\t\t\t\t\t\ttools,\n\t\t\t\t\t\t\tt => t.componentFactory(this.ctrl, this.room),\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tclassName: 'pageroom--sections',\n\t\t\t\t\t\t\t\tsubClassName: t => t.className || null,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t),\n\t\t\t\t\t)),\n\t\t\t\t\tn.component(new PanelSection(\n\t\t\t\t\t\tl10n.l('pageRoom.description', \"Description\"),\n\t\t\t\t\t\tnew ModelComponent(\n\t\t\t\t\t\t\tthis.room,\n\t\t\t\t\t\t\tnew FormatTxt(\"\", { className: 'common--desc-size', state: this.roomState.description }),\n\t\t\t\t\t\t\t(m, c) => {\n\t\t\t\t\t\t\t\tc.setFormatText(m.desc ? m.desc : notSet);\n\t\t\t\t\t\t\t\tc[m.desc ? 'removeClass' : 'addClass']('pagechar--notset');\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t),\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\t\t\t\topen: this.state.descriptionOpen,\n\t\t\t\t\t\t\tonToggle: (c, v) => this.state.descriptionOpen = v,\n\t\t\t\t\t\t},\n\t\t\t\t\t)),\n\t\t\t\t\tn.component(new PanelSection(\n\t\t\t\t\t\tnew Elem(n => n.elem('div', { className: 'pageroom--exitsheader' }, [\n\t\t\t\t\t\t\tn.component(new Txt(l10n.l('pageRoom.exits', \"Exits\"), { tagName: 'h3' })),\n\t\t\t\t\t\t\tn.component(new Context(\n\t\t\t\t\t\t\t\t() => new CollectionWrapper(allTools, {\n\t\t\t\t\t\t\t\t\tfilter: t => t.type == 'exit',\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\ttools => tools.dispose(),\n\t\t\t\t\t\t\t\ttools => new CollectionList(\n\t\t\t\t\t\t\t\t\ttools,\n\t\t\t\t\t\t\t\t\tt => t.componentFactory(this.ctrl, this.room),\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tclassName: 'pageroom--exitstools',\n\t\t\t\t\t\t\t\t\t\tsubClassName: t => t.className || null,\n\t\t\t\t\t\t\t\t\t\thorizontal: true,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t])),\n\t\t\t\t\t\tnew PageRoomExits(this.module, this.ctrl, this.room.exits, {\n\t\t\t\t\t\t\tclickTooltip: true,\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tclassName: 'pageroom--exits common--sectionpadding',\n\t\t\t\t\t\t\topen: this.state.exitsOpen,\n\t\t\t\t\t\t\tonToggle: (c, v) => this.state.exitsOpen = v,\n\t\t\t\t\t\t},\n\t\t\t\t\t)),\n\t\t\t\t\tn.component(new PanelSection(\n\t\t\t\t\t\tnew Elem(n => n.elem('div', { className: 'pageroom--inroomheader' }, [\n\t\t\t\t\t\t\tn.component(new Txt(l10n.l('pageRoom.inRoom', \"In room\"), { tagName: 'h3' })),\n\t\t\t\t\t\t\tn.component(new Context(\n\t\t\t\t\t\t\t\t() => new CollectionWrapper(allTools, {\n\t\t\t\t\t\t\t\t\tfilter: t => t.type == 'inRoom',\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\ttools => tools.dispose(),\n\t\t\t\t\t\t\t\ttools => new CollectionList(\n\t\t\t\t\t\t\t\t\ttools,\n\t\t\t\t\t\t\t\t\tt => t.componentFactory(this.ctrl, this.room),\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tclassName: 'pageroom--inroomtools',\n\t\t\t\t\t\t\t\t\t\tsubClassName: t => t.className || null,\n\t\t\t\t\t\t\t\t\t\thorizontal: true,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t])),\n\t\t\t\t\t\tnew ModelComponent(\n\t\t\t\t\t\t\tthis.room,\n\t\t\t\t\t\t\tnew Fader(),\n\t\t\t\t\t\t\t(m, c, changed) => {\n\t\t\t\t\t\t\t\tif (changed && !changed.hasOwnProperty('chars')) return;\n\t\t\t\t\t\t\t\tc.setComponent(m.chars\n\t\t\t\t\t\t\t\t\t? new CollectionList(m.chars, m => new PageRoomChar(this.module, this.ctrl, m))\n\t\t\t\t\t\t\t\t\t: new Txt(l10n.l('pageRoom.isDark', \"The room is too dark.\"), { className: 'common--nolistplaceholder' }),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t),\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tclassName: 'pageroom--chars common--sectionpadding',\n\t\t\t\t\t\t\topen: this.state.inRoomOpen,\n\t\t\t\t\t\t\tonToggle: (c, v) => this.state.inRoomOpen = v,\n\t\t\t\t\t\t},\n\t\t\t\t\t)),\n\t\t\t\t])),\n\t\t\t),\n\t\t\t(m, c, change) => {\n\t\t\t\t// Reset filtering of tools is ownership of the room changes.\n\t\t\t\tif (change && change.hasOwnProperty('owner')) {\n\t\t\t\t\tc.getContext().refresh();\n\t\t\t\t}\n\t\t\t},\n\t\t);\n\n\t\treturn this.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n\n\t_canEdit() {\n\t\treturn this.module.self.canEdit(this.ctrl, this.room);\n\t}\n\n\t_canDelete() {\n\t\treturn this.module.self.canDelete(this.ctrl, this.room);\n\t}\n}\n\nexport default PageRoomComponent;\n","import { Collection, sortOrderCompare } from 'modapp-resource';\nimport PageRoomComponent from './PageRoomComponent';\nimport PageRoomChar from './PageRoomChar';\nimport PageRoomExits from './PageRoomExits';\n\nimport { roomInfo } from './pageRoomTxt';\nimport './pageRoom.scss';\n\n/**\n * PageRoom sets the default page in the room panel.\n */\nclass PageRoom {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\t\tthis.app.require([\n\t\t\t'roomPages',\n\t\t\t'player',\n\t\t\t'avatar',\n\t\t\t'charsAwake',\n\t\t\t'dialogEditNote',\n\t\t\t'charPages',\n\t\t\t'toaster',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\n\t\tthis.tools = new Collection({\n\t\t\tidAttribute: m => m.id,\n\t\t\tcompare: sortOrderCompare,\n\t\t\teventBus: this.app.eventBus,\n\t\t});\n\t\tthis.module.roomPages.setDefaultRoomPageFactory({\n\t\t\tcomponentFactory: (ctrl, room, state, layout) => ({\n\t\t\t\tcomponent: new PageRoomComponent(this.module, ctrl, room, state, layout),\n\t\t\t\ttitle: roomInfo,\n\t\t\t}),\n\t\t});\n\t}\n\n\t/**\n\t * Gets a collection of tools.\n\t * @returns {Collection} Collection of tools.\n\t */\n\tgetTools() {\n\t\treturn this.tools;\n\t}\n\n\t/**\n\t * Registers a room page tool.\n\t * @param {object} tool Tool object\n\t * @param {string} tool.id Tool ID.\n\t * @param {number} tool.sortOrder Sort order.\n\t * @param {function} tool.componentFactory Tool component factory: function(ctrl, room) -> Component\n\t * @param {number} [tool.filter] Filter function: function(ctrl, room, canEdit, canDelete, layoutId) -> bool\n\t * @param {string} [tool.type] Target type. May be 'room', 'exit', or 'inRoom'. Defaults to 'room';\n\t * @param {number} [tool.className] Class to give to the list item container.\n\t * @returns {this}\n\t */\n\taddTool(tool) {\n\t\tif (this.tools.get(tool.id)) {\n\t\t\tthrow new Error(\"Tool ID already registered: \", tool.id);\n\t\t}\n\t\tthis.tools.add(tool);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Unregisters a previously registered tool.\n\t * @param {string} toolId Tool ID.\n\t * @returns {this}\n\t */\n\tremoveTool(toolId) {\n\t\tthis.tools.remove(toolId);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Checks if a controlled character can edit a room.\n\t * @param {Model} ctrl Controlled character model.\n\t * @param {Model} room Room model.\n\t * @returns {boolean} True if allowed to edit room, otherwise false.\n\t */\n\tcanEdit(ctrl, room) {\n\t\treturn !ctrl.puppeteer && (this.module.player.isBuilder() || (room.owner && room.owner.id == ctrl.id));\n\t}\n\n\t/**\n\t * Checks if a controlled character can delete a room.\n\t * @param {Model} ctrl Controlled character model.\n\t * @param {Model} room Room model.\n\t * @returns {boolean} True if allowed to delete room, otherwise false.\n\t */\n\tcanDelete(ctrl, room) {\n\t\treturn !ctrl.puppeteer && (this.module.player.isAdmin() || (room.owner && room.owner.id == ctrl.id));\n\t}\n\n\t/**\n\t * Creates a new PageRoomChar badge component for in room characters.\n\t * @param {Model} ctrl Controlled character.\n\t * @param {Model} char Character.\n\t * @returns {Component} PageRoomChar component.\n\t */\n\tnewRoomChar(ctrl, char) {\n\t\treturn new PageRoomChar(this.module, ctrl, char);\n\t}\n\n\t/**\n\t * Creates a new PageRoomExits collection component.\n\t * @param {Model} ctrl Controlled character.\n\t * @param {Collection} exits Exits collection\n\t * @param {object} [opt] Optional params\n\t * @param {(exitId: string, ev: object) => void} [opt.onExitClick] Callback called on exit click. Defaults to using the exit.\n\t * @param {boolean} [opt.clickTooltip] Flag to enable custom tooltip to be opened when clicking on a character.\n\t * @returns {Component} PageRoomExits component.\n\t */\n\tnewRoomExits(ctrl, exits, opt) {\n\t\treturn new PageRoomExits(this.module, ctrl, exits, opt);\n\t}\n\n\tdispose() {\n\t\tthis.module.roomPages.setDefaultRoomPageFactory(null);\n\t}\n}\n\nexport default PageRoom;\n","import { Elem, Txt } from 'modapp-base-component';\nimport { ModelTxt, ModelComponent } from 'modapp-resource-component';\nimport l10n from 'modapp-l10n';\nimport FAIcon from 'components/FAIcon';\nimport Collapser from 'components/Collapser';\n\nclass PageRoomProfileProfileContent {\n\tconstructor(module, ctrl, room, profile, toggle, close) {\n\t\tthis.module = module;\n\t\tthis.ctrl = ctrl;\n\t\tthis.room = room;\n\t\tthis.profile = profile;\n\t\tthis.toggle = toggle;\n\t\tthis.close = close;\n\t}\n\n\trender(el) {\n\t\tlet editProfile = new Elem(n => n.elem('div', { className: 'badge--select badge--select-margin' }, [\n\t\t\tn.elem('button', { className: 'iconbtn medium solid smallicon', events: {\n\t\t\t\tclick: (c, ev) => {\n\t\t\t\t\tthis._updateProfile();\n\t\t\t\t\tev.stopPropagation();\n\t\t\t\t},\n\t\t\t}}, [\n\t\t\t\tn.component(new FAIcon('refresh')),\n\t\t\t]),\n\t\t\tn.elem('button', { className: 'iconbtn medium solid smallicon', events: {\n\t\t\t\tclick: (c, ev) => {\n\t\t\t\t\tthis.module.pageEditRoomProfile.open(this.ctrl, this.room, this.profile.id);\n\t\t\t\t\tev.stopPropagation();\n\t\t\t\t},\n\t\t\t}}, [\n\t\t\t\tn.component(new FAIcon('pencil')),\n\t\t\t]),\n\t\t]));\n\t\tthis.elem = new Elem(n => n.elem('div', [\n\t\t\tn.elem('div', { className: 'badge--select badge--margin badge--select-margin' }, [\n\t\t\t\tn.elem('button', { className: 'btn medium primary flex-1', events: {\n\t\t\t\t\tclick: (el, e) => {\n\t\t\t\t\t\tthis._useProfile();\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t},\n\t\t\t\t}}, [\n\t\t\t\t\tn.component(new FAIcon('user')),\n\t\t\t\t\tn.component(new Txt(l10n.l('pageRoomProfile.apply', \"Apply\"))),\n\t\t\t\t]),\n\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\tthis.ctrl,\n\t\t\t\t\tnew Collapser(null, { horizontal: true }),\n\t\t\t\t\t(m, c) => c.setComponent(m.puppeteer ? null : editProfile),\n\t\t\t\t)),\n\t\t\t]),\n\t\t]));\n\t\treturn this.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n\n\t_updateProfile() {\n\t\tthis.module.confirm.open(() => this.module.updateRoomProfile.updateRoomProfile(this.ctrl, { profileId: this.profile.id })\n\t\t\t.catch(err => this.module.toaster.openError(err)),\n\t\t{\n\t\t\ttitle: l10n.l('pageRoomProfile.confirmRoomProfileUpdate', \"Confirm room profile update\"),\n\t\t\tbody: new Elem(n => n.elem('div', [\n\t\t\t\tn.component(new Txt(l10n.l('pageRoomProfile.roomProfileUpdateBody', \"Do you really wish to overwrite the profile with the room's current appearance?\"), { tagName: 'p' })),\n\t\t\t\tn.elem('p', [ n.component(new ModelTxt(this.profile, m => m.name, { className: 'dialog--strong' })) ]),\n\t\t\t])),\n\t\t\tconfirm: l10n.l('pageRoomProfile.update', \"Update\"),\n\t\t});\n\t}\n\n\t_useProfile() {\n\t\tthis.module.roomProfile.roomProfile(this.ctrl, this.profile.id, true)\n\t\t\t.then(result => {\n\t\t\t\tif (result) {\n\t\t\t\t\tthis.close();\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch(err => this.module.toaster.openError(err));\n\t}\n\n}\n\nexport default PageRoomProfileProfileContent;\n","import { Elem } from 'modapp-base-component';\nimport { ModelComponent, ModelTxt } from 'modapp-resource-component';\nimport l10n from 'modapp-l10n';\nimport Collapser from 'components/Collapser';\nimport formatDateTime from 'utils/formatDateTime';\nimport PageRoomProfileProfileContent from './PageRoomProfileProfileContent';\n\nclass PageRoomProfileProfile {\n\tconstructor(module, ctrl, room, profile, model, close) {\n\t\tthis.ctrl = ctrl;\n\t\tthis.room = room;\n\t\tthis.profile = profile;\n\t\tthis.module = module;\n\t\tthis.model = model;\n\t\tthis.close = close;\n\t}\n\n\trender(el) {\n\t\tthis.elem = new ModelComponent(\n\t\t\tthis.model,\n\t\t\tnew Elem(n =>\n\t\t\t\tn.elem('div', { className: 'pageroomprofile-profile' }, [\n\t\t\t\t\tn.elem('btn', 'div', { className: 'badge btn large', events: {\n\t\t\t\t\t\tclick: () => this._toggleActions(),\n\t\t\t\t\t}}, [\n\t\t\t\t\t\tn.elem('div', { className: 'badge--select' }, [\n\t\t\t\t\t\t\tn.component(this.module.avatar.newRoomImg(this.profile, { className: 'badge--icon' })),\n\t\t\t\t\t\t\tn.elem('div', { className: 'badge--info large' }, [\n\t\t\t\t\t\t\t\tn.elem('div', { className: 'pageroomprofile-profile--title badge--title badge--nowrap' }, [\n\t\t\t\t\t\t\t\t\tn.component(new ModelTxt(this.profile, p => p.name)),\n\t\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\t\tn.elem('div', { className: 'badge--strong badge--nowrap' }, [\n\t\t\t\t\t\t\t\t\tn.component(new ModelTxt(this.profile, p => p.lastUsed\n\t\t\t\t\t\t\t\t\t\t? l10n.l('pageRoomProfile.lastUsed', \"Last used {time}\", { time: formatDateTime(new Date(p.lastUsed)) })\n\t\t\t\t\t\t\t\t\t\t: l10n.l('pageRoomProfile.neverUsed', \"Never used\"),\n\t\t\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\t\tn.elem('div', { className: 'badge--text badge--nowrap' }, [\n\t\t\t\t\t\t\t\t\tn.component(new ModelTxt(this.profile, p => p.key)),\n\t\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t]),\n\t\t\t\t\t\tn.component('actions', new Collapser(null)),\n\t\t\t\t\t]),\n\t\t\t\t]),\n\t\t\t),\n\t\t\t(m, c, change) => {\n\t\t\t\tif (change && !change.hasOwnProperty('profileId')) return;\n\n\t\t\t\tc.getNode('actions').setComponent(m.profileId === this.profile.id\n\t\t\t\t\t? new PageRoomProfileProfileContent(this.module, this.ctrl, this.room, this.profile, (show) => this._toggleActions(show), this.close)\n\t\t\t\t\t: null,\n\t\t\t\t);\n\t\t\t},\n\t\t);\n\t\treturn this.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n\n\t_toggleActions(show) {\n\t\tshow = typeof show == 'undefined'\n\t\t\t? !this.model.profileId || this.model.profileId != this.profile.id\n\t\t\t: !!show;\n\n\t\tthis.model.set({ profileId: show ? this.profile.id : null });\n\t}\n\n}\n\nexport default PageRoomProfileProfile;\n","import { Elem, Txt } from 'modapp-base-component';\nimport { CollectionList, CollectionComponent, ModelComponent, ModelTxt } from 'modapp-resource-component';\nimport { Model } from 'modapp-resource';\nimport l10n from 'modapp-l10n';\nimport Collapser from 'components/Collapser';\nimport FAIcon from 'components/FAIcon';\nimport PageRoomProfileProfile from './PageRoomProfileProfile';\n\nclass PageRoomProfileComponent {\n\tconstructor(module, profiles, ctrl, room, state, close) {\n\t\tthis.module = module;\n\t\tthis.profiles = profiles;\n\t\tthis.ctrl = ctrl;\n\t\tthis.room = room;\n\t\tstate.profileId = state.profileId || null;\n\t\tthis.state = state;\n\t\tthis.close = close;\n\t\tthis.model = null;\n\n\t\t// Bind callbacks\n\t\tthis._onCreate = this._onCreate.bind(this);\n\t}\n\n\trender(el) {\n\t\tthis.model = new Model({ data: this.state, eventBus: this.module.self.app.eventBus });\n\t\tlet createProfile = new Elem(n => n.elem('div', { className: 'common--addpadding' }, [\n\t\t\tn.elem('button', { events: { click: this._onCreate }, className: 'btn icon-left common--addbtn' }, [\n\t\t\t\tn.component(new FAIcon('plus')),\n\t\t\t\tn.component(new Txt(l10n.l('pageRoomProfile.createProfile', \"Create new profile\"))),\n\t\t\t]),\n\t\t]));\n\t\tthis.elem = new Elem(n => n.elem('div', { className: 'pageroomprofile' }, [\n\t\t\tn.component(new ModelTxt(this.room, m => m.name, { tagName: 'div', className: 'common--itemtitle common--sectionpadding' })),\n\t\t\tn.component(new CollectionList(\n\t\t\t\tthis.profiles,\n\t\t\t\tprofile => new PageRoomProfileProfile(this.module, this.ctrl, this.room, profile, this.model, this.close),\n\t\t\t\t{ className: 'pageroomprofile--profiles' },\n\t\t\t)),\n\t\t\tn.component(new CollectionComponent(\n\t\t\t\tthis.ctrl.profiles,\n\t\t\t\tnew Collapser(),\n\t\t\t\t(col, c, ev) => c.setComponent(col.length\n\t\t\t\t\t? null\n\t\t\t\t\t: new Txt(l10n.l('pageRoomProfile.noProfiles', \"There are no stored profiles\"), { className: 'common--nolistplaceholder' }),\n\t\t\t\t),\n\t\t\t)),\n\t\t\tn.component(new ModelComponent(\n\t\t\t\tthis.ctrl,\n\t\t\t\tnew Collapser(),\n\t\t\t\t(m, c) => c.setComponent(m.puppeteer ? null : createProfile),\n\t\t\t)),\n\t\t]));\n\t\tthis.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tObject.assign(this.state, this.model.props);\n\t\t\tthis.model = null;\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n\n\t_onCreate() {\n\t\tthis.module.createLimits.validateRoomProfiles(this.profiles, () => this.module.dialogCreateRoomProfile.open(this.ctrl));\n\t}\n}\n\nexport default PageRoomProfileComponent;\n","import { Elem } from 'modapp-base-component';\nimport FAIcon from 'components/FAIcon';\nimport l10n from 'modapp-l10n';\nimport getRoomInstanceId from 'utils/getRoomInstanceId';\nimport PageRoomProfileComponent from './PageRoomProfileComponent';\nimport './pageRoomProfile.scss';\n\n/**\n * PageRoomProfile opens an page in the room panel listing the room's profiles.\n */\nclass PageRoomProfile {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\t\tthis.app.require([\n\t\t\t'api',\n\t\t\t'roomPages',\n\t\t\t'pageRoom',\n\t\t\t'dialogCreateRoomProfile',\n\t\t\t'avatar',\n\t\t\t'confirm',\n\t\t\t'toaster',\n\t\t\t'roomProfile',\n\t\t\t'updateRoomProfile',\n\t\t\t'pageEditRoomProfile',\n\t\t\t'createLimits',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\n\t\tthis.module.pageRoom.addTool({\n\t\t\tid: 'roomProfile',\n\t\t\tsortOrder: 20,\n\t\t\tcomponentFactory: (ctrl, room) => new Elem(n => n.elem('button', { className: 'iconbtn small', events: {\n\t\t\t\tclick: () => this.open(ctrl, room),\n\t\t\t}}, [\n\t\t\t\tn.component(new FAIcon('id-card-o')),\n\t\t\t])),\n\t\t\tfilter: (ctrl, room, canEdit, canDelete) => canEdit,\n\t\t});\n\t}\n\n\t/**\n\t * Opens an in-panel room profiles page in the room panel.\n\t * @param {*} ctrl Controlled char model.\n\t * @param {*} room Room model.\n\t * @returns {Promise.<function>} Promise of a close function.\n\t */\n\topen(ctrl, room) {\n\t\treturn this.module.api.get('core.room.' + room.id + '.profiles').then(profiles => {\n\t\t\treturn this.module.roomPages.openRoomPage(\n\t\t\t\t'roomProfile',\n\t\t\t\tctrl.id,\n\t\t\t\tgetRoomInstanceId(room),\n\t\t\t\t(ctrl, room, state, close) => ({\n\t\t\t\t\tcomponent: new PageRoomProfileComponent(this.module, profiles, ctrl, room, state, close),\n\t\t\t\t\ttitle: l10n.l('pageRoomProfile.roomProfile', \"Room profiles\"),\n\t\t\t\t\tonClose: () => {\n\t\t\t\t\t\tprofile.off();\n\t\t\t\t\t\tclose();\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t);\n\t\t});\n\t}\n\n\tdispose() {\n\t\tthis.module.pageRoom.removeTool('roomProfile');\n\t}\n}\n\nexport default PageRoomProfile;\n","import { Elem } from 'modapp-base-component';\nimport { ModelComponent, ModelTxt } from 'modapp-resource-component';\nimport ToggleBox from 'components/ToggleBox';\nimport PopupTip from 'components/PopupTip';\nimport Collapser from 'components/Collapser';\n\n\nclass PageSelectTagsTag {\n\tconstructor(model, tag, prefs) {\n\t\tthis.model = model;\n\t\tthis.tag = tag;\n\t\tthis.prefs = prefs;\n\t}\n\n\trender(el) {\n\t\tlet isRoleTag = !!(this.tag.role || this.tag.idRole);\n\t\tlet popupTip = new PopupTip('', { position: 'left', className: 'popuptip--width-m' });\n\t\tthis.elem = new ModelComponent(\n\t\t\tthis.model,\n\t\t\tnew Elem(n => n.elem('div', { className: 'flex-row pad12 pad-bottom-m' }, [\n\t\t\t\tn.elem('label', {\n\t\t\t\t\tclassName: 'pageselecttags-tag--label flex-1 flex-row pad12' + (isRoleTag ? ' roletag' : ''),\n\t\t\t\t}, [\n\t\t\t\t\tn.elem('div', { className: 'flex-auto' }, [\n\t\t\t\t\t\tn.component('toggle', new ToggleBox(this._getValue(), {\n\t\t\t\t\t\t\tclassName: 'small',\n\t\t\t\t\t\t\tevents: {\n\t\t\t\t\t\t\t\tclick: (c, e) => {\n\t\t\t\t\t\t\t\t\tc.toggleNext();\n\t\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tvalues: isRoleTag ? [ null, 'like' ] : [ null, 'like', 'dislike' ],\n\t\t\t\t\t\t\tdisableClick: true,\n\t\t\t\t\t\t\tonChange: v => {\n\t\t\t\t\t\t\t\tlet o = {};\n\t\t\t\t\t\t\t\tfor (let pref of this.prefs) {\n\t\t\t\t\t\t\t\t\to[this.tag.id + '_' + pref.id] = pref.id == v\n\t\t\t\t\t\t\t\t\t\t? this.tag\n\t\t\t\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tthis.model.set(o);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t})),\n\t\t\t\t\t]),\n\t\t\t\t\tn.component(new ModelTxt(this.tag, m => m.key, { className: 'flex-1 pageselecttags-tag--key' })),\n\t\t\t\t]),\n\t\t\t\tn.elem('div', { className: 'flex-auto' }, [\n\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\tthis.tag,\n\t\t\t\t\t\tnew Collapser(null, { horizontal: true }),\n\t\t\t\t\t\t(m, c) => {\n\t\t\t\t\t\t\tpopupTip.setTip(m.desc);\n\t\t\t\t\t\t\tc.setComponent(m.desc ? popupTip : null);\n\t\t\t\t\t\t},\n\t\t\t\t\t)),\n\t\t\t\t]),\n\t\t\t])),\n\t\t\t(m, c, change) => {\n\t\t\t\tif (change) {\n\t\t\t\t\tc.getNode('toggle').setValue(this._getValue(), false);\n\t\t\t\t}\n\t\t\t},\n\t\t);\n\t\treturn this.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n\n\t_getValue() {\n\t\tlet p = this.model.props;\n\t\tfor (let pref of this.prefs) {\n\t\t\tif (p[this.tag.id + '_' + pref.id]) {\n\t\t\t\treturn pref.id;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n}\n\nexport default PageSelectTagsTag;\n","import { Context } from 'modapp-base-component';\nimport { CollectionComponent, ModelTxt, CollectionList } from 'modapp-resource-component';\nimport { CollectionWrapper } from 'modapp-resource';\nimport Collapser from 'components/Collapser';\nimport PanelSection from 'components/PanelSection';\nimport PageSelectTagsTag from './PageSelectTagsTag';\n\n\nclass PageSelectTagsSection {\n\tconstructor(module, collection, group, model, custom, opt) {\n\t\topt = opt || {};\n\t\tthis.module = module;\n\t\tthis.collection = collection;\n\t\tthis.group = group;\n\t\tthis.model = model;\n\t\tthis.custom = custom;\n\t\tthis.tags = this.module.tags.getTags();\n\t\tthis.groups = this.module.tags.getGroups();\n\t\tthis.className = opt.className ? ' ' + opt.className : '';\n\t\tthis.isRoleTags = !!opt.isRoleTags;\n\n\t\tthis._onCustomChange = this._onCustomChange.bind(this);\n\t}\n\n\trender(el) {\n\t\tthis._listenCustom(true);\n\t\tthis.elem = new Context(\n\t\t\t() => new CollectionWrapper(this.collection, {\n\t\t\t\tfilter: t => this._inGroup(t)\n\t\t\t\t\t&& !this._hasCustom(t)\n\t\t\t\t\t&& this.isRoleTags !== !(t.role || t.idRole),\n\t\t\t}),\n\t\t\ttags => tags.dispose(),\n\t\t\ttags => new CollectionComponent(\n\t\t\t\ttags,\n\t\t\t\tnew Collapser(),\n\t\t\t\t(col, c, ev) => {\n\t\t\t\t\t// Collapse if we have no tools to show\n\t\t\t\t\tif (!col.length) {\n\t\t\t\t\t\tc.setComponent(null);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!ev || (col.length == 1 && ev.event == 'add')) {\n\t\t\t\t\t\tc.setComponent(new PanelSection(\n\t\t\t\t\t\t\tnew ModelTxt(this.group, m => m.name, { className: 'pageselecttags-section--title', tagName: 'h3' }),\n\t\t\t\t\t\t\tnew CollectionList(col, tag => new PageSelectTagsTag(this.model, tag, this.module.tags.getPreferences())),\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tclassName: 'pageselecttags-section pad-bottom-s' + this.className,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t));\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t),\n\t\t);\n\t\treturn this.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis._listenCustom(false);\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n\n\t_listenCustom(on) {\n\t\tif (this.custom) {\n\t\t\tthis.custom[on ? 'on' : 'off']('change', this._onCustomChange);\n\t\t}\n\t}\n\n\t_onCustomChange(c) {\n\t\tif (this.elem) {\n\t\t\tlet col = this.elem.getContext();\n\t\t\tif (col) {\n\t\t\t\tcol.refresh();\n\t\t\t}\n\t\t}\n\t}\n\n\t_inGroup(tag) {\n\t\tlet group = tag.group;\n\t\tlet key = this.group.key;\n\t\treturn key\n\t\t\t? group == key\n\t\t\t: !group || !this.groups.props[group];\n\t}\n\n\t_hasCustom(tag) {\n\t\treturn this.custom && this.custom.props[tag.key];\n\t}\n}\n\nexport default PageSelectTagsSection;\n","import { Context, Elem } from 'modapp-base-component';\nimport { ModelTxt, CollectionList } from 'modapp-resource-component';\nimport { ModifyModel, ModelWrapper, ModelToCollection } from 'modapp-resource';\nimport l10n from 'modapp-l10n';\nimport PageSelectTagsSection from './PageSelectTagsSection';\n\nfunction getTagId(k) {\n\treturn k.slice(0, k.lastIndexOf('_'));\n}\n\nfunction getTagPref(k) {\n\treturn k.slice(k.lastIndexOf('_') + 1);\n}\n\nclass PageSelectTagsComponent {\n\tconstructor(module, ctrl, state, close) {\n\t\tstate.changes = state.changes || {};\n\n\t\tthis.module = module;\n\t\tthis.ctrl = ctrl;\n\t\tthis.state = state;\n\t\tthis.close = close;\n\t}\n\n\trender(el) {\n\t\tthis.model = new ModifyModel(this.ctrl.tags, {\n\t\t\tprops: this.state.changes,\n\t\t\tmodifiedOnNew: true,\n\t\t\teventBus: this.module.self.app.eventBus,\n\t\t});\n\n\t\tthis.elem = new Context(\n\t\t\t() => new ModelWrapper(this.ctrl.tags, {\n\t\t\t\tfilter: (k, v) => v.custom,\n\t\t\t\tkeyMap: (k, v) => v.key,\n\t\t\t\teventBus: this.module.self.eventBus,\n\t\t\t}),\n\t\t\tcustom => custom.dispose(),\n\t\t\tcustom => new Elem(n => n.elem('div', { className: 'pageselecttags' }, [\n\t\t\t\tn.component(new CollectionList(\n\t\t\t\t\tthis.module.tags.getGroupsCollection(),\n\t\t\t\t\tgroup => new PageSelectTagsSection(\n\t\t\t\t\t\tthis.module,\n\t\t\t\t\t\tthis.module.tags.getTagsCollection(),\n\t\t\t\t\t\tgroup,\n\t\t\t\t\t\tthis.model,\n\t\t\t\t\t\tcustom,\n\t\t\t\t\t),\n\t\t\t\t\t{\n\t\t\t\t\t\tclassName: 'pageeditchar--sections',\n\t\t\t\t\t\tsubClassName: t => t.className || null,\n\t\t\t\t\t},\n\t\t\t\t)),\n\t\t\t\tn.component(new PageSelectTagsSection(\n\t\t\t\t\tthis.module,\n\t\t\t\t\tthis.module.tags.getTagsCollection(),\n\t\t\t\t\t{ name: l10n.l('pageSelectTags.other', \"Other\") },\n\t\t\t\t\tthis.model,\n\t\t\t\t\tcustom,\n\t\t\t\t)),\n\t\t\t\tn.component(new PageSelectTagsSection(\n\t\t\t\t\tthis.module,\n\t\t\t\t\tthis.module.tags.getTagsCollection(),\n\t\t\t\t\t{ name: l10n.l('pageSelectTags.titles', \"Titles\") },\n\t\t\t\t\tthis.model,\n\t\t\t\t\tcustom,\n\t\t\t\t\t{ isRoleTags: true },\n\t\t\t\t)),\n\t\t\t\tn.component(new Context(\n\t\t\t\t\t() => new ModelToCollection(custom, {\n\t\t\t\t\t\tcompare: (a, b) => a.value.key.localeCompare(b.value.key) || a.key.localeCompare(b.key),\n\t\t\t\t\t\teventBus: this.module.self.eventBus,\n\t\t\t\t\t}),\n\t\t\t\t\tcol => col.dispose(),\n\t\t\t\t\tcol => new PageSelectTagsSection(\n\t\t\t\t\t\tthis.module,\n\t\t\t\t\t\tcol,\n\t\t\t\t\t\t{ name: l10n.l('pageSelectTags.custom', \"Custom\") },\n\t\t\t\t\t\tthis.model,\n\t\t\t\t\t\tnull,\n\t\t\t\t\t\t{ className: 'pageselecttags--custom' },\n\t\t\t\t\t),\n\t\t\t\t)),\n\t\t\t\tn.elem('div', { className: 'pad-top-xl' }, [\n\t\t\t\t\tn.elem('update', 'button', { events: {\n\t\t\t\t\t\tclick: () => this._save(),\n\t\t\t\t\t}, className: 'btn primary common--btnwidth' }, [\n\t\t\t\t\t\tn.component(new ModelTxt(this.model, m => m.isModified\n\t\t\t\t\t\t\t? l10n.l('pageSelectTags.update', \"Update\")\n\t\t\t\t\t\t\t: l10n.l('pageSelectTags.close', \"Close\"))),\n\t\t\t\t\t]),\n\t\t\t\t]),\n\t\t\t])),\n\t\t);\n\t\treturn this.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t\tif (this.model) {\n\t\t\tthis.state.changes = this.model.getModifications() || {};\n\t\t\tthis.model.dispose();\n\t\t\tthis.model = null;\n\t\t}\n\t}\n\n\t_save() {\n\t\tlet mods = this.model.getModifications();\n\t\tif (!mods) {\n\t\t\tthis._close();\n\t\t\treturn;\n\t\t}\n\n\t\tlet o = {};\n\t\t// Delete tags no longer used\n\t\tfor (let k in mods) {\n\t\t\tif (!mods[k]) {\n\t\t\t\to[getTagId(k)] = null;\n\t\t\t}\n\t\t}\n\t\t// Add new tags, or overwrite \"deleted\" tags in case of pref switch.\n\t\tfor (let k in mods) {\n\t\t\tlet m = mods[k];\n\t\t\tif (m) {\n\t\t\t\to[getTagId(k)] = getTagPref(k);\n\t\t\t}\n\t\t}\n\n\t\treturn this.module.api.call('tag.char.' + this.ctrl.id + '.tags', 'setTags', {\n\t\t\ttags: o,\n\t\t}).then(() => {\n\t\t\tthis._close();\n\t\t}).catch(err => this.module.toaster.openError(err));\n\t}\n\n\t_close() {\n\t\tthis.close();\n\t\tif (this.model) {\n\t\t\tthis.model.dispose();\n\t\t\tthis.model = null;\n\t\t}\n\t\tthis.state.changes = {};\n\t}\n}\n\nexport default PageSelectTagsComponent;\n","import { Elem } from 'modapp-base-component';\nimport FAIcon from 'components/FAIcon';\nimport l10n from 'modapp-l10n';\nimport PageSelectTagsComponent from './PageSelectTagsComponent';\nimport './pageSelectTags.scss';\n\n/**\n * PageSelectTags opens an in-panel tag selection page in the character panel.\n */\nclass PageSelectTags {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\t\tthis.app.require([\n\t\t\t'editCharTags',\n\t\t\t'charPages',\n\t\t\t'tags',\n\t\t\t'toaster',\n\t\t\t'api',\n\t\t\t'player',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\n\t\tthis.module.editCharTags.addTool({\n\t\t\tid: 'pageSelectTags',\n\t\t\tsortOrder: 10,\n\t\t\tcomponentFactory: (ctrl, room) => new Elem(n => n.elem('button', { className: 'iconbtn tiny', events: {\n\t\t\t\tclick: (c, e) => {\n\t\t\t\t\tthis.open(ctrl, room);\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t},\n\t\t\t}}, [\n\t\t\t\tn.component(new FAIcon('list-ul')),\n\t\t\t])),\n\t\t});\n\t}\n\n\t/**\n\t * Opens an in-panel select tags page in the char panel.\n\t * @param {*} ctrl Controlled char model.\n\t * @returns {function} Close function.\n\t */\n\topen(ctrl) {\n\t\treturn this.module.charPages.openPage(\n\t\t\tctrl.id,\n\t\t\tctrl.id,\n\t\t\t(ctrl, char, state, close) => ({\n\t\t\t\tcomponent: new PageSelectTagsComponent(this.module, ctrl, state, close),\n\t\t\t\ttitle: l10n.l('pageSelectTags.characterTags', \"Character Tags\"),\n\t\t\t\tonClose: close,\n\t\t\t}),\n\t\t);\n\t}\n\n\tdispose() {\n\t\tthis.module.editCharTags.removeTool('pageSelectTags');\n\t}\n}\n\nexport default PageSelectTags;\n","import { Elem } from 'modapp-base-component';\nimport { ModelTxt } from 'modapp-resource-component';\nimport FAIcon from 'components/FAIcon';\nimport copyToClipboard from 'utils/copyToClipboard';\n\nclass PageTeleportCharRoom {\n\tconstructor(module, ctrl, room, closePage) {\n\t\tthis.module = module;\n\t\tthis.ctrl = ctrl;\n\t\tthis.room = room;\n\t\tthis.closePage = closePage;\n\t}\n\n\trender(el) {\n\t\tthis.elem = new Elem(n => n.elem('div', { className: 'pageteleportchar-room' }, [\n\t\t\tn.elem('btn', 'div', { className: 'badge btn', events: {\n\t\t\t\tclick: () => this._teleport(),\n\t\t\t}}, [\n\t\t\t\tn.elem('div', { className: 'badge--select' }, [\n\t\t\t\t\tn.elem('div', { className: 'badge--info' }, [\n\t\t\t\t\t\tn.component(new ModelTxt(this.room, m => m.name, { tagName: 'div', className: 'badge--title' })),\n\t\t\t\t\t\tn.component(new ModelTxt(this.room, m => \"#\" + m.id, { tagName: 'div', className: 'badge--text' })),\n\t\t\t\t\t]),\n\t\t\t\t\tn.elem('div', { className: 'badge--tools pageteleportchar-room--tools' }, [\n\t\t\t\t\t\tn.elem('button', { className: 'iconbtn medium tinyicon', events: {\n\t\t\t\t\t\t\tclick: (c, ev) => {\n\t\t\t\t\t\t\t\tcopyToClipboard(\"#\" + this.room.id);\n\t\t\t\t\t\t\t\tev.stopPropagation();\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}}, [\n\t\t\t\t\t\t\tn.component(new FAIcon('clipboard')),\n\t\t\t\t\t\t]),\n\t\t\t\t\t]),\n\t\t\t\t]),\n\t\t\t]),\n\t\t]));\n\t\treturn this.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n\n\t_teleport() {\n\t\tthis.ctrl.call('teleport', { roomId: this.room.id })\n\t\t\t.then(() => this.closePage());\n\t}\n\n}\n\nexport default PageTeleportCharRoom;\n","import { Elem } from 'modapp-base-component';\nimport { ModelTxt } from 'modapp-resource-component';\nimport FAIcon from 'components/FAIcon';\n\nclass PageTeleportCharNode {\n\tconstructor(module, ctrl, node, opt) {\n\t\topt = opt || {};\n\t\tthis.module = module;\n\t\tthis.ctrl = ctrl;\n\t\tthis.node = node;\n\t\tthis.closePage = opt.closePage || null;\n\t\tthis.isGlobal = !!opt.isGlobal;\n\t}\n\n\trender(el) {\n\t\tthis.elem = new Elem(n => n.elem('div', { className: 'pageteleportchar-node' }, [\n\t\t\tn.elem('btn', 'div', { className: 'badge btn', events: {\n\t\t\t\tclick: () => this._teleport(),\n\t\t\t}}, [\n\t\t\t\tn.elem('div', { className: 'badge--select' }, [\n\t\t\t\t\tn.elem('div', { className: 'badge--info' }, [\n\t\t\t\t\t\tn.component(new ModelTxt(this.node.room, m => m.name, { tagName: 'div', className: this.isGlobal ? 'badge--strong' : 'badge--title' })),\n\t\t\t\t\t\tn.component(new ModelTxt(this.node, m => m.key, { tagName: 'div', className: 'badge--text' })),\n\t\t\t\t\t]),\n\t\t\t\t\tn.component(this._canEdit()\n\t\t\t\t\t\t? new Elem(n => n.elem('div', { className: 'badge--tools pageteleportchar-node--tools' }, [\n\t\t\t\t\t\t\tn.elem('button', { className: 'iconbtn medium tinyicon', events: {\n\t\t\t\t\t\t\t\tclick: (c, ev) => {\n\t\t\t\t\t\t\t\t\tthis._edit();\n\t\t\t\t\t\t\t\t\tev.stopPropagation();\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t}}, [\n\t\t\t\t\t\t\t\tn.component(new FAIcon('pencil')),\n\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t]))\n\t\t\t\t\t\t: null,\n\t\t\t\t\t),\n\t\t\t\t]),\n\t\t\t]),\n\t\t]));\n\t\treturn this.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n\n\t_canEdit() {\n\t\treturn !this.isGlobal || this.module.player.isAdmin();\n\t}\n\n\t_teleport() {\n\t\tthis.ctrl.call('teleport', { nodeId: this.node.id })\n\t\t\t.then(() => this.closePage && this.closePage());\n\t}\n\n\t_edit() {\n\t\tthis.module.pageEditTeleport.open(this.ctrl, this.node, this.isGlobal);\n\t}\n}\n\nexport default PageTeleportCharNode;\n","import { Elem, Txt } from 'modapp-base-component';\nimport { CollectionComponent, CollectionList, ModelComponent } from 'modapp-resource-component';\nimport l10n from 'modapp-l10n';\nimport Collapser from 'components/Collapser';\nimport Fader from 'components/Fader';\nimport PanelSection from 'components/PanelSection';\nimport PageTeleportCharRoom from './PageTeleportCharRoom';\nimport PageTeleportCharNode from './PageTeleportCharNode';\n\n\nclass PageTeleportCharComponent {\n\tconstructor(module, ctrl, state, close) {\n\t\tthis.module = module;\n\t\tthis.ctrl = ctrl;\n\t\tthis.state = state;\n\t\tthis.close = close;\n\t}\n\n\trender(el) {\n\t\tthis.elem = new Elem(n => n.elem('div', { className: 'pageteleportchar' }, [\n\t\t\tn.component(new PanelSection(\n\t\t\t\tl10n.l('pageTeleportChar.destinations', \"Destinations\"),\n\t\t\t\tnew Elem(n => n.elem('div', [\n\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\tthis.module.globalTeleports.getModel(),\n\t\t\t\t\t\tnew CollectionComponent(\n\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\tnew Collapser(),\n\t\t\t\t\t\t\t(col, c, ev) => {\n\t\t\t\t\t\t\t\tif (ev) return;\n\n\t\t\t\t\t\t\t\tc.setComponent(col\n\t\t\t\t\t\t\t\t\t? new CollectionList(\n\t\t\t\t\t\t\t\t\t\tcol,\n\t\t\t\t\t\t\t\t\t\tm => new PageTeleportCharNode(this.module, this.ctrl, m, {\n\t\t\t\t\t\t\t\t\t\t\tclosePage: this.close,\n\t\t\t\t\t\t\t\t\t\t\tisGlobal: true,\n\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t: null,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t),\n\t\t\t\t\t\t(m, c) => c.setCollection(m.globalTeleports),\n\t\t\t\t\t)),\n\t\t\t\t\tn.component(new CollectionList(\n\t\t\t\t\t\tthis.ctrl.nodes,\n\t\t\t\t\t\tm => new PageTeleportCharNode(this.module, this.ctrl, m, {\n\t\t\t\t\t\t\tclosePage: this.close,\n\t\t\t\t\t\t}),\n\t\t\t\t\t)),\n\t\t\t\t])),\n\t\t\t\t{\n\t\t\t\t\tclassName: 'pageteleportchar--ownedrooms common--sectionpadding',\n\t\t\t\t\topen: this.state.nodes,\n\t\t\t\t\tonToggle: (c, v) => this.state.nodes = v,\n\t\t\t\t},\n\t\t\t)),\n\t\t\tn.component(new ModelComponent(\n\t\t\t\tthis.ctrl,\n\t\t\t\tnew Collapser(),\n\t\t\t\t(m, c, change) => {\n\t\t\t\t\tif (!change || change.hasOwnProperty('ownedRooms')) {\n\t\t\t\t\t\tc.setComponent(m.ownedRooms ? new PanelSection(\n\t\t\t\t\t\t\tl10n.l('pageTeleportChar.ownedRooms', \"Owned rooms\"),\n\t\t\t\t\t\t\tnew CollectionComponent(\n\t\t\t\t\t\t\t\tthis.ctrl.ownedRooms,\n\t\t\t\t\t\t\t\tnew Fader(),\n\t\t\t\t\t\t\t\t(col, c, ev) => {\n\t\t\t\t\t\t\t\t\tif (!col.length) {\n\t\t\t\t\t\t\t\t\t\tc.setComponent(new Txt(l10n.l('pageTeleportChar.noOwnedRooms', \"No rooms. Wanna create one?\"), { className: 'common--nolistplaceholder' }));\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tif (!ev || (col.length == 1 && ev.event == 'add')) {\n\t\t\t\t\t\t\t\t\t\tc.setComponent(new CollectionList(\n\t\t\t\t\t\t\t\t\t\t\tcol,\n\t\t\t\t\t\t\t\t\t\t\tm => new PageTeleportCharRoom(this.module, this.ctrl, m, this.close),\n\t\t\t\t\t\t\t\t\t\t));\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tclassName: 'pageteleportchar--ownedrooms common--sectionpadding',\n\t\t\t\t\t\t\t\topen: this.state.inRoomOpen,\n\t\t\t\t\t\t\t\tonToggle: (c, v) => this.state.inRoomOpen = v,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t) : null);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t)),\n\t\t]));\n\t\treturn this.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n}\n\nexport default PageTeleportCharComponent;\n","import { Elem } from 'modapp-base-component';\nimport FAIcon from 'components/FAIcon';\nimport l10n from 'modapp-l10n';\nimport PageTeleportCharComponent from './PageTeleportCharComponent';\nimport './pageTeleportChar.scss';\n\n/**\n * PageTeleportChar opens an in-panel teleport char page in the char panel.\n */\nclass PageTeleportChar {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\t\tthis.app.require([ 'charPages', 'pageChar', 'globalTeleports', 'player', 'pageEditTeleport' ], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\t\tthis.module.pageChar.addTool({\n\t\t\tid: 'teleport',\n\t\t\tsortOrder: 40,\n\t\t\tcomponentFactory: (ctrl, char) => new Elem(n => n.elem('button', { className: 'iconbtn small', events: {\n\t\t\t\tclick: () => this.open(ctrl),\n\t\t\t}}, [\n\t\t\t\tn.component(new FAIcon('arrows')),\n\t\t\t])),\n\t\t\tfilter: (ctrl, char) => ctrl.id == char.id,\n\t\t});\n\t}\n\n\t/**\n\t * Opens an in-panel teleport char page in the char panel.\n\t * @param {*} ctrl Controlled char model.\n\t * @returns {function} Close function.\n\t */\n\topen(ctrl) {\n\t\treturn this.module.charPages.openPage(\n\t\t\tctrl.id,\n\t\t\tctrl.id,\n\t\t\t(ctrl, char, state, close) => ({\n\t\t\t\tcomponent: new PageTeleportCharComponent(this.module, ctrl, state, close),\n\t\t\t\tonClose: close,\n\t\t\t\ttitle: l10n.l('pageTeleportChar.teleportChar', \"Teleport Character\"),\n\t\t\t}),\n\t\t);\n\t}\n\n\tdispose() {\n\t\tthis.module.pageChar.removeTool('teleport');\n\t}\n}\n\nexport default PageTeleportChar;\n","import { Elem, Txt } from 'modapp-base-component';\nimport { ModelTxt, ModelComponent } from 'modapp-resource-component';\nimport l10n from 'modapp-l10n';\nimport FAIcon from 'components/FAIcon';\n// import Collapser from 'components/Collapser';\nimport formatDateTime from 'utils/formatDateTime';\n// import PageWatchCharContent from './PageWatchCharContent';\n\nclass PageWatchChar {\n\tconstructor(module, watch, model) {\n\t\tthis.module = module;\n\t\tthis.watch = watch;\n\t\tthis.char = watch.char;\n\t\tthis.model = model;\n\t}\n\n\trender(el) {\n\t\tthis.elem = new Elem(n => n.elem('div', { className: 'pagewatch-char' }, [\n\t\t\tn.elem('div', { className: 'pagewatch-char--badge badge btn margin4', events: {\n\t\t\t\tclick: () => this.module.dialogAboutChar.open(this.char), // this._toggleInfo()\n\t\t\t}}, [\n\t\t\t\tn.elem('div', { className: 'badge--select' }, [\n\t\t\t\t\tn.component(this.module.avatar.newAvatar(this.char, { size: 'small', className: 'badge--icon' })),\n\t\t\t\t\tn.elem('div', { className: 'badge--info' }, [\n\t\t\t\t\t\tn.elem('div', { className: 'badge--title badge--nowrap' }, [\n\t\t\t\t\t\t\tn.component(new ModelTxt(this.char, c => c.name)),\n\t\t\t\t\t\t\tn.text(' '),\n\t\t\t\t\t\t\tn.component(new ModelTxt(this.char, c => c.surname)),\n\t\t\t\t\t\t]),\n\t\t\t\t\t\tn.elem('div', { className: 'badge--text badge--nowrap' }, [\n\t\t\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\t\t\tthis.char,\n\t\t\t\t\t\t\t\tnew Txt(),\n\t\t\t\t\t\t\t\t(m, c) => {\n\t\t\t\t\t\t\t\t\tc.setText(m.awake\n\t\t\t\t\t\t\t\t\t\t? l10n.l('pageWatch.currentlyAwake', \"Currently awake\")\n\t\t\t\t\t\t\t\t\t\t: l10n.l('pageWatch.lastSeen', \"Seen {time}\", { time: formatDateTime(new Date(m.lastAwake)) }),\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\tc[m.awake ? 'addClass' : 'removeClass']('badge--strong');\n\t\t\t\t\t\t\t\t\tc[m.awake ? 'removeClass' : 'addClass']('badge--text');\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t]),\n\t\t\t\t\t]),\n\t\t\t\t\tn.component(new ModelComponent(\n\t\t\t\t\t\tthis.module.charsAwake.getNotes(),\n\t\t\t\t\t\tnew Elem(n => n.elem('div', { className: 'badge--tools' }, [\n\t\t\t\t\t\t\tn.elem('note', 'button', { className: 'pagewatch-char--note iconbtn medium tinyicon', events: {\n\t\t\t\t\t\t\t\tclick: (c, ev) => {\n\t\t\t\t\t\t\t\t\tthis.module.dialogEditNote.open(this.char.id);\n\t\t\t\t\t\t\t\t\tev.stopPropagation();\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t}}, [\n\t\t\t\t\t\t\t\tn.component(new FAIcon('file-text')),\n\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t])),\n\t\t\t\t\t\t(m, c) => c[m.props[this.char.id] ? 'addNodeClass' : 'removeNodeClass']('note', 'hasnote'),\n\t\t\t\t\t)),\n\t\t\t\t]),\n\t\t\t\t// n.component(new ModelComponent(\n\t\t\t\t// \tthis.model,\n\t\t\t\t// \tnew Collapser(null),\n\t\t\t\t// \t(m, c, change) => {\n\t\t\t\t// \t\tif (change && !change.hasOwnProperty('selectedCharId')) return;\n\t\t\t\t// \t\tc.setComponent(m.selectedCharId === this.char.id\n\t\t\t\t// \t\t\t? new PageWatchCharContent(this.module, this.watch, (show) => this._toggleInfo(show))\n\t\t\t\t// \t\t\t: null\n\t\t\t\t// \t\t);\n\t\t\t\t// \t}\n\t\t\t\t// ))\n\t\t\t]),\n\t\t]));\n\t\treturn this.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n\n\t_lookChar() {\n\t\tthis.ctrl.call('look', { charId: this.char.id });\n\t}\n\n\t// _toggleInfo(show) {\n\t// \tshow = typeof show == 'undefined'\n\t// \t\t? !this.model.selectedCharId || this.model.selectedCharId != this.char.id\n\t// \t\t: !!show;\n\n\t// \tthis.model.set({ selectedCharId: show ? this.char.id : null });\n\t// }\n}\n\nexport default PageWatchChar;\n","import { Elem, Html, Txt } from 'modapp-base-component';\nimport l10n from 'modapp-l10n';\n\nclass PageWatchNoWatch {\n\tconstructor(module) {\n\t\tthis.module = module;\n\t}\n\n\trender(el) {\n\t\tthis.elem = new Elem(n => n.elem('div', { className: 'pagewatch-nowatch' }, [\n\t\t\tn.component(new Txt(l10n.l('pageWatch.emptyWatchList', \"Your watch list is empty.\"), { className: 'common--nolistplaceholder' })),\n\t\t\tn.component(new Txt(l10n.l('pageWatch.addWatchInfo', \"Learn how to add a watch by typing:\"), { className: 'common--nolistplaceholder' })),\n\t\t\tn.component(new Html(`<section class=\"charlog--pad\"><div class=\"charlog--code\"><code>help watch</code></div></section>`)),\n\t\t]));\n\t\treturn this.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n}\n\nexport default PageWatchNoWatch;\n","import { Elem, Context } from 'modapp-base-component';\nimport { CollectionList, ModelComponent, CollectionComponent } from 'modapp-resource-component';\nimport { Model, ModelToCollection } from 'modapp-resource';\nimport Collapser from 'components/Collapser';\nimport PageWatchChar from './PageWatchChar';\nimport PageWatchNoWatch from './PageWatchNoWatch';\n\nclass PageWatchComponent {\n\tconstructor(module, state, close) {\n\t\tthis.module = module;\n\t\tstate.charId = state.charId || null;\n\t\tthis.state = state;\n\t\tthis.close = close;\n\t\tthis.model = null;\n\t}\n\n\trender(el) {\n\t\tthis.model = new Model({ data: this.state, eventBus: this.module.self.app.eventBus });\n\t\tthis.elem = new Elem(n => n.elem('div', { className: 'pagewatch' }, [\n\t\t\tn.component('charlist', new Context(\n\t\t\t\t() => new ModelToCollection(this.module.charsAwake.getWatches(), {\n\t\t\t\t\tcompare: (a, b) => {\n\t\t\t\t\t\tlet ac = a.value.char;\n\t\t\t\t\t\tlet bc = b.value.char;\n\t\t\t\t\t\treturn (bc.awake - ac.awake) || (bc.lastAwake - ac.lastAwake) || a.key.localeCompare(b.key);\n\t\t\t\t\t},\n\t\t\t\t\teventBus: this.module.self.app.eventBus,\n\t\t\t\t}),\n\t\t\t\tcol => col.dispose(),\n\t\t\t\tcol => new Elem(n => n.elem('div', [\n\t\t\t\t\tn.component(new CollectionList(\n\t\t\t\t\t\tcol,\n\t\t\t\t\t\tm => new ModelComponent(\n\t\t\t\t\t\t\tm.char,\n\t\t\t\t\t\t\tnew PageWatchChar(this.module, m, this.model),\n\t\t\t\t\t\t\t(m, c, change) => {\n\t\t\t\t\t\t\t\t// Refresh sorting of the item\n\t\t\t\t\t\t\t\tif (change && (change.hasOwnProperty('awake') || change.hasOwnProperty('lastAwake'))) {\n\t\t\t\t\t\t\t\t\tcol.refresh(m.id);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t),\n\t\t\t\t\t\t{ className: 'pagewatch--chars' },\n\t\t\t\t\t)),\n\t\t\t\t\tn.component(new CollectionComponent(\n\t\t\t\t\t\tcol,\n\t\t\t\t\t\tnew Collapser(),\n\t\t\t\t\t\t(col, c, ev) => c.setComponent(col.length ? null : new PageWatchNoWatch(this.module)),\n\t\t\t\t\t)),\n\t\t\t\t])),\n\t\t\t)),\n\t\t]));\n\t\tthis.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tObject.assign(this.state, this.model.props);\n\t\t\tthis.model = null;\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n}\n\nexport default PageWatchComponent;\n","import { Elem } from 'modapp-base-component';\nimport l10n from 'modapp-l10n';\nimport FAIcon from 'components/FAIcon';\nimport PageWatchComponent from './PageWatchComponent';\nimport './pageWatch.scss';\n\n/**\n * PageWatch adds the watch for player panel page\n */\nclass PageWatch {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'playerTabs',\n\t\t\t'player',\n\t\t\t'confirm',\n\t\t\t'avatar',\n\t\t\t'charsAwake',\n\t\t\t'dialogEditNote',\n\t\t\t'dialogAboutChar',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\n\t\t// Add watch player tab\n\t\tthis.module.playerTabs.addTab({\n\t\t\tid: 'watch',\n\t\t\tsortOrder: 20,\n\t\t\ttabFactory: click => new Elem(n => n.elem('button', { className: 'iconbtn medium light', events: {\n\t\t\t\tclick: (c, e) => {\n\t\t\t\t\tclick();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t},\n\t\t\t}}, [\n\t\t\t\tn.component(new FAIcon('eye')),\n\t\t\t])),\n\t\t\tfactory: (state, close, layoutId) => ({\n\t\t\t\tcomponent: new PageWatchComponent(this.module, state, close),\n\t\t\t\ttitle: l10n.l('pageWatch.watchFor', \"Watch For\"),\n\t\t\t}),\n\t\t});\n\t}\n\n\t/**\n\t * Opens an in-panel char select page in the player panel.\n\t * @param {bool} reset Flag if the tab should be reset to show the default page. Defaults to false.\n\t * @returns {function} Close function.\n\t */\n\topen(reset) {\n\t\treturn this.module.playerTabs.openTab('watch', reset);\n\t}\n\n\n\tdispose() {\n\t\tthis.module.playerTabs.removeTab('watch');\n\t}\n}\n\nexport default PageWatch;\n","import { Model, CollectionToModel, CollectionWrapper } from 'modapp-resource';\nimport { hasRoles, hasAnyRole } from 'utils/roles';\nimport { hasIdRoles, hasAnyIdRole } from 'utils/idRoles';\n\nconst namespace = 'module.player';\n\n/**\n * Player holds the player data.\n */\nclass Player {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\t\t// Bind callbacks\n\t\tthis._onUnsubscribe = this._onUnsubscribe.bind(this);\n\t\tthis._onCtrlAdd = this._onCtrlAddRemove.bind(this, 'add');\n\t\tthis._onCtrlRemove = this._onCtrlAddRemove.bind(this, 'remove');\n\t\tthis._onModelChange = this._onModelChange.bind(this);\n\t\tthis._onUserChange = this._onUserChange.bind(this);\n\t\tthis._onIdentityChange = this._onIdentityChange.bind(this);\n\n\t\tthis.app.require([\n\t\t\t'auth',\n\t\t\t'api',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = module;\n\t\tthis.model = new Model({ data: { player: null, roles: null, idRoles: null, activeChar: null, activeCharIdx: null }, eventBus: this.app.eventBus });\n\t\tthis.ctrlModel = new CollectionToModel(null, c => c.id, { eventBus: this.app.eventBus });;\n\t\tthis.availableChars = null;\n\t\tthis.model.on('change', this._onModelChange);\n\t\tthis.user = null;\n\n\t\tthis._playerPromise = this.module.auth.getUserPromise().then(user => {\n\t\t\tthis.user = user;\n\t\t\tthis._listenUser(true);\n\t\t\treturn this._getPlayerPromise();\n\t\t});\n\t}\n\n\t/**\n\t * Attach an event handler function for one or more player module events.\n\t * @param {?string} events One or more space-separated events. Null means any event. Available events are 'ctrlAdd', 'ctrlRemove', and 'activeChange'.\n\t * @param {Event~eventCallback} handler A function to execute when the event is emitted.\n\t */\n\ton(events, handler) {\n\t\tthis.app.eventBus.on(this, events, handler, namespace);\n\t}\n\n\t/**\n\t * Remove an event handler.\n\t * @param {?string} events One or more space-separated events. Null means any event.\n\t * @param {Event~eventCallback} [handler] An option handler function. The handler will only be remove if it is the same handler.\n\t */\n\toff(events, handler) {\n\t\tthis.app.eventBus.off(this, events, handler, namespace);\n\t}\n\n\tgetModel() {\n\t\treturn this.model;\n\t}\n\n\tgetPlayer() {\n\t\treturn this.model.player || null;\n\t}\n\n\tgetRoles() {\n\t\treturn this.model.roles || null;\n\t}\n\n\tgetIdRoles() {\n\t\treturn this.model.idRoles || null;\n\t}\n\n\tgetChars() {\n\t\treturn (this.model.player && this.model.player.chars) || null;\n\t}\n\n\tgetPuppets() {\n\t\treturn (this.model.player && this.model.player.puppets) || null;\n\t}\n\n\tgetAvailableChars() {\n\t\treturn this.availableChars;\n\t}\n\n\tgetControlled() {\n\t\treturn (this.model.player && this.model.player.controlled) || null;\n\t}\n\n\tgetControlledModel() {\n\t\treturn this.ctrlModel;\n\t}\n\n\tgetControlledChar(charId) {\n\t\tlet chars = this.getControlled();\n\t\tif (chars) {\n\t\t\tfor (let c of chars) {\n\t\t\t\tif (c.id == charId) {\n\t\t\t\t\treturn c;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tgetActiveChar() {\n\t\treturn this.model.activeChar || null;\n\t}\n\n\tsetActiveChar(charId) {\n\t\tlet ctrl = this.getControlled();\n\t\tif (ctrl) {\n\t\t\tlet i = 0;\n\t\t\tfor (let c of ctrl) {\n\t\t\t\tif (c.id == charId) {\n\t\t\t\t\treturn this.model.set({ activeChar: c, activeCharIdx: i });\n\t\t\t\t}\n\t\t\t\ti++;\n\t\t\t}\n\t\t}\n\t\treturn Promise.reject(new Error(\"Char \" + charId + \" not controlled\"));\n\t}\n\n\t/**\n\t * Returns true if the player is an admin, builder, moderator, or helper.\n\t * @param {Array<string>} [roles] Player roles. Uses current player roles by default.\n\t * @returns {boolean}\n\t */\n\tisStaff(roles) {\n\t\troles = roles || this.model.roles;\n\t\treturn roles && (roles.indexOf('admin') >= 0 || roles.indexOf('builder') >= 0 || roles.indexOf('moderator') >= 0 || roles.indexOf('helper') >= 0);\n\t}\n\n\t/**\n\t * Returns true if the player is an admin, or moderator.\n\t * @param {Array<string>} [roles] Player roles. Uses current player roles by default.\n\t * @returns {boolean}\n\t */\n\tisModerator(roles) {\n\t\troles = roles || this.model.roles;\n\t\treturn roles && (roles.indexOf('admin') >= 0 || roles.indexOf('moderator') >= 0);\n\t}\n\n\t/**\n\t * Returns true if the player is an admin or a builder.\n\t * @param {Array<string>} [roles] Player roles. Uses current player roles by default.\n\t * @returns {boolean}\n\t */\n\tisBuilder(roles) {\n\t\troles = roles || this.model.roles;\n\t\treturn roles && (roles.indexOf('admin') >= 0 || roles.indexOf('builder') >= 0);\n\t}\n\n\t/**\n\t * Returns true if the player is an admin or a helper.\n\t * @param {Array<string>} [roles] Player roles. Uses current player roles by default.\n\t * @returns {boolean}\n\t */\n\tisHelper(roles) {\n\t\troles = roles || this.model.roles;\n\t\treturn roles && (roles.indexOf('admin') >= 0 || roles.indexOf('helper') >= 0);\n\t}\n\n\t/**\n\t * Returns true if the player is an admin.\n\t * @param {Array<string>} [roles] Player roles. Uses current player roles by default.\n\t * @returns {boolean}\n\t */\n\tisAdmin(roles) {\n\t\troles = roles || this.model.roles;\n\t\treturn roles && roles.indexOf('admin') >= 0 ;\n\t}\n\n\t/**\n\t * Returns true if the player is a supporter or a pioneer.\n\t * @param {Array<string>} [roles] Player ID roles. Uses current player ID roles by default.\n\t * @returns {boolean}\n\t */\n\tisBonus(roles) {\n\t\troles = roles || this.model.idRoles;\n\t\treturn roles && (roles.indexOf('overseer') >= 0 || roles.indexOf('pioneer') >= 0 || roles.indexOf('supporter') >= 0);\n\t}\n\n\t/**\n\t * Returns true if the player is a pioneer.\n\t * @param {Array<string>} [roles] Player ID roles. Uses current player ID roles by default.\n\t * @returns {boolean}\n\t */\n\tisPioneer(roles) {\n\t\troles = roles || this.model.idRoles;\n\t\treturn roles && (roles.indexOf('overseer') >= 0 || roles.indexOf('pioneer') >= 0);\n\t}\n\n\t/**\n\t * Returns true if the player is a supporter.\n\t * @param {Array<string>} [roles] Player ID roles. Uses current player ID roles by default.\n\t * @returns {boolean}\n\t */\n\tisSupporter(roles) {\n\t\troles = roles || this.model.idRoles;\n\t\treturn roles && (roles.indexOf('overseer') >= 0 || roles.indexOf('supporter') >= 0);\n\t}\n\n\t/**\n\t * Returns true if the player is an overseer.\n\t * @param {Array<string>} [roles] Player ID roles. Uses current player ID roles by default.\n\t * @returns {boolean}\n\t */\n\tisOverseer(roles) {\n\t\troles = roles || this.model.idRoles;\n\t\treturn roles && roles.indexOf('overseer') >= 0;\n\t}\n\n\townsChar(charId) {\n\t\treturn !!this.getOwnedChar(charId);\n\t}\n\n\tgetOwnedChar(charId) {\n\t\tcharId = typeof charId == 'object' && charId ? charId.id : charId;\n\t\tlet chars = this.getChars();\n\t\tif (charId && chars) {\n\t\t\tfor (let char of chars) {\n\t\t\t\tif (char.id == charId) {\n\t\t\t\t\treturn char;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tgetPuppet(charId, puppeteerId) {\n\t\tcharId = typeof charId == 'object' && charId ? charId.id : charId;\n\t\tpuppeteerId = typeof puppeteerId == 'object' && puppeteerId ? puppeteerId.id : puppeteerId;\n\t\tlet puppeteers = this.getPuppets();\n\t\tif (charId && puppeteerId && puppeteers) {\n\t\t\tfor (let puppeteer of puppeteers) {\n\t\t\t\tif (puppeteer.puppet.id == charId && puppeteer.char.id == puppeteerId) {\n\t\t\t\t\treturn puppeteer;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tgetPlayerPromise() {\n\t\treturn this._playerPromise;\n\t}\n\n\t/**\n\t * Reloads player roles.\n\t *\n\t * Only needed to be called on events that signals that there has been a\n\t * change of roles.\n\t */\n\treloadRoles() {\n\t\tthis.module.api.call('core', 'getRoles').then(result => {\n\t\t\tif (this.model) {\n\t\t\t\tthis.model.set({ roles: result.roles || [], idRoles: result.idRoles || [] });\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Check if the current player has all of the provided roles.\n\t * @param {string|Array.<string>} roles Role(s).\n\t * @returns {boolean} True if the player has all roles, otherwise false.\n\t */\n\thasRoles(...roles) {\n\t\treturn hasRoles(this.model, ...roles);\n\t}\n\n\t/**\n\t * Check if the current player has any of the provided roles.\n\t * @param {string|Array.<string>} roles Role(s).\n\t * @returns {boolean} True if the player has any of the roles, otherwise false.\n\t */\n\thasAnyRole(...roles) {\n\t\treturn hasAnyRole(this.model, ...roles);\n\t}\n\n\t/**\n\t * Check if the current user has all of the provided ID roles.\n\t * @param {string|Array.<string>} idRoles ID role(s).\n\t * @returns {boolean} True if the user has all ID roles, otherwise false.\n\t */\n\thasIdRoles(...idRoles) {\n\t\treturn hasIdRoles(this.model, ...idRoles);\n\t}\n\n\t/**\n\t * Check if the current user has any of the provided ID roles.\n\t * @param {string|Array.<string>} idRoles ID role(s).\n\t * @returns {boolean} True if the user has any of the roles, otherwise false.\n\t */\n\thasAnyIdRole(...idRoles) {\n\t\treturn hasAnyIdRole(this.model, ...idRoles);\n\t}\n\n\t_getPlayerPromise() {\n\t\tif (!this.playerPromise) {\n\t\t\tthis.playerPromise = Promise.all([\n\t\t\t\tthis.module.api.call('core', 'getPlayer'),\n\t\t\t\tthis.module.api.call('core', 'getRoles'),\n\t\t\t]).then(result => {\n\t\t\t\t// Check if disposed\n\t\t\t\tif (!this.ctrlModel) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tlet player = result[0];\n\t\t\t\tlet roles = result[1].roles || [];\n\t\t\t\tlet idRoles = result[1].idRoles || [];\n\t\t\t\tif (this.module.api.isError(player)) {\n\t\t\t\t\treturn Promise.reject(player);\n\t\t\t\t}\n\t\t\t\tlet ctrl = player.controlled;\n\t\t\t\tplayer.on('unsubscribe', this._onUnsubscribe);\n\t\t\t\tctrl.on('add', this._onCtrlAdd);\n\t\t\t\tctrl.on('remove', this._onCtrlRemove);\n\t\t\t\tfor (let char of ctrl) {\n\t\t\t\t\tthis.app.eventBus.emit(this, namespace + '.ctrlAdd', { char });\n\t\t\t\t}\n\t\t\t\tthis.model.set(Object.assign({ player, roles, idRoles }, this._ctrlChange(ctrl)));\n\t\t\t\tthis.ctrlModel.setCollection(player.controlled);\n\t\t\t\tthis.availableChars = new CollectionWrapper(player.chars, {\n\t\t\t\t\tfilter: c => c.state == 'asleep',\n\t\t\t\t\teventBus: this.app.eventBus,\n\t\t\t\t});\n\t\t\t\treturn player;\n\t\t\t}).catch(err => {\n\t\t\t\tthis.playerPromise = null;\n\t\t\t\tthrow err;\n\t\t\t});\n\t\t}\n\t\treturn this.playerPromise;\n\t}\n\n\t_onUnsubscribe() {\n\t\t// Remove user model\n\t\tif (this.model.player) {\n\t\t\tlet p = this.model.player;\n\t\t\tlet ctrl = p.controlled;\n\t\t\tp.off('unsubscribe', this._onUnsubscribe);\n\t\t\tctrl.off('add', this._onCtrlAdd);\n\t\t\tctrl.off('remove', this._onCtrlRemove);\n\t\t\tfor (let char of ctrl) {\n\t\t\t\tthis.app.eventBus.emit(this, namespace + '.ctrlRemove', { char });\n\t\t\t}\n\t\t\tthis.ctrlModel.dispose();\n\t\t\tthis.ctrlModel = null;\n\t\t\tthis.availableChars.dispose();\n\t\t\tthis.availableChars = null;\n\t\t}\n\t\tthis.model.set({ player: null, activeChar: null, activeCharIdx: null });\n\t\tthis.playerPromise = null;\n\t}\n\n\t_onCtrlAddRemove(name, ev) {\n\t\tthis.app.eventBus.emit(this, namespace + (name == 'add' ? '.ctrlAdd' : '.ctrlRemove'), { char: ev.item });\n\t\tthis.model.set(this._ctrlChange(this.model.player?.controlled));\n\t}\n\n\t_onModelChange(changed) {\n\t\tif (changed && !changed.hasOwnProperty('activeChar')) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet m = this.model;\n\t\tlet dir = (!changed || m.activeCharIdx === null || changed.activeCharIdx === null)\n\t\t\t? 0\n\t\t\t: (m.activeCharIdx - changed.activeCharIdx) || 1;\n\n\t\tthis.app.eventBus.emit(this, namespace + '.activeChange', { char: m.activeChar, dir });\n\t}\n\n\t_ctrlChange(ctrl) {\n\t\t// Check for no controlled characters\n\t\tif (!ctrl || !ctrl.length) {\n\t\t\treturn { activeChar: null, activeCharIdx: null };\n\t\t}\n\n\t\tlet active = this.model.activeChar;\n\t\tlet idx = this.model.activeCharIdx || 0;\n\n\t\t// Find index position of active character\n\t\tif (active) {\n\t\t\tlet newIdx = ctrl.indexOf(active);\n\t\t\tif (newIdx >= 0) {\n\t\t\t\t// Found at new position\n\t\t\t\tidx = newIdx;\n\t\t\t} else if (idx >= ctrl.length) {\n\t\t\t\t// Set index to last position if out of range.\n\t\t\t\tidx = ctrl.length - 1;\n\t\t\t}\n\t\t}\n\n\t\treturn { activeChar: ctrl.atIndex(idx), activeCharIdx: idx };\n\t}\n\n\t_listenUser(on) {\n\t\tlet cb = on ? 'on' : 'off';\n\t\tif (this.user) {\n\t\t\tthis.user[cb]('change', this._onUserChange);\n\t\t\tif (this.user.identity) {\n\t\t\t\tthis.user.identity[cb]('change', this._onIdentityChange);\n\t\t\t}\n\t\t}\n\t}\n\n\t_onUserChange(change) {\n\t\tif (!change || change.hasOwnProperty('roles')) {\n\t\t\tsetTimeout(() => this.reloadRoles(), 500);\n\t\t}\n\t}\n\n\t_onIdentityChange(change) {\n\t\tif (!change || change.hasOwnProperty('idRoles')) {\n\t\t\tsetTimeout(() => this.reloadRoles(), 500);\n\t\t}\n\t}\n\n\tdispose() {\n\t\tthis._listenUser(false);\n\t\tthis.user = false;\n\t\tthis.ctrlModel.dispose();\n\t\tthis.ctrlModel = null;\n\t}\n}\n\nexport default Player;\n","import PanelSection from 'components/PanelSection';\nimport l10n from 'modapp-l10n';\n\nclass PlayerSettingsEmailComponent {\n\tconstructor(module, identity) {\n\t\tthis.module = module;\n\t\tthis.identity = identity;\n\t}\n\n\trender(el) {\n\t\tthis.elem = new PanelSection(\n\t\t\tl10n.l('playerSettingsEmail.email', \"Email\"),\n\t\t\tthis.module.accountEmail.newEmailButton(this.identity, { fullWidth: true }),\n\t\t\t{\n\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\tnoToggle: true,\n\t\t\t},\n\t\t);\n\t\tthis.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n}\n\nexport default PlayerSettingsEmailComponent;\n","import { Model } from 'modapp-resource';\nimport PlayerSettingsEmailComponent from './PlayerSettingsEmailComponent';\n\n/**\n * PlayerSettingsEmail adds a section to the PlayerSettings to show and set email.\n */\nclass PlayerSettingsEmail {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\t// Bind callbacks\n\t\tthis._onIdentityChange = this._onIdentityChange.bind(this);\n\n\t\tthis.app.require([\n\t\t\t'api',\n\t\t\t'pagePlayerSettings',\n\t\t\t'auth',\n\t\t\t'accountEmail',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\n\t\tthis.model = new Model({ data: { alert: true }, eventBus: this.app.eventBus });\n\t\tthis.identity = null;\n\n\t\t// Get user model to alert on unverified email.\n\t\tthis.module.auth.getUserPromise().then(user => {\n\t\t\tif (user.identity && this.model) {\n\t\t\t\tthis.identity = user.identity;\n\t\t\t\tthis._listen(true);\n\t\t\t\tthis._onIdentityChange();\n\t\t\t}\n\t\t});\n\n\t\tthis.module.pagePlayerSettings.addTool({\n\t\t\tid: 'email',\n\t\t\ttype: 'topSection',\n\t\t\tsortOrder: 30,\n\t\t\tcomponentFactory: (user, player, state) => user.identity && !this.module.api.isError(user.identity)\n\t\t\t\t? new PlayerSettingsEmailComponent(this.module, user.identity)\n\t\t\t\t: null,\n\t\t\talertModel: this.model,\n\t\t});\n\t}\n\n\t_listen(on) {\n\t\tif (this.identity) {\n\t\t\tthis.identity[on ? 'on' : 'off']('change', this._onIdentityChange);\n\t\t}\n\t}\n\n\t_onIdentityChange() {\n\t\tlet m = this.identity;\n\t\tthis.model.set({ alert: m && !(m.email || m.emailVerified) });\n\t}\n\n\tdispose() {\n\t\tthis._listen(false);\n\t\tthis.module.pagePlayerSettings.removeTool('email');\n\t\tthis.identity = null;\n\t\tthis.model = null;\n\t}\n}\n\nexport default PlayerSettingsEmail;\n","import { Elem } from 'modapp-base-component';\nimport { ModelComponent, ModelTxt } from 'modapp-resource-component';\nimport PanelSection from 'components/PanelSection';\nimport Collapser from 'components/Collapser';\nimport l10n from 'modapp-l10n';\n\nclass PlayerSettingsPlayerNameComponent {\n\tconstructor(module, identity, player, state) {\n\t\tthis.module = module;\n\t\tthis.identity = identity;\n\t\tthis.player = player;\n\t\tthis.state = state;\n\t}\n\n\trender(el) {\n\t\tlet components = {};\n\t\tthis.elem = new Elem(n => n.elem('div', { className: 'playersettingsplayername' }, [\n\t\t\tn.component(new ModelComponent(\n\t\t\t\tthis.identity,\n\t\t\t\tnew Collapser(),\n\t\t\t\t(m, c, change) => c.setComponent(components.playerName = m && m.name\n\t\t\t\t\t? components.playerName || new PanelSection(\n\t\t\t\t\t\tl10n.l('playerSettingsPlayerName.name', \"Player name\"),\n\t\t\t\t\t\tnew ModelTxt(m, m => m.name, { className: 'playersettingsplayername--name' }),\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t\t\t: null,\n\t\t\t\t),\n\t\t\t)),\n\t\t\tn.component(new ModelComponent(\n\t\t\t\tthis.identity,\n\t\t\t\tnew Collapser(),\n\t\t\t\t(m, c, change) => c.setComponent(components.username = m && m.username && m.name.toLowerCase() != m.username\n\t\t\t\t\t? components.username || new PanelSection(\n\t\t\t\t\t\tl10n.l('playerSettingsPlayerName.username', \"Login name\"),\n\t\t\t\t\t\tnew ModelTxt(this.identity, m => m.username, { className: 'playersettingsplayername--username' }),\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t\t\t: null,\n\t\t\t\t),\n\t\t\t)),\n\t\t]));\n\t\tthis.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n}\n\nexport default PlayerSettingsPlayerNameComponent;\n","import PlayerSettingsPlayerNameComponent from './PlayerSettingsPlayerNameComponent';\nimport './playerSettingsPlayerName.scss';\n\n/**\n * PlayerSettingsPlayerName adds a topsection to the PlayerSettings to show\n * player name.\n */\nclass PlayerSettingsPlayerName {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'api',\n\t\t\t'pagePlayerSettings',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\n\t\t// Add playerName\n\t\tthis.module.pagePlayerSettings.addTool({\n\t\t\tid: 'playerName',\n\t\t\ttype: 'topSection',\n\t\t\tsortOrder: 20,\n\t\t\tcomponentFactory: (user, player, state) => user.identity && !this.module.api.isError(user.identity)\n\t\t\t\t? new PlayerSettingsPlayerNameComponent(this.module, user.identity, player, state)\n\t\t\t\t: null,\n\t\t});\n\t}\n\n\tdispose() {\n\t\tthis.module.pagePlayerSettings.removeTool('playerName');\n\t}\n}\n\nexport default PlayerSettingsPlayerName;\n","import { Elem, Txt } from 'modapp-base-component';\nimport l10n from 'modapp-l10n';\nimport './playerSettingsPolicies.scss';\n\nconst privacyUrl = HUB_PATH + 'policy/privacy.html';\nconst termsUrl = HUB_PATH + 'policy/terms.html';\n\nconst txtPrivacyPolicy = l10n.l('playerSettingsPolicies.privacyPolicy', \"Privacy Policy\");\nconst txtTermsOfService = l10n.l('playerSettingsPolicies.termsOfService', \"Terms of Service\");\n\n/**\n * PlayerSettingsPolicies adds a topsection to the PlayerSettings to show\n * player name.\n */\nclass PlayerSettingsPolicies {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'api',\n\t\t\t'pagePlayerSettings',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\n\t\t// Add policies\n\t\tthis.module.pagePlayerSettings.addTool({\n\t\t\tid: 'policies',\n\t\t\ttype: 'topSection',\n\t\t\tsortOrder: 10,\n\t\t\tcomponentFactory: (user, player, state) => new Elem(n => n.elem('div', { className: 'playersettingspolicies' }, [\n\t\t\t\tn.component(new Txt(txtPrivacyPolicy, {\n\t\t\t\t\ttagName: 'a',\n\t\t\t\t\tclassName: 'link',\n\t\t\t\t\tattributes: {\n\t\t\t\t\t\thref: privacyUrl,\n\t\t\t\t\t\ttarget: '_blank',\n\t\t\t\t\t},\n\t\t\t\t})),\n\t\t\t\tn.component(new Txt(txtTermsOfService, {\n\t\t\t\t\ttagName: 'a',\n\t\t\t\t\tclassName: 'link',\n\t\t\t\t\tattributes: {\n\t\t\t\t\t\thref: termsUrl,\n\t\t\t\t\t\ttarget: '_blank',\n\t\t\t\t\t},\n\t\t\t\t})),\n\t\t\t])),\n\t\t});\n\t}\n\n\tdispose() {\n\t\tthis.module.pagePlayerSettings.removeTool('policies');\n\t}\n}\n\nexport default PlayerSettingsPolicies;\n","import { ModelComponent } from 'modapp-resource-component';\nimport { Model } from 'modapp-resource';\nimport l10n from 'modapp-l10n';\nimport ModelCollapser from 'components/ModelCollapser';\nimport PanelSection from 'components/PanelSection';\nimport CharTagsList from 'components/CharTagsList';\n\nconst idRoleTags = [ 'overseer', 'supporter', 'pioneer', 'root' ].reduce((o, r) => {\n\to[r] = {\n\t\tid: r,\n\t\tidRole: r,\n\t\tkey: r,\n\t};\n\treturn o;\n}, {});\n\nconst roleTags = [ 'helper', 'moderator', 'builder', 'admin' ].reduce((o, r) => {\n\to[r] = {\n\t\tid: r,\n\t\trole: r,\n\t\tkey: r,\n\t};\n\treturn o;\n}, {});\n\nfunction idRoleTag(r) {\n\treturn idRoleTags[r] || { id: r, idRole: r, key: r };\n}\n\nfunction roleTag(r) {\n\treturn roleTags[r] || { id: r, role: r, key: r };\n}\n\n\nclass PlayerSettingsRolesComponent {\n\tconstructor(module) {\n\t\tthis.module = module;\n\t}\n\n\trender(el) {\n\t\tthis.elem = new ModelCollapser(this.module.player.getModel(), [\n\t\t\t{\n\t\t\t\tfactory: playerModel => {\n\t\t\t\t\tlet model = new Model({ eventBus: this.module.self.app.eventBus });\n\t\t\t\t\treturn new PanelSection(\n\t\t\t\t\t\tl10n.l('playerSettingsRoles.roles', \"Roles\"),\n\t\t\t\t\t\tnew ModelComponent(\n\t\t\t\t\t\t\tplayerModel,\n\t\t\t\t\t\t\tnew CharTagsList(model),\n\t\t\t\t\t\t\t(m, c, change) => model.reset(this._transformRoles(playerModel)),\n\t\t\t\t\t\t),\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tcondition: m => m.idRoles?.length || m.roles?.length,\n\t\t\t},\n\t\t]);\n\n\t\treturn this.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t}\n\n\t_transformRoles(playerModel) {\n\t\tlet o = {};\n\t\tif (playerModel.roles) {\n\t\t\tfor (let r of playerModel.roles) {\n\t\t\t\to[r + '_like'] = roleTag(r);\n\t\t\t}\n\t\t}\n\t\tif (playerModel.idRoles) {\n\t\t\tfor (let r of playerModel.idRoles) {\n\t\t\t\to[r + '_like'] = idRoleTag(r);\n\t\t\t}\n\t\t}\n\t\treturn o;\n\t}\n}\n\nexport default PlayerSettingsRolesComponent;\n","import PlayerSettingsRolesComponent from './PlayerSettingsRolesComponent';\n\n/**\n * PlayerSettingsRoles adds a section to the PlayerSettings to see player\n * roles.\n */\nclass PlayerSettingsRoles {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'player',\n\t\t\t'pagePlayerSettings',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\n\t\tthis.module.pagePlayerSettings.addTool({\n\t\t\tid: 'roles',\n\t\t\ttype: 'section',\n\t\t\tsortOrder: 40,\n\t\t\tcomponentFactory: (user, player, state) => new PlayerSettingsRolesComponent(this.module),\n\t\t});\n\t}\n\n\tdispose() {\n\t\tthis.module.pagePlayerSettings.removeTool('roles');\n\t}\n}\n\nexport default PlayerSettingsRoles;\n","import { Elem, Txt } from 'modapp-base-component';\nimport ModelCollapser from 'components/ModelCollapser';\nimport FAIcon from 'components/FAIcon';\nimport PanelSection from 'components/PanelSection';\nimport l10n from 'modapp-l10n';\n\nclass PlayerSettingsSecurityComponent extends ModelCollapser {\n\tconstructor(module, identity) {\n\t\tsuper(identity, [\n\t\t\t{\n\t\t\t\tfactory: m => new PanelSection(\n\t\t\t\t\tl10n.l('playerSettingsSecurity.security', \"Security\"),\n\t\t\t\t\tnew Elem(n => n.elem('button', { events: {\n\t\t\t\t\t\tclick: () => module.dialogChangePassword.open(m.id),\n\t\t\t\t\t}, className: 'btn medium light full-width icon-left' }, [\n\t\t\t\t\t\tn.component(new FAIcon('key')),\n\t\t\t\t\t\tn.component(new Txt(l10n.l('playerSettingsSecurity.changePassword', \"Change password\"))),\n\t\t\t\t\t])),\n\t\t\t\t\t{\n\t\t\t\t\t\tclassName: 'common--sectionpadding',\n\t\t\t\t\t\tnoToggle: true,\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t\tcondition: m => m.hasLogin,\n\t\t\t},\n\t\t]);\n\t}\n}\n\nexport default PlayerSettingsSecurityComponent;\n","import PlayerSettingsSecurityComponent from './PlayerSettingsSecurityComponent';\n\n/**\n * PlayerSettingsSecurity adds a section to the PlayerSettings to change\n * password.\n */\nclass PlayerSettingsSecurity {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([\n\t\t\t'api',\n\t\t\t'dialogChangePassword',\n\t\t\t'pagePlayerSettings',\n\t\t], this._init.bind(this));\n\t}\n\n\t_init(module) {\n\t\tthis.module = Object.assign({ self: this }, module);\n\n\t\tthis.module.pagePlayerSettings.addTool({\n\t\t\tid: 'security',\n\t\t\ttype: 'section',\n\t\t\tsortOrder: 20,\n\t\t\tcomponentFactory: (user, player, state) => user.identity && !this.module.api.isError(user.identity)\n\t\t\t\t? new PlayerSettingsSecurityComponent(this.module, user.identity)\n\t\t\t\t: null,\n\t\t});\n\t}\n\n\tdispose() {\n\t\tthis.module.pagePlayerSettings.removeTool('security');\n\t}\n}\n\nexport default PlayerSettingsSecurity;\n","import FormatTxt from 'components/FormatTxt';\nimport formatText, { firstTriggerWord, filterTriggers, formatTextTokens } from 'utils/formatText';\n\n/**\n * FormatText exposes the formatText utils functions.\n */\nclass FormatText {\n\tconstructor(app, params) {\n\t\tthis.app = app;\n\n\t\tthis.app.require([], this._init.bind(this));\n\t}\n\n\t_init(module) {}\n\n\t/**\n\t * Formats a string, escapes it and formats it so that _this_ becomes italic and\n\t * **that** becomes bold.\n\t * @param {string} str Text to format.\n\t * @param {object} [opt] Optional parameters\n\t * @param {Array.<object>} [opt.triggers] Array of trigger objects\n\t * @param {object} [opt.em] Token object for em.\n\t * @param {object} [opt.strong] Token object for strong.\n\t * @param {object} [opt.ooc] Token object for ooc\n\t * @param {object} [opt.cmd] Token object for cmd\n\t * @param {object} [opt.sup] Token object for sup\n\t * @param {object} [opt.sub] Token object for sub\n\t * @param {object} [opt.strikethrough] Token object for strikethrough\n\t * @returns {string} HTML formatted string.\n\t */\n\tformatText(str, opt) {\n\t\treturn formatText(str, opt);\n\t}\n\n\t/**\n\t * Get the first trigger word.\n\t * @param {string} str Text to scan for triggers.\n\t * @param {Array.<object>} triggers Array of trigger objects\n\t * @returns {string} First text matching a trigger.\n\t */\n\tfirstTriggerWord(str, triggers) {\n\t\treturn firstTriggerWord(str, triggers);\n\t}\n\n\t/**\n\t * Filter trigger arrays to only contain triggers existing in the text.\n\t * @param {string} str Text to scan for triggers.\n\t * @param {Array.<object>} triggers Array of trigger objects\n\t * @returns {?Array.<object>} Array of triggers existing in the text. Or null if no triggers matches.\n\t */\n\tfilterTriggers(str, triggers) {\n\t\treturn filterTriggers(str, triggers);\n\t}\n\n\t/**\n\t * Formats a string, escapes it and formats it so that _this_ becomes italic and\n\t * **that** becomes bold.\n\t * @param {string} str Text to format.\n\t * @param {object} [opt] Optional parameters\n\t * @returns {Array.<Token>} Array of Tokens.\n\t */\n\tformatTextTokens(str, opt) {\n\t\treturn formatTextTokens(str, opt);\n\t}\n\n\t/**\n\t * Creates an instance of FormatTxt which is a component for formatted text\n\t * with support for interactive elements such as sections.\n\t * @param {string} str Text to format\n\t * @param {object} [opt] Optional parameters as defined by RootElem.\n\t * @param {boolean} [opt.noInteraction] Flag to disable clickable interactions like toggling sections.\n\t * @returns {FormatTxt} FormatTxt component.\n\t */\n\tnewFormatTxt(str, opt) {\n\t\treturn new FormatTxt(str, opt);\n\t}\n}\n\nexport default FormatText;\n","\nimport { ModifyModel } from 'modapp-resource';\n\nfunction getLocationObject(ctrl, area) {\n\tlet l = getCurrentLocation(ctrl, area);\n\treturn l && !area.children.props[l.id]\n\t\t? { [l.id]: l }\n\t\t: {};\n}\n\nfunction getCurrentLocation(ctrl, area) {\n\tlet location = ctrl.inRoom;\n\tlet locationArea = location.area;\n\twhile (locationArea) {\n\t\tif (locationArea.id == area.id) {\n\t\t\treturn location;\n\t\t}\n\t\tlocation = locationArea;\n\t\tlocationArea = locationArea.parent;\n\t}\n\treturn null;\n}\n\n/**\n * Creates a model of child items of an area, including any hidden area/room\n * that the character is currently in.\n */\nclass AreaChildrenModel extends ModifyModel {\n\n\t/**\n\t * Creates a new AreaChildrenModel instance.\n\t * @param {Model} ctrl Controlled character model.\n\t * @param {Model} area Area model.\n\t * @param {object} [opt] Optional parameters.\n\t * @param {EventBus} [opt.eventBus] Event bus.\n\t */\n\tconstructor(ctrl, area, opt) {\n\t\tsuper(area.children, {\n\t\t\tprops: getLocationObject(ctrl, area),\n\t\t\tisModifiedProperty: null,\n\t\t\tmodifiedOnNew: true,\n\t\t}, opt);\n\n\t\t// Bind callbacks\n\t\tthis._updateChildren = this._updateChildren.bind(this);\n\n\t\tthis._ctrl = ctrl;\n\t\tthis._area = area;\n\t\tthis._listen(true);\n\t}\n\n\t_listen(on) {\n\t\tthis._ctrl[on ? 'on' : 'off']('change', this._updateChildren);\n\t\tthis._area.children[on ? 'on' : 'off']('change', this._updateChildren);\n\t}\n\n\t_updateChildren() {\n\t\t// Ensure we are not disposed\n\t\tif (!this._ctrl) {\n\t\t\treturn;\n\t\t}\n\t\t// Old modifications (added private location) are cleared by default.\n\t\tlet mods = this.getModifications() || {};\n\t\tfor (let k in mods) {\n\t\t\tmods[k] = this._area.children[k];\n\t\t}\n\n\t\tthis.set(Object.assign(mods, getLocationObject(this._ctrl, this._area)));\n\t}\n\n\tdispose() {\n\t\tif (this._ctrl) {\n\t\t\tthis._listen(false);\n\t\t\tthis._ctrl = null;\n\t\t\tthis._area = null;\n\t\t\tsuper.dispose();\n\t\t}\n\t}\n}\n\nexport default AreaChildrenModel;\n","import Err from './Err';\nimport isNormalizedPrefix from 'utils/isNormalizedPrefix';\nimport expandSelection from 'utils/expandSelection';\n\n/**\n * CharList is a cmd list of characters.\n */\nclass CharList {\n\n\t/**\n\t * Creates an instance of CharList.\n\t * @param {function} getChars Callback function that returns an iterable list of chars.\n\t * @param {object} [opt] Optional params.\n\t * @param {boolean} [opt.useFullname] Flag indicating if full name should be used. Defaults to false.\n\t * @param {(ctx: object, getChars: function) => object[]} [opt.getCompletionChars] Callback that returns an iterable list for chars to complete from. Defaults to getChars callback.\n\t * @param {function} [opt.validation] Char validation callback. function(key, char) -> ?{ code, message }\n\t * @param {function} [opt.errNotFound] Callback function that returns an error when items is not found. Null means mismatch is not an error: function(this, match)\n\t */\n\tconstructor(getChars, opt) {\n\t\topt = opt || {};\n\t\tthis.regex = /^([\\s\\p{L}\\p{N}'-]*[\\p{L}\\p{N}'-])\\s*/u;\n\t\tthis.getChars = getChars;\n\t\tthis.useFullname = !!opt.useFullname;\n\t\tthis.getCompletionChars = getChars;\n\t\tif (opt.getCompletionChars) {\n\t\t\tlet f = opt.getCompletionChars;\n\t\t\tthis.getCompletionChars = (ctx) => f(ctx, this.getChars);\n\t\t}\n\t\tthis.validation = opt.validation || null;\n\t\tthis.errNotFoundMsg = opt.errNotFound || null;\n\t}\n\n\tconsume(stream) {\n\t\t// Match using regex\n\t\tlet m = stream.match(this.regex);\n\t\treturn (m && m[1]) || null;\n\t}\n\n\tget errNotFound() {\n\t\treturn this.errNotFoundMsg;\n\t}\n\n\t/**\n\t * Gets a list item by key.\n\t * @param {string} key Key of item to get.\n\t * @param {object} ctx Cmd context object.\n\t * @returns {{key: string, value: any, error: null | Err } | null} The formatted key and any value, or error. Null if the key was not found.\n\t */\n\tgetItem(key, ctx) {\n\t\tlet chars = this.getChars(ctx);\n\t\tif (!chars) {\n\t\t\treturn null;\n\t\t}\n\n\t\tlet k = key.trim().toLowerCase().replace(/\\s+/g, ' ');\n\n\t\tvar matches = [];\n\n\t\tfor (let c of chars) {\n\t\t\tvar name = c.name.toLowerCase();\n\t\t\tvar fullname = name + (c.surname ? \" \" + c.surname.toLowerCase() : \"\");\n\t\t\tif (k === fullname) {\n\t\t\t\treturn this._createResult(key, c, true);\n\t\t\t}\n\t\t\tif (k === name) matches.push(c);\n\t\t}\n\n\t\t// Found a single match.\n\t\tif (matches.length === 1) {\n\t\t\treturn this._createResult(key, matches[0], false);\n\t\t}\n\n\t\treturn matches.length\n\t\t\t? { key, error: new Err('charList.ambiguousName', \"There are more than one character named \\\"{name}\\\".\", { name: key }) }\n\t\t\t: null;\n\t}\n\n\t_createResult(key, char, useFull) {\n\t\tif (this.validation) {\n\t\t\tlet error = this.validation(key, char);\n\t\t\tif (error) {\n\t\t\t\treturn { key, error };\n\t\t\t}\n\t\t}\n\t\treturn { key: char.name + (useFull && char.surname ? \" \" + char.surname : \"\"), value: char.id };\n\t}\n\n\tcomplete(str, pos, ctx, inline) {\n\t\tlet chars = this.getCompletionChars(ctx);\n\t\tif (!chars) {\n\t\t\treturn null;\n\t\t}\n\n\t\tlet { from, to } = inline\n\t\t\t? expandSelection(str, /[\\p{L}\\p{N}'-]/u, /[\\p{L}\\p{N}'-]/u, pos, pos)\n\t\t\t: expandSelection(str, null, /[\\p{L}\\p{N}'-]/u, 0, pos);\n\n\t\tlet prefix = (str && str.slice(from, to).toLowerCase().replace(/\\s+/g, ' ')) || '';\n\n\t\tlet matches = [];\n\t\tlet seen = {};\n\t\tfor (let c of chars) {\n\t\t\tlet name = c.name.toLowerCase();\n\t\t\tlet fullname = name + (c.surname ? ' ' + c.surname.toLowerCase() : '');\n\t\t\tif (isNormalizedPrefix(prefix, fullname)) {\n\t\t\t\tlet full = c.name + (c.surname ? ' ' + c.surname : '');\n\t\t\t\tif (this.useFullname) {\n\t\t\t\t\tmatches.push(full);\n\t\t\t\t} else {\n\t\t\t\t\tif (seen.hasOwnProperty(name)) {\n\t\t\t\t\t\tlet s = seen[name];\n\t\t\t\t\t\tif (s !== true && !inline) {\n\t\t\t\t\t\t\tmatches[s.idx] = s.full;\n\t\t\t\t\t\t\tseen[name] = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatches.push(full);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tseen[name] = { idx: matches.length, full: full };\n\t\t\t\t\t\t// Use fullname if we are completing the entire first name\n\t\t\t\t\t\tif (prefix.length < name.length) {\n\t\t\t\t\t\t\tmatches.push(c.name);\n\t\t\t\t\t\t\tif (inline) {\n\t\t\t\t\t\t\t\tmatches.push(full);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tmatches.push(full);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn { list: matches, from, to };\n\t}\n}\n\n\nexport default CharList;\n","import Err from './Err';\n\n/**\n * DelimStep consumes a delimiter string.\n */\nclass DelimStep {\n\n\t/**\n\t * Creates an instance of DelimStep.\n\t * @param {string} delim Delimiter\n\t * @param {object} [opt] Optional params.\n\t * @param {string} [opt.token] Token name. Defaults to 'delim'.\n\t * @param {Step} [opt.next] Next step after a matched delimiter.\n\t * @param {Step} [opt.else] Step after if the delimiter is missing. Will disabled any errRequired set.\n\t * @param {boolean} [opt.trimSpace] Flag indicating if initial space should be trimmed. Defaults to true.\n\t * @param {?function} [opt.errRequired] Callback function that returns an error when it fails to match. Null means it is not required.: function(this)\n\t */\n\tconstructor(delim, opt) {\n\t\topt = opt || {};\n\t\tthis.delim = delim;\n\t\tthis.token = opt.token || 'delim';\n\t\tthis.next = opt.next || null;\n\t\tthis.else = opt.else || null;\n\t\tthis.trimSpace = opt.hasOwnProperty('trimSpace') ? !!opt.trimSpace : true;\n\t\tthis.errRequired = opt.hasOwnProperty('errRequired')\n\t\t\t? opt.errRequired\n\t\t\t: self => new Err('delimStep.required', 'Expected to find \"{delim}\"', { delim: self.delimiter });\n\t}\n\n\tget delimiter() {\n\t\treturn this.delim;\n\t}\n\n\tparse(stream, state) {\n\t\tif (!stream) {\n\t\t\treturn this._setRequired(state);\n\t\t}\n\n\t\tif (this.trimSpace && stream.eatSpace()) {\n\t\t\tstate.addStep(this);\n\t\t\treturn null;\n\t\t}\n\n\t\tlet isMatch = stream.match(this.delim, true, true);\n\n\t\tif (!isMatch) {\n\t\t\tstate.backUp(stream);\n\t\t\treturn this._setRequired(state);\n\t\t}\n\n\t\t// Add followup steps\n\t\tif (this.next) {\n\t\t\tstate.addStep(this.next);\n\t\t}\n\n\t\treturn this.token;\n\t}\n\n\t_setRequired(state) {\n\t\tif (this.else) {\n\t\t\tstate.addStep(this.else);\n\t\t} else if (this.errRequired) {\n\t\t\tstate.setError(this.errRequired(this));\n\t\t}\n\t\treturn false;\n\t}\n}\n\nexport default DelimStep;\n","import { Elem, Txt } from 'modapp-base-component';\nimport FAIcon from 'components/FAIcon';\nimport './dialog.scss';\n\nconst BASE_ZINDEX = 500;\nlet openDialogs = [];\n\nfunction setZ(elem, z) {\n\telem.setAttribute('style', 'z-index:' + z);\n}\n\ndocument.addEventListener('keydown', e => {\n\tlet l = openDialogs.length;\n\tif (e.key == 'Escape' && l) {\n\t\topenDialogs[l - 1].close();\n\t}\n});\n\nlet overlay = new Elem(n => n.elem('div', { className: 'dialog--overlay' }));\n\nclass Dialog {\n\tconstructor(opt) {\n\t\tthis.opt = Object.assign({\n\t\t\tcontent: null,\n\t\t\ttitle: null,\n\t\t\tonClose: null,\n\t\t\tanimated: true,\n\t\t}, opt);\n\n\t\tthis.opt.className = (this.opt.className ? this.opt.className + ' ' : '') + 'dialog' + (this.opt.animated ? '' : ' dialog--noanim');\n\n\t\tthis.comp = null;\n\t}\n\n\topen() {\n\t\tif (this.comp) return;\n\n\t\tlet l = openDialogs.length;\n\t\tlet idx = BASE_ZINDEX + l * 2;\n\t\tif (!l) {\n\t\t\toverlay.render(document.body);\n\t\t}\n\t\tsetZ(overlay, idx);\n\n\t\tthis.content = typeof this.opt.content == 'function' ? this.opt.content(this) : this.opt.content;\n\t\tthis.comp = new Elem(n => n.elem('div', { className: 'dialog--container' }, [\n\t\t\tn.elem('div', this.opt, [\n\t\t\t\tn.elem('div', { className: 'dialog--head' }, [\n\t\t\t\t\tn.elem('button', { className: 'dialog--close iconbtn medium', events: { click: () => this.close() }}, [\n\t\t\t\t\t\tn.component(new FAIcon('close')),\n\t\t\t\t\t]),\n\t\t\t\t\tn.component(new Txt(typeof this.opt.title == 'function' ? this.opt.title(this) : this.opt.title, { tagName: 'h2' })),\n\t\t\t\t]),\n\t\t\t\tn.elem('div', { className: 'dialog--content-wrap' }, [\n\t\t\t\t\tn.elem('div', { className: 'dialog--content' }, [\n\t\t\t\t\t\tn.component(this.content),\n\t\t\t\t\t]),\n\t\t\t\t]),\n\t\t\t]),\n\t\t]));\n\n\t\tsetZ(this.comp, idx + 1);\n\t\topenDialogs.push(this);\n\n\t\tthis.comp.render(document.body);\n\t\treturn this;\n\t}\n\n\tclose() {\n\t\tif (!this.comp) return false;\n\n\t\tlet i = openDialogs.indexOf(this);\n\t\tif (i == -1) {\n\t\t\tthrow new Error(\"Dialog not found in openDialogs array\");\n\t\t}\n\n\t\tif (this.opt.onClose) {\n\t\t\tif (this.opt.onClose(this, this.content) === false) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\topenDialogs.splice(i, 1);\n\t\tlet l = openDialogs.length;\n\t\twhile (i < l) {\n\t\t\tsetZ(openDialogs[i].comp, BASE_ZINDEX + i * 2 + 1);\n\t\t\ti++;\n\t\t}\n\t\tif (l) {\n\t\t\tsetZ(overlay, BASE_ZINDEX + l * 2 - 2);\n\t\t} else {\n\t\t\toverlay.unrender();\n\t\t}\n\n\t\tthis.comp.unrender();\n\t\tthis.comp = null;\n\t\tthis.content = null;\n\t\treturn true;\n\t}\n\n\tgetContent() {\n\t\treturn this.content || null;\n\t}\n\n\t/**\n\t * Returns the container element for the dialog.\n\t * @returns {Component} Container element\n\t */\n\tgetContainer() {\n\t\treturn this.comp;\n\t}\n}\n\nexport default Dialog;\n","import Err from './Err';\n\n/**\n * ErrorStep tests of the stream matches the regex, and if so sets the error.\n */\nclass ErrorStep {\n\tconstructor(regex, err) {\n\t\tthis.regex = regex;\n\t\tthis.err = err || (match => new Err('errorStep.errorCommand', 'Erronous command \"{match}\".', { match }));\n\t}\n\n\tparse(stream, s) {\n\t\tif (!stream) return false;\n\n\t\tlet m = stream.match(this.regex);\n\t\tif (!m) {\n\t\t\treturn false;\n\t\t}\n\n\t\ts.setError(typeof this.err == 'function' ? this.err(m[1]) : this.err);\n\t\treturn 'error';\n\t}\n}\n\nexport default ErrorStep;\n","import Err from './Err';\nimport expandSelection from 'utils/expandSelection';\n\nconst expandRegex = /[a-vA-V0-9]/;\n/**\n * IDStep consumes a string representing an ID. Eg. #abcdefghij0123456789\n */\nclass IDStep {\n\n\t/**\n\t * Creates an instance of IDStep.\n\t * @param {string} id Id used as key when setting param values.\n\t * @param {object} [opt] Optional params.\n\t * @param {string} [opt.name] Name used in error outputs. Defaults to the id value.\n\t * @param {string} [opt.token] Token name. Defaults to 'entityid'.\n\t * @param {Array.<string>|(ctx: object) => string[]} [opt.list] Array or callback function returning array of available ID strings to use for tab completion.\n\t * @param {Step} [opt.next] Next step after a matched ID.\n\t * @param {Step} [opt.else] Step after if the ID is missing. Will disabled any errRequired set.\n\t * @param {?function} [opt.errRequired] Callback function that returns an error when it fails to match. Null means it is not required.: function(this)\n\t * @param {function} [opt.errInvalid] Callback function that returns an invalid error if the #\n\t */\n\tconstructor(id, opt) {\n\t\topt = opt || {};\n\t\tthis.id = id;\n\t\tthis.name = opt.name || id;\n\t\tthis.token = opt.token || 'entityid';\n\t\tthis.next = opt.next || null;\n\t\tthis.else = opt.else || null;\n\t\tthis.list = opt.list || null;\n\t\tthis.errRequired = opt.hasOwnProperty('errRequired')\n\t\t\t? opt.errRequired\n\t\t\t: self => new Err('idStep.required', 'There is no {name}. Expected a #-sign followed by 20 characters.', { name: self.name });\n\t\tthis.errInvalid = opt.errInvalid || ((self, m) => (\n\t\t\tnew Err('idStep.invalid', 'The {name} value \"#{value}\" is invalid. Expected the #-sign to be followed by 20 characters a-v or 0-9.', { name: self.name, value: m })\n\t\t));\n\t}\n\n\tparse(stream, state) {\n\t\tif (!stream) {\n\t\t\treturn this._setRequired(state);\n\t\t}\n\n\t\tstream.eatSpace();\n\n\t\tlet c = stream.next();\n\t\tif (c !== '#') {\n\t\t\tstate.backUp(stream);\n\t\t\treturn this._setRequired(state);\n\t\t}\n\n\t\t// Match until next word break\n\t\tlet m = stream.match(/^\\w*\\b/);\n\t\t// Validate the match\n\t\tif (!m || !m[0].match(/^[a-vA-V0-9]{20,20}$/)) {\n\t\t\tstate.setError(this.errInvalid(this, m));\n\t\t\treturn 'error';\n\t\t}\n\n\t\t// Add ID with lowercase\n\t\tstate.setParam(this.id, m[0].toLowerCase());\n\n\t\t// Add followup steps\n\t\tif (this.next) {\n\t\t\tstate.addStep(this.next);\n\t\t}\n\n\t\treturn this.token;\n\t}\n\n\t/**\n\t * Complete returns a completion list for the tab completion.\n\t * @param {string} str The matched text string\n\t * @param {number} pos The cursor position within the string\n\t * @param {CmdState} state State object\n\t * @returns {?object} Completion list in the format: { list, from, to }\n\t */\n\tcomplete(str, pos, state) {\n\t\tif (!this.list) return null;\n\n\t\tlet start = str.indexOf('#');\n\t\tif (start < 0 || pos <= start) return null;\n\n\t\tlet { from, to } = expandSelection(str, expandRegex, expandRegex, pos, pos);\n\t\tvar key = (str && str.slice(from, to).toLowerCase()) || '';\n\n\t\tlet ids = typeof this.list == 'function' ? this.list(state.getCtx()) : this.list;\n\t\tlet list = ids;\n\t\tlet found = {};\n\t\tif (key) {\n\t\t\tlist = [];\n\t\t\tfor (let id of ids) {\n\t\t\t\tif (id.substring(0, key.length) == key && !found[id]) {\n\t\t\t\t\tlist.push(id);\n\t\t\t\t\tfound[id] = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn list.length\n\t\t\t? { list, from, to }\n\t\t\t: null;\n\t}\n\n\t_setRequired(state) {\n\t\tif (this.else) {\n\t\t\tstate.addStep(this.else);\n\t\t} else if (this.errRequired) {\n\t\t\tstate.setError(this.errRequired(this));\n\t\t}\n\t\treturn false;\n\t}\n}\n\nexport default IDStep;\n","import { Elem } from 'modapp-base-component';\nimport Img from 'components/Img';\nimport './imgModal.scss';\n\nclass ImgModal {\n\tconstructor(src, opt) {\n\t\topt = Object.assign({\n\t\t\tonClose: null,\n\t\t}, opt);\n\t\topt.className = (opt.className ? opt.className + ' ' : '') + 'imgmodal';\n\t\topt.events = Object.assign({ click: () => this.close() }, opt.events);\n\t\tthis.opt = opt;\n\n\t\tthis.src = src;\n\n\n\t\tthis._onEsc = this._onEsc.bind(this);\n\n\t\tthis.comp = null;\n\t}\n\n\topen() {\n\t\tif (this.comp) return;\n\n\t\tdocument.addEventListener('keydown', this._onEsc);\n\n\t\tlet elem = new Elem(n => n.elem('div', this.opt, [\n\t\t\tn.component(new Img(this.src, { className: 'imgmodal--img' })),\n\t\t]));\n\t\telem.render(document.body);\n\t\tthis.comp = elem;\n\t\treturn this;\n\t}\n\n\tclose() {\n\t\tif (!this.comp) return false;\n\t\tthis.comp.unrender();\n\t\tthis.comp = null;\n\t\tdocument.removeEventListener('keydown', this._onEsc);\n\t\treturn true;\n\t}\n\n\t_onEsc(e) {\n\t\tif (!this.comp) return;\n\t\tif (e.key == 'Escape') {\n\t\t\tthis.close();\n\t\t}\n\t}\n}\n\nexport default ImgModal;\n","import isNormalizedPrefix from 'utils/isNormalizedPrefix';\nimport expandSelection from 'utils/expandSelection';\n\nfunction keyCompare(a, b) {\n\treturn a.key.localeCompare(b.key);\n}\n\n/**\n * ItemList is a list of items that may contain substeps.\n */\nclass ItemList {\n\n\t/**\n\t * Creates an instance of ItemList.\n\t * @param {object} [opt] Optional params.\n\t * @param {Array.<object>} [opt.items] Array of initial items. See addItem method for the definition.\n\t * @param {object} [opt.expandRegex] Left and right regexes uses for expanding a selection on complete. Null matches any character. Defaults to { left: null, right: /\\w/ }\n\t * @param {RegExp} [opt.regex] Regex used for matching. Must contain a single capturing parentheses. Defaults to /^\\s*([\\w\\d]+)\n\t * @param {function} [opt.compare] Compare function for sorting item. Defaults to (a, b) => a.key.localeCompare(b.key)\n\t */\n\tconstructor(opt) {\n\t\topt = opt || {};\n\t\tthis.regex = opt.regex || /^[\\p{L}\\p{N}]+/u;\n\t\tthis.expandRegex = opt.expandRegex || { left: null, right: /[\\p{L}\\p{N}]/u };\n\t\tthis.compare = opt.compare || keyCompare;\n\n\t\tthis._keys = {};\n\t\tthis._symbols = null;\n\t\tthis._items = [];\n\t\tif (Array.isArray(opt.items)) {\n\t\t\tfor (let item of opt.items) {\n\t\t\t\tthis.addItem(item);\n\t\t\t}\n\t\t}\n\t}\n\n\tget length() {\n\t\treturn this._items.length;\n\t}\n\n\t/**\n\t * Adds an item to the list.\n\t * @param {object|string} item Item object to add, or item key as a string.\n\t * @param {string} item.key Item key. Eg. 'say'.\n\t * @param {string} [item.value] Item value. For commands, it is usually a callback function.\n\t * @param {Step|Array.<CmdStep>} item.next Next step or steps to follow after the item.\n\t * @param {Array.<string>} [item.alias] A list of alias for the item. Eg. [ 's', '/say' ]\n\t * @param {string} [item.symbol] A single ascii symbol character for the item that may not otherwise match the regex. Eg. ':'\n\t * @returns {this}\n\t */\n\taddItem(item) {\n\t\titem = Object.assign({ value: item.key, next: null }, item);\n\t\tlet lc_key = item.key.toLowerCase();\n\t\tif (this._keys[lc_key]) {\n\t\t\tthrow new Error(\"Duplicate item key: \" + item.key);\n\t\t}\n\t\tthis._keys[lc_key] = item;\n\t\tthis._items.push(item);\n\t\tthis._items.sort(this.compare);\n\t\tif (item.alias) {\n\t\t\tfor (let alias of item.alias) {\n\t\t\t\tif (this._keys[alias.toLowerCase()]) {\n\t\t\t\t\tthrow new Error(\"Duplicate alias key: \" + alias);\n\t\t\t\t}\n\t\t\t\tthis._keys[alias] = item;\n\t\t\t}\n\t\t}\n\t\tif (item.symbol) {\n\t\t\tif (!this._symbols) {\n\t\t\t\tthis._symbols = {};\n\t\t\t} else if (this._symbols[item.symbol]) {\n\t\t\t\tthrow new Error(\"Duplicate symbol: \" + item.symbol);\n\t\t\t}\n\t\t\tthis._symbols[item.symbol] = item;\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Get array of item objects.\n\t * @returns {Array.<object>} Item objects.\n\t */\n\tgetItems() {\n\t\treturn this._items;\n\t}\n\n\t/**\n\t * Gets the item with the specific key (or alias or token character).\n\t * @param {string} key Item key.\n\t * @param {object} ctx Cmd context object.\n\t * @returns {{key: string, value: any, error: null | Err } | null} The formatted key and any value, or error. Null if the key was not found.\n\t */\n\tgetItem(key, ctx) {\n\t\tlet item = null;\n\t\tlet symbol = false;\n\t\tif (key.length == 1 && this._symbols) {\n\t\t\titem = this._symbols[key];\n\t\t}\n\t\tif (item) {\n\t\t\tsymbol = true;\n\t\t} else {\n\t\t\titem = this._keys[key.toLowerCase()];\n\t\t}\n\t\treturn item ? { key: item.key, value: item.value, next: item.next, symbol } : null;\n\t}\n\n\tconsume(stream) {\n\t\t// Do we have token characters? Check if next character is one.\n\t\tif (this._symbols) {\n\t\t\tlet c = stream.peek();\n\t\t\tif (c !== null) {\n\t\t\t\tif (this._symbols[c]) {\n\t\t\t\t\t // Token found. Consume the character\n\t\t\t\t\tstream.next();\n\t\t\t\t\treturn c;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Match using regex\n\t\tlet m = stream.match(this.regex);\n\t\treturn (m && m[0]) || null;\n\t}\n\n\tcomplete(str, pos, ctx, inline) {\n\t\tlet { from, to } = expandSelection(str, this.expandRegex.left, this.expandRegex.right, 0, pos);\n\n\t\tvar prefix = (str && str.slice(from, to).toLowerCase().replace(/\\s+/g, ' ')) || '';\n\n\t\tvar items = [];\n\t\tvar aliases = [];\n\t\tfor (let item of this._items) {\n\t\t\t// Is the item a match?\n\t\t\tif (isNormalizedPrefix(prefix, item.key.toLowerCase())) {\n\t\t\t\titems.push(item.key);\n\t\t\t// Check for matches against alias\n\t\t\t} else if (item.alias) {\n\t\t\t\tfor (let a of item.alias) {\n\t\t\t\t\tif (isNormalizedPrefix(prefix, a.toLowerCase())) {\n\t\t\t\t\t\taliases.push(a);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn { list: items.concat(aliases), from, to };\n\t}\n}\n\nexport default ItemList;\n","import Err from './Err';\n\n/**\n * ListStep is a generic list of tokens for commands.\n */\nclass ListStep {\n\n\t/**\n\t * Creates an instance of ListStep.\n\t * @param {string} id Id used as key when setting param values.\n\t * @param {TokenList} list Token list.\n\t * @param {object} [opt] Optional params.\n\t * @param {string} [opt.name] Name used in error outputs. Defaults to the id value.\n\t * @param {string} [opt.textId] Id used as key for the matched text even when no match is found. Sets errNotFound to default to null.\n\t * @param {string} [opt.token] Token name. Defaults to 'listitem'.\n\t * @param {string} [opt.delimToken] Token name for delimiters. Defaults to 'delim'.\n\t * @param {boolean} [opt.trimSpace] Flag indicating if initial space should be trimmed. Defaults to true.\n\t * @param {Step} [opt.next] Next step after matching any item (and after doing any item steps).\n\t * @param {Step} [opt.else] Step after if the not matching any item. Will disabled any errRequired set.\n\t * @param {?function} [opt.errNotFound] Callback function that returns an error when items is not found. Null means mismatch is not an error: function(this, match)\n\t * @param {?function} [opt.errRequired] Callback function that returns an error when it fails to match. Null means it is not required: function(this)\n\t * @param {function} [opt.onExec] Callback function called on execution of the command. function(state, char)\n\t */\n\tconstructor(id, list, opt) {\n\t\topt = opt || {};\n\t\tthis.id = id;\n\t\tthis.list = list;\n\t\tthis.name = opt.name || id;\n\t\tthis.textId = opt.textId || null;\n\t\tthis.token = opt.hasOwnProperty('token') ? opt.token : 'listitem';\n\t\tthis.delimToken = opt.delimToken || 'delim';\n\t\tthis.trimSpace = opt.hasOwnProperty('trimSpace') ? !!opt.trimSpace : true;\n\t\tthis.next = opt.next || null;\n\t\tthis.else = opt.else || null;\n\t\tthis.errNotFound = opt.hasOwnProperty('errNotFound')\n\t\t\t? opt.errNotFound\n\t\t\t: this.textId\n\t\t\t\t? null\n\t\t\t\t: list.errNotFound || ((self, m) => new Err('listStep.itemNotFound', 'There is no {name} named \"{match}\".', { name: self.name, match: m }));\n\t\tthis.errRequired = opt.hasOwnProperty('errRequired')\n\t\t\t? opt.errRequired\n\t\t\t: self => new Err('listStep.required', 'There is no {name}.', { name: self.name });\n\t\tthis.onExec = opt.onExec || null;\n\n\t}\n\n\tparse(stream, state) {\n\t\tif (!stream) {\n\t\t\treturn this._setRequired(state);\n\t\t}\n\n\t\tif (this.trimSpace && stream.eatSpace()) {\n\t\t\tstate.addStep(this);\n\t\t\treturn null;\n\t\t}\n\n\t\tlet match = this.list.consume(stream, state.getCtx());\n\n\t\tif (typeof match != 'string') {\n\t\t\tstate.backUp(stream);\n\t\t\treturn this._setRequired(state);\n\t\t}\n\n\t\tif (this.textId) {\n\t\t\tstate.setParam(this.textId, match);\n\t\t}\n\n\t\tlet item = this.list.getItem(match, state.getCtx());\n\n\t\tif (!item) {\n\t\t\tif (this.errNotFound) {\n\t\t\t\tstate.setError(this.errNotFound(this, match, state));\n\t\t\t\treturn 'error';\n\t\t\t}\n\n\t\t\t// No item but with textId is still considered a successful match\n\t\t\tif (this.textId) {\n\t\t\t\t// Add follow-up steps.\n\t\t\t\tif (this.next) {\n\t\t\t\t\tstate.addStep(this.next);\n\t\t\t\t}\n\t\t\t\treturn this.token;\n\t\t\t}\n\n\t\t\tstate.backUp(stream);\n\t\t\treturn false;\n\t\t}\n\n\t\tif (item.error) {\n\t\t\tstate.setError(item.error);\n\t\t\treturn 'error';\n\t\t}\n\n\t\tstate.setParam(this.id, item.value);\n\t\tif (this.onExec) {\n\t\t\tstate.addOnExec((state) => this.onExec(state, item));\n\t\t}\n\n\t\t// Add follow-up steps.\n\t\tif (this.next) {\n\t\t\tstate.addStep(this.next);\n\t\t}\n\t\t// Item steps to be handled before follow-up steps.\n\t\tif (item.next) {\n\t\t\tstate.addStep(item.next);\n\t\t}\n\t\treturn item.symbol ? this.delimToken : this.token;\n\t}\n\n\t/**\n\t * Complete returns a completion list for the tab completion.\n\t * @param {string} str The matched text string\n\t * @param {number} pos The cursor position within the string\n\t * @param {CmdState} state State object\n\t * @returns {?object} Completion list in the format: { list, from, to }\n\t */\n\tcomplete(str, pos, state) {\n\t\tif (typeof this.list.complete != 'function') return null;\n\n\t\tlet trimmed = this.trimSpace ? str.trimStart() : str;\n\t\tlet diff = str.length - trimmed.length;\n\t\tif (diff > pos) {\n\t\t\ttrimmed = str.slice(pos);\n\t\t\tdiff = pos;\n\t\t}\n\t\tlet range = this.list.complete(trimmed, pos - diff, state.getCtx());\n\t\treturn range\n\t\t\t? { list: range.list, from: range.from + diff, to: range.to + diff }\n\t\t\t: null;\n\t}\n\n\t_setRequired(state) {\n\t\tif (this.else) {\n\t\t\tstate.addStep(this.else);\n\t\t} else if (this.errRequired) {\n\t\t\tstate.setError(this.errRequired(this));\n\t\t}\n\t\treturn false;\n\t}\n}\n\nexport default ListStep;\n","import DelimStep from 'classes/DelimStep';\n\n/**\n * MultiDelimStep consumes delimiters and adds steps based on it.\n */\nclass MultiDelimStep {\n\n\t/**\n\t * Creates an instance of MultiDelimStep.\n\t * @param {object | Array<{delim: regexp|string, step: Step}>} delims Delimiters. Value is the option object for DelimStep.\n\t * @param {object} [opt] Optional params.\n\t * @param {boolean} [opt.trimSpace] Flag indicating if initial space should be trimmed. Defaults to true.\n\t */\n\tconstructor(delims, opt) {\n\t\tthis.opt = opt || {};\n\t\tif (!Array.isArray(delims)) {\n\t\t\tdelims = delims || {};\n\t\t\tdelims = Object.keys(delims).map(k => ({ delim: k, step: delims[k] }));\n\t\t}\n\t\tthis.delims = delims;\n\t\tthis.trimSpace = this.opt.hasOwnProperty('trimSpace') ? !!this.opt.trimSpace : true;\n\t}\n\n\tparse(stream, state) {\n\t\tif (!stream) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (this.trimSpace) {\n\t\t\tstream.eatSpace();\n\t\t}\n\n\t\tfor (let i = 0; i < this.delims.length; i++) {\n\t\t\tlet d = this.delims[i];\n\t\t\tlet isMatch = stream.match(d.delim, true, true);\n\t\t\tif (isMatch) {\n\t\t\t\tstate.backUp(stream);\n\n\t\t\t\t// Add a new MultiDelimStep, but without the matched delim.\n\t\t\t\tif (this.delims.length > 1) {\n\t\t\t\t\tlet splicedDelims = Array.from(this.delims);\n\t\t\t\t\tsplicedDelims.splice(i, 1);\n\t\t\t\t\tstate.addStep(new MultiDelimStep(splicedDelims, this.opt));\n\t\t\t\t}\n\t\t\t\tstate.addStep(new DelimStep(d.delim, Object.assign({ token: this.opt.token }, d.step)));\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tstate.backUp(stream);\n\t\treturn false;\n\t}\n}\n\nexport default MultiDelimStep;\n","import Err from './Err';\n\n/**\n * NumberStep consumes a number.\n */\nclass NumberStep {\n\n\t/**\n\t * Creates an instance of NumberStep.\n\t * @param {string} id Id used as key when setting param values.\n\t * @param {object} [opt] Optional params.\n\t * @param {string} [opt.name] Name used in error outputs. Defaults to the id value.\n\t * @param {string} [opt.token] Token name. Defaults to 'number'.\n\t * @param {Step} [opt.next] Next step after a matched string.\n\t * @param {RegExp} [opt.regex] Regex used for matching. Defaults to /^-?\\d*\\.?\\d* / (without the extra space at the end)\n\t * @param {boolean} [opt.trimSpace] Flag indicating if initial space should be trimmed. Defaults to true.\n\t * @param {bool} [opt.errFloat] Callback function that returns an error on float values. Null means floats are allowed.: function(this)\n\t * @param {?function} [opt.errRequired] Callback function that returns an error when it fails to match. Null means it is not required.: function(this)\n\t */\n\tconstructor(id, opt) {\n\t\topt = opt || {};\n\t\tthis.id = id;\n\t\tthis.name = opt.name || id;\n\t\tthis.token = opt.token || 'number';\n\t\tthis.next = opt.next || null;\n\t\tthis.regex = opt.regex || /^-?\\d*\\.?\\d*/;\n\t\tthis.trimSpace = opt.hasOwnProperty('trimSpace') ? !!opt.trimSpace : true;\n\t\tthis.errFloat = opt.hasOwnProperty('errFloat')\n\t\t\t? opt.errFloat\n\t\t\t: self => new Err('numberStep.isFloat', 'Decimals are not allowed for {name}.', { name: self.name });\n\t\tthis.errRequired = opt.hasOwnProperty('errRequired')\n\t\t\t? opt.errRequired\n\t\t\t: self => new Err('numberStep.required', 'There is no {name}.', { name: self.name });\n\t}\n\n\tblank(state) {\n\t\tstate.setParam(this.id, (state.getParam(this.id) || \"\") + \"\\n\");\n\t}\n\n\tparse(stream, state) {\n\t\tif (!stream) {\n\t\t\treturn this._setRequired(state);\n\t\t}\n\n\t\tif (this.trimSpace && stream.eatSpace()) {\n\t\t\tstate.addStep(this);\n\t\t\treturn null;\n\t\t}\n\n\t\tlet m = stream.match(this.regex);\n\n\t\tif (!m || !m[0].length || m[0] == \".\") {\n\t\t\tstate.backUp(stream);\n\t\t\treturn this._setRequired(state);\n\t\t}\n\n\t\tif (this.errFloat && m[0].match(/\\..*[1-9]/)) {\n\t\t\tstate.backUp(stream);\n\t\t\tstate.setError(this.errFloat(this));\n\t\t\treturn false;\n\t\t}\n\n\t\tlet hasMatched = state.getState(this.id);\n\t\tif (!hasMatched && this.next) {\n\t\t\tstate.addStep(this.next);\n\t\t}\n\n\t\tstate.setParam(this.id, Number(m[0]));\n\n\t\treturn this.token;\n\t}\n\n\t_setRequired(state) {\n\t\tif (!state.getState(this.id) && this.errRequired) {\n\t\t\tstate.setError(this.errRequired(this));\n\t\t}\n\t\treturn false;\n\t}\n}\n\nexport default NumberStep;\n","import DelimStep from 'classes/DelimStep';\n\n/**\n * RepeatStep repeats a step until it no longer matches any token, or optionally\n * until a delimiter doesn't match.\n */\nclass RepeatStep {\n\n\t/**\n\t * Creates an instance of RepeatStep.\n\t * @param {string} id Step id.\n\t * @param {function} stepFactory Factory function returning step to repeat, which should add the provided nextStep on match: function(nextStep, idx) -> Step\n\t * @param {object} [opt] Optional params.\n\t * @param {function} [opt.each] Callback function called each time the step has matched: function(state, step, idx)\n\t * @param {string} [opt.delimiter] Delimiter string. Defaults to null which means no delimiter.\n\t */\n\tconstructor(id, stepFactory, opt) {\n\t\topt = opt || {};\n\t\tthis.id = id;\n\t\tthis.stepFactory = stepFactory;\n\t\tthis.each = opt.each || null;\n\t\tthis.delim = opt.delimiter || null;\n\t}\n\n\tparse(stream, state) {\n\t\tlet st = state.getState(this.id);\n\t\t// No state? Then we bootstrap it.\n\t\tif (!st) {\n\t\t\tstate.addStep(this._setStep(state, 0));\n\t\t\treturn false;\n\t\t}\n\n\t\tif (this.each) {\n\t\t\tthis.each(state, st.step, st.idx);\n\t\t}\n\n\t\tlet step = this._setStep(state, st.idx + 1);\n\t\tstate.addStep(this.delim\n\t\t\t? new DelimStep(this.delim, { errRequired: null, next: step })\n\t\t\t: step,\n\t\t);\n\t\treturn false;\n\t}\n\n\t_setStep(state, idx) {\n\t\tlet step = this.stepFactory(this, idx, state);\n\t\tstate.setState(this.id, { idx, step });\n\t\treturn step;\n\t}\n}\n\nexport default RepeatStep;\n","import ErrorStep from './ErrorStep';\nimport Err from './Err';\n\n/**\n * TextStep consumes a string of text.\n */\nclass TextStep {\n\n\t/**\n\t * Creates an instance of TextStep.\n\t * @param {string} id Id used as key when setting param values.\n\t * @param {object} [opt] Optional params.\n\t * @param {string} [opt.name] Name used in error outputs. Defaults to the id value.\n\t * @param {RegExp} [opt.regex] Regex used for matching. Defaults to /^.*$/\n\t * @param {number|Function} [opt.maxLength] Max length of matched characters, or a function that returns max length. Null means no length requirements.\n\t * @param {string|function} [opt.token] Token name. Defaults to 'text'. Functions should have the signature: (state, TextStep) => {string}\n\t * @param {Step} [opt.next] Next step after a matched string.\n\t * @param {boolean} [opt.trimSpace] Flag indicating if initial space should be trimmed. Defaults to true.\n\t * @param {boolean} [opt.spellcheck] Flag indicating if text should be spell checked. Defaults to true.\n\t * @param {bool} [opt.spanLines] Flag to tell if the text can be spanned across multiple lines. Defaults to false.\n\t * @param {Completer} [opt.completer] List that implements a complete function: { complete: function(str, pos, ctx, inline) -> ?{ list, to, from } }\n\t * @param {?function} [opt.errRequired] Callback function that returns an error when it fails to match or the match is empty. Null means it is not required.: function(this)\n\t * @param {?function} [opt.errTooLong] Callback function that returns an error when max length is exceeded: function(this, maxLength)\n\t * @param {object} [opt.formatText] Options for formatted text.\n\t */\n\tconstructor(id, opt) {\n\t\topt = opt || {};\n\t\tthis.id = id;\n\t\tthis.name = opt.name || id;\n\t\tthis.regex = opt.regex || /^.*/;\n\t\tlet maxLength = opt.hasOwnProperty('maxLength') ? opt.maxLength : null;\n\t\tthis.maxLengthCallback = typeof maxLength == 'function' ? maxLength : () => maxLength;\n\t\tthis.token = opt.token || 'text';\n\t\tthis.next = opt.next || null;\n\t\tthis.trimSpace = opt.hasOwnProperty('trimSpace') ? !!opt.trimSpace : true;\n\t\tthis.spanLines = opt.hasOwnProperty('spanLines') ? !!opt.spanLines : false;\n\t\tthis.useSpellcheck = opt.hasOwnProperty('spellcheck') ? !!opt.spellcheck : true;\n\t\tthis.completer = opt.completer || null;\n\t\tthis.errRequired = opt.hasOwnProperty('errRequired')\n\t\t\t? opt.errRequired\n\t\t\t: self => new Err('textStep.required', 'There is no {name}.', { name: self.name });\n\t\tthis.errTooLong = opt.errTooLong || ((self, maxLength) => new Err('textStep.exceedsMaxLength', 'Exceeds max length of {maxLength} characters.', { maxLength }));\n\t\tthis._formatText = opt.formatText ? Object.assign({ id }, typeof opt.formatText == 'object' ? opt.formatText : null) : null;\n\t}\n\n\tget spellcheck() {\n\t\treturn this.useSpellcheck;\n\t}\n\n\tblank(state) {\n\t\tstate.setParam(this.id, (state.getParam(this.id) || \"\") + \"\\n\");\n\t}\n\n\tparse(stream, state) {\n\t\tif (!stream) {\n\t\t\treturn this._setRequired(state);\n\t\t}\n\n\t\tif (this.trimSpace && stream.eatSpace()) {\n\t\t\tstate.addStep(this);\n\t\t\treturn null;\n\t\t}\n\n\t\tlet m = stream.match(this.regex);\n\n\t\tif (!m || !m[0].length) {\n\t\t\tstate.backUp(stream);\n\t\t\treturn this._setRequired(state);\n\t\t}\n\n\t\tlet hasMatched = state.getState(this.id);\n\t\tlet full = (hasMatched ? (state.getParam(this.id) || \"\") + \"\\n\" : \"\") + m[0];\n\n\t\t// Validate max length\n\t\tlet maxLength = this.maxLengthCallback();\n\t\tif (maxLength !== null && full.length > maxLength) {\n\t\t\tstream.backUp(full.length - maxLength);\n\t\t\tif (this.errTooLong) {\n\t\t\t\tstate.addStep(new ErrorStep(this.regex, this.errTooLong(this, maxLength)));\n\t\t\t\treturn this._token(state);\n\t\t\t}\n\t\t\tfull = full.slice(0, maxLength);\n\t\t}\n\n\t\tif (!hasMatched && this.next) {\n\t\t\tstate.addStep(this.next);\n\t\t}\n\n\t\tif (this.spanLines && stream.eol()) {\n\t\t\tstate.setParam(this.id, full);\n\t\t\tstate.setState(this.id, true); // True means the first line is set\n\t\t\tstate.addStep(this);\n\t\t} else {\n\t\t\tstate.setParam(this.id, full);\n\t\t}\n\n\t\treturn this._token(state);\n\t}\n\n\t_token(state) {\n\t\treturn typeof this.token == 'function' ? this.token(state, this) : this.token;\n\t}\n\n\t/**\n\t * Complete returns a completion list for tab completion using the\n\t * completer.\n\t * @param {string} str The matched text string\n\t * @param {number} pos The cursor position within the string\n\t * @param {CmdState} state State object\n\t * @returns {?object} Completion list in the format: { list, from, to }\n\t */\n\tcomplete(str, pos, state) {\n\t\tif (!this.completer) return null;\n\n\t\tlet trimmed = this.trimSpace ? str.trimStart() : str;\n\t\tlet diff = str.length - trimmed.length;\n\t\tlet range = this.completer.complete(trimmed, pos - diff, state.getCtx(), true);\n\t\treturn range\n\t\t\t? { list: range.list, from: range.from + diff, to: range.to + diff }\n\t\t\t: null;\n\t}\n\n\tformatText() {\n\t\treturn this._formatText;\n\t}\n\n\t_setRequired(state) {\n\t\tif (!state.getState(this.id) && this.errRequired) {\n\t\t\tstate.setError(this.errRequired(this));\n\t\t}\n\t\treturn false;\n\t}\n}\n\nexport default TextStep;\n","import isNormalizedPrefix from 'utils/isNormalizedPrefix';\nimport expandSelection from 'utils/expandSelection';\n\n/**\n * TokenList is a generic list of tokens from an external source, such as a collection.\n */\nclass TokenList {\n\n\t/**\n\t * Creates an instance of ItemList.\n\t * @param {function} getTokens Callback function that returns an iterable list of token items.\n\t * @param {object} [opt] Optional params.\n\t * @param {RegExp} [opt.regex] Regex used for matching. Must contain a single capturing parentheses. Defaults to /^\\s*(\\w+)/\n\t * @param {object} [opt.expandRegex] Left and right regexes uses for expanding a selection on complete. Null matches any character. Defaults to { left: null, right: /\\w/ }\n\t * @param {function} [opt.isMatch] Callback function that returns an item object if the key matches the token, otherwise false: function(tokenItem, key) -> { value }\n\t * @param {function} [opt.isPrefix] Callback function that returns a key string if the key is a prefix of the token, otherwise null: function(tokenItem, prefix) -> ?string\n\t */\n\tconstructor(getTokens, opt) {\n\t\topt = opt || {};\n\t\tthis.regex = opt.regex || /^([\\w]+)/;\n\t\tthis.expandRegex = opt.expandRegex || { left: null, right: /\\w/ };\n\t\tthis.getTokens = getTokens;\n\t\tthis.isMatch = opt.isMatch || ((t, k) => t.key === k ? t : false);\n\t\tthis.isPrefix = opt.isPrefix || ((t, prefix) => isNormalizedPrefix(prefix, t.id));\n\t}\n\n\tconsume(stream) {\n\t\t// Match using regex\n\t\tlet m = stream.match(this.regex);\n\t\treturn (m && m[1]) || null;\n\t}\n\n\n\t/**\n\t * Gets a list item by key.\n\t * @param {string} key Item key.\n\t * @param {object} ctx Cmd context object.\n\t * @returns {{key: string, value: any, error: null | Err } | null} The formatted key and any value, or error. Null if the key was not found.\n\t */\n\tgetItem(key, ctx) {\n\t\tkey = key.toLowerCase().replace(/\\s+/g, ' ');\n\t\tlet tokens = this.getTokens(ctx);\n\t\tif (!tokens) {\n\t\t\treturn null;\n\t\t}\n\n\t\tfor (let t of tokens) {\n\t\t\tlet item = this.isMatch(t, key);\n\t\t\tif (item) {\n\t\t\t\treturn item;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tcomplete(str, pos, ctx, inline) {\n\t\tlet { from, to } = expandSelection(str, this.expandRegex.left, this.expandRegex.right, 0, pos);\n\n\t\tvar key = (str && str.slice(from, to).toLowerCase().replace(/\\s+/g, ' ')) || '';\n\t\tlet tokens = this.getTokens(ctx, key);\n\n\t\tlet list = [];\n\t\tlet found = {};\n\t\tfor (let t of tokens) {\n\t\t\tlet m = this.isPrefix(t, key);\n\t\t\tif (m && !found[m]) {\n\t\t\t\tlist.push(m);\n\t\t\t\tfound[m] = true;\n\t\t\t}\n\t\t}\n\n\t\treturn list.length ? { list, from, to } : null;\n\t}\n}\n\n\nexport default TokenList;\n","/**\n * ValueStep only sets a param value without consuming anything from the stream.\n */\nclass ValueStep {\n\tconstructor(id, value, opt) {\n\t\topt = opt || {};\n\t\tthis.id = id;\n\t\tthis.value = value;\n\t\tthis.next = opt.next || null;\n\t}\n\n\tparse(stream, state) {\n\t\tstate.setParam(this.id, this.value);\n\t\tif (this.next) {\n\t\t\tstate.addStep(this.next);\n\t\t}\n\t\treturn null;\n\t}\n}\n\nexport default ValueStep;\n","import { RootElem } from 'modapp-base-component';\nimport autocompleter from 'autocompleter';\nimport './autocomplete.scss';\n\n/**\n * AutoComplete is a wrapper around https://github.com/kraaden/autocomplete.\n *\n * The options may contain any option from {@link https://github.com/jirenius/modapp-base-component/blob/master/src/RootElem.js|RootElem}\n * and options of {@link https://github.com/kraaden/autocomplete|autocomplete}.\n * @param {object} [opt] Options.\n * @param {object} [opt.innerClassName] Class names for the autocomplete dropdown.\n */\nclass AutoComplete extends RootElem {\n\n\tconstructor(value, opt) {\n\t\tif (typeof value == 'object' && value !== null) {\n\t\t\topt = value;\n\t\t\tvalue = \"\";\n\t\t}\n\t\topt = Object.assign({ attributes: null, properties: null }, opt);\n\t\topt.attributes = Object.assign({ type: 'text' }, opt.attributes, { value });\n\t\topt.properties = Object.assign({}, opt.properties, { value });\n\t\tsuper('input', opt);\n\t\tlet onSelect = opt.onSelect;\n\t\tif (onSelect) {\n\t\t\topt.onSelect = (item) => {\n\t\t\t\tonSelect(this, item);\n\t\t\t};\n\t\t}\n\t\tlet fetch = opt.fetch;\n\t\tif (fetch) {\n\t\t\topt.fetch = (text, update) => {\n\t\t\t\tfetch(text, update, this);\n\t\t\t};\n\t\t}\n\n\t\tthis._onCustomize = this._onCustomize.bind(this);\n\t\tthis._onMutation = this._onMutation.bind(this);\n\t\tthis.opt = opt;\n\t\tthis.auto = null;\n\t\tthis.selecting = false;\n\t}\n\n\trender(el) {\n\t\tlet rel = super.render(el);\n\t\tthis.auto = autocompleter(Object.assign({}, this.opt, { input: rel, className: this.opt.innerClassName, customize: this._onCustomize }));\n\t\tthis.observer = MutationObserver && new MutationObserver(this._onMutation);\n\t\tthis.observer.observe(document.body, { childList: true, subtree: false });\n\t\treturn rel;\n\t}\n\n\tunrender() {\n\t\tif (this.auto) {\n\t\t\tthis.auto.destroy();\n\t\t\tthis.auto = null;\n\t\t\tif (this.observer) {\n\t\t\t\tthis.observer.disconnect();\n\t\t\t\tthis.observer = null;\n\t\t\t}\n\t\t\tthis.selecting = false;\n\t\t\tthis.container = null;\n\t\t}\n\t\tsuper.unrender();\n\t}\n\n\tisSelecting() {\n\t\treturn this.selecting;\n\t}\n\n\t_onCustomize(input, inputRect, container) {\n\t\tthis.selecting = true;\n\t\tthis.container = container;\n\t}\n\n\t_onMutation() {\n\t\tthis.selecting = this.container && this.container.parentNode == document.body;\n\t\tif (!this.selecting) {\n\t\t\tthis.container = null;\n\t\t}\n\t}\n}\n\nexport default AutoComplete;\n","import { Elem, Context } from 'modapp-base-component';\nimport { CollectionList, ModelTxt, ModelComponent } from 'modapp-resource-component';\nimport { ModelToCollection, ModelWrapper } from 'modapp-resource';\nimport { isResError } from 'resclient';\nimport FAIcon from './FAIcon';\nimport * as tooltip from 'utils/tooltip';\nimport './charTagsList.scss';\n\nfunction staticClone(tags) {\n\ttags = Object.assign({}, tags?.props || tags);\n\tfor (let k in tags) {\n\t\tlet t = tags[k];\n\t\ttags[k] = t && t.props ? Object.assign({}, t.props) : t;\n\t}\n\treturn tags;\n}\n\nfunction isRoleTag(tag) {\n\treturn !!(tag.role || tag.idRole);\n}\n\nconst prefOrder = {\n\tlike: 0,\n\tdislike: 1,\n};\n\nexport function hasTags(tags) {\n\tif (tags) {\n\t\ttags = tags.props ? tags.props : tags;\n\t\tfor (let k in tags) {\n\t\t\tif (!isResError(tags[k])) return true;\n\t\t}\n\t}\n\treturn false;\n}\n\n/**\n * CharTagsList shows a list of tags.\n */\nclass CharTagsList {\n\n\t/**\n\t * Creates an instance of CharTagsList\n\t * @param {Model} tags Model of char tags.\n\t * @param {object} [opt] Optional parameters.\n\t * @param {boolean} [opt.static] Boolean telling if the tags should be static, not changing on updates. Defaults to false.\n\t * @param {boolean} [opt.onEdit] Callback called on edit icon click. Defaults to hiding the edit icon. function(tag, pref, tags)\n\t * @param {boolean} [opt.onDelete] Callback called on delete icon click. Defaults to hiding the delete icon. function(tag, pref, tags)\n\t * @param {string} [opt.tooltipMargin] Tooltip margin to use. May be 'm'.\n\t * @param {EventBus} [opt.eventBus] Event bus.\n\t */\n\tconstructor(tags, opt) {\n\t\topt = Object.assign({ horizontal: true }, opt);\n\t\topt.className = 'chartagslist' + (opt.className ? ' ' + opt.className : '');\n\t\tif (opt.static) {\n\t\t\ttags = staticClone(tags);\n\t\t}\n\t\tthis.opt = opt;\n\t\tthis.tags = tags;\n\t}\n\n\n\trender(el) {\n\t\tlet onEdit = this.opt.onEdit;\n\t\tlet onDelete = this.opt.onDelete;\n\t\tthis.elem = new Context(\n\t\t\t() => new ModelToCollection(new ModelWrapper(this.tags, {\n\t\t\t\tmap: (k, v) => ({ key: k, pref: k.slice(k.lastIndexOf('_') + 1), tag: v }),\n\t\t\t\tfilter: (k, v) => !isResError(v),\n\t\t\t\teventBus: this.opt.eventBus,\n\t\t\t}), {\n\t\t\t\tcompare: (a, b) => {\n\t\t\t\t\tlet at = a.value.tag;\n\t\t\t\t\tlet bt = b.value.tag;\n\t\t\t\t\treturn isRoleTag(bt) - isRoleTag(at) ||\n\t\t\t\t\t\tprefOrder[a.value.pref] - prefOrder[b.value.pref] ||\n\t\t\t\t\t\tbt.custom - at.custom ||\n\t\t\t\t\t\tat.key.localeCompare(bt.key) ||\n\t\t\t\t\t\tat.id.localeCompare(bt.id);\n\t\t\t\t},\n\t\t\t}),\n\t\t\tcol => {\n\t\t\t\tcol.getModel().dispose();\n\t\t\t\tcol.dispose();\n\t\t\t},\n\t\t\tcol => new Elem(n => n.elem('div', { className: this.opt.className }, [\n\t\t\t\tn.component(new CollectionList(\n\t\t\t\t\tcol,\n\t\t\t\t\tcont => new ModelComponent(\n\t\t\t\t\t\tcont.tag,\n\t\t\t\t\t\tnew Elem(n => n.elem('div', {\n\t\t\t\t\t\t\tclassName: 'chartagslist--tag ' + (isRoleTag(cont.tag) ? 'title' : cont.pref) + (onEdit ? ' editable' : ''),\n\t\t\t\t\t\t\tevents: onEdit\n\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\tclick: (c, ev) => {\n\t\t\t\t\t\t\t\t\t\tonEdit(cont.tag, cont.pref, this.tags);\n\t\t\t\t\t\t\t\t\t\tev.stopPropagation();\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\tclick: (c, ev) => {\n\t\t\t\t\t\t\t\t\t\tthis.tooltip = tooltip.click(ev.currentTarget.parentElement, cont.tag.desc, { margin: this.opt.tooltipMargin });\n\t\t\t\t\t\t\t\t\t\tev.stopPropagation();\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tmouseenter: (c, ev) => {\n\t\t\t\t\t\t\t\t\t\tthis.tooltip = tooltip.mouseEnter(ev.currentTarget.parentElement, cont.tag.desc, { margin: this.opt.tooltipMargin });\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tmouseleave: (c, ev) => {\n\t\t\t\t\t\t\t\t\t\tthis.tooltip = tooltip.mouseLeave(ev.currentTarget.parentElement);\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}, [\n\t\t\t\t\t\t\tn.component(new ModelTxt(cont.tag, m => m.key)),\n\t\t\t\t\t\t\tn.component(onDelete ? new Elem(n => n.elem('button', {\n\t\t\t\t\t\t\t\tclassName: 'chartagslist--delete',\n\t\t\t\t\t\t\t\tevents: {\n\t\t\t\t\t\t\t\t\tclick: (c, e) => {\n\t\t\t\t\t\t\t\t\t\tonDelete(cont.tag, cont.pref, this.tags);\n\t\t\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t}, [\n\t\t\t\t\t\t\t\tn.component(new FAIcon('times')),\n\t\t\t\t\t\t\t])) : null),\n\t\t\t\t\t\t])),\n\t\t\t\t\t\t(m, c) => {\n\t\t\t\t\t\t\tc[m.desc ? 'addClass' : 'removeClass']('hasdesc');\n\t\t\t\t\t\t\tc[m.custom ? 'addClass' : 'removeClass']('custom');\n\t\t\t\t\t\t},\n\t\t\t\t\t),\n\t\t\t\t\t{\n\t\t\t\t\t\tclassName: 'chartagslist--list',\n\t\t\t\t\t\tsubClassName: () => 'chartagslist--item',\n\t\t\t\t\t\thorizontal: true,\n\t\t\t\t\t},\n\t\t\t\t)),\n\t\t\t])),\n\t\t);\n\t\treturn this.elem.render(el);\n\t}\n\n\tunrender() {\n\t\tif (this.elem) {\n\t\t\tthis.elem.unrender();\n\t\t\tthis.elem = null;\n\t\t}\n\t\tif (this.tooltip) {\n\t\t\tthis.tooltip.close();\n\t\t\tthis.tooltip = null;\n\t\t}\n\t}\n}\n\nexport default CharTagsList;\n","import { RootElem } from 'modapp-base-component';\nimport { anim } from 'modapp-utils';\n\n/**\n * Collapser is component wrapper that can collapse the height of a component\n */\nclass Collapser extends RootElem {\n\n\t/**\n\t * Creates an instance of Collapser\n\t * @param {?Component} component Component to wrap.\n\t * @param {object} [opt] Optional parameters.\n\t * @param {boolean} [opt.duration] Optional transition duration in milliseconds.\n\t * @param {boolean} [opt.horizontal] Optional flag if the collapsing should be horizontally. Defaults to false.\n\t */\n\tconstructor(component, opt) {\n\t\tsuper('div', opt);\n\n\t\topt = opt || {};\n\t\tthis._slideOpt = {\n\t\t\tcallback: this._onTransitionEnd.bind(this),\n\t\t\tduration: opt.duration,\n\t\t};\n\t\tthis._current = null;\n\t\tthis._component = null;\n\t\tthis._token = null;\n\t\tthis._horizontal = !!opt.horizontal;\n\n\t\tthis.setComponent(component);\n\t}\n\n\t/**\n\t * Gets the current set component.\n\t * @returns {?Component}\n\t */\n\tgetComponent() {\n\t\treturn this._component;\n\t}\n\n\t/**\n\t * Sets the component to show, or null to remove any component.\n\t * @param {?Component} component Component to set.\n\t * @returns {this}\n\t */\n\tsetComponent(component) {\n\t\tcomponent = component || null;\n\t\tif (this._component === component) return this;\n\n\t\tthis._component = component;\n\t\tlet el = this.getElement();\n\t\tif (!el) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Is the component the same at currently rendered one?\n\t\tif (this._component === this._current) {\n\t\t\tif (this._current) {\n\t\t\t\tthis._show();\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\n\t\tif (this._current) {\n\t\t\tthis._hide();\n\t\t} else {\n\t\t\tthis._renderComponent();\n\t\t\tthis._show();\n\t\t}\n\t\treturn this;\n\t}\n\n\trender(el) {\n\t\tsuper.render(el);\n\t\tthis._renderComponent();\n\t\tif (!this._component) {\n\t\t\tlet el = this.getElement();\n\t\t\tel.style.height = '0px';\n\t\t\tel.style.display = 'none';\n\t\t}\n\t\treturn this.getElement();\n\t}\n\n\tunrender() {\n\t\tanim.stop(this._token);\n\t\tif (!this.getElement()) return;\n\t\tthis._unrenderComponent();\n\t\tsuper.unrender();\n\t}\n\n\t_hide() {\n\t\tlet el = this.getElement();\n\t\tif (el) {\n\t\t\tanim.stop(this._token);\n\t\t\tthis._token = this._horizontal\n\t\t\t\t? anim.slideHorizontal(el, false, this._slideOpt)\n\t\t\t\t: anim.slideVertical(el, false, this._slideOpt);\n\t\t}\n\t}\n\n\t_show() {\n\t\tlet el = this.getElement();\n\t\tif (el) {\n\t\t\tanim.stop(this._token);\n\t\t\tthis._token = this._horizontal\n\t\t\t\t? anim.slideHorizontal(el, true, this._slideOpt)\n\t\t\t\t: anim.slideVertical(el, true, this._slideOpt);\n\t\t}\n\t}\n\n\t_renderComponent() {\n\t\tlet el = this.getElement();\n\t\tif (this._component) {\n\t\t\tthis._component.render(el);\n\t\t\tthis._current = this._component;\n\t\t}\n\t}\n\n\t_unrenderComponent() {\n\t\tif (this._current) {\n\t\t\tthis._current.unrender();\n\t\t\tthis._current = null;\n\t\t}\n\t}\n\n\t_onTransitionEnd() {\n\t\tlet el = this.getElement();\n\t\tif (!el) return;\n\n\t\tif (this._component && this._current === this._component) return;\n\n\t\tthis._unrenderComponent();\n\t\tthis._renderComponent();\n\n\t\tif (this._component) {\n\t\t\tthis._show(true);\n\t\t}\n\t}\n}\n\nexport default Collapser;\n","import { RootElem } from 'modapp-base-component';\nimport './exitIcons.scss';\n\nexport const exitIcons = [ 'n', 'ne', 'e', 'se', 's', 'sw', 'w', 'nw', 'up', 'down', 'in', 'out' ];\n\nconst exitIconMap = {\n\t'n': 'fa-arrow-up',\n\t'ne': 'fa-arrow-up',\n\t'e': 'fa-arrow-right',\n\t'se': 'fa-arrow-right',\n\t's': 'fa-arrow-down',\n\t'sw': 'fa-arrow-down',\n\t'w': 'fa-arrow-left',\n\t'nw': 'fa-arrow-left',\n\t'up': 'muicon-upstairs',\n\t'down': 'muicon-downstairs',\n\t'in': 'fa-sign-in',\n\t'out': 'fa-sign-out',\n\n\t'dot': 'fa-circle-thin',\n};\n\n/**\n * ExitIcon is an exit icon.\n */\nclass ExitIcon extends RootElem {\n\n\t/**\n\t * Creates an instance of ExitIcon\n\t * @param {string} icon Exit icon (eg. 'n', 'se', 'up', etc.)\n\t * @param {object} [opt] Optional parameters.\n\t * @param {string} [opt.className] Additional class names to append to font-awesome class names.\n\t * @param {object} [opt.attributes] Key/value attributes object\n\t * @param {object} [opt.default] Default font-awesome icon to use. Eg. 'dot'. Defaults to none.\n\t * @param {object} [opt.events] Key/value events object, where the key is the event name, and value is the callback.\n\t */\n\tconstructor(icon, opt) {\n\t\topt = Object.assign({ attributes: null }, opt);\n\t\ticon = String(icon || \"\");\n\t\topt.attributes = Object.assign({ 'aria-hidden': 'true' }, opt.attributes);\n\t\tsuper('i', opt);\n\t\tthis._default = opt?.default || '';\n\t\tthis.icon = null;\n\t\tthis.setIcon(icon);\n\t}\n\n\t/**\n\t * Sets icon\n\t * @param {string} icon Exit icon name (eg. 'ne').\n\t * @returns {this}\n\t */\n\tsetIcon(icon) {\n\t\ticon = String(icon || this._default);\n\t\tlet cl = exitIconMap[icon] || '';\n\t\tif (!cl) {\n\t\t\ticon = '';\n\t\t}\n\t\tif (cl.startsWith('fa-')) {\n\t\t\tthis.addClass('fa');\n\t\t} else {\n\t\t\tthis.removeClass('fa');\n\t\t}\n\t\tif (icon !== this.icon) {\n\t\t\tif (this.icon) {\n\t\t\t\tthis.removeClass(exitIconMap[this.icon]);\n\t\t\t\tthis.removeClass('exiticon--' + this.icon);\n\t\t\t}\n\t\t\tif (icon) {\n\t\t\t\tthis.addClass(cl);\n\t\t\t\tthis.addClass('exiticon--' + icon);\n\t\t\t}\n\t\t\tthis.icon = icon;\n\t\t}\n\t\treturn this;\n\t}\n}\n\nexport default ExitIcon;\n","import { RootElem } from 'modapp-base-component';\n\n/**\n * A file select button component.\n */\nclass FileButton extends RootElem {\n\n\t/**\n\t * Creates an instance of Button\n\t * @param {Component} component Inner component.\n\t * @param {function} onSelect Callback function called when a file is selected.\n\t * @param {object} [opt] Optional parameters.\n\t * @param {string} [opt.tagName] Tag name (eg. 'div') for the element. Defaults to 'button'.\n\t * @param {string} [opt.className] Class name\n\t * @param {object} [opt.attributes] Key/value attributes object\n\t * @param {object} [opt.events] Key/value events object, where the key is the event name, and value is the callback.\n\t * @param {object} [opt.asArrayBuffer] Flag telling if the result should be an ArrayBuffer instead of a Data URL.\n\t * @param {boolean} [opt.noFileReader] Flag telling if the file should just be returned without reader.\n\t */\n\tconstructor(component, onSelect, opt) {\n\t\topt = Object.assign({ tagName: 'button' }, opt);\n\n\t\tsuper(opt.tagName, opt, [{ component }, { id: 'input', tagName: 'input', properties: { type: \"file\", style: \"display: none;\", name: \"file\" }}]);\n\n\t\tthis.component = component;\n\t\tthis.onSelect = onSelect;\n\t\tthis.asArrayBuffer = !!opt.asArrayBuffer;\n\t\tthis.noFileReader = !!opt.noFileReader;\n\t\tthis.onError = opt.onError || null;\n\n\t\tthis.setEvent('click', this._handleClick.bind(this));\n\t\tthis._rootElem.setNodeEvent('input', 'change', this._handleSelect.bind(this));\n\t}\n\n\t/**\n\t * Gets the inner component.\n\t * @returns {this}\n\t */\n\tgetComponent() {\n\t\treturn this.component;\n\t}\n\n\t_handleClick(c, ev) {\n\t\tlet el = this._rootElem.getNode('input');\n\t\tel.click();\n\t}\n\n\t_handleSelect(c, ev) {\n\t\tlet files = ev.target.files;\n\t\tif (!files.length) return;\n\n\t\tlet file = files[0];\n\t\tif (this.noFileReader) {\n\t\t\tthis.onSelect(file, null);\n\t\t\tthis._clearInput();\n\t\t\treturn;\n\t\t}\n\t\tlet reader = new FileReader();\n\t\treader.onload = () => {\n\t\t\tthis._clearInput();\n\t\t\tthis.onSelect(file, reader.result);\n\t\t};\n\t\treader.onerror = ev => {\n\t\t\tthis._clearInput();\n\t\t\tif (this.onError) {\n\t\t\t\tthis.onError(ev);\n\t\t\t} else {\n\t\t\t\tconsole.error(\"File load error: \", ev);\n\t\t\t}\n\t\t};\n\t\tif (this.asArrayBuffer) {\n\t\t\treader.readAsArrayBuffer(file);\n\t\t} else {\n\t\t\treader.readAsDataURL(file);\n\t\t}\n\t}\n\n\t_clearInput() {\n\t\tthis._rootElem.setNodeProperty('input', 'value', \"\");\n\t}\n}\n\nexport default FileButton;\n","/**\n * Adds the render and unrender methods to an element, to make it implement the\n * Component interface.Formats a duration in milliseconds to the format 1d 2h 3m\n * 4s 5ms.\n * @param {Elem} el HTML element\n * @returns {Elem} The same element.\n */\nexport default function toComponent(el) {\n\tel.render = e => {\n\t\te.appendChild(el);\n\t\treturn el;\n\t};\n\tel.unrender = () => el.parentElement.removeChild(el);\n\treturn el;\n}\n","import toComponent from 'utils/toComponent.js';\nimport formatText, { oocNoParenthesis } from 'utils/formatText';\nimport PanelSection from './PanelSection';\nimport Fader from './Fader';\nimport './formatTxt.scss';\n\nfunction addPart(el, str, className) {\n\tif (!(str = str.trim())) return;\n\tlet div = document.createElement('div');\n\tif (className) {\n\t\tdiv.className = className;\n\t}\n\tdiv.innerHTML = formatText(str.trim(), { ooc: oocNoParenthesis });\n\tel.appendChild(div);\n}\n\n/**\n * A file select button component.\n */\nclass FormatTxt extends Fader {\n\n\t/**\n\t * Creates an instance of FormatTxt\n\t * @param {string} str Text to format\n\t * @param {object} [opt] Optional parameters as defined by RootElem.\n\t * @param {boolean} [opt.noInteraction] Flag to disable clickable interactions like toggling sections.\n\t */\n\tconstructor(str, opt) {\n\t\topt = opt || {};\n\t\topt.className = 'formattxt' + (opt.className ? ' ' + opt.className : '');\n\t\tsuper(null, opt);\n\n\t\tthis.state = opt.state || {};\n\t\tthis.noInteraction = !!opt.noInteraction;\n\t\tthis.setStr = null;\n\t\tthis.setFormatText(str);\n\t}\n\n\tgetState() {\n\t\treturn this.state;\n\t}\n\n\tsetFormatText(str) {\n\t\tstr = str || '';\n\n\t\tif (str === this.setStr) return;\n\n\t\tlet div = toComponent(document.createElement('div'));\n\t\tdiv.className = 'common--formattext';\n\n\t\tlet offset = 0;\n\t\tlet sectionRegex = /^\\[\\[(.*?)\\]\\](?:\\s*\\{([\\s\\S]*?)\\} *$| *$)/gm;\n\t\tlet match = sectionRegex.exec(str);\n\t\tlet next = null;\n\t\tlet sidx = 0;\n\t\twhile (match) {\n\t\t\tif (match.index > offset) {\n\t\t\t\taddPart(div, str.slice(offset, match.index), 'common--sectionpadding');\n\t\t\t}\n\n\t\t\tnext = sectionRegex.exec(str);\n\n\t\t\tlet content = null;\n\t\t\tif (typeof match[2] == 'string') {\n\t\t\t\toffset = match.index + match[0].length;\n\t\t\t\tcontent = match[2];\n\t\t\t} else {\n\t\t\t\toffset = next ? next.index : str.length;\n\t\t\t\tcontent = str.slice(match.index + match[0].length, offset);\n\t\t\t}\n\n\t\t\tlet section = toComponent(document.createElement('div'));\n\t\t\tsection.className = 'formattxt--sectioncontent';\n\t\t\taddPart(section, content);\n\t\t\tnew PanelSection(match[1], section, {\n\t\t\t\topen: this.noInteraction ? true : this.state['section_' + sidx] || false,\n\t\t\t\tclassName: 'formattxt--section',\n\t\t\t\tonToggle: this.noInteraction ? null : this._setState.bind(this, sidx),\n\t\t\t\tnoToggle: this.noInteraction,\n\t\t\t}).render(div);\n\t\t\tmatch = next;\n\t\t\tsidx++;\n\t\t}\n\n\t\tif (offset < str.length) {\n\t\t\taddPart(div, str.slice(offset), 'common--sectionpadding');\n\t\t}\n\n\t\tthis.setStr = str;\n\t\tthis.setComponent(div);\n\t}\n\n\t_setState(sidx, c, v) {\n\t\tthis.state['section_' + sidx] = v;\n\t}\n}\n\nexport default FormatTxt;\n","import { anim } from 'modapp-utils';\nimport { RootElem } from 'modapp-base-component';\n\nfunction whenImageLoaded(src, opt) {\n\treturn src\n\t\t? new Promise((resolve, reject) => {\n\t\t\tlet im = new Image();\n\t\t\tlet clear = () => im = im.onerror = im.onabort = im.onload = null;\n\t\t\tlet onErr = ev => {\n\t\t\t\tclear();\n\t\t\t\tresolve({ src, url: opt?.errorPlaceholder || '', cl: opt?.errorClassName || null });\n\t\t\t};\n\t\t\tim.onload = ev => {\n\t\t\t\tclear();\n\t\t\t\tresolve({ src, url: src, cl: null });\n\t\t\t};\n\t\t\tim.onerror = onErr;\n\t\t\tim.onabort = onErr;\n\t\t\tim.src = src;\n\t\t})\n\t\t: Promise.resolve({ src, url: opt?.placeholder || '', cl: opt?.placeholderClassName || null });\n}\n\n/**\n * An image component\n */\nclass Img extends RootElem {\n\n\t/**\n\t * Creates an instance of Img\n\t * @param {string} src Image source\n\t * @param {object} [opt] Optional parameters.\n\t * @param {string} [opt.className] Class name\n\t * @param {object} [opt.attributes] Key/value attributes object\n\t * @param {object} [opt.placeholder] Placeholder image to use if no src is set.\n\t * @param {object} [opt.errorPlaceholder] Placeholder image to use on error.\n\t * @param {string} [opt.placeholderClassName] ClassName to add when using placeholder.\n\t * @param {string} [opt.errorClassName] ClassName to add on error.\n\t */\n\tconstructor(src, opt) {\n\t\topt = Object.assign({}, opt);\n\t\tsuper('img', opt);\n\n\t\tthis.animId = null;\n\t\tthis.current = null;\n\t\tthis.loadPromise = null;\n\t\tthis.loaded = null;\n\t\tthis.opt = opt;\n\n\t\tthis.setSrc(src);\n\t}\n\n\t/**\n\t * Sets the display text\n\t * @param {string} src Image source\n\t * @returns {this}\n\t */\n\tsetSrc(src) {\n\t\tsrc = src || \"\";\n\n\t\tif (this.src === src) return this;\n\n\t\t// Start loading image\n\t\tthis.src = src;\n\t\tthis.loaded = null;\n\t\tthis.loadPromise = whenImageLoaded(src, this.opt).then(result => {\n\t\t\t// Make sure the image src hasn't changed while loading.\n\t\t\tif (src === this.src) {\n\t\t\t\tthis.loaded = result;\n\t\t\t}\n\t\t});\n\n\t\tlet el = super.getElement();\n\t\tif (!el) return this;\n\n\t\tanim.stop(this.animId);\n\n\t\t// Same src as currently showing? Fade it to visibility again.\n\t\tif (this.current?.src === src && this.current?.url) {\n\t\t\tthis.animId = anim.fade(el, 1);\n\t\t\treturn this;\n\t\t}\n\n\t\tthis.animId = anim.fade(el, 0, {\n\t\t\tcallback: () => {\n\t\t\t\tif (this.src === src) {\n\t\t\t\t\tthis._setCurrent();\n\t\t\t\t}\n\t\t\t},\n\t\t});\n\t\treturn this;\n\t}\n\n\t/**\n\t * Gets the current set image source.\n\t * @returns {string} Image source\n\t */\n\tgetSrc() {\n\t\treturn this.src;\n\t}\n\n\trender(el) {\n\t\tlet e = super.render(el);\n\t\tif (this.loaded && this.loaded?.src === this.src) {\n\t\t\tthis._setSrcAttr(this.loaded);\n\t\t} else {\n\t\t\te.style.opacity = 0;\n\t\t\tthis._setCurrent();\n\t\t}\n\t}\n\n\tunrender() {\n\t\tanim.stop(this.animId);\n\t\tsuper.unrender();\n\t\tthis.current = null;\n\t}\n\n\t/**\n\t * Sets the current src and fades it in when loaded.\n\t * It assumes opacity is 0 when called.\n\t */\n\t_setCurrent() {\n\t\tthis.loadPromise.then(() => {\n\t\t\tlet el = super.getElement();\n\t\t\t// Assert we the element is rendered and that the loaded data is for\n\t\t\t// this source.\n\t\t\tif (!el || this.src !== this.loaded?.src) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._setSrcAttr(this.loaded);\n\t\t\t// Show if we have something to show\n\t\t\tif (this.loaded?.url) {\n\t\t\t\tthis.animId = anim.fade(el, 1);\n\t\t\t}\n\t\t});\n\t}\n\n\t_setSrcAttr(next) {\n\t\tlet prev = this.current;\n\t\tif (next?.url) {\n\t\t\tthis._rootElem.setAttribute('src', next.url);\n\t\t} else {\n\t\t\tthis._rootElem.removeAttribute('src');\n\t\t}\n\t\tif (prev?.cl != next?.cl) {\n\t\t\tif (prev?.cl) {\n\t\t\t\tthis._rootElem.removeClass(prev.cl);\n\t\t\t}\n\t\t\tif (next?.cl) {\n\t\t\t\tthis._rootElem.addClass(next.cl);\n\t\t\t}\n\t\t}\n\t\tthis.current = next;\n\t}\n}\n\nexport default Img;\n\n","import { RootElem, Txt } from 'modapp-base-component';\nimport ToggleBox from './ToggleBox';\nimport PopupTip from './PopupTip';\nimport isComponent from 'utils/isComponent';\nimport './labelToggleBox.scss';\n\n/**\n * LabelToggleBox is a ToggleBox with a label.\n */\nclass LabelToggleBox extends RootElem {\n\n\t/**\n\t * Creates an instance of LabelToggleBox\n\t * @param {string|LocaleString|Component} label Label text or component.§\n\t * @param {*} value Initial value.\n\t * @param {object} [opt] Optional parameters.\n\t * @param {Array.<*>} [opt.values] Values to cycle through. Defaults to [null, true, false].\n\t * @param {string} [opt.className] Additional class names to append to font-awesome class names.\n\t * @param {object} [opt.attributes] Key/value attributes object\n\t * @param {object} [opt.events] Key/value events object, where the key is the event name, and value is the callback. Default click event is calling toggleNext()\n\t * @param {boolean} [opt.disabled] Flag telling if the component should be disabled. Defaults to false.\n\t * @param {string|LocaleString} [opt.popupTip] Popup tip to show right of the label.\n\t * @param {string|LocaleString} [opt.popupTipClassName] Class name to add to the popup tip. Defaults to 'popuptip--width-m'.\n\t * @param {string|LocaleString} [opt.toggleBoxClassName] Class name to add to the toggleBox. Defaults to none.\n\t * @param {function} [opt.onChange] On change callback: func(value, component)\n\t */\n\tconstructor(label, value, opt) {\n\t\tsuper(null);\n\t\topt = Object.assign({ popupTipClassName: 'popuptip--width-m' }, opt);\n\t\topt.className = 'labeltogglebox' + (opt.className ? ' ' + opt.className : '');\n\n\t\tthis._tb = new ToggleBox(value, {\n\t\t\tvalues: opt.values,\n\t\t\tonChange: opt.onChange,\n\t\t\tevents: opt.toggleBoxEvents || null,\n\t\t\tdisableClick: opt.disableClick,\n\t\t\tclassName: opt.toggleBoxClassName || null,\n\t\t});\n\t\tthis._popupTip = opt.popupTip\n\t\t\t? new PopupTip(opt.popupTip, { position: 'left', className: 'labeltogglebox--popuptip' + (opt.popupTipClassName ? ' ' + opt.popupTipClassName : '') })\n\t\t\t: null;\n\t\tthis._rendered = null;\n\t\tthis._label = null;\n\t\tthis._labelTxt = new Txt(\"\");\n\t\tthis.setRootNode(n => n.elem('label', opt, [\n\t\t\tn.component(this._tb),\n\t\t\tn.component(this._popupTip),\n\t\t]));\n\t\tthis.setLabel(label);\n\t\tif (opt.disabled) {\n\t\t\tthis.setDisabled(true);\n\t\t}\n\t}\n\n\trender(el) {\n\t\tlet e = super.render(el);\n\t\tthis._renderLabel();\n\t\treturn e;\n\t}\n\n\tunrender() {\n\t\tthis._unrenderLabel();\n\t\tsuper.unrender();\n\t}\n\n\t/**\n\t * Sets label.\n\t * @param {string|LocaleString|Component} txt Label text or component.\n\t * @returns {this}\n\t */\n\tsetLabel(txt) {\n\t\tif (isComponent(txt)) {\n\t\t\tthis._label = txt;\n\t\t} else {\n\t\t\tthis._labelTxt.setText(txt);\n\t\t\tthis._label = null;\n\t\t}\n\n\t\tif (this._rendered === this._label) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._unrenderLabel();\n\t\tthis._renderLabel();\n\t\treturn this;\n\t}\n\n\tsetDisabled(isDisabled) {\n\t\tthis[isDisabled ? 'addClass' : 'removeClass']('inactive');\n\t\tthis._tb.setProperty('disabled', isDisabled ? 'disabled' : null);\n\t}\n\n\t_renderLabel() {\n\t\tlet e = this.getElement();\n\t\tif (!e) return;\n\n\t\tlet c = this._label || this._labelTxt;\n\t\tc.render(e);\n\t\tthis._rendered = c;\n\t}\n\n\t_unrenderLabel() {\n\t\tif (this._rendered) {\n\t\t\tthis._rendered.unrender();\n\t\t\tthis._rendered = null;\n\t\t}\n\t}\n\n\tgetToggleBox() {\n\t\treturn this._tb;\n\t}\n\n\t/**\n\t * Gets the value\n\t * @returns {*} Current set value.\n\t */\n\tgetValue() {\n\t\treturn this._tb.getValue();\n\t}\n\n\t/**\n\t * Sets the value.\n\t * @param {?boolean} value Value to set.\n\t * @param {boolean} [triggerChange] Flag to tell if changes should trigger the onChange callback.\n\t * @returns {this}\n\t */\n\tsetValue(value, triggerChange) {\n\t\tthis._tb.setValue(value, triggerChange);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Toggles to the next value.\n\t * @returns {this}\n\t */\n\ttoggleNext() {\n\t\tthis._tb.toggleNext();\n\t\treturn this;\n\t}\n}\n\nexport default LabelToggleBox;\n","import { RootElem, Elem, Txt } from 'modapp-base-component';\nimport FAIcon from 'components/FAIcon';\nimport Fader from 'components/Fader';\nimport SimpleBar from 'components/SimpleBar';\nimport isComponent from 'utils/isComponent';\nimport nextFrame from 'utils/nextFrame';\n\nimport './mobilePanel.scss';\n\n/**\n * MobilePanel is component wrapper that can slide away to the left or right\n */\nclass MobilePanel extends RootElem {\n\n\t/**\n\t * Creates an instance of MobilePanel\n\t * @param {string|LocaleString|Component} title MobilePanel title.\n\t * @param {?Component} component Component to wrap.\n\t * @param {object} [opt] Optional parameters.\n\t * @param {string} [opt.align] MobilePanel alignment; \"right\", \"left\". Defaults to \"left\".\n\t * @param {boolean} [opt.closed] Flag to tell if the panel should start as closed.\n\t * @param {function} [opt.onClose] Optional callback function called whenever the panel is closed.\n\t * @param {function} [opt.onClick] Optional callback function called whenever the top-right button is clicked. Button will be hidden if null.\n\t * @param {function} [opt.clickIcon] Optional icon to use for the top-right button. Defaults to 'close'.\n\t * @param {function} [opt.subheaderComponent] Optional subheader component.\n\t */\n\tconstructor(title, component, opt) {\n\t\topt = Object.assign({ align: \"left\" }, opt);\n\t\topt.className = 'mobilepanel mobilepanel--align-' + opt.align + (opt.className ? ' ' + opt.className : '');\n\t\topt.attributes = Object.assign({ 'aria-hidden': 'true' }, opt.attributes);\n\t\tsuper('div', { className: 'mobilepanel--container' });\n\n\t\t// Set options\n\t\tthis._alignLeft = opt.align != 'right';\n\t\tthis._onClose = opt.onClose;\n\t\tthis._onButtonClick = opt.onClick || null;\n\t\tthis._subheaderComponent = opt.subheaderComponent || null;\n\n\t\t// Additional components\n\t\tthis.titleFader = new Fader(null, { className: 'mobilepanel--title' });\n\t\tthis.titleTxt = new Txt(\"\", { tagName: 'h3', className: 'mobilepanel--titletxt' });\n\t\tthis.simpleBar = new SimpleBar(new Fader(null), { className: 'mobilepanel--content' });\n\t\t// Click button is the corner button that can be clicked for an action.\n\t\tthis.clickBtn = new Elem(n => n.elem('button', {\n\t\t\tclassName: 'mobilepanel--btn iconbtn medium',\n\t\t\tevents: {\n\t\t\t\tclick: (c, e) => {\n\t\t\t\t\tif (this._onButtonClick) {\n\t\t\t\t\t\tthis._onButtonClick(this);\n\t\t\t\t\t}\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t},\n\t\t\t},\n\t\t}, [\n\t\t\tn.component('icon', new FAIcon()),\n\t\t]));\n\t\tthis.rendered = false;\n\n\t\t// Main component\n\t\tthis.component = new Elem(n => n.elem('div', opt, [\n\t\t\tn.elem('headercont', 'div', { className: 'mobilepanel--headercont' }, [\n\t\t\t\tn.elem('div', { className: 'mobilepanel--header' }, [\n\t\t\t\t\tn.elem('button', {\n\t\t\t\t\t\tclassName: 'mobilepanel--toggle iconbtn medium',\n\t\t\t\t\t\tevents: {\n\t\t\t\t\t\t\tclick: (c, e) => {\n\t\t\t\t\t\t\t\tthis.toggle();\n\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t}, [\n\t\t\t\t\t\tn.component(new FAIcon(this._alignLeft ? 'caret-left' : 'caret-right')),\n\t\t\t\t\t]),\n\t\t\t\t\tn.component('btn', new Fader(null, { className: 'mobilepanel--btncont' })),\n\t\t\t\t\tn.component(this.titleFader),\n\t\t\t\t]),\n\t\t\t]),\n\t\t\tn.elem('content', 'div', { className: 'mobilepanel--main' }, [\n\t\t\t\tn.component(this.simpleBar),\n\t\t\t]),\n\t\t]));\n\n\t\t// Bind callbacks\n\t\tthis._onTransitionEnd = this._onTransitionEnd.bind(this);\n\n\t\tthis.setTitle(title)\n\t\t\t.setComponent(component)\n\t\t\t.setButton(opt.onClick || null, opt.clickIcon)\n\t\t\t.toggle(!opt.closed, false);\n\t}\n\n\trender(el) {\n\t\tlet e = super.render(el);\n\t\tif (this.open) {\n\t\t\tthis._renderComponent();\n\t\t} else {\n\t\t\tthis._unrenderComponent();\n\t\t}\n\n\t\te.addEventListener('transitionend', this._onTransitionEnd);\n\t\treturn e;\n\t}\n\n\tunrender() {\n\t\tlet e = this.getElement();\n\t\tif (e) {\n\t\t\te.removeEventListener('transitionend', this._onTransitionEnd);\n\t\t\tthis._unrenderComponent();\n\t\t\tsuper.unrender();\n\t\t\tthis.removeClass('mobilepanel--hide');\n\t\t}\n\t}\n\n\t_renderComponent(animated) {\n\t\tif (!this.rendered) {\n\t\t\tlet el = this.getElement();\n\t\t\tthis.component.render(el);\n\t\t\tif (this._subheaderComponent) {\n\t\t\t\tthis._subheaderComponent.render(this.component.getNode('headercont'));\n\t\t\t}\n\t\t\tthis.removeClass('mobilepanel--hidden');\n\t\t\tthis.rendered = true;\n\t\t}\n\t}\n\n\t_unrenderComponent() {\n\t\tif (this.rendered) {\n\t\t\tif (this._subheaderComponent) {\n\t\t\t\tthis._subheaderComponent.unrender();\n\t\t\t}\n\t\t\tthis.component.unrender();\n\t\t\tthis.rendered = false;\n\t\t}\n\t\tthis.addClass('mobilepanel--hidden');\n\t}\n\n\t/**\n\t * Sets the title.\n\t * @param {string|LocaleString|Component} title MobilePanel title.\n\t * @returns {this}\n\t */\n\tsetTitle(title) {\n\t\tif (!isComponent(title)) {\n\t\t\tthis.titleTxt.setText(title);\n\t\t\ttitle = this.titleTxt;\n\t\t}\n\t\tthis.titleFader.setComponent(title);\n\t\treturn this;\n\t}\n\n\tgetTitle() {\n\t\tlet c = this.titleFader.getComponent();\n\t\treturn c == this.titleTxt ? this.titleTxt.getText() : c;\n\t}\n\n\t/**\n\t * Sets the component to wrap.\n\t * @param {Component} component Component\n\t * @param {object} [opt] Optional parameters\n\t * @param {function} [opt.onRender] Callback function to call after rendering the component.\n\t * @param {function} [opt.onUnrender] Callback function to call before unrendering the component.\n\t * @returns {this}\n\t */\n\tsetComponent(component, opt) {\n\t\tthis.simpleBar.getComponent().setComponent(component, opt);\n\t\tthis.simpleBar.recalculate();\n\t\treturn this;\n\t}\n\n\tgetComponent() {\n\t\tthis.simpleBar.getComponent().getComponent();\n\t}\n\n\tgetSimpleBar() {\n\t\treturn this.simpleBar && this.simpleBar.simplebar || null;\n\t}\n\n\t/**\n\t * Sets the right corner button and click callback.\n\t * @param {?function} onClick Callback function when clicked. If null, the button will be removed.\n\t * @param {string} [icon] Icon to use for button. Defaults to 'close'\n\t * @returns {this}\n\t */\n\tsetButton(onClick, icon) {\n\t\tthis._onButtonClick = onClick || null;\n\t\tthis.clickBtn.getNode('icon').setIcon(icon || 'chevron-circle-left');\n\t\tthis.component.getNode('btn').setComponent(onClick ? this.clickBtn : null);\n\t\treturn this;\n\t}\n\n\ttoggle(open) {\n\t\tif (typeof open == 'undefined') {\n\t\t\topen = !this.open;\n\t\t}\n\t\topen = !!open;\n\t\tif (open === this.open) {\n\t\t\treturn;\n\t\t}\n\t\tthis.open = open;\n\n\t\tif (this.getElement()) {\n\t\t\tif (open) {\n\t\t\t\tthis.addClass('mobilepanel--hide');\n\t\t\t\tthis._renderComponent();\n\t\t\t}\n\t\t}\n\n\t\tnextFrame(() => {\n\t\t\tif (this.getElement()) {\n\t\t\t\tlet cb = open ? 'removeClass' : 'addClass';\n\t\t\t\tthis[cb]('mobilepanel--hide');\n\t\t\t}\n\t\t});\n\n\t\tif (!open && this._onClose) {\n\t\t\tthis._onClose(this);\n\t\t}\n\t\treturn this;\n\t}\n\n\t_onTransitionEnd(e) {\n\t\tlet el = this.component.getElement();\n\t\tif (el && (!e || e.target == el && e.propertyName == 'transform') && !this.open) {\n\t\t\tthis._unrenderComponent();\n\t\t}\n\t}\n}\n\nexport default MobilePanel;\n","import { ModelComponent } from 'modapp-resource-component';\nimport Collapser from './Collapser';\nimport modelComponentSelector from 'utils/modelComponentSelector';\n\n/**\n * ModelCollapser extends ModelComponent and wraps a Collapser, selecting the component\n * to set using modelComponentSelector.\n *\n * The ModelCollapser will iterate over the list of selector component objects,\n * selecting the first with a condition that is true, and setting it.\n * If no component has its condition met, a null component will be set.\n *\n * If a subsequent model change callback results in the same component, no\n * new component will be set unless all the following statements are true:\n * 1. The selected component object uses a factory function.\n * 2. The selected component object has a hash function.\n * 3. The hash function produces a different hash than previous.\n */\nclass ModelCollapser extends ModelComponent {\n\n\t/**\n\t * Creates a new ModelCollapser instance.\n\t * @param {Model} model Model object\n\t * @param {Array.<modelComponentSelectorComponent>} components An array of selector component objects.\n\t * @param {object} [opt] Optional parameters for the underlying Collapser component.\n\t * @param {string} [opt.postrenderUpdate] Flag setting if call to update should be done after render. Defaults to false.\n\t */\n\tconstructor(model, components, opt) {\n\t\tsuper(model, new Collapser(null, opt), modelComponentSelector(components));\n\t}\n}\n\nexport default ModelCollapser;\n","import { ModelComponent } from 'modapp-resource-component';\nimport Fader from './Fader';\nimport modelComponentSelector from 'utils/modelComponentSelector';\n\n/**\n * ModelFader extends ModelComponent and wraps a Fader, selecting the component\n * to set using modelComponentSelector.\n *\n * The ModelFader will iterate over the list of selector component objects,\n * selecting the first with a condition that is true, and setting it.\n * If no component has its condition met, a null component will be set.\n *\n * If a subsequent model change callback results in the same component, no\n * new component will be set unless all the following statements are true:\n * 1. The selected component object uses a factory function.\n * 2. The selected component object has a hash function.\n * 3. The hash function produces a different hash than previous.\n */\nclass ModelFader extends ModelComponent {\n\n\t/**\n\t * Creates a new ModelFader instance.\n\t * @param {Model} model Model object\n\t * @param {Array.<modelComponentSelectorComponent>} components An array of selector component objects.\n\t * @param {object} [opt] Optional parameters for the underlying Fader component.\n\t * @param {string} [opt.postrenderUpdate] Flag setting if call to update should be done after render. Defaults to false.\n\t */\n\tconstructor(model, components, opt) {\n\t\tsuper(model, new Fader(null, opt), modelComponentSelector(components));\n\t}\n}\n\nexport default ModelFader;\n","import { RootElem, Txt } from 'modapp-base-component';\nimport Collapser from './Collapser';\nimport Fader from './Fader';\nimport FAIcon from './FAIcon';\nimport './nameSection.scss';\nimport isComponent from 'utils/isComponent';\n\nimport './nameSection.scss';\n\n/**\n * NameSection is component with a header and collapsable content.\n */\nclass NameSection extends RootElem {\n\n\t/**\n\t * Creates an instance of NameSection\n\t * @param {string|LocaleString} title Title text.\n\t * @param {?Component} component Content component.\n\t * @param {object} [opt] Optional parameters.\n\t * @param {number} [opt.duration] Optional transition duration in milliseconds.\n\t * @param {boolean} [opt.open] Optional flag to set initial open state. Default is true.\n\t * @param {function} [opt.onToggle] Optional callback function called whenever the section is toggled.\n\t */\n\tconstructor(title, component, opt) {\n\t\tsuper(null);\n\t\topt = Object.assign({}, opt);\n\t\topt.className = 'namesection' + (opt.className ? ' ' + opt.className : '') + ' notoggle';\n\t\tthis.title = new Txt(\"\", { tagName: 'span' });\n\t\tsuper.setRootNode(n => n.elem('div', opt, [\n\t\t\tn.component('content', new Collapser(null, { className: 'namesection--content', duration: opt.duration })),\n\t\t\tn.elem('div', { className: 'namesection--head', events: opt.noToggle ? null : { click: () => this.toggle() }}, [\n\t\t\t\tn.component('title', new Fader(null, { className: 'namesection--title' })),\n\t\t\t\tn.component('caret', new FAIcon('caret-right', { className: 'namesection--caret' })),\n\t\t\t]),\n\t\t]));\n\n\t\tthis._onToggle = opt.onToggle;\n\t\tthis.setTitle(title)\n\t\t\t.setComponent(component)\n\t\t\t.toggle(opt.open !== false, false);\n\t}\n\n\t/**\n\t * Get section open state.\n\t * @returns {boolean} True if open, otherwise false.\n\t */\n\tisOpen() {\n\t\treturn this._open;\n\t}\n\n\t/**\n\t * Sets the title text.\n\t * @param {string|LocaleString|Component} title Title text or component.\n\t * @returns {this}\n\t */\n\tsetTitle(title) {\n\t\tlet n = this._rootElem.getNode('title');\n\t\tif (isComponent(title)) {\n\t\t\tn.setComponent(title);\n\t\t} else {\n\t\t\tthis.title.setText(title);\n\t\t\tn.setComponent(this.title);\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t * Gets the current title.\n\t * @returns {string|LocaleString|Component} Title text or component.\n\t */\n\tgetTitle() {\n\t\tlet c = this._rootElem.getNode('title');\n\t\treturn c == this.title ? c.getText() : c;\n\t}\n\n\t/**\n\t * Sets the content component.\n\t * @param {Component|Promise.<Component>} component Content component or promise of a component.\n\t * @returns {this}\n\t */\n\tsetComponent(component) {\n\t\t// I we get something other than a promise.\n\t\tif (!component || isComponent(component)) {\n\t\t\treturn this._setComponent(component);\n\t\t}\n\n\t\tlet promise = Promise.resolve(component).then(c => {\n\t\t\tif (promise !== this._promise) return;\n\t\t\tthis._promise = null;\n\t\t\tthis._setComponent(c);\n\t\t});\n\t\tthis._promise = promise;\n\t\treturn this;\n\t}\n\n\t_setComponent(c) {\n\t\tthis.component = c || null;\n\t\tthis[this.component ? 'removeClass' : 'addClass']('notoggle');\n\t\tif (this._open) {\n\t\t\tthis._rootElem.getNode('content').setComponent(this.component);\n\t\t};\n\t\treturn this;\n\t}\n\n\t/**\n\t * Gets the current content.\n\t * @returns {?Component} Set content component.\n\t */\n\tgetComponent() {\n\t\treturn this.component;\n\t}\n\n\t/**\n\t * Toggles section between open and close.\n\t * @param {boolean} [open] Optional open state to set. If undefined, open state will be toggled.\n\t * @param {function} [triggerOnToggle] Flag if this toggle should trigger the onToggle callback. Defaults to true.\n\t * @returns {this}\n\t */\n\ttoggle(open, triggerOnToggle) {\n\t\tif (typeof open == 'undefined') {\n\t\t\tif (!this.component) return;\n\t\t\topen = !this._open;\n\t\t}\n\t\topen = !!open;\n\t\tif (open === this._open) return;\n\t\tthis._open = open;\n\t\tthis._rootElem[this._open ? 'addClass' : 'removeClass']('open');\n\t\tthis._rootElem.getNode('content').setComponent(this._open ? this.component : null);\n\t\tif (triggerOnToggle !== false && this._onToggle) {\n\t\t\tthis._onToggle(this, this._open);\n\t\t}\n\t\treturn this;\n\t}\n}\n\nexport default NameSection;\n","import './navButtons.scss';\n\nexport const directions = [ 'n', 'ne', 'e', 'se', 's', 'sw', 'w', 'nw' ];\n\nconst icons = [\n\t{ id: 'n', char: 'f062', x: 42.2, y: 21 },\n\t{ id: 'ne', char: 'f062', x: 42.2, y: 21, rotate: 45 },\n\t{ id: 'e', char: 'f062', x: 42.2, y: 21, rotate: 90 },\n\t{ id: 'se', char: 'f062', x: 42.2, y: 21, rotate: 135 },\n\t{ id: 's', char: 'f062', x: 42.2, y: 21, rotate: 180 },\n\t{ id: 'sw', char: 'f062', x: 42.2, y: 21, rotate: 225 },\n\t{ id: 'w', char: 'f062', x: 42.2, y: 21, rotate: 270 },\n\t{ id: 'nw', char: 'f062', x: 42.2, y: 21, rotate: 315 },\n\t{ id: 'up', char: 'e900', x: 43, y: 23, className: 'navbuttons--muicon' },\n\t{ id: 'down', char: 'e901', x: 43, y: 23, className: 'navbuttons--muicon' },\n\t{ id: 'in', char: 'f090', x: 43, y: 21.8 },\n\t{ id: 'out', char: 'f08b', x: 44, y: 21.8 },\n];\n\nconst defaultBtnState = { selected: false, disabled: true, icon: '', title: '' };\nconst defaultCenterState = { disabled: true, number: 0 };\n\nfunction setClass(el, className, add) {\n\tif (add) {\n\t\tel.classList.add(className);\n\t} else {\n\t\tel.classList.remove(className);\n\t}\n}\n\nfunction prepareState(btnState) {\n\treturn btnState\n\t\t? {\n\t\t\tselected: !!btnState.selected,\n\t\t\tdisabled: !!btnState.disabled,\n\t\t\ticon: btnState.icon || '',\n\t\t\ttitle: btnState.title || '',\n\t\t}\n\t\t: defaultBtnState;\n}\n\nfunction prepareCenterState(centerState) {\n\treturn centerState\n\t\t? {\n\t\t\tdisabled: !!centerState.disabled,\n\t\t\tcount: centerState.count || 0,\n\t\t}\n\t\t: defaultCenterState;\n}\n\n/**\n * @typedef {object} NavButtonsBtnState\n * @property {bool} [selected] Flags the button as selected (highlighted).\n * @property {bool} [disabled] Flags the button as disabled.\n * @property {string} [icon] Icon to show on the button.\n * @property {string} [title] Title text for the button.\n */\n\n/**\n * @typedef {object} NavButtonsCenterState\n * @property {number} [count] Flags the button as selected (highlighted).\n * @property {bool} [disabled] Flags the button as disabled.\n * @property {string} [title] Title text for the button.\n */\n\n/**\n * @typedef {{\n * \tn?: NavButtonsBtnState;\n * \tne?: NavButtonsBtnState;\n * \te?: NavButtonsBtnState;\n * \tse?: NavButtonsBtnState;\n * \ts?: NavButtonsBtnState;\n * \tsw?: NavButtonsBtnState;\n * \tw?: NavButtonsBtnState;\n * \tnw?: NavButtonsBtnState;\n * \tc?: NavButtonsCenterState;\n * }} NavButtonsState\n */\n\n/**\n * NavButtons is a navigation button.\n */\nclass NavButtons {\n\n\t/**\n\t * Creates an instance of NavButtons\n\t * @param {object} state Button state object.\n\t * @param {object} [opt] Optional parameters.\n\t * @param {string} [opt.className] Additional class names to append to font-awesome class names.\n\t * @param {bool} [opt.shadow] Add a drop shadow to the buttons.\n\t * @param {bool} [opt.center] Render a center button.\n\t * @param {(dir: string, c: NavButtons) => void} [opt.onClick] Callback called on click\n\t */\n\tconstructor(state, opt) {\n\t\tthis.btns = {};\n\t\tthis.cbs = null;\n\t\tthis._onClick = opt?.onClick || null;\n\t\tthis.center = !!opt?.center;\n\t\tthis.count = 0;\n\t\t// Create element\n\t\tthis.svg = document.createElement('div');\n\t\tthis.svg.className = 'navbuttons' + (opt?.className ? ' ' + opt.className : '');\n\n\t\tthis.svg.innerHTML = `<svg\n\theight=\"100\"\n\twidth=\"100\"\n\tversion=\"1.1\"\n\txmlns=\"http://www.w3.org/2000/svg\"\n\txmlns:svg=\"http://www.w3.org/2000/svg\"${opt?.shadow ? `\n\tclass=\"shadow\"` : ''}>\n\t<defs>\n\t\t<path\n\t\t\tid=\"btn\"\n\t\t\td=\"M 50,0 C 44.986273,0.01078937 40.009686,0.77557153 35.235929,2.262753 33.320114,2.8595921 32.431233,4.9719548 33.199296,6.826252 L 44.0625,33.052734 C 45.968389,32.370445 47.975717,32.01454 50,32 c 2.027411,8.64e-4 4.040108,0.344237 5.953125,1.015625 L 66.800728,6.8262622 C 67.568778,4.9719594 66.679886,2.8595919 64.76407,2.2627528 59.990313,0.77557146 55.013727,0.01078937 50,0 Z\"\n\t\t\tstyle=\"transition: fill-opacity .2s, fill .2s; stroke:none\" />\n\t\t${icons\n\t\t.map(o => `<text\n\t\t\tid=\"icon-${o.id}\"\n\t\t\tx=\"${o.x}\"\n\t\t\ty=\"${o.y}\"\n\t\t\tstyle=\"transition: fill-opacity .2s, fill .2s\"${o.rotate ? `\n\t\t\ttransform=\"rotate(${o.rotate} 50 16)\"` : ''}${o.className ? `\n\t\t\tclass=\"${o.className}\"` : ''}\n\t\t}\n\t\t>&#x${o.char};</text>`)\n\t\t.join('\\n\\t\\t')}\n\t</defs>\n\t${directions.map((dir, i) => `<g class=\"navbuttons--btn dir-${dir}\" transform=\"rotate(${i * 45} 50 50)\" tabindex=\"0\">\n\t<title></title>\n\t<use href=\"#btn\"/>\n\t${icons\n\t\t.map(o => `<use class=\"navbuttons--icon ${o.id}\" href=\"#icon-${o.id}\" transform=\"rotate(${-i * 45} 50 16)\" />`)\n\t\t.join('\\n\\t')}\n</g>`).join('\\n\\t')}\n\t${this.center ? `<g class=\"navbuttons--btn dir-c\" tabindex=\"0\">\n\t\t<title></title>\n\t\t<circle cx=\"50\" cy=\"50\" r=\"16\" style=\"transition: fill-opacity .2s, fill .2s; stroke:none\" />\n\t\t${[ ...Array(10) ].map((e, i) => `<text\n\t\t\tclass=\"navbuttons--count count-${i + 1}\"\n\t\t\tx=\"50\"\n\t\t\ty=\"51\"\n\t\t\tdominant-baseline=\"middle\"\n\t\t\ttext-anchor=\"middle\"\n\t\t\tstyle=\"transition: fill-opacity .2s, fill .2s\"\n\t\t>${i >= 9 ? \"9+\" : i + 1}</text>`).join('\\n\\t\\t')}\n\t</g>` : ''}\n</svg>`;\n\n\t\tfor (let dir of directions) {\n\t\t\tthis.btns[dir] = this._getByClass(`dir-${dir}`);\n\t\t}\n\t\tif (this.center) {\n\t\t\tthis.btns['c'] = this._getByClass(`dir-c`);\n\t\t}\n\n\t\tthis.state = {};\n\t\tthis.listening = false;\n\t\tthis.setState(state);\n\t}\n\n\trender(el) {\n\t\tthis._setListeners(true);\n\t\tel.appendChild(this.svg);\n\t\treturn this.svg;\n\t}\n\n\tunrender() {\n\t\tthis.svg.parentNode?.removeChild(this.svg);\n\t\tthis._setListeners(false);\n\t}\n\n\tgetElement() {\n\t\treturn this.svg;\n\t}\n\n\tsetButton(id, btnState) {\n\t\tbtnState = prepareState(btnState);\n\t\tthis.state[id] = btnState;\n\t\tthis._updateBtn(id, btnState);\n\t}\n\n\t/**\n\t * @param {NavButtonsCenterState} centerState Center state.\n\t */\n\tsetCenter(centerState) {\n\t\tif (!this.center) {\n\t\t\treturn;\n\t\t}\n\t\tcenterState = prepareCenterState(centerState);\n\t\tthis.state['c'] = centerState;\n\t\tthis._updateCenter(centerState);\n\t}\n\n\t/**\n\t * Sets state\n\t * @param {object} state Button state.\n\t * @returns {this}\n\t */\n\tsetState(state) {\n\t\tstate = state || {};\n\t\tfor (let dir of directions) {\n\t\t\tthis.state[dir] = prepareState(state[dir]);\n\t\t}\n\t\tif (this.center) {\n\t\t\tthis.state['c'] = prepareCenterState(state['c']);\n\t\t}\n\t\tthis._updateAll();\n\t\treturn this;\n\t}\n\n\t_setListeners(on) {\n\t\tif (this.listening == on) {\n\t\t\treturn;\n\t\t}\n\t\tthis.listening = !!on;\n\n\t\tif (this._onClick) {\n\t\t\tif (on) {\n\t\t\t\tthis.cbs = {};\n\t\t\t\tfor (let dir of directions) {\n\t\t\t\t\tthis._listen(dir);\n\t\t\t\t}\n\t\t\t\tif (this.center) {\n\t\t\t\t\tthis._listen('c');\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (let dir of directions) {\n\t\t\t\t\tthis._unlisten(dir);\n\t\t\t\t}\n\t\t\t\tif (this.center) {\n\t\t\t\t\tthis._unlisten('c');\n\t\t\t\t}\n\t\t\t\tthis.cbs = null;\n\t\t\t}\n\t\t}\n\t}\n\n\t_listen(dir) {\n\t\tlet cb = {\n\t\t\tclick: (ev) => {\n\t\t\t\tthis._onClick(dir, this);\n\t\t\t\tev.stopPropagation();\n\t\t\t},\n\t\t\tkeydown: (ev) => {\n\t\t\t\tif (ev.key == 'Enter' || ev.key == ' ') {\n\t\t\t\t\tthis._onClick(dir, this);\n\t\t\t\t\tev.stopPropagation();\n\t\t\t\t\tev.preventDefault();\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\n\t\tlet btn = this.btns[dir];\n\t\tbtn.addEventListener('click', cb.click);\n\t\tbtn.addEventListener('keydown', cb.keydown);\n\t\tthis.cbs[dir] = cb;\n\t}\n\n\t_unlisten(dir) {\n\t\tlet btn = this.btns[dir];\n\t\tbtn.removeEventListener('click', this.cbs[dir].click);\n\t\tbtn.removeEventListener('keydown', this.cbs[dir].keydown);\n\t}\n\n\t_updateAll() {\n\t\tfor (let dir of directions) {\n\t\t\tthis._updateBtn(dir, this.state[dir] || defaultBtnState);\n\t\t}\n\t\tif (this.center) {\n\t\t\tthis._updateCenter(this.state['c'] || defaultCenterState);\n\t\t}\n\t}\n\n\t_updateBtn(dir, btnState) {\n\t\tlet g = this.btns[dir];\n\n\t\tsetClass(g, 'disabled', btnState.disabled);\n\t\tsetClass(g, 'selected', btnState.selected);\n\t\tg.firstElementChild.textContent = btnState.title;\n\t\tfor (let icon of icons) {\n\t\t\tsetClass(g, icon.id, btnState.icon == icon.id);\n\t\t}\n\t}\n\n\t_updateCenter(centerState) {\n\t\tlet g = this.btns['c'];\n\t\tsetClass(g, 'disabled', centerState.disabled);\n\t\tg.firstElementChild.textContent = centerState.title;\n\t\tlet count = centerState.count || 0;\n\t\tif (count > 10) {\n\t\t\tcount = 10;\n\t\t}\n\t\tfor (let i = 1; i <= 10; i++) {\n\t\t\tsetClass(g, `count-${i}`, i == count);\n\t\t}\n\t}\n\n\n\t_getByClass(className) {\n\t\tlet col = this.svg.getElementsByClassName(className);\n\t\treturn col.length > 0 ? col[0] : null;\n\t}\n}\n\nexport default NavButtons;\n","/**\n * OnRender is a transparent wrapper around a component, allowing to call\n * callbacks before or after render or unrender.\n *\n * @param {Component} component Component to wrap.\n * @param {object} [opt] Options.\n * @param {(component: Component) => void} [opt.beforeRender] Callback called on before render.\n * @param {(component: Component) => void} [opt.afterRender] Callback called on after render.\n * @param {(component: Component) => void} [opt.beforeUnrender] Callback called on before unrender.\n * @param {(component: Component) => void} [opt.afterUnrender] Callback called on after unrender.\n */\nclass OnRender {\n\tconstructor(component, opt) {\n\t\tthis._c = component;\n\t\tthis._opt = opt;\n\t}\n\n\trender(el) {\n\t\tthis._opt?.beforeRender?.(this._c);\n\t\tlet e = this._c.render(el);\n\t\tthis._opt?.afterRender?.(this._c);\n\t\treturn e;\n\t}\n\n\tunrender() {\n\t\tthis._opt?.beforeUnrender?.(this._c);\n\t\tthis._c.unrender();\n\t\tthis._opt?.afterUnrender?.(this._c);\n\t}\n\n\tgetComponent() {\n\t\treturn this.component;\n\t}\n}\n\nexport default OnRender;\n","import { RootElem, Elem, Txt } from 'modapp-base-component';\nimport FAIcon from 'components/FAIcon';\nimport Fader from 'components/Fader';\nimport SimpleBar from 'components/SimpleBar';\nimport isComponent from 'utils/isComponent';\n\nimport './panel.scss';\n\n/**\n * Panel is component wrapper that can slide away to the left or right\n */\nclass Panel extends RootElem {\n\n\t/**\n\t * Creates an instance of Panel\n\t * @param {string|LocaleString|Component} title Panel title.\n\t * @param {?Component} component Component to wrap.\n\t * @param {object} [opt] Optional parameters.\n\t * @param {string} [opt.align] Panel alignment; \"right\", \"left\". Defaults to \"left\".\n\t * @param {boolean} [opt.closed] Flag to tell if the panel should start as closed.\n\t * @param {boolean} [opt.noToggle] Flag to tell if the panel should not show a toggle button.\n\t * @param {function} [opt.onToggle] Optional callback function called whenever the panel is toggled.\n\t * @param {function} [opt.onClick] Optional callback function called whenever the top-right button is clicked. Button will be hidden if null.\n\t * @param {function} [opt.clickIcon] Optional icon to use for the top-right button. Defaults to 'close'.\n\t * @param {function} [opt.footerComponent] Optional footer component.\n\t * @param {function} [opt.subheaderComponent] Optional subheader component.\n\t * @param {function} [opt.btnClass] Optional class name for buttons.\n\t */\n\tconstructor(title, component, opt) {\n\t\topt = Object.assign({ align: \"left\" }, opt);\n\t\topt.className = 'panel panel--align-' + opt.align + (opt.className ? ' ' + opt.className : '');\n\t\topt.attributes = Object.assign({ 'aria-hidden': 'true' }, opt.attributes);\n\t\tsuper(null);\n\n\t\t// Set options\n\t\tthis._alignLeft = opt.align != 'right';\n\t\tthis._instant = !!opt.instant;\n\t\tthis._onToggle = opt.onToggle;\n\t\tthis._onButtonClick = opt.onClick || null;\n\n\t\t// Toggle button toggles the sliding panel to open or close.\n\t\tthis.toggleBtn = new Elem(n => n.elem('button', {\n\t\t\tclassName: 'panel--toggle iconbtn medium' + (opt.noToggle ? ' panel--notoggle' : '') + (opt.btnClass ? ' ' + opt.btnClass : ''),\n\t\t\tevents: {\n\t\t\t\tclick: (c, e) => {\n\t\t\t\t\tthis.toggle();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t},\n\t\t\t},\n\t\t}, [\n\t\t\tn.component(new FAIcon('caret-left')),\n\t\t]));\n\n\t\t// Click button is the corner button that can be clicked for an action.\n\t\tthis.clickBtn = new Elem(n => n.elem('button', {\n\t\t\tclassName: 'panel--btn iconbtn medium' + (opt.btnClass ? ' ' + opt.btnClass : ''),\n\t\t\tevents: {\n\t\t\t\tclick: (c, e) => {\n\t\t\t\t\tif (this._onButtonClick) {\n\t\t\t\t\t\tthis._onButtonClick(this);\n\t\t\t\t\t}\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t},\n\t\t\t},\n\t\t}, [\n\t\t\tn.component('icon', new FAIcon()),\n\t\t]));\n\n\t\tthis.subheaderComponent = opt.subheaderComponent || null;\n\t\tthis.footerComponent = opt.footerComponent || null;\n\t\tthis.footer = this.footerComponent\n\t\t\t? new Elem(n => n.elem('div', { className: 'panel--footer' }))\n\t\t\t: null;\n\n\t\tthis.setRootNode(n => n.elem('div', { className: 'panel--container' + (opt.instant ? ' panel--instant' : '') }, [\n\t\t\tn.component(this._alignLeft ? this.toggleBtn : null),\n\t\t\tn.elem('panel', 'div', opt, [\n\t\t\t\tn.component(!this._alignLeft ? this.toggleBtn : null),\n\t\t\t\tn.elem('headercont', 'div', { className: 'panel--headercont' }, [\n\t\t\t\t\tn.component('btn', new Fader(null, { className: 'panel--btncont' })),\n\t\t\t\t\tn.elem('header', 'div', { className: 'panel--header' }),\n\t\t\t\t]),\n\t\t\t\tn.elem('content', 'div', { className: 'panel--main' }),\n\t\t\t\tn.component(this.footer),\n\t\t\t]),\n\t\t]));\n\n\t\t// Additional components\n\t\tthis.titleFader = new Fader(null, { className: 'panel--title' });\n\t\tthis.titleTxt = new Txt(\"\", { tagName: 'h3', className: 'panel--titletxt' });\n\t\tthis.simpleBar = new SimpleBar(new Fader(null), { className: 'panel--content' });\n\t\tthis.rendered = false;\n\n\t\t// Bind callbacks\n\t\tthis._onTransitionEnd = this._onTransitionEnd.bind(this);\n\t\tthis._onClick = this._onClick.bind(this);\n\n\t\tthis.setTitle(title)\n\t\t\t.setComponent(component)\n\t\t\t.setButton(opt.onClick || null, opt.clickIcon)\n\t\t\t.toggle(!opt.closed, false);\n\t}\n\n\trender(el) {\n\t\tsuper.render(el);\n\t\tif (this.open) {\n\t\t\tthis._renderComponent();\n\t\t} else {\n\t\t\tthis._unrenderComponent();\n\t\t}\n\t\tlet e = this._rootElem.getNode('panel');\n\t\te.addEventListener('transitionend', this._onTransitionEnd);\n\t\te.addEventListener('click', this._onClick);\n\t\treturn e;\n\t}\n\n\tunrender() {\n\t\tlet e = this._rootElem.getNode('panel');\n\t\tif (e) {\n\t\t\te.removeEventListener('transitionend', this._onTransitionEnd);\n\t\t\te.removeEventListener('click', this._onClick);\n\t\t\tthis._unrenderComponent();\n\t\t\tsuper.unrender();\n\t\t}\n\t}\n\n\t_renderComponent() {\n\t\tif (!this.rendered) {\n\t\t\tthis.simpleBar.render(this._rootElem.getNode('content'));\n\t\t\tthis.titleFader.render(this._rootElem.getNode('header'));\n\t\t\tif (this.footer) {\n\t\t\t\tthis.footerComponent.render(this.footer.getElement());\n\t\t\t}\n\t\t\tif (this.subheaderComponent) {\n\t\t\t\tthis.subheaderComponent.render(this._rootElem.getNode('headercont'));\n\t\t\t}\n\t\t\tthis.removeClass('panel--hidden');\n\t\t\tthis.rendered = true;\n\t\t}\n\t}\n\n\t_unrenderComponent() {\n\t\tif (this.rendered) {\n\t\t\tthis.titleFader.unrender();\n\t\t\tthis.simpleBar.unrender();\n\t\t\tif (this.footer) {\n\t\t\t\tthis.footerComponent.unrender();\n\t\t\t}\n\t\t\tif (this.subheaderComponent) {\n\t\t\t\tthis.subheaderComponent.unrender();\n\t\t\t}\n\t\t\tthis.rendered = false;\n\t\t}\n\t\tthis.addClass('panel--hidden');\n\t}\n\n\t/**\n\t * Sets the title.\n\t * @param {string|LocaleString|Component} title Panel title.\n\t * @returns {this}\n\t */\n\tsetTitle(title) {\n\t\tif (!isComponent(title)) {\n\t\t\tthis.titleTxt.setText(title);\n\t\t\ttitle = this.titleTxt;\n\t\t}\n\t\tthis.titleFader.setComponent(title);\n\t\treturn this;\n\t}\n\n\tgetTitle() {\n\t\tlet c = this.titleFader.getComponent();\n\t\treturn c == this.titleTxt ? this.titleTxt.getText() : c;\n\t}\n\n\t/**\n\t * Sets the component to wrap.\n\t * @param {Component} component Component\n\t * @param {object} [opt] Optional parameters\n\t * @param {function} [opt.onRender] Callback function to call after rendering the component.\n\t * @param {function} [opt.onUnrender] Callback function to call before unrendering the component.\n\t * @returns {this}\n\t */\n\tsetComponent(component, opt) {\n\t\tthis.simpleBar.getComponent().setComponent(component, opt);\n\t\tthis.simpleBar.recalculate();\n\t\treturn this;\n\t}\n\n\tgetComponent() {\n\t\tthis.simpleBar.getComponent().getComponent();\n\t}\n\n\tgetSimpleBar() {\n\t\treturn this.simpleBar && this.simpleBar.simplebar || null;\n\t}\n\n\t/**\n\t * Sets the right corner button and click callback.\n\t * @param {?function} onClick Callback function when clicked. If null, the button will be removed.\n\t * @param {string} [icon] Icon to use for button. Defaults to 'close'\n\t * @returns {this}\n\t */\n\tsetButton(onClick, icon) {\n\t\tthis._onButtonClick = onClick || null;\n\t\tthis.clickBtn.getNode('icon').setIcon(icon || 'chevron-circle-left');\n\t\tthis._rootElem.getNode('btn').setComponent(onClick ? this.clickBtn : null);\n\t\treturn this;\n\t}\n\n\ttoggle(open, triggerOnToggle) {\n\t\tif (typeof open == 'undefined') {\n\t\t\topen = !this.open;\n\t\t}\n\t\topen = !!open;\n\t\tif (open === this.open) {\n\t\t\treturn;\n\t\t}\n\t\tthis.open = open;\n\t\tlet cb = open ? 'removeClass' : 'addClass';\n\t\tthis[cb]('panel--hide');\n\n\t\tif (this.getElement()) {\n\t\t\tif (open) {\n\t\t\t\tthis._renderComponent();\n\t\t\t} else {\n\t\t\t\tif (this._instant) {\n\t\t\t\t\tthis._onTransitionEnd();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (triggerOnToggle !== false && this._onToggle) {\n\t\t\tthis._onToggle(this, this.open);\n\t\t}\n\t\treturn this;\n\t}\n\n\t_onTransitionEnd(e) {\n\t\tlet el = this._rootElem.getNode('panel');\n\t\tif (el && (!e || e.target == el && e.propertyName == 'transform') && !this.open) {\n\t\t\tthis._unrenderComponent();\n\t\t}\n\t}\n\n\t_onClick() {\n\t\tif (!this.open) {\n\t\t\tthis.toggle(true);\n\t\t}\n\t}\n}\n\nexport default Panel;\n","import { RootElem, Txt, Html } from 'modapp-base-component';\nimport Collapser from './Collapser';\nimport Fader from './Fader';\nimport FAIcon from './FAIcon';\nimport PopupTip from './PopupTip';\nimport './panelSection.scss';\nimport isComponent from 'utils/isComponent';\n\nimport './panelSection.scss';\n\n/**\n * PanelSection is component with a header and collapsable content.\n */\nclass PanelSection extends RootElem {\n\n\t/**\n\t * Creates an instance of PanelSection\n\t * @param {string|LocaleString} title Title text.\n\t * @param {?Component} component Content component.\n\t * @param {object} [opt] Optional parameters.\n\t * @param {number} [opt.duration] Optional transition duration in milliseconds.\n\t * @param {boolean} [opt.open] Optional flag to set initial open state. Default is true.\n\t * @param {function} [opt.onToggle] Optional callback function called whenever the section is toggled.\n\t * @param {boolean} [opt.noToggle] Optional flag if toggle caret should be disabled.\n\t * @param {string|LocaleString} [opt.popupTip] Optional popup tip info message.\n\t * @param {string} [opt.popupTipPosition] Optional popup tip position. Defaults to 'left'.\n\t * @param {string|LocaleString} [opt.popupTipClassName] Class name to add to the popup tip. Defaults to 'popuptip--width-m'.\n\t * @param {boolean} [opt.required] Optional flag if a 'required-asterisk should be appended to the title.\n\t */\n\tconstructor(title, component, opt) {\n\t\tsuper(null);\n\t\topt = Object.assign({}, opt);\n\t\topt.className = 'panelsection' + (opt.className ? ' ' + opt.className : '') + (opt.noToggle ? ' notoggle' : '');\n\t\tthis.title = new Txt(\"\", { tagName: 'h3' });\n\t\tsuper.setRootNode(n => n.elem('div', opt, [\n\t\t\tn.elem('div', { className: 'panelsection--head', events: opt.noToggle ? null : { click: () => this.toggle() }}, [\n\t\t\t\tn.component('title', new Fader(null, { className: 'panelsection--title' })),\n\t\t\t\tn.component('required', new Html(\"\", { className: 'panelsection--required' })),\n\t\t\t\tn.component(opt.popupTip\n\t\t\t\t\t? new PopupTip(opt.popupTip, {\n\t\t\t\t\t\tclassName: 'panelsection--popuptip ' + (opt.popupTipClassName || 'popuptip--width-m'),\n\t\t\t\t\t\tposition: opt.popupTipPosition || 'left',\n\t\t\t\t\t})\n\t\t\t\t\t: null,\n\t\t\t\t),\n\t\t\t\tn.component(opt.noToggle\n\t\t\t\t\t? null\n\t\t\t\t\t: new FAIcon('caret-right', { className: 'panelsection--caret' }),\n\t\t\t\t),\n\t\t\t]),\n\t\t\tn.component('content', new Collapser(null, { className: 'panelsection--content', duration: opt.duration })),\n\t\t]));\n\n\t\tthis._onToggle = opt.onToggle;\n\t\tthis.setTitle(title)\n\t\t\t.setComponent(component)\n\t\t\t.setRequired(!!opt.required)\n\t\t\t.toggle(opt.open !== false, false);\n\t}\n\n\t/**\n\t * Get section open state.\n\t * @returns {boolean} True if open, otherwise false.\n\t */\n\tisOpen() {\n\t\treturn this._open;\n\t}\n\n\t/**\n\t * Sets the title text.\n\t * @param {string|LocaleString|Component} title Title text or component.\n\t * @returns {this}\n\t */\n\tsetTitle(title) {\n\t\tlet n = this._rootElem.getNode('title');\n\t\tif (isComponent(title)) {\n\t\t\tn.setComponent(title);\n\t\t} else {\n\t\t\tthis.title.setText(title);\n\t\t\tn.setComponent(this.title);\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the required flag.\n\t * @param {*} isRequired Flag if the required asterisk should be appended tp the title.\n\t * @returns {this}\n\t */\n\tsetRequired(isRequired) {\n\t\tlet n = this._rootElem.getNode('required');\n\t\tn.setHtml(isRequired ? \" *\" : \"\");\n\t\treturn this;\n\t}\n\n\t/**\n\t * Gets the current title.\n\t * @returns {string|LocaleString|Component} Title text or component.\n\t */\n\tgetTitle() {\n\t\tlet c = this._rootElem.getNode('title');\n\t\treturn c == this.title ? c.getText() : c;\n\t}\n\n\t/**\n\t * Sets the content component.\n\t * @param {Component|Promise.<Component>} component Content component or promise of a component.\n\t * @returns {this}\n\t */\n\tsetComponent(component) {\n\t\t// I we get something other than a promise.\n\t\tif (!component || isComponent(component)) {\n\t\t\treturn this._setComponent(component);\n\t\t}\n\n\t\tlet promise = Promise.resolve(component).then(c => {\n\t\t\tif (promise !== this._promise) return;\n\t\t\tthis._promise = null;\n\t\t\tthis._setComponent(c);\n\t\t});\n\t\tthis._promise = promise;\n\t\treturn this;\n\t}\n\n\t_setComponent(c) {\n\t\tthis.component = c || null;\n\t\tif (this._open) {\n\t\t\tthis._rootElem.getNode('content').setComponent(this.component);\n\t\t};\n\t\treturn this;\n\t}\n\n\t/**\n\t * Gets the current content.\n\t * @returns {?Component} Set content component.\n\t */\n\tgetComponent() {\n\t\treturn this.component;\n\t}\n\n\t/**\n\t * Toggles section between open and close.\n\t * @param {boolean} [open] Optional open state to set. If undefined, open state will be toggled.\n\t * @param {function} [triggerOnToggle] Flag if this toggle should trigger the onToggle callback. Defaults to true.\n\t * @returns {this}\n\t */\n\ttoggle(open, triggerOnToggle) {\n\t\tif (typeof open == 'undefined') {\n\t\t\topen = !this._open;\n\t\t}\n\t\topen = !!open;\n\t\tif (open === this._open) return;\n\t\tthis._open = open;\n\t\tthis._rootElem[this._open ? 'addClass' : 'removeClass']('open');\n\t\tthis._rootElem.getNode('content').setComponent(this._open ? this.component : null);\n\t\tif (triggerOnToggle !== false && this._onToggle) {\n\t\t\tthis._onToggle(this, this._open);\n\t\t}\n\t\treturn this;\n\t}\n}\n\nexport default PanelSection;\n","import { Elem } from 'modapp-base-component';\nimport './popupPill.scss';\n\nconst defaultCtx = {};\n\nconst typeClassNames = {\n\tdark: ' popuppill--style-dark',\n\tborder: ' popuppill--style-border',\n\tchannelBorder: ' popuppill--style-channelborder',\n};\n\n/**\n * PopupPill renders a placeholder that, when moused over or clicked, will show\n * a popup. Only one popup will be open at the same time for any popup pill\n * using the same ctx (context) object.\n */\nclass PopupPill extends Elem {\n\n\t/**\n\t * Creates an instance of PopupPill.\n\t * @param {function} componentFactory Popup content component factory\n\t * @param {object} [opt] Optional parameters.\n\t * @param {object} [opt.ctx] Context object. Defaults to a shared context.\n\t * @param {string} [opt.type] Type of pill. May be 'default', 'dark', or 'border'.\n\t * @param {string} [opt.pillClassName] Additional class name set on the pill element.\n\t */\n\tconstructor(componentFactory, opt) {\n\t\tsuper(null);\n\n\t\topt = opt || {};\n\t\tthis.opt = opt;\n\t\tthis.componentFactory = componentFactory;\n\t\tthis.ctx = opt.ctx || defaultCtx;\n\t\tthis.module = module;\n\n\t\tthis._tip = null;\n\t\tthis._timer = null;\n\n\t\tthis.close = this.close.bind(this);\n\n\t\tsuper.setRootNode(n => n.elem('div', {\n\t\t\tclassName: 'popuppill' + (opt.className ? ' ' + opt.className : ''),\n\t\t\tevents: {\n\t\t\t\tmouseover: (c, ev) => {\n\t\t\t\t\tthis._clearTimeout();\n\t\t\t\t\tif (!this.ctx.clicked) {\n\t\t\t\t\t\tthis._renderTip();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tmouseleave: (c, ev) => {\n\t\t\t\t\tif (!this.ctx.clicked) {\n\t\t\t\t\t\tthis._clearTimeout();\n\t\t\t\t\t\tthis._timer = setTimeout(this.close, 300);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tclick: (e, ev) => {\n\t\t\t\t\tthis.toggle();\n\t\t\t\t\tev.stopPropagation();\n\t\t\t\t\tev.preventDefault();\n\t\t\t\t},\n\t\t\t},\n\t\t}, [\n\t\t\tn.elem('div', { className: 'popuppill--pill' + (typeClassNames[opt.type] || '') + (opt.pillClassName ? ' ' + opt.pillClassName : '') }),\n\t\t]));\n\t}\n\n\tunrender() {\n\t\tthis._unrenderTip();\n\t\tsuper.unrender();\n\t}\n\n\ttoggle() {\n\t\tif (this._tip) {\n\t\t\tif (!this.ctx.clicked) {\n\t\t\t\tthis.ctx.clicked = true;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._unrenderTip();\n\t\t} else {\n\t\t\tthis._renderTip();\n\t\t\tthis.ctx.clicked = true;\n\t\t}\n\t}\n\n\tclose() {\n\t\tthis._unrenderTip();\n\t}\n\n\t_clearTimeout() {\n\t\tclearTimeout(this._timer);\n\t\tthis._timer = null;\n\t}\n\n\t_renderTip() {\n\t\tif (this._tip) return;\n\n\t\tif (this.ctx.tip) {\n\t\t\tthis.ctx.tip.close();\n\t\t}\n\n\t\tlet el = this.getElement();\n\t\tif (!el) return;\n\n\t\tthis._tip = new Elem(n => n.elem('div', { className: 'popuppill--tip' }, [\n\t\t\tn.component(this.componentFactory()),\n\t\t]));\n\t\tthis._caret = new Elem(n => n.elem('div', { className: 'popuppill--caret' }));\n\t\tthis._tip.render(el);\n\t\tthis._caret.render(el);\n\n\t\tthis.ctx.tip = this;\n\t}\n\n\t_unrenderTip() {\n\t\tif (!this._tip) return;\n\n\t\tthis._tip.unrender();\n\t\tthis._caret.unrender();\n\n\t\tthis._tip = null;\n\t\tthis._caret = null;\n\n\t\tif (this.ctx.tip === this) {\n\t\t\tthis.ctx.tip = null;\n\t\t\tthis.ctx.clicked = false;\n\t\t}\n\t\tthis._clearTimeout();\n\t}\n}\n\nexport default PopupPill;\n","import { Txt, RootElem, Elem } from 'modapp-base-component';\nimport FAIcon from './FAIcon';\nimport Fader from './Fader';\nimport isComponent from 'utils/isComponent';\nimport './popupTip.scss';\n\nconst posHandlers = {\n\ttop: {\n\t\tfits: (rect, rootRect, tipRect) => rect.top - rootRect.top > tipRect.height,\n\t\ttop: rect => rect.top,\n\t\tleft: rect => rect.left + rect.width / 2,\n\t},\n\tright: {\n\t\tfits: (rect, rootRect, tipRect) => rootRect.right - rect.right > tipRect.width,\n\t\ttop: rect => rect.top + rect.height / 2,\n\t\tleft: rect => rect.right,\n\t},\n\tbottom: {\n\t\tfits: (rect, rootRect, tipRect) => rootRect.bottom - rect.bottom > tipRect.height,\n\t\ttop: rect => rect.bottom,\n\t\tleft: rect => rect.left + rect.width / 2,\n\t},\n\tleft: {\n\t\tfits: (rect, rootRect, tipRect) => rect.left - rootRect.left > rootRect.width,\n\t\ttop: rect => rect.top + rect.height / 2,\n\t\tleft: rect => rect.left,\n\t},\n\t'bottom-right': {\n\t\tfits: (rect, rootRect, tipRect) => rootRect.bottom - rect.bottom > tipRect.height,\n\t\ttop: rect => rect.bottom,\n\t\tleft: rect => rect.left + rect.width / 2,\n\t},\n};\n\n/**\n * PopupTip shows an info icon and pops up a tip text when clicked.\n */\nclass PopupTip extends RootElem {\n\n\t/**\n\t * Creates an instance of PopupTip\n\t * @param {string|LocaleString|Component} tip Tip to show on click.\n\t * @param {object} [opt] Optional parameters.\n\t * @param {string} [opt.position] Position of the tooltip. May be 'left', 'right', 'top', 'bottom'. Defaults to 'left'. }\n\t * @param {string} [opt.icon] Font-awesome icon name. Defaults to 'info-circle'.\n\t * @param {string} [opt.className] Additional class names to append to font-awesome class names.\n\t * @param {object} [opt.attributes] Key/value attributes object\n\t * @param {object} [opt.events] Key/value events object, where the key is the event name, and value is the callback.\n\t * @param {boolean} [opt.noIcon] Flag to prevent rendering an icon. It render as open.\n\t * @param {boolean} [opt.noToggle] Flag to prevent closing of the tool tip. It render as open.\n\t * @param {Node} [opt.track] Element node to track the position of.\n\t */\n\tconstructor(tip, opt) {\n\t\tsuper(null);\n\t\tlet pos = opt.position || 'left';\n\t\topt = Object.assign({ attributes: null }, opt);\n\t\topt.className = 'popuptip' + (typeof pos == 'string' ? ' popuptip--position-' + pos : '') + (opt.track ? ' popuptip--track' : '') + (opt.className ? ' ' + opt.className : '');\n\t\topt.events = Object.assign({}, opt.events, {\n\t\t\tclick: opt.noToggle ? null : (c, ev) => {\n\t\t\t\tthis.toggle();\n\t\t\t\tev.stopPropagation();\n\t\t\t\tev.preventDefault();\n\t\t\t},\n\t\t});\n\n\t\t// Bind callbacks\n\t\tthis._close = opt.noToggle ? null : (e) => {\n\t\t\tlet n = this.getElement();\n\t\t\tif (n && !n.contains(e.target)) {\n\t\t\t\tthis.toggle(false);\n\t\t\t}\n\t\t};\n\n\t\tthis._open = !!opt.noIcon;\n\t\tsuper.setRootNode(n => n.elem('div', opt, opt.noIcon\n\t\t\t? [\n\t\t\t\tn.component('tip', new Fader()),\n\t\t\t]\n\t\t\t: [\n\t\t\t\tn.elem('div', { className: 'popuptip--btn' }, [\n\t\t\t\t\tn.component(new FAIcon(opt.icon || 'info-circle', { className: 'popuptip--icon' })),\n\t\t\t\t]),\n\t\t\t\tn.component('tip', new Fader()),\n\t\t\t],\n\t\t));\n\t\tthis.setTip(tip || null);\n\n\t\tthis._track = opt.track;\n\t\tthis._position = pos;\n\t\t// Bind callbacks\n\t\tthis._setPosition = this._setPosition.bind(this);\n\t}\n\n\trender(el) {\n\t\tthis._setListeners(true);\n\t\tlet rel = super.render(el);\n\t\tthis._observe(el);\n\t\tthis._setPosition();\n\t\treturn rel;\n\t}\n\n\tunrender() {\n\t\tthis._setListeners(false);\n\t\tthis._stopObserve();\n\t\tsuper.unrender();\n\t}\n\n\t/**\n\t * Sets the tip.\n\t * @param {string|LocaleString|Component} tip Tip to show on click.\n\t * @returns {this}\n\t */\n\tsetTip(tip) {\n\t\tif (tip !== this._tip) {\n\t\t\tthis._tip = new Elem(n => n.elem('div', { className: 'popuptip--tip' }, [\n\t\t\t\tn.component(isComponent(tip) ? tip : new Txt(tip, { className: 'popuptip--text' })),\n\t\t\t]));\n\t\t\tthis._setComponent();\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t * Toggles the tooltip between open and closed.\n\t * @param {boolean} [open] Optional state to set the popup tip to. Defaults to toggle between open/close.\n\t * @returns {this}\n\t */\n\ttoggle(open) {\n\t\tthis._open = typeof open == 'undefined' ? !this._open : !!open;\n\t\tthis._setComponent();\n\t\treturn this;\n\t}\n\n\t_setComponent() {\n\t\tthis._rootElem.getNode('tip').setComponent(this._open ? this._tip : null);\n\t\tthis._setPosition();\n\t}\n\n\t_setListeners(on) {\n\t\tif (this._close) {\n\t\t\tlet cb = on ? 'addEventListener' : 'removeEventListener';\n\t\t\tdocument[cb]('keydown', this._close, true);\n\t\t\tdocument[cb]('click', this._close, true);\n\t\t}\n\t}\n\n\t_observe(el) {\n\t\tif (!this._track) return;\n\n\t\twindow.addEventListener('resize', this._setPosition);\n\t\tthis._observer = new IntersectionObserver(this._setPosition, {\n\t\t\troot: el,\n\t\t\trootMargin: '1024px',\n\t\t});\n\t\tthis._observer.observe(this._track);\n\t}\n\n\t_stopObserve() {\n\t\tif (!this._observer) return;\n\n\t\tthis._observer.disconnect();\n\t\tthis._observer = null;\n\t\twindow.removeEventListener('resize', this._setPosition);\n\t}\n\n\t_setPosition() {\n\t\tif (!this._observer || !this._track || !this._open) return;\n\n\t\tlet rootRect = this._observer.root.getBoundingClientRect();\n\t\tlet rect = this._track.getBoundingClientRect();\n\n\t\t// Handle cycling through positions to find the first fit.\n\t\tlet handler = null;\n\t\tif (Array.isArray(this._position)) {\n\t\t\tlet tipRect = this._tip.getElement().getBoundingClientRect();\n\n\t\t\tfor (let pos of this._position) {\n\t\t\t\tlet h = posHandlers[pos];\n\t\t\t\tif (!handler && h.fits(rect, rootRect, tipRect)) {\n\t\t\t\t\thandler = h;\n\t\t\t\t\tthis.addClass('popuptip--position-' + pos);\n\t\t\t\t} else {\n\t\t\t\t\tthis.removeClass('popuptip--position-' + pos);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Fallback to intial in case none of them fits.\n\t\t\tif (!handler) {\n\t\t\t\tlet pos = this._position[0];\n\t\t\t\thandler = posHandlers[pos];\n\t\t\t\tthis.addClass('popuptip--position-' + pos);\n\t\t\t}\n\t\t} else {\n\t\t\thandler = posHandlers[this._position] || posHandlers['right'];\n\t\t}\n\n\t\tthis.setStyle('top', handler.top(rect, rootRect) + 'px');\n\t\tthis.setStyle('left', handler.left(rect, rootRect) + 'px');\n\t}\n}\n\nexport default PopupTip;\n","function domRectToObject(r) {\n\treturn { x: r.x, y: r.y, height: r.height, width: r.width };\n}\n\nfunction equalRect(a, b) {\n\treturn a.x == b.x && a.y == b.y && a.width == b.width && a.height == b.height;\n}\n\n/** @typedef {x: number, y: number, width: number, height: number } Rect */\n\n/**\n * ResizeObserverComponent wraps a component and observes its element for any changes in size.\n */\nclass ResizeObserverComponent {\n\n\t/**\n\t * Creates a new ResizeObserverComponent instance.\n\t * @param {Component} component Component to observe\n\t * @param {(rect: Rect, oldRect: Rect) => void} callback Callback function called on resize and render. On initial render, oldRect is always null.\n\t */\n\tconstructor(component, callback) {\n\t\tthis.component = component;\n\t\tthis.callback = callback;\n\t\tthis.rel = null;\n\t\tthis.rect = null;\n\n\t\t// Bind callbacks\n\t\tthis._onResize = this._onResize.bind(this);\n\t}\n\n\trender(el) {\n\t\tthis.rel = this.component?.render(el) || this.component?.getElement?.() || null;\n\t\tif (this.rel) {\n\t\t\tthis.rect = domRectToObject(this.rel.getBoundingClientRect());\n\t\t\tthis.callback(this.rect, null);\n\t\t}\n\n\t\tthis._observe();\n\t}\n\n\tunrender() {\n\t\tthis._stopObserve();\n\t\tthis.component?.unrender();\n\t\tthis.rel = null;\n\t\tthis.rect = null;\n\t}\n\n\tgetRect() {\n\t\treturn this.rect;\n\t}\n\n\tgetComponent() {\n\t\treturn this.component;\n\t}\n\n\t_onResize() {\n\t\tif (!this.rel) return;\n\n\t\tlet rect = domRectToObject(this.rel.getBoundingClientRect());\n\t\tif (equalRect(rect, this.rect)) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet oldRect = this.rect;\n\t\tthis.rect = rect;\n\t\tthis.callback(rect, oldRect);\n\t}\n\n\t_observe(el) {\n\t\tif (!this.rel) return;\n\n\t\twindow.addEventListener('resize', this._onResize);\n\t\tthis._observer = new ResizeObserver(this._onResize);\n\t\tthis._observer.observe(this.rel);\n\t}\n\n\t_stopObserve() {\n\t\tif (!this._observer) return;\n\n\t\tthis._observer.disconnect();\n\t\tthis._observer = null;\n\t\twindow.removeEventListener('resize', this._onResize);\n\t}\n}\n\nexport default ResizeObserverComponent;\n","import { RootElem } from 'modapp-base-component';\nimport l10n from 'modapp-l10n';\nimport errToL10n from 'utils/errToL10n';\nimport './scriptCompileError.scss';\n\n/**\n * ScriptCompileError shows a compile error to use in char log.\n */\nclass ScriptCompileError extends RootElem {\n\n\t/**\n\t * Creates an instance of ScriptCompileError\n\t * @param {Err} err Compile error..\n\t */\n\tconstructor(err) {\n\t\tsuper(n => n.elem('div', { className: 'scriptcompileerror' }, [\n\t\t\tn.elem('div', [\n\t\t\t\tn.text(l10n.t('scriptCompileError.compileError', \"Script compile error\")),\n\t\t\t]),\n\t\t\tn.elem('div', { className: 'common--pre-wrap scriptcompileerror--msg' }, [\n\t\t\t\tn.text(l10n.t(errToL10n(err))),\n\t\t\t]),\n\t\t]));\n\t}\n}\n\nexport default ScriptCompileError;\n","import { RootElem } from 'modapp-base-component';\nimport simplebar from 'simplebar';\nimport 'simplebar/dist/simplebar.css';\n\n/**\n * SimpleBar is a wrapper around simplebar.\n *\n * The options may also contain any option {@link https://github.com/Grsmto/simplebar|simplebar}.\n * @param {object} [opt] Options.\n * @param {boolean} [opt.lockToBottom] Flag that enables locking to bottom. Defaults to false.\n * @param {function} [opt.onAtBottom] Callback function called whenever the atBottom value changes: function(atBottom, causedByScroll)\n */\nclass SimpleBar extends RootElem {\n\tconstructor(component, opt) {\n\t\topt = Object.assign({ tagName: 'div' }, opt);\n\t\tsuper(opt.tagName, opt);\n\t\tthis._sb = null;\n\t\tthis._opt = opt;\n\t\tthis._component = component;\n\t\tthis._lock = !!opt.lockToBottom;\n\t\tthis._onAtBottom = opt.onAtBottom || null;\n\n\t\tif (this._lock) {\n\t\t\tthis._atBottom = true;\n\t\t\tthis._locked = false;\n\t\t\tthis._lastScroll = 0;\n\n\t\t\t// Bind callbacks;\n\t\t\tthis._onAnimFrame = this._onAnimFrame.bind(this);\n\t\t\tthis._onScroll = this._onScroll.bind(this);\n\t\t}\n\t}\n\n\tget simplebar() {\n\t\treturn this._sb;\n\t}\n\n\tget atBottom() {\n\t\treturn this._atBottom;\n\t}\n\n\tgetComponent() {\n\t\treturn this._component;\n\t}\n\n\trender(el) {\n\t\tlet e = super.render(el);\n\t\tthis._sb = new simplebar(e, this._opt);\n\t\tthis._component.render(this._sb.getContentElement());\n\t\tif (this._lock) {\n\t\t\tthis._setListener(true);\n\t\t\tthis._lockToBottom();\n\t\t}\n\t\treturn e;\n\t}\n\n\tunrender() {\n\t\tif (this._sb) {\n\t\t\tthis._component.unrender();\n\t\t\tthis._sb.unMount();\n\t\t\tthis._sb = null;\n\t\t\tsuper.unrender();\n\t\t}\n\t}\n\n\trecalculate() {\n\t\tif (this._sb) {\n\t\t\tthis._sb.recalculate();\n\t\t}\n\t}\n\n\t_lockToBottom() {\n\t\tif (!this._atBottom || this._locked) return;\n\t\tthis._locked = true;\n\t\trequestAnimationFrame(this._onAnimFrame);\n\t}\n\n\t_onAnimFrame() {\n\t\tif (!this._sb || !this._atBottom) {\n\t\t\tthis._locked = false;\n\t\t\treturn;\n\t\t}\n\t\tlet se = this._sb.getScrollElement();\n\t\tse.scrollTop = se.scrollHeight;\n\t\trequestAnimationFrame(this._onAnimFrame);\n\t}\n\n\t_setListener(on) {\n\t\tthis._sb.getScrollElement()[on ? 'addEventListener' : 'removeEventListener']('scroll', this._onScroll);\n\t}\n\n\t_onScroll(ev) {\n\t\tif (!this._sb) return;\n\t\tlet se = this._sb.getScrollElement();\n\t\tlet stch = se.scrollTop + se.clientHeight;\n\t\tlet sh = se.scrollHeight;\n\n\t\tif (se.scrollTop < this._lastScroll && Math.round(stch) < Math.round(sh)) {\n\t\t\tthis._setAtBottom(false);\n\t\t// +4 for a bit of additional buffer, in case of scaling/zooming irregularities\n\t\t} else if (Math.round(stch + 4) >= sh) {\n\t\t\tthis._setAtBottom(true);\n\t\t\tthis._lockToBottom();\n\t\t}\n\t\tthis._lastScroll = se.scrollTop;\n\t}\n\n\t_setAtBottom(v) {\n\t\tif (this._atBottom !== v) {\n\t\t\tthis._atBottom = v;\n\t\t\tif (this._onAtBottom) {\n\t\t\t\tthis._onAtBottom(v);\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport default SimpleBar;\n","import { RootElem } from 'modapp-base-component';\nimport './togglebox.scss';\n\n/**\n * ToggleBox is a checkbox-like box that can be toggled between states.\n */\nclass ToggleBox extends RootElem {\n\n\t/**\n\t * Creates an instance of ToggleBox\n\t * @param {*} value Initial value.\n\t * @param {object} [opt] Optional parameters.\n\t * @param {Array.<*>} [opt.values] Values to cycle through. Defaults to [null, true, false].\n\t * @param {string} [opt.className] Additional class names to append to font-awesome class names.\n\t * @param {object} [opt.attributes] Key/value attributes object\n\t * @param {object} [opt.events] Key/value events object, where the key is the event name, and value is the callback. Default click event is calling toggleNext()\n\t * @param {function} [opt.onChange] On change callback: func(value, component)\n\t * @param {boolean} [opt.disableClick] Flag to disable toggle to next on click.\n\t */\n\tconstructor(value, opt) {\n\t\topt = Object.assign({}, opt);\n\t\topt.className = 'togglebox' + (opt.className ? ' ' + opt.className : '');\n\t\tsuper('button', opt, [{ tagName: 'div' }]);\n\t\tthis._idx = -1;\n\t\tthis._values = opt.values || [ false, true ];\n\t\tif (!opt.disableClick) {\n\t\t\tthis.setEvent('click', (c, e) => {\n\t\t\t\te.preventDefault();\n\t\t\t\tthis.toggleNext();\n\t\t\t\te.stopPropagation();\n\t\t\t});\n\t\t}\n\t\tthis.setValue(value, false);\n\t\tthis._onChange = opt.onChange;\n\t}\n\n\t/**\n\t * Gets the value\n\t * @returns {*} Current set value.\n\t */\n\tgetValue() {\n\t\treturn this._values[this._idx];\n\t}\n\n\t/**\n\t * Sets the value.\n\t * @param {?boolean} value Value to set.\n\t * @param {boolean} [triggerChange] Flag to tell if changes should trigger the onChange callback.\n\t * @returns {this}\n\t */\n\tsetValue(value, triggerChange) {\n\t\tlet idx = 0;\n\t\tfor (let i = 0; i < this._values.length; i++) {\n\t\t\tif (value === this._values[i]) {\n\t\t\t\tidx = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (idx === this._idx) return;\n\n\t\tif (this._idx >= 0) {\n\t\t\tthis.removeClass('value-' + this._idx);\n\t\t}\n\t\tthis.addClass('value-' + idx);\n\t\tthis._idx = idx;\n\t\tif (triggerChange !== false && this._onChange) {\n\t\t\tthis._onChange(this.getValue(), this);\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t * Toggles to the next value.\n\t * @returns {this}\n\t */\n\ttoggleNext() {\n\t\tthis.setValue(this._values[(this._idx + 1) % this._values.length]);\n\t\treturn this;\n\t}\n}\n\nexport default ToggleBox;\n","\n/**\n * Checks if two arrays are equal.\n * @param {Array} a Array to compare.\n * @param {Array} b Array to compare.\n * @returns {boolean} True if arrays are equal, otherwise false.\n */\nexport default function arraysEqual(a, b) {\n\tif (a === b) return true;\n\tif (!a || !b || a.length !== b.length) return false;\n\n\tfor (let i = 0; i < a.length; i++) {\n\t\tif (a[i] !== b[i]) return false;\n\t}\n\treturn true;\n}\n","import l10n from 'modapp-l10n';\n\nconst txtTo = l10n.l('charEvent.targetTooltipText.to', \"To \");\n\n/**\n * Extracts the main target character for an event, by either selecting the one\n * matching the character, or the first mentioned target.\n * @param {string} charId ID of character receiving the event\n * @param {object} ev Event with targets\n * @returns {object} Main target character.\n */\nexport function extractTarget(charId, ev) {\n\tlet c = ev.char;\n\tlet ts = ev.targets;\n\tif (ts && c?.id != charId) {\n\t\tfor (let t of ts) {\n\t\t\tif (t.id == charId) {\n\t\t\t\treturn t;\n\t\t\t}\n\t\t}\n\t}\n\treturn ev.target || (ts && ts[0]);\n}\n\n/**\n * Returns true if the character is targeted by the event.\n * @param {string} charId ID of character receiving the event\n * @param {object} ev Event with targets\n * @returns {boolean} True if targeted.\n */\nexport function isTargeted(charId, ev) {\n\treturn !!(ev.target?.id == charId || ev.targets?.find(t => t.id == charId));\n}\n\n/**\n * Generates a tooltip text consisting of all targets for an event.\n * @param {object} ev Event with targets\n * @returns {string} Tooltip text.\n */\nexport function targetTooltipText(ev) {\n\tlet ts = ev.target ? [ ev.target ] : [];\n\tif (ev.targets) {\n\t\tts = ts.concat(ev.targets);\n\t}\n\n\treturn ts.length\n\t\t? l10n.t(txtTo) + ts.map(t => t.name + \" \" + t.surname).join(\", \")\n\t\t: null;\n}\n","import Err from 'classes/Err';\n\nexport function communicationTooLong(step, maxLength) {\n\treturn new Err('cmdErr.communicationTooLong', \"The message exceeds the max length of {maxLength} characters.\", { maxLength });\n}\n\nexport function descriptionTooLong(step, maxLength) {\n\treturn new Err('cmdErr.descriptionTooLong', \"The description exceeds the max length of {maxLength} characters.\", { maxLength });\n}\n\nexport function shortDescriptionTooLong(step, maxLength) {\n\treturn new Err('cmdErr.shortDescriptionTooLong', \"The short description exceeds the max length of {maxLength} characters.\", { maxLength });\n}\n\nexport function itemNameTooLong(step, maxLength) {\n\treturn new Err('cmdErr.itemNameTooLong', \"The name exceeds the max length of {maxLength} characters.\", { maxLength });\n}\n\nexport function keyTooLong(step, maxLength) {\n\treturn new Err('cmdErr.keyTooLong', \"The key word exceeds the max length of {maxLength} characters.\", { maxLength });\n}\n\nexport function propertyTooLong(step, maxLength) {\n\treturn new Err('cmdErr.propertyTooLong', \"The property exceeds the max length of {maxLength} characters.\", { maxLength });\n}\n\nexport function scriptTooLong(step, maxLength) {\n\treturn new Err('cmdErr.scriptTooLong', \"The script source code exceeds the max length of {maxLength} characters.\", { maxLength });\n}\n","import { StringStream, language } from '@codemirror/language';\n\n/**\n * Iterates over each token in editorState, calling the callback for each.\n * If the callback returns true, that token will be returned, otherwise it\n * will continue to iterate. If no callback is provided, it will return the\n * last token state.\n * @param {EditorState} editorState Codemirror 6 editor state.\n * @param {function} [callback] Callback function returning true if the token is the one: function({ state, token, start, end }) -> boolean\n * @returns {object} Parser state object\n */\nexport function getToken(editorState, callback) {\n\tlet len = editorState.doc.length;\n\tlet parser = editorState.facet(language).streamParser;\n\tlet state = parser.startState();\n\tlet lineStart = 0;\n\tlet from = 0;\n\tlet to = 0;\n\tlet type = null;\n\n\twhile (lineStart < len) {\n\t\tlet line = editorState.doc.lineAt(lineStart);\n\t\tif (line.length) {\n\t\t\tlet stream = new StringStream(line.text, editorState.tabSize);\n\t\t\twhile (stream.pos < line.length) {\n\t\t\t\tstream.start = stream.pos;\n\t\t\t\tfrom = stream.pos + lineStart;\n\t\t\t\ttype = parser.token(stream, state);\n\t\t\t\tto = stream.pos + lineStart;\n\t\t\t\tif (callback) {\n\t\t\t\t\tlet result = { type, state, from, to };\n\t\t\t\t\tif (callback(result)) {\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tparser.blankLine(state);\n\t\t}\n\t\tlineStart = line.to + 1;\n\t}\n\n\treturn { type, state, from, to };\n}\n","/**\n * Copies a text to clipboard.\n * @param {string} str Text to copy to clipboard.\n * @returns {Promise} Promise of copying to clipboard.\n */\nexport default function(str) {\n\t// Check if Clipboard API is available. If not, use legacy method.\n\tif (!navigator.clipboard) {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\ttry {\n\t\t\t\tlet el = document.createElement('textarea');\n\t\t\t\tel.value = str;\n\t\t\t\tel.setAttribute('readonly', '');\n\t\t\t\tel.style = { position: 'absolute', left: '-9999px' };\n\t\t\t\tdocument.body.appendChild(el);\n\t\t\t\tel.select();\n\t\t\t\tdocument.execCommand('copy');\n\t\t\t\tdocument.body.removeChild(el);\n\t\t\t\tresolve();\n\t\t\t} catch (ex) {\n\t\t\t\treject(ex);\n\t\t\t}\n\t\t});\n\t}\n\n\treturn navigator.clipboard.writeText(str);\n}\n","/**\n * Turns a number into a string. If the number is > 9, it will be \"9+\".\n * @param {number} count Count number.\n * @returns {string} Count string.\n */\nexport default function counterString(count) {\n\treturn count ? (count > 9 ? '9+' : count) : '0';\n}\n","import { isResError } from 'resclient';\nimport l10n from 'modapp-l10n';\n\n/**\n * Tests if the provided model is an error, and then returns a LocaleString of that error, or errStr.\n * Otherwise it calls the function f with the model, and returns its value.\n * @param {Model} m Model\n * @param {function} f Callback function: function(model) -> string|LocaleString\n * @param {string|LocaleString} [errStr] Optional error string if model is an error.\n * @returns {string|LocaleString}\n */\nexport default function errString(m, f, errStr) {\n\tif (isResError(m)) {\n\t\treturn errStr || l10n.l(m.code, m.message, m.data);\n\t}\n\treturn f ? f(m) : errStr || '';\n}\n","import l10n from 'modapp-l10n';\n\n/**\n * Turns an error object into a LocaleString.\n * @param {object} err Error object such as an ResError.\n * @returns {LocaleString} Locale string.\n */\nexport default function errToL10n(err) {\n\tif (typeof err != 'object' || err === null || !(err.code && err.message)) {\n\t\treturn l10n.isLocaleString(err)\n\t\t\t? err\n\t\t\t: l10n.l('system.unknownError', \"Unknown error: {json}\", { json: JSON.stringify(err) });\n\t}\n\treturn l10n.l(err.code, err.message, err.data);\n}\n","/**\n * Selects a part (from -> to) of a string\n * @param {string} str String.\n * @param {?RegExp} fromRegex Single character regex for \"from\" matching. Null means no match.\n * @param {?RegExp} toRegex Single character regex for \"to\" matching. Null means no match.\n * @param {Number} from Initial \"from\" position.\n * @param {Number} to Initial \"to\" position.\n * @returns {object} Returns an object { from, to } with number values.\n */\nexport default function(str, fromRegex, toRegex, from, to) {\n\tif (fromRegex) {\n\t\twhile (from && fromRegex.test(str.charAt(from - 1))) {\n\t\t\t--from;\n\t\t}\n\t}\n\tif (toRegex) {\n\t\twhile (to < str.length && toRegex.test(str.charAt(to))) {\n\t\t\t++to;\n\t\t}\n\t}\n\treturn { from, to };\n}\n","export default function(s) {\n\tif (!s || typeof s != 'string') return s;\n\treturn s.charAt(0).toUpperCase() + s.substr(1);\n}\n","function fix(n) {\n\treturn parseFloat(n.toFixed(1));\n}\n\n/**\n * Formats a number of bytes into a more easily readable format.\n * @param {Number} bytes Bytes.\n * @returns {string} Formatted string.\n */\nexport default function formatByteSize(bytes) {\n\treturn bytes < 1024\n\t\t? bytes + \" bytes\"\n\t\t: bytes < (1024 * 1024)\n\t\t\t? fix(bytes / 1024) + \" KiB\"\n\t\t\t: fix(bytes / (1024 * 1024)) + \" MiB\";\n}\n","import formatDate from './formatDate';\nimport formatTime from './formatTime';\n\n/**\n * Formats a Date object to a string in human readable format with date and\n * time.\n * @param {Date} date Date object.\n * @param {object} [opt] Optional params. See formatDate.\n * @returns {string} Formatted string.\n */\nexport default function formatDateTime(date, opt) {\n\treturn date ? formatDate(date, opt) + \", \" + formatTime(date, opt) : \"-\";\n}\n","import escapeHtml from './escapeHtml.js';\n\nconst defaultOpt = {};\n\nfunction keySort(a, b) {\n\treturn a.key.localeCompare(b.key);\n}\n\nconst typeText = 'text';\n\n/**\n * Token a token produced by the parser.\n * The text \"**YES!**\" could produce the tokens:\n * [\n * new Token('strong_start', '<strong>'),\n * new Token('text', 'YES!', 1),\n * new Token('strong_end', '</strong>'),\n * ]\n */\nclass Token {\n\t/**\n\t * Creates a new Token instance.\n\t * @param {string} type Token type.\n\t * @param {string} content Content that would be the output for this token.\n\t * @param {number} level Level of wrapping/applied formats for 'text' tokens. Eg. <em>level 1<strong>level 2</strong></em>\n\t */\n\tconstructor(type, content, level) {\n\t\tthis.type = type,\n\t\tthis.content = content;\n\t\tthis.level = level;\n\t}\n}\n\n/**\n * Formats a string, escapes it and formats it so that _this_ becomes italic and\n * **that** becomes bold.\n * @param {string} str Text to format.\n * @param {object} [opt] Optional parameters\n * @param {Array.<object>} [opt.triggers] Array of trigger objects\n * @param {object} [opt.em] Token object for em.\n * @param {object} [opt.strong] Token object for strong.\n * @param {object} [opt.ooc] Token object for ooc\n * @param {object} [opt.cmd] Token object for cmd\n * @param {object} [opt.sup] Token object for sup\n * @param {object} [opt.sub] Token object for sub\n * @param {object} [opt.strikethrough] Token object for strikethrough\n * @returns {string} HTML formatted string.\n */\nexport default function formatText(str, opt) {\n\tlet tokens = [ new Token(typeText, str, 0) ];\n\n\tparseTokens(tokens, opt);\n\n\treturn tokens.map(t => t.content).join('');\n}\n\n/**\n * Formats a string, escapes it and formats it so that _this_ becomes italic and\n * **that** becomes bold.\n * @param {string} str Text to format.\n * @param {object} [opt] Optional parameters\n * @returns {Array.<Token>} Array of Tokens.\n */\nexport function formatTextTokens(str, opt) {\n\tlet tokens = [ new Token(typeText, str, 0) ];\n\n\tparseTokens(tokens, opt, true);\n\n\treturn tokens;\n}\n\n/**\n * Filter trigger arrays to only contain triggers existing in the text.\n * @param {string} str Text to scan for triggers.\n * @param {Array.<object>} triggers Array of trigger objects\n * @returns {?Array.<object>} Array of triggers existing in the text. Or null if no triggers matches.\n */\nexport function filterTriggers(str, triggers) {\n\tif (!triggers || !triggers.length) {\n\t\treturn null;\n\t}\n\n\tlet tokens = [ new Token(typeText, str, 0) ];\n\n\ttriggers.sort(keySort);\n\tparseTokens(tokens, { triggers });\n\tlet foundTriggers = {};\n\ttokens.filter(t => t.type == 'highlight_start').forEach(t => foundTriggers[t.trigger.key] = t.trigger);\n\tlet keys = Object.keys(foundTriggers);\n\tif (!keys.length) {\n\t\treturn null;\n\t}\n\n\ttriggers = keys.map(k => foundTriggers[k]);\n\ttriggers.sort(keySort);\n\n\treturn triggers;\n}\n\n/**\n * Get the first trigger word.\n * @param {string} str Text to scan for triggers.\n * @param {Array.<object>} triggers Array of trigger objects\n * @returns {string} First text matching a trigger.\n */\nexport function firstTriggerWord(str, triggers) {\n\tif (!triggers || !triggers.length) {\n\t\treturn \"\";\n\t}\n\n\tlet tokens = [ new Token(typeText, str, 0) ];\n\n\ttriggers.sort(keySort);\n\tparseTokens(tokens, { triggers }, true);\n\n\tfor (let t of tokens) {\n\t\tif (t.type == 'highlight_static') {\n\t\t\treturn t.content;\n\t\t}\n\t}\n\treturn \"\";\n}\n\nconst token_cmd_start = new Token('cmd_start', '<span class=\"cmd\">');\nconst token_cmd_end = new Token('cmd_end', '</span>');\nconst token_em_start = new Token('em_start', '<em>');\nconst token_em_end = new Token('em_end', '</em>');\nconst token_strong_start = new Token('strong_start', '<strong>');\nconst token_strong_end = new Token('strong_end', '</strong>');\nconst token_ooc_start = new Token('ooc_start', '<span class=\"ooc\">((');\nconst token_ooc_end = new Token('ooc_end', '))</span>');\nconst token_ooc_start_noparenthesis = new Token('ooc_start', '<span class=\"ooc\">');\nconst token_ooc_end_noparenthesis = new Token('ooc_end', '</span>');\nconst token_sup_start = new Token('sup_start', '<sup>');\nconst token_sup_end = new Token('sup_end', '</sup>');\nconst token_sub_start = new Token('sub_start', '<sub>');\nconst token_sub_end = new Token('sub_end', '</sub>');\nconst token_strikethrough_start = new Token('strikethrough_start', '<s>');\nconst token_strikethrough_end = new Token('strikethrough_end', '</s>');\nconst token_br = new Token('br', '<br/>');\nconst token_highlight_start = new Token('highlight_start', '<span class=\"highlight\">');\nconst token_highlight_end = new Token('highlight_end', '</span>');\n\nexport const oocNoParenthesis = { start: token_ooc_start_noparenthesis, end: token_ooc_end_noparenthesis };\n\nconst rules = [\n\t// Cmd\n\ttextStyle(/(?=^|[^\\w])`/m, /`(?=$|[^\\w])/m, opt => opt.cmd && opt.cmd.start || token_cmd_start, opt => opt.cmd && opt.cmd.end || token_cmd_end, {\n\t\tcrossToken: false,\n\t\tprocessInner: (t, keepContent) => t.type == typeText\n\t\t\t? new Token('static', keepContent ? t.content : escapeHtml(t.content))\n\t\t\t: t,\n\t}),\n\t// Formatted links\n\tformattedLinks,\n\t// Inline links\n\tinlineLinks,\n\t// Em\n\ttextStyle(/\\b_/m, /_\\b/m, opt => opt.em && opt.em.start || token_em_start, opt => opt.em && opt.em.end || token_em_end),\n\t// Strong\n\ttextStyle(/(?=^|[^\\w])\\*\\*/m, /\\*\\*(?=$|[^\\w])/m, opt => opt.strong && opt.strong.start || token_strong_start, opt => opt.strong && opt.strong.end || token_strong_end),\n\t// Strikethrough\n\ttextStyle(/(?=^|[^\\w])~~/m, /~~(?=$|[^\\w])/m, opt => opt.strikethrough && opt.strikethrough.start || token_strikethrough_start, opt => opt.strikethrough && opt.strikethrough.end || token_strikethrough_end),\n\t// OOC\n\ttextStyle(/(?=^|[^\\w])\\(\\(/m, /\\)\\)(?=$|[^\\w])/m, opt => opt.ooc && opt.ooc.start || token_ooc_start, opt => opt.ooc && opt.ooc.end || token_ooc_end),\n\t// Superscript / subscript\n\ttextStyle(\n\t\t/(?:\\+\\+|--)/m,\n\t\tm => m[0] == '++' ? /\\+\\+/m : /--/m,\n\t\t(opt, start, end) => start.match[0] == '++' ? opt.sup && opt.sup.start || token_sup_start : opt.sub && opt.sub.start || token_sub_start,\n\t\t(opt, start, end) => end.match[0] == '++' ? opt.sup && opt.sup.end || token_sup_end : opt.sub && opt.sub.end || token_sub_end,\n\t),\n\ttriggers,\n\t// Line breaks\n\ttextReplace(/\\n/m, (m, opt) => token_br),\n\t// Escape HTML characters\n\tescape,\n];\n\n/**\n * Takes an array of tokens (initially just a single 'text' token: [ new\n * Token(typeText, str, 0) ]) and applies formatting rules on it. Each rule may\n * modify the array of tokens as they see fit by updating tokens, splicing in\n * more tokens, or removing tokens.\n * @param {Array.<Token>} tokens Array of tokens.\n * @param {object} opt Parser options.\n * @param {boolean} keepContent If true, the content of each Token in the array\n * should contain the string characters they represent, so that tokens.join(t =>\n * t.content) would produce the initial string.\n */\nfunction parseTokens(tokens, opt, keepContent) {\n\topt = opt || defaultOpt;\n\tfor (let rule of rules) {\n\t\trule(tokens, opt, keepContent);\n\t}\n}\n\nfunction findInTokens(tokens, re, opts) {\n\tlet { idx, pos, crossBoundary, crossToken, level } = Object.assign({ idx: 0, pos: 0, crossBoundary: true, crossToken: true, level: null }, opts);\n\n\tfor (let i = idx, l = tokens.length; i < l; i++) {\n\t\tlet token = tokens[i];\n\t\tif (token.type == typeText) {\n\t\t\tif (level != null && token.level < level) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (level == null || token.level == level) {\n\t\t\t\tlet match = matchTextToken(token, re, pos);\n\t\t\t\tif (match) {\n\t\t\t\t\treturn { match, offset: pos, idx: i, token };\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif (token.boundary && !crossBoundary) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t\tpos = 0;\n\t\tif (!crossToken) {\n\t\t\treturn null;\n\t\t}\n\t}\n\treturn null;\n}\n\nfunction matchTextToken(token, re, pos) {\n\tlet content = pos ? token.content.slice(pos) : token.content;\n\treturn content ? content.match(re) : null;\n}\n\nfunction matchOffset(m, atStart) {\n\treturn atStart\n\t\t? m.offset + m.match.index\n\t\t: m.offset + m.match.index + m.match[0].length;\n}\n\nfunction textStyle(startRegex, endRegex, startToken, endToken, config) {\n\tlet { crossToken, processInner } = Object.assign({ crossToken: true }, config);\n\tlet endRegexFactory = typeof endRegex == 'function' ? endRegex : () => endRegex;\n\treturn function(tokens, opt, keepContent) {\n\t\tlet idx = 0;\n\t\tlet pos = 0;\n\t\twhile (idx < tokens.length) {\n\t\t\t// Try to find emphasis start\n\t\t\tlet start = findInTokens(tokens, startRegex, { idx, pos });\n\t\t\tif (!start) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Try to find emphasis end\n\t\t\tlet offset = matchOffset(start);\n\t\t\tlet end = findInTokens(tokens, endRegexFactory(start.match), { idx: start.idx, pos: offset + 1, level: start.token.level, crossBoundary: false, crossToken });\n\t\t\tif (!end) {\n\t\t\t\tidx = start.idx;\n\t\t\t\tpos = offset;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Found emphasis\n\t\t\tspliceTextTokens(\n\t\t\t\ttokens,\n\t\t\t\t{ idx: start.idx, from: matchOffset(start, true), to: matchOffset(start) },\n\t\t\t\t{ idx: end.idx, from: matchOffset(end, true), to: matchOffset(end) },\n\t\t\t\tstartToken(opt, start, end),\n\t\t\t\tendToken(opt, start, end),\n\t\t\t\tkeepContent,\n\t\t\t\tprocessInner,\n\t\t\t);\n\t\t\tidx = end.idx + 4;\n\t\t\tpos = 0;\n\t\t}\n\t};\n}\n\nfunction textReplace(regex, tokenFactory) {\n\treturn function(tokens, opt, keepContent) {\n\t\tlet idx = 0;\n\t\tlet pos = 0;\n\t\twhile (idx < tokens.length) {\n\t\t\tlet m = findInTokens(tokens, regex, { idx, pos });\n\t\t\tif (!m) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tspliceTextToken(tokens, m.idx, matchOffset(m, true), matchOffset(m), tokenFactory(m, opt), keepContent);\n\n\t\t\tidx = m.idx;\n\t\t\tpos = matchOffset(m);\n\t\t}\n\t};\n}\n\nfunction escape(tokens, opt, keepContent) {\n\tif (!keepContent) {\n\t\tfor (let t of tokens) {\n\t\t\tif (t.type == typeText) {\n\t\t\t\tt.content = escapeHtml(t.content);\n\t\t\t}\n\t\t}\n\t}\n}\n\nconst regexIsLetter = /\\p{L}/u;\n\nexport function isBoundary(s, idx) {\n\tif (idx == 0 || idx >= s.length) return true;\n\n\treturn !s.slice(idx - 1, idx).match(regexIsLetter) || !s.slice(idx, idx + 1).match(regexIsLetter);\n}\n\n\nfunction triggers(tokens, opt, keepContent) {\n\tlet triggers = opt.triggers;\n\tif (!triggers || !triggers.length) {\n\t\treturn;\n\t}\n\n\tlet idx = 0;\n\twhile (idx < tokens.length) {\n\t\tlet token = tokens[idx];\n\t\tif (token.type == typeText) {\n\t\t\tlet str = tokens[idx].content.toLowerCase();\n\t\t\t// Try to find emphasis start\n\t\t\tfor (let i = triggers.length - 1; i >= 0; i--) {\n\t\t\t\tlet trigger = triggers[i];\n\t\t\t\tif (trigger && typeof trigger == 'object' && trigger.key) {\n\t\t\t\t\tlet triggerLength = trigger.key.length;\n\n\t\t\t\t\tlet txtIdx = str.indexOf(trigger.key);\n\t\t\t\t\tif (txtIdx >= 0 && isBoundary(str, txtIdx) && isBoundary(str, txtIdx + triggerLength)) {\n\t\t\t\t\t\tspliceTextToken(tokens, idx, txtIdx + triggerLength, txtIdx + triggerLength, token_highlight_end, keepContent);\n\t\t\t\t\t\tspliceTextToken(tokens, idx, txtIdx, txtIdx, Object.assign({ trigger }, token_highlight_start), keepContent);\n\t\t\t\t\t\tlet t = tokens[idx + 2];\n\t\t\t\t\t\tt.type = 'highlight_static';\n\t\t\t\t\t\tif (!keepContent) {\n\t\t\t\t\t\t\tt.content = escapeHtml(t.content);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tt.level++;\n\t\t\t\t\t\tstr = str.slice(0, txtIdx);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tidx++;\n\t}\n}\n\n\nfunction spliceTextTokens(tokens, start, end, startToken, endToken, keepContent, processInner) {\n\tspliceTextToken(tokens, end.idx, end.from, end.to, endToken, keepContent);\n\tspliceTextToken(tokens, start.idx, start.from, start.to, startToken, keepContent);\n\n\t// Increase level for inbetween text tokens\n\tlet sidx = start.idx + 1;\n\tlet eidx = end.idx + 3;\n\tfor (let i = sidx, e = eidx; i < e; i++) {\n\t\tlet t = tokens[i];\n\t\tif (t.type == typeText) {\n\t\t\tt.level++;\n\t\t}\n\t\tif (processInner && i != sidx && i != eidx) {\n\t\t\ttokens[i] = processInner(t, keepContent) || t;\n\t\t}\n\t}\n}\n\n/**\n * Splices in a single token within an existing text token.\n * It may produce empty text tokens\n * @param {Array.<object>} tokens Tokens array.\n * @param {number} idx Index of token to splice into.\n * @param {number} start Start index position\n * @param {number} end End index position\n * @param {object} token Token object to splice in.\n * @param {boolean} keepContent Flag telling to keep raw content intact.\n */\nfunction spliceTextToken(tokens, idx, start, end, token, keepContent) {\n\tlet t = tokens[idx];\n\ttokens.splice(\n\t\tidx,\n\t\t1,\n\t\tnew Token(typeText, t.content.slice(0, start), t.level),\n\t\tkeepContent ? new Token(token.type, t.content.slice(start, end), token.level) : token,\n\t\tnew Token(typeText, t.content.slice(end), t.level),\n\t);\n}\n\nfunction formattedLinks(tokens, opt, keepContent) {\n\tlet idx = 0;\n\tlet pos = 0;\n\twhile (idx < tokens.length) {\n\t\tlet start = findInTokens(tokens, /\\[(.+?)\\]\\(/m, { idx, pos });\n\t\tif (!start) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet token = tokens[start.idx];\n\n\t\tlet link = findLinkInToken(token, matchOffset(start), true);\n\t\tif (!link) {\n\t\t\tidx = start.idx;\n\t\t\tpos = matchOffset(start);\n\t\t\tcontinue;\n\t\t}\n\n\t\tlet end = matchTextToken(token, /^\\)/, link.offset + link.url.length);\n\t\tif (!end) {\n\t\t\tidx = start.idx;\n\t\t\tpos = link.offset + link.url.length;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (keepContent) {\n\t\t\tlet linkFrom = matchOffset(start) - 1;\n\t\t\tlet linkTo = link.offset + link.url.length + end.index + end[0].length;\n\t\t\tlet anchorFrom = matchOffset(start, true);\n\t\t\tspliceTextTokens(\n\t\t\t\ttokens,\n\t\t\t\t{ idx: start.idx, from: linkFrom, to: linkFrom + 1 },\n\t\t\t\t{ idx: start.idx, from: linkTo - end[0].length, to: linkTo },\n\t\t\t\tnew Token('link_start'),\n\t\t\t\tnew Token('link_end'),\n\t\t\t\ttrue,\n\t\t\t\tt => { t.type = 'link'; },\n\t\t\t);\n\t\t\tspliceTextTokens(\n\t\t\t\ttokens,\n\t\t\t\t{ idx: start.idx, from: anchorFrom, to: anchorFrom + 1 },\n\t\t\t\t{ idx: start.idx, from: linkFrom - 1, to: linkFrom },\n\t\t\t\tnew Token('anchor_start'),\n\t\t\t\tnew Token('anchor_end'),\n\t\t\t\ttrue,\n\t\t\t\tt => { t.type = 'anchor'; },\n\t\t\t);\n\t\t\tidx = start.idx + 7;\n\t\t} else {\n\t\t\tlet escapedUrl = escapeHtml(link.url);\n\t\t\tspliceTextToken(\n\t\t\t\ttokens,\n\t\t\t\tstart.idx,\n\t\t\t\tmatchOffset(start, true),\n\t\t\t\tlink.offset + link.url.length + end.index + end[0].length,\n\t\t\t\tnew Token('anchor', '<a href=\"' + escapedUrl + '\" target=\"_blank\" rel=\"noopener noreferrer\" title=\"' + escapedUrl + '\">' + escapeHtml(start.match[1]) + '</a>'),\n\t\t\t\tkeepContent,\n\t\t\t);\n\t\t\tidx = start.idx + 2;\n\t\t}\n\t\tpos = 0;\n\t}\n}\n\nfunction inlineLinks(tokens, opt, keepContent) {\n\tlet idx = 0;\n\tlet pos = 0;\n\twhile (idx < tokens.length) {\n\t\tlet token = tokens[idx];\n\t\tif (token.type == typeText) {\n\t\t\tlet link = findLinkInToken(token, pos, false, true);\n\t\t\tif (link) {\n\t\t\t\tlet escapedUrl = escapeHtml(link.url);\n\t\t\t\tspliceTextToken(\n\t\t\t\t\ttokens,\n\t\t\t\t\tidx,\n\t\t\t\t\tlink.offset,\n\t\t\t\t\tlink.offset + link.url.length,\n\t\t\t\t\tnew Token('anchor', '<a href=\"' + escapedUrl + '\" target=\"_blank\" rel=\"noopener noreferrer\" title=\"' + escapedUrl + '\">' + escapedUrl + '</a>'),\n\t\t\t\t\tkeepContent,\n\t\t\t\t);\n\t\t\t\tidx += 2;\n\t\t\t\tpos = 0;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\t\tidx++;\n\t\tpos = 0;\n\t}\n}\n\nfunction findLinkInToken(token, pos, requireFirst, trimEnd) {\n\tlet content = pos ? token.content.slice(pos) : token.content;\n\n\t// Require scheme\n\tlet scheme = content.match(requireFirst ? /^https?:\\/\\// : /\\bhttps?:\\/\\//);\n\tif (!scheme) {\n\t\treturn null;\n\t}\n\n\tcontent = content.slice(scheme.index + scheme[0].length);\n\n\tlet domain = content.match(/^[^\\s/$.?#()].[^\\s/())]*/);\n\tif (!domain) {\n\t\treturn null;\n\t}\n\n\tcontent = content.slice(domain[0].length);\n\tlet i = 0;\n\tlet l = content.length;\n\tlet level = 0;\n\t// [TODO] Make this more clever to allow things like:\n\t// :shows [https://example.com/test] and similar\n\twhile (i < l) {\n\t\tlet c = content.charCodeAt(i);\n\t\t// Space or control character\n\t\tif (c <= 0x20 || c == 0x7F) {\n\t\t\tbreak;\n\t\t}\n\t\tif (c === 0x28 /* ( */) {\n\t\t\tlevel++;\n\t\t} else if (c === 0x29 /* ) */) {\n\t\t\tif (!level) break;\n\t\t\tlevel--;\n\t\t}\n\t\ti++;\n\t}\n\n\tlet path = content.slice(0, i);\n\t// trim assumed non-related characters at the end\n\tif (trimEnd) {\n\t\tlet m = path.match(/[.!?:;\\-\"']+$/);\n\t\tif (m) {\n\t\t\tpath = path.slice(0, m.index);\n\t\t}\n\t}\n\n\treturn {\n\t\toffset: pos + scheme.index,\n\t\tscheme: scheme[0],\n\t\tdomain: domain[0],\n\t\tpath,\n\t\turl: scheme[0] + domain[0] + path,\n\t};\n}\n","/**\n * Formats the time of Date object to a string in human readable format.\n * @param {Date} date Date object.\n * @param {object} [opt] Optional params.\n * @param {boolean} [opt.showSeconds] Flag to show seconds.\n * @param {boolean} [opt.showMilliseconds] Flag to show seconds and milliseconds. If true, showSeconds is ignored.\n * @returns {string} Formatted string.\n */\nexport default function formatTime(date, opt) {\n\tlet s = date.getHours() + \":\" + (\"0\" + date.getMinutes()).slice(-2);\n\tif (opt) {\n\t\tif (opt.showMilliseconds) {\n\t\t\ts += \":\" + (\"0\" + date.getSeconds()).slice(-2) + '.' + (\"00\" + date.getMilliseconds()).slice(-3);\n\t\t} else if (opt.showSeconds) {\n\t\t\ts += \":\" + (\"0\" + date.getSeconds()).slice(-2);\n\t\t}\n\t}\n\treturn s;\n}\n","/**\n * Returns the fullname of a character.\n * @param {object} char Character model or object\n * @returns {string} Full name.\n */\nexport default function fullname(char) {\n\treturn (char && (char.name + \" \" + char.surname).trim()) || \"\";\n}\n","/**\n * Creates a ID string of a controlled character including any existing puppeteer.\n * @param {Model} ctrl Controlled character.\n * @returns {string} ID string of the controlled character.\n */\nexport default function getCtrlId(ctrl) {\n\tlet p = ctrl.puppeteer;\n\treturn p ? ctrl.id + '_' + p.id : ctrl.id;\n}\n","/**\n * Creates an ID string of a room details model including any instance id.\n * @param {Model} room Room details model.\n * @returns {string} ID string of the room instance.\n */\nexport default function getRoomInstanceId(room) {\n\tlet id = room.id;\n\treturn room.instance ? id + '_' + room.instance : id;\n}\n","import l10n from 'modapp-l10n';\nimport escapeHtml from 'utils/escapeHtml';\n\nconst txtAttribute = l10n.t('helpAttribDesc.attribute', `<code class=\"param\">Attribute</code>`);\nconst txtValue = l10n.t('helpAttribDesc.value', `<code class=\"param\">Value</code>`);\n\n/**\n * Creates a help description with an attribute table;\n * @param {string} str Help description.\n * @param {Array.<object>} attrs Attribute object array.\n * @param {object} [opt] Optional parameters\n * @param {LocaleString} [opt.attribute] Attribute column title.\n * @param {LocaleString} [opt.value] Value column title.\n * @param {string} [opt.attributeClass] Attribute column class.\n * @param {string} [opt.valueClass] Attribute column class.\n * @returns {string} Help description.\n */\nexport default function helpAttribDesc(str, attrs, opt) {\n\topt = opt || {};\n\tlet attrTxt = opt.hasOwnProperty('attribute') ? opt.attribute && l10n.t(opt.attribute) : txtAttribute;\n\tlet valueTxt = opt.hasOwnProperty('value') ? opt.value && l10n.t(opt.value) : txtValue;\n\tlet txt = str + '<table class=\"tbl-small\">' +\n\t\t'<thead><tr>' +\n\t\t\t'<th>' + attrTxt + '</th>' +\n\t\t\t'<th>' + valueTxt + '</th>' +\n\t\t'</tr></thead>' +\n\t\t'<tbody>';\n\tlet attribClass = opt.attributeClass ? ' class=\"' + escapeHtml(opt.attributeClass) + '\"' : '';\n\tlet valueClass = opt.valueClass ? ' class=\"' + escapeHtml(opt.valueClass) + '\"' : '';\n\tfor (let attr of attrs) {\n\t\ttxt += '<tr><td><code' + attribClass + '>' + escapeHtml(attr.key) + '</code></td><td' + valueClass + '>' + (attr.desc ? l10n.t(attr.desc) : '') + '</td></tr>';\n\t}\n\treturn txt + '</tbody></table>';\n}\n","import l10n from 'modapp-l10n';\n\nconst txtIdRoles = {\n\toverseer: l10n.l('idroles.overseer', \"Overseer\"),\n\tpioneer: l10n.l('idroles.pioneer', \"Pioneer\"),\n\tsupporter: l10n.l('idroles.supporter', \"Supporter\"),\n};\n\n/**\n * Returns the locale string of an ID role\n * @param {string} idRole ID role.\n * @returns {LocaleString} ID role as locale string.\n */\nexport function toLocaleString(idRole) {\n\treturn txtIdRoles[idRole] || idRole;\n};\n\n/**\n * Check if the user has all of the provided ID roles.\n * @param {Model} user User model.\n * @param {string|Array.<string>} idRoles ID role(s).\n * @returns {boolean} True if the user has all ID roles, otherwise false.\n */\nexport function hasIdRoles(user, idRoles) {\n\tif (!idRoles) {\n\t\treturn true;\n\t}\n\tidRoles = Array.isArray(idRoles) ? idRoles : [].slice.call(arguments, 1);\n\tlet rs = user?.idRoles || [];\n\tfor (let r of idRoles) {\n\t\tif (rs.indexOf(r) < 0) {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n};\n\n/**\n * Check if the user has any of the provided ID roles.\n * @param {Model} user User model.\n * @param {string|Array.<string>} idRoles ID role(s).\n * @returns {boolean} True if the user has any of the roles, otherwise false.\n */\nexport function hasAnyIdRole(user, idRoles) {\n\tif (!idRoles) {\n\t\treturn false;\n\t}\n\tidRoles = Array.isArray(idRoles) ? idRoles : [].slice.call(arguments, 1);\n\tlet rs = user?.idRoles || [];\n\tfor (let r of idRoles) {\n\t\tif (rs.indexOf(r) >= 0) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n};\n","import l10n from 'modapp-l10n';\n\nconst levels = {\n\tasleep: { text: l10n.l('idleLevels.asleep', \"Asleep\"), className: 'common--level-asleep' },\n\tactive: { text: l10n.l('idleLevels.active', \"Active\"), className: 'common--level-active' },\n\tidle: { text: l10n.l('idleLevels.idle', \"Idle\"), className: 'common--level-idle' },\n\taway: { text: l10n.l('idleLevels.away', \"Away\"), className: 'common--level-inactive' },\n\tbot: { text: l10n.l('idleLevels.bot', \"Bot\"), className: 'common--level-bot' },\n};\n\nconst idleLevels = [\n\tlevels.asleep,\n\tlevels.active,\n\tlevels.idle,\n\tlevels.away,\n\tlevels.bot,\n];\n\nexport default idleLevels;\n\nexport function getCharIdleLevel(char) {\n\tif (!char) return null;\n\n\treturn char.controller == 'bot'\n\t\t? levels.bot\n\t\t: idleLevels[char.idle];\n}\n","export default window.indexedDB ||\n\twindow.mozIndexedDB ||\n\twindow.webkitIndexedDB ||\n\twindow.msIndexedDB;\n\nexport let IDBTransaction = window.IDBTransaction ||\n\twindow.webkitIDBTransaction ||\n\twindow.msIDBTransaction;\n\nexport let IDBKeyRange = window.IDBKeyRange ||\n\twindow.webkitIDBKeyRange ||\n\twindow.msIDBKeyRange;\n","/**\n * Tests if an object is a RES error with a code and message property, and\n * optionally that the error has a specific code..\n * @param {*} err Object to test.\n * @param {string} [code] Optional code that must match if provided.\n * @returns {boolean} True if it is an error, otherwise false.\n */\nexport default function isError(err, code) {\n\tif (typeof err != 'object' || err === null || !(err.code && err.message)) {\n\t\treturn false;\n\t}\n\treturn code ? err.code === code : true;\n}\n","/**\n * Selects a part (from -> to) of a string\n * @param {string} prefix String prefix. Null means match.\n * @param {string} token Full token string to test against.\n * @param {string} [rawToken] Optional raw token to return on match.\n * @returns {string?} Token string on prefix match, otherwise null.\n */\nexport default function isNormalizedPrefix(prefix, token, rawToken) {\n\tif (prefix && token.substring(0, prefix.length) !== prefix) {\n\t\tif (\n\t\t\ttypeof token.normalize != 'function' ||\n\t\t\ttoken.normalize('NFKD')\n\t\t\t\t.replace(/\\p{M}/gu, '')\n\t\t\t\t.normalize('NFKC')\n\t\t\t\t.substring(0, prefix.length) !== prefix\n\t\t) {\n\t\t\treturn null;\n\t\t}\n\t}\n\treturn rawToken || token;\n}\n","/**\n * Tests if the app is visible by checking document.visibilityState.\n * @returns {boolean}\n */\nexport default function isVisible() {\n\treturn document.visibilityState == 'visible';\n}\n","export default function(a, b) {\n\treturn a.label.localeCompare(b.label);\n}\n","/**\n * Listens or unlistens to a resource. If a callback is provided, it will\n * listen/unlisten to change on the resource, using the callback.\n * @param {Model|Collection} resource Resource object.\n * @param {boolean} [on] Listens if true, otherwise unlistens. Defaults to true.\n * @param {function} [onEvent] Callback function to call on evennt.\n * @param {function} [event] Event to listen to. Ignored if no callback is given. Defaults to 'change'.\n * @returns {Model|Collection} Resource being listened to.\n */\nexport default function listenResource(resource, on, onEvent, event) {\n\tif (resource && typeof resource == 'object') {\n\t\tlet method = on || typeof on == 'undefined' ? 'on' : 'off';\n\t\tif (typeof resource[method] == 'function') {\n\t\t\tif (onEvent) {\n\t\t\t\tresource[method](event || 'change', onEvent);\n\t\t\t} else {\n\t\t\t\tresource[method]();\n\t\t\t}\n\t\t}\n\t}\n\treturn resource;\n}\n\n/**\n * Unlistens to one resource and starts listening to a second. If a callback is\n * provided, it will listen/unlisten to change on the resource, using the\n * callback.\n * @param {Model|Collection} oldResource Resource object to stop listening to.\n * @param {Model|Collection} newResource Resource object to start listening to.\n * @param {function} [onEvent] Callback function to call on change.\n * @param {function} [event] Event to listen to. Ignored if no callback is given. Defaults to 'change'.\n * @returns {Model|Collection?} Resource being listened to, or null if no resource was provided;\n */\nexport function relistenResource(oldResource, newResource, onEvent, event) {\n\tnewResource = newResource || null;\n\tif (oldResource !== newResource) {\n\t\tlistenResource(oldResource, false, onEvent, event);\n\t\tlistenResource(newResource, true, onEvent, event);\n\t}\n\treturn newResource;\n}\n","/**\n * Merges an array of iterable list of character models into a single list. The\n * resulting list of characters are ordered in the same order they appear, but\n * duplicates are removed.\n * @param {Array.<?Collection>} lists Array of collections of characters.\n * @returns {Array.<Model>} An array of character models.\n */\nexport default function mergeCharLists(lists) {\n\tlet map = {};\n\tlet chars = [];\n\tfor (let list of lists) {\n\t\tif (!list) continue;\n\t\tfor (let char of list) {\n\t\t\tif (map[char.id]) continue;\n\t\t\tmap[char.id] = true;\n\t\t\tchars.push(char);\n\t\t}\n\t}\n\treturn chars;\n}\n","import arraysEqual from './arraysEqual';\n\n/**\n * @typedef {object} modelComponentSelectorComponent\n * @property {function} [component] Component to set.\n * @property {function} [factory] Component factory function. Ignored if a component property is set: function(model) -> Component\n * @property {function} [condition] Condition function if component is to be selected: function(model) -> boolean\n * @property {function} [hash] Callback that returns a value that determines if a new component should be created. Ignored if the factory property is not used: function(model) -> {*|Array.<*>}\n */\n\nconst defaultSetter = (c, component) => c?.setComponent(component);\n\nfunction getSelected(components, m) {\n\tfor (let c of components) {\n\t\tif (c && (!c.condition || c.condition(m))) {\n\t\t\treturn c;\n\t\t}\n\t}\n\treturn null;\n}\n\nfunction equalHash(a, b) {\n\tif (a === b) {\n\t\treturn true;\n\t}\n\n\t// If array, we test each individual value.\n\tif (Array.isArray(a) && Array.isArray(b)) {\n\t\treturn arraysEqual(a, b);\n\t}\n\n\treturn false;\n}\n\n/**\n * Returns a function to be used as on change callback for ModelComponent\n * classes.\n *\n * The function will iterate over a set of component factories,\n * selecting the first that meets the condition, and setting it using a setter.\n *\n * If no component meets the condition, a null component will be set.\n *\n * If a subsequent model change callback results in the same component, no new\n * component will be set unless:\n * 1) The component uses a factory function.\n * 2) The component has a hash function.\n * 3) The hash function produces a different hash than previous.\n *\n * @param {Array.<modelComponentSelectorComponent>} components An array of selector component objects.\n * @param {object} [opt] Optional parameters.\n * @param {function} [opt.setter] Setter callback that sets the selected component: function(wrappedComponent, selectedComponent). Defaults to (c, component) => c.setComponent(component).\n * @returns {function} Callback function for ModelComponent onChange callback.\n */\nexport default function modelComponentSelector(components, opt) {\n\tlet selected = null;\n\tlet hash = null;\n\tlet setter = opt?.setter || defaultSetter;\n\n\treturn (m, c) => {\n\t\t// Find first component with a matching condition.\n\t\tlet newSelected = getSelected(components, m);\n\n\t\t// Check if we have selected the same component\n\t\tif (selected === newSelected) {\n\t\t\t// No change if we don't have a hash function or a factory.\n\t\t\tif (!selected?.hash || selected.component || !selected.factory) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If the hash hasn't changed, we won't replace the component.\n\t\t\tlet newHash = selected.hash(m);\n\t\t\tif (equalHash(hash, newHash)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\thash = newHash;\n\t\t} else {\n\t\t\tselected = newSelected;\n\t\t\thash = selected?.hash ? selected.hash(m) : null;\n\t\t}\n\n\t\t// Set new component\n\t\tsetter(c, selected && (selected.component || (selected.factory && selected.factory(m))) || null);\n\t};\n}\n","/**\n * Calls the callback on next animation frame.\n * @param {function} cb Callback function.\n */\nexport default function nextFrame(cb) {\n\trequestAnimationFrame(() => requestAnimationFrame(cb));\n}\n","/**\n * Sets an objects properties to default values unless they already exist.\n * @param {object} o Object to set default values for.\n * @param {object} def Default values to set.\n * @returns {object} Returns the object o.\n */\nexport default function objectDefault(o, def) {\n\tif (def) {\n\t\tfor (let k in def) {\n\t\t\tif (!o.hasOwnProperty(k)) {\n\t\t\t\to[k] = def[k];\n\t\t\t}\n\t\t}\n\t}\n\treturn o;\n}\n","/**\n * Compares two objects and returns an object with properties to set to get before object to have the same keys as the after object.\n * If a property value is undefined, that key is missing in the after object.\n * @param {object} before Object before.\n * @param {object} after Object after.\n * @returns {object} Returns the object diff.\n */\nexport default function objectDiff(before, after) {\n\tlet diff = {};\n\tbefore = before || {};\n\tafter = after || {};\n\tfor (let key in after) {\n\t\tif (!before[key]) {\n\t\t\tdiff[key] = after[key];\n\t\t}\n\t}\n\tfor (let key in before) {\n\t\tif (!after[key]) {\n\t\t\tdiff[key] = undefined;\n\t\t}\n\t}\n\n\treturn diff;\n}\n","const regex = /^ *(([0-9]+) *d)? *(([0-9]+) *h)? *(([0-9]+) *m)? *(([0-9]+) *s)? *(([0-9]+) *ms)? *$/;\n\n/**\n * Parses a duration string and returns the value in milliseconds, or null if the string couldn't be parsed.\n * @param {string} s Duration string in the format \"1d 2h 3m 4s 5ms\"\n * @returns {number} Duration in milliseconds or null\n */\nexport default function parseDuration(s) {\n\ts = (s || \"\").trim();\n\tif (!s) return null;\n\n\tlet m = s.match(regex);\n\tif (!m) return null;\n\n\treturn (Number(m[2]) || 0) * 1000 * 60 * 60 * 24 +\n\t\t(Number(m[4]) || 0) * 1000 * 60 * 60 +\n\t\t(Number(m[6]) || 0) * 1000 * 60 +\n\t\t(Number(m[8]) || 0) * 1000 +\n\t\t(Number(m[10]) || 0);\n}\n\nexport { regex as durationRegex };\n","/**\n * Checks if a needle string matches a haystack by testing if each\n * case-insensitive letter in the needle is found in the haystack in the same\n * order. Spaces in the needle string means that the two adjacent letters should\n * not be directly next to each other in the haystack.\n * @param {string} h Haystack string\n * @param {string} n Needle string\n * @returns {boolean}\n */\nexport default function(h, n) {\n\tn = n.trim();\n\tlet l = n.length;\n\tif (!l) return true;\n\th = h.toLowerCase();\n\tn = n.toLowerCase();\n\tlet i = 0;\n\tlet p = 0;\n\twhile (i < l) {\n\t\tlet c = n.charAt(i++);\n\t\tif (c === ' ') {\n\t\t\tp++;\n\t\t\twhile (n.charAt(i) === ' ') {\n\t\t\t\ti++;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tp = h.indexOf(c, p) + 1;\n\t\tif (!p) return false;\n\t}\n\treturn true;\n}\n\n/**\n * Creates a compare function based on a needle pattern.\n * @param {string} n Needle string\n * @param {(v: any) => string} [map] Map function to get the haystack string. Defaults to (v) => v.\n * @returns {function} Sort compare function.\n */\nexport function patternMatchCompare(n, map) {\n\tn = n.trim().toLowerCase();\n\tlet l = n.length;\n\treturn (a, b) => {\n\t\tif (map) {\n\t\t\ta = map(a);\n\t\t\tb = map(b);\n\t\t}\n\t\tlet alc = a.toLowerCase();\n\t\tlet blc = b.toLowerCase();\n\t\tif (l) {\n\t\t\tlet i = 0;\n\t\t\tlet p = 0;\n\t\t\twhile (i < l) {\n\t\t\t\tlet c = n.charAt(i++);\n\t\t\t\tif (c === ' ') {\n\t\t\t\t\tp++;\n\t\t\t\t\twhile (n.charAt(i) === ' ') {\n\t\t\t\t\t\ti++;\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tlet ap = alc.indexOf(c, p) + 1;\n\t\t\t\tlet bp = blc.indexOf(c, p) + 1;\n\t\t\t\tif (ap != bp) {\n\t\t\t\t\treturn !ap\n\t\t\t\t\t\t? 1\n\t\t\t\t\t\t: !bp\n\t\t\t\t\t\t\t? -1\n\t\t\t\t\t\t\t: ap - bp;\n\n\t\t\t\t}\n\t\t\t\tp = ap;\n\t\t\t\tif (!p) break;\n\t\t\t}\n\t\t}\n\t\t// Fallback on locale compare\n\t\treturn a.localeCompare(b);\n\t};\n}\n\n/**\n * Appends some em and span nodes to a el div.\n * @param {HTMLElement} el Div element to append to.\n * @param {string} label String to get the text from\n * @param {number} p0 Index where the em tag starts.\n * @param {number} p1 Index where the em tag ends and the span tag starts.\n * @param {number} p2 Index where the span tag ends.\n */\nfunction append(el, label, p0, p1, p2) {\n\tif (p1 > p0) {\n\t\tlet em = document.createElement('em');\n\t\tem.textContent = label.slice(p0, p1);\n\t\tel.appendChild(em);\n\t}\n\n\tif (p2 > p1) {\n\t\tlet span = document.createElement('span');\n\t\tspan.textContent = label.slice(p1, p2);\n\t\tel.appendChild(span);\n\t}\n};\n\n\nexport function patternMatchRender(item, value) {\n\tlet el = document.createElement(\"div\");\n\tlet label = item.label;\n\tlet n = value.trim().toLowerCase();\n\tlet l = n.length;\n\tlet h = label.toLowerCase();\n\tlet i = 0;\n\tlet p0 = 0;\n\tlet p1 = 0;\n\twhile (i < l) {\n\t\tlet c = n.charAt(i++);\n\t\tif (c === ' ') {\n\t\t\tappend(el, label, p0, p1, p1 + 1);\n\t\t\tp1++;\n\t\t\tp0 = p1;\n\t\t\twhile (n.charAt(i) === ' ') {\n\t\t\t\ti++;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tlet p2 = h.indexOf(c, p1);\n\t\tif (p2 === -1) break;\n\t\tif (p2 === p1) {\n\t\t\tp1++;\n\t\t\tcontinue;\n\t\t}\n\n\t\tappend(el, label, p0, p1, p2);\n\t\tp0 = p2;\n\t\tp1 = p2 + 1;\n\t}\n\n\tappend(el, label, p0, p1, label.length);\n\treturn el;\n}\n","\n\n/**\n * Returns a space to put between a character name and a pose message, unless the message starts with apostrophy (') or comma (,).\n * @param {string} msg Post message.\n * @returns {string} Spacing string.\n */\nexport default function(msg) {\n\tlet c = msg[0];\n\treturn !c || c == \"'\" || c == ',' ? '' : ' ';\n}\n","/**\n * Prepares a comma-separated string of keys, and returns an array of\n * trimmed and lowerCase formatted keys.\n * @param {string} strKeys Comma-separated key strings.\n * @returns {Array.<string>} Array of key strings.\n */\nexport default function(strKeys) {\n\treturn strKeys.split(\",\").map(v => v.trim().toLowerCase()).filter(v => !!v);\n}\n","// Regex used for TokenList or other similar lists.\n\n// Used to describe valid characters when creating new keys.\nexport let keyRegex = /^[\\p{L}\\p{N}\\s'-]*[\\p{L}\\p{N}'-]/u;\n// Used when typing in a key. May be more generous, but excludes delimiters.\nexport let keyTokenRegex = /^([^:=]*[^:=\\s])\\s*/u;\n// Used during tab completion to expand the affected selection.\nexport let keyExpandRegex = { left: /./u, right: /[^:=]/u };\n\nexport let tagRegex = /^\\s*(?:[^\\p{C}\\p{M}\\p{P}\\p{Z}\\u115F\\u1160\\u3164|=,:;&%!?~+*/-]|['\"#().])(?:(?:[^\\p{C}\\p{M}\\p{P}\\p{Z}\\u115F\\u1160\\u3164|=,:;]|[\\s&%!?~+*/'\"#().-])*(?:[^\\p{C}\\p{M}\\p{P}\\p{Z}\\u115F\\u1160\\u3164|=,:;]|[&%!?~+*/'\"#().-]))?/u;\nexport let tagTokenRegex = /^([^:=]*[^:=\\s])\\s*/u;\nexport let tagExpandRegex = { left: /./u, right: /[^:=]/u };\n\nexport let colonDelimTokenRegex = /^([^:]*[^\\s:])\\s*/;\nexport let colonDelimExpandRegex = { left: /./, right: /[^:]/ };\n\nexport let equalDelimTokenRegex = /^([^=]*[^\\s=])\\s*/;\nexport let equalDelimExpandRegex = { left: /./, right: /[^=]/ };\n\nexport let colonEqualDelimTokenRegex = /^([^:=]*[^\\s:=])\\s*/;\nexport let colonEqualDelimExpandRegex = { left: /./, right: /[^:=]/ };\n\nexport let anyTokenRegex = /^(.*[^\\s])\\s*/;\nexport let anyExpandRegex = { left: /./, right: /./ };\n\n// Used for tag group keys.\nexport let alphanumRegex = /^[a-zA-Z0-9-]*/u;\n\nexport function escapeRegex(str) {\n\treturn str.replace(/[-/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n};\n","import fullname from 'utils/fullname';\n\n/**\n * Helper functions to handle replying to events.\n */\n\n/**\n * Get a list of all characters in the event, putting the acting character\n * first, and excluding characters with id charId unless it is the only\n * character.\n * @param {string} charId Character to exclude (usually the controlled character).\n * @param {object} ev Event object.\n * @returns\n */\nexport function getTargets(charId, ev) {\n\tlet ts = ev.target ? [ ev.target ] : [];\n\tif (ev.targets) {\n\t\tts = ts.concat(ev.targets);\n\t}\n\tts = ts.filter(t => t.id != ev.char.id);\n\tts.unshift(ev.char);\n\tts = ts.filter(t => t.id != charId);\n\tif (!ts.length) {\n\t\tts = [ ev.char ];\n\t}\n\treturn ts;\n}\n\n/**\n * Checks if an event targets a specific character.\n * @param {string} charId Character ID.\n * @param {object} ev Event object.\n * @returns {boolean}\n */\nexport function containsTarget(charId, ev) {\n\treturn ev.target?.id == charId || ev.targets?.find(t => t.id == charId) || false;\n}\n\n/**\n * Get a list of all characters in the event as a comma-separated string. See\n * getTargets for more details.\n * @param {string} charId Controlled character ID.\n * @param {object} ev Event object.\n * @returns\n */\nfunction getTargetList(charId, ev) {\n\treturn getTargets(charId, ev).map(t => fullname(t)).join(\", \");\n};\n\n/**\n * Get the full name of the acting character of an event, unless it is charId.\n * @param {string} charId Controlled character ID.\n * @param {object} ev Event object.\n * @returns\n */\nfunction getTarget(charId, ev) {\n\tlet t = ev.char;\n\tif (t.id == charId) {\n\t\tt = ev.target || ev.targets[0] || t;\n\t}\n\treturn fullname(t);\n}\n\nfunction addOoc(ev) {\n\treturn ev.ooc ? '>' : '';\n}\n\nexport const replyCmds = {\n\taddress: (charId, ev) => 'address ' + getTarget(charId, ev) + ' =' + addOoc(ev),\n\twhisper: (charId, ev) => 'whisper ' + getTarget(charId, ev) + ' =' + addOoc(ev),\n\tmessage: (charId, ev) => 'message ' + getTarget(charId, ev) + ' =' + addOoc(ev),\n};\n\nexport const replyAllCmds = {\n\taddress: (charId, ev) => 'address ' + getTargetList(charId, ev) + ' =' + addOoc(ev),\n\twhisper: (charId, ev) => 'whisper ' + getTargetList(charId, ev) + ' =' + addOoc(ev),\n\tmessage: (charId, ev) => 'message ' + getTargetList(charId, ev) + ' =' + addOoc(ev),\n};\n\n/**\n * Counts all targets in an event.\n * @param {object} ev Event object.\n * @returns {number} Target count.\n */\nexport function countTargets(ev) {\n\treturn (ev.target ? 1 : 0) + (ev.targets?.length || 0);\n}\n","import l10n from 'modapp-l10n';\n\nconst txtRoles = {\n\tuser: l10n.l('roles.user', \"User\"),\n\thelper: l10n.l('roles.helper', \"Helper\"),\n\tmoderator: l10n.l('roles.moderator', \"Moderator\"),\n\tbuilder: l10n.l('roles.builder', \"Builder\"),\n\tadmin: l10n.l('roles.admin', \"Administrator\"),\n};\n\n/**\n * Returns the locale string of a role\n * @param {string} role Role.\n * @returns {LocaleString} Role as locale string.\n */\nexport function toLocaleString(role) {\n\treturn txtRoles[role] || role;\n};\n\n/**\n * Check if the user has all of the provided roles.\n * @param {Model} user User model.\n * @param {string|Array.<string>} roles Role(s).\n * @returns {boolean} True if the player has all roles, otherwise false.\n */\nexport function hasRoles(user, roles) {\n\tif (!roles) {\n\t\treturn true;\n\t}\n\troles = Array.isArray(roles) ? roles : [].slice.call(arguments, 1);\n\tlet rs = user?.roles || [];\n\tfor (let r of roles) {\n\t\tif (rs.indexOf(r) < 0) {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n};\n\n/**\n * Check if the user has any of the provided roles.\n * @param {Model} user User model.\n * @param {string|Array.<string>} roles Role(s).\n * @returns {boolean} True if the player has any of the roles, otherwise false.\n */\nexport function hasAnyRole(user, roles) {\n\tif (!roles) {\n\t\treturn false;\n\t}\n\troles = Array.isArray(roles) ? roles : [].slice.call(arguments, 1);\n\tlet rs = user?.roles || [];\n\tfor (let r of roles) {\n\t\tif (rs.indexOf(r) >= 0) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n","import { Txt, Elem } from 'modapp-base-component';\nimport isComponent from 'utils/isComponent';\nimport './tooltip.scss';\n\n/**\n * Tooltip render a tooltip in the containing div.\n */\nclass Tooltip {\n\n\t/**\n\t * Creates an instance of Tooltip\n\t * @param {string|LocaleString|Component} text Tip to show on click.\n\t * @param {Element} ref Reference element.\n\t * @param {object} [opt] Optional parameters.\n\t * @param {string} [opt.className] Class name for tooltip element.\n\t * @param {string} [opt.margin] Margin to use. May be 'm' (16px) or 'xs' (4px)\n\t * @param {string} [opt.padding] Inner padding to use. May be 's' or 'm'.\n\t * @param {string} [opt.size] Size. May be 'auto' or 'full'. Default to 'auto'.\n\t * @param {number} [opt.offset] Position of caret in pixels relative to viewport. Centered if omitted.\n\t * @param {string} [opt.position] Position of the tooltip. May be 'top', 'bottom'. Defaults to 'top'. }\n\t * @param {Element} [opt.boundary] Boundary box element. Will be used to try to set max-height.\n\t * @param {function} [opt.onClose] Callback called on close.\n\t */\n\tconstructor(text, ref, opt) {\n\t\topt = opt || {};\n\t\tthis.posClass = ' tooltip--pos-' + (opt.position || 'top');\n\t\topt.className = 'tooltip' +\n\t\t\t(opt.className ? ' ' + opt.className : '') +\n\t\t\t(opt.margin ? ' tooltip--margin-' + opt.margin : '') +\n\t\t\t(opt.padding ? ' tooltip--padding-' + opt.padding : '') +\n\t\t\tthis.posClass;\n\t\topt.events = Object.assign({ click: (c, ev) => ev.stopPropagation() }, opt.events);\n\n\t\tthis._close = this._close.bind(this);\n\t\tthis.opt = opt;\n\t\tthis.ref = ref || window.document.body;\n\t\tthis.txt = isComponent(text) ? text : new Txt(text, { className: 'tooltip--text' });\n\t\tthis.elem = null;\n\t\tthis.caret = null;\n\t}\n\n\t/**\n\t * Opens the tooltip due a click.\n\t * @param {boolean} open Flag that tells the tooltip is opened and not just hovered.\n\t * @returns {this}\n\t */\n\topen(open) {\n\t\tthis.elem = new Elem(n => n.elem('div', this.opt, [\n\t\t\tn.component(this.txt),\n\t\t]));\n\t\tthis.caret = new Elem(n => n.elem('div', { className: 'tooltip--caret' + this.posClass }));\n\t\tthis.elem.render(this.ref);\n\t\tthis.caret.render(this.ref);\n\t\tthis._setPosition();\n\t\tthis.open = open;\n\t\treturn this;\n\t}\n\n\tsetText(txt) {\n\t\ttxt = this.txt.setText(txt);\n\t\treturn this;\n\t}\n\n\t_setPosition() {\n\t\tif (!this.elem || !this.elem.getElement()) return;\n\n\t\tthis.elem.removeClass('tooltip--full');\n\t\tthis.elem.removeClass('tooltip--right');\n\t\tthis.elem.removeClass('tooltip--left');\n\t\tthis.elem.setStyle('margin-top', null);\n\t\tthis.elem.setStyle('margin-left', null);\n\t\tlet el = this.elem.getElement();\n\t\tlet width = el.offsetWidth;\n\t\tthis.elem.addClass('tooltip--full');\n\t\tlet contRect = el.getBoundingClientRect();\n\t\tlet contWidth = el.offsetWidth;\n\t\tlet refRect = this.ref.getBoundingClientRect();\n\t\tlet refWidth = this.ref.offsetWidth;\n\n\t\t// Calculate the x offset where the caret should be placed using the ref\n\t\t// element as reference.\n\t\tlet offset = refWidth / 2;\n\t\tif (typeof this.opt.offset == 'number') {\n\t\t\toffset = Math.min(Math.max(this.opt.offset - refRect.left, 0), refWidth - 1);\n\t\t}\n\t\t// Ensure the offset is well inside the container to prevent the caret\n\t\t// from being disconnected.\n\t\toffset = Math.min(Math.max(offset, contRect.left - refRect.left + 9), contRect.right - refRect.left - 10);\n\n\t\tif (width < contWidth && this.opt.size != 'full') {\n\t\t\tlet contOffset = refRect.left - contRect.left + offset - (width / 2);\n\t\t\tthis.elem.removeClass('tooltip--full');\n\t\t\tif (contOffset < 0) {\n\t\t\t\tthis.elem.addClass('tooltip--left');\n\t\t\t} else if (contOffset + width >= contWidth) {\n\t\t\t\tthis.elem.addClass('tooltip--right');\n\t\t\t} else {\n\t\t\t\tthis.elem.setStyle('margin-left', (offset - (width / 2)) + 'px');\n\t\t\t}\n\t\t}\n\t\tif (this.opt.position != 'bottom') {\n\t\t\tthis.elem.setStyle('margin-top', (-this.ref.offsetHeight) + 'px');\n\t\t\tthis.caret.setStyle('margin-top', (-this.ref.offsetHeight) + 'px');\n\t\t}\n\n\t\tif (this.opt.boundary) {\n\t\t\tlet boundaryRect = this.opt.boundary.getBoundingClientRect();\n\t\t\tlet maxHeight = this.opt.position == 'bottom'\n\t\t\t\t? boundaryRect.height - contRect.top + boundaryRect.top\n\t\t\t\t: boundaryRect.top - contRect.bottom;\n\t\t\tthis.elem.setStyle('max-height', maxHeight + 'px');\n\t\t}\n\n\t\t// Caret positioning\n\t\tthis.caret.setStyle('margin-left', offset + 'px');\n\t}\n\n\tclose() {\n\t\tthis._close();\n\t}\n\n\tgetComponent() {\n\t\treturn this.elem;\n\t}\n\n\t_close(e) {\n\t\tif (!this.elem) return;\n\n\t\tlet n = this.ref;\n\t\tif (e && e.target && n && n.contains(e.target)) {\n\n\t\t\treturn;\n\t\t}\n\n\t\tthis.elem.unrender();\n\t\tthis.caret.unrender();\n\t\tif (this.opt.onClose) {\n\t\t\tthis.opt.onClose(e);\n\t\t}\n\t}\n}\n\nexport default Tooltip;\n","import Tooltip from 'classes/Tooltip';\n\nconst defaultCtx = {};\n\nfunction getCtx(opt) {\n\treturn (opt && opt.ctx) || defaultCtx;\n}\n\nfunction setListeners(ctx, on) {\n\tlet cb = on ? 'addEventListener' : 'removeEventListener';\n\tdocument[cb]('keydown', ctx.onClick, true);\n\tdocument[cb]('click', ctx.onClick, true);\n}\n\n/**\n * On click callback called when document is click on while a tooltip is\n * rendered.\n * @param {object} ev Click event\n * @param {Element} ref Reference DOM element for the rendered tooltip.\n * @param {object} opt Options as provided when opening the tooltip.\n */\nfunction onClick(ev, ref, opt) {\n\tlet ctx = getCtx(opt);\n\t// Assert it is the callback handler for the right reference element.\n\tif (ctx.ref !== ref) {\n\t\treturn;\n\t}\n\n\tctx.closeTimeout = setTimeout(() => {\n\t\tclose(ref, opt);\n\t}, 0);\n}\n\nfunction onClose(ctx, ref) {\n\tif (ctx.ref === ref) {\n\t\tctx.ref = null;\n\t\tctx.tooltip = null;\n\t\tctx.clicked = false;\n\t\tclearTimeout(ctx.timeout);\n\t\tctx.timeout = null;\n\t\tclearTimeout(ctx.closeTimeout);\n\t\tctx.closeTimeout = null;\n\t\tsetListeners(ctx, false);\n\t}\n}\n\n/**\n * Tries to create a tooltip unless a tooltip for the same reference DOM element\n * is already open. It will also clear any ongoing mouse-leave timeout.\n * @param {Element} ref Reference DOM element.\n * @param {String|LocaleString|Component} text Tooltip text.\n * @param {object} opt Optional parameters. Extends the options available for Tooltip.\n * @returns {bool} True if a new tooltip was opened. False if a tooltip for the ref already was open.\n */\nfunction tryCreateTooltip(ref, text, opt) {\n\topt = opt || {};\n\n\tlet ctx = getCtx(opt);\n\n\tclearTimeout(ctx.timeout);\n\tctx.timeout = null;\n\tclearTimeout(ctx.closeTimeout);\n\tctx.closeTimeout = null;\n\n\tif (ctx.tooltip) {\n\t\tif (ctx.ref == ref) {\n\t\t\treturn false;\n\t\t}\n\t\tctx.tooltip.close();\n\t}\n\n\tctx.ref = ref;\n\tctx.tooltip = new Tooltip(text, ref, {\n\t\tclassName: opt.className,\n\t\tmargin: opt.margin,\n\t\tpadding: opt.padding,\n\t\tsize: opt.size,\n\t\toffset: opt.offset,\n\t\tposition: opt.position,\n\t\tonClose: () => {\n\t\t\tonClose(ctx, ref);\n\t\t\topt?.onClose?.();\n\t\t},\n\t});\n\tctx.onClick = (ev) => onClick(ev, ref, opt);\n\tsetListeners(ctx, true);\n\n\tctx.tooltip.open();\n\n\treturn true;\n}\n\n/**\n * Prevents a click from closing the tooltip. Must be called while bubbling up\n * the click event.\n */\nexport function preventClose() {\n\tclearTimeout(ctx.closeTimeout);\n\tctx.closeTimeout = null;\n}\n\n/**\n * Opens a tooltip for the reference element by clicking on it.\n * @param {Element} ref Reference DOM element.\n * @param {String|LocaleString|Component} text Tooltip text.\n * @param {object} [opt] Optional parameters. Extends the options available for Tooltip.\n * @param {object} [opt.ctx] Optional context object. Only one tooltip will be open at the same time for any call using the same object.\n * @returns {Tooltip} Tooltip class.\n */\nexport function click(ref, text, opt) {\n\tlet ctx = getCtx(opt);\n\n\tif (!text) {\n\t\tclose(ref, opt);\n\t\treturn null;\n\t}\n\n\t// If the tooltip is opened by click, and it gets clicked a second time, we\n\t// let the onClick handler close it.\n\tif (ctx.ref === ref && ctx.clicked) {\n\t\treturn null;\n\t}\n\n\ttryCreateTooltip(ref, text, opt);\n\tctx.clicked = true;\n\treturn ctx.tooltip;\n}\n\n/**\n * Opens a tooltip when moving the mouse over a reference element.\n * @param {Element} ref Reference DOM element.\n * @param {String|LocaleString} text Tooltip text.\n * @param {object} [opt] Optional parameters.\n * @param {object} [opt.ctx] Optional context object. Only one tooltip will be open at the same time for any call using the same object.\n * @returns {Tooltip} Tooltip class.\n */\nexport function mouseEnter(ref, text, opt) {\n\tlet ctx = getCtx(opt);\n\tif (!text) {\n\t\tclose(ref, opt);\n\t\treturn null;\n\t}\n\n\tif (ctx.clicked) {\n\t\treturn null;\n\t}\n\n\ttryCreateTooltip(ref, text, opt);\n\treturn ctx.tooltip;\n}\n\n/**\n * Closes a tooltip after a while when the mouse leaves a reference element.\n * @param {Element} ref Reference DOM element.\n * @param {object} [opt] Optional parameters.\n * @param {object} [opt.ctx] Optional context object. Only one tooltip will be open at the same time for any call using the same object.\n * @returns {Tooltip} Tooltip class.\n */\nexport function mouseLeave(ref, opt) {\n\tlet ctx = getCtx(opt);\n\tif (ctx.tooltip && !ctx.clicked && ctx.ref === ref) {\n\t\tclearTimeout(ctx.timeout);\n\t\tctx.timeout = setTimeout(() => close(ref, opt), 300);\n\t}\n\treturn ctx.tooltip;\n}\n\n/**\n * Closes a tooltip if it is open for the given reference DOM element.\n * @param {Element} ref Reference DOM element.\n * @param {object} [opt] Optional parameters.\n * @param {object} [opt.ctx] Optional context object. Only one tooltip will be open at the same time for any call using the same object.\n * @returns {boolean} Returns true if a tooltip was open for the reference DOM element, otherwise false..\n */\nexport function close(ref, opt) {\n\tlet ctx = getCtx(opt);\n\tif (ctx.tooltip && ctx.ref === ref) {\n\t\tctx.tooltip.close();\n\t\treturn true;\n\t}\n\treturn false;\n}\n","import Err from 'classes/Err';\n\n/**\n * Translates a core.exitNotFound error into a more human friendly error.\n * @param {ResError} err Error.\n * @param {string} key Exit key used.\n * @returns {Err | ResError} Translated error if the code was core.exitNotFound, otherwise the original ResError.\n */\nexport function exitNotFound(err, key) {\n\tif (err?.code == 'core.exitNotFound') {\n\t\treturn key\n\t\t\t? new Err('translateErr.exitNotFoundByKey', \"Cannot find the exit '{key}'.\", { key })\n\t\t\t: new Err('translateErr.exitNotFound', \"Cannot find that exit.\");\n\t}\n\treturn err;\n}\n","var map = {\n\t\"./addons/avatar/Avatar.js\": 39965,\n\t\"./addons/broadcastHandler/BroadcastHandler.js\": 97994,\n\t\"./addons/charCycle/CharCycle.js\": 46362,\n\t\"./addons/charFocus/CharFocus.js\": 23827,\n\t\"./addons/charPing/CharPing.js\": 45028,\n\t\"./addons/cmdNotFoundExit/CmdNotFoundExit.js\": 5562,\n\t\"./addons/confirmClose/ConfirmClose.js\": 16088,\n\t\"./addons/consoleReplyLast/ConsoleReplyLast.js\": 35722,\n\t\"./addons/createLimits/CreateLimits.js\": 5080,\n\t\"./addons/exportLog/ExportLog.js\": 93273,\n\t\"./addons/fullscreen/Fullscreen.js\": 53264,\n\t\"./addons/highlightSettings/HighlightSettings.js\": 64938,\n\t\"./addons/highlightTriggers/HighlightTriggers.js\": 27110,\n\t\"./addons/info/Info.js\": 54968,\n\t\"./addons/logoutTool/LogoutTool.js\": 36707,\n\t\"./addons/media/Media.js\": 21946,\n\t\"./addons/mobileCharToggle/MobileCharToggle.js\": 66028,\n\t\"./addons/mute/Mute.js\": 85398,\n\t\"./addons/onboarding/Onboarding.js\": 62274,\n\t\"./addons/overlayNav/OverlayNav.js\": 24011,\n\t\"./addons/playerEvent/PlayerEvent.js\": 85258,\n\t\"./addons/playerEvent/playerEventControlLost/PlayerEventControlLost.js\": 82424,\n\t\"./addons/playerEvent/playerEventIdRoleAdd/PlayerEventIdRoleAdd.js\": 48842,\n\t\"./addons/playerEvent/playerEventIdRoleRemove/PlayerEventIdRoleRemove.js\": 13094,\n\t\"./addons/playerEvent/playerEventImageWipe/PlayerEventImageWipe.js\": 27970,\n\t\"./addons/playerEvent/playerEventPendingPush/PlayerEventPendingPush.js\": 37832,\n\t\"./addons/playerEvent/playerEventRoleAdd/PlayerEventRoleAdd.js\": 22700,\n\t\"./addons/playerEvent/playerEventRoleRemove/PlayerEventRoleRemove.js\": 68546,\n\t\"./addons/playerEvent/playerEventSuspend/PlayerEventSuspend.js\": 42590,\n\t\"./addons/puppetWakeup/PuppetWakeup.js\": 52562,\n\t\"./addons/roomAccess/RoomAccess.js\": 13018,\n\t\"./addons/settings/Settings.js\": 52110,\n\t\"./addons/syncLog/SyncLog.js\": 9962,\n\t\"./addons/tabUnseen/TabUnseen.js\": 22058,\n\t\"./addons/tags/Tags.js\": 1422,\n\t\"./addons/teleportSettings/TeleportSettings.js\": 38456,\n\t\"./addons/test/Test.js\": 20672,\n\t\"./addons/toolPageCharNote/ToolPageCharNote.js\": 47810,\n\t\"./addons/toolPageCharReport/ToolPageCharReport.js\": 66730,\n\t\"./addons/version/Version.js\": 82518,\n\t\"./bundleLoader/BundleLoader.js\": 86806,\n\t\"./charSettings/charSettingsDnd/CharSettingsDnd.js\": 69001,\n\t\"./charSettings/charSettingsTriggers/CharSettingsTriggers.js\": 54811,\n\t\"./charsAwake/CharsAwake.js\": 45431,\n\t\"./cmd/Cmd.js\": 8394,\n\t\"./cmd/cmdLists/CmdLists.js\": 85129,\n\t\"./cmd/cmdSteps/CmdSteps.js\": 19609,\n\t\"./commands/aboutArea/AboutArea.js\": 979,\n\t\"./commands/addNote/AddNote.js\": 40019,\n\t\"./commands/addTag/AddTag.js\": 4923,\n\t\"./commands/address/Address.js\": 64183,\n\t\"./commands/areaRules/AreaRules.js\": 29987,\n\t\"./commands/away/Away.js\": 35637,\n\t\"./commands/createArea/CreateArea.js\": 79899,\n\t\"./commands/createExit/CreateExit.js\": 52169,\n\t\"./commands/createProfile/CreateProfile.js\": 71975,\n\t\"./commands/createRoom/CreateRoom.js\": 57923,\n\t\"./commands/createRoomProfile/CreateRoomProfile.js\": 99403,\n\t\"./commands/createRoomScript/createRoomScript/CreateRoomScript.js\": 31644,\n\t\"./commands/createTag/CreateTag.js\": 30723,\n\t\"./commands/deleteArea/DeleteArea.js\": 45997,\n\t\"./commands/deleteExit/DeleteExit.js\": 10327,\n\t\"./commands/deleteNote/DeleteNote.js\": 30471,\n\t\"./commands/deleteProfile/DeleteProfile.js\": 54383,\n\t\"./commands/deleteRoom/DeleteRoom.js\": 79409,\n\t\"./commands/deleteRoomProfile/DeleteRoomProfile.js\": 59219,\n\t\"./commands/deleteRoomScript/deleteRoomScript/DeleteRoomScript.js\": 72233,\n\t\"./commands/denyControl/DenyControl.js\": 35795,\n\t\"./commands/describe/Describe.js\": 93395,\n\t\"./commands/evict/Evict.js\": 12787,\n\t\"./commands/evictHome/EvictHome.js\": 93135,\n\t\"./commands/evictPuppeteer/EvictPuppeteer.js\": 81491,\n\t\"./commands/evictTeleport/EvictTeleport.js\": 39947,\n\t\"./commands/focus/Focus.js\": 65135,\n\t\"./commands/follow/Follow.js\": 14147,\n\t\"./commands/get/Get.js\": 23671,\n\t\"./commands/getArea/GetArea.js\": 66203,\n\t\"./commands/getExit/GetExit.js\": 32295,\n\t\"./commands/getNote/GetNote.js\": 88507,\n\t\"./commands/getRoom/GetRoom.js\": 88323,\n\t\"./commands/go/Go.js\": 77433,\n\t\"./commands/grantControl/GrantControl.js\": 36967,\n\t\"./commands/helpme/Helpme.js\": 17619,\n\t\"./commands/home/Home.js\": 46731,\n\t\"./commands/join/Join.js\": 18069,\n\t\"./commands/lead/Lead.js\": 3005,\n\t\"./commands/lfrp/Lfrp.js\": 83785,\n\t\"./commands/listArea/ListArea.js\": 94611,\n\t\"./commands/listAreaLocations/ListAreaLocations.js\": 46835,\n\t\"./commands/listAreas/ListAreas.js\": 4491,\n\t\"./commands/listExits/ListExits.js\": 54955,\n\t\"./commands/listFocused/ListFocused.js\": 16055,\n\t\"./commands/listProfiles/ListProfiles.js\": 35413,\n\t\"./commands/listRoomProfiles/ListRoomProfiles.js\": 2019,\n\t\"./commands/listRoomScripts/listRoomScripts/ListRoomScripts.js\": 6033,\n\t\"./commands/listRooms/ListRooms.js\": 28523,\n\t\"./commands/listTags/ListTags.js\": 74123,\n\t\"./commands/listTeleports/ListTeleports.js\": 8567,\n\t\"./commands/look/Look.js\": 9811,\n\t\"./commands/mail/Mail.js\": 57151,\n\t\"./commands/message/Message.js\": 54803,\n\t\"./commands/muteChar/MuteChar.js\": 43107,\n\t\"./commands/muteCmd/MuteCmd.js\": 72115,\n\t\"./commands/muteMessage/MuteMessage.js\": 94095,\n\t\"./commands/muteOoc/MuteOoc.js\": 42523,\n\t\"./commands/muteTravel/MuteTravel.js\": 18739,\n\t\"./commands/ooc/Ooc.js\": 81971,\n\t\"./commands/pose/Pose.js\": 43435,\n\t\"./commands/profile/Profile.js\": 74239,\n\t\"./commands/registerHome/RegisterHome.js\": 71329,\n\t\"./commands/registerPuppet/RegisterPuppet.js\": 15359,\n\t\"./commands/registerTeleport/RegisterTeleport.js\": 93765,\n\t\"./commands/removeTag/RemoveTag.js\": 98631,\n\t\"./commands/report/Report.js\": 95941,\n\t\"./commands/requestArea/RequestArea.js\": 77243,\n\t\"./commands/requestAreaOwner/RequestAreaOwner.js\": 25859,\n\t\"./commands/requestAreaParent/RequestAreaParent.js\": 61723,\n\t\"./commands/requestExit/RequestExit.js\": 47163,\n\t\"./commands/requestHelp/RequestHelp.js\": 99371,\n\t\"./commands/requestRoom/RequestRoom.js\": 97179,\n\t\"./commands/requestRoomArea/RequestRoomArea.js\": 16051,\n\t\"./commands/requestRoomOwner/RequestRoomOwner.js\": 40531,\n\t\"./commands/roll/Roll.js\": 34883,\n\t\"./commands/roomProfile/RoomProfile.js\": 44359,\n\t\"./commands/roomScript/roomScript/RoomScript.js\": 79008,\n\t\"./commands/say/Say.js\": 28387,\n\t\"./commands/set/Set.js\": 87631,\n\t\"./commands/setArea/SetArea.js\": 2611,\n\t\"./commands/setAreaLocation/SetAreaLocation.js\": 45335,\n\t\"./commands/setAreaOwner/SetAreaOwner.js\": 14377,\n\t\"./commands/setAreaTeleportMsgs/SetAreaTeleportMsgs.js\": 42799,\n\t\"./commands/setChar/SetChar.js\": 91003,\n\t\"./commands/setCharSettings/SetCharSettings.js\": 58143,\n\t\"./commands/setExit/SetExit.js\": 63407,\n\t\"./commands/setExitOrder/SetExitOrder.js\": 7773,\n\t\"./commands/setProfile/SetProfile.js\": 83787,\n\t\"./commands/setProfile/setProfileAvatar/SetProfileAvatar.js\": 51901,\n\t\"./commands/setProfile/setProfileImage/SetProfileImage.js\": 35699,\n\t\"./commands/setPuppet/SetPuppet.js\": 79847,\n\t\"./commands/setRoom/SetRoom.js\": 52347,\n\t\"./commands/setRoomLocation/SetRoomLocation.js\": 30091,\n\t\"./commands/setRoomOwner/SetRoomOwner.js\": 37345,\n\t\"./commands/setRoomProfile/SetRoomProfile.js\": 70457,\n\t\"./commands/setRoomProfile/setRoomProfileImage/SetRoomProfileImage.js\": 95310,\n\t\"./commands/setRoomScript/setRoomScript/SetRoomScript.js\": 2948,\n\t\"./commands/setRoomTeleportMsgs/SetRoomTeleportMsgs.js\": 19295,\n\t\"./commands/setStatus/SetStatus.js\": 63107,\n\t\"./commands/setTag/SetTag.js\": 29009,\n\t\"./commands/setTeleport/SetTeleport.js\": 22147,\n\t\"./commands/setTeleportMsgs/SetTeleportMsgs.js\": 51259,\n\t\"./commands/sleep/Sleep.js\": 47827,\n\t\"./commands/stopFocus/StopFocus.js\": 65959,\n\t\"./commands/stopFollow/StopFollow.js\": 49523,\n\t\"./commands/stopLead/StopLead.js\": 36101,\n\t\"./commands/stopLfrp/StopLfrp.js\": 47329,\n\t\"./commands/stopMute/StopMute.js\": 33755,\n\t\"./commands/stopMuteChar/StopMuteChar.js\": 9843,\n\t\"./commands/stopMuteMessage/StopMuteMessage.js\": 18759,\n\t\"./commands/stopMuteOoc/StopMuteOoc.js\": 12915,\n\t\"./commands/stopMuteTravel/StopMuteTravel.js\": 66451,\n\t\"./commands/summon/Summon.js\": 75595,\n\t\"./commands/sweep/Sweep.js\": 2863,\n\t\"./commands/teleport/Teleport.js\": 4799,\n\t\"./commands/unregisterTeleport/UnregisterTeleport.js\": 30667,\n\t\"./commands/unwatch/Unwatch.js\": 64695,\n\t\"./commands/updateProfile/UpdateProfile.js\": 53519,\n\t\"./commands/updateRoomProfile/UpdateRoomProfile.js\": 69235,\n\t\"./commands/watch/Watch.js\": 47571,\n\t\"./commands/whisper/Whisper.js\": 62283,\n\t\"./commands/whois/Whois.js\": 96175,\n\t\"./dialogs/DialogRequestControl/DialogRequestControl.js\": 11282,\n\t\"./dialogs/dialogAboutChar/DialogAboutChar.js\": 72884,\n\t\"./dialogs/dialogCreateChar/DialogCreateChar.js\": 930,\n\t\"./dialogs/dialogCreateCharProfile/DialogCreateCharProfile.js\": 43384,\n\t\"./dialogs/dialogCreateExit/DialogCreateExit.js\": 74830,\n\t\"./dialogs/dialogCreateRoomProfile/DialogCreateRoomProfile.js\": 94536,\n\t\"./dialogs/dialogCropImage/DialogCropImage.js\": 74876,\n\t\"./dialogs/dialogDeleteChar/DialogDeleteChar.js\": 84052,\n\t\"./dialogs/dialogEditDndMsg/DialogEditDndMsg.js\": 97068,\n\t\"./dialogs/dialogEditNote/DialogEditNote.js\": 5614,\n\t\"./dialogs/dialogExportLog/DialogExportLog.js\": 60176,\n\t\"./dialogs/dialogReport/DialogReport.js\": 68838,\n\t\"./dialogs/dialogSetAreaOwner/DialogSetAreaOwner.js\": 97926,\n\t\"./dialogs/dialogSetRoomOwner/DialogSetRoomOwner.js\": 66430,\n\t\"./dialogs/dialogTag/DialogTag.js\": 13316,\n\t\"./dialogs/dialogUnregisterPuppet/DialogUnregisterPuppet.js\": 97894,\n\t\"./globalTeleports/GlobalTeleports.js\": 5798,\n\t\"./help/Help.js\": 53189,\n\t\"./help/helpAbout/HelpAbout.js\": 93932,\n\t\"./help/helpConsole/HelpConsole.js\": 32004,\n\t\"./help/helpFilter/HelpFilter.js\": 56572,\n\t\"./help/helpFormat/HelpFormat.js\": 83496,\n\t\"./help/helpRules/HelpRules.js\": 97712,\n\t\"./layout/Layout.js\": 93372,\n\t\"./layout/charLog/CharLog.js\": 15798,\n\t\"./layout/charLog/charLogSettings/CharLogSettings.js\": 93394,\n\t\"./layout/charLog/charLogStore/CharLogStore.js\": 1569,\n\t\"./layout/charLog/controlEvent/ControlEvent.js\": 98591,\n\t\"./layout/charLog/helpmeEvent/HelpmeEvent.js\": 39682,\n\t\"./layout/charLog/menuItem/menuItemExportLog/MenuItemExportLog.js\": 65077,\n\t\"./layout/charLog/menuItem/menuItemReply/MenuItemReply.js\": 56617,\n\t\"./layout/charLog/menuItem/menuItemReport/MenuItemReport.js\": 49391,\n\t\"./layout/charLog/rollEvent/RollEvent.js\": 65794,\n\t\"./layout/charPages/CharPages.js\": 61215,\n\t\"./layout/charPages/charPagesStore/CharPagesStore.js\": 70324,\n\t\"./layout/console/Console.js\": 22805,\n\t\"./layout/layoutDesktop/LayoutDesktop.js\": 91567,\n\t\"./layout/layoutDesktop/activePanel/ActivePanel.js\": 87344,\n\t\"./layout/layoutDesktop/activePanelSetter/ActivePanelSetter.js\": 17966,\n\t\"./layout/layoutDesktop/charPanel/CharPanel.js\": 75278,\n\t\"./layout/layoutDesktop/playerPanel/PlayerPanel.js\": 70386,\n\t\"./layout/layoutDesktop/roomPanel/RoomPanel.js\": 45318,\n\t\"./layout/layoutMobile/LayoutMobile.js\": 79669,\n\t\"./layout/layoutMobile/mobileActivePanel/MobileActivePanel.js\": 46970,\n\t\"./layout/layoutMobile/mobileActivePanelSetter/MobileActivePanelSetter.js\": 75046,\n\t\"./layout/layoutMobile/mobileCharPanel/MobileCharPanel.js\": 78582,\n\t\"./layout/layoutMobile/mobileReconnecting/MobileReconnecting.js\": 25614,\n\t\"./layout/layoutMobile/mobileRoomPanel/MobileRoomPanel.js\": 51932,\n\t\"./layout/playerTabs/PlayerTabs.js\": 81193,\n\t\"./layout/roomPages/RoomPages.js\": 71109,\n\t\"./notify/Notify.js\": 79792,\n\t\"./notify/notifySettings/NotifySettings.js\": 34644,\n\t\"./pages/pageArea/PageArea.js\": 94635,\n\t\"./pages/pageAwake/PageAwake.js\": 5430,\n\t\"./pages/pageChar/PageChar.js\": 11998,\n\t\"./pages/pageCharProfile/PageCharProfile.js\": 47131,\n\t\"./pages/pageCharSelect/PageCharSelect.js\": 83805,\n\t\"./pages/pageCharSettings/PageCharSettings.js\": 132,\n\t\"./pages/pageEditArea/PageEditArea.js\": 32921,\n\t\"./pages/pageEditChar/PageEditChar.js\": 16134,\n\t\"./pages/pageEditChar/editCharTags/EditCharTags.js\": 51125,\n\t\"./pages/pageEditCharProfile/PageEditCharProfile.js\": 40291,\n\t\"./pages/pageEditExit/PageEditExit.js\": 97331,\n\t\"./pages/pageEditExits/PageEditExits.js\": 58556,\n\t\"./pages/pageEditLfrp/PageEditLfrp.js\": 54304,\n\t\"./pages/pageEditRoom/PageEditRoom.js\": 80275,\n\t\"./pages/pageEditRoomProfile/PageEditRoomProfile.js\": 27506,\n\t\"./pages/pageEditTeleport/PageEditTeleport.js\": 63678,\n\t\"./pages/pageInRoom/PageInRoom.js\": 52364,\n\t\"./pages/pageMail/PageMail.js\": 41576,\n\t\"./pages/pagePlayerSettings/PagePlayerSettings.js\": 77925,\n\t\"./pages/pagePuppeteerSettings/PagePuppeteerSettings.js\": 23938,\n\t\"./pages/pageRequests/PageRequests.js\": 6130,\n\t\"./pages/pageRequests/requestCreateExit/RequestCreateExit.js\": 19373,\n\t\"./pages/pageRequests/requestRegisterPuppet/RequestRegisterPuppet.js\": 97297,\n\t\"./pages/pageRequests/requestSetArea/RequestSetArea.js\": 37243,\n\t\"./pages/pageRequests/requestSetAreaOwner/RequestSetAreaOwner.js\": 48285,\n\t\"./pages/pageRequests/requestSetRoom/RequestSetRoom.js\": 44803,\n\t\"./pages/pageRequests/requestSetRoomOwner/RequestSetRoomOwner.js\": 52997,\n\t\"./pages/pageRoom/PageRoom.js\": 41984,\n\t\"./pages/pageRoomProfile/PageRoomProfile.js\": 80208,\n\t\"./pages/pageSelectTags/PageSelectTags.js\": 82909,\n\t\"./pages/pageTeleportChar/PageTeleportChar.js\": 74166,\n\t\"./pages/pageWatch/PageWatch.js\": 62766,\n\t\"./player/Player.js\": 90718,\n\t\"./playerSettings/playerSettingsEmail/PlayerSettingsEmail.js\": 45250,\n\t\"./playerSettings/playerSettingsPlayerName/PlayerSettingsPlayerName.js\": 44198,\n\t\"./playerSettings/playerSettingsPolicies/PlayerSettingsPolicies.js\": 81747,\n\t\"./playerSettings/playerSettingsRoles/PlayerSettingsRoles.js\": 21392,\n\t\"./playerSettings/playerSettingsSecurity/PlayerSettingsSecurity.js\": 77184,\n\t\"./utils/formatText/FormatText.js\": 31666\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 39992;"],"names":["viewport","window","visualViewport","Viewport","app","params","_classCallCheck","this","require","_init","bind","key","value","module","Object","assign","self","_calculate","addEventListener","vvp","w","h","vp","bodyStyle","document","createElement","innerHTML","varStyle","head","appendChild","screen","getFader","addClass","console","log","doc","documentElement","Math","max","clientWidth","innerWidth","clientHeight","innerHeight","width","height","t","offsetTop","l","offsetLeft","concat","removeClass","removeEventListener","parentNode","removeChild","PlayerTools","tools","Collection","idAttribute","m","id","compare","sortOrderCompare","eventBus","footerTools","tool","get","Error","add","toolId","remove","Confirm","onConfirm","opt","_this","dialog","hasConfirmed","Dialog","title","l10n","className","size","noClose","content","Elem","n","footer","elem","confirmStyle","spinner","events","click","getContent","getNode","Promise","resolve","then","close","catch","err","openError","component","isComponent","confirm","Txt","cancel","push","onCancel","body","Array","isArray","map","b","tagName","onClose","open","focusConfirm","focus","msg","_typeof","code","message","data","ToasterToast","el","children","closeOn","FAIcon","ct","Html","formatText","type","attributes","formatDateTime","time","render","unrender","Toaster","collection","autoclose","CollectionList","subClassName","Date","random","toString","substring","_this$app$getModule","closer","length","getModule","send","setTimeout","error","clearTimeout","File","apiFilePath","props","file","rid","reject","formData","FormData","append","url","replace","xhr","XMLHttpRequest","withCredentials","onload","result","JSON","parse","response","status","Err","e","onerror","statusText","AccountEmailButton","account","components","fullWidth","ModelComponent","Fader","c","comp","email","hasOpenId","emailVerified","staticEmail","ModelTxt","changeEmail","dialogChangeEmail","setText","setAttribute","setEmail","setComponent","Collapser","alert","sendVerify","verifyEmail","sendVerification","getModel","hasOwnProperty","isSendingVerify","emailPermissions","LabelToggleBox","onChange","v","call","allowNewsletter","setValue","popupTip","popupTipClassName","AccountEmail","awaitMailSent","mail","isResError","sent","on","off","VerifyEmail","model","Model","set","toaster","_RootElem","_inherits","PasswordInput","_super","_createSuper","inpOpt","inputOpt","spellcheck","onInput","input","_input","Input","_eye","setRootNode","toggle","show","_showPass","setIcon","getValue","RootElem","modules","playerTools","accountEmail","DialogChangeEmail","pass","showPass","PanelSection","noToggle","html","_changeEmail","getComponent","getElement","_this2","changeEmailPromise","pwd","trim","sha256","hash","hmacsha256","publicPepper","updated","_setMessage","dialogChangePassword","DialogChangePassword","userId","oldPass","newPass","name","autocomplete","_changePass","setProperty","changePassPromise","api","oldHash","newHash","req","keys","forEach","match","charAt","toLowerCase","slice","default","sizeMap","xlarge","large","medium","small","tiny","placeholderMap","avatar","img","room","area","getHref","href","_Fader","AvatarComponent","profile","char","saturation","lightness","property","initials","placeholder","modalOnClick","query","isError","_update","_assertThisInitialized","ml","ModelListener","_changeHandler","rel","_get","_getPrototypeOf","prototype","onRender","relistenResource","onUnrender","setModel","change","src","deleted","Img","errorPlaceholder","errorClassName","hasClass","ImgModal","toUpperCase","surname","_clearHue","_setHue","setStyle","i","charCodeAt","floor","Avatar","avatarPattern","charImgPattern","roomImgPattern","image","BroadcastHandler","_onOut","info","auth","getUserPromise","ev","CharCycle","_onKeydown","helpConsole","addShortcut","usage","desc","sortOrder","shiftKey","_cycleActive","preventDefault","ctrlKey","k","parseInt","isNaN","_setActive","ctrls","player","getControlled","idx","indexOf","getActiveChar","setActiveChar","atIndex","_onShiftTab","flatten","o","obj","path","flattenObject","_regeneratorRuntime","r","defineProperty","Symbol","a","iterator","asyncIterator","u","toStringTag","define","enumerable","configurable","writable","wrap","Generator","create","Context","makeInvokeMethod","tryCatch","arg","f","s","y","GeneratorFunction","GeneratorFunctionPrototype","p","d","getPrototypeOf","values","g","defineIteratorMethods","_invoke","AsyncIterator","invoke","__await","callInvokeWithMethodAndArg","done","method","delegate","maybeInvokeDelegate","_sent","dispatchException","abrupt","return","TypeError","resultName","next","nextLoc","pushTryEntry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","reset","displayName","isGeneratorFunction","constructor","mark","setPrototypeOf","__proto__","awrap","async","reverse","pop","prev","stop","rval","handle","complete","finish","delegateYield","_createForOfIteratorHelper","_arrayLikeToArray","from","test","_unsupportedIterableToArray","_n","F","asyncGeneratorStep","_asyncToGenerator","arguments","apply","_next","_throw","_defineProperties","_toPropertyKey","toPrimitive","String","_toPrimitive","focusStoragePrefix","focusTitle","focusBody","mentionTitle","mentionBody","focusColors","red","green","blue","yellow","cyan","purple","pink","orange","white","none","isValidColor","color","isPredefined","CharFocus","_onCtrlAdd","_onCtrlRemove","_onFocusChange","_onNotificationCharEvent","_migrateFocusAll2","_migrateFocus2","focusChars","settings","lastColors","notifyModel","notify","focusCharList","CharList","_this$focusChars$c$id","filter","sort","localeCompare","style","notificationHandlers","say","charId","notifyOnMention","notifyOnFocus","pose","sleep","leave","arrive","whisper","notifyOnTargetEvent","describe","summon","join","leadRequest","followRequest","ooc","warn","action","address","roll","charLog","addEventHandler","_loadLastColors","_migrateFocus","_migrateFocusAll","_setListeners","ctrl","_ctrl$puppeteer","_getSuggestedColor","_saveLastColors","getPlayer","puppeteerId","puppeteer","undefined","targetId","_ctrl$puppeteer2","ctrlId","_this$focusChars$ctrl","_this$settings$ctrlId","chars","list","hex","_o$char","_this$focusChars$ctrl2","_ev$char","_ev$char2","_ev$mod","script","_usePush","hasFocus","mod","muted","isNotifyOnAll","_notify","_ev$char3","_ev$mod2","_ev$char4","_ev$char5","_ev$mod3","_ev$mod4","triggers","mention","firstTriggerWord","_ev$char6","_ev$char7","_ev$mod5","_ev$mod6","notifyOnEvent","targeted","target","charEvent","notifyOnAll","_ctrl$puppeteer3","oldNotifyOnAll","_this$settings$ctrlId2","tag","closeOnClick","onClick","duration","usePush","cb","_this3","_ev$char$puppeteer","promise","_updateStyle","_this$focusChars$char","_this$focusChars$char2","_this$settings$charId","_this4","localStorage","user","setItem","stringify","_this5","raw","getItem","_callee","dta","_iterator","_step","_context","getPlayerPromise","t0","removeItem","t1","_callee2","_context2","t2","_ctrl$settings","count","_this$focusChars$ctrl3","_this$focusChars$ctrl4","_this$focusChars$ctrl5","_this$settings$ctrlId3","CharPing","Number","threshold","retry","useWs","_onModelChange","_onAdd","_onRemove","controlled","timers","playerModel","_setEventListeners","_addChar","_step2","_iterator2","_removeChar","since","getWebResourceUri","fetch","mode","credentials","resp","refreshTokens","_pingChar","_wsPingChar","forceWs","item","worker","terminate","CmdNotFoundExit","_onNotFound","cmd","addNotFoundHandler","onNotFound","ctx","str","exits","inRoom","escapeHtml","removeNotFoundHandler","ConfirmClose","_onBeforeUnload","addBeforeUnload","event","returnValue","stopPropagation","removeBeforeUnload","getReply","all","replyAllCmds","replyCmds","ConsoleReplyLast","bufferSize","_replyAll","_replyLast","_reply","_addEvent","_onStateChange","lastState","lastIdx","lastReply","addKeymap","run","state","getCtrlId","charEvents","_getCharEvents","storeHistory","reply","setCommand","_this$lastState","containsTarget","unshift","_removeLastState","removeKeymap","removeEventHandler","txtBecomeSupporter","txtNevermind","txtCharLimitReached","txtCharProfileLimitReachedPrune","maxCharProfiles","txtProfileLimitReached","txtRoomProfileLimitReachedPrune","maxRoomProfiles","txtImageTooLarge","txtImageTooLargeResize","maxSize","formatByteSize","accountOverviewUrl","HUB_PATH","CreateLimits","_redirectToAccount","coreInfo","getCore","_limitSelector","getChars","maxOwnedChars","adminMaxOwnedChars","supporterMaxOwnedChars","profiles","adminMaxCharProfiles","supporterMaxCharProfiles","adminMaxRoomProfiles","supporterMaxRoomProfiles","maxImageSize","supporterMaxImageSize","supporterMaxSize","admin","supporter","onMax","onPromote","onProceed","inclusive","playerMod","hasAnyRole","hasAnyIdRole","sayStyle","whisperStyle","actionStyle","summonStyle","ExportLog","_charLogConverter","eventTypes","control","converter","noButton","wakeup","travel","noCode","follow","stopLead","stopFollow","dnd","addEventType","_createCharLogConverter","typeId","timestamp","_getLog","date","styleIdx","usedTypes","ec","_generateTypeStyles","out","Blob","filename","getFullYear","getMonth","getDate","formatISODate","getHours","getMinutes","blob","navigator","msSaveOrOpenBlob","msSaveBlob","URL","createObjectURL","download","exportFile","ex","chunk","getLog","toArray","getEventComponentFactory","div","types","styles","st","csspart","selectors","fullscreenElement","txtFullscreen","txtFramed","Fullscreen","_onClick","_getData","fullscreenPromise","fullscreenEnabled","addTool","componentFactory","isFullscreen","element","exitFullscreen","mozCancelFullScreen","webkitExitFullscreen","requestFullscreen","mozRequestFullScreen","webkitRequestFullScreen","fullscreen","mozFullScreenEnabled","removeTool","HighlightSettings","settingsPromise","loadSettings","highlightTriggers","highlightMentionMessages","highlightOwnMessages","pagePlayerSettings","msgEvents","HighlightTriggers","addEventModifier","callback","_applyModifications","_this$module$player$g","_this$module$player$g2","getPuppet","getOwnedChar","filteredTriggers","filterTriggers","mentioned","isTargeted","removeEventModifier","Info","core","ModelWrapper","note","report","support","client","version","APP_VERSION","dispose","LogoutToolComponent","logout","LogoutTool","icon","addFooterTool","removeFooterTool","defaultQueries","canHover","pointerCoarse","Media","queries","_addQuery","_defineProperty","matches","mql","matchMedia","_onQueryChange","_removeQuery","MobileCharToggle","addOverlay","layoutId","newAvatar","charPages","openPanel","unseen","lookingAt","removeOverlay","muteStoragePrefix","travelEvents","unmutableEvents","alreadyMutedErrs","muteOoc","muteMessage","muteTravel","notMutedErrs","Mute","_migrateMuteChars2","_migrateMute2","_migrateMute","_migrateMuteChars","strict","_toggleMute","muteChar","mutedChars","prop","mute","oldMute","_x","_x2","charFocus","isMutedChar","Onboarding","_updateModel","createChar","wakeupChar","tips","tipId","current","_current","_clear","parent","PopupTip","isLocaleString","noIcon","position","track","priority","newCurrent","_unrenderTip","_renderTip","rendered","listenResource","lastAwake","OverlayNavArea","setArea","_setMap","AreaChildrenModel","pageArea","newImage","vw","vh","OverlayNavButtons","fader","getViewportModel","CollectionComponent","col","_listenExits","_m$inRoom","_this$tooltip","setCollection","tooltip","_updateTooltip","update","toDelete","exit","_this$ctrl$inRoom","_this$fader$getCompon","nav","setState","NavButtons","shadow","center","dir","_this$ctrl$inRoom2","_step3","_iterator3","exitId","_openExitsTooltip","_this$fader","_this$ctrl$inRoom3","pageRoom","newRoomExits","padding","hoverDelay","_this$tooltip2","rect","getBoundingClientRect","top","OverlayNavComponent","_this$opt","_this$opt2","selected","faderComponent","nameFaderComponent","roomNameComponent","areaNameComponent","popComponent","listenComponent","roomComponent","_this$opt3","_this$opt4","_this$ctrl$inRoom$are","roomPages","_toggle","currentTarget","blur","ModelFader","factory","ModelCollapser","condition","horizontal","_c$getComponent","_setBadge","_setListen","prv","listen","OverlayNav","PlayerEvent","_onPlayerModelChange","_onAuthModelChange","_onPlayerEvent","_onNoticeAdd","_onNoticeRemove","handlers","userNotices","readNotices","_setPlayerListeners","getUser","_setNoticeListeners","_loadNotices","notices","identity","identityNotices","_setIdentityNoticeListeners","_showNextNotice","noticeShowing","noticeId","notice","_onNoticeClose","PlayerEventControlLost","_handleEvent","playerEvent","addHandler","puppet","removeHandler","idRoleInfo","overseer","pioneer","PlayerEventIdRoleAdd","idRole","idRoles","PlayerEventIdRoleRemove","imageTxt","avatarTxt","moreInfoTxt","PlayerEventImageWipe","txt","PlayerEventPendingPush","delay","isVisible","roleInfo","moderator","builder","helper","PlayerEventRoleAdd","role","roles","PlayerEventRoleRemove","PlayerEventSuspend","suspended","reason","PuppetWakeup","_onPuppetAdd","_onPuppetRemove","_onPuppeteerChange","puppets","listenedPuppeteers","_listenPuppets","_listenPuppeteer","_tryControl","onEvent","requestStatus","requestPuppeteer","requestAnswer","_control","getControlledChar","puppetId","RoomAccess","_onCtrlChange","_onCharChange","_onRoomChange","rooms","roomsProfiles","roomsScripts","ctrlModel","getControlledModel","inRoomProfiles","TokenList","_this$roomsProfiles$p","regex","keyTokenRegex","expandRegex","keyExpandRegex","isMatch","isPrefix","prefix","inRoomScripts","_this$roomsScripts$pr","_listenCtrl","_this$ctrlModel","_listenChars","objectKeyDiff","_listenRooms","roomId","editableRooms","scriptableRooms","canSetRoomProfile","canSetRoomScript","editableRoomsChange","editableRoomsUpdate","_loop","_roomId","_this2$roomsProfiles$2","_this2$roomsProfiles","scriptableRoomsChange","scriptableRoomsUpdate","_loop2","_roomId2","_this2$roomsScripts$p","scripts","_this2$roomsScripts","isBuilder","owner","_listenPlayer","settingsStoragePrefix","Settings","defaultSettings","def","_storedSettings","_paramSettings","_onSettingsChange","SyncLog","_onDisconnect","_onConnect","checkedChars","_checkChar","_getLastEvents","evs","startTime","findIndex","addEvent","lastEvents","charLogStore","getEvents","TabUnseen","_onChange","originalTitle","getUnseen","unseenTargeted","getUnseenTargeted","hasTargeted","counterString","preferences","Tags","_onPlayerChange","tags","ModelToCollection","tagsList","tagTokenRegex","tagExpandRegex","preferenceList","ItemList","items","alias","groups","groupsCollection","order","groupsList","refresh","TeleportSettings","showOwnRoomsInTeleports","Test","db","DBOpenRequest","indexedDB","onsuccess","onupgradeneeded","objectStore","createObjectStore","keyPath","createIndex","unique","ToolPageCharNote","pageChar","dialogEditNote","ownsChar","_c$puppeteer","dialogReport","attachProfile","ToolPageCharReport","reportProfile","versionCompare","diff","level","ap","split","bp","av","bv","sensitivity","numeric","Version","_onInfoChange","latestVersion","clientInfo","getClient","_listen","apiVer","clientVer","_versionCompare","_confirm","serviceWorker","clearCacheAndReload","reload","BundleLoader","loaded","promises","isStaff","_loadStaffModules","isAdmin","_loadAdminModules","isModerator","_loadModModules","_loadBuildModules","isHelper","_loadHelperModules","isBonus","_loadBonusModules","isPioneer","_loadPioneerModules","isSupporter","_loadSupporterModules","isOverseer","_loadOverseerModules","_ref","_getPromise","loadBundle","_resolvePromise","_ref2","_ref3","_ref4","_ref5","_this6","_ref6","_this7","_ref7","_this8","staff","_ref8","_this9","bonus","_ref9","bundle","CharSettingsDndComponent","charSettings","ModifyModel","_setValue","setDndMsg","dialogEditDndMsg","CharSettingsDnd","pageCharSettings","pagePuppeteerSettings","KeywordList","keywords","onEdit","onDelete","keywordCallback","keyword","txtErrorAddingTrigger","CharSettingsTriggersComponent","objectDefault","trigger","_setTrigger","getProperty","keydown","_addTrigger","_deleteTrigger","setNodeProperty","_triggerIsValid","CharSettingsTriggers","idleCodes","CharFilter","showLfrp","setFilter","steps","stepStr","dislike","RegExp","escapeRegex","rp","step","_matchKeys","_step4","_iterator4","_step5","_iterator5","_step6","_iterator6","_matchKey","species","gender","idle","pk","charsAwakeStoragePrefix","CharsAwake","_onWatchesChange","_onTagChange","_onCharTagsChange","_onCharEvent","charsAwake","watches","notes","showAll","watch","_isWatched","isModifiedProperty","awake","watchedAwake","unwatchedAwake","_loadSettings","_getCharsAwake","_saveSettings","_trySetFilter","_updateFilter","isEmpty","nm","notifyOnWakeup","notifyOnWatched","notifyOnMatched","__","parts","containsTag","_","CmdState","stack","onExec","j","force","stream","backUp","clone","UnknownStep","eatSpace","setParam","setError","tokenTags","listitem","text","delim","attr","unknown","entityid","highlightStyle","HighlightStyle","invalid","class","attributeValue","string","operator","propertyName","comment","meta","macroName","syntaxHighlighting","formatterMark","Decoration","emMark","strongMark","oocMark","cmdMark","supMark","subMark","strikethroughMark","linkMark","tokenTypes","end","startMark","endMark","outerMark","ViewPlugin","fromClass","_class","view","decorations","_formattingSyntax","docChanged","formattedTexts","getToken","token","ft","getItemById","to","sliceString","tokens","formatTextTokens","pos","_t$content","len","range","Cmd","_execPrefix","notFoundHandlers","cmds","cmdStep","ListStep","textId","delimToken","errRequired","errNotFound","prefixes","lists","StreamLanguage","cfg","startState","blankLine","blank","setStack","copyState","cmdHighlightStyle","cmdFormattingStyle","editorState","selection","main","line","lineAt","getFinalState","debug","_resolveNotFound","callOnExec","addItem","exec","addCmd","notFoundHandler","notFoundHandlerId","object","defaultSortOrder","CmdLists","prioSize","prioChars","ownedChars","inRoomPuppets","validation","watchedChars","getWatches","teleportNodes","gn","globalTeleports","getGlobalTeleports","nodes","isNormalizedPrefix","inRoomExits","charProfiles","charOwnedAreas","ownedAreas","colonDelimTokenRegex","colonDelimExpandRegex","charOwnedAreasOrNone","arr","charOwnedRooms","ownedRooms","anyTokenRegex","anyExpandRegex","bool","prioList","splice","getCompletionChars","_getCompletedChars","getCollection","mergeCharLists","includeNone","_chars$toArray","_chars","_this$prioChars$ctx$c","filterMuted","prioMap","reduce","orderMaps","inRoomChars","roomMap","inRoomChar","getCharsAwake","prioMiss","MAX_SAFE_INTEGER","aid","bid","va","vb","_i","_orderMaps","errCharacterRequired","defaultIDStepName","defaultCharIdName","CmdSteps","_onCharListExec","charTargets","cmdLists","prioritizeChar","getCtx","IDStep","else","getOwnedChars","getInRoomChars","getInRoomCharsAwake","getInRoomPuppets","getWatchedChars","idName","getAllChars","AboutArea","addPrefixCmd","aboutArea","help","addTopic","category","shortDesc","about","logComponent","FormatTxt","noInteraction","logInfo","logError","AddNote","cmdSteps","newAnyCharStep","DelimStep","TextStep","spanLines","completer","addNote","charName","AddTag","RepeatStep","getTagsList","getPreferenceList","ValueStep","delimiter","addTag","examples","Address","lastCharIds","charListOpt","newInRoomCharStep","_objectSpread","MultiDelimStep","getParam","maxLength","communicationMaxLength","errTooLong","communicationTooLong","symbol","charIds","RulesArea","areaRules","rules","txtSetAsAway","setAsAwayClearStatus","Away","propertyMaxLength","propertyTooLong","away","withStatus","CreateArea","itemNameMaxLength","itemNameTooLong","createArea","CreateExit","getCharOwnedRooms","createExit","prepareKeys","targetRoom","exitName","targetRoomName","CreateProfile","keyMaxLength","keyTooLong","createProfile","errComponent","createLimits","getCharProfilesError","profileName","CreateRoom","createRoom","CreateRoomProfile","createRoomProfile","getRoomProfilesError","CreateRoomScript","scriptMaxLength","scriptTooLong","trimSpace","createRoomScript","source","scriptKey","roomName","ScriptCompileError","CreateTag","tagRegex","getTag","tagKeyMaxLength","tagDescMaxLength","descriptionTooLong","createTag","pref","tagKey","DeleteArea","getCharOwnedAreas","deleteArea","areaId","areaName","DeleteExit","getInRoomExits","deleteExit","exitKey","translateErr","DeleteNote","deleteNote","DeleteProfile","getCharProfiles","deleteProfile","profileId","DeleteRoom","deleteRoom","DeleteRoomProfile","roomAccess","getInRoomProfileTokens","deleteRoomProfile","DeleteRoomScript","getInRoomScriptTokens","deleteRoomScript","scriptId","DenyControl","denyControl","Describe","Evict","evictType","evict","helpAttribDesc","getItems","attribute","nextFactory","tc","targetChar","targetCharName","EvictHome","addType","evictHome","EvictPuppeteer","evictPuppeteer","puppetName","EvictTeleport","evictTeleport","RegexStep","validate","prepareValue","_this$validate","_setRequired","addStep","_DelimStep","ColorStep","errInvalid","regexStep","Focus","colors","getFocusColors","ErrorStep","at","toggleNotifyOnAll","addFocus","targetName","Follow","newInRoomAwakeCharStep","defaultAttr","Get","charAttr","_defaultAttr","addAttribute","_exec","fullname","created","showYear","GetArea","areaAttr","getArea","parentId","GetExit","exitAttr","getExit","rows","_m$","GetNote","getNote","itemsPerPage","limit","GetRoom","NumberStep","page","tenants","teleporters","roomAttr","Go","go","GrantControl","grantControl","Helpme","helpme","cmdText","Home","home","Join","newAwakeCharStep","Lead","lead","txtSetAsLfrp","Lfrp","descriptionMaxLength","lfrp","withDesc","description","lfrpDesc","_char$puppeteer","ListArea","txtRoom","txtSubarea","txtPrivateRoom","txtPrivateSubarea","typeOrder","instanceRoom","ListAreaLocations","listArea","listLocations","apiModule","_result$","_result$2","allChildren","locations","_allChildren$k$toJSON","_allChildren$k","toJSON","private","loc","ListAreas","listAreas","validateNotPuppet","owned","ListExits","listExits","ListFocused","listFocused","focusList","getFocusCharColors","outputList","ListProfiles","listProfiles","errAccessDenied","ListRoomProfiles","listRoomProfiles","ListRoomScripts","listRoomScripts","active","ListRooms","listRooms","ListTags","listTags","sections","getGroupsCollection","_addSection","skipHeader","group","hasRole","getGroups","getTagsCollection","isRoleTag","ListTeleports","listTeleports","teleportSettings","getSettingsPromise","Look","look","Mail","getMail","mailMaxLength","toCharId","fromCharId","sendToPuppet","Message","MuteChar","opts","muteCmd","toggleMuteChar","changed","MuteCmd","muteType","MuteMessage","toggleMuteMessage","MuteOoc","toggleMuteOoc","MuteTravel","toggleMuteTravel","Ooc","Pose","Profile","safe","_getCharProfile","applied","RegisterHome","registerHome","RegisterPuppet","newInRoomPuppetStep","registerPuppet","RegisterTeleport","registerTeleport","RemoveTag","removeTag","Report","getReport","reportMsgMaxLength","RequestArea","RequestAreaOwner","requestArea","getAreaAttr","requestAreaOwner","newOwner","RequestAreaParent","requestAreaParent","RequestExit","requestExit","RequestHelp","getSupport","ticketMsgMaxLength","requestHelp","RequestRoom","RequestRoomArea","requestRoom","getRoomAttr","requestRoomArea","RequestRoomOwner","requestRoomOwner","StateStep","Roll","_parseValue","modifierList","diceStep","numStep","quiet","RoomProfile","roomProfile","logLvlClass","RoomScript","roomScript","fetchError","errToL10n","binary","inner","logs","showMilliseconds","lvl","Say","stepFactory","Set","shortDescriptionMaxLength","shortDescriptionTooLong","setAreaParent","SetArea","locationId","SetAreaLocation","getBool","setAreaLocation","mapX","mapx","mapY","mapy","SetAreaOwner","setAreaOwner","SetTeleportMsg","teleportMsgType","SetChar","helpTopic","setChar","SetCharSettings","_attr","setCharSettings","dirAlias","ne","se","sw","nw","each","_toConsumableArray","exitIcons","directions","SetExit","setExit","SetExitOrder","setExitOrder","SetProfile","profileAttr","setProfile","SetProfileAvatar","_setProfileAvatar","SetProfileImage","_setProfileImage","SetPuppet","puppetAttr","setPuppet","setRoomArea","lias","durationRegex","parseDuration","SetRoom","SetRoomLocation","setRoom","setRoomLocation","SetRoomOwner","setRoomOwner","SetRoomProfile","setRoomProfile","SetRoomProfileImage","_setRoomProfileImage","SetRoomScript","scriptAttr","setRoomScript","txtStatusSet","txtStatusCleared","SetStatus","keyRegex","SetTag","tagAttr","setTagPref","tagId","setTag","SetTeleport","nodeAttr","getTeleportNodes","setTeleport","nodeId","Sleep","StopFocus","getFocusCharList","stopFocus","removeFocus","StopLead","txtSetAsNotLfrp","StopLfrp","stopLfrp","StopMuteTravel","stopMuteType","StopMuteChar","stopMuteChar","stopMute","StopMuteMessage","stopMuteMessage","StopMuteOoc","stopMuteOoc","stopMuteTravel","Summon","Sweep","sweep","Teleport","teleport","UnregisterTeleport","unregisterTeleport","Unwatch","newWatchedCharStep","unwatch","UpdateProfile","updateProfile","UpdateRoomProfile","updateRoomProfile","Watch","Whisper","textNotSet","Whois","whois","genderSpecies","firstLetterUppercase","getCharIdleLevel","dialogAboutChar","hasTags","CharTagsList","txtNotSet","DialogRequestControl","_setControlledBy","Textarea","_onRequestControl","fullName","requestPromise","txtWatch","txtUnwatch","DialogAboutChar","charInfo","lfrpComponent","setFormatText","isWatched","idleLevels","Name","NameNoSpace","NameInvalid","Surname","SurnameInvalid","Create","DialogCreateChar","nameComponent","focusout","surnameComponent","messageComponent","buttonComponent","_onCreate","_closeTip","popupTipPosition","onboarding","_setTip","postrenderUpdate","createPromise","openTip","closeTip","DialogCreateCharProfile","isId","DialogCreateExit","_onClose","newRoom","targetRoomValue","hidden","AutoComplete","patternMatch","label","labelCompare","patternMatchRender","minLength","onSelect","_requestExit","DialogCreateRoomProfile","Croppie","_croppie","croppie","destroy","DialogCropImage","dataUrl","onCrop","boundary","animated","points","submit","_showMessage","DialogDeleteChar","heir","required","_onDelete","deletePromise","DialogEditDndMsg","dndMsg","_onSave","isModified","savePromise","getModifications","DialogEditNote","_result","_slicedToArray","DialogExportLog","_onExport","exportPromise","exportLog","exportHtml","NoUiSlider","_slider","onUpdate","_includeThis","_opt","noUiSlider","args","addMin","minDiff","toTime","formatTime","privateEvents","DialogReport","_opt$attachEvent","hasEvent","attachEvent","attachLog","excludePrivate","now","start","snapshotPromise","_setCharSnapshot","timer","endTime","min","connect","pips","density","format","unencoded","tap","positions","slider","setHandle","_sendReport","reportPromise","attachments","noReport","_ev$puppeteer","isPrivateWithOthers","getTime","snapshotId","DialogSetAreaOwner","ac","_setAreaOwner","setOwnerPromise","_requestSetOwner","DialogSetRoomOwner","_setRoomOwner","DialogTag","_onSubmit","isEdit","prefs","getPreferences","global","custom","modifiedOnNew","disableClick","submitPromise","mods","_callSetPref","_callCreate","_callSetDesc","DialogUnregisterPuppet","_onUnregister","unregisterPromise","GlobalTeleports","_getGlobalTeleports","left","right","node","_Html","HelpComponent","categories","_module$info$getCore","promoted","createTable","HelpRelatedTopics","topics","HelpCategory","_getRelatedCategories","HelpTopic","topic","hasDesc","attributeClass","HelpTopics","defaultCategories","isBoundary","matchesCmd","Help","_defaultCategories","cat","addCategory","_getTopicTokenList","_showHelp","topicId","allTopics","_tryAddTopicToCategory","categoryId","_addRemoveTopicToCategories","cats","catId","matchMain","_FormatTxt","HelpAboutComponent","HelpAbout","removeCategory","HelpConsoleComponent","shortcuts","HelpConsole","_shortcuts","shortcut","shortcutId","HelpFilterComponent","HelpFilter","location","helpText","HelpFormatComponent","HelpFormat","HelpRulesComponent","HelpRules","Layout","defaultComponent","queryState","currentLayout","layouts","_trySetLayout","layout","dark","border","controlRequest","_PopupPill","CharLogMutedEvent","getLogEventComponent","noFocus","noMessageHighlight","pillClassName","PopupPill","CharLogMuted","_collection","CharLogComponent","onAtBottom","chunks","nextChunk","overlayState","renderedOverlays","mutedCtx","_onScroll","_onEventAdd","_onLogClick","prerender","parentElement","_loadNextChunk","getCurrentLayout","simpleBar","SimpleBar","forceVisible","autoHide","lockToBottom","CollectionWrapper","getOverlays","overlays","overlay","highlightSettings","atBottom","_scrollElem","chunkIdx","fromBottom","scrollHeight","scrollTop","muteTrail","_moveMuteTrail","_componentsFromLog","insertBefore","firstChild","simplebar","getScrollElement","_isMuted","offset","tip","appendCharName","span","textContent","appendFormatText","appendPoseSpacing","createTextNode","toComponent","isComm","canHighlight","msgEvent","textSpan","methodMsgEvent","CharLogEventMenu","menuItems","_close","_menu","contains","_unrenderMenu","onFadeOut","_open","_setComponent","offsetHeight","scrollLeft","offsetWidth","txtTampered","CharLogEvent","_mod$triggers","_ev$target","_onMouseEnter","_onMouseLeave","own","subdiv","noMenu","menu","ep","getTooltipText","tt","_getTooltipText","clientX","margin","_renderMenu","fadeIn","getMenuItems","fadeOut","_Txt","ErrorEvent","InfoEvent","_Elem","WhisperEvent","_ev$targets","more","targets","poseSpacing","DescribeEvent","MessageEvent","txtSummon","txtHowToJoin","SummonEvent","txtJoin","txtHowToSummon","JoinEvent","OocEvent","WarnEvent","MailEvent","sp","AddressEvent","txtLeadRequest","txtHowToFollow","LeadRequestEvent","txtFollowRequest","txtHowToLead","FollowRequestEvent","txtFollow","txtStartsToFollow","txtHowToStopFollow","txtHowToStopLead","FollowEvent","txtControlRequest","txtRequestToTakeControl","txtHowtoGrantControl","txtHowtoDenyControl","ControlRequestEvent","DndEvent","componentFactories","sayEvent","rdiv","travelEvent","fieldset","fieldsetSpan","fieldsetLabel","stopFollowEvent","stopLeadEvent","ignoreUnseen","release","CharLog","initialChunkSize","chunkSize","_onActiveChange","_onVisibilityChange","_getEventModifications2","localId","sessionId","activeCharId","isHidden","hasMore","factories","addingEvent","x","eventbus","modifiers","addEventComponentFactory","transition","Transition","ResizeObserverComponent","charComponents","prevBlock","lastEv","started","_getLogId","_getTimestamp","typ","hs","menuItem","menuItemId","overlayId","modifier","modifierId","_onAtBottom","last","ctrlSince","hchar","slideLeft","slideRight","fade","ctrlEvId","lastTime","_getEventModifications","_isVisible","visibilityState","isRendered","_x3","_x4","CharLogSettings","useLocalStorage","requestToPromise","onSuccess","onError","eventStore","timeIndex","logStoragePrefix","getKey","CharLogStore","charLogSettings","_listenSettings","dbPromise","_openDB","_getDb","_addIndexedDBEvent","_addStorageEvent","onEach","_getIndexedDBEvents","_getStorageEvents","transaction","put","_loadSessionStore","store","sessionStorage","shift","index","openCursor","IDBKeyRange","upperBound","cursor","continue","_getSessionLog","charLogs","_keys","lastIndexOf","dbName","useLocal","_getPlayerCtrlIds","ctrlIds","_moveToIndexedDB","_moveToSessionStorage","_migrateToIndexedDB","objstore","_keys2","_i2","ctrlIdMap","hasError","_loop3","cur","delete","_closeDb","ControlEventComponent","dialogExportLog","ReleaseEventComponent","ControlEvent","removeEventComponentFactory","HelpmeEvent","txtHelp","HelpmeEventComponent","MenuItemExportLog","addMenuItem","removeMenuItem","MenuItemReply","_onReply","countTargets","_onReplyAll","getTargets","MenuItemReport","txtQuietRoll","RollEventComponent","showDetails","op","sides","multi","dice","total","RollEvent","CharPagesChar","models","_onLookAtChange","_setCtrlListeners","pageFactory","pages","_closePage","charPage","_setLookAtListeners","_setChar","seen","_setCharListeners","isSeen","_getModel","getDefaultPageFactory","charPagesStore","getChar","namespace","CharPages","_onUpdate","handler","defaultPageFactory","addPage","emit","_setPage","panelChar","getPage","_setModel","createFactory","charPagesDB","charPagesDBPrefix","charStore","toPromise","CharPagesStore","ConsoleControlledChar","activeChar","tabCompleteEffect","StateEffect","tabCompletionConfig","Facet","combine","configs","combineConfig","tabCompletionState","StateField","TabCompletionState","tr","tabComplete","effects","of","cState","field","dispatch","changes","insert","anchor","userEvent","is","isUserEvent","facet","spellcheckMark","_spellchecks","txtPlaceholder","ConsoleEditor","_onEnter","_onEditorUpdate","_cyclePrev","_cycleHistory","_cycleNext","getKeymapModel","cm","_newEditorState","_createEditor","_setEmpty","_this$state","sel","_getSelection","setDoc","_getValue","_destroyEditor","_this$elem","EditorView","insertNewline","_onSend","keymapArray","keymapProps","standardKeymap","EditorState","extensions","getCMTabComplete","keymap","getCMFormattingStyle","getCMLanguage","getCMHighlightStyle","lineWrapping","updateListener","_this$state2","_this$state3","_setConsole","_this$state4","_this$state5","prevHistory","nextHistory","ConsoleComponent","editor","cyclePrev","cycleNext","historyIdx","historyLength","isClean","consoleStateStoragePrefix","historyStorageSuffix","_Model","ConsoleState","_ctrlId","_historySize","historySize","_doc","_anchor","_head","_history","_historyIdx","_cmLanguage","_load","_saveDoc","_addHistory","_getHistory","historyDoc","trimDoc","_saveHistory","Console","_onMediaChange","_getMode","keymapModel","charStates","_getCharState","binding","media","LayoutDesktop","setDefaultLayout","ActivePanelPlaceholder","ModelHtml","greeting","ActivePanel","activePanel","layoutDesktop","setNode","setActivePanel","ActivePanelSetter","newConsole","CharPanel","_onCharPagesChange","_onCharPanelOpen","pageInfo","Panel","align","pi","setTitle","setButton","closeIcon","sb","getSimpleBar","PlayerPanelFooter","getFooterTools","PlayerPanel","_onPlayerTabsChange","playerTabs","tabPage","instant","footerComponent","subheaderComponent","newTabs","closeOnReselect","hideDefaultTab","btnClass","tabId","getDefaultTabFactory","getTabDirection","pageIdx","getAreaIdx","areas","RoomPanelComponent","panel","newZoomBar","_m$factory","before","after","OnRender","afterRender","beforeUnrender","RoomPanel","_onRoomPanelOpen","KebabMenu","topMargin","absolutePositioned","btnClassName","menuClassName","LayoutMobileTitleBar","currentIcon","LayoutMobileComponent","mainComponent","getTools","titleBar","LayoutMobile","defaultMain","addLayout","removeLayout","MobileActivePanelPlaceholder","MobileActivePanel","_setModelIfMobile","_onCharPanelClose","_orModelIfMobile","_onRoomPanelClose","charPanelOpen","roomPanelOpen","_setCharLogHidden","layoutMobile","setMainComponent","setIsHidden","MobileActivePanelSetter","mobileActivePanel","defaultTitle","MobileCharPanel","_onActivePanelModelChange","activePanelModel","MobilePanel","closed","toggleCharPanel","MobileReconnecting","_onApiEvent","connected","toggleRoomPanel","MobileRoomPanel","MobileRoomPanelComponent","PlayerTabsTab","tab","tabFactory","PlayerTabsTabs","_onTabClick","getTabs","defaultTab","tabs","closeTabs","openTab","getContext","getPageIdx","pageId","PlayerTabs","tabPages","nullPages","_getTabPages","_closePages","openTabPage","firstIdx","refTabId","beforeClose","beforeTabId","afterTabId","_getTabIdx","isDefault","updateModel","nextPage","skipPageId","mobileLayout","RoomPagesChar","roomInstanceId","areaPages","defaultRoomStates","defaultAreaStates","setDefaultRoomPageFactory","defaultRoomPageFactory","setDefaultAreaPageFactory","defaultAreaPageFactory","_getPageStack","stateFactory","_stack","getRoomInstanceId","_page$factory","defaultRoomPage","defaultAreaPage","triggerUpdate","RoomPagesZoomBar","_zoom","_getAreaIndex","emptyModelValues","RoomPages","_onAreaChange","_getChar","setAreaId","_m$areas","_m$areas2","_openPage","ret","openPage","getDefaultRoomPageFactory","getDefaultAreaPageFactory","changedChar","_getAreas","arraysEqual","_listenAreas","_getCurrentArea","getAreaId","_ctrl$inRoom","_before$","fromArrayBuffer","buffer","urlSafe","btoa","fromCharCode","Uint8Array","notifyStoragePrefix","notifySettingKeys","defaultOnClick","Notify","defaultIcon","defaultBadge","alwaysNotify","find","enabled","notifyOnRequests","endpoint","_opt2","skipOnPush","badge","_userTag","getPromise","registration","showNotification","Notification","onclick","_opt$onClick","_opt3","enable","noRequest","permissionPromise","_setEnabled","_requestPermission","_subscribeToPush","pushSubscription","_unregisterPushSub","finally","_getServiceWorker","pushManager","getSubscription","_registerPushSub","closeNotification","_setEndpoint","oldEndpoint","permission","requestPermission","_this$app$getModule2","base64","options","applicationServerKey","vapidPublicKey","_unsubscribeToPush","subscribe","userVisibleOnly","p256dh","_getNotifySettings","unsubscribe","NotifySettingsComponent","setDisabled","NotifySettings","locationTypeClass","PageAreaLocation","inLocations","selectedModel","countComponent","_inLocation","_updateCount","setNodeClassName","setClassName","isInstance","inInstance","PageAreaImage","scale","_endAction","_onMove","_onSelectedChange","_getLocation","_getSelected","btnSize","mousedown","_grab","clientY","dragstart","drop","wheel","pow","deltaY","ModelFragment","onAdd","nextFrame","onRemove","_clickZoom","_center","_setTransform","setNodeStyle","_onZoom","requestAnimationFrame","sx","sy","PageAreaComponent","areaState","_onLocationClick","_onLocationsChange","listeners","_getAndListenInLocations","imgFader","aboutOpen","onToggle","rulesOpen","_canEdit","NameSection","areaImageOpen","locationOpen","_unlistenInLocations","areaIdx","areaInfo","PageArea","PageAwakeChar","getNotes","_setTooltip","setNodeAttribute","countMatches","PageAwakeComponent","watchForOpen","_onCountChange","charsAwakeModel","getWatchedAwake","countCtx","toggleShowLfrp","toggleShowAll","_setUnwatched","_clearTimer","filterIsEmpty","showCount","matchCount","txtComp","collapser","getUnwatchedAwake","PageAwake","addTab","removeTab","PageCharComponent","charState","static","tooltipMargin","charImageOpen","setSrc","lfrpOpen","descriptionOpen","howToPlay","howToPlayOpen","puppetInfo","_showAbout","_isControlled","PageCharSleep","_wakeupChar","_releaseChar","PageChar","setDefaultPageFactory","PageCharProfileProfileContent","editProfile","_updateProfile","pageEditCharProfile","_useProfile","PageCharProfileProfile","_toggleActions","newCharImg","lastUsed","PageCharProfileComponent","validateCharProfiles","dialogCreateCharProfile","PageCharProfile","PageCharSelectCharContent","actionFader","wakeupComponent","suspendReason","controller","_openTip","PageCharSelectChar","itemId","PageCharSelectPuppetContent","_setAction","isControlling","reqStatus","_wakeupPuppet","pending","rejected","requestControl","_requestControl","dialogRequestControl","PageCharSelectPuppet","isOpen","PageCharSelectComponent","puppetsComponent","getPuppets","validateOwnedChars","dialogCreateChar","PageCharSelect","_openOnNoControl","PageCharSettingsComponent","_save","dialogDeleteChar","PageCharSettings","txtUpdate","txtClose","PageEditAreaComponent","areaSettings","settingsModel","settingsChanges","FileButton","validateImageSize","_setAreaImage","noFileReader","_deleteAreaImage","customTeleportMsgs","teleportLeaveMsg","teleportArriveMsg","teleportTravelMsg","overrideCharTeleportMsgs","_setSaveButton","dialogSetAreaOwner","_deleteArea","_canDeleteArea","_getChanges","upload","uploadId","PageEditArea","canEdit","toggleOpen","openAreaPage","PageEditCharComponent","dialogCropImage","_setCharImage","_deleteCharImage","_setCharAvatar","_deleteCharAvatar","puppetInfoModel","puppetInfoChanges","puppetInfoChange","save","hasChange","thumbAsAvatar","x1","y1","x2","y2","PageEditChar","EditCharTagsComponent","editCharTags","_tagIsValid","_setTag","isSelecting","_addTag","preventSubmit","_editTag","_deleteTag","dialogTag","EditCharTags","pageEditChar","PageEditCharProfileComponent","_copyProfileImage","_setUpdateImageDisabled","_copyProfileAvatar","_setUpdateAvatarDisabled","_deleteProfileAvatar","_delete","_setUpdateDisabled","charImgHref","disable","PageEditCharProfile","PageEditExitComponent","exitInfo","_message","_getNavState","_newIconSet","leaveMsg","arriveMsg","travelMsg","inactive","transparent","_setSaveText","row","disabled","ExitIcon","_getModifications","_equalKeys","PageEditExit","exitDetails","openRoomPage","PageEditExitsExit","_move","_edit","pageEditExit","PageEditExitsComponent","roomState","exitsOpen","hiddenExitsOpen","hiddenExits","dialogCreateExit","PageEditRoom","canDelete","txtLfrpInfo","txtLfrpDescInfo","PageEditLfrpComponent","wrapper","_setButtons","rpState","_this2$ctrl$puppeteer","isLfrp","PageEditLfrp","units","unit","DurationInput","_thisSuper","_onInput","_valid","_onValid","onValid","_invalidClassName","invalidClassName","setDuration","_duration","triggerChange","formatDuration","_setInvalidClass","_setDuration","valid","PageEditRoomComponent","roomSettings","_setRoomImage","_deleteRoomImage","isHome","isTeleport","isDark","isQuiet","autosweep","autosweepDelay","dialogSetRoomOwner","_canDeleteRoom","PageEditRoomProfileComponent","roomProfiles","newRoomImg","_copyRoomProfileImage","_deleteRoomProfileImage","roomImgHref","PageEditRoomProfile","PageEditTeleportComponent","isGlobal","nodeInfo","errString","deleteTeleport","PageEditTeleport","nodePages","PageInRoomComponent","newRoomChar","PageInRoom","txtOoc","PageMailMailContent","_setRead","read","received","PageMailMessage","_toggleInfo","mailId","getResourceId","defaultLimit","PageMailComponent","noMailComponent","mailCountComponent","getText","mails","_loadMail","loadingOffset","begin","PageMailMail","PageMail","_onUnreadChange","_onNotificationNewMailEvent","unread","_listenNotification","ref","_notifyMail","PagePlayerSettingsComponent","PagePlayerSettings","_updateAlert","_listenTool","alertModel","PagePuppeteerSettingsComponent","dialogUnregisterPuppet","getPuppeteerId","PagePuppeteerSettings","puppeteerPages","stateIcons","accepted","failed","stateTime","expires","answered","PageRequestsRequest","request","outgoing","getRequestType","titleFactory","stateProp","_revoke","_accept","_reject","requestId","PageRequestsComponent","incoming","incomingRequestId","outgoingRequestId","PageRequests","_onRequestAdd","_onNotificationNewRequestEvent","requestTypes","requests","requestType","inc","RequestCreateExit","pageRequests","addRequestType","RequestRegisterPuppet","RequestSetArea","RequestSetAreaOwner","RequestSetRoom","RequestSetRoomOwner","PageRoomChar","lookedAt","_lookChar","sc","PageRoomExitChars","perRow","oldRect","_disposeComponent","newPerRow","clickTooltip","_updateRows","genderComponent","speciesComponent","rowCount","ceil","currentCount","removeAtIndex","PageRoomExit","PageRoomExits","_CollectionComponent","onExitClick","roomInfo","notSet","PageRoomComponent","_canDelete","allTools","roomImageOpen","inRoomOpen","PageRoom","PageRoomProfileProfileContent","pageEditRoomProfile","PageRoomProfileProfile","PageRoomProfileComponent","validateRoomProfiles","dialogCreateRoomProfile","PageRoomProfile","PageSelectTagsTag","ToggleBox","toggleNext","setTip","PageSelectTagsSection","getTags","isRoleTags","_onCustomChange","_listenCustom","_inGroup","_hasCustom","getTagId","getTagPref","PageSelectTagsComponent","keyMap","PageSelectTags","PageTeleportCharRoom","closePage","_teleport","copyToClipboard","PageTeleportCharNode","pageEditTeleport","PageTeleportCharComponent","PageTeleportChar","PageWatchChar","PageWatchNoWatch","PageWatchComponent","bc","PageWatch","Player","_onUnsubscribe","_onCtrlAddRemove","_onUserChange","_onIdentityChange","activeCharIdx","CollectionToModel","availableChars","_playerPromise","_listenUser","_getPlayerPromise","puppeteers","_len","_key","hasRoles","_len2","_key2","_len3","_key3","hasIdRoles","_len4","_key4","playerPromise","_ctrlChange","_this$model$player","newIdx","reloadRoles","PlayerSettingsEmailComponent","newEmailButton","PlayerSettingsEmail","PlayerSettingsPlayerNameComponent","playerName","username","PlayerSettingsPlayerName","txtPrivacyPolicy","txtTermsOfService","PlayerSettingsPolicies","idRoleTags","roleTags","idRoleTag","roleTag","PlayerSettingsRolesComponent","_transformRoles","_m$idRoles","_m$roles","PlayerSettingsRoles","_ModelCollapser","PlayerSettingsSecurityComponent","hasLogin","PlayerSettingsSecurity","FormatText","getLocationObject","locationArea","getCurrentLocation","_ModifyModel","_updateChildren","_ctrl","_area","useFullname","errNotFoundMsg","_createResult","useFull","inline","expandSelection","full","openDialogs","setZ","z","_expandSelection","ids","found","_onEsc","keyCompare","_symbols","_items","lc_key","peek","aliases","consume","addOnExec","trimmed","trimStart","delims","splicedDelims","errFloat","getState","_setStep","maxLengthCallback","useSpellcheck","_formatText","hasMatched","_token","eol","getTokens","properties","_onCustomize","_onMutation","auto","selecting","autocompleter","innerClassName","customize","observer","MutationObserver","observe","childList","subtree","disconnect","container","inputRect","prefOrder","like","_tags","staticClone","bt","cont","mouseenter","mouseleave","_slideOpt","_onTransitionEnd","_component","_horizontal","_show","_hide","_renderComponent","display","anim","_unrenderComponent","exitIconMap","_default","cl","startsWith","asArrayBuffer","setEvent","_handleClick","_rootElem","setNodeEvent","_handleSelect","files","_clearInput","reader","FileReader","readAsArrayBuffer","readAsDataURL","addPart","oocNoParenthesis","setStr","sectionRegex","sidx","section","_setState","animId","loadPromise","_this$current","_this$current2","im","Image","clear","onabort","onErr","placeholderClassName","whenImageLoaded","_setCurrent","_this$loaded","_setSrcAttr","opacity","_this3$loaded","_this3$loaded2","removeAttribute","_tb","toggleBoxEvents","toggleBoxClassName","_popupTip","_rendered","_label","_labelTxt","setLabel","_renderLabel","_unrenderLabel","isDisabled","_alignLeft","_onButtonClick","_subheaderComponent","titleFader","titleTxt","clickBtn","clickIcon","recalculate","_ModelComponent","modelComponentSelector","_onToggle","_promise","triggerOnToggle","icons","rotate","defaultBtnState","defaultCenterState","number","setClass","classList","prepareState","btnState","prepareCenterState","centerState","btns","cbs","svg","_getByClass","listening","_this$svg$parentNode","_updateBtn","_updateCenter","_directions","_updateAll","_directions2","_i3","_directions3","_unlisten","btn","_i4","_directions4","firstElementChild","_i5","_icons","getElementsByClassName","_c","_this$_opt","_this$_opt$beforeRend","_this$_opt2","_this$_opt2$afterRend","beforeRender","_this$_opt3","_this$_opt3$beforeUnr","_this$_opt4","_this$_opt4$afterUnre","afterUnrender","_instant","toggleBtn","setRequired","isRequired","setHtml","defaultCtx","typeClassNames","channelBorder","_tip","_timer","mouseover","_clearTimeout","clicked","_caret","posHandlers","fits","rootRect","tipRect","bottom","_track","_position","_setPosition","_observe","_stopObserve","_observer","IntersectionObserver","root","rootMargin","domRectToObject","_onResize","_this$component","_this$component2","_this$component2$getE","_this$component3","ResizeObserver","_sb","_lock","_atBottom","_locked","_lastScroll","_onAnimFrame","getContentElement","_setListener","_lockToBottom","unMount","stch","sh","round","_setAtBottom","_idx","_values","txtTo","extractTarget","ts","targetTooltipText","parser","language","streamParser","lineStart","StringStream","tabSize","clipboard","writeText","select","execCommand","errStr","json","fromRegex","toRegex","substr","fix","parseFloat","toFixed","bytes","formatDate","defaultOpt","keySort","typeText","Token","_createClass","parseTokens","foundTriggers","_tokens","tokenFactory","token_cmd_start","token_cmd_end","token_em_start","token_em_end","token_strong_start","token_strong_end","token_ooc_start","token_ooc_end","token_ooc_start_noparenthesis","token_ooc_end_noparenthesis","token_sup_start","token_sup_end","token_sub_start","token_sub_end","token_strikethrough_start","token_strikethrough_end","token_br","token_highlight_start","token_highlight_end","textStyle","crossToken","processInner","keepContent","findInTokens","link","findLinkInToken","matchOffset","matchTextToken","linkFrom","linkTo","anchorFrom","spliceTextTokens","escapedUrl","spliceTextToken","em","strong","strikethrough","sup","sub","triggerLength","txtIdx","rule","re","_Object$assign","crossBoundary","atStart","startRegex","endRegex","startToken","endToken","config","_Object$assign2","endRegexFactory","regexIsLetter","eidx","requireFirst","trimEnd","scheme","domain","getSeconds","getMilliseconds","showSeconds","instance","txtAttribute","txtValue","attrs","attribClass","valueClass","txtIdRoles","toLocaleString","rs","levels","asleep","bot","mozIndexedDB","webkitIndexedDB","msIndexedDB","IDBTransaction","webkitIDBTransaction","msIDBTransaction","webkitIDBKeyRange","msIDBKeyRange","rawToken","normalize","resource","oldResource","newResource","defaultSetter","setter","newSelected","getSelected","_selected","_selected2","objectDiff","p0","p1","p2","strKeys","alphanumRegex","getTargetList","getTarget","addOoc","_ev$targets2","txtRoles","Tooltip","posClass","caret","contRect","contWidth","refRect","refWidth","contOffset","boundaryRect","maxHeight","setListeners","tryCreateTooltip","timeout","closeTimeout","_opt$onClose","mouseEnter","mouseLeave","exitNotFound","webpackContext","webpackContextResolve","__webpack_require__","exports"],"sourceRoot":""}