Path: blob/master/webroot/rsrc/js/application/projects/WorkboardController.js
12242 views
/**1* @provides javelin-workboard-controller2* @requires javelin-install3* javelin-dom4* javelin-util5* javelin-vector6* javelin-stratcom7* javelin-workflow8* phabricator-drag-and-drop-file-upload9* javelin-workboard-board10* @javelin11*/1213JX.install('WorkboardController', {1415construct: function() {16this._boards = {};17},1819properties: {20uploadURI: null,21coverURI: null,22moveURI: null,23reloadURI: null,24chunkThreshold: null25},2627members: {28_boards: null,2930_panOrigin: null,31_panNode: null,32_panX: null,3334start: function() {35this._setupCoverImageHandlers();36this._setupPanHandlers();37this._setupEditHandlers();3839return this;40},4142newBoard: function(phid, node) {43var board = new JX.WorkboardBoard(this, phid, node);44this._boards[phid] = board;45return board;46},4748_getBoard: function(board_phid) {49return this._boards[board_phid];50},5152_setupCoverImageHandlers: function() {53if (!JX.PhabricatorDragAndDropFileUpload.isSupported()) {54return;55}5657var drop = new JX.PhabricatorDragAndDropFileUpload('project-card')58.setURI(this.getUploadURI())59.setChunkThreshold(this.getChunkThreshold());6061drop.listen('didBeginDrag', function(node) {62JX.DOM.alterClass(node, 'phui-workcard-upload-target', true);63});6465drop.listen('didEndDrag', function(node) {66JX.DOM.alterClass(node, 'phui-workcard-upload-target', false);67});6869drop.listen('didUpload', JX.bind(this, this._oncoverupload));7071drop.start();72},7374_oncoverupload: function(file) {75var node = file.getTargetNode();7677var board = this._getBoardFromNode(node);7879var column_node = JX.DOM.findAbove(node, 'ul', 'project-column');80var column_phid = JX.Stratcom.getData(column_node).columnPHID;81var column = board.getColumn(column_phid);8283var data = {84boardPHID: board.getPHID(),85objectPHID: JX.Stratcom.getData(node).objectPHID,86filePHID: file.getPHID(),87visiblePHIDs: column.getCardPHIDs()88};8990new JX.Workflow(this.getCoverURI(), data)91.setHandler(JX.bind(board, board.updateCard))92.start();93},9495_getBoardFromNode: function(node) {96var board_node = JX.DOM.findAbove(node, 'div', 'jx-workboard');97var board_phid = JX.Stratcom.getData(board_node).boardPHID;98return this._getBoard(board_phid);99},100101_setupPanHandlers: function() {102var mousedown = JX.bind(this, this._onpanmousedown);103var mousemove = JX.bind(this, this._onpanmousemove);104var mouseup = JX.bind(this, this._onpanmouseup);105106JX.Stratcom.listen('mousedown', 'workboard-shadow', mousedown);107JX.Stratcom.listen('mousemove', null, mousemove);108JX.Stratcom.listen('mouseup', null, mouseup);109},110111_onpanmousedown: function(e) {112if (!JX.Device.isDesktop()) {113return;114}115116if (e.getNode('workpanel')) {117return;118}119120if (JX.Stratcom.pass()) {121return;122}123124e.kill();125126this._panOrigin = JX.$V(e);127this._panNode = e.getNode('workboard-shadow');128this._panX = this._panNode.scrollLeft;129},130131_onpanmousemove: function(e) {132if (!this._panOrigin) {133return;134}135136var cursor = JX.$V(e);137this._panNode.scrollLeft = this._panX + (this._panOrigin.x - cursor.x);138},139140_onpanmouseup: function() {141this._panOrigin = null;142},143144_setupEditHandlers: function() {145var onadd = JX.bind(this, this._onaddcard);146var onedit = JX.bind(this, this._oneditcard);147148JX.Stratcom.listen('click', 'column-add-task', onadd);149JX.Stratcom.listen('click', 'edit-project-card', onedit);150},151152_onaddcard: function(e) {153// We want the 'boards-dropdown-menu' behavior to see this event and154// close the dropdown, but don't want to follow the link.155e.prevent();156157var column_data = e.getNodeData('column-add-task');158var column_phid = column_data.columnPHID;159160var board_phid = column_data.boardPHID;161var board = this._getBoard(board_phid);162var column = board.getColumn(column_phid);163164var request_data = {165responseType: 'card',166columnPHID: column.getPHID(),167projects: column_data.projectPHID,168visiblePHIDs: column.getCardPHIDs(),169order: board.getOrder()170};171172new JX.Workflow(column_data.createURI, request_data)173.setHandler(JX.bind(board, board.updateCard))174.start();175},176177_oneditcard: function(e) {178e.kill();179180var column_node = e.getNode('project-column');181var column_phid = JX.Stratcom.getData(column_node).columnPHID;182183var board = this._getBoardFromNode(column_node);184var column = board.getColumn(column_phid);185186var request_data = {187responseType: 'card',188columnPHID: column.getPHID(),189visiblePHIDs: column.getCardPHIDs(),190order: board.getOrder()191};192193new JX.Workflow(e.getNode('tag:a').href, request_data)194.setHandler(JX.bind(board, board.updateCard))195.start();196}197198}199200});201202203