jquery.client: Add detection for Opera 15
authorMatmaRex <matma.rex@gmail.com>
Sun, 7 Jul 2013 21:48:33 +0000 (23:48 +0200)
committerTimo Tijhof <krinklemail@gmail.com>
Wed, 10 Jul 2013 01:30:51 +0000 (03:30 +0200)
Opera 15 pretends to be Chrome, Safari, Gecko, Mozilla, *and* KHTML.
I don't even.

Also fixed some typos in comments and done minor code cleanup.

Change-Id: I200def556c3891864235ba0f8f2f29278263e030

RELEASE-NOTES-1.22
resources/jquery/jquery.client.js
tests/qunit/suites/resources/jquery/jquery.client.test.js

index c2f1272..fc0a22d 100644 (file)
@@ -138,6 +138,7 @@ production.
 * (bug 48256) Make brackets in section edit links accessible to CSS.
   They are now wrapped in <span class="mw-editsection-bracket" />.
 * (bug 8480) Allow handler specific parameters in galleries (like page number)
+* jquery.client: Add detection for Opera 15.
 
 === Bug fixes in 1.22 ===
 * Disable Special:PasswordReset when $wgEnableEmail is false. Previously one
index 2da022c..42e76eb 100644 (file)
                                                ['KHTML', 'Konqueror'],
                                                // Firefox nightly builds
                                                ['Minefield', 'Firefox'],
-                                               // This helps keep differnt versions consistent
+                                               // This helps keep different versions consistent
                                                ['Navigator', 'Netscape'],
                                                // This prevents version extraction issues, otherwise translation would happen later
                                                ['PLAYSTATION 3', 'PS3']
                                        ],
-                                       // Strings which precede a version number in a user agent string - combined and used as match 1 in
-                                       // version detectection
+                                       // Strings which precede a version number in a user agent string - combined and used as
+                                       // match 1 in version detection
                                        versionPrefixes = [
                                                'camino', 'chrome', 'firefox', 'iceweasel', 'netscape', 'netscape6', 'opera', 'version', 'konqueror',
                                                'lynx', 'msie', 'safari', 'ps3', 'android'
                                /* Edge Cases -- did I mention about how user agent string lie? */
 
                                // Decode Safari's crazy 400+ version numbers
-                               if ( name.match( /safari/ ) && version > 400 ) {
+                               if ( name === 'safari' && version > 400 ) {
                                        version = '2.0';
                                }
                                // Expose Opera 10's lies about being Opera 9.8
-                               if ( name === 'opera' && version >= 9.8) {
-                                       match = ua.match( /version\/([0-9\.]*)/i );
+                               if ( name === 'opera' && version >= 9.8 ) {
+                                       match = ua.match( /\bversion\/([0-9\.]*)/ );
                                        if ( match && match[1] ) {
                                                version = match[1];
                                        } else {
                                                version = '10';
                                        }
                                }
+                               // And Opera 15's lies about being Chrome
+                               if ( name === 'chrome' && ( match = ua.match( /\bopr\/([0-9\.]*)/ ) ) ) {
+                                       if ( match[1] ) {
+                                               name = 'opera';
+                                               version = match[1];
+                                       }
+                               }
+
                                versionNumber = parseFloat( version, 10 ) || 0.0;
 
                                /* Caching */
index b2a6fd5..4163e9e 100644 (file)
                                        rtl: true
                                }
                        },
+                       // Opera 15 (WebKit-based)
+                       'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.52 Safari/537.36 OPR/15.0.1147.130': {
+                               title: 'Opera 15',
+                               platform: 'Win32',
+                               profile: {
+                                       name: 'opera',
+                                       layout: 'webkit',
+                                       layoutVersion: 537,
+                                       platform: 'win',
+                                       version: '15.0.1147.130',
+                                       versionBase: '15',
+                                       versionNumber: 15
+                               },
+                               wikiEditor: {
+                                       ltr: true,
+                                       rtl: true
+                               }
+                       },
                        // Chrome 5
                        // Chrome 6
                        // Chrome 7