summaryrefslogtreecommitdiff
path: root/addons/barcodes/static/src
diff options
context:
space:
mode:
authorArthur Maniet <arthurmaniet@me.com>2015-07-09 11:14:14 +0200
committerArthur Maniet <arthurmaniet@me.com>2015-07-30 07:55:53 +0200
commit03534c5bef68a6c3b1c8cf7e518ff68cdc5df855 (patch)
tree63b1a62bf41a96d8ac0f446c31edf04a2b5ce277 /addons/barcodes/static/src
parent0ed6a7dd18eeddaa20ec1c504f5d3400f2baf4dd (diff)
[IMP] barcodes: use a regexp to match a barcode
Diffstat (limited to 'addons/barcodes/static/src')
-rw-r--r--addons/barcodes/static/src/js/barcode_events.js23
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();
}