Team:Edinburgh/tech/fluidtextresizer

From 2011.igem.org

/*Fluid Text Resizer (June 27th, 2010)

jQuery.noConflict()

function fluidtextresizer(setting){ fluidtextresizer.count=(fluidtextresizer.count)? ++fluidtextresizer.count : 1 this.cookiename="fluidtextsizer"+fluidtextresizer.count //name of cookie to use to store persistence for this text resizer instance this.setting=setting this.selectors=[] //array translating setting.targets into array of jquery selectors this.$controls=null this.defaultfontsizes=[] this.curfontlevel=0 var thisobj=this jQuery(function($){ //on document.ready var els=setting.targets for (var i=0; i<els.length; i++){ if ($(els[i]).length==0){ //if selector doesn't yield any matched elements els.splice(i, 1) //delete it from setting.targets[] i-=1 continue } var curfontsize=$(els[i]).css('fontSize') thisobj.defaultfontsizes.push({val:parseFloat(curfontsize), unit:curfontsize.slice(-2)}) //remember default font sizes of target elements thisobj.selectors.push($(els[i])) //cache selector } if (setting.controlsdiv){ //if special container for resize controls defined thisobj.$controls=$('#'+setting.controlsdiv).find('a[href^=#fontsize], a[href=#bigger], a[href=#smaller]') thisobj.$controls.each(function(){ var $target=$(this) $target.data('level', $target.attr('href').replace(/(#)|(fontsize)/ig, )) //remove "#" and "fontsize" from href to derive level $target.click(function(){ thisobj.setFontLevel($target.data('level')) return false }) }) } if (setting.persisttype!="none"){ var curfontlevel=fluidtextresizer.routines.getCookie(thisobj.cookiename) || 0 //get persisted font level, or 0 to indicate no change in font size curfontlevel=parseInt(curfontlevel) if (curfontlevel>=-setting.levels && curfontlevel<=setting.levels){ //if font level within range thisobj.setFontLevel(curfontlevel, true) } } }) }

fluidtextresizer.prototype={

setFontLevel:function(level, disableanim){ var s=this.setting var $els=this.selectors var level=(level=="bigger")? this.curfontlevel+1 : (level=="smaller")? this.curfontlevel-1 : parseInt(level) //calculate new font size level if (s.controlsdiv){ //if special container for resize controls defined this.$controls.filter('.selectedcontrol').removeClass('selectedcontrol').end() //deselect previously selected control .filter('[href=#fontsize'+level+']').addClass('selectedcontrol') //apply "selectedcontrol" CSS class to corresponding control } if (level<-s.levels || level>s.levels || level==this.curfontlevel) //if target level is out or range (range is int from -s.levels to +s.levels) or is current level already return for (var i=0; i<$els.length; i++){ var abslevel=Math.abs(level) var valchange=Math.pow(1.2, abslevel) //calculate fontlevel^1.2 //calculate new font size, which is default font size multiply or divided by valchange: var newfontsize=this.defaultfontsizes[i].val * (level<0? 1/valchange : level>0? valchange : 1) + this.defaultfontsizes[i].unit $els[i].animate({fontSize: newfontsize}, disableanim? 0 : this.setting.animate) } if (s.persist=="session"){ fluidtextresizer.routines.setCookie(this.cookiename, level) } this.curfontlevel=level }

}

fluidtextresizer.routines={ getCookie:function(Name){ var re=new RegExp(Name+"=[^;]*", "i"); //construct RE to search for target name/value pair return (document.cookie.match(re))? document.cookie.match(re)[0].split("=")[1] : null //return cookie value if found or null },

setCookie:function(name, value, days){ var expirestr= if (typeof days!="undefined") //if set persistent cookie expirestr="; expires="+expireDate.setDate(new Date().getDate()+days).toGMTString() document.cookie = name+"="+value+"; path=/"+expirestr } }