{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/core/entity/Entity.js","webpack:///./src/store/EntityStore.js","webpack:///./src/store/GameStateStore.js","webpack:///./src/core/collections/modelBase.js","webpack:///./src/characters/models/model.js","webpack:///./src/core/ruleset/experiment/actions.js","webpack:///./src/app/main.js","webpack:///./src/app/oidc.js","webpack:///./src/core/api/files/constants.js","webpack:///./src/core/api/files/files.js","webpack:///./src/core/collections/tokens/model.js","webpack:///./src/core/entity/Asset.js","webpack:///./src/core/collections/constants.js","webpack:///./src/core/analytics/store.js","webpack:///./src/core/assets/AssetStore.js","webpack:///./src/campaigns/store.js","webpack:///./src/characters/store.js","webpack:///./src/core/collections/api.js","webpack:///./src/core/collections/store.js","webpack:///./src/core/drawing/store.js","webpack:///./src/core/dropper/store/DropperStore.js","webpack:///./src/store/EditStore.js","webpack:///./src/core/errors/store.js","webpack:///./src/core/permissions/gm/hasPermissionFor.js","webpack:///./src/core/permissions/gm/store.js","webpack:///./src/core/events/keyboard/store.js","webpack:///./src/core/grid/store.js","webpack:///./src/core/fog/store.js","webpack:///./src/core/library/store/defaultCharacterData.js","webpack:///./src/core/library/store/LibraryStore.js","webpack:///./src/core/live/LivePlayState.js","webpack:///./src/core/collections/players/store.js","webpack:///./src/core/collections/tokens/store.js","webpack:///./src/core/collections/user/api.js","webpack:///./src/core/collections/user/UserCollectionStore.js","webpack:///./src/profile/api.js","webpack:///./src/core/events/window/store.js","webpack:///./src/profile/store.js","webpack:///./src/app/store.js","webpack:///./src/app/router.js"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","installedCssChunks","jsonpScriptSrc","p","exports","module","l","e","promises","cssChunks","Promise","resolve","reject","href","fullhref","existingLinkTags","document","getElementsByTagName","tag","dataHref","getAttribute","rel","existingStyleTags","linkTag","createElement","type","onload","onerror","event","request","target","src","err","Error","code","parentNode","removeChild","head","appendChild","then","installedChunkData","promise","onScriptComplete","script","charset","timeout","nc","setAttribute","error","clearTimeout","chunk","errorType","realSrc","message","name","undefined","setTimeout","all","m","c","d","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","oe","console","jsonpArray","window","oldJsonpFunction","slice","Entity","props","this","id","assign","meta","EntityStore","namespaced","state","getters","getEntityByRef","ref","base","tokens","values","filter","entity","token","mutations","patch","delta","jsonpatch","applyPatch","update","mergeObj","dest","prop","Vue","set","add","delete","characterId","actions","commit","payload","load","entities","remove","GameStateStore","global","ruleset","rollLog","selectedTokenId","activeMap","mapShapes","selectedTokenUpdate","tokenId","setMapShapes","shapes","clear","setBase","_","cloneDeep","activateMap","map","applyDelta","dispatch","Array","isArray","forEach","pop","newDocument","change","followPath","path","reduce","acc","el","parsePath","pathString","split","idx","op","from","moved","fromProp","copied","DataModelBase","Character","jsonObject","upgraded","_character_version","keys","increment","description","action","decrement","attack","config","productionTip","use","BootstrapVue","BootstrapVueIcons","IconsPlugin","VueChatScroll","VueMaterial","Clipboard","VTooltip","VueFuse","VueMatomo","host","siteId","router","enableLinkTracking","requireConsent","trackInitialView","trackerFileName","debug","library","faKickstarterK","faDiceD20","component","FontAwesomeIcon","store","render","h","axios","interceptors","disableAuth","headers","oidcStore","access_token","env","process","oidcSettings","authority","VUE_APP_AUTHORITY","VUE_APP_REALM","clientId","VUE_APP_AUTH_CLIENT_ID","redirect_uri","VUE_APP_BASE_URL","responseType","scope","VUE_APP_AUTHORITY_SCOPES","post_logout_redirect_uri","FILE_TYPES","CHARACTER","MAP","CAMPAIGN","PROFILE","addFile","files","fileType","includes","FormData","file","append","post","response","status","getFiles","join","image","asset","kind","url","addCampaign","getCampaigns","addCharacter","getCharacters","addMap","getMaps","Token","q","_token_version","Asset","results","assets","Image","addEventListener","once","ev","COLLECTION_TYPES","maps","players","characters","permissions","AnalyticsStore","pushEvent","_paq","category","AssetStore","loadImage","CampaignStore","campaigns","activeCampaign","displayEditModal","isLoading","updateCampaigns","updateActiveCampaign","campaign","toggleDisplayEditModal","catch","getActiveCampaign","campaignId","root","submitImage","resp","imageUrl","preview","getElementById","style","display","createCampaign","_context","updateCampaign","put","saveEdit","method","getRawCharacter","rootGetters","getCharacter","rootState","character","collection","item","context","editedCharacter","currentCharacter","_id","openEditor","characterToEdit","closeEditor","CharacterStore","getByCampaign","getCollection","getItem","loadCollection","live","sessionId","CollectionStore","patches","nonAddPatches","addReactivityToThisProperty","existingItemPath","pathPoint","forceReactivityUpdate","purge","onAdded","updateAll","stage","elements","_userid","player","mapId","onRemoved","onUpdated","parameters","onLoad","items","loadMaps","reload","collections","DrawingStore","active","receivedLines","drawerLastActive","drawingColors","activeColor","brushSizes","activeBrushSize","brushRenderSizeModifier","randomActiveColor","Math","floor","random","toggle","updateColor","color","updateBrushSize","size","parseInt","drawLine","line","attrs","director","lineDrawReceived","Date","now","profile","me","purgeUsersLines","userId","fadeUsersLines","clearLines","DropperStore","draggedItem","setDragged","startDrag","reset","ready","EditStore","editMap","hiddenSidebar","setEditMap","setHiddenSidebar","toggleHiddenSidebar","ErrorStore","modalMessage","closeCallback","close","modal","permissionsVerification","hasPermissionFor","specifiedPermission","gameMasterControlActive","gmPermissionActiveFor","assumedPermissionFor","getGameMasterStatus","currentUserId","isCampaignOwner","owner","isCampaignOwnerById","isItemOwner","itemUserId","isActiveMapOwner","isEmpty","gamestate","gmOrOwner","gridControl","fogControl","editAnyMap","hiddenTokens","moveAll","defaultPermissions","deleteToken","setLocalPermissions","allPermissions","dispatchTrackKeys","dispatchFocusActive","dispatchFocusInactive","gmPermissionsStore","displayGmControlsModal","permissionsKey","onlyPermissionsItemKey","permissionSettings","settings","toggleDisplayGmControlsModal","setGmPermissionSetting","toggledPermission","permissionsExist","permissionName","permissionsDoNotExist","setting","createComparableCollections","currentCollection","editableCollection","createUpdatePatch","loadGmPermissions","GridStore","FogStore","obscure","toggleActive","setActive","toggleObscure","setObscure","pressedKey","keyPressed","triggerComplete","trackKeys","focusActive","removeEventListener","focusInactive","initiateFunctions","addTracking","removeTracking","KeyboardStore","LibraryStore","defaultCharacters","updateCharacters","updateMaps","LivePlayState","connected","setDirector","setSessionId","pos","removeCharacter","updateCampaignObject","addCampaignObject","removeCampaignObject","getPlayer","getPlayers","gameMasters","createGmGroup","ownerId","nonGameMasters","createNonGmGroup","isGameMaster","playerId","setGameMasterStatus","profileId","editablePlayer","jsonPatch","changePlayerMap","argumentFiller","setCurrentMapForPlayer","modifiedPlayer","findPlayerFromProfileId","find","assumedGameMasters","PlayerStore","getRawToken","getToken","getTokens","getTokensByMapId","updateSelectedToken","selectedToken","spawn","editedToken","currentToken","changes","moveToken","movedToken","TokenStore","UserCollectionStore","trackWindowResize","ProfileStore","showEditor","profiles","profileLoadPromises","getImage","getProfile","showSplash","hasSeenFPSplash","getGroups","groups","updateImage","ProfileApi","edit","show","uploadImage","log","JSON","stringify","count","loadMultiple","ids","windowSize","width","height","displayedModals","isDisplayingModal","updateWindowSize","pushDisplayedModal","modalId","popDisplayedModal","modalIndex","indexOf","warn","windowResize","innerWidth","innerHeight","WindowStore","Vuex","Store","vuexOidcCreateStoreModule","dispatchEventsOnWindow","userLoaded","user","email","userUnloaded","accessTokenExpiring","accessTokenExpired","silentRenewError","userSignedOut","oidcError","dropper","userCollections","CampaignsStore","drawing","grid","fog","gmPermissions","GmPermissionsStore","hasPermission","HasPermissionStore","keyboard","analytics","errors","editingModes","VueUnleash","appName","instanceId","provider","VueRouter","routes","children","alias","redirect","location","newTabRoutes","newTabAddress","open","accountProfile","beforeEach","vuexOidcCreateRouterMiddleware"],"mappings":"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","file":"js/app.8ae63757.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded CSS chunks\n \tvar installedCssChunks = {\n \t\t\"app\": 0\n \t}\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"js/\" + ({}[chunkId]||chunkId) + \".\" + {\"chunk-0530560e\":\"b002ec4d\",\"chunk-6b41ae4c\":\"c40bb5c2\",\"chunk-537c7802\":\"37df3e69\",\"chunk-5e0e8256\":\"491fe3cc\",\"chunk-92b704ce\":\"a0ac1b92\",\"chunk-845ccdc8\":\"ff7ff87e\",\"chunk-da916f8e\":\"d8c05b5b\"}[chunkId] + \".js\"\n \t}\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// mini-css-extract-plugin CSS loading\n \t\tvar cssChunks = {\"chunk-0530560e\":1,\"chunk-537c7802\":1,\"chunk-5e0e8256\":1,\"chunk-92b704ce\":1,\"chunk-da916f8e\":1};\n \t\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n \t\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n \t\t\tpromises.push(installedCssChunks[chunkId] = new Promise(function(resolve, reject) {\n \t\t\t\tvar href = \"css/\" + ({}[chunkId]||chunkId) + \".\" + {\"chunk-0530560e\":\"6fd0e930\",\"chunk-6b41ae4c\":\"31d6cfe0\",\"chunk-537c7802\":\"9cf89972\",\"chunk-5e0e8256\":\"86ab3be3\",\"chunk-92b704ce\":\"479627a1\",\"chunk-845ccdc8\":\"31d6cfe0\",\"chunk-da916f8e\":\"2854e308\"}[chunkId] + \".css\";\n \t\t\t\tvar fullhref = __webpack_require__.p + href;\n \t\t\t\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n \t\t\t\tfor(var i = 0; i < existingLinkTags.length; i++) {\n \t\t\t\t\tvar tag = existingLinkTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n \t\t\t\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return resolve();\n \t\t\t\t}\n \t\t\t\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n \t\t\t\tfor(var i = 0; i < existingStyleTags.length; i++) {\n \t\t\t\t\tvar tag = existingStyleTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\");\n \t\t\t\t\tif(dataHref === href || dataHref === fullhref) return resolve();\n \t\t\t\t}\n \t\t\t\tvar linkTag = document.createElement(\"link\");\n \t\t\t\tlinkTag.rel = \"stylesheet\";\n \t\t\t\tlinkTag.type = \"text/css\";\n \t\t\t\tlinkTag.onload = resolve;\n \t\t\t\tlinkTag.onerror = function(event) {\n \t\t\t\t\tvar request = event && event.target && event.target.src || fullhref;\n \t\t\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + request + \")\");\n \t\t\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n \t\t\t\t\terr.request = request;\n \t\t\t\t\tdelete installedCssChunks[chunkId]\n \t\t\t\t\tlinkTag.parentNode.removeChild(linkTag)\n \t\t\t\t\treject(err);\n \t\t\t\t};\n \t\t\t\tlinkTag.href = fullhref;\n\n \t\t\t\tvar head = document.getElementsByTagName(\"head\")[0];\n \t\t\t\thead.appendChild(linkTag);\n \t\t\t}).then(function() {\n \t\t\t\tinstalledCssChunks[chunkId] = 0;\n \t\t\t}));\n \t\t}\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n \t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([\"3638\",\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","class Entity {\n /**\n *\n * @param {string|number|object} [props] - ID or object used to set entity contents\n */\n constructor(props) {\n if (typeof props === 'string') {\n this.id = props;\n } else if (typeof props === 'object') {\n if (!props.id) {\n throw new Error('Entity initializer object must have id property');\n }\n Object.assign(this, props);\n if (typeof this.id !== 'string') {\n throw new Error('Entity ID must be a string');\n }\n } else {\n throw new Error('Entity must be constructed with ID or initializer object');\n }\n\n this[Entity.meta] = {};\n }\n\n /**\n * Symbol for retrieving metadata object in an entity\n */\n static meta = Symbol('entityMetadata');\n}\n\nexport { Entity as default };\n","import Vue from 'vue';\nimport jsonpatch from 'fast-json-patch';\n\nimport Entity from '@/core/entity/Entity';\n\nconst EntityStore = {\n namespaced: true,\n state: {},\n getters: {\n getEntityByRef: state => (ref, base) => {\n if (base == undefined) {\n if (ref === '.') {\n if (process.env.NODE_ENV !== 'production') {\n console.warn('getEntityByRef: cannot resolve self-pointer with no base');\n }\n return undefined;\n }\n return state[ref];\n }\n if (typeof base === 'string') {\n base = state[base];\n }\n return ref === '.' ? base : state[ref];\n },\n tokens(state) {\n return Object.values(state).filter(entity => entity.token);\n },\n },\n mutations: {\n patch(state, delta) {\n const entity = state[delta.id];\n jsonpatch.applyPatch(entity, delta.patch);\n },\n update(state, value) {\n const mergeObj = (dest, src) => {\n for (const prop in src) {\n // If property exists in destination, if the new value\n // is an object, merge; otherwise, overwrite.\n if (dest.hasOwnProperty(prop)) {\n if (typeof dest[prop] === 'object') {\n mergeObj(dest[prop], src[prop]);\n } else {\n dest[prop] = src[prop];\n }\n } else {\n Vue.set(dest, prop, src[prop]);\n }\n }\n };\n\n mergeObj(state[value.id], value);\n },\n add(state, entity) {\n Vue.set(state, entity.id, entity);\n },\n delete(state, characterId) {\n Vue.delete(state, characterId);\n },\n },\n actions: {\n patch({ commit, state }, delta) {\n const id = delta.id;\n const patch = delta.patch;\n let entity = state[id];\n\n if (!entity) {\n entity = {};\n jsonpatch.applyPatch(entity, patch);\n commit('add', entity);\n } else {\n commit('patch', { id, patch });\n }\n },\n update({ commit, state }, payload) {\n if (state[payload.id]) {\n payload.value.id = payload.id;\n commit('update', payload.value);\n } else {\n commit('add', payload.value);\n }\n },\n async load({ commit }, entities) {\n for (const id in entities) {\n commit('add', new Entity(entities[id]));\n }\n },\n remove({ commit }, characterId) {\n commit('delete', characterId);\n },\n },\n};\n\nexport default EntityStore;\n","// Module for representing gamestate in Vuex\n// The base gamestate is the state of all objects in the game at a certain snapshot\n\nimport EntityStore from './EntityStore';\nimport Vue from 'vue';\nimport jsonpatch from 'fast-json-patch';\nimport _ from 'lodash';\n\n// Invariant: gamestate = foldl(base, applyDeltas, deltas)\nlet GameStateStore = {\n namespaced: true,\n state: {\n base: {\n global: {},\n entities: {},\n ruleset: {},\n },\n global: {\n rollLog: [],\n },\n ruleset: {},\n selectedTokenId: '',\n activeMap: null,\n mapShapes: [],\n },\n modules: {\n entities: EntityStore,\n },\n getters: {\n base: state => {\n return state.base;\n },\n ruleset: state => {\n return state.ruleset;\n },\n actions: state => {\n return state.ruleset.actions;\n },\n rollLog: state => {\n return state.global.rollLog;\n },\n selectedTokenId: state => {\n return state.selectedTokenId;\n },\n },\n mutations: {\n selectedTokenUpdate(state, tokenId) {\n state.selectedTokenId = tokenId;\n },\n setMapShapes(state, shapes) {\n state.mapShapes = shapes;\n },\n },\n actions: {\n clear({ state }) {\n Vue.set(state, 'entities', {});\n Vue.set(state, 'global', { rollLog: [] });\n },\n setBase({ state }) {\n Vue.set(state.base, 'entities', _.cloneDeep(state.entities));\n Vue.set(state.base, 'global', _.cloneDeep(state.global));\n Vue.set(state.base, 'ruleset', _.cloneDeep(state.ruleset));\n },\n activateMap({ state }, map) {\n Vue.set(state, 'activeMap', map);\n },\n // TODO - Delete this\n applyDelta({ dispatch }, delta) {\n if (!Array.isArray(delta)) delta = [delta];\n\n delta.forEach(patch => {\n dispatch('patch', patch);\n });\n },\n\n // Patch is a list of JSON patch operations as described in: http://jsonpatch.com/\n // IMPORTANT POINT TO NOTE: Vue cannot detect property addition or deletion.\n // What needs to be done is check if an operation is anything else than a \"replace\"\n // And depending on that, handle the Vue reactivity stuff when applying the patch.\n patch({ state }, patch) {\n if (!Array.isArray(patch)) patch = [patch];\n if (patch.length == 0) return;\n\n // Dry run the JSONpatch to allow for aborting\n // If this throws an error, the patch is not applied\n jsonpatch.applyPatch(state, patch, true, false).pop().newDocument;\n\n // Execute the patch with appropriate vue operations when needed\n patch.forEach(change => {\n const followPath = path => {\n return path.reduce((acc, el) => {\n return acc[el];\n }, state);\n };\n\n const parsePath = pathString => {\n const path = pathString.split('/');\n path.shift(); // remove the first, empty element\n\n if (path[0] != 'entities' && path[0] != 'global')\n throw new Error('Attempted to touch protected property: ' + path[0]);\n\n // Handle JSONPatch syntactic sugar\n path.forEach((el, idx) => {\n switch (el) {\n case '-':\n path[idx] = followPath(path.slice(0, idx)).length;\n break;\n }\n });\n return path;\n };\n\n const path = parsePath(change.path);\n\n switch (change.op) {\n case 'replace':\n jsonpatch.applyPatch(state, [change]);\n break;\n case 'add': {\n let prop = path.pop();\n if (Array.isArray(followPath(path))) {\n followPath(path).splice(prop, 0, change.value); // Insert the value at the given index\n } else {\n Vue.set(followPath(path), prop, change.value);\n }\n break;\n }\n case 'remove': {\n let prop = path.pop();\n\n if (prop in state) throw new Error('Attempted to remove protected property: ' + prop);\n Vue.delete(followPath(path), prop);\n break;\n }\n case 'move': {\n const from = parsePath(change.from);\n const moved = _.cloneDeep(followPath(from));\n\n const fromProp = from.pop();\n\n if (fromProp in state) throw new Error('Attempted to remove protected property: ' + prop);\n Vue.delete(followPath(from), fromProp);\n\n let prop = path.pop();\n Vue.set(followPath(path), prop, moved);\n break;\n }\n case 'copy': {\n const from = parsePath(change.from);\n const copied = _.cloneDeep(followPath(from));\n\n let prop = path.pop();\n Vue.set(followPath(path), prop, copied);\n break;\n }\n case 'test':\n // This one is already handled by the dry run. It does not change anything to the state\n break;\n }\n });\n },\n },\n};\n\nexport default GameStateStore;\n","/**\n * Fields used behind the maps by the Collections APIs\n */\nexport class DataModelBase {\n _collection = '';\n _userid = '';\n _campaign = '';\n}\n","import { DataModelBase } from '@/core/collections/modelBase';\n\nexport default class Character extends DataModelBase {\n _character_version = 1;\n _id = undefined;\n name = '';\n description = '';\n image = '';\n borderMode = 'square';\n borderColor = '';\n tokenSize = 1;\n icon = '';\n private = false;\n macros = [];\n version = '0.0.0';\n\n /**\n * Constructor attempts to upgrade old versions of data objects stored in Collection\n *\n * @param {any} [null] jsonObject\n */\n constructor(jsonObject) {\n super();\n if (!jsonObject) return this; // Nothing to reconstitute - Use default values\n\n let upgraded = { ...jsonObject };\n switch (jsonObject._character_version) {\n case 0:\n // Change `upgraded` to map any old properties to new ones\n upgraded._character_version = 1;\n // falls through\n case 1:\n // Object upgraded to current version: no further changes needed\n // falls through\n default:\n upgraded._character_version = 1;\n Object.keys(this).forEach(key => (this[key] = upgraded[key]));\n }\n }\n}\n","// File that contains action data\nlet actions = {\n increment: {\n id: 'increment',\n description: 'Increment counter',\n action: '@counter = @counter + 1',\n },\n decrement: {\n id: 'decrement',\n description: 'Decrement counter',\n action: '@counter = @counter - 1',\n },\n attack: {\n id: 'attack',\n action: [\n 'bool hit = (1d20 + @origin.strBonus + @origin.prof) >= @target.ac',\n 'int damage = @origin.weapon.damage + @origin.strBonus if hit',\n '@target.hp = @target.hp - damage',\n ],\n },\n};\n\nexport default actions;\n","import Vue from 'vue';\nimport VueMatomo from 'vue-matomo';\nimport router from './router.js';\nimport store from './store.js';\nimport axios from 'axios';\n\nimport GameStateStore from '../store/GameStateStore';\nimport actions from '../core/ruleset/experiment/actions';\n\nimport { BootstrapVue, IconsPlugin, BootstrapVueIcons } from 'bootstrap-vue';\nimport 'bootstrap/dist/css/bootstrap.css';\nimport 'bootstrap-vue/dist/bootstrap-vue.css';\n\nimport VueChatScroll from 'vue-chat-scroll';\nimport VueMaterial from 'vue-material';\nimport 'vue-material/dist/vue-material.min.css';\nimport 'vue-material/dist/theme/default.css';\n\nimport Clipboard from 'v-clipboard';\nimport VTooltip from 'v-tooltip';\n\nimport VueFuse from 'vue-fuse';\n\nimport { library } from '@fortawesome/fontawesome-svg-core';\nimport { FontAwesomeIcon } from '@fortawesome/vue-fontawesome';\nimport { faKickstarterK } from '@fortawesome/free-brands-svg-icons';\nimport { faDiceD20 } from '@fortawesome/free-solid-svg-icons';\n\nVue.config.productionTip = false;\n\n// Install BootstrapVue\nVue.use(BootstrapVue);\nVue.use(BootstrapVueIcons);\n// Optionally install the BootstrapVue icon components plugin\nVue.use(IconsPlugin);\n\nVue.use(VueChatScroll);\nVue.use(VueMaterial);\n\nVue.use(Clipboard);\nVue.use(VTooltip);\n\nVue.use(VueFuse);\n\nimport '@/common/assets/main.scss';\nimport '@/common/assets/modal.scss';\nimport '@/common/assets/tooltip.scss';\nimport '@/common/assets/icons.css';\n\nimport '@/common/assets/scrollbar.css';\n\n// FIXME: find a better place to load in the ruleset than main.js\nconst ruleset = {\n actions: actions,\n};\nGameStateStore.state.ruleset = ruleset;\nVue.use(VueMatomo, {\n host: 'https://mythictable.matomo.cloud/',\n siteId: 1,\n router: router,\n enableLinkTracking: true,\n requireConsent: false,\n trackInitialView: true,\n trackerFileName: 'matomo',\n debug: true,\n});\n\nlibrary.add(faKickstarterK);\nlibrary.add(faDiceD20);\nVue.component('fa-icon', FontAwesomeIcon);\n\n// eslint-disable-next-line no-unused-vars\nnew Vue({\n el: '#app',\n store,\n router,\n render: h => h('router-view'),\n});\n\n// export { store };\n\n// Set up axios interceptor to add API token\n// TODO: Restrict this to only add the token if requesting from the original domain\n// (so we don't send our SECRET auth token to other websites accidentally)\naxios.interceptors.request.use(\n config => {\n if (!(config.hasOwnProperty('disableAuth') && config.disableAuth)) {\n config.headers['Authorization'] = `Bearer ${store.state.oidcStore.access_token}`;\n }\n return config;\n },\n error => {\n return Promise.reject(error);\n },\n);\n","const env = process.env;\n\nexport const oidcSettings = {\n authority: `${env.VUE_APP_AUTHORITY}/${env.VUE_APP_REALM}`,\n clientId: env.VUE_APP_AUTH_CLIENT_ID,\n redirect_uri: env.VUE_APP_BASE_URL + '/oidc',\n responseType: 'code',\n scope: env.VUE_APP_AUTHORITY_SCOPES,\n post_logout_redirect_uri: env.VUE_APP_BASE_URL,\n};\n","// Constants use for the path param of files queries\nexport const FILE_TYPES = {\n CHARACTER: 'character',\n MAP: 'map',\n CAMPAIGN: 'campaign',\n PROFILE: 'profile',\n};\n","import axios from 'axios';\nimport { FILE_TYPES } from './constants';\n\nexport { FILE_TYPES };\n\nexport async function addFile(files, fileType) {\n if (!Object.values(FILE_TYPES).includes(fileType)) {\n throw new Error('Invalid type of file to add.');\n } else if (files && files.length) {\n const data = new FormData();\n Array.from(files).forEach(file => {\n data.append('files', file);\n });\n try {\n return await axios.post(`/api/files?path=${fileType}`, data);\n } catch (err) {\n if (err.response) {\n if (err.response.status === 413) {\n throw new Error('File size is too large (should be 32MB or smaller)');\n }\n }\n throw err;\n }\n } else {\n throw new Error('No files provided');\n }\n}\nexport async function getFiles(fileType) {\n if (!Object.values(FILE_TYPES).includes(fileType)) {\n throw new Error(`Invalid type of file to query. May be one of ${Object.values(FILE_TYPES).join(', ')}`);\n } else {\n return axios.get(`/api/files?path=${fileType}`).then(result => {\n const { data } = result;\n if (Array.isArray(data)) {\n return data.map(image => {\n return {\n id: image.id,\n asset: {\n kind: 'image',\n src: image.url,\n },\n };\n });\n }\n return [];\n });\n }\n}\n\nexport async function addCampaign(files) {\n return addFile(files, FILE_TYPES.CAMPAIGN);\n}\n\nexport async function getCampaigns() {\n return getFiles(FILE_TYPES.CAMPAIGN);\n}\n\nexport async function addCharacter(files) {\n return addFile(files, FILE_TYPES.CHARACTER);\n}\n\nexport async function getCharacters() {\n return getFiles(FILE_TYPES.CHARACTER);\n}\n\nexport async function addMap(files) {\n return addFile(files, FILE_TYPES.MAP);\n}\n\nexport async function getMaps() {\n return getFiles(FILE_TYPES.MAP);\n}\n","import Character from '@/characters/models/model';\n\nexport default class Token extends Character {\n _token_version = 1;\n mapId = '';\n pos = {\n q: 0,\n r: 0,\n };\n backgroundColor = null;\n character = null;\n icon = null;\n hidden = false;\n\n /**\n * Constructor attempts to upgrade old versions of data objects stored in Collection\n *\n * @param {any} jsonObject\n */\n constructor(jsonObject) {\n super(jsonObject);\n if (!jsonObject) return this; // Nothing to reconstitute - Use default values\n\n // Character will upgrade its own fields; we'll just upgrade all of our fields.\n let upgraded = { ...jsonObject };\n switch (jsonObject._token_version) {\n case 0:\n // Change `upgraded` to map any old properties to new ones\n upgraded._token_version = 1;\n // falls through\n case 1:\n // Object upgraded to current version: no further changes needed\n // falls through\n default:\n upgraded._token_version = 1;\n Object.keys(this).forEach(key => (this[key] = upgraded[key]));\n }\n }\n}\n","import Vue from 'vue';\n\nclass Asset {\n static async loadAll(entities) {\n const results = [];\n for (const entity of Object.values(entities)) {\n const asset = entity.asset;\n if (!asset) continue;\n\n if (asset['@data']) {\n return Promise.resolve(entity);\n }\n results.push(Asset.update(asset));\n }\n\n return Promise.all(results);\n }\n\n static updateAll(assets) {\n const results = [];\n assets.forEach(asset => {\n results.push(Asset.update(asset));\n });\n return results;\n }\n\n static update(asset) {\n Vue.set(asset, '@data', null);\n if (asset.kind === 'image' && asset.src) {\n const image = new Image();\n const promise = new Promise((resolve, reject) => {\n image.addEventListener(\n 'load',\n () => {\n asset['@data'] = image;\n resolve();\n },\n { once: true },\n );\n image.addEventListener(\n 'error',\n ev => {\n // TODO: Better error handling\n reject(ev);\n },\n { once: true },\n );\n\n image.src = asset.src;\n });\n\n return promise;\n }\n }\n}\n\nexport { Asset as default };\n","export const COLLECTION_TYPES = {\n maps: 'maps',\n players: 'players',\n characters: 'characters',\n tokens: 'tokens',\n permissions: 'permissions',\n};\n","const AnalyticsStore = {\n namespaced: true,\n state: {},\n actions: {\n // eslint-disable-next-line no-empty-pattern\n pushEvent({}, { event }) {\n window._paq.push(['trackEvent', event.category, event.action, event.name, event.value]);\n },\n },\n};\n\nexport default AnalyticsStore;\n","import Vue from 'vue';\n\nconst AssetStore = {\n namespaced: true,\n state: {\n assets: {},\n },\n mutations: {\n add(state, url, image) {\n Vue.set(state, url, image);\n },\n },\n actions: {\n async load({ state, commit }, url) {\n if (state.assets.hasOwnProperty(url)) {\n return state.assets[url];\n }\n const image = await loadImage(url);\n commit('add', url, image);\n return image;\n },\n },\n};\n\nfunction loadImage(url) {\n return new Promise((resolve, reject) => {\n let image = new Image();\n image.onload = () => resolve(image);\n image.onerror = reject;\n image.src = url;\n });\n}\n\nexport default AssetStore;\n","import axios from 'axios';\nimport { addCampaign, getCampaigns } from '@/core/api/files/files';\n\nconst CampaignStore = {\n namespaced: true,\n state: {\n campaigns: [],\n activeCampaign: {},\n displayEditModal: false,\n isLoading: false,\n },\n mutations: {\n updateCampaigns(state, campaigns) {\n state.campaigns = [...campaigns];\n },\n updateActiveCampaign(state, campaign) {\n state.activeCampaign = campaign;\n },\n toggleDisplayEditModal(state) {\n state.displayEditModal = !state.displayEditModal;\n },\n },\n actions: {\n async addCampaign({ dispatch }, event) {\n let files;\n files = event && event.target && event.target.files;\n await addCampaign(files)\n .then(() => {\n dispatch('getCampaigns');\n })\n .catch(err => {\n console.error(err);\n });\n },\n async getCampaigns({ commit }) {\n await getCampaigns().then(result => {\n commit('updateCampaigns', result);\n });\n },\n async getActiveCampaign({ commit, dispatch }, campaignId) {\n axios\n .get(`/api/campaigns/${campaignId}`)\n .then(result => {\n commit('updateActiveCampaign', result.data);\n })\n .catch(error => {\n dispatch('errors/modal', error, { root: true });\n });\n },\n async submitImage({ state, dispatch, commit }, { file, campaign }) {\n state.isLoading = true;\n const data = new FormData();\n data.append('files', file);\n try {\n state.isLoading = true;\n const resp = await axios.post(`/api/files?path=${'campaign'}`, data, {\n headers: {\n 'Content-Type': 'multipart/form-data',\n },\n });\n if (resp) {\n campaign.imageUrl = resp.data.files[0].url;\n dispatch(\n 'analytics/pushEvent',\n {\n event: {\n category: 'Campaign',\n action: 'AddImage',\n name: campaign.imageUrl,\n value: campaign.id,\n },\n },\n { root: true },\n );\n commit('updateActiveCampaign', campaign);\n }\n } catch (error) {\n campaign.imageUrl = '';\n const preview = document.getElementById('banner-image');\n preview.style.display = 'none';\n file = '';\n if (error.response && error.response.status === 413) {\n dispatch('errors/modal', new Error('File size is too large (should be 32MB or smaller)'), {\n root: true,\n });\n } else {\n dispatch('errors/modal', error, { root: true });\n }\n }\n state.isLoading = false;\n return campaign.imageUrl ? file : '';\n },\n // First argument must be the store object, however for generic use we do not know what get request\n // will be used (all campaigns or the activeCampaign), and linting states no unused variables or\n // arguments or empty objects\n async createCampaign(_context, campaign) {\n _context;\n await axios.post('/api/campaigns', campaign);\n },\n async updateCampaign(_context, campaign) {\n _context;\n await axios.put(`/api/campaigns/${campaign.id}`, campaign);\n },\n async saveEdit(_context, campaign) {\n _context;\n let method = campaign.id ? 'put' : 'post';\n await axios[method]('/api/campaigns', campaign);\n },\n },\n getters: {\n campaigns: state => {\n return state.campaigns;\n },\n },\n};\n\nexport default CampaignStore;\n","import { COLLECTION_TYPES } from '@/core/collections/constants';\nimport * as jsonpatch from 'fast-json-patch';\nimport Character from '@/characters/models/model';\n\nexport const getters = {\n getRawCharacter: ({ rootGetters }) => id => {\n return rootGetters['collections/getItem'](COLLECTION_TYPES.characters, id);\n },\n getCharacter: ({ rootGetters }) => id => {\n return new Character(rootGetters['collections/getItem'](COLLECTION_TYPES.characters, id));\n },\n getCharacters: (state, getters, rootState, rootGetters) => {\n return Object.values(rootGetters['collections/getCollection'](COLLECTION_TYPES.characters)).map(\n character => new Character(character),\n );\n },\n};\n\nexport const actions = {\n async add({ dispatch }, character) {\n return await dispatch(\n 'collections/add',\n { collection: COLLECTION_TYPES.characters, item: character },\n { root: true },\n );\n },\n /**\n *\n * @param {Vuex.context} param0\n * @param {Character} param1\n */\n async remove({ dispatch }, { id }) {\n return await dispatch('collections/remove', { collection: COLLECTION_TYPES.characters, id }, { root: true });\n },\n /**\n *\n * @param {Vuex.context} context\n * @param {Character} editedCharacter\n */\n async update(context, editedCharacter) {\n const currentCharacter = getters.getRawCharacter(context)(editedCharacter._id);\n if (!currentCharacter) throw new Error(`Could not find character to update with id '${editedCharacter._id}'`);\n const patch = jsonpatch.compare(currentCharacter, new Character(editedCharacter));\n\n return await context.dispatch(\n 'collections/update',\n { collection: COLLECTION_TYPES.characters, id: editedCharacter._id, patch },\n { root: true },\n );\n },\n async load({ dispatch }) {\n return await dispatch('collections/load', { collection: COLLECTION_TYPES.characters }, { root: true });\n },\n\n openEditor({ state }, character) {\n state.characterToEdit = character;\n },\n closeEditor({ state }) {\n state.characterToEdit = null;\n },\n};\n\nconst CharacterStore = {\n namespaced: true,\n state: {\n characterToEdit: null,\n },\n getters,\n actions,\n};\n\nexport default CharacterStore;\n","import axios from 'axios';\n\nexport async function getByCampaign(collection, campaignId) {\n const results = await axios.get(`/api/collections/${collection}/campaign/${campaignId}`);\n return results.data;\n}\n","import Vue from 'vue';\nimport jsonpatch from 'fast-json-patch';\nimport { getByCampaign } from './api';\nimport { COLLECTION_TYPES } from './constants';\nimport Asset from '@/core/entity/Asset';\n\nfunction getCollection(state, collection) {\n if (state.hasOwnProperty(collection)) {\n return state[collection];\n }\n return [];\n}\n\nfunction getItem(state, collection, id) {\n const c = getCollection(state, collection);\n if (c.hasOwnProperty(id)) {\n return c[id];\n }\n return null;\n}\n\nasync function loadCollection(commit, rootState, collection) {\n const results = await getByCampaign(collection, rootState.live.sessionId);\n for (const i in results) {\n commit('add', { collection, item: results[i] });\n }\n return results;\n}\n\nconst CollectionStore = {\n namespaced: true,\n state: {},\n getters: {\n getItem: state => (collection, id) => {\n return getItem(state, collection, id);\n },\n getCollection: state => collection => {\n return getCollection(state, collection);\n },\n maps: state => () => {\n return getCollection(state, COLLECTION_TYPES.maps);\n },\n },\n mutations: {\n patch(state, { collection, id, patch: patches }) {\n const item = getItem(state, collection, id);\n\n // Setting the specific property to track MUST be done before the property exists to add reactivity.\n patches = patches.reduce((nonAddPatches, patch) => {\n if (patch.op === 'add') {\n const path = patch.path.split('/');\n path.shift();\n const addReactivityToThisProperty = path.pop();\n const existingItemPath = path.reduce((item, pathPoint) => item[pathPoint], item);\n Vue.set(existingItemPath, addReactivityToThisProperty, patch.value);\n } else {\n nonAddPatches.push(patch);\n }\n return nonAddPatches;\n }, []);\n\n jsonpatch.applyPatch(item, patches);\n },\n forceReactivityUpdate(state, { collection, item }) {\n if (!state.hasOwnProperty(collection)) {\n Vue.set(state, collection, {});\n }\n Vue.set(state[collection], item._id, item);\n },\n add(state, { collection, item }) {\n if (!state.hasOwnProperty(collection)) {\n Vue.set(state, collection, {});\n }\n Vue.set(state[collection], item._id, item);\n },\n remove(state, { collection, id }) {\n if (state.hasOwnProperty(collection)) {\n Vue.delete(state[collection], id);\n }\n },\n purge(state) {\n for (let collection in state) {\n Vue.delete(state, collection);\n }\n },\n },\n actions: {\n async update({ dispatch }, { collection, id, patch }) {\n return await dispatch('live/updateCampaignObject', { collection, id, patch }, { root: true });\n },\n async add({ dispatch }, { collection, item }) {\n return await dispatch('live/addCampaignObject', { collection, item }, { root: true });\n },\n async remove({ dispatch }, { collection, id }) {\n return await dispatch('live/removeCampaignObject', { collection, id }, { root: true });\n },\n async load({ commit, rootState }, { collection }) {\n return await loadCollection(commit, rootState, collection);\n },\n\n async onAdded({ commit, dispatch }, { collection, item }) {\n commit('add', { collection, item });\n if (collection == COLLECTION_TYPES.maps) {\n await Asset.updateAll(item.stage.elements.map(e => e.asset));\n const player = await dispatch('players/findPlayerFromProfileId', item._userid, { root: true });\n dispatch('players/changePlayerMap', { mapId: item._id, player }, { root: true });\n }\n },\n async onRemoved({ commit }, { collection, id }) {\n commit('remove', { collection, id });\n },\n async onUpdated({ commit, state }, parameters) {\n commit('patch', parameters);\n if (parameters.collection == COLLECTION_TYPES.maps) {\n const item = getItem(state, parameters.collection, parameters.id);\n await Asset.updateAll(item.stage.elements.map(e => e.asset));\n }\n },\n async onLoad({ commit }, { collection, items }) {\n for (const i in items) {\n commit('add', { collection, item: items[i] });\n }\n },\n\n async loadMaps({ commit, rootState }) {\n return await loadCollection(commit, rootState, COLLECTION_TYPES.maps);\n },\n async reload({ state, commit, rootState }) {\n let collections = Object.keys(state);\n commit('purge');\n for (const i in collections) {\n await loadCollection(commit, rootState, collections[i]);\n }\n },\n },\n};\n\nexport default CollectionStore;\n","const DrawingStore = {\n namespaced: true,\n state: {\n active: false,\n receivedLines: {},\n drawerLastActive: {},\n drawingColors: ['#d8d8f6', '#21a0a0', '#1ba73e', '#8b2635', '#c02d0c', '#f18701', '#002e3d'],\n activeColor: '#d8d8f6',\n brushSizes: [5, 10, 15],\n activeBrushSize: 5,\n brushRenderSizeModifier: 5,\n },\n mutations: {\n randomActiveColor(state) {\n state.activeColor = state.drawingColors[Math.floor(Math.random() * state.drawingColors.length)];\n },\n },\n actions: {\n toggle({ state }) {\n state.active = !state.active;\n },\n updateColor({ state }, color) {\n state.activeColor = color;\n },\n updateBrushSize({ state }, size) {\n state.activeBrushSize = parseInt(size) - state.brushRenderSizeModifier;\n },\n drawLine({ state, rootState }, { mapId, line }) {\n if (state.receivedLines[line.attrs.name] === undefined) {\n state.receivedLines[line.attrs.name] = [];\n }\n state.receivedLines = {\n ...state.receivedLines,\n [line.attrs.name]: [...state.receivedLines[line.attrs.name], line],\n };\n rootState.live.director.drawLine(mapId, line);\n },\n lineDrawReceived({ state, rootState }, { line }) {\n // This artist was active\n state.drawerLastActive[line.attrs.name] = Date.now();\n // Make sure it's not one of ours we've already saved\n if (rootState.profile.me.id !== line.attrs.name) {\n if (state.receivedLines[line.attrs.name] === undefined) {\n state.receivedLines[line.attrs.name] = [];\n }\n state.receivedLines = {\n ...state.receivedLines,\n [line.attrs.name]: [...state.receivedLines[line.attrs.name], line],\n };\n }\n },\n purgeUsersLines({ state }, { userId }) {\n let receivedLines = { ...state.receivedLines };\n delete receivedLines[userId];\n state.receivedLines = receivedLines;\n },\n fadeUsersLines({ state }, { userId }) {\n let drawerLastActive = { ...state.drawerLastActive };\n delete drawerLastActive[userId];\n state.drawerLastActive = drawerLastActive;\n },\n clearLines({ state }) {\n state.receivedLines = [];\n },\n },\n};\n\nexport default DrawingStore;\n","const DropperStore = {\n namespaced: true,\n state: {\n draggedItem: null,\n },\n mutations: {\n setDragged(state, item) {\n state.draggedItem = item;\n },\n },\n actions: {\n startDrag(context, item) {\n context.commit('setDragged', item);\n },\n reset({ commit }) {\n commit('setDragged', null);\n },\n },\n getters: {\n draggedItem: state => {\n return state.draggedItem;\n },\n ready: state => {\n return state.draggedItem != null;\n },\n },\n};\n\nexport default DropperStore;\n","const EditStore = {\n namespaced: true,\n state: {\n editMap: false,\n hiddenSidebar: false,\n },\n mutations: {\n setEditMap(state, value) {\n state.editMap = value;\n },\n setHiddenSidebar(state, value) {\n state.hiddenSidebar = value;\n },\n toggleHiddenSidebar(state) {\n state.hiddenSidebar = !state.hiddenSidebar;\n },\n },\n};\n\nexport default EditStore;\n","const ErrorStore = {\n namespaced: true,\n state: {\n modalMessage: '',\n closeCallback: null,\n },\n actions: {\n close({ state }) {\n state.modalMessage = '';\n if (state.closeCallback) {\n state.closeCallback();\n }\n },\n modal({ state }, { message, closeCallback = () => {} }) {\n state.modalMessage = message;\n state.closeCallback = closeCallback;\n },\n },\n};\n\nexport default ErrorStore;\n","import _ from 'lodash';\n\nconst permissionsVerification = {\n namespaced: true,\n getters: {\n hasPermissionFor: (state, getters, rootState, rootGetters) => (specifiedPermission, id = '') => {\n const gameMasterControlActive = rootGetters['gmPermissions/permissionSettings'][specifiedPermission];\n if (gameMasterControlActive) {\n return gmPermissionActiveFor[specifiedPermission]({ getters, id });\n } else {\n return assumedPermissionFor[specifiedPermission]({ getters, id });\n }\n },\n getGameMasterStatus: (state, getters, rootState, rootGetters) => {\n return rootGetters['players/isGameMaster'](getters.currentUserId);\n },\n currentUserId(state, getters, rootState) {\n return rootState.profile.me.id;\n },\n isCampaignOwner(state, getters, rootState) {\n return getters.currentUserId === rootState.campaigns.activeCampaign.owner;\n },\n isCampaignOwnerById: (state, getters, rootState) => userId => {\n return rootState.campaigns.activeCampaign.owner === userId;\n },\n isItemOwner: (state, getters) => itemUserId => {\n return getters.currentUserId === itemUserId;\n },\n isActiveMapOwner(state, getters, rootState) {\n if (!_.isEmpty(rootState.gamestate.activeMap)) {\n return getters.currentUserId === rootState.gamestate.activeMap._userid;\n } else {\n return false;\n }\n },\n gmOrOwner: (state, getters) => itemUserId => {\n return getters.getGameMasterStatus || getters.isItemOwner(itemUserId);\n },\n },\n};\n\nconst gmPermissionActiveFor = {\n gridControl: ({ getters }) => getters.getGameMasterStatus,\n fogControl: ({ getters }) => getters.getGameMasterStatus,\n editAnyMap: ({ getters, id }) => getters.gmOrOwner(id),\n hiddenTokens: ({ getters, id }) => getters.gmOrOwner(id),\n moveAll: ({ getters }) => getters.getGameMasterStatus,\n};\n\nconst assumedPermissionFor = {\n gridControl: ({ getters }) => getters.isActiveMapOwner,\n fogControl: ({ getters }) => getters.isActiveMapOwner,\n editAnyMap: ({ getters, id }) => getters.isItemOwner(id),\n hiddenTokens: ({ getters, id }) => getters.isItemOwner(id),\n moveAll: ({ getters, id }) => getters.isItemOwner(id),\n};\n\nexport default permissionsVerification;\n","import _ from 'lodash';\nimport * as jsonpatch from 'fast-json-patch';\n\nimport { COLLECTION_TYPES } from '@/core/collections/constants';\n\nexport const defaultPermissions = {\n deleteToken: true,\n editAnyMap: true,\n gridControl: false,\n fogControl: false,\n hiddenTokens: false,\n moveAll: false,\n};\n\nfunction setLocalPermissions(permissions) {\n const allPermissions = _.cloneDeep(defaultPermissions);\n Object.assign(allPermissions, permissions);\n return allPermissions;\n}\n\nconst gmPermissionsStore = {\n namespaced: true,\n state: {\n displayGmControlsModal: false,\n },\n getters: {\n permissions(state, getters, rootState, rootGetters) {\n return rootGetters['collections/getCollection'](COLLECTION_TYPES.permissions);\n },\n permissionsKey(state, getters) {\n const onlyPermissionsItemKey = Object.keys(getters.permissions)[0];\n return onlyPermissionsItemKey;\n },\n permissionSettings(state, getters) {\n const { permissions, permissionsKey } = getters;\n if (!_.isEmpty(permissions)) {\n return setLocalPermissions(permissions[permissionsKey].settings);\n } else {\n return defaultPermissions;\n }\n },\n },\n mutations: {\n toggleDisplayGmControlsModal(state) {\n state.displayGmControlsModal = !state.displayGmControlsModal;\n },\n },\n actions: {\n async setGmPermissionSetting({ dispatch, getters }, toggledPermission) {\n if (!_.isEmpty(getters.permissions)) {\n dispatch('permissionsExist', toggledPermission);\n } else {\n dispatch('permissionsDoNotExist', toggledPermission);\n }\n },\n async permissionsExist({ dispatch, getters }, permissionName) {\n const patch = await dispatch('createUpdatePatch', permissionName);\n if (patch.length > 0) {\n dispatch(\n 'collections/update',\n {\n collection: COLLECTION_TYPES.permissions,\n id: getters.permissionsKey,\n patch,\n },\n { root: true },\n );\n }\n },\n async permissionsDoNotExist({ dispatch, getters }, permissionName) {\n const setting = { [permissionName]: !getters.permissionSettings[permissionName] };\n const permissions = { settings: setting };\n dispatch(\n 'collections/add',\n { collection: COLLECTION_TYPES.permissions, item: permissions },\n { root: true },\n );\n },\n createComparableCollections({ getters }) {\n const currentCollection = getters.permissions[getters.permissionsKey];\n const editableCollection = _.cloneDeep(currentCollection);\n return { editableCollection, currentCollection };\n },\n async createUpdatePatch({ dispatch, getters }, permissionName) {\n const { editableCollection, currentCollection } = await dispatch('createComparableCollections');\n Object.assign(editableCollection.settings, {\n [permissionName]: !getters.permissionSettings[permissionName],\n });\n return jsonpatch.compare(currentCollection, editableCollection);\n },\n async loadGmPermissions({ dispatch }) {\n return await dispatch('collections/load', { collection: COLLECTION_TYPES.permissions }, { root: true });\n },\n },\n};\n\nexport default gmPermissionsStore;\n","const state = {\n pressedKey: '',\n};\n\nconst mutations = {\n keyPressed(state, key) {\n state.pressedKey = key;\n },\n};\n\nlet dispatchTrackKeys;\nlet dispatchFocusActive;\nlet dispatchFocusInactive;\n\nconst actions = {\n triggerComplete({ commit }) {\n commit('keyPressed', '');\n },\n trackKeys({ commit }, event) {\n commit('keyPressed', event.key);\n },\n focusActive() {\n document.removeEventListener('keyup', dispatchTrackKeys);\n },\n focusInactive() {\n document.addEventListener('keyup', dispatchTrackKeys);\n },\n initiateFunctions({ dispatch }) {\n dispatchFocusActive = event => dispatch('focusActive', event);\n dispatchFocusInactive = event => dispatch('focusInactive', event);\n dispatchTrackKeys = event => dispatch('trackKeys', event);\n },\n addTracking({ dispatch }) {\n dispatch('initiateFunctions');\n document.addEventListener('focusin', dispatchFocusActive);\n document.addEventListener('focusout', dispatchFocusInactive);\n document.addEventListener('keyup', dispatchTrackKeys);\n },\n removeTracking() {\n document.removeEventListener('focusin', dispatchFocusActive);\n document.removeEventListener('focusout', dispatchFocusInactive);\n document.removeEventListener('keyup', dispatchTrackKeys);\n },\n};\n\nconst KeyboardStore = {\n namespaced: true,\n state,\n mutations,\n actions,\n};\n\nexport default KeyboardStore;\n","const GridStore = {\n namespaced: true,\n state: {\n active: false,\n },\n actions: {\n toggle({ state }) {\n state.active = !state.active;\n },\n reset({ state }) {\n state.active = false;\n },\n },\n};\n\nexport default GridStore;\n","const FogStore = {\n namespaced: true,\n state: {\n active: false,\n obscure: true,\n },\n mutations: {\n toggleActive(state) {\n state.active = !state.active;\n },\n setActive(state, value) {\n state.active = value;\n },\n toggleObscure(state) {\n state.obscure = !state.obscure;\n },\n setObscure(state, value) {\n state.obscure = value;\n },\n },\n};\n\nexport default FogStore;\n","const characters = [\n {\n id: 'marc',\n asset: { kind: 'image', src: '/static/assets/marc.png' },\n },\n {\n id: 'sarah',\n asset: { kind: 'image', src: '/static/assets/sarah.png' },\n },\n {\n id: 'mirko',\n asset: { kind: 'image', src: '/static/assets/mirko.png' },\n },\n {\n id: 'jon',\n asset: { kind: 'image', src: '/static/assets/jon.png' },\n },\n {\n id: 'Redcap',\n asset: { kind: 'image', src: '/static/assets/Redcap.png' },\n },\n {\n id: 'Wolf',\n asset: { kind: 'image', src: '/static/assets/Wolf.png' },\n },\n];\n\nexport { characters };\n","import { characters as defaultCharacters } from './defaultCharacterData';\nimport { addCharacter, getCharacters, addMap, getMaps } from '@/core/api/files/files.js';\n\nconst LibraryStore = {\n namespaced: true,\n state: {\n characters: defaultCharacters,\n maps: [],\n },\n mutations: {\n updateCharacters(state, characters) {\n state.characters = [...defaultCharacters, ...characters];\n },\n updateMaps(state, maps) {\n state.maps = maps;\n },\n },\n actions: {\n async addCharacter(_, event) {\n let files;\n files = event && event.target && event.target.files;\n return await addCharacter(files);\n },\n async getCharacters({ commit }) {\n commit('updateCharacters', await getCharacters());\n },\n // TODO - Consider refactoring away this duplication in addMap and getMaps\n async addMap({ dispatch }, event) {\n let files;\n files = event && event.target && event.target.files;\n await addMap(files)\n .then(() => {\n dispatch('getMaps');\n })\n .catch(err => {\n console.error(err);\n });\n },\n async getMaps({ commit }) {\n await getMaps().then(result => {\n commit('updateMaps', result);\n });\n },\n },\n getters: {\n characters: state => {\n return state.characters;\n },\n },\n};\n\nexport default LibraryStore;\n","const LivePlayState = {\n namespaced: true,\n state: {\n connected: false,\n sessionId: null,\n director: null,\n },\n mutations: {\n setDirector(state, director) {\n state.director = director;\n },\n setSessionId(state, sessionId) {\n state.sessionId = sessionId;\n },\n },\n actions: {\n addCharacter({ state }, { image, pos, mapId }) {\n state.director.addCharacter(image, pos, mapId);\n },\n removeCharacter({ state }, { characterId }) {\n state.director.removeCharacter(characterId);\n },\n async updateCampaignObject({ state }, { collection, id, patch }) {\n await state.director.updateCampaignObject(collection, id, patch);\n },\n async addCampaignObject({ state }, { collection, item }) {\n await state.director.addCampaignObject(collection, item);\n },\n async removeCampaignObject({ state }, { collection, id }) {\n await state.director.removeCampaignObject(collection, id);\n },\n },\n};\n\nexport default LivePlayState;\n","import _ from 'lodash';\nimport * as jsonPatch from 'fast-json-patch';\n\nimport { COLLECTION_TYPES } from '@/core/collections/constants';\n\nexport const getters = {\n getPlayer: (state, getters, rootState, rootGetters) => id => {\n return rootGetters['collections/getItem'](COLLECTION_TYPES.players, id);\n },\n getPlayers: (state, getters, rootState, rootGetters) => {\n return rootGetters['collections/getCollection'](COLLECTION_TYPES.players);\n },\n gameMasters(state, getters, rootState) {\n const players = getters.getPlayers;\n const gameMasters = createGmGroup(players);\n if (!_.isEmpty(gameMasters)) {\n return gameMasters;\n } else {\n const ownerId = rootState.campaigns.activeCampaign.owner;\n return { [ownerId]: ownerId };\n }\n },\n nonGameMasters(state, getters) {\n const players = getters.getPlayers;\n const nonGameMasters = createNonGmGroup(players, getters.gameMasters);\n return nonGameMasters;\n },\n isGameMaster: (state, getters) => userId => {\n return userId in getters.gameMasters;\n },\n};\n\nexport const actions = {\n async add({ dispatch }, { player }) {\n return await dispatch(\n 'collections/add',\n { collection: COLLECTION_TYPES.players, item: player },\n { root: true },\n );\n },\n async update({ dispatch }, { id, patch }) {\n return await dispatch(\n 'collections/update',\n { collection: COLLECTION_TYPES.players, id, patch },\n { root: true },\n );\n },\n async remove({ dispatch }, playerId) {\n return await dispatch(\n 'collections/remove',\n { collection: COLLECTION_TYPES.players, id: playerId },\n { root: true },\n );\n },\n async load({ dispatch }) {\n return await dispatch('collections/load', { collection: COLLECTION_TYPES.players }, { root: true });\n },\n async setGameMasterStatus({ dispatch }, { profileId, isGameMaster }) {\n const player = await dispatch('findPlayerFromProfileId', profileId);\n const editablePlayer = _.cloneDeep(player);\n editablePlayer.isGameMaster = isGameMaster;\n const patch = jsonPatch.compare(player, editablePlayer);\n if (patch.length > 0) {\n await dispatch('update', { id: player._id, patch });\n }\n },\n async changePlayerMap({ dispatch }, { mapId, player }) {\n await dispatch('setCurrentMapForPlayer', { mapId, player });\n const argumentFiller = {};\n dispatch('drawing/clearLines', argumentFiller, { root: true });\n },\n async setCurrentMapForPlayer({ dispatch }, { mapId, player }) {\n const modifiedPlayer = _.cloneDeep(player);\n modifiedPlayer.mapId = mapId;\n const patch = jsonPatch.compare(player, modifiedPlayer);\n if (patch.length > 0) {\n await dispatch('update', { id: player._id, patch });\n }\n },\n findPlayerFromProfileId({ getters }, profileId) {\n const players = getters.getPlayers;\n return _.find(players, player => player.userId === profileId);\n },\n};\n\nfunction createGmGroup(players) {\n return _.reduce(\n players,\n (gameMasters, player) => {\n if (player.isGameMaster) {\n gameMasters[player.userId] = player.userId;\n }\n return gameMasters;\n },\n {},\n );\n}\n\nfunction createNonGmGroup(players, assumedGameMasters) {\n return _.reduce(\n players,\n (nonGameMasters, player) => {\n if (!player.isGameMaster && !assumedGameMasters[player.userId]) {\n nonGameMasters[player.userId] = player.userId;\n }\n return nonGameMasters;\n },\n {},\n );\n}\n\nconst PlayerStore = {\n namespaced: true,\n getters,\n actions,\n};\n\nexport default PlayerStore;\n","import { COLLECTION_TYPES } from '@/core/collections/constants';\nimport * as jsonpatch from 'fast-json-patch';\nimport Token from './model';\n\nexport const getters = {\n getRawToken: (state, getters, rootState, rootGetters) => id => {\n return rootGetters['collections/getItem'](COLLECTION_TYPES.tokens, id);\n },\n getToken: (state, getters, rootState, rootGetters) => id => {\n return new Token(rootGetters['collections/getItem'](COLLECTION_TYPES.tokens, id));\n },\n getTokens: (state, getters, rootState, rootGetters) => {\n return Object.values(rootGetters['collections/getCollection'](COLLECTION_TYPES.tokens)).map(\n token => new Token(token),\n );\n },\n getTokensByMapId: (state, getters, rootState, rootGetters) => mapId => {\n return Object.values(rootGetters['collections/getCollection'](COLLECTION_TYPES.tokens))\n .map(token => new Token(token))\n .filter(token => token.mapId === mapId);\n },\n};\n\nexport const mutations = {\n updateSelectedToken(state, token) {\n state.selectedToken = token;\n },\n};\n\nexport const actions = {\n async spawn({ dispatch }, token) {\n return await dispatch(\n 'collections/add',\n { collection: COLLECTION_TYPES.tokens, item: new Token(token) },\n { root: true },\n );\n },\n /**\n *\n * @param {Vuex.context} param0\n * @param {Token} param1\n */\n async remove({ dispatch }, { id }) {\n if (id) {\n return await dispatch('collections/remove', { collection: COLLECTION_TYPES.tokens, id }, { root: true });\n }\n },\n /**\n *\n * @param {Vuex.context} context\n * @param {Token} editedToken\n */\n\n async update({ getters, dispatch }, editedToken) {\n const currentToken = getters.getRawToken(editedToken._id);\n if (!currentToken) throw new Error(`Could not find Token to update with id '${editedToken._id}'`);\n\n // Position is changed by moveToken, not update\n const changes = {\n ...editedToken,\n pos: currentToken.pos,\n };\n const patch = jsonpatch.compare(currentToken, new Token(changes));\n\n return await dispatch(\n 'collections/update',\n { collection: COLLECTION_TYPES.tokens, id: editedToken._id, patch },\n { root: true },\n );\n },\n /**\n *\n * @param {Vuex.context} context\n * @param {Token} movedToken\n */\n async moveToken(context, movedToken) {\n const currentToken = new Token(\n context.rootGetters['collections/getItem'](COLLECTION_TYPES.tokens, movedToken._id),\n );\n if (!currentToken) throw new Error(`Could not find Token to update with id '${movedToken.id}'`);\n const patch = jsonpatch.compare({ pos: currentToken.pos }, { pos: movedToken.pos });\n\n if (patch.length) {\n return await context.dispatch(\n 'collections/update',\n { collection: COLLECTION_TYPES.tokens, id: movedToken._id, patch },\n { root: true },\n );\n }\n },\n async load({ dispatch }) {\n return await dispatch('collections/load', { collection: COLLECTION_TYPES.tokens }, { root: true });\n },\n};\n\nconst TokenStore = {\n namespaced: true,\n state: {\n selectedToken: {},\n },\n getters,\n mutations,\n actions,\n};\n\nexport default TokenStore;\n","import axios from 'axios';\n\nexport async function get(collection) {\n const results = await axios.get(`/api/collections/${collection}`);\n return results.data;\n}\n\nexport async function post(collection, item) {\n const results = await axios.post(`/api/collections/${collection}`, item);\n return results.data;\n}\n\nexport async function put(collection, id, patch) {\n const results = await axios.put(`/api/collections/${collection}/id/${id}`, patch);\n return results.data;\n}\n","import Vue from 'vue';\nimport jsonpatch from 'fast-json-patch';\nimport { get, post, put } from './api';\n\nfunction getCollection(state, collection) {\n if (state.hasOwnProperty(collection)) {\n return state[collection];\n }\n return [];\n}\n\nfunction getItem(state, collection, id) {\n const c = getCollection(state, collection);\n if (c.hasOwnProperty(id)) {\n return c[id];\n }\n return null;\n}\n\nconst UserCollectionStore = {\n namespaced: true,\n state: {},\n getters: {\n getItem: state => (collection, id) => {\n return getItem(state, collection, id);\n },\n getCollection: state => collection => {\n return getCollection(state, collection);\n },\n },\n mutations: {\n patch(state, { collection, id, patch }) {\n const item = getItem(state, collection, id);\n jsonpatch.applyPatch(item, patch);\n if (patch.filter(p => p.op == 'add')) {\n Vue.delete(state[collection], id);\n Vue.set(state[collection], id, item);\n }\n },\n add(state, { collection, item }) {\n if (!state.hasOwnProperty(collection)) {\n Vue.set(state, collection, {});\n }\n Vue.set(state[collection], item._id, item);\n },\n remove(state, { collection, id }) {\n if (state.hasOwnProperty(collection)) {\n Vue.delete(state[collection], id);\n }\n },\n },\n actions: {\n async update({ commit }, { collection, id, patch }) {\n const results = await put(collection, id, patch);\n commit('patch', { collection, id, patch });\n return results;\n },\n async add({ commit }, { collection, item }) {\n const results = await post(collection, item);\n commit('add', { collection, item });\n return results;\n },\n async load({ commit }, { collection }) {\n const results = await get(collection);\n for (const i in results) {\n commit('add', { collection, item: results[i] });\n }\n return results;\n },\n },\n};\n\nexport default UserCollectionStore;\n","import axios from 'axios';\n\nasync function me() {\n const results = await axios.get(`/api/profiles/me`);\n return results.data;\n}\n\nasync function update(profile) {\n const results = await axios.put(`/api/profiles`, profile);\n return results.data;\n}\n\nasync function get(id) {\n const results = await axios.get(`/api/profiles/${id}`);\n return results.data;\n}\n\nexport default { me, update, get };\n","const state = {\n windowSize: { width: 100, height: 100 },\n displayedModals: [],\n};\n\nconst getters = {\n isDisplayingModal(state) {\n return state.displayedModals.length > 0;\n },\n};\n\nconst mutations = {\n updateWindowSize(state, windowSize) {\n state.windowSize = windowSize;\n },\n pushDisplayedModal(state, modalId) {\n state.displayedModals.push(modalId);\n },\n popDisplayedModal(state, modalId) {\n if (!state.displayedModals.includes(modalId)) {\n console.warn(`popDisplayedModal() called with unknown modal ID ${modalId}`);\n return;\n }\n\n const modalIndex = state.displayedModals.indexOf(modalId);\n state.displayedModals.splice(modalIndex, 1);\n },\n};\n\nlet trackWindowResize;\n\nconst actions = {\n windowResize({ commit }) {\n commit('updateWindowSize', { width: window.innerWidth, height: window.innerHeight });\n },\n initiateFunctions({ dispatch }) {\n dispatch('windowResize');\n trackWindowResize = () => dispatch('windowResize');\n },\n addTracking({ dispatch }) {\n dispatch('initiateFunctions');\n window.addEventListener('resize', trackWindowResize);\n },\n removeTracking() {\n window.removeEventListener('resize', trackWindowResize);\n },\n};\n\nconst WindowStore = {\n namespaced: true,\n state,\n getters,\n mutations,\n actions,\n};\n\nexport default WindowStore;\n","import Vue from 'vue';\nimport ProfileApi from '@/profile/api';\nimport { addFile, FILE_TYPES } from '@/core/api/files/files.js';\n\nconst ProfileStore = {\n namespaced: true,\n state: {\n me: {},\n showEditor: false,\n profiles: {},\n profileLoadPromises: {},\n },\n getters: {\n getImage: state => id => {\n if (id == state.me.id) {\n return state.me.imageUrl;\n } else if (state.profiles.hasOwnProperty(id)) {\n return state.profiles[id].imageUrl;\n }\n return '/static/icons/layout/mythic_wolf.svg';\n },\n getProfile: state => id => {\n if (id == state.me.id) {\n return state.me;\n } else if (state.profiles.hasOwnProperty(id)) {\n return state.profiles[id];\n }\n return null;\n },\n showSplash: state => {\n return state.me && state.me.hasSeenFPSplash == false;\n },\n getGroups: state => id => {\n if (id == state.me.id) {\n return state.me.groups;\n } else if (state.profiles.hasOwnProperty(id)) {\n return state.profiles[id].groups;\n }\n },\n },\n mutations: {\n me(state, profile) {\n Vue.set(state, 'me', profile);\n },\n updateImage(state, image) {\n Vue.set(state.me, 'imageUrl', image);\n },\n profile(state, profile) {\n Vue.set(state.profiles, profile.id, profile);\n },\n },\n actions: {\n async me({ commit }) {\n const me = await ProfileApi.me();\n commit('me', me);\n return me;\n },\n edit({ state }, show) {\n state.showEditor = show;\n },\n async uploadImage({ commit }, event) {\n let files;\n files = event && event.target && event.target.files;\n const results = await addFile(files, FILE_TYPES.PROFILE);\n console.log(JSON.stringify(results.data));\n if (results.data.count > 0) {\n commit('updateImage', results.data.files[0].url);\n }\n },\n async update({ commit }, profile) {\n const me = await ProfileApi.update(profile);\n commit('me', me);\n return me;\n },\n async load({ commit, state }, id) {\n if (state.profileLoadPromises.hasOwnProperty(id)) {\n return await state.profileLoadPromises[id];\n }\n state.profileLoadPromises[id] = ProfileApi.get(id);\n const profile = await state.profileLoadPromises[id];\n delete state.profileLoadPromises[id];\n commit('profile', profile);\n return profile;\n },\n async loadMultiple({ dispatch }, ids) {\n const profiles = ids.map(id => dispatch('load', id));\n return profiles;\n },\n },\n};\n\nexport default ProfileStore;\n","import AnalyticsStore from '@/core/analytics/store';\nimport AssetStore from '@/core/assets/AssetStore';\nimport CampaignsStore from '@/campaigns/store.js';\nimport CharacterStore from '@/characters/store';\nimport CollectionStore from '@/core/collections/store';\nimport DrawingStore from '@/core/drawing/store';\nimport DropperStore from '@/core/dropper/store/DropperStore';\nimport EditStore from '@/store/EditStore.js';\nimport ErrorStore from '@/core/errors/store';\nimport HasPermissionStore from '@/core/permissions/gm/hasPermissionFor';\nimport GameStateStore from '@/store/GameStateStore';\nimport GmPermissionsStore from '@/core/permissions/gm/store';\nimport GridStore from '@/core/grid/store';\nimport FogStore from '@/core/fog/store';\nimport KeyboardStore from '@/core/events/keyboard/store';\nimport LibraryStore from '@/core/library/store/LibraryStore';\nimport LivePlayState from '@/core/live/LivePlayState';\nimport PlayerStore from '@/core/collections/players/store';\nimport TokenStore from '@/core/collections/tokens/store';\nimport UserCollectionStore from '@/core/collections/user/UserCollectionStore';\nimport ProfileStore from '@/profile/store';\nimport WindowStore from '@/core/events/window/store';\nimport Vue from 'vue';\nimport Vuex from 'vuex';\nimport VueUnleash from '@mythicteam/vue-unleash';\nimport { oidcSettings } from './oidc';\nimport { vuexOidcCreateStoreModule } from 'vuex-oidc';\n\nVue.use(Vuex);\n\nconst store = new Vuex.Store({\n modules: {\n live: LivePlayState,\n gamestate: GameStateStore,\n oidcStore: vuexOidcCreateStoreModule(\n oidcSettings,\n {\n dispatchEventsOnWindow: true,\n },\n {\n // remove in prod\n userLoaded: user => {\n console.log('OIDC user is loaded:', user);\n window._paq.push(['setUserId', user.profile.email]);\n },\n userUnloaded: () => console.log('OIDC user is unloaded'),\n accessTokenExpiring: () => console.log('Access token will expire'),\n accessTokenExpired: () => console.log('Access token did expire'),\n silentRenewError: () => console.log('OIDC user is unloaded'),\n userSignedOut: () => console.log('OIDC user is signed out'),\n oidcError: payload => console.log(`An error occured at ${payload.context}:`, payload.error),\n },\n ),\n assets: AssetStore,\n dropper: DropperStore,\n library: LibraryStore,\n collections: CollectionStore,\n userCollections: UserCollectionStore,\n campaigns: CampaignsStore,\n players: PlayerStore,\n characters: CharacterStore,\n tokens: TokenStore,\n drawing: DrawingStore,\n grid: GridStore,\n fog: FogStore,\n gmPermissions: GmPermissionsStore,\n hasPermission: HasPermissionStore,\n profile: ProfileStore,\n keyboard: KeyboardStore,\n window: WindowStore,\n analytics: AnalyticsStore,\n errors: ErrorStore,\n editingModes: EditStore,\n },\n});\n\nVue.use(VueUnleash, {\n appName: process.env.VUE_APP_FEATURE_FLAG_NAME,\n host: 'https://gitlab.com/api/v4/feature_flags/unleash/14052249',\n instanceId: 'NZMy_McbTgHfknzonaEj',\n store,\n provider: 'gitlab',\n});\n\nexport default store;\n","import Vue from 'vue';\nimport VueRouter from 'vue-router';\nimport store from './store.js';\nimport { vuexOidcCreateRouterMiddleware } from 'vuex-oidc';\nimport { oidcSettings } from './oidc.js';\n\nVue.use(VueRouter);\n\nconst routes = [\n {\n path: '/play/:sessionId/:mapId',\n name: 'live-play',\n component: () => import('@/table/components/LivePlay'),\n props: true,\n },\n {\n path: '/oidc',\n name: 'oidcCallback',\n component: () => import('@/app/components/OidcCallback.vue'),\n },\n {\n path: '/',\n name: 'layout',\n component: () => import('@/campaigns/components/Manager'),\n children: [\n {\n path: 'invite/:id',\n component: () => import('@/campaigns/components/CampaignInvitation'),\n name: 'campaign-invite',\n },\n {\n path: 'edit/:id?',\n component: () => import('@/campaigns/components/CampaignEditPage'),\n name: 'campaign-edit',\n alias: 'create',\n },\n {\n path: '*',\n component: () => import('@/campaigns/components/CampaignList'),\n name: 'campaign-list',\n },\n ],\n },\n {\n path: '/ext/auth/profile',\n name: 'profile',\n redirect: () => {\n window.location.href = `${oidcSettings.authority}/account?referrer=${oidcSettings.clientId}&referrer_uri=${window.location.href}`;\n return '/redirecting';\n },\n },\n];\n\nexport const newTabRoutes = {\n campaigns: function() {\n let newTabAddress = router.resolve({ path: '/campaign-list' });\n window.open(newTabAddress.href, '_blank', 'noopener,noreferrer');\n },\n accountProfile: function() {\n let newTabAddress = `${oidcSettings.authority}/account?referrer=${oidcSettings.clientId}&referrer_uri=${window.location.href}`;\n window.open(newTabAddress, '_blank', 'noopener,noreferrer');\n },\n};\n\nconst router = new VueRouter({\n routes,\n mode: 'history',\n});\nrouter.beforeEach(vuexOidcCreateRouterMiddleware(store));\n\nexport default router;\n"],"sourceRoot":""}