mirror of
https://github.com/niklasvh/html2canvas.git
synced 2023-08-10 21:13:10 +03:00
Moved browser support checks to seperate file
This commit is contained in:
parent
82f42fb23b
commit
0ebb1e41b0
69
src/Parse.js
69
src/Parse.js
@ -1,83 +1,22 @@
|
|||||||
_html2canvas.Parse = function (images, options) {
|
_html2canvas.Parse = function (images, options) {
|
||||||
window.scroll(0,0);
|
window.scroll(0,0);
|
||||||
|
|
||||||
var support = {
|
var element = (( options.elements === undefined ) ? document.body : options.elements[0]), // select body by default
|
||||||
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,",
|
|
||||||
"<svg xmlns='http://www.w3.org/2000/svg' width='10' height='10'>",
|
|
||||||
"<foreignObject width='10' height='10'>",
|
|
||||||
"<div xmlns='http://www.w3.org/1999/xhtml' style='width:10;height:10;'>",
|
|
||||||
"sup",
|
|
||||||
"</div>",
|
|
||||||
"</foreignObject>",
|
|
||||||
"</svg>"
|
|
||||||
].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
|
|
||||||
numDraws = 0,
|
numDraws = 0,
|
||||||
fontData = {},
|
fontData = {},
|
||||||
doc = element.ownerDocument,
|
doc = element.ownerDocument,
|
||||||
|
support = _html2canvas.Util.Support(options, doc),
|
||||||
ignoreElementsRegExp = new RegExp("(" + options.ignoreElements + ")"),
|
ignoreElementsRegExp = new RegExp("(" + options.ignoreElements + ")"),
|
||||||
body = doc.body,
|
body = doc.body,
|
||||||
r,
|
|
||||||
testElement,
|
|
||||||
rangeBounds,
|
|
||||||
rangeHeight,
|
|
||||||
stack,
|
stack,
|
||||||
ctx,
|
ctx,
|
||||||
i,
|
i,
|
||||||
children,
|
children,
|
||||||
childrenLen;
|
childrenLen,
|
||||||
|
getCSS = _html2canvas.Util.getCSS;
|
||||||
|
|
||||||
images = images || {};
|
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 () {
|
function documentWidth () {
|
||||||
return Math.max(
|
return Math.max(
|
||||||
Math.max(doc.body.scrollWidth, doc.documentElement.scrollWidth),
|
Math.max(doc.body.scrollWidth, doc.documentElement.scrollWidth),
|
||||||
|
63
src/Support.js
Normal file
63
src/Support.js
Normal file
@ -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,",
|
||||||
|
"<svg xmlns='http://www.w3.org/2000/svg' width='10' height='10'>",
|
||||||
|
"<foreignObject width='10' height='10'>",
|
||||||
|
"<div xmlns='http://www.w3.org/1999/xhtml' style='width:10;height:10;'>",
|
||||||
|
"sup",
|
||||||
|
"</div>",
|
||||||
|
"</foreignObject>",
|
||||||
|
"</svg>"
|
||||||
|
].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()
|
||||||
|
};
|
||||||
|
};
|
@ -11,7 +11,7 @@ var h2cSelector, h2cOptions;
|
|||||||
|
|
||||||
document.write(srcStart + '/tests/assets/jquery-1.6.2.js' + scrEnd);
|
document.write(srcStart + '/tests/assets/jquery-1.6.2.js' + scrEnd);
|
||||||
document.write(srcStart + '/tests/assets/jquery.plugin.html2canvas.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) {
|
for (i = 0; i < html2canvas.length; ++i) {
|
||||||
document.write(srcStart + '/src/' + html2canvas[i] + '.js' + scrEnd);
|
document.write(srcStart + '/src/' + html2canvas[i] + '.js' + scrEnd);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user