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 | |||||