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