userstyles-stats

By samlt Last update Oct 25, 2009 — Installed 359 times. Daily Installs: 2, 2, 4, 9, 5, 2, 2, 3, 2, 2, 4, 5, 2, 4, 4, 2, 3, 4, 4, 4, 3, 3, 3, 3, 2, 5, 5, 3, 3, 2, 4, 2

There are 19 previous versions of this script.

// ==UserScript==
// @name             userstyles-stats
// @namespace        http://userscripts.org/scripts/show/50875
// @description      displays style rating, number of vote and install count on search result & user pages
// @include          http://userstyles.org/*
// @version          1.0
// ==/UserScript==

var links = document.evaluate('//ul[@id="style-list"]/li/a[1]', document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
        
var RE_votes = /\s*<li class="[^"]+"><a href="[^"]+\/comments\.php\?DiscussionID=\d+">[^<]+<\/a>\sby\s<a\shref="\/users\/\d+">/g;

function addspan (node, text) {
   var span = document.createElement('span');
   span.className = 'style_stats';
   span.textContent = text;
   node.parentNode.appendChild(span);
}

for (var i=0, a, avgRating, text ; a=links.snapshotItem(i) ; i++) {
   if ( -1 != a.className.indexOf('obsolete')) {
      addspan(a, ' (obsolete)');
      continue;
   }

   text = ' ( i: '+ a.parentNode.getAttribute('total-install-count');
   avgRating = a.parentNode.getAttribute('average-rating');

   if (avgRating && avgRating.length) {
      addspan(a, text+', r: '+avgRating+' )');
      GM_xmlhttpRequest( {
         method: 'GET',
         url: a.href,
         onload: function (resp) {
            var style_id = resp.finalUrl.substr(resp.finalUrl.lastIndexOf('/')+1);
            var ul = document.getElementById('style-list');
            if (!ul)
               return;

            // find the corresponding link in the current document {{{
            var RE_href = new RegExp('/styles/'+style_id+'$');
            var links = ul.getElementsByTagName('a');
            var link;
            for (var j=links.length - 1 ; j >=0 ; j--) {
               if (links.item(j).href.match(RE_href)) {
                  link = links.item(j);
                  break;
               }
            }
            if (!link)
               return;
            // }}}

            // nb Vote = total number of discussions
            var nbVote = resp.responseText.match(RE_votes).length;

            var tmp = link.parentNode.lastChild.textContent;
            link.parentNode.lastChild.textContent = tmp.slice(0, tmp.length-2) + '/' + nbVote + ' ) ';
         }
      });
   } else {
      addspan(a, text+' ) ');
   }

}

/* vim: set et sts=3 sw=3 foldmethod=marker : */