mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-03 04:02:43 +01:00
1855ed4bee
Summary: Trigger the crossreference behavior on code blocks. Limited to Differential, where we know what the project is, but includes regular comments, inline comments, and previews of both. (Hopefully event handlers on deleted elements also get deleted, so we don't leak memory? Also, caching is a problem, and I didn't find a way to mark existing cache entries as stale, like `DifferentialChangesetParser::CACHE_VERSION`...) Test Plan: Load Differential revision, make lots of comments, click on things. Reviewers: epriestley Reviewed By: epriestley CC: aran, Korvin Maniphest Tasks: T1602 Differential Revision: https://secure.phabricator.com/D3283
89 lines
2.5 KiB
JavaScript
89 lines
2.5 KiB
JavaScript
/**
|
|
* @provides javelin-behavior-differential-feedback-preview
|
|
* @requires javelin-behavior
|
|
* javelin-stratcom
|
|
* javelin-dom
|
|
* javelin-request
|
|
* javelin-util
|
|
* phabricator-shaped-request
|
|
*/
|
|
|
|
JX.behavior('differential-feedback-preview', function(config) {
|
|
|
|
var action = JX.$(config.action);
|
|
var content = JX.$(config.content);
|
|
var previewTokenizers = {};
|
|
for (var field in config.previewTokenizers) {
|
|
var tokenizer = JX.$(config.previewTokenizers[field]);
|
|
previewTokenizers[field] = JX.Stratcom.getData(tokenizer).tokenizer;
|
|
}
|
|
|
|
var callback = function(r) {
|
|
var preview = JX.$(config.preview);
|
|
JX.DOM.setContent(preview, JX.$H(r));
|
|
JX.Stratcom.invoke('differential-preview-update', null, {
|
|
container: preview
|
|
});
|
|
};
|
|
|
|
var getdata = function() {
|
|
var data = {
|
|
content : content.value,
|
|
action : action.value
|
|
};
|
|
for (var field in previewTokenizers) {
|
|
data[field] = JX.keys(previewTokenizers[field].getTokens()).join(',');
|
|
}
|
|
return data;
|
|
};
|
|
|
|
var request = new JX.PhabricatorShapedRequest(config.uri, callback, getdata);
|
|
var trigger = JX.bind(request, request.trigger);
|
|
|
|
JX.DOM.listen(content, 'keydown', null, trigger);
|
|
JX.DOM.listen(action, 'change', null, trigger);
|
|
for (var field in previewTokenizers) {
|
|
previewTokenizers[field].listen('change', trigger);
|
|
}
|
|
|
|
request.start();
|
|
|
|
|
|
function refreshInlinePreview() {
|
|
new JX.Request(config.inlineuri, function(r) {
|
|
var inline = JX.$(config.inline);
|
|
|
|
JX.DOM.setContent(inline, JX.$H(r));
|
|
JX.Stratcom.invoke('differential-preview-update', null, {
|
|
container: inline
|
|
});
|
|
|
|
// Go through the previews and activate any "View" links where the
|
|
// actual comment appears in the document.
|
|
|
|
var links = JX.DOM.scry(
|
|
inline,
|
|
'a',
|
|
'differential-inline-preview-jump');
|
|
for (var ii = 0; ii < links.length; ii++) {
|
|
var data = JX.Stratcom.getData(links[ii]);
|
|
try {
|
|
JX.$(data.anchor);
|
|
links[ii].href = '#' + data.anchor;
|
|
JX.DOM.setContent(links[ii], 'View');
|
|
} catch (ignored) {
|
|
// This inline comment isn't visible, e.g. on some other diff.
|
|
}
|
|
}
|
|
})
|
|
.setTimeout(5000)
|
|
.send();
|
|
}
|
|
|
|
JX.Stratcom.listen(
|
|
'differential-inline-comment-update',
|
|
null,
|
|
refreshInlinePreview);
|
|
|
|
refreshInlinePreview();
|
|
});
|