html2canvas/src/index.js

81 lines
2.2 KiB
JavaScript
Raw Normal View History

2017-07-29 05:07:42 +03:00
/* @flow */
'use strict';
2017-08-06 19:26:09 +03:00
import type {RenderTarget} from './Renderer';
import CanvasRenderer from './renderer/CanvasRenderer';
2017-07-29 05:07:42 +03:00
import Logger from './Logger';
2017-09-11 17:36:23 +03:00
import {renderElement} from './Window';
2017-07-29 05:07:42 +03:00
export type Options = {
2017-08-01 17:36:51 +03:00
allowTaint: ?boolean,
2017-08-28 16:27:39 +03:00
backgroundColor: string,
2017-08-01 17:36:51 +03:00
canvas: ?HTMLCanvasElement,
2017-09-28 14:46:00 +03:00
foreignObjectRendering: boolean,
ignoreElements?: HTMLElement => boolean,
imageTimeout: number,
2017-12-11 15:23:43 +03:00
logging: boolean,
onclone?: Document => void,
2017-08-01 17:36:51 +03:00
proxy: ?string,
removeContainer: ?boolean,
scale: number,
target: RenderTarget<*>,
useCORS: boolean,
width: number,
height: number,
x: number,
y: number,
scrollX: number,
scrollY: number,
windowWidth: number,
windowHeight: number
2017-07-29 05:07:42 +03:00
};
const html2canvas = (element: HTMLElement, conf: ?Options): Promise<*> => {
const config = conf || {};
2017-12-11 15:23:43 +03:00
const logger = new Logger(typeof config.logging === 'boolean' ? config.logging : true);
2018-02-15 17:07:40 +03:00
logger.log(`html2canvas ${__VERSION__}`);
2017-08-01 15:54:18 +03:00
if (__DEV__ && typeof config.onrendered === 'function') {
logger.error(
`onrendered option is deprecated, html2canvas returns a Promise with the canvas as the value`
);
}
2017-08-01 15:54:18 +03:00
const ownerDocument = element.ownerDocument;
2017-12-03 12:07:10 +03:00
if (!ownerDocument) {
2017-12-03 12:30:52 +03:00
return Promise.reject(`Provided element is not within a Document`);
2017-12-03 12:07:10 +03:00
}
2017-08-01 15:54:18 +03:00
const defaultView = ownerDocument.defaultView;
2017-08-01 17:36:51 +03:00
const defaultOptions = {
allowTaint: false,
backgroundColor: '#ffffff',
2017-08-17 18:14:44 +03:00
imageTimeout: 15000,
logging: true,
2017-08-01 17:36:51 +03:00
proxy: null,
removeContainer: true,
foreignObjectRendering: false,
scale: defaultView.devicePixelRatio || 1,
2017-08-06 19:26:09 +03:00
target: new CanvasRenderer(config.canvas),
useCORS: false,
windowWidth: defaultView.innerWidth,
2017-08-08 19:50:31 +03:00
windowHeight: defaultView.innerHeight,
scrollX: defaultView.pageXOffset,
scrollY: defaultView.pageYOffset
2017-08-01 17:36:51 +03:00
};
2017-09-11 17:36:23 +03:00
const result = renderElement(element, {...defaultOptions, ...config}, logger);
2017-08-03 19:13:20 +03:00
if (__DEV__) {
return result.catch(e => {
logger.error(e);
throw e;
});
}
return result;
2017-07-29 05:07:42 +03:00
};
2017-08-06 19:26:09 +03:00
html2canvas.CanvasRenderer = CanvasRenderer;
export default html2canvas;