Skip to content

Commit 3d9f118

Browse files
committed
add new feature
1 parent e1b6f32 commit 3d9f118

File tree

9 files changed

+102
-35
lines changed

9 files changed

+102
-35
lines changed

.eslintrc.json

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,23 @@
11
{
22
"extends": "airbnb-base",
33
"plugins": [
4-
"import"
4+
"import",
5+
"vue"
56
],
67
"globals": {
7-
"XMLHttpRequest": 1
8+
"XMLHttpRequest": 1,
9+
"FormData": 1,
10+
"File": 1,
11+
"Blob": 1
812
},
913
"rules": {
1014
"func-names": 0,
1115
"prefer-template": 0,
1216
"dot-notation": 0,
1317
"radix": 0,
1418
"no-mixed-operators": 0,
19+
"no-param-reassign": 0,
20+
"no-console": 0,
1521
"comma-dangle": 0
1622
}
1723
}

README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ Use CDN Script(ES5)
9191
| maxWidth | Number | 150 | limit the width of your image you cropped|
9292
| maxheight | Number | 150 | limit the height of your image you cropped|
9393
| inputAccept | string | 'image/*' / 'image/jpg,image/jpeg,image/png' | the image file of accept type |
94+
| isXhr | Boolean | true | cancel default xhr uploading
9495

9596
### $dispatch, events
9697

@@ -102,6 +103,10 @@ imageuploaded(res) {
102103

103104
}
104105
}
106+
// return file object
107+
imagechanged(res) {
108+
console.log(res.name)
109+
}
105110

106111

107112
// uploading image

demo/demo.min.js

Lines changed: 6 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

index.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
"eslint-plugin-promise": "^3.4.0",
2727
"eslint-plugin-react": "^6.9.0",
2828
"eslint-plugin-standard": "^2.0.1",
29+
"eslint-plugin-vue": "^2.0.1",
2930
"style-loader": "^0.13.1",
3031
"vue-html-loader": "^1.2.3",
3132
"vue-loader": "^8.5.4",

src/demo/index.js

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import Vue from 'vue/dist/vue';
2+
3+
const VueCoreImageUpload = require('../index');
4+
5+
Vue.config.silent = false;
6+
7+
Vue.config.devtools = false;
8+
9+
new Vue({
10+
el: '#app',
11+
components: {
12+
'vue-core-image-upload': VueCoreImageUpload
13+
},
14+
data: {
15+
name: 'Jiraiya',
16+
src: 'http://img1.vued.vanthink.cn/vued0a233185b6027244f9d43e653227439a.png',
17+
cropSrc: 'http://img1.vued.vanthink.cn/vued7553a09a5d5209ebd00a48264394b7f3.png',
18+
cropArgs: {},
19+
},
20+
methods: {
21+
imageuploaded(res) {
22+
if (res.errcode === 0) {
23+
if (res.data.src) {
24+
this.src = res.data.src;
25+
return;
26+
}
27+
this.name = res.data.name;
28+
this.cropArgs = {
29+
toCropImgH: parseInt(res.data.post.toCropImgH),
30+
toCropImgW: parseInt(res.data.post.toCropImgW),
31+
toCropImgX: parseInt(res.data.post.toCropImgX),
32+
toCropImgY: parseInt(res.data.post.toCropImgY)
33+
}
34+
this.cropSrc = 'http://img1.vued.vanthink.cn/vued41b900045d6d44f3b32e06049621b415.png';
35+
}
36+
},
37+
imagechanged(res) {
38+
console.log(res);
39+
},
40+
errorhandle: function(msg) {
41+
console.warn(msg);
42+
}
43+
}
44+
});

