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 | ||||
* javelin-workflow | |||||
* 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 | * changeset-view-manager | ||||
*/ | */ | ||||
JX.behavior('differential-dropdown-menus', function(config) { | JX.behavior('differential-dropdown-menus', function(config) { | ||||
Show All 28 Lines | function(e) { | ||||
show_more(containers[i]); | show_more(containers[i]); | ||||
} | } | ||||
e.kill(); | e.kill(); | ||||
}); | }); | ||||
var buildmenu = function(e) { | var buildmenu = function(e) { | ||||
var button = e.getNode('differential-view-options'); | var button = e.getNode('differential-view-options'); | ||||
var data = JX.Stratcom.getData(button); | var data = JX.Stratcom.getData(button); | ||||
if (data.menu) { | if (data.menu) { | ||||
return; | return; | ||||
} | } | ||||
e.prevent(); | e.prevent(); | ||||
var changeset = JX.DOM.findAbove( | |||||
button, | |||||
'div', | |||||
'differential-changeset'); | |||||
var view = JX.ChangesetViewManager.getForNode(changeset); | |||||
var menu = new JX.PHUIXDropdownMenu(button); | var menu = new JX.PHUIXDropdownMenu(button); | ||||
var list = new JX.PHUIXActionListView(); | var list = new JX.PHUIXActionListView(); | ||||
var add_link = function(icon, name, href, local) { | var add_link = function(icon, name, href, local) { | ||||
if (!href) { | if (!href) { | ||||
return; | return; | ||||
} | } | ||||
Show All 32 Lines | var visible_item = new JX.PHUIXActionView() | ||||
}); | }); | ||||
list.addItem(visible_item); | list.addItem(visible_item); | ||||
add_link('fa-file-text', 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() | var up_item = new JX.PHUIXActionView() | ||||
.setHandler(function(e) { | .setHandler(function(e) { | ||||
var changeset = JX.DOM.findAbove( | if (view.isLoaded()) { | ||||
button, | var renderer = view.getRenderer(); | ||||
'div', | if (renderer == '1up') { | ||||
'differential-changeset'); | renderer = '2up'; | ||||
} else { | |||||
var view = JX.ChangesetViewManager.getForNode(changeset); | renderer = '1up'; | ||||
} | |||||
view.setRenderer(renderer); | |||||
} | |||||
view.reload(); | view.reload(); | ||||
e.prevent(); | e.prevent(); | ||||
menu.close(); | menu.close(); | ||||
}); | }); | ||||
list.addItem(up_item); | list.addItem(up_item); | ||||
var encoding_item = new JX.PHUIXActionView() | |||||
.setIcon('fa-font') | |||||
.setName(pht('Change Text Encoding...')) | |||||
.setHandler(function(e) { | |||||
var params = { | |||||
encoding: view.getEncoding() | |||||
}; | |||||
new JX.Workflow('/services/encoding/', params) | |||||
.setHandler(function(r) { | |||||
view.setEncoding(r.encoding); | |||||
view.reload(); | |||||
}) | |||||
.start(); | |||||
e.prevent(); | |||||
menu.close(); | |||||
}); | |||||
list.addItem(encoding_item); | |||||
var highlight_item = new JX.PHUIXActionView() | |||||
.setIcon('fa-sun-o') | |||||
.setName(pht('Highlight As...')) | |||||
.setHandler(function(e) { | |||||
var params = { | |||||
highlight: view.getHighlight() | |||||
}; | |||||
new JX.Workflow('/services/highlight/', params) | |||||
.setHandler(function(r) { | |||||
view.setHighlight(r.highlight); | |||||
view.reload(); | |||||
}) | |||||
.start(); | |||||
e.prevent(); | |||||
menu.close(); | |||||
}); | |||||
list.addItem(highlight_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(); }); | ||||
} | } | ||||
// TODO: This is temporary and just makes testing easier. It will do | encoding_item.setDisabled(!view.isLoaded()); | ||||
// some mojo soon. | highlight_item.setDisabled(!view.isLoaded()); | ||||
if (view.isLoaded()) { | if (view.isLoaded()) { | ||||
if (view.getRenderer() == '2up') { | |||||
up_item | up_item | ||||
.setIcon('fa-refresh') | .setIcon('fa-list-alt') | ||||
.setName('Reload'); | .setName(pht('View Unified')); | ||||
} else { | |||||
up_item | |||||
.setIcon('fa-files-o') | |||||
.setName(pht('View Side-by-Side')); | |||||
} | |||||
} else { | } else { | ||||
up_item | up_item | ||||
.setIcon('fa-refresh') | .setIcon('fa-refresh') | ||||
.setName('Load'); | .setName(pht('Load Changes')); | ||||
} | } | ||||
visible_item | visible_item | ||||
.setDisabled(true) | .setDisabled(true) | ||||
.setIcon('fa-expand') | .setIcon('fa-expand') | ||||
.setName(pht("Can't Toggle Unloaded File")); | .setName(pht("Can't Toggle Unloaded File")); | ||||
var diffs = JX.DOM.scry( | var diffs = JX.DOM.scry( | ||||
JX.$(data.containerID), | JX.$(data.containerID), | ||||
Show All 17 Lines | menu.listen('open', function() { | ||||
.setIcon('fa-compress'); | .setIcon('fa-compress'); | ||||
} | } | ||||
} else { | } else { | ||||
// Do nothing when there is no diff shown in the table. For example, | // Do nothing when there is no diff shown in the table. For example, | ||||
// the file is binary. | // the file is binary. | ||||
} | } | ||||
}); | }); | ||||
data.menu = menu; | data.menu = menu; | ||||
menu.open(); | menu.open(); | ||||
}; | }; | ||||
JX.Stratcom.listen('click', 'differential-view-options', buildmenu); | JX.Stratcom.listen('click', 'differential-view-options', buildmenu); | ||||
}); | }); |