-
-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathindex.js
60 lines (50 loc) · 1.48 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
'use strict';
var fs = require('fs');
var path = require('path');
var _ = require('lodash');
var HTMLHint = require('htmlhint').HTMLHint;
var configFile = path.join(process.cwd(), '.htmlhintrc');
var defaultConfig = {
'alt-require': true,
'attr-lowercase': true,
'attr-no-duplication': true,
'attr-unsafe-chars': true,
'attr-value-double-quotes': true,
'doctype-first': true,
'doctype-html5': true,
'id-unique': true,
'inline-script-disabled': false,
'inline-style-disabled': false,
'space-tab-mixed-disabled': true,
'spec-char-escape': true,
'src-not-empty': true,
'style-disabled': true,
'tag-pair': true,
'tag-self-close': true,
'tagname-lowercase': true,
'title-require': true
};
var configs = [defaultConfig];
if (fs.existsSync(configFile)) {
var contentFile = fs.readFileSync(configFile, 'utf8');
var newConfig = JSON.parse(contentFile);
configs.unshift(newConfig);
}
var config = {};
configs.unshift(config);
_.defaults.apply(null, configs);
var plugin = function (chai) {
var Assertion = chai.Assertion;
Assertion.addProperty('validHtml', function () {
/*eslint-disable no-invalid-this*/
var content = this._obj;
var messages = HTMLHint.verify(content, config);
var textMessage = HTMLHint.format(messages).join('\n');
var notValidMessage = 'expected content to be valid HTML5\n' + textMessage;
this.assert(messages.length === 0,
notValidMessage,
'expected content to not be valid HTML5');
/*eslint-enable no-invalid-this*/
});
};
module.exports = plugin;