You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shindig.apache.org by rb...@apache.org on 2012/10/09 15:32:45 UTC

svn commit: r1396028 - in /shindig/trunk: features/src/main/javascript/features/container.site.gadget/ features/src/main/javascript/features/container.site.url/ features/src/main/javascript/features/container.site/ features/src/test/javascript/features...

Author: rbaxter85
Date: Tue Oct  9 13:32:45 2012
New Revision: 1396028

URL: http://svn.apache.org/viewvc?rev=1396028&view=rev
Log:
gadget iframe accessibility fixes
SHINDIG-1835
Committed for Marshall Shi

Modified:
    shindig/trunk/features/src/main/javascript/features/container.site.gadget/gadget_holder.js
    shindig/trunk/features/src/main/javascript/features/container.site.gadget/gadget_site.js
    shindig/trunk/features/src/main/javascript/features/container.site.url/url_holder.js
    shindig/trunk/features/src/main/javascript/features/container.site/site.js
    shindig/trunk/features/src/main/javascript/features/container.site/site_holder.js
    shindig/trunk/features/src/test/javascript/features/container.url/url_holder_test.js
    shindig/trunk/features/src/test/javascript/features/container.url/url_site_test.js
    shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/RenderingGadgetRewriter.java
    shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/RenderingGadgetRewriterTest.java

Modified: shindig/trunk/features/src/main/javascript/features/container.site.gadget/gadget_holder.js
URL: http://svn.apache.org/viewvc/shindig/trunk/features/src/main/javascript/features/container.site.gadget/gadget_holder.js?rev=1396028&r1=1396027&r2=1396028&view=diff
==============================================================================
--- shindig/trunk/features/src/main/javascript/features/container.site.gadget/gadget_holder.js (original)
+++ shindig/trunk/features/src/main/javascript/features/container.site.gadget/gadget_holder.js Tue Oct  9 13:32:45 2012
@@ -201,7 +201,7 @@ osapi.container.GadgetHolder.prototype.d
           //tunnelURI: shindig.uri('/test1/gadgets/' + '../container/rpc_relay.html')
           //   .resolve(shindig.uri(window.location.href)),
           tunnelURI: shindig.uri(this.relayPath_).resolve(shindig.uri(window.location.href)),
-          iframeAttrs: this.createIframeAttributeMap(this.getIframeUrl_()),
+          iframeAttrs: this.createIframeAttributeMap(this.getIframeUrl_(), {title:this.site_.getTitle()}),
           onGadgetLoad: this.onLoad_
         }
       }

Modified: shindig/trunk/features/src/main/javascript/features/container.site.gadget/gadget_site.js
URL: http://svn.apache.org/viewvc/shindig/trunk/features/src/main/javascript/features/container.site.gadget/gadget_site.js?rev=1396028&r1=1396027&r2=1396028&view=diff
==============================================================================
--- shindig/trunk/features/src/main/javascript/features/container.site.gadget/gadget_site.js (original)
+++ shindig/trunk/features/src/main/javascript/features/container.site.gadget/gadget_site.js Tue Oct  9 13:32:45 2012
@@ -139,6 +139,19 @@ osapi.container.GadgetSite.prototype.get
 };
 
 /**
+ * @inheritDoc
+ */
+osapi.container.GadgetSite.prototype.setTitle = function(title) {
+  osapi.container.Site.prototype.setTitle.call(this, title);
+  // sometimes there are 2 holders
+  if (this.loadingGadgetHolder_ && this.currentGadgetHolder_) {
+    // loadingGadgetHolder_ was set by super call
+    this.currentGadgetHolder_.setTitle(title); // set my other one.
+  }
+  return this;
+};
+
+/**
  * Returns configuration of a feature with a given name. Defaults to current
  * loading or visible gadget if no metadata is passed in.
  * @param {string} name Name of the feature.

Modified: shindig/trunk/features/src/main/javascript/features/container.site.url/url_holder.js
URL: http://svn.apache.org/viewvc/shindig/trunk/features/src/main/javascript/features/container.site.url/url_holder.js?rev=1396028&r1=1396027&r2=1396028&view=diff
==============================================================================
--- shindig/trunk/features/src/main/javascript/features/container.site.url/url_holder.js (original)
+++ shindig/trunk/features/src/main/javascript/features/container.site.url/url_holder.js Tue Oct  9 13:32:45 2012
@@ -75,7 +75,7 @@ osapi.container.UrlHolder.prototype.getU
 osapi.container.UrlHolder.prototype.render = function(url, renderParams) {
   this.iframeId_ = osapi.container.UrlHolder.IFRAME_PREFIX_ + this.site_.getId();
   this.renderParams_ = renderParams;
-  this.el_.innerHTML = this.createIframeHtml(this.url_ = url, {scrolling: 'auto'});
+  this.el_.innerHTML = this.createIframeHtml(this.url_ = url, {scrolling: 'auto',title: this.site_.getTitle()});
 };
 
 /**

Modified: shindig/trunk/features/src/main/javascript/features/container.site/site.js
URL: http://svn.apache.org/viewvc/shindig/trunk/features/src/main/javascript/features/container.site/site.js?rev=1396028&r1=1396027&r2=1396028&view=diff
==============================================================================
--- shindig/trunk/features/src/main/javascript/features/container.site/site.js (original)
+++ shindig/trunk/features/src/main/javascript/features/container.site/site.js Tue Oct  9 13:32:45 2012
@@ -69,9 +69,23 @@ osapi.container.Site = function(containe
    * @protected
    */
   this.ownerId_ = undef;
