clean-html
Advanced tools
Comparing version 1.2.0 to 1.2.1
11
demo.js
@@ -14,5 +14,14 @@ var cleaner = require('./index.js'), | ||
cleaner.clean(data, function (html) { | ||
var options = { | ||
'add-attr-to-remove': ['class'], | ||
'add-tags-to-remove': ['b', 'i', 'u'], | ||
'indent': ' ', | ||
'remove-comments': true, | ||
'remove-empty-paras': true, | ||
'replace-nbsp': true | ||
}; | ||
cleaner.clean(data, options, function (html) { | ||
console.log(html); | ||
}); | ||
}); |
60
index.js
@@ -44,2 +44,3 @@ var htmlparser = require('htmlparser2'), | ||
'remove-empty-paras': false, | ||
'replace-nbsp': false, | ||
'tags-to-remove': [ | ||
@@ -63,2 +64,3 @@ 'center', | ||
options['remove-empty-paras'] = opt['remove-empty-paras'] === true ? true : false; | ||
options['replace-nbsp'] = opt['replace-nbsp'] === true ? true : false; | ||
options['tags-to-remove'] = opt['tags-to-remove'] || options['tags-to-remove']; | ||
@@ -92,3 +94,10 @@ | ||
function renderText(node) { | ||
return node.data.replace(/\s+/g, ' '); | ||
var text = node.data; | ||
if (options['replace-nbsp']) { | ||
text = text.replace(/ /g, ' '); | ||
} | ||
// replace all whitespace characters with a single space | ||
return text.replace(/\s+/g, ' '); | ||
} | ||
@@ -101,7 +110,9 @@ | ||
var comment = '<!--' + node.data + '-->'; | ||
if (options['break-around-comments']) { | ||
return '\n' + '<!--' + node.data + '-->' + '\n'; | ||
return '\n' + comment + '\n'; | ||
} | ||
return '<!--' + node.data + '-->'; | ||
return comment; | ||
} | ||
@@ -122,4 +133,3 @@ | ||
var openTag = '<' + node.name, | ||
closeTag; | ||
var openTag = '<' + node.name; | ||
@@ -142,3 +152,3 @@ for (var attrib in node.attribs) { | ||
closeTag = '</' + node.name + '>'; | ||
var closeTag = '</' + node.name + '>'; | ||
@@ -179,6 +189,9 @@ if (options['block-tags'].indexOf(node.name) > -1) { | ||
return html.replace(/\s{2,}/g, '\n'); | ||
// remove leading spaces and extra line breaks | ||
html = html.replace(/\n\s+/g, '\n'); | ||
return html; | ||
} | ||
function indentLine(line, indentLevel) { | ||
function getIndent(indentLevel) { | ||
var indent = ''; | ||
@@ -190,3 +203,3 @@ | ||
return indent + line; | ||
return indent; | ||
} | ||
@@ -198,24 +211,31 @@ | ||
return html.replace(/.*\n/g, function (line) { | ||
var match = line.match(/<\/?(\w+).*?>/); | ||
var openTags = [], | ||
tagRegEx = /<\/?(\w+).*?>/g, | ||
tag, | ||
tagName, | ||
result; | ||
if (!match) { | ||
return indentLine(line, indentLevel); | ||
} | ||
while (result = tagRegEx.exec(line)) { | ||
tag = result[0]; | ||
tagName = result[1]; | ||
var tag = match[0], | ||
tagName = match[1]; | ||
if (options['empty-tags'].indexOf(tagName) > -1) { | ||
continue; | ||
} | ||
if (options['block-tags'].indexOf(tagName) > -1) { | ||
if (tag.indexOf('</') == -1) { | ||
line = indentLine(line, indentLevel); | ||
openTags.push(tag); | ||
indentLevel++; | ||
} else { | ||
openTags.pop(); | ||
indentLevel--; | ||
line = indentLine(line, indentLevel); | ||
} | ||
} | ||
return line; | ||
if (openTags.length) { | ||
return getIndent(indentLevel - openTags.length) | ||
+ line.replace(openTags[0] + ' ', openTags[0] + '\n' + getIndent(indentLevel)); | ||
} | ||
return indentLine(line, indentLevel); | ||
return getIndent(indentLevel) + line; | ||
}); | ||
@@ -222,0 +242,0 @@ } |
{ | ||
"name": "clean-html", | ||
"version": "1.2.0", | ||
"version": "1.2.1", | ||
"description": "HTML cleaner and beautifier", | ||
@@ -5,0 +5,0 @@ "main": "index.js", |
@@ -125,2 +125,9 @@ ## HTML cleaner and beautifier | ||
### replace-nbsp | ||
Replaces non-breaking white space entities (` `) with regular spaces. | ||
Type: Boolean | ||
Default: `false` | ||
### tags-to-remove | ||
@@ -127,0 +134,0 @@ |
@@ -9,2 +9,10 @@ var assert = require('assert'), | ||
// test that non-breaking space is replaced | ||
cleaner.clean('Foo Bar', function (html) { | ||
assert.equal(html, 'Foo Bar'); | ||
}); | ||
cleaner.clean('Foo Bar', {'replace-nbsp': true}, function (html) { | ||
assert.equal(html, 'Foo Bar'); | ||
}); | ||
// test that extra whitespace is removed | ||
@@ -11,0 +19,0 @@ cleaner.clean('Foo Bar', function (html) { |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
13648
306
170
0