From 45dc9837528d2efd1d9eba9a118c2fa09a0b3782 Mon Sep 17 00:00:00 2001 From: Max Lynch Date: Sun, 29 Nov 2015 16:30:15 -0600 Subject: [PATCH] Device ready call --- demo/www/app/home/home.js | 3 ++- demo/www/app/plugin/plugin.js | 14 +++++++++++++- dist/index.d.ts | 1 + dist/index.js | 11 +++++++++++ dist/plugins/actionsheet.d.ts | 4 ++++ dist/plugins/actionsheet.js | 35 +++++++++++++++++++++++++++++++++++ dist/plugins/camera.js | 1 - dist/plugins/plugin.js | 7 ++++++- dist/plugins/toast.js | 3 ++- dist/src/index.d.ts | 1 + dist/src/index.js | 11 +++++++++++ dist/src/plugins/camera.js | 1 - dist/src/plugins/plugin.js | 7 ++++++- dist/src/plugins/toast.js | 3 ++- dist/src/util.js | 3 +++ dist/util.js | 3 +++ src/index.ts | 17 +++++++++++++++++ src/plugins/actionsheet.ts | 21 +++++++++++++++++++++ src/plugins/camera.ts | 2 -- src/plugins/plugin.ts | 8 +++++++- src/plugins/toast.ts | 3 ++- src/util.ts | 3 ++- tsconfig.json | 2 +- 23 files changed, 150 insertions(+), 14 deletions(-) create mode 100644 dist/plugins/actionsheet.d.ts create mode 100644 dist/plugins/actionsheet.js create mode 100644 src/plugins/actionsheet.ts diff --git a/demo/www/app/home/home.js b/demo/www/app/home/home.js index 5d8c8712..465ecc78 100644 --- a/demo/www/app/home/home.js +++ b/demo/www/app/home/home.js @@ -1,6 +1,6 @@ import {Page, NavController} from 'ionic/ionic' -import {Camera, StatusBar, Toast} from 'ionic-native'; +import {ActionSheet, Camera, StatusBar, Toast} from 'ionic-native'; import {Plugin} from '../plugin/plugin'; @@ -12,6 +12,7 @@ export class HomePage { this.nav = nav; this.plugins = [ + ActionSheet, Camera, StatusBar, Toast diff --git a/demo/www/app/plugin/plugin.js b/demo/www/app/plugin/plugin.js index 8843f5fa..fb0633a4 100644 --- a/demo/www/app/plugin/plugin.js +++ b/demo/www/app/plugin/plugin.js @@ -1,9 +1,21 @@ import {Page, NavParams} from 'ionic/ionic'; -import {Camera, StatusBar, Toast} from 'ionic-native'; +import {Camera, StatusBar, Toast, ActionSheet} from 'ionic-native'; // To specify arguments for any plugin calls var demoArgs = {}; +demoArgs[ActionSheet] = { + show: { + 'title': 'What do you want with this image?', + 'buttonLabels': ['Share via Facebook', 'Share via Twitter'], + 'androidEnableCancelButton' : true, // default false + 'winphoneEnableCancelButton' : true, // default false + 'addCancelButtonWithLabel': 'Cancel', + 'addDestructiveButtonWithLabel' : 'Delete it', + 'position': [20, 40] // for iPad pass in the [x, y] position of the popover + } +} + demoArgs[Toast] = { showWithOptions: [ { diff --git a/dist/index.d.ts b/dist/index.d.ts index 635c994f..11b585e8 100644 --- a/dist/index.d.ts +++ b/dist/index.d.ts @@ -1,3 +1,4 @@ +export * from './plugins/actionsheet'; export * from './plugins/camera'; export * from './plugins/statusbar'; export * from './plugins/toast'; diff --git a/dist/index.js b/dist/index.js index 4fc8da34..f8eacb32 100644 --- a/dist/index.js +++ b/dist/index.js @@ -1,6 +1,17 @@ function __export(m) { for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; } +var DEVICE_READY_TIMEOUT = 2000; +__export(require('./plugins/actionsheet')); __export(require('./plugins/camera')); __export(require('./plugins/statusbar')); __export(require('./plugins/toast')); +var didFireReady = false; +window.addEventListener('deviceready', function () { + didFireReady = true; +}); +setTimeout(function () { + if (!didFireReady) { + console.warn('Native: deviceready did not fire within ' + DEVICE_READY_TIMEOUT + 'ms. This can happen when plugins are in an inconsistent state. Try removing plugins from plugins/ and reinstalling them.'); + } +}, DEVICE_READY_TIMEOUT); diff --git a/dist/plugins/actionsheet.d.ts b/dist/plugins/actionsheet.d.ts new file mode 100644 index 00000000..75514c1b --- /dev/null +++ b/dist/plugins/actionsheet.d.ts @@ -0,0 +1,4 @@ +export declare class ActionSheet { + static show: any; + static hide: any; +} diff --git a/dist/plugins/actionsheet.js b/dist/plugins/actionsheet.js new file mode 100644 index 00000000..d7bdeb9b --- /dev/null +++ b/dist/plugins/actionsheet.js @@ -0,0 +1,35 @@ +if (typeof __decorate !== "function") __decorate = function (decorators, target, key, desc) { + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") return Reflect.decorate(decorators, target, key, desc); + switch (arguments.length) { + case 2: return decorators.reduceRight(function(o, d) { return (d && d(o)) || o; }, target); + case 3: return decorators.reduceRight(function(o, d) { return (d && d(target, key)), void 0; }, void 0); + case 4: return decorators.reduceRight(function(o, d) { return (d && d(target, key, o)) || o; }, desc); + } +}; +var plugin_1 = require('./plugin'); +var ActionSheet = (function () { + function ActionSheet() { + } + __decorate([ + plugin_1.Cordova({ + successIndex: 1, + errIndex: 2 + }) + ], ActionSheet, "show"); + __decorate([ + plugin_1.Cordova({ + successIndex: 1, + errIndex: 2 + }) + ], ActionSheet, "hide"); + ActionSheet = __decorate([ + plugin_1.Plugin({ + name: 'ActionSheet', + plugin: 'cordova-plugin-actionsheet', + pluginRef: 'plugins.actionsheet', + repo: 'https://github.com/EddyVerbruggen/cordova-plugin-actionsheet' + }) + ], ActionSheet); + return ActionSheet; +})(); +exports.ActionSheet = ActionSheet; diff --git a/dist/plugins/camera.js b/dist/plugins/camera.js index 84d0c90d..f6cef97d 100644 --- a/dist/plugins/camera.js +++ b/dist/plugins/camera.js @@ -7,7 +7,6 @@ if (typeof __decorate !== "function") __decorate = function (decorators, target, } }; var plugin_1 = require('./plugin'); -var PLUGIN_REF = 'navigator.camera'; var Camera = (function () { function Camera() { } diff --git a/dist/plugins/plugin.js b/dist/plugins/plugin.js index 9e0f42e1..5a8ea917 100644 --- a/dist/plugins/plugin.js +++ b/dist/plugins/plugin.js @@ -6,8 +6,13 @@ exports.wrap = function (pluginObj, methodName, opts) { for (var _i = 0; _i < arguments.length; _i++) { args[_i - 0] = arguments[_i]; } - console.log('Trying', pluginObj.name, methodName, args); return new Promise(function (resolve, reject) { + if (!window.cordova) { + console.warn('Native: tried calling ' + pluginObj.name + '.' + methodName + ', but Cordova is not available. Make sure to include cordova.js or run in a device/simulator'); + reject({ + error: 'cordova_not_available' + }); + } if (typeof opts.successIndex !== 'undefined') { args[opts.successIndex] = resolve; } diff --git a/dist/plugins/toast.js b/dist/plugins/toast.js index aa3ea8b4..21d1198e 100644 --- a/dist/plugins/toast.js +++ b/dist/plugins/toast.js @@ -26,7 +26,8 @@ var Toast = (function () { plugin_1.Plugin({ name: 'Toast', plugin: 'cordova-plugin-x-toast', - pluginRef: 'plugins.toast' + pluginRef: 'plugins.toast', + repo: 'https://github.com/EddyVerbruggen/Toast-PhoneGap-Plugin' }) ], Toast); return Toast; diff --git a/dist/src/index.d.ts b/dist/src/index.d.ts index 8b2be8ac..01726514 100644 --- a/dist/src/index.d.ts +++ b/dist/src/index.d.ts @@ -1,3 +1,4 @@ +export * from './plugins/actionsheet'; export * from './plugins/camera'; export * from './plugins/statusbar'; export * from './plugins/toast'; diff --git a/dist/src/index.js b/dist/src/index.js index 4fad9c45..78496447 100644 --- a/dist/src/index.js +++ b/dist/src/index.js @@ -1,6 +1,17 @@ function __export(m) { for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; } +var DEVICE_READY_TIMEOUT = 2000; +__export(require('./plugins/actionsheet')); __export(require('./plugins/camera')); __export(require('./plugins/statusbar')); __export(require('./plugins/toast')); +var didFireReady = false; +window.addEventListener('deviceready', function () { + didFireReady = true; +}); +setTimeout(function () { + if (!didFireReady && window.cordova) { + console.warn('Native: deviceready did not fire within ' + DEVICE_READY_TIMEOUT + 'ms. This can happen when plugins are in an inconsistent state. Try removing plugins from plugins/ and reinstalling them.'); + } +}, DEVICE_READY_TIMEOUT); diff --git a/dist/src/plugins/camera.js b/dist/src/plugins/camera.js index 5f79c061..9352207a 100644 --- a/dist/src/plugins/camera.js +++ b/dist/src/plugins/camera.js @@ -8,7 +8,6 @@ var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; var plugin_1 = require('./plugin'); -var PLUGIN_REF = 'navigator.camera'; var Camera = (function () { function Camera() { } diff --git a/dist/src/plugins/plugin.js b/dist/src/plugins/plugin.js index 76b00903..9116a014 100644 --- a/dist/src/plugins/plugin.js +++ b/dist/src/plugins/plugin.js @@ -6,8 +6,13 @@ exports.wrap = function (pluginObj, methodName, opts) { for (var _i = 0; _i < arguments.length; _i++) { args[_i - 0] = arguments[_i]; } - console.log('Trying', pluginObj.name, methodName, args); return new Promise(function (resolve, reject) { + if (!window.cordova) { + console.warn('Native: tried calling ' + pluginObj.name + '.' + methodName + ', but Cordova is not available. Make sure to include cordova.js or run in a device/simulator'); + reject({ + error: 'cordova_not_available' + }); + } if (typeof opts.successIndex !== 'undefined') { args[opts.successIndex] = resolve; } diff --git a/dist/src/plugins/toast.js b/dist/src/plugins/toast.js index c69aec70..41b88682 100644 --- a/dist/src/plugins/toast.js +++ b/dist/src/plugins/toast.js @@ -29,7 +29,8 @@ var Toast = (function () { plugin_1.Plugin({ name: 'Toast', plugin: 'cordova-plugin-x-toast', - pluginRef: 'plugins.toast' + pluginRef: 'plugins.toast', + repo: 'https://github.com/EddyVerbruggen/Toast-PhoneGap-Plugin' }), __metadata('design:paramtypes', []) ], Toast); diff --git a/dist/src/util.js b/dist/src/util.js index 80da07f4..92409556 100644 --- a/dist/src/util.js +++ b/dist/src/util.js @@ -1,5 +1,8 @@ function get(obj, path) { for (var i = 0, path = path.split('.'), len = path.length; i < len; i++) { + if (!obj) { + return null; + } obj = obj[path[i]]; } return obj; diff --git a/dist/util.js b/dist/util.js index 23df0a55..86fe4a2c 100644 --- a/dist/util.js +++ b/dist/util.js @@ -1,5 +1,8 @@ function get(obj, path) { for (var i = 0, path = path.split('.'), len = path.length; i < len; i++) { + if (!obj) { + return null; + } obj = obj[path[i]]; } return obj; diff --git a/src/index.ts b/src/index.ts index 635c994f..7aa97e86 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,3 +1,20 @@ +const DEVICE_READY_TIMEOUT = 2000; + +export * from './plugins/actionsheet'; export * from './plugins/camera'; export * from './plugins/statusbar'; export * from './plugins/toast'; + +declare var window; + + +let didFireReady = false; +window.addEventListener('deviceready', function() { + didFireReady = true; +}) + +setTimeout(function() { + if(!didFireReady && window.cordova) { + console.warn('Native: deviceready did not fire within ' + DEVICE_READY_TIMEOUT + 'ms. This can happen when plugins are in an inconsistent state. Try removing plugins from plugins/ and reinstalling them.'); + } +}, DEVICE_READY_TIMEOUT); diff --git a/src/plugins/actionsheet.ts b/src/plugins/actionsheet.ts new file mode 100644 index 00000000..a8eff7c6 --- /dev/null +++ b/src/plugins/actionsheet.ts @@ -0,0 +1,21 @@ +import {Plugin, Cordova} from './plugin'; + +@Plugin({ + name: 'ActionSheet', + plugin: 'cordova-plugin-actionsheet', + pluginRef: 'plugins.actionsheet', + repo: 'https://github.com/EddyVerbruggen/cordova-plugin-actionsheet' +}) +export class ActionSheet { + @Cordova({ + successIndex: 1, + errIndex: 2 + }) + static show; + + @Cordova({ + successIndex: 1, + errIndex: 2 + }) + static hide; +} diff --git a/src/plugins/camera.ts b/src/plugins/camera.ts index 75973a8d..97c59eca 100644 --- a/src/plugins/camera.ts +++ b/src/plugins/camera.ts @@ -1,7 +1,5 @@ import {Plugin, Cordova} from './plugin'; -let PLUGIN_REF = 'navigator.camera'; - @Plugin({ name: 'Camera', plugin: 'cordova-plugin-camera', diff --git a/src/plugins/plugin.ts b/src/plugins/plugin.ts index afcc0b9d..7d50fa80 100644 --- a/src/plugins/plugin.ts +++ b/src/plugins/plugin.ts @@ -5,9 +5,15 @@ declare var Promise; export const wrap = function(pluginObj, methodName, opts: any = {}) { return (...args) => { - console.log('Trying', pluginObj.name, methodName, args); return new Promise((resolve, reject) => { + if(!window.cordova) { + console.warn('Native: tried calling ' + pluginObj.name + '.' + methodName + ', but Cordova is not available. Make sure to include cordova.js or run in a device/simulator'); + reject({ + error: 'cordova_not_available' + }) + } + if(typeof opts.successIndex !== 'undefined') { args[opts.successIndex] = resolve; } diff --git a/src/plugins/toast.ts b/src/plugins/toast.ts index 85d4cbb2..41970a3f 100644 --- a/src/plugins/toast.ts +++ b/src/plugins/toast.ts @@ -3,7 +3,8 @@ import {Plugin, Cordova} from './plugin'; @Plugin({ name: 'Toast', plugin: 'cordova-plugin-x-toast', - pluginRef: 'plugins.toast' + pluginRef: 'plugins.toast', + repo: 'https://github.com/EddyVerbruggen/Toast-PhoneGap-Plugin' }) export class Toast { @Cordova({ diff --git a/src/util.ts b/src/util.ts index d83fd049..c4bca9be 100644 --- a/src/util.ts +++ b/src/util.ts @@ -1,5 +1,6 @@ export function get(obj, path) { - for (var i=0, path = path.split('.'), len = path.length; i < len; i++) { + for(var i = 0, path = path.split('.'), len = path.length; i < len; i++) { + if(!obj) { return null; } obj = obj[path[i]]; } return obj; diff --git a/tsconfig.json b/tsconfig.json index a5fe7954..1c2845dc 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -15,9 +15,9 @@ "node_modules" ], "files": [ - "src/cordova.ts", "src/index.ts", "src/plugin-config.ts", + "src/plugins/actionsheet.ts", "src/plugins/camera.ts", "src/plugins/plugin.ts", "src/plugins/statusbar.ts",