summaryrefslogtreecommitdiff
path: root/www/lib/ngCordova/dist
diff options
context:
space:
mode:
Diffstat (limited to 'www/lib/ngCordova/dist')
-rw-r--r--www/lib/ngCordova/dist/ng-cordova-mocks.js69
-rw-r--r--www/lib/ngCordova/dist/ng-cordova-mocks.min.js4
-rw-r--r--www/lib/ngCordova/dist/ng-cordova.js3571
-rw-r--r--www/lib/ngCordova/dist/ng-cordova.min.js10
4 files changed, 2431 insertions, 1223 deletions
diff --git a/www/lib/ngCordova/dist/ng-cordova-mocks.js b/www/lib/ngCordova/dist/ng-cordova-mocks.js
index 77606630..d8cd634f 100644
--- a/www/lib/ngCordova/dist/ng-cordova-mocks.js
+++ b/www/lib/ngCordova/dist/ng-cordova-mocks.js
@@ -1,6 +1,6 @@
/*!
* ngCordova
- * v0.1.17-alpha
+ * v0.1.18-alpha
* Copyright 2014 Drifty Co. http://drifty.com/
* See LICENSE in this repository for license information
*/
@@ -603,6 +603,17 @@ ngCordovaMocks.factory('$cordovaDevice', function () {
*/
version: version,
+ /**
+ @ngdoc property
+ @name manufacturer
+ @propertyOf ngCordovaMocks.cordovaDevice
+
+ @description
+ The manufacturer of the device.
+ This property should only be used in automated tests.
+ */
+ version: version,
+
getDevice: function () {
return this.device;
},
@@ -625,6 +636,10 @@ ngCordovaMocks.factory('$cordovaDevice', function () {
getVersion: function () {
return this.version;
+ },
+
+ getManufacturer: function () {
+ return this.manufacturer;
}
};
});
@@ -1274,14 +1289,6 @@ ngCordovaMocks.factory('$cordovaFile', ['$q', function ($q) {
readFileMetadataAbsolute: function (filePath) {
return mockIt.call(this, 'There was an error reading the file metadta from the absolute path');
- },
-
- downloadFile: function (source, filePath, trust, options) {
- return mockIt.call(this, 'There was an error downloading the file.');
- },
-
- uploadFile: function (server, filePath, options) {
- return mockIt.call(this, 'There was an error uploading the file.');
}
};
}]);
@@ -1369,6 +1376,48 @@ ngCordovaMocks.factory('$cordovaFileOpener2', ['$q', function ($q) {
/**
* @ngdoc service
+ * @name ngCordovaMocks.cordovaFileTransfer
+ *
+ * @description
+ * A service for testing download and upload
+ * in an app build with ngCordova.
+ */
+ngCordovaMocks.factory('$cordovaFileTransfer', ['$q', function ($q) {
+ var throwsError = false;
+
+ var mockIt = function (errorMessage) {
+ var defer = $q.defer();
+ if (this.throwsError) {
+ defer.reject(errorMessage);
+ } else {
+ defer.resolve();
+ }
+ return defer.promise;
+ };
+
+ return {
+ /**
+ * @ngdoc property
+ * @name throwsError
+ * @propertyOf ngCordovaMocks.cordovaFileTransfer
+ *
+ * @description
+ * A flag that signals whether a promise should be rejected or not.
+ * This property should only be used in automated tests.
+ **/
+ throwsError: throwsError,
+
+ download: function (source, filePath, trust, options) {
+ return mockIt.call(this, 'There was an error downloading the file.');
+ },
+
+ upload: function (server, filePath, options) {
+ return mockIt.call(this, 'There was an error uploading the file.');
+ }
+ };
+}]);
+/**
+ * @ngdoc service
* @name ngCordovaMocks.cordovaGeolocation
*
* @description
@@ -2842,4 +2891,4 @@ ngCordovaMocks.factory('$cordovaVibration', ['$timeout', function ($timeout) {
};
}]);
-})();
+})(); \ No newline at end of file
diff --git a/www/lib/ngCordova/dist/ng-cordova-mocks.min.js b/www/lib/ngCordova/dist/ng-cordova-mocks.min.js
index 64559d76..8af502df 100644
--- a/www/lib/ngCordova/dist/ng-cordova-mocks.min.js
+++ b/www/lib/ngCordova/dist/ng-cordova-mocks.min.js
@@ -1,7 +1,7 @@
/*!
* ngCordova
- * v0.1.17-alpha
+ * v0.1.18-alpha
* Copyright 2014 Drifty Co. http://drifty.com/
* See LICENSE in this repository for license information
*/
-!function(){var r=angular.module("ngCordovaMocks",[]);r.factory("$cordovaAppVersion",["$q",function(r){var e=!1;return{throwsError:e,getAppVersion:function(){var e=r.defer();return e.resolve("mock v"),e.promise}}}]),r.factory("$cordovaBarcodeScanner",["$q",function(r){var e=!1,t="",o="",i=!1;return{throwsError:e,scannedText:t,scannedFormat:o,wasCancelled:i,scan:function(){var e=r.defer();return this.throwsError?e.reject("There was an error scanning."):e.resolve({text:this.scannedText,format:this.scannedFormat,cancelled:this.wasCancelled}),e.promise},encode:function(e,t){this.scannedFormat=e,this.scannedText=t;var o=r.defer();return this.throwsError?o.reject("There was an error encoding the data."):o.resolve(),o.promise}}}]),r.factory("$cordovaBLE",["$q","$timeout",function(r,e){var t={name:"Test Device",id:"AA:BB:CC:DD:EE:FF",advertising:[2,1,6,3,3,15,24,8,9,66,97,116,116,101,114,121],rssi:-55},o={name:"Test Device",id:"AA:BB:CC:DD:EE:FF",advertising:[2,1,6,3,3,15,24,8,9,66,97,116,116,101,114,121],rssi:-55,services:["1800","1801","180f"],characteristics:[{service:"1800",characteristic:"2a00",properties:["Read"]},{service:"1800",characteristic:"2a01",properties:["Read"]},{service:"1801",characteristic:"2a05",properties:["Read"]},{service:"180f",characteristic:"2a19",properties:["Read"],descriptors:[{uuid:"2901"},{uuid:"2904"}]}]},i=new ArrayBuffer(8);return{scan:function(o,i){var n=r.defer();return e(function(){n.resolve(t)},1e3*i),n.promise},connect:function(){var t=r.defer();return e(function(){t.resolve(o)},1500),t.promise},disconnect:function(){var t=r.defer();return e(function(){t.resolve(!0)},500),t.promise},read:function(){var t=r.defer();return e(function(){t.resolve(i)},100),t.promise},write:function(){var t=r.defer();return e(function(){t.resolve(!0)},100),t.promise},writeCommand:function(){var t=r.defer();return e(function(){t.resolve(!0)},100),t.promise},notify:function(){var t=r.defer();return e(function(){t.resolve(!0)},100),t.promise},indicate:function(){var t=r.defer();return e(function(){t.resolve(!0)},100),t.promise},isConnected:function(){var e=r.defer();return e.resolve(!0),e.promise},isEnabled:function(){var e=r.defer();return e.resolve(!0),e.promise}}}]),r.factory("$cordovaBrightness",["$q",function(r){var e=100;return{get:function(){var t=r.defer();return t.resolve(e),t.promise},set:function(t){var o=r.defer();return e=t,o.resolve("OK"),o.promise},setKeepScreenOn:function(){var e=r.defer();return e.resolve("OK"),e.promise}}}]),r.factory("$cordovaCamera",["$q",function(r){var e=!1,t="";return{throwsError:e,imageData:t,getPicture:function(e){var t=r.defer();return this.throwsError?t.reject("There was an error getting the picture."):(e&&(e=e),t.resolve(this.imageData)),t.promise}}}]),r.factory("$cordovaCapture",["$q",function(r){var e=!1;return{throwsError:e,captureAudio:function(){var e=r.defer();return this.throwsError?e.reject("There was an error capturing the audio."):e.resolve(),e.promise},captureImage:function(){var e=r.defer();return this.throwsError?e.reject("There was an error capturing the image."):e.resolve(),e.promise},captureVideo:function(){var e=r.defer();return this.throwsError?e.reject("There was an error capturing the video."):e.resolve(),e.promise}}}]),r.factory("$cordovaContacts",["$q",function(r){var e=!1,t=[];return{throwsError:e,contacts:t,save:function(e){var t=r.defer();if(this.throwsError)t.reject("There was an error saving the contact.");else{for(var o=null,i=0;i<this.contacts.length;i++)if(this.contacts[i].id===e.id){o=i;break}null===o?(this.contacts.push(e),t.resolve()):t.reject("Contact already exists.")}return t.promise},remove:function(e){var t=r.defer();if(this.throwsError)t.reject("There was an error saving the contact.");else{for(var o=null,i=0;i<this.contacts.length;i++)if(this.contacts[i].id===e.id){o=i;break}null===o?t.reject("Unable to find contact."):(this.contacts.splice(o,1),t.resolve())}return t.promise},find:function(e){var t=r.defer();if(this.throwsError)t.reject("There was an error finding the contact.");else{var o=e.fields||["id","displayName"];if(delete e.fields,o)if("*"===o)t.resolve(this.contacts);else{for(var i=[],n=0;n<this.contacts.length;n++)for(var s in this.contacts[n])var a=this.contacts[n][s];t.resolve(i)}else t.reject("ContactError.INVALID_ARGUMENT_ERROR")}return t.promise}}}]),r.factory("$cordovaDatePicker",["$q",function(r){return{show:function(e){var t=r.defer();return e=e||{date:new Date,mode:"date"},t.resolve(e.date),t.promise}}}]),r.factory("$cordovaDevice",function(){var r="",e="",t="",o="",i="",n="";return{device:r,cordova:e,model:t,platform:o,uuid:i,version:n,getDevice:function(){return this.device},getCordova:function(){return this.cordova},getModel:function(){return this.model},getPlatform:function(){return this.platform},getUUID:function(){return this.uuid},getVersion:function(){return this.version}}}),r.factory("$cordovaDeviceMotion",["$interval","$q",function(r,e){var t=null,o=!1,i=[],n=[];return{currentAcceleration:t,throwsError:o,positions:i,watchIntervals:n,getCurrentAcceleration:function(){var r=e.defer();return this.throwsError?r.reject("There was an error getting the current acceleration."):r.resolve(this.currentAcceleration),r.promise},watchAcceleration:function(t){var o=e.defer(),i=Math.floor(1e6*Math.random()+1);if(this.positions=[],self=this,this.throwsError)o.reject("There was an error watching the current acceleration.");else{var n=1e4;t&&t.frequency&&(n=t.frequency),this.watchIntervals.push(r(function(){self.throwsError&&o.reject("There was an error watching the acceleration.");var r=Math.floor(100*Math.random()+1),e=Math.floor(100*Math.random()+1),t=Math.floor(100*Math.random()+1),i={x:r,y:e,z:t,timestamp:Date.now()};self.positions.push(i),o.notify(i)},n))}return{watchId:i,promise:o.promise}},clearWatch:function(t){var o=e.defer();if(t)if(this.throwsError)o.reject("Unable to clear watch.");else{for(var i=-1,s=0;s<this.watchIntervals.length;s++)if(this.watchIntervals[s].watchId===t){r.cancel(n[s].interval),i=s;break}-1!==i&&this.watchIntervals.splice(i,1)}else o.reject("Unable to clear watch. No watch ID provided.");return o.promise}}}]),r.factory("$cordovaDeviceOrientation",["$interval","$q",function(r,e){var t=null,o=!1,i=[],n=[];return{currentHeading:t,throwsError:o,readings:i,watchIntervals:n,getCurrentHeading:function(){var r=e.defer();return this.throwsError?r.reject("There was an error getting the current heading."):r.resolve(this.currentHeading),r.promise},watchHeading:function(t){var o=e.defer(),i=Math.floor(1e6*Math.random()+1),s=this;if(s.readings=[],s.throwsError)o.reject("There was an error getting the compass heading.");else{var a=100;t&&t.frequency&&(a=t.frequency),s.watchIntervals.push({watchID:i,interval:r(function(){s.throwsError&&o.reject("There was an error watching the acceleration.");var r=359.99*Math.random()+1,e=359.99*Math.random()+1,t=Math.floor(360*Math.random()+1),i={magneticHeading:r,trueHeading:e,headingAccuracy:t,timestamp:Date.now()};s.readings.push(i),o.notify(i)},a)})}var c=function(e){for(var t=-1,o=0;o<s.watchIntervals.length;o++)if(s.watchIntervals[o].watchID===e){r.cancel(n[o].interval),t=o;break}-1!==t&&s.watchIntervals.splice(t,1)};return o.promise.cancel=function(){c(i)},o.promise.clearWatch=function(r){c(r||i)},o.promise.watchID=i,o.promise},clearWatch:function(t){var o=e.defer();if(t)if(this.throwsError)o.reject("Unable to clear watch.");else{for(var i=-1,s=0;s<this.watchIntervals.length;s++)if(this.watchIntervals[s].watchId===t){r.cancel(n[s].interval),i=s;break}-1!==i&&this.watchIntervals.splice(i,1)}else o.reject("Unable to clear watch. No watch ID provided.");return o.promise}}}]),r.factory("$cordovaDialogs",["$q",function(r){var e=!1,t="",o="",i="",n=0,s=!0;return{dialogText:e,dialogTitle:t,defaultValue:o,promptResponse:i,buttonLabels:[],beepCount:n,useHostAbilities:s,alert:function(e,t,o){var i=r.defer();return this.useHostAbilities?(alert(e),i.resolve()):(this.dialogText=e,this.dialogTitle=t,this.buttonLabels.push(o),i.resolve()),i.promise},confirm:function(e,t,o){var i=r.defer();if(this.useHostAbilities){var n=confirm(e);i.resolve(n?2:1)}else this.dialogText=e,this.dialogTitle=t,this.buttonLabels.push(o),i.resolve(0);return i.promise},prompt:function(e,t,o,i){var n=r.defer();if(this.useHostAbilities){var s=prompt(e,i);n.resolve(s)}else{this.dialogText=e,this.dialogTitle=t,this.defaultValue=i;for(var a=0;a<o.length;a++)this.buttonLabels.push(o[a]);n.resolve(this.promptResponse)}return n.promise},beep:function(r){this.beepCount=r}}}]),r.factory("$cordovaFile",["$q",function(r){var e=!1,t={},o=!1,i={},n=function(e){var t=r.defer();return this.throwsError?t.reject(e):t.resolve(),t.promise};return{throwsError:e,fileSystem:t,shouldMockFiles:o,files:i,checkDir:function(e){if(this.shouldMockFiles){var t=r.defer();return this.files[e]&&!this.files[e].isFile?t.resolve():t.reject(),t.promise}return n.call(this,"There was an error checking the directory.")},createDir:function(e){if(this.shouldMockFiles){var t=r.defer();return this.files[e]={isFile:!1},t.resolve(),t.promise}return n.call(this,"There was an error creating the directory.")},listDir:function(){return n.call(this,"There was an error listing the directory")},checkFile:function(e){if(this.shouldMockFiles){var t=r.defer();return this.files[e]&&this.files[e].isFile?t.resolve():t.reject(),t.promise}return n.call(this,"There was an error checking for the file.")},createFile:function(e){if(this.shouldMockFiles){var t=r.defer();return this.files[e]={isFile:!0,fileContent:""},t.resolve(),t.promise}return n.call(this,"There was an error creating the file.")},removeFile:function(){return n.call(this,"There was an error removng the file.")},writeFile:function(r,e){return this.shouldMockFiles&&r&&e&&(this.files[r]={isFile:!0,fileContent:e}),n.call(this,"There was an error writing the file.")},readFile:function(r){return this.readAsText(r)},readAsText:function(e){if(this.shouldMockFiles){var t=r.defer();return i[e]&&i[e].isFile?t.resolve(i[e].fileContent):t.reject(),t.promise}return n.call(this,"There was an error reading the file as text.")},readAsDataURL:function(){return n.call(this,"There was an error reading the file as a data url.")},readAsBinaryString:function(){return n.call(this,"There was an error reading the file as a binary string.")},readAsArrayBuffer:function(){return n.call(this,"There was an error reading the file as an array buffer.")},readFileMetadata:function(){return n.call(this,"There was an error reading the file metadata")},readFileAbsolute:function(){return n.call(this,"There was an error reading the file from the absolute path")},readFileMetadataAbsolute:function(){return n.call(this,"There was an error reading the file metadta from the absolute path")},downloadFile:function(){return n.call(this,"There was an error downloading the file.")},uploadFile:function(){return n.call(this,"There was an error uploading the file.")}}}]),r.factory("$cordovaFileOpener2",["$q",function(r){var e=!1;return{throwsError:e,open:function(){var e=r.defer();return this.throwError?e.reject({status:0,message:"There was an error capturing the file."}):e.resolve(),e.promise},uninstall:function(){var e=r.defer();return this.throwError?e.reject({status:0,message:"There was an error capturing the packageId."}):e.resolve(),e.promise},appIsInstalled:function(){var e=r.defer();return this.throwError?e.reject({status:0,message:"There was an error capturing the packageId."}):e.resolve(),e.promise}}}]),r.factory("$cordovaGeolocation",["$interval","$q",function(r,e){var t=!1,o=!0,i=[],n=[],s=null,a=null;return{throwsError:t,watchIntervals:i,locations:n,currentPosition:s,nextPosition:a,useHostAbilities:o,getCurrentPosition:function(r){var t=e.defer();return this.throwsError?t.reject("There was an error getting the location."):(r&&(r=r),this.useHostAbilities?navigator.geolocation?navigator.geolocation.getCurrentPosition(function(r){this.currentPosition=r,t.resolve(this.currentPosition)},function(r){t.reject(r)}):t.reject("Geolocation is not supported by this browser."):t.resolve(this.currentPosition)),t.promise},watchPosition:function(t){var o=e.defer(),n=Math.floor(1e6*Math.random()+1),s=this;if(s.locations=[],s.throwsError)o.reject("There was an error getting the geolocation.");else{var a=1e3;t&&t.timeout&&(a=t.timeout),s.watchIntervals.push({watchID:n,interval:r(function(){s.throwsError&&o.reject("There was an error watching the geolocation.");var r=s.nextPosition;null===r&&(s.useHostAbilities?navigator.geolocation?navigator.geolocation.getCurrentPosition(function(r){s.currentPosition=r,s.locations.push(r),o.resolve(r)},function(r){o.reject(r)}):o.reject("Geolocation is not supported by this browser."):(r={coords:{latitude:180*Math.random()+1-90,longitude:360*Math.random()+1-180,altitude:100*Math.random()+1,accuracy:10*Math.random()+1,altitudeAccuracy:10*Math.random()+1,heading:360*Math.random()+1,speed:100*Math.random()+1},timestamp:Date.now()},s.currentPosition=r,s.locations.push(r),o.notify(r)))},a)})}var c=function(e){for(var t=-1,o=0;o<s.watchIntervals.length;o++)if(s.watchIntervals[o].watchID===e){r.cancel(i[o].interval),t=o;break}-1!==t&&s.watchIntervals.splice(t,1)};return o.promise.cancel=function(){c(n)},o.promise.clearWatch=function(r){c(r||n)},o.promise.watchID=n,o.promise},clearWatch:function(t){var o=e.defer();if(t)if(this.throwsError)o.reject("Unable to clear watch.");else{for(var n=-1,s=0;s<this.watchIntervals.length;s++)if(this.watchIntervals[s].watchID===t){r.cancel(i[s].interval),n=s;break}-1!==n&&this.watchIntervals.splice(n,1)}else o.reject("Unable to clear watch. No watch ID provided.");return o.promise}}}]),r.factory("$cordovaGlobalization",["$q",function(r){var e=!1,t=navigator.language?navigator.language:"en-US",o={value:t},i="Sunday",n={value:t};return{throwsError:e,preferredLanguage:o,localeName:n,firstDayOfWeek:i,getPreferredLanguage:function(){var e=r.defer();return this.throwsError?e.reject("There was an error getting the preferred language."):e.resolve(this.preferredLanguage),e.promise},getLocaleName:function(){var e=r.defer();return this.throwsError?e.reject("There was an error getting the locale name."):e.resolve(this.localeName),e.promise},getFirstDayOfWeek:function(){var e=r.defer();return this.throwsError?e.reject("There was an error getting the first day of week."):e.resolve(this.firstDayOfWeek),e.promise},dateToString:function(e,t){var o=r.defer();if(this.throwsError)o.reject("There was an error getting the string from the date.");else{var i="";e=e,t=t,o.resolve(i)}return o.promise},stringToDate:function(e,t){var o=r.defer();if(this.throwsError)o.reject("There was an error getting the date from the string.");else{var i="";e=e,t=t,o.resolve(i)}return o.promise},getDatePattern:function(e){var t=r.defer();if(this.throwsError)t.reject("There was an error getting the date pattern.");else{var o="";e=e,t.resolve(o)}return t.promise},getDateNames:function(e){var t=r.defer();if(this.throwsError)t.reject("There was an error getting the date names.");else{var o="";e=e,t.resolve(o)}return t.promise},isDayLightSavingsTime:function(e){var t=r.defer();if(this.throwsError)t.reject("There was an error getting if this is in daylight savings time mode.");else{var o="";e=e,t.resolve(o)}return t.promise},numberToString:function(e,t){var o=r.defer();if(this.throwsError)o.reject("There was an error convertng the number to a string.");else{var i="";e=e,t=t,o.resolve(i)}return o.promise},stringToNumber:function(e,t){var o=r.defer();if(this.throwsError)o.reject("There was an error convertng the string to a number.");else{var i="";t=t,o.resolve(i)}return o.promise},getNumberPattern:function(e){var t=r.defer();if(this.throwsError)t.reject("There was an error convertng the string to a number.");else{var o="";e=e,t.resolve(o)}return t.promise},getCurrencyPattern:function(e){var t=r.defer();if(this.throwsError)t.reject("There was an error convertng the string to a number.");else{var o="";e=e,t.resolve(o)}return t.promise}}}]),r.factory("$cordovaGoogleAnalytics",["$q",function(r){var e=!1,t={};t.throwsError=e;var o=["startTrackerWithId","setUserId","debugMode","trackView","addCustomDimension","trackEvent","trackException","trackTiming","addTransaction","addTransactionItem"];return o.forEach(function(e){t[e]=function(){var e=r.defer();return this.throwsError?e.reject():e.resolve(),e.promise}}),t}]),r.factory("$cordovaGooglePlayGame",["$q",function(r){var e=!1,t=!1,o="";return{_throwsError:e,_isSignedIn:t,_displayName:o,auth:function(){var e=r.defer();return this._throwsError?e.reject("There was a auth error."):(this.isSignedIn=!0,e.resolve("SIGN IN SUCCESS")),e.promise},signout:function(){var e=r.defer();return this.throwsError?e.reject("There was a signout error."):e.resolve(),e.promise},isSignedIn:function(){var e=r.defer();return this._throwsError?e.reject("There was a isSignedIn error."):e.resolve({isSignedIn:this._isSignedIn}),e.promise},showPlayer:function(){var e=r.defer();return this.throwsError?e.reject("There was a showPlayer error."):e.resolve({displayName:this._displayName}),e.promise},submitScore:function(){var e=r.defer();return this._throwsError?e.reject("There was a submitScore error."):e.resolve("OK"),e.promise},showAllLeaderboards:function(){var e=r.defer();return this.throwsError?e.reject("There was a showAllLeaderboards error."):e.resolve("OK"),e.promise},showLeaderboard:function(){var e=r.defer();return this._throwsError?e.reject("There was a showLeaderboard error."):e.resolve("OK"),e.promise},unlockAchievement:function(){var e=r.defer();return this.throwsError?e.reject("There was a unlockAchievement error."):e.resolve("OK"),e.promise},incrementAchievement:function(){var e=r.defer();return this._throwsError?e.reject("There was a incrementAchievement error."):e.resolve("OK"),e.promise},showAchievements:function(){var e=r.defer();return this.throwsError?e.reject("There was a showAchievements error."):e.resolve("OK"),e.promise}}}]),r.factory("$cordovaKeyboard",function(){var r=!1;return{hideAccessoryBar:function(){},close:function(){r=!1},show:function(){r=!0},disableScroll:function(){},isVisible:function(){return r}}}),r.factory("$cordovaKeychain",["$q",function(r){var e={};return{keychains:e,getForKey:function(e,t){var o=r.defer();return this.keychains[t]?o.resolve(this.keychains[t][e]):o.reject(),o.promise},setForKey:function(e,t,o){var i=r.defer();return this.keychains[t]||(this.keychains[t]={}),this.keychains[t][e]=o,i.resolve(),i.promise},removeForKey:function(e,t){var o=r.defer();return this.keychains[t]&&delete this.keychains[t][e],o.resolve(),o.promise}}}]),r.factory("$cordovaNetwork",function(){var r="WiFi connection",e=!0;return{connectionType:r,isConnected:e,getNetwork:function(){return this.connectionType},isOnline:function(){return this.isConnected},isOffline:function(){return!this.isConnected}}}),r.factory("$cordovaPush",["$q","$timeout","$rootScope",function(r,e,t){var o=!1,i="";return{throwsError:o,deviceToken:i,onNotification:function(r){e(function(){t.$broadcast("$cordovaPush:notificationReceived",r)})},register:function(e){var t=this,o=r.defer();return void 0!==e&&void 0===e.ecb&&(e.ecb=this.onNotification),this.throwsError?o.reject("There was a register error."):(o.resolve(this.deviceToken),e&&e.ecb&&e.ecb({event:"registered",regid:t.deviceToken})),o.promise},unregister:function(){var e=r.defer();return this.throwsError?e.reject("There was a register error."):e.resolve(),e.promise}}}]),r.factory("$cordovaSocialSharing",["$q",function(r){var e=!1,t="",o="",i="",n="",s="",a="",c=[],h=[],u=[];return{throwsError:e,message:t,image:o,link:i,number:n,subject:a,toAddresses:c,bccAddresses:h,socialService:s,attachments:u,shareViaTwitter:function(e,t,o){var i=r.defer();return this.throwsError?i.reject("There was an error sharing via Twitter."):(this.message=e,this.image=t,this.link=o,i.resolve()),i.promise},shareViaWhatsApp:function(e,t,o){var i=r.defer();return this.throwsError?i.reject("There was an error sharing via WhatsApp."):(this.message=e,this.image=t,this.link=o,i.resolve()),i.promise},shareViaFacebook:function(e,t,o){var i=r.defer();return this.throwsError?i.reject("There was an error sharing via Facebook."):(this.message=e,this.image=t,this.link=o,i.resolve()),i.promise},shareViaSMS:function(e,t){var o=r.defer();return this.throwsError?o.reject("There was an error sharing via SMS."):(this.message=e,this.number=t,o.resolve()),o.promise},shareViaEmail:function(e,t,o,i,n){var s=r.defer();return this.throwsError?s.reject("There was an error sharing via SMS."):(this.message=e,this.subject=t,this.toAddresses=o,this.bccAddressesc=i,this.attachments=n,s.resolve()),s.promise},canShareViaEmail:function(){var e=r.defer();return this.throwsError?e.reject(!1):e.resolve(!0),e.promise},canShareVia:function(e,t,o,i,n){var s=r.defer();return this.throwsError?s.reject("There was an error sharing via SMS."):(this.message=t,this.socialService=e,this.subject=o,this.attachments=i,this.link=n,s.resolve()),s.promise},shareVia:function(e,t,o,i,n){var s=r.defer();return this.throwsError?s.reject("There was an error sharing via SMS."):(this.socialService=e,this.message=t,this.subject=o,this.attachments=i,this.link=n,s.resolve()),s.promise},share:function(e,t,o,i){var n=r.defer();return this.throwsError?n.reject("There was an error sharing via SMS."):(this.message=e,this.subject=t,this.attachments=o,this.link=i,n.resolve()),n.promise}}}]),r.factory("$cordovaSplashscreen",function(){var r=!1;return{isVisible:r,hide:function(){return this.isVisible=!1,!0},show:function(){return this.isVisible=!0,!0}}}),r.factory("$cordovaStatusbar",function(){var r=!0,e=!0;return{isStatusBarVisible:r,canOverlayWebView:e,overlaysWebView:function(r){this.canOverlayWebView=r},style:function(r){return r},styleHex:function(r){return r},styleColor:function(r){return r},hide:function(){this.isStatusBarVisible=!1},show:function(){this.isStatusBarVisible=!0},isVisible:function(){return this.isStatusBarVisible}}}),r.factory("$cordovaToast",["$q",function(r){var e=!1;return{throwsError:e,showShortTop:function(){var e=r.defer();return this.throwsError?e.reject("There was an error showing the toast."):e.resolve(),e.promise},showShortCenter:function(){var e=r.defer();return this.throwsError?e.reject("There was an error showing the toast."):e.resolve(),e.promise},showShortBottom:function(){var e=r.defer();return this.throwsError?e.reject("There was an error showing the toast."):e.resolve(),e.promise},showLongTop:function(){var e=r.defer();return this.throwsError?e.reject("There was an error showing the toast."):e.resolve(),e.promise},showLongCenter:function(){var e=r.defer();return this.throwsError?e.reject("There was an error showing the toast."):e.resolve(),e.promise},showLongBottom:function(){var e=r.defer();return this.throwsError?e.reject("There was an error showing the toast."):e.resolve(),e.promise},show:function(){var e=r.defer();return this.throwsError?e.reject("There was an error showing the toast."):e.resolve(),e.promise}}}]),r.factory("$cordovaVibration",["$timeout",function(r){var e=!1,t=null;return{vibrateTimer:t,isVibrating:e,vibrate:function(e){e>0&&(this.isVibrating=!0,self=this,this.vibrateTimer=e instanceof Array?r(function(){self.isVibrating=!1,self.vibrateTimer=null},e[0]):r(function(){self.isVibrating=!1,self.vibrateTimer=null},e))},vibrateWithPattern:function(){},cancelVibration:function(){null!==this.vibrateTimer&&this.isVibrating===!0&&(r.cancel(this.vibrateTimer),this.isVibrating=!1)}}}])}();
+!function(){var r=angular.module("ngCordovaMocks",[]);r.factory("$cordovaAppVersion",["$q",function(r){var e=!1;return{throwsError:e,getAppVersion:function(){var e=r.defer();return e.resolve("mock v"),e.promise}}}]),r.factory("$cordovaBarcodeScanner",["$q",function(r){var e=!1,t="",o="",i=!1;return{throwsError:e,scannedText:t,scannedFormat:o,wasCancelled:i,scan:function(){var e=r.defer();return this.throwsError?e.reject("There was an error scanning."):e.resolve({text:this.scannedText,format:this.scannedFormat,cancelled:this.wasCancelled}),e.promise},encode:function(e,t){this.scannedFormat=e,this.scannedText=t;var o=r.defer();return this.throwsError?o.reject("There was an error encoding the data."):o.resolve(),o.promise}}}]),r.factory("$cordovaBLE",["$q","$timeout",function(r,e){var t={name:"Test Device",id:"AA:BB:CC:DD:EE:FF",advertising:[2,1,6,3,3,15,24,8,9,66,97,116,116,101,114,121],rssi:-55},o={name:"Test Device",id:"AA:BB:CC:DD:EE:FF",advertising:[2,1,6,3,3,15,24,8,9,66,97,116,116,101,114,121],rssi:-55,services:["1800","1801","180f"],characteristics:[{service:"1800",characteristic:"2a00",properties:["Read"]},{service:"1800",characteristic:"2a01",properties:["Read"]},{service:"1801",characteristic:"2a05",properties:["Read"]},{service:"180f",characteristic:"2a19",properties:["Read"],descriptors:[{uuid:"2901"},{uuid:"2904"}]}]},i=new ArrayBuffer(8);return{scan:function(o,i){var n=r.defer();return e(function(){n.resolve(t)},1e3*i),n.promise},connect:function(t){var i=r.defer();return e(function(){i.resolve(o)},1500),i.promise},disconnect:function(t){var o=r.defer();return e(function(){o.resolve(!0)},500),o.promise},read:function(t,o,n){var s=r.defer();return e(function(){s.resolve(i)},100),s.promise},write:function(t,o,i,n){var s=r.defer();return e(function(){s.resolve(!0)},100),s.promise},writeCommand:function(t,o,i,n){var s=r.defer();return e(function(){s.resolve(!0)},100),s.promise},notify:function(t,o,i){var n=r.defer();return e(function(){n.resolve(!0)},100),n.promise},indicate:function(t,o,i){var n=r.defer();return e(function(){n.resolve(!0)},100),n.promise},isConnected:function(e){var t=r.defer();return t.resolve(!0),t.promise},isEnabled:function(){var e=r.defer();return e.resolve(!0),e.promise}}}]),r.factory("$cordovaBrightness",["$q",function(r){var e=100;return{get:function(){var t=r.defer();return t.resolve(e),t.promise},set:function(t){var o=r.defer();return e=t,o.resolve("OK"),o.promise},setKeepScreenOn:function(e){var t=r.defer();return t.resolve("OK"),t.promise}}}]),r.factory("$cordovaCamera",["$q",function(r){var e=!1,t="";return{throwsError:e,imageData:t,getPicture:function(e){var t=r.defer();return this.throwsError?t.reject("There was an error getting the picture."):(e&&(e=e),t.resolve(this.imageData)),t.promise}}}]),r.factory("$cordovaCapture",["$q",function(r){var e=!1;return{throwsError:e,captureAudio:function(){var e=r.defer();return this.throwsError?e.reject("There was an error capturing the audio."):e.resolve(),e.promise},captureImage:function(){var e=r.defer();return this.throwsError?e.reject("There was an error capturing the image."):e.resolve(),e.promise},captureVideo:function(){var e=r.defer();return this.throwsError?e.reject("There was an error capturing the video."):e.resolve(),e.promise}}}]),r.factory("$cordovaContacts",["$q",function(r){var e=!1,t=[];return{throwsError:e,contacts:t,save:function(e){var t=r.defer();if(this.throwsError)t.reject("There was an error saving the contact.");else{for(var o=null,i=0;i<this.contacts.length;i++)if(this.contacts[i].id===e.id){o=i;break}null===o?(this.contacts.push(e),t.resolve()):t.reject("Contact already exists.")}return t.promise},remove:function(e){var t=r.defer();if(this.throwsError)t.reject("There was an error saving the contact.");else{for(var o=null,i=0;i<this.contacts.length;i++)if(this.contacts[i].id===e.id){o=i;break}null===o?t.reject("Unable to find contact."):(this.contacts.splice(o,1),t.resolve())}return t.promise},find:function(e){var t=r.defer();if(this.throwsError)t.reject("There was an error finding the contact.");else{var o=e.fields||["id","displayName"];if(delete e.fields,o)if("*"===o)t.resolve(this.contacts);else{for(var i=[],n=0;n<this.contacts.length;n++)for(var s in this.contacts[n])var a=this.contacts[n][s];t.resolve(i)}else t.reject("ContactError.INVALID_ARGUMENT_ERROR")}return t.promise}}}]),r.factory("$cordovaDatePicker",["$q",function(r){return{show:function(e){var t=r.defer();return e=e||{date:new Date,mode:"date"},t.resolve(e.date),t.promise}}}]),r.factory("$cordovaDevice",function(){var r="",e="",t="",o="",i="",n="";return{device:r,cordova:e,model:t,platform:o,uuid:i,version:n,version:n,getDevice:function(){return this.device},getCordova:function(){return this.cordova},getModel:function(){return this.model},getPlatform:function(){return this.platform},getUUID:function(){return this.uuid},getVersion:function(){return this.version},getManufacturer:function(){return this.manufacturer}}}),r.factory("$cordovaDeviceMotion",["$interval","$q",function(r,e){var t=null,o=!1,i=[],n=[];return{currentAcceleration:t,throwsError:o,positions:i,watchIntervals:n,getCurrentAcceleration:function(){var r=e.defer();return this.throwsError?r.reject("There was an error getting the current acceleration."):r.resolve(this.currentAcceleration),r.promise},watchAcceleration:function(t){var o=e.defer(),i=Math.floor(1e6*Math.random()+1);if(this.positions=[],self=this,this.throwsError)o.reject("There was an error watching the current acceleration.");else{var n=1e4;t&&t.frequency&&(n=t.frequency),this.watchIntervals.push(r(function(){self.throwsError&&o.reject("There was an error watching the acceleration.");var r=Math.floor(100*Math.random()+1),e=Math.floor(100*Math.random()+1),t=Math.floor(100*Math.random()+1),i={x:r,y:e,z:t,timestamp:Date.now()};self.positions.push(i),o.notify(i)},n))}return{watchId:i,promise:o.promise}},clearWatch:function(t){var o=e.defer();if(t)if(this.throwsError)o.reject("Unable to clear watch.");else{for(var i=-1,s=0;s<this.watchIntervals.length;s++)if(this.watchIntervals[s].watchId===t){r.cancel(n[s].interval),i=s;break}-1!==i&&this.watchIntervals.splice(i,1)}else o.reject("Unable to clear watch. No watch ID provided.");return o.promise}}}]),r.factory("$cordovaDeviceOrientation",["$interval","$q",function(r,e){var t=null,o=!1,i=[],n=[];return{currentHeading:t,throwsError:o,readings:i,watchIntervals:n,getCurrentHeading:function(){var r=e.defer();return this.throwsError?r.reject("There was an error getting the current heading."):r.resolve(this.currentHeading),r.promise},watchHeading:function(t){var o=e.defer(),i=Math.floor(1e6*Math.random()+1),s=this;if(s.readings=[],s.throwsError)o.reject("There was an error getting the compass heading.");else{var a=100;t&&t.frequency&&(a=t.frequency),s.watchIntervals.push({watchID:i,interval:r(function(){s.throwsError&&o.reject("There was an error watching the acceleration.");var r=359.99*Math.random()+1,e=359.99*Math.random()+1,t=Math.floor(360*Math.random()+1),i={magneticHeading:r,trueHeading:e,headingAccuracy:t,timestamp:Date.now()};s.readings.push(i),o.notify(i)},a)})}var c=function(e){for(var t=-1,o=0;o<s.watchIntervals.length;o++)if(s.watchIntervals[o].watchID===e){r.cancel(n[o].interval),t=o;break}-1!==t&&s.watchIntervals.splice(t,1)};return o.promise.cancel=function(){c(i)},o.promise.clearWatch=function(r){c(r||i)},o.promise.watchID=i,o.promise},clearWatch:function(t){var o=e.defer();if(t)if(this.throwsError)o.reject("Unable to clear watch.");else{for(var i=-1,s=0;s<this.watchIntervals.length;s++)if(this.watchIntervals[s].watchId===t){r.cancel(n[s].interval),i=s;break}-1!==i&&this.watchIntervals.splice(i,1)}else o.reject("Unable to clear watch. No watch ID provided.");return o.promise}}}]),r.factory("$cordovaDialogs",["$q",function(r){var e=!1,t="",o="",i="",n=0,s=!0;return{dialogText:e,dialogTitle:t,defaultValue:o,promptResponse:i,buttonLabels:[],beepCount:n,useHostAbilities:s,alert:function(e,t,o){var i=r.defer();return this.useHostAbilities?(alert(e),i.resolve()):(this.dialogText=e,this.dialogTitle=t,this.buttonLabels.push(o),i.resolve()),i.promise},confirm:function(e,t,o){var i=r.defer();if(this.useHostAbilities){var n=confirm(e);i.resolve(n?2:1)}else this.dialogText=e,this.dialogTitle=t,this.buttonLabels.push(o),i.resolve(0);return i.promise},prompt:function(e,t,o,i){var n=r.defer();if(this.useHostAbilities){var s=prompt(e,i);n.resolve(s)}else{this.dialogText=e,this.dialogTitle=t,this.defaultValue=i;for(var a=0;a<o.length;a++)this.buttonLabels.push(o[a]);n.resolve(this.promptResponse)}return n.promise},beep:function(r){this.beepCount=r}}}]),r.factory("$cordovaFile",["$q",function(r){var e=!1,t={},o=!1,i={},n=function(e){var t=r.defer();return this.throwsError?t.reject(e):t.resolve(),t.promise};return{throwsError:e,fileSystem:t,shouldMockFiles:o,files:i,checkDir:function(e){if(this.shouldMockFiles){var t=r.defer();return this.files[e]&&!this.files[e].isFile?t.resolve():t.reject(),t.promise}return n.call(this,"There was an error checking the directory.")},createDir:function(e,t){if(this.shouldMockFiles){var o=r.defer();return this.files[e]={isFile:!1},o.resolve(),o.promise}return n.call(this,"There was an error creating the directory.")},listDir:function(r){return n.call(this,"There was an error listing the directory")},checkFile:function(e){if(this.shouldMockFiles){var t=r.defer();return this.files[e]&&this.files[e].isFile?t.resolve():t.reject(),t.promise}return n.call(this,"There was an error checking for the file.")},createFile:function(e,t){if(this.shouldMockFiles){var o=r.defer();return this.files[e]={isFile:!0,fileContent:""},o.resolve(),o.promise}return n.call(this,"There was an error creating the file.")},removeFile:function(r,e){return n.call(this,"There was an error removng the file.")},writeFile:function(r,e,t){return this.shouldMockFiles&&r&&e&&(this.files[r]={isFile:!0,fileContent:e}),n.call(this,"There was an error writing the file.")},readFile:function(r){return this.readAsText(r)},readAsText:function(e){if(this.shouldMockFiles){var t=r.defer();return i[e]&&i[e].isFile?t.resolve(i[e].fileContent):t.reject(),t.promise}return n.call(this,"There was an error reading the file as text.")},readAsDataURL:function(r){return n.call(this,"There was an error reading the file as a data url.")},readAsBinaryString:function(r){return n.call(this,"There was an error reading the file as a binary string.")},readAsArrayBuffer:function(r){return n.call(this,"There was an error reading the file as an array buffer.")},readFileMetadata:function(r){return n.call(this,"There was an error reading the file metadata")},readFileAbsolute:function(r){return n.call(this,"There was an error reading the file from the absolute path")},readFileMetadataAbsolute:function(r){return n.call(this,"There was an error reading the file metadta from the absolute path")}}}]),r.factory("$cordovaFileOpener2",["$q",function(r){var e=!1;return{throwsError:e,open:function(e,t){var o=r.defer();return this.throwError?o.reject({status:0,message:"There was an error capturing the file."}):o.resolve(),o.promise},uninstall:function(e){var t=r.defer();return this.throwError?t.reject({status:0,message:"There was an error capturing the packageId."}):t.resolve(),t.promise},appIsInstalled:function(e){var t=r.defer();return this.throwError?t.reject({status:0,message:"There was an error capturing the packageId."}):t.resolve(),t.promise}}}]),r.factory("$cordovaFileTransfer",["$q",function(r){var e=!1,t=function(e){var t=r.defer();return this.throwsError?t.reject(e):t.resolve(),t.promise};return{throwsError:e,download:function(r,e,o,i){return t.call(this,"There was an error downloading the file.")},upload:function(r,e,o){return t.call(this,"There was an error uploading the file.")}}}]),r.factory("$cordovaGeolocation",["$interval","$q",function(r,e){var t=!1,o=!0,i=[],n=[],s=null,a=null;return{throwsError:t,watchIntervals:i,locations:n,currentPosition:s,nextPosition:a,useHostAbilities:o,getCurrentPosition:function(r){var t=e.defer();return this.throwsError?t.reject("There was an error getting the location."):(r&&(r=r),this.useHostAbilities?navigator.geolocation?navigator.geolocation.getCurrentPosition(function(r){this.currentPosition=r,t.resolve(this.currentPosition)},function(r){t.reject(r)}):t.reject("Geolocation is not supported by this browser."):t.resolve(this.currentPosition)),t.promise},watchPosition:function(t){var o=e.defer(),n=Math.floor(1e6*Math.random()+1),s=this;if(s.locations=[],s.throwsError)o.reject("There was an error getting the geolocation.");else{var a=1e3;t&&t.timeout&&(a=t.timeout),s.watchIntervals.push({watchID:n,interval:r(function(){s.throwsError&&o.reject("There was an error watching the geolocation.");var r=s.nextPosition;null===r&&(s.useHostAbilities?navigator.geolocation?navigator.geolocation.getCurrentPosition(function(r){s.currentPosition=r,s.locations.push(r),o.resolve(r)},function(r){o.reject(r)}):o.reject("Geolocation is not supported by this browser."):(r={coords:{latitude:180*Math.random()+1-90,longitude:360*Math.random()+1-180,altitude:100*Math.random()+1,accuracy:10*Math.random()+1,altitudeAccuracy:10*Math.random()+1,heading:360*Math.random()+1,speed:100*Math.random()+1},timestamp:Date.now()},s.currentPosition=r,s.locations.push(r),o.notify(r)))},a)})}var c=function(e){for(var t=-1,o=0;o<s.watchIntervals.length;o++)if(s.watchIntervals[o].watchID===e){r.cancel(i[o].interval),t=o;break}-1!==t&&s.watchIntervals.splice(t,1)};return o.promise.cancel=function(){c(n)},o.promise.clearWatch=function(r){c(r||n)},o.promise.watchID=n,o.promise},clearWatch:function(t){var o=e.defer();if(t)if(this.throwsError)o.reject("Unable to clear watch.");else{for(var n=-1,s=0;s<this.watchIntervals.length;s++)if(this.watchIntervals[s].watchID===t){r.cancel(i[s].interval),n=s;break}-1!==n&&this.watchIntervals.splice(n,1)}else o.reject("Unable to clear watch. No watch ID provided.");return o.promise}}}]),r.factory("$cordovaGlobalization",["$q",function(r){var e=!1,t=navigator.language?navigator.language:"en-US",o={value:t},i="Sunday",n={value:t};return{throwsError:e,preferredLanguage:o,localeName:n,firstDayOfWeek:i,getPreferredLanguage:function(){var e=r.defer();return this.throwsError?e.reject("There was an error getting the preferred language."):e.resolve(this.preferredLanguage),e.promise},getLocaleName:function(){var e=r.defer();return this.throwsError?e.reject("There was an error getting the locale name."):e.resolve(this.localeName),e.promise},getFirstDayOfWeek:function(){var e=r.defer();return this.throwsError?e.reject("There was an error getting the first day of week."):e.resolve(this.firstDayOfWeek),e.promise},dateToString:function(e,t){var o=r.defer();if(this.throwsError)o.reject("There was an error getting the string from the date.");else{var i="";e=e,t=t,o.resolve(i)}return o.promise},stringToDate:function(e,t){var o=r.defer();if(this.throwsError)o.reject("There was an error getting the date from the string.");else{var i="";e=e,t=t,o.resolve(i)}return o.promise},getDatePattern:function(e){var t=r.defer();if(this.throwsError)t.reject("There was an error getting the date pattern.");else{var o="";e=e,t.resolve(o)}return t.promise},getDateNames:function(e){var t=r.defer();if(this.throwsError)t.reject("There was an error getting the date names.");else{var o="";e=e,t.resolve(o)}return t.promise},isDayLightSavingsTime:function(e){var t=r.defer();if(this.throwsError)t.reject("There was an error getting if this is in daylight savings time mode.");else{var o="";e=e,t.resolve(o)}return t.promise},numberToString:function(e,t){var o=r.defer();if(this.throwsError)o.reject("There was an error convertng the number to a string.");else{var i="";e=e,t=t,o.resolve(i)}return o.promise},stringToNumber:function(e,t){var o=r.defer();if(this.throwsError)o.reject("There was an error convertng the string to a number.");else{var i="";t=t,o.resolve(i)}return o.promise},getNumberPattern:function(e){var t=r.defer();if(this.throwsError)t.reject("There was an error convertng the string to a number.");else{var o="";e=e,t.resolve(o)}return t.promise},getCurrencyPattern:function(e){var t=r.defer();if(this.throwsError)t.reject("There was an error convertng the string to a number.");else{var o="";e=e,t.resolve(o)}return t.promise}}}]),r.factory("$cordovaGoogleAnalytics",["$q",function(r){var e=!1,t={};t.throwsError=e;var o=["startTrackerWithId","setUserId","debugMode","trackView","addCustomDimension","trackEvent","trackException","trackTiming","addTransaction","addTransactionItem"];return o.forEach(function(e){t[e]=function(){var e=r.defer();return this.throwsError?e.reject():e.resolve(),e.promise}}),t}]),r.factory("$cordovaGooglePlayGame",["$q",function(r){var e=!1,t=!1,o="";return{_throwsError:e,_isSignedIn:t,_displayName:o,auth:function(){var e=r.defer();return this._throwsError?e.reject("There was a auth error."):(this.isSignedIn=!0,e.resolve("SIGN IN SUCCESS")),e.promise},signout:function(){var e=r.defer();return this.throwsError?e.reject("There was a signout error."):e.resolve(),e.promise},isSignedIn:function(){var e=r.defer();return this._throwsError?e.reject("There was a isSignedIn error."):e.resolve({isSignedIn:this._isSignedIn}),e.promise},showPlayer:function(){var e=r.defer();return this.throwsError?e.reject("There was a showPlayer error."):e.resolve({displayName:this._displayName}),e.promise},submitScore:function(e){var t=r.defer();return this._throwsError?t.reject("There was a submitScore error."):t.resolve("OK"),t.promise},showAllLeaderboards:function(){var e=r.defer();return this.throwsError?e.reject("There was a showAllLeaderboards error."):e.resolve("OK"),e.promise},showLeaderboard:function(e){var t=r.defer();return this._throwsError?t.reject("There was a showLeaderboard error."):t.resolve("OK"),t.promise},unlockAchievement:function(e){var t=r.defer();return this.throwsError?t.reject("There was a unlockAchievement error."):t.resolve("OK"),t.promise},incrementAchievement:function(e){var t=r.defer();return this._throwsError?t.reject("There was a incrementAchievement error."):t.resolve("OK"),t.promise},showAchievements:function(){var e=r.defer();return this.throwsError?e.reject("There was a showAchievements error."):e.resolve("OK"),e.promise}}}]),r.factory("$cordovaKeyboard",function(){var r=!1;return{hideAccessoryBar:function(r){},close:function(){r=!1},show:function(){r=!0},disableScroll:function(r){},isVisible:function(){return r}}}),r.factory("$cordovaKeychain",["$q",function(r){var e={};return{keychains:e,getForKey:function(e,t){var o=r.defer();return this.keychains[t]?o.resolve(this.keychains[t][e]):o.reject(),o.promise},setForKey:function(e,t,o){var i=r.defer();return this.keychains[t]||(this.keychains[t]={}),this.keychains[t][e]=o,i.resolve(),i.promise},removeForKey:function(e,t){var o=r.defer();return this.keychains[t]&&delete this.keychains[t][e],o.resolve(),o.promise}}}]),r.factory("$cordovaNetwork",function(){var r="WiFi connection",e=!0;return{connectionType:r,isConnected:e,getNetwork:function(){return this.connectionType},isOnline:function(){return this.isConnected},isOffline:function(){return!this.isConnected}}}),r.factory("$cordovaPush",["$q","$timeout","$rootScope",function(r,e,t){var o=!1,i="";return{throwsError:o,deviceToken:i,onNotification:function(r){e(function(){t.$broadcast("$cordovaPush:notificationReceived",r)})},register:function(e){var t=this,o=r.defer();return void 0!==e&&void 0===e.ecb&&(e.ecb=this.onNotification),this.throwsError?o.reject("There was a register error."):(o.resolve(this.deviceToken),e&&e.ecb&&e.ecb({event:"registered",regid:t.deviceToken})),o.promise},unregister:function(e){var t=r.defer();return this.throwsError?t.reject("There was a register error."):t.resolve(),t.promise}}}]),r.factory("$cordovaSocialSharing",["$q",function(r){var e=!1,t="",o="",i="",n="",s="",a="",c=[],h=[],u=[];return{throwsError:e,message:t,image:o,link:i,number:n,subject:a,toAddresses:c,bccAddresses:h,socialService:s,attachments:u,shareViaTwitter:function(e,t,o){var i=r.defer();return this.throwsError?i.reject("There was an error sharing via Twitter."):(this.message=e,this.image=t,this.link=o,i.resolve()),i.promise},shareViaWhatsApp:function(e,t,o){var i=r.defer();return this.throwsError?i.reject("There was an error sharing via WhatsApp."):(this.message=e,this.image=t,this.link=o,i.resolve()),i.promise},shareViaFacebook:function(e,t,o){var i=r.defer();return this.throwsError?i.reject("There was an error sharing via Facebook."):(this.message=e,this.image=t,this.link=o,i.resolve()),i.promise},shareViaSMS:function(e,t){var o=r.defer();return this.throwsError?o.reject("There was an error sharing via SMS."):(this.message=e,this.number=t,o.resolve()),o.promise},shareViaEmail:function(e,t,o,i,n){var s=r.defer();return this.throwsError?s.reject("There was an error sharing via SMS."):(this.message=e,this.subject=t,this.toAddresses=o,this.bccAddressesc=i,this.attachments=n,s.resolve()),s.promise},canShareViaEmail:function(){var e=r.defer();return this.throwsError?e.reject(!1):e.resolve(!0),e.promise},canShareVia:function(e,t,o,i,n){var s=r.defer();return this.throwsError?s.reject("There was an error sharing via SMS."):(this.message=t,this.socialService=e,this.subject=o,this.attachments=i,this.link=n,s.resolve()),s.promise},shareVia:function(e,t,o,i,n){var s=r.defer();return this.throwsError?s.reject("There was an error sharing via SMS."):(this.socialService=e,this.message=t,this.subject=o,this.attachments=i,this.link=n,s.resolve()),s.promise},share:function(e,t,o,i){var n=r.defer();return this.throwsError?n.reject("There was an error sharing via SMS."):(this.message=e,this.subject=t,this.attachments=o,this.link=i,n.resolve()),n.promise}}}]),r.factory("$cordovaSplashscreen",function(){var r=!1;return{isVisible:r,hide:function(){return this.isVisible=!1,!0},show:function(){return this.isVisible=!0,!0}}}),r.factory("$cordovaStatusbar",function(){var r=!0,e=!0;return{isStatusBarVisible:r,canOverlayWebView:e,overlaysWebView:function(r){this.canOverlayWebView=r},style:function(r){return r},styleHex:function(r){return r},styleColor:function(r){return r},hide:function(){this.isStatusBarVisible=!1},show:function(){this.isStatusBarVisible=!0},isVisible:function(){return this.isStatusBarVisible}}}),r.factory("$cordovaToast",["$q",function(r){var e=!1;return{throwsError:e,showShortTop:function(e){var t=r.defer();return this.throwsError?t.reject("There was an error showing the toast."):t.resolve(),t.promise},showShortCenter:function(e){var t=r.defer();return this.throwsError?t.reject("There was an error showing the toast."):t.resolve(),t.promise},showShortBottom:function(e){var t=r.defer();return this.throwsError?t.reject("There was an error showing the toast."):t.resolve(),t.promise},showLongTop:function(e){var t=r.defer();return this.throwsError?t.reject("There was an error showing the toast."):t.resolve(),t.promise},showLongCenter:function(e){var t=r.defer();return this.throwsError?t.reject("There was an error showing the toast."):t.resolve(),t.promise},showLongBottom:function(e){var t=r.defer();return this.throwsError?t.reject("There was an error showing the toast."):t.resolve(),t.promise},show:function(e,t,o){var i=r.defer();return this.throwsError?i.reject("There was an error showing the toast."):i.resolve(),i.promise}}}]),r.factory("$cordovaVibration",["$timeout",function(r){var e=!1,t=null;return{vibrateTimer:t,isVibrating:e,vibrate:function(e){e>0&&(this.isVibrating=!0,self=this,e instanceof Array?this.vibrateTimer=r(function(){self.isVibrating=!1,self.vibrateTimer=null},e[0]):this.vibrateTimer=r(function(){self.isVibrating=!1,self.vibrateTimer=null},e))},vibrateWithPattern:function(r,e){},cancelVibration:function(){null!==this.vibrateTimer&&this.isVibrating===!0&&(r.cancel(this.vibrateTimer),this.isVibrating=!1)}}}])}(); \ No newline at end of file
diff --git a/www/lib/ngCordova/dist/ng-cordova.js b/www/lib/ngCordova/dist/ng-cordova.js
index 4f749d9f..0e7a08f1 100644
--- a/www/lib/ngCordova/dist/ng-cordova.js
+++ b/www/lib/ngCordova/dist/ng-cordova.js
@@ -1,6 +1,6 @@
/*!
* ngCordova
- * v0.1.17-alpha
+ * v0.1.18-alpha
* Copyright 2014 Drifty Co. http://drifty.com/
* See LICENSE in this repository for license information
*/
@@ -133,6 +133,21 @@ angular.module('ngCordova.plugins.appRate', [])
.provider("$cordovaAppRate", [function () {
+ /**
+ * Set defaults settings to AppRate
+ *
+ * @param {Object} defaults - AppRate default settings
+ * @param {string} defaults.language
+ * @param {string} defaults.appName
+ * @param {boolean} defaults.promptForNewVersion
+ * @param {boolean} defaults.openStoreInApp
+ * @param {number} defaults.usesUntilPrompt
+ * @param {boolean} defaults.useCustomRateDialog
+ * @param {string} defaults.iosURL
+ * @param {string} defaults.androidURL
+ * @param {string} defaults.blackberryURL
+ * @param {string} defaults.windowsURL
+ */
this.setPreferences = function (defaults) {
if (!defaults || !angular.isObject(defaults)) {
return;
@@ -150,6 +165,15 @@ angular.module('ngCordova.plugins.appRate', [])
AppRate.preferences.storeAppURL.windows8 = defaults.windowsURL || null;
};
+ /**
+ * Set custom locale
+ *
+ * @param {Object} customObj
+ * @param {string} customObj.title
+ * @param {string} customObj.cancelButtonLabel
+ * @param {string} customObj.laterButtonLabel
+ * @param {string} customObj.rateButtonLabel
+ */
this.setCustomLocale = function (customObj) {
var strings = {
title: 'Rate %@',
@@ -203,13 +227,22 @@ angular.module('ngCordova.plugins.appVersion', [])
.factory('$cordovaAppVersion', ['$q', function ($q) {
return {
- getAppVersion: function () {
+ getVersionNumber: function () {
var q = $q.defer();
- cordova.getAppVersion(function (version) {
+ cordova.getAppVersion.getVersionNumber(function (version) {
q.resolve(version);
});
return q.promise;
+ },
+
+ getVersionCode: function () {
+ var q = $q.defer();
+ cordova.getAppVersion.getVersionCode(function (code) {
+ q.resolve(code);
+ });
+
+ return q.promise;
}
};
}]);
@@ -294,7 +327,7 @@ angular.module('ngCordova.plugins.badge', [])
if (permission) {
q.resolve(true);
} else {
- q.reject("You do not have permission");
+ q.reject('You do not have permission');
}
});
@@ -305,14 +338,16 @@ angular.module('ngCordova.plugins.badge', [])
return cordova.plugins.notification.badge.promptForPermission();
},
- set: function (number) {
+ set: function (badge, callback, scope) {
var q = $q.defer();
cordova.plugins.notification.badge.hasPermission(function (permission) {
if (permission) {
- q.resolve(cordova.plugins.notification.badge.set(number));
+ q.resolve(
+ cordova.plugins.notification.badge.set(badge, callback, scope)
+ );
} else {
- q.reject("You do not have permission to set Badge");
+ q.reject('You do not have permission to set Badge');
}
});
return q.promise;
@@ -326,26 +361,54 @@ angular.module('ngCordova.plugins.badge', [])
q.resolve(badge);
});
} else {
- q.reject("You do not have permission to get Badge");
+ q.reject('You do not have permission to get Badge');
}
});
return q.promise;
},
- clear: function () {
+ clear: function (callback, scope) {
var q = $q.defer();
cordova.plugins.notification.badge.hasPermission(function (permission) {
if (permission) {
- q.resolve(cordova.plugins.notification.badge.clear());
+ q.resolve(cordova.plugins.notification.badge.clear(callback, scope));
} else {
- q.reject("You do not have permission to clear Badge");
+ q.reject('You do not have permission to clear Badge');
}
});
return q.promise;
},
+ increase: function (count, callback, scope) {
+ var q = $q.defer();
+
+ this.hasPermission().then(function (){
+ q.resolve(
+ cordova.plugins.notification.badge.increase(count, callback, scope)
+ );
+ }, function (){
+ q.reject('You do not have permission to increase Badge');
+ }) ;
+
+ return q.promise;
+ },
+
+ decrease: function (count, callback, scope) {
+ var q = $q.defer();
+
+ this.hasPermission().then(function (){
+ q.resolve(
+ cordova.plugins.notification.badge.decrease(count, callback, scope)
+ );
+ }, function (){
+ q.reject('You do not have permission to decrease Badge');
+ }) ;
+
+ return q.promise;
+ },
+
configure: function (config) {
return cordova.plugins.notification.badge.configure(config);
}
@@ -394,18 +457,27 @@ angular.module('ngCordova.plugins.batteryStatus', [])
.factory('$cordovaBatteryStatus', ['$rootScope', '$window', '$timeout', function ($rootScope, $window, $timeout) {
+ /**
+ * @param {string} status
+ */
var batteryStatus = function (status) {
$timeout(function () {
$rootScope.$broadcast('$cordovaBatteryStatus:status', status);
});
};
+ /**
+ * @param {string} status
+ */
var batteryCritical = function (status) {
$timeout(function () {
$rootScope.$broadcast('$cordovaBatteryStatus:critical', status);
});
};
+ /**
+ * @param {string} status
+ */
var batteryLow = function (status) {
$timeout(function () {
$rootScope.$broadcast('$cordovaBatteryStatus:low', status);
@@ -430,16 +502,26 @@ angular.module('ngCordova.plugins.batteryStatus', [])
angular.module('ngCordova.plugins.ble', [])
- .factory('$cordovaBLE', ['$q', function ($q) {
+ .factory('$cordovaBLE', ['$q', '$timeout', function ($q, $timeout) {
return {
scan: function (services, seconds) {
var q = $q.defer();
- ble.scan(services, seconds, function (result) {
- q.resolve(result);
+
+ ble.startScan(services, function (result) {
+ q.notify(result);
}, function (error) {
q.reject(error);
});
+
+ $timeout(function () {
+ ble.stopScan(function () {
+ q.resolve();
+ }, function (error) {
+ q.reject(error);
+ });
+ }, seconds*1000);
+
return q.promise;
},
@@ -545,9 +627,15 @@ angular.module('ngCordova.plugins.bluetoothSerial', [])
return {
connect: function (address) {
var q = $q.defer();
+ var disconnectionPromise = $q.defer();
+ var isConnected = false;
$window.bluetoothSerial.connect(address, function () {
- q.resolve();
+ isConnected = true;
+ q.resolve(disconnectionPromise);
}, function (error) {
+ if(isConnected === false) {
+ disconnectionPromise.reject(error);
+ }
q.reject(error);
});
return q.promise;
@@ -759,11 +847,15 @@ angular.module('ngCordova.plugins.brightness', [])
get: function () {
var q = $q.defer();
- $window.cordova.plugins.brightness.getBrightness(function (result) {
- q.resolve(result);
- }, function (err) {
- q.reject(err);
- });
+ if (!$window.cordova) {
+ q.reject("Not supported without cordova.js");
+ } else {
+ $window.cordova.plugins.brightness.getBrightness(function (result) {
+ q.resolve(result);
+ }, function (err) {
+ q.reject(err);
+ });
+ }
return q.promise;
},
@@ -771,11 +863,15 @@ angular.module('ngCordova.plugins.brightness', [])
set: function (data) {
var q = $q.defer();
- $window.cordova.plugins.brightness.setBrightness(data, function (result) {
- q.resolve(result);
- }, function (err) {
- q.reject(err);
- });
+ if (!$window.cordova) {
+ q.reject("Not supported without cordova.js");
+ } else {
+ $window.cordova.plugins.brightness.setBrightness(data, function (result) {
+ q.resolve(result);
+ }, function (err) {
+ q.reject(err);
+ });
+ }
return q.promise;
},
@@ -783,11 +879,15 @@ angular.module('ngCordova.plugins.brightness', [])
setKeepScreenOn: function (bool) {
var q = $q.defer();
- $window.cordova.plugins.brightness.setKeepScreenOn(bool, function (result) {
- q.resolve(result);
- }, function (err) {
- q.reject(err);
- });
+ if (!$window.cordova) {
+ q.reject("Not supported without cordova.js");
+ } else {
+ $window.cordova.plugins.brightness.setKeepScreenOn(bool, function (result) {
+ q.resolve(result);
+ }, function (err) {
+ q.reject(err);
+ });
+ }
return q.promise;
}
@@ -801,6 +901,7 @@ angular.module('ngCordova.plugins.brightness', [])
angular.module('ngCordova.plugins.calendar', [])
.factory('$cordovaCalendar', ['$q', '$window', function ($q, $window) {
+
return {
createCalendar: function (options) {
var d = $q.defer(),
@@ -1188,6 +1289,115 @@ angular.module('ngCordova.plugins.capture', [])
};
}]);
+// install : cordova plugin add https://github.com/vkeepe/card.io.git
+// link : https://github.com/vkeepe/card.io.git
+
+angular.module('ngCordova.plugins.cardIO', [])
+
+ .provider(
+ '$cordovaNgCardIO', [function () {
+
+ /**
+ * Default array of response data from cardIO scan card
+ */
+ var defaultRespFields = [
+ "card_type",
+ "redacted_card_number",
+ "card_number",
+ "expiry_month",
+ "expiry_year",
+ "short_expiry_year",
+ "cvv",
+ "zip"
+ ];
+
+ /**
+ * Default config for cardIO scan function
+ */
+ var defaultScanConfig = {
+ "expiry": true,
+ "cvv": true,
+ "zip": false,
+ "suppressManual": false,
+ "suppressConfirm": false,
+ "hideLogo": true
+ };
+
+ /**
+ * Configuring defaultRespFields using $cordovaNgCardIOProvider
+ *
+ */
+ this.setCardIOResponseFields = function (filelds) {
+ if (!filelds || !angular.isArray(filelds)) {
+ return;
+ }
+ defaultRespFields = filelds;
+ };
+
+ /**
+ *
+ * Configuring defaultScanConfig using $cordovaNgCardIOProvider
+ */
+ this.setScanerConfig = function (config) {
+ if (!config || !angular.isObject(config)) {
+ return;
+ }
+
+ defaultScanConfig.expiry = config.expiry || true;
+ defaultScanConfig.cvv = config.cvv || true;
+ defaultScanConfig.zip = config.zip || false;
+ defaultScanConfig.suppressManual = config.suppressManual
+ || false;
+ defaultScanConfig.suppressConfirm = config.suppressConfirm
+ || false;
+ defaultScanConfig.hideLogo = config.hideLogo || true;
+ };
+
+ /**
+ * Function scanCard for $cordovaNgCardIO service to make scan of card
+ *
+ */
+ this.$get = ['$q', function ($q) {
+ return {
+ scanCard: function () {
+
+ var deferred = $q.defer();
+ CardIO.scan(
+ defaultScanConfig,
+ function (response) {
+
+ if (response == null) {
+ deferred.reject(null);
+ } else {
+
+ var respData = {};
+ for (
+ var i = 0, len = defaultRespFields.length; i < len; i++) {
+ var field = defaultRespFields[i];
+
+ if (field == "short_expiry_year") {
+ respData[field] = String(response['expiry_year']).substr(
+ 2, 2
+ )
+ || "";
+ } else {
+ respData[field] = response[field] || "";
+ }
+ }
+ deferred.resolve(respData);
+ }
+ },
+ function () {
+ deferred.reject(null);
+ }
+ );
+ return deferred.promise;
+ }
+ }
+ }]
+ }]
+);
+
// install : cordova plugin add https://github.com/VersoSolutions/CordovaClipboard.git
// link : https://github.com/VersoSolutions/CordovaClipboard
@@ -1264,13 +1474,20 @@ angular.module('ngCordova.plugins.contacts', [])
var q = $q.defer();
var fields = options.fields || ['id', 'displayName'];
delete options.fields;
-
- navigator.contacts.find(fields, function (results) {
- q.resolve(results);
- }, function (err) {
- q.reject(err);
- }, options);
-
+ if (Object.keys(options).length === 0) {
+ navigator.contacts.find(fields, function (results) {
+ q.resolve(results);
+ },function (err) {
+ q.reject(err)
+ });
+ }
+ else {
+ navigator.contacts.find(fields, function (results) {
+ q.resolve(results);
+ }, function (err) {
+ q.reject(err);
+ }, options);
+ }
return q.promise;
},
@@ -1298,7 +1515,9 @@ angular.module('ngCordova.plugins.contacts', [])
// link : https://github.com/VitaliiBlagodir/cordova-plugin-datepicker
angular.module('ngCordova.plugins.datePicker', [])
+
.factory('$cordovaDatePicker', ['$window', '$q', function ($window, $q) {
+
return {
show: function (options) {
var q = $q.defer();
@@ -1379,6 +1598,14 @@ angular.module('ngCordova.plugins.device', [])
*/
getVersion: function () {
return device.version;
+ },
+
+ /**
+ * Returns the device manufacturer.
+ * @returns {String}
+ */
+ getManufacturer: function () {
+ return device.manufacturer;
}
};
}]);
@@ -1394,6 +1621,11 @@ angular.module('ngCordova.plugins.deviceMotion', [])
getCurrentAcceleration: function () {
var q = $q.defer();
+ if (angular.isUndefined(navigato.accelerometer) ||
+ !angular.isFunction(navigator.accelerometer.getCurrentAcceleration)) {
+ q.reject('Device do not support watchAcceleration');
+ }
+
navigator.accelerometer.getCurrentAcceleration(function (result) {
q.resolve(result);
}, function (err) {
@@ -1406,6 +1638,11 @@ angular.module('ngCordova.plugins.deviceMotion', [])
watchAcceleration: function (options) {
var q = $q.defer();
+ if (angular.isUndefined(navigato.accelerometer) ||
+ !angular.isFunction(navigator.accelerometer.watchAcceleration)) {
+ q.reject('Device do not support watchAcceleration');
+ }
+
var watchID = navigator.accelerometer.watchAcceleration(function (result) {
q.notify(result);
}, function (err) {
@@ -1437,13 +1674,20 @@ angular.module('ngCordova.plugins.deviceMotion', [])
angular.module('ngCordova.plugins.deviceOrientation', [])
.factory('$cordovaDeviceOrientation', ['$q', function ($q) {
+
var defaultOptions = {
frequency: 3000 // every 3s
};
+
return {
getCurrentHeading: function () {
var q = $q.defer();
+ if(!navigator.compass) {
+ q.reject('No compass on Device');
+ return q.promise;
+ }
+
navigator.compass.getCurrentHeading(function (result) {
q.resolve(result);
}, function (err) {
@@ -1456,6 +1700,11 @@ angular.module('ngCordova.plugins.deviceOrientation', [])
watchHeading: function (options) {
var q = $q.defer();
+ if(!navigator.compass) {
+ q.reject('No compass on Device');
+ return q.promise;
+ }
+
var _options = angular.extend(defaultOptions, options);
var watchID = navigator.compass.watchHeading(function (result) {
q.notify(result);
@@ -1592,6 +1841,12 @@ angular.module('ngCordova.plugins.facebook', [])
.provider('$cordovaFacebook', [function () {
+ /**
+ * Init browser settings for Facebook plugin
+ *
+ * @param {number} id
+ * @param {string} version
+ */
this.browserInit = function (id, version) {
this.appID = id;
this.appVersion = version || "v2.0";
@@ -1668,6 +1923,7 @@ angular.module('ngCordova.plugins.facebook', [])
// link : https://github.com/floatinghotpot/cordova-plugin-facebookads
angular.module('ngCordova.plugins.facebookAds', [])
+
.factory('$cordovaFacebookAds', ['$q', '$window', function ($q, $window) {
return {
@@ -3017,6 +3273,7 @@ angular.module('ngCordova.plugins.globalization', [])
// link : https://github.com/floatinghotpot/cordova-admob-pro
angular.module('ngCordova.plugins.googleAds', [])
+
.factory('$cordovaGoogleAds', ['$q', '$window', function ($q, $window) {
return {
@@ -3310,7 +3567,6 @@ angular.module('ngCordova.plugins.googlePlayGame', [])
.factory('$cordovaGooglePlayGame', ['$q', function ($q) {
return {
-
auth: function () {
var q = $q.defer();
@@ -3428,7 +3684,7 @@ angular.module('ngCordova.plugins.googlePlayGame', [])
// install : cordova plugin add https://github.com/EddyVerbruggen/cordova-plugin-googleplus.git
// link : https://github.com/EddyVerbruggen/cordova-plugin-googleplus
-angular.module('ngCordova.plugins.googleplus', [])
+angular.module('ngCordova.plugins.googlePlus', [])
.factory('$cordovaGooglePlus', ['$q', '$window', function ($q, $window) {
@@ -3475,6 +3731,19 @@ angular.module('ngCordova.plugins.googleplus', [])
$window.plugins.googleplus.disconnect(function (response) {
q.resolve(response);
});
+ },
+
+ isAvailable: function () {
+ var q = $q.defer();
+ $window.plugins.googleplus.isAvailable(function (available) {
+ if (available) {
+ q.resolve(available);
+ } else {
+ q.reject(available);
+ }
+ });
+
+ return q.promise;
}
};
@@ -3712,6 +3981,7 @@ angular.module('ngCordova.plugins.healthKit', [])
// link : https://github.com/floatinghotpot/cordova-httpd
angular.module('ngCordova.plugins.httpd', [])
+
.factory('$cordovaHttpd', ['$q', function ($q) {
return {
@@ -4057,7 +4327,7 @@ angular.module('ngCordova.plugins.instagram', [])
angular.module('ngCordova.plugins.keyboard', [])
- .factory('$cordovaKeyboard', ['$rootScope', '$timeout', function ($rootScope, $timeout) {
+ .factory('$cordovaKeyboard', ['$rootScope', function ($rootScope) {
var keyboardShowEvent = function () {
$rootScope.$evalAsync(function () {
@@ -4148,6 +4418,32 @@ angular.module('ngCordova.plugins.keychain', [])
};
}]);
+// install : cordova plugin add uk.co.workingedge.phonegap.plugin.launchnavigator
+// link : https://github.com/dpa99c/phonegap-launch-navigator
+
+angular.module('ngCordova.plugins.launchNavigator', [])
+
+ .factory('$cordovaLaunchNavigator', ['$q', function ($q) {
+
+ return {
+ navigate: function (destination, start, successFn, errorFn, options) {
+ var q = $q.defer();
+ launchnavigator.navigate(
+ destination,
+ start,
+ function (){
+ q.resolve();
+ },
+ function (error){
+ q.reject(error);
+ },
+ options);
+ return q.promise;
+ }
+ };
+
+ }]);
+
// install : cordova plugin add https://github.com/katzer/cordova-plugin-local-notifications.git
// link : https://github.com/katzer/cordova-plugin-local-notifications
@@ -4510,6 +4806,7 @@ angular.module('ngCordova.plugins.localNotification', [])
// link : https://github.com/floatinghotpot/cordova-plugin-mmedia
angular.module('ngCordova.plugins.mMediaAds', [])
+
.factory('$cordovaMMediaAds', ['$q', '$window', function ($q, $window) {
return {
@@ -4616,83 +4913,142 @@ angular.module('ngCordova.plugins.mMediaAds', [])
angular.module('ngCordova.plugins.media', [])
- .factory('$cordovaMedia', ['$q', function ($q) {
+.service('NewMedia', ['$q', '$interval', function ($q, $interval) {
+ var q, q2, q3, mediaStatus = null, mediaPosition = -1, mediaTimer, mediaDuration = -1;
- return {
- newMedia: function (src) {
- var q = $q.defer();
- var mediaStatus = null;
- var media;
+ function setTimer(media) {
+ if (angular.isDefined(mediaTimer)) return;
- media = new Media(src,
- function (success) {
+ mediaTimer = $interval(function () {
+ if (mediaDuration < 0) {
+ mediaDuration = media.getDuration();
+ if (q && mediaDuration > 0) q.notify({duration: mediaDuration});
+ }
+
+ media.getCurrentPosition(
+ // success callback
+ function (position) {
+ if (position > -1) {
+ mediaPosition = position;
+ }
+ },
+ // error callback
+ function (e) {
+ console.log("Error getting pos=" + e);
+ });
+
+ if (q) q.notify({position: mediaPosition});
+
+ }, 1000);
+ }
+
+ function clearTimer() {
+ if (angular.isDefined(mediaTimer)) {
+ $interval.cancel(mediaTimer);
+ mediaTimer = undefined;
+ }
+ }
+
+ function resetValues() {
+ mediaPosition = -1;
+ mediaDuration = -1;
+ }
+
+ function NewMedia(src) {
+ this.media = new Media(src,
+ function (success) {
+ clearTimer();
+ resetValues();
q.resolve(success);
- }, function (error) {
+ }, function (error) {
+ clearTimer();
+ resetValues();
q.reject(error);
- }, function (status) {
+ }, function (status) {
mediaStatus = status;
- });
+ q.notify({status: mediaStatus});
+ });
+ }
- // getCurrentPosition NOT WORKING!
- q.promise.getCurrentPosition = function () {
- media.getCurrentPosition(function (success) {
- }, function (error) {
- });
- };
+ // iOS quirks :
+ // - myMedia.play({ numberOfLoops: 2 }) -> looping
+ // - myMedia.play({ playAudioWhenScreenIsLocked : false })
+ NewMedia.prototype.play = function (options) {
+ q = $q.defer();
- q.promise.getDuration = function () {
- media.getDuration();
- };
+ if (typeof options !== "object") {
+ options = {};
+ }
- // iOS quirks :
- // - myMedia.play({ numberOfLoops: 2 }) -> looping
- // - myMedia.play({ playAudioWhenScreenIsLocked : false })
- q.promise.play = function (options) {
- if (typeof options !== "object") {
- options = {};
- }
- media.play(options);
- };
+ this.media.play(options);
- q.promise.pause = function () {
- media.pause();
- };
+ setTimer(this.media);
- q.promise.stop = function () {
- media.stop();
- };
+ return q.promise;
+ };
- q.promise.release = function () {
- media.release();
- };
+ NewMedia.prototype.pause = function () {
+ clearTimer();
+ this.media.pause();
+ };
- q.promise.seekTo = function (timing) {
- media.seekTo(timing);
- };
+ NewMedia.prototype.stop = function () {
+ this.media.stop();
+ };
- q.promise.setVolume = function (volume) {
- media.setVolume(volume);
- };
+ NewMedia.prototype.release = function () {
+ this.media.release();
+ this.media = undefined;
+ };
- q.promise.startRecord = function () {
- media.startRecord();
- };
+ NewMedia.prototype.seekTo = function (timing) {
+ this.media.seekTo(timing);
+ };
- q.promise.stopRecord = function () {
- media.stopRecord();
- };
+ NewMedia.prototype.setVolume = function (volume) {
+ this.media.setVolume(volume);
+ };
- q.promise.media = media;
+ NewMedia.prototype.startRecord = function () {
+ this.media.startRecord();
+ };
- return q.promise;
+ NewMedia.prototype.stopRecord = function () {
+ this.media.stopRecord();
+ };
+
+ NewMedia.prototype.currentTime = function () {
+ q2 = $q.defer();
+ this.media.getCurrentPosition(function (position){
+ q2.resolve(position);
+ });
+ return q2.promise;
+ };
+
+ NewMedia.prototype.getDuration = function () {
+ q3 = $q.defer();
+ this.media.getDuration(function (duration){
+ q3.resolve(duration);
+ });
+ return q3.promise;
+ }
+
+ return NewMedia;
+
+}])
+.factory('$cordovaMedia2', ['NewMedia', function (NewMedia) {
+ return {
+ newMedia: function (src) {
+ return new NewMedia(src);
}
- };
- }]);
+ };
+}]);
// install : cordova plugin add https://github.com/floatinghotpot/cordova-mobfox-pro.git
// link : https://github.com/floatinghotpot/cordova-mobfox-pro
angular.module('ngCordova.plugins.mobfoxAds', [])
+
.factory('$cordovaMobFoxAds', ['$q', '$window', function ($q, $window) {
return {
@@ -4832,13 +5188,16 @@ angular.module('ngCordova.plugins', [
'ngCordova.plugins.googleAnalytics',
'ngCordova.plugins.googleMap',
'ngCordova.plugins.googlePlayGame',
+ 'ngCordova.plugins.googlePlus',
'ngCordova.plugins.healthKit',
'ngCordova.plugins.httpd',
'ngCordova.plugins.iAd',
'ngCordova.plugins.imagePicker',
'ngCordova.plugins.inAppBrowser',
+ 'ngCordova.plugins.instagram',
'ngCordova.plugins.keyboard',
'ngCordova.plugins.keychain',
+ 'ngCordova.plugins.launchNavigator',
'ngCordova.plugins.localNotification',
'ngCordova.plugins.media',
'ngCordova.plugins.mMediaAds',
@@ -4846,8 +5205,7 @@ angular.module('ngCordova.plugins', [
'ngCordova.plugins.mopubAds',
'ngCordova.plugins.nativeAudio',
'ngCordova.plugins.network',
- 'ngCordova.plugins.oauth',
- 'ngCordova.plugins.oauthUtility',
+ 'ngCordovaOauth',
'ngCordova.plugins.pinDialog',
'ngCordova.plugins.prefs',
'ngCordova.plugins.printer',
@@ -5004,10 +5362,12 @@ angular.module('ngCordova.plugins.nativeAudio', [])
play: function (id, completeCallback) {
var q = $q.defer();
- $window.plugins.NativeAudio.play(id, completeCallback, function (result) {
- q.resolve(result);
- }, function (err) {
+ $window.plugins.NativeAudio.play(id, completeCallback
+ ,function (err) {
q.reject(err);
+ }
+ , function (result) {
+ q.resolve(result);
});
return q.promise;
@@ -5065,6 +5425,10 @@ angular.module('ngCordova.plugins.network', [])
.factory('$cordovaNetwork', ['$rootScope', '$timeout', function ($rootScope, $timeout) {
+
+ /**
+ * Fires offline a event
+ */
var offlineEvent = function () {
var networkState = navigator.connection.type;
$timeout(function () {
@@ -5072,6 +5436,9 @@ angular.module('ngCordova.plugins.network', [])
});
};
+ /**
+ * Fires online a event
+ */
var onlineEvent = function () {
var networkState = navigator.connection.type;
$timeout(function () {
@@ -5107,7 +5474,7 @@ angular.module('ngCordova.plugins.network', [])
},
clearOnlineWatch: function () {
- document.removeEventListener("online", offlineEvent);
+ document.removeEventListener("online", onlineEvent);
$rootScope.$$listeners["$cordovaNetwork:online"] = [];
}
};
@@ -5115,1050 +5482,6 @@ angular.module('ngCordova.plugins.network', [])
.run(['$cordovaNetwork', function ($cordovaNetwork) {
}]);
-/* Created by Nic Raboy
- * http://www.nraboy.com
- *
- * DESCRIPTION: Use Oauth sign in for various web services.
- *
- * REQUIRES: Apache Cordova 3.5+, Apache InAppBrowser Plugin, jsSHA (Twitter, Magento only)
- *
- * SUPPORTS:
- * Dropbox
- * Digital Ocean
- * Google
- * GitHub
- * Facebook
- * LinkedIn
- * Instagram
- * Box
- * Reddit
- * Twitter
- * Meetup
- * Foursquare
- * Salesforce
- * Strava
- * Magento
- * vkontakte
- * ADFS
- * Imgur
- */
-
-angular.module("ngCordova.plugins.oauth", ["ngCordova.plugins.oauthUtility"])
-
- .factory('$cordovaOauth', ['$q', '$http', '$cordovaOauthUtility', function ($q, $http, $cordovaOauthUtility) {
-
- return {
-
- /*
- * Sign into the ADFS service (ADFS 3.0 onwards)
- *
- * @param string clientId (client registered in ADFS, with redirect_uri configured to: http://localhost/callback)
- * @param string adfsServer (url of the ADFS Server)
- * @param string relyingPartyId (url of the Relying Party (resource relying on ADFS for authentication) configured in ADFS)
- * @return promise
- */
- adfs: function (clientId, adfsServer, relyingPartyId) {
- var deferred = $q.defer();
- if (window.cordova) {
- var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
- if (cordovaMetadata.hasOwnProperty("org.apache.cordova.inappbrowser") === true) {
- var browserRef = window.open(adfsServer + '/adfs/oauth2/authorize?response_type=code&client_id=' + clientId + '&redirect_uri=http://localhost/callback&resource=' + relyingPartyId, '_blank', 'location=no');
-
- browserRef.addEventListener("loadstart", function (event) {
- if ((event.url).indexOf('http://localhost/callback') === 0) {
- var requestToken = (event.url).split("code=")[1];
- $http.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
- $http({method: "post", url: adfsServer + "/adfs/oauth2/token", data: "client_id=" + clientId + "&code=" + requestToken + "&redirect_uri=http://localhost/callback&grant_type=authorization_code"})
- .success(function (data) {
- deferred.resolve(data);
- })
- .error(function (data, status) {
- deferred.reject("Problem authenticating");
- })
- .finally(function () {
- setTimeout(function () {
- browserRef.close();
- }, 10);
- });
- }
- });
- browserRef.addEventListener('exit', function (event) {
- deferred.reject("The sign in flow was canceled");
- });
- } else {
- deferred.reject("Could not find InAppBrowser plugin");
- }
- } else {
- deferred.reject("Cannot authenticate via a web browser");
- }
- return deferred.promise;
- },
-
- /*
- * Sign into the Dropbox service
- *
- * @param string appKey
- * @return promise
- */
- dropbox: function (appKey) {
- var deferred = $q.defer();
- if (window.cordova) {
- var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
- if (cordovaMetadata.hasOwnProperty("org.apache.cordova.inappbrowser") === true) {
- var browserRef = window.open("https://www.dropbox.com/1/oauth2/authorize?client_id=" + appKey + "&redirect_uri=http://localhost/callback" + "&response_type=token", "_blank", "location=no,clearsessioncache=yes,clearcache=yes");
- browserRef.addEventListener("loadstart", function (event) {
- if ((event.url).indexOf("http://localhost/callback") === 0) {
- var callbackResponse = (event.url).split("#")[1];
- var responseParameters = (callbackResponse).split("&");
- var parameterMap = [];
- for (var i = 0; i < responseParameters.length; i++) {
- parameterMap[responseParameters[i].split("=")[0]] = responseParameters[i].split("=")[1];
- }
- if (parameterMap.access_token !== undefined && parameterMap.access_token !== null) {
- deferred.resolve({access_token: parameterMap.access_token, token_type: parameterMap.token_type, uid: parameterMap.uid});
- } else {
- deferred.reject("Problem authenticating");
- }
- setTimeout(function () {
- browserRef.close();
- }, 10);
- }
- });
- browserRef.addEventListener('exit', function (event) {
- deferred.reject("The sign in flow was canceled");
- });
- } else {
- deferred.reject("Could not find InAppBrowser plugin");
- }
- } else {
- deferred.reject("Cannot authenticate via a web browser");
- }
- return deferred.promise;
- },
-
- /*
- * Sign into the Digital Ocean service
- *
- * @param string clientId
- * @param string clientSecret
- * @return promise
- */
- digitalOcean: function (clientId, clientSecret) {
- var deferred = $q.defer();
- if (window.cordova) {
- var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
- if (cordovaMetadata.hasOwnProperty("org.apache.cordova.inappbrowser") === true) {
- var browserRef = window.open("https://cloud.digitalocean.com/v1/oauth/authorize?client_id=" + clientId + "&redirect_uri=http://localhost/callback&response_type=code&scope=read%20write", "_blank", "location=no,clearsessioncache=yes,clearcache=yes");
- browserRef.addEventListener("loadstart", function (event) {
- if ((event.url).indexOf("http://localhost/callback") === 0) {
- var requestToken = (event.url).split("code=")[1];
- $http.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
- $http({
- method: "post",
- url: "https://cloud.digitalocean.com/v1/oauth/token",
- data: "client_id=" + clientId + "&client_secret=" + clientSecret + "&redirect_uri=http://localhost/callback" + "&grant_type=authorization_code" + "&code=" + requestToken
- })
- .success(function (data) {
- deferred.resolve(data);
- })
- .error(function (data, status) {
- deferred.reject("Problem authenticating");
- })
- .finally(function () {
- setTimeout(function () {
- browserRef.close();
- }, 10);
- });
- }
- });
- browserRef.addEventListener('exit', function (event) {
- deferred.reject("The sign in flow was canceled");
- });
- } else {
- deferred.reject("Could not find InAppBrowser plugin");
- }
- } else {
- deferred.reject("Cannot authenticate via a web browser");
- }
- return deferred.promise;
- },
-
- /*
- * Sign into the Google service
- *
- * @param string clientId
- * @param array appScope
- * @return promise
- */
- google: function (clientId, appScope) {
- var deferred = $q.defer();
- if (window.cordova) {
- var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
- if (cordovaMetadata.hasOwnProperty("org.apache.cordova.inappbrowser") === true) {
- var browserRef = window.open('https://accounts.google.com/o/oauth2/auth?client_id=' + clientId + '&redirect_uri=http://localhost/callback&scope=' + appScope.join(" ") + '&approval_prompt=force&response_type=token', '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
- browserRef.addEventListener("loadstart", function (event) {
- if ((event.url).indexOf("http://localhost/callback") === 0) {
- var callbackResponse = (event.url).split("#")[1];
- var responseParameters = (callbackResponse).split("&");
- var parameterMap = [];
- for (var i = 0; i < responseParameters.length; i++) {
- parameterMap[responseParameters[i].split("=")[0]] = responseParameters[i].split("=")[1];
- }
- if (parameterMap.access_token !== undefined && parameterMap.access_token !== null) {
- deferred.resolve({access_token: parameterMap.access_token, token_type: parameterMap.token_type, expires_in: parameterMap.expires_in});
- } else {
- deferred.reject("Problem authenticating");
- }
- setTimeout(function () {
- browserRef.close();
- }, 10);
- }
- });
- browserRef.addEventListener('exit', function (event) {
- deferred.reject("The sign in flow was canceled");
- });
- } else {
- deferred.reject("Could not find InAppBrowser plugin");
- }
- } else {
- deferred.reject("Cannot authenticate via a web browser");
- }
- return deferred.promise;
- },
-
- /*
- * Sign into the GitHub service
- *
- * @param string clientId
- * @param string clientSecret
- * @param array appScope
- * @return promise
- */
- github: function (clientId, clientSecret, appScope) {
- var deferred = $q.defer();
- if (window.cordova) {
- var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
- if (cordovaMetadata.hasOwnProperty("org.apache.cordova.inappbrowser") === true) {
- var browserRef = window.open('https://github.com/login/oauth/authorize?client_id=' + clientId + '&redirect_uri=http://localhost/callback&scope=' + appScope.join(","), '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
- browserRef.addEventListener('loadstart', function (event) {
- if ((event.url).indexOf("http://localhost/callback") === 0) {
- requestToken = (event.url).split("code=")[1];
- $http.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
- $http.defaults.headers.post.accept = 'application/json';
- $http({method: "post", url: "https://github.com/login/oauth/access_token", data: "client_id=" + clientId + "&client_secret=" + clientSecret + "&redirect_uri=http://localhost/callback" + "&code=" + requestToken})
- .success(function (data) {
- deferred.resolve(data);
- })
- .error(function (data, status) {
- deferred.reject("Problem authenticating");
- })
- .finally(function () {
- setTimeout(function () {
- browserRef.close();
- }, 10);
- });
- }
- });
- browserRef.addEventListener('exit', function (event) {
- deferred.reject("The sign in flow was canceled");
- });
- } else {
- deferred.reject("Could not find InAppBrowser plugin");
- }
- } else {
- deferred.reject("Cannot authenticate via a web browser");
- }
- return deferred.promise;
- },
-
- /*
- * Sign into the Facebook service
- *
- * @param string clientId
- * @param array appScope
- * @return promise
- */
- facebook: function (clientId, appScope) {
- var deferred = $q.defer();
- if (window.cordova) {
- var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
- if (cordovaMetadata.hasOwnProperty("org.apache.cordova.inappbrowser") === true) {
- var browserRef = window.open('https://www.facebook.com/dialog/oauth?client_id=' + clientId + '&redirect_uri=http://localhost/callback&response_type=token&scope=' + appScope.join(","), '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
- browserRef.addEventListener('loadstart', function (event) {
- if ((event.url).indexOf("http://localhost/callback") === 0) {
- var callbackResponse = (event.url).split("#")[1];
- var responseParameters = (callbackResponse).split("&");
- var parameterMap = [];
- for (var i = 0; i < responseParameters.length; i++) {
- parameterMap[responseParameters[i].split("=")[0]] = responseParameters[i].split("=")[1];
- }
- if (parameterMap.access_token !== undefined && parameterMap.access_token !== null) {
- deferred.resolve({access_token: parameterMap.access_token, expires_in: parameterMap.expires_in});
- } else {
- deferred.reject("Problem authenticating");
- }
- setTimeout(function () {
- browserRef.close();
- }, 10);
- }
- });
- browserRef.addEventListener('exit', function (event) {
- deferred.reject("The sign in flow was canceled");
- });
- } else {
- deferred.reject("Could not find InAppBrowser plugin");
- }
- } else {
- deferred.reject("Cannot authenticate via a web browser");
- }
- return deferred.promise;
- },
-
- /*
- * Sign into the LinkedIn service
- *
- * @param string clientId
- * @param string clientSecret
- * @param array appScope
- * @param string state
- * @return promise
- */
- linkedin: function (clientId, clientSecret, appScope, state) {
- var deferred = $q.defer();
- if (window.cordova) {
- var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
- if (cordovaMetadata.hasOwnProperty("org.apache.cordova.inappbrowser") === true) {
- var browserRef = window.open('https://www.linkedin.com/uas/oauth2/authorization?client_id=' + clientId + '&redirect_uri=http://localhost/callback&scope=' + appScope.join(" ") + '&response_type=code&state=' + state, '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
- browserRef.addEventListener('loadstart', function (event) {
- if ((event.url).indexOf("http://localhost/callback") === 0) {
- requestToken = (event.url).split("code=")[1];
- $http.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
- $http({
- method: "post",
- url: "https://www.linkedin.com/uas/oauth2/accessToken",
- data: "client_id=" + clientId + "&client_secret=" + clientSecret + "&redirect_uri=http://localhost/callback" + "&grant_type=authorization_code" + "&code=" + requestToken
- })
- .success(function (data) {
- deferred.resolve(data);
- })
- .error(function (data, status) {
- deferred.reject("Problem authenticating");
- })
- .finally(function () {
- setTimeout(function () {
- browserRef.close();
- }, 10);
- });
- }
- });
- browserRef.addEventListener('exit', function (event) {
- deferred.reject("The sign in flow was canceled");
- });
- } else {
- deferred.reject("Could not find InAppBrowser plugin");
- }
- } else {
- deferred.reject("Cannot authenticate via a web browser");
- }
- return deferred.promise;
- },
-
- /*
- * Sign into the Instagram service
- *
- * @param string clientId
- * @param array appScope
- * @return promise
- */
- instagram: function (clientId, appScope) {
- var deferred = $q.defer();
- if (window.cordova) {
- var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
- if (cordovaMetadata.hasOwnProperty("org.apache.cordova.inappbrowser") === true) {
- var browserRef = window.open('https://api.instagram.com/oauth/authorize/?client_id=' + clientId + '&redirect_uri=http://localhost/callback&scope=' + appScope.join(" ") + '&response_type=token', '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
- browserRef.addEventListener('loadstart', function (event) {
- if ((event.url).indexOf("http://localhost/callback") === 0) {
- var callbackResponse = (event.url).split("#")[1];
- var responseParameters = (callbackResponse).split("&");
- var parameterMap = [];
- for (var i = 0; i < responseParameters.length; i++) {
- parameterMap[responseParameters[i].split("=")[0]] = responseParameters[i].split("=")[1];
- }
- if (parameterMap.access_token !== undefined && parameterMap.access_token !== null) {
- deferred.resolve({access_token: parameterMap.access_token});
- } else {
- deferred.reject("Problem authenticating");
- }
- setTimeout(function () {
- browserRef.close();
- }, 10);
- }
- });
- browserRef.addEventListener('exit', function (event) {
- deferred.reject("The sign in flow was canceled");
- });
- } else {
- deferred.reject("Could not find InAppBrowser plugin");
- }
- } else {
- deferred.reject("Cannot authenticate via a web browser");
- }
- return deferred.promise;
- },
-
- /*
- * Sign into the Box service
- *
- * @param string clientId
- * @param string clientSecret
- * @param string appState
- * @return promise
- */
- box: function (clientId, clientSecret, appState) {
- var deferred = $q.defer();
- if (window.cordova) {
- var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
- if (cordovaMetadata.hasOwnProperty("org.apache.cordova.inappbrowser") === true) {
- var browserRef = window.open('https://app.box.com/api/oauth2/authorize/?client_id=' + clientId + '&redirect_uri=http://localhost/callback&state=' + appState + '&response_type=code', '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
- browserRef.addEventListener('loadstart', function (event) {
- if ((event.url).indexOf("http://localhost/callback") === 0) {
- requestToken = (event.url).split("code=")[1];
- $http.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
- $http({
- method: "post",
- url: "https://app.box.com/api/oauth2/token",
- data: "client_id=" + clientId + "&client_secret=" + clientSecret + "&redirect_uri=http://localhost/callback" + "&grant_type=authorization_code" + "&code=" + requestToken
- })
- .success(function (data) {
- deferred.resolve(data);
- })
- .error(function (data, status) {
- deferred.reject("Problem authenticating");
- })
- .finally(function () {
- setTimeout(function () {
- browserRef.close();
- }, 10);
- });
- }
- });
- browserRef.addEventListener('exit', function (event) {
- deferred.reject("The sign in flow was canceled");
- });
- } else {
- deferred.reject("Could not find InAppBrowser plugin");
- }
- } else {
- deferred.reject("Cannot authenticate via a web browser");
- }
- return deferred.promise;
- },
-
- /*
- * Sign into the Reddit service
- *
- * @param string clientId
- * @param string clientSecret
- * @param array appScope
- * @return promise
- */
- reddit: function (clientId, clientSecret, appScope) {
- var deferred = $q.defer();
- if (window.cordova) {
- var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
- if (cordovaMetadata.hasOwnProperty("org.apache.cordova.inappbrowser") === true) {
- var browserRef = window.open('https://ssl.reddit.com/api/v1/authorize?client_id=' + clientId + '&redirect_uri=http://localhost/callback&duration=permanent&state=ngcordovaoauth&scope=' + appScope.join(",") + '&response_type=code', '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
- browserRef.addEventListener('loadstart', function (event) {
- if ((event.url).indexOf("http://localhost/callback") === 0) {
- requestToken = (event.url).split("code=")[1];
- $http.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
- $http.defaults.headers.post.Authorization = 'Basic ' + btoa(clientId + ":" + clientSecret);
- $http({method: "post", url: "https://ssl.reddit.com/api/v1/access_token", data: "redirect_uri=http://localhost/callback" + "&grant_type=authorization_code" + "&code=" + requestToken})
- .success(function (data) {
- deferred.resolve(data);
- })
- .error(function (data, status) {
- deferred.reject("Problem authenticating");
- })
- .finally(function () {
- setTimeout(function () {
- browserRef.close();
- }, 10);
- });
- }
- });
- browserRef.addEventListener('exit', function (event) {
- deferred.reject("The sign in flow was canceled");
- });
- } else {
- deferred.reject("Could not find InAppBrowser plugin");
- }
- } else {
- deferred.reject("Cannot authenticate via a web browser");
- }
- return deferred.promise;
- },
-
- /*
- * Sign into the Twitter service
- * Note that this service requires jsSHA for generating HMAC-SHA1 Oauth 1.0 signatures
- *
- * @param string clientId
- * @param string clientSecret
- * @return promise
- */
- twitter: function (clientId, clientSecret) {
- var deferred = $q.defer();
- if (window.cordova) {
- var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
- if (cordovaMetadata.hasOwnProperty("org.apache.cordova.inappbrowser") === true) {
- if (typeof jsSHA !== "undefined") {
- var oauthObject = {
- oauth_consumer_key: clientId,
- oauth_nonce: $cordovaOauthUtility.createNonce(10),
- oauth_signature_method: "HMAC-SHA1",
- oauth_timestamp: Math.round((new Date()).getTime() / 1000.0),
- oauth_version: "1.0"
- };
- var signatureObj = $cordovaOauthUtility.createSignature("POST", "https://api.twitter.com/oauth/request_token", oauthObject, {oauth_callback: "http://localhost/callback"}, clientSecret);
- $http({
- method: "post",
- url: "https://api.twitter.com/oauth/request_token",
- headers: {
- "Authorization": signatureObj.authorization_header,
- "Content-Type": "application/x-www-form-urlencoded"
- },
- data: "oauth_callback=" + encodeURIComponent("http://localhost/callback")
- })
- .success(function (requestTokenResult) {
- var requestTokenParameters = (requestTokenResult).split("&");
- var parameterMap = {};
- for (var i = 0; i < requestTokenParameters.length; i++) {
- parameterMap[requestTokenParameters[i].split("=")[0]] = requestTokenParameters[i].split("=")[1];
- }
- if (parameterMap.hasOwnProperty("oauth_token") === false) {
- deferred.reject("Oauth request token was not received");
- }
- var browserRef = window.open('https://api.twitter.com/oauth/authenticate?oauth_token=' + parameterMap.oauth_token, '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
- browserRef.addEventListener('loadstart', function (event) {
- if ((event.url).indexOf("http://localhost/callback") === 0) {
- var callbackResponse = (event.url).split("?")[1];
- var responseParameters = (callbackResponse).split("&");
- var parameterMap = {};
- for (var i = 0; i < responseParameters.length; i++) {
- parameterMap[responseParameters[i].split("=")[0]] = responseParameters[i].split("=")[1];
- }
- if (parameterMap.hasOwnProperty("oauth_verifier") === false) {
- deferred.reject("Browser authentication failed to complete. No oauth_verifier was returned");
- }
- delete oauthObject.oauth_signature;
- oauthObject.oauth_token = parameterMap.oauth_token;
- var signatureObj = $cordovaOauthUtility.createSignature("POST", "https://api.twitter.com/oauth/access_token", oauthObject, {oauth_verifier: parameterMap.oauth_verifier}, clientSecret);
- $http({
- method: "post",
- url: "https://api.twitter.com/oauth/access_token",
- headers: {
- "Authorization": signatureObj.authorization_header
- },
- params: {
- "oauth_verifier": parameterMap.oauth_verifier
- }
- })
- .success(function (result) {
- var accessTokenParameters = result.split("&");
- var parameterMap = {};
- for (var i = 0; i < accessTokenParameters.length; i++) {
- parameterMap[accessTokenParameters[i].split("=")[0]] = accessTokenParameters[i].split("=")[1];
- }
- if (parameterMap.hasOwnProperty("oauth_token_secret") === false) {
- deferred.reject("Oauth access token was not received");
- }
- deferred.resolve(parameterMap);
- })
- .error(function (error) {
- deferred.reject(error);
- })
- .finally(function () {
- setTimeout(function () {
- browserRef.close();
- }, 10);
- });
- }
- });
- browserRef.addEventListener('exit', function (event) {
- deferred.reject("The sign in flow was canceled");
- });
- })
- .error(function (error) {
- deferred.reject(error);
- });
- } else {
- deferred.reject("Missing jsSHA JavaScript library");
- }
- } else {
- deferred.reject("Could not find InAppBrowser plugin");
- }
- } else {
- deferred.reject("Cannot authenticate via a web browser");
- }
- return deferred.promise;
- },
-
- /*
- * Sign into the Meetup service
- *
- * @param string clientId
- * @return promise
- */
- meetup: function (clientId) {
- var deferred = $q.defer();
- if (window.cordova) {
- var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
- if (cordovaMetadata.hasOwnProperty("org.apache.cordova.inappbrowser") === true) {
- var browserRef = window.open('https://secure.meetup.com/oauth2/authorize/?client_id=' + clientId + '&redirect_uri=http://localhost/callback&response_type=token', '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
- browserRef.addEventListener('loadstart', function (event) {
- if ((event.url).indexOf("http://localhost/callback") === 0) {
- var callbackResponse = (event.url).split("#")[1];
- var responseParameters = (callbackResponse).split("&");
- var parameterMap = {};
- for (var i = 0; i < responseParameters.length; i++) {
- parameterMap[responseParameters[i].split("=")[0]] = responseParameters[i].split("=")[1];
- }
- if (parameterMap.access_token !== undefined && parameterMap.access_token !== null) {
- deferred.resolve(parameterMap);
- } else {
- deferred.reject("Problem authenticating");
- }
- setTimeout(function () {
- browserRef.close();
- }, 10);
- }
- });
- browserRef.addEventListener('exit', function (event) {
- deferred.reject("The sign in flow was canceled");
- });
- } else {
- deferred.reject("Could not find InAppBrowser plugin");
- }
- } else {
- deferred.reject("Cannot authenticate via a web browser");
- }
- return deferred.promise;
- },
-
- /*
- * Sign into the Salesforce service
- *
- * Suggestion: use salesforce oauth with forcetk.js(as SDK)
- *
- * @param string loginUrl (such as: https://login.salesforce.com ; please notice community login)
- * @param string clientId (copy from connection app info)
- * @param string redirectUri (callback url in connection app info)
- * @return promise
- */
- salesforce: function (loginUrl, clientId) {
- var redirectUri = 'http://localhost/callback';
- var getAuthorizeUrl = function (loginUrl, clientId, redirectUri) {
- return loginUrl + 'services/oauth2/authorize?display=touch' +
- '&response_type=token&client_id=' + escape(clientId) +
- '&redirect_uri=' + escape(redirectUri);
- };
- var startWith = function (string, str) {
- return (string.substr(0, str.length) === str);
- };
- var deferred = $q.defer();
- if (window.cordova) {
- var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
- if (cordovaMetadata.hasOwnProperty("org.apache.cordova.inappbrowser") === true) {
- var browserRef = window.open(getAuthorizeUrl(loginUrl, clientId, redirectUri), "_blank", "location=no,clearsessioncache=yes,clearcache=yes");
- browserRef.addEventListener("loadstart", function (event) {
- if (startWith(event.url, redirectUri)) {
- var oauthResponse = {};
-
- var fragment = (event.url).split('#')[1];
-
- if (fragment) {
- var nvps = fragment.split('&');
- for (var nvp in nvps) {
- var parts = nvps[nvp].split('=');
- oauthResponse[parts[0]] = unescape(parts[1]);
- }
- }
-
- if (typeof oauthResponse === 'undefined' ||
- typeof oauthResponse.access_token === 'undefined') {
- deferred.reject("Problem authenticating");
- } else {
- deferred.resolve(oauthResponse);
- }
- setTimeout(function () {
- browserRef.close();
- }, 10);
- }
- });
- browserRef.addEventListener('exit', function (event) {
- deferred.reject("The sign in flow was canceled");
- });
- } else {
- deferred.reject("Could not find InAppBrowser plugin");
- }
- } else {
- deferred.reject("Cannot authenticate via a web browser");
- }
- return deferred.promise;
- },
-
- /*
- * Sign into the Strava service
- *
- * @param string clientId
- * @param string clientSecret
- * @param array appScope
- * @return promise
- */
- strava: function (clientId, clientSecret, appScope) {
- var deferred = $q.defer();
- if (window.cordova) {
- var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
- if (cordovaMetadata.hasOwnProperty("org.apache.cordova.inappbrowser") === true) {
- var browserRef = window.open('https://www.strava.com/oauth/authorize?client_id=' + clientId + '&redirect_uri=http://localhost/callback&scope=' + appScope.join(",") + '&response_type=code&approval_prompt=force', '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
- browserRef.addEventListener('loadstart', function (event) {
- if ((event.url).indexOf("http://localhost/callback") === 0) {
- requestToken = (event.url).split("code=")[1];
- $http.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
- $http({method: "post", url: "https://www.strava.com/oauth/token", data: "client_id=" + clientId + "&client_secret=" + clientSecret + "&code=" + requestToken})
- .success(function (data) {
- deferred.resolve(data);
- })
- .error(function (data, status) {
- deferred.reject("Problem authenticating");
- })
- .finally(function () {
- setTimeout(function () {
- browserRef.close();
- }, 10);
- });
- }
- });
- browserRef.addEventListener('exit', function (event) {
- deferred.reject("The sign in flow was canceled");
- });
- } else {
- deferred.reject("Could not find InAppBrowser plugin");
- }
- } else {
- deferred.reject("Cannot authenticate via a web browser");
- }
- return deferred.promise;
- },
-
- /*
- * Sign into the Foursquare service
- *
- * @param string clientId
- * @return promise
- */
- foursquare: function (clientId) {
- var deferred = $q.defer();
- if (window.cordova) {
- var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
- if (cordovaMetadata.hasOwnProperty("org.apache.cordova.inappbrowser") === true) {
- var browserRef = window.open('https://foursquare.com/oauth2/authenticate?client_id=' + clientId + '&redirect_uri=http://localhost/callback&response_type=token', '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
- browserRef.addEventListener('loadstart', function (event) {
- if ((event.url).indexOf("http://localhost/callback") === 0) {
- var callbackResponse = (event.url).split("#")[1];
- var responseParameters = (callbackResponse).split("&");
- var parameterMap = [];
- for (var i = 0; i < responseParameters.length; i++) {
- parameterMap[responseParameters[i].split("=")[0]] = responseParameters[i].split("=")[1];
- }
- if (parameterMap.access_token !== undefined && parameterMap.access_token !== null) {
- var promiseResponse = {
- access_token: parameterMap.access_token,
- expires_in: parameterMap.expires_in
- };
- deferred.resolve(promiseResponse);
- } else {
- deferred.reject("Problem authenticating");
- }
- setTimeout(function () {
- browserRef.close();
- }, 10);
- }
- });
- browserRef.addEventListener('exit', function (event) {
- deferred.reject("The sign in flow was canceled");
- });
- } else {
- deferred.reject("Could not find InAppBrowser plugin");
- }
- } else {
- deferred.reject("Cannot authenticate via a web browser");
- }
- return deferred.promise;
- },
-
- /*
- * Sign into the Magento service
- * Note that this service requires jsSHA for generating HMAC-SHA1 Oauth 1.0 signatures
- *
- * @param string baseUrl
- * @param string clientId
- * @param string clientSecret
- * @return promise
- */
- magento: function (baseUrl, clientId, clientSecret) {
- var deferred = $q.defer();
- if (window.cordova) {
- var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
- if (cordovaMetadata.hasOwnProperty("org.apache.cordova.inappbrowser") === true) {
- if (typeof jsSHA !== "undefined") {
- var oauthObject = {
- oauth_callback: "http://localhost/callback",
- oauth_consumer_key: clientId,
- oauth_nonce: $cordovaOauthUtility.createNonce(5),
- oauth_signature_method: "HMAC-SHA1",
- oauth_timestamp: Math.round((new Date()).getTime() / 1000.0),
- oauth_version: "1.0"
- };
- var signatureObj = $cordovaOauthUtility.createSignature("POST", baseUrl + "/oauth/initiate", oauthObject, {oauth_callback: "http://localhost/callback"}, clientSecret);
- $http.defaults.headers.post.Authorization = signatureObj.authorization_header;
- $http.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
- $http({method: "post", url: baseUrl + "/oauth/initiate", data: "oauth_callback=http://localhost/callback"})
- .success(function (requestTokenResult) {
- var requestTokenParameters = (requestTokenResult).split("&");
- var parameterMap = {};
- for (var i = 0; i < requestTokenParameters.length; i++) {
- parameterMap[requestTokenParameters[i].split("=")[0]] = requestTokenParameters[i].split("=")[1];
- }
- if (parameterMap.hasOwnProperty("oauth_token") === false) {
- deferred.reject("Oauth request token was not received");
- }
- var tokenSecret = parameterMap.oauth_token_secret;
- var browserRef = window.open(baseUrl + '/oauth/authorize?oauth_token=' + parameterMap.oauth_token, '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
- browserRef.addEventListener('loadstart', function (event) {
- if ((event.url).indexOf("http://localhost/callback") === 0) {
- var callbackResponse = (event.url).split("?")[1];
- var responseParameters = (callbackResponse).split("&");
- var parameterMap = {};
- for (var i = 0; i < responseParameters.length; i++) {
- parameterMap[responseParameters[i].split("=")[0]] = responseParameters[i].split("=")[1];
- }
- if (parameterMap.hasOwnProperty("oauth_verifier") === false) {
- deferred.reject("Browser authentication failed to complete. No oauth_verifier was returned");
- }
- delete oauthObject.oauth_signature;
- delete oauthObject.oauth_callback;
- oauthObject.oauth_token = parameterMap.oauth_token;
- oauthObject.oauth_nonce = $cordovaOauthUtility.createNonce(5);
- oauthObject.oauth_verifier = parameterMap.oauth_verifier;
- var signatureObj = $cordovaOauthUtility.createSignature("POST", baseUrl + "/oauth/token", oauthObject, {}, clientSecret, tokenSecret);
- $http.defaults.headers.post.Authorization = signatureObj.authorization_header;
- $http.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
- $http({method: "post", url: baseUrl + "/oauth/token"})
- .success(function (result) {
- var accessTokenParameters = result.split("&");
- var parameterMap = {};
- for (var i = 0; i < accessTokenParameters.length; i++) {
- parameterMap[accessTokenParameters[i].split("=")[0]] = accessTokenParameters[i].split("=")[1];
- }
- if (parameterMap.hasOwnProperty("oauth_token_secret") === false) {
- deferred.reject("Oauth access token was not received");
- }
- deferred.resolve(parameterMap);
- })
- .error(function (error) {
- deferred.reject(error);
- })
- .finally(function () {
- setTimeout(function () {
- browserRef.close();
- }, 10);
- });
- }
- });
- browserRef.addEventListener('exit', function (event) {
- deferred.reject("The sign in flow was canceled");
- });
- })
- .error(function (error) {
- deferred.reject(error);
- });
- } else {
- deferred.reject("Missing jsSHA JavaScript library");
- }
- } else {
- deferred.reject("Could not find InAppBrowser plugin");
- }
- } else {
- deferred.reject("Cannot authenticate via a web browser");
- }
- return deferred.promise;
- },
-
- /*
- * Sign into the Vkontakte service
- *
- * @param string clientId
- * @param array appScope (for example: "friends,wall,photos,messages")
- * @return promise
- */
- vkontakte: function (clientId, appScope) {
- var deferred = $q.defer();
- if (window.cordova) {
- var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
- if (cordovaMetadata.hasOwnProperty("org.apache.cordova.inappbrowser") === true) {
- var browserRef = window.open('https://oauth.vk.com/authorize?client_id=' + clientId + '&redirect_uri=http://oauth.vk.com/blank.html&response_type=token&scope=' + appScope.join(",") + '&display=touch&response_type=token', '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
- browserRef.addEventListener('loadstart', function (event) {
- var tmp = (event.url).split("#");
- if (tmp[0] == 'https://oauth.vk.com/blank.html' || tmp[0] == 'http://oauth.vk.com/blank.html') {
- var callbackResponse = (event.url).split("#")[1];
- var responseParameters = (callbackResponse).split("&");
- var parameterMap = [];
- for (var i = 0; i < responseParameters.length; i++) {
- parameterMap[responseParameters[i].split("=")[0]] = responseParameters[i].split("=")[1];
- }
- if (parameterMap.access_token !== undefined && parameterMap.access_token !== null) {
- deferred.resolve({access_token: parameterMap.access_token, expires_in: parameterMap.expires_in, user_id: parameterMap.user_id});
- } else {
- deferred.reject("Problem authenticating");
- }
- setTimeout(function () {
- browserRef.close();
- }, 10);
- }
- });
- browserRef.addEventListener('exit', function (event) {
- deferred.reject("The sign in flow was canceled");
- });
- } else {
- deferred.reject("Could not find InAppBrowser plugin");
- }
- } else {
- deferred.reject("Cannot authenticate via a web browser");
- }
- return deferred.promise;
- },
-
- /*
- * Sign into the Imgur service
- *
- * @param string clientId
- * @return promise
- */
- imgur: function (clientId) {
- var deferred = $q.defer();
- if (window.cordova) {
- var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
- if (cordovaMetadata.hasOwnProperty("org.apache.cordova.inappbrowser") === true) {
- var browserRef = window.open('https://api.imgur.com/oauth2/authorize?client_id=' + clientId + '&response_type=token', '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
- browserRef.addEventListener('loadstart', function (event) {
- if ((event.url).indexOf("http://localhost/callback") === 0) {
- browserRef.removeEventListener("exit", function (event) {
- });
- browserRef.close();
- var callbackResponse = (event.url).split("#")[1];
- var responseParameters = (callbackResponse).split("&");
- var parameterMap = [];
- for (var i = 0; i < responseParameters.length; i++) {
- parameterMap[responseParameters[i].split("=")[0]] = responseParameters[i].split("=")[1];
- }
- if (parameterMap.access_token !== undefined && parameterMap.access_token !== null) {
- deferred.resolve({access_token: parameterMap.access_token, expires_in: parameterMap.expires_in, account_username: parameterMap.account_username});
- } else {
- deferred.reject("Problem authenticating");
- }
- }
- });
- browserRef.addEventListener('exit', function (event) {
- deferred.reject("The sign in flow was canceled");
- });
- } else {
- deferred.reject("Could not find InAppBrowser plugin");
- }
- } else {
- deferred.reject("Cannot authenticate via a web browser");
- }
- return deferred.promise;
- }
-
- };
- }]);
-
-angular.module("ngCordova.plugins.oauthUtility", [])
-
- .factory('$cordovaOauthUtility', ['$q', function ($q) {
-
- return {
-
- /*
- * Sign an Oauth 1.0 request
- *
- * @param string method
- * @param string endPoint
- * @param object headerParameters
- * @param object bodyParameters
- * @param string secretKey
- * @return object
- */
- createSignature: function (method, endPoint, headerParameters, bodyParameters, secretKey, tokenSecret) {
- if (typeof jsSHA !== "undefined") {
- var headerAndBodyParameters = angular.copy(headerParameters);
- var bodyParameterKeys = Object.keys(bodyParameters);
- for (var i = 0; i < bodyParameterKeys.length; i++) {
- headerAndBodyParameters[bodyParameterKeys[i]] = encodeURIComponent(bodyParameters[bodyParameterKeys[i]]);
- }
- var signatureBaseString = method + "&" + encodeURIComponent(endPoint) + "&";
- var headerAndBodyParameterKeys = (Object.keys(headerAndBodyParameters)).sort();
- for (i = 0; i < headerAndBodyParameterKeys.length; i++) {
- if (i == headerAndBodyParameterKeys.length - 1) {
- signatureBaseString += encodeURIComponent(headerAndBodyParameterKeys[i] + "=" + headerAndBodyParameters[headerAndBodyParameterKeys[i]]);
- } else {
- signatureBaseString += encodeURIComponent(headerAndBodyParameterKeys[i] + "=" + headerAndBodyParameters[headerAndBodyParameterKeys[i]] + "&");
- }
- }
- var oauthSignatureObject = new jsSHA(signatureBaseString, "TEXT");
-
- var encodedTokenSecret = '';
- if (tokenSecret) {
- encodedTokenSecret = encodeURIComponent(tokenSecret);
- }
-
- headerParameters.oauth_signature = encodeURIComponent(oauthSignatureObject.getHMAC(encodeURIComponent(secretKey) + "&" + encodedTokenSecret, "TEXT", "SHA-1", "B64"));
- var headerParameterKeys = Object.keys(headerParameters);
- var authorizationHeader = 'OAuth ';
- for (i = 0; i < headerParameterKeys.length; i++) {
- if (i == headerParameterKeys.length - 1) {
- authorizationHeader += headerParameterKeys[i] + '="' + headerParameters[headerParameterKeys[i]] + '"';
- } else {
- authorizationHeader += headerParameterKeys[i] + '="' + headerParameters[headerParameterKeys[i]] + '",';
- }
- }
- return {signature_base_string: signatureBaseString, authorization_header: authorizationHeader, signature: headerParameters.oauth_signature};
- } else {
- return "Missing jsSHA JavaScript library";
- }
- },
-
- /*
- * Create Random String Nonce
- *
- * @param integer length
- * @return string
- */
- createNonce: function (length) {
- var text = "";
- var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
- for (var i = 0; i < length; i++) {
- text += possible.charAt(Math.floor(Math.random() * possible.length));
- }
- return text;
- }
-
- };
-
- }]);
-
// install : cordova plugin add https://github.com/Paldom/PinDialog.git
// link : https://github.com/Paldom/PinDialog
@@ -6187,7 +5510,6 @@ angular.module('ngCordova.plugins.prefs', [])
.factory('$cordovaPreferences', ['$window', '$q', function ($window, $q) {
return {
-
set: function (key, value) {
var q = $q.defer();
@@ -6339,6 +5661,7 @@ angular.module('ngCordova.plugins.progressIndicator', [])
angular.module('ngCordova.plugins.push', [])
.factory('$cordovaPush', ['$q', '$window', '$rootScope', '$timeout', function ($q, $window, $rootScope, $timeout) {
+
return {
onNotification: function (notification) {
$timeout(function () {
@@ -6604,16 +5927,15 @@ angular.module('ngCordova.plugins.sqlite', [])
.factory('$cordovaSQLite', ['$q', '$window', function ($q, $window) {
return {
- openDB: function (dbName, background) {
-
- if (typeof background === 'undefined') {
- background = 0;
+ openDB: function (options, background) {
+ if (typeof options !== 'object') {
+ options = {name: options};
+ }
+ if (typeof background !== 'undefined') {
+ options.bgType = background;
}
- return $window.sqlitePlugin.openDatabase({
- name: dbName,
- bgType: background
- });
+ return $window.sqlitePlugin.openDatabase(options);
},
execute: function (db, query, binding) {
@@ -6692,67 +6014,74 @@ angular.module('ngCordova.plugins.sqlite', [])
angular.module('ngCordova.plugins.statusbar', [])
- .factory('$cordovaStatusbar', [function () {
-
- return {
- overlaysWebView: function (bool) {
- return StatusBar.overlaysWebView(!!bool);
- },
-
- STYLES: {
- DEFAULT: 0,
- LIGHT_CONTENT: 1,
- BLACK_TRANSLUCENT: 2,
- BLACK_OPAQUE: 3
- },
+.factory('$cordovaStatusbar', [function () {
- style: function (style) {
- switch (style) {
- // Default
- case 0:
- return StatusBar.styleDefault();
-
- // LightContent
- case 1:
- return StatusBar.styleLightContent();
+ return {
- // BlackTranslucent
- case 2:
- return StatusBar.styleBlackTranslucent();
+ /**
+ * @param {boolean} bool
+ */
+ overlaysWebView: function (bool) {
+ return StatusBar.overlaysWebView(!!bool);
+ },
- // BlackOpaque
- case 3:
- return StatusBar.styleBlackOpaque();
+ STYLES: {
+ DEFAULT: 0,
+ LIGHT_CONTENT: 1,
+ BLACK_TRANSLUCENT: 2,
+ BLACK_OPAQUE: 3
+ },
- default:
- return StatusBar.styleDefault();
- }
- },
+ /**
+ * @param {number} style
+ */
+ style: function (style) {
+ switch (style) {
+ // Default
+ case 0:
+ return StatusBar.styleDefault();
+
+ // LightContent
+ case 1:
+ return StatusBar.styleLightContent();
+
+ // BlackTranslucent
+ case 2:
+ return StatusBar.styleBlackTranslucent();
+
+ // BlackOpaque
+ case 3:
+ return StatusBar.styleBlackOpaque();
+
+ default:
+ return StatusBar.styleDefault();
+ }
+ },
- // supported names:
- // black, darkGray, lightGray, white, gray, red, green,
- // blue, cyan, yellow, magenta, orange, purple, brown
- styleColor: function (color) {
- return StatusBar.backgroundColorByName(color);
- },
+ // supported names:
+ // black, darkGray, lightGray, white, gray, red, green,
+ // blue, cyan, yellow, magenta, orange, purple, brown
+ styleColor: function (color) {
+ return StatusBar.backgroundColorByName(color);
+ },
- styleHex: function (colorHex) {
- return StatusBar.backgroundColorByHexString(colorHex);
- },
+ styleHex: function (colorHex) {
+ return StatusBar.backgroundColorByHexString(colorHex);
+ },
- hide: function () {
- return StatusBar.hide();
- },
+ hide: function () {
+ return StatusBar.hide();
+ },
- show: function () {
- return StatusBar.show();
- },
+ show: function () {
+ return StatusBar.show();
+ },
- isVisible: function () {
- return StatusBar.isVisible;
- }
- };
- }]);
+ isVisible: function () {
+ return StatusBar.isVisible;
+ }
+ };
+}]);
// install : cordova plugin add https://github.com/EddyVerbruggen/Toast-PhoneGap-Plugin.git
// link : https://github.com/EddyVerbruggen/Toast-PhoneGap-Plugin
@@ -7020,4 +6349,1834 @@ angular.module('ngCordova.plugins.zip', [])
};
}]);
-})();
+angular.module("oauth.providers", ["oauth.utils"])
+
+ .factory("$cordovaOauth", ["$q", '$http', "$cordovaOauthUtility", function($q, $http, $cordovaOauthUtility) {
+
+ return {
+
+ /*
+ * Sign into the ADFS service (ADFS 3.0 onwards)
+ *
+ * @param string clientId (client registered in ADFS, with redirect_uri configured to: http://localhost/callback)
+ * @param string adfsServer (url of the ADFS Server)
+ * @param string relyingPartyId (url of the Relying Party (resource relying on ADFS for authentication) configured in ADFS)
+ * @return promise
+ */
+ adfs: function(clientId, adfsServer, relyingPartyId) {
+ var deferred = $q.defer();
+ if(window.cordova) {
+ var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
+ if($cordovaOauthUtility.isInAppBrowserInstalled(cordovaMetadata) === true) {
+ var browserRef = window.open(adfsServer + '/adfs/oauth2/authorize?response_type=code&client_id=' + clientId +'&redirect_uri=http://localhost/callback&resource=' + relyingPartyId, '_blank', 'location=no');
+
+ browserRef.addEventListener("loadstart", function(event) {
+ if((event.url).indexOf('http://localhost/callback') === 0) {
+ var requestToken = (event.url).split("code=")[1];
+ $http.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
+ $http({method: "post", url: adfsServer + "/adfs/oauth2/token", data: "client_id=" + clientId + "&code=" + requestToken + "&redirect_uri=http://localhost/callback&grant_type=authorization_code" })
+ .success(function(data) {
+ deferred.resolve(data);
+ })
+ .error(function(data, status) {
+ deferred.reject("Problem authenticating");
+ })
+ .finally(function() {
+ setTimeout(function() {
+ browserRef.close();
+ }, 10);
+ });
+ }
+ });
+ browserRef.addEventListener('exit', function(event) {
+ deferred.reject("The sign in flow was canceled");
+ });
+ } else {
+ deferred.reject("Could not find InAppBrowser plugin");
+ }
+ } else {
+ deferred.reject("Cannot authenticate via a web browser");
+ }
+ return deferred.promise;
+ },
+
+ /*
+ * Sign into the Dropbox service
+ *
+ * @param string appKey
+ * @param object options
+ * @return promise
+ */
+ dropbox: function(appKey, options) {
+ var deferred = $q.defer();
+ if(window.cordova) {
+ var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
+ if($cordovaOauthUtility.isInAppBrowserInstalled(cordovaMetadata) === true) {
+ var redirect_uri = "http://localhost/callback";
+ if(options !== undefined) {
+ if(options.hasOwnProperty("redirect_uri")) {
+ redirect_uri = options.redirect_uri;
+ }
+ }
+ var browserRef = window.open("https://www.dropbox.com/1/oauth2/authorize?client_id=" + appKey + "&redirect_uri=" + redirect_uri + "&response_type=token", "_blank", "location=no,clearsessioncache=yes,clearcache=yes");
+ browserRef.addEventListener("loadstart", function(event) {
+ if((event.url).indexOf(redirect_uri) === 0) {
+ browserRef.removeEventListener("exit",function(event){});
+ browserRef.close();
+ var callbackResponse = (event.url).split("#")[1];
+ var responseParameters = (callbackResponse).split("&");
+ var parameterMap = [];
+ for(var i = 0; i < responseParameters.length; i++) {
+ parameterMap[responseParameters[i].split("=")[0]] = responseParameters[i].split("=")[1];
+ }
+ if(parameterMap.access_token !== undefined && parameterMap.access_token !== null) {
+ deferred.resolve({ access_token: parameterMap.access_token, token_type: parameterMap.token_type, uid: parameterMap.uid });
+ } else {
+ deferred.reject("Problem authenticating");
+ }
+ }
+ });
+ browserRef.addEventListener('exit', function(event) {
+ deferred.reject("The sign in flow was canceled");
+ });
+ } else {
+ deferred.reject("Could not find InAppBrowser plugin");
+ }
+ } else {
+ deferred.reject("Cannot authenticate via a web browser");
+ }
+ return deferred.promise;
+ },
+
+ /*
+ * Sign into the Digital Ocean service
+ *
+ * @param string clientId
+ * @param string clientSecret
+ * @param object options
+ * @return promise
+ */
+ digitalOcean: function(clientId, clientSecret, options) {
+ var deferred = $q.defer();
+ if(window.cordova) {
+ var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
+ if($cordovaOauthUtility.isInAppBrowserInstalled(cordovaMetadata) === true) {
+ var redirect_uri = "http://localhost/callback";
+ if(options !== undefined) {
+ if(options.hasOwnProperty("redirect_uri")) {
+ redirect_uri = options.redirect_uri;
+ }
+ }
+ var browserRef = window.open("https://cloud.digitalocean.com/v1/oauth/authorize?client_id=" + clientId + "&redirect_uri=" + redirect_uri + "&response_type=code&scope=read%20write", "_blank", "location=no,clearsessioncache=yes,clearcache=yes");
+ browserRef.addEventListener("loadstart", function(event) {
+ if((event.url).indexOf(redirect_uri) === 0) {
+ var requestToken = (event.url).split("code=")[1];
+ $http.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
+ $http({method: "post", url: "https://cloud.digitalocean.com/v1/oauth/token", data: "client_id=" + clientId + "&client_secret=" + clientSecret + "&redirect_uri=" + redirect_uri + "&grant_type=authorization_code" + "&code=" + requestToken })
+ .success(function(data) {
+ deferred.resolve(data);
+ })
+ .error(function(data, status) {
+ deferred.reject("Problem authenticating");
+ })
+ .finally(function() {
+ setTimeout(function() {
+ browserRef.close();
+ }, 10);
+ });
+ }
+ });
+ browserRef.addEventListener('exit', function(event) {
+ deferred.reject("The sign in flow was canceled");
+ });
+ } else {
+ deferred.reject("Could not find InAppBrowser plugin");
+ }
+ } else {
+ deferred.reject("Cannot authenticate via a web browser");
+ }
+ return deferred.promise;
+ },
+
+ /*
+ * Sign into the Google service
+ *
+ * @param string clientId
+ * @param array appScope
+ * @param object options
+ * @return promise
+ */
+ google: function(clientId, appScope, options) {
+ var deferred = $q.defer();
+ if(window.cordova) {
+ var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
+ if($cordovaOauthUtility.isInAppBrowserInstalled(cordovaMetadata) === true) {
+ var redirect_uri = "http://localhost/callback";
+ if(options !== undefined) {
+ if(options.hasOwnProperty("redirect_uri")) {
+ redirect_uri = options.redirect_uri;
+ }
+ }
+ var browserRef = window.open('https://accounts.google.com/o/oauth2/auth?client_id=' + clientId + '&redirect_uri=' + redirect_uri + '&scope=' + appScope.join(" ") + '&approval_prompt=force&response_type=token', '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
+ browserRef.addEventListener("loadstart", function(event) {
+ if((event.url).indexOf(redirect_uri) === 0) {
+ browserRef.removeEventListener("exit",function(event){});
+ browserRef.close();
+ var callbackResponse = (event.url).split("#")[1];
+ var responseParameters = (callbackResponse).split("&");
+ var parameterMap = [];
+ for(var i = 0; i < responseParameters.length; i++) {
+ parameterMap[responseParameters[i].split("=")[0]] = responseParameters[i].split("=")[1];
+ }
+ if(parameterMap.access_token !== undefined && parameterMap.access_token !== null) {
+ deferred.resolve({ access_token: parameterMap.access_token, token_type: parameterMap.token_type, expires_in: parameterMap.expires_in });
+ } else {
+ deferred.reject("Problem authenticating");
+ }
+ }
+ });
+ browserRef.addEventListener('exit', function(event) {
+ deferred.reject("The sign in flow was canceled");
+ });
+ } else {
+ deferred.reject("Could not find InAppBrowser plugin");
+ }
+ } else {
+ deferred.reject("Cannot authenticate via a web browser");
+ }
+ return deferred.promise;
+ },
+
+ /*
+ * Sign into the GitHub service
+ *
+ * @param string clientId
+ * @param string clientSecret
+ * @param array appScope
+ * @param object options
+ * @return promise
+ */
+ github: function(clientId, clientSecret, appScope, options) {
+ var deferred = $q.defer();
+ if(window.cordova) {
+ var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
+ if($cordovaOauthUtility.isInAppBrowserInstalled(cordovaMetadata) === true) {
+ var redirect_uri = "http://localhost/callback";
+ if(options !== undefined) {
+ if(options.hasOwnProperty("redirect_uri")) {
+ redirect_uri = options.redirect_uri;
+ }
+ }
+ var browserRef = window.open('https://github.com/login/oauth/authorize?client_id=' + clientId + '&redirect_uri=' + redirect_uri + '&scope=' + appScope.join(","), '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
+ browserRef.addEventListener('loadstart', function(event) {
+ if((event.url).indexOf(redirect_uri) === 0) {
+ requestToken = (event.url).split("code=")[1];
+ $http.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
+ $http.defaults.headers.post.accept = 'application/json';
+ $http({method: "post", url: "https://github.com/login/oauth/access_token", data: "client_id=" + clientId + "&client_secret=" + clientSecret + "&redirect_uri=" + redirect_uri + "&code=" + requestToken })
+ .success(function(data) {
+ deferred.resolve(data);
+ })
+ .error(function(data, status) {
+ deferred.reject("Problem authenticating");
+ })
+ .finally(function() {
+ setTimeout(function() {
+ browserRef.close();
+ }, 10);
+ });
+ }
+ });
+ browserRef.addEventListener('exit', function(event) {
+ deferred.reject("The sign in flow was canceled");
+ });
+ } else {
+ deferred.reject("Could not find InAppBrowser plugin");
+ }
+ } else {
+ deferred.reject("Cannot authenticate via a web browser");
+ }
+ return deferred.promise;
+ },
+
+ /*
+ * Sign into the Facebook service
+ *
+ * @param string clientId
+ * @param array appScope
+ * @param object options
+ * @return promise
+ */
+ facebook: function(clientId, appScope, options) {
+ var deferred = $q.defer();
+ if(window.cordova) {
+ var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
+ if($cordovaOauthUtility.isInAppBrowserInstalled(cordovaMetadata) === true) {
+ var redirect_uri = "http://localhost/callback";
+ if(options !== undefined) {
+ if(options.hasOwnProperty("redirect_uri")) {
+ redirect_uri = options.redirect_uri;
+ }
+ }
+ var flowUrl = "https://www.facebook.com/v2.0/dialog/oauth?client_id=" + clientId + "&redirect_uri=" + redirect_uri + "&response_type=token&scope=" + appScope.join(",");
+ if(options !== undefined && options.hasOwnProperty("auth_type")) {
+ flowUrl += "&auth_type=" + options.auth_type;
+ }
+ var browserRef = window.open(flowUrl, '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
+ browserRef.addEventListener('loadstart', function(event) {
+ if((event.url).indexOf(redirect_uri) === 0) {
+ browserRef.removeEventListener("exit",function(event){});
+ browserRef.close();
+ var callbackResponse = (event.url).split("#")[1];
+ var responseParameters = (callbackResponse).split("&");
+ var parameterMap = [];
+ for(var i = 0; i < responseParameters.length; i++) {
+ parameterMap[responseParameters[i].split("=")[0]] = responseParameters[i].split("=")[1];
+ }
+ if(parameterMap.access_token !== undefined && parameterMap.access_token !== null) {
+ deferred.resolve({ access_token: parameterMap.access_token, expires_in: parameterMap.expires_in });
+ } else {
+ if ((event.url).indexOf("error_code=100") !== 0)
+ deferred.reject("Facebook returned error_code=100: Invalid permissions");
+ else
+ deferred.reject("Problem authenticating");
+ }
+ }
+ });
+ browserRef.addEventListener('exit', function(event) {
+ deferred.reject("The sign in flow was canceled");
+ });
+ } else {
+ deferred.reject("Could not find InAppBrowser plugin");
+ }
+ } else {
+ deferred.reject("Cannot authenticate via a web browser");
+ }
+ return deferred.promise;
+ },
+
+ /*
+ * Sign into the LinkedIn service
+ *
+ * @param string clientId
+ * @param string clientSecret
+ * @param array appScope
+ * @param string state
+ * @param object options
+ * @return promise
+ */
+ linkedin: function(clientId, clientSecret, appScope, state, options) {
+ var deferred = $q.defer();
+ if(window.cordova) {
+ var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
+ if($cordovaOauthUtility.isInAppBrowserInstalled(cordovaMetadata) === true) {
+ var redirect_uri = "http://localhost/callback";
+ if(options !== undefined) {
+ if(options.hasOwnProperty("redirect_uri")) {
+ redirect_uri = options.redirect_uri;
+ }
+ }
+
+ var browserRef = window.open('https://www.linkedin.com/uas/oauth2/authorization?client_id=' + clientId + '&redirect_uri=' + redirect_uri + '&scope=' + appScope.join(" ") + '&response_type=code&state=' + state, '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
+
+ browserRef.addEventListener('loadstart', function(event) {
+ if((event.url).indexOf(redirect_uri) === 0) {
+ requestToken = (event.url).split("code=")[1];
+ $http.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
+ $http({method: "post", url: "https://www.linkedin.com/uas/oauth2/accessToken", data: "client_id=" + clientId + "&client_secret=" + clientSecret + "&redirect_uri=" + redirect_uri + "&grant_type=authorization_code" + "&code=" + requestToken })
+ .success(function(data) {
+ deferred.resolve(data);
+ })
+ .error(function(data, status) {
+ deferred.reject("Problem authenticating");
+ })
+ .finally(function() {
+ setTimeout(function() {
+ browserRef.close();
+ }, 10);
+ });
+ }
+ });
+ browserRef.addEventListener('exit', function(event) {
+ deferred.reject("The sign in flow was canceled");
+ });
+ } else {
+ deferred.reject("Could not find InAppBrowser plugin");
+ }
+ } else {
+ deferred.reject("Cannot authenticate via a web browser");
+ }
+ return deferred.promise;
+ },
+
+ /*
+ * Sign into the Instagram service
+ *
+ * @param string clientId
+ * @param array appScope
+ * @param object options
+ * @return promise
+ */
+ instagram: function(clientId, appScope, options) {
+ var deferred = $q.defer();
+
+ var split_tokens = {
+ 'code':'?',
+ 'token':'#'
+ };
+
+ if(window.cordova) {
+ var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
+ if($cordovaOauthUtility.isInAppBrowserInstalled(cordovaMetadata) === true) {
+ var redirect_uri = "http://localhost/callback";
+ var response_type = "token";
+ if(options !== undefined) {
+ if(options.hasOwnProperty("redirect_uri")) {
+ redirect_uri = options.redirect_uri;
+ }
+ if(options.hasOwnProperty("response_type")) {
+ response_type = options.response_type;
+ }
+ }
+
+ var browserRef = window.open('https://api.instagram.com/oauth/authorize/?client_id=' + clientId + '&redirect_uri=' + redirect_uri + '&scope=' + appScope.join(" ") + '&response_type='+response_type, '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
+ browserRef.addEventListener('loadstart', function(event) {
+ if((event.url).indexOf(redirect_uri) === 0) {
+ browserRef.removeEventListener("exit",function(event){});
+ browserRef.close();
+ var callbackResponse = (event.url).split(split_tokens[response_type])[1];
+ var parameterMap = $cordovaOauthUtility.parseResponseParameters(callbackResponse);
+ if(parameterMap.access_token !== undefined && parameterMap.access_token !== null) {
+ deferred.resolve({ access_token: parameterMap.access_token });
+ } else if(parameterMap.code !== undefined && parameterMap.code !== null) {
+ deferred.resolve({ code: parameterMap.code });
+ } else {
+ deferred.reject("Problem authenticating");
+ }
+ }
+ });
+ browserRef.addEventListener('exit', function(event) {
+ deferred.reject("The sign in flow was canceled");
+ });
+ } else {
+ deferred.reject("Could not find InAppBrowser plugin");
+ }
+ } else {
+ deferred.reject("Cannot authenticate via a web browser");
+ }
+ return deferred.promise;
+ },
+
+ /*
+ * Sign into the Box service
+ *
+ * @param string clientId
+ * @param string clientSecret
+ * @param string appState
+ * @param object options
+ * @return promise
+ */
+ box: function(clientId, clientSecret, appState, options) {
+ var deferred = $q.defer();
+ if(window.cordova) {
+ var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
+ if($cordovaOauthUtility.isInAppBrowserInstalled(cordovaMetadata) === true) {
+ var redirect_uri = "http://localhost/callback";
+ if(options !== undefined) {
+ if(options.hasOwnProperty("redirect_uri")) {
+ redirect_uri = options.redirect_uri;
+ }
+ }
+ var browserRef = window.open('https://app.box.com/api/oauth2/authorize/?client_id=' + clientId + '&redirect_uri=' + redirect_uri + '&state=' + appState + '&response_type=code', '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
+ browserRef.addEventListener('loadstart', function(event) {
+ if((event.url).indexOf(redirect_uri) === 0) {
+ requestToken = (event.url).split("code=")[1];
+ $http.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
+ $http({method: "post", url: "https://app.box.com/api/oauth2/token", data: "client_id=" + clientId + "&client_secret=" + clientSecret + "&redirect_uri=" + redirect_uri + "&grant_type=authorization_code" + "&code=" + requestToken })
+ .success(function(data) {
+ deferred.resolve(data);
+ })
+ .error(function(data, status) {
+ deferred.reject("Problem authenticating");
+ })
+ .finally(function() {
+ setTimeout(function() {
+ browserRef.close();
+ }, 10);
+ });
+ }
+ });
+ browserRef.addEventListener('exit', function(event) {
+ deferred.reject("The sign in flow was canceled");
+ });
+ } else {
+ deferred.reject("Could not find InAppBrowser plugin");
+ }
+ } else {
+ deferred.reject("Cannot authenticate via a web browser");
+ }
+ return deferred.promise;
+ },
+
+ /*
+ * Sign into the Reddit service
+ *
+ * @param string clientId
+ * @param string clientSecret
+ * @param array appScope
+ * @param object options
+ * @return promise
+ */
+ reddit: function(clientId, clientSecret, appScope, compact, options) {
+ var deferred = $q.defer();
+ if(window.cordova) {
+ var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
+ if($cordovaOauthUtility.isInAppBrowserInstalled(cordovaMetadata) === true) {
+ var redirect_uri = "http://localhost/callback";
+ if(options !== undefined) {
+ if(options.hasOwnProperty("redirect_uri")) {
+ redirect_uri = options.redirect_uri;
+ }
+ }
+ var browserRef = window.open('https://ssl.reddit.com/api/v1/authorize?client_id=' + clientId + '&redirect_uri=' + redirect_uri + '&duration=permanent&state=ngcordovaoauth&scope=' + appScope.join(",") + '&response_type=code', '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
+ browserRef.addEventListener('loadstart', function(event) {
+ if((event.url).indexOf(redirect_uri) === 0) {
+ requestToken = (event.url).split("code=")[1];
+ $http.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
+ $http.defaults.headers.post.Authorization = 'Basic ' + btoa(clientId + ":" + clientSecret);
+ $http({method: "post", url: "https://ssl.reddit.com/api/v1/access_token", data: "redirect_uri=" + redirect_uri + "&grant_type=authorization_code" + "&code=" + requestToken })
+ .success(function(data) {
+ deferred.resolve(data);
+ })
+ .error(function(data, status) {
+ deferred.reject("Problem authenticating");
+ })
+ .finally(function() {
+ setTimeout(function() {
+ browserRef.close();
+ }, 10);
+ });
+ }
+ });
+ browserRef.addEventListener('exit', function(event) {
+ deferred.reject("The sign in flow was canceled");
+ });
+ } else {
+ deferred.reject("Could not find InAppBrowser plugin");
+ }
+ } else {
+ deferred.reject("Cannot authenticate via a web browser");
+ }
+ return deferred.promise;
+ },
+
+ /*
+ * Sign into the Twitter service
+ * Note that this service requires jsSHA for generating HMAC-SHA1 Oauth 1.0 signatures
+ *
+ * @param string clientId
+ * @param string clientSecret
+ * @return promise
+ */
+ twitter: function(clientId, clientSecret, options) {
+ var deferred = $q.defer();
+ if(window.cordova) {
+ var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
+ if($cordovaOauthUtility.isInAppBrowserInstalled(cordovaMetadata) === true) {
+ var redirect_uri = "http://localhost/callback";
+ if(options !== undefined) {
+ if(options.hasOwnProperty("redirect_uri")) {
+ redirect_uri = options.redirect_uri;
+ }
+ }
+
+ if(typeof jsSHA !== "undefined") {
+ var oauthObject = {
+ oauth_consumer_key: clientId,
+ oauth_nonce: $cordovaOauthUtility.createNonce(10),
+ oauth_signature_method: "HMAC-SHA1",
+ oauth_timestamp: Math.round((new Date()).getTime() / 1000.0),
+ oauth_version: "1.0"
+ };
+ var signatureObj = $cordovaOauthUtility.createSignature("POST", "https://api.twitter.com/oauth/request_token", oauthObject, { oauth_callback: redirect_uri }, clientSecret);
+ $http({
+ method: "post",
+ url: "https://api.twitter.com/oauth/request_token",
+ headers: {
+ "Authorization": signatureObj.authorization_header,
+ "Content-Type": "application/x-www-form-urlencoded"
+ },
+ data: "oauth_callback=" + encodeURIComponent(redirect_uri)
+ })
+ .success(function(requestTokenResult) {
+ var requestTokenParameters = (requestTokenResult).split("&");
+ var parameterMap = {};
+ for(var i = 0; i < requestTokenParameters.length; i++) {
+ parameterMap[requestTokenParameters[i].split("=")[0]] = requestTokenParameters[i].split("=")[1];
+ }
+ if(parameterMap.hasOwnProperty("oauth_token") === false) {
+ deferred.reject("Oauth request token was not received");
+ }
+ var browserRef = window.open('https://api.twitter.com/oauth/authenticate?oauth_token=' + parameterMap.oauth_token, '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
+ browserRef.addEventListener('loadstart', function(event) {
+ if((event.url).indexOf(redirect_uri) === 0) {
+ var callbackResponse = (event.url).split("?")[1];
+ var responseParameters = (callbackResponse).split("&");
+ var parameterMap = {};
+ for(var i = 0; i < responseParameters.length; i++) {
+ parameterMap[responseParameters[i].split("=")[0]] = responseParameters[i].split("=")[1];
+ }
+ if(parameterMap.hasOwnProperty("oauth_verifier") === false) {
+ deferred.reject("Browser authentication failed to complete. No oauth_verifier was returned");
+ }
+ delete oauthObject.oauth_signature;
+ oauthObject.oauth_token = parameterMap.oauth_token;
+ var signatureObj = $cordovaOauthUtility.createSignature("POST", "https://api.twitter.com/oauth/access_token", oauthObject, { oauth_verifier: parameterMap.oauth_verifier }, clientSecret);
+ $http({
+ method: "post",
+ url: "https://api.twitter.com/oauth/access_token",
+ headers: {
+ "Authorization": signatureObj.authorization_header
+ },
+ params: {
+ "oauth_verifier": parameterMap.oauth_verifier
+ }
+ })
+ .success(function(result) {
+ var accessTokenParameters = result.split("&");
+ var parameterMap = {};
+ for(var i = 0; i < accessTokenParameters.length; i++) {
+ parameterMap[accessTokenParameters[i].split("=")[0]] = accessTokenParameters[i].split("=")[1];
+ }
+ if(parameterMap.hasOwnProperty("oauth_token_secret") === false) {
+ deferred.reject("Oauth access token was not received");
+ }
+ deferred.resolve(parameterMap);
+ })
+ .error(function(error) {
+ deferred.reject(error);
+ })
+ .finally(function() {
+ setTimeout(function() {
+ browserRef.close();
+ }, 10);
+ });
+ }
+ });
+ browserRef.addEventListener('exit', function(event) {
+ deferred.reject("The sign in flow was canceled");
+ });
+ })
+ .error(function(error) {
+ deferred.reject(error);
+ });
+ } else {
+ deferred.reject("Missing jsSHA JavaScript library");
+ }
+ } else {
+ deferred.reject("Could not find InAppBrowser plugin");
+ }
+ } else {
+ deferred.reject("Cannot authenticate via a web browser");
+ }
+ return deferred.promise;
+ },
+
+ /*
+ * Sign into the Meetup service
+ *
+ * @param string clientId
+ * @param object options
+ * @return promise
+ */
+ meetup: function(clientId, options) {
+ var deferred = $q.defer();
+ if(window.cordova) {
+ var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
+ if($cordovaOauthUtility.isInAppBrowserInstalled(cordovaMetadata) === true) {
+ var redirect_uri = "http://localhost/callback";
+ if(options !== undefined) {
+ if(options.hasOwnProperty("redirect_uri")) {
+ redirect_uri = options.redirect_uri;
+ }
+ }
+ var browserRef = window.open('https://secure.meetup.com/oauth2/authorize/?client_id=' + clientId + '&redirect_uri=' + redirect_uri + '&response_type=token', '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
+ browserRef.addEventListener('loadstart', function(event) {
+ if((event.url).indexOf(redirect_uri) === 0) {
+ browserRef.removeEventListener("exit",function(event){});
+ browserRef.close();
+ var callbackResponse = (event.url).split("#")[1];
+ var responseParameters = (callbackResponse).split("&");
+ var parameterMap = {};
+ for(var i = 0; i < responseParameters.length; i++) {
+ parameterMap[responseParameters[i].split("=")[0]] = responseParameters[i].split("=")[1];
+ }
+ if(parameterMap.access_token !== undefined && parameterMap.access_token !== null) {
+ deferred.resolve(parameterMap);
+ } else {
+ deferred.reject("Problem authenticating");
+ }
+ }
+ });
+ browserRef.addEventListener('exit', function(event) {
+ deferred.reject("The sign in flow was canceled");
+ });
+ } else {
+ deferred.reject("Could not find InAppBrowser plugin");
+ }
+ } else {
+ deferred.reject("Cannot authenticate via a web browser");
+ }
+ return deferred.promise;
+ },
+
+ /*
+ * Sign into the Salesforce service
+ *
+ * Suggestion: use salesforce oauth with forcetk.js(as SDK)
+ *
+ * @param string loginUrl (such as: https://login.salesforce.com ; please notice community login)
+ * @param string clientId (copy from connection app info)
+ * @param string redirectUri (callback url in connection app info)
+ * @return promise
+ */
+ salesforce: function (loginUrl, clientId) {
+ var redirectUri = 'http://localhost/callback';
+ var getAuthorizeUrl = function (loginUrl, clientId, redirectUri) {
+ return loginUrl+'services/oauth2/authorize?display=touch'+
+ '&response_type=token&client_id='+escape(clientId)+
+ '&redirect_uri='+escape(redirectUri);
+ };
+ var startWith = function(string, str) {
+ return (string.substr(0, str.length) === str);
+ };
+ var deferred = $q.defer();
+ if(window.cordova) {
+ var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
+ if($cordovaOauthUtility.isInAppBrowserInstalled(cordovaMetadata) === true) {
+ var browserRef = window.open(getAuthorizeUrl(loginUrl, clientId, redirectUri), "_blank", "location=no,clearsessioncache=yes,clearcache=yes");
+ browserRef.addEventListener("loadstart", function(event) {
+ if(startWith(event.url, redirectUri)) {
+ var oauthResponse = {};
+
+ var fragment = (event.url).split('#')[1];
+
+ if (fragment) {
+ var nvps = fragment.split('&');
+ for (var nvp in nvps) {
+ var parts = nvps[nvp].split('=');
+ oauthResponse[parts[0]] = unescape(parts[1]);
+ }
+ }
+
+ if (typeof oauthResponse === 'undefined' ||
+ typeof oauthResponse.access_token === 'undefined') {
+ deferred.reject("Problem authenticating");
+ } else {
+ deferred.resolve(oauthResponse);
+ }
+ setTimeout(function() {
+ browserRef.close();
+ }, 10);
+ }
+ });
+ browserRef.addEventListener('exit', function(event) {
+ deferred.reject("The sign in flow was canceled");
+ });
+ } else {
+ deferred.reject("Could not find InAppBrowser plugin");
+ }
+ } else {
+ deferred.reject("Cannot authenticate via a web browser");
+ }
+ return deferred.promise;
+ },
+
+ /*
+ * Sign into the Strava service
+ *
+ * @param string clientId
+ * @param string clientSecret
+ * @param array appScope
+ * @param object options
+ * @return promise
+ */
+ strava: function(clientId, clientSecret, appScope, options) {
+ var deferred = $q.defer();
+ if(window.cordova) {
+ var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
+ if($cordovaOauthUtility.isInAppBrowserInstalled(cordovaMetadata) === true) {
+ var redirect_uri = "http://localhost/callback";
+ if(options !== undefined) {
+ if(options.hasOwnProperty("redirect_uri")) {
+ redirect_uri = options.redirect_uri;
+ }
+ }
+ var browserRef = window.open('https://www.strava.com/oauth/authorize?client_id=' + clientId + '&redirect_uri=' + redirect_uri + '&scope=' + appScope.join(",") + '&response_type=code&approval_prompt=force', '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
+ browserRef.addEventListener('loadstart', function(event) {
+ if((event.url).indexOf(redirect_uri) === 0) {
+ requestToken = (event.url).split("code=")[1];
+ $http.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
+ $http({method: "post", url: "https://www.strava.com/oauth/token", data: "client_id=" + clientId + "&client_secret=" + clientSecret + "&code=" + requestToken })
+ .success(function(data) {
+ deferred.resolve(data);
+ })
+ .error(function(data, status) {
+ deferred.reject("Problem authenticating");
+ })
+ .finally(function() {
+ setTimeout(function() {
+ browserRef.close();
+ }, 10);
+ });
+ }
+ });
+ browserRef.addEventListener('exit', function(event) {
+ deferred.reject("The sign in flow was canceled");
+ });
+ } else {
+ deferred.reject("Could not find InAppBrowser plugin");
+ }
+ } else {
+ deferred.reject("Cannot authenticate via a web browser");
+ }
+ return deferred.promise;
+ },
+
+ /*
+ * Sign into the Withings service
+ * Note that this service requires jsSHA for generating HMAC-SHA1 Oauth 1.0 signatures
+ *
+ * @param string clientId
+ * @param string clientSecret
+ * @return promise
+ */
+ withings: function(clientId, clientSecret) {
+ var deferred = $q.defer();
+ if(window.cordova) {
+ var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
+ if($cordovaOauthUtility.isInAppBrowserInstalled(cordovaMetadata) === true) {
+ if(typeof jsSHA !== "undefined") {
+
+ // Step 1 : get a oAuth "request token"
+ var oauthObject = $cordovaOauthUtility.generateOauthParametersInstance(clientId);
+ oauthObject.oauth_callback = 'http://localhost/callback';
+
+ var requestTokenUrlBase = "https://oauth.withings.com/account/request_token";
+ var signatureObj = $cordovaOauthUtility.createSignature("GET", requestTokenUrlBase, {}, oauthObject, clientSecret);
+ oauthObject.oauth_signature = signatureObj.signature;
+
+ var requestTokenParameters = $cordovaOauthUtility.generateUrlParameters(oauthObject);
+
+ $http({method: "get", url: requestTokenUrlBase + "?" + requestTokenParameters })
+ .success(function(requestTokenResult) {
+
+ // Step 2 : End-user authorization
+ var parameterMap = $cordovaOauthUtility.parseResponseParameters(requestTokenResult);
+ if(parameterMap.hasOwnProperty("oauth_token") === false) {
+ deferred.reject("Oauth request token was not received");
+ }
+ var oauthObject = $cordovaOauthUtility.generateOauthParametersInstance(clientId);
+ oauthObject.oauth_token = parameterMap.oauth_token;
+
+ // used in step 3
+ var oauthTokenSecret = parameterMap.oauth_token_secret;
+
+ var authorizeUrlBase = "https://oauth.withings.com/account/authorize";
+ var signatureObj = $cordovaOauthUtility.createSignature("GET", authorizeUrlBase, {}, oauthObject, clientSecret);
+ oauthObject.oauth_signature = signatureObj.signature;
+
+ var authorizeParameters = $cordovaOauthUtility.generateUrlParameters(oauthObject);
+ var browserRef = window.open(authorizeUrlBase + '?' + authorizeParameters, '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
+
+ // STEP 3: User Data Access token
+ browserRef.addEventListener('loadstart', function(event) {
+ if((event.url).indexOf("http://localhost/callback") === 0) {
+ var callbackResponse = (event.url).split("?")[1];
+ parameterMap = $cordovaOauthUtility.parseResponseParameters(callbackResponse);
+ if(parameterMap.hasOwnProperty("oauth_verifier") === false) {
+ deferred.reject("Browser authentication failed to complete. No oauth_verifier was returned");
+ }
+
+ var oauthObject = $cordovaOauthUtility.generateOauthParametersInstance(clientId);
+ oauthObject.oauth_token = parameterMap.oauth_token;
+
+ var accessTokenUrlBase = "https://oauth.withings.com/account/access_token";
+ var signatureObj = $cordovaOauthUtility.createSignature("GET", accessTokenUrlBase, {}, oauthObject, clientSecret, oauthTokenSecret);
+ oauthObject.oauth_signature = signatureObj.signature;
+
+ var accessTokenParameters = $cordovaOauthUtility.generateUrlParameters(oauthObject);
+
+ $http({method: "get", url: accessTokenUrlBase + '?' + accessTokenParameters})
+ .success(function(result) {
+ var parameterMap = $cordovaOauthUtility.parseResponseParameters(result);
+ if(parameterMap.hasOwnProperty("oauth_token_secret") === false) {
+ deferred.reject("Oauth access token was not received");
+ }
+ deferred.resolve(parameterMap);
+ })
+ .error(function(error) {
+ deferred.reject(error);
+ })
+ .finally(function() {
+ setTimeout(function() {
+ browserRef.close();
+ }, 10);
+ });
+ }
+ });
+ browserRef.addEventListener('exit', function(event) {
+ deferred.reject("The sign in flow was canceled");
+ });
+ })
+ .error(function(error) {
+ deferred.reject(error);
+ });
+ } else {
+ deferred.reject("Missing jsSHA JavaScript library");
+ }
+ } else {
+ deferred.reject("Could not find InAppBrowser plugin");
+ }
+ } else {
+ deferred.reject("Cannot authenticate via a web browser");
+ }
+ return deferred.promise;
+ },
+
+ /*
+ * Sign into the Foursquare service
+ *
+ * @param string clientId
+ * @param object options
+ * @return promise
+ */
+ foursquare: function(clientId, options) {
+ var deferred = $q.defer();
+ if (window.cordova) {
+ var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
+ if ($cordovaOauthUtility.isInAppBrowserInstalled(cordovaMetadata) === true) {
+ var redirect_uri = "http://localhost/callback";
+ if(options !== undefined) {
+ if(options.hasOwnProperty("redirect_uri")) {
+ redirect_uri = options.redirect_uri;
+ }
+ }
+ var browserRef = window.open('https://foursquare.com/oauth2/authenticate?client_id=' + clientId + '&redirect_uri=' + redirect_uri + '&response_type=token', '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
+ browserRef.addEventListener('loadstart', function (event) {
+ if ((event.url).indexOf(redirect_uri) === 0) {
+ browserRef.removeEventListener("exit",function(event){});
+ browserRef.close();
+ var callbackResponse = (event.url).split("#")[1];
+ var responseParameters = (callbackResponse).split("&");
+ var parameterMap = [];
+ for (var i = 0; i < responseParameters.length; i++) {
+ parameterMap[responseParameters[i].split("=")[0]] = responseParameters[i].split("=")[1];
+ }
+ if (parameterMap.access_token !== undefined && parameterMap.access_token !== null) {
+ var promiseResponse = {
+ access_token: parameterMap.access_token,
+ expires_in: parameterMap.expires_in
+ };
+ deferred.resolve(promiseResponse);
+ } else {
+ deferred.reject("Problem authenticating");
+ }
+ }
+ });
+ browserRef.addEventListener('exit', function(event) {
+ deferred.reject("The sign in flow was canceled");
+ });
+ } else {
+ deferred.reject("Could not find InAppBrowser plugin");
+ }
+ } else {
+ deferred.reject("Cannot authenticate via a web browser");
+ }
+ return deferred.promise;
+ },
+
+ /*
+ * Sign into the Magento service
+ * Note that this service requires jsSHA for generating HMAC-SHA1 Oauth 1.0 signatures
+ *
+ * @param string baseUrl
+ * @param string clientId
+ * @param string clientSecret
+ * @return promise
+ */
+ magento: function(baseUrl, clientId, clientSecret) {
+ var deferred = $q.defer();
+ if(window.cordova) {
+ var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
+ if($cordovaOauthUtility.isInAppBrowserInstalled(cordovaMetadata) === true) {
+ if(typeof jsSHA !== "undefined") {
+ var oauthObject = {
+ oauth_callback: "http://localhost/callback",
+ oauth_consumer_key: clientId,
+ oauth_nonce: $cordovaOauthUtility.createNonce(5),
+ oauth_signature_method: "HMAC-SHA1",
+ oauth_timestamp: Math.round((new Date()).getTime() / 1000.0),
+ oauth_version: "1.0"
+ };
+ var signatureObj = $cordovaOauthUtility.createSignature("POST", baseUrl + "/oauth/initiate", oauthObject, { oauth_callback: "http://localhost/callback" }, clientSecret);
+ $http.defaults.headers.post.Authorization = signatureObj.authorization_header;
+ $http.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
+ $http({method: "post", url: baseUrl + "/oauth/initiate", data: "oauth_callback=http://localhost/callback" })
+ .success(function(requestTokenResult) {
+ var requestTokenParameters = (requestTokenResult).split("&");
+ var parameterMap = {};
+ for(var i = 0; i < requestTokenParameters.length; i++) {
+ parameterMap[requestTokenParameters[i].split("=")[0]] = requestTokenParameters[i].split("=")[1];
+ }
+ if(parameterMap.hasOwnProperty("oauth_token") === false) {
+ deferred.reject("Oauth request token was not received");
+ }
+ var tokenSecret = parameterMap.oauth_token_secret;
+ var browserRef = window.open(baseUrl + '/oauth/authorize?oauth_token=' + parameterMap.oauth_token, '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
+ browserRef.addEventListener('loadstart', function(event) {
+ if((event.url).indexOf("http://localhost/callback") === 0) {
+ var callbackResponse = (event.url).split("?")[1];
+ var responseParameters = (callbackResponse).split("&");
+ var parameterMap = {};
+ for(var i = 0; i < responseParameters.length; i++) {
+ parameterMap[responseParameters[i].split("=")[0]] = responseParameters[i].split("=")[1];
+ }
+ if(parameterMap.hasOwnProperty("oauth_verifier") === false) {
+ deferred.reject("Browser authentication failed to complete. No oauth_verifier was returned");
+ }
+ delete oauthObject.oauth_signature;
+ delete oauthObject.oauth_callback;
+ oauthObject.oauth_token = parameterMap.oauth_token;
+ oauthObject.oauth_nonce = $cordovaOauthUtility.createNonce(5);
+ oauthObject.oauth_verifier = parameterMap.oauth_verifier;
+ var signatureObj = $cordovaOauthUtility.createSignature("POST", baseUrl + "/oauth/token", oauthObject, {}, clientSecret, tokenSecret);
+ $http.defaults.headers.post.Authorization = signatureObj.authorization_header;
+ $http.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
+ $http({method: "post", url: baseUrl + "/oauth/token" })
+ .success(function(result) {
+ var accessTokenParameters = result.split("&");
+ var parameterMap = {};
+ for(var i = 0; i < accessTokenParameters.length; i++) {
+ parameterMap[accessTokenParameters[i].split("=")[0]] = accessTokenParameters[i].split("=")[1];
+ }
+ if(parameterMap.hasOwnProperty("oauth_token_secret") === false) {
+ deferred.reject("Oauth access token was not received");
+ }
+ deferred.resolve(parameterMap);
+ })
+ .error(function(error) {
+ deferred.reject(error);
+ })
+ .finally(function() {
+ setTimeout(function() {
+ browserRef.close();
+ }, 10);
+ });
+ }
+ });
+ browserRef.addEventListener('exit', function(event) {
+ deferred.reject("The sign in flow was canceled");
+ });
+ })
+ .error(function(error) {
+ deferred.reject(error);
+ });
+ } else {
+ deferred.reject("Missing jsSHA JavaScript library");
+ }
+ } else {
+ deferred.reject("Could not find InAppBrowser plugin");
+ }
+ } else {
+ deferred.reject("Cannot authenticate via a web browser");
+ }
+ return deferred.promise;
+ },
+
+ /*
+ * Sign into the Vkontakte service
+ *
+ * @param string clientId
+ * @param array appScope (for example: "friends,wall,photos,messages")
+ * @return promise
+ */
+ vkontakte: function(clientId, appScope) {
+ var deferred = $q.defer();
+ if(window.cordova) {
+ var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
+ if($cordovaOauthUtility.isInAppBrowserInstalled(cordovaMetadata) === true) {
+ var browserRef = window.open('https://oauth.vk.com/authorize?client_id=' + clientId + '&redirect_uri=http://oauth.vk.com/blank.html&response_type=token&scope=' + appScope.join(",") + '&display=touch&response_type=token', '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
+ browserRef.addEventListener('loadstart', function(event) {
+ var tmp = (event.url).split("#");
+ if (tmp[0] == 'https://oauth.vk.com/blank.html' || tmp[0] == 'http://oauth.vk.com/blank.html') {
+ browserRef.removeEventListener("exit",function(event){});
+ browserRef.close();
+ var callbackResponse = (event.url).split("#")[1];
+ var responseParameters = (callbackResponse).split("&");
+ var parameterMap = [];
+ for(var i = 0; i < responseParameters.length; i++) {
+ parameterMap[responseParameters[i].split("=")[0]] = responseParameters[i].split("=")[1];
+ }
+ if(parameterMap.access_token !== undefined && parameterMap.access_token !== null) {
+ var output = { access_token: parameterMap.access_token, expires_in: parameterMap.expires_in };
+ if(parameterMap.email !== undefined && parameterMap.email !== null){
+ output.email = parameterMap.email;
+ }
+ deferred.resolve(output);
+ } else {
+ deferred.reject("Problem authenticating");
+ }
+ }
+ });
+ browserRef.addEventListener('exit', function(event) {
+ deferred.reject("The sign in flow was canceled");
+ });
+ } else {
+ deferred.reject("Could not find InAppBrowser plugin");
+ }
+ } else {
+ deferred.reject("Cannot authenticate via a web browser");
+ }
+ return deferred.promise;
+ },
+
+ /*
+ * Sign into the Odnoklassniki service
+ *
+ * @param string clientId
+ * @param array appScope (for example: "VALUABLE_ACCESS ,GROUP_CONTENT,VIDEO_CONTENT")
+ * @return promise
+ */
+ odnoklassniki: function (clientId, appScope)
+ {
+ var deferred = $q.defer();
+ if (window.cordova)
+ {
+ var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
+ if ($cordovaOauthUtility.isInAppBrowserInstalled(cordovaMetadata) === true)
+ {
+ var browserRef = window.open('http://www.odnoklassniki.ru/oauth/authorize?client_id=' + clientId + '&scope=' + appScope.join(",") + '&response_type=token&redirect_uri=http://localhost/callback' + '&layout=m', '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
+ browserRef.addEventListener('loadstart', function (event)
+ {
+ if ((event.url).indexOf("http://localhost/callback") === 0)
+ {
+ var callbackResponse = (event.url).split("#")[1];
+ var responseParameters = (callbackResponse).split("&");
+ var parameterMap = [];
+ for (var i = 0; i < responseParameters.length; i++)
+ {
+ parameterMap[responseParameters[i].split("=")[0]] = responseParameters[i].split("=")[1];
+ }
+ if (parameterMap.access_token !== undefined && parameterMap.access_token !== null)
+ {
+ deferred.resolve({ access_token: parameterMap.access_token, session_secret_key: parameterMap.session_secret_key });
+ } else
+ {
+ deferred.reject("Problem authenticating");
+ }
+ setTimeout(function ()
+ {
+ browserRef.close();
+ }, 10);
+ }
+ });
+ browserRef.addEventListener('exit', function (event)
+ {
+ deferred.reject("The sign in flow was canceled");
+ });
+ } else
+ {
+ deferred.reject("Could not find InAppBrowser plugin");
+ }
+ } else
+ {
+ deferred.reject("Cannot authenticate via a web browser");
+ }
+ return deferred.promise;
+ },
+
+
+ /*
+ * Sign into the Imgur service
+ *
+ * @param string clientId
+ * @param object options
+ * @return promise
+ */
+ imgur: function(clientId, options) {
+ var deferred = $q.defer();
+ if(window.cordova) {
+ var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
+ if($cordovaOauthUtility.isInAppBrowserInstalled(cordovaMetadata) === true) {
+ var redirect_uri = "http://localhost/callback";
+ if(options !== undefined) {
+ if(options.hasOwnProperty("redirect_uri")) {
+ redirect_uri = options.redirect_uri;
+ }
+ }
+ var browserRef = window.open('https://api.imgur.com/oauth2/authorize?client_id=' + clientId + '&response_type=token', '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
+ browserRef.addEventListener('loadstart', function(event) {
+ if((event.url).indexOf(redirect_uri) === 0) {
+ browserRef.removeEventListener("exit",function(event){});
+ browserRef.close();
+ var callbackResponse = (event.url).split("#")[1];
+ var responseParameters = (callbackResponse).split("&");
+ var parameterMap = [];
+ for(var i = 0; i < responseParameters.length; i++) {
+ parameterMap[responseParameters[i].split("=")[0]] = responseParameters[i].split("=")[1];
+ }
+ if(parameterMap.access_token !== undefined && parameterMap.access_token !== null) {
+ deferred.resolve({ access_token: parameterMap.access_token, expires_in: parameterMap.expires_in, account_username: parameterMap.account_username });
+ } else {
+ deferred.reject("Problem authenticating");
+ }
+ }
+ });
+ browserRef.addEventListener('exit', function(event) {
+ deferred.reject("The sign in flow was canceled");
+ });
+ } else {
+ deferred.reject("Could not find InAppBrowser plugin");
+ }
+ } else {
+ deferred.reject("Cannot authenticate via a web browser");
+ }
+ return deferred.promise;
+ },
+
+ /*
+ * Sign into the Spotify service
+ *
+ * @param string clientId
+ * @param object options
+ * @return promise
+ */
+ spotify: function(clientId, appScope, options) {
+ var deferred = $q.defer();
+ if(window.cordova) {
+ var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
+ if($cordovaOauthUtility.isInAppBrowserInstalled(cordovaMetadata) === true) {
+ var redirect_uri = "http://localhost/callback";
+ if(options !== undefined) {
+ if(options.hasOwnProperty("redirect_uri")) {
+ redirect_uri = options.redirect_uri;
+ }
+ }
+ var browserRef = window.open('https://accounts.spotify.com/authorize?client_id=' + clientId + '&redirect_uri=' + redirect_uri + '&response_type=token&scope=' + appScope.join(" "), '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
+ browserRef.addEventListener('loadstart', function(event) {
+ if((event.url).indexOf(redirect_uri) === 0) {
+ browserRef.removeEventListener("exit",function(event){});
+ browserRef.close();
+ var callbackResponse = (event.url).split("#")[1];
+ var responseParameters = (callbackResponse).split("&");
+ var parameterMap = [];
+ for(var i = 0; i < responseParameters.length; i++) {
+ parameterMap[responseParameters[i].split("=")[0]] = responseParameters[i].split("=")[1];
+ }
+ if(parameterMap.access_token !== undefined && parameterMap.access_token !== null) {
+ deferred.resolve({ access_token: parameterMap.access_token, expires_in: parameterMap.expires_in, account_username: parameterMap.account_username });
+ } else {
+ deferred.reject("Problem authenticating");
+ }
+ }
+ });
+ browserRef.addEventListener('exit', function(event) {
+ deferred.reject("The sign in flow was canceled");
+ });
+ } else {
+ deferred.reject("Could not find InAppBrowser plugin");
+ }
+ } else {
+ deferred.reject("Cannot authenticate via a web browser");
+ }
+ return deferred.promise;
+ },
+
+ /*
+ * Sign into the Uber service
+ *
+ * @param string clientId
+ * @param appScope array
+ * @param object options
+ * @return promise
+ */
+ uber: function(clientId, appScope, options) {
+ var deferred = $q.defer();
+ if(window.cordova) {
+ var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
+ if($cordovaOauthUtility.isInAppBrowserInstalled(cordovaMetadata) === true) {
+ var redirect_uri = "http://localhost/callback";
+ if(options !== undefined) {
+ if(options.hasOwnProperty("redirect_uri")) {
+ redirect_uri = options.redirect_uri;
+ }
+ }
+ var browserRef = window.open('https://login.uber.com/oauth/authorize?client_id=' + clientId + '&redirect_uri=' + redirect_uri + '&response_type=token&scope=' + appScope.join(" "), '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
+ browserRef.addEventListener('loadstart', function(event) {
+ if((event.url).indexOf(redirect_uri) === 0) {
+ browserRef.removeEventListener("exit",function(event){});
+ browserRef.close();
+ var callbackResponse = (event.url).split("#")[1];
+ var responseParameters = (callbackResponse).split("&");
+ var parameterMap = [];
+ for(var i = 0; i < responseParameters.length; i++) {
+ parameterMap[responseParameters[i].split("=")[0]] = responseParameters[i].split("=")[1];
+ }
+ if(parameterMap.access_token !== undefined && parameterMap.access_token !== null) {
+ deferred.resolve({ access_token: parameterMap.access_token, token_type: parameterMap.token_type, expires_in: parameterMap.expires_in, scope: parameterMap.scope });
+ } else {
+ deferred.reject("Problem authenticating");
+ }
+ }
+ });
+ browserRef.addEventListener('exit', function(event) {
+ deferred.reject("The sign in flow was canceled");
+ });
+ } else {
+ deferred.reject("Could not find InAppBrowser plugin");
+ }
+ } else {
+ deferred.reject("Cannot authenticate via a web browser");
+ }
+ return deferred.promise;
+ },
+
+ /*
+ * Sign into the Windows Live Connect service
+ *
+ * @param string clientId
+ * @param array appScope
+ * @param object options
+ * @return promise
+ */
+ windowsLive: function (clientId, appScope, options) {
+ var deferred = $q.defer();
+ if(window.cordova) {
+ var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
+ if($cordovaOauthUtility.isInAppBrowserInstalled(cordovaMetadata) === true) {
+ var redirect_uri = "https://login.live.com/oauth20_desktop.srf";
+ if(options !== undefined) {
+ if(options.hasOwnProperty("redirect_uri")) {
+ redirect_uri = options.redirect_uri;
+ }
+ }
+ var browserRef = window.open('https://login.live.com/oauth20_authorize.srf?client_id=' + clientId + "&scope=" + appScope.join(",") + '&response_type=token&display=touch' + '&redirect_uri=' + redirect_uri, '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
+ browserRef.addEventListener('loadstart', function (event) {
+ if((event.url).indexOf(redirect_uri) === 0) {
+ browserRef.removeEventListener("exit", function (event) { });
+ browserRef.close();
+ var callbackResponse = (event.url).split("#")[1];
+ var responseParameters = (callbackResponse).split("&");
+ var parameterMap = [];
+ for (var i = 0; i < responseParameters.length; i++) {
+ parameterMap[responseParameters[i].split("=")[0]] = responseParameters[i].split("=")[1];
+ }
+ if (parameterMap.access_token !== undefined && parameterMap.access_token !== null) {
+ deferred.resolve({ access_token: parameterMap.access_token, expires_in: parameterMap.expires_in });
+ } else {
+ deferred.reject("Problem authenticating");
+ }
+ }
+ });
+ browserRef.addEventListener('exit', function (event) {
+ deferred.reject("The sign in flow was canceled");
+ });
+ } else {
+ deferred.reject("Could not find InAppBrowser plugin");
+ }
+ } else {
+ deferred.reject("Cannot authenticate via a web browser");
+ }
+ return deferred.promise;
+ },
+
+ /*
+ * Sign into the Yammer service
+ *
+ * @param string clientId
+ * @param object options
+ * @return promise
+ */
+ yammer: function(clientId, options) {
+ var deferred = $q.defer();
+ if(window.cordova) {
+ var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
+ if($cordovaOauthUtility.isInAppBrowserInstalled(cordovaMetadata) === true) {
+ var redirect_uri = "http://localhost/callback";
+ if(options !== undefined) {
+ if(options.hasOwnProperty("redirect_uri")) {
+ redirect_uri = options.redirect_uri;
+ }
+ }
+ var browserRef = window.open('https://www.yammer.com/dialog/oauth?client_id=' + clientId + '&redirect_uri=' + redirect_uri + '&response_type=token', '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
+ browserRef.addEventListener('loadstart', function(event) {
+ if((event.url).indexOf(redirect_uri) === 0) {
+ browserRef.removeEventListener("exit",function(event){});
+ browserRef.close();
+ var callbackResponse = (event.url).split("#")[1];
+ var responseParameters = (callbackResponse).split("&");
+ var parameterMap = [];
+ for(var i = 0; i < responseParameters.length; i++) {
+ parameterMap[responseParameters[i].split("=")[0]] = responseParameters[i].split("=")[1];
+ }
+ if(parameterMap.access_token !== undefined && parameterMap.access_token !== null) {
+ deferred.resolve({ access_token: parameterMap.access_token });
+ } else {
+ deferred.reject("Problem authenticating");
+ }
+ }
+ });
+ browserRef.addEventListener('exit', function(event) {
+ deferred.reject("The sign in flow was canceled");
+ });
+ } else {
+ deferred.reject("Could not find InAppBrowser plugin");
+ }
+ } else {
+ deferred.reject("Cannot authenticate via a web browser");
+ }
+ return deferred.promise;
+ },
+
+ /*
+ * Sign into the Venmo service
+ *
+ * @param string clientId
+ * @param array appScope
+ * @param object options
+ * @return promise
+ */
+ venmo: function(clientId, appScope, options) {
+ var deferred = $q.defer();
+ if(window.cordova) {
+ var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
+ if($cordovaOauthUtility.isInAppBrowserInstalled(cordovaMetadata) === true) {
+ var redirect_uri = "http://localhost/callback";
+ if(options !== undefined) {
+ if(options.hasOwnProperty("redirect_uri")) {
+ redirect_uri = options.redirect_uri;
+ }
+ }
+ var browserRef = window.open('https://api.venmo.com/v1/oauth/authorize?client_id=' + clientId + '&redirect_uri=' + redirect_uri + '&response_type=token&scope=' + appScope.join(" "), '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
+ browserRef.addEventListener('loadstart', function(event) {
+ if((event.url).indexOf(redirect_uri) === 0) {
+ browserRef.removeEventListener("exit",function(event){});
+ browserRef.close();
+ var callbackResponse = (event.url).split("#")[1];
+ var responseParameters = (callbackResponse).split("&");
+ var parameterMap = [];
+ for(var i = 0; i < responseParameters.length; i++) {
+ parameterMap[responseParameters[i].split("=")[0]] = responseParameters[i].split("=")[1];
+ }
+ if(parameterMap.access_token !== undefined && parameterMap.access_token !== null) {
+ deferred.resolve({ access_token: parameterMap.access_token, expires_in: parameterMap.expires_in });
+ } else {
+ deferred.reject("Problem authenticating");
+ }
+ }
+ });
+ browserRef.addEventListener('exit', function(event) {
+ deferred.reject("The sign in flow was canceled");
+ });
+ } else {
+ deferred.reject("Could not find InAppBrowser plugin");
+ }
+ } else {
+ deferred.reject("Cannot authenticate via a web browser");
+ }
+ return deferred.promise;
+ },
+
+ /*
+ * Sign into the Stripe service
+ *
+ * @param string clientId
+ * @param string clientSecret
+ * @param string appScope
+ * @param object options
+ * @return promise
+ */
+ stripe: function(clientId, clientSecret, appScope, options) {
+ var deferred = $q.defer();
+ if(window.cordova) {
+ var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
+ if($cordovaOauthUtility.isInAppBrowserInstalled(cordovaMetadata) === true) {
+ var redirect_uri = "http://localhost/callback";
+ if(options !== undefined) {
+ if(options.hasOwnProperty("redirect_uri")) {
+ redirect_uri = options.redirect_uri;
+ }
+ }
+ var browserRef = window.open('https://connect.stripe.com/oauth/authorize?client_id=' + clientId + '&redirect_uri=' + redirect_uri + '&scope=' + appScope + '&response_type=code', '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
+ browserRef.addEventListener('loadstart', function(event) {
+ if((event.url).indexOf("http://localhost/callback") === 0) {
+ requestToken = (event.url).split("code=")[1];
+ $http.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
+ $http({method: "post", url: "https://connect.stripe.com/oauth/token", data: "client_id=" + clientId + "&client_secret=" + clientSecret + "&redirect_uri=" + redirect_uri + "&grant_type=authorization_code" + "&code=" + requestToken })
+ .success(function(data) {
+ deferred.resolve(data);
+ })
+ .error(function(data, status) {
+ deferred.reject("Problem authenticating");
+ })
+ .finally(function() {
+ setTimeout(function() {
+ browserRef.close();
+ }, 10);
+ });
+ }
+ });
+ browserRef.addEventListener('exit', function(event) {
+ deferred.reject("The sign in flow was canceled");
+ });
+ } else {
+ deferred.reject("Could not find InAppBrowser plugin");
+ }
+ } else {
+ deferred.reject("Cannot authenticate via a web browser");
+ }
+ return deferred.promise;
+ },
+
+ /*
+ * Sign into the Rally service
+ *
+ * @param string clientId
+ * @param string clientSecret
+ * @param string appScope
+ * @param object options
+ * @return promise
+ */
+ rally: function(clientId, clientSecret, appScope, options) {
+ var deferred = $q.defer();
+ if(window.cordova) {
+ var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
+ if($cordovaOauthUtility.isInAppBrowserInstalled(cordovaMetadata) === true) {
+ var redirect_uri = "http://localhost/callback";
+ if(options !== undefined) {
+ if(options.hasOwnProperty("redirect_uri")) {
+ redirect_uri = options.redirect_uri;
+ }
+ }
+ var browserRef = window.open('https://rally1.rallydev.com/login/oauth2/auth?client_id=' + clientId + '&redirect_uri=' + redirect_uri + '&scope=' + appScope + '&response_type=code', '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
+ browserRef.addEventListener('loadstart', function(event) {
+ if((event.url).indexOf("http://localhost/callback") === 0) {
+ requestToken = (event.url).split("code=")[1];
+ $http.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
+ $http({method: "post", url: "https://rally1.rallydev.com/login/oauth2/auth", data: "client_id=" + clientId + "&client_secret=" + clientSecret + "&redirect_uri=" + redirect_uri + "&grant_type=authorization_code" + "&code=" + requestToken })
+ .success(function(data) {
+ deferred.resolve(data);
+ })
+ .error(function(data, status) {
+ deferred.reject("Problem authenticating");
+ })
+ .finally(function() {
+ setTimeout(function() {
+ browserRef.close();
+ }, 10);
+ });
+ }
+ });
+ browserRef.addEventListener('exit', function(event) {
+ deferred.reject("The sign in flow was canceled");
+ });
+ } else {
+ deferred.reject("Could not find InAppBrowser plugin");
+ }
+ } else {
+ deferred.reject("Cannot authenticate via a web browser");
+ }
+ return deferred.promise;
+ },
+
+ /*
+ * Sign into the FamilySearch service
+ *
+ * @param string clientId
+ * @param object options
+ * @return promise
+ */
+ familySearch: function(clientId, state, options) {
+ var deferred = $q.defer();
+ if(window.cordova) {
+ var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
+ if(cordovaMetadata.hasOwnProperty("cordova-plugin-inappbrowser") === true) {
+ var redirect_uri = "http://localhost/callback";
+ if(options !== undefined) {
+ if(options.hasOwnProperty("redirect_uri")) {
+ redirect_uri = options.redirect_uri;
+ }
+ }
+ var browserRef = window.open("https://ident.familysearch.org/cis-web/oauth2/v3/authorization?client_id=" + clientId + "&redirect_uri=" + redirect_uri + "&response_type=code&state=" + state, "_blank", "location=no,clearsessioncache=yes,clearcache=yes");
+ browserRef.addEventListener("loadstart", function(event) {
+ if((event.url).indexOf(redirect_uri) === 0) {
+ var requestToken = (event.url).split("code=")[1];
+ $http.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
+ $http({method: "post", url: "https://ident.familysearch.org/cis-web/oauth2/v3/token", data: "client_id=" + clientId + "&redirect_uri=" + redirect_uri + "&grant_type=authorization_code&code=" + requestToken })
+ .success(function(data) {
+ deferred.resolve(data);
+ })
+ .error(function(data, status) {
+ deferred.reject("Problem authenticating");
+ })
+ .finally(function() {
+ setTimeout(function() {
+ browserRef.close();
+ }, 10);
+ });
+ }
+ });
+ browserRef.addEventListener('exit', function(event) {
+ deferred.reject("The sign in flow was canceled");
+ });
+ } else {
+ deferred.reject("Could not find InAppBrowser plugin");
+ }
+ } else {
+ deferred.reject("Cannot authenticate via a web browser");
+ }
+ return deferred.promise;
+ },
+
+ /*
+ * Sign into the Envato service
+ *
+ * @param string clientId
+ * @param object options
+ * @return promise
+ */
+ envato: function(clientId, options) {
+ var deferred = $q.defer();
+ if(window.cordova) {
+ var cordovaMetadata = cordova.require("cordova/plugin_list").metadata;
+ if($cordovaOauthUtility.isInAppBrowserInstalled(cordovaMetadata) === true) {
+ var redirect_uri = "http://localhost/callback";
+ if(options !== undefined) {
+ if(options.hasOwnProperty("redirect_uri")) {
+ redirect_uri = options.redirect_uri;
+ }
+ }
+ var browserRef = window.open('https://api.envato.com/authorization?client_id=' + clientId + '&redirect_uri=' + redirect_uri + '&response_type=token', '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
+ browserRef.addEventListener('loadstart', function(event) {
+ if((event.url).indexOf(redirect_uri) === 0) {
+ browserRef.removeEventListener("exit",function(event){});
+ browserRef.close();
+ var callbackResponse = (event.url).split("#")[1];
+ var responseParameters = (callbackResponse).split("&");
+ var parameterMap = [];
+ for(var i = 0; i < responseParameters.length; i++) {
+ parameterMap[responseParameters[i].split("=")[0]] = responseParameters[i].split("=")[1];
+ }
+ if(parameterMap.access_token !== undefined && parameterMap.access_token !== null) {
+ deferred.resolve({ access_token: parameterMap.access_token, expires_in: parameterMap.expires_in });
+ } else {
+ deferred.reject("Problem authenticating");
+ }
+ }
+ });
+ browserRef.addEventListener('exit', function(event) {
+ deferred.reject("The sign in flow was canceled");
+ });
+ } else {
+ deferred.reject("Could not find InAppBrowser plugin");
+ }
+ } else {
+ deferred.reject("Cannot authenticate via a web browser");
+ }
+ return deferred.promise;
+ }
+
+ };
+
+ }]);
+
+/*
+ * Cordova AngularJS Oauth
+ *
+ * Created by Nic Raboy
+ * http://www.nraboy.com
+ *
+ *
+ *
+ * DESCRIPTION:
+ *
+ * Use Oauth sign in for various web services.
+ *
+ *
+ * REQUIRES:
+ *
+ * Apache Cordova 3.5+
+ * Apache InAppBrowser Plugin
+ * Apache Cordova Whitelist Plugin
+ *
+ *
+ * SUPPORTS:
+ *
+ * Dropbox
+ * Digital Ocean
+ * Google
+ * GitHub
+ * Facebook
+ * LinkedIn
+ * Instagram
+ * Box
+ * Reddit
+ * Twitter
+ * Meetup
+ * Salesforce
+ * Strava
+ * Withings
+ * Foursquare
+ * Magento
+ * vkontakte
+ * Odnoklassniki
+ * ADFS
+ * Imgur
+ * Spotify
+ * Uber
+ * Windows Live Connect
+ * Yammer
+ * Venmo
+ * Stripe
+ * Rally
+ * Family Search
+ * Envato
+ */
+
+angular.module("ngCordovaOauth", [
+ "oauth.providers",
+ "oauth.utils"
+]);
+
+angular.module("oauth.utils", [])
+
+ .factory("$cordovaOauthUtility", ["$q", function($q) {
+
+ return {
+
+ /*
+ * Check to see if the mandatory InAppBrowser plugin is installed
+ *
+ * @param
+ * @return boolean
+ */
+ isInAppBrowserInstalled: function(cordovaMetadata) {
+ var inAppBrowserNames = ["cordova-plugin-inappbrowser", "org.apache.cordova.inappbrowser"];
+
+ return inAppBrowserNames.some(function(name) {
+ return cordovaMetadata.hasOwnProperty(name);
+ });
+ },
+
+ /*
+ * Sign an Oauth 1.0 request
+ *
+ * @param string method
+ * @param string endPoint
+ * @param object headerParameters
+ * @param object bodyParameters
+ * @param string secretKey
+ * @param string tokenSecret (optional)
+ * @return object
+ */
+ createSignature: function(method, endPoint, headerParameters, bodyParameters, secretKey, tokenSecret) {
+ if(typeof jsSHA !== "undefined") {
+ var headerAndBodyParameters = angular.copy(headerParameters);
+ var bodyParameterKeys = Object.keys(bodyParameters);
+ for(var i = 0; i < bodyParameterKeys.length; i++) {
+ headerAndBodyParameters[bodyParameterKeys[i]] = encodeURIComponent(bodyParameters[bodyParameterKeys[i]]);
+ }
+ var signatureBaseString = method + "&" + encodeURIComponent(endPoint) + "&";
+ var headerAndBodyParameterKeys = (Object.keys(headerAndBodyParameters)).sort();
+ for(i = 0; i < headerAndBodyParameterKeys.length; i++) {
+ if(i == headerAndBodyParameterKeys.length - 1) {
+ signatureBaseString += encodeURIComponent(headerAndBodyParameterKeys[i] + "=" + headerAndBodyParameters[headerAndBodyParameterKeys[i]]);
+ } else {
+ signatureBaseString += encodeURIComponent(headerAndBodyParameterKeys[i] + "=" + headerAndBodyParameters[headerAndBodyParameterKeys[i]] + "&");
+ }
+ }
+ var oauthSignatureObject = new jsSHA(signatureBaseString, "TEXT");
+
+ var encodedTokenSecret = '';
+ if (tokenSecret) {
+ encodedTokenSecret = encodeURIComponent(tokenSecret);
+ }
+
+ headerParameters.oauth_signature = encodeURIComponent(oauthSignatureObject.getHMAC(encodeURIComponent(secretKey) + "&" + encodedTokenSecret, "TEXT", "SHA-1", "B64"));
+ var headerParameterKeys = Object.keys(headerParameters);
+ var authorizationHeader = 'OAuth ';
+ for(i = 0; i < headerParameterKeys.length; i++) {
+ if(i == headerParameterKeys.length - 1) {
+ authorizationHeader += headerParameterKeys[i] + '="' + headerParameters[headerParameterKeys[i]] + '"';
+ } else {
+ authorizationHeader += headerParameterKeys[i] + '="' + headerParameters[headerParameterKeys[i]] + '",';
+ }
+ }
+ return { signature_base_string: signatureBaseString, authorization_header: authorizationHeader, signature: headerParameters.oauth_signature };
+ } else {
+ return "Missing jsSHA JavaScript library";
+ }
+ },
+
+ /*
+ * Create Random String Nonce
+ *
+ * @param integer length
+ * @return string
+ */
+ createNonce: function(length) {
+ var text = "";
+ var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
+ for(var i = 0; i < length; i++) {
+ text += possible.charAt(Math.floor(Math.random() * possible.length));
+ }
+ return text;
+ },
+
+ generateUrlParameters: function (parameters) {
+ var sortedKeys = Object.keys(parameters);
+ sortedKeys.sort();
+
+ var params = "";
+ var amp = "";
+
+ for (var i = 0 ; i < sortedKeys.length; i++) {
+ params += amp + sortedKeys[i] + "=" + parameters[sortedKeys[i]];
+ amp = "&";
+ }
+
+ return params;
+ },
+
+ parseResponseParameters: function (response) {
+ if (response.split) {
+ var parameters = response.split("&");
+ var parameterMap = {};
+ for(var i = 0; i < parameters.length; i++) {
+ parameterMap[parameters[i].split("=")[0]] = parameters[i].split("=")[1];
+ }
+ return parameterMap;
+ }
+ else {
+ return {};
+ }
+ },
+
+ generateOauthParametersInstance: function(consumerKey) {
+ var nonceObj = new jsSHA(Math.round((new Date()).getTime() / 1000.0), "TEXT");
+ var oauthObject = {
+ oauth_consumer_key: consumerKey,
+ oauth_nonce: nonceObj.getHash("SHA-1", "HEX"),
+ oauth_signature_method: "HMAC-SHA1",
+ oauth_timestamp: Math.round((new Date()).getTime() / 1000.0),
+ oauth_version: "1.0"
+ };
+ return oauthObject;
+ }
+
+ };
+
+ }]);
+
+})(); \ No newline at end of file
diff --git a/www/lib/ngCordova/dist/ng-cordova.min.js b/www/lib/ngCordova/dist/ng-cordova.min.js
index 25fca1f5..408b7879 100644
--- a/www/lib/ngCordova/dist/ng-cordova.min.js
+++ b/www/lib/ngCordova/dist/ng-cordova.min.js
@@ -1,10 +1,10 @@
/*!
* ngCordova
- * v0.1.17-alpha
+ * v0.1.18-alpha
* Copyright 2014 Drifty Co. http://drifty.com/
* See LICENSE in this repository for license information
*/
-!function(){angular.module("ngCordova",["ngCordova.plugins"]),angular.module("ngCordova.plugins.actionSheet",[]).factory("$cordovaActionSheet",["$q","$window",function(e,n){return{show:function(t){var o=e.defer();return n.plugins.actionsheet.show(t,function(e){o.resolve(e)}),o.promise},hide:function(){return n.plugins.actionsheet.hide()}}}]),angular.module("ngCordova.plugins.adMob",[]).factory("$cordovaAdMob",["$q","$window",function(e,n){return{createBannerView:function(t){var o=e.defer();return n.plugins.AdMob.createBannerView(t,function(){o.resolve()},function(){o.reject()}),o.promise},createInterstitialView:function(t){var o=e.defer();return n.plugins.AdMob.createInterstitialView(t,function(){o.resolve()},function(){o.reject()}),o.promise},requestAd:function(t){var o=e.defer();return n.plugins.AdMob.requestAd(t,function(){o.resolve()},function(){o.reject()}),o.promise},showAd:function(t){var o=e.defer();return n.plugins.AdMob.showAd(t,function(){o.resolve()},function(){o.reject()}),o.promise},requestInterstitialAd:function(t){var o=e.defer();return n.plugins.AdMob.requestInterstitialAd(t,function(){o.resolve()},function(){o.reject()}),o.promise}}}]),angular.module("ngCordova.plugins.appAvailability",[]).factory("$cordovaAppAvailability",["$q",function(e){return{check:function(n){var t=e.defer();return appAvailability.check(n,function(e){t.resolve(e)},function(e){t.reject(e)}),t.promise}}}]),angular.module("ngCordova.plugins.appRate",[]).provider("$cordovaAppRate",[function(){this.setPreferences=function(e){e&&angular.isObject(e)&&(AppRate.preferences.useLanguage=e.language||null,AppRate.preferences.displayAppName=e.appName||"",AppRate.preferences.promptAgainForEachNewVersion=e.promptForNewVersion||!0,AppRate.preferences.openStoreInApp=e.openStoreInApp||!1,AppRate.preferences.usesUntilPrompt=e.usesUntilPrompt||3,AppRate.preferences.useCustomRateDialog=e.useCustomRateDialog||!1,AppRate.preferences.storeAppURL.ios=e.iosURL||null,AppRate.preferences.storeAppURL.android=e.androidURL||null,AppRate.preferences.storeAppURL.blackberry=e.blackberryURL||null,AppRate.preferences.storeAppURL.windows8=e.windowsURL||null)},this.setCustomLocale=function(e){var n={title:"Rate %@",message:"If you enjoy using %@, would you mind taking a moment to rate it? It won’t take more than a minute. Thanks for your support!",cancelButtonLabel:"No, Thanks",laterButtonLabel:"Remind Me Later",rateButtonLabel:"Rate It Now"};n=angular.extend(n,e),AppRate.preferences.customLocale=n},this.$get=["$q",function(e){return{promptForRating:function(n){var t=e.defer(),o=AppRate.promptForRating(n);return t.resolve(o),t.promise},navigateToAppStore:function(){var n=e.defer(),t=AppRate.navigateToAppStore();return n.resolve(t),n.promise},onButtonClicked:function(e){AppRate.onButtonClicked=function(n){e.call(this,n)}},onRateDialogShow:function(e){AppRate.onRateDialogShow=e()}}}]}]),angular.module("ngCordova.plugins.appVersion",[]).factory("$cordovaAppVersion",["$q",function(e){return{getAppVersion:function(){var n=e.defer();return cordova.getAppVersion(function(e){n.resolve(e)}),n.promise}}}]),angular.module("ngCordova.plugins.backgroundGeolocation",[]).factory("$cordovaBackgroundGeolocation",["$q","$window",function(e,n){return{init:function(){n.navigator.geolocation.getCurrentPosition(function(e){return e})},configure:function(t){this.init();var o=e.defer();return n.plugins.backgroundGeoLocation.configure(function(e){o.notify(e),n.plugins.backgroundGeoLocation.finish()},function(e){o.reject(e)},t),this.start(),o.promise},start:function(){var t=e.defer();return n.plugins.backgroundGeoLocation.start(function(e){t.resolve(e)},function(e){t.reject(e)}),t.promise},stop:function(){var t=e.defer();return n.plugins.backgroundGeoLocation.stop(function(e){t.resolve(e)},function(e){t.reject(e)}),t.promise}}}]),angular.module("ngCordova.plugins.badge",[]).factory("$cordovaBadge",["$q",function(e){return{hasPermission:function(){var n=e.defer();return cordova.plugins.notification.badge.hasPermission(function(e){e?n.resolve(!0):n.reject("You do not have permission")}),n.promise},promptForPermission:function(){return cordova.plugins.notification.badge.promptForPermission()},set:function(n){var t=e.defer();return cordova.plugins.notification.badge.hasPermission(function(e){e?t.resolve(cordova.plugins.notification.badge.set(n)):t.reject("You do not have permission to set Badge")}),t.promise},get:function(){var n=e.defer();return cordova.plugins.notification.badge.hasPermission(function(e){e?cordova.plugins.notification.badge.get(function(e){n.resolve(e)}):n.reject("You do not have permission to get Badge")}),n.promise},clear:function(){var n=e.defer();return cordova.plugins.notification.badge.hasPermission(function(e){e?n.resolve(cordova.plugins.notification.badge.clear()):n.reject("You do not have permission to clear Badge")}),n.promise},configure:function(e){return cordova.plugins.notification.badge.configure(e)}}}]),angular.module("ngCordova.plugins.barcodeScanner",[]).factory("$cordovaBarcodeScanner",["$q",function(e){return{scan:function(n){var t=e.defer();return cordova.plugins.barcodeScanner.scan(function(e){t.resolve(e)},function(e){t.reject(e)},n),t.promise},encode:function(n,t){var o=e.defer();return n=n||"TEXT_TYPE",cordova.plugins.barcodeScanner.encode(n,t,function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise}}}]),angular.module("ngCordova.plugins.batteryStatus",[]).factory("$cordovaBatteryStatus",["$rootScope","$window","$timeout",function(e,n,t){var o=function(n){t(function(){e.$broadcast("$cordovaBatteryStatus:status",n)})},r=function(n){t(function(){e.$broadcast("$cordovaBatteryStatus:critical",n)})},i=function(n){t(function(){e.$broadcast("$cordovaBatteryStatus:low",n)})};return document.addEventListener("deviceready",function(){navigator.battery&&(n.addEventListener("batterystatus",o,!1),n.addEventListener("batterycritical",r,!1),n.addEventListener("batterylow",i,!1))},!1),!0}]).run(["$cordovaBatteryStatus",function(){}]),angular.module("ngCordova.plugins.ble",[]).factory("$cordovaBLE",["$q",function(e){return{scan:function(n,t){var o=e.defer();return ble.scan(n,t,function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise},connect:function(n){var t=e.defer();return ble.connect(n,function(e){t.resolve(e)},function(e){t.reject(e)}),t.promise},disconnect:function(n){var t=e.defer();return ble.disconnect(n,function(e){t.resolve(e)},function(e){t.reject(e)}),t.promise},read:function(n,t,o){var r=e.defer();return ble.read(n,t,o,function(e){r.resolve(e)},function(e){r.reject(e)}),r.promise},write:function(n,t,o,r){var i=e.defer();return ble.write(n,t,o,r,function(e){i.resolve(e)},function(e){i.reject(e)}),i.promise},writeCommand:function(n,t,o,r){var i=e.defer();return ble.writeCommand(n,t,o,r,function(e){i.resolve(e)},function(e){i.reject(e)}),i.promise},startNotification:function(n,t,o){var r=e.defer();return ble.startNotification(n,t,o,function(e){r.resolve(e)},function(e){r.reject(e)}),r.promise},stopNotification:function(n,t,o){var r=e.defer();return ble.stopNotification(n,t,o,function(e){r.resolve(e)},function(e){r.reject(e)}),r.promise},isConnected:function(n){var t=e.defer();return ble.isConnected(n,function(e){t.resolve(e)},function(e){t.reject(e)}),t.promise},isEnabled:function(){var n=e.defer();return ble.isEnabled(function(e){n.resolve(e)},function(e){n.reject(e)}),n.promise}}}]),angular.module("ngCordova.plugins.bluetoothSerial",[]).factory("$cordovaBluetoothSerial",["$q","$window",function(e,n){return{connect:function(t){var o=e.defer();return n.bluetoothSerial.connect(t,function(){o.resolve()},function(e){o.reject(e)}),o.promise},connectInsecure:function(t){var o=e.defer();return n.bluetoothSerial.connectInsecure(t,function(){o.resolve()},function(e){o.reject(e)}),o.promise},disconnect:function(){var t=e.defer();return n.bluetoothSerial.disconnect(function(){t.resolve()},function(e){t.reject(e)}),t.promise},list:function(){var t=e.defer();return n.bluetoothSerial.list(function(e){t.resolve(e)},function(e){t.reject(e)}),t.promise},discoverUnpaired:function(){var t=e.defer();return n.bluetoothSerial.discoverUnpaired(function(e){t.resolve(e)},function(e){t.reject(e)}),t.promise},setDeviceDiscoveredListener:function(){var t=e.defer();return n.bluetoothSerial.setDeviceDiscoveredListener(function(e){t.notify(e)}),t.promise},clearDeviceDiscoveredListener:function(){n.bluetoothSerial.clearDeviceDiscoveredListener()},showBluetoothSettings:function(){var t=e.defer();return n.bluetoothSerial.showBluetoothSettings(function(){t.resolve()},function(e){t.reject(e)}),t.promise},isEnabled:function(){var t=e.defer();return n.bluetoothSerial.isEnabled(function(){t.resolve()},function(){t.reject()}),t.promise},enable:function(){var t=e.defer();return n.bluetoothSerial.enable(function(){t.resolve()},function(){t.reject()}),t.promise},isConnected:function(){var t=e.defer();return n.bluetoothSerial.isConnected(function(){t.resolve()},function(){t.reject()}),t.promise},available:function(){var t=e.defer();return n.bluetoothSerial.available(function(e){t.resolve(e)},function(e){t.reject(e)}),t.promise},read:function(){var t=e.defer();return n.bluetoothSerial.read(function(e){t.resolve(e)},function(e){t.reject(e)}),t.promise},readUntil:function(t){var o=e.defer();return n.bluetoothSerial.readUntil(t,function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise},write:function(t){var o=e.defer();return n.bluetoothSerial.write(t,function(){o.resolve()},function(e){o.reject(e)}),o.promise},subscribe:function(t){var o=e.defer();return n.bluetoothSerial.subscribe(t,function(e){o.notify(e)},function(e){o.reject(e)}),o.promise},subscribeRawData:function(){var t=e.defer();return n.bluetoothSerial.subscribeRawData(function(e){t.notify(e)},function(e){t.reject(e)}),t.promise},unsubscribe:function(){var t=e.defer();return n.bluetoothSerial.unsubscribe(function(){t.resolve()},function(e){t.reject(e)}),t.promise},unsubscribeRawData:function(){var t=e.defer();return n.bluetoothSerial.unsubscribeRawData(function(){t.resolve()},function(e){t.reject(e)}),t.promise},clear:function(){var t=e.defer();return n.bluetoothSerial.clear(function(){t.resolve()},function(e){t.reject(e)}),t.promise},readRSSI:function(){var t=e.defer();return n.bluetoothSerial.readRSSI(function(e){t.resolve(e)},function(e){t.reject(e)}),t.promise}}}]),angular.module("ngCordova.plugins.brightness",[]).factory("$cordovaBrightness",["$q","$window",function(e,n){return{get:function(){var t=e.defer();return n.cordova.plugins.brightness.getBrightness(function(e){t.resolve(e)},function(e){t.reject(e)}),t.promise},set:function(t){var o=e.defer();return n.cordova.plugins.brightness.setBrightness(t,function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise},setKeepScreenOn:function(t){var o=e.defer();return n.cordova.plugins.brightness.setKeepScreenOn(t,function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise}}}]),angular.module("ngCordova.plugins.calendar",[]).factory("$cordovaCalendar",["$q","$window",function(e,n){return{createCalendar:function(t){var o=e.defer(),r=n.plugins.calendar.getCreateCalendarOptions();return"string"==typeof t?r.calendarName=t:r=angular.extend(r,t),n.plugins.calendar.createCalendar(r,function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise},deleteCalendar:function(t){var o=e.defer();return n.plugins.calendar.deleteCalendar(t,function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise},createEvent:function(t){var o=e.defer(),r={title:null,location:null,notes:null,startDate:null,endDate:null};return r=angular.extend(r,t),n.plugins.calendar.createEvent(r.title,r.location,r.notes,new Date(r.startDate),new Date(r.endDate),function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise},createEventWithOptions:function(t){var o=e.defer(),r=[],i=window.plugins.calendar.getCalendarOptions(),a={title:null,location:null,notes:null,startDate:null,endDate:null};r=Object.keys(a);for(var c in t)-1===r.indexOf(c)?i[c]=t[c]:a[c]=t[c];return n.plugins.calendar.createEventWithOptions(a.title,a.location,a.notes,new Date(a.startDate),new Date(a.endDate),i,function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise},createEventInteractively:function(t){var o=e.defer(),r={title:null,location:null,notes:null,startDate:null,endDate:null};return r=angular.extend(r,t),n.plugins.calendar.createEventInteractively(r.title,r.location,r.notes,new Date(r.startDate),new Date(r.endDate),function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise},createEventInNamedCalendar:function(t){var o=e.defer(),r={title:null,location:null,notes:null,startDate:null,endDate:null,calendarName:null};return r=angular.extend(r,t),n.plugins.calendar.createEventInNamedCalendar(r.title,r.location,r.notes,new Date(r.startDate),new Date(r.endDate),r.calendarName,function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise},findEvent:function(t){var o=e.defer(),r={title:null,location:null,notes:null,startDate:null,endDate:null};return r=angular.extend(r,t),n.plugins.calendar.findEvent(r.title,r.location,r.notes,new Date(r.startDate),new Date(r.endDate),function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise},listEventsInRange:function(t,o){var r=e.defer();return n.plugins.calendar.listEventsInRange(t,o,function(e){r.resolve(e)},function(e){r.reject(e)}),r.promise},listCalendars:function(){var t=e.defer();return n.plugins.calendar.listCalendars(function(e){t.resolve(e)},function(e){t.reject(e)}),t.promise},findAllEventsInNamedCalendar:function(t){var o=e.defer();return n.plugins.calendar.findAllEventsInNamedCalendar(t,function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise},modifyEvent:function(t){var o=e.defer(),r={title:null,location:null,notes:null,startDate:null,endDate:null,newTitle:null,newLocation:null,newNotes:null,newStartDate:null,newEndDate:null};return r=angular.extend(r,t),n.plugins.calendar.modifyEvent(r.title,r.location,r.notes,new Date(r.startDate),new Date(r.endDate),r.newTitle,r.newLocation,r.newNotes,new Date(r.newStartDate),new Date(r.newEndDate),function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise},deleteEvent:function(t){var o=e.defer(),r={newTitle:null,location:null,notes:null,startDate:null,endDate:null};return r=angular.extend(r,t),n.plugins.calendar.deleteEvent(r.newTitle,r.location,r.notes,new Date(r.startDate),new Date(r.endDate),function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise}}}]),angular.module("ngCordova.plugins.camera",[]).factory("$cordovaCamera",["$q",function(e){return{getPicture:function(n){var t=e.defer();return navigator.camera?(navigator.camera.getPicture(function(e){t.resolve(e)},function(e){t.reject(e)},n),t.promise):(t.resolve(null),t.promise)},cleanup:function(){var n=e.defer();return navigator.camera.cleanup(function(){n.resolve()},function(e){n.reject(e)}),n.promise}}}]),angular.module("ngCordova.plugins.capture",[]).factory("$cordovaCapture",["$q",function(e){return{captureAudio:function(n){var t=e.defer();return navigator.device.capture?(navigator.device.capture.captureAudio(function(e){t.resolve(e)},function(e){t.reject(e)},n),t.promise):(t.resolve(null),t.promise)},captureImage:function(n){var t=e.defer();return navigator.device.capture?(navigator.device.capture.captureImage(function(e){t.resolve(e)},function(e){t.reject(e)},n),t.promise):(t.resolve(null),t.promise)},captureVideo:function(n){var t=e.defer();return navigator.device.capture?(navigator.device.capture.captureVideo(function(e){t.resolve(e)},function(e){t.reject(e)},n),t.promise):(t.resolve(null),t.promise)}}}]),angular.module("ngCordova.plugins.clipboard",[]).factory("$cordovaClipboard",["$q","$window",function(e,n){return{copy:function(t){var o=e.defer();return n.cordova.plugins.clipboard.copy(t,function(){o.resolve()},function(){o.reject()}),o.promise},paste:function(){var t=e.defer();return n.cordova.plugins.clipboard.paste(function(e){t.resolve(e)},function(){t.reject()}),t.promise}}}]),angular.module("ngCordova.plugins.contacts",[]).factory("$cordovaContacts",["$q",function(e){return{save:function(n){var t=e.defer(),o=navigator.contacts.create(n);return o.save(function(e){t.resolve(e)},function(e){t.reject(e)}),t.promise},remove:function(n){var t=e.defer(),o=navigator.contacts.create(n);return o.remove(function(e){t.resolve(e)},function(e){t.reject(e)}),t.promise},clone:function(e){var n=navigator.contacts.create(e);return n.clone(e)},find:function(n){var t=e.defer(),o=n.fields||["id","displayName"];return delete n.fields,navigator.contacts.find(o,function(e){t.resolve(e)},function(e){t.reject(e)},n),t.promise},pickContact:function(){var n=e.defer();return navigator.contacts.pickContact(function(e){n.resolve(e)},function(e){n.reject(e)}),n.promise}}}]),angular.module("ngCordova.plugins.datePicker",[]).factory("$cordovaDatePicker",["$window","$q",function(e,n){return{show:function(t){var o=n.defer();return t=t||{date:new Date,mode:"date"},e.datePicker.show(t,function(e){o.resolve(e)}),o.promise}}}]),angular.module("ngCordova.plugins.device",[]).factory("$cordovaDevice",[function(){return{getDevice:function(){return device},getCordova:function(){return device.cordova},getModel:function(){return device.model},getName:function(){return device.name},getPlatform:function(){return device.platform},getUUID:function(){return device.uuid},getVersion:function(){return device.version}}}]),angular.module("ngCordova.plugins.deviceMotion",[]).factory("$cordovaDeviceMotion",["$q",function(e){return{getCurrentAcceleration:function(){var n=e.defer();return navigator.accelerometer.getCurrentAcceleration(function(e){n.resolve(e)},function(e){n.reject(e)}),n.promise},watchAcceleration:function(n){var t=e.defer(),o=navigator.accelerometer.watchAcceleration(function(e){t.notify(e)},function(e){t.reject(e)},n);return t.promise.cancel=function(){navigator.accelerometer.clearWatch(o)},t.promise.clearWatch=function(e){navigator.accelerometer.clearWatch(e||o)},t.promise.watchID=o,t.promise},clearWatch:function(e){return navigator.accelerometer.clearWatch(e)}}}]),angular.module("ngCordova.plugins.deviceOrientation",[]).factory("$cordovaDeviceOrientation",["$q",function(e){var n={frequency:3e3};return{getCurrentHeading:function(){var n=e.defer();return navigator.compass.getCurrentHeading(function(e){n.resolve(e)},function(e){n.reject(e)}),n.promise},watchHeading:function(t){var o=e.defer(),r=angular.extend(n,t),i=navigator.compass.watchHeading(function(e){o.notify(e)},function(e){o.reject(e)},r);return o.promise.cancel=function(){navigator.compass.clearWatch(i)},o.promise.clearWatch=function(e){navigator.compass.clearWatch(e||i)},o.promise.watchID=i,o.promise},clearWatch:function(e){return navigator.compass.clearWatch(e)}}}]),angular.module("ngCordova.plugins.dialogs",[]).factory("$cordovaDialogs",["$q","$window",function(e,n){return{alert:function(t,o,r){var i=e.defer();return n.navigator.notification?navigator.notification.alert(t,function(){i.resolve()},o,r):(n.alert(t),i.resolve()),i.promise},confirm:function(t,o,r){var i=e.defer();return n.navigator.notification?navigator.notification.confirm(t,function(e){i.resolve(e)},o,r):i.resolve(n.confirm(t)?1:2),i.promise},prompt:function(t,o,r,i){var a=e.defer();if(n.navigator.notification)navigator.notification.prompt(t,function(e){a.resolve(e)},o,r,i);else{var c=n.prompt(t,i);a.resolve(null!==c?{input1:c,buttonIndex:1}:{input1:c,buttonIndex:2})}return a.promise},beep:function(e){return navigator.notification.beep(e)}}}]),angular.module("ngCordova.plugins.emailComposer",[]).factory("$cordovaEmailComposer",["$q",function(e){return{isAvailable:function(){var n=e.defer();return cordova.plugins.email.isAvailable(function(e){e?n.resolve():n.reject()}),n.promise},open:function(n){var t=e.defer();return cordova.plugins.email.open(n,function(){t.reject()}),t.promise},addAlias:function(e,n){cordova.plugins.email.addAlias(e,n)}}}]),angular.module("ngCordova.plugins.facebook",[]).provider("$cordovaFacebook",[function(){this.browserInit=function(e,n){this.appID=e,this.appVersion=n||"v2.0",facebookConnectPlugin.browserInit(this.appID,this.appVersion)},this.$get=["$q",function(e){return{login:function(n){var t=e.defer();return facebookConnectPlugin.login(n,function(e){t.resolve(e)},function(e){t.reject(e)}),t.promise},showDialog:function(n){var t=e.defer();return facebookConnectPlugin.showDialog(n,function(e){t.resolve(e)},function(e){t.reject(e)}),t.promise},api:function(n,t){var o=e.defer();return facebookConnectPlugin.api(n,t,function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise},getAccessToken:function(){var n=e.defer();return facebookConnectPlugin.getAccessToken(function(e){n.resolve(e)},function(e){n.reject(e)}),n.promise},getLoginStatus:function(){var n=e.defer();return facebookConnectPlugin.getLoginStatus(function(e){n.resolve(e)},function(e){n.reject(e)}),n.promise},logout:function(){var n=e.defer();return facebookConnectPlugin.logout(function(e){n.resolve(e)},function(e){n.reject(e)}),n.promise}}}]}]),angular.module("ngCordova.plugins.facebookAds",[]).factory("$cordovaFacebookAds",["$q","$window",function(e,n){return{setOptions:function(t){var o=e.defer();return n.FacebookAds.setOptions(t,function(){o.resolve()},function(){o.reject()}),o.promise},createBanner:function(t){var o=e.defer();return n.FacebookAds.createBanner(t,function(){o.resolve()},function(){o.reject()}),o.promise},removeBanner:function(){var t=e.defer();return n.FacebookAds.removeBanner(function(){t.resolve()},function(){t.reject()}),t.promise},showBanner:function(t){var o=e.defer();return n.FacebookAds.showBanner(t,function(){o.resolve()},function(){o.reject()}),o.promise},showBannerAtXY:function(t,o){var r=e.defer();return n.FacebookAds.showBannerAtXY(t,o,function(){r.resolve()},function(){r.reject()}),r.promise},hideBanner:function(){var t=e.defer();return n.FacebookAds.hideBanner(function(){t.resolve()},function(){t.reject()}),t.promise},prepareInterstitial:function(t){var o=e.defer();return n.FacebookAds.prepareInterstitial(t,function(){o.resolve()},function(){o.reject()}),o.promise},showInterstitial:function(){var t=e.defer();return n.FacebookAds.showInterstitial(function(){t.resolve()},function(){t.reject()}),t.promise}}}]),angular.module("ngCordova.plugins.file",[]).constant("$cordovaFileError",{1:"NOT_FOUND_ERR",2:"SECURITY_ERR",3:"ABORT_ERR",4:"NOT_READABLE_ERR",5:"ENCODING_ERR",6:"NO_MODIFICATION_ALLOWED_ERR",7:"INVALID_STATE_ERR",8:"SYNTAX_ERR",9:"INVALID_MODIFICATION_ERR",10:"QUOTA_EXCEEDED_ERR",11:"TYPE_MISMATCH_ERR",12:"PATH_EXISTS_ERR"}).provider("$cordovaFile",[function(){this.$get=["$q","$window","$cordovaFileError",function(e,n,t){return{getFreeDiskSpace:function(){var n=e.defer();return cordova.exec(function(e){n.resolve(e)},function(e){n.reject(e)},"File","getFreeDiskSpace",[]),n.promise},checkDir:function(o,r){var i=e.defer();/^\//.test(r)&&i.reject("directory cannot start with /");try{var a=o+r;n.resolveLocalFileSystemURL(a,function(e){e.isDirectory===!0?i.resolve(e):i.reject({code:13,message:"input is not a directory"})},function(e){e.message=t[e.code],i.reject(e)})}catch(c){c.message=t[c.code],i.reject(c)}return i.promise},checkFile:function(o,r){var i=e.defer();/^\//.test(r)&&i.reject("directory cannot start with /");try{var a=o+r;n.resolveLocalFileSystemURL(a,function(e){e.isFile===!0?i.resolve(e):i.reject({code:13,message:"input is not a file"})},function(e){e.message=t[e.code],i.reject(e)})}catch(c){c.message=t[c.code],i.reject(c)}return i.promise},createDir:function(o,r,i){var a=e.defer();/^\//.test(r)&&a.reject("directory cannot start with /"),i=i?!1:!0;var c={create:!0,exclusive:i};try{n.resolveLocalFileSystemURL(o,function(e){e.getDirectory(r,c,function(e){a.resolve(e)},function(e){e.message=t[e.code],a.reject(e)})},function(e){e.message=t[e.code],a.reject(e)})}catch(u){u.message=t[u.code],a.reject(u)}return a.promise},createFile:function(o,r,i){var a=e.defer();/^\//.test(r)&&a.reject("file-name cannot start with /"),i=i?!1:!0;var c={create:!0,exclusive:i};try{n.resolveLocalFileSystemURL(o,function(e){e.getFile(r,c,function(e){a.resolve(e)},function(e){e.message=t[e.code],a.reject(e)})},function(e){e.message=t[e.code],a.reject(e)})}catch(u){u.message=t[u.code],a.reject(u)}return a.promise},removeDir:function(o,r){var i=e.defer();/^\//.test(r)&&i.reject("file-name cannot start with /");try{n.resolveLocalFileSystemURL(o,function(e){e.getDirectory(r,{create:!1},function(e){e.remove(function(){i.resolve({success:!0,fileRemoved:e})},function(e){e.message=t[e.code],i.reject(e)})},function(e){e.message=t[e.code],i.reject(e)})},function(e){e.message=t[e.code],i.reject(e)})}catch(a){a.message=t[a.code],i.reject(a)}return i.promise},removeFile:function(o,r){var i=e.defer();/^\//.test(r)&&i.reject("file-name cannot start with /");try{n.resolveLocalFileSystemURL(o,function(e){e.getFile(r,{create:!1},function(e){e.remove(function(){i.resolve({success:!0,fileRemoved:e})},function(e){e.message=t[e.code],i.reject(e)})},function(e){e.message=t[e.code],i.reject(e)})},function(e){e.message=t[e.code],i.reject(e)})}catch(a){a.message=t[a.code],i.reject(a)}return i.promise},removeRecursively:function(o,r){var i=e.defer();/^\//.test(r)&&i.reject("file-name cannot start with /");try{n.resolveLocalFileSystemURL(o,function(e){e.getDirectory(r,{create:!1},function(e){e.removeRecursively(function(){i.resolve({success:!0,fileRemoved:e})},function(e){e.message=t[e.code],i.reject(e)})},function(e){e.message=t[e.code],i.reject(e)})},function(e){e.message=t[e.code],i.reject(e)})}catch(a){a.message=t[a.code],i.reject(a)}return i.promise},writeFile:function(o,r,i,a){var c=e.defer();/^\//.test(r)&&c.reject("file-name cannot start with /"),a=a?!1:!0;var u={create:!0,exclusive:a};try{n.resolveLocalFileSystemURL(o,function(e){e.getFile(r,u,function(e){e.createWriter(function(e){u.append===!0&&e.seek(e.length),u.truncate&&e.truncate(u.truncate),e.onwriteend=function(e){this.error?c.reject(this.error):c.resolve(e)},e.write(i),c.promise.abort=function(){e.abort()}})},function(e){e.message=t[e.code],c.reject(e)})},function(e){e.message=t[e.code],c.reject(e)})}catch(s){s.message=t[s.code],c.reject(s)}return c.promise},writeExistingFile:function(o,r,i){var a=e.defer();/^\//.test(r)&&a.reject("file-name cannot start with /");try{n.resolveLocalFileSystemURL(o,function(e){e.getFile(r,{create:!1},function(e){e.createWriter(function(e){e.seek(e.length),e.onwriteend=function(e){this.error?a.reject(this.error):a.resolve(e)},e.write(i),a.promise.abort=function(){e.abort()}})},function(e){e.message=t[e.code],a.reject(e)})},function(e){e.message=t[e.code],a.reject(e)})}catch(c){c.message=t[c.code],a.reject(c)}return a.promise},readAsText:function(o,r){var i=e.defer();/^\//.test(r)&&i.reject("file-name cannot start with /");try{n.resolveLocalFileSystemURL(o,function(e){e.getFile(r,{create:!1},function(e){e.file(function(e){var n=new FileReader;n.onloadend=function(e){void 0!==e.target.result||null!==e.target.result?i.resolve(e.target.result):i.reject(void 0!==e.target.error||null!==e.target.error?e.target.error:{code:null,message:"READER_ONLOADEND_ERR"})},n.readAsText(e)})},function(e){e.message=t[e.code],i.reject(e)})},function(e){e.message=t[e.code],i.reject(e)})}catch(a){a.message=t[a.code],i.reject(a)}return i.promise},readAsDataURL:function(o,r){var i=e.defer();/^\//.test(r)&&i.reject("file-name cannot start with /");try{n.resolveLocalFileSystemURL(o,function(e){e.getFile(r,{create:!1},function(e){e.file(function(e){var n=new FileReader;n.onloadend=function(e){void 0!==e.target.result||null!==e.target.result?i.resolve(e.target.result):i.reject(void 0!==e.target.error||null!==e.target.error?e.target.error:{code:null,message:"READER_ONLOADEND_ERR"})},n.readAsDataURL(e)})},function(e){e.message=t[e.code],i.reject(e)})},function(e){e.message=t[e.code],i.reject(e)})}catch(a){a.message=t[a.code],i.reject(a)}return i.promise},readAsBinaryString:function(o,r){var i=e.defer();/^\//.test(r)&&i.reject("file-name cannot start with /");try{n.resolveLocalFileSystemURL(o,function(e){e.getFile(r,{create:!1},function(e){e.file(function(e){var n=new FileReader;n.onloadend=function(e){void 0!==e.target.result||null!==e.target.result?i.resolve(e.target.result):i.reject(void 0!==e.target.error||null!==e.target.error?e.target.error:{code:null,message:"READER_ONLOADEND_ERR"})},n.readAsBinaryString(e)})},function(e){e.message=t[e.code],i.reject(e)})},function(e){e.message=t[e.code],i.reject(e)})}catch(a){a.message=t[a.code],i.reject(a)}return i.promise},readAsArrayBuffer:function(o,r){var i=e.defer();/^\//.test(r)&&i.reject("file-name cannot start with /");try{n.resolveLocalFileSystemURL(o,function(e){e.getFile(r,{create:!1},function(e){e.file(function(e){var n=new FileReader;n.onloadend=function(e){void 0!==e.target.result||null!==e.target.result?i.resolve(e.target.result):i.reject(void 0!==e.target.error||null!==e.target.error?e.target.error:{code:null,message:"READER_ONLOADEND_ERR"})},n.readAsArrayBuffer(e)})},function(e){e.message=t[e.code],i.reject(e)})},function(e){e.message=t[e.code],i.reject(e)})}catch(a){a.message=t[a.code],i.reject(a)}return i.promise},moveFile:function(t,o,r,i){var a=e.defer();i=i||o,(/^\//.test(o)||/^\//.test(i))&&a.reject("file-name cannot start with /");try{n.resolveLocalFileSystemURL(t,function(e){e.getFile(o,{create:!1},function(e){n.resolveLocalFileSystemURL(r,function(n){e.moveTo(n,i,function(e){a.resolve(e)},function(e){a.reject(e)})},function(e){a.reject(e)})},function(e){a.reject(e)})},function(e){a.reject(e)})}catch(c){a.reject(c)}return a.promise},moveDir:function(t,o,r,i){var a=e.defer();i=i||o,(/^\//.test(o)||/^\//.test(i))&&a.reject("file-name cannot start with /");try{n.resolveLocalFileSystemURL(t,function(e){e.getDirectory(o,{create:!1},function(e){n.resolveLocalFileSystemURL(r,function(n){e.moveTo(n,i,function(e){a.resolve(e)},function(e){a.reject(e)})},function(e){a.reject(e)})},function(e){a.reject(e)})},function(e){a.reject(e)})}catch(c){a.reject(c)}return a.promise},copyDir:function(o,r,i,a){var c=e.defer();a=a||r,(/^\//.test(r)||/^\//.test(a))&&c.reject("file-name cannot start with /");try{n.resolveLocalFileSystemURL(o,function(e){e.getDirectory(r,{create:!1,exclusive:!1},function(e){n.resolveLocalFileSystemURL(i,function(n){e.copyTo(n,a,function(e){c.resolve(e)},function(e){e.message=t[e.code],c.reject(e)})},function(e){e.message=t[e.code],c.reject(e)})},function(e){e.message=t[e.code],c.reject(e)})},function(e){e.message=t[e.code],c.reject(e)})}catch(u){u.message=t[u.code],c.reject(u)}return c.promise},copyFile:function(o,r,i,a){var c=e.defer();a=a||r,/^\//.test(r)&&c.reject("file-name cannot start with /");try{n.resolveLocalFileSystemURL(o,function(e){e.getFile(r,{create:!1,exclusive:!1},function(e){n.resolveLocalFileSystemURL(i,function(n){e.copyTo(n,a,function(e){c.resolve(e)},function(e){e.message=t[e.code],c.reject(e)})},function(e){e.message=t[e.code],c.reject(e)})},function(e){e.message=t[e.code],c.reject(e)})},function(e){e.message=t[e.code],c.reject(e)})}catch(u){u.message=t[u.code],c.reject(u)}return c.promise}}}]}]),angular.module("ngCordova.plugins.fileOpener2",[]).factory("$cordovaFileOpener2",["$q",function(e){return{open:function(n,t){var o=e.defer();return cordova.plugins.fileOpener2.open(n,t,{error:function(e){o.reject(e)},success:function(){o.resolve()}}),o.promise},uninstall:function(n){var t=e.defer();return cordova.plugins.fileOpener2.uninstall(n,{error:function(e){t.reject(e)},success:function(){t.resolve()}}),t.promise},appIsInstalled:function(n){var t=e.defer();return cordova.plugins.fileOpener2.appIsInstalled(n,{success:function(e){t.resolve(e)}}),t.promise}}}]),angular.module("ngCordova.plugins.fileTransfer",[]).factory("$cordovaFileTransfer",["$q","$timeout",function(e,n){return{download:function(t,o,r,i){var a=e.defer(),c=new FileTransfer,u=r&&r.encodeURI===!1?t:encodeURI(t);return r&&void 0!==r.timeout&&null!==r.timeout&&(n(function(){c.abort()},r.timeout),r.timeout=null),c.onprogress=function(e){a.notify(e)},a.promise.abort=function(){c.abort()
-},c.download(u,o,a.resolve,a.reject,i,r),a.promise},upload:function(t,o,r,i){var a=e.defer(),c=new FileTransfer,u=r&&r.encodeURI===!1?t:encodeURI(t);return r&&void 0!==r.timeout&&null!==r.timeout&&(n(function(){c.abort()},r.timeout),r.timeout=null),c.onprogress=function(e){a.notify(e)},a.promise.abort=function(){c.abort()},c.upload(o,u,a.resolve,a.reject,r,i),a.promise}}}]),angular.module("ngCordova.plugins.flashlight",[]).factory("$cordovaFlashlight",["$q","$window",function(e,n){return{available:function(){var t=e.defer();return n.plugins.flashlight.available(function(e){t.resolve(e)}),t.promise},switchOn:function(){var t=e.defer();return n.plugins.flashlight.switchOn(function(e){t.resolve(e)},function(e){t.reject(e)}),t.promise},switchOff:function(){var t=e.defer();return n.plugins.flashlight.switchOff(function(e){t.resolve(e)},function(e){t.reject(e)}),t.promise},toggle:function(){var t=e.defer();return n.plugins.flashlight.toggle(function(e){t.resolve(e)},function(e){t.reject(e)}),t.promise}}}]),angular.module("ngCordova.plugins.flurryAds",[]).factory("$cordovaFlurryAds",["$q","$window",function(e,n){return{setOptions:function(t){var o=e.defer();return n.FlurryAds.setOptions(t,function(){o.resolve()},function(){o.reject()}),o.promise},createBanner:function(t){var o=e.defer();return n.FlurryAds.createBanner(t,function(){o.resolve()},function(){o.reject()}),o.promise},removeBanner:function(){var t=e.defer();return n.FlurryAds.removeBanner(function(){t.resolve()},function(){t.reject()}),t.promise},showBanner:function(t){var o=e.defer();return n.FlurryAds.showBanner(t,function(){o.resolve()},function(){o.reject()}),o.promise},showBannerAtXY:function(t,o){var r=e.defer();return n.FlurryAds.showBannerAtXY(t,o,function(){r.resolve()},function(){r.reject()}),r.promise},hideBanner:function(){var t=e.defer();return n.FlurryAds.hideBanner(function(){t.resolve()},function(){t.reject()}),t.promise},prepareInterstitial:function(t){var o=e.defer();return n.FlurryAds.prepareInterstitial(t,function(){o.resolve()},function(){o.reject()}),o.promise},showInterstitial:function(){var t=e.defer();return n.FlurryAds.showInterstitial(function(){t.resolve()},function(){t.reject()}),t.promise}}}]),angular.module("ngCordova.plugins.ga",[]).factory("$cordovaGA",["$q","$window",function(e,n){return{init:function(t,o){var r=e.defer();return o=o>=0?o:10,n.plugins.gaPlugin.init(function(e){r.resolve(e)},function(e){r.reject(e)},t,o),r.promise},trackEvent:function(t,o,r,i,a,c){var u=e.defer();return n.plugins.gaPlugin.trackEvent(function(e){u.resolve(e)},function(e){u.reject(e)},r,i,a,c),u.promise},trackPage:function(t,o,r){var i=e.defer();return n.plugins.gaPlugin.trackPage(function(e){i.resolve(e)},function(e){i.reject(e)},r),i.promise},setVariable:function(t,o,r,i){var a=e.defer();return n.plugins.gaPlugin.setVariable(function(e){a.resolve(e)},function(e){a.reject(e)},r,i),a.promise},exit:function(){var t=e.defer();return n.plugins.gaPlugin.exit(function(e){t.resolve(e)},function(e){t.reject(e)}),t.promise}}}]),angular.module("ngCordova.plugins.geolocation",[]).factory("$cordovaGeolocation",["$q",function(e){return{getCurrentPosition:function(n){var t=e.defer();return navigator.geolocation.getCurrentPosition(function(e){t.resolve(e)},function(e){t.reject(e)},n),t.promise},watchPosition:function(n){var t=e.defer(),o=navigator.geolocation.watchPosition(function(e){t.notify(e)},function(e){t.reject(e)},n);return t.promise.cancel=function(){navigator.geolocation.clearWatch(o)},t.promise.clearWatch=function(e){navigator.geolocation.clearWatch(e||o)},t.promise.watchID=o,t.promise},clearWatch:function(e){return navigator.geolocation.clearWatch(e)}}}]),angular.module("ngCordova.plugins.globalization",[]).factory("$cordovaGlobalization",["$q",function(e){return{getPreferredLanguage:function(){var n=e.defer();return navigator.globalization.getPreferredLanguage(function(e){n.resolve(e)},function(e){n.reject(e)}),n.promise},getLocaleName:function(){var n=e.defer();return navigator.globalization.getLocaleName(function(e){n.resolve(e)},function(e){n.reject(e)}),n.promise},getFirstDayOfWeek:function(){var n=e.defer();return navigator.globalization.getFirstDayOfWeek(function(e){n.resolve(e)},function(e){n.reject(e)}),n.promise},dateToString:function(n,t){var o=e.defer();return navigator.globalization.dateToString(n,function(e){o.resolve(e)},function(e){o.reject(e)},t),o.promise},stringToDate:function(n,t){var o=e.defer();return navigator.globalization.stringToDate(n,function(e){o.resolve(e)},function(e){o.reject(e)},t),o.promise},getDatePattern:function(n){var t=e.defer();return navigator.globalization.getDatePattern(function(e){t.resolve(e)},function(e){t.reject(e)},n),t.promise},getDateNames:function(n){var t=e.defer();return navigator.globalization.getDateNames(function(e){t.resolve(e)},function(e){t.reject(e)},n),t.promise},isDayLightSavingsTime:function(n){var t=e.defer();return navigator.globalization.isDayLightSavingsTime(n,function(e){t.resolve(e)},function(e){t.reject(e)}),t.promise},numberToString:function(n,t){var o=e.defer();return navigator.globalization.numberToString(n,function(e){o.resolve(e)},function(e){o.reject(e)},t),o.promise},stringToNumber:function(n,t){var o=e.defer();return navigator.globalization.stringToNumber(n,function(e){o.resolve(e)},function(e){o.reject(e)},t),o.promise},getNumberPattern:function(n){var t=e.defer();return navigator.globalization.getNumberPattern(function(e){t.resolve(e)},function(e){t.reject(e)},n),t.promise},getCurrencyPattern:function(n){var t=e.defer();return navigator.globalization.getCurrencyPattern(n,function(e){t.resolve(e)},function(e){t.reject(e)}),t.promise}}}]),angular.module("ngCordova.plugins.googleAds",[]).factory("$cordovaGoogleAds",["$q","$window",function(e,n){return{setOptions:function(t){var o=e.defer();return n.AdMob.setOptions(t,function(){o.resolve()},function(){o.reject()}),o.promise},createBanner:function(t){var o=e.defer();return n.AdMob.createBanner(t,function(){o.resolve()},function(){o.reject()}),o.promise},removeBanner:function(){var t=e.defer();return n.AdMob.removeBanner(function(){t.resolve()},function(){t.reject()}),t.promise},showBanner:function(t){var o=e.defer();return n.AdMob.showBanner(t,function(){o.resolve()},function(){o.reject()}),o.promise},showBannerAtXY:function(t,o){var r=e.defer();return n.AdMob.showBannerAtXY(t,o,function(){r.resolve()},function(){r.reject()}),r.promise},hideBanner:function(){var t=e.defer();return n.AdMob.hideBanner(function(){t.resolve()},function(){t.reject()}),t.promise},prepareInterstitial:function(t){var o=e.defer();return n.AdMob.prepareInterstitial(t,function(){o.resolve()},function(){o.reject()}),o.promise},showInterstitial:function(){var t=e.defer();return n.AdMob.showInterstitial(function(){t.resolve()},function(){t.reject()}),t.promise}}}]),angular.module("ngCordova.plugins.googleAnalytics",[]).factory("$cordovaGoogleAnalytics",["$q","$window",function(e,n){return{startTrackerWithId:function(t){var o=e.defer();return n.analytics.startTrackerWithId(t,function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise},setUserId:function(t){var o=e.defer();return n.analytics.setUserId(t,function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise},debugMode:function(){var t=e.defer();return n.analytics.debugMode(function(e){t.resolve(e)},function(){t.reject()}),t.promise},trackView:function(t){var o=e.defer();return n.analytics.trackView(t,function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise},addCustomDimension:function(t,o){var r=e.defer();return n.analytics.addCustomDimension(t,o,function(){r.resolve()},function(e){r.reject(e)}),r.promise},trackEvent:function(t,o,r,i){var a=e.defer();return n.analytics.trackEvent(t,o,r,i,function(e){a.resolve(e)},function(e){a.reject(e)}),a.promise},trackException:function(t,o){var r=e.defer();return n.analytics.trackException(t,o,function(e){r.resolve(e)},function(e){r.reject(e)}),r.promise},trackTiming:function(t,o,r,i){var a=e.defer();return n.analytics.trackTiming(t,o,r,i,function(e){a.resolve(e)},function(e){a.reject(e)}),a.promise},addTransaction:function(t,o,r,i,a,c){var u=e.defer();return n.analytics.addTransaction(t,o,r,i,a,c,function(e){u.resolve(e)},function(e){u.reject(e)}),u.promise},addTransactionItem:function(t,o,r,i,a,c,u){var s=e.defer();return n.analytics.addTransactionItem(t,o,r,i,a,c,u,function(e){s.resolve(e)},function(e){s.reject(e)}),s.promise}}}]),angular.module("ngCordova.plugins.googleMap",[]).factory("$cordovaGoogleMap",["$q","$window",function(e,n){var t=null;return{getMap:function(o){var r=e.defer();if(n.plugin.google.maps){var i=document.getElementById("map_canvas");t=n.plugin.google.maps.Map.getMap(o),t.setDiv(i),r.resolve(t)}else r.reject(null);return r.promise},isMapLoaded:function(){return!!t},addMarker:function(n){var o=e.defer();return t.addMarker(n,function(e){o.resolve(e)}),o.promise},getMapTypeIds:function(){return n.plugin.google.maps.mapTypeId},setVisible:function(n){var o=e.defer();return t.setVisible(n),o.promise},cleanup:function(){t=null}}}]),angular.module("ngCordova.plugins.googlePlayGame",[]).factory("$cordovaGooglePlayGame",["$q",function(e){return{auth:function(){var n=e.defer();return googleplaygame.auth(function(e){return n.resolve(e)},function(e){return n.reject(e)}),n.promise},signout:function(){var n=e.defer();return googleplaygame.signout(function(e){return n.resolve(e)},function(e){return n.reject(e)}),n.promise},isSignedIn:function(){var n=e.defer();return googleplaygame.isSignedIn(function(e){return n.resolve(e)},function(e){return n.reject(e)}),n.promise},showPlayer:function(){var n=e.defer();return googleplaygame.showPlayer(function(e){return n.resolve(e)},function(e){return n.reject(e)}),n.promise},submitScore:function(n){var t=e.defer();return googleplaygame.submitScore(n,function(e){return t.resolve(e)},function(e){return t.reject(e)}),t.promise},showAllLeaderboards:function(){var n=e.defer();return googleplaygame.showAllLeaderboards(function(e){return n.resolve(e)},function(e){return n.reject(e)}),n.promise},showLeaderboard:function(n){var t=e.defer();return googleplaygame.showLeaderboard(n,function(e){return t.resolve(e)},function(e){return t.reject(e)}),t.promise},unlockAchievement:function(n){var t=e.defer();return googleplaygame.unlockAchievement(n,function(e){return t.resolve(e)},function(e){return t.reject(e)}),t.promise},incrementAchievement:function(n){var t=e.defer();return googleplaygame.incrementAchievement(n,function(e){return t.resolve(e)},function(e){return t.reject(e)}),t.promise},showAchievements:function(){var n=e.defer();return googleplaygame.showAchievements(function(e){return n.resolve(e)},function(e){return n.reject(e)}),n.promise}}}]),angular.module("ngCordova.plugins.googleplus",[]).factory("$cordovaGooglePlus",["$q","$window",function(e,n){return{login:function(t){var o=e.defer();return void 0===t&&(t={}),n.plugins.googleplus.login({iOSApiKey:t},function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise},silentLogin:function(t){var o=e.defer();return void 0===t&&(t={}),n.plugins.googleplus.trySilentLogin({iOSApiKey:t},function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise},logout:function(){var t=e.defer();n.plugins.googleplus.logout(function(e){t.resolve(e)})},disconnect:function(){var t=e.defer();n.plugins.googleplus.disconnect(function(e){t.resolve(e)})}}}]),angular.module("ngCordova.plugins.healthKit",[]).factory("$cordovaHealthKit",["$q","$window",function(e,n){return{isAvailable:function(){var t=e.defer();return n.plugins.healthkit.available(function(e){t.resolve(e)},function(e){t.reject(e)}),t.promise},checkAuthStatus:function(t){var o=e.defer();return t=t||"HKQuantityTypeIdentifierHeight",n.plugins.healthkit.checkAuthStatus({type:t},function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise},requestAuthorization:function(t,o){var r=e.defer();return t=t||["HKCharacteristicTypeIdentifierDateOfBirth","HKQuantityTypeIdentifierActiveEnergyBurned","HKQuantityTypeIdentifierHeight"],o=o||["HKQuantityTypeIdentifierActiveEnergyBurned","HKQuantityTypeIdentifierHeight","HKQuantityTypeIdentifierDistanceCycling"],n.plugins.healthkit.requestAuthorization({readTypes:t,writeTypes:o},function(e){r.resolve(e)},function(e){r.reject(e)}),r.promise},readDateOfBirth:function(){var t=e.defer();return n.plugins.healthkit.readDateOfBirth(function(e){t.resolve(e)},function(e){t.resolve(e)}),t.promise},readGender:function(){var t=e.defer();return n.plugins.healthkit.readGender(function(e){t.resolve(e)},function(e){t.resolve(e)}),t.promise},saveWeight:function(t,o,r){var i=e.defer();return n.plugins.healthkit.saveWeight({unit:o||"lb",amount:t,date:r||new Date},function(e){i.resolve(e)},function(e){i.resolve(e)}),i.promise},readWeight:function(t){var o=e.defer();return n.plugins.healthkit.readWeight({unit:t||"lb"},function(e){o.resolve(e)},function(e){o.resolve(e)}),o.promise},saveHeight:function(t,o,r){var i=e.defer();return n.plugins.healthkit.saveHeight({unit:o||"in",amount:t,date:r||new Date},function(e){i.resolve(e)},function(e){i.resolve(e)}),i.promise},readHeight:function(t){var o=e.defer();return n.plugins.healthkit.readHeight({unit:t||"in"},function(e){o.resolve(e)},function(e){o.resolve(e)}),o.promise},findWorkouts:function(){var t=e.defer();return n.plugins.healthkit.findWorkouts({},function(e){t.resolve(e)},function(e){t.resolve(e)}),t.promise},saveWorkout:function(t){var o=e.defer();return n.plugins.healthkit.saveWorkout(t,function(e){o.resolve(e)},function(e){o.resolve(e)}),o.promise},querySampleType:function(t){var o=e.defer();return n.plugins.healthkit.querySampleType(t,function(e){o.resolve(e)},function(e){o.resolve(e)}),o.promise}}}]),angular.module("ngCordova.plugins.httpd",[]).factory("$cordovaHttpd",["$q",function(e){return{startServer:function(n){var t=e.defer();return cordova.plugins.CorHttpd.startServer(n,function(){t.resolve()},function(){t.reject()}),t.promise},stopServer:function(){var n=e.defer();return cordova.plugins.CorHttpd.stopServer(function(){n.resolve()},function(){n.reject()}),n.promise},getURL:function(){var n=e.defer();return cordova.plugins.CorHttpd.getURL(function(e){n.resolve(e)},function(){n.reject()}),n.promise},getLocalPath:function(){var n=e.defer();return cordova.plugins.CorHttpd.getLocalPath(function(e){n.resolve(e)},function(){n.reject()}),n.promise}}}]),angular.module("ngCordova.plugins.iAd",[]).factory("$cordovaiAd",["$q","$window",function(e,n){return{setOptions:function(t){var o=e.defer();return n.iAd.setOptions(t,function(){o.resolve()},function(){o.reject()}),o.promise},createBanner:function(t){var o=e.defer();return n.iAd.createBanner(t,function(){o.resolve()},function(){o.reject()}),o.promise},removeBanner:function(){var t=e.defer();return n.iAd.removeBanner(function(){t.resolve()},function(){t.reject()}),t.promise},showBanner:function(t){var o=e.defer();return n.iAd.showBanner(t,function(){o.resolve()},function(){o.reject()}),o.promise},showBannerAtXY:function(t,o){var r=e.defer();return n.iAd.showBannerAtXY(t,o,function(){r.resolve()},function(){r.reject()}),r.promise},hideBanner:function(){var t=e.defer();return n.iAd.hideBanner(function(){t.resolve()},function(){t.reject()}),t.promise},prepareInterstitial:function(t){var o=e.defer();return n.iAd.prepareInterstitial(t,function(){o.resolve()},function(){o.reject()}),o.promise},showInterstitial:function(){var t=e.defer();return n.iAd.showInterstitial(function(){t.resolve()},function(){t.reject()}),t.promise}}}]),angular.module("ngCordova.plugins.imagePicker",[]).factory("$cordovaImagePicker",["$q","$window",function(e,n){return{getPictures:function(t){var o=e.defer();return n.imagePicker.getPictures(function(e){o.resolve(e)},function(e){o.reject(e)},t),o.promise}}}]),angular.module("ngCordova.plugins.inAppBrowser",[]).provider("$cordovaInAppBrowser",[function(){var e,n=this.defaultOptions={};this.setDefaultOptions=function(e){n=angular.extend(n,e)},this.$get=["$rootScope","$q","$window","$timeout",function(t,o,r,i){return{open:function(a,c,u){var s=o.defer();if(u&&!angular.isObject(u))return s.reject("options must be an object"),s.promise;var l=angular.extend({},n,u),f=[];angular.forEach(l,function(e,n){f.push(n+"="+e)});var d=f.join();return e=r.open(a,c,d),e.addEventListener("loadstart",function(e){i(function(){t.$broadcast("$cordovaInAppBrowser:loadstart",e)})},!1),e.addEventListener("loadstop",function(e){s.resolve(e),i(function(){t.$broadcast("$cordovaInAppBrowser:loadstop",e)})},!1),e.addEventListener("loaderror",function(e){s.reject(e),i(function(){t.$broadcast("$cordovaInAppBrowser:loaderror",e)})},!1),e.addEventListener("exit",function(e){i(function(){t.$broadcast("$cordovaInAppBrowser:exit",e)})},!1),s.promise},close:function(){e.close(),e=null},show:function(){e.show()},executeScript:function(n){var t=o.defer();return e.executeScript(n,function(e){t.resolve(e)}),t.promise},insertCSS:function(n){var t=o.defer();return e.insertCSS(n,function(e){t.resolve(e)}),t.promise}}}]}]),angular.module("ngCordova.plugins.insomnia",[]).factory("$cordovaInsomnia",["$window",function(e){return{keepAwake:function(){return e.plugins.insomnia.keepAwake()},allowSleepAgain:function(){return e.plugins.insomnia.allowSleepAgain()}}}]),angular.module("ngCordova.plugins.instagram",[]).factory("$cordovaInstagram",["$q",function(e){return{share:function(n){var t=e.defer();return window.Instagram?(Instagram.share(n.image,n.caption,function(e){e?t.reject(e):t.resolve(!0)}),t.promise):(console.error("Tried to call Instagram.share but the Instagram plugin isn't installed!"),t.resolve(null),t.promise)},isInstalled:function(){var n=e.defer();return window.Instagram?(Instagram.isInstalled(function(e,t){e?n.reject(e):n.resolve(t||!0)}),n.promise):(console.error("Tried to call Instagram.isInstalled but the Instagram plugin isn't installed!"),n.resolve(null),n.promise)}}}]),angular.module("ngCordova.plugins.keyboard",[]).factory("$cordovaKeyboard",["$rootScope","$timeout",function(e){var n=function(){e.$evalAsync(function(){e.$broadcast("$cordovaKeyboard:show")})},t=function(){e.$evalAsync(function(){e.$broadcast("$cordovaKeyboard:hide")})};return document.addEventListener("deviceready",function(){cordova.plugins.Keyboard&&(window.addEventListener("native.keyboardshow",n,!1),window.addEventListener("native.keyboardhide",t,!1))}),{hideAccessoryBar:function(e){return cordova.plugins.Keyboard.hideKeyboardAccessoryBar(e)},close:function(){return cordova.plugins.Keyboard.close()},show:function(){return cordova.plugins.Keyboard.show()},disableScroll:function(e){return cordova.plugins.Keyboard.disableScroll(e)},isVisible:function(){return cordova.plugins.Keyboard.isVisible},clearShowWatch:function(){document.removeEventListener("native.keyboardshow",n),e.$$listeners["$cordovaKeyboard:show"]=[]},clearHideWatch:function(){document.removeEventListener("native.keyboardhide",t),e.$$listeners["$cordovaKeyboard:hide"]=[]}}}]),angular.module("ngCordova.plugins.keychain",[]).factory("$cordovaKeychain",["$q",function(e){return{getForKey:function(n,t){var o=e.defer(),r=new Keychain;return r.getForKey(o.resolve,o.reject,n,t),o.promise},setForKey:function(n,t,o){var r=e.defer(),i=new Keychain;return i.setForKey(r.resolve,r.reject,n,t,o),r.promise},removeForKey:function(n,t){var o=e.defer(),r=new Keychain;return r.removeForKey(o.resolve,o.reject,n,t),o.promise}}}]),angular.module("ngCordova.plugins.localNotification",[]).factory("$cordovaLocalNotification",["$q","$window","$rootScope","$timeout",function(e,n,t,o){return document.addEventListener("deviceready",function(){n.cordova&&n.cordova.plugins&&n.cordova.plugins.notification&&n.cordova.plugins.notification.local&&(n.cordova.plugins.notification.local.on("schedule",function(e,n){o(function(){t.$broadcast("$cordovaLocalNotification:schedule",e,n)})}),n.cordova.plugins.notification.local.on("trigger",function(e,n){o(function(){t.$broadcast("$cordovaLocalNotification:trigger",e,n)})}),n.cordova.plugins.notification.local.on("update",function(e,n){o(function(){t.$broadcast("$cordovaLocalNotification:update",e,n)})}),n.cordova.plugins.notification.local.on("clear",function(e,n){o(function(){t.$broadcast("$cordovaLocalNotification:clear",e,n)})}),n.cordova.plugins.notification.local.on("clearall",function(e){o(function(){t.$broadcast("$cordovaLocalNotification:clearall",e)})}),n.cordova.plugins.notification.local.on("cancel",function(e,n){o(function(){t.$broadcast("$cordovaLocalNotification:cancel",e,n)})}),n.cordova.plugins.notification.local.on("cancelall",function(e){o(function(){t.$broadcast("$cordovaLocalNotification:cancelall",e)})}),n.cordova.plugins.notification.local.on("click",function(e,n){o(function(){t.$broadcast("$cordovaLocalNotification:click",e,n)})}))},!1),{schedule:function(t,o){var r=e.defer();return o=o||null,n.cordova.plugins.notification.local.schedule(t,function(e){r.resolve(e)},o),r.promise},add:function(t,o){console.warn('Deprecated: use "schedule" instead.');var r=e.defer();return o=o||null,n.cordova.plugins.notification.local.schedule(t,function(e){r.resolve(e)},o),r.promise},update:function(t,o){var r=e.defer();return o=o||null,n.cordova.plugins.notification.local.update(t,function(e){r.resolve(e)},o),r.promise},clear:function(t,o){var r=e.defer();return o=o||null,n.cordova.plugins.notification.local.clear(t,function(e){r.resolve(e)},o),r.promise},clearAll:function(t){var o=e.defer();return t=t||null,n.cordova.plugins.notification.local.clearAll(function(e){o.resolve(e)},t),o.promise},cancel:function(t,o){var r=e.defer();return o=o||null,n.cordova.plugins.notification.local.cancel(t,function(e){r.resolve(e)},o),r.promise},cancelAll:function(t){var o=e.defer();return t=t||null,n.cordova.plugins.notification.local.cancelAll(function(e){o.resolve(e)},t),o.promise},isPresent:function(t,o){var r=e.defer();return o=o||null,n.cordova.plugins.notification.local.isPresent(t,function(e){r.resolve(e)},o),r.promise},isScheduled:function(t,o){var r=e.defer();return o=o||null,n.cordova.plugins.notification.local.isScheduled(t,function(e){r.resolve(e)},o),r.promise},isTriggered:function(t,o){var r=e.defer();return o=o||null,n.cordova.plugins.notification.local.isTriggered(t,function(e){r.resolve(e)},o),r.promise},hasPermission:function(t){var o=e.defer();return t=t||null,n.cordova.plugins.notification.local.hasPermission(function(e){e?o.resolve(e):o.reject(e)},t),o.promise},registerPermission:function(t){var o=e.defer();return t=t||null,n.cordova.plugins.notification.local.registerPermission(function(e){e?o.resolve(e):o.reject(e)},t),o.promise},promptForPermission:function(t){console.warn('Deprecated: use "registerPermission" instead.');var o=e.defer();return t=t||null,n.cordova.plugins.notification.local.registerPermission(function(e){e?o.resolve(e):o.reject(e)},t),o.promise},getAllIds:function(t){var o=e.defer();return t=t||null,n.cordova.plugins.notification.local.getAllIds(function(e){o.resolve(e)},t),o.promise},getIds:function(t){var o=e.defer();return t=t||null,n.cordova.plugins.notification.local.getIds(function(e){o.resolve(e)},t),o.promise},getScheduledIds:function(t){var o=e.defer();return t=t||null,n.cordova.plugins.notification.local.getScheduledIds(function(e){o.resolve(e)},t),o.promise},getTriggeredIds:function(t){var o=e.defer();return t=t||null,n.cordova.plugins.notification.local.getTriggeredIds(function(e){o.resolve(e)},t),o.promise},get:function(t,o){var r=e.defer();return o=o||null,n.cordova.plugins.notification.local.get(t,function(e){r.resolve(e)},o),r.promise},getAll:function(t){var o=e.defer();return t=t||null,n.cordova.plugins.notification.local.getAll(function(e){o.resolve(e)},t),o.promise},getScheduled:function(t,o){var r=e.defer();return o=o||null,n.cordova.plugins.notification.local.getScheduled(t,function(e){r.resolve(e)},o),r.promise},getAllScheduled:function(t){var o=e.defer();return t=t||null,n.cordova.plugins.notification.local.getAllScheduled(function(e){o.resolve(e)},t),o.promise},getTriggered:function(t,o){var r=e.defer();return o=o||null,n.cordova.plugins.notification.local.getTriggered(t,function(e){r.resolve(e)},o),r.promise},getAllTriggered:function(t){var o=e.defer();return t=t||null,n.cordova.plugins.notification.local.getAllTriggered(function(e){o.resolve(e)},t),o.promise},getDefaults:function(){return n.cordova.plugins.notification.local.getDefaults()},setDefaults:function(e){n.cordova.plugins.notification.local.setDefaults(e)}}}]),angular.module("ngCordova.plugins.mMediaAds",[]).factory("$cordovaMMediaAds",["$q","$window",function(e,n){return{setOptions:function(t){var o=e.defer();return n.mMedia.setOptions(t,function(){o.resolve()},function(){o.reject()}),o.promise},createBanner:function(t){var o=e.defer();return n.mMedia.createBanner(t,function(){o.resolve()},function(){o.reject()}),o.promise},removeBanner:function(){var t=e.defer();return n.mMedia.removeBanner(function(){t.resolve()},function(){t.reject()}),t.promise},showBanner:function(t){var o=e.defer();return n.mMedia.showBanner(t,function(){o.resolve()},function(){o.reject()}),o.promise},showBannerAtXY:function(t,o){var r=e.defer();return n.mMedia.showBannerAtXY(t,o,function(){r.resolve()},function(){r.reject()}),r.promise},hideBanner:function(){var t=e.defer();return n.mMedia.hideBanner(function(){t.resolve()},function(){t.reject()}),t.promise},prepareInterstitial:function(t){var o=e.defer();return n.mMedia.prepareInterstitial(t,function(){o.resolve()},function(){o.reject()}),o.promise},showInterstitial:function(){var t=e.defer();return n.mMedia.showInterstitial(function(){t.resolve()},function(){t.reject()}),t.promise}}}]),angular.module("ngCordova.plugins.media",[]).factory("$cordovaMedia",["$q",function(e){return{newMedia:function(n){var t,o=e.defer(),r=null;return t=new Media(n,function(e){o.resolve(e)},function(e){o.reject(e)},function(e){r=e}),o.promise.getCurrentPosition=function(){t.getCurrentPosition(function(){},function(){})},o.promise.getDuration=function(){t.getDuration()},o.promise.play=function(e){"object"!=typeof e&&(e={}),t.play(e)},o.promise.pause=function(){t.pause()},o.promise.stop=function(){t.stop()},o.promise.release=function(){t.release()},o.promise.seekTo=function(e){t.seekTo(e)},o.promise.setVolume=function(e){t.setVolume(e)},o.promise.startRecord=function(){t.startRecord()},o.promise.stopRecord=function(){t.stopRecord()},o.promise.media=t,o.promise}}}]),angular.module("ngCordova.plugins.mobfoxAds",[]).factory("$cordovaMobFoxAds",["$q","$window",function(e,n){return{setOptions:function(t){var o=e.defer();return n.MobFox.setOptions(t,function(){o.resolve()},function(){o.reject()}),o.promise},createBanner:function(t){var o=e.defer();return n.MobFox.createBanner(t,function(){o.resolve()},function(){o.reject()}),o.promise},removeBanner:function(){var t=e.defer();return n.MobFox.removeBanner(function(){t.resolve()},function(){t.reject()}),t.promise},showBanner:function(t){var o=e.defer();return n.MobFox.showBanner(t,function(){o.resolve()},function(){o.reject()}),o.promise},showBannerAtXY:function(t,o){var r=e.defer();return n.MobFox.showBannerAtXY(t,o,function(){r.resolve()},function(){r.reject()}),r.promise},hideBanner:function(){var t=e.defer();return n.MobFox.hideBanner(function(){t.resolve()},function(){t.reject()}),t.promise},prepareInterstitial:function(t){var o=e.defer();return n.MobFox.prepareInterstitial(t,function(){o.resolve()},function(){o.reject()}),o.promise},showInterstitial:function(){var t=e.defer();return n.MobFox.showInterstitial(function(){t.resolve()},function(){t.reject()}),t.promise}}}]),angular.module("ngCordova.plugins",["ngCordova.plugins.actionSheet","ngCordova.plugins.adMob","ngCordova.plugins.appAvailability","ngCordova.plugins.appRate","ngCordova.plugins.appVersion","ngCordova.plugins.backgroundGeolocation","ngCordova.plugins.badge","ngCordova.plugins.barcodeScanner","ngCordova.plugins.batteryStatus","ngCordova.plugins.ble","ngCordova.plugins.bluetoothSerial","ngCordova.plugins.brightness","ngCordova.plugins.calendar","ngCordova.plugins.camera","ngCordova.plugins.capture","ngCordova.plugins.clipboard","ngCordova.plugins.contacts","ngCordova.plugins.datePicker","ngCordova.plugins.device","ngCordova.plugins.deviceMotion","ngCordova.plugins.deviceOrientation","ngCordova.plugins.dialogs","ngCordova.plugins.emailComposer","ngCordova.plugins.facebook","ngCordova.plugins.facebookAds","ngCordova.plugins.file","ngCordova.plugins.fileTransfer","ngCordova.plugins.fileOpener2","ngCordova.plugins.flashlight","ngCordova.plugins.flurryAds","ngCordova.plugins.ga","ngCordova.plugins.geolocation","ngCordova.plugins.globalization","ngCordova.plugins.googleAds","ngCordova.plugins.googleAnalytics","ngCordova.plugins.googleMap","ngCordova.plugins.googlePlayGame","ngCordova.plugins.healthKit","ngCordova.plugins.httpd","ngCordova.plugins.iAd","ngCordova.plugins.imagePicker","ngCordova.plugins.inAppBrowser","ngCordova.plugins.keyboard","ngCordova.plugins.keychain","ngCordova.plugins.localNotification","ngCordova.plugins.media","ngCordova.plugins.mMediaAds","ngCordova.plugins.mobfoxAds","ngCordova.plugins.mopubAds","ngCordova.plugins.nativeAudio","ngCordova.plugins.network","ngCordova.plugins.oauth","ngCordova.plugins.oauthUtility","ngCordova.plugins.pinDialog","ngCordova.plugins.prefs","ngCordova.plugins.printer","ngCordova.plugins.progressIndicator","ngCordova.plugins.push","ngCordova.plugins.sms","ngCordova.plugins.socialSharing","ngCordova.plugins.spinnerDialog","ngCordova.plugins.splashscreen","ngCordova.plugins.sqlite","ngCordova.plugins.statusbar","ngCordova.plugins.toast","ngCordova.plugins.touchid","ngCordova.plugins.vibration","ngCordova.plugins.videoCapturePlus","ngCordova.plugins.zip","ngCordova.plugins.insomnia"]),angular.module("ngCordova.plugins.mopubAds",[]).factory("$cordovaMoPubAds",["$q","$window",function(e,n){return{setOptions:function(t){var o=e.defer();return n.MoPub.setOptions(t,function(){o.resolve()},function(){o.reject()}),o.promise},createBanner:function(t){var o=e.defer();return n.MoPub.createBanner(t,function(){o.resolve()},function(){o.reject()}),o.promise},removeBanner:function(){var t=e.defer();return n.MoPub.removeBanner(function(){t.resolve()},function(){t.reject()}),t.promise},showBanner:function(t){var o=e.defer();return n.MoPub.showBanner(t,function(){o.resolve()},function(){o.reject()}),o.promise},showBannerAtXY:function(t,o){var r=e.defer();return n.MoPub.showBannerAtXY(t,o,function(){r.resolve()},function(){r.reject()}),r.promise},hideBanner:function(){var t=e.defer();return n.MoPub.hideBanner(function(){t.resolve()},function(){t.reject()}),t.promise},prepareInterstitial:function(t){var o=e.defer();return n.MoPub.prepareInterstitial(t,function(){o.resolve()},function(){o.reject()}),o.promise},showInterstitial:function(){var t=e.defer();return n.MoPub.showInterstitial(function(){t.resolve()},function(){t.reject()}),t.promise}}}]),angular.module("ngCordova.plugins.nativeAudio",[]).factory("$cordovaNativeAudio",["$q","$window",function(e,n){return{preloadSimple:function(t,o){var r=e.defer();return n.plugins.NativeAudio.preloadSimple(t,o,function(e){r.resolve(e)},function(e){r.reject(e)}),r.promise},preloadComplex:function(t,o,r,i){var a=e.defer();return n.plugins.NativeAudio.preloadComplex(t,o,r,i,function(e){a.resolve(e)},function(e){a.reject(e)}),a.promise},play:function(t,o){var r=e.defer();return n.plugins.NativeAudio.play(t,o,function(e){r.resolve(e)},function(e){r.reject(e)}),r.promise},stop:function(t){var o=e.defer();return n.plugins.NativeAudio.stop(t,function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise},loop:function(t){var o=e.defer();return n.plugins.NativeAudio.loop(t,function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise},unload:function(t){var o=e.defer();return n.plugins.NativeAudio.unload(t,function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise},setVolumeForComplexAsset:function(t,o){var r=e.defer();return n.plugins.NativeAudio.setVolumeForComplexAsset(t,o,function(e){r.resolve(e)
-},function(e){r.reject(e)}),r.promise}}}]),angular.module("ngCordova.plugins.network",[]).factory("$cordovaNetwork",["$rootScope","$timeout",function(e,n){var t=function(){var t=navigator.connection.type;n(function(){e.$broadcast("$cordovaNetwork:offline",t)})},o=function(){var t=navigator.connection.type;n(function(){e.$broadcast("$cordovaNetwork:online",t)})};return document.addEventListener("deviceready",function(){navigator.connection&&(document.addEventListener("offline",t,!1),document.addEventListener("online",o,!1))}),{getNetwork:function(){return navigator.connection.type},isOnline:function(){var e=navigator.connection.type;return e!==Connection.UNKNOWN&&e!==Connection.NONE},isOffline:function(){var e=navigator.connection.type;return e===Connection.UNKNOWN||e===Connection.NONE},clearOfflineWatch:function(){document.removeEventListener("offline",t),e.$$listeners["$cordovaNetwork:offline"]=[]},clearOnlineWatch:function(){document.removeEventListener("online",t),e.$$listeners["$cordovaNetwork:online"]=[]}}}]).run(["$cordovaNetwork",function(){}]),angular.module("ngCordova.plugins.oauth",["ngCordova.plugins.oauthUtility"]).factory("$cordovaOauth",["$q","$http","$cordovaOauthUtility",function(e,n,t){return{adfs:function(t,o,r){var i=e.defer();if(window.cordova){var a=cordova.require("cordova/plugin_list").metadata;if(a.hasOwnProperty("org.apache.cordova.inappbrowser")===!0){var c=window.open(o+"/adfs/oauth2/authorize?response_type=code&client_id="+t+"&redirect_uri=http://localhost/callback&resource="+r,"_blank","location=no");c.addEventListener("loadstart",function(e){if(0===e.url.indexOf("http://localhost/callback")){var r=e.url.split("code=")[1];n.defaults.headers.post["Content-Type"]="application/x-www-form-urlencoded",n({method:"post",url:o+"/adfs/oauth2/token",data:"client_id="+t+"&code="+r+"&redirect_uri=http://localhost/callback&grant_type=authorization_code"}).success(function(e){i.resolve(e)}).error(function(){i.reject("Problem authenticating")}).finally(function(){setTimeout(function(){c.close()},10)})}}),c.addEventListener("exit",function(){i.reject("The sign in flow was canceled")})}else i.reject("Could not find InAppBrowser plugin")}else i.reject("Cannot authenticate via a web browser");return i.promise},dropbox:function(n){var t=e.defer();if(window.cordova){var o=cordova.require("cordova/plugin_list").metadata;if(o.hasOwnProperty("org.apache.cordova.inappbrowser")===!0){var r=window.open("https://www.dropbox.com/1/oauth2/authorize?client_id="+n+"&redirect_uri=http://localhost/callback&response_type=token","_blank","location=no,clearsessioncache=yes,clearcache=yes");r.addEventListener("loadstart",function(e){if(0===e.url.indexOf("http://localhost/callback")){for(var n=e.url.split("#")[1],o=n.split("&"),i=[],a=0;a<o.length;a++)i[o[a].split("=")[0]]=o[a].split("=")[1];void 0!==i.access_token&&null!==i.access_token?t.resolve({access_token:i.access_token,token_type:i.token_type,uid:i.uid}):t.reject("Problem authenticating"),setTimeout(function(){r.close()},10)}}),r.addEventListener("exit",function(){t.reject("The sign in flow was canceled")})}else t.reject("Could not find InAppBrowser plugin")}else t.reject("Cannot authenticate via a web browser");return t.promise},digitalOcean:function(t,o){var r=e.defer();if(window.cordova){var i=cordova.require("cordova/plugin_list").metadata;if(i.hasOwnProperty("org.apache.cordova.inappbrowser")===!0){var a=window.open("https://cloud.digitalocean.com/v1/oauth/authorize?client_id="+t+"&redirect_uri=http://localhost/callback&response_type=code&scope=read%20write","_blank","location=no,clearsessioncache=yes,clearcache=yes");a.addEventListener("loadstart",function(e){if(0===e.url.indexOf("http://localhost/callback")){var i=e.url.split("code=")[1];n.defaults.headers.post["Content-Type"]="application/x-www-form-urlencoded",n({method:"post",url:"https://cloud.digitalocean.com/v1/oauth/token",data:"client_id="+t+"&client_secret="+o+"&redirect_uri=http://localhost/callback&grant_type=authorization_code&code="+i}).success(function(e){r.resolve(e)}).error(function(){r.reject("Problem authenticating")}).finally(function(){setTimeout(function(){a.close()},10)})}}),a.addEventListener("exit",function(){r.reject("The sign in flow was canceled")})}else r.reject("Could not find InAppBrowser plugin")}else r.reject("Cannot authenticate via a web browser");return r.promise},google:function(n,t){var o=e.defer();if(window.cordova){var r=cordova.require("cordova/plugin_list").metadata;if(r.hasOwnProperty("org.apache.cordova.inappbrowser")===!0){var i=window.open("https://accounts.google.com/o/oauth2/auth?client_id="+n+"&redirect_uri=http://localhost/callback&scope="+t.join(" ")+"&approval_prompt=force&response_type=token","_blank","location=no,clearsessioncache=yes,clearcache=yes");i.addEventListener("loadstart",function(e){if(0===e.url.indexOf("http://localhost/callback")){for(var n=e.url.split("#")[1],t=n.split("&"),r=[],a=0;a<t.length;a++)r[t[a].split("=")[0]]=t[a].split("=")[1];void 0!==r.access_token&&null!==r.access_token?o.resolve({access_token:r.access_token,token_type:r.token_type,expires_in:r.expires_in}):o.reject("Problem authenticating"),setTimeout(function(){i.close()},10)}}),i.addEventListener("exit",function(){o.reject("The sign in flow was canceled")})}else o.reject("Could not find InAppBrowser plugin")}else o.reject("Cannot authenticate via a web browser");return o.promise},github:function(t,o,r){var i=e.defer();if(window.cordova){var a=cordova.require("cordova/plugin_list").metadata;if(a.hasOwnProperty("org.apache.cordova.inappbrowser")===!0){var c=window.open("https://github.com/login/oauth/authorize?client_id="+t+"&redirect_uri=http://localhost/callback&scope="+r.join(","),"_blank","location=no,clearsessioncache=yes,clearcache=yes");c.addEventListener("loadstart",function(e){0===e.url.indexOf("http://localhost/callback")&&(requestToken=e.url.split("code=")[1],n.defaults.headers.post["Content-Type"]="application/x-www-form-urlencoded",n.defaults.headers.post.accept="application/json",n({method:"post",url:"https://github.com/login/oauth/access_token",data:"client_id="+t+"&client_secret="+o+"&redirect_uri=http://localhost/callback&code="+requestToken}).success(function(e){i.resolve(e)}).error(function(){i.reject("Problem authenticating")}).finally(function(){setTimeout(function(){c.close()},10)}))}),c.addEventListener("exit",function(){i.reject("The sign in flow was canceled")})}else i.reject("Could not find InAppBrowser plugin")}else i.reject("Cannot authenticate via a web browser");return i.promise},facebook:function(n,t){var o=e.defer();if(window.cordova){var r=cordova.require("cordova/plugin_list").metadata;if(r.hasOwnProperty("org.apache.cordova.inappbrowser")===!0){var i=window.open("https://www.facebook.com/dialog/oauth?client_id="+n+"&redirect_uri=http://localhost/callback&response_type=token&scope="+t.join(","),"_blank","location=no,clearsessioncache=yes,clearcache=yes");i.addEventListener("loadstart",function(e){if(0===e.url.indexOf("http://localhost/callback")){for(var n=e.url.split("#")[1],t=n.split("&"),r=[],a=0;a<t.length;a++)r[t[a].split("=")[0]]=t[a].split("=")[1];void 0!==r.access_token&&null!==r.access_token?o.resolve({access_token:r.access_token,expires_in:r.expires_in}):o.reject("Problem authenticating"),setTimeout(function(){i.close()},10)}}),i.addEventListener("exit",function(){o.reject("The sign in flow was canceled")})}else o.reject("Could not find InAppBrowser plugin")}else o.reject("Cannot authenticate via a web browser");return o.promise},linkedin:function(t,o,r,i){var a=e.defer();if(window.cordova){var c=cordova.require("cordova/plugin_list").metadata;if(c.hasOwnProperty("org.apache.cordova.inappbrowser")===!0){var u=window.open("https://www.linkedin.com/uas/oauth2/authorization?client_id="+t+"&redirect_uri=http://localhost/callback&scope="+r.join(" ")+"&response_type=code&state="+i,"_blank","location=no,clearsessioncache=yes,clearcache=yes");u.addEventListener("loadstart",function(e){0===e.url.indexOf("http://localhost/callback")&&(requestToken=e.url.split("code=")[1],n.defaults.headers.post["Content-Type"]="application/x-www-form-urlencoded",n({method:"post",url:"https://www.linkedin.com/uas/oauth2/accessToken",data:"client_id="+t+"&client_secret="+o+"&redirect_uri=http://localhost/callback&grant_type=authorization_code&code="+requestToken}).success(function(e){a.resolve(e)}).error(function(){a.reject("Problem authenticating")}).finally(function(){setTimeout(function(){u.close()},10)}))}),u.addEventListener("exit",function(){a.reject("The sign in flow was canceled")})}else a.reject("Could not find InAppBrowser plugin")}else a.reject("Cannot authenticate via a web browser");return a.promise},instagram:function(n,t){var o=e.defer();if(window.cordova){var r=cordova.require("cordova/plugin_list").metadata;if(r.hasOwnProperty("org.apache.cordova.inappbrowser")===!0){var i=window.open("https://api.instagram.com/oauth/authorize/?client_id="+n+"&redirect_uri=http://localhost/callback&scope="+t.join(" ")+"&response_type=token","_blank","location=no,clearsessioncache=yes,clearcache=yes");i.addEventListener("loadstart",function(e){if(0===e.url.indexOf("http://localhost/callback")){for(var n=e.url.split("#")[1],t=n.split("&"),r=[],a=0;a<t.length;a++)r[t[a].split("=")[0]]=t[a].split("=")[1];void 0!==r.access_token&&null!==r.access_token?o.resolve({access_token:r.access_token}):o.reject("Problem authenticating"),setTimeout(function(){i.close()},10)}}),i.addEventListener("exit",function(){o.reject("The sign in flow was canceled")})}else o.reject("Could not find InAppBrowser plugin")}else o.reject("Cannot authenticate via a web browser");return o.promise},box:function(t,o,r){var i=e.defer();if(window.cordova){var a=cordova.require("cordova/plugin_list").metadata;if(a.hasOwnProperty("org.apache.cordova.inappbrowser")===!0){var c=window.open("https://app.box.com/api/oauth2/authorize/?client_id="+t+"&redirect_uri=http://localhost/callback&state="+r+"&response_type=code","_blank","location=no,clearsessioncache=yes,clearcache=yes");c.addEventListener("loadstart",function(e){0===e.url.indexOf("http://localhost/callback")&&(requestToken=e.url.split("code=")[1],n.defaults.headers.post["Content-Type"]="application/x-www-form-urlencoded",n({method:"post",url:"https://app.box.com/api/oauth2/token",data:"client_id="+t+"&client_secret="+o+"&redirect_uri=http://localhost/callback&grant_type=authorization_code&code="+requestToken}).success(function(e){i.resolve(e)}).error(function(){i.reject("Problem authenticating")}).finally(function(){setTimeout(function(){c.close()},10)}))}),c.addEventListener("exit",function(){i.reject("The sign in flow was canceled")})}else i.reject("Could not find InAppBrowser plugin")}else i.reject("Cannot authenticate via a web browser");return i.promise},reddit:function(t,o,r){var i=e.defer();if(window.cordova){var a=cordova.require("cordova/plugin_list").metadata;if(a.hasOwnProperty("org.apache.cordova.inappbrowser")===!0){var c=window.open("https://ssl.reddit.com/api/v1/authorize?client_id="+t+"&redirect_uri=http://localhost/callback&duration=permanent&state=ngcordovaoauth&scope="+r.join(",")+"&response_type=code","_blank","location=no,clearsessioncache=yes,clearcache=yes");c.addEventListener("loadstart",function(e){0===e.url.indexOf("http://localhost/callback")&&(requestToken=e.url.split("code=")[1],n.defaults.headers.post["Content-Type"]="application/x-www-form-urlencoded",n.defaults.headers.post.Authorization="Basic "+btoa(t+":"+o),n({method:"post",url:"https://ssl.reddit.com/api/v1/access_token",data:"redirect_uri=http://localhost/callback&grant_type=authorization_code&code="+requestToken}).success(function(e){i.resolve(e)}).error(function(){i.reject("Problem authenticating")}).finally(function(){setTimeout(function(){c.close()},10)}))}),c.addEventListener("exit",function(){i.reject("The sign in flow was canceled")})}else i.reject("Could not find InAppBrowser plugin")}else i.reject("Cannot authenticate via a web browser");return i.promise},twitter:function(o,r){var i=e.defer();if(window.cordova){var a=cordova.require("cordova/plugin_list").metadata;if(a.hasOwnProperty("org.apache.cordova.inappbrowser")===!0)if("undefined"!=typeof jsSHA){var c={oauth_consumer_key:o,oauth_nonce:t.createNonce(10),oauth_signature_method:"HMAC-SHA1",oauth_timestamp:Math.round((new Date).getTime()/1e3),oauth_version:"1.0"},u=t.createSignature("POST","https://api.twitter.com/oauth/request_token",c,{oauth_callback:"http://localhost/callback"},r);n({method:"post",url:"https://api.twitter.com/oauth/request_token",headers:{Authorization:u.authorization_header,"Content-Type":"application/x-www-form-urlencoded"},data:"oauth_callback="+encodeURIComponent("http://localhost/callback")}).success(function(e){for(var o=e.split("&"),a={},u=0;u<o.length;u++)a[o[u].split("=")[0]]=o[u].split("=")[1];a.hasOwnProperty("oauth_token")===!1&&i.reject("Oauth request token was not received");var s=window.open("https://api.twitter.com/oauth/authenticate?oauth_token="+a.oauth_token,"_blank","location=no,clearsessioncache=yes,clearcache=yes");s.addEventListener("loadstart",function(e){if(0===e.url.indexOf("http://localhost/callback")){for(var o=e.url.split("?")[1],a=o.split("&"),u={},l=0;l<a.length;l++)u[a[l].split("=")[0]]=a[l].split("=")[1];u.hasOwnProperty("oauth_verifier")===!1&&i.reject("Browser authentication failed to complete. No oauth_verifier was returned"),delete c.oauth_signature,c.oauth_token=u.oauth_token;var f=t.createSignature("POST","https://api.twitter.com/oauth/access_token",c,{oauth_verifier:u.oauth_verifier},r);n({method:"post",url:"https://api.twitter.com/oauth/access_token",headers:{Authorization:f.authorization_header},params:{oauth_verifier:u.oauth_verifier}}).success(function(e){for(var n=e.split("&"),t={},o=0;o<n.length;o++)t[n[o].split("=")[0]]=n[o].split("=")[1];t.hasOwnProperty("oauth_token_secret")===!1&&i.reject("Oauth access token was not received"),i.resolve(t)}).error(function(e){i.reject(e)}).finally(function(){setTimeout(function(){s.close()},10)})}}),s.addEventListener("exit",function(){i.reject("The sign in flow was canceled")})}).error(function(e){i.reject(e)})}else i.reject("Missing jsSHA JavaScript library");else i.reject("Could not find InAppBrowser plugin")}else i.reject("Cannot authenticate via a web browser");return i.promise},meetup:function(n){var t=e.defer();if(window.cordova){var o=cordova.require("cordova/plugin_list").metadata;if(o.hasOwnProperty("org.apache.cordova.inappbrowser")===!0){var r=window.open("https://secure.meetup.com/oauth2/authorize/?client_id="+n+"&redirect_uri=http://localhost/callback&response_type=token","_blank","location=no,clearsessioncache=yes,clearcache=yes");r.addEventListener("loadstart",function(e){if(0===e.url.indexOf("http://localhost/callback")){for(var n=e.url.split("#")[1],o=n.split("&"),i={},a=0;a<o.length;a++)i[o[a].split("=")[0]]=o[a].split("=")[1];void 0!==i.access_token&&null!==i.access_token?t.resolve(i):t.reject("Problem authenticating"),setTimeout(function(){r.close()},10)}}),r.addEventListener("exit",function(){t.reject("The sign in flow was canceled")})}else t.reject("Could not find InAppBrowser plugin")}else t.reject("Cannot authenticate via a web browser");return t.promise},salesforce:function(n,t){var o="http://localhost/callback",r=function(e,n,t){return e+"services/oauth2/authorize?display=touch&response_type=token&client_id="+escape(n)+"&redirect_uri="+escape(t)},i=function(e,n){return e.substr(0,n.length)===n},a=e.defer();if(window.cordova){var c=cordova.require("cordova/plugin_list").metadata;if(c.hasOwnProperty("org.apache.cordova.inappbrowser")===!0){var u=window.open(r(n,t,o),"_blank","location=no,clearsessioncache=yes,clearcache=yes");u.addEventListener("loadstart",function(e){if(i(e.url,o)){var n={},t=e.url.split("#")[1];if(t){var r=t.split("&");for(var c in r){var s=r[c].split("=");n[s[0]]=unescape(s[1])}}"undefined"==typeof n||"undefined"==typeof n.access_token?a.reject("Problem authenticating"):a.resolve(n),setTimeout(function(){u.close()},10)}}),u.addEventListener("exit",function(){a.reject("The sign in flow was canceled")})}else a.reject("Could not find InAppBrowser plugin")}else a.reject("Cannot authenticate via a web browser");return a.promise},strava:function(t,o,r){var i=e.defer();if(window.cordova){var a=cordova.require("cordova/plugin_list").metadata;if(a.hasOwnProperty("org.apache.cordova.inappbrowser")===!0){var c=window.open("https://www.strava.com/oauth/authorize?client_id="+t+"&redirect_uri=http://localhost/callback&scope="+r.join(",")+"&response_type=code&approval_prompt=force","_blank","location=no,clearsessioncache=yes,clearcache=yes");c.addEventListener("loadstart",function(e){0===e.url.indexOf("http://localhost/callback")&&(requestToken=e.url.split("code=")[1],n.defaults.headers.post["Content-Type"]="application/x-www-form-urlencoded",n({method:"post",url:"https://www.strava.com/oauth/token",data:"client_id="+t+"&client_secret="+o+"&code="+requestToken}).success(function(e){i.resolve(e)}).error(function(){i.reject("Problem authenticating")}).finally(function(){setTimeout(function(){c.close()},10)}))}),c.addEventListener("exit",function(){i.reject("The sign in flow was canceled")})}else i.reject("Could not find InAppBrowser plugin")}else i.reject("Cannot authenticate via a web browser");return i.promise},foursquare:function(n){var t=e.defer();if(window.cordova){var o=cordova.require("cordova/plugin_list").metadata;if(o.hasOwnProperty("org.apache.cordova.inappbrowser")===!0){var r=window.open("https://foursquare.com/oauth2/authenticate?client_id="+n+"&redirect_uri=http://localhost/callback&response_type=token","_blank","location=no,clearsessioncache=yes,clearcache=yes");r.addEventListener("loadstart",function(e){if(0===e.url.indexOf("http://localhost/callback")){for(var n=e.url.split("#")[1],o=n.split("&"),i=[],a=0;a<o.length;a++)i[o[a].split("=")[0]]=o[a].split("=")[1];if(void 0!==i.access_token&&null!==i.access_token){var c={access_token:i.access_token,expires_in:i.expires_in};t.resolve(c)}else t.reject("Problem authenticating");setTimeout(function(){r.close()},10)}}),r.addEventListener("exit",function(){t.reject("The sign in flow was canceled")})}else t.reject("Could not find InAppBrowser plugin")}else t.reject("Cannot authenticate via a web browser");return t.promise},magento:function(o,r,i){var a=e.defer();if(window.cordova){var c=cordova.require("cordova/plugin_list").metadata;if(c.hasOwnProperty("org.apache.cordova.inappbrowser")===!0)if("undefined"!=typeof jsSHA){var u={oauth_callback:"http://localhost/callback",oauth_consumer_key:r,oauth_nonce:t.createNonce(5),oauth_signature_method:"HMAC-SHA1",oauth_timestamp:Math.round((new Date).getTime()/1e3),oauth_version:"1.0"},s=t.createSignature("POST",o+"/oauth/initiate",u,{oauth_callback:"http://localhost/callback"},i);n.defaults.headers.post.Authorization=s.authorization_header,n.defaults.headers.post["Content-Type"]="application/x-www-form-urlencoded",n({method:"post",url:o+"/oauth/initiate",data:"oauth_callback=http://localhost/callback"}).success(function(e){for(var r=e.split("&"),c={},s=0;s<r.length;s++)c[r[s].split("=")[0]]=r[s].split("=")[1];c.hasOwnProperty("oauth_token")===!1&&a.reject("Oauth request token was not received");var l=c.oauth_token_secret,f=window.open(o+"/oauth/authorize?oauth_token="+c.oauth_token,"_blank","location=no,clearsessioncache=yes,clearcache=yes");f.addEventListener("loadstart",function(e){if(0===e.url.indexOf("http://localhost/callback")){for(var r=e.url.split("?")[1],c=r.split("&"),s={},d=0;d<c.length;d++)s[c[d].split("=")[0]]=c[d].split("=")[1];s.hasOwnProperty("oauth_verifier")===!1&&a.reject("Browser authentication failed to complete. No oauth_verifier was returned"),delete u.oauth_signature,delete u.oauth_callback,u.oauth_token=s.oauth_token,u.oauth_nonce=t.createNonce(5),u.oauth_verifier=s.oauth_verifier;var p=t.createSignature("POST",o+"/oauth/token",u,{},i,l);n.defaults.headers.post.Authorization=p.authorization_header,n.defaults.headers.post["Content-Type"]="application/x-www-form-urlencoded",n({method:"post",url:o+"/oauth/token"}).success(function(e){for(var n=e.split("&"),t={},o=0;o<n.length;o++)t[n[o].split("=")[0]]=n[o].split("=")[1];t.hasOwnProperty("oauth_token_secret")===!1&&a.reject("Oauth access token was not received"),a.resolve(t)}).error(function(e){a.reject(e)}).finally(function(){setTimeout(function(){f.close()},10)})}}),f.addEventListener("exit",function(){a.reject("The sign in flow was canceled")})}).error(function(e){a.reject(e)})}else a.reject("Missing jsSHA JavaScript library");else a.reject("Could not find InAppBrowser plugin")}else a.reject("Cannot authenticate via a web browser");return a.promise},vkontakte:function(n,t){var o=e.defer();if(window.cordova){var r=cordova.require("cordova/plugin_list").metadata;if(r.hasOwnProperty("org.apache.cordova.inappbrowser")===!0){var i=window.open("https://oauth.vk.com/authorize?client_id="+n+"&redirect_uri=http://oauth.vk.com/blank.html&response_type=token&scope="+t.join(",")+"&display=touch&response_type=token","_blank","location=no,clearsessioncache=yes,clearcache=yes");i.addEventListener("loadstart",function(e){var n=e.url.split("#");if("https://oauth.vk.com/blank.html"==n[0]||"http://oauth.vk.com/blank.html"==n[0]){for(var t=e.url.split("#")[1],r=t.split("&"),a=[],c=0;c<r.length;c++)a[r[c].split("=")[0]]=r[c].split("=")[1];void 0!==a.access_token&&null!==a.access_token?o.resolve({access_token:a.access_token,expires_in:a.expires_in,user_id:a.user_id}):o.reject("Problem authenticating"),setTimeout(function(){i.close()},10)}}),i.addEventListener("exit",function(){o.reject("The sign in flow was canceled")})}else o.reject("Could not find InAppBrowser plugin")}else o.reject("Cannot authenticate via a web browser");return o.promise},imgur:function(n){var t=e.defer();if(window.cordova){var o=cordova.require("cordova/plugin_list").metadata;if(o.hasOwnProperty("org.apache.cordova.inappbrowser")===!0){var r=window.open("https://api.imgur.com/oauth2/authorize?client_id="+n+"&response_type=token","_blank","location=no,clearsessioncache=yes,clearcache=yes");r.addEventListener("loadstart",function(e){if(0===e.url.indexOf("http://localhost/callback")){r.removeEventListener("exit",function(){}),r.close();for(var n=e.url.split("#")[1],o=n.split("&"),i=[],a=0;a<o.length;a++)i[o[a].split("=")[0]]=o[a].split("=")[1];void 0!==i.access_token&&null!==i.access_token?t.resolve({access_token:i.access_token,expires_in:i.expires_in,account_username:i.account_username}):t.reject("Problem authenticating")}}),r.addEventListener("exit",function(){t.reject("The sign in flow was canceled")})}else t.reject("Could not find InAppBrowser plugin")}else t.reject("Cannot authenticate via a web browser");return t.promise}}}]),angular.module("ngCordova.plugins.oauthUtility",[]).factory("$cordovaOauthUtility",["$q",function(){return{createSignature:function(e,n,t,o,r,i){if("undefined"!=typeof jsSHA){for(var a=angular.copy(t),c=Object.keys(o),u=0;u<c.length;u++)a[c[u]]=encodeURIComponent(o[c[u]]);var s=e+"&"+encodeURIComponent(n)+"&",l=Object.keys(a).sort();for(u=0;u<l.length;u++)s+=encodeURIComponent(u==l.length-1?l[u]+"="+a[l[u]]:l[u]+"="+a[l[u]]+"&");var f=new jsSHA(s,"TEXT"),d="";i&&(d=encodeURIComponent(i)),t.oauth_signature=encodeURIComponent(f.getHMAC(encodeURIComponent(r)+"&"+d,"TEXT","SHA-1","B64"));var p=Object.keys(t),v="OAuth ";for(u=0;u<p.length;u++)v+=u==p.length-1?p[u]+'="'+t[p[u]]+'"':p[u]+'="'+t[p[u]]+'",';return{signature_base_string:s,authorization_header:v,signature:t.oauth_signature}}return"Missing jsSHA JavaScript library"},createNonce:function(e){for(var n="",t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",o=0;e>o;o++)n+=t.charAt(Math.floor(Math.random()*t.length));return n}}}]),angular.module("ngCordova.plugins.pinDialog",[]).factory("$cordovaPinDialog",["$q","$window",function(e,n){return{prompt:function(t,o,r){var i=e.defer();return n.plugins.pinDialog.prompt(t,function(e){i.resolve(e)},o,r),i.promise}}}]),angular.module("ngCordova.plugins.prefs",[]).factory("$cordovaPreferences",["$window","$q",function(e,n){return{set:function(t,o){var r=n.defer();return e.appgiraffe.plugins.applicationPreferences.set(t,o,function(e){r.resolve(e)},function(e){r.reject(e)}),r.promise},get:function(t){var o=n.defer();return e.appgiraffe.plugins.applicationPreferences.get(t,function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise}}}]),angular.module("ngCordova.plugins.printer",[]).factory("$cordovaPrinter",["$q","$window",function(e,n){return{isAvailable:function(){var t=e.defer();return n.plugin.printer.isAvailable(function(e){t.resolve(e)}),t.promise},print:function(t,o){var r=e.defer();return n.plugin.printer.print(t,o,function(){r.resolve()}),r.promise}}}]),angular.module("ngCordova.plugins.progressIndicator",[]).factory("$cordovaProgress",["$q",function(){return{show:function(e){var n=e||"Please wait...";return ProgressIndicator.show(n)},showSimple:function(e){var n=e||!1;return ProgressIndicator.showSimple(n)},showSimpleWithLabel:function(e,n){var t=e||!1,o=n||"Loading...";return ProgressIndicator.showSimpleWithLabel(t,o)},showSimpleWithLabelDetail:function(e,n,t){var o=e||!1,r=n||"Loading...",i=t||"Please wait";return ProgressIndicator.showSimpleWithLabelDetail(o,r,i)},showDeterminate:function(e,n){var t=e||!1,o=n||5e4;return ProgressIndicator.showDeterminate(t,o)},showDeterminateWithLabel:function(e,n,t){var o=e||!1,r=n||5e4,i=t||"Loading...";return ProgressIndicator.showDeterminateWithLabel(o,r,i)},showAnnular:function(e,n){var t=e||!1,o=n||5e4;return ProgressIndicator.showAnnular(t,o)},showAnnularWithLabel:function(e,n,t){var o=e||!1,r=n||5e4,i=t||"Loading...";return ProgressIndicator.showAnnularWithLabel(o,r,i)},showBar:function(e,n){var t=e||!1,o=n||5e4;return ProgressIndicator.showBar(t,o)},showBarWithLabel:function(e,n,t){var o=e||!1,r=n||5e4,i=t||"Loading...";return ProgressIndicator.showBarWithLabel(o,r,i)},showSuccess:function(e,n){var t=e||!1,o=n||"Success";return ProgressIndicator.showSuccess(t,o)},showText:function(e,n,t){var o=e||!1,r=n||"Warning",i=t||"center";return ProgressIndicator.showText(o,r,i)},hide:function(){return ProgressIndicator.hide()}}}]),angular.module("ngCordova.plugins.push",[]).factory("$cordovaPush",["$q","$window","$rootScope","$timeout",function(e,n,t,o){return{onNotification:function(e){o(function(){t.$broadcast("$cordovaPush:notificationReceived",e)})},register:function(t){var o,r=e.defer();return void 0!==t&&void 0===t.ecb&&(o=null===document.querySelector("[ng-app]")?"document.body":"document.querySelector('[ng-app]')",t.ecb="angular.element("+o+").injector().get('$cordovaPush').onNotification"),n.plugins.pushNotification.register(function(e){r.resolve(e)},function(e){r.reject(e)},t),r.promise},unregister:function(t){var o=e.defer();return n.plugins.pushNotification.unregister(function(e){o.resolve(e)},function(e){o.reject(e)},t),o.promise},setBadgeNumber:function(t){var o=e.defer();return n.plugins.pushNotification.setApplicationIconBadgeNumber(function(e){o.resolve(e)},function(e){o.reject(e)},t),o.promise}}}]),angular.module("ngCordova.plugins.sms",[]).factory("$cordovaSms",["$q",function(e){return{send:function(n,t,o){var r=e.defer();return sms.send(n,t,o,function(e){r.resolve(e)},function(e){r.reject(e)}),r.promise}}}]),angular.module("ngCordova.plugins.socialSharing",[]).factory("$cordovaSocialSharing",["$q","$window",function(e,n){return{share:function(t,o,r,i){var a=e.defer();return o=o||null,r=r||null,i=i||null,n.plugins.socialsharing.share(t,o,r,i,function(){a.resolve(!0)},function(){a.reject(!1)}),a.promise},shareViaTwitter:function(t,o,r){var i=e.defer();return o=o||null,r=r||null,n.plugins.socialsharing.shareViaTwitter(t,o,r,function(){i.resolve(!0)},function(){i.reject(!1)}),i.promise},shareViaWhatsApp:function(t,o,r){var i=e.defer();return o=o||null,r=r||null,n.plugins.socialsharing.shareViaWhatsApp(t,o,r,function(){i.resolve(!0)},function(){i.reject(!1)}),i.promise},shareViaFacebook:function(t,o,r){var i=e.defer();return t=t||null,o=o||null,r=r||null,n.plugins.socialsharing.shareViaFacebook(t,o,r,function(){i.resolve(!0)},function(){i.reject(!1)}),i.promise},shareViaFacebookWithPasteMessageHint:function(t,o,r,i){var a=e.defer();return o=o||null,r=r||null,n.plugins.socialsharing.shareViaFacebookWithPasteMessageHint(t,o,r,i,function(){a.resolve(!0)},function(){a.reject(!1)}),a.promise},shareViaSMS:function(t,o){var r=e.defer();return n.plugins.socialsharing.shareViaSMS(t,o,function(){r.resolve(!0)},function(){r.reject(!1)}),r.promise},shareViaEmail:function(t,o,r,i,a,c){var u=e.defer();return r=r||null,i=i||null,a=a||null,c=c||null,n.plugins.socialsharing.shareViaEmail(t,o,r,i,a,c,function(){u.resolve(!0)},function(){u.reject(!1)}),u.promise},shareVia:function(t,o,r,i,a){var c=e.defer();return o=o||null,r=r||null,i=i||null,a=a||null,n.plugins.socialsharing.shareVia(t,o,r,i,a,function(){c.resolve(!0)},function(){c.reject(!1)}),c.promise},canShareViaEmail:function(){var t=e.defer();return n.plugins.socialsharing.canShareViaEmail(function(){t.resolve(!0)},function(){t.reject(!1)}),t.promise},canShareVia:function(t,o,r,i,a){var c=e.defer();return n.plugins.socialsharing.canShareVia(t,o,r,i,a,function(e){c.resolve(e)},function(e){c.reject(e)}),c.promise},available:function(){var n=e.defer();window.plugins.socialsharing.available(function(e){e?n.resolve():n.reject()})}}}]),angular.module("ngCordova.plugins.spinnerDialog",[]).factory("$cordovaSpinnerDialog",["$window",function(e){return{show:function(n,t,o){return o=o||!1,e.plugins.spinnerDialog.show(n,t,o)},hide:function(){return e.plugins.spinnerDialog.hide()}}}]),angular.module("ngCordova.plugins.splashscreen",[]).factory("$cordovaSplashscreen",[function(){return{hide:function(){return navigator.splashscreen.hide()},show:function(){return navigator.splashscreen.show()}}}]),angular.module("ngCordova.plugins.sqlite",[]).factory("$cordovaSQLite",["$q","$window",function(e,n){return{openDB:function(e,t){return"undefined"==typeof t&&(t=0),n.sqlitePlugin.openDatabase({name:e,bgType:t})},execute:function(n,t,o){var r=e.defer();return n.transaction(function(e){e.executeSql(t,o,function(e,n){r.resolve(n)},function(e,n){r.reject(n)})}),r.promise},insertCollection:function(n,t,o){var r=e.defer(),i=o.slice(0);return n.transaction(function(e){!function n(){var o=i.splice(0,1)[0];try{e.executeSql(t,o,function(e,t){0===i.length?r.resolve(t):n()},function(e,n){r.reject(n)})}catch(a){r.reject(a)}}()}),r.promise},nestedExecute:function(n,t,o,r,i){var a=e.defer();return n.transaction(function(e){e.executeSql(t,r,function(e,n){a.resolve(n),e.executeSql(o,i,function(e,n){a.resolve(n)})})},function(e,n){a.reject(n)}),a.promise},deleteDB:function(t){var o=e.defer();return n.sqlitePlugin.deleteDatabase(t,function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise}}}]),angular.module("ngCordova.plugins.statusbar",[]).factory("$cordovaStatusbar",[function(){return{overlaysWebView:function(e){return StatusBar.overlaysWebView(!!e)},STYLES:{DEFAULT:0,LIGHT_CONTENT:1,BLACK_TRANSLUCENT:2,BLACK_OPAQUE:3},style:function(e){switch(e){case 0:return StatusBar.styleDefault();case 1:return StatusBar.styleLightContent();case 2:return StatusBar.styleBlackTranslucent();case 3:return StatusBar.styleBlackOpaque();default:return StatusBar.styleDefault()}},styleColor:function(e){return StatusBar.backgroundColorByName(e)},styleHex:function(e){return StatusBar.backgroundColorByHexString(e)},hide:function(){return StatusBar.hide()},show:function(){return StatusBar.show()},isVisible:function(){return StatusBar.isVisible}}}]),angular.module("ngCordova.plugins.toast",[]).factory("$cordovaToast",["$q","$window",function(e,n){return{showShortTop:function(t){var o=e.defer();return n.plugins.toast.showShortTop(t,function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise},showShortCenter:function(t){var o=e.defer();return n.plugins.toast.showShortCenter(t,function(e){o.resolve(e)
-},function(e){o.reject(e)}),o.promise},showShortBottom:function(t){var o=e.defer();return n.plugins.toast.showShortBottom(t,function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise},showLongTop:function(t){var o=e.defer();return n.plugins.toast.showLongTop(t,function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise},showLongCenter:function(t){var o=e.defer();return n.plugins.toast.showLongCenter(t,function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise},showLongBottom:function(t){var o=e.defer();return n.plugins.toast.showLongBottom(t,function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise},show:function(t,o,r){var i=e.defer();return n.plugins.toast.show(t,o,r,function(e){i.resolve(e)},function(e){i.reject(e)}),i.promise}}}]),angular.module("ngCordova.plugins.touchid",[]).factory("$cordovaTouchID",["$q",function(e){return{checkSupport:function(){var n=e.defer();return window.cordova?touchid.checkSupport(function(e){n.resolve(e)},function(e){n.reject(e)}):n.reject("Not supported without cordova.js"),n.promise},authenticate:function(n){var t=e.defer();return window.cordova?touchid.authenticate(function(e){t.resolve(e)},function(e){t.reject(e)},n):t.reject("Not supported without cordova.js"),t.promise}}}]),angular.module("ngCordova.plugins.vibration",[]).factory("$cordovaVibration",[function(){return{vibrate:function(e){return navigator.notification.vibrate(e)},vibrateWithPattern:function(e,n){return navigator.notification.vibrateWithPattern(e,n)},cancelVibration:function(){return navigator.notification.cancelVibration()}}}]),angular.module("ngCordova.plugins.videoCapturePlus",[]).provider("$cordovaVideoCapturePlus",[function(){var e={};this.setLimit=function(n){e.limit=n},this.setMaxDuration=function(n){e.duration=n},this.setHighQuality=function(n){e.highquality=n},this.useFrontCamera=function(n){e.frontcamera=n},this.setPortraitOverlay=function(n){e.portraitOverlay=n},this.setLandscapeOverlay=function(n){e.landscapeOverlay=n},this.setOverlayText=function(n){e.overlayText=n},this.$get=["$q","$window",function(n,t){return{captureVideo:function(o){var r=n.defer();return t.plugins.videocaptureplus?(t.plugins.videocaptureplus.captureVideo(r.resolve,r.reject,angular.extend({},e,o)),r.promise):(r.resolve(null),r.promise)}}}]}]),angular.module("ngCordova.plugins.zip",[]).factory("$cordovaZip",["$q","$window",function(e,n){return{unzip:function(t,o){var r=e.defer();return n.zip.unzip(t,o,function(e){0===e?r.resolve():r.reject()},function(e){r.notify(e)}),r.promise}}}])}();
+!function(){angular.module("ngCordova",["ngCordova.plugins"]),angular.module("ngCordova.plugins.actionSheet",[]).factory("$cordovaActionSheet",["$q","$window",function(e,n){return{show:function(t){var r=e.defer();return n.plugins.actionsheet.show(t,function(e){r.resolve(e)}),r.promise},hide:function(){return n.plugins.actionsheet.hide()}}}]),angular.module("ngCordova.plugins.adMob",[]).factory("$cordovaAdMob",["$q","$window",function(e,n){return{createBannerView:function(t){var r=e.defer();return n.plugins.AdMob.createBannerView(t,function(){r.resolve()},function(){r.reject()}),r.promise},createInterstitialView:function(t){var r=e.defer();return n.plugins.AdMob.createInterstitialView(t,function(){r.resolve()},function(){r.reject()}),r.promise},requestAd:function(t){var r=e.defer();return n.plugins.AdMob.requestAd(t,function(){r.resolve()},function(){r.reject()}),r.promise},showAd:function(t){var r=e.defer();return n.plugins.AdMob.showAd(t,function(){r.resolve()},function(){r.reject()}),r.promise},requestInterstitialAd:function(t){var r=e.defer();return n.plugins.AdMob.requestInterstitialAd(t,function(){r.resolve()},function(){r.reject()}),r.promise}}}]),angular.module("ngCordova.plugins.appAvailability",[]).factory("$cordovaAppAvailability",["$q",function(e){return{check:function(n){var t=e.defer();return appAvailability.check(n,function(e){t.resolve(e)},function(e){t.reject(e)}),t.promise}}}]),angular.module("ngCordova.plugins.appRate",[]).provider("$cordovaAppRate",[function(){this.setPreferences=function(e){e&&angular.isObject(e)&&(AppRate.preferences.useLanguage=e.language||null,AppRate.preferences.displayAppName=e.appName||"",AppRate.preferences.promptAgainForEachNewVersion=e.promptForNewVersion||!0,AppRate.preferences.openStoreInApp=e.openStoreInApp||!1,AppRate.preferences.usesUntilPrompt=e.usesUntilPrompt||3,AppRate.preferences.useCustomRateDialog=e.useCustomRateDialog||!1,AppRate.preferences.storeAppURL.ios=e.iosURL||null,AppRate.preferences.storeAppURL.android=e.androidURL||null,AppRate.preferences.storeAppURL.blackberry=e.blackberryURL||null,AppRate.preferences.storeAppURL.windows8=e.windowsURL||null)},this.setCustomLocale=function(e){var n={title:"Rate %@",message:"If you enjoy using %@, would you mind taking a moment to rate it? It won’t take more than a minute. Thanks for your support!",cancelButtonLabel:"No, Thanks",laterButtonLabel:"Remind Me Later",rateButtonLabel:"Rate It Now"};n=angular.extend(n,e),AppRate.preferences.customLocale=n},this.$get=["$q",function(e){return{promptForRating:function(n){var t=e.defer(),r=AppRate.promptForRating(n);return t.resolve(r),t.promise},navigateToAppStore:function(){var n=e.defer(),t=AppRate.navigateToAppStore();return n.resolve(t),n.promise},onButtonClicked:function(e){AppRate.onButtonClicked=function(n){e.call(this,n)}},onRateDialogShow:function(e){AppRate.onRateDialogShow=e()}}}]}]),angular.module("ngCordova.plugins.appVersion",[]).factory("$cordovaAppVersion",["$q",function(e){return{getVersionNumber:function(){var n=e.defer();return cordova.getAppVersion.getVersionNumber(function(e){n.resolve(e)}),n.promise},getVersionCode:function(){var n=e.defer();return cordova.getAppVersion.getVersionCode(function(e){n.resolve(e)}),n.promise}}}]),angular.module("ngCordova.plugins.backgroundGeolocation",[]).factory("$cordovaBackgroundGeolocation",["$q","$window",function(e,n){return{init:function(){n.navigator.geolocation.getCurrentPosition(function(e){return e})},configure:function(t){this.init();var r=e.defer();return n.plugins.backgroundGeoLocation.configure(function(e){r.notify(e),n.plugins.backgroundGeoLocation.finish()},function(e){r.reject(e)},t),this.start(),r.promise},start:function(){var t=e.defer();return n.plugins.backgroundGeoLocation.start(function(e){t.resolve(e)},function(e){t.reject(e)}),t.promise},stop:function(){var t=e.defer();return n.plugins.backgroundGeoLocation.stop(function(e){t.resolve(e)},function(e){t.reject(e)}),t.promise}}}]),angular.module("ngCordova.plugins.badge",[]).factory("$cordovaBadge",["$q",function(e){return{hasPermission:function(){var n=e.defer();return cordova.plugins.notification.badge.hasPermission(function(e){e?n.resolve(!0):n.reject("You do not have permission")}),n.promise},promptForPermission:function(){return cordova.plugins.notification.badge.promptForPermission()},set:function(n,t,r){var o=e.defer();return cordova.plugins.notification.badge.hasPermission(function(e){e?o.resolve(cordova.plugins.notification.badge.set(n,t,r)):o.reject("You do not have permission to set Badge")}),o.promise},get:function(){var n=e.defer();return cordova.plugins.notification.badge.hasPermission(function(e){e?cordova.plugins.notification.badge.get(function(e){n.resolve(e)}):n.reject("You do not have permission to get Badge")}),n.promise},clear:function(n,t){var r=e.defer();return cordova.plugins.notification.badge.hasPermission(function(e){e?r.resolve(cordova.plugins.notification.badge.clear(n,t)):r.reject("You do not have permission to clear Badge")}),r.promise},increase:function(n,t,r){var o=e.defer();return this.hasPermission().then(function(){o.resolve(cordova.plugins.notification.badge.increase(n,t,r))},function(){o.reject("You do not have permission to increase Badge")}),o.promise},decrease:function(n,t,r){var o=e.defer();return this.hasPermission().then(function(){o.resolve(cordova.plugins.notification.badge.decrease(n,t,r))},function(){o.reject("You do not have permission to decrease Badge")}),o.promise},configure:function(e){return cordova.plugins.notification.badge.configure(e)}}}]),angular.module("ngCordova.plugins.barcodeScanner",[]).factory("$cordovaBarcodeScanner",["$q",function(e){return{scan:function(n){var t=e.defer();return cordova.plugins.barcodeScanner.scan(function(e){t.resolve(e)},function(e){t.reject(e)},n),t.promise},encode:function(n,t){var r=e.defer();return n=n||"TEXT_TYPE",cordova.plugins.barcodeScanner.encode(n,t,function(e){r.resolve(e)},function(e){r.reject(e)}),r.promise}}}]),angular.module("ngCordova.plugins.batteryStatus",[]).factory("$cordovaBatteryStatus",["$rootScope","$window","$timeout",function(e,n,t){var r=function(n){t(function(){e.$broadcast("$cordovaBatteryStatus:status",n)})},o=function(n){t(function(){e.$broadcast("$cordovaBatteryStatus:critical",n)})},i=function(n){t(function(){e.$broadcast("$cordovaBatteryStatus:low",n)})};return document.addEventListener("deviceready",function(){navigator.battery&&(n.addEventListener("batterystatus",r,!1),n.addEventListener("batterycritical",o,!1),n.addEventListener("batterylow",i,!1))},!1),!0}]).run(["$cordovaBatteryStatus",function(e){}]),angular.module("ngCordova.plugins.ble",[]).factory("$cordovaBLE",["$q","$timeout",function(e,n){return{scan:function(t,r){var o=e.defer();return ble.startScan(t,function(e){o.notify(e)},function(e){o.reject(e)}),n(function(){ble.stopScan(function(){o.resolve()},function(e){o.reject(e)})},1e3*r),o.promise},connect:function(n){var t=e.defer();return ble.connect(n,function(e){t.resolve(e)},function(e){t.reject(e)}),t.promise},disconnect:function(n){var t=e.defer();return ble.disconnect(n,function(e){t.resolve(e)},function(e){t.reject(e)}),t.promise},read:function(n,t,r){var o=e.defer();return ble.read(n,t,r,function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise},write:function(n,t,r,o){var i=e.defer();return ble.write(n,t,r,o,function(e){i.resolve(e)},function(e){i.reject(e)}),i.promise},writeCommand:function(n,t,r,o){var i=e.defer();return ble.writeCommand(n,t,r,o,function(e){i.resolve(e)},function(e){i.reject(e)}),i.promise},startNotification:function(n,t,r){var o=e.defer();return ble.startNotification(n,t,r,function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise},stopNotification:function(n,t,r){var o=e.defer();return ble.stopNotification(n,t,r,function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise},isConnected:function(n){var t=e.defer();return ble.isConnected(n,function(e){t.resolve(e)},function(e){t.reject(e)}),t.promise},isEnabled:function(){var n=e.defer();return ble.isEnabled(function(e){n.resolve(e)},function(e){n.reject(e)}),n.promise}}}]),angular.module("ngCordova.plugins.bluetoothSerial",[]).factory("$cordovaBluetoothSerial",["$q","$window",function(e,n){return{connect:function(t){var r=e.defer(),o=e.defer(),i=!1;return n.bluetoothSerial.connect(t,function(){i=!0,r.resolve(o)},function(e){i===!1&&o.reject(e),r.reject(e)}),r.promise},connectInsecure:function(t){var r=e.defer();return n.bluetoothSerial.connectInsecure(t,function(){r.resolve()},function(e){r.reject(e)}),r.promise},disconnect:function(){var t=e.defer();return n.bluetoothSerial.disconnect(function(){t.resolve()},function(e){t.reject(e)}),t.promise},list:function(){var t=e.defer();return n.bluetoothSerial.list(function(e){t.resolve(e)},function(e){t.reject(e)}),t.promise},discoverUnpaired:function(){var t=e.defer();return n.bluetoothSerial.discoverUnpaired(function(e){t.resolve(e)},function(e){t.reject(e)}),t.promise},setDeviceDiscoveredListener:function(){var t=e.defer();return n.bluetoothSerial.setDeviceDiscoveredListener(function(e){t.notify(e)}),t.promise},clearDeviceDiscoveredListener:function(){n.bluetoothSerial.clearDeviceDiscoveredListener()},showBluetoothSettings:function(){var t=e.defer();return n.bluetoothSerial.showBluetoothSettings(function(){t.resolve()},function(e){t.reject(e)}),t.promise},isEnabled:function(){var t=e.defer();return n.bluetoothSerial.isEnabled(function(){t.resolve()},function(){t.reject()}),t.promise},enable:function(){var t=e.defer();return n.bluetoothSerial.enable(function(){t.resolve()},function(){t.reject()}),t.promise},isConnected:function(){var t=e.defer();return n.bluetoothSerial.isConnected(function(){t.resolve()},function(){t.reject()}),t.promise},available:function(){var t=e.defer();return n.bluetoothSerial.available(function(e){t.resolve(e)},function(e){t.reject(e)}),t.promise},read:function(){var t=e.defer();return n.bluetoothSerial.read(function(e){t.resolve(e)},function(e){t.reject(e)}),t.promise},readUntil:function(t){var r=e.defer();return n.bluetoothSerial.readUntil(t,function(e){r.resolve(e)},function(e){r.reject(e)}),r.promise},write:function(t){var r=e.defer();return n.bluetoothSerial.write(t,function(){r.resolve()},function(e){r.reject(e)}),r.promise},subscribe:function(t){var r=e.defer();return n.bluetoothSerial.subscribe(t,function(e){r.notify(e)},function(e){r.reject(e)}),r.promise},subscribeRawData:function(){var t=e.defer();return n.bluetoothSerial.subscribeRawData(function(e){t.notify(e)},function(e){t.reject(e)}),t.promise},unsubscribe:function(){var t=e.defer();return n.bluetoothSerial.unsubscribe(function(){t.resolve()},function(e){t.reject(e)}),t.promise},unsubscribeRawData:function(){var t=e.defer();return n.bluetoothSerial.unsubscribeRawData(function(){t.resolve()},function(e){t.reject(e)}),t.promise},clear:function(){var t=e.defer();return n.bluetoothSerial.clear(function(){t.resolve()},function(e){t.reject(e)}),t.promise},readRSSI:function(){var t=e.defer();return n.bluetoothSerial.readRSSI(function(e){t.resolve(e)},function(e){t.reject(e)}),t.promise}}}]),angular.module("ngCordova.plugins.brightness",[]).factory("$cordovaBrightness",["$q","$window",function(e,n){return{get:function(){var t=e.defer();return n.cordova?n.cordova.plugins.brightness.getBrightness(function(e){t.resolve(e)},function(e){t.reject(e)}):t.reject("Not supported without cordova.js"),t.promise},set:function(t){var r=e.defer();return n.cordova?n.cordova.plugins.brightness.setBrightness(t,function(e){r.resolve(e)},function(e){r.reject(e)}):r.reject("Not supported without cordova.js"),r.promise},setKeepScreenOn:function(t){var r=e.defer();return n.cordova?n.cordova.plugins.brightness.setKeepScreenOn(t,function(e){r.resolve(e)},function(e){r.reject(e)}):r.reject("Not supported without cordova.js"),r.promise}}}]),angular.module("ngCordova.plugins.calendar",[]).factory("$cordovaCalendar",["$q","$window",function(e,n){return{createCalendar:function(t){var r=e.defer(),o=n.plugins.calendar.getCreateCalendarOptions();return"string"==typeof t?o.calendarName=t:o=angular.extend(o,t),n.plugins.calendar.createCalendar(o,function(e){r.resolve(e)},function(e){r.reject(e)}),r.promise},deleteCalendar:function(t){var r=e.defer();return n.plugins.calendar.deleteCalendar(t,function(e){r.resolve(e)},function(e){r.reject(e)}),r.promise},createEvent:function(t){var r=e.defer(),o={title:null,location:null,notes:null,startDate:null,endDate:null};return o=angular.extend(o,t),n.plugins.calendar.createEvent(o.title,o.location,o.notes,new Date(o.startDate),new Date(o.endDate),function(e){r.resolve(e)},function(e){r.reject(e)}),r.promise},createEventWithOptions:function(t){var r=e.defer(),o=[],i=window.plugins.calendar.getCalendarOptions(),a={title:null,location:null,notes:null,startDate:null,endDate:null};o=Object.keys(a);for(var c in t)-1===o.indexOf(c)?i[c]=t[c]:a[c]=t[c];return n.plugins.calendar.createEventWithOptions(a.title,a.location,a.notes,new Date(a.startDate),new Date(a.endDate),i,function(e){r.resolve(e)},function(e){r.reject(e)}),r.promise},createEventInteractively:function(t){var r=e.defer(),o={title:null,location:null,notes:null,startDate:null,endDate:null};return o=angular.extend(o,t),n.plugins.calendar.createEventInteractively(o.title,o.location,o.notes,new Date(o.startDate),new Date(o.endDate),function(e){r.resolve(e)},function(e){r.reject(e)}),r.promise},createEventInNamedCalendar:function(t){var r=e.defer(),o={title:null,location:null,notes:null,startDate:null,endDate:null,calendarName:null};return o=angular.extend(o,t),n.plugins.calendar.createEventInNamedCalendar(o.title,o.location,o.notes,new Date(o.startDate),new Date(o.endDate),o.calendarName,function(e){r.resolve(e)},function(e){r.reject(e)}),r.promise},findEvent:function(t){var r=e.defer(),o={title:null,location:null,notes:null,startDate:null,endDate:null};return o=angular.extend(o,t),n.plugins.calendar.findEvent(o.title,o.location,o.notes,new Date(o.startDate),new Date(o.endDate),function(e){r.resolve(e)},function(e){r.reject(e)}),r.promise},listEventsInRange:function(t,r){var o=e.defer();return n.plugins.calendar.listEventsInRange(t,r,function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise},listCalendars:function(){var t=e.defer();return n.plugins.calendar.listCalendars(function(e){t.resolve(e)},function(e){t.reject(e)}),t.promise},findAllEventsInNamedCalendar:function(t){var r=e.defer();return n.plugins.calendar.findAllEventsInNamedCalendar(t,function(e){r.resolve(e)},function(e){r.reject(e)}),r.promise},modifyEvent:function(t){var r=e.defer(),o={title:null,location:null,notes:null,startDate:null,endDate:null,newTitle:null,newLocation:null,newNotes:null,newStartDate:null,newEndDate:null};return o=angular.extend(o,t),n.plugins.calendar.modifyEvent(o.title,o.location,o.notes,new Date(o.startDate),new Date(o.endDate),o.newTitle,o.newLocation,o.newNotes,new Date(o.newStartDate),new Date(o.newEndDate),function(e){r.resolve(e)},function(e){r.reject(e)}),r.promise},deleteEvent:function(t){var r=e.defer(),o={newTitle:null,location:null,notes:null,startDate:null,endDate:null};return o=angular.extend(o,t),n.plugins.calendar.deleteEvent(o.newTitle,o.location,o.notes,new Date(o.startDate),new Date(o.endDate),function(e){r.resolve(e)},function(e){r.reject(e)}),r.promise}}}]),angular.module("ngCordova.plugins.camera",[]).factory("$cordovaCamera",["$q",function(e){return{getPicture:function(n){var t=e.defer();return navigator.camera?(navigator.camera.getPicture(function(e){t.resolve(e)},function(e){t.reject(e)},n),t.promise):(t.resolve(null),t.promise)},cleanup:function(){var n=e.defer();return navigator.camera.cleanup(function(){n.resolve()},function(e){n.reject(e)}),n.promise}}}]),angular.module("ngCordova.plugins.capture",[]).factory("$cordovaCapture",["$q",function(e){return{captureAudio:function(n){var t=e.defer();return navigator.device.capture?(navigator.device.capture.captureAudio(function(e){t.resolve(e)},function(e){t.reject(e)},n),t.promise):(t.resolve(null),t.promise)},captureImage:function(n){var t=e.defer();return navigator.device.capture?(navigator.device.capture.captureImage(function(e){t.resolve(e)},function(e){t.reject(e)},n),t.promise):(t.resolve(null),t.promise)},captureVideo:function(n){var t=e.defer();return navigator.device.capture?(navigator.device.capture.captureVideo(function(e){t.resolve(e)},function(e){t.reject(e)},n),t.promise):(t.resolve(null),t.promise)}}}]),angular.module("ngCordova.plugins.cardIO",[]).provider("$cordovaNgCardIO",[function(){var e=["card_type","redacted_card_number","card_number","expiry_month","expiry_year","short_expiry_year","cvv","zip"],n={expiry:!0,cvv:!0,zip:!1,suppressManual:!1,suppressConfirm:!1,hideLogo:!0};this.setCardIOResponseFields=function(n){n&&angular.isArray(n)&&(e=n)},this.setScanerConfig=function(e){e&&angular.isObject(e)&&(n.expiry=e.expiry||!0,n.cvv=e.cvv||!0,n.zip=e.zip||!1,n.suppressManual=e.suppressManual||!1,n.suppressConfirm=e.suppressConfirm||!1,n.hideLogo=e.hideLogo||!0)},this.$get=["$q",function(t){return{scanCard:function(){var r=t.defer();return CardIO.scan(n,function(n){if(null==n)r.reject(null);else{for(var t={},o=0,i=e.length;i>o;o++){var a=e[o];"short_expiry_year"==a?t[a]=String(n.expiry_year).substr(2,2)||"":t[a]=n[a]||""}r.resolve(t)}},function(){r.reject(null)}),r.promise}}}]}]),angular.module("ngCordova.plugins.clipboard",[]).factory("$cordovaClipboard",["$q","$window",function(e,n){return{copy:function(t){var r=e.defer();return n.cordova.plugins.clipboard.copy(t,function(){r.resolve()},function(){r.reject()}),r.promise},paste:function(){var t=e.defer();return n.cordova.plugins.clipboard.paste(function(e){t.resolve(e)},function(){t.reject()}),t.promise}}}]),angular.module("ngCordova.plugins.contacts",[]).factory("$cordovaContacts",["$q",function(e){return{save:function(n){var t=e.defer(),r=navigator.contacts.create(n);return r.save(function(e){t.resolve(e)},function(e){t.reject(e)}),t.promise},remove:function(n){var t=e.defer(),r=navigator.contacts.create(n);return r.remove(function(e){t.resolve(e)},function(e){t.reject(e)}),t.promise},clone:function(e){var n=navigator.contacts.create(e);return n.clone(e)},find:function(n){var t=e.defer(),r=n.fields||["id","displayName"];return delete n.fields,0===Object.keys(n).length?navigator.contacts.find(r,function(e){t.resolve(e)},function(e){t.reject(e)}):navigator.contacts.find(r,function(e){t.resolve(e)},function(e){t.reject(e)},n),t.promise},pickContact:function(){var n=e.defer();return navigator.contacts.pickContact(function(e){n.resolve(e)},function(e){n.reject(e)}),n.promise}}}]),angular.module("ngCordova.plugins.datePicker",[]).factory("$cordovaDatePicker",["$window","$q",function(e,n){return{show:function(t){var r=n.defer();return t=t||{date:new Date,mode:"date"},e.datePicker.show(t,function(e){r.resolve(e)}),r.promise}}}]),angular.module("ngCordova.plugins.device",[]).factory("$cordovaDevice",[function(){return{getDevice:function(){return device},getCordova:function(){return device.cordova},getModel:function(){return device.model},getName:function(){return device.name},getPlatform:function(){return device.platform},getUUID:function(){return device.uuid},getVersion:function(){return device.version},getManufacturer:function(){return device.manufacturer}}}]),angular.module("ngCordova.plugins.deviceMotion",[]).factory("$cordovaDeviceMotion",["$q",function(e){return{getCurrentAcceleration:function(){var n=e.defer();return(angular.isUndefined(navigato.accelerometer)||!angular.isFunction(navigator.accelerometer.getCurrentAcceleration))&&n.reject("Device do not support watchAcceleration"),navigator.accelerometer.getCurrentAcceleration(function(e){n.resolve(e)},function(e){n.reject(e)}),n.promise},watchAcceleration:function(n){var t=e.defer();(angular.isUndefined(navigato.accelerometer)||!angular.isFunction(navigator.accelerometer.watchAcceleration))&&t.reject("Device do not support watchAcceleration");var r=navigator.accelerometer.watchAcceleration(function(e){t.notify(e)},function(e){t.reject(e)},n);return t.promise.cancel=function(){navigator.accelerometer.clearWatch(r)},t.promise.clearWatch=function(e){navigator.accelerometer.clearWatch(e||r)},t.promise.watchID=r,t.promise},clearWatch:function(e){return navigator.accelerometer.clearWatch(e)}}}]),angular.module("ngCordova.plugins.deviceOrientation",[]).factory("$cordovaDeviceOrientation",["$q",function(e){var n={frequency:3e3};return{getCurrentHeading:function(){var n=e.defer();return navigator.compass?(navigator.compass.getCurrentHeading(function(e){n.resolve(e)},function(e){n.reject(e)}),n.promise):(n.reject("No compass on Device"),n.promise)},watchHeading:function(t){var r=e.defer();if(!navigator.compass)return r.reject("No compass on Device"),r.promise;var o=angular.extend(n,t),i=navigator.compass.watchHeading(function(e){r.notify(e)},function(e){r.reject(e)},o);return r.promise.cancel=function(){navigator.compass.clearWatch(i)},r.promise.clearWatch=function(e){navigator.compass.clearWatch(e||i)},r.promise.watchID=i,r.promise},clearWatch:function(e){return navigator.compass.clearWatch(e)}}}]),angular.module("ngCordova.plugins.dialogs",[]).factory("$cordovaDialogs",["$q","$window",function(e,n){return{alert:function(t,r,o){var i=e.defer();return n.navigator.notification?navigator.notification.alert(t,function(){i.resolve()},r,o):(n.alert(t),i.resolve()),i.promise},confirm:function(t,r,o){var i=e.defer();return n.navigator.notification?navigator.notification.confirm(t,function(e){i.resolve(e)},r,o):n.confirm(t)?i.resolve(1):i.resolve(2),i.promise},prompt:function(t,r,o,i){var a=e.defer();if(n.navigator.notification)navigator.notification.prompt(t,function(e){a.resolve(e)},r,o,i);else{var c=n.prompt(t,i);null!==c?a.resolve({input1:c,buttonIndex:1}):a.resolve({input1:c,buttonIndex:2})}return a.promise},beep:function(e){return navigator.notification.beep(e)}}}]),angular.module("ngCordova.plugins.emailComposer",[]).factory("$cordovaEmailComposer",["$q",function(e){return{isAvailable:function(){var n=e.defer();return cordova.plugins.email.isAvailable(function(e){e?n.resolve():n.reject()}),n.promise},open:function(n){var t=e.defer();return cordova.plugins.email.open(n,function(){t.reject()}),t.promise},addAlias:function(e,n){cordova.plugins.email.addAlias(e,n)}}}]),angular.module("ngCordova.plugins.facebook",[]).provider("$cordovaFacebook",[function(){this.browserInit=function(e,n){this.appID=e,this.appVersion=n||"v2.0",facebookConnectPlugin.browserInit(this.appID,this.appVersion)},this.$get=["$q",function(e){return{login:function(n){var t=e.defer();return facebookConnectPlugin.login(n,function(e){t.resolve(e)},function(e){t.reject(e)}),t.promise},showDialog:function(n){var t=e.defer();return facebookConnectPlugin.showDialog(n,function(e){t.resolve(e)},function(e){t.reject(e)}),t.promise},api:function(n,t){var r=e.defer();return facebookConnectPlugin.api(n,t,function(e){r.resolve(e)},function(e){r.reject(e)}),r.promise},getAccessToken:function(){var n=e.defer();return facebookConnectPlugin.getAccessToken(function(e){n.resolve(e)},function(e){n.reject(e)}),n.promise},getLoginStatus:function(){var n=e.defer();return facebookConnectPlugin.getLoginStatus(function(e){n.resolve(e)},function(e){n.reject(e)}),n.promise},logout:function(){var n=e.defer();return facebookConnectPlugin.logout(function(e){n.resolve(e)},function(e){n.reject(e)}),n.promise}}}]}]),angular.module("ngCordova.plugins.facebookAds",[]).factory("$cordovaFacebookAds",["$q","$window",function(e,n){return{setOptions:function(t){var r=e.defer();return n.FacebookAds.setOptions(t,function(){r.resolve()},function(){r.reject()}),r.promise},createBanner:function(t){var r=e.defer();return n.FacebookAds.createBanner(t,function(){r.resolve()},function(){r.reject()}),r.promise},removeBanner:function(){var t=e.defer();return n.FacebookAds.removeBanner(function(){t.resolve()},function(){t.reject()}),t.promise},showBanner:function(t){var r=e.defer();return n.FacebookAds.showBanner(t,function(){r.resolve()},function(){r.reject()}),r.promise},showBannerAtXY:function(t,r){var o=e.defer();return n.FacebookAds.showBannerAtXY(t,r,function(){o.resolve()},function(){o.reject()}),o.promise},hideBanner:function(){var t=e.defer();return n.FacebookAds.hideBanner(function(){t.resolve()},function(){t.reject()}),t.promise},prepareInterstitial:function(t){var r=e.defer();return n.FacebookAds.prepareInterstitial(t,function(){r.resolve()},function(){r.reject()}),r.promise},showInterstitial:function(){var t=e.defer();return n.FacebookAds.showInterstitial(function(){t.resolve()},function(){t.reject()}),t.promise}}}]),angular.module("ngCordova.plugins.file",[]).constant("$cordovaFileError",{1:"NOT_FOUND_ERR",2:"SECURITY_ERR",3:"ABORT_ERR",4:"NOT_READABLE_ERR",5:"ENCODING_ERR",6:"NO_MODIFICATION_ALLOWED_ERR",7:"INVALID_STATE_ERR",8:"SYNTAX_ERR",9:"INVALID_MODIFICATION_ERR",10:"QUOTA_EXCEEDED_ERR",11:"TYPE_MISMATCH_ERR",12:"PATH_EXISTS_ERR"}).provider("$cordovaFile",[function(){this.$get=["$q","$window","$cordovaFileError",function(e,n,t){return{getFreeDiskSpace:function(){var n=e.defer();return cordova.exec(function(e){n.resolve(e)},function(e){n.reject(e)},"File","getFreeDiskSpace",[]),n.promise},checkDir:function(r,o){var i=e.defer();/^\//.test(o)&&i.reject("directory cannot start with /");try{var a=r+o;n.resolveLocalFileSystemURL(a,function(e){e.isDirectory===!0?i.resolve(e):i.reject({code:13,message:"input is not a directory"})},function(e){e.message=t[e.code],i.reject(e)})}catch(c){c.message=t[c.code],i.reject(c)}return i.promise},checkFile:function(r,o){var i=e.defer();/^\//.test(o)&&i.reject("directory cannot start with /");try{var a=r+o;n.resolveLocalFileSystemURL(a,function(e){e.isFile===!0?i.resolve(e):i.reject({code:13,message:"input is not a file"})},function(e){e.message=t[e.code],i.reject(e)})}catch(c){c.message=t[c.code],i.reject(c)}return i.promise},createDir:function(r,o,i){var a=e.defer();/^\//.test(o)&&a.reject("directory cannot start with /"),i=i?!1:!0;var c={create:!0,exclusive:i};try{n.resolveLocalFileSystemURL(r,function(e){e.getDirectory(o,c,function(e){a.resolve(e)},function(e){e.message=t[e.code],a.reject(e)})},function(e){e.message=t[e.code],a.reject(e)})}catch(s){s.message=t[s.code],a.reject(s)}return a.promise},createFile:function(r,o,i){var a=e.defer();/^\//.test(o)&&a.reject("file-name cannot start with /"),i=i?!1:!0;var c={create:!0,exclusive:i};try{n.resolveLocalFileSystemURL(r,function(e){e.getFile(o,c,function(e){a.resolve(e)},function(e){e.message=t[e.code],a.reject(e)})},function(e){e.message=t[e.code],a.reject(e)})}catch(s){s.message=t[s.code],a.reject(s)}return a.promise},removeDir:function(r,o){var i=e.defer();/^\//.test(o)&&i.reject("file-name cannot start with /");try{n.resolveLocalFileSystemURL(r,function(e){e.getDirectory(o,{create:!1},function(e){e.remove(function(){i.resolve({success:!0,fileRemoved:e})},function(e){e.message=t[e.code],i.reject(e)})},function(e){e.message=t[e.code],i.reject(e)})},function(e){e.message=t[e.code],i.reject(e)})}catch(a){a.message=t[a.code],i.reject(a)}return i.promise},removeFile:function(r,o){var i=e.defer();/^\//.test(o)&&i.reject("file-name cannot start with /");try{n.resolveLocalFileSystemURL(r,function(e){e.getFile(o,{create:!1},function(e){e.remove(function(){i.resolve({success:!0,fileRemoved:e})},function(e){e.message=t[e.code],i.reject(e)})},function(e){e.message=t[e.code],i.reject(e)})},function(e){e.message=t[e.code],i.reject(e)})}catch(a){a.message=t[a.code],i.reject(a)}return i.promise},removeRecursively:function(r,o){var i=e.defer();/^\//.test(o)&&i.reject("file-name cannot start with /");try{n.resolveLocalFileSystemURL(r,function(e){e.getDirectory(o,{create:!1},function(e){e.removeRecursively(function(){i.resolve({success:!0,fileRemoved:e})},function(e){e.message=t[e.code],i.reject(e)})},function(e){e.message=t[e.code],i.reject(e)})},function(e){e.message=t[e.code],i.reject(e)})}catch(a){a.message=t[a.code],i.reject(a)}return i.promise},writeFile:function(r,o,i,a){var c=e.defer();/^\//.test(o)&&c.reject("file-name cannot start with /"),a=a?!1:!0;var s={create:!0,exclusive:a};try{n.resolveLocalFileSystemURL(r,function(e){e.getFile(o,s,function(e){e.createWriter(function(e){s.append===!0&&e.seek(e.length),s.truncate&&e.truncate(s.truncate),e.onwriteend=function(e){this.error?c.reject(this.error):c.resolve(e)},e.write(i),c.promise.abort=function(){e.abort()}})},function(e){e.message=t[e.code],c.reject(e)})},function(e){e.message=t[e.code],c.reject(e)})}catch(u){u.message=t[u.code],c.reject(u)}return c.promise},writeExistingFile:function(r,o,i){var a=e.defer();/^\//.test(o)&&a.reject("file-name cannot start with /");try{n.resolveLocalFileSystemURL(r,function(e){e.getFile(o,{create:!1},function(e){e.createWriter(function(e){e.seek(e.length),e.onwriteend=function(e){this.error?a.reject(this.error):a.resolve(e)},e.write(i),a.promise.abort=function(){e.abort()}})},function(e){e.message=t[e.code],a.reject(e)})},function(e){e.message=t[e.code],a.reject(e)})}catch(c){c.message=t[c.code],a.reject(c)}return a.promise},readAsText:function(r,o){var i=e.defer();/^\//.test(o)&&i.reject("file-name cannot start with /");try{n.resolveLocalFileSystemURL(r,function(e){e.getFile(o,{create:!1},function(e){e.file(function(e){var n=new FileReader;n.onloadend=function(e){void 0!==e.target.result||null!==e.target.result?i.resolve(e.target.result):void 0!==e.target.error||null!==e.target.error?i.reject(e.target.error):i.reject({code:null,message:"READER_ONLOADEND_ERR"})},n.readAsText(e)})},function(e){e.message=t[e.code],i.reject(e)})},function(e){e.message=t[e.code],i.reject(e)})}catch(a){a.message=t[a.code],i.reject(a)}return i.promise},readAsDataURL:function(r,o){var i=e.defer();/^\//.test(o)&&i.reject("file-name cannot start with /");try{n.resolveLocalFileSystemURL(r,function(e){e.getFile(o,{create:!1},function(e){e.file(function(e){var n=new FileReader;n.onloadend=function(e){void 0!==e.target.result||null!==e.target.result?i.resolve(e.target.result):void 0!==e.target.error||null!==e.target.error?i.reject(e.target.error):i.reject({code:null,message:"READER_ONLOADEND_ERR"})},n.readAsDataURL(e)})},function(e){e.message=t[e.code],i.reject(e)})},function(e){e.message=t[e.code],i.reject(e)})}catch(a){a.message=t[a.code],i.reject(a)}return i.promise},readAsBinaryString:function(r,o){var i=e.defer();/^\//.test(o)&&i.reject("file-name cannot start with /");try{n.resolveLocalFileSystemURL(r,function(e){e.getFile(o,{create:!1},function(e){e.file(function(e){var n=new FileReader;n.onloadend=function(e){void 0!==e.target.result||null!==e.target.result?i.resolve(e.target.result):void 0!==e.target.error||null!==e.target.error?i.reject(e.target.error):i.reject({code:null,message:"READER_ONLOADEND_ERR"})},n.readAsBinaryString(e)})},function(e){e.message=t[e.code],i.reject(e)})},function(e){e.message=t[e.code],i.reject(e)})}catch(a){a.message=t[a.code],i.reject(a)}return i.promise},readAsArrayBuffer:function(r,o){var i=e.defer();/^\//.test(o)&&i.reject("file-name cannot start with /");try{n.resolveLocalFileSystemURL(r,function(e){e.getFile(o,{create:!1},function(e){e.file(function(e){var n=new FileReader;n.onloadend=function(e){void 0!==e.target.result||null!==e.target.result?i.resolve(e.target.result):void 0!==e.target.error||null!==e.target.error?i.reject(e.target.error):i.reject({code:null,message:"READER_ONLOADEND_ERR"})},n.readAsArrayBuffer(e)})},function(e){e.message=t[e.code],i.reject(e)})},function(e){e.message=t[e.code],i.reject(e)})}catch(a){a.message=t[a.code],i.reject(a)}return i.promise},moveFile:function(t,r,o,i){var a=e.defer();i=i||r,(/^\//.test(r)||/^\//.test(i))&&a.reject("file-name cannot start with /");try{n.resolveLocalFileSystemURL(t,function(e){e.getFile(r,{create:!1},function(e){n.resolveLocalFileSystemURL(o,function(n){e.moveTo(n,i,function(e){a.resolve(e)},function(e){a.reject(e)})},function(e){a.reject(e)})},function(e){a.reject(e)})},function(e){a.reject(e);
+})}catch(c){a.reject(c)}return a.promise},moveDir:function(t,r,o,i){var a=e.defer();i=i||r,(/^\//.test(r)||/^\//.test(i))&&a.reject("file-name cannot start with /");try{n.resolveLocalFileSystemURL(t,function(e){e.getDirectory(r,{create:!1},function(e){n.resolveLocalFileSystemURL(o,function(n){e.moveTo(n,i,function(e){a.resolve(e)},function(e){a.reject(e)})},function(e){a.reject(e)})},function(e){a.reject(e)})},function(e){a.reject(e)})}catch(c){a.reject(c)}return a.promise},copyDir:function(r,o,i,a){var c=e.defer();a=a||o,(/^\//.test(o)||/^\//.test(a))&&c.reject("file-name cannot start with /");try{n.resolveLocalFileSystemURL(r,function(e){e.getDirectory(o,{create:!1,exclusive:!1},function(e){n.resolveLocalFileSystemURL(i,function(n){e.copyTo(n,a,function(e){c.resolve(e)},function(e){e.message=t[e.code],c.reject(e)})},function(e){e.message=t[e.code],c.reject(e)})},function(e){e.message=t[e.code],c.reject(e)})},function(e){e.message=t[e.code],c.reject(e)})}catch(s){s.message=t[s.code],c.reject(s)}return c.promise},copyFile:function(r,o,i,a){var c=e.defer();a=a||o,/^\//.test(o)&&c.reject("file-name cannot start with /");try{n.resolveLocalFileSystemURL(r,function(e){e.getFile(o,{create:!1,exclusive:!1},function(e){n.resolveLocalFileSystemURL(i,function(n){e.copyTo(n,a,function(e){c.resolve(e)},function(e){e.message=t[e.code],c.reject(e)})},function(e){e.message=t[e.code],c.reject(e)})},function(e){e.message=t[e.code],c.reject(e)})},function(e){e.message=t[e.code],c.reject(e)})}catch(s){s.message=t[s.code],c.reject(s)}return c.promise}}}]}]),angular.module("ngCordova.plugins.fileOpener2",[]).factory("$cordovaFileOpener2",["$q",function(e){return{open:function(n,t){var r=e.defer();return cordova.plugins.fileOpener2.open(n,t,{error:function(e){r.reject(e)},success:function(){r.resolve()}}),r.promise},uninstall:function(n){var t=e.defer();return cordova.plugins.fileOpener2.uninstall(n,{error:function(e){t.reject(e)},success:function(){t.resolve()}}),t.promise},appIsInstalled:function(n){var t=e.defer();return cordova.plugins.fileOpener2.appIsInstalled(n,{success:function(e){t.resolve(e)}}),t.promise}}}]),angular.module("ngCordova.plugins.fileTransfer",[]).factory("$cordovaFileTransfer",["$q","$timeout",function(e,n){return{download:function(t,r,o,i){var a=e.defer(),c=new FileTransfer,s=o&&o.encodeURI===!1?t:encodeURI(t);return o&&void 0!==o.timeout&&null!==o.timeout&&(n(function(){c.abort()},o.timeout),o.timeout=null),c.onprogress=function(e){a.notify(e)},a.promise.abort=function(){c.abort()},c.download(s,r,a.resolve,a.reject,i,o),a.promise},upload:function(t,r,o,i){var a=e.defer(),c=new FileTransfer,s=o&&o.encodeURI===!1?t:encodeURI(t);return o&&void 0!==o.timeout&&null!==o.timeout&&(n(function(){c.abort()},o.timeout),o.timeout=null),c.onprogress=function(e){a.notify(e)},a.promise.abort=function(){c.abort()},c.upload(r,s,a.resolve,a.reject,o,i),a.promise}}}]),angular.module("ngCordova.plugins.flashlight",[]).factory("$cordovaFlashlight",["$q","$window",function(e,n){return{available:function(){var t=e.defer();return n.plugins.flashlight.available(function(e){t.resolve(e)}),t.promise},switchOn:function(){var t=e.defer();return n.plugins.flashlight.switchOn(function(e){t.resolve(e)},function(e){t.reject(e)}),t.promise},switchOff:function(){var t=e.defer();return n.plugins.flashlight.switchOff(function(e){t.resolve(e)},function(e){t.reject(e)}),t.promise},toggle:function(){var t=e.defer();return n.plugins.flashlight.toggle(function(e){t.resolve(e)},function(e){t.reject(e)}),t.promise}}}]),angular.module("ngCordova.plugins.flurryAds",[]).factory("$cordovaFlurryAds",["$q","$window",function(e,n){return{setOptions:function(t){var r=e.defer();return n.FlurryAds.setOptions(t,function(){r.resolve()},function(){r.reject()}),r.promise},createBanner:function(t){var r=e.defer();return n.FlurryAds.createBanner(t,function(){r.resolve()},function(){r.reject()}),r.promise},removeBanner:function(){var t=e.defer();return n.FlurryAds.removeBanner(function(){t.resolve()},function(){t.reject()}),t.promise},showBanner:function(t){var r=e.defer();return n.FlurryAds.showBanner(t,function(){r.resolve()},function(){r.reject()}),r.promise},showBannerAtXY:function(t,r){var o=e.defer();return n.FlurryAds.showBannerAtXY(t,r,function(){o.resolve()},function(){o.reject()}),o.promise},hideBanner:function(){var t=e.defer();return n.FlurryAds.hideBanner(function(){t.resolve()},function(){t.reject()}),t.promise},prepareInterstitial:function(t){var r=e.defer();return n.FlurryAds.prepareInterstitial(t,function(){r.resolve()},function(){r.reject()}),r.promise},showInterstitial:function(){var t=e.defer();return n.FlurryAds.showInterstitial(function(){t.resolve()},function(){t.reject()}),t.promise}}}]),angular.module("ngCordova.plugins.ga",[]).factory("$cordovaGA",["$q","$window",function(e,n){return{init:function(t,r){var o=e.defer();return r=r>=0?r:10,n.plugins.gaPlugin.init(function(e){o.resolve(e)},function(e){o.reject(e)},t,r),o.promise},trackEvent:function(t,r,o,i,a,c){var s=e.defer();return n.plugins.gaPlugin.trackEvent(function(e){s.resolve(e)},function(e){s.reject(e)},o,i,a,c),s.promise},trackPage:function(t,r,o){var i=e.defer();return n.plugins.gaPlugin.trackPage(function(e){i.resolve(e)},function(e){i.reject(e)},o),i.promise},setVariable:function(t,r,o,i){var a=e.defer();return n.plugins.gaPlugin.setVariable(function(e){a.resolve(e)},function(e){a.reject(e)},o,i),a.promise},exit:function(t,r){var o=e.defer();return n.plugins.gaPlugin.exit(function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise}}}]),angular.module("ngCordova.plugins.geolocation",[]).factory("$cordovaGeolocation",["$q",function(e){return{getCurrentPosition:function(n){var t=e.defer();return navigator.geolocation.getCurrentPosition(function(e){t.resolve(e)},function(e){t.reject(e)},n),t.promise},watchPosition:function(n){var t=e.defer(),r=navigator.geolocation.watchPosition(function(e){t.notify(e)},function(e){t.reject(e)},n);return t.promise.cancel=function(){navigator.geolocation.clearWatch(r)},t.promise.clearWatch=function(e){navigator.geolocation.clearWatch(e||r)},t.promise.watchID=r,t.promise},clearWatch:function(e){return navigator.geolocation.clearWatch(e)}}}]),angular.module("ngCordova.plugins.globalization",[]).factory("$cordovaGlobalization",["$q",function(e){return{getPreferredLanguage:function(){var n=e.defer();return navigator.globalization.getPreferredLanguage(function(e){n.resolve(e)},function(e){n.reject(e)}),n.promise},getLocaleName:function(){var n=e.defer();return navigator.globalization.getLocaleName(function(e){n.resolve(e)},function(e){n.reject(e)}),n.promise},getFirstDayOfWeek:function(){var n=e.defer();return navigator.globalization.getFirstDayOfWeek(function(e){n.resolve(e)},function(e){n.reject(e)}),n.promise},dateToString:function(n,t){var r=e.defer();return navigator.globalization.dateToString(n,function(e){r.resolve(e)},function(e){r.reject(e)},t),r.promise},stringToDate:function(n,t){var r=e.defer();return navigator.globalization.stringToDate(n,function(e){r.resolve(e)},function(e){r.reject(e)},t),r.promise},getDatePattern:function(n){var t=e.defer();return navigator.globalization.getDatePattern(function(e){t.resolve(e)},function(e){t.reject(e)},n),t.promise},getDateNames:function(n){var t=e.defer();return navigator.globalization.getDateNames(function(e){t.resolve(e)},function(e){t.reject(e)},n),t.promise},isDayLightSavingsTime:function(n){var t=e.defer();return navigator.globalization.isDayLightSavingsTime(n,function(e){t.resolve(e)},function(e){t.reject(e)}),t.promise},numberToString:function(n,t){var r=e.defer();return navigator.globalization.numberToString(n,function(e){r.resolve(e)},function(e){r.reject(e)},t),r.promise},stringToNumber:function(n,t){var r=e.defer();return navigator.globalization.stringToNumber(n,function(e){r.resolve(e)},function(e){r.reject(e)},t),r.promise},getNumberPattern:function(n){var t=e.defer();return navigator.globalization.getNumberPattern(function(e){t.resolve(e)},function(e){t.reject(e)},n),t.promise},getCurrencyPattern:function(n){var t=e.defer();return navigator.globalization.getCurrencyPattern(n,function(e){t.resolve(e)},function(e){t.reject(e)}),t.promise}}}]),angular.module("ngCordova.plugins.googleAds",[]).factory("$cordovaGoogleAds",["$q","$window",function(e,n){return{setOptions:function(t){var r=e.defer();return n.AdMob.setOptions(t,function(){r.resolve()},function(){r.reject()}),r.promise},createBanner:function(t){var r=e.defer();return n.AdMob.createBanner(t,function(){r.resolve()},function(){r.reject()}),r.promise},removeBanner:function(){var t=e.defer();return n.AdMob.removeBanner(function(){t.resolve()},function(){t.reject()}),t.promise},showBanner:function(t){var r=e.defer();return n.AdMob.showBanner(t,function(){r.resolve()},function(){r.reject()}),r.promise},showBannerAtXY:function(t,r){var o=e.defer();return n.AdMob.showBannerAtXY(t,r,function(){o.resolve()},function(){o.reject()}),o.promise},hideBanner:function(){var t=e.defer();return n.AdMob.hideBanner(function(){t.resolve()},function(){t.reject()}),t.promise},prepareInterstitial:function(t){var r=e.defer();return n.AdMob.prepareInterstitial(t,function(){r.resolve()},function(){r.reject()}),r.promise},showInterstitial:function(){var t=e.defer();return n.AdMob.showInterstitial(function(){t.resolve()},function(){t.reject()}),t.promise}}}]),angular.module("ngCordova.plugins.googleAnalytics",[]).factory("$cordovaGoogleAnalytics",["$q","$window",function(e,n){return{startTrackerWithId:function(t){var r=e.defer();return n.analytics.startTrackerWithId(t,function(e){r.resolve(e)},function(e){r.reject(e)}),r.promise},setUserId:function(t){var r=e.defer();return n.analytics.setUserId(t,function(e){r.resolve(e)},function(e){r.reject(e)}),r.promise},debugMode:function(){var t=e.defer();return n.analytics.debugMode(function(e){t.resolve(e)},function(){t.reject()}),t.promise},trackView:function(t){var r=e.defer();return n.analytics.trackView(t,function(e){r.resolve(e)},function(e){r.reject(e)}),r.promise},addCustomDimension:function(t,r){var o=e.defer();return n.analytics.addCustomDimension(t,r,function(){o.resolve()},function(e){o.reject(e)}),o.promise},trackEvent:function(t,r,o,i){var a=e.defer();return n.analytics.trackEvent(t,r,o,i,function(e){a.resolve(e)},function(e){a.reject(e)}),a.promise},trackException:function(t,r){var o=e.defer();return n.analytics.trackException(t,r,function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise},trackTiming:function(t,r,o,i){var a=e.defer();return n.analytics.trackTiming(t,r,o,i,function(e){a.resolve(e)},function(e){a.reject(e)}),a.promise},addTransaction:function(t,r,o,i,a,c){var s=e.defer();return n.analytics.addTransaction(t,r,o,i,a,c,function(e){s.resolve(e)},function(e){s.reject(e)}),s.promise},addTransactionItem:function(t,r,o,i,a,c,s){var u=e.defer();return n.analytics.addTransactionItem(t,r,o,i,a,c,s,function(e){u.resolve(e)},function(e){u.reject(e)}),u.promise}}}]),angular.module("ngCordova.plugins.googleMap",[]).factory("$cordovaGoogleMap",["$q","$window",function(e,n){var t=null;return{getMap:function(r){var o=e.defer();if(n.plugin.google.maps){var i=document.getElementById("map_canvas");t=n.plugin.google.maps.Map.getMap(r),t.setDiv(i),o.resolve(t)}else o.reject(null);return o.promise},isMapLoaded:function(){return!!t},addMarker:function(n){var r=e.defer();return t.addMarker(n,function(e){r.resolve(e)}),r.promise},getMapTypeIds:function(){return n.plugin.google.maps.mapTypeId},setVisible:function(n){var r=e.defer();return t.setVisible(n),r.promise},cleanup:function(){t=null}}}]),angular.module("ngCordova.plugins.googlePlayGame",[]).factory("$cordovaGooglePlayGame",["$q",function(e){return{auth:function(){var n=e.defer();return googleplaygame.auth(function(e){return n.resolve(e)},function(e){return n.reject(e)}),n.promise},signout:function(){var n=e.defer();return googleplaygame.signout(function(e){return n.resolve(e)},function(e){return n.reject(e)}),n.promise},isSignedIn:function(){var n=e.defer();return googleplaygame.isSignedIn(function(e){return n.resolve(e)},function(e){return n.reject(e)}),n.promise},showPlayer:function(){var n=e.defer();return googleplaygame.showPlayer(function(e){return n.resolve(e)},function(e){return n.reject(e)}),n.promise},submitScore:function(n){var t=e.defer();return googleplaygame.submitScore(n,function(e){return t.resolve(e)},function(e){return t.reject(e)}),t.promise},showAllLeaderboards:function(){var n=e.defer();return googleplaygame.showAllLeaderboards(function(e){return n.resolve(e)},function(e){return n.reject(e)}),n.promise},showLeaderboard:function(n){var t=e.defer();return googleplaygame.showLeaderboard(n,function(e){return t.resolve(e)},function(e){return t.reject(e)}),t.promise},unlockAchievement:function(n){var t=e.defer();return googleplaygame.unlockAchievement(n,function(e){return t.resolve(e)},function(e){return t.reject(e)}),t.promise},incrementAchievement:function(n){var t=e.defer();return googleplaygame.incrementAchievement(n,function(e){return t.resolve(e)},function(e){return t.reject(e)}),t.promise},showAchievements:function(){var n=e.defer();return googleplaygame.showAchievements(function(e){return n.resolve(e)},function(e){return n.reject(e)}),n.promise}}}]),angular.module("ngCordova.plugins.googlePlus",[]).factory("$cordovaGooglePlus",["$q","$window",function(e,n){return{login:function(t){var r=e.defer();return void 0===t&&(t={}),n.plugins.googleplus.login({iOSApiKey:t},function(e){r.resolve(e)},function(e){r.reject(e)}),r.promise},silentLogin:function(t){var r=e.defer();return void 0===t&&(t={}),n.plugins.googleplus.trySilentLogin({iOSApiKey:t},function(e){r.resolve(e)},function(e){r.reject(e)}),r.promise},logout:function(){var t=e.defer();n.plugins.googleplus.logout(function(e){t.resolve(e)})},disconnect:function(){var t=e.defer();n.plugins.googleplus.disconnect(function(e){t.resolve(e)})},isAvailable:function(){var t=e.defer();return n.plugins.googleplus.isAvailable(function(e){e?t.resolve(e):t.reject(e)}),t.promise}}}]),angular.module("ngCordova.plugins.healthKit",[]).factory("$cordovaHealthKit",["$q","$window",function(e,n){return{isAvailable:function(){var t=e.defer();return n.plugins.healthkit.available(function(e){t.resolve(e)},function(e){t.reject(e)}),t.promise},checkAuthStatus:function(t){var r=e.defer();return t=t||"HKQuantityTypeIdentifierHeight",n.plugins.healthkit.checkAuthStatus({type:t},function(e){r.resolve(e)},function(e){r.reject(e)}),r.promise},requestAuthorization:function(t,r){var o=e.defer();return t=t||["HKCharacteristicTypeIdentifierDateOfBirth","HKQuantityTypeIdentifierActiveEnergyBurned","HKQuantityTypeIdentifierHeight"],r=r||["HKQuantityTypeIdentifierActiveEnergyBurned","HKQuantityTypeIdentifierHeight","HKQuantityTypeIdentifierDistanceCycling"],n.plugins.healthkit.requestAuthorization({readTypes:t,writeTypes:r},function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise},readDateOfBirth:function(){var t=e.defer();return n.plugins.healthkit.readDateOfBirth(function(e){t.resolve(e)},function(e){t.resolve(e)}),t.promise},readGender:function(){var t=e.defer();return n.plugins.healthkit.readGender(function(e){t.resolve(e)},function(e){t.resolve(e)}),t.promise},saveWeight:function(t,r,o){var i=e.defer();return n.plugins.healthkit.saveWeight({unit:r||"lb",amount:t,date:o||new Date},function(e){i.resolve(e)},function(e){i.resolve(e)}),i.promise},readWeight:function(t){var r=e.defer();return n.plugins.healthkit.readWeight({unit:t||"lb"},function(e){r.resolve(e)},function(e){r.resolve(e)}),r.promise},saveHeight:function(t,r,o){var i=e.defer();return n.plugins.healthkit.saveHeight({unit:r||"in",amount:t,date:o||new Date},function(e){i.resolve(e)},function(e){i.resolve(e)}),i.promise},readHeight:function(t){var r=e.defer();return n.plugins.healthkit.readHeight({unit:t||"in"},function(e){r.resolve(e)},function(e){r.resolve(e)}),r.promise},findWorkouts:function(){var t=e.defer();return n.plugins.healthkit.findWorkouts({},function(e){t.resolve(e)},function(e){t.resolve(e)}),t.promise},saveWorkout:function(t){var r=e.defer();return n.plugins.healthkit.saveWorkout(t,function(e){r.resolve(e)},function(e){r.resolve(e)}),r.promise},querySampleType:function(t){var r=e.defer();return n.plugins.healthkit.querySampleType(t,function(e){r.resolve(e)},function(e){r.resolve(e)}),r.promise}}}]),angular.module("ngCordova.plugins.httpd",[]).factory("$cordovaHttpd",["$q",function(e){return{startServer:function(n){var t=e.defer();return cordova.plugins.CorHttpd.startServer(n,function(){t.resolve()},function(){t.reject()}),t.promise},stopServer:function(){var n=e.defer();return cordova.plugins.CorHttpd.stopServer(function(){n.resolve()},function(){n.reject()}),n.promise},getURL:function(){var n=e.defer();return cordova.plugins.CorHttpd.getURL(function(e){n.resolve(e)},function(){n.reject()}),n.promise},getLocalPath:function(){var n=e.defer();return cordova.plugins.CorHttpd.getLocalPath(function(e){n.resolve(e)},function(){n.reject()}),n.promise}}}]),angular.module("ngCordova.plugins.iAd",[]).factory("$cordovaiAd",["$q","$window",function(e,n){return{setOptions:function(t){var r=e.defer();return n.iAd.setOptions(t,function(){r.resolve()},function(){r.reject()}),r.promise},createBanner:function(t){var r=e.defer();return n.iAd.createBanner(t,function(){r.resolve()},function(){r.reject()}),r.promise},removeBanner:function(){var t=e.defer();return n.iAd.removeBanner(function(){t.resolve()},function(){t.reject()}),t.promise},showBanner:function(t){var r=e.defer();return n.iAd.showBanner(t,function(){r.resolve()},function(){r.reject()}),r.promise},showBannerAtXY:function(t,r){var o=e.defer();return n.iAd.showBannerAtXY(t,r,function(){o.resolve()},function(){o.reject()}),o.promise},hideBanner:function(){var t=e.defer();return n.iAd.hideBanner(function(){t.resolve()},function(){t.reject()}),t.promise},prepareInterstitial:function(t){var r=e.defer();return n.iAd.prepareInterstitial(t,function(){r.resolve()},function(){r.reject()}),r.promise},showInterstitial:function(){var t=e.defer();return n.iAd.showInterstitial(function(){t.resolve()},function(){t.reject()}),t.promise}}}]),angular.module("ngCordova.plugins.imagePicker",[]).factory("$cordovaImagePicker",["$q","$window",function(e,n){return{getPictures:function(t){var r=e.defer();return n.imagePicker.getPictures(function(e){r.resolve(e)},function(e){r.reject(e)},t),r.promise}}}]),angular.module("ngCordova.plugins.inAppBrowser",[]).provider("$cordovaInAppBrowser",[function(){var e,n=this.defaultOptions={};this.setDefaultOptions=function(e){n=angular.extend(n,e)},this.$get=["$rootScope","$q","$window","$timeout",function(t,r,o,i){return{open:function(a,c,s){var u=r.defer();if(s&&!angular.isObject(s))return u.reject("options must be an object"),u.promise;var l=angular.extend({},n,s),d=[];angular.forEach(l,function(e,n){d.push(n+"="+e)});var f=d.join();return e=o.open(a,c,f),e.addEventListener("loadstart",function(e){i(function(){t.$broadcast("$cordovaInAppBrowser:loadstart",e)})},!1),e.addEventListener("loadstop",function(e){u.resolve(e),i(function(){t.$broadcast("$cordovaInAppBrowser:loadstop",e)})},!1),e.addEventListener("loaderror",function(e){u.reject(e),i(function(){t.$broadcast("$cordovaInAppBrowser:loaderror",e)})},!1),e.addEventListener("exit",function(e){i(function(){t.$broadcast("$cordovaInAppBrowser:exit",e)})},!1),u.promise},close:function(){e.close(),e=null},show:function(){e.show()},executeScript:function(n){var t=r.defer();return e.executeScript(n,function(e){t.resolve(e)}),t.promise},insertCSS:function(n){var t=r.defer();return e.insertCSS(n,function(e){t.resolve(e)}),t.promise}}}]}]),angular.module("ngCordova.plugins.insomnia",[]).factory("$cordovaInsomnia",["$window",function(e){return{keepAwake:function(){return e.plugins.insomnia.keepAwake()},allowSleepAgain:function(){return e.plugins.insomnia.allowSleepAgain()}}}]),angular.module("ngCordova.plugins.instagram",[]).factory("$cordovaInstagram",["$q",function(e){return{share:function(n){var t=e.defer();return window.Instagram?(Instagram.share(n.image,n.caption,function(e){e?t.reject(e):t.resolve(!0)}),t.promise):(console.error("Tried to call Instagram.share but the Instagram plugin isn't installed!"),t.resolve(null),t.promise)},isInstalled:function(){var n=e.defer();return window.Instagram?(Instagram.isInstalled(function(e,t){e?n.reject(e):n.resolve(t||!0)}),n.promise):(console.error("Tried to call Instagram.isInstalled but the Instagram plugin isn't installed!"),n.resolve(null),n.promise)}}}]),angular.module("ngCordova.plugins.keyboard",[]).factory("$cordovaKeyboard",["$rootScope",function(e){var n=function(){e.$evalAsync(function(){e.$broadcast("$cordovaKeyboard:show")})},t=function(){e.$evalAsync(function(){e.$broadcast("$cordovaKeyboard:hide")})};return document.addEventListener("deviceready",function(){cordova.plugins.Keyboard&&(window.addEventListener("native.keyboardshow",n,!1),window.addEventListener("native.keyboardhide",t,!1))}),{hideAccessoryBar:function(e){return cordova.plugins.Keyboard.hideKeyboardAccessoryBar(e)},close:function(){return cordova.plugins.Keyboard.close()},show:function(){return cordova.plugins.Keyboard.show()},disableScroll:function(e){return cordova.plugins.Keyboard.disableScroll(e)},isVisible:function(){return cordova.plugins.Keyboard.isVisible},clearShowWatch:function(){document.removeEventListener("native.keyboardshow",n),e.$$listeners["$cordovaKeyboard:show"]=[]},clearHideWatch:function(){document.removeEventListener("native.keyboardhide",t),e.$$listeners["$cordovaKeyboard:hide"]=[]}}}]),angular.module("ngCordova.plugins.keychain",[]).factory("$cordovaKeychain",["$q",function(e){return{getForKey:function(n,t){var r=e.defer(),o=new Keychain;return o.getForKey(r.resolve,r.reject,n,t),r.promise},setForKey:function(n,t,r){var o=e.defer(),i=new Keychain;return i.setForKey(o.resolve,o.reject,n,t,r),o.promise},removeForKey:function(n,t){var r=e.defer(),o=new Keychain;return o.removeForKey(r.resolve,r.reject,n,t),r.promise}}}]),angular.module("ngCordova.plugins.launchNavigator",[]).factory("$cordovaLaunchNavigator",["$q",function(e){return{navigate:function(n,t,r,o,i){var a=e.defer();return launchnavigator.navigate(n,t,function(){a.resolve()},function(e){a.reject(e)},i),a.promise}}}]),angular.module("ngCordova.plugins.localNotification",[]).factory("$cordovaLocalNotification",["$q","$window","$rootScope","$timeout",function(e,n,t,r){return document.addEventListener("deviceready",function(){n.cordova&&n.cordova.plugins&&n.cordova.plugins.notification&&n.cordova.plugins.notification.local&&(n.cordova.plugins.notification.local.on("schedule",function(e,n){r(function(){t.$broadcast("$cordovaLocalNotification:schedule",e,n)})}),n.cordova.plugins.notification.local.on("trigger",function(e,n){r(function(){t.$broadcast("$cordovaLocalNotification:trigger",e,n)})}),n.cordova.plugins.notification.local.on("update",function(e,n){r(function(){t.$broadcast("$cordovaLocalNotification:update",e,n)})}),n.cordova.plugins.notification.local.on("clear",function(e,n){r(function(){t.$broadcast("$cordovaLocalNotification:clear",e,n)})}),n.cordova.plugins.notification.local.on("clearall",function(e){r(function(){t.$broadcast("$cordovaLocalNotification:clearall",e)})}),n.cordova.plugins.notification.local.on("cancel",function(e,n){r(function(){t.$broadcast("$cordovaLocalNotification:cancel",e,n)})}),n.cordova.plugins.notification.local.on("cancelall",function(e){r(function(){t.$broadcast("$cordovaLocalNotification:cancelall",e)})}),n.cordova.plugins.notification.local.on("click",function(e,n){r(function(){t.$broadcast("$cordovaLocalNotification:click",e,n)})}))},!1),{schedule:function(t,r){var o=e.defer();return r=r||null,n.cordova.plugins.notification.local.schedule(t,function(e){o.resolve(e)},r),o.promise},add:function(t,r){console.warn('Deprecated: use "schedule" instead.');var o=e.defer();return r=r||null,n.cordova.plugins.notification.local.schedule(t,function(e){o.resolve(e)},r),o.promise},update:function(t,r){var o=e.defer();return r=r||null,n.cordova.plugins.notification.local.update(t,function(e){o.resolve(e)},r),o.promise},clear:function(t,r){var o=e.defer();return r=r||null,n.cordova.plugins.notification.local.clear(t,function(e){o.resolve(e)},r),o.promise},clearAll:function(t){var r=e.defer();return t=t||null,n.cordova.plugins.notification.local.clearAll(function(e){r.resolve(e)},t),r.promise},cancel:function(t,r){var o=e.defer();return r=r||null,n.cordova.plugins.notification.local.cancel(t,function(e){o.resolve(e)},r),o.promise},cancelAll:function(t){var r=e.defer();return t=t||null,n.cordova.plugins.notification.local.cancelAll(function(e){r.resolve(e)},t),r.promise},isPresent:function(t,r){var o=e.defer();return r=r||null,n.cordova.plugins.notification.local.isPresent(t,function(e){o.resolve(e)},r),o.promise},isScheduled:function(t,r){var o=e.defer();return r=r||null,n.cordova.plugins.notification.local.isScheduled(t,function(e){o.resolve(e)},r),o.promise},isTriggered:function(t,r){var o=e.defer();return r=r||null,n.cordova.plugins.notification.local.isTriggered(t,function(e){o.resolve(e)},r),o.promise},hasPermission:function(t){var r=e.defer();return t=t||null,n.cordova.plugins.notification.local.hasPermission(function(e){e?r.resolve(e):r.reject(e)},t),r.promise},registerPermission:function(t){var r=e.defer();return t=t||null,n.cordova.plugins.notification.local.registerPermission(function(e){e?r.resolve(e):r.reject(e)},t),r.promise},promptForPermission:function(t){console.warn('Deprecated: use "registerPermission" instead.');var r=e.defer();return t=t||null,n.cordova.plugins.notification.local.registerPermission(function(e){e?r.resolve(e):r.reject(e)},t),r.promise},getAllIds:function(t){var r=e.defer();return t=t||null,n.cordova.plugins.notification.local.getAllIds(function(e){r.resolve(e)},t),r.promise},getIds:function(t){var r=e.defer();return t=t||null,n.cordova.plugins.notification.local.getIds(function(e){r.resolve(e)},t),r.promise},getScheduledIds:function(t){var r=e.defer();return t=t||null,n.cordova.plugins.notification.local.getScheduledIds(function(e){r.resolve(e)},t),r.promise},getTriggeredIds:function(t){var r=e.defer();return t=t||null,n.cordova.plugins.notification.local.getTriggeredIds(function(e){r.resolve(e)},t),r.promise},get:function(t,r){var o=e.defer();return r=r||null,n.cordova.plugins.notification.local.get(t,function(e){o.resolve(e)},r),o.promise},getAll:function(t){var r=e.defer();return t=t||null,n.cordova.plugins.notification.local.getAll(function(e){r.resolve(e)},t),r.promise},getScheduled:function(t,r){var o=e.defer();return r=r||null,n.cordova.plugins.notification.local.getScheduled(t,function(e){o.resolve(e)},r),o.promise},getAllScheduled:function(t){var r=e.defer();return t=t||null,n.cordova.plugins.notification.local.getAllScheduled(function(e){r.resolve(e)},t),r.promise},getTriggered:function(t,r){var o=e.defer();return r=r||null,n.cordova.plugins.notification.local.getTriggered(t,function(e){o.resolve(e)},r),o.promise},getAllTriggered:function(t){var r=e.defer();return t=t||null,n.cordova.plugins.notification.local.getAllTriggered(function(e){r.resolve(e)},t),r.promise},getDefaults:function(){return n.cordova.plugins.notification.local.getDefaults()},setDefaults:function(e){n.cordova.plugins.notification.local.setDefaults(e)}}}]),angular.module("ngCordova.plugins.mMediaAds",[]).factory("$cordovaMMediaAds",["$q","$window",function(e,n){return{setOptions:function(t){var r=e.defer();return n.mMedia.setOptions(t,function(){r.resolve()},function(){r.reject()}),r.promise},createBanner:function(t){var r=e.defer();return n.mMedia.createBanner(t,function(){r.resolve()},function(){r.reject()}),r.promise},removeBanner:function(){var t=e.defer();return n.mMedia.removeBanner(function(){t.resolve()},function(){t.reject()}),t.promise},showBanner:function(t){var r=e.defer();return n.mMedia.showBanner(t,function(){r.resolve()},function(){r.reject()}),r.promise},showBannerAtXY:function(t,r){var o=e.defer();return n.mMedia.showBannerAtXY(t,r,function(){o.resolve()},function(){o.reject()}),o.promise},hideBanner:function(){var t=e.defer();return n.mMedia.hideBanner(function(){t.resolve()},function(){t.reject()}),t.promise},prepareInterstitial:function(t){var r=e.defer();return n.mMedia.prepareInterstitial(t,function(){r.resolve()},function(){r.reject()}),r.promise},showInterstitial:function(){var t=e.defer();return n.mMedia.showInterstitial(function(){t.resolve()},function(){t.reject()}),t.promise}}}]),angular.module("ngCordova.plugins.media",[]).service("NewMedia",["$q","$interval",function(e,n){function t(e){angular.isDefined(u)||(u=n(function(){0>f&&(f=e.getDuration(),a&&f>0&&a.notify({duration:f})),e.getCurrentPosition(function(e){e>-1&&(d=e)},function(e){console.log("Error getting pos="+e)}),a&&a.notify({position:d})},1e3))}function r(){angular.isDefined(u)&&(n.cancel(u),u=void 0)}function o(){d=-1,f=-1}function i(e){this.media=new Media(e,function(e){r(),o(),a.resolve(e)},function(e){r(),o(),a.reject(e)},function(e){l=e,a.notify({status:l})})}var a,c,s,u,l=null,d=-1,f=-1;return i.prototype.play=function(n){return a=e.defer(),"object"!=typeof n&&(n={}),this.media.play(n),t(this.media),a.promise},i.prototype.pause=function(){r(),this.media.pause()},i.prototype.stop=function(){this.media.stop()},i.prototype.release=function(){this.media.release(),this.media=void 0},i.prototype.seekTo=function(e){this.media.seekTo(e)},i.prototype.setVolume=function(e){this.media.setVolume(e)},i.prototype.startRecord=function(){this.media.startRecord()},i.prototype.stopRecord=function(){this.media.stopRecord()},i.prototype.currentTime=function(){return c=e.defer(),this.media.getCurrentPosition(function(e){c.resolve(e)}),c.promise},i.prototype.getDuration=function(){return s=e.defer(),this.media.getDuration(function(e){s.resolve(e)}),s.promise},i}]).factory("$cordovaMedia2",["NewMedia",function(e){return{newMedia:function(n){return new e(n)}}}]),angular.module("ngCordova.plugins.mobfoxAds",[]).factory("$cordovaMobFoxAds",["$q","$window",function(e,n){return{setOptions:function(t){var r=e.defer();return n.MobFox.setOptions(t,function(){r.resolve()},function(){r.reject()}),r.promise},createBanner:function(t){var r=e.defer();return n.MobFox.createBanner(t,function(){r.resolve()},function(){r.reject()}),r.promise},removeBanner:function(){var t=e.defer();return n.MobFox.removeBanner(function(){t.resolve()},function(){t.reject()}),t.promise},showBanner:function(t){var r=e.defer();return n.MobFox.showBanner(t,function(){r.resolve()},function(){r.reject()}),r.promise},showBannerAtXY:function(t,r){var o=e.defer();return n.MobFox.showBannerAtXY(t,r,function(){o.resolve()},function(){o.reject()}),o.promise},hideBanner:function(){var t=e.defer();return n.MobFox.hideBanner(function(){t.resolve()},function(){t.reject()}),t.promise},prepareInterstitial:function(t){var r=e.defer();return n.MobFox.prepareInterstitial(t,function(){r.resolve()},function(){r.reject()}),r.promise},showInterstitial:function(){var t=e.defer();return n.MobFox.showInterstitial(function(){t.resolve()},function(){t.reject()}),t.promise}}}]),angular.module("ngCordova.plugins",["ngCordova.plugins.actionSheet","ngCordova.plugins.adMob","ngCordova.plugins.appAvailability","ngCordova.plugins.appRate","ngCordova.plugins.appVersion","ngCordova.plugins.backgroundGeolocation","ngCordova.plugins.badge","ngCordova.plugins.barcodeScanner","ngCordova.plugins.batteryStatus","ngCordova.plugins.ble","ngCordova.plugins.bluetoothSerial","ngCordova.plugins.brightness","ngCordova.plugins.calendar","ngCordova.plugins.camera","ngCordova.plugins.capture","ngCordova.plugins.clipboard","ngCordova.plugins.contacts","ngCordova.plugins.datePicker","ngCordova.plugins.device","ngCordova.plugins.deviceMotion","ngCordova.plugins.deviceOrientation","ngCordova.plugins.dialogs","ngCordova.plugins.emailComposer","ngCordova.plugins.facebook","ngCordova.plugins.facebookAds","ngCordova.plugins.file","ngCordova.plugins.fileTransfer","ngCordova.plugins.fileOpener2","ngCordova.plugins.flashlight","ngCordova.plugins.flurryAds","ngCordova.plugins.ga","ngCordova.plugins.geolocation","ngCordova.plugins.globalization","ngCordova.plugins.googleAds","ngCordova.plugins.googleAnalytics","ngCordova.plugins.googleMap","ngCordova.plugins.googlePlayGame","ngCordova.plugins.googlePlus","ngCordova.plugins.healthKit","ngCordova.plugins.httpd","ngCordova.plugins.iAd","ngCordova.plugins.imagePicker","ngCordova.plugins.inAppBrowser","ngCordova.plugins.instagram","ngCordova.plugins.keyboard","ngCordova.plugins.keychain","ngCordova.plugins.launchNavigator","ngCordova.plugins.localNotification","ngCordova.plugins.media","ngCordova.plugins.mMediaAds","ngCordova.plugins.mobfoxAds","ngCordova.plugins.mopubAds","ngCordova.plugins.nativeAudio","ngCordova.plugins.network","ngCordovaOauth","ngCordova.plugins.pinDialog","ngCordova.plugins.prefs","ngCordova.plugins.printer","ngCordova.plugins.progressIndicator","ngCordova.plugins.push","ngCordova.plugins.sms","ngCordova.plugins.socialSharing","ngCordova.plugins.spinnerDialog","ngCordova.plugins.splashscreen","ngCordova.plugins.sqlite","ngCordova.plugins.statusbar","ngCordova.plugins.toast","ngCordova.plugins.touchid","ngCordova.plugins.vibration","ngCordova.plugins.videoCapturePlus","ngCordova.plugins.zip","ngCordova.plugins.insomnia"]),
+angular.module("ngCordova.plugins.mopubAds",[]).factory("$cordovaMoPubAds",["$q","$window",function(e,n){return{setOptions:function(t){var r=e.defer();return n.MoPub.setOptions(t,function(){r.resolve()},function(){r.reject()}),r.promise},createBanner:function(t){var r=e.defer();return n.MoPub.createBanner(t,function(){r.resolve()},function(){r.reject()}),r.promise},removeBanner:function(){var t=e.defer();return n.MoPub.removeBanner(function(){t.resolve()},function(){t.reject()}),t.promise},showBanner:function(t){var r=e.defer();return n.MoPub.showBanner(t,function(){r.resolve()},function(){r.reject()}),r.promise},showBannerAtXY:function(t,r){var o=e.defer();return n.MoPub.showBannerAtXY(t,r,function(){o.resolve()},function(){o.reject()}),o.promise},hideBanner:function(){var t=e.defer();return n.MoPub.hideBanner(function(){t.resolve()},function(){t.reject()}),t.promise},prepareInterstitial:function(t){var r=e.defer();return n.MoPub.prepareInterstitial(t,function(){r.resolve()},function(){r.reject()}),r.promise},showInterstitial:function(){var t=e.defer();return n.MoPub.showInterstitial(function(){t.resolve()},function(){t.reject()}),t.promise}}}]),angular.module("ngCordova.plugins.nativeAudio",[]).factory("$cordovaNativeAudio",["$q","$window",function(e,n){return{preloadSimple:function(t,r){var o=e.defer();return n.plugins.NativeAudio.preloadSimple(t,r,function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise},preloadComplex:function(t,r,o,i){var a=e.defer();return n.plugins.NativeAudio.preloadComplex(t,r,o,i,function(e){a.resolve(e)},function(e){a.reject(e)}),a.promise},play:function(t,r){var o=e.defer();return n.plugins.NativeAudio.play(t,r,function(e){o.reject(e)},function(e){o.resolve(e)}),o.promise},stop:function(t){var r=e.defer();return n.plugins.NativeAudio.stop(t,function(e){r.resolve(e)},function(e){r.reject(e)}),r.promise},loop:function(t){var r=e.defer();return n.plugins.NativeAudio.loop(t,function(e){r.resolve(e)},function(e){r.reject(e)}),r.promise},unload:function(t){var r=e.defer();return n.plugins.NativeAudio.unload(t,function(e){r.resolve(e)},function(e){r.reject(e)}),r.promise},setVolumeForComplexAsset:function(t,r){var o=e.defer();return n.plugins.NativeAudio.setVolumeForComplexAsset(t,r,function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise}}}]),angular.module("ngCordova.plugins.network",[]).factory("$cordovaNetwork",["$rootScope","$timeout",function(e,n){var t=function(){var t=navigator.connection.type;n(function(){e.$broadcast("$cordovaNetwork:offline",t)})},r=function(){var t=navigator.connection.type;n(function(){e.$broadcast("$cordovaNetwork:online",t)})};return document.addEventListener("deviceready",function(){navigator.connection&&(document.addEventListener("offline",t,!1),document.addEventListener("online",r,!1))}),{getNetwork:function(){return navigator.connection.type},isOnline:function(){var e=navigator.connection.type;return e!==Connection.UNKNOWN&&e!==Connection.NONE},isOffline:function(){var e=navigator.connection.type;return e===Connection.UNKNOWN||e===Connection.NONE},clearOfflineWatch:function(){document.removeEventListener("offline",t),e.$$listeners["$cordovaNetwork:offline"]=[]},clearOnlineWatch:function(){document.removeEventListener("online",r),e.$$listeners["$cordovaNetwork:online"]=[]}}}]).run(["$cordovaNetwork",function(e){}]),angular.module("ngCordova.plugins.pinDialog",[]).factory("$cordovaPinDialog",["$q","$window",function(e,n){return{prompt:function(t,r,o){var i=e.defer();return n.plugins.pinDialog.prompt(t,function(e){i.resolve(e)},r,o),i.promise}}}]),angular.module("ngCordova.plugins.prefs",[]).factory("$cordovaPreferences",["$window","$q",function(e,n){return{set:function(t,r){var o=n.defer();return e.appgiraffe.plugins.applicationPreferences.set(t,r,function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise},get:function(t){var r=n.defer();return e.appgiraffe.plugins.applicationPreferences.get(t,function(e){r.resolve(e)},function(e){r.reject(e)}),r.promise}}}]),angular.module("ngCordova.plugins.printer",[]).factory("$cordovaPrinter",["$q","$window",function(e,n){return{isAvailable:function(){var t=e.defer();return n.plugin.printer.isAvailable(function(e){t.resolve(e)}),t.promise},print:function(t,r){var o=e.defer();return n.plugin.printer.print(t,r,function(){o.resolve()}),o.promise}}}]),angular.module("ngCordova.plugins.progressIndicator",[]).factory("$cordovaProgress",["$q",function(e){return{show:function(e){var n=e||"Please wait...";return ProgressIndicator.show(n)},showSimple:function(e){var n=e||!1;return ProgressIndicator.showSimple(n)},showSimpleWithLabel:function(e,n){var t=e||!1,r=n||"Loading...";return ProgressIndicator.showSimpleWithLabel(t,r)},showSimpleWithLabelDetail:function(e,n,t){var r=e||!1,o=n||"Loading...",i=t||"Please wait";return ProgressIndicator.showSimpleWithLabelDetail(r,o,i)},showDeterminate:function(e,n){var t=e||!1,r=n||5e4;return ProgressIndicator.showDeterminate(t,r)},showDeterminateWithLabel:function(e,n,t){var r=e||!1,o=n||5e4,i=t||"Loading...";return ProgressIndicator.showDeterminateWithLabel(r,o,i)},showAnnular:function(e,n){var t=e||!1,r=n||5e4;return ProgressIndicator.showAnnular(t,r)},showAnnularWithLabel:function(e,n,t){var r=e||!1,o=n||5e4,i=t||"Loading...";return ProgressIndicator.showAnnularWithLabel(r,o,i)},showBar:function(e,n){var t=e||!1,r=n||5e4;return ProgressIndicator.showBar(t,r)},showBarWithLabel:function(e,n,t){var r=e||!1,o=n||5e4,i=t||"Loading...";return ProgressIndicator.showBarWithLabel(r,o,i)},showSuccess:function(e,n){var t=e||!1,r=n||"Success";return ProgressIndicator.showSuccess(t,r)},showText:function(e,n,t){var r=e||!1,o=n||"Warning",i=t||"center";return ProgressIndicator.showText(r,o,i)},hide:function(){return ProgressIndicator.hide()}}}]),angular.module("ngCordova.plugins.push",[]).factory("$cordovaPush",["$q","$window","$rootScope","$timeout",function(e,n,t,r){return{onNotification:function(e){r(function(){t.$broadcast("$cordovaPush:notificationReceived",e)})},register:function(t){var r,o=e.defer();return void 0!==t&&void 0===t.ecb&&(r=null===document.querySelector("[ng-app]")?"document.body":"document.querySelector('[ng-app]')",t.ecb="angular.element("+r+").injector().get('$cordovaPush').onNotification"),n.plugins.pushNotification.register(function(e){o.resolve(e)},function(e){o.reject(e)},t),o.promise},unregister:function(t){var r=e.defer();return n.plugins.pushNotification.unregister(function(e){r.resolve(e)},function(e){r.reject(e)},t),r.promise},setBadgeNumber:function(t){var r=e.defer();return n.plugins.pushNotification.setApplicationIconBadgeNumber(function(e){r.resolve(e)},function(e){r.reject(e)},t),r.promise}}}]),angular.module("ngCordova.plugins.sms",[]).factory("$cordovaSms",["$q",function(e){return{send:function(n,t,r){var o=e.defer();return sms.send(n,t,r,function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise}}}]),angular.module("ngCordova.plugins.socialSharing",[]).factory("$cordovaSocialSharing",["$q","$window",function(e,n){return{share:function(t,r,o,i){var a=e.defer();return r=r||null,o=o||null,i=i||null,n.plugins.socialsharing.share(t,r,o,i,function(){a.resolve(!0)},function(){a.reject(!1)}),a.promise},shareViaTwitter:function(t,r,o){var i=e.defer();return r=r||null,o=o||null,n.plugins.socialsharing.shareViaTwitter(t,r,o,function(){i.resolve(!0)},function(){i.reject(!1)}),i.promise},shareViaWhatsApp:function(t,r,o){var i=e.defer();return r=r||null,o=o||null,n.plugins.socialsharing.shareViaWhatsApp(t,r,o,function(){i.resolve(!0)},function(){i.reject(!1)}),i.promise},shareViaFacebook:function(t,r,o){var i=e.defer();return t=t||null,r=r||null,o=o||null,n.plugins.socialsharing.shareViaFacebook(t,r,o,function(){i.resolve(!0)},function(){i.reject(!1)}),i.promise},shareViaFacebookWithPasteMessageHint:function(t,r,o,i){var a=e.defer();return r=r||null,o=o||null,n.plugins.socialsharing.shareViaFacebookWithPasteMessageHint(t,r,o,i,function(){a.resolve(!0)},function(){a.reject(!1)}),a.promise},shareViaSMS:function(t,r){var o=e.defer();return n.plugins.socialsharing.shareViaSMS(t,r,function(){o.resolve(!0)},function(){o.reject(!1)}),o.promise},shareViaEmail:function(t,r,o,i,a,c){var s=e.defer();return o=o||null,i=i||null,a=a||null,c=c||null,n.plugins.socialsharing.shareViaEmail(t,r,o,i,a,c,function(){s.resolve(!0)},function(){s.reject(!1)}),s.promise},shareVia:function(t,r,o,i,a){var c=e.defer();return r=r||null,o=o||null,i=i||null,a=a||null,n.plugins.socialsharing.shareVia(t,r,o,i,a,function(){c.resolve(!0)},function(){c.reject(!1)}),c.promise},canShareViaEmail:function(){var t=e.defer();return n.plugins.socialsharing.canShareViaEmail(function(){t.resolve(!0)},function(){t.reject(!1)}),t.promise},canShareVia:function(t,r,o,i,a){var c=e.defer();return n.plugins.socialsharing.canShareVia(t,r,o,i,a,function(e){c.resolve(e)},function(e){c.reject(e)}),c.promise},available:function(){var n=e.defer();window.plugins.socialsharing.available(function(e){e?n.resolve():n.reject()})}}}]),angular.module("ngCordova.plugins.spinnerDialog",[]).factory("$cordovaSpinnerDialog",["$window",function(e){return{show:function(n,t,r){return r=r||!1,e.plugins.spinnerDialog.show(n,t,r)},hide:function(){return e.plugins.spinnerDialog.hide()}}}]),angular.module("ngCordova.plugins.splashscreen",[]).factory("$cordovaSplashscreen",[function(){return{hide:function(){return navigator.splashscreen.hide()},show:function(){return navigator.splashscreen.show()}}}]),angular.module("ngCordova.plugins.sqlite",[]).factory("$cordovaSQLite",["$q","$window",function(e,n){return{openDB:function(e,t){return"object"!=typeof e&&(e={name:e}),"undefined"!=typeof t&&(e.bgType=t),n.sqlitePlugin.openDatabase(e)},execute:function(n,t,r){var o=e.defer();return n.transaction(function(e){e.executeSql(t,r,function(e,n){o.resolve(n)},function(e,n){o.reject(n)})}),o.promise},insertCollection:function(n,t,r){var o=e.defer(),i=r.slice(0);return n.transaction(function(e){!function n(){var r=i.splice(0,1)[0];try{e.executeSql(t,r,function(e,t){0===i.length?o.resolve(t):n()},function(e,n){o.reject(n)})}catch(a){o.reject(a)}}()}),o.promise},nestedExecute:function(n,t,r,o,i){var a=e.defer();return n.transaction(function(e){e.executeSql(t,o,function(e,n){a.resolve(n),e.executeSql(r,i,function(e,n){a.resolve(n)})})},function(e,n){a.reject(n)}),a.promise},deleteDB:function(t){var r=e.defer();return n.sqlitePlugin.deleteDatabase(t,function(e){r.resolve(e)},function(e){r.reject(e)}),r.promise}}}]),angular.module("ngCordova.plugins.statusbar",[]).factory("$cordovaStatusbar",[function(){return{overlaysWebView:function(e){return StatusBar.overlaysWebView(!!e)},STYLES:{DEFAULT:0,LIGHT_CONTENT:1,BLACK_TRANSLUCENT:2,BLACK_OPAQUE:3},style:function(e){switch(e){case 0:return StatusBar.styleDefault();case 1:return StatusBar.styleLightContent();case 2:return StatusBar.styleBlackTranslucent();case 3:return StatusBar.styleBlackOpaque();default:return StatusBar.styleDefault()}},styleColor:function(e){return StatusBar.backgroundColorByName(e)},styleHex:function(e){return StatusBar.backgroundColorByHexString(e)},hide:function(){return StatusBar.hide()},show:function(){return StatusBar.show()},isVisible:function(){return StatusBar.isVisible}}}]),angular.module("ngCordova.plugins.toast",[]).factory("$cordovaToast",["$q","$window",function(e,n){return{showShortTop:function(t){var r=e.defer();return n.plugins.toast.showShortTop(t,function(e){r.resolve(e)},function(e){r.reject(e)}),r.promise},showShortCenter:function(t){var r=e.defer();return n.plugins.toast.showShortCenter(t,function(e){r.resolve(e)},function(e){r.reject(e)}),r.promise},showShortBottom:function(t){var r=e.defer();return n.plugins.toast.showShortBottom(t,function(e){r.resolve(e)},function(e){r.reject(e)}),r.promise},showLongTop:function(t){var r=e.defer();return n.plugins.toast.showLongTop(t,function(e){r.resolve(e)},function(e){r.reject(e)}),r.promise},showLongCenter:function(t){var r=e.defer();return n.plugins.toast.showLongCenter(t,function(e){r.resolve(e)},function(e){r.reject(e)}),r.promise},showLongBottom:function(t){var r=e.defer();return n.plugins.toast.showLongBottom(t,function(e){r.resolve(e)},function(e){r.reject(e)}),r.promise},show:function(t,r,o){var i=e.defer();return n.plugins.toast.show(t,r,o,function(e){i.resolve(e)},function(e){i.reject(e)}),i.promise}}}]),angular.module("ngCordova.plugins.touchid",[]).factory("$cordovaTouchID",["$q",function(e){return{checkSupport:function(){var n=e.defer();return window.cordova?touchid.checkSupport(function(e){n.resolve(e)},function(e){n.reject(e)}):n.reject("Not supported without cordova.js"),n.promise},authenticate:function(n){var t=e.defer();return window.cordova?touchid.authenticate(function(e){t.resolve(e)},function(e){t.reject(e)},n):t.reject("Not supported without cordova.js"),t.promise}}}]),angular.module("ngCordova.plugins.vibration",[]).factory("$cordovaVibration",[function(){return{vibrate:function(e){return navigator.notification.vibrate(e)},vibrateWithPattern:function(e,n){return navigator.notification.vibrateWithPattern(e,n)},cancelVibration:function(){return navigator.notification.cancelVibration()}}}]),angular.module("ngCordova.plugins.videoCapturePlus",[]).provider("$cordovaVideoCapturePlus",[function(){var e={};this.setLimit=function(n){e.limit=n},this.setMaxDuration=function(n){e.duration=n},this.setHighQuality=function(n){e.highquality=n},this.useFrontCamera=function(n){e.frontcamera=n},this.setPortraitOverlay=function(n){e.portraitOverlay=n},this.setLandscapeOverlay=function(n){e.landscapeOverlay=n},this.setOverlayText=function(n){e.overlayText=n},this.$get=["$q","$window",function(n,t){return{captureVideo:function(r){var o=n.defer();return t.plugins.videocaptureplus?(t.plugins.videocaptureplus.captureVideo(o.resolve,o.reject,angular.extend({},e,r)),o.promise):(o.resolve(null),o.promise)}}}]}]),angular.module("ngCordova.plugins.zip",[]).factory("$cordovaZip",["$q","$window",function(e,n){return{unzip:function(t,r){var o=e.defer();return n.zip.unzip(t,r,function(e){0===e?o.resolve():o.reject()},function(e){o.notify(e)}),o.promise}}}]),angular.module("oauth.providers",["oauth.utils"]).factory("$cordovaOauth",["$q","$http","$cordovaOauthUtility",function(e,n,t){return{adfs:function(r,o,i){var a=e.defer();if(window.cordova){var c=cordova.require("cordova/plugin_list").metadata;if(t.isInAppBrowserInstalled(c)===!0){var s=window.open(o+"/adfs/oauth2/authorize?response_type=code&client_id="+r+"&redirect_uri=http://localhost/callback&resource="+i,"_blank","location=no");s.addEventListener("loadstart",function(e){if(0===e.url.indexOf("http://localhost/callback")){var t=e.url.split("code=")[1];n.defaults.headers.post["Content-Type"]="application/x-www-form-urlencoded",n({method:"post",url:o+"/adfs/oauth2/token",data:"client_id="+r+"&code="+t+"&redirect_uri=http://localhost/callback&grant_type=authorization_code"}).success(function(e){a.resolve(e)}).error(function(e,n){a.reject("Problem authenticating")})["finally"](function(){setTimeout(function(){s.close()},10)})}}),s.addEventListener("exit",function(e){a.reject("The sign in flow was canceled")})}else a.reject("Could not find InAppBrowser plugin")}else a.reject("Cannot authenticate via a web browser");return a.promise},dropbox:function(n,r){var o=e.defer();if(window.cordova){var i=cordova.require("cordova/plugin_list").metadata;if(t.isInAppBrowserInstalled(i)===!0){var a="http://localhost/callback";void 0!==r&&r.hasOwnProperty("redirect_uri")&&(a=r.redirect_uri);var c=window.open("https://www.dropbox.com/1/oauth2/authorize?client_id="+n+"&redirect_uri="+a+"&response_type=token","_blank","location=no,clearsessioncache=yes,clearcache=yes");c.addEventListener("loadstart",function(e){if(0===e.url.indexOf(a)){c.removeEventListener("exit",function(e){}),c.close();for(var n=e.url.split("#")[1],t=n.split("&"),r=[],i=0;i<t.length;i++)r[t[i].split("=")[0]]=t[i].split("=")[1];void 0!==r.access_token&&null!==r.access_token?o.resolve({access_token:r.access_token,token_type:r.token_type,uid:r.uid}):o.reject("Problem authenticating")}}),c.addEventListener("exit",function(e){o.reject("The sign in flow was canceled")})}else o.reject("Could not find InAppBrowser plugin")}else o.reject("Cannot authenticate via a web browser");return o.promise},digitalOcean:function(r,o,i){var a=e.defer();if(window.cordova){var c=cordova.require("cordova/plugin_list").metadata;if(t.isInAppBrowserInstalled(c)===!0){var s="http://localhost/callback";void 0!==i&&i.hasOwnProperty("redirect_uri")&&(s=i.redirect_uri);var u=window.open("https://cloud.digitalocean.com/v1/oauth/authorize?client_id="+r+"&redirect_uri="+s+"&response_type=code&scope=read%20write","_blank","location=no,clearsessioncache=yes,clearcache=yes");u.addEventListener("loadstart",function(e){if(0===e.url.indexOf(s)){var t=e.url.split("code=")[1];n.defaults.headers.post["Content-Type"]="application/x-www-form-urlencoded",n({method:"post",url:"https://cloud.digitalocean.com/v1/oauth/token",data:"client_id="+r+"&client_secret="+o+"&redirect_uri="+s+"&grant_type=authorization_code&code="+t}).success(function(e){a.resolve(e)}).error(function(e,n){a.reject("Problem authenticating")})["finally"](function(){setTimeout(function(){u.close()},10)})}}),u.addEventListener("exit",function(e){a.reject("The sign in flow was canceled")})}else a.reject("Could not find InAppBrowser plugin")}else a.reject("Cannot authenticate via a web browser");return a.promise},google:function(n,r,o){var i=e.defer();if(window.cordova){var a=cordova.require("cordova/plugin_list").metadata;if(t.isInAppBrowserInstalled(a)===!0){var c="http://localhost/callback";void 0!==o&&o.hasOwnProperty("redirect_uri")&&(c=o.redirect_uri);var s=window.open("https://accounts.google.com/o/oauth2/auth?client_id="+n+"&redirect_uri="+c+"&scope="+r.join(" ")+"&approval_prompt=force&response_type=token","_blank","location=no,clearsessioncache=yes,clearcache=yes");s.addEventListener("loadstart",function(e){if(0===e.url.indexOf(c)){s.removeEventListener("exit",function(e){}),s.close();for(var n=e.url.split("#")[1],t=n.split("&"),r=[],o=0;o<t.length;o++)r[t[o].split("=")[0]]=t[o].split("=")[1];void 0!==r.access_token&&null!==r.access_token?i.resolve({access_token:r.access_token,token_type:r.token_type,expires_in:r.expires_in}):i.reject("Problem authenticating")}}),s.addEventListener("exit",function(e){i.reject("The sign in flow was canceled")})}else i.reject("Could not find InAppBrowser plugin")}else i.reject("Cannot authenticate via a web browser");return i.promise},github:function(r,o,i,a){var c=e.defer();if(window.cordova){var s=cordova.require("cordova/plugin_list").metadata;if(t.isInAppBrowserInstalled(s)===!0){var u="http://localhost/callback";void 0!==a&&a.hasOwnProperty("redirect_uri")&&(u=a.redirect_uri);var l=window.open("https://github.com/login/oauth/authorize?client_id="+r+"&redirect_uri="+u+"&scope="+i.join(","),"_blank","location=no,clearsessioncache=yes,clearcache=yes");l.addEventListener("loadstart",function(e){0===e.url.indexOf(u)&&(requestToken=e.url.split("code=")[1],n.defaults.headers.post["Content-Type"]="application/x-www-form-urlencoded",n.defaults.headers.post.accept="application/json",n({method:"post",url:"https://github.com/login/oauth/access_token",data:"client_id="+r+"&client_secret="+o+"&redirect_uri="+u+"&code="+requestToken}).success(function(e){c.resolve(e)}).error(function(e,n){c.reject("Problem authenticating")})["finally"](function(){setTimeout(function(){l.close()},10)}))}),l.addEventListener("exit",function(e){c.reject("The sign in flow was canceled")})}else c.reject("Could not find InAppBrowser plugin")}else c.reject("Cannot authenticate via a web browser");return c.promise},facebook:function(n,r,o){var i=e.defer();if(window.cordova){var a=cordova.require("cordova/plugin_list").metadata;if(t.isInAppBrowserInstalled(a)===!0){var c="http://localhost/callback";void 0!==o&&o.hasOwnProperty("redirect_uri")&&(c=o.redirect_uri);var s="https://www.facebook.com/v2.0/dialog/oauth?client_id="+n+"&redirect_uri="+c+"&response_type=token&scope="+r.join(",");void 0!==o&&o.hasOwnProperty("auth_type")&&(s+="&auth_type="+o.auth_type);var u=window.open(s,"_blank","location=no,clearsessioncache=yes,clearcache=yes");u.addEventListener("loadstart",function(e){if(0===e.url.indexOf(c)){u.removeEventListener("exit",function(e){}),u.close();for(var n=e.url.split("#")[1],t=n.split("&"),r=[],o=0;o<t.length;o++)r[t[o].split("=")[0]]=t[o].split("=")[1];void 0!==r.access_token&&null!==r.access_token?i.resolve({access_token:r.access_token,expires_in:r.expires_in}):0!==e.url.indexOf("error_code=100")?i.reject("Facebook returned error_code=100: Invalid permissions"):i.reject("Problem authenticating")}}),u.addEventListener("exit",function(e){i.reject("The sign in flow was canceled")})}else i.reject("Could not find InAppBrowser plugin")}else i.reject("Cannot authenticate via a web browser");return i.promise},linkedin:function(r,o,i,a,c){var s=e.defer();if(window.cordova){var u=cordova.require("cordova/plugin_list").metadata;if(t.isInAppBrowserInstalled(u)===!0){var l="http://localhost/callback";void 0!==c&&c.hasOwnProperty("redirect_uri")&&(l=c.redirect_uri);var d=window.open("https://www.linkedin.com/uas/oauth2/authorization?client_id="+r+"&redirect_uri="+l+"&scope="+i.join(" ")+"&response_type=code&state="+a,"_blank","location=no,clearsessioncache=yes,clearcache=yes");d.addEventListener("loadstart",function(e){0===e.url.indexOf(l)&&(requestToken=e.url.split("code=")[1],n.defaults.headers.post["Content-Type"]="application/x-www-form-urlencoded",n({method:"post",url:"https://www.linkedin.com/uas/oauth2/accessToken",data:"client_id="+r+"&client_secret="+o+"&redirect_uri="+l+"&grant_type=authorization_code&code="+requestToken}).success(function(e){s.resolve(e)}).error(function(e,n){s.reject("Problem authenticating")})["finally"](function(){setTimeout(function(){d.close()},10)}))}),d.addEventListener("exit",function(e){s.reject("The sign in flow was canceled")})}else s.reject("Could not find InAppBrowser plugin")}else s.reject("Cannot authenticate via a web browser");return s.promise},instagram:function(n,r,o){var i=e.defer(),a={code:"?",token:"#"};if(window.cordova){var c=cordova.require("cordova/plugin_list").metadata;if(t.isInAppBrowserInstalled(c)===!0){var s="http://localhost/callback",u="token";void 0!==o&&(o.hasOwnProperty("redirect_uri")&&(s=o.redirect_uri),o.hasOwnProperty("response_type")&&(u=o.response_type));var l=window.open("https://api.instagram.com/oauth/authorize/?client_id="+n+"&redirect_uri="+s+"&scope="+r.join(" ")+"&response_type="+u,"_blank","location=no,clearsessioncache=yes,clearcache=yes");l.addEventListener("loadstart",function(e){if(0===e.url.indexOf(s)){l.removeEventListener("exit",function(e){}),l.close();var n=e.url.split(a[u])[1],r=t.parseResponseParameters(n);void 0!==r.access_token&&null!==r.access_token?i.resolve({access_token:r.access_token}):void 0!==r.code&&null!==r.code?i.resolve({code:r.code}):i.reject("Problem authenticating")}}),l.addEventListener("exit",function(e){i.reject("The sign in flow was canceled")})}else i.reject("Could not find InAppBrowser plugin")}else i.reject("Cannot authenticate via a web browser");return i.promise},box:function(r,o,i,a){var c=e.defer();if(window.cordova){var s=cordova.require("cordova/plugin_list").metadata;if(t.isInAppBrowserInstalled(s)===!0){var u="http://localhost/callback";void 0!==a&&a.hasOwnProperty("redirect_uri")&&(u=a.redirect_uri);var l=window.open("https://app.box.com/api/oauth2/authorize/?client_id="+r+"&redirect_uri="+u+"&state="+i+"&response_type=code","_blank","location=no,clearsessioncache=yes,clearcache=yes");l.addEventListener("loadstart",function(e){0===e.url.indexOf(u)&&(requestToken=e.url.split("code=")[1],n.defaults.headers.post["Content-Type"]="application/x-www-form-urlencoded",n({method:"post",url:"https://app.box.com/api/oauth2/token",data:"client_id="+r+"&client_secret="+o+"&redirect_uri="+u+"&grant_type=authorization_code&code="+requestToken}).success(function(e){c.resolve(e)}).error(function(e,n){c.reject("Problem authenticating")})["finally"](function(){setTimeout(function(){l.close()},10)}))}),l.addEventListener("exit",function(e){c.reject("The sign in flow was canceled")})}else c.reject("Could not find InAppBrowser plugin")}else c.reject("Cannot authenticate via a web browser");return c.promise},reddit:function(r,o,i,a,c){var s=e.defer();if(window.cordova){var u=cordova.require("cordova/plugin_list").metadata;if(t.isInAppBrowserInstalled(u)===!0){var l="http://localhost/callback";void 0!==c&&c.hasOwnProperty("redirect_uri")&&(l=c.redirect_uri);var d=window.open("https://ssl.reddit.com/api/v1/authorize?client_id="+r+"&redirect_uri="+l+"&duration=permanent&state=ngcordovaoauth&scope="+i.join(",")+"&response_type=code","_blank","location=no,clearsessioncache=yes,clearcache=yes");d.addEventListener("loadstart",function(e){0===e.url.indexOf(l)&&(requestToken=e.url.split("code=")[1],n.defaults.headers.post["Content-Type"]="application/x-www-form-urlencoded",n.defaults.headers.post.Authorization="Basic "+btoa(r+":"+o),n({method:"post",url:"https://ssl.reddit.com/api/v1/access_token",data:"redirect_uri="+l+"&grant_type=authorization_code&code="+requestToken}).success(function(e){s.resolve(e)}).error(function(e,n){s.reject("Problem authenticating")})["finally"](function(){setTimeout(function(){d.close()},10)}))}),d.addEventListener("exit",function(e){s.reject("The sign in flow was canceled")})}else s.reject("Could not find InAppBrowser plugin")}else s.reject("Cannot authenticate via a web browser");return s.promise},twitter:function(r,o,i){var a=e.defer();if(window.cordova){var c=cordova.require("cordova/plugin_list").metadata;if(t.isInAppBrowserInstalled(c)===!0){var s="http://localhost/callback";if(void 0!==i&&i.hasOwnProperty("redirect_uri")&&(s=i.redirect_uri),"undefined"!=typeof jsSHA){var u={oauth_consumer_key:r,oauth_nonce:t.createNonce(10),oauth_signature_method:"HMAC-SHA1",oauth_timestamp:Math.round((new Date).getTime()/1e3),oauth_version:"1.0"},l=t.createSignature("POST","https://api.twitter.com/oauth/request_token",u,{oauth_callback:s},o);n({method:"post",url:"https://api.twitter.com/oauth/request_token",headers:{Authorization:l.authorization_header,"Content-Type":"application/x-www-form-urlencoded"},data:"oauth_callback="+encodeURIComponent(s)}).success(function(e){for(var r=e.split("&"),i={},c=0;c<r.length;c++)i[r[c].split("=")[0]]=r[c].split("=")[1];i.hasOwnProperty("oauth_token")===!1&&a.reject("Oauth request token was not received");var l=window.open("https://api.twitter.com/oauth/authenticate?oauth_token="+i.oauth_token,"_blank","location=no,clearsessioncache=yes,clearcache=yes");l.addEventListener("loadstart",function(e){if(0===e.url.indexOf(s)){for(var r=e.url.split("?")[1],i=r.split("&"),c={},d=0;d<i.length;d++)c[i[d].split("=")[0]]=i[d].split("=")[1];c.hasOwnProperty("oauth_verifier")===!1&&a.reject("Browser authentication failed to complete. No oauth_verifier was returned"),delete u.oauth_signature,u.oauth_token=c.oauth_token;var f=t.createSignature("POST","https://api.twitter.com/oauth/access_token",u,{oauth_verifier:c.oauth_verifier},o);n({method:"post",url:"https://api.twitter.com/oauth/access_token",headers:{Authorization:f.authorization_header},params:{oauth_verifier:c.oauth_verifier}}).success(function(e){for(var n=e.split("&"),t={},r=0;r<n.length;r++)t[n[r].split("=")[0]]=n[r].split("=")[1];t.hasOwnProperty("oauth_token_secret")===!1&&a.reject("Oauth access token was not received"),a.resolve(t)}).error(function(e){a.reject(e)})["finally"](function(){setTimeout(function(){l.close()},10)})}}),l.addEventListener("exit",function(e){a.reject("The sign in flow was canceled")})}).error(function(e){a.reject(e)})}else a.reject("Missing jsSHA JavaScript library")}else a.reject("Could not find InAppBrowser plugin")}else a.reject("Cannot authenticate via a web browser");return a.promise},meetup:function(n,r){var o=e.defer();if(window.cordova){var i=cordova.require("cordova/plugin_list").metadata;if(t.isInAppBrowserInstalled(i)===!0){var a="http://localhost/callback";void 0!==r&&r.hasOwnProperty("redirect_uri")&&(a=r.redirect_uri);var c=window.open("https://secure.meetup.com/oauth2/authorize/?client_id="+n+"&redirect_uri="+a+"&response_type=token","_blank","location=no,clearsessioncache=yes,clearcache=yes");c.addEventListener("loadstart",function(e){if(0===e.url.indexOf(a)){c.removeEventListener("exit",function(e){}),c.close();for(var n=e.url.split("#")[1],t=n.split("&"),r={},i=0;i<t.length;i++)r[t[i].split("=")[0]]=t[i].split("=")[1];void 0!==r.access_token&&null!==r.access_token?o.resolve(r):o.reject("Problem authenticating")}}),c.addEventListener("exit",function(e){o.reject("The sign in flow was canceled")})}else o.reject("Could not find InAppBrowser plugin")}else o.reject("Cannot authenticate via a web browser");return o.promise},salesforce:function(n,r){var o="http://localhost/callback",i=function(e,n,t){return e+"services/oauth2/authorize?display=touch&response_type=token&client_id="+escape(n)+"&redirect_uri="+escape(t)},a=function(e,n){return e.substr(0,n.length)===n},c=e.defer();if(window.cordova){var s=cordova.require("cordova/plugin_list").metadata;if(t.isInAppBrowserInstalled(s)===!0){var u=window.open(i(n,r,o),"_blank","location=no,clearsessioncache=yes,clearcache=yes");u.addEventListener("loadstart",function(e){if(a(e.url,o)){var n={},t=e.url.split("#")[1];if(t){var r=t.split("&");for(var i in r){var s=r[i].split("=");n[s[0]]=unescape(s[1])}}"undefined"==typeof n||"undefined"==typeof n.access_token?c.reject("Problem authenticating"):c.resolve(n),setTimeout(function(){u.close()},10)}}),u.addEventListener("exit",function(e){c.reject("The sign in flow was canceled")})}else c.reject("Could not find InAppBrowser plugin")}else c.reject("Cannot authenticate via a web browser");return c.promise},strava:function(r,o,i,a){var c=e.defer();if(window.cordova){var s=cordova.require("cordova/plugin_list").metadata;if(t.isInAppBrowserInstalled(s)===!0){var u="http://localhost/callback";void 0!==a&&a.hasOwnProperty("redirect_uri")&&(u=a.redirect_uri);var l=window.open("https://www.strava.com/oauth/authorize?client_id="+r+"&redirect_uri="+u+"&scope="+i.join(",")+"&response_type=code&approval_prompt=force","_blank","location=no,clearsessioncache=yes,clearcache=yes");l.addEventListener("loadstart",function(e){0===e.url.indexOf(u)&&(requestToken=e.url.split("code=")[1],n.defaults.headers.post["Content-Type"]="application/x-www-form-urlencoded",n({method:"post",url:"https://www.strava.com/oauth/token",data:"client_id="+r+"&client_secret="+o+"&code="+requestToken}).success(function(e){c.resolve(e)}).error(function(e,n){c.reject("Problem authenticating")})["finally"](function(){setTimeout(function(){l.close()},10)}))}),l.addEventListener("exit",function(e){c.reject("The sign in flow was canceled")})}else c.reject("Could not find InAppBrowser plugin")}else c.reject("Cannot authenticate via a web browser");return c.promise},withings:function(r,o){var i=e.defer();if(window.cordova){var a=cordova.require("cordova/plugin_list").metadata;if(t.isInAppBrowserInstalled(a)===!0)if("undefined"!=typeof jsSHA){var c=t.generateOauthParametersInstance(r);c.oauth_callback="http://localhost/callback";var s="https://oauth.withings.com/account/request_token",u=t.createSignature("GET",s,{},c,o);c.oauth_signature=u.signature;var l=t.generateUrlParameters(c);n({method:"get",url:s+"?"+l}).success(function(e){var a=t.parseResponseParameters(e);a.hasOwnProperty("oauth_token")===!1&&i.reject("Oauth request token was not received");var c=t.generateOauthParametersInstance(r);c.oauth_token=a.oauth_token;var s=a.oauth_token_secret,u="https://oauth.withings.com/account/authorize",l=t.createSignature("GET",u,{},c,o);c.oauth_signature=l.signature;var d=t.generateUrlParameters(c),f=window.open(u+"?"+d,"_blank","location=no,clearsessioncache=yes,clearcache=yes");f.addEventListener("loadstart",function(e){if(0===e.url.indexOf("http://localhost/callback")){
+var c=e.url.split("?")[1];a=t.parseResponseParameters(c),a.hasOwnProperty("oauth_verifier")===!1&&i.reject("Browser authentication failed to complete. No oauth_verifier was returned");var u=t.generateOauthParametersInstance(r);u.oauth_token=a.oauth_token;var l="https://oauth.withings.com/account/access_token",d=t.createSignature("GET",l,{},u,o,s);u.oauth_signature=d.signature;var p=t.generateUrlParameters(u);n({method:"get",url:l+"?"+p}).success(function(e){var n=t.parseResponseParameters(e);n.hasOwnProperty("oauth_token_secret")===!1&&i.reject("Oauth access token was not received"),i.resolve(n)}).error(function(e){i.reject(e)})["finally"](function(){setTimeout(function(){f.close()},10)})}}),f.addEventListener("exit",function(e){i.reject("The sign in flow was canceled")})}).error(function(e){i.reject(e)})}else i.reject("Missing jsSHA JavaScript library");else i.reject("Could not find InAppBrowser plugin")}else i.reject("Cannot authenticate via a web browser");return i.promise},foursquare:function(n,r){var o=e.defer();if(window.cordova){var i=cordova.require("cordova/plugin_list").metadata;if(t.isInAppBrowserInstalled(i)===!0){var a="http://localhost/callback";void 0!==r&&r.hasOwnProperty("redirect_uri")&&(a=r.redirect_uri);var c=window.open("https://foursquare.com/oauth2/authenticate?client_id="+n+"&redirect_uri="+a+"&response_type=token","_blank","location=no,clearsessioncache=yes,clearcache=yes");c.addEventListener("loadstart",function(e){if(0===e.url.indexOf(a)){c.removeEventListener("exit",function(e){}),c.close();for(var n=e.url.split("#")[1],t=n.split("&"),r=[],i=0;i<t.length;i++)r[t[i].split("=")[0]]=t[i].split("=")[1];if(void 0!==r.access_token&&null!==r.access_token){var s={access_token:r.access_token,expires_in:r.expires_in};o.resolve(s)}else o.reject("Problem authenticating")}}),c.addEventListener("exit",function(e){o.reject("The sign in flow was canceled")})}else o.reject("Could not find InAppBrowser plugin")}else o.reject("Cannot authenticate via a web browser");return o.promise},magento:function(r,o,i){var a=e.defer();if(window.cordova){var c=cordova.require("cordova/plugin_list").metadata;if(t.isInAppBrowserInstalled(c)===!0)if("undefined"!=typeof jsSHA){var s={oauth_callback:"http://localhost/callback",oauth_consumer_key:o,oauth_nonce:t.createNonce(5),oauth_signature_method:"HMAC-SHA1",oauth_timestamp:Math.round((new Date).getTime()/1e3),oauth_version:"1.0"},u=t.createSignature("POST",r+"/oauth/initiate",s,{oauth_callback:"http://localhost/callback"},i);n.defaults.headers.post.Authorization=u.authorization_header,n.defaults.headers.post["Content-Type"]="application/x-www-form-urlencoded",n({method:"post",url:r+"/oauth/initiate",data:"oauth_callback=http://localhost/callback"}).success(function(e){for(var o=e.split("&"),c={},u=0;u<o.length;u++)c[o[u].split("=")[0]]=o[u].split("=")[1];c.hasOwnProperty("oauth_token")===!1&&a.reject("Oauth request token was not received");var l=c.oauth_token_secret,d=window.open(r+"/oauth/authorize?oauth_token="+c.oauth_token,"_blank","location=no,clearsessioncache=yes,clearcache=yes");d.addEventListener("loadstart",function(e){if(0===e.url.indexOf("http://localhost/callback")){for(var o=e.url.split("?")[1],c=o.split("&"),u={},f=0;f<c.length;f++)u[c[f].split("=")[0]]=c[f].split("=")[1];u.hasOwnProperty("oauth_verifier")===!1&&a.reject("Browser authentication failed to complete. No oauth_verifier was returned"),delete s.oauth_signature,delete s.oauth_callback,s.oauth_token=u.oauth_token,s.oauth_nonce=t.createNonce(5),s.oauth_verifier=u.oauth_verifier;var p=t.createSignature("POST",r+"/oauth/token",s,{},i,l);n.defaults.headers.post.Authorization=p.authorization_header,n.defaults.headers.post["Content-Type"]="application/x-www-form-urlencoded",n({method:"post",url:r+"/oauth/token"}).success(function(e){for(var n=e.split("&"),t={},r=0;r<n.length;r++)t[n[r].split("=")[0]]=n[r].split("=")[1];t.hasOwnProperty("oauth_token_secret")===!1&&a.reject("Oauth access token was not received"),a.resolve(t)}).error(function(e){a.reject(e)})["finally"](function(){setTimeout(function(){d.close()},10)})}}),d.addEventListener("exit",function(e){a.reject("The sign in flow was canceled")})}).error(function(e){a.reject(e)})}else a.reject("Missing jsSHA JavaScript library");else a.reject("Could not find InAppBrowser plugin")}else a.reject("Cannot authenticate via a web browser");return a.promise},vkontakte:function(n,r){var o=e.defer();if(window.cordova){var i=cordova.require("cordova/plugin_list").metadata;if(t.isInAppBrowserInstalled(i)===!0){var a=window.open("https://oauth.vk.com/authorize?client_id="+n+"&redirect_uri=http://oauth.vk.com/blank.html&response_type=token&scope="+r.join(",")+"&display=touch&response_type=token","_blank","location=no,clearsessioncache=yes,clearcache=yes");a.addEventListener("loadstart",function(e){var n=e.url.split("#");if("https://oauth.vk.com/blank.html"==n[0]||"http://oauth.vk.com/blank.html"==n[0]){a.removeEventListener("exit",function(e){}),a.close();for(var t=e.url.split("#")[1],r=t.split("&"),i=[],c=0;c<r.length;c++)i[r[c].split("=")[0]]=r[c].split("=")[1];if(void 0!==i.access_token&&null!==i.access_token){var s={access_token:i.access_token,expires_in:i.expires_in};void 0!==i.email&&null!==i.email&&(s.email=i.email),o.resolve(s)}else o.reject("Problem authenticating")}}),a.addEventListener("exit",function(e){o.reject("The sign in flow was canceled")})}else o.reject("Could not find InAppBrowser plugin")}else o.reject("Cannot authenticate via a web browser");return o.promise},odnoklassniki:function(n,r){var o=e.defer();if(window.cordova){var i=cordova.require("cordova/plugin_list").metadata;if(t.isInAppBrowserInstalled(i)===!0){var a=window.open("http://www.odnoklassniki.ru/oauth/authorize?client_id="+n+"&scope="+r.join(",")+"&response_type=token&redirect_uri=http://localhost/callback&layout=m","_blank","location=no,clearsessioncache=yes,clearcache=yes");a.addEventListener("loadstart",function(e){if(0===e.url.indexOf("http://localhost/callback")){for(var n=e.url.split("#")[1],t=n.split("&"),r=[],i=0;i<t.length;i++)r[t[i].split("=")[0]]=t[i].split("=")[1];void 0!==r.access_token&&null!==r.access_token?o.resolve({access_token:r.access_token,session_secret_key:r.session_secret_key}):o.reject("Problem authenticating"),setTimeout(function(){a.close()},10)}}),a.addEventListener("exit",function(e){o.reject("The sign in flow was canceled")})}else o.reject("Could not find InAppBrowser plugin")}else o.reject("Cannot authenticate via a web browser");return o.promise},imgur:function(n,r){var o=e.defer();if(window.cordova){var i=cordova.require("cordova/plugin_list").metadata;if(t.isInAppBrowserInstalled(i)===!0){var a="http://localhost/callback";void 0!==r&&r.hasOwnProperty("redirect_uri")&&(a=r.redirect_uri);var c=window.open("https://api.imgur.com/oauth2/authorize?client_id="+n+"&response_type=token","_blank","location=no,clearsessioncache=yes,clearcache=yes");c.addEventListener("loadstart",function(e){if(0===e.url.indexOf(a)){c.removeEventListener("exit",function(e){}),c.close();for(var n=e.url.split("#")[1],t=n.split("&"),r=[],i=0;i<t.length;i++)r[t[i].split("=")[0]]=t[i].split("=")[1];void 0!==r.access_token&&null!==r.access_token?o.resolve({access_token:r.access_token,expires_in:r.expires_in,account_username:r.account_username}):o.reject("Problem authenticating")}}),c.addEventListener("exit",function(e){o.reject("The sign in flow was canceled")})}else o.reject("Could not find InAppBrowser plugin")}else o.reject("Cannot authenticate via a web browser");return o.promise},spotify:function(n,r,o){var i=e.defer();if(window.cordova){var a=cordova.require("cordova/plugin_list").metadata;if(t.isInAppBrowserInstalled(a)===!0){var c="http://localhost/callback";void 0!==o&&o.hasOwnProperty("redirect_uri")&&(c=o.redirect_uri);var s=window.open("https://accounts.spotify.com/authorize?client_id="+n+"&redirect_uri="+c+"&response_type=token&scope="+r.join(" "),"_blank","location=no,clearsessioncache=yes,clearcache=yes");s.addEventListener("loadstart",function(e){if(0===e.url.indexOf(c)){s.removeEventListener("exit",function(e){}),s.close();for(var n=e.url.split("#")[1],t=n.split("&"),r=[],o=0;o<t.length;o++)r[t[o].split("=")[0]]=t[o].split("=")[1];void 0!==r.access_token&&null!==r.access_token?i.resolve({access_token:r.access_token,expires_in:r.expires_in,account_username:r.account_username}):i.reject("Problem authenticating")}}),s.addEventListener("exit",function(e){i.reject("The sign in flow was canceled")})}else i.reject("Could not find InAppBrowser plugin")}else i.reject("Cannot authenticate via a web browser");return i.promise},uber:function(n,r,o){var i=e.defer();if(window.cordova){var a=cordova.require("cordova/plugin_list").metadata;if(t.isInAppBrowserInstalled(a)===!0){var c="http://localhost/callback";void 0!==o&&o.hasOwnProperty("redirect_uri")&&(c=o.redirect_uri);var s=window.open("https://login.uber.com/oauth/authorize?client_id="+n+"&redirect_uri="+c+"&response_type=token&scope="+r.join(" "),"_blank","location=no,clearsessioncache=yes,clearcache=yes");s.addEventListener("loadstart",function(e){if(0===e.url.indexOf(c)){s.removeEventListener("exit",function(e){}),s.close();for(var n=e.url.split("#")[1],t=n.split("&"),r=[],o=0;o<t.length;o++)r[t[o].split("=")[0]]=t[o].split("=")[1];void 0!==r.access_token&&null!==r.access_token?i.resolve({access_token:r.access_token,token_type:r.token_type,expires_in:r.expires_in,scope:r.scope}):i.reject("Problem authenticating")}}),s.addEventListener("exit",function(e){i.reject("The sign in flow was canceled")})}else i.reject("Could not find InAppBrowser plugin")}else i.reject("Cannot authenticate via a web browser");return i.promise},windowsLive:function(n,r,o){var i=e.defer();if(window.cordova){var a=cordova.require("cordova/plugin_list").metadata;if(t.isInAppBrowserInstalled(a)===!0){var c="https://login.live.com/oauth20_desktop.srf";void 0!==o&&o.hasOwnProperty("redirect_uri")&&(c=o.redirect_uri);var s=window.open("https://login.live.com/oauth20_authorize.srf?client_id="+n+"&scope="+r.join(",")+"&response_type=token&display=touch&redirect_uri="+c,"_blank","location=no,clearsessioncache=yes,clearcache=yes");s.addEventListener("loadstart",function(e){if(0===e.url.indexOf(c)){s.removeEventListener("exit",function(e){}),s.close();for(var n=e.url.split("#")[1],t=n.split("&"),r=[],o=0;o<t.length;o++)r[t[o].split("=")[0]]=t[o].split("=")[1];void 0!==r.access_token&&null!==r.access_token?i.resolve({access_token:r.access_token,expires_in:r.expires_in}):i.reject("Problem authenticating")}}),s.addEventListener("exit",function(e){i.reject("The sign in flow was canceled")})}else i.reject("Could not find InAppBrowser plugin")}else i.reject("Cannot authenticate via a web browser");return i.promise},yammer:function(n,r){var o=e.defer();if(window.cordova){var i=cordova.require("cordova/plugin_list").metadata;if(t.isInAppBrowserInstalled(i)===!0){var a="http://localhost/callback";void 0!==r&&r.hasOwnProperty("redirect_uri")&&(a=r.redirect_uri);var c=window.open("https://www.yammer.com/dialog/oauth?client_id="+n+"&redirect_uri="+a+"&response_type=token","_blank","location=no,clearsessioncache=yes,clearcache=yes");c.addEventListener("loadstart",function(e){if(0===e.url.indexOf(a)){c.removeEventListener("exit",function(e){}),c.close();for(var n=e.url.split("#")[1],t=n.split("&"),r=[],i=0;i<t.length;i++)r[t[i].split("=")[0]]=t[i].split("=")[1];void 0!==r.access_token&&null!==r.access_token?o.resolve({access_token:r.access_token}):o.reject("Problem authenticating")}}),c.addEventListener("exit",function(e){o.reject("The sign in flow was canceled")})}else o.reject("Could not find InAppBrowser plugin")}else o.reject("Cannot authenticate via a web browser");return o.promise},venmo:function(n,r,o){var i=e.defer();if(window.cordova){var a=cordova.require("cordova/plugin_list").metadata;if(t.isInAppBrowserInstalled(a)===!0){var c="http://localhost/callback";void 0!==o&&o.hasOwnProperty("redirect_uri")&&(c=o.redirect_uri);var s=window.open("https://api.venmo.com/v1/oauth/authorize?client_id="+n+"&redirect_uri="+c+"&response_type=token&scope="+r.join(" "),"_blank","location=no,clearsessioncache=yes,clearcache=yes");s.addEventListener("loadstart",function(e){if(0===e.url.indexOf(c)){s.removeEventListener("exit",function(e){}),s.close();for(var n=e.url.split("#")[1],t=n.split("&"),r=[],o=0;o<t.length;o++)r[t[o].split("=")[0]]=t[o].split("=")[1];void 0!==r.access_token&&null!==r.access_token?i.resolve({access_token:r.access_token,expires_in:r.expires_in}):i.reject("Problem authenticating")}}),s.addEventListener("exit",function(e){i.reject("The sign in flow was canceled")})}else i.reject("Could not find InAppBrowser plugin")}else i.reject("Cannot authenticate via a web browser");return i.promise},stripe:function(r,o,i,a){var c=e.defer();if(window.cordova){var s=cordova.require("cordova/plugin_list").metadata;if(t.isInAppBrowserInstalled(s)===!0){var u="http://localhost/callback";void 0!==a&&a.hasOwnProperty("redirect_uri")&&(u=a.redirect_uri);var l=window.open("https://connect.stripe.com/oauth/authorize?client_id="+r+"&redirect_uri="+u+"&scope="+i+"&response_type=code","_blank","location=no,clearsessioncache=yes,clearcache=yes");l.addEventListener("loadstart",function(e){0===e.url.indexOf("http://localhost/callback")&&(requestToken=e.url.split("code=")[1],n.defaults.headers.post["Content-Type"]="application/x-www-form-urlencoded",n({method:"post",url:"https://connect.stripe.com/oauth/token",data:"client_id="+r+"&client_secret="+o+"&redirect_uri="+u+"&grant_type=authorization_code&code="+requestToken}).success(function(e){c.resolve(e)}).error(function(e,n){c.reject("Problem authenticating")})["finally"](function(){setTimeout(function(){l.close()},10)}))}),l.addEventListener("exit",function(e){c.reject("The sign in flow was canceled")})}else c.reject("Could not find InAppBrowser plugin")}else c.reject("Cannot authenticate via a web browser");return c.promise},rally:function(r,o,i,a){var c=e.defer();if(window.cordova){var s=cordova.require("cordova/plugin_list").metadata;if(t.isInAppBrowserInstalled(s)===!0){var u="http://localhost/callback";void 0!==a&&a.hasOwnProperty("redirect_uri")&&(u=a.redirect_uri);var l=window.open("https://rally1.rallydev.com/login/oauth2/auth?client_id="+r+"&redirect_uri="+u+"&scope="+i+"&response_type=code","_blank","location=no,clearsessioncache=yes,clearcache=yes");l.addEventListener("loadstart",function(e){0===e.url.indexOf("http://localhost/callback")&&(requestToken=e.url.split("code=")[1],n.defaults.headers.post["Content-Type"]="application/x-www-form-urlencoded",n({method:"post",url:"https://rally1.rallydev.com/login/oauth2/auth",data:"client_id="+r+"&client_secret="+o+"&redirect_uri="+u+"&grant_type=authorization_code&code="+requestToken}).success(function(e){c.resolve(e)}).error(function(e,n){c.reject("Problem authenticating")})["finally"](function(){setTimeout(function(){l.close()},10)}))}),l.addEventListener("exit",function(e){c.reject("The sign in flow was canceled")})}else c.reject("Could not find InAppBrowser plugin")}else c.reject("Cannot authenticate via a web browser");return c.promise},familySearch:function(t,r,o){var i=e.defer();if(window.cordova){var a=cordova.require("cordova/plugin_list").metadata;if(a.hasOwnProperty("cordova-plugin-inappbrowser")===!0){var c="http://localhost/callback";void 0!==o&&o.hasOwnProperty("redirect_uri")&&(c=o.redirect_uri);var s=window.open("https://ident.familysearch.org/cis-web/oauth2/v3/authorization?client_id="+t+"&redirect_uri="+c+"&response_type=code&state="+r,"_blank","location=no,clearsessioncache=yes,clearcache=yes");s.addEventListener("loadstart",function(e){if(0===e.url.indexOf(c)){var r=e.url.split("code=")[1];n.defaults.headers.post["Content-Type"]="application/x-www-form-urlencoded",n({method:"post",url:"https://ident.familysearch.org/cis-web/oauth2/v3/token",data:"client_id="+t+"&redirect_uri="+c+"&grant_type=authorization_code&code="+r}).success(function(e){i.resolve(e)}).error(function(e,n){i.reject("Problem authenticating")})["finally"](function(){setTimeout(function(){s.close()},10)})}}),s.addEventListener("exit",function(e){i.reject("The sign in flow was canceled")})}else i.reject("Could not find InAppBrowser plugin")}else i.reject("Cannot authenticate via a web browser");return i.promise},envato:function(n,r){var o=e.defer();if(window.cordova){var i=cordova.require("cordova/plugin_list").metadata;if(t.isInAppBrowserInstalled(i)===!0){var a="http://localhost/callback";void 0!==r&&r.hasOwnProperty("redirect_uri")&&(a=r.redirect_uri);var c=window.open("https://api.envato.com/authorization?client_id="+n+"&redirect_uri="+a+"&response_type=token","_blank","location=no,clearsessioncache=yes,clearcache=yes");c.addEventListener("loadstart",function(e){if(0===e.url.indexOf(a)){c.removeEventListener("exit",function(e){}),c.close();for(var n=e.url.split("#")[1],t=n.split("&"),r=[],i=0;i<t.length;i++)r[t[i].split("=")[0]]=t[i].split("=")[1];void 0!==r.access_token&&null!==r.access_token?o.resolve({access_token:r.access_token,expires_in:r.expires_in}):o.reject("Problem authenticating")}}),c.addEventListener("exit",function(e){o.reject("The sign in flow was canceled")})}else o.reject("Could not find InAppBrowser plugin")}else o.reject("Cannot authenticate via a web browser");return o.promise}}}]),angular.module("ngCordovaOauth",["oauth.providers","oauth.utils"]),angular.module("oauth.utils",[]).factory("$cordovaOauthUtility",["$q",function(e){return{isInAppBrowserInstalled:function(e){var n=["cordova-plugin-inappbrowser","org.apache.cordova.inappbrowser"];return n.some(function(n){return e.hasOwnProperty(n)})},createSignature:function(e,n,t,r,o,i){if("undefined"!=typeof jsSHA){for(var a=angular.copy(t),c=Object.keys(r),s=0;s<c.length;s++)a[c[s]]=encodeURIComponent(r[c[s]]);var u=e+"&"+encodeURIComponent(n)+"&",l=Object.keys(a).sort();for(s=0;s<l.length;s++)u+=s==l.length-1?encodeURIComponent(l[s]+"="+a[l[s]]):encodeURIComponent(l[s]+"="+a[l[s]]+"&");var d=new jsSHA(u,"TEXT"),f="";i&&(f=encodeURIComponent(i)),t.oauth_signature=encodeURIComponent(d.getHMAC(encodeURIComponent(o)+"&"+f,"TEXT","SHA-1","B64"));var p=Object.keys(t),v="OAuth ";for(s=0;s<p.length;s++)v+=s==p.length-1?p[s]+'="'+t[p[s]]+'"':p[s]+'="'+t[p[s]]+'",';return{signature_base_string:u,authorization_header:v,signature:t.oauth_signature}}return"Missing jsSHA JavaScript library"},createNonce:function(e){for(var n="",t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",r=0;e>r;r++)n+=t.charAt(Math.floor(Math.random()*t.length));return n},generateUrlParameters:function(e){var n=Object.keys(e);n.sort();for(var t="",r="",o=0;o<n.length;o++)t+=r+n[o]+"="+e[n[o]],r="&";return t},parseResponseParameters:function(e){if(e.split){for(var n=e.split("&"),t={},r=0;r<n.length;r++)t[n[r].split("=")[0]]=n[r].split("=")[1];return t}return{}},generateOauthParametersInstance:function(e){var n=new jsSHA(Math.round((new Date).getTime()/1e3),"TEXT"),t={oauth_consumer_key:e,oauth_nonce:n.getHash("SHA-1","HEX"),oauth_signature_method:"HMAC-SHA1",oauth_timestamp:Math.round((new Date).getTime()/1e3),oauth_version:"1.0"};return t}}}])}(); \ No newline at end of file