From 090678776e55033150a0ccbe3bccc76b0a1d0cd0 Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Fri, 17 Sep 2021 21:23:31 -0400 Subject: [PATCH] Add version hashing to player-settings pages --- WebHostLib/static/assets/md5.min.js | 2 ++ WebHostLib/static/assets/player-settings.js | 21 +++++++++++++++++++++ WebHostLib/templates/player-settings.html | 1 + 3 files changed, 24 insertions(+) create mode 100644 WebHostLib/static/assets/md5.min.js diff --git a/WebHostLib/static/assets/md5.min.js b/WebHostLib/static/assets/md5.min.js new file mode 100644 index 00000000..cfc4b3f8 --- /dev/null +++ b/WebHostLib/static/assets/md5.min.js @@ -0,0 +1,2 @@ +// Copyright © 2011 Sebastian Tschan, https://blueimp.net +!function(n){"use strict";function d(n,t){var r=(65535&n)+(65535&t);return(n>>16)+(t>>16)+(r>>16)<<16|65535&r}function f(n,t,r,e,o,u){return d((c=d(d(t,n),d(e,u)))<<(f=o)|c>>>32-f,r);var c,f}function l(n,t,r,e,o,u,c){return f(t&r|~t&e,n,t,o,u,c)}function v(n,t,r,e,o,u,c){return f(t&e|r&~e,n,t,o,u,c)}function g(n,t,r,e,o,u,c){return f(t^r^e,n,t,o,u,c)}function m(n,t,r,e,o,u,c){return f(r^(t|~e),n,t,o,u,c)}function i(n,t){var r,e,o,u;n[t>>5]|=128<>>9<<4)]=t;for(var c=1732584193,f=-271733879,i=-1732584194,a=271733878,h=0;h>5]>>>e%32&255);return t}function h(n){var t=[];for(t[(n.length>>2)-1]=void 0,e=0;e>5]|=(255&n.charCodeAt(e/8))<>>4&15)+r.charAt(15&t);return e}function r(n){return unescape(encodeURIComponent(n))}function o(n){return a(i(h(t=r(n)),8*t.length));var t}function u(n,t){return function(n,t){var r,e,o=h(n),u=[],c=[];for(u[15]=c[15]=void 0,16 { document.getElementById('game-name').innerHTML = gameName; Promise.all([fetchSettingData()]).then((results) => { + let settingHash = localStorage.getItem(`${gameName}-hash`); + if (!settingHash) { + // If no hash data has been set before, set it now + localStorage.setItem(`${gameName}-hash`, md5(results[0])); + localStorage.removeItem(gameName); + settingHash = md5(results[0]); + } + + if (settingHash !== md5(results[0])) { + const userMessage = document.getElementById('user-message'); + userMessage.innerText = "Your settings are out of date! Click here to update them!"; + userMessage.style.display = "block"; + userMessage.addEventListener('click', resetSettings); + } + // Page setup createDefaultSettings(results[0]); buildUI(results[0]); @@ -28,6 +43,12 @@ window.addEventListener('load', () => { }) }); +const resetSettings = () => { + localStorage.removeItem(gameName); + localStorage.removeItem(`${gameName}-hash`) + window.location.reload(); +}; + const fetchSettingData = () => new Promise((resolve, reject) => { const ajax = new XMLHttpRequest(); ajax.onreadystatechange = () => { diff --git a/WebHostLib/templates/player-settings.html b/WebHostLib/templates/player-settings.html index ff11c536..c142d17a 100644 --- a/WebHostLib/templates/player-settings.html +++ b/WebHostLib/templates/player-settings.html @@ -4,6 +4,7 @@ {{ game }} Settings + {% endblock %}