/** * @preserve jquery.layout.browserZoom 1.0 * $Date: 2011-12-29 08:00:00 (Thu, 29 Dec 2011) $ * * Copyright (c) 2012 * Kevin Dalman (http://allpro.net) * * Dual licensed under the GPL (http://www.gnu.org/licenses/gpl.html) * and MIT (http://www.opensource.org/licenses/mit-license.php) licenses. * * @dependancies: UI Layout 1.3.0.rc30.1 or higher * * @support: http://groups.google.com/group/jquery-ui-layout * * @todo: Extend logic to handle other problematic zooming in browsers * @todo: Add hotkey/mousewheel bindings to _instantly_ respond to these zoom event */ ;(function ($) { var _ = $.layout; // tell Layout that the plugin is available _.plugins.browserZoom = true; _.defaults.browserZoomCheckInterval = 1000; _.optionsMap.layout.push("browserZoomCheckInterval"); /* * browserZoom methods */ _.browserZoom = { _init: function (inst) { $.layout.browserZoom._setTimer(inst); } , _setTimer: function (inst) { if (inst.destroyed) return; var o = inst.options , s = inst.state , z = s.browserZoom = $.layout.browserZoom.ratio() ; if (o.resizeWithWindow && z !== false) { setTimeout(function(){ if (inst.destroyed) return; var d = $.layout.browserZoom.ratio(); if (d !== s.browserZoom) { s.browserZoom = d; inst.resizeAll(); } $.layout.browserZoom._setTimer(inst); // set a NEW timeout }, Math.max( o.browserZoomCheckInterval, 100 )); // MINIMUM 100ms interval, for performance } } , ratio: function () { var w = window , s = screen , d = document , dE = d.documentElement || d.body , b = $.layout.browser , v = b.version , r, sW, cW ; // we can ignore all browsers that fire window.resize event onZoom if ((b.msie && v > 8) || !b.msie ) return false; // don't need to track zoom if (s.deviceXDPI) return calc(s.deviceXDPI, s.systemXDPI); // everything below is just for future reference! if (b.webkit && (r = d.body.getBoundingClientRect)) return calc((r.left - r.right), d.body.offsetWidth); if (b.webkit && (sW = w.outerWidth)) return calc(sW, w.innerWidth); if ((sW = s.width) && (cW = dE.clientWidth)) return calc(sW, cW); return false; // no match, so cannot - or don't need to - track zoom function calc (x,y) { return (parseInt(x,10) / parseInt(y,10) * 100).toFixed(); } } }; // add initialization method to Layout's onLoad array of functions _.onReady.push( $.layout.browserZoom._init ); })( jQuery );