Changeset View
Changeset View
Standalone View
Standalone View
webroot/rsrc/js/application/projects/WorkboardColumn.js
Show All 28 Lines | JX.install('WorkboardColumn', { | ||||
members: { | members: { | ||||
_phid: null, | _phid: null, | ||||
_root: null, | _root: null, | ||||
_board: null, | _board: null, | ||||
_cards: null, | _cards: null, | ||||
_headers: null, | _headers: null, | ||||
_naturalOrder: null, | _naturalOrder: null, | ||||
_orderVectors: null, | |||||
_panel: null, | _panel: null, | ||||
_pointsNode: null, | _pointsNode: null, | ||||
_pointsContentNode: null, | _pointsContentNode: null, | ||||
_dirty: true, | _dirty: true, | ||||
_objects: null, | _objects: null, | ||||
getPHID: function() { | getPHID: function() { | ||||
return this._phid; | return this._phid; | ||||
Show All 16 Lines | members: { | ||||
}, | }, | ||||
getBoard: function() { | getBoard: function() { | ||||
return this._board; | return this._board; | ||||
}, | }, | ||||
setNaturalOrder: function(order) { | setNaturalOrder: function(order) { | ||||
this._naturalOrder = order; | this._naturalOrder = order; | ||||
this._orderVectors = null; | |||||
return this; | return this; | ||||
}, | }, | ||||
getPointsNode: function() { | getPointsNode: function() { | ||||
return this._pointsNode; | return this._pointsNode; | ||||
}, | }, | ||||
getPointsContentNode: function() { | getPointsContentNode: function() { | ||||
return this._pointsContentNode; | return this._pointsContentNode; | ||||
}, | }, | ||||
getWorkpanelNode: function() { | getWorkpanelNode: function() { | ||||
return this._panel; | return this._panel; | ||||
}, | }, | ||||
newCard: function(phid) { | newCard: function(phid) { | ||||
var card = new JX.WorkboardCard(this, phid); | var card = new JX.WorkboardCard(this, phid); | ||||
this._cards[phid] = card; | this._cards[phid] = card; | ||||
this._naturalOrder.push(phid); | this._naturalOrder.push(phid); | ||||
this._orderVectors = null; | |||||
return card; | return card; | ||||
}, | }, | ||||
removeCard: function(phid) { | removeCard: function(phid) { | ||||
var card = this._cards[phid]; | var card = this._cards[phid]; | ||||
delete this._cards[phid]; | delete this._cards[phid]; | ||||
for (var ii = 0; ii < this._naturalOrder.length; ii++) { | for (var ii = 0; ii < this._naturalOrder.length; ii++) { | ||||
if (this._naturalOrder[ii] == phid) { | if (this._naturalOrder[ii] == phid) { | ||||
this._naturalOrder.splice(ii, 1); | this._naturalOrder.splice(ii, 1); | ||||
this._orderVectors = null; | |||||
break; | break; | ||||
} | } | ||||
} | } | ||||
return card; | return card; | ||||
}, | }, | ||||
addCard: function(card, after) { | addCard: function(card, after) { | ||||
Show All 14 Lines | addCard: function(card, after) { | ||||
} | } | ||||
if (index > this._naturalOrder.length) { | if (index > this._naturalOrder.length) { | ||||
this._naturalOrder.push(phid); | this._naturalOrder.push(phid); | ||||
} else { | } else { | ||||
this._naturalOrder.splice(index, 0, phid); | this._naturalOrder.splice(index, 0, phid); | ||||
} | } | ||||
this._orderVectors = null; | |||||
return this; | return this; | ||||
}, | }, | ||||
getDropTargetNodes: function() { | getDropTargetNodes: function() { | ||||
var objects = this._getObjects(); | var objects = this._getObjects(); | ||||
var nodes = []; | var nodes = []; | ||||
for (var ii = 0; ii < objects.length; ii++) { | for (var ii = 0; ii < objects.length; ii++) { | ||||
▲ Show 20 Lines • Show All 61 Lines • ▼ Show 20 Lines | _getCardHeaderKey: function(card, order) { | ||||
return null; | 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 = this._getCardsSortedByKey(order); | ||||
if (order == 'natural') { | |||||
list = this._getCardsSortedNaturally(); | |||||
} else { | |||||
list = this._getCardsSortedByKey(order); | |||||
} | |||||
var ii; | var ii; | ||||
var objects = []; | var objects = []; | ||||
var has_headers = this._hasColumnHeaders(); | var has_headers = this._hasColumnHeaders(); | ||||
var header_keys = []; | var header_keys = []; | ||||
var seen_headers = {}; | var seen_headers = {}; | ||||
if (has_headers) { | if (has_headers) { | ||||
▲ Show 20 Lines • Show All 59 Lines • ▼ Show 20 Lines | compareHandler: function(src_list, src_node, dst_list, dst_node) { | ||||
return board.compareVectors(u_vec, v_vec); | return board.compareVectors(u_vec, v_vec); | ||||
}, | }, | ||||
_getNodeOrderVector: function(node, order) { | _getNodeOrderVector: function(node, order) { | ||||
var board = this.getBoard(); | var board = this.getBoard(); | ||||
var data = JX.Stratcom.getData(node); | var data = JX.Stratcom.getData(node); | ||||
if (data.objectPHID) { | if (data.objectPHID) { | ||||
return board.getOrderVector(data.objectPHID, order); | return this._getOrderVector(data.objectPHID, order); | ||||
} | } | ||||
return board.getHeaderTemplate(data.headerKey).getVector(); | return board.getHeaderTemplate(data.headerKey).getVector(); | ||||
}, | }, | ||||
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() { | |||||
var list = []; | |||||
for (var ii = 0; ii < this._naturalOrder.length; ii++) { | |||||
var phid = this._naturalOrder[ii]; | |||||
list.push(this.getCard(phid)); | |||||
} | |||||
return list; | |||||
}, | |||||
_getCardsSortedByKey: function(order) { | _getCardsSortedByKey: function(order) { | ||||
var cards = this.getCards(); | var cards = this.getCards(); | ||||
var list = []; | var list = []; | ||||
for (var k in cards) { | for (var k in cards) { | ||||
list.push(cards[k]); | list.push(cards[k]); | ||||
} | } | ||||
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 board = this.getBoard(); | var board = this.getBoard(); | ||||
var u_vec = board.getOrderVector(u.getPHID(), order); | var u_vec = this._getOrderVector(u.getPHID(), order); | ||||
var v_vec = board.getOrderVector(v.getPHID(), order); | var v_vec = this._getOrderVector(v.getPHID(), order); | ||||
return board.compareVectors(u_vec, v_vec); | return board.compareVectors(u_vec, v_vec); | ||||
}, | }, | ||||
_getOrderVector: function(phid, order) { | |||||
if (!this._orderVectors) { | |||||
this._orderVectors = {}; | |||||
} | |||||
if (!this._orderVectors[order]) { | |||||
var board = this.getBoard(); | |||||
var cards = this.getCards(); | |||||
var vectors = {}; | |||||
for (var k in cards) { | |||||
var card_phid = cards[k].getPHID(); | |||||
var vector = board.getOrderVector(card_phid, order); | |||||
vectors[card_phid] = [].concat(vector); | |||||
// Push a "card" type, so cards always sort after headers; headers | |||||
// have a "0" in this position. | |||||
vectors[card_phid].push(1); | |||||
} | |||||
for (var ii = 0; ii < this._naturalOrder.length; ii++) { | |||||
var natural_phid = this._naturalOrder[ii]; | |||||
if (vectors[natural_phid]) { | |||||
vectors[natural_phid].push(ii); | |||||
} | |||||
} | |||||
this._orderVectors[order] = vectors; | |||||
} | |||||
if (!this._orderVectors[order][phid]) { | |||||
// In this case, we're comparing a card being dragged in from another | |||||
// column to the cards already in this column. We're just going to | |||||
// build a temporary vector for it. | |||||
var incoming_vector = this.getBoard().getOrderVector(phid, order); | |||||
incoming_vector = [].concat(incoming_vector); | |||||
// Add a "card" type to sort this after headers. | |||||
incoming_vector.push(1); | |||||
// Add a "0" for the natural ordering to put this on top. A new card | |||||
// has no natural ordering on a column it isn't part of yet. | |||||
incoming_vector.push(0); | |||||
return incoming_vector; | |||||
} | |||||
return this._orderVectors[order][phid]; | |||||
}, | |||||
_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; | ||||
var decimal_places = 0; | var decimal_places = 0; | ||||
for (var phid in cards) { | for (var phid in cards) { | ||||
▲ Show 20 Lines • Show All 76 Lines • Show Last 20 Lines |