@cobinhood/react-native-canvas
Version:
<div align="center"> <img src="https://emojipedia-us.s3.amazonaws.com/thumbs/240/apple/96/fireworks_1f386.png"/> <h1>react-native-canvas</h1> </div>
276 lines (219 loc) • 10.1 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = exports.Path2D = exports.Image = undefined;
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
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 _dec,
_dec2,
_dec3,
_class,
_class2,
_temp,
_jsxFileName = 'src/Canvas.js';
var _Image = require('./Image');
Object.defineProperty(exports, 'Image', {
enumerable: true,
get: function get() {
return _interopRequireDefault(_Image).default;
}
});
var _Path2D = require('./Path2D');
Object.defineProperty(exports, 'Path2D', {
enumerable: true,
get: function get() {
return _interopRequireDefault(_Path2D).default;
}
});
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _propTypes = require('prop-types');
var _propTypes2 = _interopRequireDefault(_propTypes);
var _reactNative = require('react-native');
var _Bus = require('./Bus');
var _Bus2 = _interopRequireDefault(_Bus);
var _webviewBinders = require('./webview-binders');
var _CanvasRenderingContext2D = require('./CanvasRenderingContext2D');
var _CanvasRenderingContext2D2 = _interopRequireDefault(_CanvasRenderingContext2D);
var _indexHtml = require('./index.html.js');
var _indexHtml2 = _interopRequireDefault(_indexHtml);
require('./CanvasGradient');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
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 regeneratorRuntime = require('regenerator-runtime');
var Canvas = (_dec = (0, _webviewBinders.webviewTarget)('canvas'), _dec2 = (0, _webviewBinders.webviewProperties)({ width: 300, height: 150 }), _dec3 = (0, _webviewBinders.webviewMethods)(['toDataURL']), _dec(_class = _dec2(_class = _dec3(_class = (_temp = _class2 = function (_Component) {
_inherits(Canvas, _Component);
function Canvas() {
var _this2 = this;
_classCallCheck(this, Canvas);
var _this = _possibleConstructorReturn(this, (Canvas.__proto__ || Object.getPrototypeOf(Canvas)).call(this));
_this.addMessageListener = function (listener) {
_this.listeners.push(listener);
return function () {
return _this.removeMessageListener(listener);
};
};
_this.removeMessageListener = function (listener) {
_this.listeners.splice(_this.listeners.indexOf(listener), 1);
};
_this.loaded = false;
_this.webviewPostMessage = function (message) {
return _this.webview && _this.webview.postMessage(JSON.stringify(message));
};
_this.bus = new _Bus2.default(_this.webviewPostMessage);
_this.listeners = [];
_this.context2D = new _CanvasRenderingContext2D2.default(_this);
_this.getContext = function (contextType, contextAttributes) {
switch (contextType) {
case '2d':
{
return _this.context2D;
}
}
return null;
};
_this.postMessage = function _callee(message) {
var _ref, stack, _ref2, type, payload, error;
return regeneratorRuntime.async(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_ref = new Error(), stack = _ref.stack;
_context.next = 3;
return regeneratorRuntime.awrap(_this.bus.post(_extends({ id: Math.random() }, message)));
case 3:
_ref2 = _context.sent;
type = _ref2.type;
payload = _ref2.payload;
_context.t0 = type;
_context.next = _context.t0 === 'error' ? 9 : _context.t0 === 'json' ? 12 : _context.t0 === 'blob' ? 13 : 14;
break;
case 9:
error = new Error(payload.message);
error.stack = stack;
throw error;
case 12:
return _context.abrupt('return', payload);
case 13:
return _context.abrupt('return', atob(payload));
case 14:
case 'end':
return _context.stop();
}
}
}, null, _this2);
};
_this.handleMessage = function (e) {
var data = JSON.parse(e.nativeEvent.data);
switch (data.type) {
case 'log':
{
var _console;
(_console = console).log.apply(_console, _toConsumableArray(data.payload));
break;
}
default:
{
if (data.payload) {
var _constructor = _webviewBinders.constructors[data.meta.constructor];
if (_constructor) {
var _data = data,
payload = _data.payload;
data = _extends({}, data, {
payload: _extends(new _constructor(_this), payload, _defineProperty({}, _webviewBinders.WEBVIEW_TARGET, data.meta.target))
});
}
for (var _iterator = _this.listeners, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[typeof Symbol === 'function' ? typeof Symbol === 'function' ? Symbol.iterator : '@@iterator' : '@@iterator']();;) {
var _ref3;
if (_isArray) {
if (_i >= _iterator.length) break;
_ref3 = _iterator[_i++];
} else {
_i = _iterator.next();
if (_i.done) break;
_ref3 = _i.value;
}
var listener = _ref3;
listener(data.payload);
}
}
_this.bus.handle(data);
}
}
};
_this.handleRef = function (element) {
_this.webview = element;
};
_this.handleLoad = function () {
_this.loaded = true;
_this.bus.resume();
};
_this.bus.pause();
return _this;
}
_createClass(Canvas, [{
key: 'render',
value: function render() {
var width = this.width,
height = this.height;
var style = this.props.style;
if (_reactNative.Platform.OS === 'android') {
return _react2.default.createElement(
_reactNative.View,
{ style: _extends({ width: width, height: height, overflow: 'hidden', flex: 0 }, style), __source: {
fileName: _jsxFileName,
lineNumber: 111
}
},
_react2.default.createElement(_reactNative.WebView, {
ref: this.handleRef,
style: { width: width, height: height, overflow: 'hidden', backgroundColor: 'transparent' },
source: { html: _indexHtml2.default },
onMessage: this.handleMessage,
onLoad: this.handleLoad,
originWhitelist: ['*'],
mixedContentMode: 'always',
scalesPageToFit: false,
javaScriptEnabled: true,
domStorageEnabled: true,
thirdPartyCookiesEnabled: true,
__source: {
fileName: _jsxFileName,
lineNumber: 112
}
})
);
}
return _react2.default.createElement(
_reactNative.View,
{ style: _extends({ width: width, height: height, overflow: 'hidden', flex: 0 }, style), __source: {
fileName: _jsxFileName,
lineNumber: 129
}
},
_react2.default.createElement(_reactNative.WebView, {
ref: this.handleRef,
style: { width: width, height: height, overflow: 'hidden', backgroundColor: 'transparent' },
source: { html: _indexHtml2.default, baseUrl: '/' },
onMessage: this.handleMessage,
onLoad: this.handleLoad,
originWhitelist: ['*'],
scrollEnabled: false,
scalesPageToFit: false,
__source: {
fileName: _jsxFileName,
lineNumber: 130
}
})
);
}
}]);
return Canvas;
}(_react.Component), _class2.propTypes = {
style: _propTypes2.default.shape(_reactNative.ViewStylePropTypes)
}, _temp)) || _class) || _class) || _class);
exports.default = Canvas;