{"version":3,"sources":["jsdelivr-header.js","/npm/jquery.alphanum@1.0.26/jquery.alphanum.js"],"names":[],"mappings":"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","file":"/npm/jquery.alphanum@1.0.26/jquery.alphanum.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/jquery.alphanum@1.0.26/jquery.alphanum.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","/********************************************************************\n* Limit the characters that may be entered in a text field\n* Common options: alphanumeric, alphabetic or numeric\n* Kevin Sheedy, 2012\n* http://github.com/KevinSheedy/jquery.alphanum\n*********************************************************************/\n(function( $ ){\n\n  // API ///////////////////////////////////////////////////////////////////\n  $.fn.alphanum = function(settings) {\n\n    var combinedSettings = getCombinedSettingsAlphaNum(settings);\n\n    var $collection = this;\n\n    setupEventHandlers($collection, trimAlphaNum, combinedSettings);\n\n    return this;\n  };\n\n  $.fn.alpha = function(settings) {\n\n    var defaultAlphaSettings = getCombinedSettingsAlphaNum('alpha');\n    var combinedSettings = getCombinedSettingsAlphaNum(settings, defaultAlphaSettings);\n\n    var $collection = this;\n\n    setupEventHandlers($collection, trimAlphaNum, combinedSettings);\n\n    return this;\n  };\n\n  $.fn.numeric = function(settings) {\n\n    var combinedSettings = getCombinedSettingsNum(settings);\n    var $collection = this;\n\n    setupEventHandlers($collection, trimNum, combinedSettings);\n\n    $collection.blur(function(){\n      numericField_Blur(this, combinedSettings);\n    });\n\n    return this;\n  };\n\n  // End of API /////////////////////////////////////////////////////////////\n\n\n  // Start Settings ////////////////////////////////////////////////////////\n\n  var DEFAULT_SETTINGS_ALPHANUM = {\n    allow              : '',    // Allow extra characters\n    disallow           : '',    // Disallow extra characters\n    allowSpace         : true,  // Allow the space character\n    allowNewline       : true,  // Allow the newline character \\n ascii 10\n    allowNumeric       : true,  // Allow digits 0-9\n    allowUpper         : true,  // Allow upper case characters\n    allowLower         : true,  // Allow lower case characters\n    allowCaseless      : true,  // Allow characters that don't have both upper & lower variants - eg Arabic or Chinese\n    allowLatin         : true,  // a-z A-Z\n    allowOtherCharSets : true,  // eg é, Á, Arabic, Chinese etc\n    forceUpper         : false, // Convert lower case characters to upper case\n    forceLower         : false, // Convert upper case characters to lower case\n    maxLength          : NaN    // eg Max Length\n  };\n\n  var DEFAULT_SETTINGS_NUM = {\n    allowPlus           : false, // Allow the + sign\n    allowMinus          : true,  // Allow the - sign\n    allowThouSep        : true,  // Allow the thousands separator, default is the comma eg 12,000\n    allowDecSep         : true,  // Allow the decimal separator, default is the fullstop eg 3.141\n    allowLeadingSpaces  : false,\n    maxDigits           : NaN,   // The max number of digits\n    maxDecimalPlaces    : NaN,   // The max number of decimal places\n    maxPreDecimalPlaces : NaN,   // The max number digits before the decimal point\n    max                 : NaN,   // The max numeric value allowed\n    min                 : NaN    // The min numeric value allowed\n  };\n\n  // Some pre-defined groups of settings for convenience\n  var CONVENIENCE_SETTINGS_ALPHANUM = {\n    'alpha' : {\n      allowNumeric  : false\n    },\n    'upper' : {\n      allowNumeric  : false,\n      allowUpper    : true,\n      allowLower    : false,\n      allowCaseless : true\n    },\n    'lower' : {\n      allowNumeric  : false,\n      allowUpper    : false,\n      allowLower    : true,\n      allowCaseless : true\n    }\n  };\n\n  // Some pre-defined groups of settings for convenience\n  var CONVENIENCE_SETTINGS_NUMERIC = {\n    'integer' : {\n      allowPlus    : false,\n      allowMinus   : true,\n      allowThouSep : false,\n      allowDecSep  : false\n    },\n    'positiveInteger' : {\n      allowPlus    : false,\n      allowMinus   : false,\n      allowThouSep : false,\n      allowDecSep  : false\n    }\n  };\n\n\n  var BLACKLIST   = getBlacklistAscii() + getBlacklistNonAscii();\n  var THOU_SEP    = ',';\n  var DEC_SEP     = '.';\n  var DIGITS      = getDigitsMap();\n  var LATIN_CHARS = getLatinCharsSet();\n\n  // Return the blacklisted special chars that are encodable using 7-bit ascii\n  function getBlacklistAscii(){\n    var blacklist = '!@#$%^&*()+=[]\\\\\\';,/{}|\":<>?~`.-_';\n    blacklist += ' '; // 'Space' is on the blacklist but can be enabled using the 'allowSpace' config entry\n    return blacklist;\n  }\n\n  // Return the blacklisted special chars that are NOT encodable using 7-bit ascii\n  // We want this .js file to be encoded using 7-bit ascii so it can reach the widest possible audience\n  // Higher order chars must be escaped eg \"\\xAC\"\n  // Not too worried about comments containing higher order characters for now (let's wait and see if it becomes a problem)\n  function getBlacklistNonAscii(){\n    var blacklist =\n        '\\xAC'     // ¬\n      + '\\u20AC'   // €\n      + '\\xA3'     // £\n      + '\\xA6'     // ¦\n      ;\n    return blacklist;\n  }\n\n  // End Settings ////////////////////////////////////////////////////////\n\n\n  // Implementation details go here ////////////////////////////////////////////////////////\n\n  function setupEventHandlers($textboxes, trimFunction, settings) {\n\n    $textboxes.each(function(){\n\n      var $textbox = $(this);\n\n      $textbox\n        // Unbind existing alphanum event handlers\n        .off('.alphanum')\n\n        .on('keyup.alphanum change.alphanum paste.alphanum', function(e){\n\n          var pastedText = '';\n\n          if(e.originalEvent && e.originalEvent.clipboardData && e.originalEvent.clipboardData.getData)\n            pastedText = e.originalEvent.clipboardData.getData('text/plain');\n\n          // setTimeout is necessary for handling the 'paste' event\n          setTimeout(function(){\n            trimTextbox($textbox, trimFunction, settings, pastedText);\n          }, 0);\n        })\n\n        .on('keypress.alphanum', function(e){\n\n        // Determine which key is pressed.\n        // If it's a control key, then allow the event's default action to occur eg backspace, tab\n          var charCode = !e.charCode ? e.which : e.charCode;\n          if(isControlKey(charCode)\n          || e.ctrlKey\n          || e.metaKey ) // cmd on MacOS\n            return;\n\n          var newChar         = String.fromCharCode(charCode);\n\n          // Determine if some text was selected / highlighted when the key was pressed\n          var selectionObject = $textbox.selection();\n          var start = selectionObject.start;\n          var end   = selectionObject.end;\n\n          var textBeforeKeypress  = $textbox.val();\n\n          // The new char may be inserted:\n          //  1) At the start\n          //  2) In the middle\n          //  3) At the end\n          //  4) User highlights some text and then presses a key which would replace the highlighted text\n          //\n          // Here we build the string that would result after the keypress.\n          // If the resulting string is invalid, we cancel the event.\n          // Unfortunately, it isn't enough to just check if the new char is valid because some chars\n          // are position sensitive eg the decimal point '.'' or the minus sign '-'' are only valid in certain positions.\n          var potentialTextAfterKeypress = textBeforeKeypress.substring(0, start) + newChar + textBeforeKeypress.substring(end);\n          var validatedText              = trimFunction(potentialTextAfterKeypress, settings);\n\n          // If the keypress would cause the textbox to contain invalid characters, then cancel the keypress event\n          if(validatedText != potentialTextAfterKeypress)\n            e.preventDefault();\n        });\n    });\n\n  }\n\n  // Ensure the text is a valid number when focus leaves the textbox\n  // This catches the case where a user enters '-' or '.' without entering any digits\n  function numericField_Blur(inputBox, settings) {\n    var fieldValueNumeric = parseFloat($(inputBox).val());\n    var $inputBox = $(inputBox);\n\n    if(isNaN(fieldValueNumeric)) {\n      $inputBox.val('');\n      return;\n    }\n\n    if(isNumeric(settings.min) && fieldValueNumeric < settings.min)\n      $inputBox.val('');\n\n    if(isNumeric(settings.max) && fieldValueNumeric > settings.max)\n      $inputBox.val('');\n  }\n\n  function isNumeric(value) {\n    return !isNaN(value);\n  }\n\n  function isControlKey(charCode) {\n\n    if(charCode >= 32)\n      return false;\n    if(charCode == 10)\n      return false;\n    if(charCode == 13)\n      return false;\n\n    return true;\n  }\n\n  // One way to prevent a character being entered is to cancel the keypress event.\n  // However, this gets messy when you have to deal with things like copy paste which isn't a keypress.\n  // Which event gets fired first, keypress or keyup? What about IE6 etc etc?\n  // Instead, it's easier to allow the 'bad' character to be entered and then to delete it immediately after.\n\n  function trimTextbox($textBox, trimFunction, settings, pastedText){\n\n    var inputString = $textBox.val();\n\n    if(inputString == '' && pastedText.length > 0)\n      inputString = pastedText;\n\n    var outputString = trimFunction(inputString, settings);\n\n    if(inputString == outputString)\n      return;\n\n    var caretPos = $textBox.alphanum_caret();\n\n    $textBox.val(outputString);\n\n    //Reset the caret position\n    if(inputString.length ==(outputString.length + 1))\n      $textBox.alphanum_caret(caretPos - 1);\n    else\n      $textBox.alphanum_caret(caretPos);\n  }\n\n  function getCombinedSettingsAlphaNum(settings, defaultSettings){\n    if(typeof defaultSettings == 'undefined')\n      defaultSettings = DEFAULT_SETTINGS_ALPHANUM;\n    var userSettings, combinedSettings = {};\n    if(typeof settings === 'string')\n      userSettings = CONVENIENCE_SETTINGS_ALPHANUM[settings];\n    else if(typeof settings == 'undefined')\n      userSettings = {};\n    else\n      userSettings = settings;\n\n    $.extend(combinedSettings, defaultSettings, userSettings);\n\n    if(typeof combinedSettings.blacklist == 'undefined')\n      combinedSettings.blacklistSet = getBlacklistSet(combinedSettings.allow, combinedSettings.disallow);\n\n    return combinedSettings;\n  }\n\n  function getCombinedSettingsNum(settings){\n    var userSettings, combinedSettings = {};\n    if(typeof settings === 'string')\n      userSettings = CONVENIENCE_SETTINGS_NUMERIC[settings];\n    else if(typeof settings == 'undefined')\n      userSettings = {};\n    else\n      userSettings = settings;\n\n    $.extend(combinedSettings, DEFAULT_SETTINGS_NUM, userSettings);\n\n    return combinedSettings;\n  }\n\n\n  // This is the heart of the algorithm\n  function alphanum_allowChar(validatedStringFragment, Char, settings){\n\n    if(settings.maxLength && validatedStringFragment.length >= settings.maxLength)\n      return false;\n\n    if(settings.allow.indexOf(Char) >=0 )\n      return true;\n\n    if(settings.allowSpace && (Char == ' '))\n      return true;\n\n    if(!settings.allowNewline && (Char == '\\n' || Char == '\\r'))\n      return false;\n\n    if(settings.blacklistSet.contains(Char))\n      return false;\n\n    if(!settings.allowNumeric && DIGITS[Char])\n      return false;\n\n    if(!settings.allowUpper && isUpper(Char))\n      return false;\n\n    if(!settings.allowLower && isLower(Char))\n      return false;\n\n    if(!settings.allowCaseless && isCaseless(Char))\n      return false;\n\n    if(!settings.allowLatin && LATIN_CHARS.contains(Char))\n      return false;\n\n    if(!settings.allowOtherCharSets){\n      if(DIGITS[Char] || LATIN_CHARS.contains(Char))\n        return true;\n      else\n        return false;\n    }\n\n    return true;\n  }\n\n  function numeric_allowChar(validatedStringFragment, Char, settings){\n\n    if(DIGITS[Char]) {\n\n      if(isMaxDigitsReached(validatedStringFragment, settings))\n        return false;\n\n      if(isMaxPreDecimalsReached(validatedStringFragment, settings))\n        return false;\n\n      if(isMaxDecimalsReached(validatedStringFragment, settings))\n        return false;\n\n      if(isGreaterThanMax(validatedStringFragment + Char, settings))\n        return false;\n\n      if(isLessThanMin(validatedStringFragment + Char, settings))\n        return false;\n\n      return true;\n    }\n\n    if(settings.allowPlus && Char == '+' && validatedStringFragment == '')\n      return true;\n\n    if(settings.allowMinus && Char == '-' && validatedStringFragment == '')\n      return true;\n\n    if(Char == THOU_SEP && settings.allowThouSep && allowThouSep(validatedStringFragment))\n      return true;\n\n    if(Char == DEC_SEP) {\n      // Only one decimal separator allowed\n      if(validatedStringFragment.indexOf(DEC_SEP) >= 0)\n        return false;\n      // Don't allow decimal separator when maxDecimalPlaces is set to 0\n      if(settings.allowDecSep && settings.maxDecimalPlaces === 0)\n        return false;\n      if(settings.allowDecSep)\n        return true;\n    }\n\n    return false;\n  }\n\n  function countDigits(string) {\n\n    // Error handling, nulls etc\n    string = string + '';\n\n    // Count the digits\n    return string.replace(/[^0-9]/g,'').length;\n  }\n\n  function isMaxDigitsReached(string, settings) {\n\n    var maxDigits = settings.maxDigits;\n\n    if(maxDigits === '' || isNaN(maxDigits))\n      return false; // In this case, there is no maximum\n\n    var numDigits = countDigits(string);\n\n    if(numDigits >= maxDigits)\n      return true;\n\n    return false;\n  }\n\n  function isMaxDecimalsReached(string, settings) {\n\n    var maxDecimalPlaces = settings.maxDecimalPlaces;\n\n    if(maxDecimalPlaces === '' || isNaN(maxDecimalPlaces))\n      return false; // In this case, there is no maximum\n\n    var indexOfDecimalPoint = string.indexOf(DEC_SEP);\n\n    if(indexOfDecimalPoint == -1)\n      return false;\n\n    var decimalSubstring = string.substring(indexOfDecimalPoint);\n    var numDecimals = countDigits(decimalSubstring);\n\n    if(numDecimals >= maxDecimalPlaces)\n      return true;\n\n    return false;\n  }\n\n  function isMaxPreDecimalsReached(string, settings) {\n\n    var maxPreDecimalPlaces = settings.maxPreDecimalPlaces;\n\n    if(maxPreDecimalPlaces === '' || isNaN(maxPreDecimalPlaces))\n      return false; // In this case, there is no maximum\n\n    var indexOfDecimalPoint = string.indexOf(DEC_SEP);\n\n    if(indexOfDecimalPoint >= 0)\n      return false;\n\n    var numPreDecimalDigits = countDigits(string);\n\n    if(numPreDecimalDigits >= maxPreDecimalPlaces)\n      return true;\n\n    return false;\n  }\n\n  function isGreaterThanMax(numericString, settings) {\n\n    if(!settings.max || settings.max < 0)\n      return false;\n\n    var outputNumber = parseFloat(numericString);\n    if(outputNumber > settings.max)\n      return true;\n\n    return false;\n  }\n\n  function isLessThanMin(numericString, settings) {\n\n    if(!settings.min || settings.min > 0)\n      return false;\n\n    var outputNumber = parseFloat(numericString);\n    if(outputNumber < settings.min)\n      return true;\n\n    return false;\n  }\n\n  /********************************\n   * Trims a string according to the settings provided\n   ********************************/\n  function trimAlphaNum(inputString, settings){\n\n    if(typeof inputString != 'string')\n      return inputString;\n\n    var inChars = inputString.split('');\n    var outChars = [];\n    var i = 0;\n    var Char;\n\n    for(i=0; i<inChars.length; i++){\n      Char = inChars[i];\n      var validatedStringFragment = outChars.join('');\n      if(alphanum_allowChar(validatedStringFragment, Char, settings))\n        outChars.push(Char);\n    }\n\n    var outputString = outChars.join('');\n\n    if(settings.forceLower)\n      outputString = outputString.toLowerCase();\n    else if(settings.forceUpper)\n      outputString = outputString.toUpperCase();\n\n    return outputString;\n  }\n\n  function trimNum(inputString, settings){\n    if(typeof inputString != 'string')\n      return inputString;\n\n    var inChars = inputString.split('');\n    var outChars = [];\n    var i = 0;\n    var Char;\n\n    for(i=0; i<inChars.length; i++){\n      Char = inChars[i];\n      var validatedStringFragment = outChars.join('');\n      if(numeric_allowChar(validatedStringFragment, Char, settings))\n        outChars.push(Char);\n    }\n\n    return outChars.join('');\n  }\n\n  function isUpper(Char){\n    var upper = Char.toUpperCase();\n    var lower = Char.toLowerCase();\n\n    if( (Char == upper) && (upper != lower))\n      return true;\n    else\n      return false;\n  }\n\n  function isLower(Char){\n    var upper = Char.toUpperCase();\n    var lower = Char.toLowerCase();\n\n    if( (Char == lower) && (upper != lower))\n      return true;\n    else\n      return false;\n  }\n\n  function isCaseless(Char){\n    if(Char.toUpperCase() == Char.toLowerCase())\n      return true;\n    else\n      return false;\n  }\n\n  function getBlacklistSet(allow, disallow){\n\n    var setOfBadChars  = new Set(BLACKLIST + disallow);\n    var setOfGoodChars = new Set(allow);\n\n    var blacklistSet   = setOfBadChars.subtract(setOfGoodChars);\n\n    return blacklistSet;\n  }\n\n  function getDigitsMap(){\n    var array = '0123456789'.split('');\n    var map = {};\n    var i = 0;\n    var digit;\n\n    for(i=0; i<array.length; i++){\n      digit = array[i];\n      map[digit] = true;\n    }\n\n    return map;\n  }\n\n  function getLatinCharsSet(){\n    var lower = 'abcdefghijklmnopqrstuvwxyz';\n    var upper = lower.toUpperCase();\n    var azAZ = new Set(lower + upper);\n\n    return azAZ;\n  }\n\n  function allowThouSep(currentString) {\n\n    // Can't start with a THOU_SEP\n    if(currentString.length == 0)\n      return false;\n\n    // Can't have a THOU_SEP anywhere after a DEC_SEP\n    var posOfDecSep = currentString.indexOf(DEC_SEP);\n    if(posOfDecSep >= 0)\n      return false;\n\n    var posOfFirstThouSep       = currentString.indexOf(THOU_SEP);\n\n    // Check if this is the first occurrence of a THOU_SEP\n    if(posOfFirstThouSep < 0)\n      return true;\n\n    var posOfLastThouSep        = currentString.lastIndexOf(THOU_SEP);\n    var charsSinceLastThouSep   = currentString.length - posOfLastThouSep - 1;\n\n    // Check if there has been 3 digits since the last THOU_SEP\n    if(charsSinceLastThouSep < 3)\n      return false;\n\n    var digitsSinceFirstThouSep = countDigits(currentString.substring(posOfFirstThouSep));\n\n    // Check if there has been a multiple of 3 digits since the first THOU_SEP\n    if((digitsSinceFirstThouSep % 3) > 0)\n      return false;\n\n    return true;\n  }\n\n  ////////////////////////////////////////////////////////////////////////////////////\n  // Implementation of a Set\n  ////////////////////////////////////////////////////////////////////////////////////\n  function Set(elems){\n    if(typeof elems == 'string')\n      this.map = stringToMap(elems);\n    else\n      this.map = {};\n  }\n\n  Set.prototype.add = function(set){\n\n    var newSet = this.clone();\n\n    for(var key in set.map)\n      newSet.map[key] = true;\n\n    return newSet;\n  };\n\n  Set.prototype.subtract = function(set){\n\n    var newSet = this.clone();\n\n    for(var key in set.map)\n      delete newSet.map[key];\n\n    return newSet;\n  };\n\n  Set.prototype.contains = function(key){\n    if(this.map[key])\n      return true;\n    else\n      return false;\n  };\n\n  Set.prototype.clone = function(){\n    var newSet = new Set();\n\n    for(var key in this.map)\n      newSet.map[key] = true;\n\n    return newSet;\n  };\n  ////////////////////////////////////////////////////////////////////////////////////\n\n  function stringToMap(string){\n    var map = {};\n    var array = string.split('');\n    var i=0;\n    var Char;\n\n    for(i=0; i<array.length; i++){\n      Char = array[i];\n      map[Char] = true;\n    }\n\n    return map;\n  }\n\n  // Backdoor for testing\n  $.fn.alphanum.backdoorAlphaNum = function(inputString, settings){\n    var combinedSettings = getCombinedSettingsAlphaNum(settings);\n\n    return trimAlphaNum(inputString, combinedSettings);\n  };\n\n  $.fn.alphanum.backdoorNumeric = function(inputString, settings){\n    var combinedSettings = getCombinedSettingsNum(settings);\n\n    return trimNum(inputString, combinedSettings);\n  };\n\n  $.fn.alphanum.setNumericSeparators = function(settings) {\n\n    if(settings.thousandsSeparator.length != 1)\n      return;\n\n    if(settings.decimalSeparator.length != 1)\n      return;\n\n    THOU_SEP = settings.thousandsSeparator;\n    DEC_SEP = settings.decimalSeparator;\n  };\n\n})( jQuery );\n\n/*eslint-disable */\n//Include the 3rd party lib: jquery.caret.js\n\n\n// Set caret position easily in jQuery\n// Written by and Copyright of Luke Morton, 2011\n// Licensed under MIT\n(function ($) {\n  // Behind the scenes method deals with browser\n  // idiosyncrasies and such\n  function caretTo(el, index) {\n    if (el.createTextRange) {\n      var range = el.createTextRange();\n      range.move(\"character\", index);\n      range.select();\n    } else if (el.selectionStart != null) {\n      el.focus();\n      el.setSelectionRange(index, index);\n    }\n  };\n\n  // Another behind the scenes that collects the\n  // current caret position for an element\n\n  // TODO: Get working with Opera\n  function caretPos(el) {\n    if (\"selection\" in document) {\n      var range = el.createTextRange();\n      try {\n        range.setEndPoint(\"EndToStart\", document.selection.createRange());\n      } catch (e) {\n        // Catch IE failure here, return 0 like\n        // other browsers\n        return 0;\n      }\n      return range.text.length;\n    } else if (el.selectionStart != null) {\n      return el.selectionStart;\n    }\n  };\n\n  // The following methods are queued under fx for more\n  // flexibility when combining with $.fn.delay() and\n  // jQuery effects.\n\n  // Set caret to a particular index\n  $.fn.alphanum_caret = function (index, offset) {\n    if (typeof(index) === \"undefined\") {\n      return caretPos(this.get(0));\n    }\n\n    return this.queue(function (next) {\n      if (isNaN(index)) {\n        var i = $(this).val().indexOf(index);\n\n        if (offset === true) {\n          i += index.length;\n        } else if (typeof(offset) !== \"undefined\") {\n          i += offset;\n        }\n\n        caretTo(this, i);\n      } else {\n        caretTo(this, index);\n      }\n\n      next();\n    });\n  };\n}(jQuery));\n\n/**********************************************************\n* Selection Library\n* Used to determine what text is highlighted in the textbox before a key is pressed.\n* http://donejs.com/docs.html#!jQuery.fn.selection\n* https://github.com/jupiterjs/jquerymx/blob/master/dom/selection/selection.js\n***********************************************************/\n(function(e){var t=function(e){return e.replace(/([a-z])([a-z]+)/gi,function(e,t,n){return t+n.toLowerCase()}).replace(/_/g,\"\")},n=function(e){return e.replace(/^([a-z]+)_TO_([a-z]+)/i,function(e,t,n){return n+\"_TO_\"+t})},r=function(e){return e?e.ownerDocument.defaultView||e.ownerDocument.parentWindow:window},i=function(t,n){var r=e.Range.current(t).clone(),i=e.Range(t).select(t);if(!r.overlaps(i)){return null}if(r.compare(\"START_TO_START\",i)<1){startPos=0;r.move(\"START_TO_START\",i)}else{fromElementToCurrent=i.clone();fromElementToCurrent.move(\"END_TO_START\",r);startPos=fromElementToCurrent.toString().length}if(r.compare(\"END_TO_END\",i)>=0){endPos=i.toString().length}else{endPos=startPos+r.toString().length}return{start:startPos,end:endPos}},s=function(t){var n=r(t);if(t.selectionStart!==undefined){if(document.activeElement&&document.activeElement!=t&&t.selectionStart==t.selectionEnd&&t.selectionStart==0){return{start:t.value.length,end:t.value.length}}return{start:t.selectionStart,end:t.selectionEnd}}else if(n.getSelection){return i(t,n)}else{try{if(t.nodeName.toLowerCase()==\"input\"){var s=r(t).document.selection.createRange(),o=t.createTextRange();o.setEndPoint(\"EndToStart\",s);var u=o.text.length;return{start:u,end:u+s.text.length}}else{var a=i(t,n);if(!a){return a}var f=e.Range.current().clone(),l=f.clone().collapse().range,c=f.clone().collapse(false).range;l.moveStart(\"character\",-1);c.moveStart(\"character\",-1);if(a.startPos!=0&&l.text==\"\"){a.startPos+=2}if(a.endPos!=0&&c.text==\"\"){a.endPos+=2}return a}}catch(h){return{start:t.value.length,end:t.value.length}}}},o=function(e,t,n){var i=r(e);if(e.setSelectionRange){if(n===undefined){e.focus();e.setSelectionRange(t,t)}else{e.select();e.selectionStart=t;e.selectionEnd=n}}else if(e.createTextRange){var s=e.createTextRange();s.moveStart(\"character\",t);n=n||t;s.moveEnd(\"character\",n-e.value.length);s.select()}else if(i.getSelection){var o=i.document,u=i.getSelection(),f=o.createRange(),l=[t,n!==undefined?n:t];a([e],l);f.setStart(l[0].el,l[0].count);f.setEnd(l[1].el,l[1].count);u.removeAllRanges();u.addRange(f)}else if(i.document.body.createTextRange){var f=document.body.createTextRange();f.moveToElementText(e);f.collapse();f.moveStart(\"character\",t);f.moveEnd(\"character\",n!==undefined?n:t);f.select()}},u=function(e,t,n,r){if(typeof n[0]===\"number\"&&n[0]<t){n[0]={el:r,count:n[0]-e}}if(typeof n[1]===\"number\"&&n[1]<=t){n[1]={el:r,count:n[1]-e};}},a=function(e,t,n){var r,i;n=n||0;for(var s=0;e[s];s++){r=e[s];if(r.nodeType===3||r.nodeType===4){i=n;n+=r.nodeValue.length;u(i,n,t,r)}else if(r.nodeType!==8){n=a(r.childNodes,t,n)}}return n};jQuery.fn.selection=function(e,t){if(e!==undefined){return this.each(function(){o(this,e,t)})}else{return s(this[0])}};e.fn.selection.getCharElement=a})(jQuery);\n/*eslint-enable */\n"]}