diff --git a/.gitignore b/.gitignore
index 40b878d..48e4eaa 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,2 @@
-node_modules/
\ No newline at end of file
+node_modules/
+.npmrc
\ No newline at end of file
diff --git a/README.md b/README.md
index d78cd44..eaba328 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,12 @@
[![npm version](https://badge.fury.io/js/angular2-qrcode.svg)](https://badge.fury.io/js/angular2-qrcode)
# angular2-qrcode
-angular2-qrcode is a component that you can easily integrate into your project. It relies on [qrcode-generator](https://github.com/kazuhikoarase/qrcode-generator) to generate QR Codes.
+angular2-qrcode is a component that you can easily integrate into your project. It relies on [qrious](https://github.com/neocotic/qrious) to generate QR Codes.
+
+## Breaking Changes for 2.0.0
+
+`data` has been replaced with `value`. For those that don't need the new features of `2.0.0`, just keep using `1.0.5`. No change will be needed unless you upgrade.
+
+The `type` field has also been removed.
## Install
@@ -27,7 +33,7 @@ import { QRCodeModule } from 'angular2-qrcode';
In component template:
```
-
+
```
@@ -42,7 +48,7 @@ import {QRCodeComponent} from 'angular2-qrcode';
directives: [QRCodeComponent],
template: `
-
+
`
})
@@ -52,14 +58,16 @@ import {QRCodeComponent} from 'angular2-qrcode';
| Attribute | Type | Default | Description |
| ------------- |-------------| -----|------------|
-| data | String | '' | Your data string |
-| size | Number | 128 | This is the height/width of your QR Code component |
-| level | String | 'M' | QR Correction level ('L', 'M', 'Q', 'H') |
-| type | Number | 4 | Buffer size for data string
-
-## Note
-
-If you have `code length overflow` errors, you need to increase the `[type]` value to increase the buffer for your data string.
+| value | String | '' | Your data string |
+| size | Number | 100 | This is the height/width of your QR Code component |
+| level | String | 'L' | QR Correction level ('L', 'M', 'Q', 'H') |
+| background | String | 'white' | The color for the background |
+| backgroundAlpha | Number | 1.0 | The opacity of the background |
+| foreground | String | 'black' | The color for the foreground |
+| foregroundAlpha | Number | 1.0 | The opacity of the foreground |
+| mime | String | 'image/png' | The mime type for the output image |
+| padding | Number | null | The padding around the QR Code |
+| canvas | Boolean | false | Will output a canvas element if true |
## License
MIT License
diff --git a/angular2-qrcode.d.ts b/angular2-qrcode.d.ts
index 4e6d1d0..08fdf7a 100644
--- a/angular2-qrcode.d.ts
+++ b/angular2-qrcode.d.ts
@@ -2,10 +2,16 @@ import { ElementRef, OnChanges, SimpleChanges } from '@angular/core';
export declare class QRCodeComponent implements OnChanges {
private elementRef;
ngOnChanges(changes: SimpleChanges): void;
- data: string;
- size: number;
- type: number;
+ background: string;
+ backgroundAlpha: number;
+ foreground: string;
+ foregroundAlpha: number;
level: string;
+ mime: string;
+ padding: number;
+ size: number;
+ value: string;
+ canvas: boolean;
constructor(elementRef: ElementRef);
generate(): void;
}
diff --git a/angular2-qrcode.js b/angular2-qrcode.js
index 721e88a..93e45ce 100644
--- a/angular2-qrcode.js
+++ b/angular2-qrcode.js
@@ -8,79 +8,125 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
-var core_1 = require('@angular/core');
-var qrcode = require("qrcode-generator");
+var core_1 = require("@angular/core");
+var QRious = require("qrious");
var QRCodeComponent = (function () {
function QRCodeComponent(elementRef) {
this.elementRef = elementRef;
- this.data = '';
- this.size = 128;
- this.type = 4;
- this.level = 'M';
+ this.background = 'white';
+ this.backgroundAlpha = 1.0;
+ this.foreground = 'black';
+ this.foregroundAlpha = 1.0;
+ this.level = 'L';
+ this.mime = 'image/png';
+ this.padding = null;
+ this.size = 100;
+ this.value = '';
+ this.canvas = false;
}
QRCodeComponent.prototype.ngOnChanges = function (changes) {
- console.log('ngOnChanges');
- for (var name in changes) {
- if (name == 'data') {
- this.generate();
- }
+ if ('background' in changes ||
+ 'backgroundAlpha' in changes ||
+ 'foreground' in changes ||
+ 'foregroundAlpha' in changes ||
+ 'level' in changes ||
+ 'mime' in changes ||
+ 'padding' in changes ||
+ 'size' in changes ||
+ 'value' in changes ||
+ 'canvas' in changes) {
+ this.generate();
}
};
QRCodeComponent.prototype.generate = function () {
try {
- var qr = qrcode(this.type, this.level);
- qr.addData(this.data);
- qr.make();
- var imgTagString = qr.createImgTag(this.type, 0);
var el = this.elementRef.nativeElement;
- el.innerHTML = imgTagString;
- var imgTagObject = el.firstElementChild;
- imgTagObject.width = this.size;
- imgTagObject.height = this.size;
+ el.innerHTML = '';
+ var qr = new QRious({
+ background: this.background,
+ backgroundAlpha: this.backgroundAlpha,
+ foreground: this.foreground,
+ foregroundAlpha: this.foregroundAlpha,
+ level: this.level,
+ mime: this.mime,
+ padding: this.padding,
+ size: this.size,
+ value: this.value
+ });
+ if (this.canvas) {
+ el.appendChild(qr.canvas);
+ }
+ else {
+ el.appendChild(qr.image);
+ }
}
catch (e) {
console.error("Could not generate QR Code: " + e.message);
}
};
- __decorate([
- core_1.Input(),
- __metadata('design:type', String)
- ], QRCodeComponent.prototype, "data", void 0);
- __decorate([
- core_1.Input(),
- __metadata('design:type', Number)
- ], QRCodeComponent.prototype, "size", void 0);
- __decorate([
- core_1.Input(),
- __metadata('design:type', Number)
- ], QRCodeComponent.prototype, "type", void 0);
- __decorate([
- core_1.Input(),
- __metadata('design:type', String)
- ], QRCodeComponent.prototype, "level", void 0);
- QRCodeComponent = __decorate([
- core_1.Component({
- moduleId: 'module.id',
- selector: 'qr-code',
- template: ''
- }),
- __metadata('design:paramtypes', [core_1.ElementRef])
- ], QRCodeComponent);
return QRCodeComponent;
}());
+__decorate([
+ core_1.Input(),
+ __metadata("design:type", String)
+], QRCodeComponent.prototype, "background", void 0);
+__decorate([
+ core_1.Input(),
+ __metadata("design:type", Number)
+], QRCodeComponent.prototype, "backgroundAlpha", void 0);
+__decorate([
+ core_1.Input(),
+ __metadata("design:type", String)
+], QRCodeComponent.prototype, "foreground", void 0);
+__decorate([
+ core_1.Input(),
+ __metadata("design:type", Number)
+], QRCodeComponent.prototype, "foregroundAlpha", void 0);
+__decorate([
+ core_1.Input(),
+ __metadata("design:type", String)
+], QRCodeComponent.prototype, "level", void 0);
+__decorate([
+ core_1.Input(),
+ __metadata("design:type", String)
+], QRCodeComponent.prototype, "mime", void 0);
+__decorate([
+ core_1.Input(),
+ __metadata("design:type", Number)
+], QRCodeComponent.prototype, "padding", void 0);
+__decorate([
+ core_1.Input(),
+ __metadata("design:type", Number)
+], QRCodeComponent.prototype, "size", void 0);
+__decorate([
+ core_1.Input(),
+ __metadata("design:type", String)
+], QRCodeComponent.prototype, "value", void 0);
+__decorate([
+ core_1.Input(),
+ __metadata("design:type", Boolean)
+], QRCodeComponent.prototype, "canvas", void 0);
+QRCodeComponent = __decorate([
+ core_1.Component({
+ moduleId: 'module.id',
+ selector: 'qr-code',
+ template: ""
+ }),
+ __metadata("design:paramtypes", [core_1.ElementRef])
+], QRCodeComponent);
exports.QRCodeComponent = QRCodeComponent;
var QRCodeModule = (function () {
function QRCodeModule() {
}
- QRCodeModule = __decorate([
- core_1.NgModule({
- exports: [QRCodeComponent],
- declarations: [QRCodeComponent],
- entryComponents: [QRCodeComponent]
- }),
- __metadata('design:paramtypes', [])
- ], QRCodeModule);
return QRCodeModule;
}());
+QRCodeModule = __decorate([
+ core_1.NgModule({
+ exports: [QRCodeComponent],
+ declarations: [QRCodeComponent],
+ entryComponents: [QRCodeComponent]
+ }),
+ __metadata("design:paramtypes", [])
+], QRCodeModule);
exports.QRCodeModule = QRCodeModule;
//# sourceMappingURL=angular2-qrcode.js.map
\ No newline at end of file
diff --git a/angular2-qrcode.js.map b/angular2-qrcode.js.map
index a4c3289..3eebe03 100644
--- a/angular2-qrcode.js.map
+++ b/angular2-qrcode.js.map
@@ -1 +1 @@
-{"version":3,"file":"angular2-qrcode.js","sourceRoot":"","sources":["angular2-qrcode.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,qBAOO,eAAe,CAAC,CAAA;AACvB,IAAY,MAAM,WAAM,kBAAkB,CAAC,CAAA;AAO3C;IAiBI,yBACY,UAAsB;QAAtB,eAAU,GAAV,UAAU,CAAY;QARzB,SAAI,GAAW,EAAE,CAAC;QAClB,SAAI,GAAW,GAAG,CAAC;QACnB,SAAI,GAAW,CAAC,CAAC;QACjB,UAAK,GAAW,GAAG,CAAC;IAM1B,CAAC;IAlBJ,qCAAW,GAAX,UAAY,OAAsB;QAC9B,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAC3B,GAAG,CAAC,CAAC,IAAI,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC;YACvB,EAAE,CAAC,CAAC,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC;gBACjB,IAAI,CAAC,QAAQ,EAAE,CAAC;YACpB,CAAC;QACL,CAAC;IACL,CAAC;IAaD,kCAAQ,GAAR;QACI,IAAI,CAAC;YACD,IAAI,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YACvC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtB,EAAE,CAAC,IAAI,EAAE,CAAC;YAEV,IAAI,YAAY,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACjD,IAAI,EAAE,GAAgB,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;YACpD,EAAE,CAAC,SAAS,GAAG,YAAY,CAAC;YAC5B,IAAI,YAAY,GAAwC,EAAE,CAAC,iBAAiB,CAAC;YAC7E,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC;YAC/B,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC;QACpC,CAAE;QAAA,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACT,OAAO,CAAC,KAAK,CAAC,iCAA+B,CAAC,CAAC,OAAS,CAAC,CAAC;QAC9D,CAAC;IACL,CAAC;IA1BD;QAAC,YAAK,EAAE;;iDAAA;IACR;QAAC,YAAK,EAAE;;iDAAA;IACR;QAAC,YAAK,EAAE;;iDAAA;IACR;QAAC,YAAK,EAAE;;kDAAA;IAlBZ;QAAC,gBAAS,CAAC;YACP,QAAQ,EAAE,WAAW;YACrB,QAAQ,EAAE,SAAS;YACnB,QAAQ,EAAE,EAAE;SACf,CAAC;;uBAAA;IAsCF,sBAAC;AAAD,CAAC,AArCD,IAqCC;AArCY,uBAAe,kBAqC3B,CAAA;AAOD;IAAA;IAA4B,CAAC;IAL7B;QAAC,eAAQ,CAAC;YACN,OAAO,EAAE,CAAE,eAAe,CAAE;YAC5B,YAAY,EAAE,CAAE,eAAe,CAAE;YACjC,eAAe,EAAE,CAAE,eAAe,CAAE;SACvC,CAAC;;oBAAA;IAC0B,mBAAC;AAAD,CAAC,AAA7B,IAA6B;AAAhB,oBAAY,eAAI,CAAA"}
\ No newline at end of file
+{"version":3,"file":"angular2-qrcode.js","sourceRoot":"","sources":["angular2-qrcode.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/angular2-qrcode.ts b/angular2-qrcode.ts
index 1c9ebd3..262401f 100644
--- a/angular2-qrcode.ts
+++ b/angular2-qrcode.ts
@@ -6,24 +6,40 @@ import {
OnChanges,
SimpleChanges
} from '@angular/core';
-import * as qrcode from "qrcode-generator";
+import * as QRious from 'qrious';
@Component({
moduleId: 'module.id',
selector: 'qr-code',
- template: ''
+ template: ``
})
export class QRCodeComponent implements OnChanges {
ngOnChanges(changes: SimpleChanges): void {
- if ('data' in changes) {
+ if ('background' in changes ||
+ 'backgroundAlpha' in changes ||
+ 'foreground' in changes ||
+ 'foregroundAlpha' in changes ||
+ 'level' in changes ||
+ 'mime' in changes ||
+ 'padding' in changes ||
+ 'size' in changes ||
+ 'value' in changes ||
+ 'canvas' in changes) {
this.generate();
}
}
+
+ @Input() background: string = 'white';
+ @Input() backgroundAlpha: number = 1.0;
+ @Input() foreground: string = 'black';
+ @Input() foregroundAlpha: number = 1.0;
+ @Input() level: string = 'L';
+ @Input() mime: string = 'image/png';
+ @Input() padding: number = null;
+ @Input() size: number = 100;
+ @Input() value: string = '';
- @Input() data: string = '';
- @Input() size: number = 128;
- @Input() type: number = 4;
- @Input() level: string = 'M';
+ @Input() canvas: boolean = false;
constructor(private elementRef: ElementRef) {
@@ -31,16 +47,25 @@ export class QRCodeComponent implements OnChanges {
generate() {
try {
- let qr = qrcode(this.type, this.level);
- qr.addData(this.data);
- qr.make();
-
- let imgTagString = qr.createImgTag(this.type, 0);
let el: HTMLElement = this.elementRef.nativeElement;
- el.innerHTML = imgTagString;
- let imgTagObject: HTMLImageElement = el.firstElementChild;
- imgTagObject.width = this.size;
- imgTagObject.height = this.size;
+ el.innerHTML = '';
+ let qr = new QRious({
+ background: this.background,
+ backgroundAlpha: this.backgroundAlpha,
+ foreground: this.foreground,
+ foregroundAlpha: this.foregroundAlpha,
+ level: this.level,
+ mime: this.mime,
+ padding: this.padding,
+ size: this.size,
+ value: this.value
+ });
+
+ if (this.canvas) {
+ el.appendChild(qr.canvas);
+ } else {
+ el.appendChild(qr.image);
+ }
} catch (e) {
console.error(`Could not generate QR Code: ${e.message}`);
}
diff --git a/package.json b/package.json
index 0407df2..dd5ad2b 100644
--- a/package.json
+++ b/package.json
@@ -1,13 +1,13 @@
{
"name": "angular2-qrcode",
- "version": "1.0.5",
+ "version": "2.0.0",
"description": "An Angular 2 component that generates a QR Code.",
"main": "angular2-qrcode.js",
"repository": {
"type": "git",
"url": "git+https://github.com/SuperiorJT/angular2-qrcode.git"
},
- "scripts": { },
+ "scripts": {},
"keywords": [
"qrcode",
"qr",
@@ -17,8 +17,14 @@
"2",
"ng2"
],
+ "files": [
+ "angular2-qrcode.d.ts",
+ "angular2-qrcode.js",
+ "angular2-qrcode.js.map",
+ "README.md"
+ ],
"dependencies": {
- "qrcode-generator": "^1.0.0"
+ "qrious": "^2.2.0"
},
"peerDependencies": {
"@angular/core": "^2.0.0"
diff --git a/qrcode-generator.d.ts b/qrcode-generator.d.ts
deleted file mode 100644
index c3378b8..0000000
--- a/qrcode-generator.d.ts
+++ /dev/null
@@ -1,13 +0,0 @@
-// interface QRCode {
-// addData(data: string) : void;
-// make() : void;
-//
-// createTableTag(cellSize: number, margin: number) : string;
-// createSvgTag(cellSize: number, margin: number) : string;
-// createImgTag(cellSize: number, margin: number) : string;
-// }
-//
-// declare module 'qrcode-generator' {
-// function qrcode(type: number, errorCorrectionLevel: string) : QRCode;
-// export = qrcode;
-// }
\ No newline at end of file