UNPKG

dojo

Version:

Dojo core is a powerful, lightweight library that makes common tasks quicker and easier. Animate elements, manipulate the DOM, and query with easy CSS syntax, all without sacrificing performance.

75 lines (69 loc) 2.03 kB
define(['../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; });