UNPKG

antd-mobile

Version:

基于 React 的移动设计规范实现

208 lines (175 loc) 8.4 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = undefined; var _defineProperty2 = require('babel-runtime/helpers/defineProperty'); var _defineProperty3 = _interopRequireDefault(_defineProperty2); var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn'); var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); var _inherits2 = require('babel-runtime/helpers/inherits'); var _inherits3 = _interopRequireDefault(_inherits2); var _react = require('react'); var React = _interopRequireWildcard(_react); var _classnames = require('classnames'); var _classnames2 = _interopRequireDefault(_classnames); var _wingBlank = require('../wing-blank'); var _wingBlank2 = _interopRequireDefault(_wingBlank); var _flex = require('../flex'); var _flex2 = _interopRequireDefault(_flex); var _toast = require('../toast'); var _toast2 = _interopRequireDefault(_toast); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj["default"] = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function noop() {} var ImagePicker = function (_React$Component) { (0, _inherits3["default"])(ImagePicker, _React$Component); function ImagePicker() { (0, _classCallCheck3["default"])(this, ImagePicker); for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } // http://stackoverflow.com/questions/7584794/accessing-jpeg-exif-rotation-data-in-javascript-on-the-client-side var _this = (0, _possibleConstructorReturn3["default"])(this, _React$Component.call.apply(_React$Component, [this].concat(args))); _this.getOrientation = function (file, callback) { if (!/iphone|ipad/i.test(navigator.userAgent)) { callback('-1'); } else { var reader = new FileReader(); reader.onload = function (e) { var view = new DataView(e.target.result); if (view.getUint16(0, false) !== 0xFFD8) { return callback(-2); } var length = view.byteLength; var offset = 2; while (offset < length) { var marker = view.getUint16(offset, false); offset += 2; if (marker === 0xFFE1) { var tmp = view.getUint32(offset += 2, false); if (tmp !== 0x45786966) { return callback(-1); } var little = view.getUint16(offset += 6, false) === 0x4949; offset += view.getUint32(offset + 4, little); var tags = view.getUint16(offset, little); offset += 2; for (var i = 0; i < tags; i++) { if (view.getUint16(offset + i * 12, little) === 0x0112) { return callback(view.getUint16(offset + i * 12 + 8, little)); } } } else if ((marker & 0xFF00) !== 0xFF00) { break; } else { offset += view.getUint16(offset, false); } } return callback(-1); }; reader.readAsArrayBuffer(file.slice(0, 64 * 1024)); } }; _this.removeImage = function (index) { var newImages = []; _this.props.files.forEach(function (image, idx) { if (index !== idx) { newImages.push(image); } }); _this.props.onChange(newImages, 'remove', index); }; _this.addImage = function (imgItem) { var newImages = _this.props.files.concat(imgItem); _this.props.onChange(newImages, 'add'); }; _this.onFileChange = function () { var fileSelectorEl = _this.refs.fileSelectorInput; if (fileSelectorEl.files && fileSelectorEl.files.length) { (function () { var file = fileSelectorEl.files[0]; var reader = new FileReader(); reader.onload = function (e) { var dataURL = e.target.result; if (!dataURL) { _toast2["default"].fail('图片获取失败'); return; } var orientation = 1; _this.getOrientation(file, function (res) { // -2: not jpeg , -1: not defined if (res > 0) { orientation = res; } _this.addImage({ url: dataURL, orientation: orientation }); fileSelectorEl.value = ''; }); }; reader.readAsDataURL(file); })(); } }; return _this; } ImagePicker.prototype.render = function render() { var _classNames, _this2 = this; var _props = this.props; var prefixCls = _props.prefixCls; var style = _props.style; var className = _props.className; var files = _props.files; var dpr = window.devicePixelRatio || 1; var imgItemList = []; var customWidth = (document.documentElement.clientWidth - 18 * dpr - 6 * dpr * 3) / 4; var wrapCls = (0, _classnames2["default"])((_classNames = {}, (0, _defineProperty3["default"])(_classNames, '' + prefixCls, true), (0, _defineProperty3["default"])(_classNames, className, className), _classNames)); var itemStyle = { width: customWidth + 'px', height: customWidth + 'px' }; files.forEach(function (image, index) { imgItemList.push(React.createElement( 'div', { key: index, className: prefixCls + '-item', style: itemStyle }, React.createElement('div', { className: prefixCls + '-item-remove', onClick: _this2.removeImage.bind(_this2, index) }), React.createElement('div', { className: prefixCls + '-item-content', style: { backgroundImage: 'url(' + image.url + ')' } }) )); }); return React.createElement( 'div', { className: wrapCls, style: style }, React.createElement( 'div', { className: prefixCls + '-list' }, React.createElement( _wingBlank2["default"], { size: 'md' }, React.createElement( _flex2["default"], { wrap: 'wrap' }, imgItemList, React.createElement( 'div', { className: prefixCls + '-item ' + prefixCls + '-upload-btn', style: itemStyle }, React.createElement('input', { style: itemStyle, ref: 'fileSelectorInput', type: 'file', accept: 'image/jpg,image/jpeg,image/png,image/gif', onChange: this.onFileChange }) ) ) ) ) ); }; return ImagePicker; }(React.Component); exports["default"] = ImagePicker; ImagePicker.defaultProps = { prefixCls: 'am-image-picker', files: [], onChange: noop }; module.exports = exports['default'];