Commit a2b77a2f by Sebastián Katzer

Flatten JS file

parent a21a13bb
...@@ -19,8 +19,48 @@ ...@@ -19,8 +19,48 @@
under the License. under the License.
*/ */
var LocalNotification = function () { var exec = require('cordova/exec'),
this._defaults = { channel = require('cordova/channel');
// Called after 'deviceready' event
channel.deviceready.subscribe( function () {
// Device is ready now, the listeners are registered
// and all queued events can be executed.
exec(null, null, 'LocalNotification', 'deviceready', []);
});
// Called before 'deviceready' event
channel.onCordovaReady.subscribe( function () {
// The cordova device plugin is ready now
channel.onCordovaInfoReady.subscribe( function () {
if (device.platform == 'Android') {
channel.onPause.subscribe( function () {
// Necessary to set the state to `background`
exec(null, null, 'LocalNotification', 'pause', []);
});
channel.onResume.subscribe( function () {
// Necessary to set the state to `foreground`
exec(null, null, 'LocalNotification', 'resume', []);
});
// Necessary to set the state to `foreground`
exec(null, null, 'LocalNotification', 'resume', []);
}
// Merges the platform specific properties into the default properties
exports.applyPlatformSpecificOptions();
});
});
/**
* @private
*
* Default values.
*/
exports._defaults = {
message: '', message: '',
title: '', title: '',
autoCancel: false, autoCancel: false,
...@@ -28,25 +68,24 @@ var LocalNotification = function () { ...@@ -28,25 +68,24 @@ var LocalNotification = function () {
id: '0', id: '0',
json: '', json: '',
repeat: '' repeat: ''
};
}; };
LocalNotification.prototype = {
/** /**
* Returns the default settings * Returns the default settings
* *
* @return {Object} * @return {Object}
*/ */
getDefaults: function () { exports.getDefaults = function () {
return this._defaults; return this._defaults;
}, };
/** /**
* Overwrite default settings * Overwrite default settings
* *
* @param {Object} defaults * @param {Object} defaults
*/ */
setDefaults: function (newDefaults) { exports.setDefaults = function (newDefaults) {
var defaults = this.getDefaults(); var defaults = this.getDefaults();
for (var key in defaults) { for (var key in defaults) {
...@@ -54,86 +93,12 @@ LocalNotification.prototype = { ...@@ -54,86 +93,12 @@ LocalNotification.prototype = {
defaults[key] = newDefaults[key]; defaults[key] = newDefaults[key];
} }
} }
}, };
/**
* @private
*
* Merges custom properties with the default values.
*
* @param {Object} options
* Set of custom values
*
* @retrun {Object}
* The merged property list
*/
mergeWithDefaults: function (options) {
var defaults = this.getDefaults();
for (var key in defaults) {
if (options[key] === undefined) {
options[key] = defaults[key];
}
}
return options;
},
/**
* @private
*
* Merges the platform specific properties into the default properties.
*
* @return {Object}
* The default properties for the platform
*/
applyPlatformSpecificOptions: function () {
var defaults = this._defaults;
switch (device.platform) {
case 'Android':
defaults.icon = 'icon';
defaults.smallIcon = null;
defaults.ongoing = false;
defaults.led = 'FFFFFF'; /*RRGGBB*/
defaults.sound = 'TYPE_NOTIFICATION'; break;
case 'iOS':
defaults.sound = ''; break;
case 'WinCE': case 'Win32NT':
defaults.smallImage = null;
defaults.image = null;
defaults.wideImage = null;
}
return defaults;
},
/**
* @private
*
* Creates a callback, which will be executed within a specific scope.
*
* @param {Function} callbackFn
* The callback function
* @param {Object} scope
* The scope for the function
*
* @return {Function}
* The new callback function
*/
createCallbackFn: function (callbackFn, scope) {
if (typeof callbackFn != 'function')
return;
return function () {
callbackFn.apply(scope || this, arguments);
};
},
/** /**
* Add a new entry to the registry * Add a new entry to the registry
* *
* @param {Object} options * @param {Object} props
* The notification properties * The notification properties
* @param {Function} callback * @param {Function} callback
* A function to be called after the notification has been canceled * A function to be called after the notification has been canceled
...@@ -143,7 +108,7 @@ LocalNotification.prototype = { ...@@ -143,7 +108,7 @@ LocalNotification.prototype = {
* @return {Number} * @return {Number}
* The notification's ID * The notification's ID
*/ */
add: function (options, callback, scope) { exports.add = function (props, callback, scope) {
var options = this.mergeWithDefaults(options), var options = this.mergeWithDefaults(options),
fn = this.createCallbackFn(callback, scope); fn = this.createCallbackFn(callback, scope);
...@@ -173,12 +138,12 @@ LocalNotification.prototype = { ...@@ -173,12 +138,12 @@ LocalNotification.prototype = {
}; };
} }
cordova.exec(fn, null, 'LocalNotification', 'add', [options]); exec(fn, null, 'LocalNotification', 'add', [options]);
return options.id; return options.id;
}, };
/** /**
* Cancels the specified notification. * Cancels the specified notification.
* *
* @param {String} id * @param {String} id
...@@ -188,14 +153,13 @@ LocalNotification.prototype = { ...@@ -188,14 +153,13 @@ LocalNotification.prototype = {
* @param {Object} scope * @param {Object} scope
* The scope for the callback function * The scope for the callback function
*/ */
cancel: function (id, callback, scope) { exports.cancel = function (id, callback, scope) {
var id = id.toString(), var fn = this.createCallbackFn(callback, scope);
fn = this.createCallbackFn(callback, scope);
cordova.exec(fn, null, 'LocalNotification', 'cancel', [id]); exec(fn, null, 'LocalNotification', 'cancel', [id.toString()]);
}, };
/** /**
* Removes all previously registered notifications. * Removes all previously registered notifications.
* *
* @param {Function} callback * @param {Function} callback
...@@ -203,13 +167,13 @@ LocalNotification.prototype = { ...@@ -203,13 +167,13 @@ LocalNotification.prototype = {
* @param {Object} scope * @param {Object} scope
* The scope for the callback function * The scope for the callback function
*/ */
cancelAll: function (callback, scope) { exports.cancelAll = function (callback, scope) {
var fn = this.createCallbackFn(callback, scope); var fn = this.createCallbackFn(callback, scope);
cordova.exec(fn, null, 'LocalNotification', 'cancelAll', []); exec(fn, null, 'LocalNotification', 'cancelAll', []);
}, };
/** /**
* Retrieves a list with all currently pending notifications. * Retrieves a list with all currently pending notifications.
* *
* @param {Function} callback * @param {Function} callback
...@@ -217,13 +181,13 @@ LocalNotification.prototype = { ...@@ -217,13 +181,13 @@ LocalNotification.prototype = {
* @param {Object} scope * @param {Object} scope
* The scope for the callback function * The scope for the callback function
*/ */
getScheduledIds: function (callback, scope) { exports.getScheduledIds = function (callback, scope) {
var fn = this.createCallbackFn(callback, scope); var fn = this.createCallbackFn(callback, scope);
cordova.exec(fn, null, 'LocalNotification', 'getScheduledIds', []); exec(fn, null, 'LocalNotification', 'getScheduledIds', []);
}, };
/** /**
* Checks wether a notification with an ID is scheduled. * Checks wether a notification with an ID is scheduled.
* *
* @param {String} id * @param {String} id
...@@ -233,14 +197,13 @@ LocalNotification.prototype = { ...@@ -233,14 +197,13 @@ LocalNotification.prototype = {
* @param {Object} scope * @param {Object} scope
* The scope for the callback function * The scope for the callback function
*/ */
isScheduled: function (id, callback, scope) { exports.isScheduled = function (id, callback, scope) {
var id = id.toString(), var fn = this.createCallbackFn(callback, scope);
fn = this.createCallbackFn(callback, scope);
cordova.exec(fn, null, 'LocalNotification', 'isScheduled', [id]); exec(fn, null, 'LocalNotification', 'isScheduled', [id.toString()]);
}, };
/** /**
* Retrieves a list with all triggered notifications. * Retrieves a list with all triggered notifications.
* *
* @param {Function} callback * @param {Function} callback
...@@ -248,13 +211,13 @@ LocalNotification.prototype = { ...@@ -248,13 +211,13 @@ LocalNotification.prototype = {
* @param {Object} scope * @param {Object} scope
* The scope for the callback function * The scope for the callback function
*/ */
getTriggeredIds: function (callback, scope) { exports.getTriggeredIds = function (callback, scope) {
var fn = this.createCallbackFn(callback, scope); var fn = this.createCallbackFn(callback, scope);
cordova.exec(fn, null, 'LocalNotification', 'getTriggeredIds', []); exec(fn, null, 'LocalNotification', 'getTriggeredIds', []);
}, };
/** /**
* Checks wether a notification with an ID was triggered. * Checks wether a notification with an ID was triggered.
* *
* @param {String} id * @param {String} id
...@@ -264,41 +227,47 @@ LocalNotification.prototype = { ...@@ -264,41 +227,47 @@ LocalNotification.prototype = {
* @param {Object} scope * @param {Object} scope
* The scope for the callback function * The scope for the callback function
*/ */
isTriggered: function (id, callback, scope) { exports.isTriggered = function (id, callback, scope) {
var id = id.toString(), var fn = this.createCallbackFn(callback, scope);
fn = this.createCallbackFn(callback, scope);
cordova.exec(fn, null, 'LocalNotification', 'isTriggered', [id]); exec(fn, null, 'LocalNotification', 'isTriggered', [id.toString()]);
}, };
/** /**
* Informs if the app has the permission to show badges. * Informs if the app has the permission to show notifications.
* *
* @param {Function} callback * @param {Function} callback
* The function to be exec as the callback * The function to be exec as the callback
* @param {Object?} scope * @param {Object?} scope
* The callback function's scope * The callback function's scope
*/ */
hasPermission: function (callback, scope) { exports.hasPermission = function (callback, scope) {
var fn = this.createCallbackFn(callback, scope); var fn = this.createCallbackFn(callback, scope);
if (device.platform == 'iOS') { if (device.platform != 'iOS') {
cordova.exec(fn, null, 'LocalNotification', 'hasPermission', []);
} else if (fn) {
fn(true); fn(true);
return;
} }
},
/** exec(fn, null, 'LocalNotification', 'hasPermission', []);
* Ask for permission to show badges if not already granted. };
/**
* Ask for permission to show notifications if not already granted.
*
* @param {Function} callback
* The function to be exec as the callback
* @param {Object?} scope
* The callback function's scope
*/ */
promptForPermission: function () { exports.promptForPermission = function (callback, scope) {
if (device.platform == 'iOS') { if (device.platform != 'iOS')
cordova.exec(null, null, 'LocalNotification', 'promptForPermission', []); return;
}
},
/** exec(null, null, 'LocalNotification', 'promptForPermission', []);
};
/**
* Occurs when a notification was added. * Occurs when a notification was added.
* *
* @param {String} id * @param {String} id
...@@ -308,9 +277,9 @@ LocalNotification.prototype = { ...@@ -308,9 +277,9 @@ LocalNotification.prototype = {
* @param {String} json * @param {String} json
* A custom (JSON) string * A custom (JSON) string
*/ */
onadd: function (id, state, json) {}, exports.onadd = function (id, state, json) {};
/** /**
* Occurs when the notification is triggered. * Occurs when the notification is triggered.
* *
* @param {String} id * @param {String} id
...@@ -320,9 +289,9 @@ LocalNotification.prototype = { ...@@ -320,9 +289,9 @@ LocalNotification.prototype = {
* @param {String} json * @param {String} json
* A custom (JSON) string * A custom (JSON) string
*/ */
ontrigger: function (id, state, json) {}, exports.ontrigger = function (id, state, json) {};
/** /**
* Fires after the notification was clicked. * Fires after the notification was clicked.
* *
* @param {String} id * @param {String} id
...@@ -332,9 +301,9 @@ LocalNotification.prototype = { ...@@ -332,9 +301,9 @@ LocalNotification.prototype = {
* @param {String} json * @param {String} json
* A custom (JSON) string * A custom (JSON) string
*/ */
onclick: function (id, state, json) {}, exports.onclick = function (id, state, json) {};
/** /**
* Fires if the notification was canceled. * Fires if the notification was canceled.
* *
* @param {String} id * @param {String} id
...@@ -344,40 +313,80 @@ LocalNotification.prototype = { ...@@ -344,40 +313,80 @@ LocalNotification.prototype = {
* @param {String} json * @param {String} json
* A custom (JSON) string * A custom (JSON) string
*/ */
oncancel: function (id, state, json) {} exports.oncancel = function (id, state, json) {};
};
var plugin = new LocalNotification(),
channel = require('cordova/channel');
// Called after all 'deviceready' listener are called /**
channel.deviceready.subscribe( function () { * @private
// Device is ready now, the listeners are registered and all queued events *
// can be executed now. * Merges custom properties with the default values.
cordova.exec(null, null, 'LocalNotification', 'deviceready', []); *
}); * @param {Object} options
* Set of custom values
*
* @retrun {Object}
* The merged property list
*/
exports.mergeWithDefaults = function (options) {
var defaults = this.getDefaults();
channel.onCordovaReady.subscribe( function () { for (var key in defaults) {
// The cordova device plugin is ready now if (options[key] === undefined) {
channel.onCordovaInfoReady.subscribe( function () { options[key] = defaults[key];
if (device.platform == 'Android') { }
channel.onPause.subscribe( function () { }
// Necessary to set the state to `background`
cordova.exec(null, null, 'LocalNotification', 'pause', []);
});
channel.onResume.subscribe( function () { return options;
// Necessary to set the state to `foreground` };
cordova.exec(null, null, 'LocalNotification', 'resume', []);
});
// Necessary to set the state to `foreground` /**
cordova.exec(null, null, 'LocalNotification', 'resume', []); * @private
*
* Merges the platform specific properties into the default properties.
*
* @return {Object}
* The default properties for the platform
*/
exports.applyPlatformSpecificOptions = function () {
var defaults = this._defaults;
switch (device.platform) {
case 'Android':
defaults.icon = 'icon';
defaults.smallIcon = null;
defaults.ongoing = false;
defaults.led = 'FFFFFF'; /*RRGGBB*/
defaults.sound = 'TYPE_NOTIFICATION'; break;
case 'iOS':
defaults.sound = ''; break;
case 'WinCE': case 'Win32NT':
defaults.smallImage = null;
defaults.image = null;
defaults.wideImage = null;
} }
// Merges the platform specific properties into the default properties return defaults;
plugin.applyPlatformSpecificOptions(); };
});
}); /**
* @private
*
* Creates a callback, which will be executed within a specific scope.
*
* @param {Function} callbackFn
* The callback function
* @param {Object} scope
* The scope for the function
*
* @return {Function}
* The new callback function
*/
exports.createCallbackFn = function (callbackFn, scope) {
if (typeof callbackFn != 'function')
return;
return function () {
callbackFn.apply(scope || this, arguments);
};
};
module.exports = plugin;
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment