// Gramex .htmllintrc v1.2 { "plugins": [], "attr-bans": [ "align", "background", "bgcolor", "border", // "frameborder", // frameborder is used in YouTube embeds "longdesc", "marginwidth", "marginheight", "scrolling", "style", // DO NOT USE style= attribute "onclick", "onload" ], "attr-name-style": false, "attr-no-dup": false, // attr name may be computed, and get replaced by {} "attr-no-unsafe-char": false, // title contains single quotes ' "attr-quote-style": "double", // attributes contain double quotes "attr-req-value": false, "class-no-dup": true, // no duplicate classes in a tag "doctype-first": false, // snippet templates need not begin with doctype "doctype-html5": true, "fig-req-figcaption": false, "focusable-tabindex-style": false, "head-req-title": false, // title may be inside a Block.run() "href-style": false, "html-req-lang": false, "id-class-ignore-regex": "\\{ *\\}", // ignore tornado template id / class "id-class-no-ad": false, "id-class-style": false, // no styles enforced for now "id-no-dup": false, // template replacement IDs { } cause duplication "img-req-alt": "allownull", // needed for dynamic image content "img-req-src": false, "indent-style": "spaces", "indent-width": 2, "label-req-for": false, // cannot use if multiple forms with same key "line-end-style": false, // raises too many errors "raw-ignore-regex": "<%.*?%>\\s*|{[%#{].*?[%#}]}\\s*", // ignore templates "spec-char-escape": false, // using > or < is not that big a deal "table-req-caption": false, "tag-bans": [ // "b", // Bootstrap caret example uses // "i", // Font-awesome icons use "s", // avoid strike tag, deprecated "br", // avoid break tag, bad practice, use margin/padding instead "style", // Put styles into CSS files "u", "strike", "font", "center" ], "tag-name-lowercase": true, "tag-name-match": true, "tag-self-close": false, "title-max-len": false, // we sometimes have tables inside the title="" "title-no-dup": true }