phorge/webroot/rsrc/js/application/differential/behavior-show-more.js
epriestley d2954dae40 Use Workflow, not Request, for Differential populate/show more requests
Summary: When a JX.Request fails, there's no default error handling. Rather than
write some kind of custom stuff, just use JX.Workflow so we get exception
dialogs. We have plans to enhance these anyway (see T302).
Test Plan: Changed the changeset view controller to throw exceptions. Verified I
got un-mysterious exception dialogs when a changeset failed because of an
exception in either initial rendering or after hitting "see more".
Reviewed By: tomo
Reviewers: jungejason, tuomaspelkonen, aran, tomo
CC: aran, epriestley, tomo
Differential Revision: 679
2011-07-16 19:15:54 -07:00

49 lines
1.3 KiB
JavaScript

/**
* @provides javelin-behavior-differential-show-more
* @requires javelin-behavior
* javelin-dom
* javelin-workflow
* javelin-util
* javelin-stratcom
*/
JX.behavior('differential-show-more', function(config) {
function onresponse(origin, response) {
var div = JX.$N('div', {}, JX.$H(response));
var anchor = origin.getNode('context-target');
var root = anchor.parentNode;
copyRows(root, div, anchor);
root.removeChild(anchor);
}
JX.Stratcom.listen(
'click',
'show-more',
function(e) {
var context = e.getNodes()['context-target'];
var container = JX.DOM.find(context, 'td');
JX.DOM.setContent(container, 'Loading...');
JX.DOM.alterClass(context, 'differential-show-more-loading', true);
var data = e.getNodeData('show-more');
data['whitespace'] = config.whitespace;
new JX.Workflow(config.uri, data)
.setHandler(JX.bind(null, onresponse, e))
.start();
e.kill();
});
});
function copyRows(dst, src, before) {
var rows = JX.DOM.scry(src, 'tr');
for (var ii = 0; ii < rows.length; ii++) {
if (before) {
dst.insertBefore(rows[ii], before);
} else {
dst.appendChild(rows[ii]);
}
}
return rows;
}