Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/phabricator
Path: blob/master/webroot/rsrc/js/phui/behavior-phui-file-upload.js
12241 views
1
/**
2
* @provides javelin-behavior-phui-file-upload
3
* @requires javelin-behavior
4
* javelin-stratcom
5
* javelin-dom
6
* phuix-dropdown-menu
7
*/
8
9
JX.behavior('phui-file-upload', function(config) {
10
11
function startUpload(workflow, input) {
12
var files = input.files;
13
14
if (!files || !files.length) {
15
return;
16
}
17
18
var state = {
19
workflow: workflow,
20
input: input,
21
waiting: 0,
22
phids: []
23
};
24
25
var callback = JX.bind(null, didUpload, state);
26
27
var dummy = input;
28
var uploader = new JX.PhabricatorDragAndDropFileUpload(dummy)
29
.setURI(config.uploadURI)
30
.setChunkThreshold(config.chunkThreshold);
31
32
uploader.listen('didUpload', callback);
33
uploader.start();
34
35
workflow.pause();
36
for (var ii = 0; ii < files.length; ii++) {
37
state.waiting++;
38
uploader.sendRequest(files[ii]);
39
}
40
}
41
42
function didUpload(state, file) {
43
state.phids.push(file.getPHID());
44
state.waiting--;
45
46
if (state.waiting) {
47
return;
48
}
49
50
state.workflow
51
.addData(config.inputName, state.phids.join(', '))
52
.resume();
53
}
54
55
JX.Workflow.listen('start', function(workflow) {
56
var form = workflow.getSourceForm();
57
if (!form) {
58
return;
59
}
60
61
var input;
62
try {
63
input = JX.$(config.fileInputID);
64
} catch (ex) {
65
return;
66
}
67
68
var local_form = JX.DOM.findAbove(input, 'form');
69
if (!local_form) {
70
return;
71
}
72
73
if (local_form !== form) {
74
return;
75
}
76
77
startUpload(workflow, input);
78
});
79
80
});
81
82