Jdlrobson has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/180351

Change subject: Move M.isIos to browser.js
......................................................................

Move M.isIos to browser.js

* Add tests

Change-Id: Ibec074b0c962e970c0f9a291055e3dbd0f36eb40
---
M javascripts/Overlay.js
M javascripts/application.js
M javascripts/browser.js
M tests/qunit/test_browser.js
4 files changed, 56 insertions(+), 37 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/MobileFrontend 
refs/changes/51/180351/1

diff --git a/javascripts/Overlay.js b/javascripts/Overlay.js
index b41ae76..78fbf29 100644
--- a/javascripts/Overlay.js
+++ b/javascripts/Overlay.js
@@ -84,6 +84,7 @@
                /** @inheritdoc */
                initialize: function ( options ) {
                        this.isIos = browser.isIos();
+                       this.isIos8 = browser.isIos( 8 );
                        View.prototype.initialize.apply( this, arguments );
                },
                /** @inheritdoc */
@@ -244,7 +245,7 @@
                                                        var keyboardHeight = 0;
 
                                                        // detect virtual 
keyboard height
-                                                       if ( !M.isIos8 ) {
+                                                       if ( !this.isIos8 ) {
                                                                // this method 
does not work in iOS 8.02
                                                                
$window.scrollTop( 999 );
                                                                keyboardHeight 
= $window.scrollTop();
diff --git a/javascripts/application.js b/javascripts/application.js
index b95bedb..973d0da 100644
--- a/javascripts/application.js
+++ b/javascripts/application.js
@@ -14,19 +14,12 @@
                pageApi = new PageApi(),
                Page = M.require( 'Page' ),
                router = new Router(),
-               $viewportMeta, viewport,
                currentPage,
                inWideScreenMode = false,
                // FIXME: Move all the variables below to Browser.js
                ua = window.navigator.userAgent,
                isIos = browser.isIos(),
-               // Test UA for iOS8. Or for simulator look for Version 8
-               // In the iOS simulator the OS is the host machine OS version
-               // This makes testing in iOS8 simulator work as expected
-               isIos8 = isIos && /OS 8_/.test( ua ) || /Version\/8/.test( ua ),
-               isIPhone4 = isIos && /OS 4_/.test( ua ),
-               isOldIPhone = isIos && /OS [4]_[0-2]|OS [3]_/.test( ua ),
-               isIPhone5 = isIos && /OS 5_/.test( ua );
+               isOldIPhone = isIos && /OS [4]_[0-2]|OS [3]_/.test( ua );
 
        /**
         * Escape dots and colons in a hash, jQuery doesn't like them beause 
they
@@ -103,30 +96,6 @@
                                }
                        } );
                }
-
-               $viewportMeta = $( 'meta[name="viewport"]' );
-               viewport = $viewportMeta.attr( 'content' );
-
-               // when rotating to landscape stop page zooming on ios
-               // allow disabling of transitions in android ics 4.0.2
-
-               /**
-                * Works around iPhone 4 and 5 bugs with the viewport.
-                *
-                * FIXME: Move to Browser.js
-                * @method
-                * @ignore
-                */
-               function fixBrowserBugs() {
-                       // see http://adactio.com/journal/4470/ (fixed in ios 6)
-                       if ( $viewportMeta[0] && ( isIPhone4 || isIPhone5 ) ) {
-                               browser.lockViewport();
-                               document.addEventListener( 'gesturestart', 
function () {
-                                       browser.lockViewport();
-                               }, false );
-                       }
-               }
-               fixBrowserBugs();
 
                $( loadWideScreenModules );
                $( window ).on( 'resize', $.proxy( M, 'emit', 'resize' ) );
@@ -254,8 +223,6 @@
                getCurrentPage: getCurrentPage,
                getSessionId: getSessionId,
                log: log,
-               // FIXME: Move to browser.js
-               isIos8: isIos8,
                query: deParam( qs ),
                /**
                 * Navigation router instance
diff --git a/javascripts/browser.js b/javascripts/browser.js
index d56eaed..b70e59c 100644
--- a/javascripts/browser.js
+++ b/javascripts/browser.js
@@ -38,6 +38,21 @@
                                classNames.push( 'ios' );
                        }
                        this._classNames = classNames.join( ' ' );
+                       this._fixIosLandscapeBug();
+               },
+               /**
+                * Wwhen rotating to landscape stop page zooming on ios.
+                * @private
+                */
+               _fixIosLandscapeBug: function () {
+                       var self = this;
+                       // see http://adactio.com/journal/4470/ (fixed in ios 6)
+                       if ( this.$viewportMeta[0] && ( this.isIos( 4 ) || 
this.isIos( 5 ) ) ) {
+                               this.lockViewport();
+                               document.addEventListener( 'gesturestart', 
function () {
+                                       self.lockViewport();
+                               }, false );
+                       }
                },
                /**
                 * Returns a class name to apply to the html element
@@ -49,10 +64,30 @@
                /**
                 * Returns whether the current browser is an ios device.
                 * FIXME: jquery.client does not support iPad detection so we 
cannot use it.
+                * @param {Number} [version] integer describing a specific 
version you want to test against.
                 * @return {Boolean}
                 */
-               isIos: function () {
-                       return /ipad|iphone|ipod/i.test( this.userAgent );
+               isIos: function ( version ) {
+                       var ua = this.userAgent,
+                               ios = /ipad|iphone|ipod/i.test( ua );
+
+                       if ( ios && version ) {
+                               switch ( version ) {
+                                       case 8:
+                                               // Test UA for iOS8. Or for 
simulator look for Version 8
+                                               // In the iOS simulator the OS 
is the host machine OS version
+                                               // This makes testing in iOS8 
simulator work as expected
+                                               return /OS 8_/.test( ua ) || 
/Version\/8/.test( ua );
+                                       case 4:
+                                               return /OS 4_/.test( ua );
+                                       case 5:
+                                               return /OS 5_/.test( ua );
+                                       default:
+                                               return false;
+                               }
+                       } else {
+                               return ios;
+                       }
                },
                /**
                 * Locks the viewport so that pinch zooming is disabled
diff --git a/tests/qunit/test_browser.js b/tests/qunit/test_browser.js
index 5dda722..de65ec0 100644
--- a/tests/qunit/test_browser.js
+++ b/tests/qunit/test_browser.js
@@ -3,6 +3,22 @@
 
        QUnit.module( 'Browser.js' );
 
+       QUnit.test( 'isIos()', 8, function ( assert ) {
+               var browser = new Browser( 'Mozilla/5.0 (iPad; CPU OS 7_0 like 
Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko)' ),
+                       browser4 = new Browser( 'Mozilla/5.0 (iPad; CPU OS 4_0 
like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko)' ),
+                       browser5 = new Browser( 'Mozilla/5.0 (iPad; CPU OS 5_0 
like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko)' ), 
+                       browser2 = new Browser( 'Mozilla/5.0 (iPhone; CPU 
iPhone OS 8_0 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) 
Version/8.0 Mobile/11A465 Safari/9537.53' );
+
+               assert.strictEqual( browser.isIos(), true );
+               assert.strictEqual( browser.isIos( 8 ), false );
+               assert.strictEqual( browser.isIos( 4 ), false );
+               assert.strictEqual( browser.isIos( 5 ), false );
+               assert.strictEqual( browser2.isIos(), true );
+               assert.strictEqual( browser2.isIos( 8 ), true );
+               assert.strictEqual( browser4.isIos( 4 ), true );
+               assert.strictEqual( browser5.isIos( 5 ), true );
+       } );
+
        QUnit.test( 'supportsPositionFixed()', function ( assert ) {
                var userAgents, userAgentsFail;
                userAgents = [

-- 
To view, visit https://gerrit.wikimedia.org/r/180351
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ibec074b0c962e970c0f9a291055e3dbd0f36eb40
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/MobileFrontend
Gerrit-Branch: master
Gerrit-Owner: Jdlrobson <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to