Sha256: a2bdb348fa964f109fb399f6da27bb95ad77bcf68657e84d2b15bfb86535a373

Contents?: true

Size: 1.83 KB

Versions: 1

Compression:

Stored size: 1.83 KB

Contents

var pinfirmable = {
  init: function() {
    var elem = document.getElementById('pinfirmable-noscript');
    if(elem) {
      elem.style.display = 'none';
    }
  },

  autoTab: function(event) {
    switch (this.detectKeyPress(event)) {
    case "digit":
      this.handleDigitPress(event);
      event.preventDefault();
      break;
    case "backspace":
      this.handleBackspacePress(event);
      break;
    case "character":
      return false;
    default:
      return true;
    }
  },

  handleDigitPress: function(event) {
    var elem = event.currentTarget;
    elem.value = event.key;

    var nextElem = this.nextElement(elem);
    if(nextElem.type == "text" || nextElem.type == "number") {
      nextElem.focus();
    }
    else {
      elem.form.submit();
    }
    return true;
  },

  handleBackspacePress: function(event) {
    var elem = event.currentTarget;
    if(elem.value.length > 0) {
      elem.value = "";
    } else {
      var previousElement = this.previousElement(elem);
      previousElement.value = "";
      previousElement.focus();
    }
  },

  indexOfElement: function(elem) {
    var i;
    var elements = elem.form.elements;
      for (i=0, numElements=elements.length; i<numElements; i++) {
        if (elements[i]==elem) {
          break;
      }
    }
    return i;
  },

  nextElement: function(elem) {
    var elements = elem.form.elements;
    var i = this.indexOfElement(elem);
    return elements[i + 1];
  },

  previousElement: function(elem) {
    var elements = elem.form.elements;
    var i = this.indexOfElement(elem);
    return elements[i - 1];
  },

  detectKeyPress: function(event) {
    if(event.keyCode === 8) { return "backspace"; }
    if(!isNaN(event.key - parseFloat(event.key))) { return "digit"; }
    if(/\S/.test(String.fromCharCode(event.keyCode))) { return "character"; }
  }
};

pinfirmable.init();

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
pinfirmable-0.1.2 app/assets/javascripts/pinfirmable.js