NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name Obědy // @namespace Lama // @description Zvyrazneni obedu // @include *ama.cz/www/* // @version 1.01 // @grant GM_registerMenuCommand // @grant GM_getValue // @grant GM_setValue // ==/UserScript== var weekDays = ["Pondě", "Úterý", "Střed", "Čtvrt", "Pátek"]; function searchFood() { // ulozeni GM promennych v pameti var foodList = JSON.parse(GM_getValue ("foodList", [])); // !!!! Vyhledavani seznamu jidel v dokumentu // Vzhledem k nepritomnosti id nebo jmen je to velice sproste // a zavisle na strukture dokumentu - pri jeho zmene prestane fungovat !!!! var menuFrame = document.getElementsByTagName("center")[1]; var menuTdList = menuFrame.getElementsByTagName("td"); var menuNodes = menuTdList[menuTdList.length - 1].childNodes; //posledni TD obsahuje seznam jidel var day = 0; var option = 0; // Pro kazdy prvek z daneho elementu for(var i = 0; i < menuNodes.length; i++) { var node = menuNodes[i]; // Pokud se jedna o textovy prvek (tj ne tag) a je tam rozumny text if(node.nodeType == Node.TEXT_NODE && node.nodeValue.length > 3) { var today = weekDays.indexOf(node.nodeValue.substring(1,6)); if(today >= 0) { // retezec byl nalezen day = today; option = 0; } var found = false; // Prohledej vsechny zakazene slova foodList.forEach(function(food) { var search = node.nodeValue.match(new RegExp(food)); // Pokud naleznes zakazene slovo v elementu, pridej k nemu span se styly if(search !== null && found == false) { replaceNode(node); if(option >= 2 && option < 6) { console.log(day+", "+option); changeInputColor(day, option-2); found = true; } } }); option += 1; } } } searchFood(); // ----------------------------------------------------------------------------- function changeInputColor(day, option) { var menuFrame = document.getElementsByTagName("center")[1]; var table = menuFrame.getElementsByTagName("table")[day+1]; var td = table.getElementsByTagName("tr")[1].getElementsByTagName("td")[option].childNodes; replaceNode(td[0]); // text s cislem jidla } function replaceNode(node) { var oldText = node.nodeValue; var parent = node.parentNode; var wrapSpan = document.createElement ("span"); wrapSpan.textContent = oldText; //wrapSpan.style.color = 'red'; wrapSpan.style.backgroundColor = 'yellow'; parent.insertBefore (wrapSpan, node); parent.removeChild (node); } // ----------------------------------------------------------------------------- // Přidání dialogu do GM menu k uložení nového nechtěného jídla GM_registerMenuCommand ("Obědy: přidat potravinu", addFood); GM_registerMenuCommand ("Obědy: odebrat potravinu", removeFood); // Funkce vyvolá dialog k přidání jídla a uloží jej k seznamu nechtěných jídel function addFood() { var newFoodList = JSON.parse(GM_getValue ("foodList", [])); food = prompt("Přidat jídlo k zvýraznění:\n(Stačí zadat kořen slova)\n\n"+newFoodList); if(food.length > 0) { newFoodList.push(food); GM_setValue("foodList", JSON.stringify(newFoodList)); searchFood(); } } function removeFood() { var oldFoodList = JSON.parse(GM_getValue ("foodList", [])); selected = prompt("Jídlo k odebrání:\n(Nutno použít Ctrl-C, Ctrl-V)\n\n"+oldFoodList); if(selected.length > 0) { var newFoodList = []; console.log("test"); oldFoodList.forEach(function(food) { if(food != selected) { newFoodList.push(food); } }); GM_setValue("foodList", JSON.stringify(newFoodList)); searchFood(); } }