// FlickrFont v01
// http://www.greg-hill.id.au
// This work is licensed under a Creative Commons Attribution-ShareAlike 2.1 Australia License.
// Converts text in elements with class "FlickrFont" to images drawn from http://www.flickr.com
// http://ghill.customer.netspace.net.au/flickrfont
FlickrFont = new Array();
Q = 0; // outstanding requests
function FlickrFontClass()
{
Q = 0; // reset Q
// loop through all elements looking for those with class="FlickrFont"
var els=document.getElementsByTagName('*'); // all elements
FFels = new Array(); // FlickrFont elements
string = new Array();
outHTML = new Array();
for(var i=0; i
FlickrFont:
Images loading ...';
}
buildFont();
if(Q==0) outputClass(); // if done loading, write results
return;
}
function buildFont()
{
// gather all the strings together and, if required, fetch images for each character
var index;
allChars = string.join().toUpperCase().replace(/drops/g,'');
for(var i=0; i-1 && index-1) // skip unknown punctuation
continue;
if (currChar.search(blanks)>-1) // deal with spaces
{
writeHTML+='';
continue;
}
if (!FlickrFont[currChar])
continue; // no images available
var count = FlickrFont[currChar].length;
if (count==0)
continue; // no images available
var num=count; // select random image
while(num>=count)
num = Math.floor(Math.random()*(count));
var FFimg = FlickrFont[currChar][num];
var link = FFimg.link; // build image tag
var descr = FFimg.description;
var url=re.exec(descr)[0].replace(resize, '_s.'); // resize to small images
var imgTag = '';
writeHTML += imgTag;
}
return writeHTML;
}
function fetchImages( currChar )
{
// build image request and append to head
var tags;
if (currChar.search(/[a-z]/i)>-1) // test for letter
tags = tagChar+','+currChar+currChar;
else
if (currChar.search(/[0-9]/)>-1) // test for digit
tags = tagDigit+','+currChar;
else
if (typeof(marks[currChar])!='undefined') // test for punctuation
tags = tagPunct+','+marks[currChar];
else
return;
var req_url = 'http://www.flickr.com/services/feeds/photos_public.gne?tags='+tags+'&format=json';
// build JSON request script
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = req_url;
document.getElementsByTagName("head")[0].appendChild(script);
Q++; // queue count increment
return;
}
function jsonFlickrFeed( obj )
{
// callback - determines character and then adds it to font object
var title = obj.title;
var re = / ([a-z0-9]+) \-/i;
var tag;
currChar = "sentinel";
tag = re.exec(title)[1].toUpperCase();
Q--; // queue count decrement
if (tag.length==0)
{
if (Q==0) outputClass();
return; // error in feed
}
if (tag.length<3)
currChar=tag.charAt(0);
else
for(var i in marks)
if (tag.toLowerCase().search(marks[i])>=0)
currChar = i;
if (currChar=="sentinel")
{
if (Q==0) outputClass();
return; // couldn't match
}
FlickrFont[currChar] = obj.items;
if (Q==0) outputClass(); // all done - process results
return;
}
function FlickrFontString( str, varstr )
{
// takes string, builds required font and puts HTML in specified variable
if (!varstr)
varstr = "FFstr";
string[0] = str;
buildFont();
var script = document.createElement('script');
script.type = 'text/javascript';
script.text = varstr+'= Flickrfy("'+str+'");';
document.getElementsByTagName("head")[0].appendChild(script);
return;
}