Changeset View
Changeset View
Standalone View
Standalone View
webroot/rsrc/js/application/differential/behavior-dropdown-menus.js
/** | /** | ||||
* @provides javelin-behavior-differential-dropdown-menus | * @provides javelin-behavior-differential-dropdown-menus | ||||
* @requires javelin-behavior | * @requires javelin-behavior | ||||
* javelin-dom | * javelin-dom | ||||
* javelin-util | * javelin-util | ||||
* javelin-stratcom | * javelin-stratcom | ||||
* phuix-dropdown-menu | * phuix-dropdown-menu | ||||
* phuix-action-list-view | * phuix-action-list-view | ||||
* phuix-action-view | * phuix-action-view | ||||
* phabricator-phtize | * phabricator-phtize | ||||
* changeset-view-manager | |||||
*/ | */ | ||||
JX.behavior('differential-dropdown-menus', function(config) { | JX.behavior('differential-dropdown-menus', function(config) { | ||||
var pht = JX.phtize(config.pht); | var pht = JX.phtize(config.pht); | ||||
function show_more(container) { | function show_more(container) { | ||||
var nodes = JX.DOM.scry(container, 'tr', 'context-target'); | var nodes = JX.DOM.scry(container, 'tr', 'context-target'); | ||||
for (var ii = 0; ii < nodes.length; ii++) { | for (var ii = 0; ii < nodes.length; ii++) { | ||||
▲ Show 20 Lines • Show All 73 Lines • ▼ Show 20 Lines | var visible_item = new JX.PHUIXActionView() | ||||
'differential-diff'); | 'differential-diff'); | ||||
JX.Stratcom.invoke('differential-toggle-file', null, {diff: diff}); | JX.Stratcom.invoke('differential-toggle-file', null, {diff: diff}); | ||||
e.prevent(); | e.prevent(); | ||||
menu.close(); | menu.close(); | ||||
}); | }); | ||||
list.addItem(visible_item); | list.addItem(visible_item); | ||||
add_link('fa-files-o', pht('Browse in Diffusion'), data.diffusionURI); | add_link('fa-file-text', pht('Browse in Diffusion'), data.diffusionURI); | ||||
add_link('fa-file-o', pht('View Standalone'), data.standaloneURI); | add_link('fa-file-o', pht('View Standalone'), data.standaloneURI); | ||||
var up_item = new JX.PHUIXActionView() | |||||
.setHandler(function(e) { | |||||
var changeset = JX.DOM.findAbove( | |||||
button, | |||||
'div', | |||||
'differential-changeset'); | |||||
var view = JX.ChangesetViewManager.getForNode(changeset); | |||||
view.reload(); | |||||
e.prevent(); | |||||
menu.close(); | |||||
}); | |||||
list.addItem(up_item); | |||||
add_link('fa-arrow-left', pht('Show Raw File (Left)'), data.leftURI); | add_link('fa-arrow-left', pht('Show Raw File (Left)'), data.leftURI); | ||||
add_link('fa-arrow-right', pht('Show Raw File (Right)'), data.rightURI); | add_link('fa-arrow-right', pht('Show Raw File (Right)'), data.rightURI); | ||||
add_link('fa-pencil', pht('Open in Editor'), data.editor, true); | add_link('fa-pencil', pht('Open in Editor'), data.editor, true); | ||||
add_link('fa-wrench', pht('Configure Editor'), data.editorConfigure); | add_link('fa-wrench', pht('Configure Editor'), data.editorConfigure); | ||||
menu.setContent(list.getNode()); | menu.setContent(list.getNode()); | ||||
menu.listen('open', function() { | menu.listen('open', function() { | ||||
var changeset = JX.DOM.findAbove( | |||||
button, | |||||
'div', | |||||
'differential-changeset'); | |||||
var view = JX.ChangesetViewManager.getForNode(changeset); | |||||
// When the user opens the menu, check if there are any "Show More" | // When the user opens the menu, check if there are any "Show More" | ||||
// links in the changeset body. If there aren't, disable the "Show | // links in the changeset body. If there aren't, disable the "Show | ||||
// Entire File" menu item since it won't change anything. | // Entire File" menu item since it won't change anything. | ||||
var nodes = JX.DOM.scry(JX.$(data.containerID), 'a', 'show-more'); | var nodes = JX.DOM.scry(JX.$(data.containerID), 'a', 'show-more'); | ||||
if (nodes.length) { | if (nodes.length) { | ||||
reveal_item | reveal_item | ||||
.setDisabled(false) | .setDisabled(false) | ||||
.setName(pht('Show Entire File')) | .setName(pht('Show Entire File')) | ||||
.setIcon('fa-file-o') | .setIcon('fa-file-o') | ||||
.setHandler(function(e) { | .setHandler(function(e) { | ||||
show_more(JX.$(data.containerID)); | show_more(JX.$(data.containerID)); | ||||
e.prevent(); | e.prevent(); | ||||
menu.close(); | menu.close(); | ||||
}); | }); | ||||
} else { | } else { | ||||
reveal_item | reveal_item | ||||
.setDisabled(true) | .setDisabled(true) | ||||
.setIcon('fa-file') | .setIcon('fa-file') | ||||
.setName(pht('Entire File Shown')) | .setName(pht('Entire File Shown')) | ||||
.setHandler(function(e) { e.prevent(); }); | .setHandler(function(e) { e.prevent(); }); | ||||
} | } | ||||
visible_item.setDisabled(true); | // TODO: This is temporary and just makes testing easier. It will do | ||||
visible_item.setName(pht("Can't Toggle Unloaded File")); | // some mojo soon. | ||||
if (view.isLoaded()) { | |||||
up_item | |||||
.setIcon('fa-refresh') | |||||
.setName('Reload'); | |||||
} else { | |||||
up_item | |||||
.setIcon('fa-refresh') | |||||
.setName('Load'); | |||||
} | |||||
visible_item | |||||
.setDisabled(true) | |||||
.setIcon('fa-expand') | |||||
.setName(pht("Can't Toggle Unloaded File")); | |||||
var diffs = JX.DOM.scry( | var diffs = JX.DOM.scry( | ||||
JX.$(data.containerID), | JX.$(data.containerID), | ||||
'table', | 'table', | ||||
'differential-diff'); | 'differential-diff'); | ||||
if (diffs.length > 1) { | if (diffs.length > 1) { | ||||
JX.$E( | JX.$E( | ||||
'More than one node with sigil "differential-diff" was found in "'+ | 'More than one node with sigil "differential-diff" was found in "'+ | ||||
Show All 25 Lines |