{"version":3,"sources":["../source/dom.js"],"names":["getSelection","element","selectionStart","selectionEnd","start","end","Keys","Backspace","Delete","getOperation","event","keyCode","getCaretPosition","setCaretPosition","caret_position","undefined","isAndroid","setTimeout","setSelectionRange","navigator","ANDROID_USER_AGENT_REG_EXP","test","userAgent"],"mappings":";;;;;;;;;;;AAAA;AACO,SAASA,YAAT,CAAsBC,OAAtB,EACP;AACC;AACA,MAAIA,OAAO,CAACC,cAAR,KAA2BD,OAAO,CAACE,YAAvC,EACA;AACC;AACA;;AAED,SAAO;AAAEC,IAAAA,KAAK,EAAEH,OAAO,CAACC,cAAjB;AAAiCG,IAAAA,GAAG,EAAEJ,OAAO,CAACE;AAA9C,GAAP;AACA,C,CAED;;;AACO,IAAMG,IAAI,GACjB;AACCC,EAAAA,SAAS,EAAG,CADb;AAECC,EAAAA,MAAM,EAAM;AAFb,CADO,C,CAMP;AACA;;;;AACO,SAASC,YAAT,CAAsBC,KAAtB,EACP;AACC,UAAQA,KAAK,CAACC,OAAd;AAEC,SAAKL,IAAI,CAACC,SAAV;AACC,aAAO,WAAP;;AAED,SAAKD,IAAI,CAACE,MAAV;AACC,aAAO,QAAP;AANF;AAQA,C,CAED;;;AACO,SAASI,gBAAT,CAA0BX,OAA1B,EACP;AACC,SAAOA,OAAO,CAACC,cAAf;AACA,C,CAED;;;AACO,SAASW,gBAAT,CAA0BZ,OAA1B,EAAmCa,cAAnC,EACP;AACC;AACA,MAAIA,cAAc,KAAKC,SAAvB,EACA;AACC;AACA,GALF,CAOC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,MAAIC,SAAS,EAAb,EAAiB;AACZC,IAAAA,UAAU,CAAC;AAAA,aAAMhB,OAAO,CAACiB,iBAAR,CAA0BJ,cAA1B,EAA0CA,cAA1C,CAAN;AAAA,KAAD,EAAkE,CAAlE,CAAV;AACJ,GAFD,MAEO;AACNb,IAAAA,OAAO,CAACiB,iBAAR,CAA0BJ,cAA1B,EAA0CA,cAA1C;AACA;AACD;;AAED,SAASE,SAAT,GAAqB;AACpB;AACA,MAAI,OAAOG,SAAP,KAAqB,WAAzB,EAAsC;AACrC,WAAOC,0BAA0B,CAACC,IAA3B,CAAgCF,SAAS,CAACG,SAA1C,CAAP;AACA;AACD;;AAED,IAAMF,0BAA0B,GAAG,UAAnC","sourcesContent":["// Gets selection bounds\r\nexport function getSelection(element)\r\n{\r\n\t// If no selection, return nothing\r\n\tif (element.selectionStart === element.selectionEnd)\r\n\t{\r\n\t\treturn\r\n\t}\r\n\r\n\treturn { start: element.selectionStart, end: element.selectionEnd }\r\n}\r\n\r\n// Key codes\r\nexport const Keys =\r\n{\r\n\tBackspace : 8,\r\n\tDelete : 46\r\n}\r\n\r\n// Finds out the operation to be intercepted and performed\r\n// based on the key down event `keyCode`.\r\nexport function getOperation(event)\r\n{\r\n\tswitch (event.keyCode)\r\n\t{\r\n\t\tcase Keys.Backspace:\r\n\t\t\treturn 'Backspace'\r\n\r\n\t\tcase Keys.Delete:\r\n\t\t\treturn 'Delete'\r\n\t}\r\n}\r\n\r\n// Gets caret position\r\nexport function getCaretPosition(element)\r\n{\r\n\treturn element.selectionStart\r\n}\r\n\r\n// Sets caret position\r\nexport function setCaretPosition(element, caret_position)\r\n{\r\n\t// Sanity check\r\n\tif (caret_position === undefined)\r\n\t{\r\n\t\treturn\r\n\t}\r\n\r\n\t// Set caret position.\r\n\t// There has been an issue with caret positioning on Android devices.\r\n\t// https://github.com/catamphetamine/input-format/issues/2\r\n\t// I was revisiting this issue and looked for similar issues in other libraries.\r\n\t// For example, there's [`text-mask`](https://github.com/text-mask/text-mask) library.\r\n\t// They've had exactly the same issue when the caret seemingly refused to be repositioned programmatically.\r\n\t// 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.\r\n\t// https://github.com/text-mask/text-mask/issues/300\r\n\t// They seem to have found a basic fix for it: calling `input.setSelectionRange()` in a timeout rather than instantly for Android devices.\r\n\t// https://github.com/text-mask/text-mask/pull/400/files\r\n\t// I've implemented the same workaround here.\r\n\tif (isAndroid()) {\r\n setTimeout(() => element.setSelectionRange(caret_position, caret_position), 0)\r\n\t} else {\r\n\t\telement.setSelectionRange(caret_position, caret_position)\r\n\t}\r\n}\r\n\r\nfunction isAndroid() {\r\n\t// `navigator` is not defined when running mocha tests.\r\n\tif (typeof navigator !== 'undefined') {\r\n\t\treturn ANDROID_USER_AGENT_REG_EXP.test(navigator.userAgent)\r\n\t}\r\n}\r\n\r\nconst ANDROID_USER_AGENT_REG_EXP = /Android/i"],"file":"dom.js"}