[ Index ] |
PHP Cross Reference of Phabricator |
[Summary view] [Print] [Text view]
1 /** 2 * @provides javelin-behavior-maniphest-batch-selector 3 * @requires javelin-behavior 4 * javelin-dom 5 * javelin-stratcom 6 * javelin-util 7 */ 8 9 JX.behavior('maniphest-batch-selector', function(config) { 10 11 var selected = {}; 12 13 // Test if a task node is selected. 14 15 var get_id = function(task) { 16 return JX.Stratcom.getData(task).taskID; 17 }; 18 19 var is_selected = function(task) { 20 return (get_id(task) in selected); 21 }; 22 23 // Change the selected state of a task. 24 25 var change = function(task, to) { 26 if (to === undefined) { 27 to = !is_selected(task); 28 } 29 30 if (to) { 31 selected[get_id(task)] = true; 32 } else { 33 delete selected[get_id(task)]; 34 } 35 36 JX.DOM.alterClass( 37 task, 38 'phui-object-item-selected', 39 is_selected(task)); 40 41 update(); 42 }; 43 44 var redraw = function (task) { 45 var selected = is_selected(task); 46 change(task, selected); 47 }; 48 JX.Stratcom.listen( 49 'subpriority-changed', 50 null, 51 function (e) { 52 e.kill(); 53 var data = e.getData(); 54 redraw(data.task); 55 }); 56 57 // Change all tasks to some state (used by "select all" / "clear selection" 58 // buttons). 59 60 var changeall = function(to) { 61 var inputs = JX.DOM.scry(document.body, 'li', 'maniphest-task'); 62 for (var ii = 0; ii < inputs.length; ii++) { 63 change(inputs[ii], to); 64 } 65 }; 66 67 // Clear any document text selection after toggling a task via shift click, 68 // since errant clicks tend to start selecting various ranges otherwise. 69 70 var clear_selection = function() { 71 if (window.getSelection) { 72 if (window.getSelection().empty) { 73 window.getSelection().empty(); 74 } else if (window.getSelection().removeAllRanges) { 75 window.getSelection().removeAllRanges(); 76 } 77 } else if (document.selection) { 78 document.selection.empty(); 79 } 80 }; 81 82 // Update the status text showing how many tasks are selected, and the button 83 // state. 84 85 var update = function() { 86 var count = JX.keys(selected).length; 87 var status; 88 if (count === 0) { 89 status = 'Shift-Click to Select Tasks'; 90 } else if (status == 1) { 91 status = '1 Selected Task'; 92 } else { 93 status = count + ' Selected Tasks'; 94 } 95 JX.DOM.setContent(JX.$(config.status), status); 96 97 var submit = JX.$(config.submit); 98 var disable = (count === 0); 99 submit.disabled = disable; 100 JX.DOM.alterClass(submit, 'disabled', disable); 101 }; 102 103 // When he user shift-clicks the task, update the rest of the application 104 // state. 105 106 JX.Stratcom.listen( 107 'click', 108 'maniphest-task', 109 function(e) { 110 var raw = e.getRawEvent(); 111 if (!raw.shiftKey) { 112 return; 113 } 114 115 if (raw.ctrlKey || raw.altKey || raw.metaKey || e.isRightButton()) { 116 return; 117 } 118 119 if (JX.Stratcom.pass(e)) { 120 return; 121 } 122 123 e.kill(); 124 change(e.getNode('maniphest-task')); 125 126 clear_selection(); 127 }); 128 129 130 // When the user clicks "Select All", select all tasks. 131 132 JX.DOM.listen( 133 JX.$(config.selectNone), 134 'click', 135 null, 136 function(e) { 137 changeall(false); 138 e.kill(); 139 }); 140 141 142 // When the user clicks "Clear Selection", clear the selection. 143 144 JX.DOM.listen( 145 JX.$(config.selectAll), 146 'click', 147 null, 148 function(e) { 149 changeall(true); 150 e.kill(); 151 }); 152 153 // When the user submits the form, dump selected state into it. 154 155 JX.DOM.listen( 156 JX.$(config.formID), 157 'submit', 158 null, 159 function() { 160 var inputs = []; 161 for (var k in selected) { 162 inputs.push( 163 JX.$N('input', {type: 'hidden', name: 'batch[]', value: k})); 164 } 165 JX.DOM.setContent(JX.$(config.idContainer), inputs); 166 }); 167 168 update(); 169 170 });
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 |