// ==UserScript== // @name Colour Bag // @namespace kol.interface.unfinished // @description Lets you colour inventory text in KOL. Click on inventory item text to rotate colours. // @include https://*kingdomofloathing.com/inventory.php* // @include https://*kingdomofloathing.com/storage.php* // @include https://*kingdomofloathing.com/managestore.php* // @include https://*kingdomofloathing.com/multiuse.php* // @include https://*kingdomofloathing.com/managecollection.php* // @include https://*kingdomofloathing.com/town_sellflea.php* // @include https://*kingdomofloathing.com/wand.php* // @include https://*kingdomofloathing.com/familiar.php* // @include https://*kingdomofloathing.com/craft.php* // @include https://*kingdomofloathing.com/knoll.php* // @include https://*kingdomofloathing.com/hiddencity.php* // @include https://*kingdomofloathing.com/closet.php* // @include https://*kingdomofloathing.com/clan_stash.php* // @include https://*kingdomofloathing.com/lair* // @include https://*kingdomofloathing.com/fight.php* // @include https://*kingdomofloathing.com/town_right.php?place=untinker* // @include https://*kingdomofloathing.com/account.php // @grant GM_getValue // @grant GM_setValue // @version 2.12 // @downloadURL https://update.greasyfork.icu/scripts/4206/Colour%20Bag.user.js // @updateURL https://update.greasyfork.icu/scripts/4206/Colour%20Bag.meta.js // ==/UserScript== // Version 2.12 // - switch to https // Version 2.11 // - add @grant, convert GM_log to console.log // Version 2.1 // - now allows colours to be set in Hagnk's // - added a lock option to avoid accidental re-settings // Version 2.0.1 // - added fight page so combat items are coloured (old style combat only) // Version 2.0 // - major redesign, now based on item id instead of descitem // - now applies to many more lists // - now applies when extra drop-downs are created (mall, collection, etc) // - now applies to recently equipped list // - as a tradeoff, colour does not show up in actual equipped items any more // Version 1.1 // - now colours items in many lists (Hagnks, mall, zapping, flea market) // Version 1.0 // Feel free to add or remove colour names. // (the first entry is special, don't change it.) var colourarray = ['','red','green','blue','orange', 'brown', 'purple', 'steelblue', 'silver', 'seagreen', 'SandyBrown', 'crimson' ]; // attribute name for storing colour in clickable entries var tddcolour='colourbagcolour'; // attribute name for storing item id in clickable entries var tdditemid='colourbagitem'; // id of script holding inserted css text var finalcssid='colourbagcssid'; // greasemonkey global var for storing colour list var clist='colourlist2'; // permanent storage, and update the current css function saveColourlist(cl) { var s = ''; for (var d in cl) { if (cl[d]) s += d+':'+cl[d]+';'; } GM_setValue(clist,s); createCss(cl); } // load the colourlist; consists of itemid:colour pairs function loadColourlist() { var colourlist={}; var s = GM_getValue(clist,''); if (s!='') { var sp = s.split(';'); for (var i=0;i0) { // found text var t = bref[0]; t.title='Click to change colour.'; t.setAttribute(tdditemid,tddid); if (colourlist[tddid]) { t.setAttribute(tddcolour,colourlist[tddid]); } // add up and down event listeners t.addEventListener("click", changeColourUp, true); t.addEventListener("contextmenu", changeColourDown, true); } } } } // handler for left clicking function changeColourUp(e) { changeColour(this,false); } // handler for right clicking function changeColourDown(e) { changeColour(this,true); if (e.stopPropagation) e.stopPropagation(); } // common handler function for changing colour function changeColour(x,dec) { // get original colour var orgcolour=x.getAttribute(tddcolour); // get item id var desc=x.getAttribute(tdditemid); var newcolour; if (!orgcolour) { if (!dec) newcolour=colourarray[1]; else newcolour=colourarray[colourarray.length-1]; } else { for (var i=0;ib, option[value="'+d+'"]'; else icl[c]='td[id="i'+d+'"]>b, option[value="'+d+'"]'; } var finalcss=''; for (var c in icl) { if (icl[c]) finalcss += icl[c]+' { color:'+c+'; } '; } //console.log("finalcss="+finalcss); addGlobalStyle(finalcss,finalcssid); } // -------------------------------------------- // ---------- account menu option ------------- // -------------------------------------------- // Charon's code function buildPrefs() { if (!document.querySelector('#privacy')) return; if (!document.querySelector('#scripts')) { //scripts tab is not built, do it here var scripts = document.querySelector('ul').appendChild(document.createElement('li')); scripts.id = 'scripts'; var a = scripts.appendChild(document.createElement('a')); a.href = '#'; var img = a.appendChild(document.createElement('img')); img.src = 'http://images.kingdomofloathing.com/itemimages/cmonkey1.gif'; img.align = 'absmiddle'; img.border = '0'; img.style.paddingRight = '10px'; a.appendChild(document.createTextNode('Scripts')); a.addEventListener('click', function (e) { //make our new tab active when clicked, clear out the #guts div and add our settings to it e.stopPropagation(); document.querySelector('.active').className = ''; document.querySelector('#scripts').className = 'active'; document.querySelector('#guts').innerHTML = '
'; document.querySelector('#guts').appendChild(getSettings()); }, false); } else { //script tab already exists document.querySelector('#scripts').firstChild.addEventListener('click', function (e) { //some other script is doing the activation work, just add our settings e.stopPropagation(); document.querySelector('#guts').appendChild(getSettings()); }, false); } } function getSettings() { //build our settings and return them for appending var contents = document.createElement('div'); contents.id = 'recipecounterprefs'; var fieldset = contents.appendChild(document.createElement('fieldset')); fieldset.setAttribute('style', 'width:33%; margin-top:20px'); var legend = fieldset.appendChild(document.createElement('legend')); legend.className = 'subhead'; legend.textContent = 'Colour Bag'; var section = fieldset.appendChild(document.createElement('div')); section.className = 'indent'; section.appendChild(buildSettings()); return contents; } function buildSettings() { var d = document.createElement('div'); d.appendChild(document.createTextNode('Lock colour settings: ')); var ar = document.createElement('a'); ar.setAttribute('href','#'); if (GM_getValue('locked',false)) { ar.appendChild(document.createTextNode('now locked')); ar.setAttribute('title','Changing text colours is now prevented. Click to toggle.'); } else { ar.appendChild(document.createTextNode('now unlocked')); ar.setAttribute('title','Changing text colours is now allowed. Click to toggle.'); } ar.addEventListener('click',toggleLock,false); ar.setAttribute('id','colourbaglock'); //li.appendChild(ar); //ul.appendChild(li); d.appendChild(ar); return d; } function toggleLock() { var ar = document.getElementById('colourbaglock'); if (GM_getValue('locked',false)) { GM_setValue('locked',''); ar.replaceChild(document.createTextNode('now unlocked'),ar.firstChild); ar.setAttribute('title','Changing text colours is now allowed. Click to toggle.'); } else { GM_setValue('locked','true'); ar.replaceChild(document.createTextNode('now locked'),ar.firstChild); ar.setAttribute('title','Changing text colours is now prevented. Click to toggle.'); } } // grab the stored colour list var firstcl = loadColourlist(); // create the css createCss(firstcl); // if in inventory frame, add edit links too if (window.location.pathname.indexOf('/inventory.php')>=0 || window.location.pathname.indexOf('/storage.php')>=0) { if (!GM_getValue('locked',false)) addEditLinks(); } else if (window.location.pathname.indexOf('/account.php')==0) { buildPrefs(); }