/********** * Config * **********/ CM.SaveConfig = function(config) { localStorage.setItem(CM.ConfigPrefix, JSON.stringify(config)); } CM.LoadConfig = function() { if (localStorage.getItem(CM.ConfigPrefix) != null) { CM.Config = JSON.parse(localStorage.getItem(CM.ConfigPrefix)); // Check values var mod = false; for (var i in CM.ConfigDefault) { if (typeof CM.Config[i] === 'undefined') { mod = true; CM.Config[i] = CM.ConfigDefault[i]; } else if (i != 'StatsPref' && i != 'Colors') { if (i.indexOf('SoundURL') == -1) { if (!(CM.Config[i] > -1 && CM.Config[i] < CM.ConfigData[i].label.length)) { mod = true; CM.Config[i] = CM.ConfigDefault[i]; } } else { // Sound URLs if (typeof CM.Config[i] != 'string') { mod = true; CM.Config[i] = CM.ConfigDefault[i]; } } } else if (i == 'StatsPref') { for (var j in CM.ConfigDefault.StatsPref) { if (typeof CM.Config[i][j] === 'undefined' || !(CM.Config[i][j] > -1 && CM.Config[i][j] < 2)) { mod = true; CM.Config[i][j] = CM.ConfigDefault[i][j]; } } } else { // Colors for (var j in CM.ConfigDefault.Colors) { if (typeof CM.Config[i][j] === 'undefined' || typeof CM.Config[i][j] != 'string') { mod = true; CM.Config[i][j] = CM.ConfigDefault[i][j]; } } } } if (mod) CM.SaveConfig(CM.Config); CM.Loop(); // Do loop once for (var i in CM.ConfigDefault) { if (i != 'StatsPref' && i != 'OptionsPref' && typeof CM.ConfigData[i].func !== 'undefined') { CM.ConfigData[i].func(); } } } else { // Default values CM.RestoreDefault(); } } CM.RestoreDefault = function() { CM.Config = {}; CM.SaveConfig(CM.ConfigDefault); CM.LoadConfig(); Game.UpdateMenu(); } CM.ToggleConfig = function(config) { CM.ToggleConfigUp(config); if (CM.ConfigData[config].toggle) { if (CM.Config[config] == 0) { l(CM.ConfigPrefix + config).className = 'option off'; } else { l(CM.ConfigPrefix + config).className = 'option'; } } } CM.ToggleConfigUp = function(config) { CM.Config[config]++; if (CM.Config[config] == CM.ConfigData[config].label.length) { CM.Config[config] = 0; } if (typeof CM.ConfigData[config].func !== 'undefined') { CM.ConfigData[config].func(); } l(CM.ConfigPrefix + config).innerHTML = CM.ConfigData[config].label[CM.Config[config]]; CM.SaveConfig(CM.Config); } CM.ToggleConfigDown = function(config) { CM.Config[config]--; if (CM.Config[config] < 0) { CM.Config[config] = CM.ConfigData[config].label.length - 1; } if (typeof CM.ConfigData[config].func !== 'undefined') { CM.ConfigData[config].func(); } l(CM.ConfigPrefix + config).innerHTML = CM.ConfigData[config].label[CM.Config[config]]; CM.SaveConfig(CM.Config); } CM.ToggleStatsConfig = function(config) { if (CM.Config.StatsPref[config] == 0) { CM.Config.StatsPref[config]++; } else { CM.Config.StatsPref[config]--; } CM.SaveConfig(CM.Config); } CM.ToggleOptionsConfig = function(config) { if (CM.Config.OptionsPref[config] == 0) { CM.Config.OptionsPref[config]++; } else { CM.Config.OptionsPref[config]--; } CM.SaveConfig(CM.Config); } // Checks if the browsers has permissions to produce notifications // Should be triggered when Config related to Notifications is toggled on CM.CheckNotificationPermissions = function(ToggleOnOff) { if (ToggleOnOff == 1) { // Check if browser support Promise version of Notification Permissions function checkNotificationPromise() { try { Notification.requestPermission().then(); } catch(e) { return false; } return true; } // Check if the browser supports notifications and which type if (!('Notification' in window)) { console.log("This browser does not support notifications."); } else { if(checkNotificationPromise()) { Notification.requestPermission().then(); } else { Notification.requestPermission(); } } } }