+
+  /**
+   * Site title which would show up as iframe title.
+   * @type {string}
+   * @private
+   */
+  this.title_ = undef;
 };
 
 /**
+ * Default site title.
+ * @type {string}
+ * @private
+ */
+osapi.container.Site.DEFAULT_TITLE = 'default title';
+
+/**
  * Unique counter for sites.  Used if no explicit ID was provided in their creation.
  * @type {number}
  */
@@ -130,6 +144,36 @@ osapi.container.Site.prototype.setHeight
 };
 
 /**
+ * Set the title of the site's iframe.
+ *
+ * @param {String} title The site title.
+ * @return {osapi.container.Site} this.
+ */
+osapi.container.Site.prototype.setTitle = function(title) {
+  this.title_ = title;
+  var siteHolder = this.getActiveSiteHolder();
+  if (siteHolder) {
+    siteHolder.setTitle(title);
+  }
+  return this;
+};
+
+/**
+ * Get the site title.
+ *
+ * @return {String} the site title.
+ */
+osapi.container.Site.prototype.getTitle = function() {
+  if (typeof(this.title_) !== 'undefined') {
+    return this.title_;
+  } else if (this.gadgetInfo_ && this.gadgetInfo_.modulePrefs && this.gadgetInfo_.modulePrefs.title) {
+    return this.gadgetInfo_.modulePrefs.title;
+  } else {
+    return osapi.container.Site.DEFAULT_TITLE;
+  }
+};
+
+/**
  * Closes this site.
  */
 osapi.container.Site.prototype.close = function() {

Modified: shindig/trunk/features/src/main/javascript/features/container.site/site_holder.js
URL: http://svn.apache.org/viewvc/shindig/trunk/features/src/main/javascript/features/container.site/site_holder.js?rev=1396028&r1=1396027&r2=1396028&view=diff
==============================================================================
--- shindig/trunk/features/src/main/javascript/features/container.site/site_holder.js (original)
+++ shindig/trunk/features/src/main/javascript/features/container.site/site_holder.js Tue Oct  9 13:32:45 2012
@@ -148,6 +148,17 @@ osapi.container.SiteHolder.prototype.cre
    return params;
 };
 
