Tag Cloud Plugin

by CheapSk8

HTML

<div class="tagCloudTest"><a href="http://cm1-davedtest:9980/index.html?filter=complete&amp;query=%7B%22criteria%22%3A%5B%22type%20%3D%20'page'%22%2C%22site%20%3D%20'test123'%22%2C%22perc%3Atags%20%3D%20'complete'%22%5D%7D">complete (1)</a><a href="http://cm1-davedtest:9980/index.html?filter=something new&amp;query=%7B%22criteria%22%3A%5B%22type%20%3D%20'page'%22%2C%22site%20%3D%20'test123'%22%2C%22perc%3Atags%20%3D%20'something%20new'%22%5D%7D">something new (2)</a><a href="http://cm1-davedtest:9980/index.html?filter=daved&amp;query=%7B%22criteria%22%3A%5B%22type%20%3D%20'page'%22%2C%22site%20%3D%20'test123'%22%2C%22perc%3Atags%20%3D%20'daved'%22%5D%7D">daved (3)</a><a href="http://cm1-davedtest:9980/index.html?filter=tags&amp;query=%7B%22criteria%22%3A%5B%22type%20%3D%20'page'%22%2C%22site%20%3D%20'test123'%22%2C%22perc%3Atags%20%3D%20'tags'%22%5D%7D">tags (1)</a><a href="http://cm1-davedtest:9980/index.html?filter=index&amp;query=%7B%22criteria%22%3A%5B%22type%20%3D%20'page'%22%2C%22site%20%3D%20'test123'%22%2C%22perc%3Atags%20%3D%20'index'%22%5D%7D">index (2)</a><a href="http://cm1-davedtest:9980/index.html?filter=holly&amp;query=%7B%22criteria%22%3A%5B%22type%20%3D%20'page'%22%2C%22site%20%3D%20'test123'%22%2C%22perc%3Atags%20%3D%20'holly'%22%5D%7D">holly (4)</a><a href="http://cm1-davedtest:9980/index.html?filter=page&amp;query=%7B%22criteria%22%3A%5B%22type%20%3D%20'page'%22%2C%22site%20%3D%20'test123'%22%2C%22perc%3Atags%20%3D%20'page'%22%5D%7D">page (2)</a><a href="http://cm1-davedtest:9980/index.html?filter=copied&amp;query=%7B%22criteria%22%3A%5B%22type%20%3D%20'page'%22%2C%22site%20%3D%20'test123'%22%2C%22perc%3Atags%20%3D%20'copied'%22%5D%7D">copied (2)</a><a href="http://cm1-davedtest:9980/index.html?filter=jon&amp;query=%7B%22criteria%22%3A%5B%22type%20%3D%20'page'%22%2C%22site%20%3D%20'test123'%22%2C%22perc%3Atags%20%3D%20'jon'%22%5D%7D">jon (3)</a><a...

CSS

body { padding: 10px; }
.tagCloud { padding: 3px; width: 200px; border: 1px solid #666666; border-radius: 5px; }

JavaScript

(function($)
{
   var tagCloud = function(ele, params) {
       var settings = $.extend({
           maxFont: 28     // maximum font size for tags - highest count
           ,minFont: 8     // minimum font size for tags - lowest count
           ,orderBy: 'alpha'     // alpha - by tagname, count - by tagcount, random - randomize list, null - no sort
           ,tags: null        // array of tags with count [tagName(i)]
           ,copyClass: false   // copy class attribute from current element to tagCloud
       },params);
       // if we have an element
       if (ele != null) {
           if (ele.length <= 0) { return ele; }    // if no valid object, return empty
           return ele.each(function() {// loop through each list
               var $this = $(this);    // for each object list passed
               var tags = $this.find('a').get();
               if (tags.length <= 0) { tags = $this.find('li').get(); }   // if no anchor tags exist, get all LIs
               var cloud = makeTagCloud(tags, settings.minFont, settings.maxFont, settings.orderBy);  // get tagCloud structure
               if (settings.copyClass && $this.is('[class]')) {  // if there is class and we need to copy it
                   cloud.attr('class', $this.attr('class'));
               }
               cloud.addClass('tagCloud');   // tagCloud is standard class
               $this.replaceWith(cloud);    // replace existing element with tagCloud
           });
       }
       // if we have no element and have tag array
       else if (settings.tags != null) {
           return makeTagCloud(settings.tags, settings.minFont, settings.maxFont, settings.orderBy).addClass('tagCloud');  // build tagCloud from arrays
       }
       return;
    };
    $.tagCloud = $.fn.tagCloud = function() {
        var isJq = this instanceof jQuery;
        var arg = arguments;
        var tagArr,opts;
        if (isJq) {  // if our object is a jQuery obj, use it as list
            return new...