/** * cordova is available under the MIT License (2008). * See http://opensource.org/licenses/alphabetical for full text. * * Copyright (c) Matt Kane 2010 * Copyright (c) 2011, IBM Corporation * Copyright (c) 2012-2017, Adobe Systems */ var exec = cordova.require("cordova/exec"); var scanInProgress = false; /** * Constructor. * * @returns {BarcodeScanner} */ function BarcodeScanner() { /** * Encoding constants. * * @type Object */ this.Encode = { TEXT_TYPE: "TEXT_TYPE", EMAIL_TYPE: "EMAIL_TYPE", PHONE_TYPE: "PHONE_TYPE", SMS_TYPE: "SMS_TYPE" // CONTACT_TYPE: "CONTACT_TYPE", // TODO: not implemented, requires passing a Bundle class from Javascript to Java // LOCATION_TYPE: "LOCATION_TYPE" // TODO: not implemented, requires passing a Bundle class from Javascript to Java }; /** * Barcode format constants, defined in ZXing library. * * @type Object */ this.format = { "all_1D": 61918, "aztec": 1, "codabar": 2, "code_128": 16, "code_39": 4, "code_93": 8, "data_MATRIX": 32, "ean_13": 128, "ean_8": 64, "itf": 256, "maxicode": 512, "msi": 131072, "pdf_417": 1024, "plessey": 262144, "qr_CODE": 2048, "rss_14": 4096, "rss_EXPANDED": 8192, "upc_A": 16384, "upc_E": 32768, "upc_EAN_EXTENSION": 65536 }; } /** * Read code from scanner. * * @param {Function} successCallback This function will recieve a result object: { * text : '12345-mock', // The code that was scanned. * format : 'FORMAT_NAME', // Code format. * cancelled : true/false, // Was canceled. * } * @param {Function} errorCallback * @param config */ BarcodeScanner.prototype.scan = function (successCallback, errorCallback, config) { if (config instanceof Array) { // do nothing } else { if (typeof(config) === 'object') { // string spaces between formats, ZXing does not like that if (config.formats) { config.formats = config.formats.replace(/\s+/g, ''); } config = [ config ]; } else { config = []; } } if (errorCallback == null) { errorCallback = function () { }; } if (typeof errorCallback != "function") { console.log("BarcodeScanner.scan failure: failure parameter not a function"); return; } if (typeof successCallback != "function") { console.log("BarcodeScanner.scan failure: success callback parameter must be a function"); return; } if (scanInProgress) { errorCallback('Scan is already in progress'); return; } scanInProgress = true; exec( function(result) { scanInProgress = false; // work around bug in ZXing library if (result.format === 'UPC_A' && result.text.length === 13) { result.text = result.text.substring(1); } successCallback(result); }, function(error) { scanInProgress = false; errorCallback(error); }, 'BarcodeScanner', 'scan', config ); }; //------------------------------------------------------------------- BarcodeScanner.prototype.encode = function (type, data, successCallback, errorCallback, options) { if (errorCallback == null) { errorCallback = function () { }; } if (typeof errorCallback != "function") { console.log("BarcodeScanner.encode failure: failure parameter not a function"); return; } if (typeof successCallback != "function") { console.log("BarcodeScanner.encode failure: success callback parameter must be a function"); return; } exec(successCallback, errorCallback, 'BarcodeScanner', 'encode', [ {"type": type, "data": data, "options": options} ]); }; var barcodeScanner = new BarcodeScanner(); module.exports = barcodeScanner;