@ecency/render-helper 2.4.12 → 2.4.14
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/dist/browser/index.js +46 -18
- package/dist/browser/index.js.map +1 -1
- package/dist/node/index.cjs +48 -20
- package/dist/node/index.cjs.map +1 -1
- package/dist/node/index.mjs +47 -19
- package/dist/node/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/node/index.cjs
CHANGED
|
@@ -6,7 +6,7 @@ var multihash = require('multihashes');
|
|
|
6
6
|
var querystring = require('querystring');
|
|
7
7
|
var remarkable = require('remarkable');
|
|
8
8
|
var linkify$1 = require('remarkable/linkify');
|
|
9
|
-
var
|
|
9
|
+
var he2 = require('he');
|
|
10
10
|
var htmlparser2 = require('htmlparser2');
|
|
11
11
|
var domSerializerModule = require('dom-serializer');
|
|
12
12
|
var lruCache = require('lru-cache');
|
|
@@ -34,7 +34,7 @@ function _interopNamespace(e) {
|
|
|
34
34
|
var xss__default = /*#__PURE__*/_interopDefault(xss);
|
|
35
35
|
var multihash__default = /*#__PURE__*/_interopDefault(multihash);
|
|
36
36
|
var querystring__default = /*#__PURE__*/_interopDefault(querystring);
|
|
37
|
-
var
|
|
37
|
+
var he2__default = /*#__PURE__*/_interopDefault(he2);
|
|
38
38
|
var htmlparser2__namespace = /*#__PURE__*/_interopNamespace(htmlparser2);
|
|
39
39
|
var domSerializerModule__namespace = /*#__PURE__*/_interopNamespace(domSerializerModule);
|
|
40
40
|
|
|
@@ -193,10 +193,11 @@ var ALLOWED_ATTRIBUTES = {
|
|
|
193
193
|
"del": [],
|
|
194
194
|
"ins": []
|
|
195
195
|
};
|
|
196
|
-
var lenientErrorHandler = (level, msg) => {
|
|
197
|
-
if (process.env.NODE_ENV === "development"
|
|
196
|
+
var lenientErrorHandler = (level, msg, context) => {
|
|
197
|
+
if (process.env.NODE_ENV === "development") {
|
|
198
198
|
console.warn("[DOMParser]", level, msg);
|
|
199
199
|
}
|
|
200
|
+
return void 0;
|
|
200
201
|
};
|
|
201
202
|
var DOMParser = new xmldom.DOMParser({
|
|
202
203
|
// Use onError instead of deprecated errorHandler
|
|
@@ -205,11 +206,30 @@ var DOMParser = new xmldom.DOMParser({
|
|
|
205
206
|
});
|
|
206
207
|
|
|
207
208
|
// src/helper.ts
|
|
209
|
+
function removeDuplicateAttributes(html) {
|
|
210
|
+
const tagRegex = /<([a-zA-Z][a-zA-Z0-9]*)\s+((?:[^>"']+|"[^"]*"|'[^']*')*?)\s*(\/?)>/g;
|
|
211
|
+
return html.replace(tagRegex, (match, tagName, attrsString, selfClose) => {
|
|
212
|
+
const seenAttrs = /* @__PURE__ */ new Set();
|
|
213
|
+
const cleanedAttrs = [];
|
|
214
|
+
const attrRegex = /([a-zA-Z_:][-a-zA-Z0-9_:.]*)\s*(?:=\s*(?:"[^"]*"|'[^']*'|[^\s/>]+))?/g;
|
|
215
|
+
let attrMatch;
|
|
216
|
+
while ((attrMatch = attrRegex.exec(attrsString)) !== null) {
|
|
217
|
+
const attrName = attrMatch[1].toLowerCase();
|
|
218
|
+
if (!seenAttrs.has(attrName)) {
|
|
219
|
+
seenAttrs.add(attrName);
|
|
220
|
+
cleanedAttrs.push(attrMatch[0]);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
const attrsJoined = cleanedAttrs.length > 0 ? ` ${cleanedAttrs.join(" ")}` : "";
|
|
224
|
+
return `<${tagName}${attrsJoined}${selfClose ? " /" : ""}>`;
|
|
225
|
+
});
|
|
226
|
+
}
|
|
208
227
|
function createDoc(html) {
|
|
209
228
|
if (html.trim() === "") {
|
|
210
229
|
return null;
|
|
211
230
|
}
|
|
212
|
-
const
|
|
231
|
+
const cleanedHtml = removeDuplicateAttributes(html);
|
|
232
|
+
const doc = DOMParser.parseFromString(`<body>${cleanedHtml}</body>`, "text/html");
|
|
213
233
|
return doc;
|
|
214
234
|
}
|
|
215
235
|
function makeEntryCacheKey(entry) {
|
|
@@ -1416,7 +1436,7 @@ function markdownToHTML(input, forApp, webp, parentDomain = "ecency.com") {
|
|
|
1416
1436
|
try {
|
|
1417
1437
|
output = md.render(input);
|
|
1418
1438
|
output = fixBlockLevelTagsInParagraphs(output);
|
|
1419
|
-
const doc = DOMParser.parseFromString(`<body id="root">${output}</body>`, "text/html");
|
|
1439
|
+
const doc = DOMParser.parseFromString(`<body id="root">${removeDuplicateAttributes(output)}</body>`, "text/html");
|
|
1420
1440
|
traverse(doc, forApp, 0, webp, { firstImageFound: false }, parentDomain);
|
|
1421
1441
|
output = serializer.serializeToString(doc);
|
|
1422
1442
|
} catch (error) {
|
|
@@ -1429,11 +1449,11 @@ function markdownToHTML(input, forApp, webp, parentDomain = "ecency.com") {
|
|
|
1429
1449
|
lowerCaseAttributeNames: false
|
|
1430
1450
|
});
|
|
1431
1451
|
const repairedHtml = domSerializer(dom.children);
|
|
1432
|
-
const doc = DOMParser.parseFromString(`<body id="root">${repairedHtml}</body>`, "text/html");
|
|
1452
|
+
const doc = DOMParser.parseFromString(`<body id="root">${removeDuplicateAttributes(repairedHtml)}</body>`, "text/html");
|
|
1433
1453
|
traverse(doc, forApp, 0, webp, { firstImageFound: false }, parentDomain);
|
|
1434
1454
|
output = serializer.serializeToString(doc);
|
|
1435
1455
|
} catch (fallbackError) {
|
|
1436
|
-
const escapedContent =
|
|
1456
|
+
const escapedContent = he2__default.default.encode(output || md.render(input));
|
|
1437
1457
|
output = `<p dir="auto">${escapedContent}</p>`;
|
|
1438
1458
|
}
|
|
1439
1459
|
}
|
|
@@ -1473,8 +1493,6 @@ function markdown2Html(obj, forApp = true, webp = false, parentDomain = "ecency.
|
|
|
1473
1493
|
cacheSet(key, res);
|
|
1474
1494
|
return res;
|
|
1475
1495
|
}
|
|
1476
|
-
|
|
1477
|
-
// src/catch-post-image.ts
|
|
1478
1496
|
var gifLinkRegex = /\.(gif)$/i;
|
|
1479
1497
|
function isGifLink(link) {
|
|
1480
1498
|
return gifLinkRegex.test(link);
|
|
@@ -1491,12 +1509,20 @@ function getImage(entry, width = 0, height = 0, format = "match") {
|
|
|
1491
1509
|
}
|
|
1492
1510
|
}
|
|
1493
1511
|
if (meta && typeof meta.image === "string" && meta.image.length > 0) {
|
|
1494
|
-
|
|
1495
|
-
|
|
1512
|
+
const decodedImage = he2__default.default.decode(meta.image);
|
|
1513
|
+
if (isGifLink(decodedImage)) {
|
|
1514
|
+
return proxifyImageSrc(decodedImage, 0, 0, format);
|
|
1496
1515
|
}
|
|
1497
|
-
return proxifyImageSrc(
|
|
1516
|
+
return proxifyImageSrc(decodedImage, width, height, format);
|
|
1498
1517
|
}
|
|
1499
1518
|
if (meta && meta.image && !!meta.image.length && meta.image[0]) {
|
|
1519
|
+
if (typeof meta.image[0] === "string") {
|
|
1520
|
+
const decodedImage = he2__default.default.decode(meta.image[0]);
|
|
1521
|
+
if (isGifLink(decodedImage)) {
|
|
1522
|
+
return proxifyImageSrc(decodedImage, 0, 0, format);
|
|
1523
|
+
}
|
|
1524
|
+
return proxifyImageSrc(decodedImage, width, height, format);
|
|
1525
|
+
}
|
|
1500
1526
|
if (isGifLink(meta.image[0])) {
|
|
1501
1527
|
return proxifyImageSrc(meta.image[0], 0, 0, format);
|
|
1502
1528
|
}
|
|
@@ -1513,10 +1539,11 @@ function getImage(entry, width = 0, height = 0, format = "match") {
|
|
|
1513
1539
|
if (!src) {
|
|
1514
1540
|
return null;
|
|
1515
1541
|
}
|
|
1516
|
-
|
|
1517
|
-
|
|
1542
|
+
const decodedSrc = he2__default.default.decode(src);
|
|
1543
|
+
if (isGifLink(decodedSrc)) {
|
|
1544
|
+
return proxifyImageSrc(decodedSrc, 0, 0, format);
|
|
1518
1545
|
}
|
|
1519
|
-
return proxifyImageSrc(
|
|
1546
|
+
return proxifyImageSrc(decodedSrc, width, height, format);
|
|
1520
1547
|
}
|
|
1521
1548
|
return null;
|
|
1522
1549
|
}
|
|
@@ -1533,10 +1560,11 @@ function catchPostImage(obj, width = 0, height = 0, format = "match") {
|
|
|
1533
1560
|
if (!src) {
|
|
1534
1561
|
return null;
|
|
1535
1562
|
}
|
|
1536
|
-
|
|
1537
|
-
|
|
1563
|
+
const decodedSrc = he2__default.default.decode(src);
|
|
1564
|
+
if (isGifLink(decodedSrc)) {
|
|
1565
|
+
return proxifyImageSrc(decodedSrc, 0, 0, format);
|
|
1538
1566
|
}
|
|
1539
|
-
return proxifyImageSrc(
|
|
1567
|
+
return proxifyImageSrc(decodedSrc, width, height, format);
|
|
1540
1568
|
}
|
|
1541
1569
|
return null;
|
|
1542
1570
|
}
|
|
@@ -1625,7 +1653,7 @@ function postBodySummary(entryBody, length = 200, platform = "web") {
|
|
|
1625
1653
|
text2 = joint(text2.split(" "), length);
|
|
1626
1654
|
}
|
|
1627
1655
|
if (text2) {
|
|
1628
|
-
text2 =
|
|
1656
|
+
text2 = he2__default.default.decode(text2);
|
|
1629
1657
|
}
|
|
1630
1658
|
return text2;
|
|
1631
1659
|
}
|