NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name Grepolis Command List Fix // @namespace Naz // @version 0.2.2 // @description Fixes the problem of command window disappearing on click // @author naz // @updateURL https://openuserjs.org/meta/naz7/Grepolis_Command_List_Fix.meta.js // @downloadURL https://openuserjs.org/src/scripts/naz7/Grepolis_Command_List_Fix.user.js // @include http://*.grepolis.*/game* // @include https://*.grepolis.*/game* // @grant none // ==/UserScript== function GPCLF() { var head = document.getElementsByTagName('head')[0]; function addStyle(css) { if (!head) return; var style = document.createElement('style'); style.type = 'text/css'; style.innerHTML = css; head.insertBefore(style, head.firstChild); } // Set the visibility of the command list and the cancel buttons to visible, // because they're set to hidden when clicking anywhere in the commands window, // and when cancelling a movement the window disappears, which is quite annoying addStyle(` #toolbar_activity_commands_list.fast .js-dropdown-item-list > div { visibility: visible !important } #toolbar_activity_commands_list.fast .remove { visibility: visible !important } `); // Hide cancel button for commands that can't be cancelled (colonizations, incoming movements, movements launched +10 minutes ago...) function updateCommands() { // Iterate the commands/movements $("#toolbar_activity_commands_list").find('.content.js-dropdown-item-list').children("div").each(function() { $(this).attr("class", "visible"); if ($(this).attr("data-starttime") == "-1") { // This command can't be cancelled, so just hide the cancel button (red cross) var crossToHide = $(this).find('.remove').first().attr("style", "visibility: hidden !important"); } }); } function showWindowOnRemove(removeBtn) { //console.log($(removeBtn).attr('class')); if ($(removeBtn.parentElement).hasClass("command")) { if ($("#toolbar_activity_commands_list").css("display") == "none") { updateCommands(); $("#toolbar_activity_commands_list").css("display", "block"); } //console.log("command removal"); } else if ($(removeBtn.parentElement).hasClass("trade")) { if ($("#toolbar_activity_trades_list").css("display") == "none") { $("#toolbar_activity_trades_list").css("display", "block"); } //console.log("trade removal"); } else { if ($("#toolbar_activity_recruits_list").css("display") == "none") { $("#toolbar_activity_recruits_list").css("display", "block"); } //console.log("recruitment removal"); } } // Remove the commands of the window function removeCommands() { // Get the command list and remove all the divs corresponding to commands $("#toolbar_activity_commands_list").find('.content.js-dropdown-item-list').children("div").remove(); } // Make the window appear again, because by default it's being hidden when leaving the area of the window $(document.body).on("mouseleave", "#toolbar_activity_commands_list", function() { setTimeout(function () { updateCommands(); $("#toolbar_activity_commands_list").css("display", "block"); }, 50); // If it didn't work, try again a bit later setTimeout(function () { updateCommands(); if ($("#toolbar_activity_commands_list").css("display") == "none") { $("#toolbar_activity_commands_list").css("display", "block"); } }, 200); }); // Make the window appear again, because by default it's being hidden when cancelling a command $(document.body).on("mousedown", ".remove", function() { var removeBtn = this; setTimeout(function () { if ($(removeBtn.parentElement).hasClass("command")) { updateCommands(); $("#toolbar_activity_commands_list").css("display", "block"); } }, 50); // If it didn't work, try again a bit later setTimeout(function () { showWindowOnRemove(removeBtn); }, 200); }); $(document.body).on("mouseover", ".commands", function() { // In case there's some other script that allows to drag the window if ($("#toolbar_activity_commands_list").hasClass("ui-draggable")) { if ($("#toolbar_activity_commands_list").css("display") == "none") { // Remove style top and left properties and leave only the display property // so it goes back to default position, right below the sword icon, // otherwise if the window is far away from the icon, it will disappear // when mouseleaving the icon and won't be able to reach to window with the mouse $("#toolbar_activity_commands_list").attr("style", "display: none"); } } }); // When hovering the sword icon that shows the command window, update the window, // (remove cancel buttons that shouldn't be there) $(document.body).on("mouseenter", ".commands", function() { setTimeout(function () { updateCommands(); }, 100); }); // When hovering the trading icon that shows the active trades, bring the window to the front, // because you may want to see the trades but the overlapping command window won't let you see, // and it's also likely that you didn't really want to hover the trading icon, so the window won't // stay active like the command window $(document.body).on("mouseover", ".trades", function() { var currZ = $("#toolbar_activity_commands_list").css("z-index"); $("#toolbar_activity_trades_list").css("z-index", ((currZ * 1) + 1)); }); // Back to its normal state, just in case... $(document.body).on("mouseleave", "#toolbar_activity_trades_list", function() { $("#toolbar_activity_trades_list").css("z-index", 900); }); // Same for recruiting window $(document.body).on("mouseover", ".recruits", function() { var currZ = $("#toolbar_activity_commands_list").css("z-index"); $("#toolbar_activity_recruits_list").css("z-index", ((currZ * 1) + 1)); }); // Back to its normal state, just in case... $(document.body).on("mouseleave", "#toolbar_activity_recruits_list", function() { $("#toolbar_activity_recruits_list").css("z-index", 900); }); $(document.body).on("mouseover", ".js-queue-item", function() { setTimeout(function () { var currZ = $("#toolbar_activity_recruits_list").css("z-index"); $(".tooltip_with_arrow.arrow-right-top").css("z-index", (currZ * 1) + 1); }, 200); }); // Not really sure whether this is actually needed, I think the tooltipgets destroyed on mouseleave /*$(document.body).on("mouseleave", "#toolbar_activity_recruits_list", function() { $(".tooltip_with_arrow.arrow-right-top").css("z-index", 900); });*/ // When sending or cancelling commands, update the command window by hiding wrong cancel buttons $(document).ajaxComplete(function(event, xhr, settings) { var isCommandsUpdate = (settings.url).indexOf("frontend_bridge"); // returns -1 if it isn't a frontend_bridge AJAX response var isTownChanged = (settings.url).indexOf("town_info"); if (isCommandsUpdate >= 0 || isTownChanged >= 0) { setTimeout(function () { $(".commands").trigger("mouseover"); }, 50); updateCommands(); } }); } GPCLF();