From dff7d65ca522037c599e81bd78e99157326c40d4 Mon Sep 17 00:00:00 2001 From: WrinklyNinja Date: Tue, 20 May 2014 21:59:22 +0100 Subject: [PATCH] Some fixes and optimisations. Loading was getting a bit laggy, now back down to ~0.25s. --- resources/report/js/script.js | 125 ++++++++++++++++++---------------- resources/report/report.html | 31 +++++---- resources/report/testdata.js | 82 +++++++++++----------- 3 files changed, 122 insertions(+), 116 deletions(-) diff --git a/resources/report/js/script.js b/resources/report/js/script.js index 845ca139..b387f4c3 100644 --- a/resources/report/js/script.js +++ b/resources/report/js/script.js @@ -170,20 +170,20 @@ function showMessageDialog(title, text) { clone.id = 'modalDialog'; - clone.children[0].className += ' warn'; + clone.getElementsByTagName('span')[0].className += ' warn'; - clone.children[1].textContent = title; - clone.children[2].textContent = text; + clone.getElementsByTagName('h1')[0].textContent = title; + clone.getElementsByTagName('p')[0].textContent = text; var overlay = document.getElementById('overlay'); overlay.removeEventListener('click', hideDialog, false); showElement(overlay); - clone.children[3].children[0].setAttribute('data-dialog', clone.id); - clone.children[3].children[0].addEventListener('click', hideDialog, false); + clone.getElementsByClassName('accept')[0].setAttribute('data-dialog', clone.id); + clone.getElementsByClassName('accept')[0].addEventListener('click', hideDialog, false); - clone.children[3].children[1].setAttribute('data-dialog', clone.id); - clone.children[3].children[1].addEventListener('click', hideDialog, false); + clone.getElementsByClassName('cancel')[0].setAttribute('data-dialog', clone.id); + clone.getElementsByClassName('cancel')[0].addEventListener('click', hideDialog, false); } function showMessageBox(type, title, text) { @@ -238,12 +238,11 @@ function processButtonClick(evt) { } else if (action == 'redate-plugins') { redatePlugins(); } else if (action == 'clear-metadata') { - clearMetadata(evt.target.parentNode.parentNode.parentNode.parentNode.children[0].textContent); + clearMetadata(evt.target.getAttribute('data-target')); } else if (action == 'wipe-userlist') { clearAllMetadata(); } else if (action == 'show-editor') { - var section = evt.target.parentElement.parentElement.parentElement.parentElement.parentElement; - section.classList.toggle('flip'); + document.getElementById(evt.target.getAttribute('data-target')).classList.toggle('flip'); } } function toggleInputRO(evt) { @@ -263,10 +262,10 @@ function addNewGameRow(evt) { inputs[i].removeAttribute('readonly'); inputs[i].addEventListener('dblclick', toggleInputRO, false); } - clone.querySelector('.name').placeholder = ''; - showElement(clone.querySelector('.type')); - showElement(clone.querySelector('.fa-trash-o')); - clone.querySelector('.fa-trash-o').addEventListener('click', removeGameRow, false); + clone.getElementsByClassName('name')[0].placeholder = ''; + showElement(clone.getElementsByClassName('type')[0]); + showElement(clone.getElementsByClassName('fa-trash-o')[0]); + clone.getElementsByClassName('fa-trash-o')[0].addEventListener('click', removeGameRow, false); evt.currentTarget.parentElement.insertBefore(clone, evt.currentTarget); } function setupEventHandlers() { @@ -292,13 +291,13 @@ function setupEventHandlers() { elements[i].addEventListener('click', processButtonClick, false); } /* Set up handlers for game table. */ - elements = document.getElementById('gameTable').querySelectorAll('tbody > tr'); + elements = document.getElementById('gameTable').getElementsByTagName('tbody')[0].getElementsByTagName('tr'); for (var i = 0; i < elements.length - 1; ++i) { var inputs = elements[i].getElementsByTagName('input'); for (var j = 0; j < inputs.length; ++j) { inputs[j].addEventListener('dblclick', toggleInputRO, false); } - elements[i].querySelector('.fa-trash-o').addEventListener('click', removeGameRow, false); + elements[i].getElementsByClassName('fa-trash-o')[0].addEventListener('click', removeGameRow, false); } elements[elements.length - 1].addEventListener('dblclick', addNewGameRow, false); } @@ -345,8 +344,8 @@ function processURLParams() { pluginsNav.appendChild(clone); clone = pluginsNav.lastElementChild; - clone.children[3].textContent = data.plugins[i].name; - clone.children[3].href = '#' + data.plugins[i].name.replace(/\s+/g, ''); + clone.getElementsByTagName('a')[0].textContent = data.plugins[i].name; + clone.getElementsByTagName('a')[0].href = '#' + data.plugins[i].name.replace(/\s+/g, ''); if (data.plugins[i].isDummy) { clone.getElementsByClassName('dummyPlugin')[0].className += ' fa fa-eye-slash'; @@ -365,10 +364,10 @@ function processURLParams() { content = document.getElementById('pluginSection').content; clone = document.importNode(content, true); pluginsList.appendChild(clone); - var section = pluginsList.lastElementChild; + clone = pluginsList.lastElementChild; - section.setAttribute('data-active', data.plugins[i].isActive); - section.id = data.plugins[i].name.replace(/\s+/g, ''); + clone.setAttribute('data-active', data.plugins[i].isActive); + clone.id = data.plugins[i].name.replace(/\s+/g, ''); if (data.plugins[i].isActive) { ++activePluginNo; @@ -378,45 +377,48 @@ function processURLParams() { ++dirtyPluginNo; } - section.getElementsByTagName('h1')[0].textContent = data.plugins[i].name; - section.getElementsByTagName('h1')[1].textContent = data.plugins[i].name; + clone.getElementsByTagName('h1')[0].textContent = data.plugins[i].name; + clone.getElementsByTagName('h1')[1].textContent = data.plugins[i].name; - section.getElementsByClassName('crc')[0].textContent = 'CRC: ' + data.plugins[i].crc; - section.getElementsByClassName('crc')[1].textContent = 'CRC: ' + data.plugins[i].crc; + clone.getElementsByClassName('crc')[0].textContent = 'CRC: ' + data.plugins[i].crc; + clone.getElementsByClassName('crc')[1].textContent = 'CRC: ' + data.plugins[i].crc; if (data.plugins[i].isDummy) { - showElement(section.getElementsByClassName('dummyPlugin')[0]); + showElement(clone.getElementsByClassName('dummyPlugin')[0]); } if (data.plugins[i].loadsBSA) { - showElement(section.getElementsByClassName('loadsBSA')[0]); + showElement(clone.getElementsByClassName('loadsBSA')[0]); } if (data.plugins[i].hasUserEdits) { /* This won't actually be handled anything like this in the real data implementation. */ - showElement(section.getElementsByClassName('hasUserEdits')[0]); + showElement(clone.getElementsByClassName('hasUserEdits')[0]); } if (data.plugins[i].version) { - section.getElementsByClassName('crc')[0].textContent = data.plugins[i].version; - section.getElementsByClassName('crc')[1].textContent = data.plugins[i].version; + clone.getElementsByClassName('version')[0].textContent = 'Version: ' + data.plugins[i].version; + clone.getElementsByClassName('version')[1].textContent = 'Version: ' + data.plugins[i].version; } else { - section.getElementsByClassName('version')[0].className += ' hidden'; - section.getElementsByClassName('version')[1].className += ' hidden'; + hideElement(clone.getElementsByClassName('version')[0]); + hideElement(clone.getElementsByClassName('version')[1]); } if (data.plugins[i].tagsAdd && data.plugins[i].tagsAdd.length != 0) { - section.querySelector('.tag.add').textContent = data.plugins[i].tagsAdd.join(', '); + clone.getElementsByClassName('tag add')[0].textContent = data.plugins[i].tagsAdd.join(', '); } else { - section.querySelector('.tag.add').className += ' hidden'; + hideElement(clone.getElementsByClassName('tag add')[0]); } if (data.plugins[i].tagRemove && data.plugins[i].tagRemove.length != 0) { - section.querySelector('.tag.remove').textContent = data.plugins[i].tagsRemove.join(', '); + clone.getElementsByClassName('tag remove')[0].textContent = data.plugins[i].tagsRemove.join(', '); } else { - section.querySelector('.tag.remove').className += ' hidden'; + hideElement(clone.getElementsByClassName('tag remove')[0]); } + clone.getElementsByClassName('editMetadata')[0].setAttribute('data-target', data.plugins[i].name); + clone.getElementsByClassName('copyMetadata')[0].setAttribute('data-target', data.plugins[i].name); + clone.getElementsByClassName('clearMetadata')[0].setAttribute('data-target', clone.id); if (data.plugins[i].messages && data.plugins[i].messages.length != 0) { for (var j = 0; j < data.plugins[i].messages.length; ++j) { @@ -424,7 +426,7 @@ function processURLParams() { messageLi.className = data.plugins[i].messages[j].type; /* innerHTML is open to abuse, but for hyperlinking it's too useful. */ messageLi.innerHTML = data.plugins[i].messages[j].content; - section.getElementsByTagName('ul')[0].appendChild(messageLi); + clone.getElementsByTagName('ul')[0].appendChild(messageLi); if (messageLi.className == 'warn') { warnMessageNo++; @@ -434,7 +436,7 @@ function processURLParams() { totalMessageNo++; } } else { - section.getElementsByTagName('ul')[0].className += ' hidden'; + clone.getElementsByTagName('ul')[0].className += ' hidden'; } } document.getElementById('filterTotalMessageNo').textContent = totalMessageNo; @@ -454,10 +456,19 @@ function processURLParams() { } } + /* Fill in game row template's game type options. */ + var select = document.getElementById('gameRow').content.querySelector('.name'); + for (var j = 0; j < data.gameTypes.length; ++j) { + var option = document.createElement('option'); + option.value = data.gameTypes[j]; + option.textContent = data.gameTypes[j]; + select.appendChild(option); + } + /* Now fill game lists/table. */ var gameSelect = document.getElementById('defaultGameSelect'); var gameMenu = document.getElementById('gameMenu'); - var gameTable = document.getElementById('gameTable'); + var gameTableBody = document.getElementById('gameTable').getElementsByTagName('tbody')[0]; for (var i = 0; i < data.games.length; ++i) { var option = document.createElement('option'); option.value = data.games[i].folder; @@ -471,32 +482,26 @@ function processURLParams() { gameMenu.appendChild(li); var content = document.getElementById('gameRow').content; - for (var j = 0; j < data.gameTypes.length; ++j) { - var option = document.createElement('option'); - option.value = data.gameTypes[j]; - option.textContent = data.gameTypes[j]; - content.querySelector('.type').appendChild(option); - } var clone = document.importNode(content, true); - gameTable.appendChild(clone); - clone = gameTable.lastElementChild; - clone.querySelector('.name').value = data.games[i].name; - clone.querySelector('.type').value = data.games[i].type; - clone.querySelector('.folder').value = data.games[i].folder; - clone.querySelector('.masterFile').value = data.games[i].masterFile; - clone.querySelector('.url').value = data.games[i].url; - clone.querySelector('.branch').value = data.games[i].branch; - clone.querySelector('.path').value = data.games[i].path; - clone.querySelector('.registryKey').value = data.games[i].registryKey; + gameTableBody.appendChild(clone); + clone = gameTableBody.lastElementChild; + clone.getElementsByClassName('name')[0].value = data.games[i].name; + clone.getElementsByClassName('type')[0].value = data.games[i].type; + clone.getElementsByClassName('folder')[0].value = data.games[i].folder; + clone.getElementsByClassName('masterFile')[0].value = data.games[i].masterFile; + clone.getElementsByClassName('url')[0].value = data.games[i].url; + clone.getElementsByClassName('branch')[0].value = data.games[i].branch; + clone.getElementsByClassName('path')[0].value = data.games[i].path; + clone.getElementsByClassName('registryKey')[0].value = data.games[i].registryKey; } /* Add row for creating new rows. */ var content = document.getElementById('gameRow').content; var clone = document.importNode(content, true); - gameTable.appendChild(clone); - clone = gameTable.lastElementChild; - clone.querySelector('.name').placeholder = 'Add new row...'; - hideElement(clone.querySelector('.type')); - hideElement(clone.querySelector('.fa-trash-o')); + gameTableBody.appendChild(clone); + clone = gameTableBody.lastElementChild; + clone.getElementsByClassName('name')[0].placeholder = 'Add new row...'; + hideElement(clone.getElementsByClassName('type')[0]); + hideElement(clone.getElementsByClassName('fa-trash-o')[0]); /* Now fill in language options. */ var langSelect = document.getElementById('languageSelect'); diff --git a/resources/report/report.html b/resources/report/report.html index a208c2ef..cbb1a1a0 100644 --- a/resources/report/report.html +++ b/resources/report/report.html @@ -66,13 +66,13 @@ @@ -291,10 +292,10 @@ along with LOOT. If not, see <http://www.gnu.org/licenses/>.
- +
+
NameBase GameLOOT FolderMaster FileMasterlist Repository URLMasterlist Repository BranchInstall PathInstall Path Registry Key -

Language and game changes will be applied after LOOT is restarted. diff --git a/resources/report/testdata.js b/resources/report/testdata.js index 58a17a62..b7ecdf4a 100644 --- a/resources/report/testdata.js +++ b/resources/report/testdata.js @@ -25,7 +25,7 @@ var data = { "loadsBSA": true, "isActive": false, "crc": "29D2C7DF", - "version": "Version: 2.0.0a", + "version": "2.0.0a", "tagsAdd": ["Delev", "Relev"] }, @@ -33,7 +33,7 @@ var data = { "name": "Unofficial Dawnguard Patch.esp", "isActive": false, "crc": "FF134167", - "version": "Version: 2.0.0b", + "version": "2.0.0b", "tagsAdd": ["Delev", "Relev"], "messages": [{"type": "warn", "content": "Warning: This plugin requires \"Dawnguard.esm\" to be installed, but it is missing."}] @@ -42,7 +42,7 @@ var data = { "name": "Unofficial Hearthfire Patch.esp", "isActive": false, "crc": "F913F25E", - "version": "Version: 2.0.0", + "version": "2.0.0", "messages": [{"type": "warn", "content": "Warning: This plugin requires \"HearthFires.esm\" to be installed, but it is missing."}] }, @@ -59,7 +59,7 @@ var data = { "loadsBSA": true, "isActive": true, "crc": "DA46F3C8", - "version": "Version: 2.0.0", + "version": "2.0.0", "tagsAdd": ["Delev"] }, { @@ -67,7 +67,7 @@ var data = { "loadsBSA": true, "isActive": false, "crc": "6629BE21", - "version": "Version: 1.10", + "version": "1.10", "messages": [{"type": "warn", "content": "Warning: This plugin is incompatible with \"Dragonborn.esm\", but both are present."}] }, @@ -75,7 +75,7 @@ var data = { "name": "EnchantingAwakened.esp", "isActive": false, "crc": "4E2FE0C1", - "version": "Version: 1.60" + "version": "1.60" }, { "name": "SPIKE.esm", @@ -97,7 +97,7 @@ var data = { "name": "Cutting Room Floor.esp", "isActive": false, "crc": "1BA027FF", - "version": "Version: 1.0.2", + "version": "1.0.2", "messages": [{"type": "warn", "content": "Warning: This plugin requires \"Unofficial Skyrim Patch.esp\" to be active, but it is inactive."}] }, @@ -105,13 +105,13 @@ var data = { "name": "Run For Your Lives.esp", "isActive": false, "crc": "1931B1F5", - "version": "Version: 1.2.3" + "version": "1.2.3" }, { "name": "WATER DB.esp", "isActive": false, "crc": "1765B1A6", - "version": "Version: 1.87" + "version": "1.87" }, { "name": "MorePP.esp", @@ -157,7 +157,7 @@ var data = { "name": "BFSEffects.esp", "isActive": false, "crc": "543D56D4", - "version": "Version: 3.6", + "version": "3.6", "messages": [{"type": "warn", "content": "Warning: This plugin requires \"Dawnguard.esm\" to be installed, but it is missing."}] }, @@ -172,7 +172,7 @@ var data = { "name": "AMatterOftime.esp", "isActive": false, "crc": "75025A7E", - "version": "Version: 1.00" + "version": "1.00" }, { "name": "STEP-part5.esp", @@ -287,7 +287,7 @@ var data = { "name": "fFastTravelSpeedMult_4.esp", "isActive": false, "crc": "CC1A0B4E", - "version": "Version: 1.0" + "version": "1.0" }, { "name": "BarenziahQuestMarkers_Droppable.esp", @@ -345,7 +345,7 @@ var data = { "name": "Lightweight Potions and Poisons.esp", "isActive": false, "crc": "276314FF", - "version": "Version: 0.1." + "version": "0.1." }, { "name": "No Empty Tag on Containers.esp", @@ -399,13 +399,13 @@ var data = { "name": "Ars Metallica.esp", "isActive": false, "crc": "8D03ECC0", - "version": "Version: 1.2.1" + "version": "1.2.1" }, { "name": "Ars Metallica - Dawnguard.esp", "isActive": false, "crc": "FE8960A3", - "version": "Version: 1.2.1", + "version": "1.2.1", "messages": [{"type": "warn", "content": "Warning: This plugin requires \"Dawnguard.esm\" to be installed, but it is missing." }, @@ -417,7 +417,7 @@ var data = { "name": "Ars Metallica - Hearthfire.esp", "isActive": false, "crc": "18A5C66B", - "version": "Version: 1.2.1", + "version": "1.2.1", "messages": [{"type": "warn", "content": "Warning: This plugin requires \"HearthFires.esm\" to be installed, but it is missing." }, @@ -465,14 +465,14 @@ var data = { "name": "Reduced Distance NPC Greetings.esp", "isActive": false, "crc": "24658104", - "version": "Version: 50" + "version": "50" }, { "name": "SkyUI.esp", "loadsBSA": true, "isActive": true, "crc": "9330CAF7", - "version": "Version: 4.1" + "version": "4.1" }, { "name": "AnimeticaKobato.esp", @@ -490,7 +490,7 @@ var data = { "name": "SoS - The Wilds.esp", "isActive": false, "crc": "49F5E301", - "version": "Version: 1.13", + "version": "1.13", "messages": [{"type": "say", "content": "Note: Do not use the Crash Fix ESP for this mod. It is flagged as a master and is only meant as a last resort for fixing crashes."}] }, @@ -517,7 +517,7 @@ var data = { "name": "Bring Out Your Dead.esp", "isActive": false, "crc": "3ABC3315", - "version": "Version: 1.2.2", + "version": "1.2.2", "messages": [{"type": "warn", "content": "Warning: This plugin requires \"Unofficial Skyrim Patch.esp\" to be active, but it is inactive."}] }, @@ -554,7 +554,7 @@ var data = { "name": "SoS - The Dungeons.esp", "isActive": false, "crc": "79377267", - "version": "Version: 1.23", + "version": "1.23", "messages": [{"type": "say", "content": "Note: Do not use the Crash Fix ESP for this mod. It is flagged as a master and is only meant as a last resort for fixing crashes."}] }, @@ -621,7 +621,7 @@ var data = { "name": "SplashofRain.esp", "isActive": false, "crc": "363772B6", - "version": "Version: 1.04" + "version": "1.04" }, { "name": "Unique Grasses.esp", @@ -632,13 +632,13 @@ var data = { "name": "SPTDiverseMuscleTones.esp", "isActive": false, "crc": "2D5C68FE", - "version": "Version: 5.1" + "version": "5.1" }, { "name": "SPTDiverseMuscleTonesViljaPatch.esp", "isActive": false, "crc": "117758E3", - "version": "Version: 5.0", + "version": "5.0", "messages": [{"type": "warn", "content": "Warning: This plugin requires \"EMCompViljaSkyrim.esp\" to be active, but it is inactive." }, @@ -650,7 +650,7 @@ var data = { "name": "SPTDiverseMuscleTonesDawnguardDragonborn.esp", "isActive": false, "crc": "F4927D22", - "version": "Version: 5.0", + "version": "5.0", "messages": [{"type": "warn", "content": "Warning: This plugin requires \"Dawnguard.esm\" to be installed, but it is missing." }, @@ -662,7 +662,7 @@ var data = { "name": "SPTDiverseMuscleTonesNPCs.esp", "isActive": false, "crc": "554F1CAB", - "version": "Version: 5.0", + "version": "5.0", "messages": [{"type": "warn", "content": "Warning: This plugin requires \"Unofficial Skyrim Patch.esp\" to be active, but it is inactive." }, @@ -682,7 +682,7 @@ var data = { "name": "SPTDiverseGuardsSkyrim.esp", "isActive": false, "crc": "682A3893", - "version": "Version: 4.6", + "version": "4.6", "messages": [{"type": "warn", "content": "Warning: This plugin requires \"SPTDiverseMuscleTones.esp\" to be active, but it is inactive."}] }, @@ -690,7 +690,7 @@ var data = { "name": "SPTConsistentOlderPeople.esp", "isActive": false, "crc": "CAF3C1BE", - "version": "Version: 1.8", + "version": "1.8", "messages": [{"type": "say", "content": "Note: If this is not newer than v1.3, update to the latest version." }, @@ -706,7 +706,7 @@ var data = { "name": "EnchantingAwakenedAWEPatch.esp", "isActive": false, "crc": "DDDCC598", - "version": "Version: 1.50", + "version": "1.50", "messages": [{"type": "warn", "content": "Warning: This plugin requires \"Animated Weapon Enchants.esp\" to be installed, but it is missing." }, @@ -733,7 +733,7 @@ var data = { "name": "Ars Metallica - Dragonborn.esp", "isActive": false, "crc": "1091DB21", - "version": "Version: 1.2.1", + "version": "1.2.1", "messages": [{"type": "warn", "content": "Warning: This plugin requires \"Ars Metallica.esp\" to be active, but it is inactive."}] }, @@ -780,13 +780,13 @@ var data = { "name": "Point The Way.esp", "isActive": false, "crc": "F372CBC2", - "version": "Version: 1.0.2" + "version": "1.0.2" }, { "name": "SkyrimImprovedPuddles-DG-HF-DB.esp", "isActive": false, "crc": "D0427B6", - "version": "Version: 1.1", + "version": "1.1", "messages": [{"type": "say", "content": "Note: Use only one SkyrimImprovedPuddles esp." }, @@ -802,7 +802,7 @@ var data = { "name": "The Paarthurnax Dilemma.esp", "isActive": false, "crc": "9E446FBD", - "version": "Version: 1.2.5" + "version": "1.2.5" }, { "name": "TheTownIsSafe.esp", @@ -827,26 +827,26 @@ var data = { "name": "Tamriel Compendium - Skill Books.esp", "isActive": false, "crc": "1F348D90", - "version": "Version: 1.1", + "version": "1.1", "tagsAdd": ["Relev"] }, { "name": "WATER.esp", "isActive": false, "crc": "AFE4A968", - "version": "Version: 1.87" + "version": "1.87" }, { "name": "WetandCold.esp", "isActive": false, "crc": "E034A81F", - "version": "Version: 1.321" + "version": "1.321" }, { "name": "WetandCold - Ashes.esp", "isActive": false, "crc": "8C003085", - "version": "Version: 1.06", + "version": "1.06", "messages": [{"type": "warn", "content": "Warning: This plugin requires \"WetandCold.esp\" to be active, but it is inactive."}] }, @@ -854,7 +854,7 @@ var data = { "name": "When Vampires Attack.esp", "isActive": false, "crc": "4743D674", - "version": "Version: 1.1", + "version": "1.1", "messages": [{"type": "warn", "content": "Warning: This plugin requires \"Dawnguard.esm\" to be installed, but it is missing." }, @@ -876,13 +876,13 @@ var data = { "name": "Oblivion Gates in Cities.esp", "isActive": false, "crc": "E7D68506", - "version": "Version: 1.0" + "version": "1.0" }, { "name": "Gildergreen Regrown.esp", "isActive": false, "crc": "7AFAAD00", - "version": "Version: 1.2.5" + "version": "1.2.5" }, { "name": "TheChoiceIsYours_Dawnguard.esp", @@ -907,7 +907,7 @@ var data = { "name": "Bashed Patch, 0.esp", "isActive": false, "crc": "C2306BE5", - "version": "Version: 2013-12-13 13:55:02", + "version": "2013-12-13 13:55:02", "messages": [{"type": "warn", "content": "Warning: This plugin requires \"Dawnguard.esm\" to be installed, but it is missing." },