Changeset View
Changeset View
Standalone View
Standalone View
webroot/rsrc/js/application/projects/Workboard.js
| Show All 11 Lines | |||||
| */ | */ | ||||
| JX.install('Workboard', { | JX.install('Workboard', { | ||||
| construct: function(config) { | construct: function(config) { | ||||
| this._config = config; | this._config = config; | ||||
| this._boardNodes = {}; | this._boardNodes = {}; | ||||
| this._columnMap = {}; | |||||
| }, | |||||
| this._setupCoverImageHandlers(); | properties: { | ||||
| this._setupPanHandlers(); | uploadURI: null, | ||||
| coverURI: null, | |||||
| moveURI: null, | |||||
| chunkThreshold: null | |||||
| }, | }, | ||||
| members: { | members: { | ||||
| _config: null, | _config: null, | ||||
| _boardNodes: null, | _boardNodes: null, | ||||
| _currentBoard: null, | _currentBoard: null, | ||||
| _panOrigin: null, | _panOrigin: null, | ||||
| _panNode: null, | _panNode: null, | ||||
| _panX: null, | _panX: null, | ||||
| _columnMap: null, | |||||
| start: function() { | |||||
| this._setupCoverImageHandlers(); | |||||
| this._setupPanHandlers(); | |||||
| return this; | |||||
| }, | |||||
| addBoard: function(board_phid, board_node) { | addBoard: function(board_phid, board_node) { | ||||
| this._currentBoard = board_phid; | this._currentBoard = board_phid; | ||||
| if (!this._boardNodes[board_phid]) { | |||||
| this._boardNodes[board_phid] = board_node; | this._boardNodes[board_phid] = board_node; | ||||
| this._setupDragHandlers(board_node); | this._setupDragHandlers(board_node); | ||||
| } | |||||
| }, | }, | ||||
| _getConfig: function() { | _getConfig: function() { | ||||
| return this._config; | return this._config; | ||||
| }, | }, | ||||
| _setupCoverImageHandlers: function() { | _setupCoverImageHandlers: function() { | ||||
| if (!JX.PhabricatorDragAndDropFileUpload.isSupported()) { | if (!JX.PhabricatorDragAndDropFileUpload.isSupported()) { | ||||
| return; | return; | ||||
| } | } | ||||
| var config = this._getConfig(); | |||||
| var drop = new JX.PhabricatorDragAndDropFileUpload('project-card') | var drop = new JX.PhabricatorDragAndDropFileUpload('project-card') | ||||
| .setURI(config.uploadURI) | .setURI(this.getUploadURI()) | ||||
| .setChunkThreshold(config.chunkThreshold); | .setChunkThreshold(this.getChunkThreshold()); | ||||
| drop.listen('didBeginDrag', function(node) { | drop.listen('didBeginDrag', function(node) { | ||||
| JX.DOM.alterClass(node, 'phui-workcard-upload-target', true); | JX.DOM.alterClass(node, 'phui-workcard-upload-target', true); | ||||
| }); | }); | ||||
| drop.listen('didEndDrag', function(node) { | drop.listen('didEndDrag', function(node) { | ||||
| JX.DOM.alterClass(node, 'phui-workcard-upload-target', false); | JX.DOM.alterClass(node, 'phui-workcard-upload-target', false); | ||||
| }); | }); | ||||
| drop.listen('didUpload', function(file) { | drop.listen('didUpload', JX.bind(this, this._oncoverupload)); | ||||
| var node = file.getTargetNode(); | |||||
| drop.start(); | |||||
| }, | |||||
| _oncoverupload: function(file) { | |||||
| var node = file.getTargetNode(); | |||||
| var board = JX.DOM.findAbove(node, 'div', 'jx-workboard'); | var board = JX.DOM.findAbove(node, 'div', 'jx-workboard'); | ||||
| var data = { | var data = { | ||||
| boardPHID: JX.Stratcom.getData(board).boardPHID, | boardPHID: JX.Stratcom.getData(board).boardPHID, | ||||
| objectPHID: JX.Stratcom.getData(node).objectPHID, | objectPHID: JX.Stratcom.getData(node).objectPHID, | ||||
| filePHID: file.getPHID() | filePHID: file.getPHID() | ||||
| }; | }; | ||||
| new JX.Workflow(config.coverURI, data) | new JX.Workflow(this.getCoverURI(), data) | ||||
| .setHandler(function(r) { | .setHandler(JX.bind(this, this._queueCardUpdate)) | ||||
| JX.DOM.replace(node, JX.$H(r.task)); | |||||
| }) | |||||
| .start(); | .start(); | ||||
| }); | |||||
| drop.start(); | |||||
| }, | }, | ||||
| _setupPanHandlers: function() { | _setupPanHandlers: function() { | ||||
| var mousedown = JX.bind(this, this._onpanmousedown); | var mousedown = JX.bind(this, this._onpanmousedown); | ||||
| var mousemove = JX.bind(this, this._onpanmousemove); | var mousemove = JX.bind(this, this._onpanmousemove); | ||||
| var mouseup = JX.bind(this, this._onpanmouseup); | var mouseup = JX.bind(this, this._onpanmouseup); | ||||
| JX.Stratcom.listen('mousedown', 'workboard-shadow', mousedown); | JX.Stratcom.listen('mousedown', 'workboard-shadow', mousedown); | ||||
| ▲ Show 20 Lines • Show All 94 Lines • ▼ Show 20 Lines | _onmovecard: function(list, item, after_node) { | ||||
| data.beforePHID = before_phid; | data.beforePHID = before_phid; | ||||
| } | } | ||||
| } | } | ||||
| // TODO: This should be managed per-board. | // TODO: This should be managed per-board. | ||||
| var config = this._getConfig(); | var config = this._getConfig(); | ||||
| data.order = config.order; | data.order = config.order; | ||||
| new JX.Workflow(config.moveURI, data) | new JX.Workflow(this.getMoveURI(), data) | ||||
| .setHandler(JX.bind(this, this._oncardupdate, item, list)) | .setHandler(JX.bind(this, this._oncardupdate, item, list)) | ||||
| .start(); | .start(); | ||||
| }, | }, | ||||
| _oncardupdate: function(item, list, response) { | _oncardupdate: function(item, list, response) { | ||||
| list.unlock(); | list.unlock(); | ||||
| JX.DOM.alterClass(item, 'drag-sending', false); | JX.DOM.alterClass(item, 'drag-sending', false); | ||||
| JX.DOM.replace(item, JX.$H(response.task)); | |||||
| this._queueCardUpdate(response); | |||||
| }, | |||||
| _queueCardUpdate: function(response) { | |||||
| var board_node = this._boardNodes[this._currentBoard]; | |||||
| var columns = this._findBoardColumns(board_node); | |||||
| var cards; | |||||
| var ii; | |||||
| var jj; | |||||
| var data; | |||||
| for (ii = 0; ii < columns.length; ii++) { | |||||
| cards = this._findCardsInColumn(columns[ii]); | |||||
| for (jj = 0; jj < cards.length; jj++) { | |||||
| data = JX.Stratcom.getData(cards[jj]); | |||||
| if (data.objectPHID == response.objectPHID) { | |||||
| this._replaceCard(cards[jj], JX.$H(response.cardHTML)); | |||||
| } | |||||
| } | |||||
| } | |||||
| }, | |||||
| _replaceCard: function(old_node, new_node) { | |||||
| JX.DOM.replace(old_node, new_node); | |||||
| } | } | ||||
| } | } | ||||
| }); | }); | ||||