From 82338636ee11636d5e65fc74646de6b231039eff Mon Sep 17 00:00:00 2001 From: Martin Benjamins Date: Sun, 20 Sep 2020 01:17:12 +0200 Subject: [PATCH] Improve hotfixes page, various tooltip fixes --- css/style.css | 6 ++- dbc/css/dbc.css | 4 ++ dbc/hotfixes.php | 90 +++++++++++++++++++++++----------- dbc/index.php | 2 +- dbc/js/dbc.js | 6 ++- dbc/js/enums.js | 12 ++--- dbc/scripts/updateHotfixes.php | 10 ++-- js/tooltips.js | 13 +++-- 8 files changed, 95 insertions(+), 48 deletions(-) diff --git a/css/style.css b/css/style.css index 81b863c..af74029 100644 --- a/css/style.css +++ b/css/style.css @@ -353,7 +353,8 @@ footer p{ /* Tooltips */ .wt-tooltip{ - display: none; + display: none; + z-index: 5; } .tooltip-icon{ clear: both; @@ -380,7 +381,8 @@ footer p{ background: rgba(17, 17, 34, 0.90); color: white; margin-left: 4px; - font: normal 12px/1.5 Verdana,sans-serif; + font: normal 12px/1.5 Verdana,sans-serif; + z-index: 10; } .tooltip-desc h2{ diff --git a/dbc/css/dbc.css b/dbc/css/dbc.css index 2677262..4087f37 100644 --- a/dbc/css/dbc.css +++ b/dbc/css/dbc.css @@ -123,4 +123,8 @@ thead input { width: 100% } max-height: 200px; overflow-x: hidden; min-width: 700px; +} + +.diffTable tr td{ + padding: 2px; } \ No newline at end of file diff --git a/dbc/hotfixes.php b/dbc/hotfixes.php index 5a9b2a6..5af9915 100644 --- a/dbc/hotfixes.php +++ b/dbc/hotfixes.php @@ -116,9 +116,9 @@ "targets": 4, "render": function ( data, type, full, meta ) { if(full[4] == 1){ - return "Valid"; + return " Valid"; }else{ - return "Invalidated (" + full[4] + ")"; + return " Invalidated (" + full[4] + ")"; } } }, @@ -150,48 +150,80 @@ function getAddendum(dbc, col, value){ return addendum; } + function richValue(dbc, col, val, build, fk){ + let returnedValue = ""; + let displayValue = val; + + if(flagMap.has(dbc.toLowerCase() + "." + col)){ + displayValue = "0x" + Number(val).toString(16); + } + + if (fk == "FileData::ID"){ + returnedValue = "" + val + ""; + } else if (fk == "SoundEntries::ID" && parseInt(build[0]) > 6){ + returnedValue = "" + val + ""; + } else if (fk == "Item::ID" && val > 0){ + returnedValue = "" + val + ""; + } else if (fk == "Spell::ID" || fk == "SpellName::ID" && val > 0){ + returnedValue = "" + val + ""; + } else if (fk == "Creature::ID" && val > 0){ + returnedValue = "" + val + ""; + } else if (fk == "QuestV2::ID" && val > 0){ + returnedValue = "" + val + ""; + } else if (fk !== undefined && val > 0){ + returnedValue = "" + val + ""; + } else{ + returnedValue = displayValue; + } + + if(enumMap.has(dbc.toLowerCase() + "." + col)){ + if(val in enumMap.get(dbc.toLowerCase() + "." + col)){ + returnedValue += " (" + enumMap.get(dbc.toLowerCase() + "." + col)[val] + ")"; + }else{ + returnedValue += " (unknown)"; + } + } + + if(flagMap.has(dbc.toLowerCase() + "." + col)){ + let usedFlags = getFlagDescriptions(dbc.toLowerCase(), col, val); + usedFlags.forEach(function (flag) { + returnedValue += " (" + flag[0] + ": " + flag[1] + ")"; + }); + } + + return returnedValue; + } + function showRowDiff(dbc, build, recordID){ + var headerReq = fetch("/dbc/api/header/" + dbc.toLowerCase() + "?build=" + build).then(data => data.json()); var beforeReq = fetch("/dbc/hotfix_api.php?cacheproxy=1&dbc=" + dbc.toLowerCase() + "&build=" + build + "&col=ID&val=" + recordID + "&useHotfixes=false&calcOffset=false").then(data => data.json()); var afterReq = fetch("/dbc/hotfix_api.php?cacheproxy=1&dbc=" + dbc.toLowerCase() + "&build=" + build + "&col=ID&val=" + recordID + "&useHotfixes=true&calcOffset=false").then(data => data.json()); - Promise.all([beforeReq, afterReq]) + Promise.all([headerReq, beforeReq, afterReq]) .then(json => { - const before = json[0].values; - const after = json[1].values; + const header = json[0]; + const before = json[1].values; + const after = json[2].values; - let changes = ""; + let changes = "
"; if(Object.keys(before).length == 0){ Object.keys(after).forEach(function (key) { - let addendum = getAddendum(dbc, key, after[key]); - let displayedValue = after[key]; - if(flagMap.has(dbc.toLowerCase() + "." + key)){ - displayedValue = "0x" + Number(after[key]).toString(16); - } - changes += ""; + const displayedValue = richValue(dbc, key, after[key], build, header.fks[key]); + changes += ""; }); } else if(Object.keys(after).length == 0){ Object.keys(before).forEach(function (key) { - let addendum = getAddendum(dbc, key, before[key]); - let displayedValue = before[key]; - if(flagMap.has(dbc.toLowerCase() + "." + key)){ - displayedValue = "0x" + Number(before[key]).toString(16); - } - changes += ""; + const displayedValue = richValue(dbc, key, before[key], build, header.fks[key]); + changes += ""; }); }else{ Object.keys(before).forEach(function (key) { if(before[key] != after[key]){ if (!isNaN(before[key]) && !isNaN(after[key])) { - let addendumBefore = getAddendum(dbc, key, before[key]); - let addendumAfter = getAddendum(dbc, key, after[key]); - let displayedValBefore = before[key]; - let displayedValAfter = after[key]; - if(flagMap.has(dbc.toLowerCase() + "." + key)){ - displayedValBefore = "0x" + Number(before[key]).toString(16); - displayedValAfter = "0x" + Number(after[key]).toString(16); - } - changes += ""; + let displayedValBefore = richValue(dbc, key, before[key], build, header.fks[key]); + let displayedValAfter = richValue(dbc, key, after[key], build, header.fks[key]); + changes += ""; } else { var dmp = new diff_match_patch(); var dmp_diff = dmp.diff_main(before[key], after[key]); @@ -205,8 +237,8 @@ function showRowDiff(dbc, build, recordID){ changes += "
"+ key + ""+ displayedValue + addendum + "
" + key + "" + displayedValue + "
"+ key + ""+ displayedValue + addendum + "
" + key + "" + displayedValue + "
" + key + "" + displayedValBefore + addendumBefore + "" + displayedValAfter + addendumAfter + "
" + key + "" + displayedValBefore + " → " + displayedValAfter + "
"; - if(changes == "
"){ - changes = "No changes detected (view record)"; + if(changes == "
"){ + changes = "No changes found (view record)"; } var resultHolder = document.getElementById("resultHolder-" + dbc + "-" + build + "-" + recordID); diff --git a/dbc/index.php b/dbc/index.php index 92e3113..c2e3085 100644 --- a/dbc/index.php +++ b/dbc/index.php @@ -477,7 +477,7 @@ function loadTable(){ let idHeader = 0; $.ajax({ - "url": "/dbc/api/header/" + apiArgs, + "url": "/dbc/api/header/" + currentParams["dbc"] + "/?build=" + currentParams["build"], "success": function(json) { if(json['error'] != null){ if(json['error'] == "No valid definition found for this layouthash or build!"){ diff --git a/dbc/js/dbc.js b/dbc/js/dbc.js index 902f510..1981372 100644 --- a/dbc/js/dbc.js +++ b/dbc/js/dbc.js @@ -86,9 +86,11 @@ function openFKModal(value, location, build){ } else if (headerjson.fks[key] == "SoundEntries::ID" && parseInt(build[0]) > 6){ $("#fktable").append("" + key + "" + val + ""); } else if (headerjson.fks[key] == "Item::ID" && val > 0){ - $("#fktable").append("" + key + "" + val + ""); + $("#fktable").append("" + key + "" + val + ""); + } else if (headerjson.fks[key] == "Spell::ID" || headerjson.fks[key] == "SpellName::ID" && val > 0){ + $("#fktable").append("" + key + "" + val + ""); } else { - $("#fktable").append("" + key + "" + val + ""); + $("#fktable").append("" + key + "" + val + ""); } var cleanDBname = headerjson.fks[key].split('::')[0].toLowerCase(); diff --git a/dbc/js/enums.js b/dbc/js/enums.js index 68648fa..56ced0f 100644 --- a/dbc/js/enums.js +++ b/dbc/js/enums.js @@ -394,16 +394,16 @@ const criteriaAdditionalCondition = { const itemStatType = { 0: 'MANA', 1: 'HEALTH', - // 2: 'UNUSED', + 2: 'ENDURANCE', 3: 'AGILITY', 4: 'STRENGTH', 5: 'INTELLECT', - 6: 'SPIRIT', // Removed in 7.3.0 + 6: 'SPIRIT_UNUSED', // Removed in 7.3.0 7: 'STAMINA', - // 8: 'UNUSED', - // 9: 'UNUSED', - // 10: 'UNUSED', - // 11: 'UNUSED', + 8: 'ENERGY', + 9: 'RAGE', + 10: 'FOCUS', + 11: 'WEAPON_SKILL_RATING_OBSOLETE', 12: 'DEFENSE_SKILL_RATING', 13: 'DODGE_RATING', 14: 'PARRY_RATING', diff --git a/dbc/scripts/updateHotfixes.php b/dbc/scripts/updateHotfixes.php index 03e4070..a0b455f 100644 --- a/dbc/scripts/updateHotfixes.php +++ b/dbc/scripts/updateHotfixes.php @@ -20,13 +20,13 @@ $filesToProcess = []; foreach ($files as $file) { - if (empty($argv[1]) && filemtime($file) < strtotime("-1 hour")) { + if (empty($argv[1]) && filemtime($file) < strtotime("-2 hours")) { continue; } $md5 = md5_file($file); if (in_array($md5, $processedMD5s)) { - // echo "[Hotfix updater] [".date("Y-m-d H:i:s")."] Skipping already processed DBCache ". $file . " (" . $md5 . ")\n"; + // echo "[Hotfix updater] [" . date("Y-m-d H:i:s") . "] Skipping already processed DBCache " . $file . " (" . $md5 . ")\n"; continue; } @@ -126,6 +126,8 @@ echo "[Hotfix updater] [" . date("Y-m-d H:i:s") . "] Reloaded TACT keys\n"; } - $insertMD5->execute([$md5]); - echo "[Hotfix updater] [" . date("Y-m-d H:i:s") . "] Inserted " . $md5 . " as processed cache\n"; + if (!in_array($md5, $processedMD5s)) { + $insertMD5->execute([$md5]); + echo "[Hotfix updater] [" . date("Y-m-d H:i:s") . "] Inserted " . $md5 . " as processed cache\n"; + } } diff --git a/js/tooltips.js b/js/tooltips.js index 9f1f80e..4b4f37c 100644 --- a/js/tooltips.js +++ b/js/tooltips.js @@ -28,6 +28,8 @@ function showTooltip(el){ const tooltipDiv = document.createElement("div"); tooltipDiv.innerHTML = tooltipHTML; tooltipDiv.style.position = "absolute"; + // tooltipDiv.style.position.top = el.getBoundingClientRect().top + el.ownerDocument.defaultView.pageYOffset; + // tooltipDiv.style.position.left = el.getBoundingClientRect().left + el.ownerDocument.defaultView.pageXOffset; tooltipDiv.style.zIndex = 5; tooltipDiv.style.display = "block"; tooltipDiv.style.marginLeft = tooltipMarginLeft + "px"; @@ -49,7 +51,7 @@ function showTooltip(el){ generateQuestTooltip(tooltipTargetValue, tooltipDiv); } else if (tooltipType == 'fk'){ if ((el.dataset.fk == "Map::ID" || tooltipTargetValue != 0) && tooltipTargetValue != -1){ - generateFKTooltip(el.dataset.fk, tooltipTargetValue, tooltipDiv); + generateFKTooltip(el.dataset.fk, tooltipTargetValue, tooltipDiv, localBuild); } else { hideTooltip(el); } @@ -313,10 +315,13 @@ function generateSpellTooltip(id, tooltip, build) return; } - console.log(data); - const calcData = data[0]; + if (calcData["name"] == null){ + calcData["name"] = "Unknown spell"; + calcData["description"] = "It is possible this spell was added through hotfixes or is entirely unavailable in the client."; + } + tooltipDesc.innerHTML = "

" + calcData["name"] + "

"; if (calcData["description"] != null){ tooltipDesc.innerHTML += "

" + calcData["description"].replace("\n", "

"); @@ -328,7 +333,7 @@ function generateSpellTooltip(id, tooltip, build) }); } -function generateFKTooltip(targetFK, value, tooltip) +function generateFKTooltip(targetFK, value, tooltip, build) { console.log("Generating foreign key tooltip for " + value);