]> git.wh0rd.org - tt-rss.git/blob - lib/dojo/request/notify.js.uncompressed.js
upgrade dojo to 1.8.3 (refs #570)
[tt-rss.git] / lib / dojo / request / notify.js.uncompressed.js
1 define("dojo/request/notify", ['../Evented', '../_base/lang', './util'], function(Evented, lang, util){
2 // module:
3 // dojo/request/notify
4 // summary:
5 // Global notification API for dojo/request. Notifications will
6 // only be emitted if this module is required.
7 //
8 // | require('dojo/request', 'dojo/request/notify',
9 // | function(request, notify){
10 // | notify('load', function(response){
11 // | if(response.url === 'someUrl.html'){
12 // | console.log('Loaded!');
13 // | }
14 // | });
15 // | request.get('someUrl.html');
16 // | }
17 // | );
18
19 var pubCount = 0,
20 slice = [].slice;
21
22 var hub = lang.mixin(new Evented, {
23 onsend: function(data){
24 if(!pubCount){
25 this.emit('start');
26 }
27 pubCount++;
28 },
29 _onload: function(data){
30 this.emit('done', data);
31 },
32 _onerror: function(data){
33 this.emit('done', data);
34 },
35 _ondone: function(data){
36 if(--pubCount <= 0){
37 pubCount = 0;
38 this.emit('stop');
39 }
40 },
41 emit: function(type, event){
42 var result = Evented.prototype.emit.apply(this, arguments);
43
44 // After all event handlers have run, run _on* handler
45 if(this['_on' + type]){
46 this['_on' + type].apply(this, slice.call(arguments, 1));
47 }
48 return result;
49 }
50 });
51
52 function notify(type, listener){
53 // summary:
54 // Register a listener to be notified when an event
55 // in dojo/request happens.
56 // type: String?
57 // The event to listen for. Events emitted: "start", "send",
58 // "load", "error", "done", "stop".
59 // listener: Function?
60 // A callback to be run when an event happens.
61 // returns:
62 // A signal object that can be used to cancel the listener.
63 // If remove() is called on this signal object, it will
64 // stop the listener from being executed.
65 return hub.on(type, listener);
66 }
67 notify.emit = function(type, event, cancel){
68 return hub.emit(type, event, cancel);
69 };
70
71 // Attach notify to dojo/request/util to avoid
72 // try{ require('./notify'); }catch(e){}
73 return util.notify = notify;
74 });