mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-19 12:00:55 +01:00
7d0d6fbcf2
Summary: Ref T5179. Currently, all the changeset rendering logic is in the "populate" behavior, and a lot of it comes in via configuration and is hard to get at. Instead, surface an object which can control it, and which other behaviors can access more easily. In particular, this allows us to add a "Load/Reload" item to the view options menu, which would previously have been very challenging. Load/Reload isn't useful on its own, but is a step away from "Show whitespace as...", "Highlight as...", "Show tabtops as...", "View Unified", "View Side-By-Side", etc. Test Plan: - Viewed Differential. - Viewed Diffusion. - Viewed large changesets, clicked "Load". - Used "Load" and "Reload" from view options menu. - Loaded all changes in a large diff, verified "Load" and TOC clicks take precedence over other content loads. - Played with content stability stuff. Reviewers: btrahan Reviewed By: btrahan Subscribers: epriestley Maniphest Tasks: T5179 Differential Revision: https://secure.phabricator.com/D9286
98 lines
2.5 KiB
JavaScript
98 lines
2.5 KiB
JavaScript
/**
|
|
* @provides javelin-behavior-differential-populate
|
|
* @requires javelin-behavior
|
|
* javelin-dom
|
|
* javelin-stratcom
|
|
* phabricator-tooltip
|
|
* changeset-view-manager
|
|
*/
|
|
|
|
JX.behavior('differential-populate', function(config) {
|
|
|
|
for (var ii = 0; ii < config.changesetViewIDs.length; ii++) {
|
|
var id = config.changesetViewIDs[ii];
|
|
var view = JX.ChangesetViewManager.getForNode(JX.$(id));
|
|
if (view.shouldAutoload()) {
|
|
view.setStabilize(true).load();
|
|
}
|
|
}
|
|
|
|
JX.Stratcom.listen(
|
|
'click',
|
|
'differential-load',
|
|
function(e) {
|
|
var meta = e.getNodeData('differential-load');
|
|
var changeset = JX.$(meta.id);
|
|
var view = JX.ChangesetViewManager.getForNode(changeset);
|
|
|
|
view.load();
|
|
var routable = view.getRoutable();
|
|
if (routable) {
|
|
routable.setPriority(2000);
|
|
}
|
|
|
|
if (meta.kill) {
|
|
e.kill();
|
|
}
|
|
});
|
|
|
|
var highlighted = null;
|
|
var highlight_class = null;
|
|
|
|
JX.Stratcom.listen(
|
|
['mouseover', 'mouseout'],
|
|
['differential-changeset', 'tag:td'],
|
|
function(e) {
|
|
var t = e.getTarget();
|
|
|
|
// NOTE: Using className is not best practice, but the diff UI is perf
|
|
// sensitive.
|
|
if (!t.className.match(/cov|copy/)) {
|
|
return;
|
|
}
|
|
|
|
if (e.getType() == 'mouseout') {
|
|
JX.Tooltip.hide();
|
|
if (highlighted) {
|
|
JX.DOM.alterClass(highlighted, highlight_class, false);
|
|
highlighted = null;
|
|
}
|
|
} else {
|
|
highlight_class = null;
|
|
var msg;
|
|
var align = 'W';
|
|
var sibling = 'previousSibling';
|
|
var width = 120;
|
|
if (t.className.match(/cov-C/)) {
|
|
msg = 'Covered';
|
|
highlight_class = 'source-cov-C';
|
|
} else if (t.className.match(/cov-U/)) {
|
|
msg = 'Not Covered';
|
|
highlight_class = 'source-cov-U';
|
|
} else if (t.className.match(/cov-N/)) {
|
|
msg = 'Not Executable';
|
|
highlight_class = 'source-cov-N';
|
|
} else {
|
|
var match = /new-copy|new-move/.exec(t.className);
|
|
if (match) {
|
|
sibling = 'nextSibling';
|
|
width = 500;
|
|
msg = JX.Stratcom.getData(t).msg;
|
|
highlight_class = match[0];
|
|
}
|
|
}
|
|
|
|
if (msg) {
|
|
JX.Tooltip.show(t, width, align, msg);
|
|
}
|
|
|
|
if (highlight_class) {
|
|
highlighted = t[sibling];
|
|
JX.DOM.alterClass(highlighted, highlight_class, true);
|
|
}
|
|
}
|
|
|
|
});
|
|
|
|
|
|
});
|