* feat(push): plugin is now instance based
no more callbacks
closes#250
* fix(push): fix typo in PushEvents enum
* fix constructor
* feat(push): add subscribe/unsubscribe
fixes#861
* First try
* Moving to modules
* Removed
* Moving things aroudn
* tsconfig for plugins
* Plugin tsconfigs
* Core kind of buidls
* Core
* Plugin tsconfig
* Test
* Remove core
* Build
* Individual packages
* Build and push
* Some stuff
* Bump
* Update core-package.json.template
* Update plugin-package.json.template
* 3.0.0
* Working on injectable
* Updates
* Checkpoint
* More stuff
* Remove duplicate injectables
* Remove lots of static stuff with a fancy regex
* Fix build errors
* chore(): nodejs build script
* chore(): move fs-extra-promise to devDeps
* feat(): make instance based plugins injectable
* Cleanup
* chore(build): convert dependencies to peer dependencies
* chore(build): add auto install scripts (#1059)
* feat(core): auto install scripts
* minor fixes
* minor fixes
* remove prompt message
* fix(plugins): rename packages/classes
* rename google maps
* gulp task to generate readme files
* readme templates
* automating readme file generation and adding it to CI
# Conflicts:
# src/@ionic-native/plugins/googlemap/index.ts
# src/@ionic-native/plugins/inappbrowser/index.ts
# src/@ionic-native/plugins/media/index.ts
# src/@ionic-native/plugins/sqlite/index.ts
* outputting readmes to dist dir instead of src
* updating package name in usage instructions
* chore(): ngc build
* fix build
* 3.0.1-0
* 3.1.0-alpha.1
* fix AoT support and add publish script
* 3.1.0-alpha.2
* edit publish command
* remove alpha tag
* remove auto-install and cleanup
* 3.1.0-alpha.3
* remove utils from publish command
* refactor(): remove some prefixes
* remove console logs
closes#1145
* chore(): merge master into v3-injectable (#1146)
* 2.5.0
* chore(): update changelog
* fix(pin-dialog): add missing errorIndex
* 2.5.1
* chore(): update changelog
* fix(zip): progress callback is optional (#1049)
* fix(apprate): add missing Windows Store option (#1072)
* Update file-chooser.ts (#1071)
Removed semicolon after .then() in usage instructions
* docs(device-motion): update interface names (#1076)
AccelerationData interface is wrongly named in docs. It should be DeviceMotionAccelerationData. And I added it to import statement.
* feat(inappbrowser): add interface for IAB options (#1065)
* Add InAppBrowserOptions Interface for better tooling.
* feat(inappbrowser): add interface for IAB options
* Add more constructor tests.
* Add missing iOS options.
* docs(media): update method usage (#1089)
* fix(push): add the missing option clearBadge (#1087)
* docs(badge): fix example (#1096)
Error in code example (supplied parameters do not match call signature)
* fix(imagepicker): add outputType option (#1098)
* fix(facebook): fixes issue when not supplying default params (#1088)
* Fix default facebook logEvent parameters
* Implement correct parameters format in facebook logEvent method
* Update ibeacon.ts (#1099)
Return type of `getAuthorizationStatus()` made more explicit.
* fix(file): add missing exports (#1101)
Any declaration that is not being exported is missing from the resulting d.ts declaration files.
* Add InAppBrowserOptions interface to documentation. (#1103)
* Update sqlite.ts (#1106)
Added a bracket to remove the syntax error
* update device orientation docs to reflect renaming of CompassHeading interface (#1107)
* Move marker code inside MAP_READY (#1108)
The code to set the camera position and marker should be moved inside the function handling MAP_READY. Otherwise they execute before the event is fired and it doesn't work.
* refactor(file): accept ArrayBuffer for data to write (#1109)
* docs(google-maps): fix param type
closes#1110
* fix(media): add missing pauseRecord and resumeRecord methods (#1122)
* docs(stripe): fix type and naming issues (#1129)
* refactor(paypal): fix type of items (#1125)
Type of items should be Array<PayPalItem> instead of string.
* fix(serial): Serial.requestPermission() options are optional (#1128)
* add success/error indices
* feat(browser-tab): add browser tab plugin (#1126)
* feature: added hasPermission function to Firebase fixes#1115
* feat: Implemented support for BrowserTab #1077
* docs(browser-tab): add proper docs
* fix(background-geolocation): configure returns a promise
closes#1118
* docs(background-geolocation): add return types and platforms
* fix(contacts): allow passing asterisk as contact field type
closes 1093
* fix(contacts): allow passing asterisk as contact field type
closes#1093
* fix(plugin): revert changes to support stable version (#1116)
fix#1001
* feat(file): add system paths
* feat(app-update): add cordova-plugin-app-update support (#1105)
* add new app-update plugin
* update plugin info
* docs(app-update): add docs
* feat(alipay): add alipay support. (#1097)
* add cordova-alipay-base plugin. to support Alipay payment
* change ALI_PID to APP_ID, make it same with the latest SDK
* rewrite comments
* docs(google-maps): improve docs (#1095)
Move `map.moveCamera(position);` inside the MAP_READY event.
Allow to zoom the map on first launch (both iOS and Android).
* fix(file): remove FileError from return type (#1086)
Promises that reject with a `FileError` are not of the type `Promise<T|FileError>`, but `Promise<T>`.
The previous declarations of `Promise<T|FileError>` would break typing further down the chain where you are trying to use the value that the typing says could be `T|FileError` but in reality could only be `T`.
* feat(google-maps): add constant for map type
* fix(file): platform Browser will raise a an DOMException (#1082)
fix(File): Platform Browser will raise a an DOMException on resoleLocalFilesystemUrl and tries to write on readonly property DOMException err.message in fillErrorMessage
* feat(local-notifications): support for icon background color (#1079)
The Cordova plugin Ionic Natives uses allows specifying the background color of the smallIcon. By not including it in your interface you force users to use the default color for their version of Android. While the LocalNotification plugin is not well documented, it does include this feature, see Options.java line 253:
```
/**
* @return
* The notification background color for the small icon
* Returns null, if no color is given.
*/
public int getColor() {
String hex = options.optString("color", null);
if (hex == null) {
return NotificationCompat.COLOR_DEFAULT;
}
int aRGB = Integer.parseInt(hex, 16);
return aRGB + 0xFF000000;
}
```
I've simply added the option to the interface as well as a short description.
This lets you go from the default color (varies by Android version): https://goo.gl/photos/nERcj4GZgapy8aee9
To any color you'd like: https://goo.gl/photos/t8V9WVba8jDU49aHA
And also works if you also specify a large icon: https://goo.gl/photos/gWQYwa12djmdXfYcA
* feat(unique-device-add): add UniqueDeviceId plugin (#1064)
* fix plugin
* feat(text-to-speech): Add stop method (#1063)
https://github.com/vilic/cordova-plugin-tts/pull/32
* feat(appodeal): adds Appodeal SDK wrappers for iOS and Android (#1031)
* feat(Appodeal) bootrapping
* starting docs
* more docs
* feat(appodeal): add event Observables
* feat(appodeal): replace Cordova Observable events with #.fromEvent()
* feat(appodeal): update decorator metadata
* feat(couchbase-lite): add CouchbaseLite cordova plugin (#1025)
* feat(CouchbaseLite): add CouchbaseLite cordova plugin
* add plugin url
* feat(background-fetch): Adding Background Fetch requested in #990 (#1013)
* Adding Background Fetch (https://github.com/transistorsoft/cordova-plugin-background-fetch) requested in #990
* Adding BackgroundFetch to index
* feat(gyroscope): add Gyroscope plugin (#1004)
* add gyroscope.ts to plugins
* add gyroscope to index
* Update gyroscope.ts
* Update gyroscope.ts
* Revert "fix(File): typing where `FileError` can be thrown" (#1130)
* tslint and fix build issues
* 2.6.0
* chore(): update changelog
* fix(core): dont check if method exists when overriding
fixes#1043
* fix(file): fix writeExistingFile
closes#1044
* feat(diagnostic): add new methods
closes#1045
* feat(background-mode): replace event listeners with on method
The methods onactivate, ondeactive and onfailure no longer exist. You must now use `on` method.
* feat(background-mode): add missing functions
closes#1078
* tslint
* set GoogleMapsMapTypeId to private
* remove beta from stripe
* 2.7.0
* chore(): update changelog
* feat(app-preferences): added cordova-plugin-app-preferences support (#1084)
* (feat) added cordova-plugin-app-preferences support
* replaced callback functions with promises
* updated example
* (feat) added cordova-plugin-browsertab support
* Revert "(feat) added cordova-plugin-browsertab support"
This reverts commit 00eb5cf5d8.
* (update) synchronize fetch
* feat(photo-library): added cordova-plugin-photo-library (#1102)
* feat(photo-library): added cordova-plugin-photo-library
* CordovaFiniteObservable moved to photo-library.
Overloads are marked as private.
* refactor(photo-library): fixed circleci failing in 2.7.0 (#1132)
* feat(photo-library): added cordova-plugin-photo-library
* CordovaFiniteObservable moved to photo-library.
Overloads are marked as private.
* fixed typescript error in 2.7.0
* feat(health): add wrapper for cordova-plugin-health (#1039)
* feat(health): add wrapper for cordova-plugin-health
* fix(Health): add optional params to QueryOptions for .query()
* docs(health): fix javadoc of interfaces
* fix(health): remove unused Plugin option
* docs(health): add missing documentation
* doc(health): add promise to return
* doc(health): remove empty lines
* doc(health): Add description & reference to repo
* doc(health: add "return {Promise<any>}"
* refactor(safari-view-controller): hide returns promise
* fix typo in ibeacon plugin (#1138)
* fix(file): fix return types
fixes#1139
* docs(background-geolocation): fix param docs
* refactor(health): fix return types and prefix interfaces
* 2.8.0
* chore(): update changelog
* docs(sqlite): syntax error resolved (#1142)
* Syntax error resolved
The `{}` should be `[]`, but since there is no binding we do not get error. In case we add one, then the syntax will be incorrect.
* Fixed a syntax error
* fix(background-geolocation): configure returns an observable
* docs(): update docs
* 3.1.0-rc.1
* refactor(background-geolocation): update imports
* docs(background-fetch): fix return type
* docs(health): fix return type
* chore(CI): fixing npm install instructions in generated readmes
* set concurrency to number of cores
* chore(): update deps
* 3.1.0-rc.2
* chore(): update angular to 2.4.8
* 3.1.0-rc.3
* chore(): update angular to 2.4.8
* chore(): update rxjs to 5.0.1
* chore(): organize and enhance decorators (#1171)
* fix/add decorators
* fix google maps design
* chore(): add root tsconfig to resolve imports in IDE
* updates
* more fixes
* chore(): add options to InstanceCheck
* chore(decorators): promise is default for Cordova/Instance check
* chore(): add check decroators
* docs(): update plugin docs
* chore(decorators): fix cordovaCheck and instanceCheck
* 3.1.0-rc.4
* chore(docs): remove gitPackage from doc generator
* chore(docs): update to latest dgeni version
* fix diagnostic
* feat(media): create method now returns a promise
Breaking change: create no longer returns a MediaObject instance. Make changes to your app accordingly.
* docs update + remove any static methods/properties
* remove duplicate method
* remove extra docs
* remove extra docs
* docs(): rename plugins
* chore(decorators): do not check method name on instancecheck
* chore(decorators): do not check method name on cordovacheck
* chore(plugin): fix pluginWarn
* chore(plugin): fix pluginWarn
* fix(decorators): fix InstanceCheck decorator
* 3.1.0-rc.5
* chore(docs): fix readme generation
* fix(transfer): fix v3 implementation
* refactor(paypal): PayPal is brand name
* chore(docs): replace all spaces with dashes
* chore(): add dashify filter
* chore(build): add aot path to core tsconfig
* feat(action-sheet): add ANDROID_THEMES constant
* refactor(): general cleanup (#1193)
* feat(screen-orientation): update wrapper to match v2 of the plugin
The whole implementation has changed now. You must update your code.
* feat(stripe): add new methods
* feat(linkedin): add LinkedIn plugin
* 3.1.0-rc.6
* style(screen-orientation): double quote to single
* tslint
* refactor(pedometer): rename file to index
* Syntax error resolved
The `{}` should be `[]`, but since there is no binding we do not get error. In case we add one, then the syntax will be incorrect.
* Fixed a syntax error
* feat(photo-library): added cordova-plugin-photo-library
* CordovaFiniteObservable moved to photo-library.
Overloads are marked as private.
* fixed typescript error in 2.7.0
The Cordova plugin Ionic Natives uses allows specifying the background color of the smallIcon. By not including it in your interface you force users to use the default color for their version of Android. While the LocalNotification plugin is not well documented, it does include this feature, see Options.java line 253:
```
/**
* @return
* The notification background color for the small icon
* Returns null, if no color is given.
*/
public int getColor() {
String hex = options.optString("color", null);
if (hex == null) {
return NotificationCompat.COLOR_DEFAULT;
}
int aRGB = Integer.parseInt(hex, 16);
return aRGB + 0xFF000000;
}
```
I've simply added the option to the interface as well as a short description.
This lets you go from the default color (varies by Android version): https://goo.gl/photos/nERcj4GZgapy8aee9
To any color you'd like: https://goo.gl/photos/t8V9WVba8jDU49aHA
And also works if you also specify a large icon: https://goo.gl/photos/gWQYwa12djmdXfYcA
fix(File): Platform Browser will raise a an DOMException on resoleLocalFilesystemUrl and tries to write on readonly property DOMException err.message in fillErrorMessage
Promises that reject with a `FileError` are not of the type `Promise<T|FileError>`, but `Promise<T>`.
The previous declarations of `Promise<T|FileError>` would break typing further down the chain where you are trying to use the value that the typing says could be `T|FileError` but in reality could only be `T`.
The code to set the camera position and marker should be moved inside the function handling MAP_READY. Otherwise they execute before the event is fired and it doesn't work.
Adding a link to **cordova plugin file** for ease of understanding file management using cordova.
It took me almost a day to figure out how to properly save things like a pdf/image in a publicly accessible directory. Having a link to the main **cordova file** documentation will save a lot of time.
This reverts part of commit 67adb23, which moved the call to getPlugin()
from within CordovaProperty() to a point where it was called too early.
When the CordovaProperty decorator is called on a property, the class
containing that call has not yet had its Plugin decorator called. Only
when the latter happens does pluginRef get set. Thus, attempting to
access pluginRef within CordovaProperty at the time of the call will
give undefined, and attemping to call getPlugin with an undefined value
will throw an exception:
Runtime Error
Cannot read property 'split' of undefined
TypeError: Cannot read property 'split' of undefined
at get
at getPlugin
at CordovaProperty
at __decorate
...
The above message can be seen in the browser after running the 'ionic
serve' command.
This commit moves the getPlugin call back to the getters and setters
established by CordovaProperty, which are only called *after* the Plugin
decorator has finished executing.
closes#992
* feat(broadcaster): add Broadcaster plugin
* fix(broadcaster): return Obserable for addEventListener
- also remove the listener when clearing observable
I added a change that makes it clear that the map element needs a height to be visible.
I tried to follow the docs but It didn't work, after that I thought my API keys were invalid, at the end it turned out the map wasn't visible at all.
* update to use plugin v1.1.0
Updated example
Added new configuration options.
Added new show() result fields
Added new delete method
* Update to plugin v1.2.0
Removed show()
Added encrypt()
Added decrypt()
Removed requirement of username
* edit comments
* edited comments
The routeWithNavController method returns an observable, thus it has to be subscribed to, to get it working.
Change the documentation of the method to show that we need to subscribe to the observable, just like when using the route method.
`db.executeSql()` was documented as `db.executeSQL()` that caused error:
main.js:13 Error openening database TypeError: t.executeSQL is not a function
at file:///android_asset/www/build/main.js:13:11718
at t.invoke (file:///android_asset/www/build/polyfills.js:3:13422)
at Object.onInvoke (file:///android_asset/www/build/main.js:3:3341)
at t.invoke (file:///android_asset/www/build/polyfills.js:3:13373)
at e.run (file:///android_asset/www/build/polyfills.js:3:10809)
at file:///android_asset/www/build/polyfills.js:3:8911
at t.invokeTask (file:///android_asset/www/build/polyfills.js:3:14051)
at Object.onInvokeTask (file:///android_asset/www/build/main.js:3:3241)
at t.invokeTask (file:///android_asset/www/build/polyfills.js:3:13987)
at e.runTask (file:///android_asset/www/build/polyfills.js:3:11411)
The issue is fixed in this commit
* Update camera-preview.ts
This missing parameter would cause TS to spew
* Update camera-preview.ts
Sending preview to back is initially confusing and causes it to appear to not work.
* docs(camera preview): update to correct repo
* docs(camera preview): fix typo
* docs(camera preview): Update to other repo
* fix(camera preview): revert to old plugin and update repo to matching repo
The plugin reference is available as part of the global `cordova` object and not the global `plugins` object. This caused the plugin to `Plugin not installed warning` even though the plugin is installed and works when using through `cordova.plugins.market.open(appId);`
The way this was setup previously, if an error occurred on the watchPosition observable, the observer was sent an error, which would have to be caught. This also has the side effect of completing the observable, which means anything down stream that would be subscribed would be unsubscribed and no longer receive updates.
Instead of using binding the error callback to ```observer.error``` this change just binds the error callback to ```observer.next``` and lets the subscriber filter out results that match ```PositionError``` rather than having to manage re-subscribing (which could just immediately fail and enter a loop of catch/retry)
* feat - introduce the plugin wrapper for code-push and type definitions
* feat(code-push) - change the signature of the methods to return Promise & decorate them with Cordova decorator
* fix(code push) - in sync method call the native method
* fix(code-push) : use decorator on syc to mark it as an observable / add sample usage
* docs(code-push) : add the link to the sample repository
* fix - merge errors
* fix(code-push) : add description field on CodePush class / remove not needed IWindow interface declaration
* Fixes syntax error in usage example, and improves usage formatting
* Moves error codes into usage section
* Adds basics of geofence plugin
* Updates exports to include Geofence
* Adds geofence docs and tested functions
* Corrects promise types and comments out unimplemented functions
* Minor updates to geofence
* Reverts camera-preview changes for this branch to master
* Removes preview settings from options obj and creates proper rect interface
* Changes startCamera() signature to match plugin
* Adds alpha to function signature
* Removes CameraPreviewOptions and CameraPreviewSize interfaces that don't match plugin
* Adds back CameraPreviewSize interface - oops
* Updates docs for startCamera()
* Changes CameraPreviewSize interface to Size to match plugin
* Adds docs for takePicture
* Reverts change to signature of setOnPictureTakenHandler
* Adds CameraPreview prefix to interfaces
We don't want that the reject cb takes the position of an optional
argument that has not been defined
For example the Dialogs.alert method takes an optional 'buttonLabel'
string. In case we do not set this value, and thus want to use the
default value, the 'reject'
callback get spliced into this position due the fact that the splice
start index is bigger than the array length.
Dialogs.alert("title", "message", "My button text") --> args =
["title", resolve, "message", "My button text", reject]
Dialogs.alert("title", "message") --> args = ["title", resolve,
"message", reject] --> reject is on the position of the buttontitle!
The cordova-plugin-dialogs alert function receives the wrong arguments
—> alert: function(message, completeCallback, title, buttonLabel)
The buttonLabel will receive the "reject" callback instead of a
undefined value.
* Additions to documentations and type definitions
Added return types to documentation as well as modified return type definition to match actual types returned.
Used union types for promises where applicable.
Builds and gulp docs ok.
* Update file.ts
* feat(inappbrowser): the inAppBrowser class is no longer static
* feat(inappbrowser): fallback on window.open if plugin not available
* change warning text to match expected release version
Since the plugin's methods return already a promise, the workaround with the `sync` option was used. This worked well for the method calls. However, when either cordova or the plugin was not available, an error was thrown, instead of rejecting the returned promise.
Therefore a better way is to use the `otherPromise` option, introduced with https://github.com/driftyco/ionic-native/releases/tag/v1.3.8.
* Added OneSignal wrapper
* documentation
* Changes for callback of notification revieced
* fixes for @Cordova decorators without Promise return
* Merge
* Improvements to OneSignal
extended init function with notificationOpenedCallback as an optional parameter
* Platforms removed
OneSignal supports more than only these 3 platforms. It's available to nearly all Cordova platforms.
* Init method turned into observable
* Screen Orientation Plugin added. Closes#342
* Added VideoPlayer plugin #318
walkingriver commented 9 minutes ago
When installing the bower package created from this, a couple of warnings are printed:
bower ionic-native#* invalid-meta The "main" field cannot contain minified files
bower ionic-native#* invalid-meta The "main" field has to contain only 1 file per filetype; found multiple .js files: ["ionic.native.js","ionic.native.min.js"]
* Added OneSignal wrapper
* documentation
* Changes for callback of notification revieced
* fixes for @Cordova decorators without Promise return
* Merge
* Improvements to OneSignal
extended init function with notificationOpenedCallback as an optional parameter
* Platforms removed
OneSignal supports more than only these 3 platforms. It's available to nearly all Cordova platforms.
* Init method turned into observable
* Screen Orientation Plugin added. Closes#342
* Added OneSignal wrapper
* documentation
* Changes for callback of notification revieced
* fixes for @Cordova decorators without Promise return
* Merge
* Improvements to OneSignal
extended init function with notificationOpenedCallback as an optional parameter
* Platforms removed
OneSignal supports more than only these 3 platforms. It's available to nearly all Cordova platforms.
* Init method turned into observable
* Add SecureStorage plugin.
* Add SecureStorage plugin.
* Added create() and removed init() to provide more consistency to ionic-native plugins.
Edited comments to reflect changes.
* Removed init and comment edit.
* Updates docs for CameraPreview, Base64ToGallery and Developer.MD
-DEVELOPER.md: Corrects 'npm run tslint' instruction to 'npm run lint'
-CameraPreview: Fixes syntax error in hide
-Base64ToGallery: Adds desc of options obj props
* Fixes resolveLocalFileSystemURL bug in File.readAsText() and adds File.readAsDataUrl()
- File.readAsText(): window.resolveLocalFileSystemURL() was incorrectly implemented
* Updates callback arg in File.checkFile()
Callback arg of window.resolveLocalFileSystemURL was fileSystem, but it actually returns fileEntry
* Corrects repo link and comments out setFlashMode()
- Repo prop and link in desc were not pointing to the same gh repo as the plugin
- setFlashMode() is not currently available in the repo that gets pulled by the corodova plugin
-DEVELOPER.md: Corrects 'npm run tslint' instruction to 'npm run lint'
-CameraPreview: Fixes syntax error in hide
-Base64ToGallery: Adds desc of options obj props
* - Add support for canShareViaEmail
- Make the following parameters in shareViaEmail method optional: cc, bcc, files
- Add usage for canShareViaEmail and shareViaEmail
- Fix some formatting to be more consistent
- Fix pluginRef
* Fix import
* Change static fields from default (private) to public
* Move methods below primitve
* Stay @private in docs due to prevent the docs generator from documenting them
Just implemented the SpinnerDialog into my app to use with Ionic Deploy.
The cancelCallback still happens when set to "false", when setting it to "true, the cancelCallback doesn't get called and therefore the SpinnerDialog doesn't hide on Android.
Zone.js now (helpfully) throws an error on unhandled rejections in
promises. This is great because they no longer silently fail, but we
were relying on that behavior for the case where the plugin isn't
installed or Cordova isn't available. With this change, those cases
won't throw an unhandled rejection error, but all regular plugin errors
still should.
In some cases the incoming ```path``` variable may not necessarily contain a trailing slash, but in cases where the directory path is manually built within the plugin this was not protected against. This shouldn't be a big issue if consumers are using ```cordova.file.*``` for the path params, but not all consumers may be using this.
#### There are no rules, but here are a few things to consider:
###### Before you submit an issue:
* Do a quick search to see if there are similar issues
* Make sure that you are waiting for `deviceready` to fire before interacting with any plugin. If you are using Ionic 2, this can be done using [the `Platform.ready()` function](http://ionicframework.com/docs/v2/api/platform/Platform/#ready).
* **Check that you are using the latest version of** `ionic-native`, you can install the latest version by running `npm i --save ionic-native@latest`
###### Still having problems? submit an issue with the following details:
* Short description of the issue
* Steps to reproduce
* Stack trace (if available)
## Feature request?
Have a plugin you'd like to see supported? Since Ionic Native is a thin wrapper around existing Cordova plugins, adding support for new plugins is as easy as creating a new wrapper for whatever plugin you'd like to add.
Take a look at our [Developer Guide](https://github.com/driftyco/ionic-native/blob/master/DEVELOPER.md) for more info on adding new plugins.
Have a plugin you'd like to see supported? Because Ionic Native is a thin wrapper around existing Cordova plugins, adding support for new plugins is as easy as creating a new wrapper for whichever plugin you'd like to add.
Take a look at our [Developer Guide](https://github.com/driftyco/ionic-native/blob/master/DEVELOPER.md) for more info on adding new plugins.
@@ -5,29 +5,38 @@ This is a short guide on creating new plugin wrappers for Ionic Native.
## Creating Plugin Wrappers
First, let's start by creating a new plugin wrapper from template.
```
// Call this command, and replace PluginName with the name of the plugin you wish to add
// Make sure to capitalize the first letter, or use CamelCase if necessary.
gulp plugin:create -n PluginName
// add -m flag to get a minimal template to start with
gulp plugin:create -m -n PluginName
```
Let's take a look at the existing plugin wrapper for Geolocation to see what goes into an Ionic Native plugin (comments have been removed for clarity):
First and foremost, we want to create a class representing our plugin, in this case Geolocation.
```
@Injectable()
class Geolocation {
}
@@ -49,18 +59,16 @@ For example, the `@Plugin` decorator adds information about the plugin to our Ge
```
@Plugin({
name: 'Geolocation',
plugin: 'cordova-plugin-geolocation',
pluginRef: 'navigator.geolocation'
})
@Injectable()
export class Geolocation {
}
```
Here, `name` refers to the name of the plugin, which is used by Ionic Native for logging messages.
`plugin` is the name of the plugin package on npm and used when calling `cordova plugin add`, also used for logging purposes.
Here, `plugin` is the name of the plugin package on npm and used when calling `cordova plugin add`.
`pluginRef` refers to the where on `window` the underlying Cordova plugin is normally exposed. For example, in the case of the Cordova Geolocation plugin, normally you would make calls like `window.navigator.geolocation.getCurrentPosition({}, success, error)`, so the `pluginRef` in this case is `navigator.geolocation`.
@@ -72,14 +80,14 @@ Let's take a look at `getCurrentPosition` first.
It's just a stub. The `return` is only there to keep the TypeScript type-checker from complaining since we indicate that `getCurrentPosition` returns a `Promise<Geoposition>`.
By default, the `@Cordova` decorator wraps the plugin callbacks in a Promise that resolves when the success callback is called and rejects when the error callback is called. It also ensures that Cordova and the underlying plugin are available, and prints helpful diagnostics if they aren't.
You'll also notice that it is a static method. That's because the plugin class is just a utility class to call the underlying Cordova plugin methods, it's not an instance and has no state.
You'll also notice that `getCurrentPosition` is a static method. That's because the plugin class is just a utility class to call the underlying Cordova plugin methods, it's not an instance and has no state.
Next, let's look at the `watchPosition` method.
@@ -89,9 +97,7 @@ Next, let's look at the `watchPosition` method.
The `@Cordova` decorator has a few more options now.
@@ -102,6 +108,43 @@ The `@Cordova` decorator has a few more options now.
`clearFunction` is used in conjunction with the `observable` option and indicates the function to be called when the Observable is disposed.
### Testing your changes
You need to run `npm run build` in the `ionic-native` project, this will create a `dist` directory. Then, you must go to your ionic application folder and replace your current `node_modules/ionic-native/dist/` with the newly generated one.
### Cleaning the code
You need to run `npm run lint` to analyze the code and ensure it's consistency with the repository style. Fix any errors before submitting a PR.
### 'Wrapping' Up
That's it! The only thing left to do is rigorously document the plugin and it's usage. Take a look at some of the other plugins for good documentation styles.
That's it! The only thing left to do is rigorously document the plugin and it's usage. Take a look at some of the other plugins for good documentation styles.
## Commit Message Format
We have very precise rules over how our git commit messages can be formatted. This leads to more readable messages that are easy to follow when looking through the project history. But also, we use the git commit messages to generate the our change log. (Ok you got us, it's basically Angular's commit message format).
`type(scope): subject`
#### Type
Must be one of the following:
* **fix**: A bug fix
* **feat**: A new feature
* **docs**: Documentation only changes
* **style**: Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc)
* **refactor**: A code change that neither fixes a bug nor adds a feature
* **perf**: A code change that improves performance
* **test**: Adding missing tests
* **chore**: Changes to the build process or auxiliary tools and libraries such as documentation generation
#### Scope
The scope could be anything specifying place of the commit change. For example, the name of the plugin being changed
#### Subject
The subject contains succinct description of the change:
* use the imperative, present tense: "change" not "changed" nor "changes"
* do not capitalize first letter
* do not place a period (.) at the end
* entire length of the commit message must not go over 50 characters
Ionic Native is a curated set of wrappers for Cordova plugins that make adding any native functionality you need to your [Ionic](http://ionicframework.com/), Cordova, or Web View mobile app easy.
Ionic Native is a curated set of wrappers for Cordova plugins that make adding any native functionality you need to your [Ionic 2](http://ionicframework.com/) mobile app easy.
### Promises and Observables
Ionic Native wraps plugin callbacks in a Promise or Observable, providing a common interface for all plugins and making it easy to use plugins with Angular change detection.
Ionic Native wraps plugin callbacks in a Promise or [Observable](https://gist.github.com/staltz/868e7e9bc2a7b8c1f754), providing a common interface for all plugins and ensuring that native events trigger change detection in Angular 2.
## Installation
Run following command to install Ionic Native in your project.
You also need to install the Ionic Native package for each plugin you want to add. Please see the [Ionic Native documentation](http://ionicframework.com/docs/v2/native/) for complete instructions on how to add and use the plugins.
## Documentation
For the full Ionic Native documentation, please visit [http://ionicframework.com/docs/v2/native/](http://ionicframework.com/docs/v2/native/).
### Basic Usage
To use a plugin, import and add the plugin provider to your `@NgModule`, and then inject it where you wish to use it.
// Currently, observables from Ionic Native plugins
// need to run inside of zone to trigger change detection
ngZone.run(()=>{
this.position=pos;
})
});
// to stop watching
watch.unsubscribe();
});
}
}
```
### Mocking and Browser Development
Ionic Native 3.x makes it possible to mock plugins and develop nearly the entirety of your app in the browser or in `ionic serve`.
To do this, you need to provide a mock implementation of the plugins you wish to use. Here's an example of mocking the `Camera` plugin to return a stock image while in development:
First import the `Camera` class in your `src/app/app.module.ts` file:
```ts
import{Camera}from'@ionic-native/camera';
```
Then create a new class that extends the `Camera` class with a mock implementation:
```ts
classCameraMockextendsCamera{
getPicture(options){
returnnewPromise((resolve,reject)=>{
resolve("BASE_64_ENCODED_DATA_GOES_HERE");
})
}
}
```
Finally, override the previous `Camera` class in your `providers` for this module:
Spent way too long diagnosing an issue only to realize a plugin wasn't firing or installed? Ionic Native lets you know what the issue is and how you can resolve it.
Let us know or submit a PR! Take a look at [the Developer Guide](https://github.com/driftyco/ionic-native/blob/master/DEVELOPER.md) for more on how to contribute. :heart:
## Ionic 1/Angular 1 support
Ionic Native 3.x supports Ionic 2.x and above. For Ionic/Angular 1 support, please use version 2 of Ionic Native. See the [2.x README](https://github.com/driftyco/ionic-native/blob/8cd648db5cddd7bdbe2bd78839b19c620cc8c04c/README.md) for usage information.
The `ionic serve` command compiles your ES6 files to ES5, your Sass files to CSS, bundles it all up for you, opens up a browser window and serves your app locally. After the initial build it will watch for changes and automatically rebuild and reload. The build output can be configured in your `ionic.config.js` file (which will be autogenerated by `ionic serve` if it doesn't exist yet).
#### Updating Ionic
When you start your project with `ionic start`, the latest version of `ionic-framework` is installed automatically. To update your ionic version in an existing project, run `npm install --save ionic-framework@latest`. This will install the latest version of `ionic-framework` published to npm, and save it in your `package.json` file so if you are checking your project in to version control the correct version of the framework will be installed by [`npm install`](https://docs.npmjs.com/cli/install).
#### Developing Against Unstable Master
- THIS IS NOT UPDATING YOUR APP. THIS IS FOR DEVELOPING AGAINST THE UNSTABLE MASTER BRANCH, WHICH WE DO NOT RECOMMEND. SEE [Updating Ionic](#updating-ionic) FOR INSTRUCTIONS ON UPDATING TO THE LATEST VERSION OF THE FRAMEWORK. To develop against a local version of ionic-framework (master) you'll need to do the following:
And then update your [`webpack.config.js`](https://github.com/driftyco/ionic2-app-base/blob/master/webpack.config.js#L68) file by uncommenting the lines for local development:
Update the ionic2 [`gulpfile.js #L141`](https://github.com/driftyco/ionic2/blob/master/gulpfile.js#L141) to this in order to use `gulp watch` and make changes to the ionic2 repo:
```js
gulp.start('transpile.common');
```
### Missing Ionic 1 features
We are currently working on completing a few core Ionic 1 features:
- Collection repeat (known as Virtual Scrolling in v2) is not quite ready
### Current Angular 2 known issues:
- Angular 2 is still in alpha and is not production ready
- Angular team has first focused on developing what the core of Angular 2 "is"
- Angular 2 filesize has not been optimized for minification yet
- Angular 2 bootstrap time has not been optimized yet
- As Angular 2 reaches beta there will be significant performance improvements
### ES6/Typescript
- Ionic's source is written using [Typescript](http://www.typescriptlang.org/)
- Ionic apps can be written in ES6 or TypeScript
- Typescript is an optional feature to be used at the developers discretion
- Ionic 2 starters come with the necessary build tools to transpile both ES6 and Typescript
### CSS Attribute Selectors:
- Simple
- Smaller markup
- Easier to read and understand
- [Not an issue](https://twitter.com/paul_irish/status/311610425617838081) for today's mobile browsers
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.');
* The ActionSheet plugin shows a native list of options the user can choose from.
*
* Requires Cordova plugin: `cordova-plugin-actionsheet`. For more info, please see the [ActionSheet plugin docs](https://github.com/phonegap/phonegap-plugin-barcodescanner).
*
* @usage
*
* ```
* import {ActionSheet} from 'ionic-native';
*
* let buttonLabels = ['Share via Facebook', 'Share via Twitter'];
* The ActionSheet plugin shows a native list of options the user can choose from.
*
* Requires Cordova plugin: `cordova-plugin-actionsheet`. For more info, please see the [ActionSheet plugin docs](https://github.com/phonegap/phonegap-plugin-barcodescanner).
*
* @usage
*
* ```
* import {ActionSheet} from 'ionic-native';
*
* let buttonLabels = ['Share via Facebook', 'Share via Twitter'];
* The Barcode Scanner Plugin opens a camera view and automatically scans a barcode, returning the data back to you.
*
* Requires Cordova plugin: `phonegap-plugin-barcodescanner`. For more info, please see the [BarcodeScanner plugin docs](https://github.com/phonegap/phonegap-plugin-barcodescanner).
*
* @usage
* ```js
* BarcodeScanner.scan().then((barcodeData) => {
* // Success! Barcode data is here
* }, (err) => {
* // An error occurred
* });
* ```
*/
exportdeclareclassBarcodeScanner{
/**
* Open the barcode scanner.
* @return Returns a Promise that resolves with scanner data, or rejects with an error.
* The Barcode Scanner Plugin opens a camera view and automatically scans a barcode, returning the data back to you.
*
* Requires Cordova plugin: `phonegap-plugin-barcodescanner`. For more info, please see the [BarcodeScanner plugin docs](https://github.com/phonegap/phonegap-plugin-barcodescanner).
*
* @usage
* ```js
* BarcodeScanner.scan().then((barcodeData) => {
* // Success! Barcode data is here
* }, (err) => {
* // An error occurred
* });
* ```
*/
varBarcodeScanner=(function(){
functionBarcodeScanner(){
}
/**
* Open the barcode scanner.
* @return Returns a Promise that resolves with scanner data, or rejects with an error.
*/
BarcodeScanner.scan=function(){
// This Promise is replaced by one from the @Cordova decorator that wraps
// the plugin's callbacks. We provide a dummy one here so TypeScript
// knows that the correct return type is Promise, because there's no way
// for it to know the return type from a decorator.
// See https://github.com/Microsoft/TypeScript/issues/4881
* This plugin enables communication between a phone and Bluetooth Low Energy (BLE) peripherals.
*
* The plugin provides a simple JavaScript API for iOS and Android.
*
* - Scan for peripherals
* - Connect to a peripheral
* - Read the value of a characteristic
* - Write new value to a characteristic
* - Get notified when characteristic's value changes
*
* Advertising information is returned when scanning for peripherals. Service, characteristic, and property info is returned when connecting to a peripheral. All access is via service and characteristic UUIDs. The plugin manages handles internally.
*
* Simultaneous connections to multiple peripherals are supported.
*
* ## Peripheral Data
*
* Peripheral Data is passed to the success callback when scanning and connecting. Limited data is passed when scanning.
* Bluetooth advertising data is returned in when scanning for devices. The format format varies depending on your platform. On Android advertising data will be the raw advertising bytes. iOS does not allow access to raw advertising data, so a dictionary of data is returned.
*
* The advertising information for both Android and iOS appears to be a combination of advertising data and scan response data.
*
* ### Android
* ```
* {
* "name": "demo",
* "id": "00:1A:7D:DA:71:13",
* "advertising": ArrayBuffer,
* "rssi": -37
* }
* ```
*
* Convert the advertising info to a Uint8Array for processing. `var adData = new Uint8Array(peripheral.advertising)`
*
* ### iOS
*
* Note that iOS uses the string value of the constants for the [Advertisement Data Retrieval Keys](https://developer.apple.com/library/ios/documentation/CoreBluetooth/Reference/CBCentralManagerDelegate_Protocol/index.html#//apple_ref/doc/constant_group/Advertisement_Data_Retrieval_Keys). This will likely change in the future.
* ```
* {
* "name": "demo",
* "id": "D8479A4F-7517-BCD3-91B5-3302B2F81802",
* "advertising": {
* "kCBAdvDataChannel": 37,
* "kCBAdvDataServiceData": {
* "FED8": {
* "byteLength": 7 // data not shown
* }
* },
* "kCBAdvDataLocalName": "demo",
* "kCBAdvDataServiceUUIDs": ["FED8"],
* "kCBAdvDataManufacturerData": {
* "byteLength": 7 // data not shown
* },
* "kCBAdvDataTxPowerLevel": 32,
* "kCBAdvDataIsConnectable": true
* },
* "rssi": -53
* }
* ```
*
* ## Typed Arrays
*
* This plugin uses typed Arrays or ArrayBuffers for sending and receiving data.
*
* This means that you need convert your data to ArrayBuffers before sending and from ArrayBuffers when receiving.
* ```
* // ASCII only
* function stringToBytes(string) {
* var array = new Uint8Array(string.length);
* for (var i = 0, l = string.length; i < l; i++) {
* array[i] = string.charCodeAt(i);
* }
* return array.buffer;
* }
*
* // ASCII only
* function bytesToString(buffer) {
* return String.fromCharCode.apply(null, new Uint8Array(buffer));
* }
* ```
* You can read more about typed arrays in these articles on [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays) and [HTML5 Rocks](http://www.html5rocks.com/en/tutorials/webgl/typed_arrays/).
*
* ## UUIDs
*
* UUIDs are always strings and not numbers. Some 16-bit UUIDs, such as '2220' look like integers, but they're not. (The integer 2220 is 0x8AC in hex.) This isn't a problem with 128 bit UUIDs since they look like strings 82b9e6e1-593a-456f-be9b-9215160ebcac. All 16-bit UUIDs should also be passed to methods as strings.
*
*/
exportdeclareclassBLE{
/**
* Scan and discover BLE peripherals for the specified amount of time.
*
* @usage
* ```
* BLE.scan([], 5).subscribe(device => {
* console.log(JSON.stringify(device));
* });
* ```
* @param {string[]} services List of service UUIDs to discover, or `[]` to find all devices
* @param {number} seconds Number of seconds to run discovery
* @return Returns an Observable that notifies of each peripheral that is discovered during the specified time.
* This plugin enables communication between a phone and Bluetooth Low Energy (BLE) peripherals.
*
* The plugin provides a simple JavaScript API for iOS and Android.
*
* - Scan for peripherals
* - Connect to a peripheral
* - Read the value of a characteristic
* - Write new value to a characteristic
* - Get notified when characteristic's value changes
*
* Advertising information is returned when scanning for peripherals. Service, characteristic, and property info is returned when connecting to a peripheral. All access is via service and characteristic UUIDs. The plugin manages handles internally.
*
* Simultaneous connections to multiple peripherals are supported.
*
* ## Peripheral Data
*
* Peripheral Data is passed to the success callback when scanning and connecting. Limited data is passed when scanning.
* Bluetooth advertising data is returned in when scanning for devices. The format format varies depending on your platform. On Android advertising data will be the raw advertising bytes. iOS does not allow access to raw advertising data, so a dictionary of data is returned.
*
* The advertising information for both Android and iOS appears to be a combination of advertising data and scan response data.
*
* ### Android
* ```
* {
* "name": "demo",
* "id": "00:1A:7D:DA:71:13",
* "advertising": ArrayBuffer,
* "rssi": -37
* }
* ```
*
* Convert the advertising info to a Uint8Array for processing. `var adData = new Uint8Array(peripheral.advertising)`
*
* ### iOS
*
* Note that iOS uses the string value of the constants for the [Advertisement Data Retrieval Keys](https://developer.apple.com/library/ios/documentation/CoreBluetooth/Reference/CBCentralManagerDelegate_Protocol/index.html#//apple_ref/doc/constant_group/Advertisement_Data_Retrieval_Keys). This will likely change in the future.
* ```
* {
* "name": "demo",
* "id": "D8479A4F-7517-BCD3-91B5-3302B2F81802",
* "advertising": {
* "kCBAdvDataChannel": 37,
* "kCBAdvDataServiceData": {
* "FED8": {
* "byteLength": 7 // data not shown
* }
* },
* "kCBAdvDataLocalName": "demo",
* "kCBAdvDataServiceUUIDs": ["FED8"],
* "kCBAdvDataManufacturerData": {
* "byteLength": 7 // data not shown
* },
* "kCBAdvDataTxPowerLevel": 32,
* "kCBAdvDataIsConnectable": true
* },
* "rssi": -53
* }
* ```
*
* ## Typed Arrays
*
* This plugin uses typed Arrays or ArrayBuffers for sending and receiving data.
*
* This means that you need convert your data to ArrayBuffers before sending and from ArrayBuffers when receiving.
* ```
* // ASCII only
* function stringToBytes(string) {
* var array = new Uint8Array(string.length);
* for (var i = 0, l = string.length; i < l; i++) {
* array[i] = string.charCodeAt(i);
* }
* return array.buffer;
* }
*
* // ASCII only
* function bytesToString(buffer) {
* return String.fromCharCode.apply(null, new Uint8Array(buffer));
* }
* ```
* You can read more about typed arrays in these articles on [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays) and [HTML5 Rocks](http://www.html5rocks.com/en/tutorials/webgl/typed_arrays/).
*
* ## UUIDs
*
* UUIDs are always strings and not numbers. Some 16-bit UUIDs, such as '2220' look like integers, but they're not. (The integer 2220 is 0x8AC in hex.) This isn't a problem with 128 bit UUIDs since they look like strings 82b9e6e1-593a-456f-be9b-9215160ebcac. All 16-bit UUIDs should also be passed to methods as strings.
*
*/
varBLE=(function(){
functionBLE(){
}
/**
* Scan and discover BLE peripherals for the specified amount of time.
*
* @usage
* ```
* BLE.scan([], 5).subscribe(device => {
* console.log(JSON.stringify(device));
* });
* ```
* @param {string[]} services List of service UUIDs to discover, or `[]` to find all devices
* @param {number} seconds Number of seconds to run discovery
* @return Returns an Observable that notifies of each peripheral that is discovered during the specified time.
*/
BLE.scan=function(services,seconds){
// This Observable is replaced by one from the @Cordova decorator that wraps
// the plugin's callbacks. We provide a dummy one here so TypeScript
// knows that the correct return type is Observable, because there's no way
// for it to know the return type from a decorator.
// See https://github.com/Microsoft/TypeScript/issues/4881
* This plugin allows you to add events to the Calendar of the mobile device.
*
* Requires Cordova plugin: `cordova-plugin-calendar`. For more info, please see the [Calendar plugin docs](https://github.com/EddyVerbruggen/Calendar-PhoneGap-Plugin).
*
*/
exportdeclareclassCalendar{
/**
* Create a calendar. (iOS only)
*
* @usage
* ```
* Calendar.createCalendar('MyCalendar').then(
* (msg) => { console.log(msg); },
* (err) => { console.log(err); }
* );
* ```
*
* @param {string | Object} nameOrOptions either a string name or a options object.
* options:
* calendarName: string the name of the calendar
* calendarColor: string the hex color of the calendar
* @return Returns a Promise
*/
staticcreateCalendar(nameOrOptions: string|{
calendarName: string;
calendarColor: string;
}):Promise<any>;
/**
* Delete a calendar. (iOS only)
*
* @usage
* ```
* Calendar.deleteCalendar('MyCalendar').then(
* (msg) => { console.log(msg); },
* (err) => { console.log(err); }
* );
* ```
*
* @param {string} name Name of the calendar to delete.
* @return Returns a Promise
*/
staticdeleteCalendar(name: string):Promise<any>;
/**
* Returns the default calendar options.
*
* @return Returns an object with the default calendar options:
* This plugin allows you to add events to the Calendar of the mobile device.
*
* Requires Cordova plugin: `cordova-plugin-calendar`. For more info, please see the [Calendar plugin docs](https://github.com/EddyVerbruggen/Calendar-PhoneGap-Plugin).
*
*/
varCalendar=(function(){
functionCalendar(){
}
/**
* Create a calendar. (iOS only)
*
* @usage
* ```
* Calendar.createCalendar('MyCalendar').then(
* (msg) => { console.log(msg); },
* (err) => { console.log(err); }
* );
* ```
*
* @param {string | Object} nameOrOptions either a string name or a options object.
* options:
* calendarName: string the name of the calendar
* calendarColor: string the hex color of the calendar
* @return Returns a Promise
*/
Calendar.createCalendar=function(nameOrOptions){
// This Promise is replaced by one from the @Cordova decorator that wraps
// the plugin's callbacks. We provide a dummy one here so TypeScript
// knows that the correct return type is Promise, because there's no way
// for it to know the return type from a decorator.
// See https://github.com/Microsoft/TypeScript/issues/4881
returnnewPromise(function(res,rej){});
};
/**
* Delete a calendar. (iOS only)
*
* @usage
* ```
* Calendar.deleteCalendar('MyCalendar').then(
* (msg) => { console.log(msg); },
* (err) => { console.log(err); }
* );
* ```
*
* @param {string} name Name of the calendar to delete.
* @return Returns a Promise
*/
Calendar.deleteCalendar=function(name){
// This Promise is replaced by one from the @Cordova decorator that wraps
// the plugin's callbacks. We provide a dummy one here so TypeScript
// knows that the correct return type is Promise, because there's no way
// for it to know the return type from a decorator.
// See https://github.com/Microsoft/TypeScript/issues/4881
returnnewPromise(function(res,rej){});
};
/**
* Returns the default calendar options.
*
* @return Returns an object with the default calendar options:
/** Picture quality in range 0-100. Default is 50 */
quality?: number;
/**
* Choose the format of the return value.
* Defined in navigator.camera.DestinationType. Default is FILE_URI.
* DATA_URL : 0, Return image as base64-encoded string
* FILE_URI : 1, Return image file URI
* NATIVE_URI : 2 Return image native URI
* (e.g., assets-library:// on iOS or content:// on Android)
*/
destinationType?: number;
/**
* Set the source of the picture.
* Defined in navigator.camera.PictureSourceType. Default is CAMERA.
* PHOTOLIBRARY : 0,
* CAMERA : 1,
* SAVEDPHOTOALBUM : 2
*/
sourceType?: number;
/** Allow simple editing of image before selection. */
allowEdit?: boolean;
/**
* Choose the returned image file's encoding.
* Defined in navigator.camera.EncodingType. Default is JPEG
* JPEG : 0 Return JPEG encoded image
* PNG : 1 Return PNG encoded image
*/
encodingType?: number;
/**
* Width in pixels to scale image. Must be used with targetHeight.
* Aspect ratio remains constant.
*/
targetWidth?: number;
/**
* Height in pixels to scale image. Must be used with targetWidth.
* Aspect ratio remains constant.
*/
targetHeight?: number;
/**
* Set the type of media to select from. Only works when PictureSourceType
* is PHOTOLIBRARY or SAVEDPHOTOALBUM. Defined in nagivator.camera.MediaType
* PICTURE: 0 allow selection of still pictures only. DEFAULT.
* Will return format specified via DestinationType
* VIDEO: 1 allow selection of video only, WILL ALWAYS RETURN FILE_URI
* ALLMEDIA : 2 allow selection from all media types
*/
mediaType?: number;
/** Rotate the image to correct for the orientation of the device during capture. */
correctOrientation?: boolean;
/** Save the image to the photo album on the device after capture. */
saveToPhotoAlbum?: boolean;
/**
* Choose the camera to use (front- or back-facing).
* Defined in navigator.camera.Direction. Default is BACK.
* FRONT: 0
* BACK: 1
*/
cameraDirection?: number;
/** iOS-only options that specify popover location in iPad. Defined in CameraPopoverOptions. */
popoverOptions?: CameraPopoverOptions;
}
/**
* iOS-only parameters that specify the anchor element location and arrow direction
* of the popover when selecting images from an iPad's library or album.
*/
exportinterfaceCameraPopoverOptions{
x: number;
y: number;
width: number;
height: number;
/**
* Direction the arrow on the popover should point. Defined in Camera.PopoverArrowDirection
* Matches iOS UIPopoverArrowDirection constants.
* ARROW_UP : 1,
* ARROW_DOWN : 2,
* ARROW_LEFT : 4,
* ARROW_RIGHT : 8,
* ARROW_ANY : 15
*/
arrowDir: number;
}
/**
* Take a photo or capture video.
*
* Requires Cordova plugin: `cordova-plugin-camera`. For more info, please see the [Cordova Camera Plugin Docs](https://github.com/apache/cordova-plugin-camera).
* // imageData is either a base64 encoded string or a file URI
* // If it's base64:
* let base64Image = "data:image/jpeg;base64," + imageData;
* }, (err) => {
* });
* ```
*/
exportdeclareclassCamera{
/**
* Take a picture or video, or load one from the library.
* @param {CameraOptions} options
* @return Returns a Promise that resolves with Base64 encoding of the image data, or the image file URI, depending on cameraOptions, otherwise rejects with an error.
* Remove intermediate image files that are kept in temporary storage after calling camera.getPicture.
* Applies only when the value of Camera.sourceType equals Camera.PictureSourceType.CAMERA and the Camera.destinationType equals Camera.DestinationType.FILE_URI.
* Requires Cordova plugin: `cordova-plugin-camera`. For more info, please see the [Cordova Camera Plugin Docs](https://github.com/apache/cordova-plugin-camera).
* // imageData is either a base64 encoded string or a file URI
* // If it's base64:
* let base64Image = "data:image/jpeg;base64," + imageData;
* }, (err) => {
* });
* ```
*/
varCamera=(function(){
functionCamera(){
}
/**
* Take a picture or video, or load one from the library.
* @param {CameraOptions} options
* @return Returns a Promise that resolves with Base64 encoding of the image data, or the image file URI, depending on cameraOptions, otherwise rejects with an error.
*/
Camera.getPicture=function(options){
// This Promise is replaced by one from the @Cordova decorator that wraps
// the plugin's callbacks. We provide a dummy one here so TypeScript
// knows that the correct return type is Promise, because there's no way
// for it to know the return type from a decorator.
// See https://github.com/Microsoft/TypeScript/issues/4881
returnnewPromise(function(res,rej){});
};
;
/**
* Remove intermediate image files that are kept in temporary storage after calling camera.getPicture.
* Applies only when the value of Camera.sourceType equals Camera.PictureSourceType.CAMERA and the Camera.destinationType equals Camera.DestinationType.FILE_URI.
/** A string that indicates what type of field this is, home for example. */
type:string;
/** The value of the field, such as a phone number or email address. */
value: string;
/** Set to true if this ContactField contains the user's preferred value. */
pref: boolean;
}
exportinterfaceContactAddress{
/** Set to true if this ContactAddress contains the user's preferred value. */
pref?: boolean;
/** A string indicating what type of field this is, home for example. */
type?:string;
/** The full address formatted for display. */
formatted?: string;
/** The full street address. */
streetAddress?: string;
/** The city or locality. */
locality?: string;
/** The state or region. */
region?: string;
/** The zip code or postal code. */
postalCode?: string;
/** The country name. */
country?: string;
}
exportinterfaceContactOrganization{
/** Set to true if this ContactOrganization contains the user's preferred value. */
pref?: boolean;
/** A string that indicates what type of field this is, home for example. */
type?:string;
/** The name of the organization. */
name?: string;
/** The department the contract works for. */
department?: string;
/** The contact's title at the organization. */
title?: string;
}
/**
* Access and manage Contacts on the device.
*
* Requires plugin: `cordova-plugin-contacts`
* For full info, please see the [Cordova Contacts plugin docs](https://github.com/apache/cordova-plugin-contacts)
*
* @usage
*
* ```js
* Contacts.save({
* displayName: "Mr. Ionitron"
* }).then((contact) => {}, (err) => {})
* ```
*
* See the `save()` docs for a full list of fields.
*
*/
exportdeclareclassContacts{
/**
* Create a new Contact object.
*
* @param options {Object} Object whose properties the created Contact should have.
* @return {Contact} Returns the created contact
*/
staticcreate(options: ContactProperties):Contact;
/**
* Search for contacts in the Contacts list.
*
* Example: Contacts.find(['*'], { filter: 'Max' }) // will search for a displayName of 'Max'
*
* @param fields {string[]} Contact fields to be used as a search qualifier.
* A zero-length contactFields parameter is invalid and results in ContactError.INVALID_ARGUMENT_ERROR.
* A contactFields value of "*" searches all contact fields.
*
* @param options {Object} the options to query with:
* filter: The search string used to find navigator.contacts. (string) (Default: "")
* multiple: Determines if the find operation returns multiple navigator.contacts. (Boolean) (Default: false)
* desiredFields: Contact fields to be returned back. If specified, the resulting Contact object only features values for these fields. (DOMString[]) [Optional]
* hasPhoneNumber(Android only): Filters the search to only return contacts with a phone number informed. (Boolean) (Default: false)
*
* @return Returns a Promise that resolves with the search results (an array of Contact objects)
* For full info, please see the [Cordova Contacts plugin docs](https://github.com/apache/cordova-plugin-contacts)
*
* @usage
*
* ```js
* Contacts.save({
* displayName: "Mr. Ionitron"
* }).then((contact) => {}, (err) => {})
* ```
*
* See the `save()` docs for a full list of fields.
*
*/
varContacts=(function(){
functionContacts(){
}
/**
* Create a new Contact object.
*
* @param options {Object} Object whose properties the created Contact should have.
* @return {Contact} Returns the created contact
*/
Contacts.create=function(options){
returnnewContact();
};
;
/**
* Search for contacts in the Contacts list.
*
* Example: Contacts.find(['*'], { filter: 'Max' }) // will search for a displayName of 'Max'
*
* @param fields {string[]} Contact fields to be used as a search qualifier.
* A zero-length contactFields parameter is invalid and results in ContactError.INVALID_ARGUMENT_ERROR.
* A contactFields value of "*" searches all contact fields.
*
* @param options {Object} the options to query with:
* filter: The search string used to find navigator.contacts. (string) (Default: "")
* multiple: Determines if the find operation returns multiple navigator.contacts. (Boolean) (Default: false)
* desiredFields: Contact fields to be returned back. If specified, the resulting Contact object only features values for these fields. (DOMString[]) [Optional]
* hasPhoneNumber(Android only): Filters the search to only return contacts with a phone number informed. (Boolean) (Default: false)
*
* @return Returns a Promise that resolves with the search results (an array of Contact objects)
*/
Contacts.find=function(fields,options){
// This Promise is replaced by one from the @Cordova decorator that wraps
// the plugin's callbacks. We provide a dummy one here so TypeScript
// knows that the correct return type is Promise, because there's no way
// for it to know the return type from a decorator.
// See https://github.com/Microsoft/TypeScript/issues/4881
returnnewPromise(function(res,rej){});
};
;
/**
* Select a single Contact.
* @return Returns a Promise that resolves with the selected Contact
*/
Contacts.pickContact=function(){
// This Promise is replaced by one from the @Cordova decorator that wraps
// the plugin's callbacks. We provide a dummy one here so TypeScript
// knows that the correct return type is Promise, because there's no way
// for it to know the return type from a decorator.
// See https://github.com/Microsoft/TypeScript/issues/4881
/** Get the version of Cordova running on the device. */
cordova: string;
/**
* The device.model returns the name of the device's model or product. The value is set
* by the device manufacturer and may be different across versions of the same product.
*/
model: string;
/** Get the device's operating system name. */
platform: string;
/** Get the device's Universally Unique Identifier (UUID). */
uuid: string;
/** Get the operating system version. */
version: string;
/** Get the device's manufacturer. */
manufacturer: string;
/** Whether the device is running on a simulator. */
isVirtual: boolean;
/** Get the device hardware serial number. */
serial: string;
}
/**
* Access information about the underlying device and platform.
*
* @usage
* ```js
* let info = Device.getDevice();
* ```
*/
exportdeclareclassDevice{
/**
* Returns the whole device object.
*
* @returns {Object} The device object.
*/
staticgetDevice():Device;
}
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.