Author: ivaynberg
Date: Fri Sep 26 21:34:45 2008
New Revision: 699552
URL: http://svn.apache.org/viewvc?rev=699552&view=rev
Log:
WICKET-1786
Added:
wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/pages/detectSVG.js
(with props)
Modified:
wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/pages/BrowserInfoForm.html
wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/pages/BrowserInfoForm.java
wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/ClientProperties.java
Modified:
wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/pages/BrowserInfoForm.html
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/pages/BrowserInfoForm.html?rev=699552&r1=699551&r2=699552&view=diff
==============================================================================
---
wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/pages/BrowserInfoForm.html
(original)
+++
wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/pages/BrowserInfoForm.html
Fri Sep 26 21:34:45 2008
@@ -42,6 +42,18 @@
document.postback.utcDSTOffset.value = (new Date(new
Date().getFullYear(), 6, 1, 0, 0, 0, 0).getTimezoneOffset() / -60);
document.postback.browserWidth.value = window.innerWidth ||
document.body.offsetWidth;
document.postback.browserHeight.value = window.innerHeight ||
document.body.offsetHeight;
+
+ // SVG detection
+ var svginfo = detectSVG();
+ if(svginfo.support){
+ var svgstate = null;
+ if(svginfo.support=="Builtin")
+ svgstate=svginfo.builtin + ',' +
svginfo.builtinVersion;
+ else
+ svgstate=svginfo.plugin + ',' +
svginfo.pluginVersion + ',' + svginfo.IID;
+ document.postback.SVGsupport.value = svgstate;
+ }
+
document.postback.submit();
}
</script>
@@ -63,6 +75,7 @@
<input type="text" wicket:id="utcDSTOffset" />
<input type="text" wicket:id="browserWidth" />
<input type="text" wicket:id="browserHeight" />
+ <input type="text" wicket:id="SVGsupport" />
</form>
</wicket:panel>
</html>
Modified:
wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/pages/BrowserInfoForm.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/pages/BrowserInfoForm.java?rev=699552&r1=699551&r2=699552&view=diff
==============================================================================
---
wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/pages/BrowserInfoForm.java
(original)
+++
wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/pages/BrowserInfoForm.java
Fri Sep 26 21:34:45 2008
@@ -17,6 +17,9 @@
package org.apache.wicket.markup.html.pages;
import org.apache.wicket.IClusterable;
+import org.apache.wicket.ResourceReference;
+import org.apache.wicket.markup.html.IHeaderContributor;
+import org.apache.wicket.markup.html.IHeaderResponse;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.panel.Panel;
@@ -32,7 +35,7 @@
/**
* Form for posting JavaScript properties.
*/
-public class BrowserInfoForm extends Panel
+public class BrowserInfoForm extends Panel implements IHeaderContributor
{
/** log. */
private static final Logger log =
LoggerFactory.getLogger(BrowserInfoForm.class);
@@ -101,6 +104,7 @@
form.add(new TextField<String>("utcDSTOffset"));
form.add(new TextField<String>("browserWidth"));
form.add(new TextField<String>("browserHeight"));
+ form.add(new TextField<String>("SVGsupport"));
add(form);
}
@@ -124,6 +128,11 @@
}
+ public void renderHead(IHeaderResponse response)
+ {
+ response.renderJavascriptReference(new
ResourceReference(this.getClass(), "detectSVG.js"));
+ }
+
/**
* Holds properties of the client.
*/
@@ -146,6 +155,7 @@
private String utcDSTOffset;
private String browserWidth;
private String browserHeight;
+ private String SVGsupport;
/**
* Gets browserHeight.
@@ -312,6 +322,7 @@
properties.setScreenColorDepth(getInt(screenColorDepth));
properties.setUtcOffset(utcOffset);
properties.setUtcDSTOffset(utcDSTOffset);
+ properties.setSVGsupport(SVGsupport);
}
/**
@@ -502,5 +513,26 @@
}
return intValue;
}
+
+ /**
+ * Sets SVGsupport
+ *
+ * @param SVGsupport
+ * SVGsupport
+ */
+ public void setSVGsupport(String gsupport)
+ {
+ SVGsupport = gsupport;
+ }
+
+ /**
+ * Gets SVGsupport
+ *
+ * @return SVGsupport
+ */
+ public String getSVGsupport()
+ {
+ return SVGsupport;
+ }
}
-}
\ No newline at end of file
+}
Added:
wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/pages/detectSVG.js
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/pages/detectSVG.js?rev=699552&view=auto
==============================================================================
---
wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/pages/detectSVG.js
(added)
+++
wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/pages/detectSVG.js
Fri Sep 26 21:34:45 2008
@@ -0,0 +1,41 @@
+// Javascript-based SVG support detection
+// From http://thomas.tanrei.ca/modern-script-based-svg-detection/
+function detectSVG()
+{
+ var results = { support:null, plugin:null, builtin:null };
+ var obj = null;
+ if ( navigator && navigator.mimeTypes && navigator.mimeTypes.length )
+ {
+ for ( var mime in { "image/svg+xml":null, "image/svg":null,
"image/svg-xml":null } )
+ {
+ if ( navigator.mimeTypes[ mime ] && ( obj =
navigator.mimeTypes[ mime ].enabledPlugin ) && obj )
+ results = { plugin:( obj =
obj.name.toLowerCase()) && obj.indexOf( "adobe" ) >= 0 ? "Adobe" : (
obj.indexOf( "renesis" ) >= 0 ? "Renesis" : "Unknown" ) };
+ }
+ }
+ else if ( ( obj = document.createElement( "object" )) && obj && typeof
obj.setAttribute( "type", "image/svg+xml" ))
+ {
+ if ( typeof obj.USE_SVGZ == "string" )
+ results = { plugin:"Adobe", IID:"Adobe.SVGCtl",
pluginVersion:obj.window && obj.window._window_impl ? ( obj.window.evalScript ?
6 : 3 ) : 2 };
+ else if ( typeof obj.ReadyState == "number" && obj.ReadyState
== 0 )
+ results = { plugin:"Renesis",
IID:"RenesisX.RenesisCtrl.1", pluginVersion:">=1.0" };
+ else if ( obj.window &&
obj.window.getSVGViewerVersion().indexOf( "enesis" ) > 0 )
+ results = { plugin:"Renesis",
IID:"RenesisX.RenesisCtrl.1", pluginVersion:"<1.0" };
+ }
+ results.IID = ( results.plugin == "Adobe" ? "Adobe.SVGCtl" : (
results.plugin == "Renesis" ? "renesisX.RenesisCtrl.1" : null ));
+
+ // Does the browser support SVG natively? Gecko claims no support if a
plugin is active, but still gives back an NSI interface. Safari 3 does not
claim support but does - use devicePixelRatio
+ var claimed = !!window.devicePixelRatio || ( typeof SVGAngle ==
"object" || ( document && document.implementation &&
document.implementation.hasFeature( "org.w3c.dom.svg", "1.0" )));
+ var nsi = window.Components && window.Components.interfaces &&
!!Components.interfaces.nsIDOMGetSVGDocument;
+ results.builtin = claimed ? ( !!window.opera ? "Opera" : ( nsi ?
"Gecko" : "Safari" )) : ( !!window.opera && window.opera.version ? "Opera" : (
nsi ? "Gecko" : null ));
+ results.builtinVersion = results.builtin && !!window.opera ?
parseFloat( window.opera.version()) : ( nsi ? ( typeof Iterator == "function" ?
( Array.reduce ? 3.0 : 2.0 ) : 1.5 ) : null );
+
+ // Which is active, the plugin or native support? Opera 9 makes it hard
to tell..
+ if ( !!window.opera && results.builtinVersion >= 9 && ( obj =
document.createElement( "object" )) && obj && typeof obj.setAttribute( "type",
"image/svg+xml" ) != "undefined" && document.appendChild( obj ))
+ {
+ results.support = obj.offsetWidth ? "Plugin" : "Builtin";
+ document.removeChild( obj );
+ }
+ else results.support = results.plugin && !claimed ? "Plugin" : (
results.builtin && claimed ? "Builtin" : null );
+
+ return results;
+}
Propchange:
wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/pages/detectSVG.js
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified:
wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/ClientProperties.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/ClientProperties.java?rev=699552&r1=699551&r2=699552&view=diff
==============================================================================
---
wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/ClientProperties.java
(original)
+++
wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/ClientProperties.java
Fri Sep 26 21:34:45 2008
@@ -93,6 +93,7 @@
private String utcDSTOffset;
private String utcOffset;
+ private String SVGsupport;
/**
@@ -1051,6 +1052,20 @@
this.utcOffset = utcOffset;
}
+ /**
+ * @return null if there is no SVG support, otherwise a String like
"<Name>,<Version>" (e.g. "Gecko,2")
+ */
+ public String getSVGsupport() {
+ return SVGsupport;
+ }
+
+ /**
+ * @param svgsupport the SVGsupport to set
+ */
+ public void setSVGsupport(String svgsupport) {
+ SVGsupport = svgsupport;
+ }
+
public String toString()
{
StringBuffer b = new StringBuffer();