Compare commits

..

41 Commits

Author SHA1 Message Date
Ibby
1536e98ba4 chore(): update changelog 2017-03-23 14:04:12 -04:00
Ibby
baee422090 3.2.2 2017-03-23 14:03:57 -04:00
Ibby
07de25c90f chore(): update peer dependencies 2017-03-23 14:03:48 -04:00
Ibby
027b10a6dd amend(): greater than should be equal 2017-03-22 22:42:21 -04:00
Ibby
bb4308e7d8 amend(): remove unecessary line 2017-03-22 22:40:24 -04:00
Ibby
eb31e9b2a1 chore(): fix git repo check 2017-03-22 22:40:02 -04:00
Ibby
7af7715f90 chore(): update changelog 2017-03-22 22:16:19 -04:00
Ibby
934e63d34a 3.2.1 2017-03-22 22:16:05 -04:00
Mike Roberts
baff7b3d7c fix(secure-storage): update the pluginRef (#1228)
Fixes the plugin not found issue by using the correct pluginRef.
2017-03-22 22:15:42 -04:00
Ibby Hadeed
acbb3382fe Update README.md 2017-03-22 20:08:30 -04:00
Ibby Hadeed
4bb44f1a18 Update README.md 2017-03-22 20:08:12 -04:00
Ibby Hadeed
edf4c75bbd chore(): modify dist paths (#1213)
* chore(): modify dist paths

* fixes
2017-03-22 19:51:59 -04:00
Ibby
fdffb055be chore(): update changelog 2017-03-22 19:17:11 -04:00
Ibby
d0c680fe3a 3.2.0 2017-03-22 19:16:52 -04:00
Ibby
5cd719d272 docs(jins-meme): fix name 2017-03-22 19:16:38 -04:00
Patrick Reames
9c88cfb577 feat(jins-meme): add support for jins meme smart glasses (#1212)
* (feat) add support for JinsMemeSDK-Plugin-Cordova

* (fix) correct jins-meme plugin name

* #feature/jins-meme initial commit

thanks @patrickr, @jins-meme,  @tjpeden

* import fixes

(no-unused-variable) @ionic-native/plugins/jins-meme/index.ts[1, 10]:
Unused import: 'Injectable'

stream.js:74
throw er; // Unhandled stream error in pipe.
^
Error: Failed to lint: @ionic-native/plugins/jins-meme/index.ts [1, 10]:
Unused import: 'Injectable'.

* update developer guide

as per https://github.com/driftyco/ionic-native/issues/1210

* removed unused import

* Revert "Feature jins meme"

* correct developer docs (#3)

* remove unused import and update documentation

* ihadeed's requested changed

see
https://github.com/driftyco/ionic-native/pull/1212#pullrequestreview-28298382

* usage update

* revert DEVELOPER.md to limit scope of PR
2017-03-22 19:16:10 -04:00
Ibby
fa047d2171 Merge branch 'master' of github.com:driftyco/ionic-native 2017-03-22 19:15:26 -04:00
Ibby
3154fea2b9 refactor(admob): rename package from ad-mob to admob
The package `@ionic-native/ad-mob` is deprecated in favor of `@ionic-native/admob`
2017-03-22 19:15:19 -04:00
Andrzej Przedecki
7b069a3e58 docs(geolocation): fix reference (#1217) 2017-03-22 19:13:21 -04:00
Ibby
602f14771c Merge branch 'master' of github.com:driftyco/ionic-native 2017-03-22 19:04:19 -04:00
Ibby
396bce1710 chore(build): make core dependency flexible 2017-03-22 19:04:13 -04:00
Vasilis Koutsopoulos
82d2ae8c4d fix(media-plugin): MediaPlugin.create promise never fires (#1220) 2017-03-22 18:53:55 -04:00
Nick Holder
0c9eb8e1dd docs(toast): fix typo
Changed thisoast to this.toast
2017-03-22 18:52:13 -04:00
Jamy Timmermans
3830de5d69 docs(deeplinks): change DeepLinks to Deeplinks (#1223) 2017-03-22 18:49:10 -04:00
Ibby
ec0e1ff3a1 docs(): fix broken doc links 2017-03-22 01:49:19 -04:00
Ibby
5d35434866 docs(text-to-speech): fix docs url 2017-03-22 01:44:49 -04:00
Ibby
016f174b53 docs(deeplinks): fix doc name
closes #1215
2017-03-22 01:41:41 -04:00
Ibby Hadeed
997f7a03aa docs(linkedin): fix import reference 2017-03-21 23:12:32 -04:00
Ibby Hadeed
5bf1cbeba3 Update README.md 2017-03-21 16:50:08 -04:00
Ibby
7e174b6e3a chore(): update changelog 2017-03-21 16:42:05 -04:00
Ibby
b52328c07b 3.1.1 2017-03-21 16:41:53 -04:00
Ibby
cb0a3664fd fix(media-plugin): export MediaPlugin class
closes #1207
2017-03-21 16:41:44 -04:00
Andrzej Przedecki
5be6a155e6 docs(push): add registration event example (#1205) 2017-03-21 16:38:14 -04:00
Andrea
2e93c50b7d docs(background-geolocation): fix reference (#1206)
From old BackgroundGeolocation.finish() to new this.backgroundGeolocation.finish();
2017-03-21 16:37:42 -04:00
perry
f122a14445 docs(splash screen) space in name 2017-03-21 14:56:22 -05:00
Max Lynch
53f4ae8e6b Readme 2017-03-21 13:27:42 -05:00
Max Lynch
073535102b README 2017-03-21 12:55:10 -05:00
Perry Govier
5001b9bd25 Merge pull request #1204 from driftyco/doc-update
make native optional tags look like v2 optional tags
2017-03-20 19:32:59 -05:00
Ibby
3d5b9e71a5 edit optional and default values 2017-03-20 20:30:12 -04:00
Ibby
fe3e31d580 chore(): display package name correctly in docs 2017-03-20 20:14:51 -04:00
perry
da109514ae chore(dgeni): fixing npm install instructions 2017-03-20 17:13:47 -05:00
31 changed files with 571 additions and 251 deletions

View File

@@ -1,3 +1,43 @@
<a name="3.2.2"></a>
## [3.2.2](https://github.com/driftyco/ionic-native/compare/v3.2.1...v3.2.2) (2017-03-23)
<a name="3.2.1"></a>
## [3.2.1](https://github.com/driftyco/ionic-native/compare/v3.2.0...v3.2.1) (2017-03-23)
### Bug Fixes
* **secure-storage:** update the pluginRef (#1228) ([baff7b3](https://github.com/driftyco/ionic-native/commit/baff7b3))
<a name="3.2.0"></a>
# [3.2.0](https://github.com/driftyco/ionic-native/compare/v3.1.1...v3.2.0) (2017-03-22)
### Bug Fixes
* **media-plugin:** MediaPlugin.create promise never fires (#1220) ([82d2ae8](https://github.com/driftyco/ionic-native/commit/82d2ae8))
### Features
* **jins-meme:** add support for jins meme smart glasses (#1212) ([9c88cfb](https://github.com/driftyco/ionic-native/commit/9c88cfb))
<a name="3.1.1"></a>
## [3.1.1](https://github.com/driftyco/ionic-native/compare/v3.1.0...v3.1.1) (2017-03-21)
### Bug Fixes
* **media-plugin:** export MediaPlugin class ([cb0a366](https://github.com/driftyco/ionic-native/commit/cb0a366)), closes [#1207](https://github.com/driftyco/ionic-native/issues/1207)
<a name="3.1.0"></a>
# [3.1.0](https://github.com/driftyco/ionic-native/compare/v2.9.0...v3.1.0) (2017-03-20)

141
README.md
View File

@@ -1,13 +1,12 @@
[![Circle CI](https://circleci.com/gh/driftyco/ionic-native.svg?style=shield)](https://circleci.com/gh/driftyco/ionic-native) [![Commitizen friendly](https://img.shields.io/badge/commitizen-friendly-brightgreen.svg)](http://commitizen.github.io/cz-cli/)
[![npm](https://img.shields.io/npm/l/express.svg)](https://www.npmjs.com/package/ionic-native)
[![Circle CI](https://circleci.com/gh/driftyco/ionic-native.svg?style=shield)](https://circleci.com/gh/driftyco/ionic-native) [![Commitizen friendly](https://img.shields.io/badge/commitizen-friendly-brightgreen.svg)](http://commitizen.github.io/cz-cli/) ![](https://img.shields.io/npm/v/@ionic-native/core.svg)
[![NPM](https://nodei.co/npm/ionic-native.png?stars&downloads)](https://nodei.co/npm/ionic-native/)
[![NPM](https://nodei.co/npm-dl/ionic-native.png?months=6&height=2)](https://nodei.co/npm/ionic-native/)
# Ionic Native
Ionic Native is a curated set of wrappers for Cordova plugins that make adding any native functionality you need to your [Ionic 2](http://ionicframework.com/) mobile app easy.
Ionic Native wraps plugin callbacks in a Promise or Observable, providing a common interface for all plugins and making it easy to use plugins with Angular change detection.
## Installation
Run following command to install Ionic Native in your project.
@@ -15,52 +14,151 @@ Run following command to install Ionic Native in your project.
npm install @ionic-native/core --save
```
You also need to install the Ionic Native package for each plugin you want to add. Please see the Ionic Native documentation for complete instructions on how to add and use the plugins.
You also need to install the Ionic Native package for each plugin you want to add. Please see the [Ionic Native documentation](http://ionicframework.com/docs/v2/native/) for complete instructions on how to add and use the plugins.
## Documentation
For the full Ionic Native documentation, please visit [http://ionicframework.com/docs/v2/native/](http://ionicframework.com/docs/v2/native/).
### Promises and Observables
### Basic Usage
Ionic Native wraps plugin callbacks in a Promise or [Observable](https://gist.github.com/staltz/868e7e9bc2a7b8c1f754), providing a common interface for all plugins and ensuring that native events trigger change detection in Angular 2.
To use a plugin, import and add the plugin provider to your `@NgModule`, and then inject it where you wish to use it.
```typescript
// app.module.ts
import { Camera } from '@ionic-native/camera';
...
@NgModule({
...
providers: [
...
Camera
...
]
...
})
export class AppModule { }
```
```typescript
import { Geolocation } from '@ionic-native/geolocation';
import { Platform } from 'ionic-angular';
import { NgZone } from '@angular/core';
@Component({ ... })
export class MyComponent {
constructor(private geolocation: Geolocation, private platform: Platform) {
constructor(private geolocation: Geolocation, private platform: Platform, private ngZone: NgZone) {
platform.ready().then(() => {
// get position
geolocation.getCurrentPosition().then(pos => {
console.log(`lat: ${pos.coords.latitude}, lon: ${pos.coords.longitude}`)
});
// watch position
const watch = geolocation.watchPosition().subscribe(pos => {
console.log(`lat: ${pos.coords.latitude}, lon: ${pos.coords.longitude}`)
// Currently, observables from Ionic Native plugins
// need to run inside of zone to trigger change detection
ngZone.run(() => {
this.position = pos;
})
});
// to stop watching
watch.unsubscribe();
});
}
}
```
### Mocking and Browser Development
Ionic Native 3.x makes it possible to mock plugins and develop nearly the entirety of your app in the browser or in `ionic serve`.
To do this, you need to provide a mock implementation of the plugins you wish to use. Here's an example of mocking the `Camera` plugin to return a stock image while in development:
First import the `Camera` class in your `src/app/app.module.ts` file:
```ts
import { Camera } from '@ionic-native/camera';
```
Then create a new class that extends the `Camera` class with a mock implementation:
```ts
class CameraMock extends Camera {
getPicture(options) {
return new Promise((resolve, reject) => {
resolve("BASE_64_ENCODED_DATA_GOES_HERE");
})
}
}
```
Finally, override the previous `Camera` class in your `providers` for this module:
```ts
providers: [
{ provide: Camera, useClass: CameraMock }
]
```
Here's the full example:
```ts
import { NgModule, ErrorHandler } from '@angular/core';
import { IonicApp, IonicModule, IonicErrorHandler } from 'ionic-angular';
import { MyApp } from './app.component';
import { HomePage } from '../pages/home/home';
import { Camera } from '@ionic-native/camera';
class CameraMock extends Camera {
getPicture(options) {
return new Promise((resolve, reject) => {
resolve("BASE_64_ENCODED_DATA_GOES_HERE");
})
}
}
@NgModule({
declarations: [
MyApp,
HomePage
],
imports: [
IonicModule.forRoot(MyApp)
],
bootstrap: [IonicApp],
entryComponents: [
MyApp,
HomePage
],
providers: [
{provide: ErrorHandler, useClass: IonicErrorHandler},
{ provide: Camera, useClass: CameraMock }
]
})
export class AppModule {}
```
### Runtime Diagnostics
Spent way too long diagnosing an issue only to realize a plugin wasn't firing or installed? Ionic Native lets you know what the issue is and how you can resolve it.
@@ -71,6 +169,9 @@ Spent way too long diagnosing an issue only to realize a plugin wasn't firing or
## Plugin Missing?
Let us know or submit a PR! Take a look at [the Developer Guide](https://github.com/driftyco/ionic-native/blob/master/DEVELOPER.md) for more on how to contribute. :heart:
## Ionic 1/Angular 1 support
Ionic Native 3.x supports Ionic 2.x and above. For Ionic/Angular 1 support, please use version 2 of Ionic Native. See the [2.x README](https://github.com/driftyco/ionic-native/blob/8cd648db5cddd7bdbe2bd78839b19c620cc8c04c/README.md) for usage information.
# Credits
@@ -78,6 +179,8 @@ Ibby Hadeed - [@ihadeed](http://github.com/ihadeed)
Tim Lancina - [@timlancina](http://twitter.com/timlancina)
Mike Hartington - [@mhartington](https://twitter.com/mhartington)
Max Lynch - [@maxlynch](http://twitter.com/maxlynch)
Rob Wormald - [@robwormald](https://twitter.com/robwormald)

View File

@@ -1,6 +1,6 @@
{
"name": "ionic-native",
"version": "3.1.0",
"version": "3.2.2",
"description": "Native plugin wrappers for Cordova and Ionic with TypeScript, ES6+, Promise and Observable support",
"license": "MIT",
"devDependencies": {
@@ -40,7 +40,7 @@
"build": "npm run clean && npm run lint && npm run build:core && npm run build:modules",
"build:core": "ngc -p scripts/build/tsconfig-core.json",
"build:modules": "node scripts/build/build.js",
"clean": "rimraf dist",
"clean": "rimraf dist .tmp",
"shipit": "npm run build && gulp readmes && npm run npmpub",
"npmpub": "node scripts/build/publish.js",
"changelog": "conventional-changelog -p angular -i CHANGELOG.md -s -r 0"

View File

@@ -12,14 +12,14 @@ const ROOT = path.resolve(path.join(__dirname, '../../')), // root ionic-native
PLUGIN_PACKAGE_JSON = require(path.resolve(__dirname, 'plugin-package.json')), // plugin package.json template
PLUGIN_TS_CONFIG = require(path.resolve(__dirname, 'tsconfig-plugin.json')), // plugin tsconfig template
BUILD_TMP = path.resolve(ROOT, '.tmp'), // tmp directory path
BUILD_DIST_ROOT = path.resolve(ROOT, 'dist/packages-dist/@ionic-native'), // dist directory root path
BUILD_PLUGINS_DIST = path.resolve(BUILD_DIST_ROOT, 'plugins'), // plugins dist directory path
BUILD_DIST_ROOT = path.resolve(ROOT, 'dist/@ionic-native'), // dist directory root path
BUILD_CORE_DIST = path.resolve(BUILD_DIST_ROOT, 'core'); // core dist directory path
// dependency versions
const ANGULAR_VERSION = '2.4.8',
RXJS_VERSION = '5.0.1',
const ANGULAR_VERSION = '*',
RXJS_VERSION = '^5.0.1',
MIN_CORE_VERSION = '^3.1.0',
IONIC_NATIVE_VERSION = require(path.resolve(ROOT, 'package.json')).version;
// package dependencies
@@ -28,7 +28,7 @@ const CORE_PEER_DEPS = {
};
const PLUGIN_PEER_DEPS = {
'@ionic-native/core': IONIC_NATIVE_VERSION,
'@ionic-native/core': MIN_CORE_VERSION,
'@angular/core': ANGULAR_VERSION,
'rxjs': RXJS_VERSION
};
@@ -36,13 +36,6 @@ const PLUGIN_PEER_DEPS = {
// set peer dependencies for all plugins
PLUGIN_PACKAGE_JSON.peerDependencies = PLUGIN_PEER_DEPS;
// Delete dist directory and any temporary files
console.log('Removing old TMP directory');
fs.removeSync(BUILD_TMP);
fs.removeSync(BUILD_PLUGINS_DIST);
// Create tmp/dist directories
console.log('Making new TMP directory');
fs.mkdirpSync(BUILD_TMP);
@@ -78,7 +71,7 @@ const addPluginToQueue = pluginName => {
let tsConfigPath;
fs.mkdirpAsync(PLUGIN_BUILD_DIR) // create tmp build dir
.then(() => fs.mkdirpAsync(path.resolve(BUILD_PLUGINS_DIST, pluginName))) // create dist dir
.then(() => fs.mkdirpAsync(path.resolve(BUILD_DIST_ROOT, pluginName))) // create dist dir
.then(() => {
// Write tsconfig.json
@@ -97,7 +90,7 @@ const addPluginToQueue = pluginName => {
packageJson.name = `@ionic-native/${pluginName}`;
packageJson.version = IONIC_NATIVE_VERSION;
return fs.writeJsonAsync(path.resolve(BUILD_PLUGINS_DIST, pluginName, 'package.json'), packageJson);
return fs.writeJsonAsync(path.resolve(BUILD_DIST_ROOT, pluginName, 'package.json'), packageJson);
})
.then(() => {

View File

@@ -7,51 +7,38 @@ const fs = require('fs-extra-promise').useFs(require('fs-extra')),
const ROOT = path.resolve(path.join(__dirname, '../../')),
DIST = path.resolve(ROOT, 'dist', 'packages-dist', '@ionic-native'),
PLUGINS_ROOT = path.resolve(DIST, 'plugins'),
CORE = path.resolve(DIST, 'core');
DIST = path.resolve(ROOT, 'dist', '@ionic-native');
const FLAGS = '--access public'; // add any flags here if you want... (example: --tag alpha)
console.log('Publishing @ionic-native/core');
exec(`npm publish ${CORE} ${FLAGS}`)
.then(() => {
const PACKAGES = fs.readdirSync(DIST);
const PLUGINS = fs.readdirSync(PLUGINS_ROOT);
const QUEUE = queue({
concurrency: 10
});
const QUEUE = queue({
concurrency: 10
});
PLUGINS.forEach(pluginName => {
PACKAGES.forEach(packageName => {
QUEUE.push(done => {
QUEUE.push(done => {
console.log(`Publishing plugin ${pluginName}`);
const pluginPath = path.resolve(PLUGINS_ROOT, pluginName);
exec(`npm publish ${pluginPath} ${FLAGS}`)
.then(() => done())
.catch(done);
});
});
QUEUE.start((err) => {
if (err) {
console.log('Error publishing ionic-native. ', err);
} else {
console.log('Done publishing ionic-native!');
}
});
})
.catch(e => {
console.log('Publish failed');
console.log(e);
console.log(`Publishing @ionic-native/${packageName}`);
const packagePath = path.resolve(DIST, packageName);
exec(`npm publish ${packagePath} ${FLAGS}`)
.then(() => done())
.catch(done);
});
});
QUEUE.start((err) => {
if (err) {
console.log('Error publishing ionic-native. ', err);
} else {
console.log('Done publishing ionic-native!');
}
});

View File

@@ -7,7 +7,7 @@
"emitDecoratorMetadata": true,
"module": "es2015",
"moduleResolution": "node",
"outDir": "../../dist/packages-dist/",
"outDir": "../../dist/",
"rootDir": "../../src/",
"target": "es5",
"skipLibCheck": true,

View File

@@ -7,16 +7,14 @@
"emitDecoratorMetadata": true,
"module": "es2015",
"moduleResolution": "node",
"outDir": "../../../dist/packages-dist/",
"outDir": "../../../dist/@ionic-native/",
"paths": {
"@ionic-native/core": ["../../../dist/packages-dist/@ionic-native/core"]
"@ionic-native/core": ["../../../dist/@ionic-native/core"]
},
"rootDir": "../../../src/",
"rootDir": "../../../src/@ionic-native/plugins/",
"target": "es5",
"skipLibCheck": true,
"lib": ["es2015", "dom"]
},
"files": [
"../../../src/@ionic-native/plugins/{{PLUGIN}}/index.ts"
]
"files": []
}

View File

@@ -2,5 +2,5 @@
"sitePath": "../ionic-site",
"v2DocsDir": "docs/v2/native",
"docsDest": "../ionic-site/content/docs/v2/native",
"pluginDir": "dist/packages-dist/@ionic-native/plugins"
"pluginDir": "dist/@ionic-native"
}

View File

@@ -20,6 +20,7 @@ module.exports = function(currentVersion) {
.processor(require('./processors/remove-private-members'))
.processor(require('./processors/hide-private-api'))
.processor(require('./processors/collect-inputs-outputs'))
.processor(require('./processors/npm-id'))
// for debugging docs
// .processor(function test(){

View File

@@ -17,161 +17,163 @@ module.exports = function(currentVersion) {
return new Package('ionic-v2-docs', [jsdocPackage, nunjucksPackage, typescriptPackage, linksPackage])
// .processor(require('./processors/latest-version'))
.processor(require('./processors/readmes'))
.processor(require('./processors/remove-private-members'))
.processor(require('./processors/hide-private-api'))
// .processor(require('./processors/collect-inputs-outputs'))
// .processor(require('./processors/latest-version'))
.processor(require('./processors/readmes'))
.processor(require('./processors/npm-id'))
.processor(require('./processors/remove-private-members'))
.processor(require('./processors/hide-private-api'))
// .processor(require('./processors/collect-inputs-outputs'))
// for debugging docs
// .processor(function test(){
// return {
//
// $runBefore: ['rendering-docs'],
// $process: function(docs){
// docs.forEach(function(doc){
// if (doc.name == "Camera"){
//
// // console.log(doc.tags);
// // doc.tags.forEach(function(tag){
// // if(tag.tagName == 'classes'){
// //
// // }
// // });
//
// // doc.moduleDoc.exports.forEach(function(d,i){
// // if(d.name === 'CameraOptions') {
// // console.log('Name: ' + d.name);
// // console.log('Type: ' + d.docType);
// // console.log('First member: ', d.members[0]);
// // }
// // });
//
//
// // var exports = doc.exportSymbol.parent.exports;
// // for(var p in exports) {
// // if(p == 'CameraOptions')
// // {
// // var x = exports[p];
// // console.log(x.members.quality);
// // }
// // }
// // doc.members.forEach(function(method){
// // if (method.name === "getPicture") {
// // console.log(method);
// // }
// // })
// }
// })
// }
// }
// })
.config(function(log) {
log.level = 'error'; //'silly', 'debug', 'info', 'warn', 'error'
})
// for debugging docs
// .processor(function test(){
// return {
//
// $runBefore: ['rendering-docs'],
// $process: function(docs){
// docs.forEach(function(doc){
// if (doc.name == "Camera"){
//
// // console.log(doc.tags);
// // doc.tags.forEach(function(tag){
// // if(tag.tagName == 'classes'){
// //
// // }
// // });
//
// // doc.moduleDoc.exports.forEach(function(d,i){
// // if(d.name === 'CameraOptions') {
// // console.log('Name: ' + d.name);
// // console.log('Type: ' + d.docType);
// // console.log('First member: ', d.members[0]);
// // }
// // });
//
//
// // var exports = doc.exportSymbol.parent.exports;
// // for(var p in exports) {
// // if(p == 'CameraOptions')
// // {
// // var x = exports[p];
// // console.log(x.members.quality);
// // }
// // }
// // doc.members.forEach(function(method){
// // if (method.name === "getPicture") {
// // console.log(method);
// // }
// // })
// }
// })
// }
// }
// })
.config(function(log) {
log.level = 'error'; //'silly', 'debug', 'info', 'warn', 'error'
})
.config(function(renderDocsProcessor, computePathsProcessor) {
.config(function(renderDocsProcessor, computePathsProcessor) {
versions = [];
// new version, add it to the versions list
if (currentVersion != 'nightly' && !_.includes(versions, currentVersion)) {
versions.unshift(currentVersion);
}
//First semver valid version is latest
var latestVersion = _.find(versions, semver.valid);
versions = versions.map(function(version) {
// We don't separate by versions so always put the docs in the root
var folder = '';
return {
href: '/' + config.v2DocsDir.replace('content/', ''),
folder: folder,
name: version
};
});
versions = [];
// new version, add it to the versions list
if (currentVersion != 'nightly' && !_.includes(versions, currentVersion)) {
versions.unshift(currentVersion);
}
//First semver valid version is latest
var latestVersion = _.find(versions, semver.valid);
versions = versions.map(function(version) {
// We don't separate by versions so always put the docs in the root
var folder = '';
return {
href: '/' + config.v2DocsDir.replace('content/', ''),
folder: folder,
name: version
};
});
var versionData = {
list: versions,
current: _.find(versions, {name: currentVersion}),
latest: _.find(versions, {name: latestVersion}) || _.first(versions)
};
var versionData = {
list: versions,
current: _.find(versions, {name: currentVersion}),
latest: _.find(versions, {name: latestVersion}) || _.first(versions)
};
renderDocsProcessor.extraData.version = versionData;
computePathsProcessor.pathTemplates = [{
docTypes: ['class'],
getOutputPath: function(doc) {
return doc.originalModule.replace(config.pluginDir + '/', '')
.replace('/index', '') + '/README.md';
}
}];
})
renderDocsProcessor.extraData.version = versionData;
computePathsProcessor.pathTemplates = [{
docTypes: ['class'],
getOutputPath: function(doc) {
return doc.originalModule.replace(config.pluginDir + '/', '')
.replace('/plugins', '')
.replace('/index', '') + '/README.md';
}
}];
})
//configure file reading
.config(function(readFilesProcessor, readTypeScriptModules) {
//configure file reading
.config(function(readFilesProcessor, readTypeScriptModules) {
// Don't run unwanted processors since we are not using the normal file reading processor
readFilesProcessor.$enabled = false;
readFilesProcessor.basePath = path.resolve(__dirname, '../..');
// Don't run unwanted processors since we are not using the normal file reading processor
readFilesProcessor.$enabled = false;
readFilesProcessor.basePath = path.resolve(__dirname, '../..');
readTypeScriptModules.basePath = path.resolve(path.resolve(__dirname, '../..'));
readTypeScriptModules.sourceFiles = ['./src/@ionic-native/plugins/**/*.ts'];
})
readTypeScriptModules.basePath = path.resolve(path.resolve(__dirname, '../..'));
readTypeScriptModules.sourceFiles = ['./src/@ionic-native/plugins/**/*.ts'];
})
.config(function(parseTagsProcessor) {
parseTagsProcessor.tagDefinitions = parseTagsProcessor.tagDefinitions
.concat(require('./tag-defs/tag-defs'));
})
.config(function(parseTagsProcessor) {
parseTagsProcessor.tagDefinitions = parseTagsProcessor.tagDefinitions
.concat(require('./tag-defs/tag-defs'));
})
// .config(function(parseTagsProcessor) {
// // We actually don't want to parse param docs in this package as we are
// // getting the data out using TS
// parseTagsProcessor.tagDefinitions.forEach(function(tagDef) {
// console.log(tagDef);
// if (tagDef.name === 'param') {
// tagDef.docProperty = 'paramData';
// tagDef.transforms = [];
// }
// });
// })
// .config(function(parseTagsProcessor) {
// // We actually don't want to parse param docs in this package as we are
// // getting the data out using TS
// parseTagsProcessor.tagDefinitions.forEach(function(tagDef) {
// console.log(tagDef);
// if (tagDef.name === 'param') {
// tagDef.docProperty = 'paramData';
// tagDef.transforms = [];
// }
// });
// })
// Configure links
.config(function(getLinkInfo) {
getLinkInfo.useFirstAmbiguousLink = false;
})
// Configure links
.config(function(getLinkInfo) {
getLinkInfo.useFirstAmbiguousLink = false;
})
// Configure file writing
.config(function(writeFilesProcessor) {
writeFilesProcessor.outputFolder = './dist/packages-dist/';
})
// Configure file writing
.config(function(writeFilesProcessor) {
writeFilesProcessor.outputFolder = './dist/';
})
// Configure rendering
.config(function(templateFinder, templateEngine) {
// Configure rendering
.config(function(templateFinder, templateEngine) {
// Nunjucks and Angular conflict in their template bindings so change the Nunjucks
// Also conflict with Jekyll
templateEngine.config.tags = {
variableStart: '<$',
variableEnd: '$>',
blockStart: '<@',
blockEnd: '@>',
commentStart: '<#',
commentEnd: '#>'
};
// Nunjucks and Angular conflict in their template bindings so change the Nunjucks
// Also conflict with Jekyll
templateEngine.config.tags = {
variableStart: '<$',
variableEnd: '$>',
blockStart: '<@',
blockEnd: '@>',
commentStart: '<#',
commentEnd: '#>'
};
// add custom filters to nunjucks
templateEngine.filters.push(
require('./filters/capital'),
require('./filters/code'),
require('./filters/dump')
);
// add custom filters to nunjucks
templateEngine.filters.push(
require('./filters/capital'),
require('./filters/code'),
require('./filters/dump')
);
templateFinder.templateFolders.unshift(path.resolve(__dirname, 'templates'));
templateFinder.templateFolders.unshift(path.resolve(__dirname, 'templates'));
// Specify how to match docs to templates.
templateFinder.templatePatterns = [
'${ doc.template }',
'${ doc.docType }.template.md',
'readme.template.md'
];
});
// Specify how to match docs to templates.
templateFinder.templatePatterns = [
'${ doc.template }',
'${ doc.docType }.template.md',
'readme.template.md'
];
});
};

View File

@@ -1,5 +1,8 @@
var config = require('../config.json');
var projectPackage = require('../../package.json');
var path = require('path');
var fs = require('fs-extra-promise').useFs(require('fs-extra'));
module.exports = function(gulp) {
gulp.task('docs', [], function() {
var Dgeni = require('dgeni');
@@ -18,6 +21,9 @@ module.exports = function(gulp) {
gulp.task('readmes', [], function() {
var Dgeni = require('dgeni');
var semver = require('semver');
fs.copySync(path.resolve(__dirname, '..', '..', 'README.md'), path.resolve(__dirname, '..', '..', config.pluginDir, 'core', 'README.md'));
try {
var ionicPackage = require('./dgeni-readmes-config')(projectPackage.version);
var dgeni = new Dgeni([ionicPackage]);

View File

@@ -0,0 +1,25 @@
module.exports = function npmId(renderDocsProcessor) {
return {
name: 'npm-id',
$runAfter: ['paths-computed'],
$runBefore: ['rendering-docs'],
$process: function(docs) {
var currentVersion = renderDocsProcessor.extraData.version.current.name;
// pretty up and sort the docs object for menu generation
docs = docs.filter(function(doc) {
return (!!doc.name && !!doc.outputPath) || doc.docType === 'index-page';
});
docs.forEach(function(doc, i) {
doc.npmId = doc.outputPath.replace('/README.md', '') // for readmes
.replace('@ionic-native/plugins/','') // for readmes
.replace('content/docs/v2/native/', '') // for docs
.replace('/index.md', ''); // for docs
});
// returning docs will replace docs object in the next process
return docs;
}
};
};

View File

@@ -1,4 +1,4 @@
module.exports = function jekyll(renderDocsProcessor) {
module.exports = function readmes(renderDocsProcessor) {
return {
name: 'readmes',
description: 'Create jekyll includes',
@@ -13,8 +13,6 @@ module.exports = function jekyll(renderDocsProcessor) {
});
docs.forEach(function(doc, i) {
doc.npmId = doc.outputPath.replace('/README.md', '')
.replace('src/@ionic-native/plugins/','');
doc.outputPath = doc.outputPath.replace('src/', '');
});

View File

@@ -27,13 +27,13 @@ docType: "<$ doc.docType $>"
<tr>
<td>
<$ param.name $>
<@ if param.optional @><div><em>(optional)</em></div><@ endif @>
</td>
<td>
<code><$ param.returnType | escape $></code>
</td>
<td>
<$ param.description | marked $>
<@ if param.optional @><strong class="tag">Optional</strong><@ endif @>
</td>
</tr>
<@ endfor @>
@@ -71,14 +71,14 @@ docType: "<$ doc.docType $>"
<td>
<$ param.name $>
<@ if param.alias @>| <$ param.alias $><@ endif @>
<@ if param.type.optional @><div><em>(optional)</em></div><@ endif @>
</td>
<td>
<$ typeList(param.typeList) $>
</td>
<td>
<$ param.description | marked $>
<@ if param.default @><p><em>(default: <$ param.default $>)</em></p><@ endif @>
<@ if param.optional @><strong class="tag">Optional</strong><@ endif @>
<@ if param.defaultValue @><p><em>(default: <$ param.defaultValue $>)</em></p><@ endif @>
</td>
</tr>
<@ endfor @>
@@ -224,9 +224,8 @@ docType: "<$ doc.docType $>"
</p>
<@ endif @>
<pre><code>
$ <@ if prop.install @><$ prop.install $><@ else @>ionic plugin add <$ prop.plugin $><@ endif @>
$ npm install --save @ionic-native/<$ prop.pluginRef $>
<pre><code>$ <@ if prop.install @><$ prop.install $><@ else @>ionic plugin add <$ prop.plugin $><@ endif @>
$ npm install --save @ionic-native/<$ doc.npmId $>
</code></pre>
<p>Repo:
<a href="<$ prop.repo $>">

View File

@@ -23,16 +23,18 @@ function run {
# CD in to the site dir to commit updated docs
cd $SITE_DIR
# Add all files to git
git add .
# if no changes, don't commit
CHANGED=$(git diff-index --name-only HEAD --)
if [ -z "$CHANGED" ];
CHANGED=$(git diff-index --name-only HEAD 2>/dev/null | wc -l)
if [ $CHANGED -eq 0 ];
then
echo "-- No changes detected for the following commit, docs not updated."
echo "https://github.com/driftyco/$CIRCLE_PROJECT_REPONAME/commit/$CIRCLE_SHA1"
else
git config --global user.email "hi@ionicframework.com"
git config --global user.name "Ionitron"
git add -A
git commit -am "Automated build of native docs driftyco/$CIRCLE_PROJECT_REPONAME@$CIRCLE_SHA1"
# in case a different commit was pushed to ionic-site during doc/demo gen,
# try to rebase around it before pushing

View File

@@ -288,7 +288,7 @@ export interface BackgroundGeolocationConfig {
* // IMPORTANT: You must execute the finish method here to inform the native plugin that you're finished,
* // and the background-task may be completed. You must do this regardless if your HTTP request is successful or not.
* // IF YOU DON'T, ios will CRASH YOUR APP for spending too much time in the background.
* BackgroundGeolocation.finish(); // FOR IOS ONLY
* this.backgroundGeolocation.finish(); // FOR IOS ONLY
*
* });
*

View File

@@ -24,7 +24,7 @@ export interface DeeplinkMatch {
}
/**
* @name Ionic Deeplinks
* @name Deeplinks
* @description This plugin handles deeplinks on iOS and Android for both custom URL scheme links
* and Universal App Links.
*
@@ -32,9 +32,9 @@ export interface DeeplinkMatch {
* ```typescript
* import { Deeplinks } from '@ionic-native/deeplinks';
*
* constructor(private deepLinks: DeepLinks) { }
* constructor(private deeplinks: Deeplinks) { }
*
* this.deepLinks.route({
* this.deeplinks.route({
* '/about-us': AboutPage,
* '/universal-links-test': AboutPage,
* '/products/:productId': ProductPage
@@ -53,7 +53,7 @@ export interface DeeplinkMatch {
* the actual navigation for you:
*
* ```typescript
* this.deepLinks.routeWithNavController(this.navController, {
* this.deeplinks.routeWithNavController(this.navController, {
* '/about-us': AboutPage,
* '/products/:productId': ProductPage
* }).subscribe((match) => {

View File

@@ -21,7 +21,7 @@ export interface FingerprintOptions {
/**
* @beta
* @name FingerprintAIO
* @name Fingerprint AIO
* @description
* Use simple fingerprint authentication on Android and iOS.
* Requires Cordova plugin: cordova-plugin-fingerprint-aio. For more info about plugin, vist: https://github.com/NiklasMerz/cordova-plugin-fingerprint-aio

View File

@@ -122,15 +122,20 @@ export interface GeolocationOptions {
* ```typescript
* import { Geolocation } from '@ionic-native/geolocation';
*
* ...
*
* Geolocation.getCurrentPosition().then((resp) => {
* constructor(private geolocation: Geolocation) {}
*
* ...
*
* this.geolocation.getCurrentPosition().then((resp) => {
* // resp.coords.latitude
* // resp.coords.longitude
* }).catch((error) => {
* console.log('Error getting location', error);
* });
*
* let watch = Geolocation.watchPosition();
* let watch = this.geolocation.watchPosition();
* watch.subscribe((data) => {
* // data can be a set of coordinates, or an error (if an error occurred).
* // data.coords.latitude

View File

@@ -0,0 +1,158 @@
import { Injectable } from '@angular/core';
import { Plugin, Cordova, CordovaCheck } from '@ionic-native/core';
import { Observable } from 'rxjs/Observable';
declare var cordova: any;
/**
* @name Jins Meme
* @description
* Implementation of the JINS MEME SDK
*
* @usage
* ```
* import { JinsMeme } from '@ionic-native/jins-meme';
*
* constructor(private jinsMeme: JinsMeme) { }
*
* ...
*
* this.jinsMeme.setAppClientID(appClientId: string, clientSecret: string)
* .then(this.jinsMeme.startScan())
* .catch(console.log('jinsMeme.setAppClientID authentication error!'));
*
* ```
*/
@Plugin({
pluginName: 'Jins Meme',
plugin: 'JinsMemeSDK-Plugin-Cordova',
pluginRef: 'cordova.plugins.JinsMemePlugin',
repo: 'https://github.com/jins-meme/JinsMemeSDK-Plugin-Cordova.git'
})
@Injectable()
export class JinsMeme {
/**
* Authentication and authorization of App and SDK.
* Must call this method at first.
*
*@param {string} setAppClientID
*@param {string} clientSecret
*@returns {Promise<any>}
*/
@Cordova()
setAppClientID(appClientId: string, clientSecret: string): Promise<any> { return; }
/**
* Starts scanning for JINS MEME.
* @returns {Observable<any>}
*/
@Cordova({
observable: true,
clearFunction: 'stopScan',
clearWithArgs: true
})
startScan(): Observable<any> { return; }
/**
* Stops scanning JINS MEME.
* @returns {Promise<any>}
*/
@Cordova()
stopScan(): Promise<any> { return; }
/**
* Establishes connection to JINS MEME.
* @param {string} target
* @returns {Observable<any>}
*/
@CordovaCheck({
observable: true
})
connect(target: string): Observable<any> {
return new Observable<any>((observer: any) => {
let data = cordova.plugins.JinsMemePlugin.connect(target, observer.next.bind(observer), observer.complete.bind(observer), observer.error.bind(observer));
return () => console.log(data);
});
}
/**
* Set auto connection mode.
*@param {Boolean} flag
*@returns {Promise<any>}
*/
@Cordova()
setAutoConnect(flag: boolean): Promise<any> { return; }
/**
* Returns whether a connection to JINS MEME has been established.
*@returns {Promise<any>}
*/
@Cordova()
isConnected(): Promise<any> { return; }
/**
* Disconnects from JINS MEME.
*@returns {Promise<any>}
*/
@Cordova()
disconnect(): Promise<any> { return; }
/**
* Starts receiving realtime data.
* @returns {Observable<any>}
*/
@Cordova({
observable: true,
clearFunction: 'stopDataReport',
clearWithArgs: true
})
startDataReport(): Observable<any> { return; }
/**
* Stops receiving data.
*@returns {Promise<any>}
*/
@Cordova()
stopDataReport(): Promise<any> { return; }
/**
* Returns SDK version.
*
*@returns {Promise<any>}
*/
@Cordova()
getSDKVersion(): Promise<any> { return; }
/**
* Returns JINS MEME connected with other apps.
*@returns {Promise<any>}
*/
@Cordova()
getConnectedByOthers(): Promise<any> { return; }
/**
* Returns calibration status
*@returns {Promise<any>}
*/
@Cordova()
isCalibrated(): Promise<any> { return; }
/**
* Returns device type.
*@returns {Promise<any>}
*/
@Cordova()
getConnectedDeviceType(): Promise<any> { return; }
/**
* Returns hardware version.
*@returns {Promise<any>}
*/
@Cordova()
getConnectedDeviceSubType(): Promise<any> { return; }
/**
* Returns FW Version.
*@returns {Promise<any>}
*/
@Cordova()
getFWVersion(): Promise<any> { return; }
/**
* Returns HW Version.
*@returns {Promise<any>}
*/
@Cordova()
getHWVersion(): Promise<any> { return; }
/**
* Returns response about whether data was received or not.
*@returns {Promise<any>}
*/
@Cordova()
isDataReceiving(): Promise<any> { return; }
}

View File

@@ -12,7 +12,7 @@ export type LinkedInLoginScopes = 'r_basicprofile' | 'r_emailaddress' | 'rw_comp
*
* @usage
* ```
* import { LinkedIn } from 'ionic-native';
* import { LinkedIn } from '@ionic-native/linkedin';
*
* constructor(private linkedin: LinkedIn) { }
*

View File

@@ -14,7 +14,7 @@ export class MediaObject {
* @param src {string} A URI containing the audio content.
* @param onStatusUpdate {Function} A callback function to be invoked when the status of the file changes
*/
constructor(private _objectInstnace: any) {}
constructor(private _objectInstance: any) {}
/**
* Get the current amplitude of the current recording.
@@ -201,7 +201,7 @@ export class MediaObject {
pluginRef: 'Media'
})
@Injectable()
class MediaPlugin {
export class MediaPlugin {
// Constants
/**
@@ -256,7 +256,8 @@ class MediaPlugin {
// Creates a new media object
// Resolves with the media object
// or rejects with the error
const instance = new Media(src, () => resolve(new Media(instance)), reject, onStatusUpdate);
const instance = new Media(src, resolve, reject, onStatusUpdate);
return resolve(new MediaObject(instance));
});
}

View File

@@ -229,6 +229,8 @@ export type PushEvent = 'registration' | 'error' | 'notification';
*
* pushObject.on('notification').subscribe(notification => console.log('Received a notification', notification));
*
* pushObject.on('registration').subscribe(registration => console.log('Device registered', registration));
*
* pushObject.on('error').subscribe(error => console.error('Error with Push plugin', error));
*
*

View File

@@ -90,7 +90,7 @@ export class SecureStorageObject {
@Plugin({
pluginName: 'SecureStorage',
plugin: 'cordova-plugin-secure-storage',
pluginRef: 'plugins.securestorage',
pluginRef: 'cordova.plugins.SecureStorage',
repo: 'https://github.com/Crypho/cordova-plugin-secure-storage',
platforms: ['Android', 'iOS', 'Windows Phone', 'Browser']
})

View File

@@ -45,7 +45,7 @@ export interface SpeechRecognitionListeningOptionsAndroid {
/**
* @beta
* @name SpeechRecognition
* @name Speech Recognition
* @description
* This plugin does speech recognition using cloud services
*

View File

@@ -3,7 +3,7 @@ import { Cordova, Plugin } from '@ionic-native/core';
/**
* @name SplashScreen
* @name Splash Screen
* @description This plugin displays and hides a splash screen during application launch. The methods below allows showing and hiding the splashscreen after the app has loaded.
* @usage
* ```typescript

View File

@@ -11,7 +11,7 @@ export interface TTSOptions {
}
/**
* @name TextToSpeech
* @name Text To Speech
* @description
* Text to Speech plugin
*

View File

@@ -51,7 +51,7 @@ export interface ToastOptions {
*
* ...
*
* thisoast.show("I'm a toast", '5000', 'center').subscribe(
* this.toast.show("I'm a toast", '5000', 'center').subscribe(
* toast => {
* console.log(toast);
* }

View File

@@ -18,7 +18,7 @@ export interface VideoOptions {
}
/**
* @name VideoPlayer
* @name Video Player
* @description
* A Codova plugin that simply allows you to immediately play a video in fullscreen mode.
*

View File

@@ -8,7 +8,7 @@
"module": "es2015",
"moduleResolution": "node",
"paths": {
"@ionic-native/core": ["./dist/packages-dist/@ionic-native/core"]
"@ionic-native/core": ["./dist/@ionic-native/core"]
},
"rootDir": ".",
"target": "es5",