Changeset View
Changeset View
Standalone View
Standalone View
webroot/rsrc/js/application/projects/WorkboardBoard.js
| Show All 35 Lines | members: { | ||||
| _controller: null, | _controller: null, | ||||
| _phid: null, | _phid: null, | ||||
| _root: null, | _root: null, | ||||
| _columns: null, | _columns: null, | ||||
| _headers: null, | _headers: null, | ||||
| _cards: null, | _cards: null, | ||||
| _dropPreviewNode: null, | _dropPreviewNode: null, | ||||
| _dropPreviewListNode: null, | _dropPreviewListNode: null, | ||||
| _previewPHID: null, | |||||
| _hidePreivew: false, | |||||
| getRoot: function() { | getRoot: function() { | ||||
| return this._root; | return this._root; | ||||
| }, | }, | ||||
| getColumns: function() { | getColumns: function() { | ||||
| return this._columns; | return this._columns; | ||||
| }, | }, | ||||
| ▲ Show 20 Lines • Show All 84 Lines • ▼ Show 20 Lines | _buildColumns: function() { | ||||
| this._columns = {}; | this._columns = {}; | ||||
| for (var ii = 0; ii < nodes.length; ii++) { | for (var ii = 0; ii < nodes.length; ii++) { | ||||
| var node = nodes[ii]; | var node = nodes[ii]; | ||||
| var data = JX.Stratcom.getData(node); | var data = JX.Stratcom.getData(node); | ||||
| var phid = data.columnPHID; | var phid = data.columnPHID; | ||||
| this._columns[phid] = new JX.WorkboardColumn(this, phid, node); | this._columns[phid] = new JX.WorkboardColumn(this, phid, node); | ||||
| } | } | ||||
| var on_over = JX.bind(this, this._showTriggerPreview); | |||||
| var on_out = JX.bind(this, this._hideTriggerPreview); | |||||
| JX.Stratcom.listen('mouseover', 'trigger-preview', on_over); | |||||
| JX.Stratcom.listen('mouseout', 'trigger-preview', on_out); | |||||
| }, | |||||
| _showTriggerPreview: function(e) { | |||||
| if (this._disablePreview) { | |||||
| return; | |||||
| } | |||||
| var target = e.getTarget(); | |||||
| var node = e.getNode('trigger-preview'); | |||||
| if (target !== node) { | |||||
| return; | |||||
| } | |||||
| var phid = JX.Stratcom.getData(node).columnPHID; | |||||
| var column = this._columns[phid]; | |||||
| // Bail out if we don't know anything about this column. | |||||
| if (!column) { | |||||
| return; | |||||
| } | |||||
| if (phid === this._previewPHID) { | |||||
| return; | |||||
| } | |||||
| this._previewPHID = phid; | |||||
| var effects = column.getDropEffects(); | |||||
| var triggers = []; | |||||
| for (var ii = 0; ii < effects.length; ii++) { | |||||
| if (effects[ii].getIsTriggerEffect()) { | |||||
| triggers.push(effects[ii]); | |||||
| } | |||||
| } | |||||
| if (triggers.length) { | |||||
| var header = column.getTriggerPreviewEffect(); | |||||
| triggers = [header].concat(triggers); | |||||
| } | |||||
| this._showEffects(triggers); | |||||
| }, | |||||
| _hideTriggerPreview: function(e) { | |||||
| if (this._disablePreview) { | |||||
| return; | |||||
| } | |||||
| var target = e.getTarget(); | |||||
| if (target !== e.getNode('trigger-preview')) { | |||||
| return; | |||||
| } | |||||
| this._removeTriggerPreview(); | |||||
| }, | |||||
| _removeTriggerPreview: function() { | |||||
| this._showEffects([]); | |||||
| this._previewPHID = null; | |||||
| }, | |||||
| _beginDrag: function() { | |||||
| this._disablePreview = true; | |||||
| this._showEffects([]); | |||||
| }, | |||||
| _endDrag: function() { | |||||
| this._disablePreview = false; | |||||
| }, | }, | ||||
| _setupDragHandlers: function() { | _setupDragHandlers: function() { | ||||
| var columns = this.getColumns(); | var columns = this.getColumns(); | ||||
| var order_template = this.getOrderTemplate(this.getOrder()); | var order_template = this.getOrderTemplate(this.getOrder()); | ||||
| var has_headers = order_template.getHasHeaders(); | var has_headers = order_template.getHasHeaders(); | ||||
| var can_reorder = order_template.getCanReorder(); | var can_reorder = order_template.getCanReorder(); | ||||
| Show All 29 Lines | _setupDragHandlers: function() { | ||||
| list.setCompareOnMove(true); | list.setCompareOnMove(true); | ||||
| list.setCompareOnReorder(true); | list.setCompareOnReorder(true); | ||||
| } | } | ||||
| list.setTargetChangeHandler(JX.bind(this, this._didChangeDropTarget)); | list.setTargetChangeHandler(JX.bind(this, this._didChangeDropTarget)); | ||||
| list.listen('didDrop', JX.bind(this, this._onmovecard, list)); | list.listen('didDrop', JX.bind(this, this._onmovecard, list)); | ||||
| list.listen('didBeginDrag', JX.bind(this, this._beginDrag)); | |||||
| list.listen('didEndDrag', JX.bind(this, this._endDrag)); | |||||
| lists.push(list); | lists.push(list); | ||||
| } | } | ||||
| for (var ii = 0; ii < lists.length; ii++) { | for (var ii = 0; ii < lists.length; ii++) { | ||||
| lists[ii].setGroup(lists); | lists[ii].setGroup(lists); | ||||
| } | } | ||||
| }, | }, | ||||
| _didChangeDropTarget: function(src_list, src_node, dst_list, dst_node) { | _didChangeDropTarget: function(src_list, src_node, dst_list, dst_node) { | ||||
| var node = this._getDropPreviewNode(); | |||||
| if (!dst_list) { | if (!dst_list) { | ||||
| // The card is being dragged into a dead area, like the left menu. | // The card is being dragged into a dead area, like the left menu. | ||||
| JX.DOM.remove(node); | this._showEffects([]); | ||||
| return; | return; | ||||
| } | } | ||||
| if (dst_node === false) { | if (dst_node === false) { | ||||
| // The card is being dragged over itself, so dropping it won't | // The card is being dragged over itself, so dropping it won't | ||||
| // affect anything. | // affect anything. | ||||
| JX.DOM.remove(node); | this._showEffects([]); | ||||
| return; | return; | ||||
| } | } | ||||
| var src_phid = JX.Stratcom.getData(src_list.getRootNode()).columnPHID; | var src_phid = JX.Stratcom.getData(src_list.getRootNode()).columnPHID; | ||||
| var dst_phid = JX.Stratcom.getData(dst_list.getRootNode()).columnPHID; | var dst_phid = JX.Stratcom.getData(dst_list.getRootNode()).columnPHID; | ||||
| var src_column = this.getColumn(src_phid); | var src_column = this.getColumn(src_phid); | ||||
| var dst_column = this.getColumn(dst_phid); | var dst_column = this.getColumn(dst_phid); | ||||
| var effects = []; | var effects = []; | ||||
| if (src_column !== dst_column) { | if (src_column !== dst_column) { | ||||
| effects = effects.concat(dst_column.getDropEffects()); | effects = effects.concat(dst_column.getDropEffects()); | ||||
| } | } | ||||
| var context = this._getDropContext(dst_node); | var context = this._getDropContext(dst_node); | ||||
| if (context.headerKey) { | if (context.headerKey) { | ||||
| var header = this.getHeaderTemplate(context.headerKey); | var header = this.getHeaderTemplate(context.headerKey); | ||||
| effects = effects.concat(header.getDropEffects()); | effects = effects.concat(header.getDropEffects()); | ||||
| } | } | ||||
| var card_phid = JX.Stratcom.getData(src_node).objectPHID; | var card_phid = JX.Stratcom.getData(src_node).objectPHID; | ||||
| var card = src_column.getCard(card_phid); | var card = src_column.getCard(card_phid); | ||||
| var visible = []; | var visible = []; | ||||
| for (var ii = 0; ii < effects.length; ii++) { | for (var ii = 0; ii < effects.length; ii++) { | ||||
| if (effects[ii].isEffectVisibleForCard(card)) { | if (effects[ii].isEffectVisibleForCard(card)) { | ||||
| visible.push(effects[ii]); | visible.push(effects[ii]); | ||||
| } | } | ||||
| } | } | ||||
| effects = visible; | effects = visible; | ||||
| this._showEffects(effects); | |||||
| }, | |||||
| _showEffects: function(effects) { | |||||
| var node = this._getDropPreviewNode(); | |||||
| if (!effects.length) { | if (!effects.length) { | ||||
| JX.DOM.remove(node); | JX.DOM.remove(node); | ||||
| return; | return; | ||||
| } | } | ||||
| var items = []; | var items = []; | ||||
| for (var ii = 0; ii < effects.length; ii++) { | for (var ii = 0; ii < effects.length; ii++) { | ||||
| var effect = effects[ii]; | var effect = effects[ii]; | ||||
| items.push(effect.newNode()); | items.push(effect.newNode()); | ||||
| } | } | ||||
| JX.DOM.setContent(this._getDropPreviewListNode(), items); | JX.DOM.setContent(this._getDropPreviewListNode(), items); | ||||
| document.body.appendChild(node); | document.body.appendChild(node); | ||||
| }, | }, | ||||
| _getDropPreviewNode: function() { | _getDropPreviewNode: function() { | ||||
| if (!this._dropPreviewNode) { | if (!this._dropPreviewNode) { | ||||
| var attributes = { | var attributes = { | ||||
| className: 'workboard-drop-preview' | className: 'workboard-drop-preview' | ||||
| }; | }; | ||||
| ▲ Show 20 Lines • Show All 262 Lines • Show Last 20 Lines | |||||