html-react-parser 1.4.14 → 2.0.0

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.
package/README.md CHANGED
@@ -41,6 +41,7 @@ parse('<p>Hello, World!</p>'); // React.createElement('p', {}, 'Hello, World!')
41
41
  - [htmlparser2](#htmlparser2)
42
42
  - [trim](#trim)
43
43
  - [Migration](#migration)
44
+ - [v2.0.0](#v200)
44
45
  - [v1.0.0](#v100)
45
46
  - [FAQ](#faq)
46
47
  - [Is this XSS safe?](#is-this-xss-safe)
@@ -83,7 +84,7 @@ yarn add html-react-parser
83
84
 
84
85
  ```html
85
86
  <!-- HTMLReactParser depends on React -->
86
- <script src="https://unpkg.com/react@17/umd/react.production.min.js"></script>
87
+ <script src="https://unpkg.com/react@18/umd/react.production.min.js"></script>
87
88
  <script src="https://unpkg.com/html-react-parser@latest/dist/html-react-parser.min.js"></script>
88
89
  <script>
89
90
  window.HTMLReactParser(/* string */);
@@ -370,6 +371,10 @@ parse('<p> </p>', { trim: true }); // React.createElement('p')
370
371
 
371
372
  ## Migration
372
373
 
374
+ ### v2.0.0
375
+
376
+ Since [v2.0.0](https://github.com/remarkablemark/html-react-parser/releases/tag/v2.0.0), Internet Explorer (IE) is no longer supported.
377
+
373
378
  ### v1.0.0
374
379
 
375
380
  TypeScript projects will need to update the types in [v1.0.0](https://github.com/remarkablemark/html-react-parser/releases/tag/v1.0.0).
@@ -1543,6 +1543,164 @@
1543
1543
 
1544
1544
  var domToReact_1 = domToReact$1;
1545
1545
 
1546
+ // constants
1547
+ var HTML = 'html';
1548
+ var HEAD = 'head';
1549
+ var BODY = 'body';
1550
+ var FIRST_TAG_REGEX = /<([a-zA-Z]+[0-9]?)/; // e.g., <h1>
1551
+ var HEAD_TAG_REGEX = /<head.*>/i;
1552
+ var BODY_TAG_REGEX = /<body.*>/i;
1553
+
1554
+ // falls back to `parseFromString` if `createHTMLDocument` cannot be used
1555
+ var parseFromDocument = function () {
1556
+ throw new Error(
1557
+ 'This browser does not support `document.implementation.createHTMLDocument`'
1558
+ );
1559
+ };
1560
+
1561
+ var parseFromString = function () {
1562
+ throw new Error(
1563
+ 'This browser does not support `DOMParser.prototype.parseFromString`'
1564
+ );
1565
+ };
1566
+
1567
+ /**
1568
+ * DOMParser (performance: slow).
1569
+ *
1570
+ * @see https://developer.mozilla.org/docs/Web/API/DOMParser#Parsing_an_SVG_or_HTML_document
1571
+ */
1572
+ if (typeof window.DOMParser === 'function') {
1573
+ var domParser = new window.DOMParser();
1574
+ var mimeType = 'text/html';
1575
+
1576
+ /**
1577
+ * Creates an HTML document using `DOMParser.parseFromString`.
1578
+ *
1579
+ * @param {string} html - The HTML string.
1580
+ * @param {string} [tagName] - The element to render the HTML (with 'body' as fallback).
1581
+ * @return {HTMLDocument}
1582
+ */
1583
+ parseFromString = function (html, tagName) {
1584
+ if (tagName) {
1585
+ html = '<' + tagName + '>' + html + '</' + tagName + '>';
1586
+ }
1587
+
1588
+ return domParser.parseFromString(html, mimeType);
1589
+ };
1590
+
1591
+ parseFromDocument = parseFromString;
1592
+ }
1593
+
1594
+ /**
1595
+ * DOMImplementation (performance: fair).
1596
+ *
1597
+ * @see https://developer.mozilla.org/docs/Web/API/DOMImplementation/createHTMLDocument
1598
+ */
1599
+ if (document.implementation) {
1600
+ var doc = document.implementation.createHTMLDocument();
1601
+
1602
+ /**
1603
+ * Use HTML document created by `document.implementation.createHTMLDocument`.
1604
+ *
1605
+ * @param {string} html - The HTML string.
1606
+ * @param {string} [tagName] - The element to render the HTML (with 'body' as fallback).
1607
+ * @return {HTMLDocument}
1608
+ */
1609
+ parseFromDocument = function (html, tagName) {
1610
+ if (tagName) {
1611
+ doc.documentElement.getElementsByTagName(tagName)[0].innerHTML = html;
1612
+ return doc;
1613
+ }
1614
+
1615
+ doc.documentElement.innerHTML = html;
1616
+ return doc;
1617
+ };
1618
+ }
1619
+
1620
+ /**
1621
+ * Template (performance: fast).
1622
+ *
1623
+ * @see https://developer.mozilla.org/docs/Web/HTML/Element/template
1624
+ */
1625
+ var template = document.createElement('template');
1626
+ var parseFromTemplate;
1627
+
1628
+ if (template.content) {
1629
+ /**
1630
+ * Uses a template element (content fragment) to parse HTML.
1631
+ *
1632
+ * @param {string} html - The HTML string.
1633
+ * @return {NodeList}
1634
+ */
1635
+ parseFromTemplate = function (html) {
1636
+ template.innerHTML = html;
1637
+ return template.content.childNodes;
1638
+ };
1639
+ }
1640
+
1641
+ /**
1642
+ * Parses HTML string to DOM nodes.
1643
+ *
1644
+ * @param {string} html - HTML markup.
1645
+ * @return {NodeList}
1646
+ */
1647
+ function domparser$1(html) {
1648
+ var firstTagName;
1649
+ var match = html.match(FIRST_TAG_REGEX);
1650
+
1651
+ if (match && match[1]) {
1652
+ firstTagName = match[1].toLowerCase();
1653
+ }
1654
+
1655
+ var doc;
1656
+ var element;
1657
+ var elements;
1658
+
1659
+ switch (firstTagName) {
1660
+ case HTML:
1661
+ doc = parseFromString(html);
1662
+
1663
+ // the created document may come with filler head/body elements,
1664
+ // so make sure to remove them if they don't actually exist
1665
+ if (!HEAD_TAG_REGEX.test(html)) {
1666
+ element = doc.getElementsByTagName(HEAD)[0];
1667
+ if (element) {
1668
+ element.parentNode.removeChild(element);
1669
+ }
1670
+ }
1671
+
1672
+ if (!BODY_TAG_REGEX.test(html)) {
1673
+ element = doc.getElementsByTagName(BODY)[0];
1674
+ if (element) {
1675
+ element.parentNode.removeChild(element);
1676
+ }
1677
+ }
1678
+
1679
+ return doc.getElementsByTagName(HTML);
1680
+
1681
+ case HEAD:
1682
+ case BODY:
1683
+ elements = parseFromDocument(html).getElementsByTagName(firstTagName);
1684
+
1685
+ // if there's a sibling element, then return both elements
1686
+ if (BODY_TAG_REGEX.test(html) && HEAD_TAG_REGEX.test(html)) {
1687
+ return elements[0].parentNode.childNodes;
1688
+ }
1689
+ return elements;
1690
+
1691
+ // low-level tag or text
1692
+ default:
1693
+ if (parseFromTemplate) {
1694
+ return parseFromTemplate(html);
1695
+ }
1696
+
1697
+ return parseFromDocument(html, BODY).getElementsByTagName(BODY)[0]
1698
+ .childNodes;
1699
+ }
1700
+ }
1701
+
1702
+ var domparser_1 = domparser$1;
1703
+
1546
1704
  /**
1547
1705
  * SVG elements are case-sensitive.
1548
1706
  *
@@ -2237,185 +2395,11 @@
2237
2395
  return result;
2238
2396
  }
2239
2397
 
2240
- /**
2241
- * Detects if browser is Internet Explorer.
2242
- *
2243
- * @return {boolean} - Whether IE is detected.
2244
- */
2245
- function isIE$1() {
2246
- return /(MSIE |Trident\/|Edge\/)/.test(navigator.userAgent);
2247
- }
2248
-
2249
2398
  var utilities = {
2250
2399
  formatAttributes: formatAttributes,
2251
- formatDOM: formatDOM$1,
2252
- isIE: isIE$1
2253
- };
2254
-
2255
- // constants
2256
- var HTML = 'html';
2257
- var HEAD = 'head';
2258
- var BODY = 'body';
2259
- var FIRST_TAG_REGEX = /<([a-zA-Z]+[0-9]?)/; // e.g., <h1>
2260
- var HEAD_TAG_REGEX = /<head.*>/i;
2261
- var BODY_TAG_REGEX = /<body.*>/i;
2262
-
2263
- // falls back to `parseFromString` if `createHTMLDocument` cannot be used
2264
- var parseFromDocument = function () {
2265
- throw new Error(
2266
- 'This browser does not support `document.implementation.createHTMLDocument`'
2267
- );
2268
- };
2269
-
2270
- var parseFromString = function () {
2271
- throw new Error(
2272
- 'This browser does not support `DOMParser.prototype.parseFromString`'
2273
- );
2400
+ formatDOM: formatDOM$1
2274
2401
  };
2275
2402
 
2276
- /**
2277
- * DOMParser (performance: slow).
2278
- *
2279
- * @see https://developer.mozilla.org/docs/Web/API/DOMParser#Parsing_an_SVG_or_HTML_document
2280
- */
2281
- if (typeof window.DOMParser === 'function') {
2282
- var domParser = new window.DOMParser();
2283
- var mimeType = 'text/html';
2284
-
2285
- /**
2286
- * Creates an HTML document using `DOMParser.parseFromString`.
2287
- *
2288
- * @param {string} html - The HTML string.
2289
- * @param {string} [tagName] - The element to render the HTML (with 'body' as fallback).
2290
- * @return {HTMLDocument}
2291
- */
2292
- parseFromString = function (html, tagName) {
2293
- if (tagName) {
2294
- html = '<' + tagName + '>' + html + '</' + tagName + '>';
2295
- }
2296
-
2297
- return domParser.parseFromString(html, mimeType);
2298
- };
2299
-
2300
- parseFromDocument = parseFromString;
2301
- }
2302
-
2303
- /**
2304
- * DOMImplementation (performance: fair).
2305
- *
2306
- * @see https://developer.mozilla.org/docs/Web/API/DOMImplementation/createHTMLDocument
2307
- */
2308
- if (document.implementation) {
2309
- var isIE = utilities.isIE;
2310
-
2311
- // title parameter is required in IE
2312
- // https://msdn.microsoft.com/en-us/library/ff975457(v=vs.85).aspx
2313
- var doc = document.implementation.createHTMLDocument(
2314
- isIE() ? 'html-dom-parser' : undefined
2315
- );
2316
-
2317
- /**
2318
- * Use HTML document created by `document.implementation.createHTMLDocument`.
2319
- *
2320
- * @param {string} html - The HTML string.
2321
- * @param {string} [tagName] - The element to render the HTML (with 'body' as fallback).
2322
- * @return {HTMLDocument}
2323
- */
2324
- parseFromDocument = function (html, tagName) {
2325
- if (tagName) {
2326
- doc.documentElement.getElementsByTagName(tagName)[0].innerHTML = html;
2327
- return doc;
2328
- }
2329
-
2330
- doc.documentElement.innerHTML = html;
2331
- return doc;
2332
- };
2333
- }
2334
-
2335
- /**
2336
- * Template (performance: fast).
2337
- *
2338
- * @see https://developer.mozilla.org/docs/Web/HTML/Element/template
2339
- */
2340
- var template = document.createElement('template');
2341
- var parseFromTemplate;
2342
-
2343
- if (template.content) {
2344
- /**
2345
- * Uses a template element (content fragment) to parse HTML.
2346
- *
2347
- * @param {string} html - The HTML string.
2348
- * @return {NodeList}
2349
- */
2350
- parseFromTemplate = function (html) {
2351
- template.innerHTML = html;
2352
- return template.content.childNodes;
2353
- };
2354
- }
2355
-
2356
- /**
2357
- * Parses HTML string to DOM nodes.
2358
- *
2359
- * @param {string} html - HTML markup.
2360
- * @return {NodeList}
2361
- */
2362
- function domparser$1(html) {
2363
- var firstTagName;
2364
- var match = html.match(FIRST_TAG_REGEX);
2365
-
2366
- if (match && match[1]) {
2367
- firstTagName = match[1].toLowerCase();
2368
- }
2369
-
2370
- var doc;
2371
- var element;
2372
- var elements;
2373
-
2374
- switch (firstTagName) {
2375
- case HTML:
2376
- doc = parseFromString(html);
2377
-
2378
- // the created document may come with filler head/body elements,
2379
- // so make sure to remove them if they don't actually exist
2380
- if (!HEAD_TAG_REGEX.test(html)) {
2381
- element = doc.getElementsByTagName(HEAD)[0];
2382
- if (element) {
2383
- element.parentNode.removeChild(element);
2384
- }
2385
- }
2386
-
2387
- if (!BODY_TAG_REGEX.test(html)) {
2388
- element = doc.getElementsByTagName(BODY)[0];
2389
- if (element) {
2390
- element.parentNode.removeChild(element);
2391
- }
2392
- }
2393
-
2394
- return doc.getElementsByTagName(HTML);
2395
-
2396
- case HEAD:
2397
- case BODY:
2398
- elements = parseFromDocument(html).getElementsByTagName(firstTagName);
2399
-
2400
- // if there's a sibling element, then return both elements
2401
- if (BODY_TAG_REGEX.test(html) && HEAD_TAG_REGEX.test(html)) {
2402
- return elements[0].parentNode.childNodes;
2403
- }
2404
- return elements;
2405
-
2406
- // low-level tag or text
2407
- default:
2408
- if (parseFromTemplate) {
2409
- return parseFromTemplate(html);
2410
- }
2411
-
2412
- return parseFromDocument(html, BODY).getElementsByTagName(BODY)[0]
2413
- .childNodes;
2414
- }
2415
- }
2416
-
2417
- var domparser_1 = domparser$1;
2418
-
2419
2403
  var domparser = domparser_1;
2420
2404
  var formatDOM = utilities.formatDOM;
2421
2405