grunt-html-dev
Version:
Grunt plugin for html validation, using vnu.jar@dev for the actual validation
69 lines (58 loc) • 1.77 kB
JavaScript
/*
* Author: Iestyn Polley
* https://github.com/iestyn
*/
;
module.exports = function( results ) {
var path = require( 'path' ),
files = {},
out = [],
pairs = {
'&': '&',
'"': '"',
'\'': ''',
'<': '<',
'>': '>'
};
function encode( s ) {
for ( var r in pairs ) {
if ( typeof s !== 'undefined' ) {
s = s.replace( new RegExp( r, 'g' ), pairs[ r ] );
}
}
return s || '';
}
results.forEach( function( result ) {
// Register the file
result.file = path.normalize( result.file );
if ( !files[ result.file ] ) {
files[ result.file ] = [];
}
// Add the error
files[ result.file ].push( {
severity: result.type,
line: result.lastLine,
column: result.lastColumn,
message: result.message,
source: 'htmllint.Validation' + ( result.type === 'error' ? 'Error' : 'Warning' )
} );
} );
out.push( '<?xml version="1.0" encoding="utf-8"?>\n<testsuite name="htmllint" tests="' + Object.keys( files ).length + '" failures="0" errors="' + results.length + '">' );
for ( var fileName in files ) {
if ( Object.prototype.hasOwnProperty.call( files, fileName ) ) {
out.push( '<testcase name="' + fileName + '">\n<error message="' + files[ fileName ].length + ' Errors">' );
for ( var i = 0, len = files[ fileName ].length; i < len; i++ ) {
var issue = files[ fileName ][ i ];
out.push(
( i + 1 ) + ' ' +
'line ' + issue.line + ', ' +
'char ' + issue.column + ': ' +
encode( issue.message )
);
}
out.push( '</error>\n</testcase>' );
}
}
out.push( '</testsuite>' );
return out.join( '\n' );
};