Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/phabricator
Path: blob/master/webroot/rsrc/js/application/projects/WorkboardController.js
12242 views
1
/**
2
* @provides javelin-workboard-controller
3
* @requires javelin-install
4
* javelin-dom
5
* javelin-util
6
* javelin-vector
7
* javelin-stratcom
8
* javelin-workflow
9
* phabricator-drag-and-drop-file-upload
10
* javelin-workboard-board
11
* @javelin
12
*/
13
14
JX.install('WorkboardController', {
15
16
construct: function() {
17
this._boards = {};
18
},
19
20
properties: {
21
uploadURI: null,
22
coverURI: null,
23
moveURI: null,
24
reloadURI: null,
25
chunkThreshold: null
26
},
27
28
members: {
29
_boards: null,
30
31
_panOrigin: null,
32
_panNode: null,
33
_panX: null,
34
35
start: function() {
36
this._setupCoverImageHandlers();
37
this._setupPanHandlers();
38
this._setupEditHandlers();
39
40
return this;
41
},
42
43
newBoard: function(phid, node) {
44
var board = new JX.WorkboardBoard(this, phid, node);
45
this._boards[phid] = board;
46
return board;
47
},
48
49
_getBoard: function(board_phid) {
50
return this._boards[board_phid];
51
},
52
53
_setupCoverImageHandlers: function() {
54
if (!JX.PhabricatorDragAndDropFileUpload.isSupported()) {
55
return;
56
}
57
58
var drop = new JX.PhabricatorDragAndDropFileUpload('project-card')
59
.setURI(this.getUploadURI())
60
.setChunkThreshold(this.getChunkThreshold());
61
62
drop.listen('didBeginDrag', function(node) {
63
JX.DOM.alterClass(node, 'phui-workcard-upload-target', true);
64
});
65
66
drop.listen('didEndDrag', function(node) {
67
JX.DOM.alterClass(node, 'phui-workcard-upload-target', false);
68
});
69
70
drop.listen('didUpload', JX.bind(this, this._oncoverupload));
71
72
drop.start();
73
},
74
75
_oncoverupload: function(file) {
76
var node = file.getTargetNode();
77
78
var board = this._getBoardFromNode(node);
79
80
var column_node = JX.DOM.findAbove(node, 'ul', 'project-column');
81
var column_phid = JX.Stratcom.getData(column_node).columnPHID;
82
var column = board.getColumn(column_phid);
83
84
var data = {
85
boardPHID: board.getPHID(),
86
objectPHID: JX.Stratcom.getData(node).objectPHID,
87
filePHID: file.getPHID(),
88
visiblePHIDs: column.getCardPHIDs()
89
};
90
91
new JX.Workflow(this.getCoverURI(), data)
92
.setHandler(JX.bind(board, board.updateCard))
93
.start();
94
},
95
96
_getBoardFromNode: function(node) {
97
var board_node = JX.DOM.findAbove(node, 'div', 'jx-workboard');
98
var board_phid = JX.Stratcom.getData(board_node).boardPHID;
99
return this._getBoard(board_phid);
100
},
101
102
_setupPanHandlers: function() {
103
var mousedown = JX.bind(this, this._onpanmousedown);
104
var mousemove = JX.bind(this, this._onpanmousemove);
105
var mouseup = JX.bind(this, this._onpanmouseup);
106
107
JX.Stratcom.listen('mousedown', 'workboard-shadow', mousedown);
108
JX.Stratcom.listen('mousemove', null, mousemove);
109
JX.Stratcom.listen('mouseup', null, mouseup);
110
},
111
112
_onpanmousedown: function(e) {
113
if (!JX.Device.isDesktop()) {
114
return;
115
}
116
117
if (e.getNode('workpanel')) {
118
return;
119
}
120
121
if (JX.Stratcom.pass()) {
122
return;
123
}
124
125
e.kill();
126
127
this._panOrigin = JX.$V(e);
128
this._panNode = e.getNode('workboard-shadow');
129
this._panX = this._panNode.scrollLeft;
130
},
131
132
_onpanmousemove: function(e) {
133
if (!this._panOrigin) {
134
return;
135
}
136
137
var cursor = JX.$V(e);
138
this._panNode.scrollLeft = this._panX + (this._panOrigin.x - cursor.x);
139
},
140
141
_onpanmouseup: function() {
142
this._panOrigin = null;
143
},
144
145
_setupEditHandlers: function() {
146
var onadd = JX.bind(this, this._onaddcard);
147
var onedit = JX.bind(this, this._oneditcard);
148
149
JX.Stratcom.listen('click', 'column-add-task', onadd);
150
JX.Stratcom.listen('click', 'edit-project-card', onedit);
151
},
152
153
_onaddcard: function(e) {
154
// We want the 'boards-dropdown-menu' behavior to see this event and
155
// close the dropdown, but don't want to follow the link.
156
e.prevent();
157
158
var column_data = e.getNodeData('column-add-task');
159
var column_phid = column_data.columnPHID;
160
161
var board_phid = column_data.boardPHID;
162
var board = this._getBoard(board_phid);
163
var column = board.getColumn(column_phid);
164
165
var request_data = {
166
responseType: 'card',
167
columnPHID: column.getPHID(),
168
projects: column_data.projectPHID,
169
visiblePHIDs: column.getCardPHIDs(),
170
order: board.getOrder()
171
};
172
173
new JX.Workflow(column_data.createURI, request_data)
174
.setHandler(JX.bind(board, board.updateCard))
175
.start();
176
},
177
178
_oneditcard: function(e) {
179
e.kill();
180
181
var column_node = e.getNode('project-column');
182
var column_phid = JX.Stratcom.getData(column_node).columnPHID;
183
184
var board = this._getBoardFromNode(column_node);
185
var column = board.getColumn(column_phid);
186
187
var request_data = {
188
responseType: 'card',
189
columnPHID: column.getPHID(),
190
visiblePHIDs: column.getCardPHIDs(),
191
order: board.getOrder()
192
};
193
194
new JX.Workflow(e.getNode('tag:a').href, request_data)
195
.setHandler(JX.bind(board, board.updateCard))
196
.start();
197
}
198
199
}
200
201
});
202
203