root / drupal7 / sites / all / themes / adaptivetheme / at_core / scripts / scalefix.js @ 01f36513
1 |
/*! A fix for the iOS orientationchange zoom bug.
|
---|---|
2 |
Script by @scottjehl, rebound by @wilto.
|
3 |
MIT / GPLv2 License.
|
4 |
*/
|
5 |
(function(w){
|
6 |
|
7 |
// This fix addresses an iOS bug, so return early if the UA claims it's something else.
|
8 |
var ua = navigator.userAgent;
|
9 |
if( !( /iPhone|iPad|iPod/.test( navigator.platform ) && /OS [1-5]_[0-9_]* like Mac OS X/i.test(ua) && ua.indexOf( "AppleWebKit" ) > -1 ) ){ |
10 |
return;
|
11 |
} |
12 |
|
13 |
var doc = w.document;
|
14 |
|
15 |
if( !doc.querySelector ){ return; } |
16 |
|
17 |
var meta = doc.querySelector( "meta[name=viewport]" ), |
18 |
initialContent = meta && meta.getAttribute( "content" ),
|
19 |
disabledZoom = initialContent + ",maximum-scale=1",
|
20 |
enabledZoom = initialContent + ",maximum-scale=10",
|
21 |
enabled = true,
|
22 |
x, y, z, aig; |
23 |
|
24 |
if( !meta ){ return; } |
25 |
|
26 |
function restoreZoom(){ |
27 |
meta.setAttribute( "content", enabledZoom );
|
28 |
enabled = true;
|
29 |
} |
30 |
|
31 |
function disableZoom(){ |
32 |
meta.setAttribute( "content", disabledZoom );
|
33 |
enabled = false;
|
34 |
} |
35 |
|
36 |
function checkTilt( e ){ |
37 |
aig = e.accelerationIncludingGravity; |
38 |
x = Math.abs( aig.x ); |
39 |
y = Math.abs( aig.y ); |
40 |
z = Math.abs( aig.z ); |
41 |
|
42 |
// If portrait orientation and in one of the danger zones
|
43 |
if( (!w.orientation || w.orientation === 180) && ( x > 7 || ( ( z > 6 && y < 8 || z < 8 && y > 6 ) && x > 5 ) ) ){ |
44 |
if( enabled ){
|
45 |
disableZoom(); |
46 |
} |
47 |
} |
48 |
else if( !enabled ){ |
49 |
restoreZoom(); |
50 |
} |
51 |
} |
52 |
|
53 |
w.addEventListener( "orientationchange", restoreZoom, false ); |
54 |
w.addEventListener( "devicemotion", checkTilt, false ); |
55 |
|
56 |
})( this );
|