{"version":3,"sources":["../assets/scripts/hilitor.js"],"names":["Hilitor","id","tag","targetNode","document","getElementById","body","hiliteTag","skipTags","RegExp","colors","wordColor","colorIdx","matchRegExp","endRegExp","breakRegExp","this","setEndRegExp","regex","setBreakRegExp","setMatchType","type","openLeft","openRight","setRegex","input","replace","re","getRegex","retval","toString","hiliteWords","node","undefined","test","nodeName","hasChildNodes","i","childNodes","length","nodeType","nv","nodeValue","regs","exec","toLowerCase","match","createElement","appendChild","createTextNode","style","backgroundColor","color","after","splitText","index","substring","parentNode","insertBefore","remove","arr","getElementsByTagName","el","parent","replaceChild","firstChild","normalize","apply"],"mappings":"AAGA,QAAAA,SAAAC,EAAAC,GAGA,GAAAC,GAAAC,SAAAC,eAAAJ,IAAAG,SAAAE,KACAC,EAAAL,GAAA,OACAM,EAAA,GAAAC,QAAA,OAAAF,EAAA,uBACAG,GAAA,WACAC,KACAC,EAAA,EACAC,EAAA,GAKAC,EAAA,GAAAL,QAAA,oBAAA,KAGAM,EAAA,GAAAN,QAAA,YAAA,IAEAO,MAAAC,aAAA,SAAAC,GAEA,MADAJ,GAAAI,GAIAF,KAAAG,eAAA,SAAAD,GAEA,MADAH,GAAAG,GAIAF,KAAAI,aAAA,SAAAC,GACA,OAAAA,GACA,IAAA,OACAL,KAAAM,UAAA,EACAN,KAAAO,WAAA,CACA,MAEA,KAAA,QACAP,KAAAM,UAAA,EACAN,KAAAO,WAAA,CACA,MAEA,KAAA,OACAP,KAAAM,SAAAN,KAAAO,WAAA,CACA,MAEA,SACAP,KAAAM,SAAAN,KAAAO,WAAA,IAKAP,KAAAQ,SAAA,SAAAC,GAIA,GAHAA,EAAAA,EAAAC,QAAAZ,EAAA,IACAW,EAAAA,EAAAC,QAAAX,EAAA,KACAU,EAAAA,EAAAC,QAAA,WAAA,IACA,CACA,GAAAC,GAAA,IAAAF,EAAA,GAIA,OAHAT,MAAAM,WAAAK,EAAA,MAAAA,GACAX,KAAAO,YAAAI,GAAA,OACAd,EAAA,GAAAJ,QAAAkB,EAAA,KAGA,OAAA,GAGAX,KAAAY,SAAA,WACA,GAAAC,GAAAhB,EAAAiB,UAGA,OAFAD,GAAAA,EAAAH,QAAA,gCAAA,IACAG,EAAAA,EAAAH,QAAA,MAAA,MAKAV,KAAAe,YAAA,SAAAC,GACA,GAAAC,SAAAD,GAAAA,GACAnB,IACAL,EAAA0B,KAAAF,EAAAG,UAAA,CAEA,GAAAH,EAAAI,gBACA,IAAA,GAAAC,GAAA,EAAAA,EAAAL,EAAAM,WAAAC,OAAAF,IACArB,KAAAe,YAAAC,EAAAM,WAAAD,GAEA,IAAA,GAAAL,EAAAQ,WACAC,GAAAT,EAAAU,aAAAC,KAAA9B,EAAA+B,KAAAH,KAAA,CACA9B,EAAAgC,KAAA,GAAAE,iBACAlC,EAAAgC,KAAA,GAAAE,eAAAnC,EAAAE,IAAAF,EAAA6B,QAGA,IAAAO,GAAA1C,SAAA2C,cAAAxC,EACAuC,GAAAE,YAAA5C,SAAA6C,eAAAN,KAAA,KACAG,EAAAI,MAAAC,gBAAAxC,EAAAgC,KAAA,GAAAE,eACAC,EAAAI,MAAAE,MAAA,MAEA,IAAAC,GAAArB,EAAAsB,UAAAX,KAAAY,MACAF,GAAAX,UAAAW,EAAAX,UAAAc,UAAAb,KAAA,GAAAJ,QACAP,EAAAyB,WAAAC,aAAAZ,EAAAO,MAMArC,KAAA2C,OAAA,WAEA,IADA,GAAAC,GAAAxD,SAAAyD,qBAAAtD,GACAqD,EAAArB,SAAAuB,GAAAF,EAAA,KAAA,CACA,GAAAG,GAAAD,GAAAL,UACAM,GAAAC,aAAAF,GAAAG,WAAAH,IACAC,EAAAG,cAKAlD,KAAAmD,MAAA,SAAA1C,GAEA,GADAT,KAAA2C,SACA1B,SAAAR,GAAAA,EAIA,MAHAT,MAAAQ,SAAAC,IACAT,KAAAe,YAAA5B,GAEAU","file":"hilitor.js","sourcesContent":["// Original JavaScript code by Chirp Internet: www.chirp.com.au\n// Please acknowledge use of this code by including this header.\n\nfunction Hilitor(id, tag) {\n\n // private variables\n var targetNode = document.getElementById(id) || document.body;\n var hiliteTag = tag || \"MARK\";\n var skipTags = new RegExp(\"^(?:\" + hiliteTag + \"|SCRIPT|FORM|SPAN)$\");\n var colors = [\"#20a6a8\"];\n var wordColor = [];\n var colorIdx = 0;\n var matchRegExp = \"\";\n var openLeft = false;\n var openRight = false;\n\n // characters to strip from start and end of the input string\n var endRegExp = new RegExp('^[^\\\\w]+|[^\\\\w]+$', \"g\");\n\n // characters used to break up the input string into words\n var breakRegExp = new RegExp('[^\\\\w\\'-]+', \"g\");\n\n this.setEndRegExp = function (regex) {\n endRegExp = regex;\n return endRegExp;\n };\n\n this.setBreakRegExp = function (regex) {\n breakRegExp = regex;\n return breakRegExp;\n };\n\n this.setMatchType = function (type) {\n switch (type) {\n case \"left\":\n this.openLeft = false;\n this.openRight = true;\n break;\n\n case \"right\":\n this.openLeft = true;\n this.openRight = false;\n break;\n\n case \"open\":\n this.openLeft = this.openRight = true;\n break;\n\n default:\n this.openLeft = this.openRight = false;\n\n }\n };\n\n this.setRegex = function (input) {\n input = input.replace(endRegExp, \"\");\n input = input.replace(breakRegExp, \"|\");\n input = input.replace(/^\\||\\|$/g, \"\");\n if (input) {\n var re = \"(\" + input + \")\";\n if (!this.openLeft) re = \"\\\\b\" + re;\n if (!this.openRight) re = re + \"\\\\b\";\n matchRegExp = new RegExp(re, \"i\");\n return matchRegExp;\n }\n return false;\n };\n\n this.getRegex = function () {\n var retval = matchRegExp.toString();\n retval = retval.replace(/(^\\/(\\\\b)?|\\(|\\)|(\\\\b)?\\/i$)/g, \"\");\n retval = retval.replace(/\\|/g, \" \");\n return retval;\n };\n\n // recursively apply word highlighting\n this.hiliteWords = function (node) {\n if (node === undefined || !node) return;\n if (!matchRegExp) return;\n if (skipTags.test(node.nodeName)) return;\n\n if (node.hasChildNodes()) {\n for (var i = 0; i < node.childNodes.length; i++)\n this.hiliteWords(node.childNodes[i]);\n }\n if (node.nodeType == 3) { // NODE_TEXT\n if ((nv = node.nodeValue) && (regs = matchRegExp.exec(nv))) {\n if (!wordColor[regs[0].toLowerCase()]) {\n wordColor[regs[0].toLowerCase()] = colors[colorIdx++ % colors.length];\n }\n\n var match = document.createElement(hiliteTag);\n match.appendChild(document.createTextNode(regs[0]));\n match.style.backgroundColor = wordColor[regs[0].toLowerCase()];\n match.style.color = \"#000\";\n\n var after = node.splitText(regs.index);\n after.nodeValue = after.nodeValue.substring(regs[0].length);\n node.parentNode.insertBefore(match, after);\n }\n };\n };\n\n // remove highlighting\n this.remove = function () {\n var arr = document.getElementsByTagName(hiliteTag);\n while (arr.length && (el = arr[0])) {\n var parent = el.parentNode;\n parent.replaceChild(el.firstChild, el);\n parent.normalize();\n }\n };\n\n // start highlighting at target node\n this.apply = function (input) {\n this.remove();\n if (input === undefined || !input) return;\n if (this.setRegex(input)) {\n this.hiliteWords(targetNode);\n }\n return matchRegExp;\n };\n\n}\n"],"sourceRoot":"assets/scripts/"}