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 = {};
|
2013-05-19 02:04:22 +02:00
|
|
|
var field;
|
|
|
|
for (field in config.previewTokenizers) {
|
2011-12-23 02:59:00 +01:00
|
|
|
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);
|
2015-05-20 22:54:22 +02:00
|
|
|
var data = getdata();
|
|
|
|
var hide = true;
|
|
|
|
for (var field in data) {
|
|
|
|
if (field == 'action') {
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
if (data[field]) {
|
|
|
|
hide = false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (hide) {
|
|
|
|
JX.DOM.hide(preview);
|
|
|
|
} else {
|
|
|
|
JX.DOM.setContent(preview, JX.$H(r));
|
|
|
|
JX.Stratcom.invoke('differential-preview-update', null, {
|
|
|
|
container: preview
|
|
|
|
});
|
|
|
|
JX.DOM.show(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);
|
|
|
|
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);
|
2013-05-19 02:04:22 +02:00
|
|
|
for (field in previewTokenizers) {
|
2011-12-23 02:59:00 +01:00
|
|
|
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) {
|
When deleting inline comments, offer "undo" instead of prompting
Summary:
Ref T2009. Ref T1460.
Fixes T2618. When users hit "Delete" on inline comments, delete immediately and offer them "Undo". If they delete indirectly (e.g., by clicking "Delete" from the preview at the bottom of the page), we still prompt them, because the "Undo" action either won't be available or may not be easy to find. This is a "refdelete".
Fixes T6464. This was just a mess. Make it not as much of a mess. It should work now. Pretty sure.
Fixes T4999. We did not refresh these links often enough to find targets for them, so they could race with content. Reevaluate them after loading new changes.
Test Plan:
- Deleted and undid deletion of inlines from main view and preview.
- Clicked "View" on inlines.
Reviewers: btrahan
Reviewed By: btrahan
Subscribers: epriestley
Maniphest Tasks: T6464, T4999, T2618, T1460, T2009
Differential Revision: https://secure.phabricator.com/D12032
2015-03-10 01:27:51 +01:00
|
|
|
var inline = JX.$(config.inline);
|
|
|
|
|
|
|
|
JX.DOM.setContent(inline, JX.$H(r));
|
|
|
|
JX.Stratcom.invoke('differential-preview-update', null, {
|
|
|
|
container: inline
|
|
|
|
});
|
|
|
|
|
|
|
|
updateLinks();
|
|
|
|
})
|
|
|
|
.setTimeout(5000)
|
|
|
|
.send();
|
|
|
|
}
|
|
|
|
|
|
|
|
function updateLinks() {
|
|
|
|
var inline = JX.$(config.inline);
|
|
|
|
|
|
|
|
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
|
|
|
}
|
|
|
|
|
When deleting inline comments, offer "undo" instead of prompting
Summary:
Ref T2009. Ref T1460.
Fixes T2618. When users hit "Delete" on inline comments, delete immediately and offer them "Undo". If they delete indirectly (e.g., by clicking "Delete" from the preview at the bottom of the page), we still prompt them, because the "Undo" action either won't be available or may not be easy to find. This is a "refdelete".
Fixes T6464. This was just a mess. Make it not as much of a mess. It should work now. Pretty sure.
Fixes T4999. We did not refresh these links often enough to find targets for them, so they could race with content. Reevaluate them after loading new changes.
Test Plan:
- Deleted and undid deletion of inlines from main view and preview.
- Clicked "View" on inlines.
Reviewers: btrahan
Reviewed By: btrahan
Subscribers: epriestley
Maniphest Tasks: T6464, T4999, T2618, T1460, T2009
Differential Revision: https://secure.phabricator.com/D12032
2015-03-10 01:27:51 +01:00
|
|
|
|
2011-02-03 04:38:43 +01:00
|
|
|
JX.Stratcom.listen(
|
|
|
|
'differential-inline-comment-update',
|
|
|
|
null,
|
|
|
|
refreshInlinePreview);
|
|
|
|
|
When deleting inline comments, offer "undo" instead of prompting
Summary:
Ref T2009. Ref T1460.
Fixes T2618. When users hit "Delete" on inline comments, delete immediately and offer them "Undo". If they delete indirectly (e.g., by clicking "Delete" from the preview at the bottom of the page), we still prompt them, because the "Undo" action either won't be available or may not be easy to find. This is a "refdelete".
Fixes T6464. This was just a mess. Make it not as much of a mess. It should work now. Pretty sure.
Fixes T4999. We did not refresh these links often enough to find targets for them, so they could race with content. Reevaluate them after loading new changes.
Test Plan:
- Deleted and undid deletion of inlines from main view and preview.
- Clicked "View" on inlines.
Reviewers: btrahan
Reviewed By: btrahan
Subscribers: epriestley
Maniphest Tasks: T6464, T4999, T2618, T1460, T2009
Differential Revision: https://secure.phabricator.com/D12032
2015-03-10 01:27:51 +01:00
|
|
|
JX.Stratcom.listen(
|
|
|
|
'differential-inline-comment-refresh',
|
|
|
|
null,
|
|
|
|
updateLinks);
|
|
|
|
|
2011-12-07 22:49:56 +01:00
|
|
|
refreshInlinePreview();
|
2011-02-01 03:05:20 +01:00
|
|
|
});
|