nativescript-barcodescanner
Advanced tools
Comparing version 2.7.4 to 2.7.5
@@ -0,1 +1,3 @@ | ||
import { ContentView } from "tns-core-modules/ui/content-view"; | ||
import { Property } from "tns-core-modules/ui/core/properties"; | ||
export interface ScanResult { | ||
@@ -109,1 +111,13 @@ text: string; | ||
} | ||
/**** View-related stuff below ****/ | ||
export declare const formatsProperty: Property<BarcodeScannerView, string>; | ||
export declare const preferFrontCameraProperty: Property<BarcodeScannerView, boolean>; | ||
export declare const beepOnScanProperty: Property<BarcodeScannerView, boolean>; | ||
export declare const reportDuplicatesProperty: Property<BarcodeScannerView, boolean>; | ||
export declare abstract class BarcodeScannerView extends ContentView { | ||
static scanResultEvent: string; | ||
protected formats: string; | ||
protected preferFrontCamera: boolean; | ||
protected beepOnScan: boolean; | ||
protected reportDuplicates: boolean; | ||
} |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
var content_view_1 = require("tns-core-modules/ui/content-view"); | ||
var properties_1 = require("tns-core-modules/ui/core/properties"); | ||
var view_base_1 = require("tns-core-modules/ui/core/view-base"); | ||
/**** View-related stuff below ****/ | ||
exports.formatsProperty = new properties_1.Property({ | ||
name: "formats", | ||
defaultValue: null, | ||
}); | ||
exports.preferFrontCameraProperty = new properties_1.Property({ | ||
name: "preferFrontCamera", | ||
defaultValue: false, | ||
valueConverter: view_base_1.booleanConverter | ||
}); | ||
exports.beepOnScanProperty = new properties_1.Property({ | ||
name: "beepOnScan", | ||
defaultValue: true, | ||
valueConverter: view_base_1.booleanConverter | ||
}); | ||
exports.reportDuplicatesProperty = new properties_1.Property({ | ||
name: "reportDuplicates", | ||
defaultValue: false, | ||
valueConverter: view_base_1.booleanConverter | ||
}); | ||
var BarcodeScannerView = /** @class */ (function (_super) { | ||
__extends(BarcodeScannerView, _super); | ||
function BarcodeScannerView() { | ||
return _super !== null && _super.apply(this, arguments) || this; | ||
} | ||
BarcodeScannerView.prototype[exports.formatsProperty.setNative] = function (value) { | ||
this.formats = value; | ||
}; | ||
BarcodeScannerView.prototype[exports.preferFrontCameraProperty.setNative] = function (value) { | ||
this.preferFrontCamera = value; | ||
}; | ||
BarcodeScannerView.prototype[exports.beepOnScanProperty.setNative] = function (value) { | ||
this.beepOnScan = value; | ||
}; | ||
BarcodeScannerView.prototype[exports.reportDuplicatesProperty.setNative] = function (value) { | ||
this.reportDuplicates = value; | ||
}; | ||
BarcodeScannerView.scanResultEvent = "scanResult"; | ||
return BarcodeScannerView; | ||
}(content_view_1.ContentView)); | ||
exports.BarcodeScannerView = BarcodeScannerView; | ||
exports.formatsProperty.register(BarcodeScannerView); | ||
exports.preferFrontCameraProperty.register(BarcodeScannerView); | ||
exports.beepOnScanProperty.register(BarcodeScannerView); | ||
exports.reportDuplicatesProperty.register(BarcodeScannerView); |
@@ -8,3 +8,3 @@ "use strict"; | ||
var _onContinuousScanResult = undefined; | ||
var BarcodeScanner = (function () { | ||
var BarcodeScanner = /** @class */ (function () { | ||
function BarcodeScanner() { | ||
@@ -11,0 +11,0 @@ var _this = this; |
@@ -1,2 +0,9 @@ | ||
import { ScanOptions, ScanResult } from "./barcodescanner-common"; | ||
import { BarcodeScannerView as BarcodeScannerBaseView, ScanOptions, ScanResult } from "./barcodescanner-common"; | ||
export declare class BarcodeScannerView extends BarcodeScannerBaseView { | ||
private _reader; | ||
private _scanner; | ||
createNativeView(): Object; | ||
initView(): void; | ||
onLayout(left: number, top: number, right: number, bottom: number): void; | ||
} | ||
export declare class BarcodeScanner { | ||
@@ -3,0 +10,0 @@ private _observer; |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
var barcodescanner_common_1 = require("./barcodescanner-common"); | ||
var utils = require("tns-core-modules/utils/utils"); | ||
var frame = require("tns-core-modules/ui/frame"); | ||
/* no luck yet | ||
export class BarcodeScannerView extends BarcodeScannerBaseView { | ||
private _reader: any; | ||
private _scanner: any; | ||
private _ios: any; | ||
private _continuous: boolean; | ||
constructor() { | ||
super(); | ||
// let authStatus = AVCaptureDevice.authorizationStatusForMediaType(AVMediaTypeVideo); | ||
// if (authStatus !== AVAuthorizationStatus.Authorized) { | ||
// } | ||
let closeButtonLabel = "bla"; | ||
let types = [AVMetadataObjectTypeUPCECode, AVMetadataObjectTypeCode39Code, AVMetadataObjectTypeCode39Mod43Code, | ||
AVMetadataObjectTypeEAN13Code, AVMetadataObjectTypeEAN8Code, AVMetadataObjectTypeCode93Code, AVMetadataObjectTypeCode128Code, | ||
AVMetadataObjectTypePDF417Code, AVMetadataObjectTypeQRCode, AVMetadataObjectTypeAztecCode]; | ||
this._reader = QRCodeReader.readerWithMetadataObjectTypes(types); | ||
let torch = false; | ||
let flip = false; | ||
let startScanningAtLoad = true; | ||
// this._scanner = QRCodeReaderViewController.readerWithCancelButtonTitleCodeReaderStartScanningAtLoadShowSwitchCameraButtonShowTorchButton(closeButtonLabel, this._reader, startScanningAtLoad, flip, torch); | ||
// this._scanner.modalPresentationStyle = UIModalPresentationStyle.FormSheet; | ||
// Assign first to local variable, otherwise it will be garbage collected since delegate is weak reference. | ||
let isContinuous = false; | ||
// this._scanDelegate = QRCodeReaderDelegateImpl.initWithOwner(new WeakRef(this)); | ||
let delegate = QRCodeReaderDelegateImpl.initWithOwner(new WeakRef(this)); | ||
delegate.setCallback(true, isContinuous, true, (reader: string, text: string, format: string) => { | ||
// Remove the local variable for the delegate. | ||
delegate = undefined; | ||
}); | ||
// this._scanner.delegate = delegate; | ||
console.log("--- this._reader.previewLayer: " + this._reader.previewLayer); | ||
// this._ios = this._reader.previewLayer; // TODO | ||
console.log("--- ios: " + this.ios); | ||
if (this.ios) { | ||
this.ios.layer.insertSublayerAtIndex(this._reader.previewLayer, 0); | ||
var BarcodeScannerView = /** @class */ (function (_super) { | ||
__extends(BarcodeScannerView, _super); | ||
function BarcodeScannerView() { | ||
return _super !== null && _super.apply(this, arguments) || this; | ||
} | ||
// instead of a delegate we can use setCompletionWithBlock: https://github.com/yannickl/QRCodeReaderViewController/blob/master/QRCodeReaderViewController/QRCodeReader.h#L201 | ||
setTimeout(() => { | ||
this._reader.startScanning(); | ||
}, 4000); | ||
} | ||
public onLayout(left: number, top: number, right: number, bottom: number): void { | ||
super.onLayout(left, top, right, bottom); | ||
if (this.ios) { | ||
console.log(">>> yes, layout"); | ||
this._reader.previewLayer.frame = this.ios.layer.bounds; | ||
} else { | ||
console.log(">>> no, layout"); | ||
} | ||
} | ||
get ios(): any { | ||
return this._ios; | ||
} | ||
set continuous(value: boolean) { | ||
this._continuous = value; | ||
} | ||
} | ||
*/ | ||
var BarcodeScanner = (function () { | ||
BarcodeScannerView.prototype.createNativeView = function () { | ||
var v = _super.prototype.createNativeView.call(this); | ||
this.initView(); | ||
return v; | ||
}; | ||
BarcodeScannerView.prototype.initView = function () { | ||
var types = getBarcodeTypes(this.formats); | ||
this._reader = QRCodeReader.readerWithMetadataObjectTypes(types); | ||
var torch = false; | ||
var flip = false; | ||
var closeButtonLabel = null; | ||
var cancelLabelBackgroundColor = null; | ||
if (this.preferFrontCamera) { | ||
this._reader.switchDeviceInput(); | ||
} | ||
this._scanner = QRCodeReaderViewController.readerWithCancelButtonTitleCodeReaderStartScanningAtLoadShowSwitchCameraButtonShowTorchButtonCancelButtonBackgroundColor(closeButtonLabel, this._reader, true, flip, torch, cancelLabelBackgroundColor); | ||
this._scanner.modalPresentationStyle = 3 /* CurrentContext */; | ||
var that = this; | ||
var delegate = QRCodeReaderDelegateImpl.initWithOwner(new WeakRef(this)); | ||
delegate.setCallback(this.beepOnScan, true, this.reportDuplicates, function (text, format) { | ||
that.notify({ | ||
eventName: barcodescanner_common_1.BarcodeScannerView.scanResultEvent, | ||
object: that, | ||
format: format, | ||
text: text | ||
}); | ||
}); | ||
this._scanner.delegate = delegate; | ||
if (this.ios) { | ||
this.ios.layer.insertSublayerAtIndex(this._reader.previewLayer, 0); | ||
this._reader.startScanning(); | ||
} | ||
}; | ||
BarcodeScannerView.prototype.onLayout = function (left, top, right, bottom) { | ||
_super.prototype.onLayout.call(this, left, top, right, bottom); | ||
if (this.ios) { | ||
this._reader.previewLayer.frame = this.ios.layer.bounds; | ||
} | ||
}; | ||
return BarcodeScannerView; | ||
}(barcodescanner_common_1.BarcodeScannerView)); | ||
exports.BarcodeScannerView = BarcodeScannerView; | ||
var BarcodeScanner = /** @class */ (function () { | ||
function BarcodeScanner() { | ||
@@ -180,40 +154,3 @@ this._device = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo); | ||
_this._closeCallback = arg.closeCallback; | ||
var types = []; | ||
if (arg.formats) { | ||
var formats = arg.formats.split(","); | ||
for (var _i = 0, formats_1 = formats; _i < formats_1.length; _i++) { | ||
var format = formats_1[_i]; | ||
format = format.trim(); | ||
if (format === "QR_CODE") | ||
types.push(AVMetadataObjectTypeQRCode); | ||
else if (format === "PDF_417") | ||
types.push(AVMetadataObjectTypePDF417Code); | ||
else if (format === "AZTEC") | ||
types.push(AVMetadataObjectTypeAztecCode); | ||
else if (format === "UPC_E") | ||
types.push(AVMetadataObjectTypeUPCECode); | ||
else if (format === "CODE_39") | ||
types.push(AVMetadataObjectTypeCode39Code); | ||
else if (format === "CODE_39_MOD_43") | ||
types.push(AVMetadataObjectTypeCode39Mod43Code); | ||
else if (format === "CODE_93") | ||
types.push(AVMetadataObjectTypeCode93Code); | ||
else if (format === "CODE_128") | ||
types.push(AVMetadataObjectTypeCode128Code); | ||
else if (format === "DATA_MATRIX") | ||
types.push(AVMetadataObjectTypeDataMatrixCode); | ||
else if (format === "EAN_8") | ||
types.push(AVMetadataObjectTypeEAN8Code); | ||
else if (format === "EAN_13") | ||
types.push(AVMetadataObjectTypeEAN13Code); | ||
else if (format === "ITF") | ||
types.push(AVMetadataObjectTypeITF14Code); | ||
} | ||
} | ||
else { | ||
types = [AVMetadataObjectTypeUPCECode, AVMetadataObjectTypeCode39Code, AVMetadataObjectTypeCode39Mod43Code, | ||
AVMetadataObjectTypeEAN13Code, AVMetadataObjectTypeEAN8Code, AVMetadataObjectTypeCode93Code, AVMetadataObjectTypeCode128Code, | ||
AVMetadataObjectTypeDataMatrixCode, AVMetadataObjectTypeITF14Code, | ||
AVMetadataObjectTypePDF417Code, AVMetadataObjectTypeQRCode, AVMetadataObjectTypeAztecCode]; | ||
} | ||
var types = getBarcodeTypes(arg.formats); | ||
var reader = QRCodeReader.readerWithMetadataObjectTypes(types); | ||
@@ -281,3 +218,41 @@ if (arg.preferFrontCamera && reader.hasFrontDevice()) { | ||
exports.BarcodeScanner = BarcodeScanner; | ||
var QRCodeReaderDelegateImpl = (function (_super) { | ||
var getBarcodeTypes = function (formatsString) { | ||
var types = []; | ||
if (formatsString) { | ||
var formats = formatsString.split(","); | ||
for (var _i = 0, formats_1 = formats; _i < formats_1.length; _i++) { | ||
var format = formats_1[_i]; | ||
format = format.trim(); | ||
if (format === "QR_CODE") | ||
types.push(AVMetadataObjectTypeQRCode); | ||
else if (format === "PDF_417") | ||
types.push(AVMetadataObjectTypePDF417Code); | ||
else if (format === "AZTEC") | ||
types.push(AVMetadataObjectTypeAztecCode); | ||
else if (format === "UPC_E") | ||
types.push(AVMetadataObjectTypeUPCECode); | ||
else if (format === "CODE_39") | ||
types.push(AVMetadataObjectTypeCode39Code); | ||
else if (format === "CODE_39_MOD_43") | ||
types.push(AVMetadataObjectTypeCode39Mod43Code); | ||
else if (format === "CODE_93") | ||
types.push(AVMetadataObjectTypeCode93Code); | ||
else if (format === "CODE_128") | ||
types.push(AVMetadataObjectTypeCode128Code); | ||
else if (format === "DATA_MATRIX") | ||
types.push(AVMetadataObjectTypeDataMatrixCode); | ||
else if (format === "EAN_8") | ||
types.push(AVMetadataObjectTypeEAN8Code); | ||
else if (format === "EAN_13") | ||
types.push(AVMetadataObjectTypeEAN13Code); | ||
else if (format === "ITF") | ||
types.push(AVMetadataObjectTypeITF14Code); | ||
} | ||
} | ||
else { | ||
types.push(AVMetadataObjectTypeUPCECode, AVMetadataObjectTypeCode39Code, AVMetadataObjectTypeCode39Mod43Code, AVMetadataObjectTypeEAN13Code, AVMetadataObjectTypeEAN8Code, AVMetadataObjectTypeCode93Code, AVMetadataObjectTypeCode128Code, AVMetadataObjectTypeDataMatrixCode, AVMetadataObjectTypeITF14Code, AVMetadataObjectTypePDF417Code, AVMetadataObjectTypeQRCode, AVMetadataObjectTypeAztecCode); | ||
} | ||
return types; | ||
}; | ||
var QRCodeReaderDelegateImpl = /** @class */ (function (_super) { | ||
__extends(QRCodeReaderDelegateImpl, _super); | ||
@@ -346,3 +321,3 @@ function QRCodeReaderDelegateImpl() { | ||
}(NSObject)); | ||
var VolumeObserverClass = (function (_super) { | ||
var VolumeObserverClass = /** @class */ (function (_super) { | ||
__extends(VolumeObserverClass, _super); | ||
@@ -349,0 +324,0 @@ function VolumeObserverClass() { |
{ | ||
"name": "nativescript-barcodescanner", | ||
"version": "2.7.4", | ||
"version": "2.7.5", | ||
"description": "Scan QR/barcodes with your NativeScript app.", | ||
@@ -16,2 +16,3 @@ "main": "barcodescanner", | ||
"build": "npm i && npm run tsc", | ||
"setup": "npm run build && cd ../demo && npm i", | ||
"postclone": "npm i && cd ../demo && npm i && cd ../src && npm run plugin.link", | ||
@@ -69,9 +70,8 @@ "test.android": "npm i && npm run tsc && npm run tslint && cd ../demo && tns build android && tns test android --justlaunch", | ||
"nativescript-dev-typescript": "libs", | ||
"prompt": "^1.0.0", | ||
"rimraf": "^2.5.0", | ||
"tns-core-modules": "~3.3.0", | ||
"tns-platform-declarations": "~3.3.0", | ||
"tns-core-modules": "~3.4.0", | ||
"tns-platform-declarations": "~3.4.0", | ||
"tslint": "^5.0.0", | ||
"typescript": "~2.4.0" | ||
"typescript": "~2.6.0" | ||
} | ||
} |
@@ -48,2 +48,47 @@ # NativeScript BarcodeScanner | ||
## Embedding the scanner on an existing page (iOS) | ||
<img src="docs/ios_embedded_scanner.png" width="281px"/> | ||
As you can see, you can style the view any way you like, and even overlay it with an image or button. | ||
To recreate the layout above, look at [these lines in the demo app](https://github.com/EddyVerbruggen/nativescript-barcodescanner/blob/23395bec3e5a26622146daea96dd6407a8413f70/demo/app/main-page.xml#L17-L31). | ||
### XML | ||
```xml | ||
<Page xmlns="http://schemas.nativescript.org/tns.xsd" xmlns:Barcode="nativescript-barcodescanner"> | ||
``` | ||
```xml | ||
<iOS> | ||
<Barcode:BarcodeScannerView | ||
class="scanner-round" | ||
formats="QR_CODE, EAN_13" | ||
beepOnScan="true" | ||
reportDuplicates="true" | ||
preferFrontCamera="false" | ||
scanResult="onScanResult" /> | ||
</iOS> | ||
``` | ||
### Embedding in Angular | ||
Component: | ||
```typescript | ||
import { registerElement } from "nativescript-angular/element-registry"; | ||
registerElement("BarcodeScanner", () => require("nativescript-barcodescanner").BarcodeScannerView); | ||
``` | ||
View: | ||
```html | ||
<BarcodeScanner | ||
class="scanner-round" | ||
formats="QR_CODE, EAN_13" | ||
beepOnScan="true" | ||
reportDuplicates="true" | ||
preferFrontCamera="false" | ||
(scanResult)="onScanResult($event)" /> | ||
</BarcodeScanner> | ||
``` | ||
## iOS runtime permission reason | ||
@@ -262,1 +307,7 @@ You've probably seen a permission popup like this before (this plugin will trigger one as well, automatically): | ||
``` | ||
## Troubleshooting | ||
If you get the error `TypeError: Cannot read property 'zxing' of undefined` on android, try the following steps: | ||
1. Delete the app from your device | ||
2. Remove the folder `platforms/android`. This triggers a complete rebuild | ||
3. run `tns run android` |
1724290
6
28
1301
311