Loading www/local-notification.js +162 −153 Changes for www/local-notification.js: 162 added lines, 153 removed lines. Original line number Diff line number Diff line Loading @@ -19,8 +19,48 @@ under the License. */ var LocalNotification = function () { this._defaults = { var exec = require('cordova/exec'), 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: '', title: '', autoCancel: false, Loading @@ -29,24 +69,23 @@ var LocalNotification = function () { json: '', repeat: '' }; }; LocalNotification.prototype = { /** * Returns the default settings * * @return {Object} */ getDefaults: function () { exports.getDefaults = function () { return this._defaults; }, }; /** * Overwrite default settings * * @param {Object} defaults */ setDefaults: function (newDefaults) { exports.setDefaults = function (newDefaults) { var defaults = this.getDefaults(); for (var key in defaults) { Loading @@ -54,86 +93,12 @@ LocalNotification.prototype = { 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 * @param {Object} props * The notification properties * @param {Function} callback * A function to be called after the notification has been canceled Loading @@ -143,7 +108,7 @@ LocalNotification.prototype = { * @return {Number} * The notification's ID */ add: function (options, callback, scope) { exports.add = function (props, callback, scope) { var options = this.mergeWithDefaults(options), fn = this.createCallbackFn(callback, scope); Loading Loading @@ -173,10 +138,10 @@ LocalNotification.prototype = { }; } cordova.exec(fn, null, 'LocalNotification', 'add', [options]); exec(fn, null, 'LocalNotification', 'add', [options]); return options.id; }, }; /** * Cancels the specified notification. Loading @@ -188,12 +153,11 @@ LocalNotification.prototype = { * @param {Object} scope * The scope for the callback function */ cancel: function (id, callback, scope) { var id = id.toString(), fn = this.createCallbackFn(callback, scope); exports.cancel = function (id, callback, scope) { var fn = this.createCallbackFn(callback, scope); cordova.exec(fn, null, 'LocalNotification', 'cancel', [id]); }, exec(fn, null, 'LocalNotification', 'cancel', [id.toString()]); }; /** * Removes all previously registered notifications. Loading @@ -203,11 +167,11 @@ LocalNotification.prototype = { * @param {Object} scope * The scope for the callback function */ cancelAll: function (callback, scope) { exports.cancelAll = function (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. Loading @@ -217,11 +181,11 @@ LocalNotification.prototype = { * @param {Object} scope * The scope for the callback function */ getScheduledIds: function (callback, scope) { exports.getScheduledIds = function (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. Loading @@ -233,12 +197,11 @@ LocalNotification.prototype = { * @param {Object} scope * The scope for the callback function */ isScheduled: function (id, callback, scope) { var id = id.toString(), fn = this.createCallbackFn(callback, scope); exports.isScheduled = function (id, callback, scope) { var 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. Loading @@ -248,11 +211,11 @@ LocalNotification.prototype = { * @param {Object} scope * The scope for the callback function */ getTriggeredIds: function (callback, scope) { exports.getTriggeredIds = function (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. Loading @@ -264,39 +227,45 @@ LocalNotification.prototype = { * @param {Object} scope * The scope for the callback function */ isTriggered: function (id, callback, scope) { var id = id.toString(), fn = this.createCallbackFn(callback, scope); exports.isTriggered = function (id, callback, scope) { var 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 * The function to be exec as the callback * @param {Object?} scope * The callback function's scope */ hasPermission: function (callback, scope) { exports.hasPermission = function (callback, scope) { var fn = this.createCallbackFn(callback, scope); if (device.platform == 'iOS') { cordova.exec(fn, null, 'LocalNotification', 'hasPermission', []); } else if (fn) { if (device.platform != 'iOS') { 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 () { if (device.platform == 'iOS') { cordova.exec(null, null, 'LocalNotification', 'promptForPermission', []); } }, exports.promptForPermission = function (callback, scope) { if (device.platform != 'iOS') return; exec(null, null, 'LocalNotification', 'promptForPermission', []); }; /** * Occurs when a notification was added. Loading @@ -308,7 +277,7 @@ LocalNotification.prototype = { * @param {String} json * A custom (JSON) string */ onadd: function (id, state, json) {}, exports.onadd = function (id, state, json) {}; /** * Occurs when the notification is triggered. Loading @@ -320,7 +289,7 @@ LocalNotification.prototype = { * @param {String} json * A custom (JSON) string */ ontrigger: function (id, state, json) {}, exports.ontrigger = function (id, state, json) {}; /** * Fires after the notification was clicked. Loading @@ -332,7 +301,7 @@ LocalNotification.prototype = { * @param {String} json * A custom (JSON) string */ onclick: function (id, state, json) {}, exports.onclick = function (id, state, json) {}; /** * Fires if the notification was canceled. Loading @@ -344,40 +313,80 @@ LocalNotification.prototype = { * @param {String} json * 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 () { // Device is ready now, the listeners are registered and all queued events // can be executed now. cordova.exec(null, null, 'LocalNotification', 'deviceready', []); }); /** * @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(); 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` cordova.exec(null, null, 'LocalNotification', 'pause', []); }); for (var key in defaults) { if (options[key] === undefined) { options[key] = defaults[key]; } } channel.onResume.subscribe( function () { // Necessary to set the state to `foreground` cordova.exec(null, null, 'LocalNotification', 'resume', []); }); return options; }; // 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 plugin.applyPlatformSpecificOptions(); }); }); 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); }; }; module.exports = plugin; Loading
www/local-notification.js +162 −153 Changes for www/local-notification.js: 162 added lines, 153 removed lines. Original line number Diff line number Diff line Loading @@ -19,8 +19,48 @@ under the License. */ var LocalNotification = function () { this._defaults = { var exec = require('cordova/exec'), 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: '', title: '', autoCancel: false, Loading @@ -29,24 +69,23 @@ var LocalNotification = function () { json: '', repeat: '' }; }; LocalNotification.prototype = { /** * Returns the default settings * * @return {Object} */ getDefaults: function () { exports.getDefaults = function () { return this._defaults; }, }; /** * Overwrite default settings * * @param {Object} defaults */ setDefaults: function (newDefaults) { exports.setDefaults = function (newDefaults) { var defaults = this.getDefaults(); for (var key in defaults) { Loading @@ -54,86 +93,12 @@ LocalNotification.prototype = { 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 * @param {Object} props * The notification properties * @param {Function} callback * A function to be called after the notification has been canceled Loading @@ -143,7 +108,7 @@ LocalNotification.prototype = { * @return {Number} * The notification's ID */ add: function (options, callback, scope) { exports.add = function (props, callback, scope) { var options = this.mergeWithDefaults(options), fn = this.createCallbackFn(callback, scope); Loading Loading @@ -173,10 +138,10 @@ LocalNotification.prototype = { }; } cordova.exec(fn, null, 'LocalNotification', 'add', [options]); exec(fn, null, 'LocalNotification', 'add', [options]); return options.id; }, }; /** * Cancels the specified notification. Loading @@ -188,12 +153,11 @@ LocalNotification.prototype = { * @param {Object} scope * The scope for the callback function */ cancel: function (id, callback, scope) { var id = id.toString(), fn = this.createCallbackFn(callback, scope); exports.cancel = function (id, callback, scope) { var fn = this.createCallbackFn(callback, scope); cordova.exec(fn, null, 'LocalNotification', 'cancel', [id]); }, exec(fn, null, 'LocalNotification', 'cancel', [id.toString()]); }; /** * Removes all previously registered notifications. Loading @@ -203,11 +167,11 @@ LocalNotification.prototype = { * @param {Object} scope * The scope for the callback function */ cancelAll: function (callback, scope) { exports.cancelAll = function (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. Loading @@ -217,11 +181,11 @@ LocalNotification.prototype = { * @param {Object} scope * The scope for the callback function */ getScheduledIds: function (callback, scope) { exports.getScheduledIds = function (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. Loading @@ -233,12 +197,11 @@ LocalNotification.prototype = { * @param {Object} scope * The scope for the callback function */ isScheduled: function (id, callback, scope) { var id = id.toString(), fn = this.createCallbackFn(callback, scope); exports.isScheduled = function (id, callback, scope) { var 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. Loading @@ -248,11 +211,11 @@ LocalNotification.prototype = { * @param {Object} scope * The scope for the callback function */ getTriggeredIds: function (callback, scope) { exports.getTriggeredIds = function (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. Loading @@ -264,39 +227,45 @@ LocalNotification.prototype = { * @param {Object} scope * The scope for the callback function */ isTriggered: function (id, callback, scope) { var id = id.toString(), fn = this.createCallbackFn(callback, scope); exports.isTriggered = function (id, callback, scope) { var 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 * The function to be exec as the callback * @param {Object?} scope * The callback function's scope */ hasPermission: function (callback, scope) { exports.hasPermission = function (callback, scope) { var fn = this.createCallbackFn(callback, scope); if (device.platform == 'iOS') { cordova.exec(fn, null, 'LocalNotification', 'hasPermission', []); } else if (fn) { if (device.platform != 'iOS') { 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 () { if (device.platform == 'iOS') { cordova.exec(null, null, 'LocalNotification', 'promptForPermission', []); } }, exports.promptForPermission = function (callback, scope) { if (device.platform != 'iOS') return; exec(null, null, 'LocalNotification', 'promptForPermission', []); }; /** * Occurs when a notification was added. Loading @@ -308,7 +277,7 @@ LocalNotification.prototype = { * @param {String} json * A custom (JSON) string */ onadd: function (id, state, json) {}, exports.onadd = function (id, state, json) {}; /** * Occurs when the notification is triggered. Loading @@ -320,7 +289,7 @@ LocalNotification.prototype = { * @param {String} json * A custom (JSON) string */ ontrigger: function (id, state, json) {}, exports.ontrigger = function (id, state, json) {}; /** * Fires after the notification was clicked. Loading @@ -332,7 +301,7 @@ LocalNotification.prototype = { * @param {String} json * A custom (JSON) string */ onclick: function (id, state, json) {}, exports.onclick = function (id, state, json) {}; /** * Fires if the notification was canceled. Loading @@ -344,40 +313,80 @@ LocalNotification.prototype = { * @param {String} json * 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 () { // Device is ready now, the listeners are registered and all queued events // can be executed now. cordova.exec(null, null, 'LocalNotification', 'deviceready', []); }); /** * @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(); 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` cordova.exec(null, null, 'LocalNotification', 'pause', []); }); for (var key in defaults) { if (options[key] === undefined) { options[key] = defaults[key]; } } channel.onResume.subscribe( function () { // Necessary to set the state to `foreground` cordova.exec(null, null, 'LocalNotification', 'resume', []); }); return options; }; // 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 plugin.applyPlatformSpecificOptions(); }); }); 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); }; }; module.exports = plugin;