diff --git a/src/index.ts b/src/index.ts index da7efec49..e0fe66e55 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,5 +1,4 @@ import {initAngular1} from './ng1'; -initAngular1(); const DEVICE_READY_TIMEOUT = 2000; @@ -25,6 +24,7 @@ import {Clipboard} from './plugins/clipboard'; import {Contacts} from './plugins/contacts'; import {DatePicker} from './plugins/datepicker'; import {DBMeter} from './plugins/dbmeter'; +import {Deeplinks} from './plugins/deeplinks'; import {Device} from './plugins/device'; import {DeviceAccounts} from './plugins/deviceaccounts'; import {DeviceMotion} from './plugins/devicemotion'; @@ -86,6 +86,7 @@ export { Contacts, DatePicker, DBMeter, + Deeplinks, Device, DeviceAccounts, DeviceMotion, @@ -149,6 +150,7 @@ window['IonicNative'] = { Contacts: Contacts, DatePicker: DatePicker, DBMeter: DBMeter, + Deeplinks: Deeplinks, Device: Device, DeviceAccounts: DeviceAccounts, DeviceMotion: DeviceMotion, @@ -188,6 +190,8 @@ window['IonicNative'] = { WebIntent: WebIntent }; +initAngular1(window['IonicNative']); + // To help developers using cordova, we listen for the device ready event and // log an error if it didn't fire in a reasonable amount of time. Generally, // when this happens, developers should remove and reinstall plugins, since diff --git a/src/ng1.ts b/src/ng1.ts index 1101d257a..9bca81165 100644 --- a/src/ng1.ts +++ b/src/ng1.ts @@ -1,24 +1,28 @@ declare var window; /** - * Initialize the ngCordova Angular module if we're running in ng1 + * Initialize the ionic.native Angular module if we're running in ng1. + * This iterates through the list of registered plugins and dynamically + * creates Angular 1 services of the form $cordovaSERVICE, ex: $cordovStatusBar. */ -export function initAngular1() { +export function initAngular1(plugins) { if (window.angular) { - window.angular.module('ngCordova', []); - } -} + window.angular.module('ionic.native', []); -/** - * Publish a new Angular 1 service for this plugin. - */ -export function publishAngular1Service(config: any, cls: any) { - let serviceName = '$cordova' + cls.name; - console.log('Registering Angular1 service', serviceName); - window.angular.module('ngCordova').service(serviceName, [function() { - let funcs = {}; - for (var k in cls) { + for (var name in plugins) { + let serviceName = '$cordova' + name; + let cls = plugins[name]; + + (function(serviceName, cls, name) { + window.angular.module('ionic.native').service(serviceName, [function() { + let funcs = {}; + for (var k in cls) { + funcs[k] = cls[k]; + } + funcs['name'] = name; + return funcs; + }]); + })(serviceName, cls, name); } - return funcs; - }]); -} + } +} \ No newline at end of file diff --git a/src/plugins/deeplinks.ts b/src/plugins/deeplinks.ts new file mode 100644 index 000000000..5bb060f69 --- /dev/null +++ b/src/plugins/deeplinks.ts @@ -0,0 +1,74 @@ +import {Plugin, Cordova} from './plugin'; +import {Observable} from 'rxjs/Observable'; + +export interface DeeplinkMatch { + /** + * The route info for the matched route + */ + routeInfo: any; + + /** + * The arguments passed to the route through GET params along with + * any internal native data available as "extras" at the time + * the route was matched (for example, Facebook sometimes adds extra data) + */ + args: any; +} + +/** + * @name Ionic Deeplinks + * @description This plugin handles deeplinks on iOS and Android for both custom URL scheme links + * and Universal App Links. + * + * @usage + * ```ts + * import {IonicDeeplinks} from 'ionic-native'; + * + * ``` + */ +@Plugin({ + plugin: 'ionic-plugin-deeplinks', + pluginRef: 'IonicDeeplink', + repo: 'https://github.com/driftyo/ionic-plugin-deeplinks', + platforms: ['iOS', 'Android'] +}) +export class Deeplinks { + + /** + * Define a set of paths to match against incoming deeplinks. + * + * @param {paths} Define a set of paths to match against incoming deeplinks. + * paths takes an object of the form { 'path': data }. If a deeplink + * matches the path, the resulting path-data pair will be returned in the + * promise result which you can then use to navigate in the app as you see fit. + * @returns {Promise} Returns a Promise that resolves when a deeplink comes through, and + * is rejected if a deeplink comes through that does not match a given path. + */ + @Cordova({ + observable: true + }) + static route(paths): Observable {return; } + + /** + * + * This is a convenience version of `route` that takes a reference to a NavController + * from Ionic 2, or a custom class that conforms to this protocol: + * + * NavController.push = function(View, Params){} + * + * This handler will automatically navigate when a route matches. If you need finer-grained + * control over the behavior of a matching deeplink, use the plain `route` method. + * + * @param {paths} Define a set of paths to match against incoming deeplinks. + * paths takes an object of the form { 'path': data }. If a deeplink + * matches the path, the resulting path-data pair will be returned in the + * promise result which you can then use to navigate in the app as you see fit. + * + * @returns {Promise} Returns a Promise that resolves when a deeplink comes through, and + * is rejected if a deeplink comes through that does not match a given path. + */ + @Cordova({ + observable: true + }) + static routeWithNavController(navController, paths): Observable {return; } +} diff --git a/src/plugins/deviceorientation.ts b/src/plugins/deviceorientation.ts index c0a9be5c2..a923d68b9 100644 --- a/src/plugins/deviceorientation.ts +++ b/src/plugins/deviceorientation.ts @@ -89,7 +89,7 @@ export class DeviceOrientation { @Cordova({ callbackOrder: 'reverse', observable: true, - cancelFunction: 'clearWatch' + clearFunction: 'clearWatch' }) static watchHeading(options?: CompassOptions): Observable { return; } diff --git a/src/plugins/googlemaps.ts b/src/plugins/googlemaps.ts index a7711c582..c3ad4b55f 100644 --- a/src/plugins/googlemaps.ts +++ b/src/plugins/googlemaps.ts @@ -2,10 +2,12 @@ import {Cordova, Plugin} from './plugin'; import {Observable} from 'rxjs/Observable'; import {CordovaInstance} from './plugin'; /** + * @private * Created by Ibrahim on 3/29/2016. */ declare var plugin: any; /** + * @private * You can listen to these events where appropriate */ export const GoogleMapsEvent = { @@ -29,10 +31,14 @@ export const GoogleMapsEvent = { MARKER_DRAG_END: 'drag_end' }; +/** + * @private + */ export const GoogleMapsAnimation = { BOUNCE: 'BOUNCE', DROP: 'DROP' }; + /** * @name Google Maps * @description This plugin uses the native Google Maps SDK @@ -352,6 +358,10 @@ export class GoogleMap { } } + +/** + * @private + */ export interface AnimateCameraOptions { target?: GoogleMapsLatLng; tilt?: number; @@ -359,22 +369,38 @@ export interface AnimateCameraOptions { bearing?: number; duration?: number; } + +/** + * @private + */ export interface CameraPosition { target?: GoogleMapsLatLng; zoom?: number; tilt?: number; bearing?: number; } + +/** + * @private + */ export interface MyLocation { latLng?: GoogleMapsLatLng; speed?: number; time?: string; bearing?: number; } + +/** + * @private + */ export interface VisibleRegion { northeast?: any; southwest?: any; } + +/** + * @private + */ export interface GoogleMapsMarkerOptions { icon?: any; title?: string; @@ -389,6 +415,10 @@ export interface GoogleMapsMarkerOptions { animation?: string; zIndex?: number; } + +/** + * @private + */ export interface GoogleMapsMarkerIcon { url?: string; size?: { @@ -396,6 +426,10 @@ export interface GoogleMapsMarkerIcon { height?: number; }; } + +/** + * @private + */ export class GoogleMapsMarker { constructor(private _objectInstance: any) { @@ -573,6 +607,10 @@ export class GoogleMapsMarker { } + +/** + * @private + */ export interface GoogleMapsCircleOptions { center?: GoogleMapsLatLng; radius?: number; @@ -582,6 +620,10 @@ export interface GoogleMapsCircleOptions { visible?: boolean; zIndex?: number; } + +/** + * @private + */ export class GoogleMapsCircle { constructor(private _objectInstance: any) { @@ -689,6 +731,10 @@ export class GoogleMapsCircle { } + +/** + * @private + */ export interface GoogleMapsPolylineOptions { points?: Array; visible?: boolean; @@ -697,6 +743,10 @@ export interface GoogleMapsPolylineOptions { width?: number; zIndex?: number; } + +/** + * @private + */ export class GoogleMapsPolyline { constructor(private _objectInstance: any) { } @@ -770,6 +820,10 @@ export class GoogleMapsPolyline { } } + +/** + * @private + */ export interface GoogleMapsPolygonOptions { points?: Array; geodesic?: boolean; @@ -780,6 +834,10 @@ export interface GoogleMapsPolygonOptions { zIndex?: number; addHole?: Array; } + +/** + * @private + */ export class GoogleMapsPolygon { constructor(private _objectInstance: any) { @@ -862,6 +920,10 @@ export class GoogleMapsPolygon { setGeodesic(geodesic: boolean): void { } } + +/** + * @private + */ export interface GoogleMapsTileOverlayOptions { titleUrilFormat?: string; visible?: boolean; @@ -869,6 +931,10 @@ export interface GoogleMapsTileOverlayOptions { tileSize?: number; opacity?: number; } + +/** + * @private + */ export class GoogleMapsTileOverlay { constructor(private _objectInstance: any) { @@ -919,6 +985,10 @@ export class GoogleMapsTileOverlay { } } + +/** + * @private + */ export interface GoogleMapsGroundOverlayOptions { url?: string; bounds?: Array; @@ -927,6 +997,10 @@ export interface GoogleMapsGroundOverlayOptions { bearing?: number; zIndex?: number; } + +/** + * @private + */ export class GoogleMapsGroundOverlay { constructor(private _objectInstance: any) { @@ -968,11 +1042,19 @@ export class GoogleMapsGroundOverlay { } } + +/** + * @private + */ export interface GoogleMapsKmlOverlayOptions { url?: string; preserveViewport?: boolean; animation?: boolean; } + +/** + * @private + */ export class GoogleMapsKmlOverlay { constructor(private _objectInstance: any) { @@ -987,6 +1069,10 @@ export class GoogleMapsKmlOverlay { return; } } + +/** + * @private + */ export class GoogleMapsLatLng { private _objectInstance: any; diff --git a/src/plugins/plugin.ts b/src/plugins/plugin.ts index 500479c89..533217c50 100644 --- a/src/plugins/plugin.ts +++ b/src/plugins/plugin.ts @@ -1,7 +1,5 @@ import {get} from '../util'; -import {publishAngular1Service} from '../ng1'; - declare var window; declare var Promise; declare var $q; diff --git a/src/plugins/safari-view-controller.ts b/src/plugins/safari-view-controller.ts index ac7181220..5af60f6f7 100644 --- a/src/plugins/safari-view-controller.ts +++ b/src/plugins/safari-view-controller.ts @@ -15,7 +15,7 @@ import {Plugin, Cordova} from './plugin'; * if(available){ * * SafariViewController.show({ - * utl: 'http://ionic.io', + * url: 'http://ionic.io', * hidden: false, * animated: false, * transition: 'curl',