/* jQuery sIFR Plugin * Version 2.0 Beta 3 * 2008-09-25 05:49:32 * URL: http://jquery.thewikies.com/sifr * Description: jQuery Sifr Plugin replaces traditional text in a web page with flash text (sIFR). * Author: Jonathan Neal * Copyright: Copyright (c) 2008 Jonathan Neal under dual MIT/GPL license. * JSLint: This javascript file passes JSLint verification. *//*jslint bitwise: true, browser: true, eqeqeq: true, forin: true, passfail: true, regexp: true, undef: true, white: true *//*global jQuery */ (function ($) { $.fn.sifr = function (prefs) { /* == load our preferences == */ var t = true, u = undefined, s, p; s = arguments.callee.prefs = arguments.callee.prefs || { asHex: function (x) { var d = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F']; return isNaN(x) ? '00' : d[(x - x % 16) / 16] + d[x % 16]; }, colors: { aqua: [0, 255, 255], azure: [240, 255, 255], beige: [245, 245, 220], black: [0, 0, 0], blue: [0, 0, 255], brown: [165, 42, 42], cyan: [0, 255, 255], darkblue: [0, 0, 139], darkcyan: [0, 139, 139], darkgrey: [169, 169, 169], darkgreen: [0, 100, 0], darkkhaki: [189, 183, 107], darkmagenta: [139, 0, 139], darkolivegreen: [85, 107, 47], darkorange: [255, 140, 0], darkorchid: [153, 50, 204], darkred: [139, 0, 0], darksalmon: [233, 150, 122], darkviolet: [148, 0, 211], fuchsia: [255, 0, 255], gold: [255, 215, 0], green: [0, 128, 0], indigo: [75, 0, 130], khaki: [240, 230, 140], lightblue: [173, 216, 230], lightcyan: [224, 255, 255], lightgreen: [144, 238, 144], lightgrey: [211, 211, 211], lightpink: [255, 182, 193], lightyellow: [255, 255, 224], lime: [0, 255, 0], magenta: [255, 0, 255], maroon: [128, 0, 0], navy: [0, 0, 128], olive: [128, 128, 0], orange: [255, 165, 0], pink: [255, 192, 203], purple: [128, 0, 128], violet: [128, 0, 128], red: [255, 0, 0], silver: [192, 192, 192], white: [255, 255, 255], yellow: [255, 255, 0], transparent: [255, 255, 255] }, toHex: function (color) { var rgb; if (!color) { return u; } return (rgb = color.match(/rgb\(([0-9]+),\s([0-9]+),\s([0-9]+)\)/)) ? '#' + this.asHex(rgb[1]) + this.asHex(rgb[2]) + this.asHex(rgb[3]) : (rgb = this.colors[color]) ? '#' + this.asHex(rgb[0]) + this.asHex(rgb[1]) + this.asHex(rgb[2]) : (color.length === 4) ? color.replace(/\#([0-9a-z])([0-9a-z])([0-9a-z])/, '#$1$1$2$2$3$3') : color; } }; /* == lock our preferences == */ p = $.extend({}, s, (prefs === false) ? { unsifr: true } : prefs); /* == if necessary, save our prefs == */ if (p.save === t) { arguments.callee.prefs = $.extend(p, { save: false }); } /* == we're done if there's no sIFR specified == */ if (this[0] === document) { return; } /* == if necessary, run a custom function before we begin == */ if (!p.unsifr && typeof p.before === 'function') { p.before.apply(this, [p]); } /* == do this function on every element we've selected == */ this.each(function () { var ele = $(this), txt, alt, fir, embedOptions; /* == 'a' will mean the possible '.sIFR-alternate' child of 't' == */ fir = ele.children('.sIFR-alternate'); /* == if 'a' exists, then it's time to unSifr == */ if (fir) { ele.html(fir.html()); /* == if unsifr was called, then it's time to go == */ if (p.unsifr) { return; } } /* == if necessary, run a custom function before we begin this one == */ if (typeof p.beforeEach === 'function') { p.beforeEach.apply(this, [t, p]); } fir = ele.addClass('sIFR-replaced').wrapInner('').children('.sIFR-alternate'); alt = ele.append('' + $.trim(fir.text()) + '').children('.sIFR-jquery'); txt = $.trim(fir.html()).replace(/(>)\s+|\s+(<)/g, '$1$2').replace(/(id|name)=[A-Za-z0-9]+/g, ''); if (p.textTransform) { p.textTransform = p.textTransform.toLowerCase(); if (p.textTransform === 'uppercase') { txt = txt.toUpperCase(); } if (p.textTransform === 'lowercase') { txt = txt.html().toLowerCase(); } if (p.textTransform === 'capitalize') { var cap = txt.split(/(\s|\>)/); txt = ''; for (var i in cap) { txt += cap[i].charAt(0).toUpperCase() + cap[i].substr(1); } } } txt = ele.attr('href') ? '' + txt + '' : txt; /* == flash plugin embedOptions == */ embedOptions = { flashvars: $.extend({ h: alt.height() * (p.zoom || 1), offsetLeft: p.offsetLeft || u, offsetTop: p.offsetTop || u, textAlign: p.textAlign || ele.css('textAlign').match(/left|center|right/) || 'center', textColor: p.toHex(p.color || ele.css('color')) || u, txt: p.content || txt, underline: (p.underline === t || ele.css('textDecoration') === 'underline') ? t : u, w: alt.width() * (p.zoom || 1) }, p.flashvars), height: p.height || alt.height(), src: (p.path || '').replace(/([^\/])$/, '$1/') + (p.font || ele.css('fontFamily').replace(/^\s+|\s+$|,[\S|\s]+|'|"|(,)\s+/g, '$1')).replace(/([^\.][^s][^w][^f])$/, '$1.swf'), style: 'margin: 1px 0 0; position: absolute; vertical-align: text-top;', width: p.width || alt.width(), wmode: 'transparent' }; /* == make some more flash plugin embedoptions (color) == */ embedOptions.flashvars.linkColor = p.toHex(p.link || ele.find('a').css('color')) || embedOptions.flashvars.textColor; embedOptions.flashvars.hoverColor = p.toHex(p.hover) || embedOptions.flashvars.linkColor; /* == make some more flash plugin embedoptions (zoom) == */ if (p.zoom) { embedOptions.flashvars.offsetTop = ((p.offsetTop || 0) + ((alt.height() - (alt.height() * p.zoom)) / 2)) * (p.zoomTop || 1); embedOptions.flashvars.offsetLeft = ((p.offsetLeft || 0) + ((alt.width() - (alt.width() * p.zoom)) / 2)) * (p.zoomLeft || 1); } /* == execute flash plugin == */ $().flash($.extend(embedOptions, p.embedOptions), $.extend({ expressInstall: p.expressInstall || false, version: p.version || 7, update: p.update || false }, p.pluginOptions), function (options) { fir.attr('style', 'visibility: hidden;'); alt.remove(); ele.prepend($.fn.flash.transform(options)); }); /* == if necessary, run a custom function before we begin this one == */ if (typeof p.afterEach === 'function') { p.afterEach.apply(this, [t, p]); } }); /* == if necessary, run a custom function after we're done == */ if (!p.unsifr && typeof p.after === 'function') { p.after.apply(this, [p]); } }; /* == jQuery Sifr Plugin (as unSifr) == */ $.fn.unsifr = function () { return this.each(function () { $(this).sifr(false); }); }; /* == jQuery Sifr Plugin (without selectors) == */ $.sifr = function (prefs) { $(document).sifr($.extend({ save: true }, prefs)); }; /* == preload this == */ $.sifr(); })(jQuery);