@jscrpt/common 1.2.0 → 2.0.0-beta.20211108120022

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (238) hide show
  1. package/changelog.md +24 -0
  2. package/dist/es2015/decorators/bindThis.decorator.js +24 -24
  3. package/dist/es2015/decorators/bindThis.decorator.js.map +1 -0
  4. package/dist/es2015/decorators/callOnce.decorator.js +29 -28
  5. package/dist/es2015/decorators/callOnce.decorator.js.map +1 -0
  6. package/dist/es2015/decorators/debounceCall.decorator.js +25 -26
  7. package/dist/es2015/decorators/debounceCall.decorator.js.map +1 -0
  8. package/dist/es2015/decorators/index.js +4 -4
  9. package/dist/es2015/decorators/index.js.map +1 -0
  10. package/dist/es2015/encoder/encoder.js +220 -231
  11. package/dist/es2015/encoder/encoder.js.map +1 -0
  12. package/dist/es2015/enums/index.js +2 -2
  13. package/dist/es2015/enums/index.js.map +1 -0
  14. package/dist/es2015/enums/orderByDirection.js +15 -15
  15. package/dist/es2015/enums/orderByDirection.js.map +1 -0
  16. package/dist/es2015/index.js +10 -24
  17. package/dist/es2015/index.js.map +1 -0
  18. package/dist/es2015/indexNode.js +2 -2
  19. package/dist/es2015/indexNode.js.map +1 -0
  20. package/dist/es2015/initJsDevMode.js +8 -0
  21. package/dist/es2015/initJsDevMode.js.map +1 -0
  22. package/dist/es2015/jsDevMode.js +8 -8
  23. package/dist/es2015/jsDevMode.js.map +1 -0
  24. package/dist/es2015/normalizer/charMaps.js +20 -27
  25. package/dist/es2015/normalizer/charMaps.js.map +1 -0
  26. package/dist/es2015/normalizer/index.js +3 -3
  27. package/dist/es2015/normalizer/index.js.map +1 -0
  28. package/dist/es2015/normalizer/normalizer.js +14 -14
  29. package/dist/es2015/normalizer/normalizer.js.map +1 -0
  30. package/dist/es2015/paginator/paginator.js +230 -224
  31. package/dist/es2015/paginator/paginator.js.map +1 -0
  32. package/dist/es2015/types/dictionaries.js +2 -1
  33. package/dist/es2015/types/dictionaries.js.map +1 -0
  34. package/dist/es2015/types/enums.js +2 -0
  35. package/dist/es2015/types/enums.js.map +1 -0
  36. package/dist/es2015/types/functions.js +2 -0
  37. package/dist/es2015/types/functions.js.map +1 -0
  38. package/dist/es2015/types/index.js +5 -3
  39. package/dist/es2015/types/index.js.map +1 -0
  40. package/dist/es2015/types/valueNamePair.js +2 -1
  41. package/dist/es2015/types/valueNamePair.js.map +1 -0
  42. package/dist/es2015/utils/common.js +209 -215
  43. package/dist/es2015/utils/common.js.map +1 -0
  44. package/dist/es2015/utils/index.js +4 -4
  45. package/dist/es2015/utils/index.js.map +1 -0
  46. package/dist/es2015/utils/lang.js +79 -79
  47. package/dist/es2015/utils/lang.js.map +1 -0
  48. package/dist/es2015/utils/nameof.js +6 -6
  49. package/dist/es2015/utils/nameof.js.map +1 -0
  50. package/dist/es2020/decorators/bindThis.decorator.js +23 -0
  51. package/dist/es2020/decorators/bindThis.decorator.js.map +1 -0
  52. package/dist/es2020/decorators/callOnce.decorator.js +28 -0
  53. package/dist/es2020/decorators/callOnce.decorator.js.map +1 -0
  54. package/dist/es2020/decorators/debounceCall.decorator.js +24 -0
  55. package/dist/es2020/decorators/debounceCall.decorator.js.map +1 -0
  56. package/dist/es2020/decorators/index.js +4 -0
  57. package/dist/es2020/decorators/index.js.map +1 -0
  58. package/dist/es2020/encoder/encoder.js +220 -0
  59. package/dist/es2020/encoder/encoder.js.map +1 -0
  60. package/dist/es2020/enums/index.js +2 -0
  61. package/dist/es2020/enums/index.js.map +1 -0
  62. package/dist/es2020/enums/orderByDirection.js +15 -0
  63. package/dist/es2020/enums/orderByDirection.js.map +1 -0
  64. package/dist/es2020/index.js +10 -0
  65. package/dist/es2020/index.js.map +1 -0
  66. package/dist/es2020/indexNode.js +2 -0
  67. package/dist/es2020/indexNode.js.map +1 -0
  68. package/dist/es2020/initJsDevMode.js +8 -0
  69. package/dist/es2020/initJsDevMode.js.map +1 -0
  70. package/dist/es2020/jsDevMode.js +8 -0
  71. package/dist/es2020/jsDevMode.js.map +1 -0
  72. package/dist/es2020/normalizer/charMaps.js +20 -0
  73. package/dist/es2020/normalizer/charMaps.js.map +1 -0
  74. package/dist/es2020/normalizer/index.js +3 -0
  75. package/dist/es2020/normalizer/index.js.map +1 -0
  76. package/dist/es2020/normalizer/normalizer.js +14 -0
  77. package/dist/es2020/normalizer/normalizer.js.map +1 -0
  78. package/dist/es2020/paginator/paginator.js +230 -0
  79. package/dist/es2020/paginator/paginator.js.map +1 -0
  80. package/dist/es2020/types/dictionaries.js +2 -0
  81. package/dist/es2020/types/dictionaries.js.map +1 -0
  82. package/dist/es2020/types/enums.js +2 -0
  83. package/dist/es2020/types/enums.js.map +1 -0
  84. package/dist/es2020/types/functions.js +2 -0
  85. package/dist/es2020/types/functions.js.map +1 -0
  86. package/dist/es2020/types/index.js +5 -0
  87. package/dist/es2020/types/index.js.map +1 -0
  88. package/dist/es2020/types/valueNamePair.js +2 -0
  89. package/dist/es2020/types/valueNamePair.js.map +1 -0
  90. package/dist/es2020/utils/common.js +208 -0
  91. package/dist/es2020/utils/common.js.map +1 -0
  92. package/dist/es2020/utils/index.js +4 -0
  93. package/dist/es2020/utils/index.js.map +1 -0
  94. package/dist/es2020/utils/lang.js +79 -0
  95. package/dist/es2020/utils/lang.js.map +1 -0
  96. package/dist/es2020/utils/nameof.js +6 -0
  97. package/dist/es2020/utils/nameof.js.map +1 -0
  98. package/dist/es5/decorators/bindThis.decorator.js +24 -24
  99. package/dist/es5/decorators/bindThis.decorator.js.map +1 -0
  100. package/dist/es5/decorators/callOnce.decorator.js +33 -28
  101. package/dist/es5/decorators/callOnce.decorator.js.map +1 -0
  102. package/dist/es5/decorators/debounceCall.decorator.js +30 -27
  103. package/dist/es5/decorators/debounceCall.decorator.js.map +1 -0
  104. package/dist/es5/decorators/index.js +4 -4
  105. package/dist/es5/decorators/index.js.map +1 -0
  106. package/dist/es5/encoder/encoder.js +222 -233
  107. package/dist/es5/encoder/encoder.js.map +1 -0
  108. package/dist/es5/enums/index.js +2 -2
  109. package/dist/es5/enums/index.js.map +1 -0
  110. package/dist/es5/enums/orderByDirection.js +15 -15
  111. package/dist/es5/enums/orderByDirection.js.map +1 -0
  112. package/dist/es5/index.js +10 -24
  113. package/dist/es5/index.js.map +1 -0
  114. package/dist/es5/indexNode.js +2 -2
  115. package/dist/es5/indexNode.js.map +1 -0
  116. package/dist/es5/initJsDevMode.js +8 -0
  117. package/dist/es5/initJsDevMode.js.map +1 -0
  118. package/dist/es5/jsDevMode.js +8 -8
  119. package/dist/es5/jsDevMode.js.map +1 -0
  120. package/dist/es5/normalizer/charMaps.js +20 -35
  121. package/dist/es5/normalizer/charMaps.js.map +1 -0
  122. package/dist/es5/normalizer/index.js +3 -3
  123. package/dist/es5/normalizer/index.js.map +1 -0
  124. package/dist/es5/normalizer/normalizer.js +14 -14
  125. package/dist/es5/normalizer/normalizer.js.map +1 -0
  126. package/dist/es5/paginator/paginator.js +232 -226
  127. package/dist/es5/paginator/paginator.js.map +1 -0
  128. package/dist/es5/types/dictionaries.js +2 -1
  129. package/dist/es5/types/dictionaries.js.map +1 -0
  130. package/dist/es5/types/enums.js +2 -0
  131. package/dist/es5/types/enums.js.map +1 -0
  132. package/dist/es5/types/functions.js +2 -0
  133. package/dist/es5/types/functions.js.map +1 -0
  134. package/dist/es5/types/index.js +5 -3
  135. package/dist/es5/types/index.js.map +1 -0
  136. package/dist/es5/types/valueNamePair.js +2 -1
  137. package/dist/es5/types/valueNamePair.js.map +1 -0
  138. package/dist/es5/utils/common.js +220 -232
  139. package/dist/es5/utils/common.js.map +1 -0
  140. package/dist/es5/utils/index.js +4 -4
  141. package/dist/es5/utils/index.js.map +1 -0
  142. package/dist/es5/utils/lang.js +79 -79
  143. package/dist/es5/utils/lang.js.map +1 -0
  144. package/dist/es5/utils/nameof.js +6 -6
  145. package/dist/es5/utils/nameof.js.map +1 -0
  146. package/dist/module/decorators/bindThis.decorator.js +28 -28
  147. package/dist/module/decorators/bindThis.decorator.js.map +1 -0
  148. package/dist/module/decorators/callOnce.decorator.js +33 -32
  149. package/dist/module/decorators/callOnce.decorator.js.map +1 -0
  150. package/dist/module/decorators/debounceCall.decorator.js +29 -30
  151. package/dist/module/decorators/debounceCall.decorator.js.map +1 -0
  152. package/dist/module/decorators/index.js +7 -16
  153. package/dist/module/decorators/index.js.map +1 -0
  154. package/dist/module/encoder/encoder.js +224 -235
  155. package/dist/module/encoder/encoder.js.map +1 -0
  156. package/dist/module/enums/index.js +5 -14
  157. package/dist/module/enums/index.js.map +1 -0
  158. package/dist/module/enums/orderByDirection.js +18 -18
  159. package/dist/module/enums/orderByDirection.js.map +1 -0
  160. package/dist/module/index.js +13 -37
  161. package/dist/module/index.js.map +1 -0
  162. package/dist/module/indexNode.js +5 -14
  163. package/dist/module/indexNode.js.map +1 -0
  164. package/dist/module/initJsDevMode.js +10 -0
  165. package/dist/module/initJsDevMode.js.map +1 -0
  166. package/dist/module/jsDevMode.js +12 -12
  167. package/dist/module/jsDevMode.js.map +1 -0
  168. package/dist/module/normalizer/charMaps.js +23 -31
  169. package/dist/module/normalizer/charMaps.js.map +1 -0
  170. package/dist/module/normalizer/index.js +6 -15
  171. package/dist/module/normalizer/index.js.map +1 -0
  172. package/dist/module/normalizer/normalizer.js +18 -18
  173. package/dist/module/normalizer/normalizer.js.map +1 -0
  174. package/dist/module/paginator/paginator.js +234 -228
  175. package/dist/module/paginator/paginator.js.map +1 -0
  176. package/dist/module/types/dictionaries.js +3 -3
  177. package/dist/module/types/dictionaries.js.map +1 -0
  178. package/dist/module/types/enums.js +3 -0
  179. package/dist/module/types/enums.js.map +1 -0
  180. package/dist/module/types/functions.js +3 -0
  181. package/dist/module/types/functions.js.map +1 -0
  182. package/dist/module/types/index.js +8 -15
  183. package/dist/module/types/index.js.map +1 -0
  184. package/dist/module/types/valueNamePair.js +3 -3
  185. package/dist/module/types/valueNamePair.js.map +1 -0
  186. package/dist/module/utils/common.js +232 -240
  187. package/dist/module/utils/common.js.map +1 -0
  188. package/dist/module/utils/index.js +7 -16
  189. package/dist/module/utils/index.js.map +1 -0
  190. package/dist/module/utils/lang.js +99 -99
  191. package/dist/module/utils/lang.js.map +1 -0
  192. package/dist/module/utils/nameof.js +10 -9
  193. package/dist/module/utils/nameof.js.map +1 -0
  194. package/package.json +45 -16
  195. package/src/decorators/bindThis.decorator.d.ts +5 -7
  196. package/src/decorators/bindThis.decorator.d.ts.map +1 -1
  197. package/src/decorators/callOnce.decorator.d.ts +5 -5
  198. package/src/decorators/callOnce.decorator.d.ts.map +1 -1
  199. package/src/decorators/debounceCall.decorator.d.ts +5 -5
  200. package/src/decorators/debounceCall.decorator.d.ts.map +1 -1
  201. package/src/decorators/index.d.ts +3 -3
  202. package/src/encoder/encoder.d.ts +45 -45
  203. package/src/encoder/encoder.d.ts.map +1 -1
  204. package/src/enums/index.d.ts +1 -1
  205. package/src/enums/orderByDirection.d.ts +13 -13
  206. package/src/index.d.ts +9 -17
  207. package/src/index.d.ts.map +1 -1
  208. package/src/indexNode.d.ts +1 -1
  209. package/src/initJsDevMode.d.ts +2 -0
  210. package/src/initJsDevMode.d.ts.map +1 -0
  211. package/src/jsDevMode.d.ts +8 -8
  212. package/src/jsDevMode.d.ts.map +1 -1
  213. package/src/normalizer/charMaps.d.ts +5 -9
  214. package/src/normalizer/charMaps.d.ts.map +1 -1
  215. package/src/normalizer/index.d.ts +2 -2
  216. package/src/normalizer/normalizer.d.ts +7 -6
  217. package/src/normalizer/normalizer.d.ts.map +1 -1
  218. package/src/paginator/paginator.d.ts +129 -129
  219. package/src/paginator/paginator.d.ts.map +1 -1
  220. package/src/types/dictionaries.d.ts +15 -6
  221. package/src/types/dictionaries.d.ts.map +1 -1
  222. package/src/types/enums.d.ts +7 -0
  223. package/src/types/enums.d.ts.map +1 -0
  224. package/src/types/functions.d.ts +14 -0
  225. package/src/types/functions.d.ts.map +1 -0
  226. package/src/types/index.d.ts +4 -2
  227. package/src/types/index.d.ts.map +1 -1
  228. package/src/types/valueNamePair.d.ts +13 -13
  229. package/src/utils/common.d.ts +181 -122
  230. package/src/utils/common.d.ts.map +1 -1
  231. package/src/utils/index.d.ts +3 -3
  232. package/src/utils/lang.d.ts +41 -41
  233. package/src/utils/lang.d.ts.map +1 -1
  234. package/src/utils/nameof.d.ts +5 -5
  235. package/src/utils/nameof.d.ts.map +1 -1
  236. package/version.bak +1 -1
  237. package/.jsbeautifyrc +0 -7
  238. package/appveyor.yml +0 -67
