mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-09 16:32:39 +01:00
Merge "differential-dropdown-menus" behavior into DiffChangesetList
Summary: Ref T12616. This ends up being a little messy ("one giant function") and maybe I'll clean it up a bit later, but continue consolidating the wild jungle of behaviors into a smaller set of responsible objects. Test Plan: Clicked all the menu options, saw them work properly. Grepped for removed methods. Reviewers: chad Reviewed By: chad Maniphest Tasks: T12616 Differential Revision: https://secure.phabricator.com/D17845
This commit is contained in:
parent
63450cc48e
commit
64a54aac9d
7 changed files with 285 additions and 309 deletions
|
@ -13,7 +13,7 @@ return array(
|
|||
'core.pkg.js' => '2ff7879f',
|
||||
'darkconsole.pkg.js' => '1f9a31bc',
|
||||
'differential.pkg.css' => '90b30783',
|
||||
'differential.pkg.js' => 'ef6c7cfc',
|
||||
'differential.pkg.js' => '51d9bebe',
|
||||
'diffusion.pkg.css' => 'b93d9b8c',
|
||||
'diffusion.pkg.js' => '84c8f8fd',
|
||||
'favicon.ico' => '30672e08',
|
||||
|
@ -390,17 +390,16 @@ return array(
|
|||
'rsrc/js/application/dashboard/behavior-dashboard-move-panels.js' => '408bf173',
|
||||
'rsrc/js/application/dashboard/behavior-dashboard-query-panel-select.js' => '453c5375',
|
||||
'rsrc/js/application/dashboard/behavior-dashboard-tab-panel.js' => 'd4eecc63',
|
||||
'rsrc/js/application/diff/DiffChangeset.js' => 'a1189df6',
|
||||
'rsrc/js/application/diff/DiffChangesetList.js' => '2329e40e',
|
||||
'rsrc/js/application/diff/DiffChangeset.js' => 'ed7bc580',
|
||||
'rsrc/js/application/diff/DiffChangesetList.js' => 'f9ea2d8b',
|
||||
'rsrc/js/application/diff/behavior-preview-link.js' => '051c7832',
|
||||
'rsrc/js/application/differential/DifferentialInlineCommentEditor.js' => '2e3f9738',
|
||||
'rsrc/js/application/differential/behavior-comment-jump.js' => '4fdb476d',
|
||||
'rsrc/js/application/differential/behavior-comment-preview.js' => 'b064af76',
|
||||
'rsrc/js/application/differential/behavior-diff-radios.js' => 'e1ff79b1',
|
||||
'rsrc/js/application/differential/behavior-dropdown-menus.js' => 'c3d216cb',
|
||||
'rsrc/js/application/differential/behavior-edit-inline-comments.js' => 'c0f1c3b5',
|
||||
'rsrc/js/application/differential/behavior-keyboard-nav.js' => '92904457',
|
||||
'rsrc/js/application/differential/behavior-populate.js' => '00d88bc4',
|
||||
'rsrc/js/application/differential/behavior-populate.js' => '7356b23d',
|
||||
'rsrc/js/application/differential/behavior-toggle-files.js' => 'ca3f91eb',
|
||||
'rsrc/js/application/differential/behavior-user-select.js' => 'a8d8459d',
|
||||
'rsrc/js/application/diffusion/DiffusionLocateFileSource.js' => 'c93358e3',
|
||||
|
@ -624,11 +623,10 @@ return array(
|
|||
'javelin-behavior-diff-preview-link' => '051c7832',
|
||||
'javelin-behavior-differential-comment-jump' => '4fdb476d',
|
||||
'javelin-behavior-differential-diff-radios' => 'e1ff79b1',
|
||||
'javelin-behavior-differential-dropdown-menus' => 'c3d216cb',
|
||||
'javelin-behavior-differential-edit-inline-comments' => 'c0f1c3b5',
|
||||
'javelin-behavior-differential-feedback-preview' => 'b064af76',
|
||||
'javelin-behavior-differential-keyboard-navigation' => '92904457',
|
||||
'javelin-behavior-differential-populate' => '00d88bc4',
|
||||
'javelin-behavior-differential-populate' => '7356b23d',
|
||||
'javelin-behavior-differential-toggle-files' => 'ca3f91eb',
|
||||
'javelin-behavior-differential-user-select' => 'a8d8459d',
|
||||
'javelin-behavior-diffusion-browse-file' => '054a0f0b',
|
||||
|
@ -786,8 +784,8 @@ return array(
|
|||
'phabricator-darklog' => 'c8e1ffe3',
|
||||
'phabricator-darkmessage' => 'c48cccdd',
|
||||
'phabricator-dashboard-css' => 'fe5b1869',
|
||||
'phabricator-diff-changeset' => 'a1189df6',
|
||||
'phabricator-diff-changeset-list' => '2329e40e',
|
||||
'phabricator-diff-changeset' => 'ed7bc580',
|
||||
'phabricator-diff-changeset-list' => 'f9ea2d8b',
|
||||
'phabricator-drag-and-drop-file-upload' => '58dea2fa',
|
||||
'phabricator-draggable-list' => 'bea6e7f4',
|
||||
'phabricator-fatal-config-template-css' => '8f18fa41',
|
||||
|
@ -922,14 +920,6 @@ return array(
|
|||
'unhandled-exception-css' => '4c96257a',
|
||||
),
|
||||
'requires' => array(
|
||||
'00d88bc4' => array(
|
||||
'javelin-behavior',
|
||||
'javelin-dom',
|
||||
'javelin-stratcom',
|
||||
'phabricator-tooltip',
|
||||
'phabricator-diff-changeset-list',
|
||||
'phabricator-diff-changeset',
|
||||
),
|
||||
'013ffff9' => array(
|
||||
'javelin-install',
|
||||
'javelin-util',
|
||||
|
@ -1087,9 +1077,6 @@ return array(
|
|||
'javelin-workflow',
|
||||
'javelin-util',
|
||||
),
|
||||
'2329e40e' => array(
|
||||
'javelin-install',
|
||||
),
|
||||
26167537 => array(
|
||||
'javelin-install',
|
||||
'javelin-dom',
|
||||
|
@ -1471,6 +1458,14 @@ return array(
|
|||
'javelin-behavior',
|
||||
'javelin-dom',
|
||||
),
|
||||
'7356b23d' => array(
|
||||
'javelin-behavior',
|
||||
'javelin-dom',
|
||||
'javelin-stratcom',
|
||||
'phabricator-tooltip',
|
||||
'phabricator-diff-changeset-list',
|
||||
'phabricator-diff-changeset',
|
||||
),
|
||||
'73d09eef' => array(
|
||||
'javelin-behavior',
|
||||
'javelin-vector',
|
||||
|
@ -1706,16 +1701,6 @@ return array(
|
|||
'javelin-util',
|
||||
'phabricator-keyboard-shortcut',
|
||||
),
|
||||
'a1189df6' => array(
|
||||
'javelin-dom',
|
||||
'javelin-util',
|
||||
'javelin-stratcom',
|
||||
'javelin-install',
|
||||
'javelin-workflow',
|
||||
'javelin-router',
|
||||
'javelin-behavior-device',
|
||||
'javelin-vector',
|
||||
),
|
||||
'a155550f' => array(
|
||||
'javelin-install',
|
||||
'javelin-dom',
|
||||
|
@ -1942,18 +1927,6 @@ return array(
|
|||
'javelin-vector',
|
||||
'differential-inline-comment-editor',
|
||||
),
|
||||
'c3d216cb' => array(
|
||||
'javelin-behavior',
|
||||
'javelin-dom',
|
||||
'javelin-util',
|
||||
'javelin-stratcom',
|
||||
'javelin-workflow',
|
||||
'phuix-dropdown-menu',
|
||||
'phuix-action-list-view',
|
||||
'phuix-action-view',
|
||||
'phabricator-phtize',
|
||||
'phabricator-diff-changeset',
|
||||
),
|
||||
'c420b0b9' => array(
|
||||
'javelin-behavior',
|
||||
'javelin-behavior-device',
|
||||
|
@ -2182,6 +2155,16 @@ return array(
|
|||
'javelin-dom',
|
||||
'phabricator-draggable-list',
|
||||
),
|
||||
'ed7bc580' => array(
|
||||
'javelin-dom',
|
||||
'javelin-util',
|
||||
'javelin-stratcom',
|
||||
'javelin-install',
|
||||
'javelin-workflow',
|
||||
'javelin-router',
|
||||
'javelin-behavior-device',
|
||||
'javelin-vector',
|
||||
),
|
||||
'eded9ee8' => array(
|
||||
'javelin-behavior',
|
||||
'javelin-typeahead-ondemand-source',
|
||||
|
@ -2239,6 +2222,9 @@ return array(
|
|||
'javelin-install',
|
||||
'javelin-dom',
|
||||
),
|
||||
'f9ea2d8b' => array(
|
||||
'javelin-install',
|
||||
),
|
||||
'fbe497e7' => array(
|
||||
'javelin-behavior',
|
||||
'javelin-util',
|
||||
|
@ -2465,7 +2451,6 @@ return array(
|
|||
'javelin-behavior-repository-crossreference',
|
||||
'javelin-behavior-load-blame',
|
||||
'differential-inline-comment-editor',
|
||||
'javelin-behavior-differential-dropdown-menus',
|
||||
'javelin-behavior-differential-toggle-files',
|
||||
'javelin-behavior-differential-user-select',
|
||||
'javelin-behavior-aphront-more',
|
||||
|
|
|
@ -204,7 +204,6 @@ return array(
|
|||
'javelin-behavior-load-blame',
|
||||
|
||||
'differential-inline-comment-editor',
|
||||
'javelin-behavior-differential-dropdown-menus',
|
||||
'javelin-behavior-differential-toggle-files',
|
||||
'javelin-behavior-differential-user-select',
|
||||
'javelin-behavior-aphront-more',
|
||||
|
|
|
@ -138,29 +138,6 @@ final class DifferentialChangesetListView extends AphrontView {
|
|||
),
|
||||
));
|
||||
|
||||
Javelin::initBehavior(
|
||||
'differential-dropdown-menus',
|
||||
array(
|
||||
'pht' => array(
|
||||
'Open in Editor' => pht('Open in Editor'),
|
||||
'Show All Context' => pht('Show All Context'),
|
||||
'All Context Shown' => pht('All Context Shown'),
|
||||
"Can't Toggle Unloaded File" => pht("Can't Toggle Unloaded File"),
|
||||
'Expand File' => pht('Expand File'),
|
||||
'Collapse File' => pht('Collapse File'),
|
||||
'Browse in Diffusion' => pht('Browse in Diffusion'),
|
||||
'View Standalone' => pht('View Standalone'),
|
||||
'Show Raw File (Left)' => pht('Show Raw File (Left)'),
|
||||
'Show Raw File (Right)' => pht('Show Raw File (Right)'),
|
||||
'Configure Editor' => pht('Configure Editor'),
|
||||
'Load Changes' => pht('Load Changes'),
|
||||
'View Side-by-Side' => pht('View Side-by-Side'),
|
||||
'View Unified' => pht('View Unified'),
|
||||
'Change Text Encoding...' => pht('Change Text Encoding...'),
|
||||
'Highlight As...' => pht('Highlight As...'),
|
||||
),
|
||||
));
|
||||
|
||||
$renderer = DifferentialChangesetParser::getDefaultRendererForViewer(
|
||||
$viewer);
|
||||
|
||||
|
@ -238,8 +215,28 @@ final class DifferentialChangesetListView extends AphrontView {
|
|||
|
||||
$this->requireResource('aphront-tooltip-css');
|
||||
|
||||
$this->initBehavior('differential-populate', array(
|
||||
$this->initBehavior(
|
||||
'differential-populate',
|
||||
array(
|
||||
'changesetViewIDs' => $ids,
|
||||
'pht' => array(
|
||||
'Open in Editor' => pht('Open in Editor'),
|
||||
'Show All Context' => pht('Show All Context'),
|
||||
'All Context Shown' => pht('All Context Shown'),
|
||||
"Can't Toggle Unloaded File" => pht("Can't Toggle Unloaded File"),
|
||||
'Expand File' => pht('Expand File'),
|
||||
'Collapse File' => pht('Collapse File'),
|
||||
'Browse in Diffusion' => pht('Browse in Diffusion'),
|
||||
'View Standalone' => pht('View Standalone'),
|
||||
'Show Raw File (Left)' => pht('Show Raw File (Left)'),
|
||||
'Show Raw File (Right)' => pht('Show Raw File (Right)'),
|
||||
'Configure Editor' => pht('Configure Editor'),
|
||||
'Load Changes' => pht('Load Changes'),
|
||||
'View Side-by-Side' => pht('View Side-by-Side'),
|
||||
'View Unified' => pht('View Unified'),
|
||||
'Change Text Encoding...' => pht('Change Text Encoding...'),
|
||||
'Highlight As...' => pht('Highlight As...'),
|
||||
),
|
||||
));
|
||||
|
||||
$this->initBehavior('differential-comment-jump', array());
|
||||
|
|
|
@ -174,6 +174,20 @@ JX.install('DiffChangeset', {
|
|||
return this;
|
||||
},
|
||||
|
||||
loadAllContext: function() {
|
||||
var nodes = JX.DOM.scry(this._node, 'tr', 'context-target');
|
||||
for (var ii = 0; ii < nodes.length; ii++) {
|
||||
var show = JX.DOM.scry(nodes[ii], 'a', 'show-more');
|
||||
for (var jj = 0; jj < show.length; jj++) {
|
||||
var data = JX.Stratcom.getData(show[jj]);
|
||||
if (data.type != 'all') {
|
||||
continue;
|
||||
}
|
||||
this.loadContext(data.range, nodes[ii], true);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
_startContentWorkflow: function(workflow) {
|
||||
var routable = workflow.getRoutable();
|
||||
|
||||
|
|
|
@ -13,6 +13,13 @@ JX.install('DiffChangesetList', {
|
|||
|
||||
var onmore = JX.bind(this, this._ifawake, this._onmore);
|
||||
JX.Stratcom.listen('click', 'show-more', onmore);
|
||||
|
||||
var onmenu = JX.bind(this, this._ifawake, this._onmenu);
|
||||
JX.Stratcom.listen('click', 'differential-view-options', onmenu);
|
||||
},
|
||||
|
||||
properties: {
|
||||
translations: null
|
||||
},
|
||||
|
||||
members: {
|
||||
|
@ -80,8 +87,221 @@ JX.install('DiffChangesetList', {
|
|||
var target = e.getNode('context-target');
|
||||
|
||||
changeset.loadContext(data.range, target);
|
||||
},
|
||||
|
||||
_onmenu: function(e) {
|
||||
var button = e.getNode('differential-view-options');
|
||||
|
||||
var data = JX.Stratcom.getData(button);
|
||||
if (data.menu) {
|
||||
// We've already built this menu, so we can let the menu itself handle
|
||||
// the event.
|
||||
return;
|
||||
}
|
||||
|
||||
e.prevent();
|
||||
|
||||
var pht = this.getTranslations();
|
||||
|
||||
var node = JX.DOM.findAbove(
|
||||
button,
|
||||
'div',
|
||||
'differential-changeset');
|
||||
|
||||
var changeset = this.getChangesetForNode(node);
|
||||
|
||||
var menu = new JX.PHUIXDropdownMenu(button);
|
||||
var list = new JX.PHUIXActionListView();
|
||||
|
||||
var add_link = function(icon, name, href, local) {
|
||||
if (!href) {
|
||||
return;
|
||||
}
|
||||
|
||||
var link = new JX.PHUIXActionView()
|
||||
.setIcon(icon)
|
||||
.setName(name)
|
||||
.setHref(href)
|
||||
.setHandler(function(e) {
|
||||
if (local) {
|
||||
window.location.assign(href);
|
||||
} else {
|
||||
window.open(href);
|
||||
}
|
||||
menu.close();
|
||||
e.prevent();
|
||||
});
|
||||
|
||||
list.addItem(link);
|
||||
return link;
|
||||
};
|
||||
|
||||
var reveal_item = new JX.PHUIXActionView()
|
||||
.setIcon('fa-eye');
|
||||
list.addItem(reveal_item);
|
||||
|
||||
var visible_item = new JX.PHUIXActionView()
|
||||
.setHandler(function(e) {
|
||||
var diff = JX.DOM.scry(
|
||||
JX.$(data.containerID),
|
||||
'table',
|
||||
'differential-diff');
|
||||
|
||||
JX.Stratcom.invoke('differential-toggle-file', null, {diff: diff});
|
||||
e.prevent();
|
||||
menu.close();
|
||||
});
|
||||
list.addItem(visible_item);
|
||||
|
||||
add_link('fa-file-text', pht('Browse in Diffusion'), data.diffusionURI);
|
||||
add_link('fa-file-o', pht('View Standalone'), data.standaloneURI);
|
||||
|
||||
var up_item = new JX.PHUIXActionView()
|
||||
.setHandler(function(e) {
|
||||
if (changeset.isLoaded()) {
|
||||
var renderer = changeset.getRenderer();
|
||||
if (renderer == '1up') {
|
||||
renderer = '2up';
|
||||
} else {
|
||||
renderer = '1up';
|
||||
}
|
||||
changeset.setRenderer(renderer);
|
||||
}
|
||||
changeset.reload();
|
||||
|
||||
e.prevent();
|
||||
menu.close();
|
||||
});
|
||||
list.addItem(up_item);
|
||||
|
||||
var encoding_item = new JX.PHUIXActionView()
|
||||
.setIcon('fa-font')
|
||||
.setName(pht('Change Text Encoding...'))
|
||||
.setHandler(function(e) {
|
||||
var params = {
|
||||
encoding: changeset.getEncoding()
|
||||
};
|
||||
|
||||
new JX.Workflow('/services/encoding/', params)
|
||||
.setHandler(function(r) {
|
||||
changeset.setEncoding(r.encoding);
|
||||
changeset.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: changeset.getHighlight()
|
||||
};
|
||||
|
||||
new JX.Workflow('/services/highlight/', params)
|
||||
.setHandler(function(r) {
|
||||
changeset.setHighlight(r.highlight);
|
||||
changeset.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-right', pht('Show Raw File (Right)'), data.rightURI);
|
||||
add_link('fa-pencil', pht('Open in Editor'), data.editor, true);
|
||||
add_link('fa-wrench', pht('Configure Editor'), data.editorConfigure);
|
||||
|
||||
menu.setContent(list.getNode());
|
||||
|
||||
menu.listen('open', function() {
|
||||
// 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
|
||||
// Entire File" menu item since it won't change anything.
|
||||
|
||||
var nodes = JX.DOM.scry(JX.$(data.containerID), 'a', 'show-more');
|
||||
if (nodes.length) {
|
||||
reveal_item
|
||||
.setDisabled(false)
|
||||
.setName(pht('Show All Context'))
|
||||
.setIcon('fa-file-o')
|
||||
.setHandler(function(e) {
|
||||
changeset.loadAllContext();
|
||||
e.prevent();
|
||||
menu.close();
|
||||
});
|
||||
} else {
|
||||
reveal_item
|
||||
.setDisabled(true)
|
||||
.setIcon('fa-file')
|
||||
.setName(pht('All Context Shown'))
|
||||
.setHandler(function(e) { e.prevent(); });
|
||||
}
|
||||
|
||||
encoding_item.setDisabled(!changeset.isLoaded());
|
||||
highlight_item.setDisabled(!changeset.isLoaded());
|
||||
|
||||
if (changeset.isLoaded()) {
|
||||
if (changeset.getRenderer() == '2up') {
|
||||
up_item
|
||||
.setIcon('fa-list-alt')
|
||||
.setName(pht('View Unified'));
|
||||
} else {
|
||||
up_item
|
||||
.setIcon('fa-files-o')
|
||||
.setName(pht('View Side-by-Side'));
|
||||
}
|
||||
} else {
|
||||
up_item
|
||||
.setIcon('fa-refresh')
|
||||
.setName(pht('Load Changes'));
|
||||
}
|
||||
|
||||
visible_item
|
||||
.setDisabled(true)
|
||||
.setIcon('fa-expand')
|
||||
.setName(pht('Can\'t Toggle Unloaded File'));
|
||||
var diffs = JX.DOM.scry(
|
||||
JX.$(data.containerID),
|
||||
'table',
|
||||
'differential-diff');
|
||||
|
||||
if (diffs.length > 1) {
|
||||
JX.$E(
|
||||
'More than one node with sigil "differential-diff" was found in "'+
|
||||
data.containerID+'."');
|
||||
} else if (diffs.length == 1) {
|
||||
var diff = diffs[0];
|
||||
visible_item.setDisabled(false);
|
||||
if (JX.Stratcom.getData(diff).hidden) {
|
||||
visible_item
|
||||
.setName(pht('Expand File'))
|
||||
.setIcon('fa-expand');
|
||||
} else {
|
||||
visible_item
|
||||
.setName(pht('Collapse File'))
|
||||
.setIcon('fa-compress');
|
||||
}
|
||||
} else {
|
||||
// Do nothing when there is no diff shown in the table. For example,
|
||||
// the file is binary.
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
data.menu = menu;
|
||||
menu.open();
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
|
|
|
@ -1,240 +0,0 @@
|
|||
/**
|
||||
* @provides javelin-behavior-differential-dropdown-menus
|
||||
* @requires javelin-behavior
|
||||
* javelin-dom
|
||||
* javelin-util
|
||||
* javelin-stratcom
|
||||
* javelin-workflow
|
||||
* phuix-dropdown-menu
|
||||
* phuix-action-list-view
|
||||
* phuix-action-view
|
||||
* phabricator-phtize
|
||||
* phabricator-diff-changeset
|
||||
*/
|
||||
|
||||
JX.behavior('differential-dropdown-menus', function(config) {
|
||||
var pht = JX.phtize(config.pht);
|
||||
|
||||
function show_more(container) {
|
||||
var view = JX.DiffChangeset.getForNode(container);
|
||||
|
||||
var nodes = JX.DOM.scry(container, 'tr', 'context-target');
|
||||
for (var ii = 0; ii < nodes.length; ii++) {
|
||||
var show = JX.DOM.scry(nodes[ii], 'a', 'show-more');
|
||||
for (var jj = 0; jj < show.length; jj++) {
|
||||
var data = JX.Stratcom.getData(show[jj]);
|
||||
if (data.type != 'all') {
|
||||
continue;
|
||||
}
|
||||
view.loadContext(data.range, nodes[ii], true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var buildmenu = function(e) {
|
||||
var button = e.getNode('differential-view-options');
|
||||
var data = JX.Stratcom.getData(button);
|
||||
if (data.menu) {
|
||||
return;
|
||||
}
|
||||
|
||||
e.prevent();
|
||||
|
||||
var changeset = JX.DOM.findAbove(
|
||||
button,
|
||||
'div',
|
||||
'differential-changeset');
|
||||
|
||||
var view = JX.DiffChangeset.getForNode(changeset);
|
||||
var menu = new JX.PHUIXDropdownMenu(button);
|
||||
var list = new JX.PHUIXActionListView();
|
||||
|
||||
var add_link = function(icon, name, href, local) {
|
||||
if (!href) {
|
||||
return;
|
||||
}
|
||||
|
||||
var link = new JX.PHUIXActionView()
|
||||
.setIcon(icon)
|
||||
.setName(name)
|
||||
.setHref(href)
|
||||
.setHandler(function(e) {
|
||||
if (local) {
|
||||
window.location.assign(href);
|
||||
} else {
|
||||
window.open(href);
|
||||
}
|
||||
menu.close();
|
||||
e.prevent();
|
||||
});
|
||||
|
||||
list.addItem(link);
|
||||
return link;
|
||||
};
|
||||
|
||||
var reveal_item = new JX.PHUIXActionView()
|
||||
.setIcon('fa-eye');
|
||||
list.addItem(reveal_item);
|
||||
|
||||
var visible_item = new JX.PHUIXActionView()
|
||||
.setHandler(function(e) {
|
||||
var diff = JX.DOM.scry(
|
||||
JX.$(data.containerID),
|
||||
'table',
|
||||
'differential-diff');
|
||||
|
||||
JX.Stratcom.invoke('differential-toggle-file', null, {diff: diff});
|
||||
e.prevent();
|
||||
menu.close();
|
||||
});
|
||||
list.addItem(visible_item);
|
||||
|
||||
add_link('fa-file-text', pht('Browse in Diffusion'), data.diffusionURI);
|
||||
add_link('fa-file-o', pht('View Standalone'), data.standaloneURI);
|
||||
|
||||
var up_item = new JX.PHUIXActionView()
|
||||
.setHandler(function(e) {
|
||||
if (view.isLoaded()) {
|
||||
var renderer = view.getRenderer();
|
||||
if (renderer == '1up') {
|
||||
renderer = '2up';
|
||||
} else {
|
||||
renderer = '1up';
|
||||
}
|
||||
view.setRenderer(renderer);
|
||||
}
|
||||
view.reload();
|
||||
|
||||
e.prevent();
|
||||
menu.close();
|
||||
});
|
||||
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-right', pht('Show Raw File (Right)'), data.rightURI);
|
||||
add_link('fa-pencil', pht('Open in Editor'), data.editor, true);
|
||||
add_link('fa-wrench', pht('Configure Editor'), data.editorConfigure);
|
||||
|
||||
menu.setContent(list.getNode());
|
||||
|
||||
menu.listen('open', function() {
|
||||
// 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
|
||||
// Entire File" menu item since it won't change anything.
|
||||
|
||||
var nodes = JX.DOM.scry(JX.$(data.containerID), 'a', 'show-more');
|
||||
if (nodes.length) {
|
||||
reveal_item
|
||||
.setDisabled(false)
|
||||
.setName(pht('Show All Context'))
|
||||
.setIcon('fa-file-o')
|
||||
.setHandler(function(e) {
|
||||
show_more(JX.$(data.containerID));
|
||||
e.prevent();
|
||||
menu.close();
|
||||
});
|
||||
} else {
|
||||
reveal_item
|
||||
.setDisabled(true)
|
||||
.setIcon('fa-file')
|
||||
.setName(pht('All Context Shown'))
|
||||
.setHandler(function(e) { e.prevent(); });
|
||||
}
|
||||
|
||||
encoding_item.setDisabled(!view.isLoaded());
|
||||
highlight_item.setDisabled(!view.isLoaded());
|
||||
|
||||
if (view.isLoaded()) {
|
||||
if (view.getRenderer() == '2up') {
|
||||
up_item
|
||||
.setIcon('fa-list-alt')
|
||||
.setName(pht('View Unified'));
|
||||
} else {
|
||||
up_item
|
||||
.setIcon('fa-files-o')
|
||||
.setName(pht('View Side-by-Side'));
|
||||
}
|
||||
} else {
|
||||
up_item
|
||||
.setIcon('fa-refresh')
|
||||
.setName(pht('Load Changes'));
|
||||
}
|
||||
|
||||
visible_item
|
||||
.setDisabled(true)
|
||||
.setIcon('fa-expand')
|
||||
.setName(pht('Can\'t Toggle Unloaded File'));
|
||||
var diffs = JX.DOM.scry(
|
||||
JX.$(data.containerID),
|
||||
'table',
|
||||
'differential-diff');
|
||||
|
||||
if (diffs.length > 1) {
|
||||
JX.$E(
|
||||
'More than one node with sigil "differential-diff" was found in "'+
|
||||
data.containerID+'."');
|
||||
} else if (diffs.length == 1) {
|
||||
var diff = diffs[0];
|
||||
visible_item.setDisabled(false);
|
||||
if (JX.Stratcom.getData(diff).hidden) {
|
||||
visible_item
|
||||
.setName(pht('Expand File'))
|
||||
.setIcon('fa-expand');
|
||||
} else {
|
||||
visible_item
|
||||
.setName(pht('Collapse File'))
|
||||
.setIcon('fa-compress');
|
||||
}
|
||||
} else {
|
||||
// Do nothing when there is no diff shown in the table. For example,
|
||||
// the file is binary.
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
data.menu = menu;
|
||||
menu.open();
|
||||
};
|
||||
|
||||
JX.Stratcom.listen('click', 'differential-view-options', buildmenu);
|
||||
});
|
|
@ -58,7 +58,8 @@ JX.behavior('differential-populate', function(config, statics) {
|
|||
});
|
||||
}
|
||||
|
||||
var changeset_list = new JX.DiffChangesetList();
|
||||
var changeset_list = new JX.DiffChangesetList()
|
||||
.setTranslations(JX.phtize(config.pht));
|
||||
|
||||
// Install and activate the current page.
|
||||
var page_id = JX.Quicksand.getCurrentPageID();
|
||||
|
|
Loading…
Reference in a new issue