source: Dev/trunk/src/client/dojo/request/notify.js @ 485

Last change on this file since 485 was 483, checked in by hendrikvanantwerpen, 11 years ago

Added Dojo 1.9.3 release.

File size: 2.0 KB
Line 
1define(['../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});
Note: See TracBrowser for help on using the repository browser.