BibSonomy :: Help :: Tools

A blue social bookmark and publication sharing system.

The requested page 'tricks' does not exist anymore. To find similar pages, click the button below:

/** limits for different font-sizes */
var lim1;
var lim2;

var limit = 0;
var order;

/** 
* Retrieves tags from BibSonomy 

* param url: the url of the JSON feed
* param limit: tag limitation
* param order: order of the tags (tagname or tagcount)
*/
function getTags(url, lim, ord) {
	limit = lim;
	order = ord;

	var headID = document.getElementsByTagName("head")[0];         
	var newScript = document.createElement("script");
	newScript.type = "text/javascript";
	newScript.src = url + "?callback=jsonBibSonomyFeed";
	headID.appendChild(newScript);
}

/** 
* Handler function 
*/
function jsonBibSonomyFeed(feed) {
	var div = document.getElementById("tags");
 	var ultag = document.getElementById("tagbox");
 	var maxCount = -1000;
 	var minCount = 1000;
  	
  	for(x=0; x < feed.items.length; x++){
		var tagCount = feed.items[x].count;
		if (tagCount < minCount)
			minCount = tagCount;
		if (tagCount > maxCount)
			maxCount = tagCount;			
	}		
	var diff = maxCount - minCount;
	var part = diff / 3;	
	lim2 = maxCount - part;
	lim1 = lim2 - part;

	// remove old tags	
	var lilength = ultag.getElementsByTagName("LI").length;
	while (lilength > 0) {
		ultag.removeChild(ultag.firstChild);
		lilength = ultag.getElementsByTagName("LI").length;
	}

	// limitation
	if (limit == 0 || limit > feed.items.length)
		limit = feed.items.length;

	// sort to frequency and cut after limit
	feed.items = feed.items.sort(softFreq);
	feed.items = feed.items.slice(0,limit);		

	// sort 
	feed.items = feed.items.sort(comparator);
	
	// insert new tags
  	var space = document.createTextNode(" ");
	for(var x=0; x < feed.items.length; x++){
		var tagname  = feed.items[x].label;
		var tagcount = feed.items[x].count;
		var clazz = getClazz(tagcount);
		
		var newli = document.createElement("LI");

		var newa = document.createElement("A");
		newa.href = "http://www.bibsonomy.org/tag/" + tagname;
		newa.innerHTML = tagname;
		newa.className = clazz;
		
		newli.appendChild(newa);
		newli.appendChild(space.cloneNode(true));
		ultag.appendChild(newli);
	} 		
}

/**
* compartor function for array sort
**/
function comparator(x,y) {
	if (order == "frequency") {
		var count1 = x.count;	
		var count2 = y.count;	
		
		return count2 - count1;	
	} else {
		var name1 = x.label.toLowerCase();	
		var name2 = y.label.toLowerCase();
		
		return (name1 == name2) ? 0 : (name1 < name2) ? -1 : 1			
	}
}

/**
* sorts array to frequency
**/
function softFreq(x,y) {
	var count1 = x.count;	
	var count2 = y.count;	
	
	return count2 - count1;	
}

/** 
* Computes the style class for a tag 
*/
function getClazz(count) {
	if (count > lim2)
		return "big";
	if (count < lim1)
		return "small";
	return "normal";
}