townsquare/src/store/persistence.js

189 lines
5.5 KiB
JavaScript
Raw Normal View History

2020-05-02 19:46:51 +00:00
module.exports = store => {
2021-02-01 21:33:59 +00:00
const updatePagetitle = isPublic =>
(document.title = `Blood on the Clocktower ${
isPublic ? "Town Square" : "Grimoire"
}`);
2020-05-02 20:23:05 +00:00
// initialize data
2020-06-07 19:51:19 +00:00
if (localStorage.getItem("background")) {
2020-05-02 19:46:51 +00:00
store.commit("setBackground", localStorage.background);
}
if (localStorage.getItem("muted")) {
2021-02-01 21:33:59 +00:00
store.commit("toggleMuted", true);
}
v2.13.0 (#168) * add support for custom fabled (closes #110) * 2.13.0 * show custom fabled first * add recordVoteHistory & clearVoteHistory to session menu * Update CHANGELOG.md * socket part of toggle recordVoteHistory analogous to isNight * remove accidental * Add files via upload * add custom fabled * Add option to reduce night animations to save power. * add fallback icon for fabled * changelog * disable all animations now * linter * add 'on the block' indicator - after vote, ST chooses to put onto block / empty block / no change to block - player menu has add / remove from block - players are automatically removed from the block when (i) they die (ii) another player is put onto block - fixed crash on add/remove/etc player mid vote * hide rounded corners on maximized modals (barely visible anyway) * ST always sees vote history i.e. toggle affects only players * empty block at night * avoid clashing with seat icon * nlc: toggle within session.js * lint * minor * Use proper "Exile" terminology for exile * Add info about "Banishment"->"Exile" to CHANGELOG * requested changes * remove direct ST control of block * player menu order * move block/night logic from socket to menu * minor fix to previous * on block -> marked * requested changes * requested change Co-authored-by: Steffen <steffen@baumgart.biz> * fix players being moved or removed during a nomination (closes #164) add vue linter * let's try adding a lint error * linter adjusted * it's working! * requested change record marked player id in session * feedback implemented npm audit * prepare develop branch * adjust linter config * revert version bump * fixes & visuals * Update CHANGELOG.md * restore old lint command (fixes #170) * minor fix default * show jinxed interactions on character reference modal * 2.13.0 * changelog Co-authored-by: nicfreeman1209 <nicfreeman1209@gmail.com> Co-authored-by: nicfreeman1209 <14160941+nicfreeman1209@users.noreply.github.com> Co-authored-by: Adrian Irving-Beer <wisq@wisq.net> Co-authored-by: Andrew Conant <emptierset@gmail.com>
2021-05-15 18:07:54 +00:00
if (localStorage.getItem("static")) {
store.commit("toggleStatic", true);
}
2021-02-01 21:33:59 +00:00
if (localStorage.getItem("imageOptIn")) {
store.commit("toggleImageOptIn", true);
}
2020-06-07 19:51:19 +00:00
if (localStorage.getItem("zoom")) {
store.commit("setZoom", parseFloat(localStorage.getItem("zoom")));
}
2021-02-01 21:33:59 +00:00
if (localStorage.getItem("isGrimoire")) {
store.commit("toggleGrimoire", false);
updatePagetitle(false);
2020-05-02 19:46:51 +00:00
}
if (localStorage.roles !== undefined) {
store.commit("setCustomRoles", JSON.parse(localStorage.roles));
store.commit("setEdition", { id: "custom" });
}
if (localStorage.edition !== undefined) {
// this will initialize state.roles for official editions
store.commit("setEdition", JSON.parse(localStorage.edition));
}
2020-05-03 21:05:17 +00:00
if (localStorage.bluffs !== undefined) {
JSON.parse(localStorage.bluffs).forEach((role, index) => {
store.commit("players/setBluff", {
2020-05-03 21:05:17 +00:00
index,
2020-12-24 14:38:28 +00:00
role: store.state.roles.get(role) || {}
2020-05-03 21:05:17 +00:00
});
});
}
2020-08-09 19:28:38 +00:00
if (localStorage.fabled !== undefined) {
store.commit("players/setFabled", {
v2.13.0 (#168) * add support for custom fabled (closes #110) * 2.13.0 * show custom fabled first * add recordVoteHistory & clearVoteHistory to session menu * Update CHANGELOG.md * socket part of toggle recordVoteHistory analogous to isNight * remove accidental * Add files via upload * add custom fabled * Add option to reduce night animations to save power. * add fallback icon for fabled * changelog * disable all animations now * linter * add 'on the block' indicator - after vote, ST chooses to put onto block / empty block / no change to block - player menu has add / remove from block - players are automatically removed from the block when (i) they die (ii) another player is put onto block - fixed crash on add/remove/etc player mid vote * hide rounded corners on maximized modals (barely visible anyway) * ST always sees vote history i.e. toggle affects only players * empty block at night * avoid clashing with seat icon * nlc: toggle within session.js * lint * minor * Use proper "Exile" terminology for exile * Add info about "Banishment"->"Exile" to CHANGELOG * requested changes * remove direct ST control of block * player menu order * move block/night logic from socket to menu * minor fix to previous * on block -> marked * requested changes * requested change Co-authored-by: Steffen <steffen@baumgart.biz> * fix players being moved or removed during a nomination (closes #164) add vue linter * let's try adding a lint error * linter adjusted * it's working! * requested change record marked player id in session * feedback implemented npm audit * prepare develop branch * adjust linter config * revert version bump * fixes & visuals * Update CHANGELOG.md * restore old lint command (fixes #170) * minor fix default * show jinxed interactions on character reference modal * 2.13.0 * changelog Co-authored-by: nicfreeman1209 <nicfreeman1209@gmail.com> Co-authored-by: nicfreeman1209 <14160941+nicfreeman1209@users.noreply.github.com> Co-authored-by: Adrian Irving-Beer <wisq@wisq.net> Co-authored-by: Andrew Conant <emptierset@gmail.com>
2021-05-15 18:07:54 +00:00
fabled: JSON.parse(localStorage.fabled).map(
fabled => store.state.fabled.get(fabled.id) || fabled
)
2020-08-09 19:28:38 +00:00
});
}
2020-05-02 20:23:05 +00:00
if (localStorage.players) {
store.commit(
2020-05-03 21:05:17 +00:00
"players/set",
2020-05-02 20:23:05 +00:00
JSON.parse(localStorage.players).map(player => ({
...player,
role:
store.state.roles.get(player.role) ||
store.getters.rolesJSONbyId.get(player.role) ||
{}
2020-05-02 20:23:05 +00:00
}))
);
}
2020-05-27 20:33:51 +00:00
/**** Session related data *****/
if (localStorage.getItem("playerId")) {
2020-05-30 20:47:42 +00:00
store.commit("session/setPlayerId", localStorage.getItem("playerId"));
2020-05-27 20:33:51 +00:00
}
2021-03-30 19:34:09 +00:00
if (localStorage.getItem("session") && !window.location.hash.substr(1)) {
const [spectator, sessionId] = JSON.parse(localStorage.getItem("session"));
2020-05-30 20:47:42 +00:00
store.commit("session/setSpectator", spectator);
store.commit("session/setSessionId", sessionId);
}
2020-05-02 19:46:51 +00:00
2020-05-02 20:23:05 +00:00
// listen to mutations
2020-05-02 19:46:51 +00:00
store.subscribe(({ type, payload }, state) => {
switch (type) {
case "toggleGrimoire":
2021-02-01 21:33:59 +00:00
if (!state.grimoire.isPublic) {
localStorage.setItem("isGrimoire", 1);
} else {
localStorage.removeItem("isGrimoire");
}
updatePagetitle(state.grimoire.isPublic);
2020-05-02 19:46:51 +00:00
break;
case "setBackground":
if (payload) {
localStorage.setItem("background", payload);
} else {
localStorage.removeItem("background");
}
break;
2021-02-01 21:33:59 +00:00
case "toggleMuted":
if (state.grimoire.isMuted) {
localStorage.setItem("muted", 1);
} else {
localStorage.removeItem("muted");
}
break;
v2.13.0 (#168) * add support for custom fabled (closes #110) * 2.13.0 * show custom fabled first * add recordVoteHistory & clearVoteHistory to session menu * Update CHANGELOG.md * socket part of toggle recordVoteHistory analogous to isNight * remove accidental * Add files via upload * add custom fabled * Add option to reduce night animations to save power. * add fallback icon for fabled * changelog * disable all animations now * linter * add 'on the block' indicator - after vote, ST chooses to put onto block / empty block / no change to block - player menu has add / remove from block - players are automatically removed from the block when (i) they die (ii) another player is put onto block - fixed crash on add/remove/etc player mid vote * hide rounded corners on maximized modals (barely visible anyway) * ST always sees vote history i.e. toggle affects only players * empty block at night * avoid clashing with seat icon * nlc: toggle within session.js * lint * minor * Use proper "Exile" terminology for exile * Add info about "Banishment"->"Exile" to CHANGELOG * requested changes * remove direct ST control of block * player menu order * move block/night logic from socket to menu * minor fix to previous * on block -> marked * requested changes * requested change Co-authored-by: Steffen <steffen@baumgart.biz> * fix players being moved or removed during a nomination (closes #164) add vue linter * let's try adding a lint error * linter adjusted * it's working! * requested change record marked player id in session * feedback implemented npm audit * prepare develop branch * adjust linter config * revert version bump * fixes & visuals * Update CHANGELOG.md * restore old lint command (fixes #170) * minor fix default * show jinxed interactions on character reference modal * 2.13.0 * changelog Co-authored-by: nicfreeman1209 <nicfreeman1209@gmail.com> Co-authored-by: nicfreeman1209 <14160941+nicfreeman1209@users.noreply.github.com> Co-authored-by: Adrian Irving-Beer <wisq@wisq.net> Co-authored-by: Andrew Conant <emptierset@gmail.com>
2021-05-15 18:07:54 +00:00
case "toggleStatic":
if (state.grimoire.isStatic) {
localStorage.setItem("static", 1);
} else {
localStorage.removeItem("static");
}
break;
2021-02-01 21:33:59 +00:00
case "toggleImageOptIn":
if (state.grimoire.isImageOptIn) {
localStorage.setItem("imageOptIn", 1);
} else {
localStorage.removeItem("imageOptIn");
}
break;
2020-06-07 19:51:19 +00:00
case "setZoom":
if (payload !== 0) {
2020-06-07 19:51:19 +00:00
localStorage.setItem("zoom", payload);
} else {
localStorage.removeItem("zoom");
}
break;
2020-05-02 19:46:51 +00:00
case "setEdition":
localStorage.setItem("edition", JSON.stringify(payload));
if (state.edition.isOfficial) {
localStorage.removeItem("roles");
}
break;
case "setCustomRoles":
if (!payload.length) {
localStorage.removeItem("roles");
} else {
localStorage.setItem("roles", JSON.stringify(payload));
}
2020-05-02 19:46:51 +00:00
break;
case "players/setBluff":
2020-05-02 20:23:05 +00:00
localStorage.setItem(
2020-05-03 21:05:17 +00:00
"bluffs",
JSON.stringify(state.players.bluffs.map(({ id }) => id))
2020-05-02 20:23:05 +00:00
);
break;
case "players/setFabled":
2020-08-09 19:28:38 +00:00
localStorage.setItem(
"fabled",
v2.13.0 (#168) * add support for custom fabled (closes #110) * 2.13.0 * show custom fabled first * add recordVoteHistory & clearVoteHistory to session menu * Update CHANGELOG.md * socket part of toggle recordVoteHistory analogous to isNight * remove accidental * Add files via upload * add custom fabled * Add option to reduce night animations to save power. * add fallback icon for fabled * changelog * disable all animations now * linter * add 'on the block' indicator - after vote, ST chooses to put onto block / empty block / no change to block - player menu has add / remove from block - players are automatically removed from the block when (i) they die (ii) another player is put onto block - fixed crash on add/remove/etc player mid vote * hide rounded corners on maximized modals (barely visible anyway) * ST always sees vote history i.e. toggle affects only players * empty block at night * avoid clashing with seat icon * nlc: toggle within session.js * lint * minor * Use proper "Exile" terminology for exile * Add info about "Banishment"->"Exile" to CHANGELOG * requested changes * remove direct ST control of block * player menu order * move block/night logic from socket to menu * minor fix to previous * on block -> marked * requested changes * requested change Co-authored-by: Steffen <steffen@baumgart.biz> * fix players being moved or removed during a nomination (closes #164) add vue linter * let's try adding a lint error * linter adjusted * it's working! * requested change record marked player id in session * feedback implemented npm audit * prepare develop branch * adjust linter config * revert version bump * fixes & visuals * Update CHANGELOG.md * restore old lint command (fixes #170) * minor fix default * show jinxed interactions on character reference modal * 2.13.0 * changelog Co-authored-by: nicfreeman1209 <nicfreeman1209@gmail.com> Co-authored-by: nicfreeman1209 <14160941+nicfreeman1209@users.noreply.github.com> Co-authored-by: Adrian Irving-Beer <wisq@wisq.net> Co-authored-by: Andrew Conant <emptierset@gmail.com>
2021-05-15 18:07:54 +00:00
JSON.stringify(
state.players.fabled.map(fabled =>
fabled.isCustom ? fabled : { id: fabled.id }
)
)
2020-08-09 19:28:38 +00:00
);
break;
2020-05-03 21:05:17 +00:00
case "players/add":
case "players/update":
case "players/remove":
case "players/clear":
case "players/set":
2020-05-12 20:22:36 +00:00
case "players/swap":
2020-05-19 13:21:38 +00:00
case "players/move":
2020-05-03 21:05:17 +00:00
if (state.players.players.length) {
localStorage.setItem(
"players",
JSON.stringify(
state.players.players.map(player => ({
...player,
// simplify the stored data
2020-05-04 21:05:36 +00:00
role: player.role.id || {}
2020-05-03 21:05:17 +00:00
}))
)
);
} else {
localStorage.removeItem("players");
}
break;
2020-05-30 20:47:42 +00:00
case "session/setSessionId":
2020-05-27 20:33:51 +00:00
if (payload) {
localStorage.setItem(
"session",
JSON.stringify([state.session.isSpectator, payload])
);
} else {
localStorage.removeItem("session");
}
break;
2020-05-30 20:47:42 +00:00
case "session/setPlayerId":
2020-05-27 20:33:51 +00:00
if (payload) {
localStorage.setItem("playerId", payload);
} else {
2020-05-30 20:47:42 +00:00
localStorage.removeItem("playerId");
2020-05-27 20:33:51 +00:00
}
break;
2020-05-02 19:46:51 +00:00
}
});
};