Thaana Typing

by surfine

HTML

<input class="thaana" /><span></span>

CSS

.thaana {
  direction: rtl;
  text-align: right;
  unicode-bidi: bidi-override;
}

JavaScript

var n = {
  33: '!',
  34: '"',
  35: '#',
  36: '$',
  37: '%',
  38: '&',
  39: '\'',
  40: ')',
  41: '(',
  42: '*',
  43: '+',
  44: '،',
  45: '-',
  46: '.',
  47: '/',
  58: ':',
  59: '؛',
  60: '>',
  61: '=',
  62: '<',
  63: '؟',
  64: '@',
  65: 'ާ',
  66: 'ޞ',
  67: 'ޝ',
  68: 'ޑ',
  69: 'ޭ',
  70: 'ﷲ',
  71: 'ޣ',
  72: 'ޙ',
  73: 'ީ',
  74: 'ޛ',
  75: 'ޚ',
  76: 'ޅ',
  77: 'ޟ',
  78: 'ޏ',
  79: 'ޯ',
  80: '÷',
  81: 'ޤ',
  82: 'ޜ',
  83: 'ށ',
  84: 'ޓ',
  85: 'ޫ',
  86: 'ޥ',
  87: 'ޢ',
  88: 'ޘ',
  89: 'ޠ',
  90: 'ޡ',
  91: ']',
  92: '\\',
  93: '[',
  94: '^',
  95: '_',
  96: '`',
  97: 'ަ',
  98: 'ބ',
  99: 'ޗ',
  100: 'ދ',
  101: 'ެ',
  102: 'ފ',
  103: 'ގ',
  104: 'ހ',
  105: 'ި',
  106: 'ޖ',
  107: 'ކ',
  108: 'ލ',
  109: 'މ',
  110: 'ނ',
  111: 'ޮ',
  112: 'ޕ',
  113: 'ް',
  114: 'ރ',
  115: 'ސ',
  116: 'ތ',
  117: 'ު',
  118: 'ވ',
  119: 'އ',
  120: '×',
  121: 'ޔ',
  122: 'ޒ',
  123: '}',
  124: '|',
  125: '{',
  126: '~'
}

var toASCII = {
  '188': '44',
  '109': '45',
  '190': '46',
  '191': '47',
  '192': '96',
  '220': '92',
  '222': '39',
  '221': '93',
  '219': '91',
  '173': '45',
  '187': '61', //IE Key codes
  '186': '59', //IE Key codes
  '189': '45' //IE Key codes
}

var shiftUps = {
  '39': '\'',
  '44': '<',
  '45': '_',
  '46': '>',
  '47': '؟',
  '48': '(',
  '49': '!',
  '50': '@',
  '51': '#',
  '52': '$',
  '53': '%',
  '54': '^',
  '55': '&',
  '56': '*',
  '57': ')',
  '59': ':',
  '61': '+',
  '91': '}',
  '92': '|',
  '93': '{',
  '96': '~'
};

$('.thaana').on('keydown', function(e) {

  var text = $(this).val();
  var val = e.keyCode;

  if (toASCII.hasOwnProperty(val)) {
    val = toASCII[val];
  }

  if (e.keyCode != 16 && e.keyCode >= 65 && e.keyCode <= 90) {

    event.preventDefault();

    if (!e.shiftKey) {
      val = e.keyCode + 32;
    }

    $('.thaana').val(text + n[val]);

  }

  if (e.shiftKey && shiftUps.hasOwnProperty(val)) {

    event.preventDefault();
    val = shiftUps[val];
   ...