12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- /**
- * @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 );
|