Summary: Ref T3373. This is still pretty messy: - The JS bugs out a bit with multiple primary object PHIDs on a single page. I'll fix this in a followup. - The comment form itself is enormous, I'll restore some show/hide stuff in a followup. Test Plan: Added answer comments in Ponder. Reviewers: btrahan Reviewed By: btrahan CC: aran Maniphest Tasks: T3373 Differential Revision: https://secure.phabricator.com/D6608
81 lines
2.0 KiB
JavaScript
81 lines
2.0 KiB
JavaScript
/**
|
|
* @provides javelin-behavior-phabricator-transaction-comment-form
|
|
* @requires javelin-behavior
|
|
* javelin-dom
|
|
* javelin-util
|
|
* javelin-fx
|
|
* javelin-request
|
|
* phabricator-shaped-request
|
|
*/
|
|
|
|
JX.behavior('phabricator-transaction-comment-form', function(config) {
|
|
|
|
var form = JX.$(config.formID);
|
|
|
|
JX.DOM.listen(form, 'willSubmit', null, function (e) {
|
|
e.kill();
|
|
if (config.showPreview) {
|
|
var preview = JX.$(config.panelID);
|
|
preview.style.opacity = 0.5;
|
|
}
|
|
});
|
|
|
|
JX.DOM.listen(form, 'willClear', null, function(e) {
|
|
JX.$(config.commentID).value = '';
|
|
|
|
if (config.showPreview) {
|
|
var preview = JX.$(config.panelID);
|
|
new JX.FX(preview)
|
|
.setDuration(500)
|
|
.then(function () {
|
|
new JX.FX(preview).setDuration(1000).start({opacity: [0, 1]});
|
|
})
|
|
.start({opacity: [0.5, 0]});
|
|
}
|
|
});
|
|
|
|
var getdata = function() {
|
|
var obj = JX.DOM.convertFormToDictionary(form);
|
|
obj.__preview__ = 1;
|
|
|
|
if (config.draftKey) {
|
|
obj.__draft__ = config.draftKey;
|
|
}
|
|
|
|
return obj;
|
|
};
|
|
|
|
var onresponse = function(response) {
|
|
var panel = JX.$(config.panelID);
|
|
if (!response.xactions.length) {
|
|
JX.DOM.hide(panel);
|
|
} else {
|
|
JX.DOM.setContent(
|
|
JX.$(config.timelineID),
|
|
[
|
|
JX.$H(response.spacer),
|
|
JX.$H(response.xactions.join(response.spacer)),
|
|
JX.$H(response.spacer)
|
|
]);
|
|
JX.DOM.show(panel);
|
|
}
|
|
};
|
|
|
|
if (config.showPreview) {
|
|
var request = new JX.PhabricatorShapedRequest(
|
|
config.actionURI,
|
|
onresponse,
|
|
getdata);
|
|
var trigger = JX.bind(request, request.trigger);
|
|
JX.DOM.listen(form, 'keydown', null, trigger);
|
|
var always_trigger = function() {
|
|
new JX.Request(config.actionURI, onresponse)
|
|
.setData(getdata())
|
|
.send();
|
|
};
|
|
JX.DOM.listen(form, 'shouldRefresh', null, always_trigger);
|
|
|
|
request.start();
|
|
}
|
|
});
|