diff --git a/src/gui/html/js/events.js b/src/gui/html/js/events.js
index a5b0d8e3..87378a27 100644
--- a/src/gui/html/js/events.js
+++ b/src/gui/html/js/events.js
@@ -478,17 +478,18 @@ function onCloseSettingsDialog(evt) {
loot.query(request).then(function(result){
try {
- loot.installedGames = JSON.parse(result);
+ setInstalledGames(JSON.parse(result));
} catch (e) {
console.log(e);
console.log('getInstalledGames response: ' + results[1]);
}
loot.settings = settings;
+ updateSettingsUI();
}).catch(processCefError);
} else {
/* Re-apply the existing settings to the settings dialog elements. */
- loot.updateSettingsUI();
+ updateSettingsUI();
}
evt.target.parentElement.close();
}
diff --git a/src/gui/html/js/helpers.js b/src/gui/html/js/helpers.js
index 37a0118a..bea6e87b 100644
--- a/src/gui/html/js/helpers.js
+++ b/src/gui/html/js/helpers.js
@@ -1,3 +1,4 @@
+'use strict';
function processCefError(err) {
/* Error.stack seems to be Chromium-specific. It gives a lot more useful
info than just the error message. Also, this can be used to catch any
@@ -157,3 +158,73 @@ function updateSelectedGame(gameFolder) {
}
}
}
+
+/* Call whenever installedGames is changed or game menu is rewritten. */
+function updateEnabledGames(installedGames) {
+ /* Update the disabled games in the game menu. */
+ var gameMenuItems = document.getElementById('gameMenu').children;
+ for (var i = 0; i < gameMenuItems.length; ++i) {
+ if (installedGames.indexOf(gameMenuItems[i].getAttribute('value')) == -1) {
+ gameMenuItems[i].setAttribute('disabled', true);
+ gameMenuItems[i].removeEventListener('click', onChangeGame, false);
+ } else {
+ gameMenuItems[i].removeAttribute('disabled');
+ gameMenuItems[i].addEventListener('click', onChangeGame, false);
+ }
+ }
+}
+function setInstalledGames(installedGames) {
+ loot.installedGames = installedGames;
+ updateEnabledGames(installedGames);
+}
+/* Call whenever settings are changed. */
+function updateSettingsUI() {
+ var gameSelect = document.getElementById('defaultGameSelect');
+ var gameMenu = document.getElementById('gameMenu');
+ var gameTable = document.getElementById('gameTable');
+
+ /* First make sure game listing elements don't have any existing entries. */
+ while (gameSelect.children.length > 1) {
+ gameSelect.removeChild(gameSelect.lastElementChild);
+ }
+ while (gameMenu.firstElementChild) {
+ gameMenu.firstElementChild.removeEventListener('click', onChangeGame, false);
+ gameMenu.removeChild(gameMenu.firstElementChild);
+ }
+ gameTable.clear();
+
+ /* Now fill with new values. */
+ loot.settings.games.forEach(function(game){
+ var menuItem = document.createElement('paper-item');
+ menuItem.setAttribute('value', game.folder);
+ menuItem.setAttribute('noink', '');
+ menuItem.textContent = game.name;
+ gameMenu.appendChild(menuItem);
+ gameSelect.appendChild(menuItem.cloneNode(true));
+
+ var row = gameTable.addRow(game);
+ gameTable.setReadOnly(row, ['name','folder','type']);
+ });
+
+ gameSelect.value = loot.settings.game;
+ document.getElementById('languageSelect').value = loot.settings.language;
+ document.getElementById('enableDebugLogging').checked = loot.settings.enableDebugLogging;
+ document.getElementById('updateMasterlist').checked = loot.settings.updateMasterlist;
+
+ updateEnabledGames(loot.installedGames);
+ updateSelectedGame(loot.game.folder);
+}
+/* Returns a cefQuery as a Promise. */
+var loot = loot || {};
+loot.query = function query(request) {
+ return new Promise(function(resolve, reject) {
+ window.cefQuery({
+ request: request,
+ persistent: false,
+ onSuccess: resolve,
+ onFailure: function(errorCode, errorMessage) {
+ reject(Error('Error code: ' + errorCode + '; ' + errorMessage))
+ }
+ });
+ });
+}
diff --git a/src/gui/html/js/init.js b/src/gui/html/js/init.js
index e5263c9e..8d02243f 100644
--- a/src/gui/html/js/init.js
+++ b/src/gui/html/js/init.js
@@ -172,7 +172,7 @@ function initVars() {
select.setAttribute('value', select.firstElementChild.getAttribute('value'));
try {
- loot.installedGames = JSON.parse(results[1]);
+ setInstalledGames(JSON.parse(results[1]));
} catch (e) {
console.log(e);
console.log('getInstalledGames response: ' + results[1]);
@@ -180,6 +180,7 @@ function initVars() {
try {
loot.settings = JSON.parse(results[2]);
+ updateSettingsUI();
restoreFilterStates();
} catch (e) {
console.log(e);
@@ -191,7 +192,7 @@ function initVars() {
loot.l10n.load().then(() => {
loot.translateStaticText(loot.l10n);
/* Also need to update the settings UI. */
- loot.updateSettingsUI();
+ updateSettingsUI();
}).catch(processCefError);
}).then(function(){
if (result) {
@@ -231,10 +232,6 @@ window.addEventListener('polymer-ready', function(e) {
/* Set the plugin list's scroll target to its parent. */
document.getElementById('main').lastElementChild.scrollTarget = document.getElementById('main');
- /* Register object observers. */
- Object.observe(loot, loot.observer);
- Object.observe(loot.game, loot.gameObserver);
-
/* Make sure settings are what I want. */
marked.setOptions({
gfm: true,
diff --git a/src/gui/html/js/loot.js b/src/gui/html/js/loot.js
deleted file mode 100644
index b6aa2df7..00000000
--- a/src/gui/html/js/loot.js
+++ /dev/null
@@ -1,82 +0,0 @@
-var loot = {
- installedGames: [],
- settings: {},
-
- /* Call whenever installedGames is changed or game menu is rewritten. */
- updateEnabledGames: function() {
- /* Update the disabled games in the game menu. */
- var gameMenuItems = document.getElementById('gameMenu').children;
- for (var i = 0; i < gameMenuItems.length; ++i) {
- if (this.installedGames.indexOf(gameMenuItems[i].getAttribute('value')) == -1) {
- gameMenuItems[i].setAttribute('disabled', true);
- gameMenuItems[i].removeEventListener('click', onChangeGame, false);
- } else {
- gameMenuItems[i].removeAttribute('disabled');
- gameMenuItems[i].addEventListener('click', onChangeGame, false);
- }
- }
- },
-
- /* Call whenever settings are changed. */
- updateSettingsUI: function() {
- var gameSelect = document.getElementById('defaultGameSelect');
- var gameMenu = document.getElementById('gameMenu');
- var gameTable = document.getElementById('gameTable');
-
- /* First make sure game listing elements don't have any existing entries. */
- while (gameSelect.children.length > 1) {
- gameSelect.removeChild(gameSelect.lastElementChild);
- }
- while (gameMenu.firstElementChild) {
- gameMenu.firstElementChild.removeEventListener('click', onChangeGame, false);
- gameMenu.removeChild(gameMenu.firstElementChild);
- }
- gameTable.clear();
-
- /* Now fill with new values. */
- this.settings.games.forEach(function(game){
- var menuItem = document.createElement('paper-item');
- menuItem.setAttribute('value', game.folder);
- menuItem.setAttribute('noink', '');
- menuItem.textContent = game.name;
- gameMenu.appendChild(menuItem);
- gameSelect.appendChild(menuItem.cloneNode(true));
-
- var row = gameTable.addRow(game);
- gameTable.setReadOnly(row, ['name','folder','type']);
- });
-
- gameSelect.value = this.settings.game;
- document.getElementById('languageSelect').value = this.settings.language;
- document.getElementById('enableDebugLogging').checked = this.settings.enableDebugLogging;
- document.getElementById('updateMasterlist').checked = this.settings.updateMasterlist;
-
- this.updateEnabledGames();
- updateSelectedGame(this.game.folder);
- },
-
- /* Observer for loot members. */
- observer: function(changes) {
- changes.forEach(function(change){
- if (change.name == 'installedGames') {
- change.object.updateEnabledGames();
- } else if (change.name == 'settings') {
- change.object.updateSettingsUI();
- }
- });
- },
-
- /* Returns a cefQuery as a Promise. */
- query: function(request) {
- return new Promise(function(resolve, reject) {
- window.cefQuery({
- request: request,
- persistent: false,
- onSuccess: resolve,
- onFailure: function(errorCode, errorMessage) {
- reject(Error('Error code: ' + errorCode + '; ' + errorMessage))
- }
- });
- });
- }
-};