UNPKG

@towavephone/react-watermark-component

Version:

react-watermark-component is a component that can generate a water mark background image.

188 lines (152 loc) 17.4 kB
'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 _class, _temp; var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _propTypes = require('prop-types'); var _propTypes2 = _interopRequireDefault(_propTypes); var _WaterMarkCanvas = require('./WaterMarkCanvas'); var _WaterMarkCanvas2 = _interopRequireDefault(_WaterMarkCanvas); var _SecurityDefense = require('./SecurityDefense'); var _SecurityDefense2 = _interopRequireDefault(_SecurityDefense); 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"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } var defaultOptions = { chunkWidth: 200, chunkHeight: 60, textAlign: 'left', textBaseline: 'bottom', globalAlpha: 0.17, font: '14px Microsoft Yahei', rotateAngle: -0.26, fillStyle: '#666' }; var waterMarkStyle = 'position: absolute;left: 0;right: 0;top:0;bottom:0;opacity: 0.7;z-index: 9999;pointer-events: none;overflow: hidden;background-color: transparent;background-repeat: repeat;'; var noop = function noop() {}; var WaterMark = (_temp = _class = function (_React$Component) { _inherits(WaterMark, _React$Component); function WaterMark(props) { _classCallCheck(this, WaterMark); var _this = _possibleConstructorReturn(this, (WaterMark.__proto__ || Object.getPrototypeOf(WaterMark)).call(this, props)); _this.encrypt = function (str) { return window.btoa(decodeURI(encodeURIComponent(str))); }; _this.genRandomId = function () { var prefix = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; return _this.encrypt(prefix) + '-' + new Date().getTime() + '-' + Math.floor(Math.random() * Math.pow(10, 8)); }; _this.updateObserver = function () { var observers = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; if (observers.DOMRemoveObserver) { _this.DOMRemoveObserver = observers.DOMRemoveObserver; } if (observers.DOMAttrModifiedObserver) { _this.DOMAttrModifiedObserver = observers.DOMAttrModifiedObserver; } }; _this.getCanvasUrl = function () { var _this$props = _this.props, waterMarkText = _this$props.waterMarkText, options = _this$props.options; var newOptions = Object.assign({}, defaultOptions, options); return (0, _WaterMarkCanvas2.default)(waterMarkText, newOptions); }; _this.watermarkId = _this.genRandomId('water-mark'); _this.watermarkWrapperId = _this.genRandomId('water-mark-wrapper'); _this.security = null; _this.DOMRemoveObserver = null; _this.DOMAttrModifiedObserver = null; return _this; } _createClass(WaterMark, [{ key: 'componentDidMount', value: function componentDidMount() { var _props = this.props, openSecurityDefense = _props.openSecurityDefense, securityAlarm = _props.securityAlarm; if (openSecurityDefense) { var style = { waterMarkStyle: waterMarkStyle, getCanvasUrl: this.getCanvasUrl }; var securityHooks = { securityAlarm: securityAlarm, updateObserver: this.updateObserver }; var watermarkDOM = { watermarkId: this.watermarkId, watermarkWrapperId: this.watermarkWrapperId, genRandomId: this.genRandomId }; this.security = new _SecurityDefense2.default(watermarkDOM, style, securityHooks); } } }, { key: 'componentWillUnmount', value: function componentWillUnmount() { if (this.props.openSecurityDefense) { if (this.DOMRemoveObserver) { this.DOMRemoveObserver.disconnect(); } if (this.DOMAttrModifiedObserver) { this.DOMAttrModifiedObserver.disconnect(); } this.security = null; } } }, { key: 'render', value: function render() { var children = this.props.children; var styles = { position: 'absolute', left: 0, right: 0, top: 0, bottom: 0, opacity: 0.7, zIndex: 9999, pointerEvents: 'none', overflow: 'hidden', backgroundImage: 'url("' + this.getCanvasUrl() + '")', backgroundColor: 'transparent', backgroundRepeat: 'repeat' }; return _react2.default.createElement( 'div', { style: { position: 'relative' }, id: this.watermarkWrapperId }, _react2.default.createElement('div', { style: styles, id: this.watermarkId }), children ); } }]); return WaterMark; }(_react2.default.Component), _class.propTypes = { children: _propTypes2.default.element.isRequired, waterMarkText: _propTypes2.default.string.isRequired, openSecurityDefense: _propTypes2.default.bool, securityAlarm: _propTypes2.default.func, options: _propTypes2.default.shape({ chunkWidth: _propTypes2.default.number, chunkHeight: _propTypes2.default.number, textAlign: _propTypes2.default.string, textBaseline: _propTypes2.default.string, globalAlpha: _propTypes2.default.number, font: _propTypes2.default.string, rotateAngle: _propTypes2.default.number, fillStyle: _propTypes2.default.string }) }, _temp); WaterMark.defaultProps = { openSecurityDefense: false, securityAlarm: noop, options: defaultOptions }; exports.default = WaterMark; module.exports = exports['default']; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJkZWZhdWx0T3B0aW9ucyIsImNodW5rV2lkdGgiLCJjaHVua0hlaWdodCIsInRleHRBbGlnbiIsInRleHRCYXNlbGluZSIsImdsb2JhbEFscGhhIiwiZm9udCIsInJvdGF0ZUFuZ2xlIiwiZmlsbFN0eWxlIiwid2F0ZXJNYXJrU3R5bGUiLCJub29wIiwiV2F0ZXJNYXJrIiwicHJvcHMiLCJlbmNyeXB0Iiwic3RyIiwid2luZG93IiwiYnRvYSIsImRlY29kZVVSSSIsImVuY29kZVVSSUNvbXBvbmVudCIsImdlblJhbmRvbUlkIiwicHJlZml4IiwiRGF0ZSIsImdldFRpbWUiLCJNYXRoIiwiZmxvb3IiLCJyYW5kb20iLCJwb3ciLCJ1cGRhdGVPYnNlcnZlciIsIm9ic2VydmVycyIsIkRPTVJlbW92ZU9ic2VydmVyIiwiRE9NQXR0ck1vZGlmaWVkT2JzZXJ2ZXIiLCJnZXRDYW52YXNVcmwiLCJ3YXRlck1hcmtUZXh0Iiwib3B0aW9ucyIsIm5ld09wdGlvbnMiLCJPYmplY3QiLCJhc3NpZ24iLCJ3YXRlcm1hcmtJZCIsIndhdGVybWFya1dyYXBwZXJJZCIsInNlY3VyaXR5Iiwib3BlblNlY3VyaXR5RGVmZW5zZSIsInNlY3VyaXR5QWxhcm0iLCJzdHlsZSIsInNlY3VyaXR5SG9va3MiLCJ3YXRlcm1hcmtET00iLCJTZWN1cml0eURlZmVuc2UiLCJkaXNjb25uZWN0IiwiY2hpbGRyZW4iLCJzdHlsZXMiLCJwb3NpdGlvbiIsImxlZnQiLCJyaWdodCIsInRvcCIsImJvdHRvbSIsIm9wYWNpdHkiLCJ6SW5kZXgiLCJwb2ludGVyRXZlbnRzIiwib3ZlcmZsb3ciLCJiYWNrZ3JvdW5kSW1hZ2UiLCJiYWNrZ3JvdW5kQ29sb3IiLCJiYWNrZ3JvdW5kUmVwZWF0IiwiUmVhY3QiLCJDb21wb25lbnQiLCJwcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJlbGVtZW50IiwiaXNSZXF1aXJlZCIsInN0cmluZyIsImJvb2wiLCJmdW5j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QUFnQjtBQUN2QnJFLGdCQUFZK0Qsb0JBQVVPLE1BREM7QUFFdkJyRSxpQkFBYThELG9CQUFVTyxNQUZBO0FBR3ZCcEUsZUFBVzZELG9CQUFVRyxNQUhFO0FBSXZCL0Qsa0JBQWM0RCxvQkFBVUcsTUFKRDtBQUt2QjlELGlCQUFhMkQsb0JBQVVPLE1BTEE7QUFNdkJqRSxVQUFNMEQsb0JBQVVHLE1BTk87QUFPdkI1RCxpQkFBYXlELG9CQUFVTyxNQVBBO0FBUXZCL0QsZUFBV3dELG9CQUFVRztBQVJFLEdBQWhCO0FBTFEsQzs7O0FBMkdyQnhELFVBQVU2RCxZQUFWLEdBQXlCO0FBQ3ZCaEMsdUJBQXFCLEtBREU7QUFFdkJDLGlCQUFlL0IsSUFGUTtBQUd2QnVCLFdBQVNqQztBQUhjLENBQXpCOztrQkFNZVcsUyIsImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcydcbmltcG9ydCBnZXRXYXRlck1hcmtDYW52YXMgZnJvbSAnLi9XYXRlck1hcmtDYW52YXMnXG5pbXBvcnQgU2VjdXJpdHlEZWZlbnNlIGZyb20gJy4vU2VjdXJpdHlEZWZlbnNlJ1xuXG5jb25zdCBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgY2h1bmtXaWR0aDogMjAwLFxuICBjaHVua0hlaWdodDogNjAsXG4gIHRleHRBbGlnbjogJ2xlZnQnLFxuICB0ZXh0QmFzZWxpbmU6ICdib3R0b20nLFxuICBnbG9iYWxBbHBoYTogMC4xNyxcbiAgZm9udDogJzE0cHggTWljcm9zb2Z0IFlhaGVpJyxcbiAgcm90YXRlQW5nbGU6IC0wLjI2LFxuICBmaWxsU3R5bGU6ICcjNjY2J1xufVxuXG5jb25zdCB3YXRlck1hcmtTdHlsZSA9ICdwb3NpdGlvbjogYWJzb2x1dGU7bGVmdDogMDtyaWdodDogMDt0b3A6MDtib3R0b206MDtvcGFjaXR5OiAwLjc7ei1pbmRleDogOTk5OTtwb2ludGVyLWV2ZW50czogbm9uZTtvdmVyZmxvdzogaGlkZGVuO2JhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O2JhY2tncm91bmQtcmVwZWF0OiByZXBlYXQ7J1xuY29uc3Qgbm9vcCA9IGZ1bmN0aW9uICgpIHt9XG5cbmNsYXNzIFdhdGVyTWFyayBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgY2hpbGRyZW46IFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWQsXG4gICAgd2F0ZXJNYXJrVGV4dDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIG9wZW5TZWN1cml0eURlZmVuc2U6IFByb3BUeXBlcy5ib29sLFxuICAgIHNlY3VyaXR5QWxhcm06IFByb3BUeXBlcy5mdW5jLFxuICAgIG9wdGlvbnM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBjaHVua1dpZHRoOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgICAgY2h1bmtIZWlnaHQ6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgICB0ZXh0QWxpZ246IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICB0ZXh0QmFzZWxpbmU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBnbG9iYWxBbHBoYTogUHJvcFR5cGVzLm51bWJlcixcbiAgICAgIGZvbnQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICByb3RhdGVBbmdsZTogUHJvcFR5cGVzLm51bWJlcixcbiAgICAgIGZpbGxTdHlsZTogUHJvcFR5cGVzLnN0cmluZ1xuICAgIH0pXG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKVxuICAgIHRoaXMud2F0ZXJtYXJrSWQgPSB0aGlzLmdlblJhbmRvbUlkKCd3YXRlci1tYXJrJylcbiAgICB0aGlzLndhdGVybWFya1dyYXBwZXJJZCA9IHRoaXMuZ2VuUmFuZG9tSWQoJ3dhdGVyLW1hcmstd3JhcHBlcicpXG4gICAgdGhpcy5zZWN1cml0eSA9IG51bGxcbiAgICB0aGlzLkRPTVJlbW92ZU9ic2VydmVyID0gbnVsbFxuICAgIHRoaXMuRE9NQXR0ck1vZGlmaWVkT2JzZXJ2ZXIgPSBudWxsXG4gIH1cblxuICBlbmNyeXB0ID0gKHN0cikgPT4ge1xuICAgIHJldHVybiB3aW5kb3cuYnRvYShkZWNvZGVVUkkoZW5jb2RlVVJJQ29tcG9uZW50KHN0cikpKVxuICB9XG5cbiAgZ2VuUmFuZG9tSWQgPSAocHJlZml4ID0gJycpID0+IHtcbiAgICByZXR1cm4gYCR7dGhpcy5lbmNyeXB0KHByZWZpeCl9LSR7KG5ldyBEYXRlKCkpLmdldFRpbWUoKX0tJHtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBNYXRoLnBvdygxMCwgOCkpfWBcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIGNvbnN0IHsgb3BlblNlY3VyaXR5RGVmZW5zZSwgc2VjdXJpdHlBbGFybSB9ID0gdGhpcy5wcm9wc1xuICAgIGlmIChvcGVuU2VjdXJpdHlEZWZlbnNlKSB7XG4gICAgICBjb25zdCBzdHlsZSA9IHtcbiAgICAgICAgd2F0ZXJNYXJrU3R5bGUsXG4gICAgICAgIGdldENhbnZhc1VybDogdGhpcy5nZXRDYW52YXNVcmxcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNlY3VyaXR5SG9va3MgPSB7XG4gICAgICAgIHNlY3VyaXR5QWxhcm0sXG4gICAgICAgIHVwZGF0ZU9ic2VydmVyOiB0aGlzLnVwZGF0ZU9ic2VydmVyXG4gICAgICB9XG4gICAgICBjb25zdCB3YXRlcm1hcmtET00gPSB7XG4gICAgICAgIHdhdGVybWFya0lkOiB0aGlzLndhdGVybWFya0lkLFxuICAgICAgICB3YXRlcm1hcmtXcmFwcGVySWQ6IHRoaXMud2F0ZXJtYXJrV3JhcHBlcklkLFxuICAgICAgICBnZW5SYW5kb21JZDogdGhpcy5nZW5SYW5kb21JZFxuICAgICAgfVxuICAgICAgdGhpcy5zZWN1cml0eSA9IG5ldyBTZWN1cml0eURlZmVuc2Uod2F0ZXJtYXJrRE9NLCBzdHlsZSwgc2VjdXJpdHlIb29rcylcbiAgICB9XG4gIH1cblxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5vcGVuU2VjdXJpdHlEZWZlbnNlKSB7XG4gICAgICBpZiAodGhpcy5ET01SZW1vdmVPYnNlcnZlcikge1xuICAgICAgICB0aGlzLkRPTVJlbW92ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuRE9NQXR0ck1vZGlmaWVkT2JzZXJ2ZXIpIHtcbiAgICAgICAgdGhpcy5ET01BdHRyTW9kaWZpZWRPYnNlcnZlci5kaXNjb25uZWN0KClcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VjdXJpdHkgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgdXBkYXRlT2JzZXJ2ZXIgPSAob2JzZXJ2ZXJzID0ge30pID0+IHtcbiAgICBpZiAob2JzZXJ2ZXJzLkRPTVJlbW92ZU9ic2VydmVyKSB7XG4gICAgICB0aGlzLkRPTVJlbW92ZU9ic2VydmVyID0gb2JzZXJ2ZXJzLkRPTVJlbW92ZU9ic2VydmVyXG4gICAgfVxuICAgIGlmIChvYnNlcnZlcnMuRE9NQXR0ck1vZGlmaWVkT2JzZXJ2ZXIpIHtcbiAgICAgIHRoaXMuRE9NQXR0ck1vZGlmaWVkT2JzZXJ2ZXIgPSBvYnNlcnZlcnMuRE9NQXR0ck1vZGlmaWVkT2JzZXJ2ZXJcbiAgICB9XG4gIH1cblxuICBnZXRDYW52YXNVcmwgPSAoKSA9PiB7XG4gICAgY29uc3QgeyB3YXRlck1hcmtUZXh0LCBvcHRpb25zIH0gPSB0aGlzLnByb3BzXG4gICAgY29uc3QgbmV3T3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRPcHRpb25zLCBvcHRpb25zKVxuICAgIHJldHVybiBnZXRXYXRlck1hcmtDYW52YXMod2F0ZXJNYXJrVGV4dCwgbmV3T3B0aW9ucylcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7IGNoaWxkcmVuIH0gPSB0aGlzLnByb3BzXG4gICAgY29uc3Qgc3R5bGVzID0ge1xuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICBsZWZ0OiAwLFxuICAgICAgcmlnaHQ6IDAsXG4gICAgICB0b3A6IDAsXG4gICAgICBib3R0b206IDAsXG4gICAgICBvcGFjaXR5OiAwLjcsXG4gICAgICB6SW5kZXg6IDk5OTksXG4gICAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gICAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gICAgICBiYWNrZ3JvdW5kSW1hZ2U6IGB1cmwoXCIke3RoaXMuZ2V0Q2FudmFzVXJsKCl9XCIpYCxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICAgIGJhY2tncm91bmRSZXBlYXQ6ICdyZXBlYXQnXG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgc3R5bGU9e3sgcG9zaXRpb246ICdyZWxhdGl2ZScgfX0gaWQ9e3RoaXMud2F0ZXJtYXJrV3JhcHBlcklkfT5cbiAgICAgICAgPGRpdiBzdHlsZT17c3R5bGVzfSBpZD17dGhpcy53YXRlcm1hcmtJZH0gLz5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9kaXY+XG4gICAgKVxuICB9XG59XG5cbldhdGVyTWFyay5kZWZhdWx0UHJvcHMgPSB7XG4gIG9wZW5TZWN1cml0eURlZmVuc2U6IGZhbHNlLFxuICBzZWN1cml0eUFsYXJtOiBub29wLFxuICBvcHRpb25zOiBkZWZhdWx0T3B0aW9uc1xufVxuXG5leHBvcnQgZGVmYXVsdCBXYXRlck1hcmtcbiJdfQ==