[ Index ] |
PHP Cross Reference of Phabricator |
[Summary view] [Print] [Text view]
1 /** 2 * @provides javelin-behavior-policy-control 3 * @requires javelin-behavior 4 * javelin-dom 5 * javelin-util 6 * phuix-dropdown-menu 7 * phuix-action-list-view 8 * phuix-action-view 9 * javelin-workflow 10 * @javelin 11 */ 12 JX.behavior('policy-control', function(config) { 13 var control = JX.$(config.controlID); 14 var input = JX.$(config.inputID); 15 var value = config.value; 16 17 var menu = new JX.PHUIXDropdownMenu(control) 18 .setWidth(260) 19 .setAlign('left'); 20 21 menu.listen('open', function() { 22 var list = new JX.PHUIXActionListView(); 23 24 for (var ii = 0; ii < config.groups.length; ii++) { 25 var group = config.groups[ii]; 26 27 list.addItem( 28 new JX.PHUIXActionView() 29 .setName(config.labels[group]) 30 .setDisabled(true)); 31 32 for (var jj = 0; jj < config.order[group].length; jj++) { 33 var phid = config.order[group][jj]; 34 35 var onselect; 36 if (group == 'custom') { 37 onselect = JX.bind(null, function(phid) { 38 var uri = get_custom_uri(phid); 39 40 new JX.Workflow(uri) 41 .setHandler(function(response) { 42 if (!response.phid) { 43 return; 44 } 45 46 replace_policy(phid, response.phid, response.info); 47 select_policy(response.phid); 48 }) 49 .start(); 50 51 }, phid); 52 } else { 53 onselect = JX.bind(null, select_policy, phid); 54 } 55 56 var option = config.options[phid]; 57 var item = new JX.PHUIXActionView() 58 .setName(option.name) 59 .setIcon(option.icon + ' darkgreytext') 60 .setHandler(JX.bind(null, function(fn, e) { 61 e.prevent(); 62 menu.close(); 63 fn(); 64 }, onselect)); 65 66 if (phid == value) { 67 item.setSelected(true); 68 } 69 70 list.addItem(item); 71 } 72 } 73 74 menu.setContent(list.getNode()); 75 }); 76 77 78 var select_policy = function(phid) { 79 JX.DOM.setContent( 80 JX.DOM.find(control, 'span', 'policy-label'), 81 render_option(phid)); 82 83 input.value = phid; 84 value = phid; 85 }; 86 87 88 var render_option = function(phid, with_title) { 89 var option = config.options[phid]; 90 91 var name = option.name; 92 if (with_title && (option.full != option.name)) { 93 name = JX.$N('span', {title: option.full}, name); 94 } 95 96 return [JX.$H(config.icons[option.icon]), name]; 97 }; 98 99 100 /** 101 * Get the workflow URI to create or edit a policy with a given PHID. 102 */ 103 var get_custom_uri = function(phid) { 104 var uri = '/policy/edit/'; 105 if (phid != config.customPlaceholder) { 106 uri += phid + '/'; 107 } 108 return uri; 109 }; 110 111 112 /** 113 * Replace an existing policy option with a new one. Used to swap out custom 114 * policies after the user edits them. 115 */ 116 var replace_policy = function(old_phid, new_phid, info) { 117 config.options[new_phid] = info; 118 for (var k in config.order) { 119 for (var ii = 0; ii < config.order[k].length; ii++) { 120 if (config.order[k][ii] == old_phid) { 121 config.order[k][ii] = new_phid; 122 return; 123 } 124 } 125 } 126 }; 127 128 129 });
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 |