2014-01-13 21:23:57 +01:00
|
|
|
/**
|
|
|
|
* @provides javelin-behavior-project-boards
|
|
|
|
* @requires javelin-behavior
|
|
|
|
* javelin-dom
|
|
|
|
* javelin-util
|
2014-09-09 23:20:27 +02:00
|
|
|
* javelin-vector
|
2014-01-13 21:24:36 +01:00
|
|
|
* javelin-stratcom
|
|
|
|
* javelin-workflow
|
2016-02-10 14:59:46 +01:00
|
|
|
* javelin-workboard-controller
|
2014-01-13 21:23:57 +01:00
|
|
|
*/
|
|
|
|
|
2015-04-28 23:51:49 +02:00
|
|
|
JX.behavior('project-boards', function(config, statics) {
|
2014-01-13 21:23:57 +01:00
|
|
|
|
|
|
|
|
2014-08-15 18:28:08 +02:00
|
|
|
function onupdate(col) {
|
|
|
|
var data = JX.Stratcom.getData(col);
|
|
|
|
var cards = finditems(col);
|
|
|
|
|
|
|
|
// Update the count of tasks in the column header.
|
|
|
|
if (!data.countTagNode) {
|
|
|
|
data.countTagNode = JX.$(data.countTagID);
|
|
|
|
JX.DOM.show(data.countTagNode);
|
|
|
|
}
|
|
|
|
|
|
|
|
var sum = 0;
|
|
|
|
for (var ii = 0; ii < cards.length; ii++) {
|
|
|
|
// TODO: Allow this to be computed in some more clever way.
|
|
|
|
sum += 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
// TODO: This is a little bit hacky, but we don't have a PHUIX version of
|
|
|
|
// this element yet.
|
|
|
|
|
Allow columns to have a point limit
Summary:
Fixes T5885. This implements optional soft point limits for workboard columns, per traditional Kanban.
- Allow columns to have a point limit set.
- When a column has a point limit, show it in the header.
- If a column has too many points in it, show the column and point count in red.
@chad, this could probably use some design tweaks. In particular:
- I changed the color of "hidden" columns to avoid confusion with "overfull" columns. We might be able to find a better color.
- UI hints for overfull columns might need adjustment.
(After T4427, we'll let you sum some custom field instead of total number of tasks, which is why this is called "points" rather than "number of tasks".)
Test Plan:
{F190914}
Note that:
- "Pre-planning" has a limit, so it shows "4/12".
- "Planning" has a limit and is overfull, so it shows "5 / 4".
- Other columns do not have limits.
- "Post-planning" is a hidden column. This might be too muted now.
Transactions:
{F190915}
Error messages / edit screen:
{F190916}
Reviewers: btrahan, chad
Reviewed By: btrahan
Subscribers: chad, epriestley
Maniphest Tasks: T5885
Differential Revision: https://secure.phabricator.com/D10276
2014-08-15 20:16:08 +02:00
|
|
|
var over_limit = (data.pointLimit && (sum > data.pointLimit));
|
|
|
|
|
|
|
|
var display_value = sum;
|
|
|
|
if (data.pointLimit) {
|
|
|
|
display_value = sum + ' / ' + data.pointLimit;
|
|
|
|
}
|
|
|
|
JX.DOM.setContent(JX.$(data.countTagContentID), display_value);
|
|
|
|
|
|
|
|
|
|
|
|
var panel_map = {
|
|
|
|
'project-panel-empty': !cards.length,
|
|
|
|
'project-panel-over-limit': over_limit
|
|
|
|
};
|
|
|
|
var panel = JX.DOM.findAbove(col, 'div', 'workpanel');
|
2014-12-30 11:56:11 +01:00
|
|
|
for (var p in panel_map) {
|
|
|
|
JX.DOM.alterClass(panel, p, !!panel_map[p]);
|
Allow columns to have a point limit
Summary:
Fixes T5885. This implements optional soft point limits for workboard columns, per traditional Kanban.
- Allow columns to have a point limit set.
- When a column has a point limit, show it in the header.
- If a column has too many points in it, show the column and point count in red.
@chad, this could probably use some design tweaks. In particular:
- I changed the color of "hidden" columns to avoid confusion with "overfull" columns. We might be able to find a better color.
- UI hints for overfull columns might need adjustment.
(After T4427, we'll let you sum some custom field instead of total number of tasks, which is why this is called "points" rather than "number of tasks".)
Test Plan:
{F190914}
Note that:
- "Pre-planning" has a limit, so it shows "4/12".
- "Planning" has a limit and is overfull, so it shows "5 / 4".
- Other columns do not have limits.
- "Post-planning" is a hidden column. This might be too muted now.
Transactions:
{F190915}
Error messages / edit screen:
{F190916}
Reviewers: btrahan, chad
Reviewed By: btrahan
Subscribers: chad, epriestley
Maniphest Tasks: T5885
Differential Revision: https://secure.phabricator.com/D10276
2014-08-15 20:16:08 +02:00
|
|
|
}
|
|
|
|
|
2014-08-15 18:28:08 +02:00
|
|
|
var color_map = {
|
|
|
|
'phui-tag-shade-disabled': (sum === 0),
|
Allow columns to have a point limit
Summary:
Fixes T5885. This implements optional soft point limits for workboard columns, per traditional Kanban.
- Allow columns to have a point limit set.
- When a column has a point limit, show it in the header.
- If a column has too many points in it, show the column and point count in red.
@chad, this could probably use some design tweaks. In particular:
- I changed the color of "hidden" columns to avoid confusion with "overfull" columns. We might be able to find a better color.
- UI hints for overfull columns might need adjustment.
(After T4427, we'll let you sum some custom field instead of total number of tasks, which is why this is called "points" rather than "number of tasks".)
Test Plan:
{F190914}
Note that:
- "Pre-planning" has a limit, so it shows "4/12".
- "Planning" has a limit and is overfull, so it shows "5 / 4".
- Other columns do not have limits.
- "Post-planning" is a hidden column. This might be too muted now.
Transactions:
{F190915}
Error messages / edit screen:
{F190916}
Reviewers: btrahan, chad
Reviewed By: btrahan
Subscribers: chad, epriestley
Maniphest Tasks: T5885
Differential Revision: https://secure.phabricator.com/D10276
2014-08-15 20:16:08 +02:00
|
|
|
'phui-tag-shade-blue': (sum > 0 && !over_limit),
|
|
|
|
'phui-tag-shade-red': (over_limit)
|
2014-08-15 18:28:08 +02:00
|
|
|
};
|
2014-12-30 11:56:11 +01:00
|
|
|
for (var c in color_map) {
|
|
|
|
JX.DOM.alterClass(data.countTagNode, c, !!color_map[c]);
|
2014-08-15 18:28:08 +02:00
|
|
|
}
|
2014-01-13 21:24:13 +01:00
|
|
|
}
|
|
|
|
|
2015-04-28 23:51:49 +02:00
|
|
|
function update_statics(update_config) {
|
|
|
|
statics.boardID = update_config.boardID;
|
|
|
|
statics.projectPHID = update_config.projectPHID;
|
|
|
|
statics.order = update_config.order;
|
|
|
|
statics.moveURI = update_config.moveURI;
|
|
|
|
statics.createURI = update_config.createURI;
|
|
|
|
}
|
|
|
|
|
2015-05-12 20:37:55 +02:00
|
|
|
function setup() {
|
2015-04-28 23:51:49 +02:00
|
|
|
JX.Stratcom.listen('click', 'boards-dropdown-menu', function(e) {
|
|
|
|
var data = e.getNodeData('boards-dropdown-menu');
|
|
|
|
if (data.menu) {
|
|
|
|
return;
|
2014-03-06 03:40:28 +01:00
|
|
|
}
|
2015-04-28 23:51:49 +02:00
|
|
|
|
|
|
|
e.kill();
|
|
|
|
|
|
|
|
var list = JX.$H(data.items).getFragment().firstChild;
|
|
|
|
|
|
|
|
var button = e.getNode('boards-dropdown-menu');
|
|
|
|
data.menu = new JX.PHUIXDropdownMenu(button);
|
|
|
|
data.menu.setContent(list);
|
|
|
|
data.menu.open();
|
|
|
|
|
|
|
|
JX.DOM.listen(list, 'click', 'tag:a', function(e) {
|
|
|
|
if (!e.isNormalClick()) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
data.menu.close();
|
|
|
|
});
|
2014-03-06 03:40:28 +01:00
|
|
|
});
|
2014-08-15 18:28:08 +02:00
|
|
|
|
2015-04-28 23:51:49 +02:00
|
|
|
JX.Stratcom.listen(
|
|
|
|
'quicksand-redraw',
|
|
|
|
null,
|
|
|
|
function (e) {
|
|
|
|
var data = e.getData();
|
|
|
|
if (!data.newResponse.boardConfig) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
var new_config;
|
|
|
|
if (data.fromServer) {
|
|
|
|
new_config = data.newResponse.boardConfig;
|
|
|
|
statics.boardConfigCache[data.newResponseID] = new_config;
|
|
|
|
} else {
|
|
|
|
new_config = statics.boardConfigCache[data.newResponseID];
|
|
|
|
statics.boardID = new_config.boardID;
|
|
|
|
}
|
|
|
|
update_statics(new_config);
|
|
|
|
});
|
2016-02-06 23:05:15 +01:00
|
|
|
|
2015-04-28 23:51:49 +02:00
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!statics.setup) {
|
|
|
|
update_statics(config);
|
|
|
|
var current_page_id = JX.Quicksand.getCurrentPageID();
|
|
|
|
statics.boardConfigCache = {};
|
|
|
|
statics.boardConfigCache[current_page_id] = config;
|
2015-05-12 20:37:55 +02:00
|
|
|
statics.setup = setup();
|
2015-04-28 23:51:49 +02:00
|
|
|
}
|
|
|
|
|
2016-02-09 13:47:25 +01:00
|
|
|
if (!statics.workboard) {
|
2016-02-10 14:59:46 +01:00
|
|
|
statics.workboard = new JX.WorkboardController()
|
2016-02-09 15:14:42 +01:00
|
|
|
.setUploadURI(config.uploadURI)
|
|
|
|
.setCoverURI(config.coverURI)
|
|
|
|
.setMoveURI(config.moveURI)
|
2016-02-10 14:59:46 +01:00
|
|
|
.setCreateURI(config.createURI)
|
2016-02-09 15:14:42 +01:00
|
|
|
.setChunkThreshold(config.chunkThreshold)
|
|
|
|
.start();
|
2016-02-09 13:47:25 +01:00
|
|
|
}
|
|
|
|
|
2016-02-10 14:59:46 +01:00
|
|
|
var board_phid = config.projectPHID;
|
|
|
|
var board_node = JX.$(config.boardID);
|
|
|
|
|
|
|
|
var board = statics.workboard.newBoard(board_phid, board_node)
|
|
|
|
.setOrder(config.order);
|
|
|
|
|
|
|
|
var templates = config.templateMap;
|
|
|
|
for (var k in templates) {
|
|
|
|
board.setCardTemplate(k, templates[k]);
|
|
|
|
}
|
|
|
|
|
|
|
|
var column_maps = config.columnMaps;
|
|
|
|
for (var column_phid in column_maps) {
|
|
|
|
var column = board.getColumn(column_phid);
|
|
|
|
var column_map = column_maps[column_phid];
|
|
|
|
for (var ii = 0; ii < column_map.length; ii++) {
|
|
|
|
column.newCard(column_map[ii]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
var order_maps = config.orderMaps;
|
|
|
|
for (var object_phid in order_maps) {
|
|
|
|
board.setOrderMap(object_phid, order_maps[object_phid]);
|
|
|
|
}
|
|
|
|
|
|
|
|
board.start();
|
2016-02-09 13:47:25 +01:00
|
|
|
|
2014-01-13 21:23:57 +01:00
|
|
|
});
|