At line 1 added 127 lines |
%%prettify |
{{{ |
/** 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"; |
} |
|
|
}}} |
/% |