[ Index ] |
PHP Cross Reference of Phabricator |
[Summary view] [Print] [Text view]
1 /** 2 * @provides javelin-behavior-releeph-request-state-change 3 * @requires javelin-behavior 4 * javelin-dom 5 * javelin-stratcom 6 * javelin-workflow 7 * javelin-util 8 * phabricator-keyboard-shortcut 9 */ 10 11 JX.behavior('releeph-request-state-change', function() { 12 function getRequestHeaderNodes() { 13 return JX.DOM.scry(document.body, 'div', 'releeph-request-box'); 14 } 15 16 var keynav_cursor = -1; 17 18 function keynavJump(manager, delta) { 19 // Calculate this everytime, because the DOM changes. 20 var headers = getRequestHeaderNodes(); 21 keynav_cursor += delta; 22 23 if (keynav_cursor < 0) { 24 keynav_cursor = -1; 25 window.scrollTo(0); 26 keynavMarkup(); 27 return; 28 } 29 30 if (keynav_cursor >= headers.length) { 31 keynav_cursor = headers.length - 1; 32 } 33 34 var focus = headers[keynav_cursor]; 35 manager.scrollTo(focus); 36 37 keynavMarkup(); 38 } 39 40 function keynavMarkup() { 41 var headers = getRequestHeaderNodes(); 42 for (var k in headers) { 43 JX.DOM.alterClass(headers[k], 'focus', k == keynav_cursor); 44 } 45 } 46 47 function keynavAction(manager, action_name) { 48 var headers = getRequestHeaderNodes(); 49 var header = headers[keynav_cursor]; 50 51 if (keynav_cursor < 0) { 52 return; 53 } 54 55 var sigil = action_name; 56 var button = JX.DOM.find(header, 'a', sigil); 57 if (button) { 58 button.click(); 59 } 60 } 61 62 function keynavNavigateToRequestPage() { 63 var headers = getRequestHeaderNodes(); 64 var header = headers[keynav_cursor]; 65 window.open(JX.Stratcom.getData(header).uri); 66 } 67 68 new JX.KeyboardShortcut('j', 'Jump to next request.') 69 .setHandler(function(manager) { 70 keynavJump(manager, +1); 71 }) 72 .register(); 73 74 new JX.KeyboardShortcut('k', 'Jump to previous request.') 75 .setHandler(function(manager) { 76 keynavJump(manager, -1); 77 }) 78 .register(); 79 80 new JX.KeyboardShortcut('a', 'Approve the selected request.') 81 .setHandler(function(manager) { 82 keynavAction(manager, 'want'); 83 }) 84 .register(); 85 86 new JX.KeyboardShortcut('r', 'Reject the selected request.') 87 .setHandler(function(manager) { 88 keynavAction(manager, 'pass'); 89 }) 90 .register(); 91 92 new JX.KeyboardShortcut( 93 ['g', 'return'], 94 "Open selected request's page in a new tab.") 95 .setHandler(function() { 96 keynavNavigateToRequestPage(); 97 }) 98 .register(); 99 100 function onresponse(box, response) { 101 JX.DOM.replace(box, JX.$H(response.markup)); 102 keynavMarkup(); 103 } 104 105 JX.Stratcom.listen( 106 'click', 107 'releeph-request-state-change', 108 function(e) { 109 e.kill(); 110 111 var box = e.getNode('releeph-request-box'); 112 var link = e.getNode('releeph-request-state-change'); 113 114 box.style.opacity = '0.5'; 115 116 JX.Workflow.newFromLink(link) 117 .setData({render: true}) 118 .setHandler(JX.bind(null, onresponse, box)) 119 .start(); 120 }); 121 });
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 |