Changeset View
Changeset View
Standalone View
Standalone View
webroot/rsrc/js/application/projects/WorkboardBoard.js
/** | /** | ||||
* @provides javelin-workboard-board | * @provides javelin-workboard-board | ||||
* @requires javelin-install | * @requires javelin-install | ||||
* javelin-dom | * javelin-dom | ||||
* javelin-util | * javelin-util | ||||
* javelin-stratcom | * javelin-stratcom | ||||
* javelin-workflow | * javelin-workflow | ||||
* phabricator-draggable-list | * phabricator-draggable-list | ||||
* javelin-workboard-column | * javelin-workboard-column | ||||
* javelin-workboard-header-template | * javelin-workboard-header-template | ||||
* javelin-workboard-card-template | * javelin-workboard-card-template | ||||
* javelin-workboard-order-template | |||||
* @javelin | * @javelin | ||||
*/ | */ | ||||
JX.install('WorkboardBoard', { | JX.install('WorkboardBoard', { | ||||
construct: function(controller, phid, root) { | construct: function(controller, phid, root) { | ||||
this._controller = controller; | this._controller = controller; | ||||
this._phid = phid; | this._phid = phid; | ||||
this._root = root; | this._root = root; | ||||
this._headers = {}; | this._headers = {}; | ||||
this._cards = {}; | this._cards = {}; | ||||
this._orders = {}; | |||||
this._buildColumns(); | this._buildColumns(); | ||||
}, | }, | ||||
properties: { | properties: { | ||||
order: null, | order: null, | ||||
pointsEnabled: false | pointsEnabled: false | ||||
}, | }, | ||||
Show All 33 Lines | members: { | ||||
getHeaderTemplate: function(header_key) { | getHeaderTemplate: function(header_key) { | ||||
if (!this._headers[header_key]) { | if (!this._headers[header_key]) { | ||||
this._headers[header_key] = new JX.WorkboardHeaderTemplate(header_key); | this._headers[header_key] = new JX.WorkboardHeaderTemplate(header_key); | ||||
} | } | ||||
return this._headers[header_key]; | return this._headers[header_key]; | ||||
}, | }, | ||||
getOrderTemplate: function(order_key) { | |||||
if (!this._orders[order_key]) { | |||||
this._orders[order_key] = new JX.WorkboardOrderTemplate(order_key); | |||||
} | |||||
return this._orders[order_key]; | |||||
}, | |||||
getHeaderTemplatesForOrder: function(order) { | getHeaderTemplatesForOrder: function(order) { | ||||
var templates = []; | var templates = []; | ||||
for (var k in this._headers) { | for (var k in this._headers) { | ||||
var header = this._headers[k]; | var header = this._headers[k]; | ||||
if (header.getOrder() !== order) { | if (header.getOrder() !== order) { | ||||
continue; | continue; | ||||
▲ Show 20 Lines • Show All 48 Lines • ▼ Show 20 Lines | _buildColumns: function() { | ||||
this._columns[phid] = new JX.WorkboardColumn(this, phid, node); | this._columns[phid] = new JX.WorkboardColumn(this, phid, node); | ||||
} | } | ||||
}, | }, | ||||
_setupDragHandlers: function() { | _setupDragHandlers: function() { | ||||
var columns = this.getColumns(); | var columns = this.getColumns(); | ||||
var order_template = this.getOrderTemplate(this.getOrder()); | |||||
var has_headers = order_template.getHasHeaders(); | |||||
var can_reorder = order_template.getCanReorder(); | |||||
var lists = []; | var lists = []; | ||||
for (var k in columns) { | for (var k in columns) { | ||||
var column = columns[k]; | var column = columns[k]; | ||||
var list = new JX.DraggableList('draggable-card', column.getRoot()) | var list = new JX.DraggableList('draggable-card', column.getRoot()) | ||||
.setOuterContainer(this.getRoot()) | .setOuterContainer(this.getRoot()) | ||||
.setFindItemsHandler(JX.bind(column, column.getDropTargetNodes)) | .setFindItemsHandler(JX.bind(column, column.getDropTargetNodes)) | ||||
.setCanDragX(true) | .setCanDragX(true) | ||||
.setHasInfiniteHeight(true) | .setHasInfiniteHeight(true) | ||||
.setIsDropTargetHandler(JX.bind(column, column.setIsDropTarget)); | .setIsDropTargetHandler(JX.bind(column, column.setIsDropTarget)); | ||||
var default_handler = list.getGhostHandler(); | var default_handler = list.getGhostHandler(); | ||||
list.setGhostHandler( | list.setGhostHandler( | ||||
JX.bind(column, column.handleDragGhost, default_handler)); | JX.bind(column, column.handleDragGhost, default_handler)); | ||||
if (this.getOrder() !== 'natural') { | // The "compare handler" locks cards into a specific position in the | ||||
// column. | |||||
list.setCompareHandler(JX.bind(column, column.compareHandler)); | list.setCompareHandler(JX.bind(column, column.compareHandler)); | ||||
// If the view has group headers, we lock cards into the right position | |||||
// when moving them between columns, but not within a column. | |||||
if (has_headers) { | |||||
list.setCompareOnMove(true); | |||||
} | |||||
// If we can't reorder cards, we always lock them into their current | |||||
// position. | |||||
if (!can_reorder) { | |||||
list.setCompareOnMove(true); | |||||
list.setCompareOnReorder(true); | |||||
} | } | ||||
list.listen('didDrop', JX.bind(this, this._onmovecard, list)); | list.listen('didDrop', JX.bind(this, this._onmovecard, list)); | ||||
lists.push(list); | lists.push(list); | ||||
} | } | ||||
for (var ii = 0; ii < lists.length; ii++) { | for (var ii = 0; ii < lists.length; ii++) { | ||||
▲ Show 20 Lines • Show All 221 Lines • Show Last 20 Lines |