NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
"use strict";
// ==UserScript==
// @name March of History - sort cities select
// @namespace https://github.com/avalenti89/march-of-history/
// @version 0.1.8
// @description Sort the cities list on select, based on population or priority/alphabetical
// @author avalenti89
// @match http://www.marchofhistory.com/EcranPrincipal.php
// @grant none
// @license MIT
// @run-at document-end
// @require https://openuserjs.org/src/libs/avalenti89/March_of_History_-_utilities.js
// @require https://openuserjs.org/src/libs/avalenti89/March_of_History_-_cities.js
// ==/UserScript==
/* jshint esversion: 6 */
var __read = (this && this.__read) || function (o, n) {
var m = typeof Symbol === "function" && o[Symbol.iterator];
if (!m) return o;
var i = m.call(o), r, ar = [], e;
try {
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
}
catch (error) { e = { error: error }; }
finally {
try {
if (r && !r.done && (m = i["return"])) m.call(i);
}
finally { if (e) throw e.error; }
}
return ar;
};
var __spread = (this && this.__spread) || function () {
for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));
return ar;
};
console.log("Sort Cities select", "script loaded");
var moh_sort_cities_select = (function () {
var sortKey = "population";
var sortDesc = true;
var sortedCities = [];
var getSortedCities = function () {
var list = document.querySelector("#villeListeVilles ul");
var elements = list === null || list === void 0 ? void 0 : list.querySelectorAll("li");
if (!(elements === null || elements === void 0 ? void 0 : elements.length))
return;
console.log("sorting by " + sortKey + (sortDesc ? "desc" : ""));
sortedCities = moh_cities.cities.length
? moh_cities.sortBy(sortKey, sortDesc)
: __spread(elements).reduce(function (prev, el) {
var _a, _b;
var action = el.querySelector(".action");
var id = action === null || action === void 0 ? void 0 : action.getAttribute("data-idville");
var name = MoH_Utils.cleanText((_b = (_a = el.querySelector(".deroulantVillesNomProvince")) === null || _a === void 0 ? void 0 : _a.innerText) !== null && _b !== void 0 ? _b : "").replace("seignory of ", "");
if (!id || !name)
return prev;
var city = {
id: Number(id),
name: name,
};
return __spread(prev, [city]);
}, [])
.sort(function (a, b) { return a.name.localeCompare(b.name); });
};
var sortSelect = function () {
var list = document.querySelector("#villeListeVilles ul");
var elements = list === null || list === void 0 ? void 0 : list.querySelectorAll("li");
if (!(elements === null || elements === void 0 ? void 0 : elements.length))
return;
console.log("sorting by " + sortKey + (sortDesc ? "desc" : ""));
var sortedNames = sortedCities.map(function (city) { return city.name; });
var sorted = __spread(elements).sort(function (a, b) {
var _a, _b, _c, _d;
var textA = MoH_Utils.cleanText((_b = (_a = a.querySelector(".deroulantVillesNomProvince")) === null || _a === void 0 ? void 0 : _a.innerText) !== null && _b !== void 0 ? _b : "").replace("seignory of ", "");
var textB = MoH_Utils.cleanText((_d = (_c = b.querySelector(".deroulantVillesNomProvince")) === null || _c === void 0 ? void 0 : _c.innerText) !== null && _d !== void 0 ? _d : "").replace("seignory of ", "");
var priorA = sortedNames.findIndex(function (val) { return textA.includes(val); });
var priorB = sortedNames.findIndex(function (val) { return textB.includes(val); });
return priorA - priorB;
});
elements.forEach(function (el) { return el.remove(); });
sorted.forEach(function (el) {
var action = el.querySelector(".action");
if (!action)
return;
el.title = MoH_Utils.cleanText(action.innerText) + " - " + action.getAttribute("data-idville");
list === null || list === void 0 ? void 0 : list.append(el);
});
};
var setArrows = function () {
var _a, _b;
var currentCityElement = document.querySelector("#villageWrapper > div.modaleCarte > div > div > div.menuVillageVilles > div.deroulantVilles > div > div > span.deroulantVillesNomProvince");
if (!currentCityElement)
return;
var currentCityName = MoH_Utils.cleanText(currentCityElement.innerHTML).replace("seignory of ", "");
var currentCity_index = sortedCities.findIndex(function (city) {
return city.name === currentCityName;
});
var prev_city = (_a = sortedCities[currentCity_index - 1]) !== null && _a !== void 0 ? _a : sortedCities[sortedCities.length - 1];
var next_city = (_b = sortedCities[currentCity_index + 1]) !== null && _b !== void 0 ? _b : sortedCities[0];
if (next_city.id && prev_city.id) {
var prev_city_button = document.querySelector("#villageWrapper > div.modaleCarte > div > div > div.menuVillageVilles > button.btnDirectionnelLeft.action");
var next_city_button = document.querySelector("#villageWrapper > div.modaleCarte > div > div > div.menuVillageVilles > button.btnDirectionnelRight.action");
if (!prev_city_button || !next_city_button)
return;
prev_city_button.setAttribute("data-idville", prev_city.id.toString());
prev_city_button.setAttribute("title", prev_city.name);
next_city_button.setAttribute("data-idville", next_city.id.toString());
next_city_button.setAttribute("title", next_city.name);
}
};
var run = function () {
var _a = [];
for (var _i = 0; _i < arguments.length; _i++) {
_a[_i] = arguments[_i];
}
var _b = __read(_a, 2), _sortKey = _b[0], _desc = _b[1];
sortKey = _sortKey !== null && _sortKey !== void 0 ? _sortKey : sortKey;
sortDesc = _desc !== null && _desc !== void 0 ? _desc : sortDesc;
getSortedCities();
sortSelect();
setArrows();
};
MoH_Utils.checkPageChange("#ecranVille", function () {
run();
});
return {
sortKey: sortKey,
sortDesc: sortDesc,
run: run,
sortSelect: sortSelect,
setArrows: setArrows,
};
})();
window.moh_sort_cities_select = moh_sort_cities_select;