Keyboard.Sequence
A key sequence scanner for building things like Credit card swipe, check scanner or barcode scanner input.
HTML
Swipe a card in your<a href="http://www.amazon.com/New-MagTek-Magnetic-Reader-J79080/dp/B004KO7W2G/">USB Credit Swipe</a>!<br/>
(a sane person should review the code before doing this)
JavaScript
Keyboard.Sequence = new Class({
pattern : null,
callback : null,
id : null,
initialize : function(regex, callback){
this.pattern = regex;
this.id = this.uuid();
this.callback = callback;
Keyboard.Sequence.register(this);
},
containedIn : function(str){
if(this.pattern instanceof Array){
var result = [];
var temp;
this.pattern.each(function(pattern){
temp = str.match(pattern);
if(temp) result.combine(temp);
});
return result;
} else return str.match(this.pattern);
},
processResults : function(results){
return results;
},
uuid : function(){
var s = [];
var hexDigits = "0123456789ABCDEF";
for (var i = 0; i < 32; i++) s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);
s[12] = "4";
s[16] = hexDigits.substr((s[16] & 0x3) | 0x8, 1);
return s.join("");
}
});
Keyboard.Sequence.CreditSwipe = new Class({
Extends : Keyboard.Sequence,
initialize : function(callback){
this.parent([
/%B[0-9 ]{13,18}\^[\/A-Z ]+\^[0-9]{13,}\?/mi,
/;[0-9]{13,16}=[0-9]{13,}\?/mi
], callback);
},
processResults : function(incoming){
var results = {};
var something = false;
incoming.each(function(result){
if(result.substring(0,1) == '%'){
var parts = result.substring(2,result.length-2).split('^');
results.account = parts[0];
if(parts[1].indexOf('/') != -1){
var last = parts[1].substring(0, parts[1].indexOf('/'));
last = last.substring(0,1).toUpperCase()+last.substring(1, last.length).toLowerCase();
results.last_name = last;
var first = parts[1].substring(parts[1].indexOf('/')+1, parts[1].length);
if(first.indexOf(' ')...