mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-27 17:22:42 +01:00
5a1d89227b
Summary: The highlighting is distracting according to Nick Shrock and others. Real designer, Lee Byron, helped me with this. It also gives us unagressive target for jumping to the source line in future. Another feature I will probably implement is highlighting also the source of copies/moves. I will use the right side of the left column for it. Test Plan: Hover copied notifier. Hover coverage notifier. I've also checked that this doesn't break our super-flaky old/new code JavaScript detector. Reviewers: epriestley Reviewed By: epriestley CC: aran, Koolvin, leebyron, schrockn Differential Revision: https://secure.phabricator.com/D2443
116 lines
2.9 KiB
JavaScript
116 lines
2.9 KiB
JavaScript
/**
|
|
* @provides javelin-behavior-differential-populate
|
|
* @requires javelin-behavior
|
|
* javelin-workflow
|
|
* javelin-util
|
|
* javelin-dom
|
|
* javelin-stratcom
|
|
* phabricator-tooltip
|
|
*/
|
|
|
|
JX.behavior('differential-populate', function(config) {
|
|
|
|
function onresponse(target, response) {
|
|
JX.DOM.replace(JX.$(target), JX.$H(response.changeset));
|
|
if (response.coverage) {
|
|
for (var k in response.coverage) {
|
|
try {
|
|
JX.DOM.replace(JX.$(k), JX.$H(response.coverage[k]));
|
|
} catch (ignored) {
|
|
// Not terribly important.
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
for (var k in config.registry) {
|
|
var data = {
|
|
ref : config.registry[k],
|
|
whitespace: config.whitespace
|
|
};
|
|
|
|
new JX.Workflow(config.uri, data)
|
|
.setHandler(JX.bind(null, onresponse, k))
|
|
.start();
|
|
}
|
|
|
|
var highlighted = null;
|
|
var highlight_class = null;
|
|
|
|
JX.Stratcom.listen(
|
|
'click',
|
|
'differential-load',
|
|
function(e) {
|
|
var meta = e.getNodeData('differential-load');
|
|
JX.DOM.setContent(
|
|
JX.$(meta.id),
|
|
JX.$H('<div class="differential-loading">Loading...</div>'));
|
|
var data = {
|
|
ref : meta.ref,
|
|
whitespace : config.whitespace
|
|
};
|
|
new JX.Workflow(config.uri, data)
|
|
.setHandler(JX.bind(null, onresponse, meta.id))
|
|
.start();
|
|
if (meta.kill) {
|
|
e.kill();
|
|
}
|
|
});
|
|
|
|
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 = 'E';
|
|
var sibling = 'previousSibling';
|
|
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) {
|
|
align = 'N'; // TODO: 'W'
|
|
sibling = 'nextSibling';
|
|
msg = JX.Stratcom.getData(t).msg;
|
|
highlight_class = match[0];
|
|
}
|
|
}
|
|
|
|
if (msg) {
|
|
JX.Tooltip.show(t, 120, align, msg);
|
|
}
|
|
|
|
if (highlight_class) {
|
|
highlighted = t[sibling];
|
|
JX.DOM.alterClass(highlighted, highlight_class, true);
|
|
}
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
});
|