[ Index ] |
PHP Cross Reference of Phabricator |
[Summary view] [Print] [Text view]
1 /** 2 * @provides javelin-behavior-differential-toggle-files 3 * @requires javelin-behavior 4 * javelin-dom 5 * javelin-stratcom 6 * phabricator-phtize 7 */ 8 9 JX.behavior('differential-toggle-files', function(config) { 10 var pht = JX.phtize(config.pht); 11 12 JX.Stratcom.listen( 13 'differential-toggle-file', 14 null, 15 function(e) { 16 if (e.getData().diff.length != 1) { 17 return; 18 } 19 20 var diff = e.getData().diff[0], 21 data = JX.Stratcom.getData(diff); 22 if (data.hidden) { 23 data.hidden = false; 24 JX.DOM.show(diff); 25 JX.DOM.remove(data.undo); 26 data.undo = null; 27 } else { 28 data.hidden = true; 29 data.undo = render_collapse_undo(); 30 JX.DOM.hide(diff); 31 JX.DOM.listen( 32 data.undo, 33 'click', 34 'differential-collapse-undo', 35 function(e) { 36 e.kill(); 37 data.hidden = false; 38 JX.DOM.show(diff); 39 JX.DOM.remove(data.undo); 40 data.undo = null; 41 }); 42 JX.DOM.appendContent(diff.parentNode, data.undo); 43 } 44 JX.Stratcom.invoke('differential-toggle-file-toggled'); 45 }); 46 47 JX.Stratcom.listen( 48 'differential-toggle-file-request', 49 null, 50 function(e) { 51 var elt = e.getData().element; 52 while (elt !== document.body) { 53 if (JX.Stratcom.hasSigil(elt, 'differential-changeset')) { 54 var diffs = JX.DOM.scry(elt, 'table', 'differential-diff'); 55 var invoked = false; 56 for (var i = 0; i < diffs.length; ++i) { 57 if (JX.Stratcom.getData(diffs[i]).hidden) { 58 JX.Stratcom.invoke('differential-toggle-file', null, { 59 diff: [ diffs[i] ] 60 }); 61 invoked = true; 62 } 63 } 64 if (!invoked) { 65 e.prevent(); 66 } 67 return; 68 } 69 elt = elt.parentNode; 70 } 71 e.prevent(); 72 }); 73 74 JX.Stratcom.listen( 75 'click', 76 'tag:a', 77 function(e) { 78 var link = e.getNode('tag:a'); 79 var id = link.getAttribute('href'); 80 if (!id || !id.match(/^#.+/)) { 81 return; 82 } 83 var raw = e.getRawEvent(); 84 if (raw.altKey || raw.ctrlKey || raw.metaKey || raw.shiftKey) { 85 return; 86 } 87 // The target may have either a matching name or a matching id. 88 var target; 89 try { 90 target = JX.$(id.substr(1)); 91 } catch(err) { 92 var named = document.getElementsByName(id.substr(1)); 93 for (var i = 0; i < named.length; ++i) { 94 if (named[i].tagName.toLowerCase() == 'a') { 95 if (target) { 96 return; 97 } 98 target = named[i]; 99 } 100 } 101 if (!target) { 102 return; 103 } 104 } 105 var event = JX.Stratcom.invoke('differential-toggle-file-request', null, { 106 element: target 107 }); 108 if (!event.getPrevented()) { 109 // This event is processed after the hash has changed, so it doesn't 110 // automatically jump there like we want. 111 JX.DOM.scrollTo(target); 112 } 113 }); 114 115 var render_collapse_undo = function() { 116 var link = JX.$N( 117 'a', 118 {href: '#', sigil: 'differential-collapse-undo'}, 119 pht('undo')); 120 121 return JX.$N( 122 'div', 123 {className: 'differential-collapse-undo', 124 sigil: 'differential-collapse-undo-div'}, 125 [pht('collapsed'), ' ', link]); 126 }; 127 128 });
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 |