@@ -1,231 +1,220 @@
1
- /**
2
- * A Javascript object to encode and/or decode html characters using HTML or Numeric entities that handles double or partial encoding
3
- * Author: R Reid
4
- * source: http://www.strictly-software.com/htmlencode
5
- * Licences: GPL, The MIT License (MIT)
6
- * Copyright: (c) 2011 Robert Reid - Strictly-Software.com
7
- *
8
- * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
9
- * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
10
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
11
- *
12
- * Revision:
13
- * 2011-07-14, Jacques-Yves Bleau:
14
- * - fixed conversion error with capitalized accentuated characters
15
- * + converted arr1 and arr2 to object property to remove redundancy
16
- *
17
- * Revision:
18
- * 2011-11-10, Ce-Yi Hio:
19
- * - fixed conversion error with a number of capitalized entity characters
20
- *
21
- * Revision:
22
- * 2011-11-10, Rob Reid:
23
- * - changed array format
24
- *
25
- * Revision:
26
- * 2012-09-23, Alex Oss:
27
- * - replaced string concatonation in numEncode with string builder, push and join for peformance with ammendments by Rob Reid
28
- */
29
- export class Encoder {
30
- constructor() {
31
- // When encoding do we convert characters into html or numerical entities
32
- this.EncodeType = "entity"; // entity OR numerical
33
- // arrays for conversion from HTML Entities to Numerical values
34
- this.arr1 = [' ', '¡', '¢', '£', '¤', '¥', '¦', '§', '¨', '©', 'ª', '«', '¬', '­', '®', '¯', '°', '±', '²', '³', '´', 'µ', '¶', '·', '¸', '¹', 'º', '»', '¼', '½', '¾', '¿', 'À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Æ', 'Ç', 'È', 'É', 'Ê', 'Ë', 'Ì', 'Í', 'Î', 'Ï', 'Ð', 'Ñ', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', '×', 'Ø', 'Ù', 'Ú', 'Û', 'Ü', 'Ý', 'Þ', 'ß', 'à', 'á', 'â', 'ã', 'ä', 'å', 'æ', 'ç', 'è', 'é', 'ê', 'ë', 'ì', 'í', 'î', 'ï', 'ð', 'ñ', 'ò', 'ó', 'ô', 'õ', 'ö', '÷', 'ø', 'ù', 'ú', 'û', 'ü', 'ý', 'þ', 'ÿ', '"', '&', '<', '>', 'Œ', 'œ', 'Š', 'š', 'Ÿ', 'ˆ', '˜', ' ', ' ', ' ', '‌', '‍', '‎', '‏', '–', '—', '‘', '’', '‚', '“', '”', '„', '†', '‡', '‰', '‹', '›', '€', 'ƒ', 'Α', 'Β', 'Γ', 'Δ', 'Ε', 'Ζ', 'Η', 'Θ', 'Ι', 'Κ', 'Λ', 'Μ', 'Ν', 'Ξ', 'Ο', 'Π', 'Ρ', 'Σ', 'Τ', 'Υ', 'Φ', 'Χ', 'Ψ', 'Ω', 'α', 'β', 'γ', 'δ', 'ε', 'ζ', 'η', 'θ', 'ι', 'κ', 'λ', 'μ', 'ν', 'ξ', 'ο', 'π', 'ρ', 'ς', 'σ', 'τ', 'υ', 'φ', 'χ', 'ψ', 'ω', 'ϑ', 'ϒ', 'ϖ', '•', '…', '′', '″', '‾', '⁄', '℘', 'ℑ', 'ℜ', '™', 'ℵ', '←', '↑', '→', '↓', '↔', '↵', '⇐', '⇑', '⇒', '⇓', '⇔', '∀', '∂', '∃', '∅', '∇', '∈', '∉', '∋', '∏', '∑', '−', '∗', '√', '∝', '∞', '∠', '∧', '∨', '∩', '∪', '∫', '∴', '∼', '≅', '≈', '≠', '≡', '≤', '≥', '⊂', '⊃', '⊄', '⊆', '⊇', '⊕', '⊗', '⊥', '⋅', '⌈', '⌉', '⌊', '⌋', '⟨', '⟩', '◊', '♠', '♣', '♥', '♦'];
35
- this.arr2 = [' ', '¡', '¢', '£', '¤', '¥', '¦', '§', '¨', '©', 'ª', '«', '¬', '­', '®', '¯', '°', '±', '²', '³', '´', 'µ', '¶', '·', '¸', '¹', 'º', '»', '¼', '½', '¾', '¿', 'À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Æ', 'Ç', 'È', 'É', 'Ê', 'Ë', 'Ì', 'Í', 'Î', 'Ï', 'Ð', 'Ñ', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', '×', 'Ø', 'Ù', 'Ú', 'Û', 'Ü', 'Ý', 'Þ', 'ß', 'à', 'á', 'â', 'ã', 'ä', 'å', 'æ', 'ç', 'è', 'é', 'ê', 'ë', 'ì', 'í', 'î', 'ï', 'ð', 'ñ', 'ò', 'ó', 'ô', 'õ', 'ö', '÷', 'ø', 'ù', 'ú', 'û', 'ü', 'ý', 'þ', 'ÿ', '"', '&', '<', '>', 'Œ', 'œ', 'Š', 'š', 'Ÿ', 'ˆ', '˜', ' ', ' ', ' ', '‌', '‍', '‎', '‏', '–', '—', '‘', '’', '‚', '“', '”', '„', '†', '‡', '‰', '‹', '›', '€', 'ƒ', 'Α', 'Β', 'Γ', 'Δ', 'Ε', 'Ζ', 'Η', 'Θ', 'Ι', 'Κ', 'Λ', 'Μ', 'Ν', 'Ξ', 'Ο', 'Π', 'Ρ', 'Σ', 'Τ', 'Υ', 'Φ', 'Χ', 'Ψ', 'Ω', 'α', 'β', 'γ', 'δ', 'ε', 'ζ', 'η', 'θ', 'ι', 'κ', 'λ', 'μ', 'ν', 'ξ', 'ο', 'π', 'ρ', 'ς', 'σ', 'τ', 'υ', 'φ', 'χ', 'ψ', 'ω', 'ϑ', 'ϒ', 'ϖ', '•', '…', '′', '″', '‾', '⁄', '℘', 'ℑ', 'ℜ', '™', 'ℵ', '←', '↑', '→', '↓', '↔', '↵', '⇐', '⇑', '⇒', '⇓', '⇔', '∀', '∂', '∃', '∅', '∇', '∈', '∉', '∋', '∏', '∑', '−', '∗', '√', '∝', '∞', '∠', '∧', '∨', '∩', '∪', '∫', '∴', '∼', '≅', '≈', '≠', '≡', '≤', '≥', '⊂', '⊃', '⊄', '⊆', '⊇', '⊕', '⊗', '⊥', '⋅', '⌈', '⌉', '⌊', '⌋', '〈', '〉', '◊', '♠', '♣', '♥', '♦'];
36
- }
37
- isEmpty(val) {
38
- if (val) {
39
- return ((val === null) || val.length == 0 || /^\s+$/.test(val));
40
- }
41
- else {
42
- return true;
43
- }
44
- }
45
- ;
46
- // Convert HTML entities into numerical entities
47
- HTML2Numerical(s) {
48
- return this.swapArrayVals(s, this.arr1, this.arr2);
49
- }
50
- ;
51
- // Convert Numerical entities into HTML entities
52
- NumericalToHTML(s) {
53
- return this.swapArrayVals(s, this.arr2, this.arr1);
54
- }
55
- ;
56
- // Numerically encodes all unicode characters
57
- numEncode(s) {
58
- if (this.isEmpty(s)) {
59
- return "";
60
- }
61
- var a = [], l = s.length;
62
- for (var i = 0; i < l; i++) {
63
- var c = s.charAt(i);
64
- if (c < " " || c > "~") {
65
- a.push("&#");
66
- a.push(c.charCodeAt()); //numeric value of code point
67
- a.push(";");
68
- }
69
- else {
70
- a.push(c);
71
- }
72
- }
73
- return a.join("");
74
- }
75
- ;
76
- // HTML Decode numerical and HTML entities back to original values
77
- htmlDecode(s) {
78
- var c, m, d = s;
79
- if (this.isEmpty(d)) {
80
- return "";
81
- }
82
- // convert HTML entites back to numerical entites first
83
- d = this.HTML2Numerical(d);
84
- // look for numerical entities &#34;
85
- var arr = d.match(/&#[0-9]{1,5};/g);
86
- // if no matches found in string then skip
87
- if (arr != null) {
88
- for (var x = 0; x < arr.length; x++) {
89
- m = arr[x];
90
- c = m.substring(2, m.length - 1); //get numeric part which is refernce to unicode character
91
- // if its a valid number we can decode
92
- if (c >= -32768 && c <= 65535) {
93
- // decode every single match within string
94
- d = d.replace(m, String.fromCharCode(c));
95
- }
96
- else {
97
- d = d.replace(m, ""); //invalid so replace with nada
98
- }
99
- }
100
- }
101
- return d;
102
- }
103
- ;
104
- // encode an input string into either numerical or HTML entities
105
- htmlEncode(s, dbl) {
106
- if (this.isEmpty(s)) {
107
- return "";
108
- }
109
- // do we allow double encoding? E.g will &amp; be turned into &amp;amp;
110
- dbl = dbl || false; //default to prevent double encoding
111
- // if allowing double encoding we do ampersands first
112
- if (dbl) {
113
- if (this.EncodeType == "numerical") {
114
- s = s.replace(/&/g, "&#38;");
115
- }
116
- else {
117
- s = s.replace(/&/g, "&amp;");
118
- }
119
- }
120
- // convert the xss chars to numerical entities ' " < >
121
- s = this.XSSEncode(s, false);
122
- if (this.EncodeType == "numerical" || !dbl) {
123
- // Now call function that will convert any HTML entities to numerical codes
124
- s = this.HTML2Numerical(s);
125
- }
126
- // Now encode all chars above 127 e.g unicode
127
- s = this.numEncode(s);
128
- // now we know anything that needs to be encoded has been converted to numerical entities we
129
- // can encode any ampersands & that are not part of encoded entities
130
- // to handle the fact that I need to do a negative check and handle multiple ampersands &&&
131
- // I am going to use a placeholder
132
- // if we don't want double encoded entities we ignore the & in existing entities
133
- if (!dbl) {
134
- s = s.replace(/&#/g, "##AMPHASH##");
135
- if (this.EncodeType == "numerical") {
136
- s = s.replace(/&/g, "&#38;");
137
- }
138
- else {
139
- s = s.replace(/&/g, "&amp;");
140
- }
141
- s = s.replace(/##AMPHASH##/g, "&#");
142
- }
143
- // replace any malformed entities
144
- s = s.replace(/&#\d*([^\d;]|$)/g, "$1");
145
- if (!dbl) {
146
- // safety check to correct any double encoded &amp;
147
- s = this.correctEncoding(s);
148
- }
149
- // now do we need to convert our numerical encoded string into entities
150
- if (this.EncodeType == "entity") {
151
- s = this.NumericalToHTML(s);
152
- }
153
- return s;
154
- }
155
- ;
156
- // Encodes the basic 4 characters used to malform HTML in XSS hacks
157
- XSSEncode(s, en) {
158
- if (!this.isEmpty(s)) {
159
- en = en || true;
160
- // do we convert to numerical or html entity?
161
- if (en) {
162
- s = s.replace(/\'/g, "&#39;"); //no HTML equivalent as &apos is not cross browser supported
163
- s = s.replace(/\"/g, "&quot;");
164
- s = s.replace(/</g, "&lt;");
165
- s = s.replace(/>/g, "&gt;");
166
- }
167
- else {
168
- s = s.replace(/\'/g, "&#39;"); //no HTML equivalent as &apos is not cross browser supported
169
- s = s.replace(/\"/g, "&#34;");
170
- s = s.replace(/</g, "&#60;");
171
- s = s.replace(/>/g, "&#62;");
172
- }
173
- return s;
174
- }
175
- else {
176
- return "";
177
- }
178
- }
179
- ;
180
- // returns true if a string contains html or numerical encoded entities
181
- hasEncoded(s) {
182
- if (/&#[0-9]{1,5};/g.test(s)) {
183
- return true;
184
- }
185
- else if (/&[A-Z]{2,6};/gi.test(s)) {
186
- return true;
187
- }
188
- else {
189
- return false;
190
- }
191
- }
192
- ;
193
- // will remove any unicode characters
194
- stripUnicode(s) {
195
- return s.replace(/[^\x20-\x7E]/g, "");
196
- }
197
- ;
198
- // corrects any double encoded &amp; entities e.g &amp;amp;
199
- correctEncoding(s) {
200
- return s.replace(/(&amp;)(amp;)+/, "$1");
201
- }
202
- ;
203
- // Function to loop through an array swaping each item with the value from another array e.g swap HTML entities with Numericals
204
- swapArrayVals(s, arr1, arr2) {
205
- if (this.isEmpty(s)) {
206
- return "";
207
- }
208
- var re;
209
- if (arr1 && arr2) {
210
- //ShowDebug("in swapArrayVals arr1.length = " + arr1.length + " arr2.length = " + arr2.length)
211
- // array lengths must match
212
- if (arr1.length == arr2.length) {
213
- for (var x = 0, i = arr1.length; x < i; x++) {
214
- re = new RegExp(arr1[x], 'g');
215
- s = s.replace(re, arr2[x]); //swap arr1 item with matching item from arr2
216
- }
217
- }
218
- }
219
- return s;
220
- }
221
- ;
222
- inArray(item, arr) {
223
- for (var i = 0, x = arr.length; i < x; i++) {
224
- if (arr[i] === item) {
225
- return i;
226
- }
227
- }
228
- return -1;
229
- }
230
- }
231
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5jb2Rlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbmNvZGVyL2VuY29kZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJCRztBQUVILE1BQU0sT0FBTyxPQUFPO0lBQXBCO1FBRUMseUVBQXlFO1FBQ3pFLGVBQVUsR0FBVyxRQUFRLENBQUMsQ0FBRSxzQkFBc0I7UUFjdEQsK0RBQStEO1FBQy9ELFNBQUksR0FBYSxDQUFDLFFBQVEsRUFBQyxTQUFTLEVBQUMsUUFBUSxFQUFDLFNBQVMsRUFBQyxVQUFVLEVBQUMsT0FBTyxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsT0FBTyxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsU0FBUyxFQUFDLE9BQU8sRUFBQyxPQUFPLEVBQUMsT0FBTyxFQUFDLFFBQVEsRUFBQyxPQUFPLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFNBQVMsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFNBQVMsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxTQUFTLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFNBQVMsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxTQUFTLEVBQUMsUUFBUSxFQUFDLE9BQU8sRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxTQUFTLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxTQUFTLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsU0FBUyxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFNBQVMsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsU0FBUyxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFNBQVMsRUFBQyxRQUFRLEVBQUMsT0FBTyxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFNBQVMsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxTQUFTLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxTQUFTLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxTQUFTLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLE9BQU8sRUFBQyxPQUFPLEVBQUMsT0FBTyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFNBQVMsRUFBQyxRQUFRLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxXQUFXLEVBQUMsUUFBUSxFQUFDLE9BQU8sRUFBQyxTQUFTLEVBQUMsUUFBUSxFQUFDLFNBQVMsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxPQUFPLEVBQUMsU0FBUyxFQUFDLE9BQU8sRUFBQyxXQUFXLEVBQUMsT0FBTyxFQUFDLE9BQU8sRUFBQyxPQUFPLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxRQUFRLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxXQUFXLEVBQUMsUUFBUSxFQUFDLE9BQU8sRUFBQyxTQUFTLEVBQUMsUUFBUSxFQUFDLFNBQVMsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxPQUFPLEVBQUMsVUFBVSxFQUFDLFNBQVMsRUFBQyxPQUFPLEVBQUMsV0FBVyxFQUFDLE9BQU8sRUFBQyxPQUFPLEVBQUMsT0FBTyxFQUFDLFNBQVMsRUFBQyxZQUFZLEVBQUMsU0FBUyxFQUFDLE9BQU8sRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxVQUFVLEVBQUMsU0FBUyxFQUFDLFFBQVEsRUFBQyxTQUFTLEVBQUMsV0FBVyxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsU0FBUyxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxRQUFRLEVBQUMsU0FBUyxFQUFDLE1BQU0sRUFBQyxRQUFRLEVBQUMsT0FBTyxFQUFDLFNBQVMsRUFBQyxVQUFVLEVBQUMsU0FBUyxFQUFDLFFBQVEsRUFBQyxTQUFTLEVBQUMsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLEVBQUMsT0FBTyxFQUFDLE9BQU8sRUFBQyxPQUFPLEVBQUMsVUFBVSxFQUFDLE9BQU8sRUFBQyxRQUFRLEVBQUMsU0FBUyxFQUFDLE1BQU0sRUFBQyxTQUFTLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxPQUFPLEVBQUMsT0FBTyxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFNBQVMsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxPQUFPLEVBQUMsVUFBVSxFQUFDLFNBQVMsRUFBQyxVQUFVLEVBQUMsU0FBUyxDQUFDLENBQUM7UUFDMzRFLFNBQUksR0FBYSxDQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLE9BQU8sRUFBQyxPQUFPLEVBQUMsT0FBTyxFQUFDLE9BQU8sRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxDQUFDLENBQUM7SUFtUXgwRSxDQUFDO0lBalJBLE9BQU8sQ0FBQyxHQUFPO1FBRWQsSUFBRyxHQUFHLEVBQ0E7WUFDTCxPQUFP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YW5kL29yIGRlY29kZSBodG1sIGNoYXJhY3RlcnMgdXNpbmcgSFRNTCBvciBOdW1lcmljIGVudGl0aWVzIHRoYXQgaGFuZGxlcyBkb3VibGUgb3IgcGFydGlhbCBlbmNvZGluZ1xyXG4gKiBBdXRob3I6IFIgUmVpZFxyXG4gKiBzb3VyY2U6IGh0dHA6Ly93d3cuc3RyaWN0bHktc29mdHdhcmUuY29tL2h0bWxlbmNvZGVcclxuICogTGljZW5jZXM6IEdQTCwgVGhlIE1JVCBMaWNlbnNlIChNSVQpXHJcbiAqIENvcHlyaWdodDogKGMpIDIwMTEgUm9iZXJ0IFJlaWQgLSBTdHJpY3RseS1Tb2Z0d2FyZS5jb21cclxuICpcclxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcclxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXHJcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxyXG4gKlxyXG4gKiBSZXZpc2lvbjpcclxuICogIDIwMTEtMDctMTQsIEphY3F1ZXMtWXZlcyBCbGVhdTpcclxuICogICAgICAgLSBmaXhlZCBjb252ZXJzaW9uIGVycm9yIHdpdGggY2FwaXRhbGl6ZWQgYWNjZW50dWF0ZWQgY2hhcmFjdGVyc1xyXG4gKiAgICAgICArIGNvbnZlcnRlZCBhcnIxIGFuZCBhcnIyIHRvIG9iamVjdCBwcm9wZXJ0eSB0byByZW1vdmUgcmVkdW5kYW5jeVxyXG4gKlxyXG4gKiBSZXZpc2lvbjpcclxuICogIDIwMTEtMTEtMTAsIENlLVlpIEhpbzpcclxuICogICAgICAgLSBmaXhlZCBjb252ZXJzaW9uIGVycm9yIHdpdGggYSBudW1iZXIgb2YgY2FwaXRhbGl6ZWQgZW50aXR5IGNoYXJhY3RlcnNcclxuICpcclxuICogUmV2aXNpb246XHJcbiAqICAyMDExLTExLTEwLCBSb2IgUmVpZDpcclxuICpcdFx0IC0gY2hhbmdlZCBhcnJheSBmb3JtYXRcclxuICpcclxuICogUmV2aXNpb246XHJcbiAqICAyMDEyLTA5LTIzLCBBbGV4IE9zczpcclxuICpcdFx0IC0gcmVwbGFjZWQgc3RyaW5nIGNvbmNhdG9uYXRpb24gaW4gbnVtRW5jb2RlIHdpdGggc3RyaW5nIGJ1aWxkZXIsIHB1c2ggYW5kIGpvaW4gZm9yIHBlZm9ybWFuY2Ugd2l0aCBhbW1lbmRtZW50cyBieSBSb2IgUmVpZFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjbGFzcyBFbmNvZGVyXHJcbntcclxuXHQvLyBXaGVuIGVuY29kaW5nIGRvIHdlIGNvbnZlcnQgY2hhcmFjdGVycyBpbnRvIGh0bWwgb3IgbnVtZXJpY2FsIGVudGl0aWVzXHJcblx0RW5jb2RlVHlwZTogc3RyaW5nID0gXCJlbnRpdHlcIjsgIC8vIGVudGl0eSBPUiBudW1lcmljYWxcclxuXHJcblx0aXNFbXB0eSh2YWw6YW55KVxyXG4gICAge1xyXG5cdFx0aWYodmFsKVxyXG4gICAgICAgIHtcclxuXHRcdFx0cmV0dXJuICgodmFsPT09bnVsbCkgfHwgdmFsLmxlbmd0aD09MCB8fCAvXlxccyskLy50ZXN0KHZhbCkpO1xyXG5cdFx0fVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cdH07XHJcblxyXG5cdC8vIGFycmF5cyBmb3IgY29udmVyc2lvbiBmcm9tIEhUTUwgRW50aXRpZXMgdG8gTnVtZXJpY2FsIHZhbHVlc1xyXG5cdGFycjE6IHN0cmluZ1tdID0gWycmbmJzcDsnLCcmaWV4Y2w7JywnJmNlbnQ7JywnJnBvdW5kOycsJyZjdXJyZW47JywnJnllbjsnLCcmYnJ2YmFyOycsJyZzZWN0OycsJyZ1bWw7JywnJmNvcHk7JywnJm9yZGY7JywnJmxhcXVvOycsJyZub3Q7JywnJnNoeTsnLCcmcmVnOycsJyZtYWNyOycsJyZkZWc7JywnJnBsdXNtbjsnLCcmc3VwMjsnLCcmc3VwMzsnLCcmYWN1dGU7JywnJm1pY3JvOycsJyZwYXJhOycsJyZtaWRkb3Q7JywnJmNlZGlsOycsJyZzdXAxOycsJyZvcmRtOycsJyZyYXF1bzsnLCcmZnJhYzE0OycsJyZmcmFjMTI7JywnJmZyYWMzNDsnLCcmaXF1ZXN0OycsJyZBZ3JhdmU7JywnJkFhY3V0ZTsnLCcmQWNpcmM7JywnJkF0aWxkZTsnLCcmQXVtbDsnLCcmQXJpbmc7JywnJkFFbGlnOycsJyZDY2VkaWw7JywnJkVncmF2ZTsnLCcmRWFjdXRlOycsJyZFY2lyYzsnLCcmRXVtbDsnLCcmSWdyYXZlOycsJyZJYWN1dGU7JywnJkljaXJjOycsJyZJdW1sOycsJyZFVEg7JywnJk50aWxkZTsnLCcmT2dyYXZlOycsJyZPYWN1dGU7JywnJk9jaXJjOycsJyZPdGlsZGU7JywnJk91bWw7JywnJnRpbWVzOycsJyZPc2xhc2g7JywnJlVncmF2ZTsnLCcmVWFjdXRlOycsJyZVY2lyYzsnLCcmVXVtbDsnLCcmWWFjdXRlOycsJyZUSE9STjsnLCcmc3psaWc7JywnJmFncmF2ZTsnLCcmYWFjdXRlOycsJyZhY2lyYzsnLCcmYXRpbGRlOycsJyZhdW1sOycsJyZhcmluZzsnLCcmYWVsaWc7JywnJmNjZWRpbDsnLCcmZWdyYXZlOycsJyZlYWN1dGU7JywnJmVjaXJjOycsJyZldW1sOycsJyZpZ3JhdmU7JywnJmlhY3V0ZTsnLCcmaWNpcmM7JywnJml1bWw7JywnJmV0aDsnLCcmbnRpbGRlOycsJyZvZ3JhdmU7JywnJm9hY3V0ZTsnLCcmb2NpcmM7JywnJm90aWxkZTsnLCcmb3VtbDsnLCcmZGl2aWRlOycsJyZvc2xhc2g7JywnJnVncmF2ZTsnLCcmdWFjdXRlOycsJyZ1Y2lyYzsnLCcmdXVtbDsnLCcmeWFjdXRlOycsJyZ0aG9ybjsnLCcmeXVtbDsnLCcmcXVvdDsnLCcmYW1wOycsJyZsdDsnLCcmZ3Q7JywnJk9FbGlnOycsJyZvZWxpZzsnLCcmU2Nhcm9uOycsJyZzY2Fyb247JywnJll1bWw7JywnJmNpcmM7JywnJnRpbGRlOycsJyZlbnNwOycsJyZlbXNwOycsJyZ0aGluc3A7JywnJnp3bmo7JywnJnp3ajsnLCcmbHJtOycsJyZybG07JywnJm5kYXNoOycsJyZtZGFzaDsnLCcmbHNxdW87JywnJnJzcXVvOycsJyZzYnF1bzsnLCcmbGRxdW87JywnJnJkcXVvOycsJyZiZHF1bzsnLCcmZGFnZ2VyOycsJyZEYWdnZXI7JywnJnBlcm1pbDsnLCcmbHNhcXVvOycsJyZyc2FxdW87JywnJmV1cm87JywnJmZub2Y7JywnJkFscGhhOycsJyZCZXRhOycsJyZHYW1tYTsnLCcmRGVsdGE7JywnJkVwc2lsb247JywnJlpldGE7JywnJkV0YTsnLCcmVGhldGE7JywnJklvdGE7JywnJkthcHBhOycsJyZMYW1iZGE7JywnJk11OycsJyZOdTsnLCcmWGk7JywnJk9taWNyb247JywnJlBpOycsJyZSaG87JywnJlNpZ21hOycsJyZUYXU7JywnJlVwc2lsb247JywnJlBoaTsnLCcmQ2hpOycsJyZQc2k7JywnJk9tZWdhOycsJyZhbHBoYTsnLCcmYmV0YTsnLCcmZ2FtbWE7JywnJmRlbHRhOycsJyZlcHNpbG9uOycsJyZ6ZXRhOycsJyZldGE7JywnJnRoZXRhOycsJyZpb3RhOycsJyZrYXBwYTsnLCcmbGFtYmRhOycsJyZtdTsnLCcmbnU7JywnJnhpOycsJyZvbWljcm9uOycsJyZwaTsnLCcmcmhvOycsJyZzaWdtYWY7JywnJnNpZ21hOycsJyZ0YXU7JywnJnVwc2lsb247JywnJnBoaTsnLCcmY2hpOycsJyZwc2k7JywnJm9tZWdhOycsJyZ0aGV0YXN5bTsnLCcmdXBzaWg7JywnJnBpdjsnLCcmYnVsbDsnLCcmaGVsbGlwOycsJyZwcmltZTsnLCcmUHJpbWU7JywnJm9saW5lOycsJyZmcmFzbDsnLCcmd2VpZXJwOycsJyZpbWFnZTsnLCcmcmVhbDsnLCcmdHJhZGU7JywnJmFsZWZzeW07JywnJmxhcnI7JywnJnVhcnI7JywnJnJhcnI7JywnJmRhcnI7JywnJmhhcnI7JywnJmNyYXJyOycsJyZsQXJyOycsJyZ1QXJyOycsJyZyQXJyOycsJyZkQXJyOycsJyZoQXJyOycsJyZmb3JhbGw7JywnJnBhcnQ7JywnJmV4aXN0OycsJyZlbXB0eTsnLCcmbmFibGE7JywnJmlzaW47JywnJm5vdGluOycsJyZuaTsnLCcmcHJvZDsnLCcmc3VtOycsJyZtaW51czsnLCcmbG93YXN0OycsJyZyYWRpYzsnLCcmcHJvcDsnLCcmaW5maW47JywnJmFuZzsnLCcmYW5kOycsJyZvcjsnLCcmY2FwOycsJyZjdXA7JywnJmludDsnLCcmdGhlcmU0OycsJyZzaW07JywnJmNvbmc7JywnJmFzeW1wOycsJyZuZTsnLCcmZXF1aXY7JywnJmxlOycsJyZnZTsnLCcmc3ViOycsJyZzdXA7JywnJm5zdWI7JywnJnN1YmU7JywnJnN1cGU7JywnJm9wbHVzOycsJyZvdGltZXM7JywnJnBlcnA7JywnJnNkb3Q7JywnJmxjZWlsOycsJyZyY2VpbDsnLCcmbGZsb29yOycsJyZyZmxvb3I7JywnJmxhbmc7JywnJnJhbmc7JywnJmxvejsnLCcmc3BhZGVzOycsJyZjbHViczsnLCcmaGVhcnRzOycsJyZkaWFtczsnXTtcclxuXHRhcnIyOiBzdHJpbmdbXSA9IFsnJiMxNjA7JywnJiMxNjE7JywnJiMxNjI7JywnJiMxNjM7JywnJiMxNjQ7JywnJiMxNjU7JywnJiMxNjY7JywnJiMxNjc7JywnJiMxNjg7JywnJiMxNjk7JywnJiMxNzA7JywnJiMxNzE7JywnJiMxNzI7JywnJiMxNzM7JywnJiMxNzQ7JywnJiMxNzU7JywnJiMxNzY7JywnJiMxNzc7JywnJiMxNzg7JywnJiMxNzk7JywnJiMxODA7JywnJiMxODE7JywnJiMxODI7JywnJiMxODM7JywnJiMxODQ7JywnJiMxODU7JywnJiMxODY7JywnJiMxODc7JywnJiMxODg7JywnJiMxODk7JywnJiMxOTA7JywnJiMxOTE7JywnJiMxOTI7JywnJiMxOTM7JywnJiMxOTQ7JywnJiMxOTU7JywnJiMxOTY7JywnJiMxOTc7JywnJiMxOTg7JywnJiMxOTk7JywnJiMyMDA7JywnJiMyMDE7JywnJiMyMDI7JywnJiMyMDM7JywnJiMyMDQ7JywnJiMyMDU7JywnJiMyMDY7JywnJiMyMDc7JywnJiMyMDg7JywnJiMyMDk7JywnJiMyMTA7JywnJiMyMTE7JywnJiMyMTI7JywnJiMyMTM7JywnJiMyMTQ7JywnJiMyMTU7JywnJiMyMTY7JywnJiMyMTc7JywnJiMyMTg7JywnJiMyMTk7JywnJiMyMjA7JywnJiMyMjE7JywnJiMyMjI7JywnJiMyMjM7JywnJiMyMjQ7JywnJiMyMjU7JywnJiMyMjY7JywnJiMyMjc7JywnJiMyMjg7JywnJiMyMjk7JywnJiMyMzA7JywnJiMyMzE7JywnJiMyMzI7JywnJiMyMzM7JywnJiMyMzQ7JywnJiMyMzU7JywnJiMyMzY7JywnJiMyMzc7JywnJiMyMzg7JywnJiMyMzk7JywnJiMyNDA7JywnJiMyNDE7JywnJiMyNDI7JywnJiMyNDM7JywnJiMyNDQ7JywnJiMyNDU7JywnJiMyNDY7JywnJiMyNDc7JywnJiMyNDg7JywnJiMyNDk7JywnJiMyNTA7JywnJiMyNTE7JywnJiMyNTI7JywnJiMyNTM7JywnJiMyNTQ7JywnJiMyNTU7JywnJiMzNDsnLCcmIzM4OycsJyYjNjA7JywnJiM2MjsnLCcmIzMzODsnLCcmIzMzOTsnLCcmIzM1MjsnLCcmIzM1MzsnLCcmIzM3NjsnLCcmIzcxMDsnLCcmIzczMjsnLCcmIzgxOTQ7JywnJiM4MTk1OycsJyYjODIwMTsnLCcmIzgyMDQ7JywnJiM4MjA1OycsJyYjODIwNjsnLCcmIzgyMDc7JywnJiM4MjExOycsJyYjODIxMjsnLCcmIzgyMTY7JywnJiM4MjE3OycsJyYjODIxODsnLCcmIzgyMjA7JywnJiM4MjIxOycsJyYjODIyMjsnLCcmIzgyMjQ7JywnJiM4MjI1OycsJyYjODI0MDsnLCcmIzgyNDk7JywnJiM4MjUwOycsJyYjODM2NDsnLCcmIzQwMjsnLCcmIzkxMzsnLCcmIzkxNDsnLCcmIzkxNTsnLCcmIzkxNjsnLCcmIzkxNzsnLCcmIzkxODsnLCcmIzkxOTsnLCcmIzkyMDsnLCcmIzkyMTsnLCcmIzkyMjsnLCcmIzkyMzsnLCcmIzkyNDsnLCcmIzkyNTsnLCcmIzkyNjsnLCcmIzkyNzsnLCcmIzkyODsnLCcmIzkyOTsnLCcmIzkzMTsnLCcmIzkzMjsnLCcmIzkzMzsnLCcmIzkzNDsnLCcmIzkzNTsnLCcmIzkzNjsnLCcmIzkzNzsnLCcmIzk0NTsnLCcmIzk0NjsnLCcmIzk0NzsnLCcmIzk0ODsnLCcmIzk0OTsnLCcmIzk1MDsnLCcmIzk1MTsnLCcmIzk1MjsnLCcmIzk1MzsnLCcmIzk1NDsnLCcmIzk1NTsnLCcmIzk1NjsnLCcmIzk1NzsnLCcmIzk1ODsnLCcmIzk1OTsnLCcmIzk2MDsnLCcmIzk2MTsnLCcmIzk2MjsnLCcmIzk2MzsnLCcmIzk2NDsnLCcmIzk2NTsnLCcmIzk2NjsnLCcmIzk2NzsnLCcmIzk2ODsnLCcmIzk2OTsnLCcmIzk3NzsnLCcmIzk3ODsnLCcmIzk4MjsnLCcmIzgyMjY7JywnJiM4MjMwOycsJyYjODI0MjsnLCcmIzgyNDM7JywnJiM4MjU0OycsJyYjODI2MDsnLCcmIzg0NzI7JywnJiM4NDY1OycsJyYjODQ3NjsnLCcmIzg0ODI7JywnJiM4NTAxOycsJyYjODU5MjsnLCcmIzg1OTM7JywnJiM4NTk0OycsJyYjODU5NTsnLCcmIzg1OTY7JywnJiM4NjI5OycsJyYjODY1NjsnLCcmIzg2NTc7JywnJiM4NjU4OycsJyYjODY1OTsnLCcmIzg2NjA7JywnJiM4NzA0OycsJyYjODcwNjsnLCcmIzg3MDc7JywnJiM4NzA5OycsJyYjODcxMTsnLCcmIzg3MTI7JywnJiM4NzEzOycsJyYjODcxNTsnLCcmIzg3MTk7JywnJiM4NzIxOycsJyYjODcyMjsnLCcmIzg3Mjc7JywnJiM4NzMwOycsJyYjODczMzsnLCcmIzg3MzQ7JywnJiM4NzM2OycsJyYjODc0MzsnLCcmIzg3NDQ7JywnJiM4NzQ1OycsJyYjODc0NjsnLCcmIzg3NDc7JywnJiM4NzU2OycsJyYjODc2NDsnLCcmIzg3NzM7JywnJiM4Nzc2OycsJyYjODgwMDsnLCcmIzg4MDE7JywnJiM4ODA0OycsJyYjODgwNTsnLCcmIzg4MzQ7JywnJiM4ODM1OycsJyYjODgzNjsnLCcmIzg4Mzg7JywnJiM4ODM5OycsJyYjODg1MzsnLCcmIzg4NTU7JywnJiM4ODY5OycsJyYjODkwMTsnLCcmIzg5Njg7JywnJiM4OTY5OycsJyYjODk3MDsnLCcmIzg5NzE7JywnJiM5MDAxOycsJyYjOTAwMjsnLCcmIzk2NzQ7JywnJiM5ODI0OycsJyYjOTgyNzsnLCcmIzk4Mjk7JywnJiM5ODMwOyddO1xyXG5cclxuXHQvLyBDb252ZXJ0IEhUTUwgZW50aXRpZXMgaW50byBudW1lcmljYWwgZW50aXRpZXNcclxuXHRIVE1MMk51bWVyaWNhbChzOmFueSlcclxuICAgIHtcclxuXHRcdHJldHVybiB0aGlzLnN3YXBBcnJheVZhbHMocywgdGhpcy5hcnIxLCB0aGlzLmFycjIpO1xyXG5cdH07XHJcblxyXG5cdC8vIENvbnZlcnQgTnVtZXJpY2FsIGVudGl0aWVzIGludG8gSFRNTCBlbnRpdGllc1xyXG5cdE51bWVyaWNhbFRvSFRNTChzOmFueSlcclxuICAgIHtcclxuXHRcdHJldHVybiB0aGlzLnN3YXBBcnJheVZhbHMocywgdGhpcy5hcnIyLCB0aGlzLmFycjEpO1xyXG5cdH07XHJcblxyXG5cclxuXHQvLyBOdW1lcmljYWxseSBlbmNvZGVzIGFsbCB1bmljb2RlIGNoYXJhY3RlcnNcclxuXHRudW1FbmNvZGUoczphbnkpXHJcbiAgICB7XHJcblx0XHRpZih0aGlzLmlzRW1wdHkocykpXHJcbiAgICAgICAgeyBcclxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICAgICAgfVxyXG5cclxuXHRcdHZhciBhID0gW10sXHJcblx0XHRcdGwgPSBzLmxlbmd0aDtcclxuXHJcblx0XHRmb3IgKHZhciBpPTA7IGkgPCBsOyBpKyspXHJcbiAgICAgICAge1xyXG5cdFx0XHR2YXIgYyA9IHMuY2hhckF0KGkpO1xyXG5cdFx0XHRcclxuICAgICAgICAgICAgaWYgKGMgPCBcIiBcIiB8fCBjID4gXCJ+XCIpXHJcbiAgICAgICAgICAgIHtcclxuXHRcdFx0XHRhLnB1c2goXCImI1wiKTtcclxuXHRcdFx0XHRhLnB1c2goYy5jaGFyQ29kZUF0KCkpOyAvL251bWVyaWMgdmFsdWUgb2YgY29kZSBwb2ludFxyXG5cdFx0XHRcdGEucHVzaChcIjtcIik7XHJcblx0XHRcdH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcblx0XHRcdFx0YS5wdXNoKGMpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGEuam9pbihcIlwiKTtcclxuXHR9O1xyXG5cclxuXHQvLyBIVE1MIERlY29kZSBudW1lcmljYWwgYW5kIEhUTUwgZW50aXRpZXMgYmFjayB0byBvcmlnaW5hbCB2YWx1ZXNcclxuXHRodG1sRGVjb2RlKHM6YW55KVxyXG4gICAge1xyXG5cdFx0dmFyIGMsbSxkID0gcztcclxuXHJcblx0XHRpZih0aGlzLmlzRW1wdHkoZCkpIFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICAgICAgfVxyXG5cclxuXHRcdC8vIGNvbnZlcnQgSFRNTCBlbnRpdGVzIGJhY2sgdG8gbnVtZXJpY2FsIGVudGl0ZXMgZmlyc3RcclxuXHRcdGQgPSB0aGlzLkhUTUwyTnVtZXJpY2FsKGQpO1xyXG5cclxuXHRcdC8vIGxvb2sgZm9yIG51bWVyaWNhbCBlbnRpdGllcyAmIzM0O1xyXG5cdFx0dmFyIGFyciA9IGQubWF0Y2goLyYjWzAtOV17MSw1fTsvZyk7XHJcblxyXG5cdFx0Ly8gaWYgbm8gbWF0Y2hlcyBmb3VuZCBpbiBzdHJpbmcgdGhlbiBza2lwXHJcblx0XHRpZihhcnIhPW51bGwpXHJcbiAgICAgICAge1xyXG5cdFx0XHRmb3IodmFyIHg9MDsgeCA8IGFyci5sZW5ndGg7IHgrKylcclxuICAgICAgICAgICAge1xyXG5cdFx0XHRcdG0gPSBhcnJbeF07XHJcblx0XHRcdFx0YyA9IG0uc3Vic3RyaW5nKDIsbS5sZW5ndGgtMSk7IC8vZ2V0IG51bWVyaWMgcGFydCB3aGljaCBpcyByZWZlcm5jZSB0byB1bmljb2RlIGNoYXJhY3RlclxyXG5cdFx0XHRcdC8vIGlmIGl0cyBhIHZhbGlkIG51bWJlciB3ZSBjYW4gZGVjb2RlXHJcblx0XHRcdFx0aWYoYyA+PSAtMzI3NjggJiYgYyA8PSA2NTUzNSlcclxuICAgICAgICAgICAgICAgIHtcclxuXHRcdFx0XHRcdC8vIGRlY29kZSBldmVyeSBzaW5nbGUgbWF0Y2ggd2l0aGluIHN0cmluZ1xyXG5cdFx0XHRcdFx0ZCA9IGQucmVwbGFjZShtLCBTdHJpbmcuZnJvbUNoYXJDb2RlKGMpKTtcclxuXHRcdFx0XHR9XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB7XHJcblx0XHRcdFx0XHRkID0gZC5yZXBsYWNlKG0sIFwiXCIpOyAvL2ludmFsaWQgc28gcmVwbGFjZSB3aXRoIG5hZGFcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZDtcclxuXHR9O1xyXG5cclxuXHQvLyBlbmNvZGUgYW4gaW5wdXQgc3RyaW5nIGludG8gZWl0aGVyIG51bWVyaWNhbCBvciBIVE1MIGVudGl0aWVzXHJcblx0aHRtbEVuY29kZShzOmFueSwgZGJsOmFueSlcclxuICAgIHtcclxuXHRcdGlmKHRoaXMuaXNFbXB0eShzKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgICAgIH1cclxuXHJcblx0XHQvLyBkbyB3ZSBhbGxvdyBkb3VibGUgZW5jb2Rpbmc/IEUuZyB3aWxsICZhbXA7IGJlIHR1cm5lZCBpbnRvICZhbXA7YW1wO1xyXG5cdFx0ZGJsID0gZGJsIHx8IGZhbHNlOyAvL2RlZmF1bHQgdG8gcHJldmVudCBkb3VibGUgZW5jb2RpbmdcclxuXHJcblx0XHQvLyBpZiBhbGxvd2luZyBkb3VibGUgZW5jb2Rpbmcgd2UgZG8gYW1wZXJzYW5kcyBmaXJzdFxyXG5cdFx0aWYoZGJsKVxyXG4gICAgICAgIHtcclxuXHRcdFx0aWYodGhpcy5FbmNvZGVUeXBlPT1cIm51bWVyaWNhbFwiKVxyXG4gICAgICAgICAgICB7XHJcblx0XHRcdFx0cyA9IHMucmVwbGFjZSgvJi9nLCBcIiYjMzg7XCIpO1xyXG5cdFx0XHR9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG5cdFx0XHRcdHMgPSBzLnJlcGxhY2UoLyYvZywgXCImYW1wO1wiKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIGNvbnZlcnQgdGhlIHhzcyBjaGFycyB0byBudW1lcmljYWwgZW50aXRpZXMgJyBcIiA8ID5cclxuXHRcdHMgPSB0aGlzLlhTU0VuY29kZShzLGZhbHNlKTtcclxuXHJcblx0XHRpZih0aGlzLkVuY29kZVR5cGU9PVwibnVtZXJpY2FsXCIgfHwgIWRibClcclxuICAgICAgICB7XHJcblx0XHRcdC8vIE5vdyBjYWxsIGZ1bmN0aW9uIHRoYXQgd2lsbCBjb252ZXJ0IGFueSBIVE1MIGVudGl0aWVzIHRvIG51bWVyaWNhbCBjb2Rlc1xyXG5cdFx0XHRzID0gdGhpcy5IVE1MMk51bWVyaWNhbChzKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBOb3cgZW5jb2RlIGFsbCBjaGFycyBhYm92ZSAxMjcgZS5nIHVuaWNvZGVcclxuXHRcdHMgPSB0aGlzLm51bUVuY29kZShzKTtcclxuXHJcblx0XHQvLyBub3cgd2Uga25vdyBhbnl0aGluZyB0aGF0IG5lZWRzIHRvIGJlIGVuY29kZWQgaGFzIGJlZW4gY29udmVydGVkIHRvIG51bWVyaWNhbCBlbnRpdGllcyB3ZVxyXG5cdFx0Ly8gY2FuIGVuY29kZSBhbnkgYW1wZXJzYW5kcyAmIHRoYXQgYXJlIG5vdCBwYXJ0IG9mIGVuY29kZWQgZW50aXRpZXNcclxuXHRcdC8vIHRvIGhhbmRsZSB0aGUgZmFjdCB0aGF0IEkgbmVlZCB0byBkbyBhIG5lZ2F0aXZlIGNoZWNrIGFuZCBoYW5kbGUgbXVsdGlwbGUgYW1wZXJzYW5kcyAmJiZcclxuXHRcdC8vIEkgYW0gZ29pbmcgdG8gdXNlIGEgcGxhY2Vob2xkZXJcclxuXHJcblx0XHQvLyBpZiB3ZSBkb24ndCB3YW50IGRvdWJsZSBlbmNvZGVkIGVudGl0aWVzIHdlIGlnbm9yZSB0aGUgJiBpbiBleGlzdGluZyBlbnRpdGllc1xyXG5cdFx0aWYoIWRibClcclxuICAgICAgICB7XHJcblx0XHRcdHMgPSBzLnJlcGxhY2UoLyYjL2csXCIjI0FNUEhBU0gjI1wiKTtcclxuXHJcblx0XHRcdGlmKHRoaXMuRW5jb2RlVHlwZT09XCJudW1lcmljYWxcIilcclxuICAgICAgICAgICAge1xyXG5cdFx0XHRcdHMgPSBzLnJlcGxhY2UoLyYvZywgXCImIzM4O1wiKTtcclxuXHRcdFx0fVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuXHRcdFx0XHRzID0gcy5yZXBsYWNlKC8mL2csIFwiJmFtcDtcIik7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHMgPSBzLnJlcGxhY2UoLyMjQU1QSEFTSCMjL2csXCImI1wiKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyByZXBsYWNlIGFueSBtYWxmb3JtZWQgZW50aXRpZXNcclxuXHRcdHMgPSBzLnJlcGxhY2UoLyYjXFxkKihbXlxcZDtdfCQpL2csIFwiJDFcIik7XHJcblxyXG5cdFx0aWYoIWRibClcclxuICAgICAgICB7XHJcblx0XHRcdC8vIHNhZmV0eSBjaGVjayB0byBjb3JyZWN0IGFueSBkb3VibGUgZW5jb2RlZCAmYW1wO1xyXG5cdFx0XHRzID0gdGhpcy5jb3JyZWN0RW5jb2Rpbmcocyk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gbm93IGRvIHdlIG5lZWQgdG8gY29udmVydCBvdXIgbnVtZXJpY2FsIGVuY29kZWQgc3RyaW5nIGludG8gZW50aXRpZXNcclxuXHRcdGlmKHRoaXMuRW5jb2RlVHlwZT09XCJlbnRpdHlcIilcclxuICAgICAgICB7XHJcblx0XHRcdHMgPSB0aGlzLk51bWVyaWNhbFRvSFRNTChzKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcztcclxuXHR9O1xyXG5cclxuXHQvLyBFbmNvZGVzIHRoZSBiYXNpYyA0IGNoYXJhY3RlcnMgdXNlZCB0byBtYWxmb3JtIEhUTUwgaW4gWFNTIGhhY2tzXHJcblx0WFNTRW5jb2RlKHM6YW55LGVuOmFueSlcclxuICAgIHtcclxuXHRcdGlmKCF0aGlzLmlzRW1wdHkocykpXHJcbiAgICAgICAge1xyXG5cdFx0XHRlbiA9IGVuIHx8IHRydWU7XHJcblx0XHRcdC8vIGRvIHdlIGNvbnZlcnQgdG8gbnVtZXJpY2FsIG9yIGh0bWwgZW50aXR5P1xyXG5cdFx0XHRpZihlbilcclxuICAgICAgICAgICAge1xyXG5cdFx0XHRcdHMgPSBzLnJlcGxhY2UoL1xcJy9nLFwiJiMzOTtcIik7IC8vbm8gSFRNTCBlcXVpdmFsZW50IGFzICZhcG9zIGlzIG5vdCBjcm9zcyBicm93c2VyIHN1cHBvcnRlZFxyXG5cdFx0XHRcdHMgPSBzLnJlcGxhY2UoL1xcXCIvZyxcIiZxdW90O1wiKTtcclxuXHRcdFx0XHRzID0gcy5yZXBsYWNlKC88L2csXCImbHQ7XCIpO1xyXG5cdFx0XHRcdHMgPSBzLnJlcGxhY2UoLz4vZyxcIiZndDtcIik7XHJcblx0XHRcdH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcblx0XHRcdFx0cyA9IHMucmVwbGFjZSgvXFwnL2csXCImIzM5O1wiKTsgLy9ubyBIVE1MIGVxdWl2YWxlbnQgYXMgJmFwb3MgaXMgbm90IGNyb3NzIGJyb3dzZXIgc3VwcG9ydGVkXHJcblx0XHRcdFx0cyA9IHMucmVwbGFjZSgvXFxcIi9nLFwiJiMzNDtcIik7XHJcblx0XHRcdFx0cyA9IHMucmVwbGFjZSgvPC9nLFwiJiM2MDtcIik7XHJcblx0XHRcdFx0cyA9IHMucmVwbGFjZSgvPi9nLFwiJiM2MjtcIik7XHJcblx0XHRcdH1cclxuICAgICAgICAgICAgXHJcblx0XHRcdHJldHVybiBzO1xyXG5cdFx0fVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcblx0XHRcdHJldHVybiBcIlwiO1xyXG5cdFx0fVxyXG5cdH07XHJcblxyXG5cdC8vIHJldHVybnMgdHJ1ZSBpZiBhIHN0cmluZyBjb250YWlucyBodG1sIG9yIG51bWVyaWNhbCBlbmNvZGVkIGVudGl0aWVzXHJcblx0aGFzRW5jb2RlZChzOmFueSlcclxuICAgIHtcclxuXHRcdGlmKC8mI1swLTldezEsNX07L2cudGVzdChzKSlcclxuICAgICAgICB7XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG4gICAgICAgIGVsc2UgaWYoLyZbQS1aXXsyLDZ9Oy9naS50ZXN0KHMpKVxyXG4gICAgICAgIHtcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdH07XHJcblxyXG5cdC8vIHdpbGwgcmVtb3ZlIGFueSB1bmljb2RlIGNoYXJhY3RlcnNcclxuXHRzdHJpcFVuaWNvZGUoczphbnkpXHJcbiAgICB7XHJcblx0XHRyZXR1cm4gcy5yZXBsYWNlKC9bXlxceDIwLVxceDdFXS9nLFwiXCIpO1xyXG5cdH07XHJcblxyXG5cdC8vIGNvcnJlY3RzIGFueSBkb3VibGUgZW5jb2RlZCAmYW1wOyBlbnRpdGllcyBlLmcgJmFtcDthbXA7XHJcblx0Y29ycmVjdEVuY29kaW5nKHM6YW55KVxyXG4gICAge1xyXG5cdFx0cmV0dXJuIHMucmVwbGFjZSgvKCZhbXA7KShhbXA7KSsvLFwiJDFcIik7XHJcblx0fTtcclxuXHJcblx0Ly8gRnVuY3Rpb24gdG8gbG9vcCB0aHJvdWdoIGFuIGFycmF5IHN3YXBpbmcgZWFjaCBpdGVtIHdpdGggdGhlIHZhbHVlIGZyb20gYW5vdGhlciBhcnJheSBlLmcgc3dhcCBIVE1MIGVudGl0aWVzIHdpdGggTnVtZXJpY2Fsc1xyXG5cdHN3YXBBcnJheVZhbHMoczphbnksYXJyMTphbnksYXJyMjphbnkpXHJcbiAgICB7XHJcblx0XHRpZih0aGlzLmlzRW1wdHkocykpXHJcbiAgICAgICAgeyBcclxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG5cdFx0dmFyIHJlO1xyXG4gICAgICAgIFxyXG5cdFx0aWYoYXJyMSAmJiBhcnIyKVxyXG4gICAgICAgIHtcclxuXHRcdFx0Ly9TaG93RGVidWcoXCJpbiBzd2FwQXJyYXlWYWxzIGFycjEubGVuZ3RoID0gXCIgKyBhcnIxLmxlbmd0aCArIFwiIGFycjIubGVuZ3RoID0gXCIgKyBhcnIyLmxlbmd0aClcclxuXHRcdFx0Ly8gYXJyYXkgbGVuZ3RocyBtdXN0IG1hdGNoXHJcblx0XHRcdGlmKGFycjEubGVuZ3RoID09IGFycjIubGVuZ3RoKVxyXG4gICAgICAgICAgICB7XHJcblx0XHRcdFx0Zm9yKHZhciB4PTAsIGkgPSBhcnIxLmxlbmd0aDsgeCA8IGk7IHgrKylcclxuICAgICAgICAgICAgICAgIHtcclxuXHRcdFx0XHRcdHJlID0gbmV3IFJlZ0V4cChhcnIxW3hdLCAnZycpO1xyXG5cdFx0XHRcdFx0cyA9IHMucmVwbGFjZShyZSxhcnIyW3hdKTsgLy9zd2FwIGFycjEgaXRlbSB3aXRoIG1hdGNoaW5nIGl0ZW0gZnJvbSBhcnIyXHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcbiAgICAgICAgXHJcblx0XHRyZXR1cm4gcztcclxuXHR9O1xyXG5cclxuXHRpbkFycmF5KCBpdGVtOmFueSwgYXJyOmFueSApIFxyXG4gICAge1xyXG5cdFx0Zm9yICggdmFyIGkgPSAwLCB4ID0gYXJyLmxlbmd0aDsgaSA8IHg7IGkrKyApXHJcbiAgICAgICAge1xyXG5cdFx0XHRpZiAoIGFycltpXSA9PT0gaXRlbSApXHJcbiAgICAgICAgICAgIHtcclxuXHRcdFx0XHRyZXR1cm4gaTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG4gICAgICAgIFxyXG5cdFx0cmV0dXJuIC0xO1xyXG5cdH1cclxuXHJcbn1cclxuIl19
1
+ /**
2
+ * A Javascript object to encode and/or decode html characters using HTML or Numeric entities that handles double or partial encoding
3
+ * Author: R Reid
4
+ * source: http://www.strictly-software.com/htmlencode
5
+ * Licences: GPL, The MIT License (MIT)
6
+ * Copyright: (c) 2011 Robert Reid - Strictly-Software.com
7
+ *
8
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
9
+ * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
10
+ * THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
11
+ *
12
+ * Revision:
13
+ * 2011-07-14, Jacques-Yves Bleau:
14
+ * - fixed conversion error with capitalized accentuated characters
15
+ * + converted arr1 and arr2 to object property to remove redundancy
16
+ *
17
+ * Revision:
18
+ * 2011-11-10, Ce-Yi Hio:
19
+ * - fixed conversion error with a number of capitalized entity characters
20
+ *
21
+ * Revision:
22
+ * 2011-11-10, Rob Reid:
23
+ * - changed array format
24
+ *
25
+ * Revision:
26
+ * 2012-09-23, Alex Oss:
27
+ * - replaced string concatonation in numEncode with string builder, push and join for peformance with ammendments by Rob Reid
28
+ */
29
+ export class Encoder {
30
+ constructor() {
31
+ // When encoding do we convert characters into html or numerical entities
32
+ this.EncodeType = 'entity'; // entity OR numerical
33
+ // arrays for conversion from HTML Entities to Numerical values
34
+ this.arr1 = ['&nbsp;', '&iexcl;', '&cent;', '&pound;', '&curren;', '&yen;', '&brvbar;', '&sect;', '&uml;', '&copy;', '&ordf;', '&laquo;', '&not;', '&shy;', '&reg;', '&macr;', '&deg;', '&plusmn;', '&sup2;', '&sup3;', '&acute;', '&micro;', '&para;', '&middot;', '&cedil;', '&sup1;', '&ordm;', '&raquo;', '&frac14;', '&frac12;', '&frac34;', '&iquest;', '&Agrave;', '&Aacute;', '&Acirc;', '&Atilde;', '&Auml;', '&Aring;', '&AElig;', '&Ccedil;', '&Egrave;', '&Eacute;', '&Ecirc;', '&Euml;', '&Igrave;', '&Iacute;', '&Icirc;', '&Iuml;', '&ETH;', '&Ntilde;', '&Ograve;', '&Oacute;', '&Ocirc;', '&Otilde;', '&Ouml;', '&times;', '&Oslash;', '&Ugrave;', '&Uacute;', '&Ucirc;', '&Uuml;', '&Yacute;', '&THORN;', '&szlig;', '&agrave;', '&aacute;', '&acirc;', '&atilde;', '&auml;', '&aring;', '&aelig;', '&ccedil;', '&egrave;', '&eacute;', '&ecirc;', '&euml;', '&igrave;', '&iacute;', '&icirc;', '&iuml;', '&eth;', '&ntilde;', '&ograve;', '&oacute;', '&ocirc;', '&otilde;', '&ouml;', '&divide;', '&oslash;', '&ugrave;', '&uacute;', '&ucirc;', '&uuml;', '&yacute;', '&thorn;', '&yuml;', '&quot;', '&amp;', '&lt;', '&gt;', '&OElig;', '&oelig;', '&Scaron;', '&scaron;', '&Yuml;', '&circ;', '&tilde;', '&ensp;', '&emsp;', '&thinsp;', '&zwnj;', '&zwj;', '&lrm;', '&rlm;', '&ndash;', '&mdash;', '&lsquo;', '&rsquo;', '&sbquo;', '&ldquo;', '&rdquo;', '&bdquo;', '&dagger;', '&Dagger;', '&permil;', '&lsaquo;', '&rsaquo;', '&euro;', '&fnof;', '&Alpha;', '&Beta;', '&Gamma;', '&Delta;', '&Epsilon;', '&Zeta;', '&Eta;', '&Theta;', '&Iota;', '&Kappa;', '&Lambda;', '&Mu;', '&Nu;', '&Xi;', '&Omicron;', '&Pi;', '&Rho;', '&Sigma;', '&Tau;', '&Upsilon;', '&Phi;', '&Chi;', '&Psi;', '&Omega;', '&alpha;', '&beta;', '&gamma;', '&delta;', '&epsilon;', '&zeta;', '&eta;', '&theta;', '&iota;', '&kappa;', '&lambda;', '&mu;', '&nu;', '&xi;', '&omicron;', '&pi;', '&rho;', '&sigmaf;', '&sigma;', '&tau;', '&upsilon;', '&phi;', '&chi;', '&psi;', '&omega;', '&thetasym;', '&upsih;', '&piv;', '&bull;', '&hellip;', '&prime;', '&Prime;', '&oline;', '&frasl;', '&weierp;', '&image;', '&real;', '&trade;', '&alefsym;', '&larr;', '&uarr;', '&rarr;', '&darr;', '&harr;', '&crarr;', '&lArr;', '&uArr;', '&rArr;', '&dArr;', '&hArr;', '&forall;', '&part;', '&exist;', '&empty;', '&nabla;', '&isin;', '&notin;', '&ni;', '&prod;', '&sum;', '&minus;', '&lowast;', '&radic;', '&prop;', '&infin;', '&ang;', '&and;', '&or;', '&cap;', '&cup;', '&int;', '&there4;', '&sim;', '&cong;', '&asymp;', '&ne;', '&equiv;', '&le;', '&ge;', '&sub;', '&sup;', '&nsub;', '&sube;', '&supe;', '&oplus;', '&otimes;', '&perp;', '&sdot;', '&lceil;', '&rceil;', '&lfloor;', '&rfloor;', '&lang;', '&rang;', '&loz;', '&spades;', '&clubs;', '&hearts;', '&diams;'];
35
+ this.arr2 = ['&#160;', '&#161;', '&#162;', '&#163;', '&#164;', '&#165;', '&#166;', '&#167;', '&#168;', '&#169;', '&#170;', '&#171;', '&#172;', '&#173;', '&#174;', '&#175;', '&#176;', '&#177;', '&#178;', '&#179;', '&#180;', '&#181;', '&#182;', '&#183;', '&#184;', '&#185;', '&#186;', '&#187;', '&#188;', '&#189;', '&#190;', '&#191;', '&#192;', '&#193;', '&#194;', '&#195;', '&#196;', '&#197;', '&#198;', '&#199;', '&#200;', '&#201;', '&#202;', '&#203;', '&#204;', '&#205;', '&#206;', '&#207;', '&#208;', '&#209;', '&#210;', '&#211;', '&#212;', '&#213;', '&#214;', '&#215;', '&#216;', '&#217;', '&#218;', '&#219;', '&#220;', '&#221;', '&#222;', '&#223;', '&#224;', '&#225;', '&#226;', '&#227;', '&#228;', '&#229;', '&#230;', '&#231;', '&#232;', '&#233;', '&#234;', '&#235;', '&#236;', '&#237;', '&#238;', '&#239;', '&#240;', '&#241;', '&#242;', '&#243;', '&#244;', '&#245;', '&#246;', '&#247;', '&#248;', '&#249;', '&#250;', '&#251;', '&#252;', '&#253;', '&#254;', '&#255;', '&#34;', '&#38;', '&#60;', '&#62;', '&#338;', '&#339;', '&#352;', '&#353;', '&#376;', '&#710;', '&#732;', '&#8194;', '&#8195;', '&#8201;', '&#8204;', '&#8205;', '&#8206;', '&#8207;', '&#8211;', '&#8212;', '&#8216;', '&#8217;', '&#8218;', '&#8220;', '&#8221;', '&#8222;', '&#8224;', '&#8225;', '&#8240;', '&#8249;', '&#8250;', '&#8364;', '&#402;', '&#913;', '&#914;', '&#915;', '&#916;', '&#917;', '&#918;', '&#919;', '&#920;', '&#921;', '&#922;', '&#923;', '&#924;', '&#925;', '&#926;', '&#927;', '&#928;', '&#929;', '&#931;', '&#932;', '&#933;', '&#934;', '&#935;', '&#936;', '&#937;', '&#945;', '&#946;', '&#947;', '&#948;', '&#949;', '&#950;', '&#951;', '&#952;', '&#953;', '&#954;', '&#955;', '&#956;', '&#957;', '&#958;', '&#959;', '&#960;', '&#961;', '&#962;', '&#963;', '&#964;', '&#965;', '&#966;', '&#967;', '&#968;', '&#969;', '&#977;', '&#978;', '&#982;', '&#8226;', '&#8230;', '&#8242;', '&#8243;', '&#8254;', '&#8260;', '&#8472;', '&#8465;', '&#8476;', '&#8482;', '&#8501;', '&#8592;', '&#8593;', '&#8594;', '&#8595;', '&#8596;', '&#8629;', '&#8656;', '&#8657;', '&#8658;', '&#8659;', '&#8660;', '&#8704;', '&#8706;', '&#8707;', '&#8709;', '&#8711;', '&#8712;', '&#8713;', '&#8715;', '&#8719;', '&#8721;', '&#8722;', '&#8727;', '&#8730;', '&#8733;', '&#8734;', '&#8736;', '&#8743;', '&#8744;', '&#8745;', '&#8746;', '&#8747;', '&#8756;', '&#8764;', '&#8773;', '&#8776;', '&#8800;', '&#8801;', '&#8804;', '&#8805;', '&#8834;', '&#8835;', '&#8836;', '&#8838;', '&#8839;', '&#8853;', '&#8855;', '&#8869;', '&#8901;', '&#8968;', '&#8969;', '&#8970;', '&#8971;', '&#9001;', '&#9002;', '&#9674;', '&#9824;', '&#9827;', '&#9829;', '&#9830;'];
36
+ }
37
+ isEmpty(val) {
38
+ if (val) {
39
+ return ((val === null) || val.length == 0 || /^\s+$/.test(val));
40
+ }
41
+ else {
42
+ return true;
43
+ }
44
+ }
45
+ // Convert HTML entities into numerical entities
46
+ HTML2Numerical(s) {
47
+ return this.swapArrayVals(s, this.arr1, this.arr2);
48
+ }
49
+ // Convert Numerical entities into HTML entities
50
+ NumericalToHTML(s) {
51
+ return this.swapArrayVals(s, this.arr2, this.arr1);
52
+ }
53
+ // Numerically encodes all unicode characters
54
+ numEncode(s) {
55
+ if (this.isEmpty(s)) {
56
+ return '';
57
+ }
58
+ const a = [], l = s.length;
59
+ for (let i = 0; i < l; i++) {
60
+ const c = s.charAt(i);
61
+ if (c < ' ' || c > '~') {
62
+ a.push('&#');
63
+ a.push(c.charCodeAt()); //numeric value of code point
64
+ a.push(';');
65
+ }
66
+ else {
67
+ a.push(c);
68
+ }
69
+ }
70
+ return a.join('');
71
+ }
72
+ // HTML Decode numerical and HTML entities back to original values
73
+ htmlDecode(s) {
74
+ let c, m, d = s;
75
+ if (this.isEmpty(d)) {
76
+ return '';
77
+ }
78
+ // convert HTML entites back to numerical entites first
79
+ d = this.HTML2Numerical(d);
80
+ // look for numerical entities &#34;
81
+ const arr = d.match(/&#[0-9]{1,5};/g);
82
+ // if no matches found in string then skip
83
+ if (arr != null) {
84
+ for (let x = 0; x < arr.length; x++) {
85
+ m = arr[x];
86
+ c = m.substring(2, m.length - 1); //get numeric part which is refernce to unicode character
87
+ // if its a valid number we can decode
88
+ if (c >= -32768 && c <= 65535) {
89
+ // decode every single match within string
90
+ d = d.replace(m, String.fromCharCode(c));
91
+ }
92
+ else {
93
+ d = d.replace(m, ''); //invalid so replace with nada
94
+ }
95
+ }
96
+ }
97
+ return d;
98
+ }
99
+ // encode an input string into either numerical or HTML entities
100
+ htmlEncode(s, dbl) {
101
+ if (this.isEmpty(s)) {
102
+ return '';
103
+ }
104
+ // do we allow double encoding? E.g will &amp; be turned into &amp;amp;
105
+ dbl = dbl || false; //default to prevent double encoding
106
+ // if allowing double encoding we do ampersands first
107
+ if (dbl) {
108
+ if (this.EncodeType == 'numerical') {
109
+ s = s.replace(/&/g, '&#38;');
110
+ }
111
+ else {
112
+ s = s.replace(/&/g, '&amp;');
113
+ }
114
+ }
115
+ // convert the xss chars to numerical entities ' ' < >
116
+ s = this.XSSEncode(s, false);
117
+ if (this.EncodeType == 'numerical' || !dbl) {
118
+ // Now call function that will convert any HTML entities to numerical codes
119
+ s = this.HTML2Numerical(s);
120
+ }
121
+ // Now encode all chars above 127 e.g unicode
122
+ s = this.numEncode(s);
123
+ // now we know anything that needs to be encoded has been converted to numerical entities we
124
+ // can encode any ampersands & that are not part of encoded entities
125
+ // to handle the fact that I need to do a negative check and handle multiple ampersands &&&
126
+ // I am going to use a placeholder
127
+ // if we don't want double encoded entities we ignore the & in existing entities
128
+ if (!dbl) {
129
+ s = s.replace(/&#/g, '##AMPHASH##');
130
+ if (this.EncodeType == 'numerical') {
131
+ s = s.replace(/&/g, '&#38;');
132
+ }
133
+ else {
134
+ s = s.replace(/&/g, '&amp;');
135
+ }
136
+ s = s.replace(/##AMPHASH##/g, '&#');
137
+ }
138
+ // replace any malformed entities
139
+ s = s.replace(/&#\d*([^\d;]|$)/g, '$1');
140
+ if (!dbl) {
141
+ // safety check to correct any double encoded &amp;
142
+ s = this.correctEncoding(s);
143
+ }
144
+ // now do we need to convert our numerical encoded string into entities
145
+ if (this.EncodeType == 'entity') {
146
+ s = this.NumericalToHTML(s);
147
+ }
148
+ return s;
149
+ }
150
+ // Encodes the basic 4 characters used to malform HTML in XSS hacks
151
+ XSSEncode(s, en) {
152
+ if (!this.isEmpty(s)) {
153
+ en = en || true;
154
+ // do we convert to numerical or html entity?
155
+ if (en) {
156
+ s = s.replace(/'/g, '&#39;'); //no HTML equivalent as &apos is not cross browser supported
157
+ s = s.replace(/"/g, '&quot;');
158
+ s = s.replace(/</g, '&lt;');
159
+ s = s.replace(/>/g, '&gt;');
160
+ }
161
+ else {
162
+ s = s.replace(/'/g, '&#39;'); //no HTML equivalent as &apos is not cross browser supported
163
+ s = s.replace(/"/g, '&#34;');
164
+ s = s.replace(/</g, '&#60;');
165
+ s = s.replace(/>/g, '&#62;');
166
+ }
167
+ return s;
168
+ }
169
+ else {
170
+ return '';
171
+ }
172
+ }
173
+ // returns true if a string contains html or numerical encoded entities
174
+ hasEncoded(s) {
175
+ if (/&#[0-9]{1,5};/g.test(s)) {
176
+ return true;
177
+ }
178
+ else if (/&[A-Z]{2,6};/gi.test(s)) {
179
+ return true;
180
+ }
181
+ else {
182
+ return false;
183
+ }
184
+ }
185
+ // will remove any unicode characters
186
+ stripUnicode(s) {
187
+ return s.replace(/[^\x20-\x7E]/g, '');
188
+ }
189
+ // corrects any double encoded &amp; entities e.g &amp;amp;
190
+ correctEncoding(s) {
191
+ return s.replace(/(&amp;)(amp;)+/, '$1');
192
+ }
193
+ // Function to loop through an array swaping each item with the value from another array e.g swap HTML entities with Numericals
194
+ swapArrayVals(s, arr1, arr2) {
195
+ if (this.isEmpty(s)) {
196
+ return '';
197
+ }
198
+ let re;
199
+ if (arr1 && arr2) {
200
+ //ShowDebug('in swapArrayVals arr1.length = ' + arr1.length + ' arr2.length = ' + arr2.length)
201
+ // array lengths must match
202
+ if (arr1.length == arr2.length) {
203
+ for (let x = 0, i = arr1.length; x < i; x++) {
204
+ re = new RegExp(arr1[x], 'g');
205
+ s = s.replace(re, arr2[x]); //swap arr1 item with matching item from arr2
206
+ }
207
+ }
208
+ }
209
+ return s;
210
+ }
211
+ inArray(item, arr) {
212
+ for (let i = 0, x = arr.length; i < x; i++) {
213
+ if (arr[i] === item) {
214
+ return i;
215
+ }
216
+ }
217
+ return -1;
218
+ }
219
+ }
220
+ //# sourceMappingURL=encoder.js.map