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.",