diff options
| author | PliablePixels <pliablepixels@gmail.com> | 2015-06-27 09:52:06 -0400 |
|---|---|---|
| committer | PliablePixels <pliablepixels@gmail.com> | 2015-06-27 09:52:06 -0400 |
| commit | 319d4cb6670729708c19ad50b0146d1bcb7b4719 (patch) | |
| tree | c61e9723a1fd217b1816c987bba66e470e73bf02 /plugins/de.appplant.cordova.plugin.email-composer/www/email_composer.js | |
| parent | fdc42fae48db0fef5fbdc9ef51a27d219aea3a72 (diff) | |
Added ability to log key events to file and email (useful for release debugging)
Diffstat (limited to 'plugins/de.appplant.cordova.plugin.email-composer/www/email_composer.js')
| -rw-r--r-- | plugins/de.appplant.cordova.plugin.email-composer/www/email_composer.js | 186 |
1 files changed, 186 insertions, 0 deletions
diff --git a/plugins/de.appplant.cordova.plugin.email-composer/www/email_composer.js b/plugins/de.appplant.cordova.plugin.email-composer/www/email_composer.js new file mode 100644 index 00000000..7fd86076 --- /dev/null +++ b/plugins/de.appplant.cordova.plugin.email-composer/www/email_composer.js @@ -0,0 +1,186 @@ +/* + Copyright 2013-2015 appPlant UG + + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. +*/ + +var exec = require('cordova/exec'); + +/** + * List of all registered mail app aliases. + */ +exports.aliases = { + gmail: 'com.google.android.gm' +}; + +/** + * List of all available options with their default value. + * + * @return {Object} + */ +exports.getDefaults = function () { + return { + app: undefined, + subject: '', + body: '', + to: [], + cc: [], + bcc: [], + attachments: [], + isHtml: true + }; +}; + +/** + * Verifies if sending emails is supported on the device. + * + * @param {Function} callback + * A callback function to be called with the result + * @param {Object} scope + * The scope of the callback + */ +exports.isAvailable = function (callback, scope) { + var fn = this.createCallbackFn(callback, scope); + + exec(fn, null, 'EmailComposer', 'isAvailable', []); +}; + +/** + * Displays the email composer pre-filled with data. + * + * @param {Object} options + * Different properties of the email like the body, subject + * @param {Function} callback + * A callback function to be called with the result + * @param {Object?} scope + * The scope of the callback + */ +exports.open = function (options, callback, scope) { + var fn = this.createCallbackFn(callback, scope); + + options = this.mergeWithDefaults(options || {}); + + exec(fn, null, 'EmailComposer', 'open', [options]); +}; + +/** + * Adds a new mail app alias. + * + * @param {String} alias + * The alias name + * @param {String} package + * The package name + */ +exports.addAlias = function (alias, package) { + this.aliases[alias] = package; +} + +/** + * @depreacted + */ +exports.isServiceAvailable = function () { + console.log('`email.isServiceAvailable` is deprecated.' + + ' Please use `email.isAvailable` instead.'); + + this.isAvailable.apply(this, arguments); +}; + +/** + * Alias für `open()`. + */ +exports.openDraft = function () { + this.open.apply(this, arguments); +}; + +/** + * @private + * + * Merge settings with default values. + * + * @param {Object} options + * The custom options + * + * @retrun {Object} + * Default values merged + * with custom values + */ +exports.mergeWithDefaults = function (options) { + var defaults = this.getDefaults(); + + if (options.hasOwnProperty('isHTML')) { + options.isHtml = options.isHTML; + } + + if (options.hasOwnProperty('app')) { + var package = this.aliases[options.app]; + + options.app = package || options.app; + } + + for (var key in defaults) { + + if (!options.hasOwnProperty(key)) { + options[key] = defaults[key]; + continue; + } + + var custom_ = options[key], + default_ = defaults[key]; + + if (custom_ === null || custom_ === undefined) { + options[key] = default_; + continue; + } + + if (typeof default_ != typeof custom_) { + + if (typeof default_ == 'string') { + options[key] = custom_.join(''); + } + + else if (typeof default_ == 'object') { + options[key] = [custom_.toString()]; + } + } + } + + return options; +}; + +/** + * @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); + }; +}; |
