function isReadOnly(element) {
  return element.hasAttribute('readonly');
} // Gets <input/> selection bounds

function getSelection(element) {
  // If no selection, return nothing
  if (element.selectionStart === element.selectionEnd) {
    return;
  }

  return {
    start: element.selectionStart,
    end: element.selectionEnd
  };
} // Key codes

var Keys = {
  Backspace: 8,
  Delete: 46
}; // Finds out the operation to be intercepted and performed
// based on the key down event `keyCode`.

function getOperation(event) {
  switch (event.keyCode) {
    case Keys.Backspace:
      return 'Backspace';

    case Keys.Delete:
      return 'Delete';
  }
} // Gets <input/> caret position

function getCaretPosition(element) {
  return element.selectionStart;
} // Sets <input/> caret position

function setCaretPosition(element, caret_position) {
  // Sanity check
  if (caret_position === undefined) {
    return;
  } // Set caret position.
  // There has been an issue with caret positioning on Android devices.
  // https://github.com/catamphetamine/input-format/issues/2
  // I was revisiting this issue and looked for similar issues in other libraries.
  // For example, there's [`text-mask`](https://github.com/text-mask/text-mask) library.
  // They've had exactly the same issue when the caret seemingly refused to be repositioned programmatically.
  // The symptoms were the same: whenever the caret passed through a non-digit character of a mask (a whitespace, a bracket, a dash, etc), it looked as if it placed itself one character before its correct position.
  // https://github.com/text-mask/text-mask/issues/300
  // They seem to have found a basic fix for it: calling `input.setSelectionRange()` in a timeout rather than instantly for Android devices.
  // https://github.com/text-mask/text-mask/pull/400/files
  // I've implemented the same workaround here.


  if (isAndroid()) {
    setTimeout(function () {
      return element.setSelectionRange(caret_position, caret_position);
    }, 0);
  } else {
    element.setSelectionRange(caret_position, caret_position);
  }
}

function isAndroid() {
  // `navigator` is not defined when running mocha tests.
  if (typeof navigator !== 'undefined') {
    return ANDROID_USER_AGENT_REG_EXP.test(navigator.userAgent);
  }
}

var ANDROID_USER_AGENT_REG_EXP = /Android/i;

export { Keys, getCaretPosition, getOperation, getSelection, isReadOnly, setCaretPosition };
//# sourceMappingURL=dom.js.map
