diff --git a/src/Parse.js b/src/Parse.js
index e394cf2..2fc851a 100644
--- a/src/Parse.js
+++ b/src/Parse.js
@@ -1,83 +1,22 @@
_html2canvas.Parse = function (images, options) {
window.scroll(0,0);
- var support = {
- rangeBounds: false,
- svgRendering: options.svgRendering && (function( ){
- var img = new Image(),
- canvas = document.createElement("canvas"),
- ctx = (canvas.getContext === undefined) ? false : canvas.getContext("2d");
- if (ctx === false) {
- // browser doesn't support canvas, good luck supporting SVG on canvas
- return false;
- }
- canvas.width = canvas.height = 10;
- img.src = [
- "data:image/svg+xml,",
- ""
- ].join("");
- try {
- ctx.drawImage(img, 0, 0);
- canvas.toDataURL();
- } catch(e) {
- return false;
- }
- h2clog('html2canvas: Parse: SVG powered rendering available');
- return true;
-
- })()
- },
- element = (( options.elements === undefined ) ? document.body : options.elements[0]), // select body by default
+ var element = (( options.elements === undefined ) ? document.body : options.elements[0]), // select body by default
numDraws = 0,
fontData = {},
doc = element.ownerDocument,
+ support = _html2canvas.Util.Support(options, doc),
ignoreElementsRegExp = new RegExp("(" + options.ignoreElements + ")"),
body = doc.body,
- r,
- testElement,
- rangeBounds,
- rangeHeight,
stack,
ctx,
i,
children,
- childrenLen;
+ childrenLen,
+ getCSS = _html2canvas.Util.getCSS;
images = images || {};
- // Test whether we can use ranges to measure bounding boxes
- // Opera doesn't provide valid bounds.height/bottom even though it supports the method.
-
-
- if (doc.createRange) {
- r = doc.createRange();
- //this.support.rangeBounds = new Boolean(r.getBoundingClientRect);
- if (r.getBoundingClientRect){
- testElement = doc.createElement('boundtest');
- testElement.style.height = "123px";
- testElement.style.display = "block";
- body.appendChild(testElement);
-
- r.selectNode(testElement);
- rangeBounds = r.getBoundingClientRect();
- rangeHeight = rangeBounds.height;
-
- if (rangeHeight === 123) {
- support.rangeBounds = true;
- }
- body.removeChild(testElement);
- }
-
- }
-
- var getCSS = _html2canvas.Util.getCSS;
-
function documentWidth () {
return Math.max(
Math.max(doc.body.scrollWidth, doc.documentElement.scrollWidth),
diff --git a/src/Support.js b/src/Support.js
new file mode 100644
index 0000000..c2db49d
--- /dev/null
+++ b/src/Support.js
@@ -0,0 +1,63 @@
+_html2canvas.Util.Support = function (options, doc) {
+
+ function supportSVGRendering() {
+ var img = new Image(),
+ canvas = doc.createElement("canvas"),
+ ctx = (canvas.getContext === undefined) ? false : canvas.getContext("2d");
+ if (ctx === false) {
+ return false;
+ }
+ canvas.width = canvas.height = 10;
+ img.src = [
+ "data:image/svg+xml,",
+ ""
+ ].join("");
+ try {
+ ctx.drawImage(img, 0, 0);
+ canvas.toDataURL();
+ } catch(e) {
+ return false;
+ }
+ h2clog('html2canvas: Parse: SVG powered rendering available');
+ return true;
+ }
+
+ // Test whether we can use ranges to measure bounding boxes
+ // Opera doesn't provide valid bounds.height/bottom even though it supports the method.
+
+ function supportRangeBounds() {
+ var r, testElement, rangeBounds, rangeHeight, support = false;
+
+ if (doc.createRange) {
+ r = doc.createRange();
+ if (r.getBoundingClientRect) {
+ testElement = doc.createElement('boundtest');
+ testElement.style.height = "123px";
+ testElement.style.display = "block";
+ doc.body.appendChild(testElement);
+
+ r.selectNode(testElement);
+ rangeBounds = r.getBoundingClientRect();
+ rangeHeight = rangeBounds.height;
+
+ if (rangeHeight === 123) {
+ support = true;
+ }
+ doc.body.removeChild(testElement);
+ }
+ }
+
+ return support;
+ }
+
+ return {
+ rangeBounds: supportRangeBounds(),
+ svgRendering: options.svgRendering && supportSVGRendering()
+ };
+};
\ No newline at end of file
diff --git a/tests/test.js b/tests/test.js
index 22f649c..c0ce9ca 100644
--- a/tests/test.js
+++ b/tests/test.js
@@ -11,7 +11,7 @@ var h2cSelector, h2cOptions;
document.write(srcStart + '/tests/assets/jquery-1.6.2.js' + scrEnd);
document.write(srcStart + '/tests/assets/jquery.plugin.html2canvas.js' + scrEnd);
- var html2canvas = ['Core', 'Generate', 'Parse', 'Preload', 'Queue', 'Renderer', 'Util', 'renderers/Canvas'], i;
+ var html2canvas = ['Core', 'Generate', 'Parse', 'Preload', 'Queue', 'Renderer', 'Util', 'Support', 'renderers/Canvas'], i;
for (i = 0; i < html2canvas.length; ++i) {
document.write(srcStart + '/src/' + html2canvas[i] + '.js' + scrEnd);
}