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) {
|
|
|
|
JX.DOM.setContent(JX.$(config.preview), JX.$H(r));
|
|
|
|
};
|
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);
|
|
|
|
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));
|
|
|
|
|
|
|
|
// 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
|
|
|
});
|