UNPKG

vant-fork

Version:

Lightweight Mobile UI Components built on Vue

121 lines (103 loc) 2.85 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports.default = void 0; var _create = _interopRequireDefault(require("../utils/create")); var _default = (0, _create.default)({ render: function render() { var _vm = this; var _h = _vm.$createElement; var _c = _vm._self._c || _h; return _c('div', { class: _vm.b() }, [_vm._t("default"), _c('input', _vm._b({ ref: "input", class: _vm.b('input'), attrs: { "type": "file", "accept": _vm.accept, "disabled": _vm.disabled }, on: { "change": _vm.onChange } }, 'input', _vm.$attrs, false))], 2); }, name: 'uploader', inheritAttrs: false, props: { disabled: Boolean, beforeRead: Function, afterRead: Function, accept: { type: String, default: 'image/*' }, resultType: { type: String, default: 'dataUrl' }, maxSize: { type: Number, default: Number.MAX_VALUE } }, methods: { onChange: function onChange(event) { var _this = this; var files = event.target.files; if (this.disabled || !files.length) { return; } files = files.length === 1 ? files[0] : [].slice.call(files, 0); if (!files || this.beforeRead && !this.beforeRead(files)) { return; } if (Array.isArray(files)) { Promise.all(files.map(this.readFile)).then(function (contents) { var oversize = false; var payload = files.map(function (file, index) { if (file.size > _this.maxSize) { oversize = true; } return { file: files[index], content: contents[index] }; }); _this.onAfterRead(payload, oversize); }); } else { this.readFile(files).then(function (content) { _this.onAfterRead({ file: files, content: content }, files.size > _this.maxSize); }); } }, readFile: function readFile(file) { var _this2 = this; return new Promise(function (resolve) { var reader = new FileReader(); reader.onload = function (event) { resolve(event.target.result); }; if (_this2.resultType === 'dataUrl') { reader.readAsDataURL(file); } else if (_this2.resultType === 'text') { reader.readAsText(file); } }); }, onAfterRead: function onAfterRead(files, oversize) { if (oversize) { this.$emit('oversize', files); } else { this.afterRead && this.afterRead(files); this.$refs.input && (this.$refs.input.value = ''); } } } }); exports.default = _default;