178 lines
3.4 KiB
JavaScript
178 lines
3.4 KiB
JavaScript
|
|
/**
|
||
|
|
* @provides javelin-workboard-column
|
||
|
|
* @requires javelin-install
|
||
|
|
* javelin-workboard-card
|
||
|
|
* @javelin
|
||
|
|
*/
|
||
|
|
|
||
|
|
JX.install('WorkboardColumn', {
|
||
|
|
|
||
|
|
construct: function(board, phid, root) {
|
||
|
|
this._board = board;
|
||
|
|
this._phid = phid;
|
||
|
|
this._root = root;
|
||
|
|
|
||
|
|
this._cards = {};
|
||
|
|
this._naturalOrder = [];
|
||
|
|
},
|
||
|
|
|
||
|
|
members: {
|
||
|
|
_phid: null,
|
||
|
|
_root: null,
|
||
|
|
_board: null,
|
||
|
|
_cards: null,
|
||
|
|
_naturalOrder: null,
|
||
|
|
|
||
|
|
getPHID: function() {
|
||
|
|
return this._phid;
|
||
|
|
},
|
||
|
|
|
||
|
|
getRoot: function() {
|
||
|
|
return this._root;
|
||
|
|
},
|
||
|
|
|
||
|
|
getCards: function() {
|
||
|
|
return this._cards;
|
||
|
|
},
|
||
|
|
|
||
|
|
getCard: function(phid) {
|
||
|
|
return this._cards[phid];
|
||
|
|
},
|
||
|
|
|
||
|
|
getBoard: function() {
|
||
|
|
return this._board;
|
||
|
|
},
|
||
|
|
|
||
|
|
setNaturalOrder: function(order) {
|
||
|
|
this._naturalOrder = order;
|
||
|
|
return this;
|
||
|
|
},
|
||
|
|
|
||
|
|
newCard: function(phid) {
|
||
|
|
var card = new JX.WorkboardCard(this, phid);
|
||
|
|
|
||
|
|
this._cards[phid] = card;
|
||
|
|
this._naturalOrder.push(phid);
|
||
|
|
|
||
|
|
return card;
|
||
|
|
},
|
||
|
|
|
||
|
|
removeCard: function(phid) {
|
||
|
|
var card = this._cards[phid];
|
||
|
|
delete this._cards[phid];
|
||
|
|
|
||
|
|
for (var ii = 0; ii < this._naturalOrder.length; ii++) {
|
||
|
|
if (this._naturalOrder[ii] == phid) {
|
||
|
|
this._naturalOrder.splice(ii, 1);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
return card;
|
||
|
|
},
|
||
|
|
|
||
|
|
addCard: function(card, after) {
|
||
|
|
var phid = card.getPHID();
|
||
|
|
|
||
|
|
card.setColumn(this);
|
||
|
|
this._cards[phid] = card;
|
||
|
|
|
||
|
|
var index = 0;
|
||
|
|
|
||
|
|
if (after) {
|
||
|
|
for (var ii = 0; ii < this._naturalOrder.length; ii++) {
|
||
|
|
if (this._naturalOrder[ii] == after) {
|
||
|
|
index = ii + 1;
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
if (index > this._naturalOrder.length) {
|
||
|
|
this._naturalOrder.push(phid);
|
||
|
|
} else {
|
||
|
|
this._naturalOrder.splice(index, 0, phid);
|
||
|
|
}
|
||
|
|
|
||
|
|
return this;
|
||
|
|
},
|
||
|
|
|
||
|
|
getCardNodes: function() {
|
||
|
|
var cards = this.getCards();
|
||
|
|
|
||
|
|
var nodes = [];
|
||
|
|
for (var k in cards) {
|
||
|
|
nodes.push(cards[k].getNode());
|
||
|
|
}
|
||
|
|
|
||
|
|
return nodes;
|
||
|
|
},
|
||
|
|
|
||
|
|
getCardPHIDs: function() {
|
||
|
|
return JX.keys(this.getCards());
|
||
|
|
},
|
||
|
|
|
||
|
|
redraw: function() {
|
||
|
|
var order = this.getBoard().getOrder();
|
||
|
|
|
||
|
|
var list;
|
||
|
|
if (order == 'natural') {
|
||
|
|
list = this._getCardsSortedNaturally();
|
||
|
|
} else {
|
||
|
|
list = this._getCardsSortedByKey(order);
|
||
|
|
}
|
||
|
|
|
||
|
|
var content = [];
|
||
|
|
for (var ii = 0; ii < list.length; ii++) {
|
||
|
|
var node = list[ii].getNode();
|
||
|
|
content.push(node);
|
||
|
|
}
|
||
|
|
|
||
|
|
JX.DOM.setContent(this.getRoot(), content);
|
||
|
|
},
|
||
|
|
|
||
|
|
_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) {
|
||
|
|
var cards = this.getCards();
|
||
|
|
|
||
|
|
var list = [];
|
||
|
|
for (var k in cards) {
|
||
|
|
list.push(cards[k]);
|
||
|
|
}
|
||
|
|
|
||
|
|
list.sort(JX.bind(this, this._sortCards, order));
|
||
|
|
|
||
|
|
return list;
|
||
|
|
},
|
||
|
|
|
||
|
|
_sortCards: function(order, u, v) {
|
||
|
|
var ud = this.getBoard().getOrderVector(u.getPHID(), order);
|
||
|
|
var vd = this.getBoard().getOrderVector(v.getPHID(), order);
|
||
|
|
|
||
|
|
for (var ii = 0; ii < ud.length; ii++) {
|
||
|
|
if (ud[ii] > vd[ii]) {
|
||
|
|
return 1;
|
||
|
|
}
|
||
|
|
|
||
|
|
if (ud[ii] < vd[ii]) {
|
||
|
|
return -1;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
return 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
});
|