+/**
+ * Set a title to the site.
+ * @private
+ */
+osapi.container.SiteHolder.prototype.setTitle = function(title) {
+  var ifr = this.getIframeElement();
+  if (ifr) {
+    ifr.title = title;
+  }
+};
+
 //Abstract methods
 
 /**

Modified: shindig/trunk/features/src/test/javascript/features/container.url/url_holder_test.js
URL: http://svn.apache.org/viewvc/shindig/trunk/features/src/test/javascript/features/container.url/url_holder_test.js?rev=1396028&r1=1396027&r2=1396028&view=diff
==============================================================================
--- shindig/trunk/features/src/test/javascript/features/container.url/url_holder_test.js (original)
+++ shindig/trunk/features/src/test/javascript/features/container.url/url_holder_test.js Tue Oct  9 13:32:45 2012
@@ -45,11 +45,11 @@ UrlHolderTest.prototype.testNew = functi
 UrlHolderTest.prototype.testRenderWithoutParams = function() {
   var element = {};
   var url = "http://example.com";
-  var holder = new osapi.container.UrlHolder({getId: function(){return 123;}}, element);
+  var holder = new osapi.container.UrlHolder({getId: function(){return 123;}, getTitle: function(){return "default title"}}, element);
   this.assertUndefined(holder.getUrl());
   this.assertUndefined(holder.getIframeId());
   holder.render(url, {});
-  this.assertEquals('<iframe' + ' marginwidth="0"' + ' hspace="0"' + ' frameborder="0"'
+  this.assertEquals('<iframe' + ' marginwidth="0"' + ' hspace="0"' + ' title="default title"' + ' frameborder="0"'
           + ' scrolling="auto"' + ' marginheight="0"' + ' vspace="0"' + ' id="__url_123"'
           + ' name="__url_123"' + ' src="http://example.com"' + ' ></iframe>', element.innerHTML);
   this.assertEquals(url, holder.getUrl());
@@ -59,7 +59,7 @@ UrlHolderTest.prototype.testRenderWithou
 UrlHolderTest.prototype.testRenderWithParams = function() {
   var element = {};
   var url = "http://example.com";
-  var holder = new osapi.container.UrlHolder({getId: function(){return 123;}}, element);
+  var holder = new osapi.container.UrlHolder({getId: function(){return 123;}, getTitle: function(){return "default title"}}, element);
   this.assertUndefined(holder.getUrl());
   this.assertUndefined(holder.getIframeId());
   holder.render(url, {
@@ -68,7 +68,7 @@ UrlHolderTest.prototype.testRenderWithPa
           "height" : 104
   });
   this.assertEquals('<iframe' + ' marginwidth="0"' + ' hspace="0"' + ' height="104"'
-          + ' frameborder="0"' + ' scrolling="auto"' + ' class="myClass"' + ' marginheight="0"'
+          + ' title="default title"' + ' frameborder="0"' + ' scrolling="auto"' + ' class="myClass"' + ' marginheight="0"'
           + ' vspace="0"' + ' id="__url_123"' + ' width="54"' + ' name="__url_123"'
           + ' src="http://example.com"' + ' ></iframe>', element.innerHTML);
   this.assertEquals(url, holder.getUrl());

Modified: shindig/trunk/features/src/test/javascript/features/container.url/url_site_test.js
URL: http://svn.apache.org/viewvc/shindig/trunk/features/src/test/javascript/features/container.url/url_site_test.js?rev=1396028&r1=1396027&r2=1396028&view=diff
==============================================================================
--- shindig/trunk/features/src/test/javascript/features/container.url/url_site_test.js (original)
+++ shindig/trunk/features/src/test/javascript/features/container.url/url_site_test.js Tue Oct  9 13:32:45 2012
@@ -56,7 +56,7 @@ UrlSiteTest.prototype.testRenderNoParams
   var site = new osapi.container.UrlSite(null, null, args);
   site.render(url, {});
   this.assertNotNull(site.getActiveSiteHolder());
-  this.assertEquals('<iframe' + ' marginwidth="0"' + ' hspace="0"' + ' frameborder="0"'
+  this.assertEquals('<iframe' + ' marginwidth="0"' + ' hspace="0"' + ' title="default title"' + ' frameborder="0"'
           + ' scrolling="auto"' + ' marginheight="0"' + ' vspace="0"' + ' id="__url_' + site.getId() + '"'
           + ' name="__url_' + site.getId() + '"' + ' src="http://example.com"' + ' ></iframe>', el.innerHTML);
 };
@@ -75,7 +75,7 @@ UrlSiteTest.prototype.testRenderWithPara
   });
   this.assertNotNull(site.getActiveSiteHolder());
   this.assertEquals('<iframe' + ' marginwidth="0"' + ' hspace="0"' + ' height="104"'
-          + ' frameborder="0"' + ' scrolling="auto"' + ' class="myClass"' + ' marginheight="0"'
+          + ' title="default title"' + ' frameborder="0"' + ' scrolling="auto"' + ' class="myClass"' + ' marginheight="0"'
           + ' vspace="0"' + ' id="__url_' + site.getId() + '"' + ' width="54"' + ' name="__url_' + site.getId() + '"'
           + ' src="http://example.com"' + ' ></iframe>', el.innerHTML);
 };

Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/RenderingGadgetRewriter.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/RenderingGadgetRewriter.java?rev=1396028&r1=1396027&r2=1396028&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/RenderingGadgetRewriter.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/RenderingGadgetRewriter.java Tue Oct  9 13:32:45 2012
@@ -20,6 +20,7 @@ package org.apache.shindig.gadgets.rende
 
 import java.util.Collection;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 import java.util.Set;
 import java.util.logging.Level;
@@ -227,6 +228,17 @@ public class RenderingGadgetRewriter imp
         }
       }
 
+      Element html= (Element)document.getElementsByTagName("html").item(0);
+      if(html != null){
+        Locale locale = gadget.getContext().getLocale();
+        if (locale != null) {
+          String locStr = locale.toString();
+          String locValue = locStr.replace("_", "-");
+          html.setAttribute("lang", locValue);
+          html.setAttribute("xml:lang", locValue);
+        }
+      }
+
       injectBaseTag(gadget, head);
       injectGadgetBeacon(gadget, head, firstHeadChild);
       injectFeatureLibraries(gadget, head, firstHeadChild);

Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/RenderingGadgetRewriterTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/RenderingGadgetRewriterTest.java?rev=1396028&r1=1396027&r2=1396028&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/RenderingGadgetRewriterTest.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/RenderingGadgetRewriterTest.java Tue Oct  9 13:32:45 2012
@@ -189,7 +189,7 @@ public class RenderingGadgetRewriterTest
     Matcher matcher = DOCUMENT_SPLIT_PATTERN.matcher(rewritten);
     assertTrue("Output is not valid HTML.", matcher.matches());
     assertTrue("Missing opening html tag", matcher.group(BEFORE_HEAD_GROUP).
-        toLowerCase().contains("<html>"));
+        toLowerCase().contains("<html"));
     assertTrue("Default CSS missing.", matcher.group(HEAD_GROUP).contains(DEFAULT_CSS));
     // Not very accurate -- could have just been user prefs.
     assertTrue("Default javascript not included.",
@@ -295,7 +295,7 @@ public class RenderingGadgetRewriterTest
     Matcher matcher = DOCUMENT_SPLIT_PATTERN.matcher(rewritten);
     assertTrue("Output is not valid HTML.", matcher.matches());
     assertTrue("DOCTYPE not preserved", matcher.group(BEFORE_HEAD_GROUP).contains(docType));
-    assertTrue("Missing opening html tag", matcher.group(BEFORE_HEAD_GROUP).contains("<html>"));
+    assertTrue("Missing opening html tag", matcher.group(BEFORE_HEAD_GROUP).contains("<html"));
     // TODO: reinstate test when non-tag-reordering parser is used.
     // assertTrue("Custom head content is missing.", matcher.group(HEAD_GROUP).contains(head));
     assertTrue("IsGadget beacon not included.",
@@ -650,7 +650,7 @@ public class RenderingGadgetRewriterTest
     Matcher matcher = DOCUMENT_SPLIT_PATTERN.matcher(rewritten);
     assertTrue("Output is not valid HTML.", matcher.matches());
     assertTrue("Missing opening html tag", matcher.group(BEFORE_HEAD_GROUP).
-        toLowerCase().contains("<html>"));
+        toLowerCase().contains("<html"));
     assertTrue("Default CSS missing.", matcher.group(HEAD_GROUP).contains(DEFAULT_CSS));
     // Not very accurate -- could have just been user prefs.
     assertTrue("Default javascript not included.",