|
|
/*! * ngCordova * v0.1.27-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-3dtouch.git
// link : https://github.com/EddyVerbruggen/cordova-plugin-3dtouch
angular.module('ngCordova.plugins.3dtouch', [])
.factory('$cordova3DTouch', ['$q', function($q) { var quickActions = []; var quickActionHandler = {};
var createQuickActionHandler = function(quickActionHandler) { return function (payload) { for (var key in quickActionHandler) { if (payload.type === key) { quickActionHandler[key](); } } }; };
return { /* * Checks if Cordova 3D touch is present and loaded * * @return promise */ isAvailable: function () { var deferred = $q.defer(); if (!window.cordova) { deferred.reject('Not supported in browser'); } else { if (!window.ThreeDeeTouch) { deferred.reject('Could not find 3D touch plugin'); } else { window.ThreeDeeTouch.isAvailable(function (value) { deferred.resolve(value); }, function (err) { deferred.reject(err); }); } }
return deferred.promise; },
/* * Add a quick action to menu * * @param string type * @param string title * @param string iconType (optional) * @param string subtitle (optional) * @param function callback (optional) * @return promise */ addQuickAction: function(type, title, iconType, iconTemplate, subtitle, callback) { var deferred = $q.defer();
var quickAction = { type: type, title: title, subtitle: subtitle };
if (iconType) { quickAction.iconType = iconType; }
if (iconTemplate) { quickAction.iconTemplate = iconTemplate; }
this.isAvailable().then(function() { quickActions.push(quickAction); quickActionHandler[type] = callback; window.ThreeDeeTouch.configureQuickActions(quickActions); window.ThreeDeeTouch.onHomeIconPressed = createQuickActionHandler(quickActionHandler); deferred.resolve(quickActions); }, function(err) { deferred.reject(err); });
return deferred.promise; },
/* * Add a quick action handler. Used for static quick actions * * @param string type * @param function callback * @return promise */ addQuickActionHandler: function(type, callback) { var deferred = $q.defer();
this.isAvailable().then(function() { quickActionHandler[type] = callback; window.ThreeDeeTouch.onHomeIconPressed = createQuickActionHandler(quickActionHandler); deferred.resolve(true); }, function(err) { deferred.reject(err); });
return deferred.promise; },
/* * Enable link preview popup when force touch is appled to link elements * * @return bool */ enableLinkPreview: function() { var deferred = $q.defer();
this.isAvailable().then(function() { window.ThreeDeeTouch.enableLinkPreview(); deferred.resolve(true); }, function(err) { deferred.reject(err); });
return deferred.promise; },
/* * Add a hanlder function for force touch events, * * @param function callback * @return promise */ addForceTouchHandler: function(callback) { var deferred = $q.defer();
this.isAvailable().then(function() { window.ThreeDeeTouch.watchForceTouches(callback); deferred.resolve(true); }, function(err) { deferred.reject(err); });
return deferred.promise; } }; }]);
// 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.message * @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.preferences.callbacks.onButtonClicked = cb.bind(this); },
onRateDialogShow: function (cb) { AppRate.preferences.callbacks.onRateDialogShow = cb.bind(this); } }; }]; }]);
// 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 { getAppName: function () { var q = $q.defer(); cordova.getAppVersion.getAppName(function (name) { q.resolve(name); });
return q.promise; },
getPackageName: function () { var q = $q.defer(); cordova.getAppVersion.getPackageName(function (pack) { q.resolve(pack); });
return q.promise; },
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/phonegap/phonegap-plugin-barcodescanner.git
// link : https://github.com/phonegap/phonegap-plugin-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', '$log', function ($q, $timeout, $log) {
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; },
startScan: function (services, callback, errorCallback) { return ble.startScan(services, callback, errorCallback); },
stopScan: function () { var q = $q.defer(); ble.stopScan(function () { q.resolve(); }, function (error) { q.reject(error); }); 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; },
writeWithoutResponse: function (deviceID, serviceUUID, characteristicUUID, data) { var q = $q.defer(); ble.writeWithoutResponse(deviceID, serviceUUID, characteristicUUID, data, function (result) { q.resolve(result); }, function (error) { q.reject(error); }); return q.promise; },
writeCommand: function (deviceID, serviceUUID, characteristicUUID, data) { $log.warning('writeCommand is deprecated, use writeWithoutResponse'); return this.writeWithoutResponse(deviceID, serviceUUID, characteristicUUID, data); },
startNotification: function (deviceID, serviceUUID, characteristicUUID, callback, errorCallback) { return ble.startNotification(deviceID, serviceUUID, characteristicUUID, callback, errorCallback); },
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; },
enable: function () { var q = $q.defer(); ble.enable(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 (fields) { if (!fields || !angular.isArray(fields)) { return; } defaultRespFields = fields; };
/** * * 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); }, function (error){ q.reject(error); }); 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'); return q.promise; }
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'); return q.promise; }
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); },
activityStart: function (message, title) { var q = $q.defer();
if (cordova.platformId === 'android') { navigator.notification.activityStart(title, message); q.resolve(); } else { q.reject(message, title); } return q.promise; },
activityStop: function () { var q = $q.defer();
if (cordova.platformId === 'android') { navigator.notification.activityStop(); q.resolve(); } else { q.reject(); } return q.promise; },
progressStart: function (message, title) { var q = $q.defer();
if (cordova.platformId === 'android') { navigator.notification.progressStart(title, message); q.resolve(); } else { q.reject(message, title); } return q.promise; },
progressStop: function () { var q = $q.defer();
if (cordova.platformId === 'android') { navigator.notification.progressStop(); q.resolve(); } else { q.reject(); } return q.promise; },
progressValue: function (value) { var q = $q.defer();
if (cordova.platformId === 'android') { navigator.notification.progressValue(value); q.resolve(); } else { q.reject(value); } return q.promise; } }; }]);
// 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; },
readFileMetadata: 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 (fileEntry) { fileEntry.file(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; }
/* 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; },
*/ };
}]; }]);
// 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(); var parsedKey = parseInt(key, 10);
if (isNaN(parsedKey)) { d.reject('Parameter "key" must be an integer.'); }
$window.analytics.addCustomDimension(parsedKey, 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.3dtouch', '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', '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, delay) { var q = $q.defer(); $window.plugins.NativeAudio.preloadComplex(id, assetPath, volume, voices, delay, 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, function (result) { q.resolve(result); }, function (err) { q.reject(err); }, completeCallback);
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; }, getBadgeNumber : function () { var q = $q.defer(); if (push === undefined) { q.reject(new Error('init must be called before any other operation')); } else { push.getApplicationIconBadgeNumber(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; }, finish: function (){ var q = $q.defer(); if (push === undefined) { q.reject(new Error('init must be called before any other operation')); } else { push.finish(function (success) { q.resolve(success); }, function (error) { q.reject(error); }); } return q.promise; } }; }]);
// install : cordova plugin add cordova-plugin-recentscontrol
// link : https://github.com/smcpjames/cordova-plugin-recentscontrol
/* globals RecentsControl: true */ angular.module('ngCordova.plugins.recentsControl', [])
.factory('$cordovaRecents', function () { return { setColor: function (color) { return RecentsControl.setColor(color); },
setDescription: function (desc) { return RecentsControl.setDescription(desc); },
setOptions: function (colorStr, desc) { return RecentsControl.setOptions(colorStr, desc); } }; }); // install : cordova plugin add https://github.com/gitawego/cordova-screenshot.git
// link : https://github.com/gitawego/cordova-screenshot
angular.module('ngCordova.plugins.screenshot', []) .factory('$cordovaScreenshot', ['$q', function ($q) { return { captureToFile: function (opts) {
var options = opts || {};
var extension = options.extension || 'jpg'; var quality = options.quality || '100';
var defer = $q.defer();
if (!navigator.screenshot) { defer.resolve(null); return defer.promise; }
navigator.screenshot.save(function (error, res) { if (error) { defer.reject(error); } else { defer.resolve(res.filePath); } }, extension, quality, options.filename);
return defer.promise; }, captureToUri: function (opts) {
var options = opts || {};
var extension = options.extension || 'jpg'; var quality = options.quality || '100';
var defer = $q.defer();
if (!navigator.screenshot) { defer.resolve(null); return defer.promise; }
navigator.screenshot.URI(function (error, res) { if (error) { defer.reject(error); } else { defer.resolve(res.URI); } }, extension, quality, options.filename);
return defer.promise; } }; }]); // install : cordova plugin add https://github.com/xseignard/cordovarduino.git
// link : https://github.com/xseignard/cordovarduino
/* globals serial: true */ angular.module('ngCordova.plugins.serial', [])
.factory('$cordovaSerial', ['$q', function ($q) {
var serialService = {};
serialService.requestPermission = function requestPermission(options) { var q = $q.defer();
serial.requestPermission(options, function success() { q.resolve(); }, function error(err) { q.reject(err); });
return q.promise; };
serialService.open = function(options) { var q = $q.defer();
serial.open(options, function success() { q.resolve(); }, function error(err) { q.reject(err); });
return q.promise; };
serialService.write = function(data) { var q = $q.defer();
serial.write(data, function success() { q.resolve(); }, function error(err) { q.reject(err); });
return q.promise; };
serialService.writeHex = function(data) { var q = $q.defer();
serial.writeHex(data, function success() { q.resolve(); }, function error(err) { q.reject(err); });
return q.promise; };
serialService.read = function() { var q = $q.defer();
serial.read(function success(buffer) { var view = new Uint8Array(buffer); q.resolve(view); }, function error(err) { q.reject(err); });
return q.promise; };
serialService.registerReadCallback = function(successCallback, errorCallback) { serial.registerReadCallback(function success(buffer) { var view = new Uint8Array(buffer); successCallback(view); }, errorCallback); };
serialService.close = function() { var q = $q.defer();
serial.close(function success() { q.resolve(); }, function error(err) { q.reject(err); });
return q.promise; };
return serialService; }]);
// 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; },
shareWithOptions: function (options) { var q = $q.defer(); $window.plugins.socialsharing.shareWithOptions(options, 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(); } });
return q.promise; } }; }]);
// 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, iosOptions) { fixed = fixed || false; return $window.plugins.spinnerDialog.show(title, message, fixed, iosOptions); }, 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; },
showWithOptions: function (options) { var q = $q.defer(); $window.plugins.toast.showWithOptions(options, 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; },
hide: function () { var q = $q.defer(); try { $window.plugins.toast.hide(); q.resolve(); } catch (error) { q.reject(error && error.message); } 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 cordova-plugin-tts
// link : https://github.com/smcpjames/cordova-plugin-tts
/* globals TTS: true */ angular.module('ngCordova.plugins.tts', [])
.factory('$cordovaTTS', function () { return { speak: function (text, onfulfilled, onrejected) { return TTS.speak(text, onfulfilled, onrejected); } }; }); // 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; } }; }]);
})();
|