awesome-cordova-plugins/DEVELOPER.md

234 lines
10 KiB
Markdown
Raw Permalink Normal View History

2016-02-19 01:55:47 +08:00
# Ionic Native Developer Guide
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.
2020-05-16 20:40:49 +08:00
```
// 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.
2020-05-16 20:40:49 +08:00
gulp plugin:create -n PluginName
chore(): merge v3-injectable into master (#1203) * 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 00eb5cf5d8aaac9d798f9d8450e0f35f57ffb52a. * (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
2017-03-21 04:38:14 +08:00
// add -m flag to get a minimal template to start with
gulp plugin:create -m -n PluginName
```
Running the command above will create a new directory `src/@ionic-native/plugins/plugin-name/` with a single file in there: `index.ts`. This file is where all the plugin definitions should be.
2016-02-19 01:55:47 +08:00
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):
```
@Plugin({
plugin: 'cordova-plugin-geolocation',
pluginRef: 'navigator.geolocation'
})
chore(): merge v3-injectable into master (#1203) * 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 00eb5cf5d8aaac9d798f9d8450e0f35f57ffb52a. * (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
2017-03-21 04:38:14 +08:00
@Injectable()
2016-02-19 01:55:47 +08:00
export class Geolocation {
@Cordova()
chore(): merge v3-injectable into master (#1203) * 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 00eb5cf5d8aaac9d798f9d8450e0f35f57ffb52a. * (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
2017-03-21 04:38:14 +08:00
getCurrentPosition(options?: GeolocationOptions): Promise<Geoposition> { return; }
2016-02-19 01:55:47 +08:00
@Cordova({
callbackOrder: 'reverse',
observable: true,
clearFunction: 'clearWatch'
})
chore(): merge v3-injectable into master (#1203) * 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 00eb5cf5d8aaac9d798f9d8450e0f35f57ffb52a. * (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
2017-03-21 04:38:14 +08:00
watchPosition(options?: GeolocationOptions): Observable<Geoposition> { return; }
2016-02-19 01:55:47 +08:00
}
```
### The Plugin Class
First and foremost, we want to create a class representing our plugin, in this case Geolocation.
```
chore(): merge v3-injectable into master (#1203) * 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 00eb5cf5d8aaac9d798f9d8450e0f35f57ffb52a. * (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
2017-03-21 04:38:14 +08:00
@Injectable()
2016-02-19 01:55:47 +08:00
class Geolocation {
}
```
#### Class Metadata
Next, we need to specify some information about this plugin. Ionic Native is written in [TypeScript](http://www.typescriptlang.org/) and makes use of a feature called [decorators](https://github.com/Microsoft/TypeScript-Handbook/blob/master/pages/Decorators.md). Long story short, decorators allow us to modify or add info to classes and properties using a declarative syntax.
For example, the `@Plugin` decorator adds information about the plugin to our Geolocation class:
```
@Plugin({
plugin: 'cordova-plugin-geolocation',
pluginRef: 'navigator.geolocation'
})
chore(): merge v3-injectable into master (#1203) * 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 00eb5cf5d8aaac9d798f9d8450e0f35f57ffb52a. * (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
2017-03-21 04:38:14 +08:00
@Injectable()
2016-02-19 01:55:47 +08:00
export class Geolocation {
}
```
Here, `plugin` is the name of the plugin package on npm and used when calling `cordova plugin add`.
2016-02-19 01:55:47 +08:00
2020-05-16 20:40:49 +08:00
`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`.
2016-02-19 01:55:47 +08:00
#### Class Methods
Now all that's left is to add the plugin methods, in this case `getCurrentPosition` and `watchPosition`.
Let's take a look at `getCurrentPosition` first.
```
@Cordova()
chore(): merge v3-injectable into master (#1203) * 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 00eb5cf5d8aaac9d798f9d8450e0f35f57ffb52a. * (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
2017-03-21 04:38:14 +08:00
getCurrentPosition(options?: GeolocationOptions): Promise<Geoposition> { return }
2016-02-19 01:55:47 +08:00
```
2016-03-11 09:33:43 +08:00
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>`.
2016-03-11 09:29:05 +08:00
2020-05-16 20:40:49 +08:00
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.
2016-02-19 01:55:47 +08:00
Next, let's look at the `watchPosition` method.
```
@Cordova({
callbackOrder: 'reverse',
observable: true,
clearFunction: 'clearWatch'
})
chore(): merge v3-injectable into master (#1203) * 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 00eb5cf5d8aaac9d798f9d8450e0f35f57ffb52a. * (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
2017-03-21 04:38:14 +08:00
watchPosition(options?: GeolocationOptions): Observable<Geoposition> { return }
2016-02-19 01:55:47 +08:00
```
The `@Cordova` decorator has a few more options now.
`observable` indicates that this method may call its callbacks multiple times, so `@Cordova` wraps it in an [`Observable`](https://github.com/ionic-team/ionic-native#promises-and-observables) instead of a Promise.
2016-02-19 01:55:47 +08:00
2020-05-16 20:40:49 +08:00
`callbackOrder` refers to the method signature of the underlying Cordova plugin, and tells Ionic Native which arguments are the callbacks to map to the wrapping Promise or Observable. In this case, the signature is [`watchPosition(success, error, options)`](https://github.com/apache/cordova-plugin-geolocation#navigatorgeolocationwatchposition), so we need to tell `@Cordova` that the callbacks are the first arguments, not the last arguments. For rare cases, you can also specify the options `successIndex` and `errorIndex` to indicate where in the argument list the callbacks are located.
2016-02-19 01:55:47 +08:00
`clearFunction` is used in conjunction with the `observable` option and indicates the function to be called when the Observable is disposed.
2016-05-16 14:44:51 +08:00
### Testing your changes
You need to run `npm run build` in the `ionic-native` project, this will create a `dist` directory. The `dist` directory will contain a sub directory `@ionic-native` with all the packages compiled in there. Copy the package(s) you created/modified to your app's node_modules under the `@ionic-native` directory. (e.g. `cp -r dist/@ionic-native/plugin-name ../my-app/node_modules/@ionic-native/`).
2016-05-16 14:44:51 +08:00
2016-06-10 18:17:17 +08:00
### Cleaning the code
You need to run `npm run lint` to analyze the code and ensure its consistency with the repository style. Fix any errors before submitting a PR.
2016-06-10 18:17:17 +08:00
2016-02-19 01:55:47 +08:00
### 'Wrapping' Up
That's it! The only thing left to do is rigorously document the plugin and its 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
2020-05-16 20:40:49 +08:00
Must be one of the following:
2020-05-16 20:40:49 +08:00
- **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
2020-05-16 20:40:49 +08:00
The scope could be anything specifying place of the commit change. For example, the name of the plugin being changed
#### Subject
2020-05-16 20:40:49 +08:00
The subject contains succinct description of the change:
2020-05-16 20:40:49 +08:00
- 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 Decorators
#### Plugin
2020-05-16 20:40:49 +08:00
A decorator to wrap the main plugin class, and any other classes that will use `@Cordova` or `@CordovaProperty` decorators. This decorator accepts the following configuration:
2020-05-16 20:40:49 +08:00
- _pluginName_: Plugin name, this should match the class name
- _plugin_: The plugin's NPM package, or Github URL if NPM is not available.
- _pluginRef_: The plugin object reference. Example: 'cordova.file'.
- _repo_: The plugin's Github Repository URL
- _install_: (optional) Install command. This is used in case a plugin has a custom install command (takes variables).
- _platforms_: An array of strings indicating the supported platforms.
#### Cordova
2020-05-16 20:40:49 +08:00
Checks if the plugin and the method are available before executing. By default, the decorator will wrap the callbacks of the function and return a Promise. This decorator takes the following configuration options:
2020-05-16 20:40:49 +08:00
- **observable**: set to true to return an Observable
- **methodName**: an optional name of the cordova plugins method name (if different from wrappers method name)
- **clearFunction**: an optional name of a method to clear the observable we returned
- **clearWithArgs**: This can be used if clearFunction is set. Set this to true to call the clearFunction with the same arguments used in the initial function.
- **sync**: set to true if the method should return the value as-is without wrapping with Observable/Promise
- **callbackOrder**: set to `reverse` if the success and error callbacks are the first two arguements of the method
- **callbackStyle**: set to `node` if the plugin has one callback with a node style (e.g: `function(err, result){}`), or set to `object` if the callbacks are part of an object
- **successName**: Success function property name. This must be set if callbackStyle is set to object.
- **errorName**: Error function property name. This must be set if callbackStyle is set to object.
- **successIndex**: Set a custom index for the success callback function. This doesn't work if callbackOrder or callbackStyle are set.
- **errorIndex**: Set a custom index for the error callback function. This doesn't work if callbackOrder or callbackStyle are set.
- **eventObservable**: set to true to return an observable that wraps an event listener
- **event**: Event name, this must be set if eventObservable is set to true
- **element**: Element to attach the event listener to, this is optional, defaults to `window`
- **otherPromise**: Set to true if the wrapped method returns a promise
- **platforms**: array of strings indicating supported platforms. Specify this if the supported platforms doesn't match the plugin's supported platforms.
Example:
2020-05-16 20:40:49 +08:00
```ts
@Cordova()
someMethod(): Promise<any> { return; }
@Cordova({ sync: true })
syncMethod(): number { }
```
#### CordovaProperty
2020-05-16 20:40:49 +08:00
Checks if the plugin and property exist before getting/setting the property's value
Example:
2020-05-16 20:40:49 +08:00
```ts
@CordovaProperty()
someProperty: string;
```
#### CordovaCheck
2020-05-16 20:40:49 +08:00
Checks if the plugin exists before performing a custom written method. By default, the method will return a promise that will reject with an error if the plugin is not available. This wrapper accepts two optional configurations:
- **observable**: set to true to return an empty Observable if the plugin isn't available
- **sync**: set to true to return nothing if the plugin isn't available
Example:
2020-05-16 20:40:49 +08:00
```ts
@CordovaCheck()
someMethod(): Promise<any> {
// anything here will only run if the plugin is available
}
```
#### CordovaFunctionOverride
2020-05-16 20:40:49 +08:00
Wrap a stub function in a call to a Cordova plugin, checking if both Cordova and the required plugin are installed.
Example:
2020-05-16 20:40:49 +08:00
```ts
@CordovaFunctionOverride()
someMethod(): Observable<any> { return; }
```