src/lib/xhr.js

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
/**
22
* simple ajax handler
33
**/
4-
module.exports = function (method, url, headers, data, callback, error) {
4+
module.exports = function (method, url, headers, data, callback, err) {
55
const r = new XMLHttpRequest();
6-
let error = error || function () {
6+
const error = err || function () {
77
console.error('AJAX ERROR!');
88
};
99
// Binary?
@@ -14,29 +14,29 @@ module.exports = function (method, url, headers, data, callback, error) {
1414
}
1515
method = method.toUpperCase();
1616
// Xhr.responseType 'json' is not supported in any of the vendors yet.
17-
r.onload = function (e) {
18-
var json = r.response;
17+
r.onload = function () {
18+
let json = r.response;
1919
try {
2020
json = JSON.parse(r.responseText);
21-
}
22-
catch (_e) {
21+
} catch (_e) {
2322
if (r.status === 401) {
2423
json = error('access_denied', r.statusText);
2524
}
2625
}
27-
var headers = headersToJSON(r.getAllResponseHeaders());
26+
let headers = headersToJSON(r.getAllResponseHeaders());
2827
headers.statusCode = r.status;
2928
callback(json || (method === 'GET' ? error('empty_response', 'Could not get resource') : {}), headers);
3029
};
31-
r.onerror = function (e) {
32-
var json = r.responseText;
30+
r.onerror = function () {
31+
let json = r.responseText;
3332
try {
3433
json = JSON.parse(r.responseText);
34+
} catch (_e) {
35+
console.error(_e);
3536
}
36-
catch (_e) {}
3737
callback(json || error('access_denied', 'Could not get resource'));
3838
};
39-
var x;
39+
let x;
4040
// Should we add the query to the URL?
4141
if (method === 'GET' || method === 'DELETE') {
4242
data = null;
@@ -80,12 +80,12 @@ module.exports = function (method, url, headers, data, callback, error) {
8080
return r;
8181
// Headers are returned as a string
8282
function headersToJSON(s) {
83-
const r = {};
83+
const o = {};
8484
const reg = /([a-z\-]+):\s?(.*);?/gi;
8585
let m;
8686
while (m = reg.exec(s)) {
87-
r[m[1]] = m[2];
87+
o[m[1]] = m[2];
8888
}
89-
return r;
89+
return o;
9090
}
9191
};

src/vue.core.image.upload.vue

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,7 @@
225225
226226
import Drag from './lib/drag';
227227
import Resize from './lib/resize';
228+
import xhr from './lib/xhr';
228229
229230
const GIF_LOADING_SRC = 'data:image/gif;base64,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';
230231
@@ -282,7 +283,11 @@
282283
},
283284
inputAccept:{
284285
type: String,
285-
default: 'image/*'
286+
default: 'image/jpg,image/jpeg,image/png'
287+
},
288+
isXhr: {
289+
type: Boolean,
290+
default: true
286291
}
287292
},
288293
data() {
@@ -301,7 +306,6 @@
301306
},
302307
303308
methods: {
304-
305309
__dispatch(name,res) {
306310
this.$emit && this.$emit(name, res);
307311
},
@@ -340,6 +344,7 @@
340344
return;
341345
342346
}
347+
this. __dispatch('imagechanged',this.files[0]);
343348
this.tryAjaxUpload();
344349
345350
},
@@ -362,7 +367,7 @@
362367
reader.readAsDataURL(this.files[0]);
363368
},
364369
365-
// 对图像进行处理
370+
// set the image size
366371
__initImage(src) {
367372
let pic = new Image();
368373
let self = this;
@@ -456,14 +461,20 @@
456461
457462
// use ajax upload IE9+
458463
tryAjaxUpload(callback) {
459-
let self = this;
464+
this. __dispatch('imageuploading',this.files[0]);
465+
if (!this.isXhr) {
466+
if(this.crop) {
467+
this.hasImage = false;
468+
}
469+
return typeof callback === 'function' && callback();
470+
}
471+
const self = this;
460472
let data = new FormData();
461473
for(let i=0;i<this.files.length;i++) {
462474
data.append(self.inputOfFile, this.files[i]);
463475
}
464476
465477
if (typeof this.data === 'object') {
466-
467478
for(let k in this.data) {
468479
if(this.data[k] !== undefined) {
469480
data.append(k,this.data[k]);
@@ -472,7 +483,7 @@
472483
}
473484
474485
}
475-
this. __dispatch('imageuploading',this.files);
486+
476487
xhr('POST',this.url,{},data,function(res) {
477488
if(typeof callback === 'function') {
478489
callback();

webpack.config.demo.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
1-
const webpack = require( 'webpack' )
1+
const webpack = require('webpack');
22

33
module.exports = {
4-
entry: './src/demo.js',
4+
entry: './src/demo/index.js',
55
output: {
66
path: './demo',
77
filename: 'demo.min.js',
88
},
99
resolve: {
10-
extensions: [ '','.js', '.vue' ]
10+
extensions: ['', '.js', '.vue']
1111
},
1212
module: {
1313
loaders: [
@@ -33,8 +33,8 @@ module.exports = {
3333
},
3434
plugins: [
3535
new webpack.optimize.UglifyJsPlugin( {
36-
minimize : true,
37-
sourceMap : false,
36+
minimize: true,
37+
sourceMap: false,
3838
mangle: true,
3939
compress: {
4040
warnings: false

0 commit comments

Comments
 (0)