Changeset View
Changeset View
Standalone View
Standalone View
webroot/rsrc/js/application/projects/WorkboardColumn.js
/** | /** | ||||
* @provides javelin-workboard-column | * @provides javelin-workboard-column | ||||
* @requires javelin-install | * @requires javelin-install | ||||
* javelin-workboard-card | * javelin-workboard-card | ||||
* javelin-workboard-header | |||||
* @javelin | * @javelin | ||||
*/ | */ | ||||
JX.install('WorkboardColumn', { | JX.install('WorkboardColumn', { | ||||
construct: function(board, phid, root) { | construct: function(board, phid, root) { | ||||
this._board = board; | this._board = board; | ||||
this._phid = phid; | this._phid = phid; | ||||
this._root = root; | this._root = root; | ||||
this._panel = JX.DOM.findAbove(root, 'div', 'workpanel'); | this._panel = JX.DOM.findAbove(root, 'div', 'workpanel'); | ||||
this._pointsNode = JX.DOM.find(this._panel, 'span', 'column-points'); | this._pointsNode = JX.DOM.find(this._panel, 'span', 'column-points'); | ||||
this._pointsContentNode = JX.DOM.find( | this._pointsContentNode = JX.DOM.find( | ||||
this._panel, | this._panel, | ||||
'span', | 'span', | ||||
'column-points-content'); | 'column-points-content'); | ||||
this._cards = {}; | this._cards = {}; | ||||
this._headers = {}; | |||||
this._objects = []; | |||||
this._naturalOrder = []; | this._naturalOrder = []; | ||||
}, | }, | ||||
members: { | members: { | ||||
_phid: null, | _phid: null, | ||||
_root: null, | _root: null, | ||||
_board: null, | _board: null, | ||||
_cards: null, | _cards: null, | ||||
_headers: null, | |||||
_naturalOrder: null, | _naturalOrder: null, | ||||
_panel: null, | _panel: null, | ||||
_pointsNode: null, | _pointsNode: null, | ||||
_pointsContentNode: null, | _pointsContentNode: null, | ||||
_dirty: true, | _dirty: true, | ||||
_objects: null, | |||||
getPHID: function() { | getPHID: function() { | ||||
return this._phid; | return this._phid; | ||||
}, | }, | ||||
getRoot: function() { | getRoot: function() { | ||||
return this._root; | return this._root; | ||||
}, | }, | ||||
▲ Show 20 Lines • Show All 98 Lines • ▼ Show 20 Lines | members: { | ||||
markForRedraw: function() { | markForRedraw: function() { | ||||
this._dirty = true; | this._dirty = true; | ||||
}, | }, | ||||
isMarkedForRedraw: function() { | isMarkedForRedraw: function() { | ||||
return this._dirty; | return this._dirty; | ||||
}, | }, | ||||
getHeader: function(key) { | |||||
if (!this._headers[key]) { | |||||
this._headers[key] = new JX.WorkboardHeader(this, key); | |||||
} | |||||
return this._headers[key]; | |||||
}, | |||||
_getCardHeaderKey: function(card, order) { | |||||
switch (order) { | |||||
case 'priority': | |||||
return 'priority(' + card.getPriority() + ')'; | |||||
default: | |||||
return null; | |||||
} | |||||
}, | |||||
redraw: function() { | redraw: function() { | ||||
var board = this.getBoard(); | var board = this.getBoard(); | ||||
var order = board.getOrder(); | var order = board.getOrder(); | ||||
var list; | var list; | ||||
var has_headers; | |||||
if (order == 'natural') { | if (order == 'natural') { | ||||
list = this._getCardsSortedNaturally(); | list = this._getCardsSortedNaturally(); | ||||
has_headers = false; | |||||
} else { | } else { | ||||
list = this._getCardsSortedByKey(order); | list = this._getCardsSortedByKey(order); | ||||
has_headers = true; | |||||
} | } | ||||
var content = []; | var ii; | ||||
for (var ii = 0; ii < list.length; ii++) { | var objects = []; | ||||
var header_keys = []; | |||||
var seen_headers = {}; | |||||
if (has_headers) { | |||||
var header_templates = board.getHeaderTemplatesForOrder(order); | |||||
for (var k in header_templates) { | |||||
header_keys.push(header_templates[k].getHeaderKey()); | |||||
} | |||||
header_keys.reverse(); | |||||
} | |||||
for (ii = 0; ii < list.length; ii++) { | |||||
var card = list[ii]; | var card = list[ii]; | ||||
var node = card.getNode(); | // If a column has a "High" priority card and a "Low" priority card, | ||||
content.push(node); | // we need to add the "Normal" header in between them. This allows | ||||
// you to change priority to "Normal" even if there are no "Normal" | |||||
// cards in a column. | |||||
if (has_headers) { | |||||
var header_key = this._getCardHeaderKey(card, order); | |||||
if (!seen_headers[header_key]) { | |||||
while (header_keys.length) { | |||||
var next = header_keys.pop(); | |||||
var header = this.getHeader(next); | |||||
objects.push(header); | |||||
seen_headers[header_key] = true; | |||||
if (next === header_key) { | |||||
break; | |||||
} | |||||
} | |||||
} | |||||
} | |||||
objects.push(card); | |||||
} | |||||
this._objects = objects; | |||||
var content = []; | |||||
for (ii = 0; ii < this._objects.length; ii++) { | |||||
var object = this._objects[ii]; | |||||
var node = object.getNode(); | |||||
content.push(node); | |||||
} | } | ||||
JX.DOM.setContent(this.getRoot(), content); | JX.DOM.setContent(this.getRoot(), content); | ||||
this._redrawFrame(); | this._redrawFrame(); | ||||
this._dirty = false; | this._dirty = false; | ||||
}, | }, | ||||
compareHandler: function(src_list, src_node, dst_list, dst_node) { | compareHandler: function(src_list, src_node, dst_list, dst_node) { | ||||
var board = this.getBoard(); | var board = this.getBoard(); | ||||
var order = board.getOrder(); | var order = board.getOrder(); | ||||
var src_phid = JX.Stratcom.getData(src_node).objectPHID; | var src_phid = JX.Stratcom.getData(src_node).objectPHID; | ||||
var dst_phid = JX.Stratcom.getData(dst_node).objectPHID; | var dst_phid = JX.Stratcom.getData(dst_node).objectPHID; | ||||
var u_vec = this.getBoard().getOrderVector(src_phid, order); | var u_vec = board.getOrderVector(src_phid, order); | ||||
var v_vec = this.getBoard().getOrderVector(dst_phid, order); | var v_vec = board.getOrderVector(dst_phid, order); | ||||
return this._compareVectors(u_vec, v_vec); | return board.compareVectors(u_vec, v_vec); | ||||
}, | }, | ||||
setIsDropTarget: function(is_target) { | setIsDropTarget: function(is_target) { | ||||
var node = this.getWorkpanelNode(); | var node = this.getWorkpanelNode(); | ||||
JX.DOM.alterClass(node, 'workboard-column-drop-target', is_target); | JX.DOM.alterClass(node, 'workboard-column-drop-target', is_target); | ||||
}, | }, | ||||
_getCardsSortedNaturally: function() { | _getCardsSortedNaturally: function() { | ||||
Show All 16 Lines | _getCardsSortedByKey: function(order) { | ||||
} | } | ||||
list.sort(JX.bind(this, this._sortCards, order)); | list.sort(JX.bind(this, this._sortCards, order)); | ||||
return list; | return list; | ||||
}, | }, | ||||
_sortCards: function(order, u, v) { | _sortCards: function(order, u, v) { | ||||
var u_vec = this.getBoard().getOrderVector(u.getPHID(), order); | var board = this.getBoard(); | ||||
var v_vec = this.getBoard().getOrderVector(v.getPHID(), order); | var u_vec = board.getOrderVector(u.getPHID(), order); | ||||
var v_vec = board.getOrderVector(v.getPHID(), order); | |||||
return this._compareVectors(u_vec, v_vec); | |||||
}, | |||||
_compareVectors: function(u_vec, v_vec) { | |||||
for (var ii = 0; ii < u_vec.length; ii++) { | |||||
if (u_vec[ii] > v_vec[ii]) { | |||||
return 1; | |||||
} | |||||
if (u_vec[ii] < v_vec[ii]) { | |||||
return -1; | |||||
} | |||||
} | |||||
return 0; | return board.compareVectors(u_vec, v_vec); | ||||
}, | }, | ||||
_redrawFrame: function() { | _redrawFrame: function() { | ||||
var cards = this.getCards(); | var cards = this.getCards(); | ||||
var board = this.getBoard(); | var board = this.getBoard(); | ||||
var points = {}; | var points = {}; | ||||
var count = 0; | var count = 0; | ||||
▲ Show 20 Lines • Show All 78 Lines • Show Last 20 Lines |