Skip to content

Commit 41a3866

Browse files
committedSep 27, 2015
rewrite uploader structure
- rename to DeepUploader - separate logic into modules - make qiniu uploader as a adapater, not default implementation.
1 parent fd41240 commit 41a3866

16 files changed

+513
-276
lines changed
 

‎Gruntfile.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ module.exports = function(grunt) {
1717
transform: [["babelify", { stage: 0 }]]
1818
},
1919
files: {
20-
"dist/qiniu-uploader.js": "src/qiniu-uploader.js"
20+
"dist/deep_uploader.js": "src/deep_uploader.js"
2121
}
2222
}
2323
},
@@ -28,8 +28,8 @@ module.exports = function(grunt) {
2828
banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n'
2929
},
3030
build: {
31-
src: 'dist/qiniu-uploader.js',
32-
dest: 'dist/qiniu-uploader.min.js'
31+
src: 'dist/deep_uploader.js',
32+
dest: 'dist/deep_uploader.min.js'
3333
}
3434
},
3535

‎dist/deep_uploader.js

+313
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,313 @@
1+
(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
2+
'use strict';
3+
4+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
5+
6+
var _profile = require('./profile');
7+
8+
var _profile2 = _interopRequireDefault(_profile);
9+
10+
var _upload_task = require('./upload_task');
11+
12+
var _upload_task2 = _interopRequireDefault(_upload_task);
13+
14+
var _file_trigger = require('./file_trigger');
15+
16+
var _file_trigger2 = _interopRequireDefault(_file_trigger);
17+
18+
var _uploadersQiniu_uploader = require('./uploaders/qiniu_uploader');
19+
20+
var _uploadersQiniu_uploader2 = _interopRequireDefault(_uploadersQiniu_uploader);
21+
22+
var profiles = [];
23+
var uploaders = {
24+
qiniu: _uploadersQiniu_uploader2['default']
25+
};
26+
27+
var DeepUploader = {};
28+
29+
function getProfile(name) {
30+
var profile = profiles[name];
31+
32+
if (profile) {
33+
return profile;
34+
} else {
35+
throw 'Profile \'' + name + '\' not registered.';
36+
}
37+
}
38+
39+
function getUploader(element, profile, file) {
40+
var Uploader = uploaders[profile.uploader];
41+
if (!Uploader) {
42+
throw 'Unsupported uploader \'' + profile.uploader + '\'.';
43+
}
44+
45+
return new Uploader(element, profile, file);
46+
}
47+
48+
// Register profile.
49+
DeepUploader.register = function (profile) {
50+
profiles[profile.name] = profile;
51+
};
52+
53+
// Trigger file dialog
54+
DeepUploader.browse = function (element, uploaderProfile) {
55+
var profileName = element.dataset.uploaderProfile || uploaderProfile;
56+
var profile = getProfile(profileName);
57+
58+
_file_trigger2['default'].trigger(element, profile, function (file) {
59+
var uploader = getUploader(element, profile, file);
60+
uploader.start();
61+
});
62+
};
63+
64+
DeepUploader.browseHandler = function () {
65+
DeepUploader.browse(this);
66+
};
67+
68+
// upload(file, element, profile) {
69+
// var formData = new FormData();
70+
// // FIXME: 使用自定义的 filename
71+
// formData.append(this.options.paramName, file, file.name);
72+
73+
// var xhr = new XMLHttpRequest();
74+
// xhr.open('POST', profile.uploadUrl, true);
75+
// xhr.onload = function () {
76+
// if (xhr.status === 200) {
77+
// uploadButton.innerHTML = 'Upload';
78+
// } else {
79+
// alert('An error occurred!');
80+
// }
81+
// };
82+
// xhr.send(formData);
83+
// }
84+
85+
// browse(element, profileName) {
86+
// var profile = this.profiles[profileName];
87+
// if (!profile) throw `Profile '${profileName}' not registered`;
88+
89+
// var input = this._makeInput(element, profile);
90+
// input.click();
91+
// }
92+
// }
93+
94+
window.DeepUploader = DeepUploader;
95+
96+
},{"./file_trigger":3,"./profile":4,"./upload_task":5,"./uploaders/qiniu_uploader":7}],2:[function(require,module,exports){
97+
"use strict";
98+
99+
Object.defineProperty(exports, "__esModule", {
100+
value: true
101+
});
102+
103+
var EventTrigger = {};
104+
105+
EventTrigger.trigger = function (element, eventName) {
106+
var detail = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2];
107+
108+
element.dispatchEvent(new CustomEvent(eventName, {
109+
bubbles: true,
110+
detail: detail
111+
}));
112+
};
113+
114+
exports["default"] = EventTrigger;
115+
module.exports = exports["default"];
116+
117+
},{}],3:[function(require,module,exports){
118+
'use strict';
119+
120+
Object.defineProperty(exports, '__esModule', {
121+
value: true
122+
});
123+
124+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
125+
126+
var _event_trigger = require('./event_trigger');
127+
128+
var _event_trigger2 = _interopRequireDefault(_event_trigger);
129+
130+
function makeInput(element, profile) {
131+
var input = document.createElement('input');
132+
133+
input.setAttribute('type', 'file');
134+
135+
if (profile.accept) {
136+
input.setAttribute('accept', profile.accept);
137+
}
138+
139+
input.style.visibility = 'hidden';
140+
input.style.position = 'absolute';
141+
input.style.width = '1px';
142+
input.style.height = '1px';
143+
144+
document.body.appendChild(input);
145+
146+
return input;
147+
}
148+
149+
var FileTrigger = {};
150+
151+
FileTrigger.trigger = function (element, profile, callback) {
152+
var input = makeInput(element, profile);
153+
input.addEventListener('change', function (event) {
154+
var files = event.target.files;
155+
156+
for (var i = 0; i < files.length; i++) {
157+
callback(files[i]);
158+
_event_trigger2['default'].trigger(element, 'file:added', {
159+
element: element,
160+
profile: profile,
161+
file: files[i]
162+
});
163+
}
164+
165+
// Destroy the file input
166+
input.parentNode.removeChild(input);
167+
}, false);
168+
169+
input.click();
170+
};
171+
172+
exports['default'] = FileTrigger;
173+
module.exports = exports['default'];
174+
175+
},{"./event_trigger":2}],4:[function(require,module,exports){
176+
"use strict";
177+
178+
// export default class Profile {
179+
// constructor(options={}) {
180+
// this.name = options.name;
181+
// this.adapter = options.adapter;
182+
183+
// this.bucket = options.bucket;
184+
// this.domain = options.domain;
185+
// this.ssl = options.ssl || false;
186+
// this.uptokenUrl = options.uptokenUrl;
187+
// this.uploadUrl = options.uploadUrl || 'http://upload.qiniu.com/'
188+
189+
// this.public = true;
190+
// if (options.public !== undefined) {
191+
// this.public = options.public;
192+
// }
193+
// }
194+
// }
195+
196+
},{}],5:[function(require,module,exports){
197+
"use strict";
198+
199+
Object.defineProperty(exports, "__esModule", {
200+
value: true
201+
});
202+
203+
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
204+
205+
var UploadTask = function UploadTask(uploader, profile, element, file) {
206+
_classCallCheck(this, UploadTask);
207+
208+
this.uploader = uploader;
209+
this.profile = profile;
210+
this.element = element;
211+
this.file = file;
212+
};
213+
214+
exports["default"] = UploadTask;
215+
module.exports = exports["default"];
216+
217+
},{}],6:[function(require,module,exports){
218+
"use strict";
219+
220+
Object.defineProperty(exports, "__esModule", {
221+
value: true
222+
});
223+
224+
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; }; })();
225+
226+
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
227+
228+
var BaseUploader = (function () {
229+
function BaseUploader(element, profile, file) {
230+
_classCallCheck(this, BaseUploader);
231+
232+
this.element = element;
233+
this.profile = profile;
234+
this.file = file;
235+
}
236+
237+
_createClass(BaseUploader, [{
238+
key: "start",
239+
value: function start() {}
240+
}, {
241+
key: "upload",
242+
value: function upload() {}
243+
}, {
244+
key: "cancel",
245+
value: function cancel() {}
246+
}, {
247+
key: "onFileAdded",
248+
value: function onFileAdded() {}
249+
}, {
250+
key: "onBeforeUpload",
251+
value: function onBeforeUpload() {}
252+
}, {
253+
key: "onFileUpload",
254+
value: function onFileUpload() {}
255+
}, {
256+
key: "onFileProgress",
257+
value: function onFileProgress() {}
258+
}, {
259+
key: "onFileUploaded",
260+
value: function onFileUploaded() {}
261+
}, {
262+
key: "onFileError",
263+
value: function onFileError() {}
264+
}]);
265+
266+
return BaseUploader;
267+
})();
268+
269+
exports["default"] = BaseUploader;
270+
module.exports = exports["default"];
271+
272+
},{}],7:[function(require,module,exports){
273+
'use strict';
274+
275+
Object.defineProperty(exports, '__esModule', {
276+
value: true
277+
});
278+
279+
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; }; })();
280+
281+
var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; desc = parent = getter = undefined; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };
282+
283+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
284+
285+
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
286+
287+
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; }
288+
289+
var _base_uploader = require('./base_uploader');
290+
291+
var _base_uploader2 = _interopRequireDefault(_base_uploader);
292+
293+
var QiniuUploader = (function (_BaseUploader) {
294+
_inherits(QiniuUploader, _BaseUploader);
295+
296+
function QiniuUploader() {
297+
_classCallCheck(this, QiniuUploader);
298+
299+
_get(Object.getPrototypeOf(QiniuUploader.prototype), 'constructor', this).apply(this, arguments);
300+
}
301+
302+
_createClass(QiniuUploader, [{
303+
key: 'onUptoken',
304+
value: function onUptoken() {}
305+
}]);
306+
307+
return QiniuUploader;
308+
})(_base_uploader2['default']);
309+
310+
exports['default'] = QiniuUploader;
311+
module.exports = exports['default'];
312+
313+
},{"./base_uploader":6}]},{},[1]);

‎dist/deep_uploader.min.js

+4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)
Please sign in to comment.