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 +6 -1
- package/dist/html-react-parser.js +159 -175
- package/dist/html-react-parser.js.map +1 -1
- package/dist/html-react-parser.min.js +1 -1
- package/dist/html-react-parser.min.js.map +1 -1
- package/package.json +16 -16
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@
|
|
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
|
|