mirror of
https://github.com/loot/libloot.git
synced 2026-07-27 14:16:01 -07:00
+119
-104
@@ -33,20 +33,120 @@ var loot = {
|
||||
plugins: []
|
||||
},
|
||||
|
||||
/* 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').firstElementChild.children;
|
||||
for (var i = 0; i < gameMenuItems.length; ++i) {
|
||||
if (this.installedGames.indexOf(gameMenuItems[i].getAttribute('data-folder')) == -1) {
|
||||
gameMenuItems[i].classList.toggle('disabled', true);
|
||||
gameMenuItems[i].removeEventListener('click', changeGame, false);
|
||||
} else {
|
||||
gameMenuItems[i].classList.toggle('disabled', false);
|
||||
gameMenuItems[i].addEventListener('click', changeGame, false);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
/* Call whenever game is changed or game menu / game table are rewritten. */
|
||||
updateSelectedGame: function() {
|
||||
/* Highlight game in menu. Could use fa-chevron-right instead. */
|
||||
var gameMenuItems = document.getElementById('gameMenu').children[0].children;
|
||||
for (var i = 0; i < gameMenuItems.length; ++i) {
|
||||
if (gameMenuItems[i].getAttribute('data-folder') == this.game.folder) {
|
||||
gameMenuItems[i].getElementsByClassName('fa')[0].classList.toggle('fa-angle-double-right', true);
|
||||
} else {
|
||||
gameMenuItems[i].getElementsByClassName('fa')[0].classList.toggle('fa-angle-double-right', false);
|
||||
}
|
||||
}
|
||||
|
||||
/* Also disable deletion of the game's row in the settings dialog. */
|
||||
var rows = document.getElementById('gameTable').getElementsByTagName('tbody')[0].getElementsByTagName('tr');
|
||||
for (var i = 0; i < rows.length; ++i) {
|
||||
if (rows[i].getElementsByClassName('folder').length > 0) {
|
||||
if (rows[i].getElementsByClassName('folder')[0].value == this.game.folder) {
|
||||
document.getElementById('gameTable').setReadOnly(rows[i], ['fa-trash-o']);
|
||||
} else {
|
||||
document.getElementById('gameTable').setReadOnly(rows[i], ['fa-trash-o'], false);
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
/* Call whenever game is changed. */
|
||||
updateRedatePluginsButtonState: function() {
|
||||
/* Also enable/disable the redate plugins option. */
|
||||
var index = undefined;
|
||||
for (var i = 0; i < this.settings.games.length; ++i) {
|
||||
if (this.settings.games[i].folder == this.game.folder) {
|
||||
index = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (index != undefined && this.settings.games[index].type == 'Skyrim') {
|
||||
document.getElementById('redatePluginsButton').classList.toggle('disabled', false);
|
||||
} else {
|
||||
document.getElementById('redatePluginsButton').classList.toggle('disabled', true);
|
||||
}
|
||||
},
|
||||
|
||||
/* Call whenever settings are changed. */
|
||||
updateSettingsUI: function() {
|
||||
var gameSelect = document.getElementById('defaultGameSelect');
|
||||
var gameMenu = document.getElementById('gameMenu').firstElementChild;
|
||||
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', changeGame, false);
|
||||
gameMenu.removeChild(gameMenu.firstElementChild);
|
||||
}
|
||||
gameTable.clear();
|
||||
|
||||
/* Now fill with new values. */
|
||||
this.settings.games.forEach(function(game){
|
||||
var option = document.createElement('option');
|
||||
option.value = game.folder;
|
||||
option.textContent = game.name;
|
||||
gameSelect.appendChild(option);
|
||||
|
||||
var li = document.createElement('li');
|
||||
li.setAttribute('data-folder', game.folder);
|
||||
|
||||
var icon = document.createElement('span');
|
||||
icon.className = 'fa fa-fw';
|
||||
li.appendChild(icon);
|
||||
|
||||
var text = document.createElement('span');
|
||||
text.textContent = game.name;
|
||||
li.appendChild(text);
|
||||
|
||||
gameMenu.appendChild(li);
|
||||
|
||||
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('debugVerbositySelect').value = this.settings.debugVerbosity;
|
||||
document.getElementById('updateMasterlist').checked = this.settings.updateMasterlist;
|
||||
},
|
||||
|
||||
observer: function(changes) {
|
||||
changes.forEach(function(change){
|
||||
if (change.name == 'installedGames') {
|
||||
/* Update the disabled games in the game menu. */
|
||||
var gameMenuItems = document.getElementById('gameMenu').firstElementChild.children;
|
||||
for (var i = 0; i < gameMenuItems.length; ++i) {
|
||||
if (change.object[change.name].indexOf(gameMenuItems[i].getAttribute('data-folder')) == -1) {
|
||||
gameMenuItems[i].classList.toggle('disabled', true);
|
||||
gameMenuItems[i].removeEventListener('click', changeGame, false);
|
||||
} else {
|
||||
gameMenuItems[i].classList.toggle('disabled', false);
|
||||
gameMenuItems[i].addEventListener('click', changeGame, false);
|
||||
}
|
||||
}
|
||||
change.object.updateEnabledGames();
|
||||
} else if (change.name == 'settings') {
|
||||
change.object.updateSettingsUI();
|
||||
change.object.updateEnabledGames();
|
||||
change.object.updateSelectedGame();
|
||||
} else if (change.name == 'game') {
|
||||
change.object.updateSelectedGame();
|
||||
change.object.updateRedatePluginsButtonState();
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -76,9 +176,14 @@ function processCefError(err) {
|
||||
var marked;
|
||||
function saveFilterState(evt) {
|
||||
if (evt.currentTarget.checked) {
|
||||
if (!loot.setttings.filters) {
|
||||
loot.settings.filters = {};
|
||||
}
|
||||
loot.settings.filters[evt.currentTarget.id] = true;
|
||||
} else {
|
||||
delete loot.settings.filters[evt.currentTarget.id];
|
||||
if (loot.setttings.filters) {
|
||||
delete loot.settings.filters[evt.currentTarget.id];
|
||||
}
|
||||
}
|
||||
|
||||
var request = JSON.stringify({
|
||||
@@ -244,42 +349,6 @@ function showMessageBox(type, title, text) {
|
||||
function openLogLocation(evt) {
|
||||
loot.query('openLogLocation').catch(processCefError);
|
||||
}
|
||||
function updateSelectedGame() {
|
||||
/* Highlight game in menu. Could use fa-chevron-right instead. */
|
||||
var gameMenuItems = document.getElementById('gameMenu').children[0].children;
|
||||
for (var i = 0; i < gameMenuItems.length; ++i) {
|
||||
if (loot.game && gameMenuItems[i].getAttribute('data-folder') == loot.game.folder) {
|
||||
gameMenuItems[i].getElementsByClassName('fa')[0].classList.toggle('fa-angle-double-right', true);
|
||||
} else {
|
||||
gameMenuItems[i].getElementsByClassName('fa')[0].classList.toggle('fa-angle-double-right', false);
|
||||
}
|
||||
}
|
||||
|
||||
/* Also enable/disable the redate plugins option. */
|
||||
var index = undefined;
|
||||
for (var i = 0; i < loot.settings.games.length; ++i) {
|
||||
if (loot.game && loot.settings.games[i].folder == loot.game.folder) {
|
||||
index = i;
|
||||
}
|
||||
}
|
||||
if (index != undefined && loot.settings.games[index].type == 'Skyrim') {
|
||||
document.getElementById('redatePluginsButton').classList.toggle('disabled', false);
|
||||
} else {
|
||||
document.getElementById('redatePluginsButton').classList.toggle('disabled', true);
|
||||
}
|
||||
|
||||
/* Also disable deletion of the game's row in the settings dialog. */
|
||||
var rows = document.getElementById('gameTable').getElementsByTagName('tbody')[0].getElementsByTagName('tr');
|
||||
for (var i = 0; i < rows.length; ++i) {
|
||||
if (rows[i].getElementsByClassName('folder').length > 0) {
|
||||
if (loot.game && rows[i].getElementsByClassName('folder')[0].value == loot.game.folder) {
|
||||
document.getElementById('gameTable').setReadOnly(rows[i], ['fa-trash-o']);
|
||||
} else {
|
||||
document.getElementById('gameTable').setReadOnly(rows[i], ['fa-trash-o'], false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
function changeGame(evt) {
|
||||
/* First store current game info in loot.games object.
|
||||
This object may not exist, so initialise it if not. */
|
||||
@@ -408,9 +477,6 @@ function changeGame(evt) {
|
||||
/* Now update interface for new data. */
|
||||
updateInterfaceWithGameInfo();
|
||||
|
||||
/* Now update game menu to highlight the newly selected game. */
|
||||
updateSelectedGame();
|
||||
|
||||
/* Reapply previously active filters. */
|
||||
activeFilters.forEach(function(filter){
|
||||
filter.click();
|
||||
@@ -760,53 +826,6 @@ function closeAboutDialog(evt) {
|
||||
function showAboutDialog(evt) {
|
||||
document.getElementById('about').showModal();
|
||||
}
|
||||
function updateSettingsUI() {
|
||||
var gameSelect = document.getElementById('defaultGameSelect');
|
||||
var gameMenu = document.getElementById('gameMenu').firstElementChild;
|
||||
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', changeGame, false);
|
||||
gameMenu.removeChild(gameMenu.firstElementChild);
|
||||
}
|
||||
gameTable.clear();
|
||||
|
||||
/* Now fill with new values. */
|
||||
for (var i = 0; i < loot.settings.games.length; ++i) {
|
||||
var option = document.createElement('option');
|
||||
option.value = loot.settings.games[i].folder;
|
||||
option.textContent = loot.settings.games[i].name;
|
||||
gameSelect.appendChild(option);
|
||||
|
||||
var li = document.createElement('li');
|
||||
li.setAttribute('data-folder', loot.settings.games[i].folder);
|
||||
|
||||
var icon = document.createElement('span');
|
||||
icon.className = 'fa fa-fw';
|
||||
li.appendChild(icon);
|
||||
|
||||
var text = document.createElement('span');
|
||||
text.textContent = loot.settings.games[i].name;
|
||||
li.appendChild(text);
|
||||
|
||||
gameMenu.appendChild(li);
|
||||
|
||||
var row = gameTable.addRow(loot.settings.games[i]);
|
||||
gameTable.setReadOnly(row, ['name','folder','type']);
|
||||
}
|
||||
|
||||
/* Highlight game in menu. */
|
||||
updateSelectedGame();
|
||||
|
||||
gameSelect.value = loot.settings.game;
|
||||
document.getElementById('languageSelect').value = loot.settings.language;
|
||||
document.getElementById('debugVerbositySelect').value = loot.settings.debugVerbosity;
|
||||
document.getElementById('updateMasterlist').checked = loot.settings.updateMasterlist;
|
||||
}
|
||||
function closeSettingsDialog(evt) {
|
||||
if (!areSettingsValid()) {
|
||||
return;
|
||||
@@ -822,6 +841,7 @@ function closeSettingsDialog(evt) {
|
||||
language: document.getElementById('languageSelect').value,
|
||||
lastGame: loot.settings.lastGame,
|
||||
updateMasterlist: document.getElementById('updateMasterlist').checked,
|
||||
filters: loot.settings.filters,
|
||||
};
|
||||
|
||||
/* Send the settings back to the C++ side. */
|
||||
@@ -841,11 +861,10 @@ function closeSettingsDialog(evt) {
|
||||
}
|
||||
|
||||
loot.settings = settings;
|
||||
updateSettingsUI();
|
||||
}).catch(processCefError);
|
||||
} else {
|
||||
/* Re-apply the existing settings to the settings dialog elements. */
|
||||
updateSettingsUI();
|
||||
loot.updateSettingsUI();
|
||||
}
|
||||
dialog.close();
|
||||
}
|
||||
@@ -1076,11 +1095,7 @@ function initVars() {
|
||||
|
||||
try {
|
||||
loot.settings = JSON.parse(results[2]);
|
||||
if (loot.settings.filters == undefined) {
|
||||
loot.settings.filters = {};
|
||||
}
|
||||
applySavedFilters();
|
||||
updateSettingsUI();
|
||||
} catch (e) {
|
||||
console.log(e);
|
||||
console.log('getSettings response: ' + results[2]);
|
||||
|
||||
Reference in New Issue
Block a user