Sebastián Katzer před 11 roky
rodič
revize
a2b77a2f16
1 změnil soubory, kde provedl 347 přidání a 338 odebrání
  1. 347 338
      www/local-notification.js

+ 347 - 338
www/local-notification.js

@@ -19,365 +19,374 @@
     under the License.
 */
 
-var LocalNotification = function () {
-    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(),
+var exec    = require('cordova/exec'),
     channel = require('cordova/channel');
 
-// Called after all 'deviceready' listener are called
+
+// Called after 'deviceready' event
 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', []);
+    // 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`
-                cordova.exec(null, null, 'LocalNotification', 'pause', []);
+                exec(null, null, 'LocalNotification', 'pause', []);
             });
 
             channel.onResume.subscribe( function () {
                 // 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`
-            cordova.exec(null, null, 'LocalNotification', 'resume', []);
+            exec(null, null, 'LocalNotification', 'resume', []);
         }
 
         // 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);
+    };
+};
+