9004 lines
306 KiB
JavaScript
9004 lines
306 KiB
JavaScript
/*!
|
||
* ngCordova
|
||
* v0.1.23-alpha
|
||
* Copyright 2015 Drifty Co. http://drifty.com/
|
||
* See LICENSE in this repository for license information
|
||
*/
|
||
(function(){
|
||
|
||
angular.module('ngCordova', [
|
||
'ngCordova.plugins'
|
||
]);
|
||
|
||
// install : cordova plugin add https://github.com/EddyVerbruggen/cordova-plugin-actionsheet.git
|
||
// link : https://github.com/EddyVerbruggen/cordova-plugin-actionsheet
|
||
|
||
angular.module('ngCordova.plugins.actionSheet', [])
|
||
|
||
.factory('$cordovaActionSheet', ['$q', '$window', function ($q, $window) {
|
||
|
||
return {
|
||
show: function (options) {
|
||
var q = $q.defer();
|
||
|
||
$window.plugins.actionsheet.show(options, function (result) {
|
||
q.resolve(result);
|
||
});
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
hide: function () {
|
||
return $window.plugins.actionsheet.hide();
|
||
}
|
||
};
|
||
}]);
|
||
|
||
// install : cordova plugin add https://github.com/floatinghotpot/cordova-plugin-admob.git
|
||
// link : https://github.com/floatinghotpot/cordova-plugin-admob
|
||
|
||
angular.module('ngCordova.plugins.adMob', [])
|
||
|
||
.factory('$cordovaAdMob', ['$q', '$window', function ($q, $window) {
|
||
|
||
return {
|
||
createBannerView: function (options) {
|
||
var d = $q.defer();
|
||
|
||
$window.plugins.AdMob.createBannerView(options, function () {
|
||
d.resolve();
|
||
}, function () {
|
||
d.reject();
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
createInterstitialView: function (options) {
|
||
var d = $q.defer();
|
||
|
||
$window.plugins.AdMob.createInterstitialView(options, function () {
|
||
d.resolve();
|
||
}, function () {
|
||
d.reject();
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
requestAd: function (options) {
|
||
var d = $q.defer();
|
||
|
||
$window.plugins.AdMob.requestAd(options, function () {
|
||
d.resolve();
|
||
}, function () {
|
||
d.reject();
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
showAd: function (options) {
|
||
var d = $q.defer();
|
||
|
||
$window.plugins.AdMob.showAd(options, function () {
|
||
d.resolve();
|
||
}, function () {
|
||
d.reject();
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
requestInterstitialAd: function (options) {
|
||
var d = $q.defer();
|
||
|
||
$window.plugins.AdMob.requestInterstitialAd(options, function () {
|
||
d.resolve();
|
||
}, function () {
|
||
d.reject();
|
||
});
|
||
|
||
return d.promise;
|
||
}
|
||
};
|
||
}]);
|
||
|
||
// install : cordova plugin add https://github.com/ohh2ahh/AppAvailability.git
|
||
// link : https://github.com/ohh2ahh/AppAvailability
|
||
|
||
/* globals appAvailability: true */
|
||
angular.module('ngCordova.plugins.appAvailability', [])
|
||
|
||
.factory('$cordovaAppAvailability', ['$q', function ($q) {
|
||
|
||
return {
|
||
check: function (urlScheme) {
|
||
var q = $q.defer();
|
||
|
||
appAvailability.check(urlScheme, function (result) {
|
||
q.resolve(result);
|
||
}, function (err) {
|
||
q.reject(err);
|
||
});
|
||
|
||
return q.promise;
|
||
}
|
||
};
|
||
}]);
|
||
|
||
// install : cordova plugin add https://github.com/pushandplay/cordova-plugin-apprate.git
|
||
// link : https://github.com/pushandplay/cordova-plugin-apprate
|
||
|
||
/* globals AppRate: true */
|
||
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;
|
||
}
|
||
|
||
AppRate.preferences.useLanguage = defaults.language || null;
|
||
AppRate.preferences.displayAppName = defaults.appName || '';
|
||
AppRate.preferences.promptAgainForEachNewVersion = defaults.promptForNewVersion || true;
|
||
AppRate.preferences.openStoreInApp = defaults.openStoreInApp || false;
|
||
AppRate.preferences.usesUntilPrompt = defaults.usesUntilPrompt || 3;
|
||
AppRate.preferences.useCustomRateDialog = defaults.useCustomRateDialog || false;
|
||
AppRate.preferences.storeAppURL.ios = defaults.iosURL || null;
|
||
AppRate.preferences.storeAppURL.android = defaults.androidURL || null;
|
||
AppRate.preferences.storeAppURL.blackberry = defaults.blackberryURL || null;
|
||
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 %@',
|
||
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'
|
||
};
|
||
|
||
strings = angular.extend(strings, customObj);
|
||
|
||
AppRate.preferences.customLocale = strings;
|
||
};
|
||
|
||
this.$get = ['$q', function ($q) {
|
||
return {
|
||
promptForRating: function (immediate) {
|
||
var q = $q.defer();
|
||
var prompt = AppRate.promptForRating(immediate);
|
||
q.resolve(prompt);
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
navigateToAppStore: function () {
|
||
var q = $q.defer();
|
||
var navigate = AppRate.navigateToAppStore();
|
||
q.resolve(navigate);
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
onButtonClicked: function (cb) {
|
||
AppRate.onButtonClicked = function (buttonIndex) {
|
||
cb.call(this, buttonIndex);
|
||
};
|
||
},
|
||
|
||
onRateDialogShow: function (cb) {
|
||
AppRate.onRateDialogShow = cb();
|
||
}
|
||
};
|
||
}];
|
||
}]);
|
||
|
||
// install : cordova plugin add https://github.com/whiteoctober/cordova-plugin-app-version.git
|
||
// link : https://github.com/whiteoctober/cordova-plugin-app-version
|
||
|
||
angular.module('ngCordova.plugins.appVersion', [])
|
||
|
||
.factory('$cordovaAppVersion', ['$q', function ($q) {
|
||
|
||
return {
|
||
getVersionNumber: function () {
|
||
var q = $q.defer();
|
||
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;
|
||
}
|
||
};
|
||
}]);
|
||
|
||
// install : cordova plugin add https://github.com/christocracy/cordova-plugin-background-geolocation.git
|
||
// link : https://github.com/christocracy/cordova-plugin-background-geolocation
|
||
|
||
angular.module('ngCordova.plugins.backgroundGeolocation', [])
|
||
|
||
.factory('$cordovaBackgroundGeolocation', ['$q', '$window', function ($q, $window) {
|
||
|
||
return {
|
||
|
||
init: function () {
|
||
$window.navigator.geolocation.getCurrentPosition(function (location) {
|
||
return location;
|
||
});
|
||
},
|
||
|
||
configure: function (options) {
|
||
|
||
this.init();
|
||
var q = $q.defer();
|
||
|
||
$window.plugins.backgroundGeoLocation.configure(
|
||
function (result) {
|
||
q.notify(result);
|
||
$window.plugins.backgroundGeoLocation.finish();
|
||
},
|
||
function (err) {
|
||
q.reject(err);
|
||
}, options);
|
||
|
||
this.start();
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
start: function () {
|
||
var q = $q.defer();
|
||
|
||
$window.plugins.backgroundGeoLocation.start(
|
||
function (result) {
|
||
q.resolve(result);
|
||
},
|
||
function (err) {
|
||
q.reject(err);
|
||
});
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
stop: function () {
|
||
var q = $q.defer();
|
||
|
||
$window.plugins.backgroundGeoLocation.stop(
|
||
function (result) {
|
||
q.resolve(result);
|
||
},
|
||
function (err) {
|
||
q.reject(err);
|
||
});
|
||
|
||
return q.promise;
|
||
}
|
||
};
|
||
}
|
||
|
||
]);
|
||
|
||
// install : cordova plugin add https://github.com/katzer/cordova-plugin-badge.git
|
||
// link : https://github.com/katzer/cordova-plugin-badge
|
||
|
||
angular.module('ngCordova.plugins.badge', [])
|
||
|
||
.factory('$cordovaBadge', ['$q', function ($q) {
|
||
|
||
return {
|
||
hasPermission: function () {
|
||
var q = $q.defer();
|
||
cordova.plugins.notification.badge.hasPermission(function (permission) {
|
||
if (permission) {
|
||
q.resolve(true);
|
||
} else {
|
||
q.reject('You do not have permission');
|
||
}
|
||
});
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
promptForPermission: function () {
|
||
return cordova.plugins.notification.badge.promptForPermission();
|
||
},
|
||
|
||
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(badge, callback, scope)
|
||
);
|
||
} else {
|
||
q.reject('You do not have permission to set Badge');
|
||
}
|
||
});
|
||
return q.promise;
|
||
},
|
||
|
||
get: function () {
|
||
var q = $q.defer();
|
||
cordova.plugins.notification.badge.hasPermission(function (permission) {
|
||
if (permission) {
|
||
cordova.plugins.notification.badge.get(function (badge) {
|
||
q.resolve(badge);
|
||
});
|
||
} else {
|
||
q.reject('You do not have permission to get Badge');
|
||
}
|
||
});
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
clear: function (callback, scope) {
|
||
var q = $q.defer();
|
||
|
||
cordova.plugins.notification.badge.hasPermission(function (permission) {
|
||
if (permission) {
|
||
q.resolve(cordova.plugins.notification.badge.clear(callback, scope));
|
||
} else {
|
||
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);
|
||
}
|
||
};
|
||
}]);
|
||
|
||
// install : cordova plugin add https://github.com/wildabeast/BarcodeScanner.git
|
||
// link : https://github.com/wildabeast/BarcodeScanner
|
||
|
||
angular.module('ngCordova.plugins.barcodeScanner', [])
|
||
|
||
.factory('$cordovaBarcodeScanner', ['$q', function ($q) {
|
||
|
||
return {
|
||
scan: function (config) {
|
||
var q = $q.defer();
|
||
|
||
cordova.plugins.barcodeScanner.scan(function (result) {
|
||
q.resolve(result);
|
||
}, function (err) {
|
||
q.reject(err);
|
||
}, config);
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
encode: function (type, data) {
|
||
var q = $q.defer();
|
||
type = type || 'TEXT_TYPE';
|
||
|
||
cordova.plugins.barcodeScanner.encode(type, data, function (result) {
|
||
q.resolve(result);
|
||
}, function (err) {
|
||
q.reject(err);
|
||
});
|
||
|
||
return q.promise;
|
||
}
|
||
};
|
||
}]);
|
||
|
||
// install : cordova plugin add cordova-plugin-battery-status
|
||
// link : https://github.com/apache/cordova-plugin-battery-status
|
||
|
||
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);
|
||
});
|
||
};
|
||
|
||
document.addEventListener('deviceready', function () {
|
||
if (navigator.battery) {
|
||
$window.addEventListener('batterystatus', batteryStatus, false);
|
||
$window.addEventListener('batterycritical', batteryCritical, false);
|
||
$window.addEventListener('batterylow', batteryLow, false);
|
||
|
||
}
|
||
}, false);
|
||
return true;
|
||
}])
|
||
.run(['$injector', function ($injector) {
|
||
$injector.get('$cordovaBatteryStatus'); //ensure the factory and subsequent event listeners get initialised
|
||
}]);
|
||
|
||
// install : cordova plugin add https://github.com/petermetz/cordova-plugin-ibeacon.git
|
||
// link : https://github.com/petermetz/cordova-plugin-ibeacon
|
||
|
||
angular.module('ngCordova.plugins.beacon', [])
|
||
|
||
.factory('$cordovaBeacon', ['$window', '$rootScope', '$timeout', '$q', function ($window, $rootScope, $timeout, $q) {
|
||
var callbackDidDetermineStateForRegion = null;
|
||
var callbackDidStartMonitoringForRegion = null;
|
||
var callbackDidExitRegion = null;
|
||
var callbackDidEnterRegion = null;
|
||
var callbackDidRangeBeaconsInRegion = null;
|
||
var callbackPeripheralManagerDidStartAdvertising = null;
|
||
var callbackPeripheralManagerDidUpdateState = null;
|
||
var callbackDidChangeAuthorizationStatus = null;
|
||
|
||
document.addEventListener('deviceready', function () {
|
||
if ($window.cordova &&
|
||
$window.cordova.plugins &&
|
||
$window.cordova.plugins.locationManager) {
|
||
var delegate = new $window.cordova.plugins.locationManager.Delegate();
|
||
|
||
delegate.didDetermineStateForRegion = function (pluginResult) {
|
||
$timeout(function () {
|
||
$rootScope.$broadcast('$cordovaBeacon:didDetermineStateForRegion', pluginResult);
|
||
});
|
||
|
||
if (callbackDidDetermineStateForRegion) {
|
||
callbackDidDetermineStateForRegion(pluginResult);
|
||
}
|
||
};
|
||
|
||
delegate.didStartMonitoringForRegion = function (pluginResult) {
|
||
$timeout(function () {
|
||
$rootScope.$broadcast('$cordovaBeacon:didStartMonitoringForRegion', pluginResult);
|
||
});
|
||
|
||
if (callbackDidStartMonitoringForRegion) {
|
||
callbackDidStartMonitoringForRegion(pluginResult);
|
||
}
|
||
};
|
||
|
||
delegate.didExitRegion = function (pluginResult) {
|
||
$timeout(function () {
|
||
$rootScope.$broadcast('$cordovaBeacon:didExitRegion', pluginResult);
|
||
});
|
||
|
||
if (callbackDidExitRegion) {
|
||
callbackDidExitRegion(pluginResult);
|
||
}
|
||
};
|
||
|
||
delegate.didEnterRegion = function (pluginResult) {
|
||
$timeout(function () {
|
||
$rootScope.$broadcast('$cordovaBeacon:didEnterRegion', pluginResult);
|
||
});
|
||
|
||
if (callbackDidEnterRegion) {
|
||
callbackDidEnterRegion(pluginResult);
|
||
}
|
||
};
|
||
|
||
delegate.didRangeBeaconsInRegion = function (pluginResult) {
|
||
$timeout(function () {
|
||
$rootScope.$broadcast('$cordovaBeacon:didRangeBeaconsInRegion', pluginResult);
|
||
});
|
||
|
||
if (callbackDidRangeBeaconsInRegion) {
|
||
callbackDidRangeBeaconsInRegion(pluginResult);
|
||
}
|
||
};
|
||
|
||
delegate.peripheralManagerDidStartAdvertising = function (pluginResult) {
|
||
$timeout(function () {
|
||
$rootScope.$broadcast('$cordovaBeacon:peripheralManagerDidStartAdvertising', pluginResult);
|
||
});
|
||
|
||
if (callbackPeripheralManagerDidStartAdvertising) {
|
||
callbackPeripheralManagerDidStartAdvertising(pluginResult);
|
||
}
|
||
};
|
||
|
||
delegate.peripheralManagerDidUpdateState = function (pluginResult) {
|
||
$timeout(function () {
|
||
$rootScope.$broadcast('$cordovaBeacon:peripheralManagerDidUpdateState', pluginResult);
|
||
});
|
||
|
||
if (callbackPeripheralManagerDidUpdateState) {
|
||
callbackPeripheralManagerDidUpdateState(pluginResult);
|
||
}
|
||
};
|
||
|
||
delegate.didChangeAuthorizationStatus = function (status) {
|
||
$timeout(function () {
|
||
$rootScope.$broadcast('$cordovaBeacon:didChangeAuthorizationStatus', status);
|
||
});
|
||
|
||
if (callbackDidChangeAuthorizationStatus) {
|
||
callbackDidChangeAuthorizationStatus(status);
|
||
}
|
||
};
|
||
|
||
$window.cordova.plugins.locationManager.setDelegate(delegate);
|
||
}
|
||
}, false);
|
||
|
||
return {
|
||
setCallbackDidDetermineStateForRegion: function (callback) {
|
||
callbackDidDetermineStateForRegion = callback;
|
||
},
|
||
setCallbackDidStartMonitoringForRegion: function (callback) {
|
||
callbackDidStartMonitoringForRegion = callback;
|
||
},
|
||
setCallbackDidExitRegion: function (callback) {
|
||
callbackDidExitRegion = callback;
|
||
},
|
||
setCallbackDidEnterRegion: function (callback) {
|
||
callbackDidEnterRegion = callback;
|
||
},
|
||
setCallbackDidRangeBeaconsInRegion: function (callback) {
|
||
callbackDidRangeBeaconsInRegion = callback;
|
||
},
|
||
setCallbackPeripheralManagerDidStartAdvertising: function (callback) {
|
||
callbackPeripheralManagerDidStartAdvertising = callback;
|
||
},
|
||
setCallbackPeripheralManagerDidUpdateState: function (callback) {
|
||
callbackPeripheralManagerDidUpdateState = callback;
|
||
},
|
||
setCallbackDidChangeAuthorizationStatus: function (callback) {
|
||
callbackDidChangeAuthorizationStatus = callback;
|
||
},
|
||
createBeaconRegion: function (identifier, uuid, major, minor, notifyEntryStateOnDisplay) {
|
||
major = major || undefined;
|
||
minor = minor || undefined;
|
||
|
||
return new $window.cordova.plugins.locationManager.BeaconRegion(
|
||
identifier,
|
||
uuid,
|
||
major,
|
||
minor,
|
||
notifyEntryStateOnDisplay
|
||
);
|
||
},
|
||
isBluetoothEnabled: function () {
|
||
return $q.when($window.cordova.plugins.locationManager.isBluetoothEnabled());
|
||
},
|
||
enableBluetooth: function () {
|
||
return $q.when($window.cordova.plugins.locationManager.enableBluetooth());
|
||
},
|
||
disableBluetooth: function () {
|
||
return $q.when($window.cordova.plugins.locationManager.disableBluetooth());
|
||
},
|
||
startMonitoringForRegion: function (region) {
|
||
return $q.when($window.cordova.plugins.locationManager.startMonitoringForRegion(region));
|
||
},
|
||
stopMonitoringForRegion: function (region) {
|
||
return $q.when($window.cordova.plugins.locationManager.stopMonitoringForRegion(region));
|
||
},
|
||
requestStateForRegion: function (region) {
|
||
return $q.when($window.cordova.plugins.locationManager.requestStateForRegion(region));
|
||
},
|
||
startRangingBeaconsInRegion: function (region) {
|
||
return $q.when($window.cordova.plugins.locationManager.startRangingBeaconsInRegion(region));
|
||
},
|
||
stopRangingBeaconsInRegion: function (region) {
|
||
return $q.when($window.cordova.plugins.locationManager.stopRangingBeaconsInRegion(region));
|
||
},
|
||
getAuthorizationStatus: function () {
|
||
return $q.when($window.cordova.plugins.locationManager.getAuthorizationStatus());
|
||
},
|
||
requestWhenInUseAuthorization: function () {
|
||
return $q.when($window.cordova.plugins.locationManager.requestWhenInUseAuthorization());
|
||
},
|
||
requestAlwaysAuthorization: function () {
|
||
return $q.when($window.cordova.plugins.locationManager.requestAlwaysAuthorization());
|
||
},
|
||
getMonitoredRegions: function () {
|
||
return $q.when($window.cordova.plugins.locationManager.getMonitoredRegions());
|
||
},
|
||
getRangedRegions: function () {
|
||
return $q.when($window.cordova.plugins.locationManager.getRangedRegions());
|
||
},
|
||
isRangingAvailable: function () {
|
||
return $q.when($window.cordova.plugins.locationManager.isRangingAvailable());
|
||
},
|
||
isMonitoringAvailableForClass: function (region) {
|
||
return $q.when($window.cordova.plugins.locationManager.isMonitoringAvailableForClass(region));
|
||
},
|
||
startAdvertising: function (region, measuredPower) {
|
||
return $q.when($window.cordova.plugins.locationManager.startAdvertising(region, measuredPower));
|
||
},
|
||
stopAdvertising: function () {
|
||
return $q.when($window.cordova.plugins.locationManager.stopAdvertising());
|
||
},
|
||
isAdvertisingAvailable: function () {
|
||
return $q.when($window.cordova.plugins.locationManager.isAdvertisingAvailable());
|
||
},
|
||
isAdvertising: function () {
|
||
return $q.when($window.cordova.plugins.locationManager.isAdvertising());
|
||
},
|
||
disableDebugLogs: function () {
|
||
return $q.when($window.cordova.plugins.locationManager.disableDebugLogs());
|
||
},
|
||
enableDebugNotifications: function () {
|
||
return $q.when($window.cordova.plugins.locationManager.enableDebugNotifications());
|
||
},
|
||
disableDebugNotifications: function () {
|
||
return $q.when($window.cordova.plugins.locationManager.disableDebugNotifications());
|
||
},
|
||
enableDebugLogs: function () {
|
||
return $q.when($window.cordova.plugins.locationManager.enableDebugLogs());
|
||
},
|
||
appendToDeviceLog: function (message) {
|
||
return $q.when($window.cordova.plugins.locationManager.appendToDeviceLog(message));
|
||
}
|
||
};
|
||
}]);
|
||
|
||
// install : cordova plugin add https://github.com/don/cordova-plugin-ble-central.git
|
||
// link : https://github.com/don/cordova-plugin-ble-central
|
||
|
||
/* globals ble: true */
|
||
angular.module('ngCordova.plugins.ble', [])
|
||
|
||
.factory('$cordovaBLE', ['$q', '$timeout', function ($q, $timeout) {
|
||
|
||
return {
|
||
scan: function (services, seconds) {
|
||
var q = $q.defer();
|
||
|
||
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;
|
||
},
|
||
|
||
connect: function (deviceID) {
|
||
var q = $q.defer();
|
||
ble.connect(deviceID, function (result) {
|
||
q.resolve(result);
|
||
}, function (error) {
|
||
q.reject(error);
|
||
});
|
||
return q.promise;
|
||
},
|
||
|
||
disconnect: function (deviceID) {
|
||
var q = $q.defer();
|
||
ble.disconnect(deviceID, function (result) {
|
||
q.resolve(result);
|
||
}, function (error) {
|
||
q.reject(error);
|
||
});
|
||
return q.promise;
|
||
},
|
||
|
||
read: function (deviceID, serviceUUID, characteristicUUID) {
|
||
var q = $q.defer();
|
||
ble.read(deviceID, serviceUUID, characteristicUUID, function (result) {
|
||
q.resolve(result);
|
||
}, function (error) {
|
||
q.reject(error);
|
||
});
|
||
return q.promise;
|
||
},
|
||
|
||
write: function (deviceID, serviceUUID, characteristicUUID, data) {
|
||
var q = $q.defer();
|
||
ble.write(deviceID, serviceUUID, characteristicUUID, data, function (result) {
|
||
q.resolve(result);
|
||
}, function (error) {
|
||
q.reject(error);
|
||
});
|
||
return q.promise;
|
||
},
|
||
|
||
writeCommand: function (deviceID, serviceUUID, characteristicUUID, data) {
|
||
var q = $q.defer();
|
||
ble.writeCommand(deviceID, serviceUUID, characteristicUUID, data, function (result) {
|
||
q.resolve(result);
|
||
}, function (error) {
|
||
q.reject(error);
|
||
});
|
||
return q.promise;
|
||
},
|
||
|
||
startNotification: function (deviceID, serviceUUID, characteristicUUID) {
|
||
var q = $q.defer();
|
||
ble.startNotification(deviceID, serviceUUID, characteristicUUID, function (result) {
|
||
q.resolve(result);
|
||
}, function (error) {
|
||
q.reject(error);
|
||
});
|
||
return q.promise;
|
||
},
|
||
|
||
stopNotification: function (deviceID, serviceUUID, characteristicUUID) {
|
||
var q = $q.defer();
|
||
ble.stopNotification(deviceID, serviceUUID, characteristicUUID, function (result) {
|
||
q.resolve(result);
|
||
}, function (error) {
|
||
q.reject(error);
|
||
});
|
||
return q.promise;
|
||
},
|
||
|
||
isConnected: function (deviceID) {
|
||
var q = $q.defer();
|
||
ble.isConnected(deviceID, function (result) {
|
||
q.resolve(result);
|
||
}, function (error) {
|
||
q.reject(error);
|
||
});
|
||
return q.promise;
|
||
},
|
||
|
||
isEnabled: function () {
|
||
var q = $q.defer();
|
||
ble.isEnabled(function (result) {
|
||
q.resolve(result);
|
||
}, function (error) {
|
||
q.reject(error);
|
||
});
|
||
return q.promise;
|
||
}
|
||
};
|
||
}]);
|
||
|
||
// install : cordova plugin add https://github.com/don/BluetoothSerial.git
|
||
// link : https://github.com/don/BluetoothSerial
|
||
|
||
angular.module('ngCordova.plugins.bluetoothSerial', [])
|
||
|
||
.factory('$cordovaBluetoothSerial', ['$q', '$window', function ($q, $window) {
|
||
|
||
return {
|
||
connect: function (address) {
|
||
var q = $q.defer();
|
||
var disconnectionPromise = $q.defer();
|
||
var isConnected = false;
|
||
$window.bluetoothSerial.connect(address, function () {
|
||
isConnected = true;
|
||
q.resolve(disconnectionPromise);
|
||
}, function (error) {
|
||
if(isConnected === false) {
|
||
disconnectionPromise.reject(error);
|
||
}
|
||
q.reject(error);
|
||
});
|
||
return q.promise;
|
||
},
|
||
|
||
// not supported on iOS
|
||
connectInsecure: function (address) {
|
||
var q = $q.defer();
|
||
$window.bluetoothSerial.connectInsecure(address, function () {
|
||
q.resolve();
|
||
}, function (error) {
|
||
q.reject(error);
|
||
});
|
||
return q.promise;
|
||
},
|
||
|
||
disconnect: function () {
|
||
var q = $q.defer();
|
||
$window.bluetoothSerial.disconnect(function () {
|
||
q.resolve();
|
||
}, function (error) {
|
||
q.reject(error);
|
||
});
|
||
return q.promise;
|
||
},
|
||
|
||
list: function () {
|
||
var q = $q.defer();
|
||
$window.bluetoothSerial.list(function (data) {
|
||
q.resolve(data);
|
||
}, function (error) {
|
||
q.reject(error);
|
||
});
|
||
return q.promise;
|
||
},
|
||
|
||
discoverUnpaired: function () {
|
||
var q = $q.defer();
|
||
$window.bluetoothSerial.discoverUnpaired(function (data) {
|
||
q.resolve(data);
|
||
}, function (error) {
|
||
q.reject(error);
|
||
});
|
||
return q.promise;
|
||
},
|
||
|
||
setDeviceDiscoveredListener: function () {
|
||
var q = $q.defer();
|
||
$window.bluetoothSerial.setDeviceDiscoveredListener(function (data) {
|
||
q.notify(data);
|
||
});
|
||
return q.promise;
|
||
},
|
||
|
||
clearDeviceDiscoveredListener: function () {
|
||
$window.bluetoothSerial.clearDeviceDiscoveredListener();
|
||
},
|
||
|
||
showBluetoothSettings: function () {
|
||
var q = $q.defer();
|
||
$window.bluetoothSerial.showBluetoothSettings(function () {
|
||
q.resolve();
|
||
}, function (error) {
|
||
q.reject(error);
|
||
});
|
||
return q.promise;
|
||
},
|
||
|
||
isEnabled: function () {
|
||
var q = $q.defer();
|
||
$window.bluetoothSerial.isEnabled(function () {
|
||
q.resolve();
|
||
}, function () {
|
||
q.reject();
|
||
});
|
||
return q.promise;
|
||
},
|
||
|
||
enable: function () {
|
||
var q = $q.defer();
|
||
$window.bluetoothSerial.enable(function () {
|
||
q.resolve();
|
||
}, function () {
|
||
q.reject();
|
||
});
|
||
return q.promise;
|
||
},
|
||
|
||
isConnected: function () {
|
||
var q = $q.defer();
|
||
$window.bluetoothSerial.isConnected(function () {
|
||
q.resolve();
|
||
}, function () {
|
||
q.reject();
|
||
});
|
||
return q.promise;
|
||
},
|
||
|
||
available: function () {
|
||
var q = $q.defer();
|
||
$window.bluetoothSerial.available(function (data) {
|
||
q.resolve(data);
|
||
}, function (error) {
|
||
q.reject(error);
|
||
});
|
||
return q.promise;
|
||
},
|
||
|
||
read: function () {
|
||
var q = $q.defer();
|
||
$window.bluetoothSerial.read(function (data) {
|
||
q.resolve(data);
|
||
}, function (error) {
|
||
q.reject(error);
|
||
});
|
||
return q.promise;
|
||
},
|
||
|
||
readUntil: function (delimiter) {
|
||
var q = $q.defer();
|
||
$window.bluetoothSerial.readUntil(delimiter, function (data) {
|
||
q.resolve(data);
|
||
}, function (error) {
|
||
q.reject(error);
|
||
});
|
||
return q.promise;
|
||
},
|
||
|
||
write: function (data) {
|
||
var q = $q.defer();
|
||
$window.bluetoothSerial.write(data, function () {
|
||
q.resolve();
|
||
}, function (error) {
|
||
q.reject(error);
|
||
});
|
||
return q.promise;
|
||
},
|
||
|
||
subscribe: function (delimiter) {
|
||
var q = $q.defer();
|
||
$window.bluetoothSerial.subscribe(delimiter, function (data) {
|
||
q.notify(data);
|
||
}, function (error) {
|
||
q.reject(error);
|
||
});
|
||
return q.promise;
|
||
},
|
||
|
||
subscribeRawData: function () {
|
||
var q = $q.defer();
|
||
$window.bluetoothSerial.subscribeRawData(function (data) {
|
||
q.notify(data);
|
||
}, function (error) {
|
||
q.reject(error);
|
||
});
|
||
return q.promise;
|
||
},
|
||
|
||
unsubscribe: function () {
|
||
var q = $q.defer();
|
||
$window.bluetoothSerial.unsubscribe(function () {
|
||
q.resolve();
|
||
}, function (error) {
|
||
q.reject(error);
|
||
});
|
||
return q.promise;
|
||
},
|
||
|
||
unsubscribeRawData: function () {
|
||
var q = $q.defer();
|
||
$window.bluetoothSerial.unsubscribeRawData(function () {
|
||
q.resolve();
|
||
}, function (error) {
|
||
q.reject(error);
|
||
});
|
||
return q.promise;
|
||
},
|
||
|
||
clear: function () {
|
||
var q = $q.defer();
|
||
$window.bluetoothSerial.clear(function () {
|
||
q.resolve();
|
||
}, function (error) {
|
||
q.reject(error);
|
||
});
|
||
return q.promise;
|
||
},
|
||
|
||
readRSSI: function () {
|
||
var q = $q.defer();
|
||
$window.bluetoothSerial.readRSSI(function (data) {
|
||
q.resolve(data);
|
||
}, function (error) {
|
||
q.reject(error);
|
||
});
|
||
return q.promise;
|
||
}
|
||
};
|
||
}]);
|
||
|
||
// install : cordova plugin add https://github.com/fiscal-cliff/phonegap-plugin-brightness.git
|
||
// link : https://github.com/fiscal-cliff/phonegap-plugin-brightness
|
||
|
||
angular.module('ngCordova.plugins.brightness', [])
|
||
|
||
.factory('$cordovaBrightness', ['$q', '$window', function ($q, $window) {
|
||
|
||
return {
|
||
get: function () {
|
||
var q = $q.defer();
|
||
|
||
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;
|
||
},
|
||
|
||
set: function (data) {
|
||
var q = $q.defer();
|
||
|
||
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;
|
||
},
|
||
|
||
setKeepScreenOn: function (bool) {
|
||
var q = $q.defer();
|
||
|
||
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;
|
||
}
|
||
};
|
||
}]);
|
||
|
||
|
||
// install : cordova plugin add https://github.com/EddyVerbruggen/Calendar-PhoneGap-Plugin.git
|
||
// link : https://github.com/EddyVerbruggen/Calendar-PhoneGap-Plugin
|
||
|
||
angular.module('ngCordova.plugins.calendar', [])
|
||
|
||
.factory('$cordovaCalendar', ['$q', '$window', function ($q, $window) {
|
||
|
||
return {
|
||
createCalendar: function (options) {
|
||
var d = $q.defer(),
|
||
createCalOptions = $window.plugins.calendar.getCreateCalendarOptions();
|
||
|
||
if (typeof options === 'string') {
|
||
createCalOptions.calendarName = options;
|
||
} else {
|
||
createCalOptions = angular.extend(createCalOptions, options);
|
||
}
|
||
|
||
$window.plugins.calendar.createCalendar(createCalOptions, function (message) {
|
||
d.resolve(message);
|
||
}, function (error) {
|
||
d.reject(error);
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
deleteCalendar: function (calendarName) {
|
||
var d = $q.defer();
|
||
|
||
$window.plugins.calendar.deleteCalendar(calendarName, function (message) {
|
||
d.resolve(message);
|
||
}, function (error) {
|
||
d.reject(error);
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
createEvent: function (options) {
|
||
var d = $q.defer(),
|
||
defaultOptions = {
|
||
title: null,
|
||
location: null,
|
||
notes: null,
|
||
startDate: null,
|
||
endDate: null
|
||
};
|
||
|
||
defaultOptions = angular.extend(defaultOptions, options);
|
||
|
||
$window.plugins.calendar.createEvent(
|
||
defaultOptions.title,
|
||
defaultOptions.location,
|
||
defaultOptions.notes,
|
||
new Date(defaultOptions.startDate),
|
||
new Date(defaultOptions.endDate),
|
||
function (message) {
|
||
d.resolve(message);
|
||
}, function (error) {
|
||
d.reject(error);
|
||
}
|
||
);
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
createEventWithOptions: function (options) {
|
||
var d = $q.defer(),
|
||
defaultOptionKeys = [],
|
||
calOptions = window.plugins.calendar.getCalendarOptions(),
|
||
defaultOptions = {
|
||
title: null,
|
||
location: null,
|
||
notes: null,
|
||
startDate: null,
|
||
endDate: null
|
||
};
|
||
|
||
defaultOptionKeys = Object.keys(defaultOptions);
|
||
|
||
for (var key in options) {
|
||
if (defaultOptionKeys.indexOf(key) === -1) {
|
||
calOptions[key] = options[key];
|
||
} else {
|
||
defaultOptions[key] = options[key];
|
||
}
|
||
}
|
||
|
||
$window.plugins.calendar.createEventWithOptions(
|
||
defaultOptions.title,
|
||
defaultOptions.location,
|
||
defaultOptions.notes,
|
||
new Date(defaultOptions.startDate),
|
||
new Date(defaultOptions.endDate),
|
||
calOptions,
|
||
function (message) {
|
||
d.resolve(message);
|
||
}, function (error) {
|
||
d.reject(error);
|
||
}
|
||
);
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
createEventInteractively: function (options) {
|
||
var d = $q.defer(),
|
||
defaultOptions = {
|
||
title: null,
|
||
location: null,
|
||
notes: null,
|
||
startDate: null,
|
||
endDate: null
|
||
};
|
||
|
||
defaultOptions = angular.extend(defaultOptions, options);
|
||
|
||
$window.plugins.calendar.createEventInteractively(
|
||
defaultOptions.title,
|
||
defaultOptions.location,
|
||
defaultOptions.notes,
|
||
new Date(defaultOptions.startDate),
|
||
new Date(defaultOptions.endDate),
|
||
function (message) {
|
||
d.resolve(message);
|
||
}, function (error) {
|
||
d.reject(error);
|
||
}
|
||
);
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
createEventInNamedCalendar: function (options) {
|
||
var d = $q.defer(),
|
||
defaultOptions = {
|
||
title: null,
|
||
location: null,
|
||
notes: null,
|
||
startDate: null,
|
||
endDate: null,
|
||
calendarName: null
|
||
};
|
||
|
||
defaultOptions = angular.extend(defaultOptions, options);
|
||
|
||
$window.plugins.calendar.createEventInNamedCalendar(
|
||
defaultOptions.title,
|
||
defaultOptions.location,
|
||
defaultOptions.notes,
|
||
new Date(defaultOptions.startDate),
|
||
new Date(defaultOptions.endDate),
|
||
defaultOptions.calendarName,
|
||
function (message) {
|
||
d.resolve(message);
|
||
}, function (error) {
|
||
d.reject(error);
|
||
}
|
||
);
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
findEvent: function (options) {
|
||
var d = $q.defer(),
|
||
defaultOptions = {
|
||
title: null,
|
||
location: null,
|
||
notes: null,
|
||
startDate: null,
|
||
endDate: null
|
||
};
|
||
|
||
defaultOptions = angular.extend(defaultOptions, options);
|
||
|
||
$window.plugins.calendar.findEvent(
|
||
defaultOptions.title,
|
||
defaultOptions.location,
|
||
defaultOptions.notes,
|
||
new Date(defaultOptions.startDate),
|
||
new Date(defaultOptions.endDate),
|
||
function (foundEvent) {
|
||
d.resolve(foundEvent);
|
||
}, function (error) {
|
||
d.reject(error);
|
||
}
|
||
);
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
listEventsInRange: function (startDate, endDate) {
|
||
var d = $q.defer();
|
||
|
||
$window.plugins.calendar.listEventsInRange(startDate, endDate, function (events) {
|
||
d.resolve(events);
|
||
}, function (error) {
|
||
d.reject(error);
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
listCalendars: function () {
|
||
var d = $q.defer();
|
||
|
||
$window.plugins.calendar.listCalendars(function (calendars) {
|
||
d.resolve(calendars);
|
||
}, function (error) {
|
||
d.reject(error);
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
findAllEventsInNamedCalendar: function (calendarName) {
|
||
var d = $q.defer();
|
||
|
||
$window.plugins.calendar.findAllEventsInNamedCalendar(calendarName, function (events) {
|
||
d.resolve(events);
|
||
}, function (error) {
|
||
d.reject(error);
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
modifyEvent: function (options) {
|
||
var d = $q.defer(),
|
||
defaultOptions = {
|
||
title: null,
|
||
location: null,
|
||
notes: null,
|
||
startDate: null,
|
||
endDate: null,
|
||
newTitle: null,
|
||
newLocation: null,
|
||
newNotes: null,
|
||
newStartDate: null,
|
||
newEndDate: null
|
||
};
|
||
|
||
defaultOptions = angular.extend(defaultOptions, options);
|
||
|
||
$window.plugins.calendar.modifyEvent(
|
||
defaultOptions.title,
|
||
defaultOptions.location,
|
||
defaultOptions.notes,
|
||
new Date(defaultOptions.startDate),
|
||
new Date(defaultOptions.endDate),
|
||
defaultOptions.newTitle,
|
||
defaultOptions.newLocation,
|
||
defaultOptions.newNotes,
|
||
new Date(defaultOptions.newStartDate),
|
||
new Date(defaultOptions.newEndDate),
|
||
function (message) {
|
||
d.resolve(message);
|
||
}, function (error) {
|
||
d.reject(error);
|
||
}
|
||
);
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
deleteEvent: function (options) {
|
||
var d = $q.defer(),
|
||
defaultOptions = {
|
||
newTitle: null,
|
||
location: null,
|
||
notes: null,
|
||
startDate: null,
|
||
endDate: null
|
||
};
|
||
|
||
defaultOptions = angular.extend(defaultOptions, options);
|
||
|
||
$window.plugins.calendar.deleteEvent(
|
||
defaultOptions.newTitle,
|
||
defaultOptions.location,
|
||
defaultOptions.notes,
|
||
new Date(defaultOptions.startDate),
|
||
new Date(defaultOptions.endDate),
|
||
function (message) {
|
||
d.resolve(message);
|
||
}, function (error) {
|
||
d.reject(error);
|
||
}
|
||
);
|
||
|
||
return d.promise;
|
||
}
|
||
};
|
||
}]);
|
||
|
||
// install : cordova plugin add cordova-plugin-camera
|
||
// link : https://github.com/apache/cordova-plugin-camera
|
||
|
||
angular.module('ngCordova.plugins.camera', [])
|
||
|
||
.factory('$cordovaCamera', ['$q', function ($q) {
|
||
|
||
return {
|
||
getPicture: function (options) {
|
||
var q = $q.defer();
|
||
|
||
if (!navigator.camera) {
|
||
q.resolve(null);
|
||
return q.promise;
|
||
}
|
||
|
||
navigator.camera.getPicture(function (imageData) {
|
||
q.resolve(imageData);
|
||
}, function (err) {
|
||
q.reject(err);
|
||
}, options);
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
cleanup: function () {
|
||
var q = $q.defer();
|
||
|
||
navigator.camera.cleanup(function () {
|
||
q.resolve();
|
||
}, function (err) {
|
||
q.reject(err);
|
||
});
|
||
|
||
return q.promise;
|
||
}
|
||
};
|
||
}]);
|
||
|
||
// install : cordova plugin add cordova-plugin-media-capture
|
||
// link : https://github.com/apache/cordova-plugin-media-capture
|
||
|
||
angular.module('ngCordova.plugins.capture', [])
|
||
|
||
.factory('$cordovaCapture', ['$q', function ($q) {
|
||
|
||
return {
|
||
captureAudio: function (options) {
|
||
var q = $q.defer();
|
||
|
||
if (!navigator.device.capture) {
|
||
q.resolve(null);
|
||
return q.promise;
|
||
}
|
||
|
||
navigator.device.capture.captureAudio(function (audioData) {
|
||
q.resolve(audioData);
|
||
}, function (err) {
|
||
q.reject(err);
|
||
}, options);
|
||
|
||
return q.promise;
|
||
},
|
||
captureImage: function (options) {
|
||
var q = $q.defer();
|
||
|
||
if (!navigator.device.capture) {
|
||
q.resolve(null);
|
||
return q.promise;
|
||
}
|
||
|
||
navigator.device.capture.captureImage(function (imageData) {
|
||
q.resolve(imageData);
|
||
}, function (err) {
|
||
q.reject(err);
|
||
}, options);
|
||
|
||
return q.promise;
|
||
},
|
||
captureVideo: function (options) {
|
||
var q = $q.defer();
|
||
|
||
if (!navigator.device.capture) {
|
||
q.resolve(null);
|
||
return q.promise;
|
||
}
|
||
|
||
navigator.device.capture.captureVideo(function (videoData) {
|
||
q.resolve(videoData);
|
||
}, function (err) {
|
||
q.reject(err);
|
||
}, options);
|
||
|
||
return q.promise;
|
||
}
|
||
};
|
||
}]);
|
||
|
||
// install : cordova plugin add https://github.com/vkeepe/card.io.git
|
||
// link : https://github.com/vkeepe/card.io.git
|
||
|
||
/* globals CardIO: true */
|
||
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( // jshint ignore:line
|
||
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
|
||
|
||
angular.module('ngCordova.plugins.clipboard', [])
|
||
|
||
.factory('$cordovaClipboard', ['$q', '$window', function ($q, $window) {
|
||
|
||
return {
|
||
copy: function (text) {
|
||
var q = $q.defer();
|
||
|
||
$window.cordova.plugins.clipboard.copy(text,
|
||
function () {
|
||
q.resolve();
|
||
}, function () {
|
||
q.reject();
|
||
});
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
paste: function () {
|
||
var q = $q.defer();
|
||
|
||
$window.cordova.plugins.clipboard.paste(function (text) {
|
||
q.resolve(text);
|
||
}, function () {
|
||
q.reject();
|
||
});
|
||
|
||
return q.promise;
|
||
}
|
||
};
|
||
}]);
|
||
|
||
// install : cordova plugin add cordova-plugin-contacts
|
||
// link : https://github.com/apache/cordova-plugin-contacts
|
||
|
||
angular.module('ngCordova.plugins.contacts', [])
|
||
|
||
.factory('$cordovaContacts', ['$q', function ($q) {
|
||
|
||
return {
|
||
save: function (contact) {
|
||
var q = $q.defer();
|
||
var deviceContact = navigator.contacts.create(contact);
|
||
|
||
deviceContact.save(function (result) {
|
||
q.resolve(result);
|
||
}, function (err) {
|
||
q.reject(err);
|
||
});
|
||
return q.promise;
|
||
},
|
||
|
||
remove: function (contact) {
|
||
var q = $q.defer();
|
||
var deviceContact = navigator.contacts.create(contact);
|
||
|
||
deviceContact.remove(function (result) {
|
||
q.resolve(result);
|
||
}, function (err) {
|
||
q.reject(err);
|
||
});
|
||
return q.promise;
|
||
},
|
||
|
||
clone: function (contact) {
|
||
var deviceContact = navigator.contacts.create(contact);
|
||
return deviceContact.clone(contact);
|
||
},
|
||
|
||
find: function (options) {
|
||
var q = $q.defer();
|
||
var fields = options.fields || ['id', 'displayName'];
|
||
delete options.fields;
|
||
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;
|
||
},
|
||
|
||
pickContact: function () {
|
||
var q = $q.defer();
|
||
|
||
navigator.contacts.pickContact(function (contact) {
|
||
q.resolve(contact);
|
||
}, function (err) {
|
||
q.reject(err);
|
||
});
|
||
|
||
return q.promise;
|
||
}
|
||
|
||
// TODO: method to set / get ContactAddress
|
||
// TODO: method to set / get ContactError
|
||
// TODO: method to set / get ContactField
|
||
// TODO: method to set / get ContactName
|
||
// TODO: method to set / get ContactOrganization
|
||
};
|
||
}]);
|
||
|
||
// install : cordova plugin add https://github.com/VitaliiBlagodir/cordova-plugin-datepicker.git
|
||
// 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();
|
||
options = options || {date: new Date(), mode: 'date'};
|
||
$window.datePicker.show(options, function (date) {
|
||
q.resolve(date);
|
||
});
|
||
return q.promise;
|
||
}
|
||
};
|
||
}]);
|
||
|
||
// install : cordova plugin add cordova-plugin-device
|
||
// link : https://github.com/apache/cordova-plugin-device
|
||
|
||
/* globals device: true */
|
||
angular.module('ngCordova.plugins.device', [])
|
||
|
||
.factory('$cordovaDevice', [function () {
|
||
|
||
return {
|
||
/**
|
||
* Returns the whole device object.
|
||
* @see https://github.com/apache/cordova-plugin-device
|
||
* @returns {Object} The device object.
|
||
*/
|
||
getDevice: function () {
|
||
return device;
|
||
},
|
||
|
||
/**
|
||
* Returns the Cordova version.
|
||
* @see https://github.com/apache/cordova-plugin-device#devicecordova
|
||
* @returns {String} The Cordova version.
|
||
*/
|
||
getCordova: function () {
|
||
return device.cordova;
|
||
},
|
||
|
||
/**
|
||
* Returns the name of the device's model or product.
|
||
* @see https://github.com/apache/cordova-plugin-device#devicemodel
|
||
* @returns {String} The name of the device's model or product.
|
||
*/
|
||
getModel: function () {
|
||
return device.model;
|
||
},
|
||
|
||
/**
|
||
* @deprecated device.name is deprecated as of version 2.3.0. Use device.model instead.
|
||
* @returns {String}
|
||
*/
|
||
getName: function () {
|
||
return device.name;
|
||
},
|
||
|
||
/**
|
||
* Returns the device's operating system name.
|
||
* @see https://github.com/apache/cordova-plugin-device#deviceplatform
|
||
* @returns {String} The device's operating system name.
|
||
*/
|
||
getPlatform: function () {
|
||
return device.platform;
|
||
},
|
||
|
||
/**
|
||
* Returns the device's Universally Unique Identifier.
|
||
* @see https://github.com/apache/cordova-plugin-device#deviceuuid
|
||
* @returns {String} The device's Universally Unique Identifier
|
||
*/
|
||
getUUID: function () {
|
||
return device.uuid;
|
||
},
|
||
|
||
/**
|
||
* Returns the operating system version.
|
||
* @see https://github.com/apache/cordova-plugin-device#deviceversion
|
||
* @returns {String}
|
||
*/
|
||
getVersion: function () {
|
||
return device.version;
|
||
},
|
||
|
||
/**
|
||
* Returns the device manufacturer.
|
||
* @returns {String}
|
||
*/
|
||
getManufacturer: function () {
|
||
return device.manufacturer;
|
||
}
|
||
};
|
||
}]);
|
||
|
||
// install : cordova plugin add cordova-plugin-device-motion
|
||
// link : https://github.com/apache/cordova-plugin-device-motion
|
||
|
||
angular.module('ngCordova.plugins.deviceMotion', [])
|
||
|
||
.factory('$cordovaDeviceMotion', ['$q', function ($q) {
|
||
|
||
return {
|
||
getCurrentAcceleration: function () {
|
||
var q = $q.defer();
|
||
|
||
if (angular.isUndefined(navigator.accelerometer) ||
|
||
!angular.isFunction(navigator.accelerometer.getCurrentAcceleration)) {
|
||
q.reject('Device do not support watchAcceleration');
|
||
}
|
||
|
||
navigator.accelerometer.getCurrentAcceleration(function (result) {
|
||
q.resolve(result);
|
||
}, function (err) {
|
||
q.reject(err);
|
||
});
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
watchAcceleration: function (options) {
|
||
var q = $q.defer();
|
||
|
||
if (angular.isUndefined(navigator.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) {
|
||
q.reject(err);
|
||
}, options);
|
||
|
||
q.promise.cancel = function () {
|
||
navigator.accelerometer.clearWatch(watchID);
|
||
};
|
||
|
||
q.promise.clearWatch = function (id) {
|
||
navigator.accelerometer.clearWatch(id || watchID);
|
||
};
|
||
|
||
q.promise.watchID = watchID;
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
clearWatch: function (watchID) {
|
||
return navigator.accelerometer.clearWatch(watchID);
|
||
}
|
||
};
|
||
}]);
|
||
|
||
// install : cordova plugin add cordova-plugin-device-orientation
|
||
// link : https://github.com/apache/cordova-plugin-device-orientation
|
||
|
||
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) {
|
||
q.reject(err);
|
||
});
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
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);
|
||
}, function (err) {
|
||
q.reject(err);
|
||
}, _options);
|
||
|
||
q.promise.cancel = function () {
|
||
navigator.compass.clearWatch(watchID);
|
||
};
|
||
|
||
q.promise.clearWatch = function (id) {
|
||
navigator.compass.clearWatch(id || watchID);
|
||
};
|
||
|
||
q.promise.watchID = watchID;
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
clearWatch: function (watchID) {
|
||
return navigator.compass.clearWatch(watchID);
|
||
}
|
||
};
|
||
}]);
|
||
|
||
// install : cordova plugin add cordova-plugin-dialogs
|
||
// link : https://github.com/apache/cordova-plugin-dialogs
|
||
|
||
angular.module('ngCordova.plugins.dialogs', [])
|
||
|
||
.factory('$cordovaDialogs', ['$q', '$window', function ($q, $window) {
|
||
|
||
return {
|
||
alert: function (message, title, buttonName) {
|
||
var q = $q.defer();
|
||
|
||
if (!$window.navigator.notification) {
|
||
$window.alert(message);
|
||
q.resolve();
|
||
} else {
|
||
navigator.notification.alert(message, function () {
|
||
q.resolve();
|
||
}, title, buttonName);
|
||
}
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
confirm: function (message, title, buttonLabels) {
|
||
var q = $q.defer();
|
||
|
||
if (!$window.navigator.notification) {
|
||
if ($window.confirm(message)) {
|
||
q.resolve(1);
|
||
} else {
|
||
q.resolve(2);
|
||
}
|
||
} else {
|
||
navigator.notification.confirm(message, function (buttonIndex) {
|
||
q.resolve(buttonIndex);
|
||
}, title, buttonLabels);
|
||
}
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
prompt: function (message, title, buttonLabels, defaultText) {
|
||
var q = $q.defer();
|
||
|
||
if (!$window.navigator.notification) {
|
||
var res = $window.prompt(message, defaultText);
|
||
if (res !== null) {
|
||
q.resolve({input1: res, buttonIndex: 1});
|
||
} else {
|
||
q.resolve({input1: res, buttonIndex: 2});
|
||
}
|
||
} else {
|
||
navigator.notification.prompt(message, function (result) {
|
||
q.resolve(result);
|
||
}, title, buttonLabels, defaultText);
|
||
}
|
||
return q.promise;
|
||
},
|
||
|
||
beep: function (times) {
|
||
return navigator.notification.beep(times);
|
||
}
|
||
};
|
||
}]);
|
||
|
||
// install : cordova plugin add https://github.com/katzer/cordova-plugin-email-composer.git
|
||
// link : https://github.com/katzer/cordova-plugin-email-composer
|
||
|
||
angular.module('ngCordova.plugins.emailComposer', [])
|
||
|
||
.factory('$cordovaEmailComposer', ['$q', function ($q) {
|
||
|
||
return {
|
||
isAvailable: function () {
|
||
var q = $q.defer();
|
||
|
||
cordova.plugins.email.isAvailable(function (isAvailable) {
|
||
if (isAvailable) {
|
||
q.resolve();
|
||
} else {
|
||
q.reject();
|
||
}
|
||
});
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
open: function (properties) {
|
||
var q = $q.defer();
|
||
|
||
cordova.plugins.email.open(properties, function () {
|
||
q.reject(); // user closed email composer
|
||
});
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
addAlias: function (app, schema) {
|
||
cordova.plugins.email.addAlias(app, schema);
|
||
}
|
||
};
|
||
}]);
|
||
|
||
// install : cordova -d plugin add https://github.com/Wizcorp/phonegap-facebook-plugin.git --variable APP_ID="123456789" --variable APP_NAME="myApplication"
|
||
// link : https://github.com/Wizcorp/phonegap-facebook-plugin
|
||
|
||
/* globals facebookConnectPlugin: true */
|
||
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';
|
||
facebookConnectPlugin.browserInit(this.appID, this.appVersion);
|
||
};
|
||
|
||
this.$get = ['$q', function ($q) {
|
||
return {
|
||
login: function (permissions) {
|
||
var q = $q.defer();
|
||
facebookConnectPlugin.login(permissions, function (res) {
|
||
q.resolve(res);
|
||
}, function (res) {
|
||
q.reject(res);
|
||
});
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
showDialog: function (options) {
|
||
var q = $q.defer();
|
||
facebookConnectPlugin.showDialog(options, function (res) {
|
||
q.resolve(res);
|
||
}, function (err) {
|
||
q.reject(err);
|
||
});
|
||
return q.promise;
|
||
},
|
||
|
||
api: function (path, permissions) {
|
||
var q = $q.defer();
|
||
facebookConnectPlugin.api(path, permissions, function (res) {
|
||
q.resolve(res);
|
||
}, function (err) {
|
||
q.reject(err);
|
||
});
|
||
return q.promise;
|
||
},
|
||
|
||
getAccessToken: function () {
|
||
var q = $q.defer();
|
||
facebookConnectPlugin.getAccessToken(function (res) {
|
||
q.resolve(res);
|
||
}, function (err) {
|
||
q.reject(err);
|
||
});
|
||
return q.promise;
|
||
},
|
||
|
||
getLoginStatus: function () {
|
||
var q = $q.defer();
|
||
facebookConnectPlugin.getLoginStatus(function (res) {
|
||
q.resolve(res);
|
||
}, function (err) {
|
||
q.reject(err);
|
||
});
|
||
return q.promise;
|
||
},
|
||
|
||
logout: function () {
|
||
var q = $q.defer();
|
||
facebookConnectPlugin.logout(function (res) {
|
||
q.resolve(res);
|
||
}, function (err) {
|
||
q.reject(err);
|
||
});
|
||
return q.promise;
|
||
}
|
||
};
|
||
}];
|
||
}]);
|
||
|
||
// install : cordova plugin add https://github.com/floatinghotpot/cordova-plugin-facebookads.git
|
||
// link : https://github.com/floatinghotpot/cordova-plugin-facebookads
|
||
|
||
angular.module('ngCordova.plugins.facebookAds', [])
|
||
|
||
.factory('$cordovaFacebookAds', ['$q', '$window', function ($q, $window) {
|
||
|
||
return {
|
||
setOptions: function (options) {
|
||
var d = $q.defer();
|
||
|
||
$window.FacebookAds.setOptions(options, function () {
|
||
d.resolve();
|
||
}, function () {
|
||
d.reject();
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
createBanner: function (options) {
|
||
var d = $q.defer();
|
||
|
||
$window.FacebookAds.createBanner(options, function () {
|
||
d.resolve();
|
||
}, function () {
|
||
d.reject();
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
removeBanner: function () {
|
||
var d = $q.defer();
|
||
|
||
$window.FacebookAds.removeBanner(function () {
|
||
d.resolve();
|
||
}, function () {
|
||
d.reject();
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
showBanner: function (position) {
|
||
var d = $q.defer();
|
||
|
||
$window.FacebookAds.showBanner(position, function () {
|
||
d.resolve();
|
||
}, function () {
|
||
d.reject();
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
showBannerAtXY: function (x, y) {
|
||
var d = $q.defer();
|
||
|
||
$window.FacebookAds.showBannerAtXY(x, y, function () {
|
||
d.resolve();
|
||
}, function () {
|
||
d.reject();
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
hideBanner: function () {
|
||
var d = $q.defer();
|
||
|
||
$window.FacebookAds.hideBanner(function () {
|
||
d.resolve();
|
||
}, function () {
|
||
d.reject();
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
prepareInterstitial: function (options) {
|
||
var d = $q.defer();
|
||
|
||
$window.FacebookAds.prepareInterstitial(options, function () {
|
||
d.resolve();
|
||
}, function () {
|
||
d.reject();
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
showInterstitial: function () {
|
||
var d = $q.defer();
|
||
|
||
$window.FacebookAds.showInterstitial(function () {
|
||
d.resolve();
|
||
}, function () {
|
||
d.reject();
|
||
});
|
||
|
||
return d.promise;
|
||
}
|
||
};
|
||
}]);
|
||
|
||
// install : cordova plugin add cordova-plugin-file
|
||
// link : https://github.com/apache/cordova-plugin-file
|
||
|
||
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 ($q, $window, $cordovaFileError) {
|
||
|
||
return {
|
||
|
||
getFreeDiskSpace: function () {
|
||
var q = $q.defer();
|
||
cordova.exec(function (result) {
|
||
q.resolve(result);
|
||
}, function (error) {
|
||
q.reject(error);
|
||
}, 'File', 'getFreeDiskSpace', []);
|
||
return q.promise;
|
||
},
|
||
|
||
checkDir: function (path, dir) {
|
||
var q = $q.defer();
|
||
|
||
if ((/^\//.test(dir))) {
|
||
q.reject('directory cannot start with \/');
|
||
}
|
||
|
||
try {
|
||
var directory = path + dir;
|
||
$window.resolveLocalFileSystemURL(directory, function (fileSystem) {
|
||
if (fileSystem.isDirectory === true) {
|
||
q.resolve(fileSystem);
|
||
} else {
|
||
q.reject({code: 13, message: 'input is not a directory'});
|
||
}
|
||
}, function (error) {
|
||
error.message = $cordovaFileError[error.code];
|
||
q.reject(error);
|
||
});
|
||
} catch (err) {
|
||
err.message = $cordovaFileError[err.code];
|
||
q.reject(err);
|
||
}
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
checkFile: function (path, file) {
|
||
var q = $q.defer();
|
||
|
||
if ((/^\//.test(file))) {
|
||
q.reject('directory cannot start with \/');
|
||
}
|
||
|
||
try {
|
||
var directory = path + file;
|
||
$window.resolveLocalFileSystemURL(directory, function (fileSystem) {
|
||
if (fileSystem.isFile === true) {
|
||
q.resolve(fileSystem);
|
||
} else {
|
||
q.reject({code: 13, message: 'input is not a file'});
|
||
}
|
||
}, function (error) {
|
||
error.message = $cordovaFileError[error.code];
|
||
q.reject(error);
|
||
});
|
||
} catch (err) {
|
||
err.message = $cordovaFileError[err.code];
|
||
q.reject(err);
|
||
}
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
createDir: function (path, dirName, replaceBool) {
|
||
var q = $q.defer();
|
||
|
||
if ((/^\//.test(dirName))) {
|
||
q.reject('directory cannot start with \/');
|
||
}
|
||
|
||
replaceBool = replaceBool ? false : true;
|
||
|
||
var options = {
|
||
create: true,
|
||
exclusive: replaceBool
|
||
};
|
||
|
||
try {
|
||
$window.resolveLocalFileSystemURL(path, function (fileSystem) {
|
||
fileSystem.getDirectory(dirName, options, function (result) {
|
||
q.resolve(result);
|
||
}, function (error) {
|
||
error.message = $cordovaFileError[error.code];
|
||
q.reject(error);
|
||
});
|
||
}, function (err) {
|
||
err.message = $cordovaFileError[err.code];
|
||
q.reject(err);
|
||
});
|
||
} catch (e) {
|
||
e.message = $cordovaFileError[e.code];
|
||
q.reject(e);
|
||
}
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
createFile: function (path, fileName, replaceBool) {
|
||
var q = $q.defer();
|
||
|
||
if ((/^\//.test(fileName))) {
|
||
q.reject('file-name cannot start with \/');
|
||
}
|
||
|
||
replaceBool = replaceBool ? false : true;
|
||
|
||
var options = {
|
||
create: true,
|
||
exclusive: replaceBool
|
||
};
|
||
|
||
try {
|
||
$window.resolveLocalFileSystemURL(path, function (fileSystem) {
|
||
fileSystem.getFile(fileName, options, function (result) {
|
||
q.resolve(result);
|
||
}, function (error) {
|
||
error.message = $cordovaFileError[error.code];
|
||
q.reject(error);
|
||
});
|
||
}, function (err) {
|
||
err.message = $cordovaFileError[err.code];
|
||
q.reject(err);
|
||
});
|
||
} catch (e) {
|
||
e.message = $cordovaFileError[e.code];
|
||
q.reject(e);
|
||
}
|
||
return q.promise;
|
||
},
|
||
|
||
removeDir: function (path, dirName) {
|
||
var q = $q.defer();
|
||
|
||
if ((/^\//.test(dirName))) {
|
||
q.reject('file-name cannot start with \/');
|
||
}
|
||
|
||
try {
|
||
$window.resolveLocalFileSystemURL(path, function (fileSystem) {
|
||
fileSystem.getDirectory(dirName, {create: false}, function (dirEntry) {
|
||
dirEntry.remove(function () {
|
||
q.resolve({success: true, fileRemoved: dirEntry});
|
||
}, function (error) {
|
||
error.message = $cordovaFileError[error.code];
|
||
q.reject(error);
|
||
});
|
||
}, function (err) {
|
||
err.message = $cordovaFileError[err.code];
|
||
q.reject(err);
|
||
});
|
||
}, function (er) {
|
||
er.message = $cordovaFileError[er.code];
|
||
q.reject(er);
|
||
});
|
||
} catch (e) {
|
||
e.message = $cordovaFileError[e.code];
|
||
q.reject(e);
|
||
}
|
||
return q.promise;
|
||
},
|
||
|
||
removeFile: function (path, fileName) {
|
||
var q = $q.defer();
|
||
|
||
if ((/^\//.test(fileName))) {
|
||
q.reject('file-name cannot start with \/');
|
||
}
|
||
|
||
try {
|
||
$window.resolveLocalFileSystemURL(path, function (fileSystem) {
|
||
fileSystem.getFile(fileName, {create: false}, function (fileEntry) {
|
||
fileEntry.remove(function () {
|
||
q.resolve({success: true, fileRemoved: fileEntry});
|
||
}, function (error) {
|
||
error.message = $cordovaFileError[error.code];
|
||
q.reject(error);
|
||
});
|
||
}, function (err) {
|
||
err.message = $cordovaFileError[err.code];
|
||
q.reject(err);
|
||
});
|
||
}, function (er) {
|
||
er.message = $cordovaFileError[er.code];
|
||
q.reject(er);
|
||
});
|
||
} catch (e) {
|
||
e.message = $cordovaFileError[e.code];
|
||
q.reject(e);
|
||
}
|
||
return q.promise;
|
||
},
|
||
|
||
removeRecursively: function (path, dirName) {
|
||
var q = $q.defer();
|
||
|
||
if ((/^\//.test(dirName))) {
|
||
q.reject('file-name cannot start with \/');
|
||
}
|
||
|
||
try {
|
||
$window.resolveLocalFileSystemURL(path, function (fileSystem) {
|
||
fileSystem.getDirectory(dirName, {create: false}, function (dirEntry) {
|
||
dirEntry.removeRecursively(function () {
|
||
q.resolve({success: true, fileRemoved: dirEntry});
|
||
}, function (error) {
|
||
error.message = $cordovaFileError[error.code];
|
||
q.reject(error);
|
||
});
|
||
}, function (err) {
|
||
err.message = $cordovaFileError[err.code];
|
||
q.reject(err);
|
||
});
|
||
}, function (er) {
|
||
er.message = $cordovaFileError[er.code];
|
||
q.reject(er);
|
||
});
|
||
} catch (e) {
|
||
e.message = $cordovaFileError[e.code];
|
||
q.reject(e);
|
||
}
|
||
return q.promise;
|
||
},
|
||
|
||
writeFile: function (path, fileName, text, replaceBool) {
|
||
var q = $q.defer();
|
||
|
||
if ((/^\//.test(fileName))) {
|
||
q.reject('file-name cannot start with \/');
|
||
}
|
||
|
||
replaceBool = replaceBool ? false : true;
|
||
|
||
var options = {
|
||
create: true,
|
||
exclusive: replaceBool
|
||
};
|
||
|
||
try {
|
||
$window.resolveLocalFileSystemURL(path, function (fileSystem) {
|
||
fileSystem.getFile(fileName, options, function (fileEntry) {
|
||
fileEntry.createWriter(function (writer) {
|
||
if (options.append === true) {
|
||
writer.seek(writer.length);
|
||
}
|
||
|
||
if (options.truncate) {
|
||
writer.truncate(options.truncate);
|
||
}
|
||
|
||
writer.onwriteend = function (evt) {
|
||
if (this.error) {
|
||
q.reject(this.error);
|
||
} else {
|
||
q.resolve(evt);
|
||
}
|
||
};
|
||
|
||
writer.write(text);
|
||
|
||
q.promise.abort = function () {
|
||
writer.abort();
|
||
};
|
||
});
|
||
}, function (error) {
|
||
error.message = $cordovaFileError[error.code];
|
||
q.reject(error);
|
||
});
|
||
}, function (err) {
|
||
err.message = $cordovaFileError[err.code];
|
||
q.reject(err);
|
||
});
|
||
} catch (e) {
|
||
e.message = $cordovaFileError[e.code];
|
||
q.reject(e);
|
||
}
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
writeExistingFile: function (path, fileName, text) {
|
||
var q = $q.defer();
|
||
|
||
if ((/^\//.test(fileName))) {
|
||
q.reject('file-name cannot start with \/');
|
||
}
|
||
|
||
try {
|
||
$window.resolveLocalFileSystemURL(path, function (fileSystem) {
|
||
fileSystem.getFile(fileName, {create: false}, function (fileEntry) {
|
||
fileEntry.createWriter(function (writer) {
|
||
writer.seek(writer.length);
|
||
|
||
writer.onwriteend = function (evt) {
|
||
if (this.error) {
|
||
q.reject(this.error);
|
||
} else {
|
||
q.resolve(evt);
|
||
}
|
||
};
|
||
|
||
writer.write(text);
|
||
|
||
q.promise.abort = function () {
|
||
writer.abort();
|
||
};
|
||
});
|
||
}, function (error) {
|
||
error.message = $cordovaFileError[error.code];
|
||
q.reject(error);
|
||
});
|
||
}, function (err) {
|
||
err.message = $cordovaFileError[err.code];
|
||
q.reject(err);
|
||
});
|
||
} catch (e) {
|
||
e.message = $cordovaFileError[e.code];
|
||
q.reject(e);
|
||
}
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
readAsText: function (path, file) {
|
||
var q = $q.defer();
|
||
|
||
if ((/^\//.test(file))) {
|
||
q.reject('file-name cannot start with \/');
|
||
}
|
||
|
||
try {
|
||
$window.resolveLocalFileSystemURL(path, function (fileSystem) {
|
||
fileSystem.getFile(file, {create: false}, function (fileEntry) {
|
||
fileEntry.file(function (fileData) {
|
||
var reader = new FileReader();
|
||
|
||
reader.onloadend = function (evt) {
|
||
if (evt.target.result !== undefined || evt.target.result !== null) {
|
||
q.resolve(evt.target.result);
|
||
} else if (evt.target.error !== undefined || evt.target.error !== null) {
|
||
q.reject(evt.target.error);
|
||
} else {
|
||
q.reject({code: null, message: 'READER_ONLOADEND_ERR'});
|
||
}
|
||
};
|
||
|
||
reader.readAsText(fileData);
|
||
});
|
||
}, function (error) {
|
||
error.message = $cordovaFileError[error.code];
|
||
q.reject(error);
|
||
});
|
||
}, function (err) {
|
||
err.message = $cordovaFileError[err.code];
|
||
q.reject(err);
|
||
});
|
||
} catch (e) {
|
||
e.message = $cordovaFileError[e.code];
|
||
q.reject(e);
|
||
}
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
readAsDataURL: function (path, file) {
|
||
var q = $q.defer();
|
||
|
||
if ((/^\//.test(file))) {
|
||
q.reject('file-name cannot start with \/');
|
||
}
|
||
|
||
try {
|
||
$window.resolveLocalFileSystemURL(path, function (fileSystem) {
|
||
fileSystem.getFile(file, {create: false}, function (fileEntry) {
|
||
fileEntry.file(function (fileData) {
|
||
var reader = new FileReader();
|
||
reader.onloadend = function (evt) {
|
||
if (evt.target.result !== undefined || evt.target.result !== null) {
|
||
q.resolve(evt.target.result);
|
||
} else if (evt.target.error !== undefined || evt.target.error !== null) {
|
||
q.reject(evt.target.error);
|
||
} else {
|
||
q.reject({code: null, message: 'READER_ONLOADEND_ERR'});
|
||
}
|
||
};
|
||
reader.readAsDataURL(fileData);
|
||
});
|
||
}, function (error) {
|
||
error.message = $cordovaFileError[error.code];
|
||
q.reject(error);
|
||
});
|
||
}, function (err) {
|
||
err.message = $cordovaFileError[err.code];
|
||
q.reject(err);
|
||
});
|
||
} catch (e) {
|
||
e.message = $cordovaFileError[e.code];
|
||
q.reject(e);
|
||
}
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
readAsBinaryString: function (path, file) {
|
||
var q = $q.defer();
|
||
|
||
if ((/^\//.test(file))) {
|
||
q.reject('file-name cannot start with \/');
|
||
}
|
||
|
||
try {
|
||
$window.resolveLocalFileSystemURL(path, function (fileSystem) {
|
||
fileSystem.getFile(file, {create: false}, function (fileEntry) {
|
||
fileEntry.file(function (fileData) {
|
||
var reader = new FileReader();
|
||
reader.onloadend = function (evt) {
|
||
if (evt.target.result !== undefined || evt.target.result !== null) {
|
||
q.resolve(evt.target.result);
|
||
} else if (evt.target.error !== undefined || evt.target.error !== null) {
|
||
q.reject(evt.target.error);
|
||
} else {
|
||
q.reject({code: null, message: 'READER_ONLOADEND_ERR'});
|
||
}
|
||
};
|
||
reader.readAsBinaryString(fileData);
|
||
});
|
||
}, function (error) {
|
||
error.message = $cordovaFileError[error.code];
|
||
q.reject(error);
|
||
});
|
||
}, function (err) {
|
||
err.message = $cordovaFileError[err.code];
|
||
q.reject(err);
|
||
});
|
||
} catch (e) {
|
||
e.message = $cordovaFileError[e.code];
|
||
q.reject(e);
|
||
}
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
readAsArrayBuffer: function (path, file) {
|
||
var q = $q.defer();
|
||
|
||
if ((/^\//.test(file))) {
|
||
q.reject('file-name cannot start with \/');
|
||
}
|
||
|
||
try {
|
||
$window.resolveLocalFileSystemURL(path, function (fileSystem) {
|
||
fileSystem.getFile(file, {create: false}, function (fileEntry) {
|
||
fileEntry.file(function (fileData) {
|
||
var reader = new FileReader();
|
||
reader.onloadend = function (evt) {
|
||
if (evt.target.result !== undefined || evt.target.result !== null) {
|
||
q.resolve(evt.target.result);
|
||
} else if (evt.target.error !== undefined || evt.target.error !== null) {
|
||
q.reject(evt.target.error);
|
||
} else {
|
||
q.reject({code: null, message: 'READER_ONLOADEND_ERR'});
|
||
}
|
||
};
|
||
reader.readAsArrayBuffer(fileData);
|
||
});
|
||
}, function (error) {
|
||
error.message = $cordovaFileError[error.code];
|
||
q.reject(error);
|
||
});
|
||
}, function (err) {
|
||
err.message = $cordovaFileError[err.code];
|
||
q.reject(err);
|
||
});
|
||
} catch (e) {
|
||
e.message = $cordovaFileError[e.code];
|
||
q.reject(e);
|
||
}
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
moveFile: function (path, fileName, newPath, newFileName) {
|
||
var q = $q.defer();
|
||
|
||
newFileName = newFileName || fileName;
|
||
|
||
if ((/^\//.test(fileName)) || (/^\//.test(newFileName))) {
|
||
q.reject('file-name cannot start with \/');
|
||
}
|
||
|
||
try {
|
||
$window.resolveLocalFileSystemURL(path, function (fileSystem) {
|
||
fileSystem.getFile(fileName, {create: false}, function (fileEntry) {
|
||
$window.resolveLocalFileSystemURL(newPath, function (newFileEntry) {
|
||
fileEntry.moveTo(newFileEntry, newFileName, function (result) {
|
||
q.resolve(result);
|
||
}, function (error) {
|
||
q.reject(error);
|
||
});
|
||
}, function (err) {
|
||
q.reject(err);
|
||
});
|
||
}, function (err) {
|
||
q.reject(err);
|
||
});
|
||
}, function (er) {
|
||
q.reject(er);
|
||
});
|
||
} catch (e) {
|
||
q.reject(e);
|
||
}
|
||
return q.promise;
|
||
},
|
||
|
||
moveDir: function (path, dirName, newPath, newDirName) {
|
||
var q = $q.defer();
|
||
|
||
newDirName = newDirName || dirName;
|
||
|
||
if (/^\//.test(dirName) || (/^\//.test(newDirName))) {
|
||
q.reject('file-name cannot start with \/');
|
||
}
|
||
|
||
try {
|
||
$window.resolveLocalFileSystemURL(path, function (fileSystem) {
|
||
fileSystem.getDirectory(dirName, {create: false}, function (dirEntry) {
|
||
$window.resolveLocalFileSystemURL(newPath, function (newDirEntry) {
|
||
dirEntry.moveTo(newDirEntry, newDirName, function (result) {
|
||
q.resolve(result);
|
||
}, function (error) {
|
||
q.reject(error);
|
||
});
|
||
}, function (erro) {
|
||
q.reject(erro);
|
||
});
|
||
}, function (err) {
|
||
q.reject(err);
|
||
});
|
||
}, function (er) {
|
||
q.reject(er);
|
||
});
|
||
} catch (e) {
|
||
q.reject(e);
|
||
}
|
||
return q.promise;
|
||
},
|
||
|
||
copyDir: function (path, dirName, newPath, newDirName) {
|
||
var q = $q.defer();
|
||
|
||
newDirName = newDirName || dirName;
|
||
|
||
if (/^\//.test(dirName) || (/^\//.test(newDirName))) {
|
||
q.reject('file-name cannot start with \/');
|
||
}
|
||
|
||
try {
|
||
$window.resolveLocalFileSystemURL(path, function (fileSystem) {
|
||
fileSystem.getDirectory(dirName, {create: false, exclusive: false}, function (dirEntry) {
|
||
|
||
$window.resolveLocalFileSystemURL(newPath, function (newDirEntry) {
|
||
dirEntry.copyTo(newDirEntry, newDirName, function (result) {
|
||
q.resolve(result);
|
||
}, function (error) {
|
||
error.message = $cordovaFileError[error.code];
|
||
q.reject(error);
|
||
});
|
||
}, function (erro) {
|
||
erro.message = $cordovaFileError[erro.code];
|
||
q.reject(erro);
|
||
});
|
||
}, function (err) {
|
||
err.message = $cordovaFileError[err.code];
|
||
q.reject(err);
|
||
});
|
||
}, function (er) {
|
||
er.message = $cordovaFileError[er.code];
|
||
q.reject(er);
|
||
});
|
||
} catch (e) {
|
||
e.message = $cordovaFileError[e.code];
|
||
q.reject(e);
|
||
}
|
||
return q.promise;
|
||
},
|
||
|
||
copyFile: function (path, fileName, newPath, newFileName) {
|
||
var q = $q.defer();
|
||
|
||
newFileName = newFileName || fileName;
|
||
|
||
if ((/^\//.test(fileName))) {
|
||
q.reject('file-name cannot start with \/');
|
||
}
|
||
|
||
try {
|
||
$window.resolveLocalFileSystemURL(path, function (fileSystem) {
|
||
fileSystem.getFile(fileName, {create: false, exclusive: false}, function (fileEntry) {
|
||
|
||
$window.resolveLocalFileSystemURL(newPath, function (newFileEntry) {
|
||
fileEntry.copyTo(newFileEntry, newFileName, function (result) {
|
||
q.resolve(result);
|
||
}, function (error) {
|
||
error.message = $cordovaFileError[error.code];
|
||
q.reject(error);
|
||
});
|
||
}, function (erro) {
|
||
erro.message = $cordovaFileError[erro.code];
|
||
q.reject(erro);
|
||
});
|
||
}, function (err) {
|
||
err.message = $cordovaFileError[err.code];
|
||
q.reject(err);
|
||
});
|
||
}, function (er) {
|
||
er.message = $cordovaFileError[er.code];
|
||
q.reject(er);
|
||
});
|
||
} catch (e) {
|
||
e.message = $cordovaFileError[e.code];
|
||
q.reject(e);
|
||
}
|
||
return q.promise;
|
||
}
|
||
|
||
/*
|
||
listFiles: function (path, dir) {
|
||
|
||
},
|
||
|
||
listDir: function (path, dirName) {
|
||
var q = $q.defer();
|
||
|
||
try {
|
||
$window.resolveLocalFileSystemURL(path, function (fileSystem) {
|
||
fileSystem.getDirectory(dirName, options, function (parent) {
|
||
var reader = parent.createReader();
|
||
reader.readEntries(function (entries) {
|
||
q.resolve(entries);
|
||
}, function () {
|
||
q.reject('DIR_READ_ERROR : ' + path + dirName);
|
||
});
|
||
}, function (error) {
|
||
error.message = $cordovaFileError[error.code];
|
||
q.reject(error);
|
||
});
|
||
}, function (err) {
|
||
err.message = $cordovaFileError[err.code];
|
||
q.reject(err);
|
||
});
|
||
} catch (e) {
|
||
e.message = $cordovaFileError[e.code];
|
||
q.reject(e);
|
||
}
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
readFileMetadata: function (filePath) {
|
||
//return getFile(filePath, {create: false});
|
||
}
|
||
*/
|
||
};
|
||
|
||
}];
|
||
}]);
|
||
|
||
// install : cordova plugin add https://github.com/pwlin/cordova-plugin-file-opener2.git
|
||
// link : https://github.com/pwlin/cordova-plugin-file-opener2
|
||
|
||
angular.module('ngCordova.plugins.fileOpener2', [])
|
||
|
||
.factory('$cordovaFileOpener2', ['$q', function ($q) {
|
||
|
||
return {
|
||
open: function (file, type) {
|
||
var q = $q.defer();
|
||
cordova.plugins.fileOpener2.open(file, type, {
|
||
error: function (e) {
|
||
q.reject(e);
|
||
}, success: function () {
|
||
q.resolve();
|
||
}
|
||
});
|
||
return q.promise;
|
||
},
|
||
|
||
uninstall: function (pack) {
|
||
var q = $q.defer();
|
||
cordova.plugins.fileOpener2.uninstall(pack, {
|
||
error: function (e) {
|
||
q.reject(e);
|
||
}, success: function () {
|
||
q.resolve();
|
||
}
|
||
});
|
||
return q.promise;
|
||
},
|
||
|
||
appIsInstalled: function (pack) {
|
||
var q = $q.defer();
|
||
cordova.plugins.fileOpener2.appIsInstalled(pack, {
|
||
success: function (res) {
|
||
q.resolve(res);
|
||
}
|
||
});
|
||
return q.promise;
|
||
}
|
||
};
|
||
}]);
|
||
|
||
// install : cordova plugin add cordova-plugin-file-transfer
|
||
// link : https://github.com/apache/cordova-plugin-file-transfer
|
||
|
||
/* globals FileTransfer: true */
|
||
angular.module('ngCordova.plugins.fileTransfer', [])
|
||
|
||
.factory('$cordovaFileTransfer', ['$q', '$timeout', function ($q, $timeout) {
|
||
return {
|
||
download: function (source, filePath, options, trustAllHosts) {
|
||
var q = $q.defer();
|
||
var ft = new FileTransfer();
|
||
var uri = (options && options.encodeURI === false) ? source : encodeURI(source);
|
||
|
||
if (options && options.timeout !== undefined && options.timeout !== null) {
|
||
$timeout(function () {
|
||
ft.abort();
|
||
}, options.timeout);
|
||
options.timeout = null;
|
||
}
|
||
|
||
ft.onprogress = function (progress) {
|
||
q.notify(progress);
|
||
};
|
||
|
||
q.promise.abort = function () {
|
||
ft.abort();
|
||
};
|
||
|
||
ft.download(uri, filePath, q.resolve, q.reject, trustAllHosts, options);
|
||
return q.promise;
|
||
},
|
||
|
||
upload: function (server, filePath, options, trustAllHosts) {
|
||
var q = $q.defer();
|
||
var ft = new FileTransfer();
|
||
var uri = (options && options.encodeURI === false) ? server : encodeURI(server);
|
||
|
||
if (options && options.timeout !== undefined && options.timeout !== null) {
|
||
$timeout(function () {
|
||
ft.abort();
|
||
}, options.timeout);
|
||
options.timeout = null;
|
||
}
|
||
|
||
ft.onprogress = function (progress) {
|
||
q.notify(progress);
|
||
};
|
||
|
||
q.promise.abort = function () {
|
||
ft.abort();
|
||
};
|
||
|
||
ft.upload(filePath, uri, q.resolve, q.reject, options, trustAllHosts);
|
||
return q.promise;
|
||
}
|
||
};
|
||
}]);
|
||
|
||
// install : cordova plugin add https://github.com/EddyVerbruggen/Flashlight-PhoneGap-Plugin.git
|
||
// link : https://github.com/EddyVerbruggen/Flashlight-PhoneGap-Plugin
|
||
|
||
angular.module('ngCordova.plugins.flashlight', [])
|
||
|
||
.factory('$cordovaFlashlight', ['$q', '$window', function ($q, $window) {
|
||
|
||
return {
|
||
available: function () {
|
||
var q = $q.defer();
|
||
$window.plugins.flashlight.available(function (isAvailable) {
|
||
q.resolve(isAvailable);
|
||
});
|
||
return q.promise;
|
||
},
|
||
|
||
switchOn: function () {
|
||
var q = $q.defer();
|
||
$window.plugins.flashlight.switchOn(function (response) {
|
||
q.resolve(response);
|
||
}, function (error) {
|
||
q.reject(error);
|
||
});
|
||
return q.promise;
|
||
},
|
||
|
||
switchOff: function () {
|
||
var q = $q.defer();
|
||
$window.plugins.flashlight.switchOff(function (response) {
|
||
q.resolve(response);
|
||
}, function (error) {
|
||
q.reject(error);
|
||
});
|
||
return q.promise;
|
||
},
|
||
|
||
toggle: function () {
|
||
var q = $q.defer();
|
||
$window.plugins.flashlight.toggle(function (response) {
|
||
q.resolve(response);
|
||
}, function (error) {
|
||
q.reject(error);
|
||
});
|
||
return q.promise;
|
||
}
|
||
};
|
||
}]);
|
||
|
||
// install : cordova plugin add https://github.com/floatinghotpot/cordova-plugin-flurry.git
|
||
// link : https://github.com/floatinghotpot/cordova-plugin-flurry
|
||
|
||
angular.module('ngCordova.plugins.flurryAds', [])
|
||
.factory('$cordovaFlurryAds', ['$q', '$window', function ($q, $window) {
|
||
|
||
return {
|
||
setOptions: function (options) {
|
||
var d = $q.defer();
|
||
|
||
$window.FlurryAds.setOptions(options, function () {
|
||
d.resolve();
|
||
}, function () {
|
||
d.reject();
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
createBanner: function (options) {
|
||
var d = $q.defer();
|
||
|
||
$window.FlurryAds.createBanner(options, function () {
|
||
d.resolve();
|
||
}, function () {
|
||
d.reject();
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
removeBanner: function () {
|
||
var d = $q.defer();
|
||
|
||
$window.FlurryAds.removeBanner(function () {
|
||
d.resolve();
|
||
}, function () {
|
||
d.reject();
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
showBanner: function (position) {
|
||
var d = $q.defer();
|
||
|
||
$window.FlurryAds.showBanner(position, function () {
|
||
d.resolve();
|
||
}, function () {
|
||
d.reject();
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
showBannerAtXY: function (x, y) {
|
||
var d = $q.defer();
|
||
|
||
$window.FlurryAds.showBannerAtXY(x, y, function () {
|
||
d.resolve();
|
||
}, function () {
|
||
d.reject();
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
hideBanner: function () {
|
||
var d = $q.defer();
|
||
|
||
$window.FlurryAds.hideBanner(function () {
|
||
d.resolve();
|
||
}, function () {
|
||
d.reject();
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
prepareInterstitial: function (options) {
|
||
var d = $q.defer();
|
||
|
||
$window.FlurryAds.prepareInterstitial(options, function () {
|
||
d.resolve();
|
||
}, function () {
|
||
d.reject();
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
showInterstitial: function () {
|
||
var d = $q.defer();
|
||
|
||
$window.FlurryAds.showInterstitial(function () {
|
||
d.resolve();
|
||
}, function () {
|
||
d.reject();
|
||
});
|
||
|
||
return d.promise;
|
||
}
|
||
};
|
||
}]);
|
||
|
||
// install : cordova plugin add https://github.com/phonegap-build/GAPlugin.git
|
||
// link : https://github.com/phonegap-build/GAPlugin
|
||
|
||
angular.module('ngCordova.plugins.ga', [])
|
||
|
||
.factory('$cordovaGA', ['$q', '$window', function ($q, $window) {
|
||
|
||
return {
|
||
init: function (id, mingap) {
|
||
var q = $q.defer();
|
||
mingap = (mingap >= 0) ? mingap : 10;
|
||
$window.plugins.gaPlugin.init(function (result) {
|
||
q.resolve(result);
|
||
},
|
||
function (error) {
|
||
q.reject(error);
|
||
},
|
||
id, mingap);
|
||
return q.promise;
|
||
},
|
||
|
||
trackEvent: function (success, fail, category, eventAction, eventLabel, eventValue) {
|
||
var q = $q.defer();
|
||
$window.plugins.gaPlugin.trackEvent(function (result) {
|
||
q.resolve(result);
|
||
},
|
||
function (error) {
|
||
q.reject(error);
|
||
},
|
||
category, eventAction, eventLabel, eventValue);
|
||
return q.promise;
|
||
},
|
||
|
||
trackPage: function (success, fail, pageURL) {
|
||
var q = $q.defer();
|
||
$window.plugins.gaPlugin.trackPage(function (result) {
|
||
q.resolve(result);
|
||
},
|
||
function (error) {
|
||
q.reject(error);
|
||
},
|
||
pageURL);
|
||
return q.promise;
|
||
},
|
||
|
||
setVariable: function (success, fail, index, value) {
|
||
var q = $q.defer();
|
||
$window.plugins.gaPlugin.setVariable(function (result) {
|
||
q.resolve(result);
|
||
},
|
||
function (error) {
|
||
q.reject(error);
|
||
},
|
||
index, value);
|
||
return q.promise;
|
||
},
|
||
|
||
exit: function () {
|
||
var q = $q.defer();
|
||
$window.plugins.gaPlugin.exit(function (result) {
|
||
q.resolve(result);
|
||
},
|
||
function (error) {
|
||
q.reject(error);
|
||
});
|
||
return q.promise;
|
||
}
|
||
};
|
||
}]);
|
||
|
||
// install : cordova plugin add cordova-plugin-geolocation
|
||
// link : https://github.com/apache/cordova-plugin-geolocation
|
||
|
||
angular.module('ngCordova.plugins.geolocation', [])
|
||
|
||
.factory('$cordovaGeolocation', ['$q', function ($q) {
|
||
|
||
return {
|
||
getCurrentPosition: function (options) {
|
||
var q = $q.defer();
|
||
|
||
navigator.geolocation.getCurrentPosition(function (result) {
|
||
q.resolve(result);
|
||
}, function (err) {
|
||
q.reject(err);
|
||
}, options);
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
watchPosition: function (options) {
|
||
var q = $q.defer();
|
||
|
||
var watchID = navigator.geolocation.watchPosition(function (result) {
|
||
q.notify(result);
|
||
}, function (err) {
|
||
q.reject(err);
|
||
}, options);
|
||
|
||
q.promise.cancel = function () {
|
||
navigator.geolocation.clearWatch(watchID);
|
||
};
|
||
|
||
q.promise.clearWatch = function (id) {
|
||
navigator.geolocation.clearWatch(id || watchID);
|
||
};
|
||
|
||
q.promise.watchID = watchID;
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
clearWatch: function (watchID) {
|
||
return navigator.geolocation.clearWatch(watchID);
|
||
}
|
||
};
|
||
}]);
|
||
|
||
// install : cordova plugin add cordova-plugin-globalization
|
||
// link : https://github.com/apache/cordova-plugin-globalization
|
||
|
||
angular.module('ngCordova.plugins.globalization', [])
|
||
|
||
.factory('$cordovaGlobalization', ['$q', function ($q) {
|
||
|
||
return {
|
||
getPreferredLanguage: function () {
|
||
var q = $q.defer();
|
||
|
||
navigator.globalization.getPreferredLanguage(function (result) {
|
||
q.resolve(result);
|
||
},
|
||
function (err) {
|
||
q.reject(err);
|
||
});
|
||
return q.promise;
|
||
},
|
||
|
||
getLocaleName: function () {
|
||
var q = $q.defer();
|
||
|
||
navigator.globalization.getLocaleName(function (result) {
|
||
q.resolve(result);
|
||
},
|
||
function (err) {
|
||
q.reject(err);
|
||
});
|
||
return q.promise;
|
||
},
|
||
|
||
getFirstDayOfWeek: function () {
|
||
var q = $q.defer();
|
||
|
||
navigator.globalization.getFirstDayOfWeek(function (result) {
|
||
q.resolve(result);
|
||
},
|
||
function (err) {
|
||
q.reject(err);
|
||
});
|
||
return q.promise;
|
||
},
|
||
|
||
// "date" parameter must be a JavaScript Date Object.
|
||
dateToString: function (date, options) {
|
||
var q = $q.defer();
|
||
|
||
navigator.globalization.dateToString(
|
||
date,
|
||
function (result) {
|
||
q.resolve(result);
|
||
},
|
||
function (err) {
|
||
q.reject(err);
|
||
},
|
||
options);
|
||
return q.promise;
|
||
},
|
||
|
||
stringToDate: function (dateString, options) {
|
||
var q = $q.defer();
|
||
|
||
navigator.globalization.stringToDate(
|
||
dateString,
|
||
function (result) {
|
||
q.resolve(result);
|
||
},
|
||
function (err) {
|
||
q.reject(err);
|
||
},
|
||
options);
|
||
return q.promise;
|
||
},
|
||
|
||
getDatePattern: function (options) {
|
||
var q = $q.defer();
|
||
|
||
navigator.globalization.getDatePattern(
|
||
function (result) {
|
||
q.resolve(result);
|
||
},
|
||
function (err) {
|
||
q.reject(err);
|
||
},
|
||
options);
|
||
return q.promise;
|
||
},
|
||
|
||
getDateNames: function (options) {
|
||
var q = $q.defer();
|
||
|
||
navigator.globalization.getDateNames(
|
||
function (result) {
|
||
q.resolve(result);
|
||
},
|
||
function (err) {
|
||
q.reject(err);
|
||
},
|
||
options);
|
||
return q.promise;
|
||
},
|
||
|
||
// "date" parameter must be a JavaScript Date Object.
|
||
isDayLightSavingsTime: function (date) {
|
||
var q = $q.defer();
|
||
|
||
navigator.globalization.isDayLightSavingsTime(
|
||
date,
|
||
function (result) {
|
||
q.resolve(result);
|
||
},
|
||
function (err) {
|
||
q.reject(err);
|
||
});
|
||
return q.promise;
|
||
},
|
||
|
||
numberToString: function (number, options) {
|
||
var q = $q.defer();
|
||
|
||
navigator.globalization.numberToString(
|
||
number,
|
||
function (result) {
|
||
q.resolve(result);
|
||
},
|
||
function (err) {
|
||
q.reject(err);
|
||
},
|
||
options);
|
||
return q.promise;
|
||
},
|
||
|
||
stringToNumber: function (numberString, options) {
|
||
var q = $q.defer();
|
||
|
||
navigator.globalization.stringToNumber(
|
||
numberString,
|
||
function (result) {
|
||
q.resolve(result);
|
||
},
|
||
function (err) {
|
||
q.reject(err);
|
||
},
|
||
options);
|
||
return q.promise;
|
||
},
|
||
|
||
getNumberPattern: function (options) {
|
||
var q = $q.defer();
|
||
|
||
navigator.globalization.getNumberPattern(
|
||
function (result) {
|
||
q.resolve(result);
|
||
},
|
||
function (err) {
|
||
q.reject(err);
|
||
},
|
||
options);
|
||
return q.promise;
|
||
},
|
||
|
||
getCurrencyPattern: function (currencyCode) {
|
||
var q = $q.defer();
|
||
|
||
navigator.globalization.getCurrencyPattern(
|
||
currencyCode,
|
||
function (result) {
|
||
q.resolve(result);
|
||
},
|
||
function (err) {
|
||
q.reject(err);
|
||
});
|
||
return q.promise;
|
||
}
|
||
|
||
};
|
||
}]);
|
||
|
||
// install : cordova plugin add https://github.com/floatinghotpot/cordova-admob-pro.git
|
||
// link : https://github.com/floatinghotpot/cordova-admob-pro
|
||
|
||
angular.module('ngCordova.plugins.googleAds', [])
|
||
|
||
.factory('$cordovaGoogleAds', ['$q', '$window', function ($q, $window) {
|
||
|
||
return {
|
||
setOptions: function (options) {
|
||
var d = $q.defer();
|
||
|
||
$window.AdMob.setOptions(options, function () {
|
||
d.resolve();
|
||
}, function () {
|
||
d.reject();
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
createBanner: function (options) {
|
||
var d = $q.defer();
|
||
|
||
$window.AdMob.createBanner(options, function () {
|
||
d.resolve();
|
||
}, function () {
|
||
d.reject();
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
removeBanner: function () {
|
||
var d = $q.defer();
|
||
|
||
$window.AdMob.removeBanner(function () {
|
||
d.resolve();
|
||
}, function () {
|
||
d.reject();
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
showBanner: function (position) {
|
||
var d = $q.defer();
|
||
|
||
$window.AdMob.showBanner(position, function () {
|
||
d.resolve();
|
||
}, function () {
|
||
d.reject();
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
showBannerAtXY: function (x, y) {
|
||
var d = $q.defer();
|
||
|
||
$window.AdMob.showBannerAtXY(x, y, function () {
|
||
d.resolve();
|
||
}, function () {
|
||
d.reject();
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
hideBanner: function () {
|
||
var d = $q.defer();
|
||
|
||
$window.AdMob.hideBanner(function () {
|
||
d.resolve();
|
||
}, function () {
|
||
d.reject();
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
prepareInterstitial: function (options) {
|
||
var d = $q.defer();
|
||
|
||
$window.AdMob.prepareInterstitial(options, function () {
|
||
d.resolve();
|
||
}, function () {
|
||
d.reject();
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
showInterstitial: function () {
|
||
var d = $q.defer();
|
||
|
||
$window.AdMob.showInterstitial(function () {
|
||
d.resolve();
|
||
}, function () {
|
||
d.reject();
|
||
});
|
||
|
||
return d.promise;
|
||
}
|
||
};
|
||
}]);
|
||
|
||
// install : cordova plugin add https://github.com/danwilson/google-analytics-plugin.git
|
||
// link : https://github.com/danwilson/google-analytics-plugin
|
||
|
||
angular.module('ngCordova.plugins.googleAnalytics', [])
|
||
|
||
.factory('$cordovaGoogleAnalytics', ['$q', '$window', function ($q, $window) {
|
||
|
||
return {
|
||
startTrackerWithId: function (id) {
|
||
var d = $q.defer();
|
||
|
||
$window.analytics.startTrackerWithId(id, function (response) {
|
||
d.resolve(response);
|
||
}, function (error) {
|
||
d.reject(error);
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
setUserId: function (id) {
|
||
var d = $q.defer();
|
||
|
||
$window.analytics.setUserId(id, function (response) {
|
||
d.resolve(response);
|
||
}, function (error) {
|
||
d.reject(error);
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
debugMode: function () {
|
||
var d = $q.defer();
|
||
|
||
$window.analytics.debugMode(function (response) {
|
||
d.resolve(response);
|
||
}, function () {
|
||
d.reject();
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
trackView: function (screenName) {
|
||
var d = $q.defer();
|
||
|
||
$window.analytics.trackView(screenName, function (response) {
|
||
d.resolve(response);
|
||
}, function (error) {
|
||
d.reject(error);
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
addCustomDimension: function (key, value) {
|
||
var d = $q.defer();
|
||
|
||
$window.analytics.addCustomDimension(key, value, function () {
|
||
d.resolve();
|
||
}, function (error) {
|
||
d.reject(error);
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
trackEvent: function (category, action, label, value) {
|
||
var d = $q.defer();
|
||
|
||
$window.analytics.trackEvent(category, action, label, value, function (response) {
|
||
d.resolve(response);
|
||
}, function (error) {
|
||
d.reject(error);
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
trackException: function (description, fatal) {
|
||
var d = $q.defer();
|
||
|
||
$window.analytics.trackException(description, fatal, function (response) {
|
||
d.resolve(response);
|
||
}, function (error) {
|
||
d.reject(error);
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
trackTiming: function (category, milliseconds, variable, label) {
|
||
var d = $q.defer();
|
||
|
||
$window.analytics.trackTiming(category, milliseconds, variable, label, function (response) {
|
||
d.resolve(response);
|
||
}, function (error) {
|
||
d.reject(error);
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
addTransaction: function (transactionId, affiliation, revenue, tax, shipping, currencyCode) {
|
||
var d = $q.defer();
|
||
|
||
$window.analytics.addTransaction(transactionId, affiliation, revenue, tax, shipping, currencyCode, function (response) {
|
||
d.resolve(response);
|
||
}, function (error) {
|
||
d.reject(error);
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
addTransactionItem: function (transactionId, name, sku, category, price, quantity, currencyCode) {
|
||
var d = $q.defer();
|
||
|
||
$window.analytics.addTransactionItem(transactionId, name, sku, category, price, quantity, currencyCode, function (response) {
|
||
d.resolve(response);
|
||
}, function (error) {
|
||
d.reject(error);
|
||
});
|
||
|
||
return d.promise;
|
||
}
|
||
};
|
||
}]);
|
||
|
||
// install :
|
||
// link :
|
||
|
||
// Google Maps needs ALOT of work!
|
||
// Not for production use
|
||
|
||
angular.module('ngCordova.plugins.googleMap', [])
|
||
|
||
.factory('$cordovaGoogleMap', ['$q', '$window', function ($q, $window) {
|
||
|
||
var map = null;
|
||
|
||
return {
|
||
getMap: function (options) {
|
||
var q = $q.defer();
|
||
|
||
if (!$window.plugin.google.maps) {
|
||
q.reject(null);
|
||
} else {
|
||
var div = document.getElementById('map_canvas');
|
||
map = $window.plugin.google.maps.Map.getMap(options);
|
||
map.setDiv(div);
|
||
q.resolve(map);
|
||
}
|
||
return q.promise;
|
||
},
|
||
|
||
isMapLoaded: function () { // check if an instance of the map exists
|
||
return !!map;
|
||
},
|
||
addMarker: function (markerOptions) { // add a marker to the map with given markerOptions
|
||
var q = $q.defer();
|
||
map.addMarker(markerOptions, function (marker) {
|
||
q.resolve(marker);
|
||
});
|
||
|
||
return q.promise;
|
||
},
|
||
getMapTypeIds: function () {
|
||
return $window.plugin.google.maps.mapTypeId;
|
||
},
|
||
setVisible: function (isVisible) {
|
||
var q = $q.defer();
|
||
map.setVisible(isVisible);
|
||
return q.promise;
|
||
},
|
||
// I don't know how to deallocate te map and the google map plugin.
|
||
cleanup: function () {
|
||
map = null;
|
||
// delete map;
|
||
}
|
||
};
|
||
}]);
|
||
|
||
// install : cordova plugin add https://github.com/ptgamr/cordova-google-play-game.git --variable APP_ID=123456789
|
||
// link : https://github.com/ptgamr/cordova-google-play-game
|
||
|
||
/* globals googleplaygame: true */
|
||
angular.module('ngCordova.plugins.googlePlayGame', [])
|
||
|
||
.factory('$cordovaGooglePlayGame', ['$q', function ($q) {
|
||
|
||
return {
|
||
auth: function () {
|
||
var q = $q.defer();
|
||
|
||
googleplaygame.auth(function (success) {
|
||
return q.resolve(success);
|
||
}, function (err) {
|
||
return q.reject(err);
|
||
});
|
||
|
||
return q.promise;
|
||
},
|
||
signout: function () {
|
||
var q = $q.defer();
|
||
|
||
googleplaygame.signout(function (success) {
|
||
return q.resolve(success);
|
||
}, function (err) {
|
||
return q.reject(err);
|
||
});
|
||
|
||
return q.promise;
|
||
},
|
||
isSignedIn: function () {
|
||
var q = $q.defer();
|
||
|
||
googleplaygame.isSignedIn(function (success) {
|
||
return q.resolve(success);
|
||
}, function (err) {
|
||
return q.reject(err);
|
||
});
|
||
|
||
return q.promise;
|
||
},
|
||
showPlayer: function () {
|
||
var q = $q.defer();
|
||
|
||
googleplaygame.showPlayer(function (success) {
|
||
return q.resolve(success);
|
||
}, function (err) {
|
||
return q.reject(err);
|
||
});
|
||
|
||
return q.promise;
|
||
},
|
||
submitScore: function (data) {
|
||
var q = $q.defer();
|
||
|
||
googleplaygame.submitScore(data, function (success) {
|
||
return q.resolve(success);
|
||
}, function (err) {
|
||
return q.reject(err);
|
||
});
|
||
|
||
return q.promise;
|
||
},
|
||
showAllLeaderboards: function () {
|
||
var q = $q.defer();
|
||
|
||
googleplaygame.showAllLeaderboards(function (success) {
|
||
return q.resolve(success);
|
||
}, function (err) {
|
||
return q.reject(err);
|
||
});
|
||
|
||
return q.promise;
|
||
},
|
||
showLeaderboard: function (data) {
|
||
var q = $q.defer();
|
||
|
||
googleplaygame.showLeaderboard(data, function (success) {
|
||
return q.resolve(success);
|
||
}, function (err) {
|
||
return q.reject(err);
|
||
});
|
||
|
||
return q.promise;
|
||
},
|
||
unlockAchievement: function (data) {
|
||
var q = $q.defer();
|
||
|
||
googleplaygame.unlockAchievement(data, function (success) {
|
||
return q.resolve(success);
|
||
}, function (err) {
|
||
return q.reject(err);
|
||
});
|
||
|
||
return q.promise;
|
||
},
|
||
incrementAchievement: function (data) {
|
||
var q = $q.defer();
|
||
|
||
googleplaygame.incrementAchievement(data, function (success) {
|
||
return q.resolve(success);
|
||
}, function (err) {
|
||
return q.reject(err);
|
||
});
|
||
|
||
return q.promise;
|
||
},
|
||
showAchievements: function () {
|
||
var q = $q.defer();
|
||
|
||
googleplaygame.showAchievements(function (success) {
|
||
return q.resolve(success);
|
||
}, function (err) {
|
||
return q.reject(err);
|
||
});
|
||
|
||
return q.promise;
|
||
}
|
||
};
|
||
|
||
}]);
|
||
|
||
// 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', [])
|
||
|
||
.factory('$cordovaGooglePlus', ['$q', '$window', function ($q, $window) {
|
||
|
||
return {
|
||
login: function (iosKey) {
|
||
var q = $q.defer();
|
||
|
||
if (iosKey === undefined) {
|
||
iosKey = {};
|
||
}
|
||
$window.plugins.googleplus.login({'iOSApiKey': iosKey}, function (response) {
|
||
q.resolve(response);
|
||
}, function (error) {
|
||
q.reject(error);
|
||
});
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
silentLogin: function (iosKey) {
|
||
var q = $q.defer();
|
||
|
||
if (iosKey === undefined) {
|
||
iosKey = {};
|
||
}
|
||
$window.plugins.googleplus.trySilentLogin({'iOSApiKey': iosKey}, function (response) {
|
||
q.resolve(response);
|
||
}, function (error) {
|
||
q.reject(error);
|
||
});
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
logout: function () {
|
||
var q = $q.defer();
|
||
$window.plugins.googleplus.logout(function (response) {
|
||
q.resolve(response);
|
||
});
|
||
},
|
||
|
||
disconnect: function () {
|
||
var q = $q.defer();
|
||
$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;
|
||
}
|
||
};
|
||
|
||
}]);
|
||
|
||
// install : cordova plugin add https://github.com/Telerik-Verified-Plugins/HealthKit.git
|
||
// link : https://github.com/Telerik-Verified-Plugins/HealthKit
|
||
|
||
angular.module('ngCordova.plugins.healthKit', [])
|
||
|
||
.factory('$cordovaHealthKit', ['$q', '$window', function ($q, $window) {
|
||
|
||
return {
|
||
isAvailable: function () {
|
||
var q = $q.defer();
|
||
|
||
$window.plugins.healthkit.available(function (success) {
|
||
q.resolve(success);
|
||
}, function (err) {
|
||
q.reject(err);
|
||
});
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
/**
|
||
* Check whether or not the user granted your app access to a specific HealthKit type.
|
||
* Reference for possible types:
|
||
* https://developer.apple.com/library/ios/documentation/HealthKit/Reference/HealthKit_Constants/
|
||
*/
|
||
checkAuthStatus: function (type) {
|
||
var q = $q.defer();
|
||
|
||
type = type || 'HKQuantityTypeIdentifierHeight';
|
||
|
||
$window.plugins.healthkit.checkAuthStatus({
|
||
'type': type
|
||
}, function (success) {
|
||
q.resolve(success);
|
||
}, function (err) {
|
||
q.reject(err);
|
||
});
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
/**
|
||
* Request authorization to access HealthKit data. See the full HealthKit constants
|
||
* reference for possible read and write types:
|
||
* https://developer.apple.com/library/ios/documentation/HealthKit/Reference/HealthKit_Constants/
|
||
*/
|
||
requestAuthorization: function (readTypes, writeTypes) {
|
||
var q = $q.defer();
|
||
|
||
readTypes = readTypes || [
|
||
'HKCharacteristicTypeIdentifierDateOfBirth', 'HKQuantityTypeIdentifierActiveEnergyBurned', 'HKQuantityTypeIdentifierHeight'
|
||
];
|
||
writeTypes = writeTypes || [
|
||
'HKQuantityTypeIdentifierActiveEnergyBurned', 'HKQuantityTypeIdentifierHeight', 'HKQuantityTypeIdentifierDistanceCycling'
|
||
];
|
||
|
||
$window.plugins.healthkit.requestAuthorization({
|
||
'readTypes': readTypes,
|
||
'writeTypes': writeTypes
|
||
}, function (success) {
|
||
q.resolve(success);
|
||
}, function (err) {
|
||
q.reject(err);
|
||
});
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
readDateOfBirth: function () {
|
||
var q = $q.defer();
|
||
$window.plugins.healthkit.readDateOfBirth(
|
||
function (success) {
|
||
q.resolve(success);
|
||
},
|
||
function (err) {
|
||
q.resolve(err);
|
||
}
|
||
);
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
readGender: function () {
|
||
var q = $q.defer();
|
||
$window.plugins.healthkit.readGender(
|
||
function (success) {
|
||
q.resolve(success);
|
||
},
|
||
function (err) {
|
||
q.resolve(err);
|
||
}
|
||
);
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
saveWeight: function (value, units, date) {
|
||
var q = $q.defer();
|
||
$window.plugins.healthkit.saveWeight({
|
||
'unit': units || 'lb',
|
||
'amount': value,
|
||
'date': date || new Date()
|
||
},
|
||
function (success) {
|
||
q.resolve(success);
|
||
},
|
||
function (err) {
|
||
q.resolve(err);
|
||
}
|
||
);
|
||
return q.promise;
|
||
},
|
||
|
||
readWeight: function (units) {
|
||
var q = $q.defer();
|
||
$window.plugins.healthkit.readWeight({
|
||
'unit': units || 'lb'
|
||
},
|
||
function (success) {
|
||
q.resolve(success);
|
||
},
|
||
function (err) {
|
||
q.resolve(err);
|
||
}
|
||
);
|
||
|
||
return q.promise;
|
||
},
|
||
saveHeight: function (value, units, date) {
|
||
var q = $q.defer();
|
||
$window.plugins.healthkit.saveHeight({
|
||
'unit': units || 'in',
|
||
'amount': value,
|
||
'date': date || new Date()
|
||
},
|
||
function (success) {
|
||
q.resolve(success);
|
||
},
|
||
function (err) {
|
||
q.resolve(err);
|
||
}
|
||
);
|
||
return q.promise;
|
||
},
|
||
readHeight: function (units) {
|
||
var q = $q.defer();
|
||
$window.plugins.healthkit.readHeight({
|
||
'unit': units || 'in'
|
||
},
|
||
function (success) {
|
||
q.resolve(success);
|
||
},
|
||
function (err) {
|
||
q.resolve(err);
|
||
}
|
||
);
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
findWorkouts: function () {
|
||
var q = $q.defer();
|
||
$window.plugins.healthkit.findWorkouts({},
|
||
function (success) {
|
||
q.resolve(success);
|
||
},
|
||
function (err) {
|
||
q.resolve(err);
|
||
}
|
||
);
|
||
return q.promise;
|
||
},
|
||
|
||
/**
|
||
* Save a workout.
|
||
*
|
||
* Workout param should be of the format:
|
||
{
|
||
'activityType': 'HKWorkoutActivityTypeCycling', // HKWorkoutActivityType constant (https://developer.apple.com/library/ios/documentation/HealthKit/Reference/HKWorkout_Class/#//apple_ref/c/tdef/HKWorkoutActivityType)
|
||
'quantityType': 'HKQuantityTypeIdentifierDistanceCycling',
|
||
'startDate': new Date(), // mandatory
|
||
'endDate': null, // optional, use either this or duration
|
||
'duration': 3600, // in seconds, optional, use either this or endDate
|
||
'energy': 300, //
|
||
'energyUnit': 'kcal', // J|cal|kcal
|
||
'distance': 11, // optional
|
||
'distanceUnit': 'km' // probably useful with the former param
|
||
// 'extraData': "", // Not sure how necessary this is
|
||
},
|
||
*/
|
||
saveWorkout: function (workout) {
|
||
var q = $q.defer();
|
||
$window.plugins.healthkit.saveWorkout(workout,
|
||
function (success) {
|
||
q.resolve(success);
|
||
},
|
||
function (err) {
|
||
q.resolve(err);
|
||
}
|
||
);
|
||
return q.promise;
|
||
},
|
||
|
||
/**
|
||
* Sample any kind of health data through a given date range.
|
||
* sampleQuery of the format:
|
||
{
|
||
'startDate': yesterday, // mandatory
|
||
'endDate': tomorrow, // mandatory
|
||
'sampleType': 'HKQuantityTypeIdentifierHeight',
|
||
'unit' : 'cm'
|
||
},
|
||
*/
|
||
querySampleType: function (sampleQuery) {
|
||
var q = $q.defer();
|
||
$window.plugins.healthkit.querySampleType(sampleQuery,
|
||
function (success) {
|
||
q.resolve(success);
|
||
},
|
||
function (err) {
|
||
q.resolve(err);
|
||
}
|
||
);
|
||
return q.promise;
|
||
}
|
||
};
|
||
}]);
|
||
|
||
// install : cordova plugin add https://github.com/floatinghotpot/cordova-httpd.git
|
||
// link : https://github.com/floatinghotpot/cordova-httpd
|
||
|
||
angular.module('ngCordova.plugins.httpd', [])
|
||
|
||
.factory('$cordovaHttpd', ['$q', function ($q) {
|
||
|
||
return {
|
||
startServer: function (options) {
|
||
var d = $q.defer();
|
||
|
||
cordova.plugins.CorHttpd.startServer(options, function () {
|
||
d.resolve();
|
||
}, function () {
|
||
d.reject();
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
stopServer: function () {
|
||
var d = $q.defer();
|
||
|
||
cordova.plugins.CorHttpd.stopServer(function () {
|
||
d.resolve();
|
||
}, function () {
|
||
d.reject();
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
getURL: function () {
|
||
var d = $q.defer();
|
||
|
||
cordova.plugins.CorHttpd.getURL(function (url) {
|
||
d.resolve(url);
|
||
}, function () {
|
||
d.reject();
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
getLocalPath: function () {
|
||
var d = $q.defer();
|
||
|
||
cordova.plugins.CorHttpd.getLocalPath(function (path) {
|
||
d.resolve(path);
|
||
}, function () {
|
||
d.reject();
|
||
});
|
||
|
||
return d.promise;
|
||
}
|
||
|
||
};
|
||
}]);
|
||
|
||
// install : cordova plugin add https://github.com/floatinghotpot/cordova-plugin-iad.git
|
||
// link : https://github.com/floatinghotpot/cordova-plugin-iad
|
||
|
||
angular.module('ngCordova.plugins.iAd', [])
|
||
.factory('$cordovaiAd', ['$q', '$window', function ($q, $window) {
|
||
|
||
return {
|
||
setOptions: function (options) {
|
||
var d = $q.defer();
|
||
|
||
$window.iAd.setOptions(options, function () {
|
||
d.resolve();
|
||
}, function () {
|
||
d.reject();
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
createBanner: function (options) {
|
||
var d = $q.defer();
|
||
|
||
$window.iAd.createBanner(options, function () {
|
||
d.resolve();
|
||
}, function () {
|
||
d.reject();
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
removeBanner: function () {
|
||
var d = $q.defer();
|
||
|
||
$window.iAd.removeBanner(function () {
|
||
d.resolve();
|
||
}, function () {
|
||
d.reject();
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
showBanner: function (position) {
|
||
var d = $q.defer();
|
||
|
||
$window.iAd.showBanner(position, function () {
|
||
d.resolve();
|
||
}, function () {
|
||
d.reject();
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
showBannerAtXY: function (x, y) {
|
||
var d = $q.defer();
|
||
|
||
$window.iAd.showBannerAtXY(x, y, function () {
|
||
d.resolve();
|
||
}, function () {
|
||
d.reject();
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
hideBanner: function () {
|
||
var d = $q.defer();
|
||
|
||
$window.iAd.hideBanner(function () {
|
||
d.resolve();
|
||
}, function () {
|
||
d.reject();
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
prepareInterstitial: function (options) {
|
||
var d = $q.defer();
|
||
|
||
$window.iAd.prepareInterstitial(options, function () {
|
||
d.resolve();
|
||
}, function () {
|
||
d.reject();
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
showInterstitial: function () {
|
||
var d = $q.defer();
|
||
|
||
$window.iAd.showInterstitial(function () {
|
||
d.resolve();
|
||
}, function () {
|
||
d.reject();
|
||
});
|
||
|
||
return d.promise;
|
||
}
|
||
};
|
||
}]);
|
||
|
||
// install : cordova plugin add https://github.com/wymsee/cordova-imagePicker.git
|
||
// link : https://github.com/wymsee/cordova-imagePicker
|
||
|
||
angular.module('ngCordova.plugins.imagePicker', [])
|
||
|
||
.factory('$cordovaImagePicker', ['$q', '$window', function ($q, $window) {
|
||
|
||
return {
|
||
getPictures: function (options) {
|
||
var q = $q.defer();
|
||
|
||
$window.imagePicker.getPictures(function (results) {
|
||
q.resolve(results);
|
||
}, function (error) {
|
||
q.reject(error);
|
||
}, options);
|
||
|
||
return q.promise;
|
||
}
|
||
};
|
||
}]);
|
||
|
||
// install : cordova plugin add cordova-plugin-inappbrowser
|
||
// link : https://github.com/apache/cordova-plugin-inappbrowser
|
||
|
||
angular.module('ngCordova.plugins.inAppBrowser', [])
|
||
|
||
.provider('$cordovaInAppBrowser', [function () {
|
||
|
||
var ref;
|
||
var defaultOptions = this.defaultOptions = {};
|
||
|
||
this.setDefaultOptions = function (config) {
|
||
defaultOptions = angular.extend(defaultOptions, config);
|
||
};
|
||
|
||
this.$get = ['$rootScope', '$q', '$window', '$timeout', function ($rootScope, $q, $window, $timeout) {
|
||
return {
|
||
open: function (url, target, requestOptions) {
|
||
var q = $q.defer();
|
||
|
||
if (requestOptions && !angular.isObject(requestOptions)) {
|
||
q.reject('options must be an object');
|
||
return q.promise;
|
||
}
|
||
|
||
var options = angular.extend({}, defaultOptions, requestOptions);
|
||
|
||
var opt = [];
|
||
angular.forEach(options, function (value, key) {
|
||
opt.push(key + '=' + value);
|
||
});
|
||
var optionsString = opt.join();
|
||
|
||
ref = $window.open(url, target, optionsString);
|
||
|
||
ref.addEventListener('loadstart', function (event) {
|
||
$timeout(function () {
|
||
$rootScope.$broadcast('$cordovaInAppBrowser:loadstart', event);
|
||
});
|
||
}, false);
|
||
|
||
ref.addEventListener('loadstop', function (event) {
|
||
q.resolve(event);
|
||
$timeout(function () {
|
||
$rootScope.$broadcast('$cordovaInAppBrowser:loadstop', event);
|
||
});
|
||
}, false);
|
||
|
||
ref.addEventListener('loaderror', function (event) {
|
||
q.reject(event);
|
||
$timeout(function () {
|
||
$rootScope.$broadcast('$cordovaInAppBrowser:loaderror', event);
|
||
});
|
||
}, false);
|
||
|
||
ref.addEventListener('exit', function (event) {
|
||
$timeout(function () {
|
||
$rootScope.$broadcast('$cordovaInAppBrowser:exit', event);
|
||
});
|
||
}, false);
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
close: function () {
|
||
ref.close();
|
||
ref = null;
|
||
},
|
||
|
||
show: function () {
|
||
ref.show();
|
||
},
|
||
|
||
executeScript: function (details) {
|
||
var q = $q.defer();
|
||
|
||
ref.executeScript(details, function (result) {
|
||
q.resolve(result);
|
||
});
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
insertCSS: function (details) {
|
||
var q = $q.defer();
|
||
|
||
ref.insertCSS(details, function (result) {
|
||
q.resolve(result);
|
||
});
|
||
|
||
return q.promise;
|
||
}
|
||
};
|
||
}];
|
||
}]);
|
||
|
||
// install : cordova plugin add https://github.com/EddyVerbruggen/Insomnia-PhoneGap-Plugin.git
|
||
// link : https://github.com/EddyVerbruggen/Insomnia-PhoneGap-Plugin
|
||
angular.module('ngCordova.plugins.insomnia', [])
|
||
|
||
.factory('$cordovaInsomnia', ['$window', function ($window) {
|
||
|
||
return {
|
||
keepAwake: function () {
|
||
return $window.plugins.insomnia.keepAwake();
|
||
},
|
||
allowSleepAgain: function () {
|
||
return $window.plugins.insomnia.allowSleepAgain();
|
||
}
|
||
};
|
||
|
||
}]);
|
||
|
||
// install : cordova plugins add https://github.com/vstirbu/InstagramPlugin.git
|
||
// link : https://github.com/vstirbu/InstagramPlugin
|
||
|
||
/* globals Instagram: true */
|
||
angular.module('ngCordova.plugins.instagram', [])
|
||
|
||
.factory('$cordovaInstagram', ['$q', function ($q) {
|
||
|
||
return {
|
||
share: function (options) {
|
||
var q = $q.defer();
|
||
|
||
if (!window.Instagram) {
|
||
console.error('Tried to call Instagram.share but the Instagram plugin isn\'t installed!');
|
||
q.resolve(null);
|
||
return q.promise;
|
||
}
|
||
|
||
Instagram.share(options.image, options.caption, function (err) {
|
||
if(err) {
|
||
q.reject(err);
|
||
} else {
|
||
q.resolve(true);
|
||
}
|
||
});
|
||
return q.promise;
|
||
},
|
||
isInstalled: function () {
|
||
var q = $q.defer();
|
||
|
||
if (!window.Instagram) {
|
||
console.error('Tried to call Instagram.isInstalled but the Instagram plugin isn\'t installed!');
|
||
q.resolve(null);
|
||
return q.promise;
|
||
}
|
||
|
||
Instagram.isInstalled(function (err, installed) {
|
||
if (err) {
|
||
q.reject(err);
|
||
} else {
|
||
q.resolve(installed);
|
||
}
|
||
});
|
||
return q.promise;
|
||
}
|
||
};
|
||
}]);
|
||
|
||
// install : cordova plugin add https://github.com/driftyco/ionic-plugins-keyboard.git
|
||
// link : https://github.com/driftyco/ionic-plugins-keyboard
|
||
|
||
angular.module('ngCordova.plugins.keyboard', [])
|
||
|
||
.factory('$cordovaKeyboard', ['$rootScope', function ($rootScope) {
|
||
|
||
var keyboardShowEvent = function () {
|
||
$rootScope.$evalAsync(function () {
|
||
$rootScope.$broadcast('$cordovaKeyboard:show');
|
||
});
|
||
};
|
||
|
||
var keyboardHideEvent = function () {
|
||
$rootScope.$evalAsync(function () {
|
||
$rootScope.$broadcast('$cordovaKeyboard:hide');
|
||
});
|
||
};
|
||
|
||
document.addEventListener('deviceready', function () {
|
||
if (cordova.plugins.Keyboard) {
|
||
window.addEventListener('native.keyboardshow', keyboardShowEvent, false);
|
||
window.addEventListener('native.keyboardhide', keyboardHideEvent, false);
|
||
}
|
||
});
|
||
|
||
return {
|
||
hideAccessoryBar: function (bool) {
|
||
return cordova.plugins.Keyboard.hideKeyboardAccessoryBar(bool);
|
||
},
|
||
|
||
close: function () {
|
||
return cordova.plugins.Keyboard.close();
|
||
},
|
||
|
||
show: function () {
|
||
return cordova.plugins.Keyboard.show();
|
||
},
|
||
|
||
disableScroll: function (bool) {
|
||
return cordova.plugins.Keyboard.disableScroll(bool);
|
||
},
|
||
|
||
isVisible: function () {
|
||
return cordova.plugins.Keyboard.isVisible;
|
||
},
|
||
|
||
clearShowWatch: function () {
|
||
document.removeEventListener('native.keyboardshow', keyboardShowEvent);
|
||
$rootScope.$$listeners['$cordovaKeyboard:show'] = [];
|
||
},
|
||
|
||
clearHideWatch: function () {
|
||
document.removeEventListener('native.keyboardhide', keyboardHideEvent);
|
||
$rootScope.$$listeners['$cordovaKeyboard:hide'] = [];
|
||
}
|
||
};
|
||
}]);
|
||
|
||
// install : cordova plugin add https://github.com/shazron/KeychainPlugin.git
|
||
// link : https://github.com/shazron/KeychainPlugin
|
||
|
||
/* globals Keychain: true */
|
||
angular.module('ngCordova.plugins.keychain', [])
|
||
|
||
.factory('$cordovaKeychain', ['$q', function ($q) {
|
||
|
||
return {
|
||
getForKey: function (key, serviceName) {
|
||
var defer = $q.defer(),
|
||
kc = new Keychain();
|
||
|
||
kc.getForKey(defer.resolve, defer.reject, key, serviceName);
|
||
|
||
return defer.promise;
|
||
},
|
||
|
||
setForKey: function (key, serviceName, value) {
|
||
var defer = $q.defer(),
|
||
kc = new Keychain();
|
||
|
||
kc.setForKey(defer.resolve, defer.reject, key, serviceName, value);
|
||
|
||
return defer.promise;
|
||
},
|
||
|
||
removeForKey: function (key, serviceName) {
|
||
var defer = $q.defer(),
|
||
kc = new Keychain();
|
||
|
||
kc.removeForKey(defer.resolve, defer.reject, key, serviceName);
|
||
|
||
return defer.promise;
|
||
}
|
||
};
|
||
}]);
|
||
|
||
// install : cordova plugin add uk.co.workingedge.phonegap.plugin.launchnavigator
|
||
// link : https://github.com/dpa99c/phonegap-launch-navigator
|
||
|
||
/* globals launchnavigator: true */
|
||
angular.module('ngCordova.plugins.launchNavigator', [])
|
||
|
||
.factory('$cordovaLaunchNavigator', ['$q', function ($q) {
|
||
|
||
return {
|
||
navigate: function (destination, start, 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
|
||
|
||
angular.module('ngCordova.plugins.localNotification', [])
|
||
|
||
.factory('$cordovaLocalNotification', ['$q', '$window', '$rootScope', '$timeout', function ($q, $window, $rootScope, $timeout) {
|
||
document.addEventListener('deviceready', function () {
|
||
if ($window.cordova &&
|
||
$window.cordova.plugins &&
|
||
$window.cordova.plugins.notification &&
|
||
$window.cordova.plugins.notification.local) {
|
||
// ----- "Scheduling" events
|
||
|
||
// A local notification was scheduled
|
||
$window.cordova.plugins.notification.local.on('schedule', function (notification, state) {
|
||
$timeout(function () {
|
||
$rootScope.$broadcast('$cordovaLocalNotification:schedule', notification, state);
|
||
});
|
||
});
|
||
|
||
// A local notification was triggered
|
||
$window.cordova.plugins.notification.local.on('trigger', function (notification, state) {
|
||
$timeout(function () {
|
||
$rootScope.$broadcast('$cordovaLocalNotification:trigger', notification, state);
|
||
});
|
||
});
|
||
|
||
// ----- "Update" events
|
||
|
||
// A local notification was updated
|
||
$window.cordova.plugins.notification.local.on('update', function (notification, state) {
|
||
$timeout(function () {
|
||
$rootScope.$broadcast('$cordovaLocalNotification:update', notification, state);
|
||
});
|
||
});
|
||
|
||
// ----- "Clear" events
|
||
|
||
// A local notification was cleared from the notification center
|
||
$window.cordova.plugins.notification.local.on('clear', function (notification, state) {
|
||
$timeout(function () {
|
||
$rootScope.$broadcast('$cordovaLocalNotification:clear', notification, state);
|
||
});
|
||
});
|
||
|
||
// All local notifications were cleared from the notification center
|
||
$window.cordova.plugins.notification.local.on('clearall', function (state) {
|
||
$timeout(function () {
|
||
$rootScope.$broadcast('$cordovaLocalNotification:clearall', state);
|
||
});
|
||
});
|
||
|
||
// ----- "Cancel" events
|
||
|
||
// A local notification was cancelled
|
||
$window.cordova.plugins.notification.local.on('cancel', function (notification, state) {
|
||
$timeout(function () {
|
||
$rootScope.$broadcast('$cordovaLocalNotification:cancel', notification, state);
|
||
});
|
||
});
|
||
|
||
// All local notifications were cancelled
|
||
$window.cordova.plugins.notification.local.on('cancelall', function (state) {
|
||
$timeout(function () {
|
||
$rootScope.$broadcast('$cordovaLocalNotification:cancelall', state);
|
||
});
|
||
});
|
||
|
||
// ----- Other events
|
||
|
||
// A local notification was clicked
|
||
$window.cordova.plugins.notification.local.on('click', function (notification, state) {
|
||
$timeout(function () {
|
||
$rootScope.$broadcast('$cordovaLocalNotification:click', notification, state);
|
||
});
|
||
});
|
||
}
|
||
}, false);
|
||
return {
|
||
schedule: function (options, scope) {
|
||
var q = $q.defer();
|
||
scope = scope || null;
|
||
|
||
$window.cordova.plugins.notification.local.schedule(options, function (result) {
|
||
q.resolve(result);
|
||
}, scope);
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
add: function (options, scope) {
|
||
console.warn('Deprecated: use "schedule" instead.');
|
||
|
||
var q = $q.defer();
|
||
scope = scope || null;
|
||
|
||
$window.cordova.plugins.notification.local.schedule(options, function (result) {
|
||
q.resolve(result);
|
||
}, scope);
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
update: function (options, scope) {
|
||
var q = $q.defer();
|
||
scope = scope || null;
|
||
|
||
$window.cordova.plugins.notification.local.update(options, function (result) {
|
||
q.resolve(result);
|
||
}, scope);
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
clear: function (ids, scope) {
|
||
var q = $q.defer();
|
||
scope = scope || null;
|
||
|
||
$window.cordova.plugins.notification.local.clear(ids, function (result) {
|
||
q.resolve(result);
|
||
}, scope);
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
clearAll: function (scope) {
|
||
var q = $q.defer();
|
||
scope = scope || null;
|
||
|
||
$window.cordova.plugins.notification.local.clearAll(function (result) {
|
||
q.resolve(result);
|
||
}, scope);
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
cancel: function (ids, scope) {
|
||
var q = $q.defer();
|
||
scope = scope || null;
|
||
|
||
$window.cordova.plugins.notification.local.cancel(ids, function (result) {
|
||
q.resolve(result);
|
||
}, scope);
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
cancelAll: function (scope) {
|
||
var q = $q.defer();
|
||
scope = scope || null;
|
||
|
||
$window.cordova.plugins.notification.local.cancelAll(function (result) {
|
||
q.resolve(result);
|
||
}, scope);
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
isPresent: function (id, scope) {
|
||
var q = $q.defer();
|
||
scope = scope || null;
|
||
|
||
$window.cordova.plugins.notification.local.isPresent(id, function (result) {
|
||
q.resolve(result);
|
||
}, scope);
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
isScheduled: function (id, scope) {
|
||
var q = $q.defer();
|
||
scope = scope || null;
|
||
|
||
$window.cordova.plugins.notification.local.isScheduled(id, function (result) {
|
||
q.resolve(result);
|
||
}, scope);
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
isTriggered: function (id, scope) {
|
||
var q = $q.defer();
|
||
scope = scope || null;
|
||
|
||
$window.cordova.plugins.notification.local.isTriggered(id, function (result) {
|
||
q.resolve(result);
|
||
}, scope);
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
hasPermission: function (scope) {
|
||
var q = $q.defer();
|
||
scope = scope || null;
|
||
|
||
$window.cordova.plugins.notification.local.hasPermission(function (result) {
|
||
if (result) {
|
||
q.resolve(result);
|
||
} else {
|
||
q.reject(result);
|
||
}
|
||
}, scope);
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
registerPermission: function (scope) {
|
||
var q = $q.defer();
|
||
scope = scope || null;
|
||
|
||
$window.cordova.plugins.notification.local.registerPermission(function (result) {
|
||
if (result) {
|
||
q.resolve(result);
|
||
} else {
|
||
q.reject(result);
|
||
}
|
||
}, scope);
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
promptForPermission: function (scope) {
|
||
console.warn('Deprecated: use "registerPermission" instead.');
|
||
|
||
var q = $q.defer();
|
||
scope = scope || null;
|
||
|
||
$window.cordova.plugins.notification.local.registerPermission(function (result) {
|
||
if (result) {
|
||
q.resolve(result);
|
||
} else {
|
||
q.reject(result);
|
||
}
|
||
}, scope);
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
getAllIds: function (scope) {
|
||
var q = $q.defer();
|
||
scope = scope || null;
|
||
|
||
$window.cordova.plugins.notification.local.getAllIds(function (result) {
|
||
q.resolve(result);
|
||
}, scope);
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
getIds: function (scope) {
|
||
var q = $q.defer();
|
||
scope = scope || null;
|
||
|
||
$window.cordova.plugins.notification.local.getIds(function (result) {
|
||
q.resolve(result);
|
||
}, scope);
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
getScheduledIds: function (scope) {
|
||
var q = $q.defer();
|
||
scope = scope || null;
|
||
|
||
$window.cordova.plugins.notification.local.getScheduledIds(function (result) {
|
||
q.resolve(result);
|
||
}, scope);
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
getTriggeredIds: function (scope) {
|
||
var q = $q.defer();
|
||
scope = scope || null;
|
||
|
||
$window.cordova.plugins.notification.local.getTriggeredIds(function (result) {
|
||
q.resolve(result);
|
||
}, scope);
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
get: function (ids, scope) {
|
||
var q = $q.defer();
|
||
scope = scope || null;
|
||
|
||
$window.cordova.plugins.notification.local.get(ids, function (result) {
|
||
q.resolve(result);
|
||
}, scope);
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
getAll: function (scope) {
|
||
var q = $q.defer();
|
||
scope = scope || null;
|
||
|
||
$window.cordova.plugins.notification.local.getAll(function (result) {
|
||
q.resolve(result);
|
||
}, scope);
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
getScheduled: function (ids, scope) {
|
||
var q = $q.defer();
|
||
scope = scope || null;
|
||
|
||
$window.cordova.plugins.notification.local.getScheduled(ids, function (result) {
|
||
q.resolve(result);
|
||
}, scope);
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
getAllScheduled: function (scope) {
|
||
var q = $q.defer();
|
||
scope = scope || null;
|
||
|
||
$window.cordova.plugins.notification.local.getAllScheduled(function (result) {
|
||
q.resolve(result);
|
||
}, scope);
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
getTriggered: function (ids, scope) {
|
||
var q = $q.defer();
|
||
scope = scope || null;
|
||
|
||
$window.cordova.plugins.notification.local.getTriggered(ids, function (result) {
|
||
q.resolve(result);
|
||
}, scope);
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
getAllTriggered: function (scope) {
|
||
var q = $q.defer();
|
||
scope = scope || null;
|
||
|
||
$window.cordova.plugins.notification.local.getAllTriggered(function (result) {
|
||
q.resolve(result);
|
||
}, scope);
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
getDefaults: function () {
|
||
return $window.cordova.plugins.notification.local.getDefaults();
|
||
},
|
||
|
||
setDefaults: function (Object) {
|
||
$window.cordova.plugins.notification.local.setDefaults(Object);
|
||
}
|
||
};
|
||
}]);
|
||
|
||
// install : cordova plugin add https://github.com/floatinghotpot/cordova-plugin-mmedia.git
|
||
// link : https://github.com/floatinghotpot/cordova-plugin-mmedia
|
||
|
||
angular.module('ngCordova.plugins.mMediaAds', [])
|
||
|
||
.factory('$cordovaMMediaAds', ['$q', '$window', function ($q, $window) {
|
||
|
||
return {
|
||
setOptions: function (options) {
|
||
var d = $q.defer();
|
||
|
||
$window.mMedia.setOptions(options, function () {
|
||
d.resolve();
|
||
}, function () {
|
||
d.reject();
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
createBanner: function (options) {
|
||
var d = $q.defer();
|
||
|
||
$window.mMedia.createBanner(options, function () {
|
||
d.resolve();
|
||
}, function () {
|
||
d.reject();
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
removeBanner: function () {
|
||
var d = $q.defer();
|
||
|
||
$window.mMedia.removeBanner(function () {
|
||
d.resolve();
|
||
}, function () {
|
||
d.reject();
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
showBanner: function (position) {
|
||
var d = $q.defer();
|
||
|
||
$window.mMedia.showBanner(position, function () {
|
||
d.resolve();
|
||
}, function () {
|
||
d.reject();
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
showBannerAtXY: function (x, y) {
|
||
var d = $q.defer();
|
||
|
||
$window.mMedia.showBannerAtXY(x, y, function () {
|
||
d.resolve();
|
||
}, function () {
|
||
d.reject();
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
hideBanner: function () {
|
||
var d = $q.defer();
|
||
|
||
$window.mMedia.hideBanner(function () {
|
||
d.resolve();
|
||
}, function () {
|
||
d.reject();
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
prepareInterstitial: function (options) {
|
||
var d = $q.defer();
|
||
|
||
$window.mMedia.prepareInterstitial(options, function () {
|
||
d.resolve();
|
||
}, function () {
|
||
d.reject();
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
showInterstitial: function () {
|
||
var d = $q.defer();
|
||
|
||
$window.mMedia.showInterstitial(function () {
|
||
d.resolve();
|
||
}, function () {
|
||
d.reject();
|
||
});
|
||
|
||
return d.promise;
|
||
}
|
||
};
|
||
}]);
|
||
|
||
// install : cordova plugin add cordova-plugin-media
|
||
// link : https://github.com/apache/cordova-plugin-media
|
||
|
||
/* globals Media: true */
|
||
angular.module('ngCordova.plugins.media', [])
|
||
|
||
.service('NewMedia', ['$q', '$interval', function ($q, $interval) {
|
||
var q, q2, q3, mediaStatus = null, mediaPosition = -1, mediaTimer, mediaDuration = -1;
|
||
|
||
function setTimer(media) {
|
||
if (angular.isDefined(mediaTimer)) {
|
||
return;
|
||
}
|
||
|
||
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) {
|
||
clearTimer();
|
||
resetValues();
|
||
q.reject(error);
|
||
}, function (status) {
|
||
mediaStatus = status;
|
||
q.notify({status: mediaStatus});
|
||
});
|
||
}
|
||
|
||
// iOS quirks :
|
||
// - myMedia.play({ numberOfLoops: 2 }) -> looping
|
||
// - myMedia.play({ playAudioWhenScreenIsLocked : false })
|
||
NewMedia.prototype.play = function (options) {
|
||
q = $q.defer();
|
||
|
||
if (typeof options !== 'object') {
|
||
options = {};
|
||
}
|
||
|
||
this.media.play(options);
|
||
|
||
setTimer(this.media);
|
||
|
||
return q.promise;
|
||
};
|
||
|
||
NewMedia.prototype.pause = function () {
|
||
clearTimer();
|
||
this.media.pause();
|
||
};
|
||
|
||
NewMedia.prototype.stop = function () {
|
||
this.media.stop();
|
||
};
|
||
|
||
NewMedia.prototype.release = function () {
|
||
this.media.release();
|
||
this.media = undefined;
|
||
};
|
||
|
||
NewMedia.prototype.seekTo = function (timing) {
|
||
this.media.seekTo(timing);
|
||
};
|
||
|
||
NewMedia.prototype.setVolume = function (volume) {
|
||
this.media.setVolume(volume);
|
||
};
|
||
|
||
NewMedia.prototype.startRecord = function () {
|
||
this.media.startRecord();
|
||
};
|
||
|
||
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('$cordovaMedia', ['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 {
|
||
setOptions: function (options) {
|
||
var d = $q.defer();
|
||
|
||
$window.MobFox.setOptions(options, function () {
|
||
d.resolve();
|
||
}, function () {
|
||
d.reject();
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
createBanner: function (options) {
|
||
var d = $q.defer();
|
||
|
||
$window.MobFox.createBanner(options, function () {
|
||
d.resolve();
|
||
}, function () {
|
||
d.reject();
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
removeBanner: function () {
|
||
var d = $q.defer();
|
||
|
||
$window.MobFox.removeBanner(function () {
|
||
d.resolve();
|
||
}, function () {
|
||
d.reject();
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
showBanner: function (position) {
|
||
var d = $q.defer();
|
||
|
||
$window.MobFox.showBanner(position, function () {
|
||
d.resolve();
|
||
}, function () {
|
||
d.reject();
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
showBannerAtXY: function (x, y) {
|
||
var d = $q.defer();
|
||
|
||
$window.MobFox.showBannerAtXY(x, y, function () {
|
||
d.resolve();
|
||
}, function () {
|
||
d.reject();
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
hideBanner: function () {
|
||
var d = $q.defer();
|
||
|
||
$window.MobFox.hideBanner(function () {
|
||
d.resolve();
|
||
}, function () {
|
||
d.reject();
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
prepareInterstitial: function (options) {
|
||
var d = $q.defer();
|
||
|
||
$window.MobFox.prepareInterstitial(options, function () {
|
||
d.resolve();
|
||
}, function () {
|
||
d.reject();
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
showInterstitial: function () {
|
||
var d = $q.defer();
|
||
|
||
$window.MobFox.showInterstitial(function () {
|
||
d.resolve();
|
||
}, function () {
|
||
d.reject();
|
||
});
|
||
|
||
return d.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.beacon',
|
||
'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.preferences',
|
||
'ngCordova.plugins.printer',
|
||
'ngCordova.plugins.progressIndicator',
|
||
'ngCordova.plugins.push',
|
||
'ngCordova.plugins.push_v5',
|
||
'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'
|
||
]);
|
||
|
||
// install : cordova plugin add https://github.com/floatinghotpot/cordova-plugin-mopub.git
|
||
// link : https://github.com/floatinghotpot/cordova-plugin-mopub
|
||
|
||
angular.module('ngCordova.plugins.mopubAds', [])
|
||
.factory('$cordovaMoPubAds', ['$q', '$window', function ($q, $window) {
|
||
|
||
return {
|
||
setOptions: function (options) {
|
||
var d = $q.defer();
|
||
|
||
$window.MoPub.setOptions(options, function () {
|
||
d.resolve();
|
||
}, function () {
|
||
d.reject();
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
createBanner: function (options) {
|
||
var d = $q.defer();
|
||
|
||
$window.MoPub.createBanner(options, function () {
|
||
d.resolve();
|
||
}, function () {
|
||
d.reject();
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
removeBanner: function () {
|
||
var d = $q.defer();
|
||
|
||
$window.MoPub.removeBanner(function () {
|
||
d.resolve();
|
||
}, function () {
|
||
d.reject();
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
showBanner: function (position) {
|
||
var d = $q.defer();
|
||
|
||
$window.MoPub.showBanner(position, function () {
|
||
d.resolve();
|
||
}, function () {
|
||
d.reject();
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
showBannerAtXY: function (x, y) {
|
||
var d = $q.defer();
|
||
|
||
$window.MoPub.showBannerAtXY(x, y, function () {
|
||
d.resolve();
|
||
}, function () {
|
||
d.reject();
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
hideBanner: function () {
|
||
var d = $q.defer();
|
||
|
||
$window.MoPub.hideBanner(function () {
|
||
d.resolve();
|
||
}, function () {
|
||
d.reject();
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
prepareInterstitial: function (options) {
|
||
var d = $q.defer();
|
||
|
||
$window.MoPub.prepareInterstitial(options, function () {
|
||
d.resolve();
|
||
}, function () {
|
||
d.reject();
|
||
});
|
||
|
||
return d.promise;
|
||
},
|
||
|
||
showInterstitial: function () {
|
||
var d = $q.defer();
|
||
|
||
$window.MoPub.showInterstitial(function () {
|
||
d.resolve();
|
||
}, function () {
|
||
d.reject();
|
||
});
|
||
|
||
return d.promise;
|
||
}
|
||
};
|
||
}]);
|
||
|
||
// install : cordova plugin add https://github.com/sidneys/cordova-plugin-nativeaudio.git
|
||
// link : https://github.com/sidneys/cordova-plugin-nativeaudio
|
||
|
||
angular.module('ngCordova.plugins.nativeAudio', [])
|
||
|
||
.factory('$cordovaNativeAudio', ['$q', '$window', function ($q, $window) {
|
||
|
||
return {
|
||
preloadSimple: function (id, assetPath) {
|
||
var q = $q.defer();
|
||
$window.plugins.NativeAudio.preloadSimple(id, assetPath, function (result) {
|
||
q.resolve(result);
|
||
}, function (err) {
|
||
q.reject(err);
|
||
});
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
preloadComplex: function (id, assetPath, volume, voices) {
|
||
var q = $q.defer();
|
||
$window.plugins.NativeAudio.preloadComplex(id, assetPath, volume, voices, function (result) {
|
||
q.resolve(result);
|
||
}, function (err) {
|
||
q.reject(err);
|
||
});
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
play: function (id, completeCallback) {
|
||
var q = $q.defer();
|
||
$window.plugins.NativeAudio.play(id, completeCallback, function (err) {
|
||
q.reject(err);
|
||
}, function (result) {
|
||
q.resolve(result);
|
||
});
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
stop: function (id) {
|
||
var q = $q.defer();
|
||
$window.plugins.NativeAudio.stop(id, function (result) {
|
||
q.resolve(result);
|
||
}, function (err) {
|
||
q.reject(err);
|
||
});
|
||
return q.promise;
|
||
},
|
||
|
||
loop: function (id) {
|
||
var q = $q.defer();
|
||
$window.plugins.NativeAudio.loop(id, function (result) {
|
||
q.resolve(result);
|
||
}, function (err) {
|
||
q.reject(err);
|
||
});
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
unload: function (id) {
|
||
var q = $q.defer();
|
||
$window.plugins.NativeAudio.unload(id, function (result) {
|
||
q.resolve(result);
|
||
}, function (err) {
|
||
q.reject(err);
|
||
});
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
setVolumeForComplexAsset: function (id, volume) {
|
||
var q = $q.defer();
|
||
$window.plugins.NativeAudio.setVolumeForComplexAsset(id, volume, function (result) {
|
||
q.resolve(result);
|
||
}, function (err) {
|
||
q.reject(err);
|
||
});
|
||
|
||
return q.promise;
|
||
}
|
||
};
|
||
}]);
|
||
|
||
// install : cordova plugin add cordova-plugin-network-information
|
||
// link : https://github.com/apache/cordova-plugin-network-information
|
||
|
||
/* globals Connection: true */
|
||
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 () {
|
||
$rootScope.$broadcast('$cordovaNetwork:offline', networkState);
|
||
});
|
||
};
|
||
|
||
/**
|
||
* Fires online a event
|
||
*/
|
||
var onlineEvent = function () {
|
||
var networkState = navigator.connection.type;
|
||
$timeout(function () {
|
||
$rootScope.$broadcast('$cordovaNetwork:online', networkState);
|
||
});
|
||
};
|
||
|
||
document.addEventListener('deviceready', function () {
|
||
if (navigator.connection) {
|
||
document.addEventListener('offline', offlineEvent, false);
|
||
document.addEventListener('online', onlineEvent, false);
|
||
}
|
||
});
|
||
|
||
return {
|
||
getNetwork: function () {
|
||
return navigator.connection.type;
|
||
},
|
||
|
||
isOnline: function () {
|
||
var networkState = navigator.connection.type;
|
||
return networkState !== Connection.UNKNOWN && networkState !== Connection.NONE;
|
||
},
|
||
|
||
isOffline: function () {
|
||
var networkState = navigator.connection.type;
|
||
return networkState === Connection.UNKNOWN || networkState === Connection.NONE;
|
||
},
|
||
|
||
clearOfflineWatch: function () {
|
||
document.removeEventListener('offline', offlineEvent);
|
||
$rootScope.$$listeners['$cordovaNetwork:offline'] = [];
|
||
},
|
||
|
||
clearOnlineWatch: function () {
|
||
document.removeEventListener('online', onlineEvent);
|
||
$rootScope.$$listeners['$cordovaNetwork:online'] = [];
|
||
}
|
||
};
|
||
}])
|
||
.run(['$injector', function ($injector) {
|
||
$injector.get('$cordovaNetwork'); //ensure the factory always gets initialised
|
||
}]);
|
||
|
||
// install : cordova plugin add https://github.com/Paldom/PinDialog.git
|
||
// link : https://github.com/Paldom/PinDialog
|
||
|
||
angular.module('ngCordova.plugins.pinDialog', [])
|
||
|
||
.factory('$cordovaPinDialog', ['$q', '$window', function ($q, $window) {
|
||
|
||
return {
|
||
prompt: function (message, title, buttons) {
|
||
var q = $q.defer();
|
||
|
||
$window.plugins.pinDialog.prompt(message, function (res) {
|
||
q.resolve(res);
|
||
}, title, buttons);
|
||
|
||
return q.promise;
|
||
}
|
||
};
|
||
}]);
|
||
|
||
// install : cordova plugin add cordova-plugin-app-preferences
|
||
// link : https://github.com/apla/me.apla.cordova.app-preferences
|
||
|
||
angular.module('ngCordova.plugins.preferences', [])
|
||
|
||
.factory('$cordovaPreferences', ['$window', '$q', function ($window, $q) {
|
||
|
||
return {
|
||
|
||
pluginNotEnabledMessage: 'Plugin not enabled',
|
||
|
||
/**
|
||
* Decorate the promise object.
|
||
* @param promise The promise object.
|
||
*/
|
||
decoratePromise: function(promise){
|
||
promise.success = function(fn) {
|
||
promise.then(fn);
|
||
return promise;
|
||
};
|
||
|
||
promise.error = function(fn) {
|
||
promise.then(null, fn);
|
||
return promise;
|
||
};
|
||
},
|
||
|
||
/**
|
||
* Store the value of the given dictionary and key.
|
||
* @param key The key of the preference.
|
||
* @param value The value to set.
|
||
* @param dict The dictionary. It's optional.
|
||
* @returns Returns a promise.
|
||
*/
|
||
store: function(key, value, dict) {
|
||
var deferred = $q.defer();
|
||
var promise = deferred.promise;
|
||
|
||
function ok(value){
|
||
deferred.resolve(value);
|
||
}
|
||
|
||
function errorCallback(error){
|
||
deferred.reject(new Error(error));
|
||
}
|
||
|
||
if($window.plugins){
|
||
var storeResult;
|
||
if(arguments.length === 3){
|
||
storeResult = $window.plugins.appPreferences.store(dict, key, value);
|
||
} else {
|
||
storeResult = $window.plugins.appPreferences.store(key, value);
|
||
}
|
||
|
||
storeResult.then(ok, errorCallback);
|
||
} else {
|
||
deferred.reject(new Error(this.pluginNotEnabledMessage));
|
||
}
|
||
|
||
this.decoratePromise(promise);
|
||
return promise;
|
||
},
|
||
|
||
/**
|
||
* Fetch the value by the given dictionary and key.
|
||
* @param key The key of the preference to retrieve.
|
||
* @param dict The dictionary. It's optional.
|
||
* @returns Returns a promise.
|
||
*/
|
||
fetch: function(key, dict) {
|
||
var deferred = $q.defer();
|
||
var promise = deferred.promise;
|
||
|
||
function ok(value){
|
||
deferred.resolve(value);
|
||
}
|
||
|
||
function errorCallback(error){
|
||
deferred.reject(new Error(error));
|
||
}
|
||
|
||
if($window.plugins){
|
||
var fetchResult;
|
||
if(arguments.length === 2){
|
||
fetchResult = $window.plugins.appPreferences.fetch(dict, key);
|
||
} else {
|
||
fetchResult = $window.plugins.appPreferences.fetch(key);
|
||
}
|
||
fetchResult.then(ok, errorCallback);
|
||
} else {
|
||
deferred.reject(new Error(this.pluginNotEnabledMessage));
|
||
}
|
||
|
||
this.decoratePromise(promise);
|
||
return promise;
|
||
},
|
||
|
||
/**
|
||
* Remove the value by the given key.
|
||
* @param key The key of the preference to retrieve.
|
||
* @param dict The dictionary. It's optional.
|
||
* @returns Returns a promise.
|
||
*/
|
||
remove: function(key, dict) {
|
||
var deferred = $q.defer();
|
||
var promise = deferred.promise;
|
||
|
||
function ok(value){
|
||
deferred.resolve(value);
|
||
}
|
||
|
||
function errorCallback(error){
|
||
deferred.reject(new Error(error));
|
||
}
|
||
|
||
if($window.plugins){
|
||
var removeResult;
|
||
if(arguments.length === 2){
|
||
removeResult = $window.plugins.appPreferences.remove(dict, key);
|
||
} else {
|
||
removeResult = $window.plugins.appPreferences.remove(key);
|
||
}
|
||
removeResult.then(ok, errorCallback);
|
||
} else {
|
||
deferred.reject(new Error(this.pluginNotEnabledMessage));
|
||
}
|
||
|
||
this.decoratePromise(promise);
|
||
return promise;
|
||
},
|
||
|
||
/**
|
||
* Show the application preferences.
|
||
* @returns Returns a promise.
|
||
*/
|
||
show: function() {
|
||
var deferred = $q.defer();
|
||
var promise = deferred.promise;
|
||
|
||
function ok(value){
|
||
deferred.resolve(value);
|
||
}
|
||
|
||
function errorCallback(error){
|
||
deferred.reject(new Error(error));
|
||
}
|
||
|
||
if($window.plugins){
|
||
$window.plugins.appPreferences.show()
|
||
.then(ok, errorCallback);
|
||
} else {
|
||
deferred.reject(new Error(this.pluginNotEnabledMessage));
|
||
}
|
||
|
||
this.decoratePromise(promise);
|
||
return promise;
|
||
}
|
||
};
|
||
|
||
}]);
|
||
|
||
// install : cordova plugin add https://github.com/katzer/cordova-plugin-printer.git
|
||
// link : https://github.com/katzer/cordova-plugin-printer
|
||
|
||
angular.module('ngCordova.plugins.printer', [])
|
||
|
||
.factory('$cordovaPrinter', ['$q', '$window', function ($q, $window) {
|
||
|
||
return {
|
||
isAvailable: function () {
|
||
var q = $q.defer();
|
||
|
||
$window.plugin.printer.isAvailable(function (isAvailable) {
|
||
q.resolve(isAvailable);
|
||
});
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
print: function (doc, options) {
|
||
var q = $q.defer();
|
||
$window.plugin.printer.print(doc, options, function () {
|
||
q.resolve();
|
||
});
|
||
return q.promise;
|
||
}
|
||
};
|
||
}]);
|
||
|
||
// install : cordova plugin add https://github.com/pbernasconi/cordova-progressIndicator.git
|
||
// link : http://pbernasconi.github.io/cordova-progressIndicator/
|
||
|
||
/* globals ProgressIndicator: true */
|
||
angular.module('ngCordova.plugins.progressIndicator', [])
|
||
|
||
.factory('$cordovaProgress', [function () {
|
||
|
||
return {
|
||
show: function (_message) {
|
||
var message = _message || 'Please wait...';
|
||
return ProgressIndicator.show(message);
|
||
},
|
||
|
||
showSimple: function (_dim) {
|
||
var dim = _dim || false;
|
||
return ProgressIndicator.showSimple(dim);
|
||
},
|
||
|
||
showSimpleWithLabel: function (_dim, _label) {
|
||
var dim = _dim || false;
|
||
var label = _label || 'Loading...';
|
||
return ProgressIndicator.showSimpleWithLabel(dim, label);
|
||
},
|
||
|
||
showSimpleWithLabelDetail: function (_dim, _label, _detail) {
|
||
var dim = _dim || false;
|
||
var label = _label || 'Loading...';
|
||
var detail = _detail || 'Please wait';
|
||
return ProgressIndicator.showSimpleWithLabelDetail(dim, label, detail);
|
||
},
|
||
|
||
showDeterminate: function (_dim, _timeout) {
|
||
var dim = _dim || false;
|
||
var timeout = _timeout || 50000;
|
||
return ProgressIndicator.showDeterminate(dim, timeout);
|
||
},
|
||
|
||
showDeterminateWithLabel: function (_dim, _timeout, _label) {
|
||
var dim = _dim || false;
|
||
var timeout = _timeout || 50000;
|
||
var label = _label || 'Loading...';
|
||
|
||
return ProgressIndicator.showDeterminateWithLabel(dim, timeout, label);
|
||
},
|
||
|
||
showAnnular: function (_dim, _timeout) {
|
||
var dim = _dim || false;
|
||
var timeout = _timeout || 50000;
|
||
return ProgressIndicator.showAnnular(dim, timeout);
|
||
},
|
||
|
||
showAnnularWithLabel: function (_dim, _timeout, _label) {
|
||
var dim = _dim || false;
|
||
var timeout = _timeout || 50000;
|
||
var label = _label || 'Loading...';
|
||
return ProgressIndicator.showAnnularWithLabel(dim, timeout, label);
|
||
},
|
||
|
||
showBar: function (_dim, _timeout) {
|
||
var dim = _dim || false;
|
||
var timeout = _timeout || 50000;
|
||
return ProgressIndicator.showBar(dim, timeout);
|
||
},
|
||
|
||
showBarWithLabel: function (_dim, _timeout, _label) {
|
||
var dim = _dim || false;
|
||
var timeout = _timeout || 50000;
|
||
var label = _label || 'Loading...';
|
||
return ProgressIndicator.showBarWithLabel(dim, timeout, label);
|
||
},
|
||
|
||
showSuccess: function (_dim, _label) {
|
||
var dim = _dim || false;
|
||
var label = _label || 'Success';
|
||
return ProgressIndicator.showSuccess(dim, label);
|
||
},
|
||
|
||
showText: function (_dim, _text, _position) {
|
||
var dim = _dim || false;
|
||
var text = _text || 'Warning';
|
||
var position = _position || 'center';
|
||
return ProgressIndicator.showText(dim, text, position);
|
||
},
|
||
|
||
hide: function () {
|
||
return ProgressIndicator.hide();
|
||
}
|
||
};
|
||
|
||
}]);
|
||
|
||
// install : cordova plugin add https://github.com/phonegap-build/PushPlugin.git
|
||
// link : https://github.com/phonegap-build/PushPlugin
|
||
|
||
angular.module('ngCordova.plugins.push', [])
|
||
|
||
.factory('$cordovaPush', ['$q', '$window', '$rootScope', '$timeout', function ($q, $window, $rootScope, $timeout) {
|
||
|
||
return {
|
||
onNotification: function (notification) {
|
||
$timeout(function () {
|
||
$rootScope.$broadcast('$cordovaPush:notificationReceived', notification);
|
||
});
|
||
},
|
||
|
||
register: function (config) {
|
||
var q = $q.defer();
|
||
var injector;
|
||
if (config !== undefined && config.ecb === undefined) {
|
||
if (document.querySelector('[ng-app]') === null) {
|
||
injector = 'document.body';
|
||
}
|
||
else {
|
||
injector = 'document.querySelector(\'[ng-app]\')';
|
||
}
|
||
config.ecb = 'angular.element(' + injector + ').injector().get(\'$cordovaPush\').onNotification';
|
||
}
|
||
|
||
$window.plugins.pushNotification.register(function (token) {
|
||
q.resolve(token);
|
||
}, function (error) {
|
||
q.reject(error);
|
||
}, config);
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
unregister: function (options) {
|
||
var q = $q.defer();
|
||
$window.plugins.pushNotification.unregister(function (result) {
|
||
q.resolve(result);
|
||
}, function (error) {
|
||
q.reject(error);
|
||
}, options);
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
// iOS only
|
||
setBadgeNumber: function (number) {
|
||
var q = $q.defer();
|
||
$window.plugins.pushNotification.setApplicationIconBadgeNumber(function (result) {
|
||
q.resolve(result);
|
||
}, function (error) {
|
||
q.reject(error);
|
||
}, number);
|
||
return q.promise;
|
||
}
|
||
};
|
||
}]);
|
||
|
||
|
||
// install : cordova plugin add phonegap-plugin-push
|
||
// link : https://github.com/phonegap/phonegap-plugin-push
|
||
|
||
angular.module('ngCordova.plugins.push_v5', [])
|
||
.factory('$cordovaPushV5',['$q', '$rootScope', '$timeout', function ($q, $rootScope, $timeout) {
|
||
/*global PushNotification*/
|
||
|
||
var push;
|
||
return {
|
||
initialize : function (options) {
|
||
var q = $q.defer();
|
||
push = PushNotification.init(options);
|
||
q.resolve(push);
|
||
return q.promise;
|
||
},
|
||
onNotification : function () {
|
||
$timeout(function () {
|
||
push.on('notification', function (notification) {
|
||
$rootScope.$emit('$cordovaPushV5:notificationReceived', notification);
|
||
});
|
||
});
|
||
},
|
||
onError : function () {
|
||
$timeout(function () {
|
||
push.on('error', function (error) { $rootScope.$emit('$cordovaPushV5:errorOccurred', error);});
|
||
});
|
||
},
|
||
register : function () {
|
||
var q = $q.defer();
|
||
if (push === undefined) {
|
||
q.reject(new Error('init must be called before any other operation'));
|
||
} else {
|
||
push.on('registration', function (data) {
|
||
q.resolve(data.registrationId);
|
||
});
|
||
}
|
||
return q.promise;
|
||
},
|
||
unregister : function () {
|
||
var q = $q.defer();
|
||
if (push === undefined) {
|
||
q.reject(new Error('init must be called before any other operation'));
|
||
} else {
|
||
push.unregister(function (success) {
|
||
q.resolve(success);
|
||
},function (error) {
|
||
q.reject(error);
|
||
});
|
||
}
|
||
return q.promise;
|
||
},
|
||
setBadgeNumber : function (number) {
|
||
var q = $q.defer();
|
||
if (push === undefined) {
|
||
q.reject(new Error('init must be called before any other operation'));
|
||
} else {
|
||
push.setApplicationIconBadgeNumber(function (success) {
|
||
q.resolve(success);
|
||
}, function (error) {
|
||
q.reject(error);
|
||
}, number);
|
||
}
|
||
return q.promise;
|
||
}
|
||
};
|
||
}]);
|
||
|
||
// install : cordova plugin add https://github.com/cordova-sms/cordova-sms-plugin.git
|
||
// link : https://github.com/cordova-sms/cordova-sms-plugin
|
||
|
||
/* globals sms: true */
|
||
angular.module('ngCordova.plugins.sms', [])
|
||
|
||
.factory('$cordovaSms', ['$q', function ($q) {
|
||
|
||
return {
|
||
send: function (number, message, options) {
|
||
var q = $q.defer();
|
||
sms.send(number, message, options, function (res) {
|
||
q.resolve(res);
|
||
}, function (err) {
|
||
q.reject(err);
|
||
});
|
||
return q.promise;
|
||
}
|
||
};
|
||
|
||
}]);
|
||
|
||
// install : cordova plugin add https://github.com/EddyVerbruggen/SocialSharing-PhoneGap-Plugin.git
|
||
// link : https://github.com/EddyVerbruggen/SocialSharing-PhoneGap-Plugin
|
||
|
||
// NOTE: shareViaEmail -> if user cancels sharing email, success is still called
|
||
// TODO: add support for iPad
|
||
|
||
angular.module('ngCordova.plugins.socialSharing', [])
|
||
|
||
.factory('$cordovaSocialSharing', ['$q', '$window', function ($q, $window) {
|
||
|
||
return {
|
||
share: function (message, subject, file, link) {
|
||
var q = $q.defer();
|
||
subject = subject || null;
|
||
file = file || null;
|
||
link = link || null;
|
||
$window.plugins.socialsharing.share(message, subject, file, link, function () {
|
||
q.resolve(true);
|
||
}, function () {
|
||
q.reject(false);
|
||
});
|
||
return q.promise;
|
||
},
|
||
|
||
shareViaTwitter: function (message, file, link) {
|
||
var q = $q.defer();
|
||
file = file || null;
|
||
link = link || null;
|
||
$window.plugins.socialsharing.shareViaTwitter(message, file, link, function () {
|
||
q.resolve(true);
|
||
}, function () {
|
||
q.reject(false);
|
||
});
|
||
return q.promise;
|
||
},
|
||
|
||
shareViaWhatsApp: function (message, file, link) {
|
||
var q = $q.defer();
|
||
file = file || null;
|
||
link = link || null;
|
||
$window.plugins.socialsharing.shareViaWhatsApp(message, file, link, function () {
|
||
q.resolve(true);
|
||
}, function () {
|
||
q.reject(false);
|
||
});
|
||
return q.promise;
|
||
},
|
||
|
||
shareViaFacebook: function (message, file, link) {
|
||
var q = $q.defer();
|
||
message = message || null;
|
||
file = file || null;
|
||
link = link || null;
|
||
$window.plugins.socialsharing.shareViaFacebook(message, file, link, function () {
|
||
q.resolve(true);
|
||
}, function () {
|
||
q.reject(false);
|
||
});
|
||
return q.promise;
|
||
},
|
||
|
||
shareViaFacebookWithPasteMessageHint: function (message, file, link, pasteMessageHint) {
|
||
var q = $q.defer();
|
||
file = file || null;
|
||
link = link || null;
|
||
$window.plugins.socialsharing.shareViaFacebookWithPasteMessageHint(message, file, link, pasteMessageHint, function () {
|
||
q.resolve(true);
|
||
}, function () {
|
||
q.reject(false);
|
||
});
|
||
return q.promise;
|
||
},
|
||
|
||
shareViaSMS: function (message, commaSeparatedPhoneNumbers) {
|
||
var q = $q.defer();
|
||
$window.plugins.socialsharing.shareViaSMS(message, commaSeparatedPhoneNumbers, function () {
|
||
q.resolve(true);
|
||
}, function () {
|
||
q.reject(false);
|
||
});
|
||
return q.promise;
|
||
},
|
||
|
||
shareViaEmail: function (message, subject, toArr, ccArr, bccArr, fileArr) {
|
||
var q = $q.defer();
|
||
toArr = toArr || null;
|
||
ccArr = ccArr || null;
|
||
bccArr = bccArr || null;
|
||
fileArr = fileArr || null;
|
||
$window.plugins.socialsharing.shareViaEmail(message, subject, toArr, ccArr, bccArr, fileArr, function () {
|
||
q.resolve(true);
|
||
}, function () {
|
||
q.reject(false);
|
||
});
|
||
return q.promise;
|
||
},
|
||
|
||
shareVia: function (via, message, subject, file, link) {
|
||
var q = $q.defer();
|
||
message = message || null;
|
||
subject = subject || null;
|
||
file = file || null;
|
||
link = link || null;
|
||
$window.plugins.socialsharing.shareVia(via, message, subject, file, link, function () {
|
||
q.resolve(true);
|
||
}, function () {
|
||
q.reject(false);
|
||
});
|
||
return q.promise;
|
||
},
|
||
|
||
canShareViaEmail: function () {
|
||
var q = $q.defer();
|
||
$window.plugins.socialsharing.canShareViaEmail(function () {
|
||
q.resolve(true);
|
||
}, function () {
|
||
q.reject(false);
|
||
});
|
||
return q.promise;
|
||
},
|
||
|
||
canShareVia: function (via, message, subject, file, link) {
|
||
var q = $q.defer();
|
||
$window.plugins.socialsharing.canShareVia(via, message, subject, file, link, function (success) {
|
||
q.resolve(success);
|
||
}, function (error) {
|
||
q.reject(error);
|
||
});
|
||
return q.promise;
|
||
},
|
||
|
||
available: function () {
|
||
var q = $q.defer();
|
||
window.plugins.socialsharing.available(function (isAvailable) {
|
||
if (isAvailable) {
|
||
q.resolve();
|
||
}
|
||
else {
|
||
q.reject();
|
||
}
|
||
});
|
||
}
|
||
};
|
||
}]);
|
||
|
||
// install : cordova plugin add https://github.com/Paldom/SpinnerDialog.git
|
||
// link : https://github.com/Paldom/SpinnerDialog
|
||
|
||
angular.module('ngCordova.plugins.spinnerDialog', [])
|
||
|
||
.factory('$cordovaSpinnerDialog', ['$window', function ($window) {
|
||
|
||
return {
|
||
show: function (title, message, fixed) {
|
||
fixed = fixed || false;
|
||
return $window.plugins.spinnerDialog.show(title, message, fixed);
|
||
},
|
||
hide: function () {
|
||
return $window.plugins.spinnerDialog.hide();
|
||
}
|
||
};
|
||
|
||
}]);
|
||
|
||
// install : cordova plugin add cordova-plugin-splashscreen
|
||
// link : https://github.com/apache/cordova-plugin-splashscreen
|
||
|
||
angular.module('ngCordova.plugins.splashscreen', [])
|
||
|
||
.factory('$cordovaSplashscreen', [function () {
|
||
|
||
return {
|
||
hide: function () {
|
||
return navigator.splashscreen.hide();
|
||
},
|
||
|
||
show: function () {
|
||
return navigator.splashscreen.show();
|
||
}
|
||
};
|
||
|
||
}]);
|
||
|
||
// install : cordova plugin add https://github.com/litehelpers/Cordova-sqlite-storage.git
|
||
// link : https://github.com/litehelpers/Cordova-sqlite-storage
|
||
|
||
angular.module('ngCordova.plugins.sqlite', [])
|
||
|
||
.factory('$cordovaSQLite', ['$q', '$window', function ($q, $window) {
|
||
|
||
return {
|
||
openDB: function (options, background) {
|
||
|
||
if (angular.isObject(options) && !angular.isString(options)) {
|
||
if (typeof background !== 'undefined') {
|
||
options.bgType = background;
|
||
}
|
||
return $window.sqlitePlugin.openDatabase(options);
|
||
}
|
||
|
||
return $window.sqlitePlugin.openDatabase({
|
||
name: options,
|
||
bgType: background
|
||
});
|
||
},
|
||
|
||
execute: function (db, query, binding) {
|
||
var q = $q.defer();
|
||
db.transaction(function (tx) {
|
||
tx.executeSql(query, binding, function (tx, result) {
|
||
q.resolve(result);
|
||
},
|
||
function (transaction, error) {
|
||
q.reject(error);
|
||
});
|
||
});
|
||
return q.promise;
|
||
},
|
||
|
||
insertCollection: function (db, query, bindings) {
|
||
var q = $q.defer();
|
||
var coll = bindings.slice(0); // clone collection
|
||
|
||
db.transaction(function (tx) {
|
||
(function insertOne() {
|
||
var record = coll.splice(0, 1)[0]; // get the first record of coll and reduce coll by one
|
||
try {
|
||
tx.executeSql(query, record, function (tx, result) {
|
||
if (coll.length === 0) {
|
||
q.resolve(result);
|
||
} else {
|
||
insertOne();
|
||
}
|
||
}, function (transaction, error) {
|
||
q.reject(error);
|
||
return;
|
||
});
|
||
} catch (exception) {
|
||
q.reject(exception);
|
||
}
|
||
})();
|
||
});
|
||
return q.promise;
|
||
},
|
||
|
||
nestedExecute: function (db, query1, query2, binding1, binding2) {
|
||
var q = $q.defer();
|
||
|
||
db.transaction(function (tx) {
|
||
tx.executeSql(query1, binding1, function (tx, result) {
|
||
q.resolve(result);
|
||
tx.executeSql(query2, binding2, function (tx, res) {
|
||
q.resolve(res);
|
||
});
|
||
});
|
||
},
|
||
function (transaction, error) {
|
||
q.reject(error);
|
||
});
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
deleteDB: function (dbName) {
|
||
var q = $q.defer();
|
||
|
||
$window.sqlitePlugin.deleteDatabase(dbName, function (success) {
|
||
q.resolve(success);
|
||
}, function (error) {
|
||
q.reject(error);
|
||
});
|
||
|
||
return q.promise;
|
||
}
|
||
};
|
||
}]);
|
||
|
||
// install : cordova plugin add cordova-plugin-statusbar
|
||
// link : https://github.com/apache/cordova-plugin-statusbar
|
||
|
||
/* globals StatusBar: true */
|
||
angular.module('ngCordova.plugins.statusbar', [])
|
||
|
||
.factory('$cordovaStatusbar', [function () {
|
||
|
||
return {
|
||
|
||
/**
|
||
* @param {boolean} bool
|
||
*/
|
||
overlaysWebView: function (bool) {
|
||
return StatusBar.overlaysWebView(!!bool);
|
||
},
|
||
|
||
STYLES: {
|
||
DEFAULT: 0,
|
||
LIGHT_CONTENT: 1,
|
||
BLACK_TRANSLUCENT: 2,
|
||
BLACK_OPAQUE: 3
|
||
},
|
||
|
||
/**
|
||
* @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);
|
||
},
|
||
|
||
styleHex: function (colorHex) {
|
||
return StatusBar.backgroundColorByHexString(colorHex);
|
||
},
|
||
|
||
hide: function () {
|
||
return StatusBar.hide();
|
||
},
|
||
|
||
show: function () {
|
||
return StatusBar.show();
|
||
},
|
||
|
||
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
|
||
|
||
angular.module('ngCordova.plugins.toast', [])
|
||
|
||
.factory('$cordovaToast', ['$q', '$window', function ($q, $window) {
|
||
|
||
return {
|
||
showShortTop: function (message) {
|
||
var q = $q.defer();
|
||
$window.plugins.toast.showShortTop(message, function (response) {
|
||
q.resolve(response);
|
||
}, function (error) {
|
||
q.reject(error);
|
||
});
|
||
return q.promise;
|
||
},
|
||
|
||
showShortCenter: function (message) {
|
||
var q = $q.defer();
|
||
$window.plugins.toast.showShortCenter(message, function (response) {
|
||
q.resolve(response);
|
||
}, function (error) {
|
||
q.reject(error);
|
||
});
|
||
return q.promise;
|
||
},
|
||
|
||
showShortBottom: function (message) {
|
||
var q = $q.defer();
|
||
$window.plugins.toast.showShortBottom(message, function (response) {
|
||
q.resolve(response);
|
||
}, function (error) {
|
||
q.reject(error);
|
||
});
|
||
return q.promise;
|
||
},
|
||
|
||
showLongTop: function (message) {
|
||
var q = $q.defer();
|
||
$window.plugins.toast.showLongTop(message, function (response) {
|
||
q.resolve(response);
|
||
}, function (error) {
|
||
q.reject(error);
|
||
});
|
||
return q.promise;
|
||
},
|
||
|
||
showLongCenter: function (message) {
|
||
var q = $q.defer();
|
||
$window.plugins.toast.showLongCenter(message, function (response) {
|
||
q.resolve(response);
|
||
}, function (error) {
|
||
q.reject(error);
|
||
});
|
||
return q.promise;
|
||
},
|
||
|
||
showLongBottom: function (message) {
|
||
var q = $q.defer();
|
||
$window.plugins.toast.showLongBottom(message, function (response) {
|
||
q.resolve(response);
|
||
}, function (error) {
|
||
q.reject(error);
|
||
});
|
||
return q.promise;
|
||
},
|
||
|
||
|
||
show: function (message, duration, position) {
|
||
var q = $q.defer();
|
||
$window.plugins.toast.show(message, duration, position, function (response) {
|
||
q.resolve(response);
|
||
}, function (error) {
|
||
q.reject(error);
|
||
});
|
||
return q.promise;
|
||
}
|
||
};
|
||
|
||
}]);
|
||
|
||
// install : cordova plugin add https://github.com/leecrossley/cordova-plugin-touchid.git
|
||
// link : https://github.com/leecrossley/cordova-plugin-touchid
|
||
|
||
/* globals touchid: true */
|
||
angular.module('ngCordova.plugins.touchid', [])
|
||
|
||
.factory('$cordovaTouchID', ['$q', function ($q) {
|
||
|
||
return {
|
||
checkSupport: function () {
|
||
var defer = $q.defer();
|
||
if (!window.cordova) {
|
||
defer.reject('Not supported without cordova.js');
|
||
} else {
|
||
touchid.checkSupport(function (value) {
|
||
defer.resolve(value);
|
||
}, function (err) {
|
||
defer.reject(err);
|
||
});
|
||
}
|
||
|
||
return defer.promise;
|
||
},
|
||
|
||
authenticate: function (authReasonText) {
|
||
var defer = $q.defer();
|
||
if (!window.cordova) {
|
||
defer.reject('Not supported without cordova.js');
|
||
} else {
|
||
touchid.authenticate(function (value) {
|
||
defer.resolve(value);
|
||
}, function (err) {
|
||
defer.reject(err);
|
||
}, authReasonText);
|
||
}
|
||
|
||
return defer.promise;
|
||
}
|
||
};
|
||
}]);
|
||
|
||
// install : cordova plugin add https://github.com/aerogear/aerogear-cordova-push.git
|
||
// link : https://github.com/aerogear/aerogear-cordova-push
|
||
|
||
angular.module('ngCordova.plugins.upsPush', [])
|
||
|
||
.factory('$cordovaUpsPush', ['$q', '$window', '$rootScope', '$timeout', function ($q, $window, $rootScope, $timeout) {
|
||
return {
|
||
register: function (config) {
|
||
var q = $q.defer();
|
||
|
||
$window.push.register(function (notification) {
|
||
$timeout(function () {
|
||
$rootScope.$broadcast('$cordovaUpsPush:notificationReceived', notification);
|
||
});
|
||
}, function () {
|
||
q.resolve();
|
||
}, function (error) {
|
||
q.reject(error);
|
||
}, config);
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
unregister: function (options) {
|
||
var q = $q.defer();
|
||
$window.push.unregister(function () {
|
||
q.resolve();
|
||
}, function (error) {
|
||
q.reject(error);
|
||
}, options);
|
||
|
||
return q.promise;
|
||
},
|
||
|
||
// iOS only
|
||
setBadgeNumber: function (number) {
|
||
var q = $q.defer();
|
||
$window.push.setApplicationIconBadgeNumber(function () {
|
||
q.resolve();
|
||
}, number);
|
||
return q.promise;
|
||
}
|
||
};
|
||
}]);
|
||
|
||
// install : cordova plugin add cordova-plugin-vibration
|
||
// link : https://github.com/apache/cordova-plugin-vibration
|
||
|
||
angular.module('ngCordova.plugins.vibration', [])
|
||
|
||
.factory('$cordovaVibration', [function () {
|
||
|
||
return {
|
||
vibrate: function (times) {
|
||
return navigator.notification.vibrate(times);
|
||
},
|
||
vibrateWithPattern: function (pattern, repeat) {
|
||
return navigator.notification.vibrateWithPattern(pattern, repeat);
|
||
},
|
||
cancelVibration: function () {
|
||
return navigator.notification.cancelVibration();
|
||
}
|
||
};
|
||
}]);
|
||
|
||
// install : cordova plugin add https://github.com/EddyVerbruggen/VideoCapturePlus-PhoneGap-Plugin.git
|
||
// link : https://github.com/EddyVerbruggen/VideoCapturePlus-PhoneGap-Plugin
|
||
|
||
angular.module('ngCordova.plugins.videoCapturePlus', [])
|
||
|
||
.provider('$cordovaVideoCapturePlus', [function () {
|
||
|
||
var defaultOptions = {};
|
||
|
||
|
||
/**
|
||
* the nr of videos to record, default 1 (on iOS always 1)
|
||
*
|
||
* @param limit
|
||
*/
|
||
this.setLimit = function setLimit(limit) {
|
||
defaultOptions.limit = limit;
|
||
};
|
||
|
||
|
||
/**
|
||
* max duration in seconds, default 0, which is 'forever'
|
||
*
|
||
* @param seconds
|
||
*/
|
||
this.setMaxDuration = function setMaxDuration(seconds) {
|
||
defaultOptions.duration = seconds;
|
||
};
|
||
|
||
|
||
/**
|
||
* set to true to override the default low quality setting
|
||
*
|
||
* @param {Boolean} highquality
|
||
*/
|
||
this.setHighQuality = function setHighQuality(highquality) {
|
||
defaultOptions.highquality = highquality;
|
||
};
|
||
|
||
/**
|
||
* you'll want to sniff the user-Agent/device and pass the best overlay based on that..
|
||
* set to true to override the default backfacing camera setting. iOS: works fine, Android: YMMV (#18)
|
||
*
|
||
* @param {Boolean} frontcamera
|
||
*/
|
||
this.useFrontCamera = function useFrontCamera(frontcamera) {
|
||
defaultOptions.frontcamera = frontcamera;
|
||
};
|
||
|
||
|
||
/**
|
||
* put the png in your www folder
|
||
*
|
||
* @param {String} imageUrl
|
||
*/
|
||
this.setPortraitOverlay = function setPortraitOverlay(imageUrl) {
|
||
defaultOptions.portraitOverlay = imageUrl;
|
||
};
|
||
|
||
|
||
/**
|
||
*
|
||
* @param {String} imageUrl
|
||
*/
|
||
this.setLandscapeOverlay = function setLandscapeOverlay(imageUrl) {
|
||
defaultOptions.landscapeOverlay = imageUrl;
|
||
};
|
||
|
||
|
||
/**
|
||
* iOS only
|
||
*
|
||
* @param text
|
||
*/
|
||
this.setOverlayText = function setOverlayText(text) {
|
||
defaultOptions.overlayText = text;
|
||
};
|
||
|
||
|
||
this.$get = ['$q', '$window', function ($q, $window) {
|
||
return {
|
||
captureVideo: function (options) {
|
||
var q = $q.defer();
|
||
|
||
if (!$window.plugins.videocaptureplus) {
|
||
q.resolve(null);
|
||
return q.promise;
|
||
}
|
||
|
||
$window.plugins.videocaptureplus.captureVideo(q.resolve, q.reject,
|
||
angular.extend({}, defaultOptions, options));
|
||
|
||
return q.promise;
|
||
}
|
||
};
|
||
}];
|
||
}]);
|
||
|
||
// install : cordova plugin add https://github.com/MobileChromeApps/zip.git
|
||
// link : https://github.com/MobileChromeApps/zip
|
||
|
||
angular.module('ngCordova.plugins.zip', [])
|
||
|
||
.factory('$cordovaZip', ['$q', '$window', function ($q, $window) {
|
||
|
||
return {
|
||
unzip: function (source, destination) {
|
||
var q = $q.defer();
|
||
|
||
$window.zip.unzip(source, destination, function (isError) {
|
||
if (isError === 0) {
|
||
q.resolve();
|
||
} else {
|
||
q.reject();
|
||
}
|
||
}, function (progressEvent) {
|
||
q.notify(progressEvent);
|
||
});
|
||
|
||
return q.promise;
|
||
}
|
||
};
|
||
}]);
|
||
|
||
angular.module("oauth.providers", ["oauth.utils"])
|
||
.factory("$cordovaOauth", ["$q", '$http', "$cordovaOauthUtility", function($q, $http, $cordovaOauthUtility) {
|
||
|
||
return {
|
||
|
||
/*
|
||
* Sign into the Azure AD Authentication Library
|
||
*
|
||
* @param string clientId (client registered in ADFS, with redirect_uri configured to: http://localhost/callback)
|
||
* @param string tenantId (the tenants UUID, can be found in oauth endpoint)
|
||
* @param string resourceURL (This is your APP ID URI in Azure Config)
|
||
* @return promise
|
||
*/
|
||
azureAD: function(clientId, tenantId, resourceURL) {
|
||
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://login.microsoftonline.com/' + tenantId + '/oauth2/authorize?response_type=code&client_id=' + clientId + '&redirect_uri=http://localhost/callback', '_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];
|
||
console.log(requestToken);
|
||
$http.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
|
||
|
||
$http({method: "post", url: "https://login.microsoftonline.com/" + tenantId + "/oauth2/token", data:
|
||
"client_id=" + clientId +
|
||
"&code=" + requestToken +
|
||
"&redirect_uri=http://localhost/callback&" +
|
||
"grant_type=authorization_code&" +
|
||
"resource=" + resourceURL})
|
||
.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 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].split("&")[0];
|
||
$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 scope = '';
|
||
if (appScope && appScope.length > 0) {
|
||
scope = '&scope' + appScope.join('+');
|
||
}
|
||
|
||
var browserRef = window.open('https://api.instagram.com/oauth/authorize/?client_id=' + clientId + '&redirect_uri=' + redirect_uri + scope + '&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' + (compact ? '.compact' : '') + '?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 Slack service
|
||
*
|
||
* @param string clientId
|
||
* @param string clientSecret
|
||
* @param array appScope
|
||
* @param object options
|
||
* @return promise
|
||
*/
|
||
slack: 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://slack.com/oauth/authorize' + '?client_id=' + clientId + '&redirect_uri=' + redirect_uri + '&state=ngcordovaoauth&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];
|
||
console.log("Request token is " + requestToken);
|
||
$http.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
|
||
$http({method: "post", url: "https://slack.com/api/oauth.access", 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 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;
|
||
},
|
||
|
||
/*
|
||
* Sign into the Weibo service
|
||
*
|
||
* @param string clientId
|
||
* @param string clientSecret
|
||
* @param array appScope
|
||
* @param object options
|
||
* @return promise
|
||
*/
|
||
weibo: 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 flowUrl = "https://open.weibo.cn/oauth2/authorize?display=mobile&client_id=" + clientId + "&redirect_uri=" + redirect_uri + "&scope=" + appScope.join(",");
|
||
if(options !== undefined) {
|
||
if(options.hasOwnProperty("language")) {
|
||
flowUrl += "&language=" + options.language;
|
||
}
|
||
if(options.hasOwnProperty("forcelogin")) {
|
||
flowUrl += "&forcelogin=" + options.forcelogin;
|
||
}
|
||
|
||
}
|
||
var browserRef = window.open(flowUrl, '_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://api.weibo.com/oauth2/access_token", data: "client_id=" + clientId + "&client_secret=" + clientSecret + "&grant_type=authorization_code&code=" + requestToken + "&redirect_uri=" + redirect_uri})
|
||
.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 Jawbone service
|
||
*
|
||
* @param string clientId
|
||
* @param string clientSecret
|
||
* @param string appScope
|
||
* @param object options
|
||
* @return promise
|
||
*/
|
||
jawbone: 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://jawbone.com/auth/oauth2/auth?client_id=' + clientId + '&redirect_uri=' + redirect_uri + '&response_type=code&scope=' + appScope.join(" "), '_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://jawbone.com/auth/oauth2/token", data: "client_id=" + clientId + "&client_secret=" + clientSecret + "&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 Untappd service
|
||
*
|
||
* @param string clientId
|
||
* @param object options
|
||
* @return promise
|
||
*/
|
||
untappd: 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_url = "http://localhost/callback";
|
||
if(options !== undefined) {
|
||
if(options.hasOwnProperty("redirect_url")) {
|
||
redirect_url = options.redirect_url;
|
||
}
|
||
}
|
||
var browserRef = window.open('https://untappd.com/oauth/authenticate/?client_id=' + clientId + '&redirect_url=' + redirect_url + '&response_type=token', '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
|
||
browserRef.addEventListener('loadstart', function (event) {
|
||
if ((event.url).indexOf(redirect_url) === 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
|
||
};
|
||
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 Dribble service
|
||
*
|
||
* @param string clientId REQUIRED
|
||
* @param string clientSecret REQUIRED
|
||
* @param object Array appScope REQUIRED
|
||
* @param object options (redirect_uri) OPTIONAL
|
||
* @param state string OPTIONAL
|
||
* @return promise
|
||
*/
|
||
|
||
dribble: function (clientId, clientSecret, appScope, options, state) {
|
||
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";
|
||
var OAUTH_URL = 'https://dribbble.com/oauth/authorize';
|
||
var ACCESS_TOKEN_URL = 'https://dribbble.com/oauth/token';
|
||
if (options !== undefined) {
|
||
if (options.hasOwnProperty("redirect_uri")) {
|
||
redirect_uri = options.redirect_uri;
|
||
}
|
||
}
|
||
if (state === undefined) {
|
||
state = $cordovaOauthUtility.createNonce(5);
|
||
}
|
||
var scope = appScope.join(",").replace(/,/g, '+'); //dribble scopes are passed with +
|
||
var browserRef = window.open(OAUTH_URL + '?client_id=' + clientId + '&redirect_uri=' + redirect_uri +
|
||
'&scope=' + scope + '&state=' + state, '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
|
||
browserRef.addEventListener('loadstart', function (event) {
|
||
if ((event.url).indexOf(redirect_uri) === 0) {
|
||
var callBackCode = (event.url).split("code=")[1];
|
||
var code = callBackCode.split("&")[0];
|
||
$http.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
|
||
$http(
|
||
{ method: "post",
|
||
url: ACCESS_TOKEN_URL,
|
||
data: "client_id=" + clientId + "&redirect_uri=" + redirect_uri + "&client_secret=" + clientSecret + "&code=" + code
|
||
})
|
||
.success(function (res) {
|
||
deferred.resolve(res);
|
||
}).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;
|
||
}
|
||
|
||
};
|
||
|
||
}]);
|
||
|
||
/*
|
||
* 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
|
||
* Slack
|
||
* Jawbone
|
||
* Untappd
|
||
*/
|
||
|
||
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;
|
||
}
|
||
|
||
};
|
||
|
||
}]);
|
||
|
||
})(); |