Files
libloot/resources/script.js
T

224 lines
8.4 KiB
JavaScript
Raw Permalink Normal View History

2014-03-06 19:23:15 +00:00
/* LOOT
2014-03-06 19:23:15 +00:00
A load order optimisation tool for Oblivion, Skyrim, Fallout 3 and
Fallout: New Vegas.
2014-03-06 19:23:15 +00:00
Copyright (C) 2013-2014 WrinklyNinja
2014-03-06 19:23:15 +00:00
This file is part of LOOT.
2014-03-06 19:23:15 +00:00
LOOT is free software: you can redistribute
it and/or modify it under the terms of the GNU General Public License
as published by the Free Software Foundation, either version 3 of
the License, or (at your option) any later version.
2014-03-06 19:23:15 +00:00
LOOT is distributed in the hope that it will
be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
2014-03-06 19:23:15 +00:00
along with LOOT. If not, see
<http://www.gnu.org/licenses/>.
*/
'use strict';
function isStorageSupported() {
try {
return ('localStorage' in window && window['localStorage'] !== null && window['localStorage'] !== undefined);
} catch (e) {
return false;
}
}
function saveCheckboxState(evt) {
if (evt.currentTarget.checked) {
try {
2013-06-10 22:58:20 +01:00
localStorage.setItem(evt.currentTarget.id, true);
} catch (e) {
if (e == QUOTA_EXCEEDED_ERR) {
alert('Web storage quota for this document has been exceeded. Please empty your browser\'s cache. Note that this will delete all locally stored data.');
}
}
} else {
localStorage.removeItem(evt.currentTarget.id);
}
}
function loadSettings() {
var i = localStorage.length - 1;
while (i > -1) {
var elem = document.getElementById(localStorage.key(i));
if (elem != null && 'defaultChecked' in elem) {
2013-06-10 22:58:20 +01:00
elem.dispatchEvent(new MouseEvent('click'));
}
i--;
}
}
function showElement(element) {
if (element != null) {
if (element.className.indexOf('hidden') != -1) {
element.className = element.className.replace('hidden', '');
}
}
}
function hideElement(element) {
if (element != null) {
if (element.className.indexOf('hidden') == -1) {
element.className += ' hidden';
}
}
}
function stepUnhideElement(element) {
if (element != null && element.className.indexOf('hidden') != -1) {
element.className = element.className.replace('hidden', '');
}
}
function stepHideElement(element) {
if (element != null) {
element.className += ' hidden';
}
}
function toggleDisplayCSS(evt) {
var e = document.getElementsByClassName(evt.target.getAttribute('data-class'));
if (evt.target.checked) {
for (var i = 0, z = e.length; i < z; i++) {
e[i].className += ' hidden';
}
} else {
for (var i = 0, z = e.length; i < z; i++) {
e[i].className = e[i].className.replace('hidden', '');
}
}
}
function toggleFilters(evt) {
var filters = document.getElementById('filters');
if (document.getElementById('filtersToggle').className.indexOf('current') == -1) {
showElement(filters);
evt.target.className += ' current';
} else {
hideElement(filters);
evt.target.className = evt.target.className.replace('current', '');
}
}
function showSection(evt) {
var elemArr = document.getElementById('nav').querySelectorAll('.button[data-section]');
var i = elemArr.length - 1;
while (i > -1) {
hideElement(document.getElementById(elemArr[i].getAttribute('data-section')));
i--;
}
showElement(document.getElementById(evt.target.getAttribute('data-section')));
var elem = document.querySelector('#nav div.current[data-section]');
if (elem != null) {
elem.className = elem.className.replace('current', '');
}
if (evt.target.className.indexOf('current') == -1) {
evt.target.className += ' current';
} /*Also enable/disable filters based on current page.*/
if (evt.target.getAttribute('data-section') == 'plugins') {
showElement(document.getElementById('filtersToggle'));
if (document.getElementById('filtersToggle').className.indexOf('current') != -1) {
showElement(filters);
}
} else {
hideElement(document.getElementById('filtersToggle'));
hideElement(document.getElementById('filters'));
}
}
function toggleMessages(evt) {
var listItems = document.getElementById('plugins').getElementsByTagName('li');
var i = listItems.length - 1;
2013-06-10 22:58:20 +01:00
var hiddenNo = parseInt(document.getElementById('hiddenMessageNo').innerHTML);
while (i > -1) {
var spans = listItems[i].getElementsByTagName('span');
if (spans.length == 0 || spans[0].className.indexOf('mod') == -1) {
var filterMatch = false;
if (evt.target.id == 'hideAllPluginMessages') {
filterMatch = true;
} else if (evt.target.id == 'hideNotes' && listItems[i].className.indexOf('say') != -1) {
filterMatch = true;
2013-06-10 22:58:20 +01:00
} else if (evt.target.id == 'hideDoNotCleanMessages' && listItems[i].innerHTML.indexOf('Do not clean.') != -1) {
filterMatch = true;
}
if (filterMatch) {
if (evt.target.checked) {
if (listItems[i].className.indexOf('hidden') == -1) {
hiddenNo++;
}
stepHideElement(listItems[i]);
} else {
stepUnhideElement(listItems[i]);
if (listItems[i].className.indexOf('hidden') == -1) {
hiddenNo--;
}
}
}
}
i--;
}
2013-06-10 22:58:20 +01:00
document.getElementById('hiddenMessageNo').innerHTML = hiddenNo;
togglePlugins(evt);
}
function togglePlugins(evt) {
var plugins = document.getElementById('plugins').getElementsByTagName('ul')[0].childNodes;
var i = plugins.length - 1;
2013-06-10 22:58:20 +01:00
var hiddenNo = parseInt(document.getElementById('hiddenPluginNo').innerHTML);
while (i > -1) {
if (plugins[i].nodeType == Node.ELEMENT_NODE) {
var isMessageless = true;
var messages = plugins[i].getElementsByTagName('li');
var j = messages.length - 1;
while (j > -1) {
if (messages[j].className.indexOf('hidden') == -1) {
isMessageless = false;
break;
}
j--;
}
if (document.getElementById('hideMessagelessPlugins').checked && isMessageless) {
if (plugins[i].className.indexOf('hidden') == -1) {
hiddenNo++;
hideElement(plugins[i]);
}
} else if (plugins[i].className.indexOf('hidden') != -1) {
hiddenNo--;
showElement(plugins[i]);
}
}
i--;
}
2013-06-10 22:58:20 +01:00
document.getElementById('hiddenPluginNo').innerHTML = hiddenNo;
}
function setupEventHandlers() {
var i, elemArr;
if (isStorageSupported()) { /*Set up filter value and CSS setting storage read/write handlers.*/
elemArr = document.getElementById('filters').getElementsByTagName('input');
i = elemArr.length - 1;
while (i > -1) {
elemArr[i].addEventListener('click', saveCheckboxState, false);
i--;
}
}
document.getElementById('filtersToggle').addEventListener('click', toggleFilters, false);
/*Set up handlers for section display.*/
elemArr = document.getElementById('nav').querySelectorAll('.button[data-section]');
var i = elemArr.length - 1;
while (i > -1) {
elemArr[i].addEventListener('click', showSection, false);
i--;
}
document.getElementById('hideVersionNumbers').addEventListener('click', toggleDisplayCSS, false);
2013-07-27 18:22:32 +01:00
document.getElementById('hideCRCs').addEventListener('click', toggleDisplayCSS, false);
2013-10-02 14:19:41 +01:00
document.getElementById('hideBashTags').addEventListener('click', toggleDisplayCSS, false);
document.getElementById('hideNotes').addEventListener('click', toggleMessages, false);
document.getElementById('hideDoNotCleanMessages').addEventListener('click', toggleMessages, false);
document.getElementById('hideAllPluginMessages').addEventListener('click', toggleMessages, false);
document.getElementById('hideMessagelessPlugins').addEventListener('click', togglePlugins, false);
}
function init() {
setupEventHandlers();
if (isStorageSupported()) {
loadSettings();
}
showElement(document.getElementsByTagName('section')[0])
}
init();