Commit a2b77a2f by Sebastián Katzer

Flatten JS file

parent a21a13bb
...@@ -19,365 +19,374 @@ ...@@ -19,365 +19,374 @@
under the License. under the License.
*/ */
var LocalNotification = function () { var exec = require('cordova/exec'),
this._defaults = {
message: '',
title: '',
autoCancel: false,
badge: 0,
id: '0',
json: '',
repeat: ''
};
};
LocalNotification.prototype = {
/**
* Returns the default settings
*
* @return {Object}
*/
getDefaults: function () {
return this._defaults;
},
/**
* Overwrite default settings
*
* @param {Object} defaults
*/
setDefaults: function (newDefaults) {
var defaults = this.getDefaults();
for (var key in defaults) {
if (newDefaults[key] !== undefined) {
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
*
* @param {Object} options
* The notification properties
* @param {Function} callback
* A function to be called after the notification has been canceled
* @param {Object} scope
* The scope for the callback function
*
* @return {Number}
* The notification's ID
*/
add: function (options, callback, scope) {
var options = this.mergeWithDefaults(options),
fn = this.createCallbackFn(callback, scope);
if (options.id) {
options.id = options.id.toString();
}
if (options.date === undefined) {
options.date = new Date();
}
if (options.title) {
options.title = options.title.toString();
}
if (options.message) {
options.message = options.message.toString();
}
if (typeof options.date == 'object') {
options.date = Math.round(options.date.getTime()/1000);
}
if (['WinCE', 'Win32NT'].indexOf(device.platform) > -1) {
fn = function (cmd) {
eval(cmd);
};
}
cordova.exec(fn, null, 'LocalNotification', 'add', [options]);
return options.id;
},
/**
* Cancels the specified notification.
*
* @param {String} id
* The ID of the notification
* @param {Function} callback
* A function to be called after the notification has been canceled
* @param {Object} scope
* The scope for the callback function
*/
cancel: function (id, callback, scope) {
var id = id.toString(),
fn = this.createCallbackFn(callback, scope);
cordova.exec(fn, null, 'LocalNotification', 'cancel', [id]);
},
/**
* Removes all previously registered notifications.
*
* @param {Function} callback
* A function to be called after all notifications have been canceled
* @param {Object} scope
* The scope for the callback function
*/
cancelAll: function (callback, scope) {
var fn = this.createCallbackFn(callback, scope);
cordova.exec(fn, null, 'LocalNotification', 'cancelAll', []);
},
/**
* Retrieves a list with all currently pending notifications.
*
* @param {Function} callback
* A callback function to be called with the list
* @param {Object} scope
* The scope for the callback function
*/
getScheduledIds: function (callback, scope) {
var fn = this.createCallbackFn(callback, scope);
cordova.exec(fn, null, 'LocalNotification', 'getScheduledIds', []);
},
/**
* Checks wether a notification with an ID is scheduled.
*
* @param {String} id
* The ID of the notification
* @param {Function} callback
* A callback function to be called with the list
* @param {Object} scope
* The scope for the callback function
*/
isScheduled: function (id, callback, scope) {
var id = id.toString(),
fn = this.createCallbackFn(callback, scope);
cordova.exec(fn, null, 'LocalNotification', 'isScheduled', [id]);
},
/**
* Retrieves a list with all triggered notifications.
*
* @param {Function} callback
* A callback function to be called with the list
* @param {Object} scope
* The scope for the callback function
*/
getTriggeredIds: function (callback, scope) {
var fn = this.createCallbackFn(callback, scope);
cordova.exec(fn, null, 'LocalNotification', 'getTriggeredIds', []);
},
/**
* Checks wether a notification with an ID was triggered.
*
* @param {String} id
* The ID of the notification
* @param {Function} callback
* A callback function to be called with the list
* @param {Object} scope
* The scope for the callback function
*/
isTriggered: function (id, callback, scope) {
var id = id.toString(),
fn = this.createCallbackFn(callback, scope);
cordova.exec(fn, null, 'LocalNotification', 'isTriggered', [id]);
},
/**
* Informs if the app has the permission to show badges.
*
* @param {Function} callback
* The function to be exec as the callback
* @param {Object?} scope
* The callback function's scope
*/
hasPermission: function (callback, scope) {
var fn = this.createCallbackFn(callback, scope);
if (device.platform == 'iOS') {
cordova.exec(fn, null, 'LocalNotification', 'hasPermission', []);
} else if (fn) {
fn(true);
}
},
/**
* Ask for permission to show badges if not already granted.
*/
promptForPermission: function () {
if (device.platform == 'iOS') {
cordova.exec(null, null, 'LocalNotification', 'promptForPermission', []);
}
},
/**
* Occurs when a notification was added.
*
* @param {String} id
* The ID of the notification
* @param {String} state
* Either "foreground" or "background"
* @param {String} json
* A custom (JSON) string
*/
onadd: function (id, state, json) {},
/**
* Occurs when the notification is triggered.
*
* @param {String} id
* The ID of the notification
* @param {String} state
* Either "foreground" or "background"
* @param {String} json
* A custom (JSON) string
*/
ontrigger: function (id, state, json) {},
/**
* Fires after the notification was clicked.
*
* @param {String} id
* The ID of the notification
* @param {String} state
* Either "foreground" or "background"
* @param {String} json
* A custom (JSON) string
*/
onclick: function (id, state, json) {},
/**
* Fires if the notification was canceled.
*
* @param {String} id
* The ID of the notification
* @param {String} state
* Either "foreground" or "background"
* @param {String} json
* A custom (JSON) string
*/
oncancel: function (id, state, json) {}
};
var plugin = new LocalNotification(),
channel = require('cordova/channel'); channel = require('cordova/channel');
// Called after all 'deviceready' listener are called
// Called after 'deviceready' event
channel.deviceready.subscribe( function () { channel.deviceready.subscribe( function () {
// Device is ready now, the listeners are registered and all queued events // Device is ready now, the listeners are registered
// can be executed now. // and all queued events can be executed.
cordova.exec(null, null, 'LocalNotification', 'deviceready', []); exec(null, null, 'LocalNotification', 'deviceready', []);
}); });
// Called before 'deviceready' event
channel.onCordovaReady.subscribe( function () { channel.onCordovaReady.subscribe( function () {
// The cordova device plugin is ready now // The cordova device plugin is ready now
channel.onCordovaInfoReady.subscribe( function () { channel.onCordovaInfoReady.subscribe( function () {
if (device.platform == 'Android') { if (device.platform == 'Android') {
channel.onPause.subscribe( function () { channel.onPause.subscribe( function () {
// Necessary to set the state to `background` // Necessary to set the state to `background`
cordova.exec(null, null, 'LocalNotification', 'pause', []); exec(null, null, 'LocalNotification', 'pause', []);
}); });
channel.onResume.subscribe( function () { channel.onResume.subscribe( function () {
// Necessary to set the state to `foreground` // Necessary to set the state to `foreground`
cordova.exec(null, null, 'LocalNotification', 'resume', []); exec(null, null, 'LocalNotification', 'resume', []);
}); });
// Necessary to set the state to `foreground` // Necessary to set the state to `foreground`
cordova.exec(null, null, 'LocalNotification', 'resume', []); exec(null, null, 'LocalNotification', 'resume', []);
} }
// Merges the platform specific properties into the default properties // Merges the platform specific properties into the default properties
plugin.applyPlatformSpecificOptions(); exports.applyPlatformSpecificOptions();
}); });
}); });
module.exports = plugin;
/**
* @private
*
* Default values.
*/
exports._defaults = {
message: '',
title: '',
autoCancel: false,
badge: 0,
id: '0',
json: '',
repeat: ''
};
/**
* Returns the default settings
*
* @return {Object}
*/
exports.getDefaults = function () {
return this._defaults;
};
/**
* Overwrite default settings
*
* @param {Object} defaults
*/
exports.setDefaults = function (newDefaults) {
var defaults = this.getDefaults();
for (var key in defaults) {
if (newDefaults[key] !== undefined) {
defaults[key] = newDefaults[key];
}
}
};
/**
* Add a new entry to the registry
*
* @param {Object} props
* The notification properties
* @param {Function} callback
* A function to be called after the notification has been canceled
* @param {Object} scope
* The scope for the callback function
*
* @return {Number}
* The notification's ID
*/
exports.add = function (props, callback, scope) {
var options = this.mergeWithDefaults(options),
fn = this.createCallbackFn(callback, scope);
if (options.id) {
options.id = options.id.toString();
}
if (options.date === undefined) {
options.date = new Date();
}
if (options.title) {
options.title = options.title.toString();
}
if (options.message) {
options.message = options.message.toString();
}
if (typeof options.date == 'object') {
options.date = Math.round(options.date.getTime()/1000);
}
if (['WinCE', 'Win32NT'].indexOf(device.platform) > -1) {
fn = function (cmd) {
eval(cmd);
};
}
exec(fn, null, 'LocalNotification', 'add', [options]);
return options.id;
};
/**
* Cancels the specified notification.
*
* @param {String} id
* The ID of the notification
* @param {Function} callback
* A function to be called after the notification has been canceled
* @param {Object} scope
* The scope for the callback function
*/
exports.cancel = function (id, callback, scope) {
var fn = this.createCallbackFn(callback, scope);
exec(fn, null, 'LocalNotification', 'cancel', [id.toString()]);
};
/**
* Removes all previously registered notifications.
*
* @param {Function} callback
* A function to be called after all notifications have been canceled
* @param {Object} scope
* The scope for the callback function
*/
exports.cancelAll = function (callback, scope) {
var fn = this.createCallbackFn(callback, scope);
exec(fn, null, 'LocalNotification', 'cancelAll', []);
};
/**
* Retrieves a list with all currently pending notifications.
*
* @param {Function} callback
* A callback function to be called with the list
* @param {Object} scope
* The scope for the callback function
*/
exports.getScheduledIds = function (callback, scope) {
var fn = this.createCallbackFn(callback, scope);
exec(fn, null, 'LocalNotification', 'getScheduledIds', []);
};
/**
* Checks wether a notification with an ID is scheduled.
*
* @param {String} id
* The ID of the notification
* @param {Function} callback
* A callback function to be called with the list
* @param {Object} scope
* The scope for the callback function
*/
exports.isScheduled = function (id, callback, scope) {
var fn = this.createCallbackFn(callback, scope);
exec(fn, null, 'LocalNotification', 'isScheduled', [id.toString()]);
};
/**
* Retrieves a list with all triggered notifications.
*
* @param {Function} callback
* A callback function to be called with the list
* @param {Object} scope
* The scope for the callback function
*/
exports.getTriggeredIds = function (callback, scope) {
var fn = this.createCallbackFn(callback, scope);
exec(fn, null, 'LocalNotification', 'getTriggeredIds', []);
};
/**
* Checks wether a notification with an ID was triggered.
*
* @param {String} id
* The ID of the notification
* @param {Function} callback
* A callback function to be called with the list
* @param {Object} scope
* The scope for the callback function
*/
exports.isTriggered = function (id, callback, scope) {
var fn = this.createCallbackFn(callback, scope);
exec(fn, null, 'LocalNotification', 'isTriggered', [id.toString()]);
};
/**
* Informs if the app has the permission to show notifications.
*
* @param {Function} callback
* The function to be exec as the callback
* @param {Object?} scope
* The callback function's scope
*/
exports.hasPermission = function (callback, scope) {
var fn = this.createCallbackFn(callback, scope);
if (device.platform != 'iOS') {
fn(true);
return;
}
exec(fn, null, 'LocalNotification', 'hasPermission', []);
};
/**
* 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
*/
exports.promptForPermission = function (callback, scope) {
if (device.platform != 'iOS')
return;
exec(null, null, 'LocalNotification', 'promptForPermission', []);
};
/**
* Occurs when a notification was added.
*
* @param {String} id
* The ID of the notification
* @param {String} state
* Either "foreground" or "background"
* @param {String} json
* A custom (JSON) string
*/
exports.onadd = function (id, state, json) {};
/**
* Occurs when the notification is triggered.
*
* @param {String} id
* The ID of the notification
* @param {String} state
* Either "foreground" or "background"
* @param {String} json
* A custom (JSON) string
*/
exports.ontrigger = function (id, state, json) {};
/**
* Fires after the notification was clicked.
*
* @param {String} id
* The ID of the notification
* @param {String} state
* Either "foreground" or "background"
* @param {String} json
* A custom (JSON) string
*/
exports.onclick = function (id, state, json) {};
/**
* Fires if the notification was canceled.
*
* @param {String} id
* The ID of the notification
* @param {String} state
* Either "foreground" or "background"
* @param {String} json
* A custom (JSON) string
*/
exports.oncancel = function (id, state, json) {};
/**
* @private
*
* Merges custom properties with the default values.
*
* @param {Object} options
* Set of custom values
*
* @retrun {Object}
* The merged property list
*/
exports.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
*/
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;
}
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
*/
exports.createCallbackFn = function (callbackFn, scope) {
if (typeof callbackFn != 'function')
return;
return function () {
callbackFn.apply(scope || this, arguments);
};
};
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