// ==UserScript==
// @name Crafting Tab Organizer
// @namespace http://tampermonkey.net/
// @version 0.2
// @author Alucardeck
// @description Crafting tab organizer for SF
// @match https://play.soulforged.net/
// @license MIT
// @grant none
// ==/UserScript==
(function() {
'use strict';
var organized = false;
var craftMap = {};
craftMap["Crafting"] = "375c63,11b698,1bda06,0f664a,ce8de9,fcf7c9";
craftMap["Crafting (Tools)"] = "fd63c7,3ca9dd,08639e,2affab,babb47,c30017,a0b77a,068720,58b899";
craftMap["Crafting (Furniture)"] = "2078f7,e0f499";
craftMap["Cooking"] = "7a1efc,5444b8,a6e350,519cef,2758da,3a9ea3";
craftMap["Leatherworking"] = "8090f2,90dcbf,20275f,b1c5a2,c62494,5f9c13,742fbb,91849a,e0bac1,f087b3,44fcbb,0b0912,095161,a0b79e,28ca71";
craftMap["Tailoring"] = "771558,e80e86,a6534a,479874";
craftMap["Farming"] = "286daf,c01bcc,b9c19e";
craftMap["Carpentry"] = "dcc180,d2c3c4,bc9a57,9713d7,edaccb,1b907e";
craftMap["Doctoring"] = "a929f9,cb108a,ac0744";
craftMap["Doctoring (Butcher)"] = "74c20f,a2636a,dc3986,dc4872,3c77c0,2d10b7,06e2f7,cf2e71,1323ef,3a378f";
craftMap["Not Mapped"] = "";
var categoryOrder = Object.keys(craftMap).sort();
function organizeCrafts() {
// check if tab is active
if (!getCraftIconTab().classList.contains("active")) {
organized = false;
return;
}
if (organized)
return;
organized = true;
// header
var mainBlock = document.querySelector("#app > div.main-component > div > div.controls > div > div > div > div.tab-contents > div > div > div > div > div:nth-child(1)");
var header = mainBlock.firstChild;
mainBlock.removeChild(header);
var craftNodeList = mainBlock.querySelectorAll("div > div.craft-list-item");
var mappedItems = {};
[].forEach.call(craftNodeList, craft => {
var block = craft.parentElement;
var code = getCode(craft);
var category = getCategory(code);
if (category == "Not Mapped") {
appendCodeToButton(craft, code);
}
if (!mappedItems[category])
mappedItems[category] = [];
mappedItems[category].push(block);
mainBlock.removeChild(block);
});
for (var category of categoryOrder) {
if (mappedItems[category]) {
var categoryHeader = header.cloneNode(true);
categoryHeader.firstChild.firstChild.innerHTML = category;
mainBlock.appendChild(categoryHeader);
for (var item of mappedItems[category]) {
mainBlock.appendChild(item);
}
}
}
}
function appendCodeToButton(craft, code) {
var btn = craft.querySelector("div > div.buttons");
var div = document.createElement('div');
div.innerText = code;
btn.appendChild(div);
}
function getCode(craft) {
return craft.firstChild.firstChild.firstChild.firstChild.firstChild.style.backgroundImage.substr(14, 6);
}
function getCategory(code) {
for (var category of categoryOrder) {
if (craftMap[category].includes(code)) {
return category;
}
}
return "Not Mapped";
}
function getCraftIconTab() {
return document.querySelector("#app > div.main-component > div > div.controls > div > div > div > div.tab-headers > div.tab-header:nth-child(4)");
}
document.addEventListener("click", () => organizeCrafts());
organizeCrafts();
})();