wmlunits: Set up popup menu events ASAP

Fixes having to wait until the page is fully loaded before using the
popup menus, which takes quite a while for the unit tree pages.
This commit is contained in:
Ignacio R. Morelle 2017-08-13 04:27:19 -03:00
parent 667f9a2f11
commit b96dc224d0
2 changed files with 30 additions and 30 deletions

View file

@ -686,6 +686,8 @@ class HTMLOutput:
write('</ul></div>\n')
write('<script>\nwmlunits_menu_setup();\n</script>');
def pic(self, u, x, recursion=0):
if recursion >= 4:
error_message(

View file

@ -1,7 +1,7 @@
/*
* Popup menu implementation for the Wesnoth units database
*/
(function() {
var wmlunits_menu_setup = (function() {
var menus = [];
var visibleMenu = false;
@ -41,40 +41,38 @@
return e.className.search(/\bnavbar\b/) != -1;
}
window.addEventListener("load", function() {
var navItems = document.getElementsByClassName("popupcontainer");
var navItems = document.getElementsByClassName("popupcontainer");
// Set event handlers for individual menu triggers.
for (var i = 0; i < navItems.length; ++i) {
var navItem = navItems[i],
menu = navItem.getElementsByClassName("popupmenu")[0];
// Set event handlers for individual menu triggers.
for (var i = 0; i < navItems.length; ++i) {
var navItem = navItems[i],
menu = navItem.getElementsByClassName("popupmenu")[0];
menus.push(menu);
menus.push(menu);
var id = menu.id,
a = navItem.getElementsByClassName("popuptrigger")[0];
var id = menu.id,
a = navItem.getElementsByClassName("popuptrigger")[0];
a.addEventListener("click", function(event) {
event.preventDefault();
event.stopPropagation();
toggleMenu(event, event.target.nextElementSibling);
}, false);
a.addEventListener("click", function(event) {
event.preventDefault();
event.stopPropagation();
toggleMenu(event, event.target.nextElementSibling);
}, false);
}
// Dismiss all visible menus on click outside them.
document.addEventListener("click", function(event) {
if (!visibleMenu) {
return;
}
// Dismiss all visible menus on click outside them.
document.addEventListener("click", function(event) {
if (!visibleMenu) {
return;
}
var parent = event.target;
while(parent && !isMenuBox(parent) && !isNavBar(parent)) {
parent = parent.parentElement;
}
var parent = event.target;
while(parent && !isMenuBox(parent) && !isNavBar(parent)) {
parent = parent.parentElement;
}
if (!parent || !isMenuBox(parent)) {
hideMenus();
}
}, false);
if (!parent || !isMenuBox(parent)) {
hideMenus();
}
}, false);
})();
});