Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/phabricator
Path: blob/master/webroot/rsrc/js/application/projects/behavior-project-boards.js
12242 views
1
/**
2
* @provides javelin-behavior-project-boards
3
* @requires javelin-behavior
4
* javelin-dom
5
* javelin-util
6
* javelin-vector
7
* javelin-stratcom
8
* javelin-workflow
9
* javelin-workboard-controller
10
* javelin-workboard-drop-effect
11
*/
12
13
JX.behavior('project-boards', function(config, statics) {
14
15
function update_statics(update_config) {
16
statics.boardID = update_config.boardID;
17
statics.projectPHID = update_config.projectPHID;
18
statics.order = update_config.order;
19
statics.moveURI = update_config.moveURI;
20
}
21
22
function setup() {
23
JX.Stratcom.listen('click', 'boards-dropdown-menu', function(e) {
24
var data = e.getNodeData('boards-dropdown-menu');
25
if (data.menu) {
26
return;
27
}
28
29
e.kill();
30
31
var list = JX.$H(data.items).getFragment().firstChild;
32
33
var button = e.getNode('boards-dropdown-menu');
34
data.menu = new JX.PHUIXDropdownMenu(button);
35
data.menu.setContent(list);
36
data.menu.open();
37
});
38
39
JX.Stratcom.listen(
40
'quicksand-redraw',
41
null,
42
function (e) {
43
var data = e.getData();
44
if (!data.newResponse.boardConfig) {
45
return;
46
}
47
var new_config;
48
if (data.fromServer) {
49
new_config = data.newResponse.boardConfig;
50
statics.boardConfigCache[data.newResponseID] = new_config;
51
} else {
52
new_config = statics.boardConfigCache[data.newResponseID];
53
statics.boardID = new_config.boardID;
54
}
55
update_statics(new_config);
56
});
57
58
return true;
59
}
60
61
if (!statics.setup) {
62
update_statics(config);
63
var current_page_id = JX.Quicksand.getCurrentPageID();
64
statics.boardConfigCache = {};
65
statics.boardConfigCache[current_page_id] = config;
66
statics.setup = setup();
67
}
68
69
if (!statics.workboard) {
70
statics.workboard = new JX.WorkboardController()
71
.setUploadURI(config.uploadURI)
72
.setCoverURI(config.coverURI)
73
.setMoveURI(config.moveURI)
74
.setReloadURI(config.reloadURI)
75
.setChunkThreshold(config.chunkThreshold)
76
.start();
77
}
78
79
var board_phid = config.projectPHID;
80
var board_node = JX.$(config.boardID);
81
82
var board = statics.workboard.newBoard(board_phid, board_node)
83
.setOrder(config.order)
84
.setPointsEnabled(config.pointsEnabled);
85
86
var templates = config.templateMap;
87
for (var k in templates) {
88
board.getCardTemplate(k)
89
.setNodeHTMLTemplate(templates[k]);
90
}
91
92
var ii;
93
var jj;
94
var effects;
95
96
for (ii = 0; ii < config.columnTemplates.length; ii++) {
97
var spec = config.columnTemplates[ii];
98
99
var column = board.getColumn(spec.columnPHID);
100
101
effects = [];
102
for (jj = 0; jj < spec.effects.length; jj++) {
103
effects.push(
104
JX.WorkboardDropEffect.newFromDictionary(
105
spec.effects[jj]));
106
}
107
column.setDropEffects(effects);
108
109
for (jj = 0; jj < spec.cardPHIDs.length; jj++) {
110
column.newCard(spec.cardPHIDs[jj]);
111
}
112
113
if (spec.triggerPreviewEffect) {
114
column.setTriggerPreviewEffect(
115
JX.WorkboardDropEffect.newFromDictionary(
116
spec.triggerPreviewEffect));
117
}
118
}
119
120
var order_maps = config.orderMaps;
121
for (var object_phid in order_maps) {
122
var order_card = board.getCardTemplate(object_phid);
123
for (var order_key in order_maps[object_phid]) {
124
order_card.setSortVector(order_key, order_maps[object_phid][order_key]);
125
}
126
}
127
128
var property_maps = config.propertyMaps;
129
for (var property_phid in property_maps) {
130
board.getCardTemplate(property_phid)
131
.setObjectProperties(property_maps[property_phid]);
132
}
133
134
var headers = config.headers;
135
for (ii = 0; ii < headers.length; ii++) {
136
var header = headers[ii];
137
138
effects = [];
139
for (jj = 0; jj < header.effects.length; jj++) {
140
effects.push(
141
JX.WorkboardDropEffect.newFromDictionary(
142
header.effects[jj]));
143
}
144
145
board.getHeaderTemplate(header.key)
146
.setOrder(header.order)
147
.setNodeHTMLTemplate(header.template)
148
.setVector(header.vector)
149
.setEditProperties(header.editProperties)
150
.setDropEffects(effects);
151
}
152
153
var orders = config.orders;
154
for (ii = 0; ii < orders.length; ii++) {
155
var order = orders[ii];
156
157
board.getOrderTemplate(order.orderKey)
158
.setHasHeaders(order.hasHeaders)
159
.setCanReorder(order.canReorder);
160
}
161
162
var header_keys = config.headerKeys;
163
for (var header_phid in header_keys) {
164
board.getCardTemplate(header_phid)
165
.setHeaderKey(config.order, header_keys[header_phid]);
166
}
167
168
board.start();
169
170
// In Safari, we can only play sounds that we've already loaded, and we can
171
// only load them in response to an explicit user interaction like a click.
172
var sounds = config.preloadSounds;
173
var listener = JX.Stratcom.listen('mousedown', null, function() {
174
for (var ii = 0; ii < sounds.length; ii++) {
175
JX.Sound.load(sounds[ii]);
176
}
177
178
// Remove this callback once it has run once.
179
listener.remove();
180
});
181
182
});
183
184