Revision: 8620
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at October 1, 2008 07:00 by kouphax
Initial Code
/**----------------------------------------------------------------
*
* TAG CLOUD IMPLEMENTATION
*
*///--------------------------------------------------------------
var TagCloud = function(){
var DEFAULT_UNIT = '%';
var DEFAULT_TEXT_PROPERTY = 'text';
var DEFAULT_VALUE_PROPERTY = 'value';
var gatherStatistics = function(data, config){
var currentMax = data[0][config.valueProperty];
var currentMin = data[0][config.valueProperty];
for(var i = 0; i < data.length; i++){
var value = data[i][config.valueProperty];
currentMax = (currentMax < value)?value:currentMax;
currentMin = (currentMin > value)?value:currentMin
}
return {
max : currentMax,
min : currentMin,
mid : (currentMax+currentMin)/2,
unit : (currentMax-currentMin)/100
};
}
var defaultScaler = function(value, rangeData){
return ((value/rangeData.max)*100)+100;
}
return {
process : function(data, config){
config = config || {};
config.unit = config.unit || DEFAULT_UNIT;
config.textProperty = config.textProperty || DEFAULT_TEXT_PROPERTY;
config.valueProperty = config.valueProperty || DEFAULT_VALUE_PROPERTY;
var dataRange = gatherStatistics(data, config);
var scaler = config.scaler || defaultScaler;
for(var i = 0; i < data.length; i++){
var scale = scaler(data[i][config.valueProperty], dataRange);
config.renderer(data[i][config.textProperty], scale, config.unit);
}
}
}
}();
/**----------------------------------------------------------------
*
* BASIC USAGE EXAMPLE
*
*///--------------------------------------------------------------
var cloudData = [
{text:"One", value:41},
{text:"Two", value:122},
{text:"Three", value:53},
{text:"Four", value:45},
{text:"Five", value:52},
{text:"Six", value:68}
];
TagCloud.process(cloudData,{
renderer : function(text, size, unit){
document.write("<span style=\"font-size:" + size + unit + ";\">" + text + "</span>");
}
,scaler : function(value, rangeData){
var MAXFONTSIZE = 30;
var MINFONTSIZE = 12;
var spread = rangeData.max - rangeData.min;
if(spread == 0){
spread = 1;
}
return MINFONTSIZE + (value - rangeData.min) *
(MAXFONTSIZE - MINFONTSIZE) / spread;
}
,unit : 'px'
});
Initial URL
Initial Description
The only function the Tag Cloud singleton exposes it the process() function which take 3 arguments.
1. Cloud Data - Required. Needs to have a display value property and a count property. The actual property names are configurable but by default looks for text and value respectivley
2. Render Function - Required. This is the function that will render the cloud items onto the page. This is left up to the developer as this could be dramatically different each time. IT accepts 3 arguments - Display Text, Calculated Size and
3. Optional Configuration - Object that accepts:
* scaler - Overrides the default scaling calculation
* unit - The default size unit eg '%' or 'px'
* textProperty - The property on the object to get the display value
* valueProperty - The property on the object to get the count per item
Initial Title
Javascript Tag Cloud
Initial Tags
javascript
Initial Language
JavaScript