Changeset View
Changeset View
Standalone View
Standalone View
webroot/rsrc/js/application/projects/behavior-project-boards.js
| /** | /** | ||||
| * @provides javelin-behavior-project-boards | * @provides javelin-behavior-project-boards | ||||
| * @requires javelin-behavior | * @requires javelin-behavior | ||||
| * javelin-dom | * javelin-dom | ||||
| * javelin-util | * javelin-util | ||||
| * javelin-vector | * javelin-vector | ||||
| * javelin-stratcom | * javelin-stratcom | ||||
| * javelin-workflow | * javelin-workflow | ||||
| * phabricator-draggable-list | * javelin-workboard-controller | ||||
| * phabricator-drag-and-drop-file-upload | |||||
| * javelin-workboard | |||||
| */ | */ | ||||
| JX.behavior('project-boards', function(config, statics) { | JX.behavior('project-boards', function(config, statics) { | ||||
| function onupdate(col) { | function onupdate(col) { | ||||
| var data = JX.Stratcom.getData(col); | var data = JX.Stratcom.getData(col); | ||||
| var cards = finditems(col); | var cards = finditems(col); | ||||
| Show All 36 Lines | var color_map = { | ||||
| 'phui-tag-shade-blue': (sum > 0 && !over_limit), | 'phui-tag-shade-blue': (sum > 0 && !over_limit), | ||||
| 'phui-tag-shade-red': (over_limit) | 'phui-tag-shade-red': (over_limit) | ||||
| }; | }; | ||||
| for (var c in color_map) { | for (var c in color_map) { | ||||
| JX.DOM.alterClass(data.countTagNode, c, !!color_map[c]); | JX.DOM.alterClass(data.countTagNode, c, !!color_map[c]); | ||||
| } | } | ||||
| } | } | ||||
| function colsort(u, v) { | |||||
| var ud = JX.Stratcom.getData(u).sort || []; | |||||
| var vd = JX.Stratcom.getData(v).sort || []; | |||||
| for (var ii = 0; ii < ud.length; ii++) { | |||||
| if (parseInt(ud[ii]) < parseInt(vd[ii])) { | |||||
| return 1; | |||||
| } | |||||
| if (parseInt(ud[ii]) > parseInt(vd[ii])) { | |||||
| return -1; | |||||
| } | |||||
| } | |||||
| return 0; | |||||
| } | |||||
| function onedit(column, r) { | |||||
| var new_card = JX.$H(r.tasks).getNode(); | |||||
| var new_data = JX.Stratcom.getData(new_card); | |||||
| var items = finditems(column); | |||||
| var edited = false; | |||||
| var remove_index = null; | |||||
| for (var ii = 0; ii < items.length; ii++) { | |||||
| var item = items[ii]; | |||||
| var data = JX.Stratcom.getData(item); | |||||
| var phid = data.objectPHID; | |||||
| if (phid == new_data.objectPHID) { | |||||
| if (r.data.removeFromBoard) { | |||||
| remove_index = ii; | |||||
| } | |||||
| items[ii] = new_card; | |||||
| data = new_data; | |||||
| edited = true; | |||||
| } | |||||
| data.sort = r.data.sortMap[data.objectPHID] || data.sort; | |||||
| } | |||||
| // this is an add then...! | |||||
| if (!edited) { | |||||
| items[items.length + 1] = new_card; | |||||
| new_data.sort = r.data.sortMap[new_data.objectPHID] || new_data.sort; | |||||
| } | |||||
| if (remove_index !== null) { | |||||
| items.splice(remove_index, 1); | |||||
| } | |||||
| items.sort(colsort); | |||||
| JX.DOM.setContent(column, items); | |||||
| onupdate(column); | |||||
| }; | |||||
| function update_statics(update_config) { | function update_statics(update_config) { | ||||
| statics.boardID = update_config.boardID; | statics.boardID = update_config.boardID; | ||||
| statics.projectPHID = update_config.projectPHID; | statics.projectPHID = update_config.projectPHID; | ||||
| statics.order = update_config.order; | statics.order = update_config.order; | ||||
| statics.moveURI = update_config.moveURI; | statics.moveURI = update_config.moveURI; | ||||
| statics.createURI = update_config.createURI; | statics.createURI = update_config.createURI; | ||||
| } | } | ||||
| function setup() { | function setup() { | ||||
| JX.Stratcom.listen( | |||||
| 'click', | |||||
| ['edit-project-card'], | |||||
| function(e) { | |||||
| e.kill(); | |||||
| var column = e.getNode('project-column'); | |||||
| var request_data = { | |||||
| responseType: 'card', | |||||
| columnPHID: JX.Stratcom.getData(column).columnPHID, | |||||
| order: statics.order | |||||
| }; | |||||
| new JX.Workflow(e.getNode('tag:a').href, request_data) | |||||
| .setHandler(JX.bind(null, onedit, column)) | |||||
| .start(); | |||||
| }); | |||||
| JX.Stratcom.listen( | |||||
| 'click', | |||||
| ['column-add-task'], | |||||
| function (e) { | |||||
| // We want the 'boards-dropdown-menu' behavior to see this event and | |||||
| // close the dropdown, but don't want to follow the link. | |||||
| e.prevent(); | |||||
| var column_data = e.getNodeData('column-add-task'); | |||||
| var column_phid = column_data.columnPHID; | |||||
| var request_data = { | |||||
| responseType: 'card', | |||||
| columnPHID: column_phid, | |||||
| projects: column_data.projectPHID, | |||||
| order: statics.order | |||||
| }; | |||||
| var cols = getcolumns(); | |||||
| var ii; | |||||
| var column; | |||||
| for (ii = 0; ii < cols.length; ii++) { | |||||
| if (JX.Stratcom.getData(cols[ii]).columnPHID == column_phid) { | |||||
| column = cols[ii]; | |||||
| break; | |||||
| } | |||||
| } | |||||
| new JX.Workflow(statics.createURI, request_data) | |||||
| .setHandler(JX.bind(null, onedit, column)) | |||||
| .start(); | |||||
| }); | |||||
| JX.Stratcom.listen('click', 'boards-dropdown-menu', function(e) { | JX.Stratcom.listen('click', 'boards-dropdown-menu', function(e) { | ||||
| var data = e.getNodeData('boards-dropdown-menu'); | var data = e.getNodeData('boards-dropdown-menu'); | ||||
| if (data.menu) { | if (data.menu) { | ||||
| return; | return; | ||||
| } | } | ||||
| e.kill(); | e.kill(); | ||||
| Show All 38 Lines | if (!statics.setup) { | ||||
| update_statics(config); | update_statics(config); | ||||
| var current_page_id = JX.Quicksand.getCurrentPageID(); | var current_page_id = JX.Quicksand.getCurrentPageID(); | ||||
| statics.boardConfigCache = {}; | statics.boardConfigCache = {}; | ||||
| statics.boardConfigCache[current_page_id] = config; | statics.boardConfigCache[current_page_id] = config; | ||||
| statics.setup = setup(); | statics.setup = setup(); | ||||
| } | } | ||||
| if (!statics.workboard) { | if (!statics.workboard) { | ||||
| statics.workboard = new JX.Workboard(config) | statics.workboard = new JX.WorkboardController() | ||||
| .setUploadURI(config.uploadURI) | .setUploadURI(config.uploadURI) | ||||
| .setCoverURI(config.coverURI) | .setCoverURI(config.coverURI) | ||||
| .setMoveURI(config.moveURI) | .setMoveURI(config.moveURI) | ||||
| .setCreateURI(config.createURI) | |||||
| .setChunkThreshold(config.chunkThreshold) | .setChunkThreshold(config.chunkThreshold) | ||||
| .start(); | .start(); | ||||
| } | } | ||||
| statics.workboard.addBoard(config.projectPHID, JX.$(config.boardID)); | var board_phid = config.projectPHID; | ||||
| var board_node = JX.$(config.boardID); | |||||
| var board = statics.workboard.newBoard(board_phid, board_node) | |||||
| .setOrder(config.order); | |||||
| var templates = config.templateMap; | |||||
| for (var k in templates) { | |||||
| board.setCardTemplate(k, templates[k]); | |||||
| } | |||||
| var column_maps = config.columnMaps; | |||||
| for (var column_phid in column_maps) { | |||||
| var column = board.getColumn(column_phid); | |||||
| var column_map = column_maps[column_phid]; | |||||
| for (var ii = 0; ii < column_map.length; ii++) { | |||||
| column.newCard(column_map[ii]); | |||||
| } | |||||
| } | |||||
| var order_maps = config.orderMaps; | |||||
| for (var object_phid in order_maps) { | |||||
| board.setOrderMap(object_phid, order_maps[object_phid]); | |||||
| } | |||||
| board.start(); | |||||
| }); | }); | ||||