mirror of
https://github.com/ankitects/anki.git
synced 2025-09-23 16:26:40 -04:00
preserve inline foreground/background color in spans
common in content pasted from MS Word
This commit is contained in:
parent
987256ff26
commit
d4b87a678a
1 changed files with 49 additions and 10 deletions
|
@ -393,6 +393,40 @@ allowedTagsExtended["TR"] = {"attrs": ["ROWSPAN"]};
|
||||||
allowedTagsExtended["TD"] = {"attrs": ["COLSPAN", "ROWSPAN"]};
|
allowedTagsExtended["TD"] = {"attrs": ["COLSPAN", "ROWSPAN"]};
|
||||||
allowedTagsExtended["TH"] = {"attrs": ["COLSPAN", "ROWSPAN"]};
|
allowedTagsExtended["TH"] = {"attrs": ["COLSPAN", "ROWSPAN"]};
|
||||||
|
|
||||||
|
const allowedStyling = {
|
||||||
|
'color': true,
|
||||||
|
'background-color': true,
|
||||||
|
};
|
||||||
|
|
||||||
|
var filterExternalSpan = function(node) {
|
||||||
|
// filter out attributes
|
||||||
|
var toRemove = [];
|
||||||
|
for (i = 0; i < node.attributes.length; i++) {
|
||||||
|
var attr = node.attributes[i];
|
||||||
|
var attrName = attr.name.toUpperCase();
|
||||||
|
if (attrName !== 'STYLE') {
|
||||||
|
toRemove.push(attr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (i = 0; i < toRemove.length; i++) {
|
||||||
|
node.removeAttributeNode(toRemove[i]);
|
||||||
|
}
|
||||||
|
// filter styling
|
||||||
|
toRemove = [];
|
||||||
|
for (let i = 0; i < node.style.length; i++) {
|
||||||
|
const name = node.style[i];
|
||||||
|
if (!allowedStyling.hasOwnProperty(name)) {
|
||||||
|
toRemove.push(name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (let name of toRemove) {
|
||||||
|
node.style.removeProperty(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
allowedTagsExtended["SPAN"] = filterExternalSpan;
|
||||||
|
|
||||||
// add basic tags to extended
|
// add basic tags to extended
|
||||||
Object.assign(allowedTagsExtended, allowedTagsBasic);
|
Object.assign(allowedTagsExtended, allowedTagsBasic);
|
||||||
|
|
||||||
|
@ -445,17 +479,22 @@ var filterNode = function (node, extendedMode) {
|
||||||
node.outerHTML = node.innerHTML;
|
node.outerHTML = node.innerHTML;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// allowed, filter out attributes
|
if (typeof(tag) === 'function') {
|
||||||
var toRemove = [];
|
// filtering function provided
|
||||||
for (i = 0; i < node.attributes.length; i++) {
|
tag(node);
|
||||||
var attr = node.attributes[i];
|
} else {
|
||||||
var attrName = attr.name.toUpperCase();
|
// allowed, filter out attributes
|
||||||
if (tag.attrs.indexOf(attrName) === -1) {
|
var toRemove = [];
|
||||||
toRemove.push(attr);
|
for (i = 0; i < node.attributes.length; i++) {
|
||||||
|
var attr = node.attributes[i];
|
||||||
|
var attrName = attr.name.toUpperCase();
|
||||||
|
if (tag.attrs.indexOf(attrName) === -1) {
|
||||||
|
toRemove.push(attr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (i = 0; i < toRemove.length; i++) {
|
||||||
|
node.removeAttributeNode(toRemove[i]);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
for (i = 0; i < toRemove.length; i++) {
|
|
||||||
node.removeAttributeNode(toRemove[i]);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue