diff options
| author | Jules Laplace <jules@okfoc.us> | 2015-09-10 14:58:03 -0400 |
|---|---|---|
| committer | Jules Laplace <jules@okfoc.us> | 2015-09-10 14:58:03 -0400 |
| commit | d73a4b1c5a2540077607dcc4001acbae85980ae4 (patch) | |
| tree | c30089f1742f9430bb18679dc6664157a5dc66f4 /StoneIsland/plugins/cordova-plugin-network-information/www/browser | |
| parent | 124e6c0a8d9577b4a30e0b265f5c23d637c41966 (diff) | |
app skeleton
Diffstat (limited to 'StoneIsland/plugins/cordova-plugin-network-information/www/browser')
| -rw-r--r-- | StoneIsland/plugins/cordova-plugin-network-information/www/browser/network.js | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/StoneIsland/plugins/cordova-plugin-network-information/www/browser/network.js b/StoneIsland/plugins/cordova-plugin-network-information/www/browser/network.js new file mode 100644 index 00000000..72ec5139 --- /dev/null +++ b/StoneIsland/plugins/cordova-plugin-network-information/www/browser/network.js @@ -0,0 +1,92 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * +*/ + +/*global module, require*/ + +var cordova = require('cordova'), + Connection = require('./Connection'); + +var DOCUMENT_EVENTS_CHECK_INTERVAL = 500; // ms +// Flag that indicates that ew need to re-fire online/offline events at document level +// (Workaround for Chrome, since it fires such events only for window object) +var NEED_FIRE_DOCUMENT_EVENT_MANUALLY = false; + +function NetworkConnection() { + this.type = Connection.UNKNOWN; +} + +/** + * Get connection info + * + * @param {Function} successCallback The function to call when the Connection data is available + */ +NetworkConnection.prototype.getInfo = function(successCallback) { + successCallback(this.type); +}; + +Object.defineProperty(NetworkConnection.prototype, 'type', { + get: function () { + // It is not possible to determine real connection type in browser + // so we always report Connection.UNKNOWN when online + return (window.navigator.onLine === false ? Connection.NONE : Connection.UNKNOWN); + }, + configurable: true, + enumerable: true +}); + +// This function tries to detect if document online/offline events is being fired +// after corresponding window events, and if not, then fires them manually +// This is workaround for Chrome, which fires only window online/offline events +// and regarding to plugin spec we need these events at document object +var eventRedirectHandler = function (e) { + // NEED_FIRE_DOCUMENT_EVENT_MANUALLY flag is already set, + // just fire corresponding document event and return + if (NEED_FIRE_DOCUMENT_EVENT_MANUALLY) { + cordova.fireDocumentEvent(e.type); + return; + } + + // Flag that indicates whether corresponding document even is fired + var documentStateEventFired = false; + var setDocumentStateEventFired = function() { + documentStateEventFired = true; + }; + document.addEventListener(e.type, setDocumentStateEventFired); + setTimeout(function () { + // Remove unnecessary listener + document.removeEventListener(e.type, setDocumentStateEventFired); + // if document event hasn't been fired in specified interval (500 ms by default), + // then we're in chrome and need to fire it manually + if (!documentStateEventFired) { + NEED_FIRE_DOCUMENT_EVENT_MANUALLY = true; + cordova.fireDocumentEvent(e.type); + } + }, DOCUMENT_EVENTS_CHECK_INTERVAL); +}; + +// Subscribe to native online/offline events +window.addEventListener('online', eventRedirectHandler); +window.addEventListener('offline', eventRedirectHandler); + +var me = new NetworkConnection(); + +require("cordova/exec/proxy").add("NetworkStatus", { getConnectionInfo: me.getConnectionInfo }); + +module.exports = me; |
