Path: blob/master/webroot/rsrc/js/application/projects/behavior-project-boards.js
12242 views
/**1* @provides javelin-behavior-project-boards2* @requires javelin-behavior3* javelin-dom4* javelin-util5* javelin-vector6* javelin-stratcom7* javelin-workflow8* javelin-workboard-controller9* javelin-workboard-drop-effect10*/1112JX.behavior('project-boards', function(config, statics) {1314function update_statics(update_config) {15statics.boardID = update_config.boardID;16statics.projectPHID = update_config.projectPHID;17statics.order = update_config.order;18statics.moveURI = update_config.moveURI;19}2021function setup() {22JX.Stratcom.listen('click', 'boards-dropdown-menu', function(e) {23var data = e.getNodeData('boards-dropdown-menu');24if (data.menu) {25return;26}2728e.kill();2930var list = JX.$H(data.items).getFragment().firstChild;3132var button = e.getNode('boards-dropdown-menu');33data.menu = new JX.PHUIXDropdownMenu(button);34data.menu.setContent(list);35data.menu.open();36});3738JX.Stratcom.listen(39'quicksand-redraw',40null,41function (e) {42var data = e.getData();43if (!data.newResponse.boardConfig) {44return;45}46var new_config;47if (data.fromServer) {48new_config = data.newResponse.boardConfig;49statics.boardConfigCache[data.newResponseID] = new_config;50} else {51new_config = statics.boardConfigCache[data.newResponseID];52statics.boardID = new_config.boardID;53}54update_statics(new_config);55});5657return true;58}5960if (!statics.setup) {61update_statics(config);62var current_page_id = JX.Quicksand.getCurrentPageID();63statics.boardConfigCache = {};64statics.boardConfigCache[current_page_id] = config;65statics.setup = setup();66}6768if (!statics.workboard) {69statics.workboard = new JX.WorkboardController()70.setUploadURI(config.uploadURI)71.setCoverURI(config.coverURI)72.setMoveURI(config.moveURI)73.setReloadURI(config.reloadURI)74.setChunkThreshold(config.chunkThreshold)75.start();76}7778var board_phid = config.projectPHID;79var board_node = JX.$(config.boardID);8081var board = statics.workboard.newBoard(board_phid, board_node)82.setOrder(config.order)83.setPointsEnabled(config.pointsEnabled);8485var templates = config.templateMap;86for (var k in templates) {87board.getCardTemplate(k)88.setNodeHTMLTemplate(templates[k]);89}9091var ii;92var jj;93var effects;9495for (ii = 0; ii < config.columnTemplates.length; ii++) {96var spec = config.columnTemplates[ii];9798var column = board.getColumn(spec.columnPHID);99100effects = [];101for (jj = 0; jj < spec.effects.length; jj++) {102effects.push(103JX.WorkboardDropEffect.newFromDictionary(104spec.effects[jj]));105}106column.setDropEffects(effects);107108for (jj = 0; jj < spec.cardPHIDs.length; jj++) {109column.newCard(spec.cardPHIDs[jj]);110}111112if (spec.triggerPreviewEffect) {113column.setTriggerPreviewEffect(114JX.WorkboardDropEffect.newFromDictionary(115spec.triggerPreviewEffect));116}117}118119var order_maps = config.orderMaps;120for (var object_phid in order_maps) {121var order_card = board.getCardTemplate(object_phid);122for (var order_key in order_maps[object_phid]) {123order_card.setSortVector(order_key, order_maps[object_phid][order_key]);124}125}126127var property_maps = config.propertyMaps;128for (var property_phid in property_maps) {129board.getCardTemplate(property_phid)130.setObjectProperties(property_maps[property_phid]);131}132133var headers = config.headers;134for (ii = 0; ii < headers.length; ii++) {135var header = headers[ii];136137effects = [];138for (jj = 0; jj < header.effects.length; jj++) {139effects.push(140JX.WorkboardDropEffect.newFromDictionary(141header.effects[jj]));142}143144board.getHeaderTemplate(header.key)145.setOrder(header.order)146.setNodeHTMLTemplate(header.template)147.setVector(header.vector)148.setEditProperties(header.editProperties)149.setDropEffects(effects);150}151152var orders = config.orders;153for (ii = 0; ii < orders.length; ii++) {154var order = orders[ii];155156board.getOrderTemplate(order.orderKey)157.setHasHeaders(order.hasHeaders)158.setCanReorder(order.canReorder);159}160161var header_keys = config.headerKeys;162for (var header_phid in header_keys) {163board.getCardTemplate(header_phid)164.setHeaderKey(config.order, header_keys[header_phid]);165}166167board.start();168169// In Safari, we can only play sounds that we've already loaded, and we can170// only load them in response to an explicit user interaction like a click.171var sounds = config.preloadSounds;172var listener = JX.Stratcom.listen('mousedown', null, function() {173for (var ii = 0; ii < sounds.length; ii++) {174JX.Sound.load(sounds[ii]);175}176177// Remove this callback once it has run once.178listener.remove();179});180181});182183184