StructureJS
0.15.2A class based utility library for building modular and scalable web platform applications. Features opt-in classes and utilities which provide a solid foundation and toolset to build your next project.
- import EventDispatcher from '../event/EventDispatcher';
- import NetworkMonitorEvent from '../event/NetworkMonitorEvent';
- import NavigatorEvents from '../event/native/NavigatorEvents';
- /**
- * A helper class to detect network changes.
- *
- * @class NetworkMonitor
- * @constructor
- * @requires EventDispatcher
- * @requires NavigatorEvents
- * @requires NetworkMonitorEvent
- * @author Robert S. (www.codeBelt.com)
- * @static
- */
- class NetworkMonitor
- {
- /**
- * A reference to the EventDispatcher object.
- *
- * @property _eventDispatcher
- * @type {EventDispatcher}
- * @private
- * @static
- */
- private static _eventDispatcher:EventDispatcher = new EventDispatcher();
- /**
- * A flag to determine if this class has already been initialized.
- *
- * @property _initialized
- * @type {boolean}
- * @private
- */
- private static _initialized:boolean = false;
- constructor()
- {
- throw new Error('[NetworkMonitor] Do not instantiate the NetworkMonitor class because it is a static class.');
- }
- /**
- * Returns the online status of the browser. The property returns a boolean value, with true for being online and false for being offline.
- * @example
- * NetworkMonitor.connected();
- * @method connected
- * @returns {boolean}
- * @static
- * @public
- */
- public static connected():boolean
- {
- NetworkMonitor._start();
- return window.navigator.onLine;
- }
- /**
- * Returns if the status type ('online' or 'offline') if computer or device is connected to the internet.
- * @example
- * NetworkMonitor.getStatus();
- * @method getStatus
- * @returns {string} Returns 'online' or 'offline'.
- * @public
- * @static
- */
- public static getStatus():string
- {
- NetworkMonitor._start();
- return (this.connected()) ? NavigatorEvents.ONLINE : NavigatorEvents.OFFLINE;
- }
- /**
- * Registers an event listener object with an NetworkMonitor object so that the listener receives notification of an event.
- * @example
- * NetworkMonitor.addEventListener(NetworkMonitorEvent.STATUS, this._handlerMethod, this);
- * _handlerMethod(event) {
- * console.log(event.status, event.connected);
- * }
- * @method addEventListener
- * @param type {String} The type of event.
- * @param callback {Function} The listener function that processes the event. This function must accept an Event object as its only parameter and must return nothing, as this example shows.
- * @param scope {any} Binds the scope to a particular object (scope is basically what "this" refers to in your function). This can be very useful in JavaScript because scope isn't generally maintained.
- * @param [priority=0] {int} Influences the order in which the listeners are called. Listeners with lower priorities are called after ones with higher priorities.
- * @static
- * @public
- */
- public static addEventListener(type:string, callback:Function, scope:any, priority:number = 0):void
- {
- NetworkMonitor._start();
- NetworkMonitor._eventDispatcher.addEventListener(type, callback, scope, priority);
- }
- /**
- * Removes a specified listener from the NetworkMonitor object.
- * @example
- * NetworkMonitor.removeEventListener(NetworkMonitorEvent.STATUS, this._handlerMethod, this);
- * _handlerMethod(event) {
- * console.log(event.status, event.connected);
- * }
- * @method removeEventListener
- * @param type {String} The type of event.
- * @param callback {Function} The listener object to remove.
- * @param scope {any} The scope of the listener object to be removed.
- * To keep things consistent this parameter is required.
- * @static
- * @public
- */
- public static removeEventListener(type:string, callback:Function, scope:any):void
- {
- NetworkMonitor._eventDispatcher.removeEventListener(type, callback, scope);
- }
- /**
- * Adds the necessary event listeners to listen for the 'online' and 'offline' events.
- *
- * @method _start
- * @static
- * @private
- */
- private static _start():void
- {
- if (NetworkMonitor._initialized === true)
- {
- return;
- }
- else
- {
- NetworkMonitor._initialized = true;
- }
- window.addEventListener(NavigatorEvents.ONLINE, NetworkMonitor._onNetworkMonitorEvent, false);
- window.addEventListener(NavigatorEvents.OFFLINE, NetworkMonitor._onNetworkMonitorEvent, false);
- }
- /**
- * An event handler method when the native Window 'online' and 'offline' events are triggered.
- *
- * @method _onNetworkMonitorEvent
- * @param event
- * @private
- * @static
- */
- private static _onNetworkMonitorEvent(event):void
- {
- const type:string = (event) ? event.type : NetworkMonitor.getStatus();
- const networkMonitorEvent:NetworkMonitorEvent = new NetworkMonitorEvent(NetworkMonitorEvent.STATUS, false, false, type, NetworkMonitor.connected(), event);
- NetworkMonitor._dispatchEvent(networkMonitorEvent);
- }
- /**
- * <p>Dispatches an event within the NetworkMonitorEvent object.</p>
- * @method _dispatchEvent
- * @param event {NetworkMonitorEvent} The Event object that is dispatched into the event flow. You can create custom events, the only requirement is all events must
- * extend the {{#crossLink "NetworkMonitorEvent"}}{{/crossLink}}.
- * @static
- * @private
- */
- private static _dispatchEvent(event:NetworkMonitorEvent):void
- {
- NetworkMonitor._eventDispatcher.dispatchEvent(event);
- }
- }
- export default NetworkMonitor;