diff --git a/src/@ionic-native/plugins/contacts/index.ts b/src/@ionic-native/plugins/contacts/index.ts
index d5fc092d0..863bc90c6 100644
--- a/src/@ionic-native/plugins/contacts/index.ts
+++ b/src/@ionic-native/plugins/contacts/index.ts
@@ -57,7 +57,6 @@ export interface IContactProperties {
/**
* @private
*/
-@Injectable()
export class Contact implements IContactProperties {
private _objectInstance: any;
@InstanceProperty id: string;
@@ -143,7 +142,6 @@ export interface IContactName {
/**
* @private
*/
-@Injectable()
export class ContactName implements IContactName {
constructor(public formatted?: string,
public familyName?: string,
@@ -165,7 +163,6 @@ export interface IContactField {
/**
* @private
*/
-@Injectable()
export class ContactField implements IContactField {
constructor(public type?: string,
public value?: string,
@@ -194,7 +191,6 @@ export interface IContactAddress {
/**
* @private
*/
-@Injectable()
export class ContactAddress implements IContactAddress {
constructor(public pref?: boolean,
public type?: string,
@@ -222,7 +218,6 @@ export interface IContactOrganization {
/**
* @private
*/
-@Injectable()
export class ContactOrganization implements IContactOrganization {
constructor(
public type?: string,
@@ -250,7 +245,6 @@ export interface IContactFindOptions {
/**
* @private
*/
-@Injectable()
export class ContactFindOptions implements IContactFindOptions {
constructor(public filter?: string,
public multiple?: boolean,
diff --git a/src/@ionic-native/plugins/filetransfer/index.ts b/src/@ionic-native/plugins/filetransfer/index.ts
index 4211389fc..03eb3b007 100644
--- a/src/@ionic-native/plugins/filetransfer/index.ts
+++ b/src/@ionic-native/plugins/filetransfer/index.ts
@@ -202,7 +202,7 @@ export class Transfer {
* NOT_MODIFIED_ERR: 5 Return on "304 Not Modified" HTTP response
* @enum {number}
*/
- public static FileTransferErrorCode = {
+ static FileTransferErrorCode = {
FILE_NOT_FOUND_ERR: 1,
INVALID_URL_ERR: 2,
CONNECTION_ERR: 3,
@@ -252,9 +252,8 @@ export class Transfer {
/**
* Registers a listener that gets called whenever a new chunk of data is transferred.
- * @param {function} Listener that takes a progress event.
+ * @param listener {function} Listener that takes a progress event.
*/
-
onProgress(listener: (event: ProgressEvent) => any): void {
this._objectInstance.onprogress = listener;
}
diff --git a/src/@ionic-native/plugins/googlemap/index.ts b/src/@ionic-native/plugins/googlemap/index.ts
index db6e9150f..7fabec853 100644
--- a/src/@ionic-native/plugins/googlemap/index.ts
+++ b/src/@ionic-native/plugins/googlemap/index.ts
@@ -39,80 +39,9 @@ export const GoogleMapsAnimation = {
};
/**
- * @name Google Maps
- * @description This plugin uses the native Google Maps SDK
- * @usage
- * ```
- * import {
- * GoogleMap,
- * GoogleMapsEvent,
- * GoogleMapsLatLng,
- * CameraPosition,
- * GoogleMapsMarkerOptions,
- * GoogleMapsMarker
- * } from 'ionic-native';
- *
- * @Injectable()
-export class MapPage {
- * constructor() {}
- *
- * // Load map only after view is initialize
- * ngAfterViewInit() {
- * this.loadMap();
- * }
- *
- * loadMap() {
- * // make sure to create following structure in your view.html file
- * // and add a height (for example 100%) to it, else the map won't be visible
- * //
- * //
- * //
- *
- * // create a new map by passing HTMLElement
- * let element: HTMLElement = document.getElementById('map');
- *
- * let map = new GoogleMap(element);
- *
- * // listen to MAP_READY event
- * map.one(GoogleMapsEvent.MAP_READY).then(() => console.log('Map is ready!'));
- *
- * // create LatLng object
- * let ionic: GoogleMapsLatLng = new GoogleMapsLatLng(43.0741904,-89.3809802);
- *
- * // create CameraPosition
- * let position: CameraPosition = {
- * target: ionic,
- * zoom: 18,
- * tilt: 30
- * };
- *
- * // move the map's camera to position
- * map.moveCamera(position);
- *
- * // create new marker
- * let markerOptions: GoogleMapsMarkerOptions = {
- * position: ionic,
- * title: 'Ionic'
- * };
- *
- * map.addMarker(markerOptions)
- * .then((marker: GoogleMapsMarker) => {
- * marker.showInfoWindow();
- * });
- * }
- *
- * }
- * ```
+ * @private
*/
-@Plugin({
- pluginName: 'GoogleMap',
- pluginRef: 'plugin.google.maps.Map',
- plugin: 'cordova-plugin-googlemaps',
- repo: 'https://github.com/mapsplugin/cordova-plugin-googlemaps',
- install: 'ionic plugin add cordova-plugin-googlemaps --variable API_KEY_FOR_ANDROID="YOUR_ANDROID_API_KEY_IS_HERE" --variable API_KEY_FOR_IOS="YOUR_IOS_API_KEY_IS_HERE"'
-})
-@Injectable()
-export class GoogleMap {
+export class GoogleMapsObject {
_objectInstance: any;
/**
@@ -477,6 +406,95 @@ export class GoogleMap {
@CordovaInstance({ sync: true })
panBy(): void { }
+}
+
+/**
+ * @name Google Maps
+ * @description This plugin uses the native Google Maps SDK
+ * @usage
+ * ```
+ * import {
+ * GoogleMap,
+ * GoogleMapsEvent,
+ * GoogleMapsLatLng,
+ * CameraPosition,
+ * GoogleMapsMarkerOptions,
+ * GoogleMapsMarker
+ * } from 'ionic-native';
+ *
+ * @Injectable()
+export class MapPage {
+ * constructor() {}
+ *
+ * // Load map only after view is initialize
+ * ngAfterViewInit() {
+ * this.loadMap();
+ * }
+ *
+ * loadMap() {
+ * // make sure to create following structure in your view.html file
+ * // and add a height (for example 100%) to it, else the map won't be visible
+ * //
+ * //
+ * //
+ *
+ * // create a new map by passing HTMLElement
+ * let element: HTMLElement = document.getElementById('map');
+ *
+ * let map = new GoogleMap(element);
+ *
+ * // listen to MAP_READY event
+ * map.one(GoogleMapsEvent.MAP_READY).then(() => console.log('Map is ready!'));
+ *
+ * // create LatLng object
+ * let ionic: GoogleMapsLatLng = new GoogleMapsLatLng(43.0741904,-89.3809802);
+ *
+ * // create CameraPosition
+ * let position: CameraPosition = {
+ * target: ionic,
+ * zoom: 18,
+ * tilt: 30
+ * };
+ *
+ * // move the map's camera to position
+ * map.moveCamera(position);
+ *
+ * // create new marker
+ * let markerOptions: GoogleMapsMarkerOptions = {
+ * position: ionic,
+ * title: 'Ionic'
+ * };
+ *
+ * map.addMarker(markerOptions)
+ * .then((marker: GoogleMapsMarker) => {
+ * marker.showInfoWindow();
+ * });
+ * }
+ *
+ * }
+ * ```
+ * @classes
+ * GoogleMapsObject
+ */
+@Plugin({
+ pluginName: 'GoogleMap',
+ pluginRef: 'plugin.google.maps.Map',
+ plugin: 'cordova-plugin-googlemaps',
+ repo: 'https://github.com/mapsplugin/cordova-plugin-googlemaps',
+ install: 'ionic plugin add cordova-plugin-googlemaps --variable API_KEY_FOR_ANDROID="YOUR_ANDROID_API_KEY_IS_HERE" --variable API_KEY_FOR_IOS="YOUR_IOS_API_KEY_IS_HERE"'
+})
+@Injectable()
+export class GoogleMap {
+
+ /**
+ * Creates a new GoogleMap instance
+ * @param element {string | HTMLElement} Element ID or reference to attach the map to
+ * @param options {any} Options
+ * @returns {GoogleMapsObject}
+ */
+ create(element: string | HTMLElement, options?: any): GoogleMapsObject {
+ return new GoogleMapsObject(element, options);
+ }
}
diff --git a/src/@ionic-native/plugins/inappbrowser/index.ts b/src/@ionic-native/plugins/inappbrowser/index.ts
index b3d01ee68..13bd8082d 100644
--- a/src/@ionic-native/plugins/inappbrowser/index.ts
+++ b/src/@ionic-native/plugins/inappbrowser/index.ts
@@ -1,6 +1,7 @@
import { Injectable } from '@angular/core';
import { Plugin, CordovaInstance } from '@ionic-native/core';
import { Observable } from 'rxjs/Observable';
+import 'rxjs/add/observable/fromEvent';
declare var cordova: any;
@@ -14,50 +15,20 @@ export interface InAppBrowserEvent extends Event {
/** the error message, only in the case of loaderror. */
message: string;
}
+
/**
- * @name InAppBrowser
- * @description Launches in app Browser
- * @usage
- * ```typescript
- * import {InAppBrowser} from 'ionic-native';
- *
- *
- * ...
- *
- *
- * let browser = new InAppBrowser('https://ionic.io', '_system');
- * browser.executeScript(...);
- * browser.insertCSS(...);
- * browser.close();
- * ```
- * @interfaces
- * InAppBrowserEvent
+ * @private
*/
-@Plugin({
- pluginName: 'InAppBrowser',
- plugin: 'cordova-plugin-inappbrowser',
- pluginRef: 'cordova.InAppBrowser',
- repo: 'https://github.com/apache/cordova-plugin-inappbrowser'
-})
-@Injectable()
-export class InAppBrowser {
+export class InAppBrowserObject {
private _objectInstance: any;
- /**
- * Opens a URL in a new InAppBrowser instance, the current browser instance, or the system browser.
- * @param url The URL to load.
- * @param target The target in which to load the URL, an optional parameter that defaults to _self.
- * @param options Options for the InAppBrowser. Optional, defaulting to: location=yes.
- * The options string must not contain any blank space, and each feature's
- * name/value pairs must be separated by a comma. Feature names are case insensitive.
- */
constructor(url: string, target?: string, options?: string) {
try {
this._objectInstance = cordova.InAppBrowser.open(url, target, options);
} catch (e) {
window.open(url);
- console.warn('Native: InAppBrowser is not installed or you are running on a browser. Falling back to window.open, all instance methods will NOT work.');
+ console.warn('Native: InAppBrowser is not installed or you are running on a browser. Falling back to window.open.');
}
}
@@ -99,14 +70,55 @@ export class InAppBrowser {
/**
* A method that allows you to listen to events happening in the browser.
- * @param {string} name of the event
+ * @param event {string} Name of the event
* @returns {Observable} Returns back an observable that will listen to the event on subscribe, and will stop listening to the event on unsubscribe.
*/
on(event: string): Observable {
- return new Observable((observer) => {
- this._objectInstance.addEventListener(event, observer.next.bind(observer));
- return () => this._objectInstance.removeEventListener(event, observer.next.bind(observer));
- });
+ return Observable.fromEvent(this._objectInstance, event);
+ }
+}
+
+/**
+ * @name InAppBrowser
+ * @description Launches in app Browser
+ * @usage
+ * ```typescript
+ * import {InAppBrowser} from 'ionic-native';
+ *
+ *
+ * ...
+ *
+ *
+ * let browser = new InAppBrowser('https://ionic.io', '_system');
+ * browser.executeScript(...);
+ * browser.insertCSS(...);
+ * browser.close();
+ * ```
+ * @classes
+ * InAppBrowserObject
+ * @interfaces
+ * InAppBrowserEvent
+ */
+@Plugin({
+ pluginName: 'InAppBrowser',
+ plugin: 'cordova-plugin-inappbrowser',
+ pluginRef: 'cordova.InAppBrowser',
+ repo: 'https://github.com/apache/cordova-plugin-inappbrowser'
+})
+@Injectable()
+export class InAppBrowser {
+
+ /**
+ * Opens a URL in a new InAppBrowser instance, the current browser instance, or the system browser.
+ * @param url {string} The URL to load.
+ * @param target {string} The target in which to load the URL, an optional parameter that defaults to _self.
+ * @param options {string} Options for the InAppBrowser. Optional, defaulting to: location=yes.
+ * The options string must not contain any blank space, and each feature's
+ * name/value pairs must be separated by a comma. Feature names are case insensitive.
+ * @returns {InAppBrowserObject}
+ */
+ create(url: string, target?: string, options?: string): InAppBrowserObject {
+ return new InAppBrowserObject(url, target, options);
}
}
diff --git a/src/@ionic-native/plugins/media/index.ts b/src/@ionic-native/plugins/media/index.ts
index 8d22119a1..a9625dbdb 100644
--- a/src/@ionic-native/plugins/media/index.ts
+++ b/src/@ionic-native/plugins/media/index.ts
@@ -9,77 +9,9 @@ export interface MediaError {
}
/**
- * @name MediaPlugin
- * @description
- * @usage
- * ```typescript
- * import { MediaPlugin } from 'ionic-native';
- *
- *
- *
- * // Create a MediaPlugin instance. Expects path to file or url as argument
- * // We can optionally pass a second argument to track the status of the media
- *
- * const onStatusUpdate = (status) => console.log(status);
- *
- * const file = new MediaPlugin('path/to/file.mp3', onStatusUpdate);
- *
- * // Catch the Success & Error Output
- * // Platform Quirks
- * // iOS calls success on completion of playback only
- * // Android calls success on completion of playback AND on release()
- * file.init.then(() => {
- * console.log('Playback Finished');
- * }, (err) => {
- * console.log('somthing went wrong! error code: ' + err.code + ' message: ' + err.message);
- * });
- *
- * // play the file
- * file.play();
- *
- * // pause the file
- * file.pause();
- *
- * // get current playback position
- * file.getCurrentPosition().then((position) => {
- * console.log(position);
- * });
- *
- * // get file duration
- * file.getDuration().then((duration) => {
- * console.log(position);
- * });
- *
- * // skip to 10 seconds (expects int value in ms)
- * file.seekTo(10000);
- *
- * // stop playing the file
- * file.stop();
- *
- * // release the native audio resource
- * // Platform Quirks:
- * // iOS simply create a new instance and the old one will be overwritten
- * // Android you must call release() to destroy instances of media when you are done
- * file.release();
- *
- * // Recording to a file
- * var newFile = new MediaPlugin('path/to/file.mp3');
- * newFile.startRecord();
- *
- * newFile.stopRecord();
- *
- *
- *
- * ```
+ * @private
*/
-@Plugin({
- pluginName: 'MediaPlugin',
- repo: 'https://github.com/apache/cordova-plugin-media',
- plugin: 'cordova-plugin-media',
- pluginRef: 'Media'
-})
-@Injectable()
-export class MediaPlugin {
+export class MediaObject {
// Constants
/**
@@ -237,5 +169,90 @@ export class MediaPlugin {
sync: true
})
stop(): void { }
+}
+
+/**
+ * @name MediaPlugin
+ * @description
+ * @usage
+ * ```typescript
+ * import { MediaPlugin } from 'ionic-native';
+ *
+ *
+ *
+ * // Create a MediaPlugin instance. Expects path to file or url as argument
+ * // We can optionally pass a second argument to track the status of the media
+ *
+ * const onStatusUpdate = (status) => console.log(status);
+ *
+ * const file = new MediaPlugin('path/to/file.mp3', onStatusUpdate);
+ *
+ * // Catch the Success & Error Output
+ * // Platform Quirks
+ * // iOS calls success on completion of playback only
+ * // Android calls success on completion of playback AND on release()
+ * file.init.then(() => {
+ * console.log('Playback Finished');
+ * }, (err) => {
+ * console.log('somthing went wrong! error code: ' + err.code + ' message: ' + err.message);
+ * });
+ *
+ * // play the file
+ * file.play();
+ *
+ * // pause the file
+ * file.pause();
+ *
+ * // get current playback position
+ * file.getCurrentPosition().then((position) => {
+ * console.log(position);
+ * });
+ *
+ * // get file duration
+ * file.getDuration().then((duration) => {
+ * console.log(position);
+ * });
+ *
+ * // skip to 10 seconds (expects int value in ms)
+ * file.seekTo(10000);
+ *
+ * // stop playing the file
+ * file.stop();
+ *
+ * // release the native audio resource
+ * // Platform Quirks:
+ * // iOS simply create a new instance and the old one will be overwritten
+ * // Android you must call release() to destroy instances of media when you are done
+ * file.release();
+ *
+ * // Recording to a file
+ * var newFile = new MediaPlugin('path/to/file.mp3');
+ * newFile.startRecord();
+ *
+ * newFile.stopRecord();
+ *
+ *
+ *
+ * ```
+ * @classes
+ * MediaObject
+ */
+@Plugin({
+ pluginName: 'MediaPlugin',
+ repo: 'https://github.com/apache/cordova-plugin-media',
+ plugin: 'cordova-plugin-media',
+ pluginRef: 'Media'
+})
+@Injectable()
+class MediaPlugin {
+
+ /**
+ * Open a media file
+ * @param src {string} A URI containing the audio content.
+ * @param onStatusUpdate {Function} A callback function to be invoked when the status of the file changes
+ */
+ create(src: string, onStatusUpdate?: Function): MediaObject {
+ return new MediaObject(src, onStatusUpdate);
+ }
}
diff --git a/src/@ionic-native/plugins/securestorage/index.ts b/src/@ionic-native/plugins/securestorage/index.ts
index 089975004..1df10f66c 100644
--- a/src/@ionic-native/plugins/securestorage/index.ts
+++ b/src/@ionic-native/plugins/securestorage/index.ts
@@ -2,6 +2,47 @@ import { Injectable } from '@angular/core';
import { CordovaInstance, Plugin } from '@ionic-native/core';
declare var cordova: any;
+
+/**
+ * @private
+ */
+export class SecureStorageObject {
+
+ constructor(private _objectInstance: any) {}
+
+ /**
+ * Gets a stored item
+ * @param reference {string}
+ * @returns {Promise}
+ */
+ @CordovaInstance({
+ callbackOrder: 'reverse'
+ })
+ get(reference: string): Promise { return; }
+
+ /**
+ * Stores a value
+ * @param reference {string}
+ * @param value {string}
+ * @returns {Promise}
+ */
+ @CordovaInstance({
+ callbackOrder: 'reverse'
+ })
+ set(reference: string, value: string): Promise { return; }
+
+ /**
+ * Removes a single stored item
+ * @param reference {string}
+ * @returns {Promise}
+ */
+ @CordovaInstance({
+ callbackOrder: 'reverse'
+ })
+ remove(reference: string): Promise { return; }
+
+}
+
/**
* @name Secure Storage
* @description
@@ -39,6 +80,8 @@ declare var cordova: any;
* error => console.log(error)
* );
* ```
+ * @classes
+ * SecureStorageObject
*/
@Plugin({
pluginName: 'SecureStorage',
@@ -50,49 +93,15 @@ declare var cordova: any;
@Injectable()
export class SecureStorage {
- private _objectInstance: any;
-
- constructor() {}
-
/**
* Creates a namespaced storage.
* @param store {string}
- * @returns {Promise}
+ * @returns {Promise}
*/
- create(store: string): Promise {
+ create(store: string): Promise {
return new Promise((res, rej) => {
- this._objectInstance = new cordova.plugins.SecureStorage(res, rej, store);
+ const instance = new cordova.plugins.SecureStorage(() => res(new SecureStorageObject(instance)), rej, store);
});
}
- /**
- * Gets a stored item
- * @param reference {string}
- * @returns {Promise}
- */
- @CordovaInstance({
- callbackOrder: 'reverse'
- })
- get(reference: string): Promise { return; }
-
- /**
- * Stores a value
- * @param reference {string}
- * @param value {string}
- * @returns {Promise}
- */
- @CordovaInstance({
- callbackOrder: 'reverse'
- })
- set(reference: string, value: string): Promise { return; }
-
- /**
- * Removes a single stored item
- * @param reference {string}
- * @returns {Promise}
- */
- @CordovaInstance({
- callbackOrder: 'reverse'
- })
- remove(reference: string): Promise { return; }
}
diff --git a/src/@ionic-native/plugins/sqlite/index.ts b/src/@ionic-native/plugins/sqlite/index.ts
index c15199d23..65b4545ed 100644
--- a/src/@ionic-native/plugins/sqlite/index.ts
+++ b/src/@ionic-native/plugins/sqlite/index.ts
@@ -1,98 +1,18 @@
import { Injectable } from '@angular/core';
-import {Cordova, CordovaInstance, Plugin, pluginWarn, InstanceProperty} from '@ionic-native/core';
+import { Cordova, CordovaInstance, Plugin, pluginWarn, InstanceProperty } from '@ionic-native/core';
declare var sqlitePlugin;
/**
- * @name SQLite
- *
- * @description
- * Access SQLite databases on the device.
- *
- * @usage
- *
- * ```typescript
- * import { SQLite } from 'ionic-native';
- *
- * // OPTION A: Use static constructor
- * SQLite.openDatabase({
- * name: 'data.db',
- * location: 'default'
- * })
- * .then((db: SQLite) => {
- *
- * db.executeSql('create table danceMoves(name VARCHAR(32))', {}).then(() => {}).catch(() => {});
- *
- * })
- * .catch(error => console.error('Error opening database', error);
- *
- *
- * // OPTION B: Create a new instance of SQLite
- * let db = new SQLite();
- * db.openDatabase({
- * name: 'data.db',
- * location: 'default' // the location field is required
- * }).then(() => {
- * db.executeSql('create table danceMoves(name VARCHAR(32))', {}).then(() => {
- *
- * }, (err) => {
- * console.error('Unable to execute sql: ', err);
- * });
- * }, (err) => {
- * console.error('Unable to open database: ', err);
- * });
- * ```
- *
+ * @private
*/
-@Plugin({
- pluginName: 'SQLite',
- pluginRef: 'sqlitePlugin',
- plugin: 'cordova-sqlite-storage',
- repo: 'https://github.com/litehelpers/Cordova-sqlite-storage'
-})
-@Injectable()
-export class SQLite {
+export class SQLiteObject {
- private _objectInstance: any;
+ constructor(private _objectInstance: any){ }
@InstanceProperty databaseFeatures: any;
- constructor() { }
-
- /*
- openDatabase(config: any): Promise {
- return new SQLite().openDatabase(config);
- }
- */
-
-
- /**
- * Open or create a SQLite database file.
- *
- * See the plugin docs for an explanation of all options: https://github.com/litehelpers/Cordova-sqlite-storage#opening-a-database
- *
- * @param config the config for opening the database.
- */
- openDatabase(config: any): Promise {
- return new Promise((resolve, reject) => {
- if (typeof sqlitePlugin !== 'undefined') {
- sqlitePlugin.openDatabase(config, db => {
- this._objectInstance = db;
- resolve(db);
- }, error => {
- console.warn(error);
- reject(error);
- });
- } else {
- pluginWarn({
- pluginName: 'SQLite',
- plugin: 'cordova-sqlite-storage'
- });
- }
- });
- }
-
@CordovaInstance({
sync: true
})
@@ -218,3 +138,78 @@ export class SQLite {
deleteDatabase(first): Promise { return; }
}
+
+/**
+ * @name SQLite
+ *
+ * @description
+ * Access SQLite databases on the device.
+ *
+ * @usage
+ *
+ * ```typescript
+ * import { SQLite } from 'ionic-native';
+ *
+ * // OPTION A: Use static constructor
+ * SQLite.openDatabase({
+ * name: 'data.db',
+ * location: 'default'
+ * })
+ * .then((db: SQLite) => {
+ *
+ * db.executeSql('create table danceMoves(name VARCHAR(32))', {}).then(() => {}).catch(() => {});
+ *
+ * })
+ * .catch(error => console.error('Error opening database', error);
+ *
+ *
+ * // OPTION B: Create a new instance of SQLite
+ * let db = new SQLite();
+ * db.openDatabase({
+ * name: 'data.db',
+ * location: 'default' // the location field is required
+ * }).then(() => {
+ * db.executeSql('create table danceMoves(name VARCHAR(32))', {}).then(() => {
+ *
+ * }, (err) => {
+ * console.error('Unable to execute sql: ', err);
+ * });
+ * }, (err) => {
+ * console.error('Unable to open database: ', err);
+ * });
+ * ```
+ *
+ * @classes
+ * SQLiteObject
+ */
+@Plugin({
+ pluginName: 'SQLite',
+ pluginRef: 'sqlitePlugin',
+ plugin: 'cordova-sqlite-storage',
+ repo: 'https://github.com/litehelpers/Cordova-sqlite-storage'
+})
+@Injectable()
+export class SQLite {
+
+ /**
+ * Open or create a SQLite database file.
+ *
+ * See the plugin docs for an explanation of all options: https://github.com/litehelpers/Cordova-sqlite-storage#opening-a-database
+ *
+ * @param config the config for opening the database.
+ * @return Promise
+ */
+ create(config: any): Promise {
+ return new Promise((resolve, reject) => {
+ if (typeof sqlitePlugin !== 'undefined') {
+ sqlitePlugin.openDatabase(config, db => resolve(new SQLiteObject(db)), reject);
+ } else {
+ pluginWarn({
+ pluginName: 'SQLite',
+ plugin: 'cordova-sqlite-storage'
+ });
+ }
+ });
+ }
+
+}
diff --git a/src/@ionic-native/plugins/themeable-browser/index.ts b/src/@ionic-native/plugins/themeable-browser/index.ts
index 65dff33e3..de31891db 100644
--- a/src/@ionic-native/plugins/themeable-browser/index.ts
+++ b/src/@ionic-native/plugins/themeable-browser/index.ts
@@ -67,6 +67,72 @@ export interface ThemeableBrowserOptions {
fullscreen?: string;
}
+/**
+ * @private
+ */
+export class ThemeableBrowserObject {
+
+ private _objectInstance: any;
+
+ constructor(url: string, target: string, styleOptions: ThemeableBrowserOptions) {
+ try {
+ this._objectInstance = cordova.ThemeableBrowser.open(url, target, styleOptions);
+ } catch (e) {
+ window.open(url);
+ console.warn('Native: ThemeableBrowser is not installed or you are running on a browser. Falling back to window.open.');
+ }
+ }
+
+ /**
+ * Displays an browser window that was opened hidden. Calling this has no effect
+ * if the browser was already visible.
+ */
+ @CordovaInstance({sync: true})
+ show(): void { }
+
+ /**
+ * Closes the browser window.
+ */
+ @CordovaInstance({sync: true})
+ close(): void { }
+
+ /**
+ * Reloads the current page
+ */
+ @CordovaInstance({ sync: true })
+ reload(): void { }
+
+ /**
+ * Injects JavaScript code into the browser window.
+ * @param script Details of the script to run, specifying either a file or code key.
+ * @returns {Promise}
+ */
+ @CordovaInstance()
+ executeScript(script: {file?: string, code?: string}): Promise {return; }
+
+ /**
+ * Injects CSS into the browser window.
+ * @param css Details of the script to run, specifying either a file or code key.
+ * @returns {Promise}
+ */
+ @CordovaInstance()
+ insertCss(css: {file?: string, code?: string}): Promise {return; }
+
+ /**
+ * A method that allows you to listen to events happening in the browser.
+ * Available events are: `ThemeableBrowserError`, `ThemeableBrowserWarning`, `critical`, `loadfail`, `unexpected`, `undefined`
+ * @param event Event name
+ * @returns {Observable} Returns back an observable that will listen to the event on subscribe, and will stop listening to the event on unsubscribe.
+ */
+ on(event: string): Observable {
+ return new Observable((observer) => {
+ this._objectInstance.addEventListener(event, observer.next.bind(observer));
+ return () => this._objectInstance.removeEventListener(event, observer.next.bind(observer));
+ });
+ }
+
+}
+
/**
* @name ThemeableBrowser
* @description
@@ -142,6 +208,8 @@ export interface ThemeableBrowserOptions {
*
* ```
* We suggest that you refer to the plugin's repository for additional information on usage that may not be covered here.
+ * @classes
+ * ThemeableBrowserObject
* @interfaces
* ThemeableBrowserButton
* ThemeableBrowserOptions
@@ -154,63 +222,16 @@ export interface ThemeableBrowserOptions {
})
@Injectable()
export class ThemeableBrowser {
- private _objectInstance: any;
-
- constructor(url: string, target: string, styleOptions: ThemeableBrowserOptions) {
- try {
- this._objectInstance = cordova.ThemeableBrowser.open(url, target, styleOptions);
- } catch (e) {
- window.open(url);
- console.warn('Native: ThemeableBrowser is not installed or you are running on a browser. Falling back to window.open, all instance methods will NOT work.');
- }
- }
/**
- * Displays an browser window that was opened hidden. Calling this has no effect
- * if the browser was already visible.
+ * Creates a browser instance
+ * @param url {string} URL to open
+ * @param target {string} Target
+ * @param styleOptions {ThemeableBrowserOptions} Themeable browser options
+ * @returns {ThemeableBrowserObject}
*/
- @CordovaInstance({sync: true})
- show(): void { }
-
- /**
- * Closes the browser window.
- */
- @CordovaInstance({sync: true})
- close(): void { }
-
- /**
- * Reloads the current page
- */
- @CordovaInstance({ sync: true })
- reload(): void { }
-
- /**
- * Injects JavaScript code into the browser window.
- * @param script Details of the script to run, specifying either a file or code key.
- * @returns {Promise}
- */
- @CordovaInstance()
- executeScript(script: {file?: string, code?: string}): Promise {return; }
-
- /**
- * Injects CSS into the browser window.
- * @param css Details of the script to run, specifying either a file or code key.
- * @returns {Promise}
- */
- @CordovaInstance()
- insertCss(css: {file?: string, code?: string}): Promise {return; }
-
- /**
- * A method that allows you to listen to events happening in the browser.
- * Available events are: `ThemeableBrowserError`, `ThemeableBrowserWarning`, `critical`, `loadfail`, `unexpected`, `undefined`
- * @param event Event name
- * @returns {Observable} Returns back an observable that will listen to the event on subscribe, and will stop listening to the event on unsubscribe.
- */
- on(event: string): Observable {
- return new Observable((observer) => {
- this._objectInstance.addEventListener(event, observer.next.bind(observer));
- return () => this._objectInstance.removeEventListener(event, observer.next.bind(observer));
- });
+ create(url: string, target: string, styleOptions: ThemeableBrowserOptions): ThemeableBrowserObject {
+ return new ThemeableBrowserObject(url, target, styleOptions);
}
}