diff options
| author | Arthur Maniet <arthurmaniet@me.com> | 2015-07-09 11:14:14 +0200 |
|---|---|---|
| committer | Arthur Maniet <arthurmaniet@me.com> | 2015-07-30 07:55:53 +0200 |
| commit | 03534c5bef68a6c3b1c8cf7e518ff68cdc5df855 (patch) | |
| tree | 63b1a62bf41a96d8ac0f446c31edf04a2b5ce277 /addons/barcodes/static/src/js/barcode_events.js | |
| parent | 0ed6a7dd18eeddaa20ec1c504f5d3400f2baf4dd (diff) | |
[IMP] barcodes: use a regexp to match a barcode
Diffstat (limited to 'addons/barcodes/static/src/js/barcode_events.js')
| -rw-r--r-- | addons/barcodes/static/src/js/barcode_events.js | 23 |
1 files changed, 11 insertions, 12 deletions
diff --git a/addons/barcodes/static/src/js/barcode_events.js b/addons/barcodes/static/src/js/barcode_events.js index 73366cc7755..e2073d60622 100644 --- a/addons/barcodes/static/src/js/barcode_events.js +++ b/addons/barcodes/static/src/js/barcode_events.js @@ -8,7 +8,9 @@ var BarcodeEvents = core.Class.extend(mixins.PropertiesMixin, { timeout: null, key_pressed: {}, buffered_key_events: [], - min_barcode_keys: 3, // minimum barcode length + // Regexp to match a barcode input and extract its payload + // Note: to build in init() if prefix/suffix can be configured + regexp: /(.{3,})[\n\r\t]+/, // By knowing the terminal character we can interpret buffered keys // as a barcode as soon as it's encountered (instead of waiting x ms) suffix: /[\n\r\t]+/, @@ -29,20 +31,17 @@ var BarcodeEvents = core.Class.extend(mixins.PropertiesMixin, { }, handle_buffered_keys: function() { - var code = ""; + var str = _.reduce(this.buffered_key_events, function(memo, e) { return memo + String.fromCharCode(e.which) }, ''); + var match = str.match(this.regexp); - if (this.buffered_key_events.length >= this.min_barcode_keys) { - for (var i = 0; i < this.buffered_key_events.length; i++) { - code += String.fromCharCode(this.buffered_key_events[i].which); - } + if (match) { + var barcode = match[1]; - core.bus.trigger('barcode_scanned', code); + core.bus.trigger('barcode_scanned', barcode); - // Dispatch a barcode_scanned DOM event to elements that have - // barcode_events="true" set. - if (this.element_is_editable(this.buffered_key_events[0].target)) { - $(this.buffered_key_events[0].target).trigger('barcode_scanned', code); - } + // Dispatch a barcode_scanned DOM event to elements that have barcode_events="true" set. + if (this.buffered_key_events[0].target.getAttribute("barcode_events") === "true") + $(this.buffered_key_events[0].target).trigger('barcode_scanned', barcode); } else { this.resend_buffered_keys(); } |
