75 lines
2.0 KiB
JavaScript
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;
|
|
});
|