You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tt-rss/lib/dojo/request/notify.js.uncompressed.js

75 lines
2.0 KiB
JavaScript

define("dojo/request/notify", ['../Evented', '../_base/lang', './util'], function(Evented, lang, util){
// module:
// dojo/request/notify
// summary:
// Global notification API for dojo/request. Notifications will
// only be emitted if this module is required.
//
// | require('dojo/request', 'dojo/request/notify',
// | function(request, notify){
// | notify('load', function(response){
// | if(response.url === 'someUrl.html'){
// | console.log('Loaded!');
// | }
// | });
// | request.get('someUrl.html');
// | }
// | );
var pubCount = 0,
slice = [].slice;
var hub = lang.mixin(new Evented, {
onsend: function(data){
if(!pubCount){
this.emit('start');
}
pubCount++;
},
_onload: function(data){
this.emit('done', data);
},
_onerror: function(data){
this.emit('done', data);
},
_ondone: function(data){
if(--pubCount <= 0){
pubCount = 0;
this.emit('stop');
}
},
emit: function(type, event){
var result = Evented.prototype.emit.apply(this, arguments);
// After all event handlers have run, run _on* handler
if(this['_on' + type]){
this['_on' + type].apply(this, slice.call(arguments, 1));
}
return result;
}
});
function notify(type, listener){
// summary:
// Register a listener to be notified when an event
// in dojo/request happens.
// type: String?
// The event to listen for. Events emitted: "start", "send",
// "load", "error", "done", "stop".
// listener: Function?
// A callback to be run when an event happens.
// returns:
// A signal object that can be used to cancel the listener.
// If remove() is called on this signal object, it will
// stop the listener from being executed.
return hub.on(type, listener);
}
notify.emit = function(type, event, cancel){
return hub.emit(type, event, cancel);
};
// Attach notify to dojo/request/util to avoid
// try{ require('./notify'); }catch(e){}
return util.notify = notify;
});