diff --git a/dev/Common/Html.js b/dev/Common/Html.js
index 23df1e025..3f86fe58c 100644
--- a/dev/Common/Html.js
+++ b/dev/Common/Html.js
@@ -23,7 +23,7 @@ const
// Structural Elements:
'blockquote','br','div','figcaption','figure','h1','h2','h3','h4','h5','h6','hgroup','hr','p','wbr',
'article','aside','header','footer','main','section',
- 'details','summary',
+ 'details','summary','nav',
// List Elements
'dd','dl','dt','li','ol','ul',
// Text Formatting Elements
@@ -282,6 +282,8 @@ export const
'abbr', 'scope',
// td
'colspan', 'rowspan', 'headers'
+ // others
+ //'class', 'id', 'target'
];
if (SettingsUserStore.allowStyles()) {
@@ -332,7 +334,7 @@ export const
tmpl.content.querySelectorAll(keepTagContent).forEach(oElement => replaceWithChildren(oElement));
tmpl.content.querySelectorAll(
- ':not('+allowedTags+')'
+ ':not('+allowedTags+'),a:empty,span:empty'
+ (0 < bqLevel ? ',' + (new Array(1 + bqLevel).fill('blockquote').join(' ')) : '')
).forEach(oElement => oElement.remove());
/* // Is this slower or faster?
@@ -356,7 +358,7 @@ export const
});
*/
- [...tmpl.content.querySelectorAll('*')].forEach(oElement => {
+ msgId && [...tmpl.content.querySelectorAll('*')].forEach(oElement => {
const name = oElement.tagName,
oStyle = oElement.style;
@@ -631,7 +633,7 @@ export const
}
});
- blockquoteSwitcher();
+ msgId && blockquoteSwitcher();
// return tmpl.content.firstChild;
result.html = tmpl.innerHTML.trim();
@@ -819,6 +821,7 @@ export const
};
rl.Utils = {
+ cleanHtml: cleanHtml,
htmlToPlain: htmlToPlain,
plainToHtml: plainToHtml,
htmlToMarkdown: htmlToMarkdown
diff --git a/dev/External/SquireUI.js b/dev/External/SquireUI.js
index af2bdff42..fe07975d2 100644
--- a/dev/External/SquireUI.js
+++ b/dev/External/SquireUI.js
@@ -3,10 +3,6 @@
(doc => {
const
- removeElements = 'HEAD,LINK,META,NOSCRIPT,SCRIPT,TEMPLATE,TITLE',
- allowedElements = 'A,B,BLOCKQUOTE,BR,DIV,FONT,H1,H2,H3,H4,H5,H6,HR,IMG,LI,OL,P,SPAN,STRONG,TABLE,TD,TH,TR,U,UL',
- allowedAttributes = 'abbr,align,background,bgcolor,border,cellpadding,cellspacing,class,color,colspan,dir,face,frame,height,href,hspace,id,lang,rowspan,rules,scope,size,src,style,target,type,usemap,valign,vspace,width'.split(','),
-
i18n = (str, def) => rl.i18n(str) || def,
ctrlKey = shortcuts.getMetaKey() + ' + ',
@@ -21,38 +17,17 @@ const
forEachObjectValue = (obj, fn) => Object.values(obj).forEach(fn),
- getFragmentOfChildren = parent => {
- let frag = doc.createDocumentFragment();
- frag.append(...parent.childNodes);
- return frag;
- },
-
SquireDefaultConfig = {
/*
addLinks: true // allow_smart_html_links
*/
sanitizeToDOMFragment: (html, isPaste/*, squire*/) => {
- tpl.innerHTML = (html||'')
+ html = (html||'')
.replace(/<\/?(BODY|HTML)[^>]*>/gi,'')
.replace(//g,'')
.replace(/]*>\s*<\/span>/gi,'')
.trim();
- tpl.querySelectorAll('a:empty,span:empty').forEach(el => el.remove());
- if (isPaste) {
- tpl.querySelectorAll(removeElements).forEach(el => el.remove());
- tpl.querySelectorAll('*').forEach(el => {
- if (!el.matches(allowedElements)) {
- el.replaceWith(getFragmentOfChildren(el));
- } else if (el.hasAttributes()) {
- [...el.attributes].forEach(attr => {
- let name = attr.name.toLowerCase();
- if (!allowedAttributes.includes(name)) {
- el.removeAttribute(name);
- }
- });
- }
- });
- }
+ tpl.innerHTML = isPaste ? rl.Utils.cleanHtml(html).html : html;
return tpl.content;
}
};