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;