diff --git a/README.md b/README.md index f6d639c..902505b 100644 --- a/README.md +++ b/README.md @@ -1,248 +1,35 @@ # vue-upload-component -> Vue.js file upload component, Support for multiple file uploads, progress, html4, ie9 -**Html4 does not support the progress bar, file size, accept, timeout, headers, response status code error of judgment** - - - -## Install - -``` bash - npm install vue-upload-component --save -``` - -### HTML -```html - - - - - Vue-upload-component Test - - - - -
- Upload file - -
- - - -``` - -### CommonJS -```js - var FileUpload = require('vue-upload-component'); - new Vue({ - template: 'Upload file', - data: function() { - return { - files: [] - } - }, - components: { - FileUpload: FileUpload - } - }) - -``` - -### ES6 -```js - import FileUpload from 'vue-upload-component' - new Vue({ - template: 'Upload file', - data() { - return { - files: [] - } - }, - components: { - FileUpload - } - }) - -``` - - -### SSR (Server) -```js -import FileUpload from 'vue-upload-component/src' -``` - -#### webpack.config.js -```js -var nodeExternals = require('webpack-node-externals'); -{ - //..... - externals: [ - nodeExternals({whitelist:[/^vue-upload-component/]}) - ] - //..... -} -``` - -## Examples +> Vue.js file upload component + - [x] Multi-file upload + - [x] Upload directory + - [x] Drag and drop + - [x] Drag the directory + - [x] Upload multiple files at the same time + - [x] html4 (IE 9) + - [x] `PUT` method + - [x] Customize the filter + - [x] thumbnails + + +> Vue.js 文件上传组建 + - [x] 上传多文件 + - [x] 上传目录 + - [x] 拖拽 + - [x] 拖拽目录 + - [x] 多线程 + - [x] html4(IE 9) + - [x] `PUT` 方法 + - [x] 自定义过滤器 + - [x] 缩略图 + +# 演示 (Example) https://lian-yue.github.io/vue-upload-component/ -https://github.com/lian-yue/vue-upload-component/tree/2.0/example/ -``` html -
- Upload file -
- - -``` - -## Build Setup - -``` bash -# install dependencies -npm install - -# serve with hot reload at localhost:8080 -npm run dev - -# build for production with minification -npm run build -``` - - - -# Setting - - -## Props -``` html - - Add Files - -``` - - - - -### Props value -``` js - [ - { - id: 'String', // Read only - name: 'filename String', - size: 'filesize Number', // -1 = html4 - progress: 'progress String', // Read only - speed: "Speed Number", // Read only - active: 'active Boolean', // set active = fasle abort upload - error: 'error String', // Read only - success: 'success Boolean', // Read only - response: 'Response data Object or String', // Read only - putAction: 'String uri', - postAction: 'String uri', - timeout: "Number", - headers: { - "X-Csrf-Token": "xxxx", - }, - data: { - "_csrf_token": "xxxxxx", - }, - - xhr: "False or XMLHttpRequest object", // html5 - iframe: "False or Element object", // html4 - file: "undefined or File object" // html5 - el: "undefined or Input object" - } - ] -``` - - - - - -## data -``` js - { - mode: 'html5', // html5 or html4 - - active: false, // set active = false abort upload - - uploaded: true, // Read only - - dropActive: false, // Read only - - destroy: false, // Read only Component destroy = true - } -``` +# 文档 (Documents) +**[中文文档](https://github.com/lian-yue/vue-upload-component/tree/2.0/docs/zh-cn/README.md)** -## methods -```` - clear() - get(id or file Object) - add(window.File Object or object) - update(id or file Object, data) - remove(id or file Object) -``` +**[English document](https://github.com/lian-yue/vue-upload-component/tree/2.0/docs/en/README.md)** diff --git a/dist/example.js b/dist/example.js index 3cef885..3736565 100644 --- a/dist/example.js +++ b/dist/example.js @@ -44,7 +44,7 @@ /* 0 */ /***/ (function(module, exports, __webpack_require__) { - module.exports = __webpack_require__(53); + module.exports = __webpack_require__(57); /***/ }), @@ -83,23 +83,44 @@ /* 4 */ /***/ (function(module, exports, __webpack_require__) { - var isObject = __webpack_require__(12); + var anObject = __webpack_require__(5) + , IE8_DOM_DEFINE = __webpack_require__(40) + , toPrimitive = __webpack_require__(32) + , dP = Object.defineProperty; + + exports.f = __webpack_require__(6) ? Object.defineProperty : function defineProperty(O, P, Attributes){ + anObject(O); + P = toPrimitive(P, true); + anObject(Attributes); + if(IE8_DOM_DEFINE)try { + return dP(O, P, Attributes); + } catch(e){ /* empty */ } + if('get' in Attributes || 'set' in Attributes)throw TypeError('Accessors not supported!'); + if('value' in Attributes)O[P] = Attributes.value; + return O; + }; + +/***/ }), +/* 5 */ +/***/ (function(module, exports, __webpack_require__) { + + var isObject = __webpack_require__(14); module.exports = function(it){ if(!isObject(it))throw TypeError(it + ' is not an object!'); return it; }; /***/ }), -/* 5 */ +/* 6 */ /***/ (function(module, exports, __webpack_require__) { // Thank's IE8 for his funny defineProperty - module.exports = !__webpack_require__(11)(function(){ + module.exports = !__webpack_require__(13)(function(){ return Object.defineProperty({}, 'a', {get: function(){ return 7; }}).a != 7; }); /***/ }), -/* 6 */ +/* 7 */ /***/ (function(module, exports) { var hasOwnProperty = {}.hasOwnProperty; @@ -108,45 +129,24 @@ }; /***/ }), -/* 7 */ +/* 8 */ /***/ (function(module, exports, __webpack_require__) { - var dP = __webpack_require__(8) - , createDesc = __webpack_require__(19); - module.exports = __webpack_require__(5) ? function(object, key, value){ + var dP = __webpack_require__(4) + , createDesc = __webpack_require__(17); + module.exports = __webpack_require__(6) ? function(object, key, value){ return dP.f(object, key, createDesc(1, value)); } : function(object, key, value){ object[key] = value; return object; }; -/***/ }), -/* 8 */ -/***/ (function(module, exports, __webpack_require__) { - - var anObject = __webpack_require__(4) - , IE8_DOM_DEFINE = __webpack_require__(37) - , toPrimitive = __webpack_require__(30) - , dP = Object.defineProperty; - - exports.f = __webpack_require__(5) ? Object.defineProperty : function defineProperty(O, P, Attributes){ - anObject(O); - P = toPrimitive(P, true); - anObject(Attributes); - if(IE8_DOM_DEFINE)try { - return dP(O, P, Attributes); - } catch(e){ /* empty */ } - if('get' in Attributes || 'set' in Attributes)throw TypeError('Accessors not supported!'); - if('value' in Attributes)O[P] = Attributes.value; - return O; - }; - /***/ }), /* 9 */ /***/ (function(module, exports, __webpack_require__) { // to indexed object, toObject with fallback for non-array-like ES3 strings - var IObject = __webpack_require__(38) + var IObject = __webpack_require__(41) , defined = __webpack_require__(23); module.exports = function(it){ return IObject(defined(it)); @@ -164,44 +164,6 @@ /***/ }), /* 11 */ -/***/ (function(module, exports) { - - module.exports = function(exec){ - try { - return !!exec(); - } catch(e){ - return true; - } - }; - -/***/ }), -/* 12 */ -/***/ (function(module, exports) { - - module.exports = function(it){ - return typeof it === 'object' ? it !== null : typeof it === 'function'; - }; - -/***/ }), -/* 13 */ -/***/ (function(module, exports) { - - module.exports = {}; - -/***/ }), -/* 14 */ -/***/ (function(module, exports, __webpack_require__) { - - // 19.1.2.14 / 15.2.3.14 Object.keys(O) - var $keys = __webpack_require__(42) - , enumBugKeys = __webpack_require__(25); - - module.exports = Object.keys || function keys(O){ - return $keys(O, enumBugKeys); - }; - -/***/ }), -/* 15 */ /***/ (function(module, exports, __webpack_require__) { // optional / simple context binding @@ -226,13 +188,13 @@ }; /***/ }), -/* 16 */ +/* 12 */ /***/ (function(module, exports, __webpack_require__) { var global = __webpack_require__(2) , core = __webpack_require__(3) - , ctx = __webpack_require__(15) - , hide = __webpack_require__(7) + , ctx = __webpack_require__(11) + , hide = __webpack_require__(8) , PROTOTYPE = 'prototype'; var $export = function(type, name, source){ @@ -292,19 +254,45 @@ module.exports = $export; /***/ }), -/* 17 */ +/* 13 */ /***/ (function(module, exports) { - module.exports = true; + module.exports = function(exec){ + try { + return !!exec(); + } catch(e){ + return true; + } + }; /***/ }), -/* 18 */ +/* 14 */ /***/ (function(module, exports) { - exports.f = {}.propertyIsEnumerable; + module.exports = function(it){ + return typeof it === 'object' ? it !== null : typeof it === 'function'; + }; /***/ }), -/* 19 */ +/* 15 */ +/***/ (function(module, exports) { + + module.exports = {}; + +/***/ }), +/* 16 */ +/***/ (function(module, exports, __webpack_require__) { + + // 19.1.2.14 / 15.2.3.14 Object.keys(O) + var $keys = __webpack_require__(48) + , enumBugKeys = __webpack_require__(25); + + module.exports = Object.keys || function keys(O){ + return $keys(O, enumBugKeys); + }; + +/***/ }), +/* 17 */ /***/ (function(module, exports) { module.exports = function(bitmap, value){ @@ -316,12 +304,24 @@ }; }; +/***/ }), +/* 18 */ +/***/ (function(module, exports) { + + module.exports = true; + +/***/ }), +/* 19 */ +/***/ (function(module, exports) { + + exports.f = {}.propertyIsEnumerable; + /***/ }), /* 20 */ /***/ (function(module, exports, __webpack_require__) { - var def = __webpack_require__(8).f - , has = __webpack_require__(6) + var def = __webpack_require__(4).f + , has = __webpack_require__(7) , TAG = __webpack_require__(1)('toStringTag'); module.exports = function(it, tag, stat){ @@ -361,7 +361,7 @@ /* 24 */ /***/ (function(module, exports, __webpack_require__) { - var isObject = __webpack_require__(12) + var isObject = __webpack_require__(14) , document = __webpack_require__(2).document // in old IE typeof document.createElement is 'object' , is = isObject(document) && isObject(document.createElement); @@ -418,10 +418,31 @@ /***/ }), /* 30 */ +/***/ (function(module, exports, __webpack_require__) { + + // 7.1.15 ToLength + var toInteger = __webpack_require__(29) + , min = Math.min; + module.exports = function(it){ + return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991 + }; + +/***/ }), +/* 31 */ +/***/ (function(module, exports, __webpack_require__) { + + // 7.1.13 ToObject(argument) + var defined = __webpack_require__(23); + module.exports = function(it){ + return Object(defined(it)); + }; + +/***/ }), +/* 32 */ /***/ (function(module, exports, __webpack_require__) { // 7.1.1 ToPrimitive(input [, PreferredType]) - var isObject = __webpack_require__(12); + var isObject = __webpack_require__(14); // instead of the ES6 spec version, we didn't implement @@toPrimitive case // and the second argument - flag - preferred type is a string module.exports = function(it, S){ @@ -434,27 +455,49 @@ }; /***/ }), -/* 31 */ +/* 33 */ /***/ (function(module, exports, __webpack_require__) { var global = __webpack_require__(2) , core = __webpack_require__(3) - , LIBRARY = __webpack_require__(17) - , wksExt = __webpack_require__(32) - , defineProperty = __webpack_require__(8).f; + , LIBRARY = __webpack_require__(18) + , wksExt = __webpack_require__(34) + , defineProperty = __webpack_require__(4).f; module.exports = function(name){ var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {}); if(name.charAt(0) != '_' && !(name in $Symbol))defineProperty($Symbol, name, {value: wksExt.f(name)}); }; /***/ }), -/* 32 */ +/* 34 */ /***/ (function(module, exports, __webpack_require__) { exports.f = __webpack_require__(1); /***/ }), -/* 33 */ +/* 35 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + var $at = __webpack_require__(98)(true); + + // 21.1.3.27 String.prototype[@@iterator]() + __webpack_require__(44)(String, 'String', function(iterated){ + this._t = String(iterated); // target + this._i = 0; // next index + // 21.1.5.2.1 %StringIteratorPrototype%.next() + }, function(){ + var O = this._t + , index = this._i + , point; + if(index >= O.length)return {value: undefined, done: true}; + point = $at(O, index); + this._i += point.length; + return {value: point, done: false}; + }); + +/***/ }), +/* 36 */ /***/ (function(module, exports) { // this module is a runtime utility for cleaner component module output and will @@ -511,14 +554,14 @@ /***/ }), -/* 34 */ +/* 37 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; exports.__esModule = true; - var _assign = __webpack_require__(60); + var _assign = __webpack_require__(65); var _assign2 = _interopRequireDefault(_assign); @@ -539,7 +582,7 @@ }; /***/ }), -/* 35 */ +/* 38 */ /***/ (function(module, exports, __webpack_require__) { // getting tag from 19.1.3.6 Object.prototype.toString() @@ -567,21 +610,21 @@ }; /***/ }), -/* 36 */ +/* 39 */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__(2).document && document.documentElement; /***/ }), -/* 37 */ +/* 40 */ /***/ (function(module, exports, __webpack_require__) { - module.exports = !__webpack_require__(5) && !__webpack_require__(11)(function(){ + module.exports = !__webpack_require__(6) && !__webpack_require__(13)(function(){ return Object.defineProperty(__webpack_require__(24)('div'), 'a', {get: function(){ return 7; }}).a != 7; }); /***/ }), -/* 38 */ +/* 41 */ /***/ (function(module, exports, __webpack_require__) { // fallback for non-array-like ES3 and non-enumerable old V8 strings @@ -591,19 +634,49 @@ }; /***/ }), -/* 39 */ +/* 42 */ +/***/ (function(module, exports, __webpack_require__) { + + // check on default Array iterator + var Iterators = __webpack_require__(15) + , ITERATOR = __webpack_require__(1)('iterator') + , ArrayProto = Array.prototype; + + module.exports = function(it){ + return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it); + }; + +/***/ }), +/* 43 */ +/***/ (function(module, exports, __webpack_require__) { + + // call something on iterator step with safe closing on error + var anObject = __webpack_require__(5); + module.exports = function(iterator, fn, value, entries){ + try { + return entries ? fn(anObject(value)[0], value[1]) : fn(value); + // 7.4.6 IteratorClose(iterator, completion) + } catch(e){ + var ret = iterator['return']; + if(ret !== undefined)anObject(ret.call(iterator)); + throw e; + } + }; + +/***/ }), +/* 44 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; - var LIBRARY = __webpack_require__(17) - , $export = __webpack_require__(16) - , redefine = __webpack_require__(43) - , hide = __webpack_require__(7) - , has = __webpack_require__(6) - , Iterators = __webpack_require__(13) - , $iterCreate = __webpack_require__(79) + var LIBRARY = __webpack_require__(18) + , $export = __webpack_require__(12) + , redefine = __webpack_require__(49) + , hide = __webpack_require__(8) + , has = __webpack_require__(7) + , Iterators = __webpack_require__(15) + , $iterCreate = __webpack_require__(85) , setToStringTag = __webpack_require__(20) - , getPrototypeOf = __webpack_require__(89) + , getPrototypeOf = __webpack_require__(94) , ITERATOR = __webpack_require__(1)('iterator') , BUGGY = !([].keys && 'next' in [].keys()) // Safari has buggy iterators w/o `next` , FF_ITERATOR = '@@iterator' @@ -666,12 +739,38 @@ }; /***/ }), -/* 40 */ +/* 45 */ +/***/ (function(module, exports, __webpack_require__) { + + var ITERATOR = __webpack_require__(1)('iterator') + , SAFE_CLOSING = false; + + try { + var riter = [7][ITERATOR](); + riter['return'] = function(){ SAFE_CLOSING = true; }; + Array.from(riter, function(){ throw 2; }); + } catch(e){ /* empty */ } + + module.exports = function(exec, skipClosing){ + if(!skipClosing && !SAFE_CLOSING)return false; + var safe = false; + try { + var arr = [7] + , iter = arr[ITERATOR](); + iter.next = function(){ return {done: safe = true}; }; + arr[ITERATOR] = function(){ return iter; }; + exec(arr); + } catch(e){ /* empty */ } + return safe; + }; + +/***/ }), +/* 46 */ /***/ (function(module, exports, __webpack_require__) { // 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties]) - var anObject = __webpack_require__(4) - , dPs = __webpack_require__(86) + var anObject = __webpack_require__(5) + , dPs = __webpack_require__(91) , enumBugKeys = __webpack_require__(25) , IE_PROTO = __webpack_require__(27)('IE_PROTO') , Empty = function(){ /* empty */ } @@ -686,7 +785,7 @@ , gt = '>' , iframeDocument; iframe.style.display = 'none'; - __webpack_require__(36).appendChild(iframe); + __webpack_require__(39).appendChild(iframe); iframe.src = 'javascript:'; // eslint-disable-line no-script-url // createDict = iframe.contentWindow.Object; // html.removeChild(iframe); @@ -713,11 +812,11 @@ /***/ }), -/* 41 */ +/* 47 */ /***/ (function(module, exports, __webpack_require__) { // 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O) - var $keys = __webpack_require__(42) + var $keys = __webpack_require__(48) , hiddenKeys = __webpack_require__(25).concat('length', 'prototype'); exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O){ @@ -725,12 +824,12 @@ }; /***/ }), -/* 42 */ +/* 48 */ /***/ (function(module, exports, __webpack_require__) { - var has = __webpack_require__(6) + var has = __webpack_require__(7) , toIObject = __webpack_require__(9) - , arrayIndexOf = __webpack_require__(72)(false) + , arrayIndexOf = __webpack_require__(79)(false) , IE_PROTO = __webpack_require__(27)('IE_PROTO'); module.exports = function(object, names){ @@ -747,18 +846,18 @@ }; /***/ }), -/* 43 */ +/* 49 */ /***/ (function(module, exports, __webpack_require__) { - module.exports = __webpack_require__(7); + module.exports = __webpack_require__(8); /***/ }), -/* 44 */ +/* 50 */ /***/ (function(module, exports, __webpack_require__) { - var ctx = __webpack_require__(15) - , invoke = __webpack_require__(75) - , html = __webpack_require__(36) + var ctx = __webpack_require__(11) + , invoke = __webpack_require__(83) + , html = __webpack_require__(39) , cel = __webpack_require__(24) , global = __webpack_require__(2) , process = global.process @@ -833,62 +932,32 @@ }; /***/ }), -/* 45 */ +/* 51 */ /***/ (function(module, exports, __webpack_require__) { - // 7.1.15 ToLength - var toInteger = __webpack_require__(29) - , min = Math.min; - module.exports = function(it){ - return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991 - }; - -/***/ }), -/* 46 */ -/***/ (function(module, exports, __webpack_require__) { - - // 7.1.13 ToObject(argument) - var defined = __webpack_require__(23); - module.exports = function(it){ - return Object(defined(it)); + var classof = __webpack_require__(38) + , ITERATOR = __webpack_require__(1)('iterator') + , Iterators = __webpack_require__(15); + module.exports = __webpack_require__(3).getIteratorMethod = function(it){ + if(it != undefined)return it[ITERATOR] + || it['@@iterator'] + || Iterators[classof(it)]; }; /***/ }), -/* 47 */ +/* 52 */ /***/ (function(module, exports) { /***/ }), -/* 48 */ -/***/ (function(module, exports, __webpack_require__) { - - 'use strict'; - var $at = __webpack_require__(93)(true); - - // 21.1.3.27 String.prototype[@@iterator]() - __webpack_require__(39)(String, 'String', function(iterated){ - this._t = String(iterated); // target - this._i = 0; // next index - // 21.1.5.2.1 %StringIteratorPrototype%.next() - }, function(){ - var O = this._t - , index = this._i - , point; - if(index >= O.length)return {value: undefined, done: true}; - point = $at(O, index); - this._i += point.length; - return {value: point, done: false}; - }); - -/***/ }), -/* 49 */ +/* 53 */ /***/ (function(module, exports, __webpack_require__) { - __webpack_require__(96); + __webpack_require__(101); var global = __webpack_require__(2) - , hide = __webpack_require__(7) - , Iterators = __webpack_require__(13) + , hide = __webpack_require__(8) + , Iterators = __webpack_require__(15) , TO_STRING_TAG = __webpack_require__(1)('toStringTag'); for(var collections = ['NodeList', 'DOMTokenList', 'MediaList', 'StyleSheetList', 'CSSRuleList'], i = 0; i < 5; i++){ @@ -900,7 +969,7 @@ } /***/ }), -/* 50 */ +/* 54 */ /***/ (function(module, exports) { /* @@ -956,7 +1025,7 @@ /***/ }), -/* 51 */ +/* 55 */ /***/ (function(module, exports, __webpack_require__) { /* @@ -975,7 +1044,7 @@ ) } } - var listToStyles = __webpack_require__(112) + var listToStyles = __webpack_require__(117) /* type StyleObject = { @@ -1177,10522 +1246,3055 @@ /***/ }), -/* 52 */ +/* 56 */ +/***/ (function(module, exports) { + + module.exports = Vue; + +/***/ }), +/* 57 */ /***/ (function(module, exports, __webpack_require__) { - /* WEBPACK VAR INJECTION */(function(global) {/*! - * Vue.js v2.2.6 - * (c) 2014-2017 Evan You - * Released under the MIT License. - */ 'use strict'; - /* */ + var _extends2 = __webpack_require__(37); - /** - * Convert a value to a string that is actually rendered. - */ - function _toString (val) { - return val == null - ? '' - : typeof val === 'object' - ? JSON.stringify(val, null, 2) - : String(val) - } + var _extends3 = _interopRequireDefault(_extends2); - /** - * Convert a input value to a number for persistence. - * If the conversion fails, return original string. - */ - function toNumber (val) { - var n = parseFloat(val); - return isNaN(n) ? val : n - } + var _vue = __webpack_require__(56); - /** - * Make a map and return a function for checking if a key - * is in that map. - */ - function makeMap ( - str, - expectsLowerCase - ) { - var map = Object.create(null); - var list = str.split(','); - for (var i = 0; i < list.length; i++) { - map[list[i]] = true; - } - return expectsLowerCase - ? function (val) { return map[val.toLowerCase()]; } - : function (val) { return map[val]; } - } + var _vue2 = _interopRequireDefault(_vue); - /** - * Check if a tag is a built-in tag. - */ - var isBuiltInTag = makeMap('slot,component', true); + var _Home = __webpack_require__(109); - /** - * Remove an item from an array - */ - function remove (arr, item) { - if (arr.length) { - var index = arr.indexOf(item); - if (index > -1) { - return arr.splice(index, 1) - } - } - } + var _Home2 = _interopRequireDefault(_Home); - /** - * Check whether the object has the property. - */ - var hasOwnProperty = Object.prototype.hasOwnProperty; - function hasOwn (obj, key) { - return hasOwnProperty.call(obj, key) - } + var _store = __webpack_require__(58); - /** - * Check if value is primitive - */ - function isPrimitive (value) { - return typeof value === 'string' || typeof value === 'number' - } + var _store2 = _interopRequireDefault(_store); - /** - * Create a cached version of a pure function. - */ - function cached (fn) { - var cache = Object.create(null); - return (function cachedFn (str) { - var hit = cache[str]; - return hit || (cache[str] = fn(str)) - }) - } + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - /** - * Camelize a hyphen-delimited string. - */ - var camelizeRE = /-(\w)/g; - var camelize = cached(function (str) { - return str.replace(camelizeRE, function (_, c) { return c ? c.toUpperCase() : ''; }) - }); + _vue2.default.config.silent = false; + _vue2.default.config.devtools = true; - /** - * Capitalize a string. - */ - var capitalize = cached(function (str) { - return str.charAt(0).toUpperCase() + str.slice(1) + _vue2.default.filter('formatSize', function (size) { + if (size > 1024 * 1024 * 1024 * 1024) { + return (size / 1024 / 1024 / 1024 / 1024).toFixed(2) + ' TB'; + } else if (size > 1024 * 1024 * 1024) { + return (size / 1024 / 1024 / 1024).toFixed(2) + ' GB'; + } else if (size > 1024 * 1024) { + return (size / 1024 / 1024).toFixed(2) + ' MB'; + } else if (size > 1024) { + return (size / 1024).toFixed(2) + ' KB'; + } + return size.toString() + ' B'; }); - /** - * Hyphenate a camelCase string. - */ - var hyphenateRE = /([^-])([A-Z])/g; - var hyphenate = cached(function (str) { - return str - .replace(hyphenateRE, '$1-$2') - .replace(hyphenateRE, '$1-$2') - .toLowerCase() + new _vue2.default((0, _extends3.default)({ + store: _store2.default + }, _Home2.default)).$mount('#app'); + +/***/ }), +/* 58 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + Object.defineProperty(exports, "__esModule", { + value: true }); - /** - * Simple bind, faster than native - */ - function bind (fn, ctx) { - function boundFn (a) { - var l = arguments.length; - return l - ? l > 1 - ? fn.apply(ctx, arguments) - : fn.call(ctx, a) - : fn.call(ctx) - } - // record original fn length - boundFn._length = fn.length; - return boundFn - } + var _vue = __webpack_require__(56); - /** - * Convert an Array-like object to a real Array. - */ - function toArray (list, start) { - start = start || 0; - var i = list.length - start; - var ret = new Array(i); - while (i--) { - ret[i] = list[i + start]; - } - return ret - } + var _vue2 = _interopRequireDefault(_vue); - /** - * Mix properties into target object. - */ - function extend (to, _from) { - for (var key in _from) { - to[key] = _from[key]; - } - return to - } + var _vuex = __webpack_require__(118); - /** - * Quick object check - this is primarily used to tell - * Objects from primitive values when we know the value - * is a JSON-compliant type. - */ - function isObject (obj) { - return obj !== null && typeof obj === 'object' - } + var _vuex2 = _interopRequireDefault(_vuex); - /** - * Strict object type check. Only returns true - * for plain JavaScript objects. - */ - var toString = Object.prototype.toString; - var OBJECT_STRING = '[object Object]'; - function isPlainObject (obj) { - return toString.call(obj) === OBJECT_STRING - } + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - /** - * Merge an Array of Objects into a single Object. - */ - function toObject (arr) { - var res = {}; - for (var i = 0; i < arr.length; i++) { - if (arr[i]) { - extend(res, arr[i]); - } + var state = { + files: [] + }; + + var mutations = { + updateFiles: function updateFiles(state, files) { + state.files = files; } - return res - } + }; + exports.default = new _vuex2.default.Store({ + strict: true, + state: state, + mutations: mutations + }); + +/***/ }), +/* 59 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; - /** - * Perform no operation. - */ - function noop () {} + Object.defineProperty(exports, "__esModule", { + value: true + }); - /** - * Always return false. - */ - var no = function () { return false; }; + var _src = __webpack_require__(62); - /** - * Return same value - */ - var identity = function (_) { return _; }; + var _src2 = _interopRequireDefault(_src); - /** - * Generate a static keys string from compiler modules. - */ + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + exports.default = { + components: { + FileUpload: _src2.default + }, - /** - * Check if two values are loosely equal - that is, - * if they are plain objects, do they have the same shape? - */ - function looseEqual (a, b) { - var isObjectA = isObject(a); - var isObjectB = isObject(b); - if (isObjectA && isObjectB) { - try { - return JSON.stringify(a) === JSON.stringify(b) - } catch (e) { - // possible circular reference - return a === b - } - } else if (!isObjectA && !isObjectB) { - return String(a) === String(b) - } else { - return false - } - } + data: function data() { + return { + files: [], + accept: 'image/png,image/gif,image/jpeg,image/webp', + size: 1024 * 1024 * 10, + extensions: 'gif,jpg,jpeg,png,webp', - function looseIndexOf (arr, val) { - for (var i = 0; i < arr.length; i++) { - if (looseEqual(arr[i], val)) { return i } - } - return -1 - } - /** - * Ensure a function is called only once. - */ - function once (fn) { - var called = false; - return function () { - if (!called) { - called = true; - fn(); - } - } - } + multiple: true, + directory: false, + drop: true, + dropDirectory: true, + thread: 3, + name: 'file', - /* */ - - var config = { - /** - * Option merge strategies (used in core/util/options) - */ - optionMergeStrategies: Object.create(null), - - /** - * Whether to suppress warnings. - */ - silent: false, - - /** - * Show production mode tip message on boot? - */ - productionTip: ("production") !== 'production', - - /** - * Whether to enable devtools - */ - devtools: ("production") !== 'production', - - /** - * Whether to record perf - */ - performance: false, - - /** - * Error handler for watcher errors - */ - errorHandler: null, - - /** - * Ignore certain custom elements - */ - ignoredElements: [], - - /** - * Custom user key aliases for v-on - */ - keyCodes: Object.create(null), - - /** - * Check if a tag is reserved so that it cannot be registered as a - * component. This is platform-dependent and may be overwritten. - */ - isReservedTag: no, - - /** - * Check if a tag is an unknown element. - * Platform-dependent. - */ - isUnknownElement: no, - - /** - * Get the namespace of an element - */ - getTagNamespace: noop, - - /** - * Parse the real tag name for the specific platform. - */ - parsePlatformTagName: identity, - - /** - * Check if an attribute must be bound using property, e.g. value - * Platform-dependent. - */ - mustUseProp: no, - - /** - * List of asset types that a component can own. - */ - _assetTypes: [ - 'component', - 'directive', - 'filter' - ], - - /** - * List of lifecycle hooks. - */ - _lifecycleHooks: [ - 'beforeCreate', - 'created', - 'beforeMount', - 'mounted', - 'beforeUpdate', - 'updated', - 'beforeDestroy', - 'destroyed', - 'activated', - 'deactivated' - ], - - /** - * Max circular updates allowed in a scheduler flush cycle. - */ - _maxUpdateCount: 100 - }; + postAction: './post.php', + putAction: './put.php', - /* */ + headers: { + "X-Csrf-Token": "xxxx" + }, - var emptyObject = Object.freeze({}); + data: { + "_csrf_token": "xxxxxx" + }, - /** - * Check if a string starts with $ or _ - */ - function isReserved (str) { - var c = (str + '').charCodeAt(0); - return c === 0x24 || c === 0x5F - } + auto: false - /** - * Define a property. - */ - function def (obj, key, val, enumerable) { - Object.defineProperty(obj, key, { - value: val, - enumerable: !!enumerable, - writable: true, - configurable: true - }); - } + }; + }, - /** - * Parse simple path. - */ - var bailRE = /[^\w.$]/; - function parsePath (path) { - if (bailRE.test(path)) { - return - } - var segments = path.split('.'); - return function (obj) { - for (var i = 0; i < segments.length; i++) { - if (!obj) { return } - obj = obj[segments[i]]; - } - return obj - } - } - /* */ - /* globals MutationObserver */ - - // can we use __proto__? - var hasProto = '__proto__' in {}; - - // Browser environment sniffing - var inBrowser = typeof window !== 'undefined'; - var UA = inBrowser && window.navigator.userAgent.toLowerCase(); - var isIE = UA && /msie|trident/.test(UA); - var isIE9 = UA && UA.indexOf('msie 9.0') > 0; - var isEdge = UA && UA.indexOf('edge/') > 0; - var isAndroid = UA && UA.indexOf('android') > 0; - var isIOS = UA && /iphone|ipad|ipod|ios/.test(UA); - var isChrome = UA && /chrome\/\d+/.test(UA) && !isEdge; - - // this needs to be lazy-evaled because vue may be required before - // vue-server-renderer can set VUE_ENV - var _isServer; - var isServerRendering = function () { - if (_isServer === undefined) { - /* istanbul ignore if */ - if (!inBrowser && typeof global !== 'undefined') { - // detect presence of vue-server-renderer and avoid - // Webpack shimming the process - _isServer = global['process'].env.VUE_ENV === 'server'; - } else { - _isServer = false; + watch: { + auto: function auto(_auto) { + if (_auto && !this.$refs.upload.uploaded && !this.$refs.upload.active) { + this.$refs.upload.active = true; + } } - } - return _isServer - }; - - // detect devtools - var devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__; - - /* istanbul ignore next */ - function isNative (Ctor) { - return /native code/.test(Ctor.toString()) - } + }, - var hasSymbol = - typeof Symbol !== 'undefined' && isNative(Symbol) && - typeof Reflect !== 'undefined' && isNative(Reflect.ownKeys); + methods: { + addDirectory: function addDirectory() { + var _this = this; - /** - * Defer a task to execute it asynchronously. - */ - var nextTick = (function () { - var callbacks = []; - var pending = false; - var timerFunc; - - function nextTickHandler () { - pending = false; - var copies = callbacks.slice(0); - callbacks.length = 0; - for (var i = 0; i < copies.length; i++) { - copies[i](); - } - } + if (!this.$refs.upload.features.directory) { + return; + } + this.$refs.upload.$el.onclick = null; - // the nextTick behavior leverages the microtask queue, which can be accessed - // via either native Promise.then or MutationObserver. - // MutationObserver has wider support, however it is seriously bugged in - // UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It - // completely stops working after triggering a few times... so, if native - // Promise is available, we will use it: - /* istanbul ignore if */ - if (typeof Promise !== 'undefined' && isNative(Promise)) { - var p = Promise.resolve(); - var logError = function (err) { console.error(err); }; - timerFunc = function () { - p.then(nextTickHandler).catch(logError); - // in problematic UIWebViews, Promise.then doesn't completely break, but - // it can get stuck in a weird state where callbacks are pushed into the - // microtask queue but the queue isn't being flushed, until the browser - // needs to do some other work, e.g. handle a timer. Therefore we can - // "force" the microtask queue to be flushed by adding an empty timer. - if (isIOS) { setTimeout(noop); } - }; - } else if (typeof MutationObserver !== 'undefined' && ( - isNative(MutationObserver) || - // PhantomJS and iOS 7.x - MutationObserver.toString() === '[object MutationObserverConstructor]' - )) { - // use MutationObserver where native Promise is not available, - // e.g. PhantomJS IE11, iOS7, Android 4.4 - var counter = 1; - var observer = new MutationObserver(nextTickHandler); - var textNode = document.createTextNode(String(counter)); - observer.observe(textNode, { - characterData: true - }); - timerFunc = function () { - counter = (counter + 1) % 2; - textNode.data = String(counter); - }; - } else { - // fallback to setTimeout - /* istanbul ignore next */ - timerFunc = function () { - setTimeout(nextTickHandler, 0); - }; - } + this.directory = true; + this.$nextTick(function () { + _this.$refs.upload.$el.querySelector('input').click(); + _this.$refs.upload.$el.onclick = function (e) { + e.preventDefault(); + _this.directory = false; + _this.$refs.upload.$el.onclick = null; + _this.$nextTick(function () { + _this.$refs.upload.$el.querySelector('input').click(); + }); + }; + }); + }, + inputFilter: function inputFilter(newFile, oldFile, prevent) { + if (newFile && !oldFile) { + if (/(\/|^)(Thumbs\.db|desktop\.ini|\..+)$/.test(newFile.name)) { + return prevent(); + } - return function queueNextTick (cb, ctx) { - var _resolve; - callbacks.push(function () { - if (cb) { cb.call(ctx); } - if (_resolve) { _resolve(ctx); } - }); - if (!pending) { - pending = true; - timerFunc(); - } - if (!cb && typeof Promise !== 'undefined') { - return new Promise(function (resolve) { - _resolve = resolve; - }) - } - } - })(); - - var _Set; - /* istanbul ignore if */ - if (typeof Set !== 'undefined' && isNative(Set)) { - // use native Set when available. - _Set = Set; - } else { - // a non-standard Set polyfill that only works with primitive keys. - _Set = (function () { - function Set () { - this.set = Object.create(null); - } - Set.prototype.has = function has (key) { - return this.set[key] === true - }; - Set.prototype.add = function add (key) { - this.set[key] = true; - }; - Set.prototype.clear = function clear () { - this.set = Object.create(null); - }; + if (/\.(php5?|html?|jsx?)$/i.test(newFile.name)) { + return prevent(); + } - return Set; - }()); - } + newFile.blob = ''; + var URL = window.URL || window.webkitURL; + if (URL && URL.createObjectURL) { + newFile.blob = URL.createObjectURL(newFile.file); + } + } + }, + inputFile: function inputFile(newFile, oldFile) { + if (newFile && oldFile) { - var warn = noop; - var tip = noop; - var formatComponentName; + if (newFile.active && !oldFile.active) { + if (newFile.size >= 0 && newFile.size < 100 * 1024) {} + } - if (false) { - var hasConsole = typeof console !== 'undefined'; - var classifyRE = /(?:^|[-_])(\w)/g; - var classify = function (str) { return str - .replace(classifyRE, function (c) { return c.toUpperCase(); }) - .replace(/[-_]/g, ''); }; - - warn = function (msg, vm) { - if (hasConsole && (!config.silent)) { - console.error("[Vue warn]: " + msg + " " + ( - vm ? formatLocation(formatComponentName(vm)) : '' - )); - } - }; + if (newFile.progress != oldFile.progress) {} - tip = function (msg, vm) { - if (hasConsole && (!config.silent)) { - console.warn("[Vue tip]: " + msg + " " + ( - vm ? formatLocation(formatComponentName(vm)) : '' - )); - } - }; + if (newFile.error && !oldFile.error) {} - formatComponentName = function (vm, includeFile) { - if (vm.$root === vm) { - return '' - } - var name = typeof vm === 'string' - ? vm - : typeof vm === 'function' && vm.options - ? vm.options.name - : vm._isVue - ? vm.$options.name || vm.$options._componentTag - : vm.name; - - var file = vm._isVue && vm.$options.__file; - if (!name && file) { - var match = file.match(/([^/\\]+)\.vue$/); - name = match && match[1]; - } + if (newFile.success && !oldFile.success) {} + } - return ( - (name ? ("<" + (classify(name)) + ">") : "") + - (file && includeFile !== false ? (" at " + file) : '') - ) - }; + if (!newFile && oldFile) {} - var formatLocation = function (str) { - if (str === "") { - str += " - use the \"name\" option for better debugging messages."; + if (newFile && !oldFile && this.auto && !this.$refs.upload.active) { + this.$refs.upload.active = true; + } + }, + abort: function abort(file) { + this.$refs.upload.update(file, { active: false }); + }, + customError: function customError(file) { + this.$refs.upload.update(file, { error: 'custom' }); + }, + remove: function remove(file) { + this.$refs.upload.remove(file); } - return ("\n(found in " + str + ")") - }; - } + } + }; + +/***/ }), +/* 60 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; - /* */ + Object.defineProperty(exports, "__esModule", { + value: true + }); + var _toConsumableArray2 = __webpack_require__(69); - var uid$1 = 0; + var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2); - /** - * A dep is an observable that can have multiple - * directives subscribing to it. - */ - var Dep = function Dep () { - this.id = uid$1++; - this.subs = []; - }; + var _stringify = __webpack_require__(64); - Dep.prototype.addSub = function addSub (sub) { - this.subs.push(sub); - }; + var _stringify2 = _interopRequireDefault(_stringify); - Dep.prototype.removeSub = function removeSub (sub) { - remove(this.subs, sub); - }; + var _promise = __webpack_require__(66); - Dep.prototype.depend = function depend () { - if (Dep.target) { - Dep.target.addDep(this); - } - }; + var _promise2 = _interopRequireDefault(_promise); - Dep.prototype.notify = function notify () { - // stabilize the subscriber list first - var subs = this.subs.slice(); - for (var i = 0, l = subs.length; i < l; i++) { - subs[i].update(); - } - }; + var _extends2 = __webpack_require__(37); - // the current target watcher being evaluated. - // this is globally unique because there could be only one - // watcher being evaluated at any time. - Dep.target = null; - var targetStack = []; + var _extends3 = _interopRequireDefault(_extends2); - function pushTarget (_target) { - if (Dep.target) { targetStack.push(Dep.target); } - Dep.target = _target; - } + var _typeof2 = __webpack_require__(70); - function popTarget () { - Dep.target = targetStack.pop(); - } + var _typeof3 = _interopRequireDefault(_typeof2); - /* - * not type checking this file because flow doesn't play well with - * dynamically accessing methods on Array prototype - */ + var _InputFile = __webpack_require__(111); - var arrayProto = Array.prototype; - var arrayMethods = Object.create(arrayProto);[ - 'push', - 'pop', - 'shift', - 'unshift', - 'splice', - 'sort', - 'reverse' - ] - .forEach(function (method) { - // cache original method - var original = arrayProto[method]; - def(arrayMethods, method, function mutator () { - var arguments$1 = arguments; - - // avoid leaking arguments: - // http://jsperf.com/closure-with-arguments - var i = arguments.length; - var args = new Array(i); - while (i--) { - args[i] = arguments$1[i]; - } - var result = original.apply(this, args); - var ob = this.__ob__; - var inserted; - switch (method) { - case 'push': - inserted = args; - break - case 'unshift': - inserted = args; - break - case 'splice': - inserted = args.slice(2); - break - } - if (inserted) { ob.observeArray(inserted); } - // notify change - ob.dep.notify(); - return result - }); - }); + var _InputFile2 = _interopRequireDefault(_InputFile); - /* */ + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - var arrayKeys = Object.getOwnPropertyNames(arrayMethods); + exports.default = { + components: { + InputFile: _InputFile2.default + }, + props: { + inputId: { + type: String + }, - /** - * By default, when a reactive property is set, the new value is - * also converted to become reactive. However when passing down props, - * we don't want to force conversion because the value may be a nested value - * under a frozen data structure. Converting it would defeat the optimization. - */ - var observerState = { - shouldConvert: true, - isSettingProps: false - }; + name: { + type: String, + default: 'file' + }, - /** - * Observer class that are attached to each observed - * object. Once attached, the observer converts target - * object's property keys into getter/setters that - * collect dependencies and dispatches updates. - */ - var Observer = function Observer (value) { - this.value = value; - this.dep = new Dep(); - this.vmCount = 0; - def(value, '__ob__', this); - if (Array.isArray(value)) { - var augment = hasProto - ? protoAugment - : copyAugment; - augment(value, arrayMethods, arrayKeys); - this.observeArray(value); - } else { - this.walk(value); - } - }; + accept: { + type: String + }, - /** - * Walk through each property and convert them into - * getter/setters. This method should only be called when - * value type is Object. - */ - Observer.prototype.walk = function walk (obj) { - var keys = Object.keys(obj); - for (var i = 0; i < keys.length; i++) { - defineReactive$$1(obj, keys[i], obj[keys[i]]); - } - }; + multiple: { + type: Boolean + }, - /** - * Observe a list of Array items. - */ - Observer.prototype.observeArray = function observeArray (items) { - for (var i = 0, l = items.length; i < l; i++) { - observe(items[i]); - } - }; + directory: { + type: Boolean + }, - // helpers + postAction: { + type: String + }, - /** - * Augment an target Object or Array by intercepting - * the prototype chain using __proto__ - */ - function protoAugment (target, src) { - /* eslint-disable no-proto */ - target.__proto__ = src; - /* eslint-enable no-proto */ - } + putAction: { + type: String + }, - /** - * Augment an target Object or Array by defining - * hidden properties. - */ - /* istanbul ignore next */ - function copyAugment (target, src, keys) { - for (var i = 0, l = keys.length; i < l; i++) { - var key = keys[i]; - def(target, key, src[key]); - } - } + headers: { + type: Object, + default: Object + }, - /** - * Attempt to create an observer instance for a value, - * returns the new observer if successfully observed, - * or the existing observer if the value already has one. - */ - function observe (value, asRootData) { - if (!isObject(value)) { - return - } - var ob; - if (hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) { - ob = value.__ob__; - } else if ( - observerState.shouldConvert && - !isServerRendering() && - (Array.isArray(value) || isPlainObject(value)) && - Object.isExtensible(value) && - !value._isVue - ) { - ob = new Observer(value); - } - if (asRootData && ob) { - ob.vmCount++; - } - return ob - } + data: { + type: Object, + default: Object + }, - /** - * Define a reactive property on an Object. - */ - function defineReactive$$1 ( - obj, - key, - val, - customSetter - ) { - var dep = new Dep(); + timeout: { + type: Number, + default: 0 + }, - var property = Object.getOwnPropertyDescriptor(obj, key); - if (property && property.configurable === false) { - return - } + drop: { + default: false + }, - // cater for pre-defined getter/setters - var getter = property && property.get; - var setter = property && property.set; + dropDirectory: { + type: Boolean, + default: true + }, - var childOb = observe(val); - Object.defineProperty(obj, key, { - enumerable: true, - configurable: true, - get: function reactiveGetter () { - var value = getter ? getter.call(obj) : val; - if (Dep.target) { - dep.depend(); - if (childOb) { - childOb.dep.depend(); - } - if (Array.isArray(value)) { - dependArray(value); - } - } - return value + size: { + type: Number, + default: 0 }, - set: function reactiveSetter (newVal) { - var value = getter ? getter.call(obj) : val; - /* eslint-disable no-self-compare */ - if (newVal === value || (newVal !== newVal && value !== value)) { - return - } - /* eslint-enable no-self-compare */ - if (false) { - customSetter(); - } - if (setter) { - setter.call(obj, newVal); - } else { - val = newVal; - } - childOb = observe(newVal); - dep.notify(); - } - }); - } - /** - * Set a property on an object. Adds the new property and - * triggers change notification if the property doesn't - * already exist. - */ - function set (target, key, val) { - if (Array.isArray(target) && typeof key === 'number') { - target.length = Math.max(target.length, key); - target.splice(key, 1, val); - return val - } - if (hasOwn(target, key)) { - target[key] = val; - return val - } - var ob = (target ).__ob__; - if (target._isVue || (ob && ob.vmCount)) { - ("production") !== 'production' && warn( - 'Avoid adding reactive properties to a Vue instance or its root $data ' + - 'at runtime - declare it upfront in the data option.' - ); - return val - } - if (!ob) { - target[key] = val; - return val - } - defineReactive$$1(ob.value, key, val); - ob.dep.notify(); - return val - } + extensions: { + default: Array + }, - /** - * Delete a property and trigger change if necessary. - */ - function del (target, key) { - if (Array.isArray(target) && typeof key === 'number') { - target.splice(key, 1); - return - } - var ob = (target ).__ob__; - if (target._isVue || (ob && ob.vmCount)) { - ("production") !== 'production' && warn( - 'Avoid deleting properties on a Vue instance or its root $data ' + - '- just set it to null.' - ); - return - } - if (!hasOwn(target, key)) { - return - } - delete target[key]; - if (!ob) { - return - } - ob.dep.notify(); - } + value: { + type: Array, + default: Array + }, - /** - * Collect dependencies on array elements when the array is touched, since - * we cannot intercept array element access like property getters. - */ - function dependArray (value) { - for (var e = (void 0), i = 0, l = value.length; i < l; i++) { - e = value[i]; - e && e.__ob__ && e.__ob__.dep.depend(); - if (Array.isArray(e)) { - dependArray(e); + thread: { + type: Number, + default: 1 } - } - } + }, - /* */ + data: function data() { + return { + files: this.value, + features: { + html5: true, + directory: false, + drag: false + }, - /** - * Option overwriting strategies are functions that handle - * how to merge a parent option value and a child option - * value into the final value. - */ - var strats = config.optionMergeStrategies; + active: false, + dropActive: false, - /** - * Options with restrictions - */ - if (false) { - strats.el = strats.propsData = function (parent, child, vm, key) { - if (!vm) { - warn( - "option \"" + key + "\" can only be used during instance " + - 'creation with the `new` keyword.' - ); - } - return defaultStrat(parent, child) - }; - } + uploading: 0, - /** - * Helper that recursively merges two data objects together. - */ - function mergeData (to, from) { - if (!from) { return to } - var key, toVal, fromVal; - var keys = Object.keys(from); - for (var i = 0; i < keys.length; i++) { - key = keys[i]; - toVal = to[key]; - fromVal = from[key]; - if (!hasOwn(to, key)) { - set(to, key, fromVal); - } else if (isPlainObject(toVal) && isPlainObject(fromVal)) { - mergeData(toVal, fromVal); - } - } - return to - } + destroy: false + }; + }, + mounted: function mounted() { + var input = document.createElement('input'); + input.type = 'file'; + input.multiple = true; - /** - * Data - */ - strats.data = function ( - parentVal, - childVal, - vm - ) { - if (!vm) { - // in a Vue.extend merge, both should be functions - if (!childVal) { - return parentVal - } - if (typeof childVal !== 'function') { - ("production") !== 'production' && warn( - 'The "data" option should be a function ' + - 'that returns a per-instance value in component ' + - 'definitions.', - vm - ); - return parentVal - } - if (!parentVal) { - return childVal - } - // when parentVal & childVal are both present, - // we need to return a function that returns the - // merged result of both functions... no need to - // check if parentVal is a function here because - // it has to be a function to pass previous merges. - return function mergedDataFn () { - return mergeData( - childVal.call(this), - parentVal.call(this) - ) - } - } else if (parentVal || childVal) { - return function mergedInstanceDataFn () { - // instance merge - var instanceData = typeof childVal === 'function' - ? childVal.call(vm) - : childVal; - var defaultData = typeof parentVal === 'function' - ? parentVal.call(vm) - : undefined; - if (instanceData) { - return mergeData(instanceData, defaultData) - } else { - return defaultData + if (window.FormData && input.files) { + if (typeof input.webkitdirectory === 'boolean' || typeof input.directory === 'boolean') { + this.features.directory = true; + } + + if (this.features.html5 && typeof input.ondrop !== 'undefined') { + this.features.drop = true; } + } else { + this.features.html5 = false; } - } - }; - /** - * Hooks and props are merged as arrays. - */ - function mergeHook ( - parentVal, - childVal - ) { - return childVal - ? parentVal - ? parentVal.concat(childVal) - : Array.isArray(childVal) - ? childVal - : [childVal] - : parentVal - } + this.maps = {}; - config._lifecycleHooks.forEach(function (hook) { - strats[hook] = mergeHook; - }); + this.$nextTick(function () { + if (this.$parent) { + this.$parent.$forceUpdate(); + } - /** - * Assets - * - * When a vm is present (instance creation), we need to do - * a three-way merge between constructor options, instance - * options and parent options. - */ - function mergeAssets (parentVal, childVal) { - var res = Object.create(parentVal || null); - return childVal - ? extend(res, childVal) - : res - } + this.watchDrop(this.drop); + }); + }, + beforeDestroy: function beforeDestroy() { + this.destroy = true; - config._assetTypes.forEach(function (type) { - strats[type + 's'] = mergeAssets; - }); + this.active = false; + }, - /** - * Watchers. - * - * Watchers hashes should not overwrite one - * another, so we merge them as arrays. - */ - strats.watch = function (parentVal, childVal) { - /* istanbul ignore if */ - if (!childVal) { return Object.create(parentVal || null) } - if (!parentVal) { return childVal } - var ret = {}; - extend(ret, parentVal); - for (var key in childVal) { - var parent = ret[key]; - var child = childVal[key]; - if (parent && !Array.isArray(parent)) { - parent = [parent]; + + computed: { + uploaded: function uploaded() { + var file = void 0; + for (var i = 0; i < this.files.length; i++) { + file = this.files[i]; + if (!file.error && !file.success) { + return false; + } + } + return true; + }, + className: function className() { + return ['file-uploads', this.features.html5 ? 'file-uploads-html5' : 'file-uploads-html4', this.features.directory && this.directory ? 'file-uploads-directory' : undefined, this.features.drop && this.drop ? 'file-uploads-drop' : undefined]; } - ret[key] = parent - ? parent.concat(child) - : [child]; - } - return ret - }; + }, - /** - * Other object hashes. - */ - strats.props = - strats.methods = - strats.computed = function (parentVal, childVal) { - if (!childVal) { return Object.create(parentVal || null) } - if (!parentVal) { return childVal } - var ret = Object.create(null); - extend(ret, parentVal); - extend(ret, childVal); - return ret - }; + watch: { + active: function active(_active) { + this.watchActive(_active); + }, + dropActive: function dropActive() { + if (this.$parent) { + this.$parent.$forceUpdate(); + } + }, + drop: function drop(value) { + this.watchDrop(value); + }, + value: function value(files) { + if (this.files === files) { + return; + } - /** - * Default strategy. - */ - var defaultStrat = function (parentVal, childVal) { - return childVal === undefined - ? parentVal - : childVal - }; + var oldFiles = this.files; + this.files = files; - /** - * Validate component names - */ - function checkComponents (options) { - for (var key in options.components) { - var lower = key.toLowerCase(); - if (isBuiltInTag(lower) || config.isReservedTag(lower)) { - warn( - 'Do not use built-in or reserved HTML elements as component ' + - 'id: ' + key - ); - } - } - } + var oldMaps = this.maps; - /** - * Ensure all props option syntax are normalized into the - * Object-based format. - */ - function normalizeProps (options) { - var props = options.props; - if (!props) { return } - var res = {}; - var i, val, name; - if (Array.isArray(props)) { - i = props.length; - while (i--) { - val = props[i]; - if (typeof val === 'string') { - name = camelize(val); - res[name] = { type: null }; - } else if (false) { - warn('props must be strings when using array syntax.'); + this.maps = {}; + for (var i = 0; i < this.files.length; i++) { + var file = this.files[i]; + this.maps[file.id] = file; } - } - } else if (isPlainObject(props)) { - for (var key in props) { - val = props[key]; - name = camelize(key); - res[name] = isPlainObject(val) - ? val - : { type: val }; - } - } - options.props = res; - } - /** - * Normalize raw function directives into object format. - */ - function normalizeDirectives (options) { - var dirs = options.directives; - if (dirs) { - for (var key in dirs) { - var def = dirs[key]; - if (typeof def === 'function') { - dirs[key] = { bind: def, update: def }; + for (var key in this.maps) { + var newFile = this.maps[key]; + var oldFile = oldMaps[key]; + if (newFile !== oldFile) { + this.emitFile(newFile, oldFile); + } } - } - } - } - /** - * Merge two option objects into a new one. - * Core utility used in both instantiation and inheritance. - */ - function mergeOptions ( - parent, - child, - vm - ) { - if (false) { - checkComponents(child); - } - normalizeProps(child); - normalizeDirectives(child); - var extendsFrom = child.extends; - if (extendsFrom) { - parent = typeof extendsFrom === 'function' - ? mergeOptions(parent, extendsFrom.options, vm) - : mergeOptions(parent, extendsFrom, vm); - } - if (child.mixins) { - for (var i = 0, l = child.mixins.length; i < l; i++) { - var mixin = child.mixins[i]; - if (mixin.prototype instanceof Vue$2) { - mixin = mixin.options; + for (var _key in oldMaps) { + if (!this.maps[_key]) { + this.emitFile(undefined, oldMaps[_key]); + } } - parent = mergeOptions(parent, mixin, vm); } - } - var options = {}; - var key; - for (key in parent) { - mergeField(key); - } - for (key in child) { - if (!hasOwn(parent, key)) { - mergeField(key); - } - } - function mergeField (key) { - var strat = strats[key] || defaultStrat; - options[key] = strat(parent[key], child[key], vm, key); - } - return options - } - - /** - * Resolve an asset. - * This function is used because child instances need access - * to assets defined in its ancestor chain. - */ - function resolveAsset ( - options, - type, - id, - warnMissing - ) { - /* istanbul ignore if */ - if (typeof id !== 'string') { - return - } - var assets = options[type]; - // check local registration variations first - if (hasOwn(assets, id)) { return assets[id] } - var camelizedId = camelize(id); - if (hasOwn(assets, camelizedId)) { return assets[camelizedId] } - var PascalCaseId = capitalize(camelizedId); - if (hasOwn(assets, PascalCaseId)) { return assets[PascalCaseId] } - // fallback to prototype chain - var res = assets[id] || assets[camelizedId] || assets[PascalCaseId]; - if (false) { - warn( - 'Failed to resolve ' + type.slice(0, -1) + ': ' + id, - options - ); - } - return res - } - - /* */ + }, - function validateProp ( - key, - propOptions, - propsData, - vm - ) { - var prop = propOptions[key]; - var absent = !hasOwn(propsData, key); - var value = propsData[key]; - // handle boolean props - if (isType(Boolean, prop.type)) { - if (absent && !hasOwn(prop, 'default')) { - value = false; - } else if (!isType(String, prop.type) && (value === '' || value === hyphenate(key))) { - value = true; - } - } - // check default value - if (value === undefined) { - value = getPropDefaultValue(vm, prop, key); - // since the default value is a fresh copy, - // make sure to observe it. - var prevShouldConvert = observerState.shouldConvert; - observerState.shouldConvert = true; - observe(value); - observerState.shouldConvert = prevShouldConvert; - } - if (false) { - assertProp(prop, key, value, vm, absent); - } - return value - } + methods: { + clear: function clear() { + if (this.files.length) { + var files = this.files; + this.files = []; - /** - * Get the default value of a prop. - */ - function getPropDefaultValue (vm, prop, key) { - // no default, return undefined - if (!hasOwn(prop, 'default')) { - return undefined - } - var def = prop.default; - // warn against non-factory defaults for Object & Array - if (false) { - warn( - 'Invalid default value for prop "' + key + '": ' + - 'Props with type Object/Array must use a factory function ' + - 'to return the default value.', - vm - ); - } - // the raw prop value was also undefined from previous render, - // return previous default value to avoid unnecessary watcher trigger - if (vm && vm.$options.propsData && - vm.$options.propsData[key] === undefined && - vm._props[key] !== undefined) { - return vm._props[key] - } - // call factory function for non-Function types - // a value is Function if its prototype is function even across different execution context - return typeof def === 'function' && getType(prop.type) !== 'Function' - ? def.call(vm) - : def - } + this.maps = {}; - /** - * Assert whether a prop is valid. - */ - function assertProp ( - prop, - name, - value, - vm, - absent - ) { - if (prop.required && absent) { - warn( - 'Missing required prop: "' + name + '"', - vm - ); - return - } - if (value == null && !prop.required) { - return - } - var type = prop.type; - var valid = !type || type === true; - var expectedTypes = []; - if (type) { - if (!Array.isArray(type)) { - type = [type]; - } - for (var i = 0; i < type.length && !valid; i++) { - var assertedType = assertType(value, type[i]); - expectedTypes.push(assertedType.expectedType || ''); - valid = assertedType.valid; - } - } - if (!valid) { - warn( - 'Invalid prop: type check failed for prop "' + name + '".' + - ' Expected ' + expectedTypes.map(capitalize).join(', ') + - ', got ' + Object.prototype.toString.call(value).slice(8, -1) + '.', - vm - ); - return - } - var validator = prop.validator; - if (validator) { - if (!validator(value)) { - warn( - 'Invalid prop: custom validator check failed for prop "' + name + '".', - vm - ); - } - } - } + this.emitInput(); + for (var i = 0; i < files.length; i++) { + this.emitFile(undefined, files[i]); + } + } + return true; + }, + get: function get(id) { + if (!id) { + return false; + } - /** - * Assert the type of a value - */ - function assertType (value, type) { - var valid; - var expectedType = getType(type); - if (expectedType === 'String') { - valid = typeof value === (expectedType = 'string'); - } else if (expectedType === 'Number') { - valid = typeof value === (expectedType = 'number'); - } else if (expectedType === 'Boolean') { - valid = typeof value === (expectedType = 'boolean'); - } else if (expectedType === 'Function') { - valid = typeof value === (expectedType = 'function'); - } else if (expectedType === 'Object') { - valid = isPlainObject(value); - } else if (expectedType === 'Array') { - valid = Array.isArray(value); - } else { - valid = value instanceof type; - } - return { - valid: valid, - expectedType: expectedType - } - } + if ((typeof id === 'undefined' ? 'undefined' : (0, _typeof3.default)(id)) === 'object') { + id = id.id; + } - /** - * Use function string name to check built-in types, - * because a simple equality check will fail when running - * across different vms / iframes. - */ - function getType (fn) { - var match = fn && fn.toString().match(/^\s*function (\w+)/); - return match && match[1] - } + return this.maps[id] || false; + }, + add: function add(files, start) { + var isArray = files instanceof Array; - function isType (type, fn) { - if (!Array.isArray(fn)) { - return getType(fn) === getType(type) - } - for (var i = 0, len = fn.length; i < len; i++) { - if (getType(fn[i]) === getType(type)) { - return true - } - } - /* istanbul ignore next */ - return false - } + if (!isArray) { + files = [files]; + } - function handleError (err, vm, info) { - if (config.errorHandler) { - config.errorHandler.call(null, err, vm, info); - } else { - if (false) { - warn(("Error in " + info + ":"), vm); - } - /* istanbul ignore else */ - if (inBrowser && typeof console !== 'undefined') { - console.error(err); - } else { - throw err - } - } - } + var addFiles = []; + for (var i = 0; i < files.length; i++) { + var file = files[i]; + if (this.features.html5 && file instanceof File) { + file = { + file: file, + size: file.size, + name: file.webkitRelativePath || file.relativePath || file.name, + type: file.type + }; + } + file = (0, _extends3.default)({ + size: -1, + name: 'Filename', + type: '', + active: false, + error: '', + success: false, + putAction: this.putAction, + postAction: this.postAction, + timeout: this.timeout + }, file, { + response: {}, + + progress: '0.00', + speed: 0 }); + + file.data = (0, _extends3.default)({}, this.data, file.data ? file.data : {}); + + file.headers = (0, _extends3.default)({}, this.headers, file.headers ? file.headers : {}); - /* not type checking this file because flow doesn't play well with Proxy */ + if (!file.id) { + file.id = Math.random().toString(36).substr(2); + } - var initProxy; + if (this.emitFilter(file, undefined)) { + continue; + } - if (false) { - var allowedGlobals = makeMap( - 'Infinity,undefined,NaN,isFinite,isNaN,' + - 'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' + - 'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,' + - 'require' // for Webpack/Browserify - ); - - var warnNonPresent = function (target, key) { - warn( - "Property or method \"" + key + "\" is not defined on the instance but " + - "referenced during render. Make sure to declare reactive data " + - "properties in the data option.", - target - ); - }; + addFiles.push(file); - var hasProxy = - typeof Proxy !== 'undefined' && - Proxy.toString().match(/native code/); - - if (hasProxy) { - var isBuiltInModifier = makeMap('stop,prevent,self,ctrl,shift,alt,meta'); - config.keyCodes = new Proxy(config.keyCodes, { - set: function set (target, key, value) { - if (isBuiltInModifier(key)) { - warn(("Avoid overwriting built-in modifier in config.keyCodes: ." + key)); - return false - } else { - target[key] = value; - return true + if (!this.multiple) { + break; } } - }); - } - var hasHandler = { - has: function has (target, key) { - var has = key in target; - var isAllowed = allowedGlobals(key) || key.charAt(0) === '_'; - if (!has && !isAllowed) { - warnNonPresent(target, key); + if (!addFiles.length) { + return false; } - return has || !isAllowed - } - }; - var getHandler = { - get: function get (target, key) { - if (typeof key === 'string' && !(key in target)) { - warnNonPresent(target, key); + if (!this.multiple) { + this.clear(); } - return target[key] - } - }; - - initProxy = function initProxy (vm) { - if (hasProxy) { - // determine which proxy handler to use - var options = vm.$options; - var handlers = options.render && options.render._withStripped - ? getHandler - : hasHandler; - vm._renderProxy = new Proxy(vm, handlers); - } else { - vm._renderProxy = vm; - } - }; - } - - var mark; - var measure; - - if (false) { - var perf = inBrowser && window.performance; - /* istanbul ignore if */ - if ( - perf && - perf.mark && - perf.measure && - perf.clearMarks && - perf.clearMeasures - ) { - mark = function (tag) { return perf.mark(tag); }; - measure = function (name, startTag, endTag) { - perf.measure(name, startTag, endTag); - perf.clearMarks(startTag); - perf.clearMarks(endTag); - perf.clearMeasures(name); - }; - } - } - /* */ - - var VNode = function VNode ( - tag, - data, - children, - text, - elm, - context, - componentOptions - ) { - this.tag = tag; - this.data = data; - this.children = children; - this.text = text; - this.elm = elm; - this.ns = undefined; - this.context = context; - this.functionalContext = undefined; - this.key = data && data.key; - this.componentOptions = componentOptions; - this.componentInstance = undefined; - this.parent = undefined; - this.raw = false; - this.isStatic = false; - this.isRootInsert = true; - this.isComment = false; - this.isCloned = false; - this.isOnce = false; - }; + var newFiles = void 0; + if (start) { + newFiles = addFiles.concat(this.files); + } else { + newFiles = this.files.concat(addFiles); + } - var prototypeAccessors = { child: {} }; + this.files = newFiles; - // DEPRECATED: alias for componentInstance for backwards compat. - /* istanbul ignore next */ - prototypeAccessors.child.get = function () { - return this.componentInstance - }; + for (var _i = 0; _i < addFiles.length; _i++) { + var _file = addFiles[_i]; + this.maps[_file.id] = _file; + } - Object.defineProperties( VNode.prototype, prototypeAccessors ); + this.emitInput(); + for (var _i2 = 0; _i2 < addFiles.length; _i2++) { + this.emitFile(addFiles[_i2], undefined); + } - var createEmptyVNode = function () { - var node = new VNode(); - node.text = ''; - node.isComment = true; - return node - }; + return isArray ? addFiles : addFiles[0]; + }, + remove: function remove(file) { + file = this.get(file); + if (file) { + if (this.emitFilter(undefined, file)) { + return false; + } + var files = this.files.concat([]); + var index = files.indexOf(file); + if (index === -1) { + console.error('remove', file); + return false; + } + files.splice(index, 1); + this.files = files; - function createTextVNode (val) { - return new VNode(undefined, undefined, undefined, String(val)) - } + delete this.maps[file.id]; - // optimized shallow clone - // used for static nodes and slot nodes because they may be reused across - // multiple renders, cloning them avoids errors when DOM manipulations rely - // on their elm reference. - function cloneVNode (vnode) { - var cloned = new VNode( - vnode.tag, - vnode.data, - vnode.children, - vnode.text, - vnode.elm, - vnode.context, - vnode.componentOptions - ); - cloned.ns = vnode.ns; - cloned.isStatic = vnode.isStatic; - cloned.key = vnode.key; - cloned.isCloned = true; - return cloned - } + this.emitInput(); + this.emitFile(undefined, file); + } + return file; + }, + update: function update(file, data) { + file = this.get(file); + if (file) { + var newFile = (0, _extends3.default)({}, file, data); - function cloneVNodes (vnodes) { - var len = vnodes.length; - var res = new Array(len); - for (var i = 0; i < len; i++) { - res[i] = cloneVNode(vnodes[i]); - } - return res - } + if (file.active && !newFile.active && !newFile.error && !newFile.success) { + newFile.error = 'abort'; + } - /* */ + if (this.emitFilter(newFile, file)) { + return false; + } - var normalizeEvent = cached(function (name) { - var once$$1 = name.charAt(0) === '~'; // Prefixed last, checked first - name = once$$1 ? name.slice(1) : name; - var capture = name.charAt(0) === '!'; - name = capture ? name.slice(1) : name; - return { - name: name, - once: once$$1, - capture: capture - } - }); + var files = this.files.concat([]); + var index = files.indexOf(file); + if (index === -1) { + console.error('update', file); + return false; + } + files.splice(index, 1, newFile); + this.files = files; - function createFnInvoker (fns) { - function invoker () { - var arguments$1 = arguments; + this.maps[file.id] = newFile; - var fns = invoker.fns; - if (Array.isArray(fns)) { - for (var i = 0; i < fns.length; i++) { - fns[i].apply(null, arguments$1); + this.emitInput(); + this.emitFile(newFile, file); + return newFile; } - } else { - // return handler return value for single handlers - return fns.apply(null, arguments) - } - } - invoker.fns = fns; - return invoker - } - - function updateListeners ( - on, - oldOn, - add, - remove$$1, - vm - ) { - var name, cur, old, event; - for (name in on) { - cur = on[name]; - old = oldOn[name]; - event = normalizeEvent(name); - if (!cur) { - ("production") !== 'production' && warn( - "Invalid handler for event \"" + (event.name) + "\": got " + String(cur), - vm - ); - } else if (!old) { - if (!cur.fns) { - cur = on[name] = createFnInvoker(cur); + return false; + }, + emitFilter: function emitFilter(newFile, oldFile) { + var isPrevent = false; + this.$emit('input-filter', newFile, oldFile, function () { + isPrevent = true; + return isPrevent; + }); + return isPrevent; + }, + emitFile: function emitFile(newFile, oldFile) { + this.$emit('input-file', newFile, oldFile); + if (newFile && newFile.active && (!oldFile || !oldFile.active)) { + this.uploading++; + + this.$nextTick(function () { + var _this = this; + + setTimeout(function () { + _this.upload(newFile).then(function () { + newFile = _this.get(newFile); + if (newFile) { + _this.update(newFile, { active: false, success: !newFile.error }); + } + }).catch(function (e) { + _this.update(newFile, { active: false, success: false, error: e.code || e.error || e.message || e }); + }); + }, parseInt(Math.random() * 50 + 50)); + }); + } else if ((!newFile || !newFile.active) && oldFile && oldFile.active) { + this.uploading--; } - add(event.name, cur, event.once, event.capture); - } else if (cur !== old) { - old.fns = cur; - on[name] = old; - } - } - for (name in oldOn) { - if (!on[name]) { - event = normalizeEvent(name); - remove$$1(event.name, oldOn[name], event.capture); - } - } - } - /* */ + if (this.active && (Boolean(newFile) !== Boolean(oldFile) || newFile.active !== oldFile.active)) { + this.watchActive(true); + } + }, + emitInput: function emitInput() { + this.$emit('input', this.files); + }, + upload: function upload(file) { + if (!(file = this.get(file))) { + return _promise2.default.reject('not_exists'); + } - function mergeVNodeHook (def, hookKey, hook) { - var invoker; - var oldHook = def[hookKey]; + if (file.error) { + return _promise2.default.reject(file.error); + } - function wrappedHook () { - hook.apply(this, arguments); - // important: remove merged hook to ensure it's called only once - // and prevent memory leak - remove(invoker.fns, wrappedHook); - } + if (file.success) { + return _promise2.default.resolve(file); + } - if (!oldHook) { - // no existing hook - invoker = createFnInvoker([wrappedHook]); - } else { - /* istanbul ignore if */ - if (oldHook.fns && oldHook.merged) { - // already a merged invoker - invoker = oldHook; - invoker.fns.push(wrappedHook); - } else { - // existing plain hook - invoker = createFnInvoker([oldHook, wrappedHook]); - } - } - - invoker.merged = true; - def[hookKey] = invoker; - } - - /* */ - - // The template compiler attempts to minimize the need for normalization by - // statically analyzing the template at compile time. - // - // For plain HTML markup, normalization can be completely skipped because the - // generated render function is guaranteed to return Array. There are - // two cases where extra normalization is needed: - - // 1. When the children contains components - because a functional component - // may return an Array instead of a single root. In this case, just a simple - // normalization is needed - if any child is an Array, we flatten the whole - // thing with Array.prototype.concat. It is guaranteed to be only 1-level deep - // because functional components already normalize their own children. - function simpleNormalizeChildren (children) { - for (var i = 0; i < children.length; i++) { - if (Array.isArray(children[i])) { - return Array.prototype.concat.apply([], children) - } - } - return children - } - - // 2. When the children contains constructs that always generated nested Arrays, - // e.g.