You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@devicemap.apache.org by ra...@apache.org on 2013/11/18 15:39:39 UTC

svn commit: r1543039 - in /incubator/devicemap/trunk/browsermap/trunk: package.json src/main/js/bmap.js src/test/js/tests.js

Author: radu
Date: Mon Nov 18 14:39:39 2013
New Revision: 1543039

URL: http://svn.apache.org/r1543039
Log:
DMAP-34 - Add a current variant attribute to the site variants BrowserMap uses for forwarding clients

* added BrowserMap.getCurrentVariant() which extracts the variant that has a ‘data-bmap-currentvar’ attribute with its value set to ‘true’
* updated tests
* bumped version to 1.4.0-dev (API changes)

Modified:
    incubator/devicemap/trunk/browsermap/trunk/package.json
    incubator/devicemap/trunk/browsermap/trunk/src/main/js/bmap.js
    incubator/devicemap/trunk/browsermap/trunk/src/test/js/tests.js

Modified: incubator/devicemap/trunk/browsermap/trunk/package.json
URL: http://svn.apache.org/viewvc/incubator/devicemap/trunk/browsermap/trunk/package.json?rev=1543039&r1=1543038&r2=1543039&view=diff
==============================================================================
--- incubator/devicemap/trunk/browsermap/trunk/package.json (original)
+++ incubator/devicemap/trunk/browsermap/trunk/package.json Mon Nov 18 14:39:39 2013
@@ -1,6 +1,6 @@
 {
   "name": "BrowserMap",
-  "version": "1.3.0",
+  "version": "1.4.0-dev",
   "description": "YABFDL - yet another browser features detection library",
   "main": "index.js",
   "scripts": {
@@ -27,7 +27,7 @@
     "grunt-jsdoc": "~0.4.1",
     "grunt-contrib-copy": "~0.4.1",
     "grunt-contrib-compress": "~0.5.2",
-    "grunt-qunit-cov": "~0.3.4",
+    "grunt-qunit-cov": "git+https://raducotescu@github.com/raducotescu/grunt-qunit-cov.git",
     "karma-junit-reporter": "~0.1.0",
     "karma-qunit": "~0.1.1",
     "karma": "~0.10.2",

Modified: incubator/devicemap/trunk/browsermap/trunk/src/main/js/bmap.js
URL: http://svn.apache.org/viewvc/incubator/devicemap/trunk/browsermap/trunk/src/main/js/bmap.js?rev=1543039&r1=1543038&r2=1543039&view=diff
==============================================================================
--- incubator/devicemap/trunk/browsermap/trunk/src/main/js/bmap.js (original)
+++ incubator/devicemap/trunk/browsermap/trunk/src/main/js/bmap.js Mon Nov 18 14:39:39 2013
@@ -44,6 +44,7 @@
     BrowserMap.VERSION = '<%= pkg.version %>'; // replaced at build time by Grunt
 
     var linkDataDevgroups = 'data-bmap-devgroups';
+    var linkcurrentVariant = 'data-bmap-currentvar';
 
     /**
      * Retrieves the probes Map - useful for outputting debugging information.
@@ -186,6 +187,45 @@
     };
 
     /**
+     * Returns the current variant, if one is found.
+     *
+     * @return {Object} an object with the <code>id, href, hreflang, devgroups</code> set of attributes; <code>null</code> if the current
+     *                  variant cannot be determined
+     */
+    BrowserMap.getCurrentVariant = function () {
+        var headElement = document.getElementsByTagName('head')[0],
+            i = 0,
+            currentVariant = null,
+            currentVariantAttribute,
+            links,
+            link,
+            onIE7,
+            linkHref,
+            devgroups;
+        onIE7 = navigator.appVersion.indexOf('MSIE 7') !== -1;
+        if (headElement) {
+            links = headElement.getElementsByTagName('link');
+            for (i = 0; i < links.length; i++) {
+                link = links[i];
+                if (link.rel == 'alternate') {
+                    if (onIE7) {
+                        linkHref = BrowserMapUtil.Url.qualifyURL(link.href);
+                    } else {
+                        linkHref = link.href;
+                    }
+                    devgroups = link.getAttribute(linkDataDevgroups);
+                    currentVariantAttribute = link.getAttribute(linkcurrentVariant);
+                    if (currentVariantAttribute && currentVariantAttribute === 'true') {
+                        currentVariant = {'id' : link.id, 'href' : linkHref, 'hreflang' : link.hreflang, 'devgroups' : devgroups};
+                        break;
+                    }
+                }
+            }
+        }
+        return currentVariant;
+    };
+
+    /**
      * Returns the defined DeviceGroups for this BrowserMap as an array in which the elements are ordered by their ranking property.
      *
      * @return {Array}

Modified: incubator/devicemap/trunk/browsermap/trunk/src/test/js/tests.js
URL: http://svn.apache.org/viewvc/incubator/devicemap/trunk/browsermap/trunk/src/test/js/tests.js?rev=1543039&r1=1543038&r2=1543039&view=diff
==============================================================================
--- incubator/devicemap/trunk/browsermap/trunk/src/test/js/tests.js (original)
+++ incubator/devicemap/trunk/browsermap/trunk/src/test/js/tests.js Mon Nov 18 14:39:39 2013
@@ -22,9 +22,10 @@ QUnit.begin(function() {
         headElementContent = headElement.innerHTML;
     headElementContent += '\
         <link rel="canonical" href="http://www.example.com/index.html">\
-        <link rel="alternate" data-bmap-devgroups="browser" hreflang="en" href="http://www.example.com/index.html">\
-        <link rel="alternate" data-bmap-devgroups="browser" hreflang="de" href="http://www.example.com/index.html">\
-        <link rel="alternate" data-bmap-devgroups="smartphone" hreflang="en" href="http://www.example.com/index.smartphone.html">\
+        <link rel="alternate" data-bmap-devgroups="browser" hreflang="en" href="http://www.example.com/en/index.html" data-bmap-currentvar="true">\
+        <link rel="alternate" data-bmap-devgroups="browser" hreflang="de" href="http://www.example.com/de/index.html">\
+        <link rel="alternate" data-bmap-devgroups="smartphone" hreflang="de" href="http://www.example.com/de/index.smartphone.html">\
+        <link rel="alternate" data-bmap-devgroups="smartphone" hreflang="en" href="http://www.example.com/en/index.smartphone.html">\
         <meta name="browsermap.enabled" content="false">';
     headElement.innerHTML = headElementContent;
 });
@@ -96,15 +97,16 @@ test('Array.indexOf', function() {
 module('BrowserMap');
 test("getAllAlternateSites", function() {
     var alternateSites = [
-            {href: 'http://www.example.com/index.html', hreflang : 'en', devgroups : 'browser', id : ''},
-            {href: 'http://www.example.com/index.html', hreflang : 'de', devgroups : 'browser', id : ''},
-            {href: 'http://www.example.com/index.smartphone.html', hreflang : 'en', devgroups : 'smartphone', id : ''}
-        ];
+        {href: 'http://www.example.com/en/index.html', hreflang : 'en', devgroups : 'browser', id : ''},
+        {href: 'http://www.example.com/de/index.html', hreflang : 'de', devgroups : 'browser', id : ''},
+        {href: 'http://www.example.com/de/index.smartphone.html', hreflang : 'de', devgroups : 'smartphone', id : ''},
+        {href: 'http://www.example.com/en/index.smartphone.html', hreflang : 'en', devgroups : 'smartphone', id : ''}
+    ];
     deepEqual(BrowserMap.getAllAlternateSites(), alternateSites);
 });
 test("getAlternateSite", function() {
     var filter = function(link) {return link.hreflang == 'de'};
-    deepEqual(BrowserMap.getAlternateSite(['browser'], filter), {href: 'http://www.example.com/index.html', hreflang : 'de', devgroups : 'browser', id : ''});
+    deepEqual(BrowserMap.getAlternateSite(['browser'], filter), {href: 'http://www.example.com/de/index.html', hreflang : 'de', devgroups : 'browser', id : ''});
 });
 test("getDeviceGroupsInRankingOrder", function() {
     var expectedDgs = [
@@ -125,8 +127,12 @@ test("probe", function() {
     equal('number', typeof BrowserMap.probe('clientWidth'));
 });
 test("getNewURL", function() {
-    strictEqual(BrowserMap.getNewURL('http://www.example.com/index.html', ['smartphone'], ['smartphone']), 'http://www.example.com/index.smartphone.html');
-    strictEqual(BrowserMap.getNewURL('http://www.example.com/index.html', ['tablet'], ['tablet']), 'http://www.example.com/index.tablet.html');
+    strictEqual(BrowserMap.getNewURL('http://www.example.com/en/index.html', ['smartphone'], ['smartphone']), 'http://www.example.com/en/index.smartphone.html');
+    // assume fallback to selectors-based URL even if no variant is present
+    strictEqual(BrowserMap.getNewURL('http://www.example.com/en/index.html', ['tablet'], ['tablet']), 'http://www.example.com/en/index.tablet.html');
+});
+test("getCurrentVariant", function() {
+    deepEqual(BrowserMap.getCurrentVariant(), {href: 'http://www.example.com/en/index.html', hreflang : 'en', devgroups : 'browser', id : ''});
 });
 test("isEnabled", function() {
     strictEqual(BrowserMap.isEnabled(), false);