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 | |
| parent | 124e6c0a8d9577b4a30e0b265f5c23d637c41966 (diff) | |
app skeleton
Diffstat (limited to 'StoneIsland/plugins/cordova-plugin-network-information/www')
3 files changed, 217 insertions, 0 deletions
diff --git a/StoneIsland/plugins/cordova-plugin-network-information/www/Connection.js b/StoneIsland/plugins/cordova-plugin-network-information/www/Connection.js new file mode 100644 index 00000000..f20a485c --- /dev/null +++ b/StoneIsland/plugins/cordova-plugin-network-information/www/Connection.js @@ -0,0 +1,34 @@ +/* + * + * 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. + * +*/ + +/** + * Network status + */ +module.exports = { + UNKNOWN: "unknown", + ETHERNET: "ethernet", + WIFI: "wifi", + CELL_2G: "2g", + CELL_3G: "3g", + CELL_4G: "4g", + CELL:"cellular", + NONE: "none" +}; 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; diff --git a/StoneIsland/plugins/cordova-plugin-network-information/www/network.js b/StoneIsland/plugins/cordova-plugin-network-information/www/network.js new file mode 100644 index 00000000..ac792d8c --- /dev/null +++ b/StoneIsland/plugins/cordova-plugin-network-information/www/network.js @@ -0,0 +1,91 @@ +/* + * 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. + * +*/ + +var exec = require('cordova/exec'), + cordova = require('cordova'), + channel = require('cordova/channel'), + utils = require('cordova/utils'); + +// Link the onLine property with the Cordova-supplied network info. +// This works because we clobber the navigator object with our own +// object in bootstrap.js. +// Browser platform do not need to define this property, because +// it is already supported by modern browsers +if (cordova.platformId !== 'browser' && typeof navigator != 'undefined') { + utils.defineGetter(navigator, 'onLine', function() { + return this.connection.type != 'none'; + }); +} + +function NetworkConnection() { + this.type = 'unknown'; +} + +/** + * Get connection info + * + * @param {Function} successCallback The function to call when the Connection data is available + * @param {Function} errorCallback The function to call when there is an error getting the Connection data. (OPTIONAL) + */ +NetworkConnection.prototype.getInfo = function(successCallback, errorCallback) { + exec(successCallback, errorCallback, "NetworkStatus", "getConnectionInfo", []); +}; + +var me = new NetworkConnection(); +var timerId = null; +var timeout = 500; + +channel.createSticky('onCordovaConnectionReady'); +channel.waitForInitialization('onCordovaConnectionReady'); + +channel.onCordovaReady.subscribe(function() { + me.getInfo(function(info) { + me.type = info; + if (info === "none") { + // set a timer if still offline at the end of timer send the offline event + timerId = setTimeout(function(){ + cordova.fireDocumentEvent("offline"); + timerId = null; + }, timeout); + } else { + // If there is a current offline event pending clear it + if (timerId !== null) { + clearTimeout(timerId); + timerId = null; + } + cordova.fireDocumentEvent("online"); + } + + // should only fire this once + if (channel.onCordovaConnectionReady.state !== 2) { + channel.onCordovaConnectionReady.fire(); + } + }, + function (e) { + // If we can't get the network info we should still tell Cordova + // to fire the deviceready event. + if (channel.onCordovaConnectionReady.state !== 2) { + channel.onCordovaConnectionReady.fire(); + } + console.log("Error initializing Network Connection: " + e); + }); +}); + +module.exports = me; |
