diff options
Diffstat (limited to 'static/js/jquery.js')
| -rw-r--r-- | static/js/jquery.js | 171 |
1 files changed, 171 insertions, 0 deletions
diff --git a/static/js/jquery.js b/static/js/jquery.js new file mode 100644 index 0000000..7361a61 --- /dev/null +++ b/static/js/jquery.js @@ -0,0 +1,171 @@ +/** + * @projectDescription Monitor Font Size Changes with jQuery + * + * @version 1.0 + * @author Dave Cardwell + * + * jQuery-Em - $Revision: 24 $ ($Date: 2007-08-19 11:24:56 +0100 (Sun, 19 Aug 2007) $) + * http://davecardwell.co.uk/javascript/jquery/plugins/jquery-em/ + * + * Copyright ©2007 Dave Cardwell <http://davecardwell.co.uk/> + * + * Released under the MIT licence: + * http://www.opensource.org/licenses/mit-license.php + */ + +// Upon $(document).ready()… +jQuery(function($) { + // Configuration… + var eventName = 'emchange'; + + + // Set up default options. + $.em = $.extend({ + /** + * The jQuery-Em version string. + * + * @example $.em.version; + * @desc '1.0a' + * + * @property + * @name version + * @type String + * @cat Plugins/Em + */ + version: '1.0', + + /** + * The number of milliseconds to wait when polling for changes to the + * font size. + * + * @example $.em.delay = 400; + * @desc Defaults to 200. + * + * @property + * @name delay + * @type Number + * @cat Plugins/Em + */ + delay: 200, + + /** + * The element used to detect changes to the font size. + * + * @example $.em.element = $('<div />')[0]; + * @desc Default is an empty, absolutely positioned, 100em-wide <div>. + * + * @private + * @property + * @name element + * @type Element + * @cat Plugins/Em + */ + element: $('<div />').css({ left: '-100em', + position: 'absolute', + width: '100em' }) + .prependTo('body')[0], + + /** + * The action to perform when a change in the font size is detected. + * + * @example $.em.action = function() { ... } + * @desc The default action is to trigger a global “emchange” event. + * You probably shouldn’t change this behaviour as other plugins may + * rely on it, but the option is here for completion. + * + * @example $(document).bind('emchange', function(e, cur, prev) {...}) + * @desc Any functions triggered on this event are passed the current + * font size, and last known font size as additional parameters. + * + * @private + * @property + * @name action + * @type Function + * @cat Plugins/Em + * @see current + * @see previous + */ + action: function() { + var currentWidth = $.em.element.offsetWidth / 100; + + // If the font size has changed since we last checked… + if ( currentWidth != $.em.current ) { + /** + * The previous pixel value of the user agent’s font size. See + * $.em.current for caveats. Will initially be undefined until + * the “emchange” event is triggered. + * + * @example $.em.previous; + * @result 16 + * + * @property + * @name previous + * @type Number + * @cat Plugins/Em + * @see current + */ + $.em.previous = $.em.current; + + /** + * The current pixel value of the user agent’s font size. As + * with $.em.previous, this value *may* be subject to minor + * browser rounding errors that mean you might not want to + * rely upon it as an absolute value. + * + * @example $.em.current; + * @result 14 + * + * @property + * @name current + * @type Number + * @cat Plugins/Em + * @see previous + */ + $.em.current = currentWidth; + + $.event.trigger(eventName, [$.em.current, $.em.previous]); + } + } + }, $.em ); + + + /** + * Bind a function to the emchange event of each matched element. + * + * @example $("p").emchange( function() { alert("Hello"); } ); + * + * @name emchange + * @type jQuery + * @param Function fn A function to bind to the emchange event. + * @cat Plugins/Em + */ + + /** + * Trigger the emchange event of each matched element. + * + * @example $("p").emchange() + * + * @name emchange + * @type jQuery + * @cat Plugins/Em + */ + $.fn[eventName] = function(fn) { return fn ? this.bind(eventName, fn) + : this.trigger(eventName); }; + + + // Store the initial pixel value of the user agent’s font size. + $.em.current = $.em.element.offsetWidth / 100; + + /** + * While polling for font-size changes, $.em.iid stores the intervalID in + * case you should want to cancel with clearInterval(). + * + * @example window.clearInterval( $.em.iid ); + * + * @property + * @name iid + * @type Number + * @cat Plugins/Em + */ + $.em.iid = setInterval( $.em.action, $.em.delay ); +}); |
