// Run some more rules that care about quotes and whitespace.
rules = [
- // Get all style attributes so we can work on them.
- {regex: /(<[^>]*?style\s*?=\s*?")([^>"]*)(")/gi, replace: function(match, group1, group2, group3) {
- // Remove MSO-blah, MSO:blah style attributes.
- group2 = group2.replace(/(?:^|;)[\s]*MSO[-:](?:&[\w]*;|[^;"])*/gi,"");
- // Remove backgroud color style.
- group2 = group2.replace(/background-color:.*?;/gi,"");
- return group1 + group2 + group3;
- }},
// Get all class attributes so we can work on them.
{regex: /(<[^>]*?class\s*?=\s*?")([^>"]*)(")/gi, replace: function(match, group1, group2, group3) {
// Remove MSO classes.
{regex: /<a [^>]*?name\s*?=\s*?"OLE_LINK\d*?"[^>]*?>\s*?<\/a>/gi, replace: ""}
];
+ // Clean all style attributes from the text.
+ content = this._cleanStyles(content);
+
// Apply the rules.
content = this._filterContentWithRules(content, rules);
return content;
},
+ /**
+ * Clean all inline styles from pasted text.
+ *
+ * This code intentionally doesn't use YUI Nodes. YUI was quite a bit slower at this, so using raw DOM objects instead.
+ *
+ * @method _cleanStyles
+ * @private
+ * @param {String} content The content to clean
+ * @return {String} The cleaned HTML
+ */
+ _cleanStyles: function(content) {
+ var holder = document.createElement('div');
+ holder.innerHTML = content;
+ var elementsWithStyle = holder.querySelectorAll('[style]');
+ var i = 0;
+
+ for (i = 0; i < elementsWithStyle.length; i++) {
+ elementsWithStyle[i].removeAttribute('style');
+ }
+
+ var elementsWithClass = holder.querySelectorAll('[class]');
+ for (i = 0; i < elementsWithClass.length; i++) {
+ elementsWithClass[i].removeAttribute('class');
+ }
+
+ return holder.innerHTML;
+ },
/**
* Clean empty or un-unused spans from passed HTML.
*