// Regular Expressions for parsing tags and attributes
var singleAttrIdentifier = /([^\s"'<>/=]+)/,
- singleAttrAssign = /=/,
- singleAttrAssigns = [singleAttrAssign],
+ singleAttrAssigns = [/=/],
singleAttrValues = [
// attr value double quotes
/"([^"]*)"+/.source,
// attr value, single quotes
/'([^']*)'+/.source,
// attr value, no quotes
- /([^\s"'=<>`]+)/.source
+ /([^ \t\n\f\r"'`=<>]+)/.source
],
// https://www.w3.org/TR/1999/REC-xml-names-19990114/#NT-QName
qnameCapture = (function() {
function attrForHandler(handler) {
var pattern = singleAttrIdentifier.source +
'(?:\\s*(' + joinSingleAttrAssigns(handler) + ')' +
- '\\s*(?:' + singleAttrValues.join('|') + '))?';
+ '[ \\t\\n\\f\\r]*(?:' + singleAttrValues.join('|') + '))?';
if (handler.customAttrSurround) {
var attrClauses = [];
for (var i = handler.customAttrSurround.length - 1; i >= 0; i--) {
' data-options="vm.datepickerOptions">'
);
}, 'HTML comment inside tag');
+
+ input = '<br a=\u00A0 b=" " c="\u00A0">';
+ output = '<br a="\u00A0" b=" " c="\u00A0">';
+ assert.equal(minify(input), output);
+ output = '<br a="\u00A0"b="\u00A0"c="\u00A0">';
+ assert.equal(minify(input, {
+ decodeEntities: true,
+ removeTagWhitespace: true,
+ }), output);
+ output = '<br a=\u00A0 b=\u00A0 c=\u00A0>';
+ assert.equal(minify(input, {
+ decodeEntities: true,
+ removeAttributeQuotes: true
+ }), output);
+ assert.equal(minify(input, {
+ decodeEntities: true,
+ removeAttributeQuotes: true,
+ removeTagWhitespace: true,
+ }), output);
});
QUnit.test('options', function(assert) {