2017-09-27 17:18:23 +02:00
#!/usr/bin/env node
/ * !
* Script to run vnu - jar if Java is available .
* Copyright 2017 The Bootstrap Authors
* Copyright 2017 Twitter , Inc .
* Licensed under MIT ( https : //github.com/twbs/bootstrap/blob/master/LICENSE)
* /
2017-09-27 16:41:58 +02:00
'use strict'
const childProcess = require ( 'child_process' )
2017-09-27 17:18:23 +02:00
const vnu = require ( 'vnu-jar' )
2017-10-31 11:41:03 +01:00
childProcess . exec ( 'java -version' , ( error ) => {
2017-09-27 17:18:23 +02:00
if ( error ) {
console . error ( 'Skipping HTML lint test; Java is missing.' )
return
}
2017-09-27 16:41:58 +02:00
2017-10-30 16:34:02 +01:00
// vnu-jar accepts multiple ignores joined with a `|`
2017-09-27 17:18:23 +02:00
const ignores = [
'Attribute “autocomplete” is only allowed when the input type is “color”, “date”, “datetime-local”, “email”, “hidden”, “month”, “number”, “password”, “range”, “search”, “tel”, “text”, “time”, “url”, or “week”.' ,
'Attribute “autocomplete” not allowed on element “button” at this point.' ,
'Attribute “title” not allowed on element “circle” at this point.' ,
'Bad value “tablist” for attribute “role” on element “nav”.' ,
2017-10-30 16:34:02 +01:00
// We use holder.js with `data-src` and no `src`; we could work around this, not sure it's worth it.
2017-09-27 17:18:23 +02:00
'Element “img” is missing required attribute “src”.' ,
2017-10-30 16:34:02 +01:00
'Element “legend” not allowed as child of element “div” in this context.*' ,
'The “datetime-local” input type is not supported in all browsers. Please be sure to test, and consider using a polyfill.' ,
// The next one we are using it because IE11 doesn't recognise <main>.
// So, redundant for modern browsers, but not invalid.
'The “main” role is unnecessary for element “main”.'
2017-09-27 17:18:23 +02:00
] . join ( '|' )
2017-09-27 16:41:58 +02:00
2017-09-27 17:18:23 +02:00
const args = [
'-jar' ,
vnu ,
'--asciiquotes' ,
'--skip-non-html' ,
2017-10-30 16:34:02 +01:00
'--Werror' ,
2017-09-27 17:18:23 +02:00
` --filterpattern " ${ ignores } " ` ,
'_gh_pages/' ,
'js/tests/'
]
2017-09-27 16:41:58 +02:00
2017-09-27 17:18:23 +02:00
return childProcess . spawn ( 'java' , args , {
shell : true ,
stdio : 'inherit'
2017-09-27 16:41:58 +02:00
} )
2017-09-27 17:18:23 +02:00
. on ( 'exit' , process . exit )
} )