[ Index ] |
PHP Cross Reference of Phabricator |
[Summary view] [Print] [Text view]
1 /** 2 * @provides javelin-behavior-maniphest-batch-editor 3 * @requires javelin-behavior 4 * javelin-dom 5 * javelin-util 6 * phabricator-prefab 7 * multirow-row-manager 8 * javelin-json 9 */ 10 11 JX.behavior('maniphest-batch-editor', function(config) { 12 13 var root = JX.$(config.root); 14 var editor_table = JX.DOM.find(root, 'table', 'maniphest-batch-actions'); 15 var manager = new JX.MultirowRowManager(editor_table); 16 var action_rows = []; 17 18 addRow({}); 19 20 function renderRow() { 21 22 var action_select = JX.Prefab.renderSelect( 23 { 24 'add_project': 'Add Projects', 25 'remove_project' : 'Remove Projects', 26 'priority': 'Change Priority', 27 'status': 'Change Status', 28 'add_comment': 'Comment', 29 'assign': 'Assign', 30 'add_ccs' : 'Add CCs', 31 'remove_ccs' : 'Remove CCs' 32 }); 33 34 var proj_tokenizer = build_tokenizer(config.sources.project); 35 var owner_tokenizer = build_tokenizer(config.sources.owner); 36 var cc_tokenizer = build_tokenizer(config.sources.cc); 37 38 var priority_select = JX.Prefab.renderSelect(config.priorityMap); 39 var status_select = JX.Prefab.renderSelect(config.statusMap); 40 var comment_input = JX.$N('input', {style: {width: '100%'}}); 41 42 var cell = JX.$N('td', {className: 'batch-editor-input'}); 43 var vfunc = null; 44 45 function update() { 46 switch (action_select.value) { 47 case 'add_project': 48 case 'remove_project': 49 JX.DOM.setContent(cell, proj_tokenizer.template); 50 vfunc = function() { 51 return JX.keys(proj_tokenizer.object.getTokens()); 52 }; 53 break; 54 case 'add_ccs': 55 case 'remove_ccs': 56 JX.DOM.setContent(cell, cc_tokenizer.template); 57 vfunc = function() { 58 return JX.keys(cc_tokenizer.object.getTokens()); 59 }; 60 break; 61 case 'assign': 62 JX.DOM.setContent(cell, owner_tokenizer.template); 63 vfunc = function() { 64 return JX.keys(owner_tokenizer.object.getTokens()); 65 }; 66 break; 67 case 'add_comment': 68 JX.DOM.setContent(cell, comment_input); 69 vfunc = function() { 70 return comment_input.value; 71 }; 72 break; 73 case 'priority': 74 JX.DOM.setContent(cell, priority_select); 75 vfunc = function() { return priority_select.value; }; 76 break; 77 case 'status': 78 JX.DOM.setContent(cell, status_select); 79 vfunc = function() { return status_select.value; }; 80 break; 81 } 82 } 83 84 JX.DOM.listen(action_select, 'change', null, update); 85 update(); 86 87 return { 88 nodes : [JX.$N('td', {}, action_select), cell], 89 dataCallback : function() { 90 return { 91 action: action_select.value, 92 value: vfunc() 93 }; 94 } 95 }; 96 } 97 98 function onaddaction(e) { 99 e.kill(); 100 addRow({}); 101 } 102 103 function addRow(info) { 104 var data = renderRow(info); 105 var row = manager.addRow(data.nodes); 106 var id = manager.getRowID(row); 107 108 action_rows[id] = data.dataCallback; 109 } 110 111 function onsubmit() { 112 var input = JX.$(config.input); 113 114 var actions = []; 115 for (var k in action_rows) { 116 actions.push(action_rows[k]()); 117 } 118 119 input.value = JX.JSON.stringify(actions); 120 } 121 122 JX.DOM.listen( 123 root, 124 'click', 125 'add-action', 126 onaddaction); 127 128 JX.DOM.listen( 129 root, 130 'submit', 131 null, 132 onsubmit); 133 134 manager.listen( 135 'row-removed', 136 function(row_id) { 137 delete action_rows[row_id]; 138 }); 139 140 function build_tokenizer(tconfig) { 141 var template = JX.$N('div', JX.$H(config.tokenizerTemplate)).firstChild; 142 template.id = ''; 143 144 var build_config = JX.copy({}, tconfig); 145 build_config.root = template; 146 147 var built = JX.Prefab.buildTokenizer(build_config); 148 built.tokenizer.start(); 149 150 return { 151 object: built.tokenizer, 152 template: template 153 }; 154 } 155 156 });
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Sun Nov 30 09:20:46 2014 | Cross-referenced by PHPXref 0.7.1 |