// ==UserScript== // @name del.icio.us tag grep (list + cloud) // @description incremental grep on del.icio.us tags bar(list + cloud) // @include http://del.icio.us/* // @exclude http://del.icio.us/settings/* // @exclude http://del.icio.us/inbox/* // @exclude http://del.icio.us/popular/* // @exclude http://del.icio.us/ // ==/UserScript== // // 2005.6.6 Adjusted to new delicious DOM structure // 2005.6.7 remove textbox under 'options' (function() { function elementize(e) { if (typeof e == 'string') { e = document.getElementById(e); } return e; } /////////////////////////////////// // incremental grep // // quotemeta and isearch are originally from // http://namazu.org/~satoru/blog/archives/000019.html // // Set up javascript incremental grep components. // elemText : text input element for grep condition. id name or ref of elem. // elemDiv : parent of all the grep'ed elements. id name or ref of elem. // tagName : grep'ed elements tag name(eg, span, li, etc.). // className : grep'ed elements css class name. // display : display mode for grep'ed elements. inline or block. // contentsGetter : function which takes one arguments. // Called for each grep'ed elements. Shuld return // logically contents of element(passed as argument). // var IncGrep = function(elemText, elemDiv, tagName, className, display, contentGetter) { this.elemText = elementize(elemText); this.elemDiv = elementize(elemDiv); this.tagName = tagName; this.className = className; this.display = display; this.getLineContent = contentGetter; } IncGrep.prototype.quotemeta = function (string) { return string.replace(/(\W)/, "\\$1"); } IncGrep.prototype.createCache = function () { var cache = []; var spans = this.elemDiv.getElementsByTagName(this.tagName); var i, e, j = 0, len = spans.length; for (i = 0; i < len; i++) { e = spans[i]; if (e.className == this.className) { cache[j++] = {elem:e, text:this.getLineContent(e)}; } } this.cache = cache; } IncGrep.prototype.isearch = function (pattern) { var regex = new RegExp(this.quotemeta(pattern), "i"); if (!this.cache) { this.createCache(); } var cent, i, c = this.cache, l = c.length; for (i = 0; i < l; i++) { cent = c[i]; if (cent.text.match(regex)) { cent.elem.style.display = this.display; } else { cent.elem.style.display = "none"; } } } IncGrep.prototype.grepFeedback = function () { this.isearch(this.elemText.value); } /////////////////////////////////// // icon data var searchIcon = "data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%10%00%00%00%10%08%06%00%00%00%1F%F3%FFa%00%00%00%04gAMA%00%00%D9%04%DC%B2%DA%02%00%00%01%F0IDATx%9C%A5%92MO%13a%10%80%9F%EDvKd%89%05M%15%AC%11%A5VS%89%07%FC%80%A6%1E4%18N%5C%08%9Ap%C0%23%FD%01%BD%00'%8CW%13%F9%01%7B2i%BC%19%E3E%20%A6U%0F%C4%40%1B%2F%26%DD%1Aji%8A%D8%15%5BmKe%09m%F1%F5%D0%C4%04%D861%3E%C9%5C%DE%CC%3C%93%99y%E1%3F%91%0E%3F%C4b9%A1%EB%DB%00%B8%5Cm%8C%8E%5E8%92%D3T0%3D%1D%13%C6%F7*%D7%86%5Ctv(%AC%AE%E4)%16L%E6%E6%AE%D0%DF%7F%BA%A5%88%99%99%98%98%9FO%88J%A5*%CC%BA%10_v%1B%F1b1'%26%26%DE%8Al%F6%A7%B0%AA%B3%99%A6%A9%C5%E3%B9%B5%DCV%95%60%D0%CB%AEC%E1c%05%B6%F6%20_%853%FE%1E%CE%0F%9Cba%C1%B0ll%13B%3CJ%24%CA%EF%86%FC.%DA%DA%15%D2%26%B4%CBpBiD%A7%027n%F7%90%C9%ECX%0BB%A1P1%1C~%96TU%85_%FB%60%A3!p%DA%1B%02U%06%87%AD%F9%E86M%D3L%5D%8FeVW%F2%D8-%D6%24%01%19%BD%84%AA%DA%AD%05%00%86%F1%FA%E5z%CAx%BA%FC%C6%A0%5D%06s%1F%CAu(%D6%60m%BD%C2%F2%E2%06%81%81%92%A5%E0oO%A7%D3%DB%E7%F7%3F%5E%1A%BA%7B%C9%EB%BB%D5%83C%86%AC%5E%E2%FD%D2%06%237S%1C%2B%3CA%EDrso6*Y%0A%00%1C%8En%9F%C736%EDt%5E%AC%F5%F6%9E%C3%E7%EB%BB32%DC%E1M%BF%1A%E3%F8%D9AdY%A6%BA%BDq%40%D2%F4sD%22%11w%20%10x%08%04%8BF%92%A86%C9%C9%AB%0F%D8%FB%F1%09v%BF1%3E%1B%91Z%0A%0E%F35%FDAD%B5IT%EF%7D%EA%E5%CF(%B5%02%E3%B3%11%A9%C5%81%0E%E2%F6%5C%97%86%A7%C2%EC%A4%9ES%FB-S4%F4%D6%234c3%15%17%9B%C9%08%5D%DD%3E.%0F%8E%FDs%FD%11%FE%00%EB%94%BEd%E8%BAS%1C%00%00%00%00IEND%AEB%60%82"; var redX = "data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%12%00%00%00%12%08%06%00%00%00V%CE%8EW%00%00%00%04gAMA%00%00%D9%04%DC%B2%DA%02%00%00%00%CCIDATx%9C%AD%94A%0E%C2%20%10E%3F%C6C%FC%B0!%3D%81%E91%BA%D2%DB%E8%11%F46z%92%A6'%20l%08W%60%03%EE%B0%AD%8C%B5%09%B3%82%01%1E%7F%26%1FT%CEY%A1A%1CZ%40%00%E0(-%BC%94%BA%D7%F2%E7%9Co%151I%ADK%93%00%5B%C0Ei%FFBj%7B%9B%F5%A8%80%D67%0C1%A2w%AE%CC%7B%E70%C4(%AA%12%9B%1DB%00%C9%02%23%89%10%82%A8H%04%8D%C6%A0w%0E%24%0Bx4F%04%FD%ECQJ%A9%3A%AE%84%12%15%9D%AC%85%D6%1A%DE%7B%00%80%D6%1A%B0%16S%D7%D5%B6g%11D%12%DE%FB%CFAkA%12%93%24in%C8%3D%3E%02%96%A6l%E6%A3%AF%97%FF%04%1E%7B%D5TA%5B%C0%0Bp%5D%E7Z%7DEm%E3%0D%5D%EAQH%84%D2%C8O%00%00%00%00IEND%AEB%60%82"; ///////////////////////////////////////////////////// // search box component function SearchBox(message, icon, deleteIcon) { var container = document.createElement('div'); container.innerHTML = '
'+ ' | '+
' '+
' '+message+' '+
''+
' | '+
'