Skip to content

input-requires-label should ignore type=hidden fields #866

Closed
@pdehaan

Description

Describe the bug
I'm using the API to lint some remote pages and saw this error/warning message in my local logfile:

    {
      "type": "warning",
      "message": "No matching [ label ] tag found.",
      "raw": "<input type=\"hidden\" name=\"scannedEmailId\" value=\"\">",
      "evidence": "              <input type=\"hidden\" name=\"scannedEmailId\" value=\"\">",
      "line": 122,
      "col": 21,
      "rule": {
        "id": "input-requires-label",
        "description": "All [ input ] tags must have a corresponding [ label ] tag. ",
        "link": "https://github.com/thedaviddias/HTMLHint/wiki/input-requires-label"
      }
    },

But I don't think the rule should be displaying that warning for type=hidden fields since that doesn't entirely make sense.

<input type="hidden" name="scannedEmailId" value="">

<!--
      "rule": {
        "id": "input-requires-label",
        "description": "All [ input ] tags must have a corresponding [ label ] tag. ",
        "link": "https://github.com/thedaviddias/HTMLHint/wiki/input-requires-label"
      }
-->

To Reproduce

// index.mjs
import fs from "node:fs/promises";

import axios from "axios";
import {HTMLHint} from "htmlhint";

const allRules = await fs.readFile("./.htmlhintrc").then(res => JSON.parse(res));

// NOTE: My attempt at scraping+filtering all the undocumented rules.
// const DISABLED_RULES = [
//   "attr-sorted",
//   "attr-value-not-empty",
//   "attr-value-single-quotes",
//   "attr-whitespace",
//   "empty-tag-not-self-closed",
//   "head-script-disabled",
//   "href-abs-or-rel",
//   "script-disabled",
//   "space-tab-mixed-disabled",
//   "tag-self-close",
//   "tags-check",
// ];
// 
// const allRules = Object.keys(HTMLHint.rules).reduce((obj={}, name="") => {
//   obj[name] = !DISABLED_RULES.includes(name);
//   return obj;
// }, {});

await getPage("https://monitor.firefox.com/");
await getPage("https://monitor.firefox.com/breaches/");
await getPage("https://monitor.firefox.com/breach-details/linkedin/");

async function getPage(url) {
  const { data: html } = await axios.get(url);
  const res = HTMLHint.verify(html, allRules || HTMLHint.defaultRuleset);
  console.log(JSON.stringify({
    url,
    results: res
  }, null, 2));
}

And my .htmlhintrc file looks like this:

{
    "alt-require": true,
    "attr-lowercase": true,
    "attr-no-duplication": true,
    "attr-no-unnecessary-whitespace": true,
    "attr-sorted": false,
    "attr-unsafe-chars": true,
    "attr-value-double-quotes": true,
    "attr-value-not-empty": false,
    "attr-value-single-quotes": false,
    "attr-whitespace": false,
    "doctype-first": true,
    "doctype-html5": true,
    "empty-tag-not-self-closed": false,
    "head-script-disabled": false,
    "href-abs-or-rel": false,
    "html-lang-require": true,
    "id-class-ad-disabled": true,
    "id-class-value": true,
    "id-unique": true,
    "inline-script-disabled": true,
    "inline-style-disabled": true,
    "input-requires-label": true,
    "script-disabled": false,
    "space-tab-mixed-disabled": false,
    "spec-char-escape": true,
    "src-not-empty": true,
    "style-disabled": true,
    "tag-pair": true,
    "tag-self-close": false,
    "tagname-lowercase": true,
    "tagname-specialchars": true,
    "tags-check": false,
    "title-require": true
}

Expected behavior
<input type="hidden"> fields shouldn't display a warning if there isn't an associated <label>.

Screenshots
n/a

Desktop (please complete the following information):

  • OS: macOS
  • Browser: Node 17
  • Version: n/a

Additional context
Add any other context about the problem here.

Metadata

Assignees

No one assigned

    Labels

    enhancementFunctionality that enhances existing featuresgood first issueGood for newcomersreleasedruleRelates to HTMLHint's core rules

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions