(html: string, ruleset: Ruleset = this.defaultRuleset)
| 28 | } |
| 29 | |
| 30 | public verify(html: string, ruleset: Ruleset = this.defaultRuleset) { |
| 31 | if (Object.keys(ruleset).length === 0) { |
| 32 | ruleset = this.defaultRuleset |
| 33 | } |
| 34 | |
| 35 | // parse inline ruleset |
| 36 | html = html.replace( |
| 37 | /^\s*<!--\s*htmlhint\s+([^\r\n]+?)\s*-->/i, |
| 38 | (all, strRuleset: string) => { |
| 39 | // For example: |
| 40 | // all is '<!-- htmlhint alt-require:true-->' |
| 41 | // strRuleset is 'alt-require:true' |
| 42 | strRuleset.replace( |
| 43 | /(?:^|,)\s*([^:,]+)\s*(?:\:\s*([^,\s]+))?/g, |
| 44 | (all, ruleId: string, value: string | undefined) => { |
| 45 | // For example: |
| 46 | // all is 'alt-require:true' |
| 47 | // ruleId is 'alt-require' |
| 48 | // value is 'true' |
| 49 | |
| 50 | ruleset[ruleId] = |
| 51 | value !== undefined && value.length > 0 ? JSON.parse(value) : true |
| 52 | |
| 53 | return '' |
| 54 | } |
| 55 | ) |
| 56 | |
| 57 | return '' |
| 58 | } |
| 59 | ) |
| 60 | |
| 61 | // Parse disable/enable comments |
| 62 | const disabledRulesMap = this.parseDisableComments(html) |
| 63 | |
| 64 | const parser = new HTMLParser() |
| 65 | const reporter = new Reporter(html, ruleset, disabledRulesMap) |
| 66 | |
| 67 | const rules = this.rules |
| 68 | let rule: Rule |
| 69 | |
| 70 | for (const id in ruleset) { |
| 71 | rule = rules[id] |
| 72 | if (rule !== undefined && ruleset[id] !== false) { |
| 73 | rule.init(parser, reporter, ruleset[id]) |
| 74 | } |
| 75 | } |
| 76 | |
| 77 | parser.parse(html) |
| 78 | |
| 79 | return reporter.messages |
| 80 | } |
| 81 | |
| 82 | private parseDisableComments(html: string): DisabledRulesMap { |
| 83 | const disabledRulesMap: DisabledRulesMap = {} |
no test coverage detected