mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-10 17:02:41 +01:00
50 lines
1.3 KiB
JavaScript
50 lines
1.3 KiB
JavaScript
/**
|
|
* @provides javelin-behavior-differential-feedback-preview
|
|
* @requires javelin-lib-dev
|
|
*/
|
|
|
|
JX.behavior('differential-feedback-preview', function(config) {
|
|
|
|
var action = JX.$(config.action);
|
|
var content = JX.$(config.content);
|
|
var preview = JX.$(config.preview);
|
|
|
|
var aval = null;//action.value;
|
|
var cval = null;//content.value;
|
|
var defer = null;
|
|
var min = null;
|
|
var request = null;
|
|
|
|
function check() {
|
|
if (request || (min && (new Date().getTime() < min))) {
|
|
// Waiting on an async or just got one back, rate-limit.
|
|
return;
|
|
}
|
|
|
|
defer && defer.stop();
|
|
|
|
if (action.value !== aval || content.value !== cval) {
|
|
aval = action.value;
|
|
cval = content.value;
|
|
|
|
request = new JX.Request(config.uri, function(r) {
|
|
preview && JX.DOM.setContent(preview, JX.HTML(r));
|
|
min = new Date().getTime() + 500;
|
|
defer && defer.stop();
|
|
defer = JX.defer(check, 500);
|
|
});
|
|
request.listen('finally', function() { request = null; });
|
|
request.setData({action : aval, content : cval});
|
|
// If we don't get a response back soon, retry on the next action.
|
|
request.setTimeout(2000);
|
|
request.send();
|
|
} else {
|
|
defer = JX.defer(check, 2000);
|
|
}
|
|
}
|
|
|
|
JX.DOM.listen(content, 'keydown', null, check);
|
|
JX.DOM.listen(action, 'change', null, check);
|
|
|
|
check();
|
|
});
|