<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<title>HTML minifier</title>
-
- <script src="src/htmlparser.js" type="text/javascript"></script>
- <script src="src/htmlminifier.js" type="text/javascript"></script>
- <script src="src/htmllint.js" type="text/javascript"></script>
-
<link rel="stylesheet" href="master.css" type="text/css">
</head>
<body>
Source and bugtracker are <a href="http://github.com/kangax/html-minifier">hosted on Github</a>.
</p>
</div>
+ <script src="src/htmlparser.js" type="text/javascript"></script>
+ <script src="src/htmlminifier.js" type="text/javascript"></script>
+ <script src="src/htmllint.js" type="text/javascript"></script>
<script src="master.js" type="text/javascript"></script>
</body>
</html>
\ No newline at end of file
return text.replace(/^\s*<!--/, '').replace(/-->\s*$/, '');
}
+ function isOptionalTag(tag) {
+ return (/^(?:html|t?body|t?head|tfoot|tr)$/).test(tag);
+ }
+
var reEmptyAttribute = new RegExp(
'^(?:class|id|style|title|lang|dir|on(?:focus|blur|change|click|dblclick|mouse(' +
'?:down|up|over|move|out)|key(?:press|down|up)))$');
return tag !== 'textarea';
}
- function isOptionalTag(tag) {
- return (/^(?:html|t?body|t?head|tfoot|tr)$/).test(tag);
- }
-
function canCollapseWhitespace(tag) {
return !(/^(?:script|style|pre|textarea)$/.test(tag));
}
HTMLParser(value, {
start: function( tag, attrs, unary ) {
-
tag = tag.toLowerCase();
currentTag = tag;
currentChars = '';
buffer.push('>');
},
end: function( tag ) {
+
var isElementEmpty = currentChars === '' && tag === currentTag;
if ((options.removeEmptyElements && isElementEmpty && canRemoveElement(tag))) {
// remove last "element" from buffer, return
(function(){
// Regular Expressions for parsing tags and attributes
- var startTag = /^<(\w+)((?:\s+[\w:-]+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)>/,
+ var startTag = /^<(\w+)((?:\s*[\w:-]+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)>/,
endTag = /^<\/(\w+)[^>]*>/,
attr = /([\w:-]+)(?:\s*=\s*(?:(?:"((?:\\.|[^"])*)")|(?:'((?:\\.|[^'])*)')|([^>\s]+)))?/g,
doctype = /^<!DOCTYPE [^>]+>/i;
arguments[3] ? arguments[3] :
arguments[4] ? arguments[4] :
fillAttrs[name] ? name : "";
-
attrs.push({
name: name,
value: value,
equals(minify('<script>alert(\'<!--\')<\/script>'), '<script>alert(\'<!--\')<\/script>');
equals(minify('<script>alert(\'<!-- foo -->\')<\/script>'), '<script>alert(\'<!-- foo -->\')<\/script>');
equals(minify('<script>alert(\'-->\')<\/script>'), '<script>alert(\'-->\')<\/script>');
+
+ equals(minify('<a title="x"href=" ">foo</a>'), '<a title="x" href=" ">foo</a>');
+ equals(minify('<p id=""class=""title="">x'), '<p id="" class="" title="">x</p>');
+ equals(minify('<p x="x\'"">x</p>'), '<p x="x\'">x</p>', 'trailing quote should be ignored');
});
test('`minifiy` exists', function() {