86 lines
2.4 KiB
JavaScript
Executable File
86 lines
2.4 KiB
JavaScript
Executable File
/**
|
|
* @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)
|
|
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 ); |