| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600 |
- (function webpackUniversalModuleDefinition(root, factory) {
- if(typeof exports === 'object' && typeof module === 'object')
- module.exports = factory();
- else if(typeof define === 'function' && define.amd)
- define("htmlScreenCaptureJs", [], factory);
- else if(typeof exports === 'object')
- exports["htmlScreenCaptureJs"] = factory();
- else
- root["htmlScreenCaptureJs"] = factory();
- })(typeof self !== 'undefined' ? self : this, function() {
- return /******/ (function(modules) { // webpackBootstrap
- /******/ // The module cache
- /******/ var installedModules = {};
- /******/
- /******/ // The require function
- /******/ function __webpack_require__(moduleId) {
- /******/
- /******/ // Check if module is in cache
- /******/ if(installedModules[moduleId]) {
- /******/ return installedModules[moduleId].exports;
- /******/ }
- /******/ // Create a new module (and put it into the cache)
- /******/ var module = installedModules[moduleId] = {
- /******/ i: moduleId,
- /******/ l: false,
- /******/ exports: {}
- /******/ };
- /******/
- /******/ // Execute the module function
- /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
- /******/
- /******/ // Flag the module as loaded
- /******/ module.l = true;
- /******/
- /******/ // Return the exports of the module
- /******/ return module.exports;
- /******/ }
- /******/
- /******/
- /******/ // expose the modules object (__webpack_modules__)
- /******/ __webpack_require__.m = modules;
- /******/
- /******/ // expose the module cache
- /******/ __webpack_require__.c = installedModules;
- /******/
- /******/ // define getter function for harmony exports
- /******/ __webpack_require__.d = function(exports, name, getter) {
- /******/ if(!__webpack_require__.o(exports, name)) {
- /******/ Object.defineProperty(exports, name, {
- /******/ configurable: false,
- /******/ enumerable: true,
- /******/ get: getter
- /******/ });
- /******/ }
- /******/ };
- /******/
- /******/ // getDefaultExport function for compatibility with non-harmony modules
- /******/ __webpack_require__.n = function(module) {
- /******/ var getter = module && module.__esModule ?
- /******/ function getDefault() { return module['default']; } :
- /******/ function getModuleExports() { return module; };
- /******/ __webpack_require__.d(getter, 'a', getter);
- /******/ return getter;
- /******/ };
- /******/
- /******/ // Object.prototype.hasOwnProperty.call
- /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
- /******/
- /******/ // __webpack_public_path__
- /******/ __webpack_require__.p = "";
- /******/
- /******/ // Load entry module and return exports
- /******/ return __webpack_require__(__webpack_require__.s = 1);
- /******/ })
- /************************************************************************/
- /******/ ([
- /* 0 */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- var OutputTypeEnum = function OutputTypeEnum() {
- _classCallCheck(this, OutputTypeEnum);
- this.OBJECT = 'OBJECT';
- this.STRING = 'STRING';
- this.URI = 'URI';
- this.BASE64 = 'BASE64';
- };
- exports.default = OutputTypeEnum;
- module.exports = exports['default'];
- /***/ }),
- /* 1 */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.OutputType = undefined;
- exports.capture = capture;
- var _outputTypeEnum = __webpack_require__(0);
- var _outputTypeEnum2 = _interopRequireDefault(_outputTypeEnum);
- var _capturer = __webpack_require__(2);
- var _capturer2 = _interopRequireDefault(_capturer);
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- var OutputType = exports.OutputType = new _outputTypeEnum2.default();
- function capture(outputType, htmlDocument, options) {
- return new _capturer2.default().capture(outputType, htmlDocument, options);
- }
- /***/ }),
- /* 2 */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
- var _logger = __webpack_require__(3);
- var _logger2 = _interopRequireDefault(_logger);
- var _encoder = __webpack_require__(4);
- var _encoder2 = _interopRequireDefault(_encoder);
- var _outputTypeEnum = __webpack_require__(0);
- var _outputTypeEnum2 = _interopRequireDefault(_outputTypeEnum);
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- var Capturer = function () {
- function Capturer() {
- _classCallCheck(this, Capturer);
- this._logger = new _logger2.default();
- this._isHead = true;
- this._classMap = {};
- this._classCount = 0;
- this._shouldHandleImgDataUrl = true;
- this._canvas = null;
- this._ctx = null;
- this._doc = null;
- this._options = {
- tagsOfIgnoredDocHeadElements: [
- 'script',
- // 'link',
- // 'style'
- ],
- tagsOfIgnoredDocBodyElements: ['script'],
- classesOfIgnoredDocBodyElements: [],
- attrKeyValuePairsOfIgnoredElements: {},
- tagsOfSkippedElementsForChildTreeCssHandling: ['svg'],
- attrKeyForSavingElementOrigClass: '_class',
- attrKeyForSavingElementOrigStyle: '_style',
- prefixForNewGeneratedClasses: 'c',
- imageFormatForDataUrl: 'image/png',
- imageQualityForDataUrl: 0.92,
- rulesToAddToDocStyle: [
- // '*{font-family:"Arial Narrow" !important;}'
- ]
- };
- }
- _createClass(Capturer, [{
- key: '_overrideOptions',
- value: function _overrideOptions(options) {
- if (options) {
- for (var def in options) {
- if (options.hasOwnProperty(def)) {
- this._options[def] = options[def];
- }
- }
- }
- }
- }, {
- key: '_getImgDataUrl',
- value: function _getImgDataUrl(imgElm) {
- var imgDataUrl = '';
- try {
- if (!this._canvas) {
- this._canvas = this._doc.createElement('canvas');
- this._ctx = this._canvas.getContext('2d');
- }
- this._canvas.width = imgElm.clientWidth;
- this._canvas.height = imgElm.clientHeight;
- this._ctx.drawImage(imgElm, 0, 0);
- imgDataUrl = this._canvas.toDataURL(this._options.imageFormatForDataUrl, this._options.imageQualityForDataUrl);
- } catch (ex) {
- this._logger.warn('getImgDataUrl() - ' + ex.message);
- this._shouldHandleImgDataUrl = false;
- }
- return imgDataUrl;
- }
- }, {
- key: '_getClasses',
- value: function _getClasses(domElm) {
- var classes = [];
- var className = domElm.className instanceof SVGAnimatedString ? domElm.className.baseVal : domElm.className;
- if (className) {
- var classNames = className.split(' ');
- classNames.forEach(function (c) {
- if (c) {
- classes.push(c);
- }
- });
- }
- return classes;
- }
- }, {
- key: '_getClassName',
- value: function _getClassName(domElm) {
- var classes = domElm.className;
- return classes instanceof SVGAnimatedString ? classes.baseVal : classes;
- }
- }, {
- key: '_handleElmCss',
- value: function _handleElmCss(domElm, newElm) {
- if (this._getClasses(newElm).length > 0) {
- if (this._options.attrKeyForSavingElementOrigClass) {
- newElm.setAttribute(this._options.attrKeyForSavingElementOrigClass, this._getClassName(newElm));
- }
- newElm.removeAttribute('class');
- }
- if (newElm.getAttribute('style')) {
- if (this._options.attrKeyForSavingElementOrigStyle) {
- newElm.setAttribute(this._options.attrKeyForSavingElementOrigStyle, newElm.getAttribute('style'));
- }
- newElm.removeAttribute('style');
- }
- var computedStyle = getComputedStyle(domElm);
- var classStr = '';
- for (var i = 0; i < computedStyle.length; i++) {
- var property = computedStyle.item(i);
- var value = computedStyle.getPropertyValue(property);
- var mapKey = property + ':' + value;
- var className = this._classMap[mapKey];
- if (!className) {
- this._classCount++;
- className = (this._options.prefixForNewGeneratedClasses ? this._options.prefixForNewGeneratedClasses : 'c') + this._classCount;
- this._classMap[mapKey] = className;
- }
- classStr += className + ' ';
- }
- if (classStr) {
- newElm.setAttribute('class', classStr.trim());
- }
- }
- }, {
- key: '_appendNewStyle',
- value: function _appendNewStyle(newHtml) {
- var style = this._doc.createElement('style');
- style.type = 'text/css';
- var cssText = this._options.rulesToAddToDocStyle ? this._options.rulesToAddToDocStyle.join('') : '';
- for (var def in this._classMap) {
- if (this._classMap.hasOwnProperty(def)) {
- cssText += '.' + this._classMap[def] + '{' + def + '}';
- }
- }
- if (style.styleSheet) {
- style.styleSheet.cssText = cssText;
- } else {
- style.appendChild(this._doc.createTextNode(cssText));
- }
- newHtml.children[0].appendChild(style);
- }
- }, {
- key: '_shouldIgnoreElm',
- value: function _shouldIgnoreElm(domElm) {
- var _this = this;
- var shouldRemoveElm = false;
- if (this._isHead && this._options.tagsOfIgnoredDocHeadElements && this._options.tagsOfIgnoredDocHeadElements.indexOf(domElm.tagName.toLowerCase()) > -1 || !this._isHead && this._options.tagsOfIgnoredDocBodyElements && this._options.tagsOfIgnoredDocBodyElements.indexOf(domElm.tagName.toLowerCase()) > -1) {
- shouldRemoveElm = true;
- }
- if (!shouldRemoveElm && this._options.attrKeyValuePairsOfIgnoredElements) {
- for (var attrKey in this._options.attrKeyValuePairsOfIgnoredElements) {
- if (this._options.attrKeyValuePairsOfIgnoredElements.hasOwnProperty(attrKey)) {
- for (var i = 0; i < domElm.attributes.length; i++) {
- if (domElm.attributes[i].specified && domElm.attributes[i].value === this._options.attrKeyValuePairsOfIgnoredElements[attrKey]) {
- shouldRemoveElm = true;
- }
- }
- }
- }
- }
- if (!shouldRemoveElm && !this._isHead && this._options.classesOfIgnoredDocBodyElements) {
- var domElmClasses = this._getClasses(domElm);
- domElmClasses.forEach(function (c) {
- if (!shouldRemoveElm && _this._options.classesOfIgnoredDocBodyElements.indexOf(c) > -1) {
- shouldRemoveElm = true;
- }
- });
- }
- return shouldRemoveElm;
- }
- }, {
- key: '_recursiveWalk',
- value: function _recursiveWalk(domElm, newElm, handleCss) {
- if (this._shouldHandleImgDataUrl && !this._isHead && domElm.tagName.toLowerCase() === 'img') {
- var imgDataUrl = this._getImgDataUrl(domElm);
- if (imgDataUrl) {
- newElm.setAttribute('src', imgDataUrl);
- }
- }
- if (handleCss) {
- this._handleElmCss(domElm, newElm);
- if (this._options.tagsOfSkippedElementsForChildTreeCssHandling && this._options.tagsOfSkippedElementsForChildTreeCssHandling.indexOf(domElm.tagName.toLowerCase()) > -1) {
- handleCss = false;
- }
- }
- if (domElm.children) {
- for (var i = domElm.children.length - 1; i >= 0; i--) {
- if (this._shouldIgnoreElm(domElm.children[i])) {
- newElm.removeChild(newElm.children[i]);
- } else {
- this._recursiveWalk(domElm.children[i], newElm.children[i], handleCss);
- }
- }
- }
- }
- }, {
- key: '_createNewHtml',
- value: function _createNewHtml() {
- var newHtml = this._doc.documentElement.cloneNode(false);
- this._handleElmCss(this._doc.documentElement, newHtml);
- return newHtml;
- }
- }, {
- key: '_appendNewHead',
- value: function _appendNewHead(newHtml) {
- var newHead = this._doc.head.cloneNode(true);
- this._isHead = true;
- this._recursiveWalk(this._doc.head, newHead, false);
- newHtml.appendChild(newHead);
- }
- }, {
- key: '_appendNewBody',
- value: function _appendNewBody(newHtml) {
- var newBody = this._doc.body.cloneNode(true);
- this._isHead = false;
- this._recursiveWalk(this._doc.body, newBody, true);
- newHtml.appendChild(newBody);
- }
- }, {
- key: '_getHtmlObject',
- value: function _getHtmlObject() {
- var newHtml = this._createNewHtml();
- this._appendNewHead(newHtml);
- this._appendNewBody(newHtml);
- this._appendNewStyle(newHtml);
- return newHtml;
- }
- }, {
- key: '_prepareOutput',
- value: function _prepareOutput(newHtmlObject, outputType) {
- var output = null;
- var outputTypeEnum = new _outputTypeEnum2.default();
- if (!outputType || outputType === outputTypeEnum.OBJECT) {
- output = newHtmlObject;
- } else {
- var outerHtml = (newHtmlObject ? newHtmlObject.outerHTML : '') || '';
- if (outerHtml) {
- if (outputType === outputTypeEnum.STRING) {
- output = outerHtml;
- } else if (outputType === outputTypeEnum.URI) {
- output = _encoder2.default.uriEncode(outerHtml);
- } else if (outputType === outputTypeEnum.BASE64) {
- output = _encoder2.default.base64Encode(outerHtml);
- }
- }
- output = output || '';
- }
- if (this._logger.isDebug()) {
- this._logger.debug('output: ' + (output.outerHTML ? output.outerHTML : output));
- }
- return output;
- }
- }, {
- key: 'capture',
- value: function capture(outputType, htmlDocument, options) {
- var output = null;
- var startTime = new Date().getTime();
- try {
- this._overrideOptions(options);
- this._doc = htmlDocument || document;
- this._logger.setLogLevel(this._options.logLevel);
- this._logger.info('capture() outputType: ' + outputType + ' - start');
- var newHtmlObject = this._getHtmlObject();
- output = this._prepareOutput(newHtmlObject, outputType);
- } catch (ex) {
- this._logger.error('capture() - error - ' + ex.message);
- } finally {
- this._logger.info('capture() - end - ' + (new Date().getTime() - startTime) + 'ms');
- }
- return output;
- }
- }]);
- return Capturer;
- }();
- exports.default = Capturer;
- module.exports = exports['default'];
- /***/ }),
- /* 3 */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- var Logger = function () {
- function Logger() {
- _classCallCheck(this, Logger);
- this._logLevelNames = ['debug', 'info', 'warn', 'error', 'fatal', 'off'];
- this.init();
- }
- _createClass(Logger, [{
- key: 'init',
- value: function init() {
- this._logLevel = this._logLevelNames.indexOf('warn');
- }
- }, {
- key: 'setLogLevel',
- value: function setLogLevel(levelName) {
- if (levelName && this._logLevelNames.indexOf(levelName.toLowerCase()) !== -1) {
- this._logLevel = this._logLevelNames.indexOf(levelName.toLowerCase());
- }
- }
- }, {
- key: '_log',
- value: function _log(msg, levelName) {
- if (this._logLevel <= this._logLevelNames.indexOf(levelName)) {
- console.log('|html-screen-capture-js|' + levelName + '| ' + msg);
- }
- }
- }, {
- key: 'isDebug',
- value: function isDebug() {
- return this._logLevel === this._logLevelNames.indexOf('debug');
- }
- }, {
- key: 'debug',
- value: function debug(msg) {
- this._log(msg, 'debug');
- }
- }, {
- key: 'info',
- value: function info(msg) {
- this._log(msg, 'info');
- }
- }, {
- key: 'warn',
- value: function warn(msg) {
- this._log(msg, 'warn');
- }
- }, {
- key: 'error',
- value: function error(msg) {
- this._log(msg, 'error');
- }
- }, {
- key: 'fatal',
- value: function fatal(msg) {
- this._log(msg, 'fatal');
- }
- }]);
- return Logger;
- }();
- exports.default = Logger;
- module.exports = exports['default'];
- /***/ }),
- /* 4 */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- var Encoder = function () {
- function Encoder() {
- _classCallCheck(this, Encoder);
- }
- _createClass(Encoder, null, [{
- key: '_utf8_encode',
- value: function _utf8_encode(str) {
- str = str.replace(/\r\n/g, '\n');
- var utfText = '';
- for (var n = 0; n < str.length; n++) {
- var c = str.charCodeAt(n);
- if (c < 128) {
- utfText += String.fromCharCode(c);
- } else if (c > 127 && c < 2048) {
- utfText += String.fromCharCode(c >> 6 | 192);
- utfText += String.fromCharCode(c & 63 | 128);
- } else {
- utfText += String.fromCharCode(c >> 12 | 224);
- utfText += String.fromCharCode(c >> 6 & 63 | 128);
- utfText += String.fromCharCode(c & 63 | 128);
- }
- }
- return utfText;
- }
- }, {
- key: 'base64Encode',
- value: function base64Encode(str) {
- var output = '';
- var keyStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
- var chr1 = void 0,
- chr2 = void 0,
- chr3 = void 0,
- enc1 = void 0,
- enc2 = void 0,
- enc3 = void 0,
- enc4 = void 0;
- var i = 0;
- str = Encoder._utf8_encode(str);
- while (i < str.length) {
- chr1 = str.charCodeAt(i++);
- chr2 = str.charCodeAt(i++);
- chr3 = str.charCodeAt(i++);
- enc1 = chr1 >> 2;
- enc2 = (chr1 & 3) << 4 | chr2 >> 4;
- enc3 = (chr2 & 15) << 2 | chr3 >> 6;
- enc4 = chr3 & 63;
- if (isNaN(chr2)) {
- enc3 = enc4 = 64;
- } else if (isNaN(chr3)) {
- enc4 = 64;
- }
- output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2) + keyStr.charAt(enc3) + keyStr.charAt(enc4);
- }
- return output;
- }
- }, {
- key: 'uriEncode',
- value: function uriEncode(str) {
- return (str ? encodeURI(str) : '') || '';
- }
- }]);
- return Encoder;
- }();
- exports.default = Encoder;
- module.exports = exports['default'];
- /***/ })
- /******/ ]);
- });
- //# sourceMappingURL=html-screen-capture.js.map
|