2011-02-01 03:05:20 +01:00
|
|
|
/**
|
|
|
|
* @provides javelin-behavior-differential-feedback-preview
|
Bring Javelin into Phabricator via git submodule, not copy-and-paste
Summary:
Javelin is currently embedded in Phabricator via copy-and-paste of prebuilt
packages. This is not so great.
Pull it in as a submodule instead and make all the Phabriator resources declare
proper dependency trees. Add Javelin linting.
Test Plan:
I tried to run through pretty much all the JS functionality on the site. This is
still a high-risk change, but I did a pretty thorough test
Differential: inline comments, revealing diffs, list tokenizers, comment
preview, editing/deleting comments, add review action.
Maniphest: list tokenizer, comment actions
Herald: rule editing, tokenizers, add/remove rows
Reviewed By: tomo
Reviewers: aran, tomo, mroch, jungejason, tuomaspelkonen
CC: aran, tomo, epriestley
Differential Revision: 223
2011-05-04 00:11:55 +02:00
|
|
|
* @requires javelin-behavior
|
|
|
|
* javelin-stratcom
|
|
|
|
* javelin-dom
|
|
|
|
* javelin-request
|
|
|
|
* javelin-util
|
2011-05-10 17:29:28 +02:00
|
|
|
* phabricator-shaped-request
|
2011-02-01 03:05:20 +01:00
|
|
|
*/
|
|
|
|
|
|
|
|
JX.behavior('differential-feedback-preview', function(config) {
|
|
|
|
|
|
|
|
var action = JX.$(config.action);
|
|
|
|
var content = JX.$(config.content);
|
2011-12-23 02:59:00 +01:00
|
|
|
var previewTokenizers = {};
|
|
|
|
for (var field in config.previewTokenizers) {
|
|
|
|
var tokenizer = JX.$(config.previewTokenizers[field]);
|
|
|
|
previewTokenizers[field] = JX.Stratcom.getData(tokenizer).tokenizer;
|
|
|
|
}
|
2011-02-01 03:05:20 +01:00
|
|
|
|
2011-05-10 17:29:28 +02:00
|
|
|
var callback = function(r) {
|
Support symbol linking in Remarkup code blocks
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
2012-08-14 23:03:26 +02:00
|
|
|
var preview = JX.$(config.preview);
|
|
|
|
JX.DOM.setContent(preview, JX.$H(r));
|
|
|
|
JX.Stratcom.invoke('differential-preview-update', null, {
|
|
|
|
container: preview
|
|
|
|
});
|
2011-05-10 17:29:28 +02:00
|
|
|
};
|
2011-02-01 03:05:20 +01:00
|
|
|
|
2011-05-10 17:29:28 +02:00
|
|
|
var getdata = function() {
|
2011-12-23 02:59:00 +01:00
|
|
|
var data = {
|
2011-05-10 17:29:28 +02:00
|
|
|
content : content.value,
|
|
|
|
action : action.value
|
|
|
|
};
|
2011-12-23 02:59:00 +01:00
|
|
|
for (var field in previewTokenizers) {
|
|
|
|
data[field] = JX.keys(previewTokenizers[field].getTokens()).join(',');
|
|
|
|
}
|
|
|
|
return data;
|
2011-05-10 17:29:28 +02:00
|
|
|
};
|
2011-02-01 03:05:20 +01:00
|
|
|
|
2011-05-10 17:29:28 +02:00
|
|
|
var request = new JX.PhabricatorShapedRequest(config.uri, callback, getdata);
|
2012-10-01 23:56:57 +02:00
|
|
|
request.listen('error', function (error) {
|
|
|
|
JX.DOM.setContent(JX.$(config.preview), JX.$H('ERROR: ' + error.info));
|
|
|
|
});
|
|
|
|
|
2011-05-10 17:29:28 +02:00
|
|
|
var trigger = JX.bind(request, request.trigger);
|
2011-02-01 03:05:20 +01:00
|
|
|
|
2011-05-10 17:29:28 +02:00
|
|
|
JX.DOM.listen(content, 'keydown', null, trigger);
|
|
|
|
JX.DOM.listen(action, 'change', null, trigger);
|
2011-12-23 02:59:00 +01:00
|
|
|
for (var field in previewTokenizers) {
|
|
|
|
previewTokenizers[field].listen('change', trigger);
|
|
|
|
}
|
2011-02-01 03:05:20 +01:00
|
|
|
|
2011-12-07 22:49:56 +01:00
|
|
|
request.start();
|
2011-02-03 04:38:43 +01:00
|
|
|
|
|
|
|
|
|
|
|
function refreshInlinePreview() {
|
|
|
|
new JX.Request(config.inlineuri, function(r) {
|
2012-03-28 19:11:41 +02:00
|
|
|
var inline = JX.$(config.inline);
|
|
|
|
|
|
|
|
JX.DOM.setContent(inline, JX.$H(r));
|
Support symbol linking in Remarkup code blocks
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
2012-08-14 23:03:26 +02:00
|
|
|
JX.Stratcom.invoke('differential-preview-update', null, {
|
|
|
|
container: inline
|
|
|
|
});
|
2012-03-28 19:11:41 +02:00
|
|
|
|
|
|
|
// 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.
|
|
|
|
}
|
|
|
|
}
|
2011-02-03 04:38:43 +01:00
|
|
|
})
|
|
|
|
.setTimeout(5000)
|
|
|
|
.send();
|
|
|
|
}
|
|
|
|
|
|
|
|
JX.Stratcom.listen(
|
|
|
|
'differential-inline-comment-update',
|
|
|
|
null,
|
|
|
|
refreshInlinePreview);
|
|
|
|
|
2011-12-07 22:49:56 +01:00
|
|
|
refreshInlinePreview();
|
2011-02-01 03:05:20 +01:00
|
|
|
});
|