@marko/language-server 1.1.6 → 1.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +168 -127
- package/dist/index.js.map +2 -2
- package/dist/index.mjs +168 -127
- package/dist/index.mjs.map +2 -2
- package/dist/service/html/axe-rules/axe-rules.d.ts +139 -109
- package/package.json +12 -12
package/dist/index.js
CHANGED
|
@@ -303,494 +303,524 @@ var import_jsdom = require("jsdom");
|
|
|
303
303
|
var keyboard = {
|
|
304
304
|
/**
|
|
305
305
|
* - Ensures every accesskey attribute value is unique
|
|
306
|
-
* - accesskey attribute value should be unique ([url](https://dequeuniversity.com/rules/axe/4.
|
|
306
|
+
* - accesskey attribute value should be unique ([url](https://dequeuniversity.com/rules/axe/4.8/accesskeys?application=axeAPI))
|
|
307
307
|
*/
|
|
308
308
|
accesskeys: "accesskeys",
|
|
309
309
|
/**
|
|
310
310
|
* - Ensures each page has at least one mechanism for a user to bypass navigation and jump straight to the content
|
|
311
|
-
* - Page must have means to bypass repeated blocks ([url](https://dequeuniversity.com/rules/axe/4.
|
|
311
|
+
* - Page must have means to bypass repeated blocks ([url](https://dequeuniversity.com/rules/axe/4.8/bypass?application=axeAPI))
|
|
312
312
|
*/
|
|
313
313
|
bypass: "bypass",
|
|
314
314
|
/**
|
|
315
315
|
* - Ensures elements in the focus order have a role appropriate for interactive content
|
|
316
|
-
* - Elements in the focus order should have an appropriate role ([url](https://dequeuniversity.com/rules/axe/4.
|
|
316
|
+
* - Elements in the focus order should have an appropriate role ([url](https://dequeuniversity.com/rules/axe/4.8/focus-order-semantics?application=axeAPI))
|
|
317
317
|
*/
|
|
318
318
|
focusOrderSemantics: "focus-order-semantics",
|
|
319
319
|
/**
|
|
320
320
|
* - Ensures `<frame>` and `<iframe>` elements with focusable content do not have tabindex=-1
|
|
321
|
-
* - Frames with focusable content must not have tabindex=-1 ([url](https://dequeuniversity.com/rules/axe/4.
|
|
321
|
+
* - Frames with focusable content must not have tabindex=-1 ([url](https://dequeuniversity.com/rules/axe/4.8/frame-focusable-content?application=axeAPI))
|
|
322
322
|
*/
|
|
323
323
|
frameFocusableContent: "frame-focusable-content",
|
|
324
324
|
/**
|
|
325
325
|
* - Ensures interactive controls are not nested as they are not always announced by screen readers or can cause focus problems for assistive technologies
|
|
326
|
-
* - Interactive controls must not be nested ([url](https://dequeuniversity.com/rules/axe/4.
|
|
326
|
+
* - Interactive controls must not be nested ([url](https://dequeuniversity.com/rules/axe/4.8/nested-interactive?application=axeAPI))
|
|
327
327
|
*/
|
|
328
328
|
nestedInteractive: "nested-interactive",
|
|
329
329
|
/**
|
|
330
330
|
* - Ensures all page content is contained by landmarks
|
|
331
|
-
* - All page content should be contained by landmarks ([url](https://dequeuniversity.com/rules/axe/4.
|
|
331
|
+
* - All page content should be contained by landmarks ([url](https://dequeuniversity.com/rules/axe/4.8/region?application=axeAPI))
|
|
332
332
|
*/
|
|
333
333
|
region: "region",
|
|
334
334
|
/**
|
|
335
335
|
* - Ensure elements that have scrollable content are accessible by keyboard
|
|
336
|
-
* - Scrollable region must have keyboard access ([url](https://dequeuniversity.com/rules/axe/4.
|
|
336
|
+
* - Scrollable region must have keyboard access ([url](https://dequeuniversity.com/rules/axe/4.8/scrollable-region-focusable?application=axeAPI))
|
|
337
337
|
*/
|
|
338
338
|
scrollableRegionFocusable: "scrollable-region-focusable",
|
|
339
339
|
/**
|
|
340
340
|
* - Ensure all skip links have a focusable target
|
|
341
|
-
* - The skip-link target should exist and be focusable ([url](https://dequeuniversity.com/rules/axe/4.
|
|
341
|
+
* - The skip-link target should exist and be focusable ([url](https://dequeuniversity.com/rules/axe/4.8/skip-link?application=axeAPI))
|
|
342
342
|
*/
|
|
343
343
|
skipLink: "skip-link",
|
|
344
344
|
/**
|
|
345
345
|
* - Ensures tabindex attribute values are not greater than 0
|
|
346
|
-
* - Elements should not have tabindex greater than zero ([url](https://dequeuniversity.com/rules/axe/4.
|
|
346
|
+
* - Elements should not have tabindex greater than zero ([url](https://dequeuniversity.com/rules/axe/4.8/tabindex?application=axeAPI))
|
|
347
347
|
*/
|
|
348
348
|
tabindex: "tabindex"
|
|
349
349
|
};
|
|
350
350
|
var textAlternatives = {
|
|
351
351
|
/**
|
|
352
352
|
* - Ensures `<area>` elements of image maps have alternate text
|
|
353
|
-
* - Active `<area>` elements must have alternate text ([url](https://dequeuniversity.com/rules/axe/4.
|
|
353
|
+
* - Active `<area>` elements must have alternate text ([url](https://dequeuniversity.com/rules/axe/4.8/area-alt?application=axeAPI))
|
|
354
354
|
*/
|
|
355
355
|
areaAlt: "area-alt",
|
|
356
356
|
/**
|
|
357
357
|
* - Ensures each HTML document contains a non-empty `<title>` element
|
|
358
|
-
* - Documents must have `<title>` element to aid in navigation ([url](https://dequeuniversity.com/rules/axe/4.
|
|
358
|
+
* - Documents must have `<title>` element to aid in navigation ([url](https://dequeuniversity.com/rules/axe/4.8/document-title?application=axeAPI))
|
|
359
359
|
*/
|
|
360
360
|
documentTitle: "document-title",
|
|
361
361
|
/**
|
|
362
362
|
* - Ensures `<iframe>` and `<frame>` elements contain a unique title attribute
|
|
363
|
-
* - Frames
|
|
363
|
+
* - Frames must have a unique title attribute ([url](https://dequeuniversity.com/rules/axe/4.8/frame-title-unique?application=axeAPI))
|
|
364
364
|
*/
|
|
365
365
|
frameTitleUnique: "frame-title-unique",
|
|
366
366
|
/**
|
|
367
367
|
* - Ensures `<iframe>` and `<frame>` elements have an accessible name
|
|
368
|
-
* - Frames must have an accessible name ([url](https://dequeuniversity.com/rules/axe/4.
|
|
368
|
+
* - Frames must have an accessible name ([url](https://dequeuniversity.com/rules/axe/4.8/frame-title?application=axeAPI))
|
|
369
369
|
*/
|
|
370
370
|
frameTitle: "frame-title",
|
|
371
371
|
/**
|
|
372
372
|
* - Ensures `<img>` elements have alternate text or a role of none or presentation
|
|
373
|
-
* - Images must have alternate text ([url](https://dequeuniversity.com/rules/axe/4.
|
|
373
|
+
* - Images must have alternate text ([url](https://dequeuniversity.com/rules/axe/4.8/image-alt?application=axeAPI))
|
|
374
374
|
*/
|
|
375
375
|
imageAlt: "image-alt",
|
|
376
376
|
/**
|
|
377
377
|
* - Ensure image alternative is not repeated as text
|
|
378
|
-
* - Alternative text of images should not be repeated as text ([url](https://dequeuniversity.com/rules/axe/4.
|
|
378
|
+
* - Alternative text of images should not be repeated as text ([url](https://dequeuniversity.com/rules/axe/4.8/image-redundant-alt?application=axeAPI))
|
|
379
379
|
*/
|
|
380
380
|
imageRedundantAlt: "image-redundant-alt",
|
|
381
381
|
/**
|
|
382
382
|
* - Ensures `<input type="image">` elements have alternate text
|
|
383
|
-
* - Image buttons must have alternate text ([url](https://dequeuniversity.com/rules/axe/4.
|
|
383
|
+
* - Image buttons must have alternate text ([url](https://dequeuniversity.com/rules/axe/4.8/input-image-alt?application=axeAPI))
|
|
384
384
|
*/
|
|
385
385
|
inputImageAlt: "input-image-alt",
|
|
386
386
|
/**
|
|
387
387
|
* - Ensures `<object>` elements have alternate text
|
|
388
|
-
* - `<object>` elements must have alternate text ([url](https://dequeuniversity.com/rules/axe/4.
|
|
388
|
+
* - `<object>` elements must have alternate text ([url](https://dequeuniversity.com/rules/axe/4.8/object-alt?application=axeAPI))
|
|
389
389
|
*/
|
|
390
390
|
objectAlt: "object-alt",
|
|
391
391
|
/**
|
|
392
|
-
* - Ensures [role=
|
|
393
|
-
* - [role=
|
|
392
|
+
* - Ensures [role="img"] elements have alternate text
|
|
393
|
+
* - [role="img"] elements must have an alternative text ([url](https://dequeuniversity.com/rules/axe/4.8/role-img-alt?application=axeAPI))
|
|
394
394
|
*/
|
|
395
395
|
roleImgAlt: "role-img-alt",
|
|
396
396
|
/**
|
|
397
397
|
* - Ensures that server-side image maps are not used
|
|
398
|
-
* - Server-side image maps must not be used ([url](https://dequeuniversity.com/rules/axe/4.
|
|
398
|
+
* - Server-side image maps must not be used ([url](https://dequeuniversity.com/rules/axe/4.8/server-side-image-map?application=axeAPI))
|
|
399
399
|
*/
|
|
400
400
|
serverSideImageMap: "server-side-image-map",
|
|
401
401
|
/**
|
|
402
402
|
* - Ensures `<svg>` elements with an img, graphics-document or graphics-symbol role have an accessible text
|
|
403
|
-
* - `<svg>` elements with an img role must have an alternative text ([url](https://dequeuniversity.com/rules/axe/4.
|
|
403
|
+
* - `<svg>` elements with an img role must have an alternative text ([url](https://dequeuniversity.com/rules/axe/4.8/svg-img-alt?application=axeAPI))
|
|
404
404
|
*/
|
|
405
405
|
svgImgAlt: "svg-img-alt",
|
|
406
406
|
/**
|
|
407
407
|
* - Ensures `<video>` elements have captions
|
|
408
|
-
* - `<video>` elements must have captions ([url](https://dequeuniversity.com/rules/axe/4.
|
|
408
|
+
* - `<video>` elements must have captions ([url](https://dequeuniversity.com/rules/axe/4.8/video-caption?application=axeAPI))
|
|
409
409
|
*/
|
|
410
410
|
videoCaption: "video-caption"
|
|
411
411
|
};
|
|
412
412
|
var aria = {
|
|
413
413
|
/**
|
|
414
|
-
* - Ensures
|
|
415
|
-
* - Elements must only use
|
|
414
|
+
* - Ensures an element's role supports its ARIA attributes
|
|
415
|
+
* - Elements must only use supported ARIA attributes ([url](https://dequeuniversity.com/rules/axe/4.8/aria-allowed-attr?application=axeAPI))
|
|
416
416
|
*/
|
|
417
417
|
ariaAllowedAttr: "aria-allowed-attr",
|
|
418
418
|
/**
|
|
419
419
|
* - Ensures role attribute has an appropriate value for the element
|
|
420
|
-
* - ARIA role should be appropriate for the element ([url](https://dequeuniversity.com/rules/axe/4.
|
|
420
|
+
* - ARIA role should be appropriate for the element ([url](https://dequeuniversity.com/rules/axe/4.8/aria-allowed-role?application=axeAPI))
|
|
421
421
|
*/
|
|
422
422
|
ariaAllowedRole: "aria-allowed-role",
|
|
423
|
+
/**
|
|
424
|
+
* - Ensure aria-braillelabel and aria-brailleroledescription have a non-braille equivalent
|
|
425
|
+
* - aria-braille attributes must have a non-braille equivalent ([url](https://dequeuniversity.com/rules/axe/4.8/aria-braille-equivalent?application=axeAPI))
|
|
426
|
+
*/
|
|
427
|
+
ariaBrailleEquivalent: "aria-braille-equivalent",
|
|
423
428
|
/**
|
|
424
429
|
* - Ensures every ARIA button, link and menuitem has an accessible name
|
|
425
|
-
* - ARIA commands must have an accessible name ([url](https://dequeuniversity.com/rules/axe/4.
|
|
430
|
+
* - ARIA commands must have an accessible name ([url](https://dequeuniversity.com/rules/axe/4.8/aria-command-name?application=axeAPI))
|
|
426
431
|
*/
|
|
427
432
|
ariaCommandName: "aria-command-name",
|
|
433
|
+
/**
|
|
434
|
+
* - Ensures ARIA attributes are used as described in the specification of the element's role
|
|
435
|
+
* - ARIA attributes must be used as specified for the element's role ([url](https://dequeuniversity.com/rules/axe/4.8/aria-conditional-attr?application=axeAPI))
|
|
436
|
+
*/
|
|
437
|
+
ariaConditionalAttr: "aria-conditional-attr",
|
|
438
|
+
/**
|
|
439
|
+
* - Ensures elements do not use deprecated roles
|
|
440
|
+
* - Deprecated ARIA roles must not be used ([url](https://dequeuniversity.com/rules/axe/4.8/aria-deprecated-role?application=axeAPI))
|
|
441
|
+
*/
|
|
442
|
+
ariaDeprecatedRole: "aria-deprecated-role",
|
|
428
443
|
/**
|
|
429
444
|
* - Ensures every ARIA dialog and alertdialog node has an accessible name
|
|
430
|
-
* - ARIA dialog and alertdialog nodes should have an accessible name ([url](https://dequeuniversity.com/rules/axe/4.
|
|
445
|
+
* - ARIA dialog and alertdialog nodes should have an accessible name ([url](https://dequeuniversity.com/rules/axe/4.8/aria-dialog-name?application=axeAPI))
|
|
431
446
|
*/
|
|
432
447
|
ariaDialogName: "aria-dialog-name",
|
|
433
448
|
/**
|
|
434
|
-
* - Ensures aria-hidden=
|
|
435
|
-
* - aria-hidden=
|
|
449
|
+
* - Ensures aria-hidden="true" is not present on the document body.
|
|
450
|
+
* - aria-hidden="true" must not be present on the document body ([url](https://dequeuniversity.com/rules/axe/4.8/aria-hidden-body?application=axeAPI))
|
|
436
451
|
*/
|
|
437
452
|
ariaHiddenBody: "aria-hidden-body",
|
|
438
453
|
/**
|
|
439
454
|
* - Ensures every ARIA input field has an accessible name
|
|
440
|
-
* - ARIA input fields must have an accessible name ([url](https://dequeuniversity.com/rules/axe/4.
|
|
455
|
+
* - ARIA input fields must have an accessible name ([url](https://dequeuniversity.com/rules/axe/4.8/aria-input-field-name?application=axeAPI))
|
|
441
456
|
*/
|
|
442
457
|
ariaInputFieldName: "aria-input-field-name",
|
|
443
458
|
/**
|
|
444
459
|
* - Ensures every ARIA meter node has an accessible name
|
|
445
|
-
* - ARIA meter nodes must have an accessible name ([url](https://dequeuniversity.com/rules/axe/4.
|
|
460
|
+
* - ARIA meter nodes must have an accessible name ([url](https://dequeuniversity.com/rules/axe/4.8/aria-meter-name?application=axeAPI))
|
|
446
461
|
*/
|
|
447
462
|
ariaMeterName: "aria-meter-name",
|
|
448
463
|
/**
|
|
449
464
|
* - Ensures every ARIA progressbar node has an accessible name
|
|
450
|
-
* - ARIA progressbar nodes must have an accessible name ([url](https://dequeuniversity.com/rules/axe/4.
|
|
465
|
+
* - ARIA progressbar nodes must have an accessible name ([url](https://dequeuniversity.com/rules/axe/4.8/aria-progressbar-name?application=axeAPI))
|
|
451
466
|
*/
|
|
452
467
|
ariaProgressbarName: "aria-progressbar-name",
|
|
468
|
+
/**
|
|
469
|
+
* - Ensures ARIA attributes are not prohibited for an element's role
|
|
470
|
+
* - Elements must only use permitted ARIA attributes ([url](https://dequeuniversity.com/rules/axe/4.8/aria-prohibited-attr?application=axeAPI))
|
|
471
|
+
*/
|
|
472
|
+
ariaProhibitedAttr: "aria-prohibited-attr",
|
|
453
473
|
/**
|
|
454
474
|
* - Ensures elements with ARIA roles have all required ARIA attributes
|
|
455
|
-
* - Required ARIA attributes must be provided ([url](https://dequeuniversity.com/rules/axe/4.
|
|
475
|
+
* - Required ARIA attributes must be provided ([url](https://dequeuniversity.com/rules/axe/4.8/aria-required-attr?application=axeAPI))
|
|
456
476
|
*/
|
|
457
477
|
ariaRequiredAttr: "aria-required-attr",
|
|
458
478
|
/**
|
|
459
479
|
* - Ensures elements with an ARIA role that require child roles contain them
|
|
460
|
-
* - Certain ARIA roles must contain particular children ([url](https://dequeuniversity.com/rules/axe/4.
|
|
480
|
+
* - Certain ARIA roles must contain particular children ([url](https://dequeuniversity.com/rules/axe/4.8/aria-required-children?application=axeAPI))
|
|
461
481
|
*/
|
|
462
482
|
ariaRequiredChildren: "aria-required-children",
|
|
463
483
|
/**
|
|
464
484
|
* - Ensures elements with an ARIA role that require parent roles are contained by them
|
|
465
|
-
* - Certain ARIA roles must be contained by particular parents ([url](https://dequeuniversity.com/rules/axe/4.
|
|
485
|
+
* - Certain ARIA roles must be contained by particular parents ([url](https://dequeuniversity.com/rules/axe/4.8/aria-required-parent?application=axeAPI))
|
|
466
486
|
*/
|
|
467
487
|
ariaRequiredParent: "aria-required-parent",
|
|
468
488
|
/**
|
|
469
489
|
* - Ensure aria-roledescription is only used on elements with an implicit or explicit role
|
|
470
|
-
* - aria-roledescription must be on elements with a semantic role ([url](https://dequeuniversity.com/rules/axe/4.
|
|
490
|
+
* - aria-roledescription must be on elements with a semantic role ([url](https://dequeuniversity.com/rules/axe/4.8/aria-roledescription?application=axeAPI))
|
|
471
491
|
*/
|
|
472
492
|
ariaRoledescription: "aria-roledescription",
|
|
473
493
|
/**
|
|
474
494
|
* - Ensures all elements with a role attribute use a valid value
|
|
475
|
-
* - ARIA roles used must conform to valid values ([url](https://dequeuniversity.com/rules/axe/4.
|
|
495
|
+
* - ARIA roles used must conform to valid values ([url](https://dequeuniversity.com/rules/axe/4.8/aria-roles?application=axeAPI))
|
|
476
496
|
*/
|
|
477
497
|
ariaRoles: "aria-roles",
|
|
478
498
|
/**
|
|
479
|
-
* - Ensures
|
|
480
|
-
* - "role=text" should have no focusable descendants ([url](https://dequeuniversity.com/rules/axe/4.
|
|
499
|
+
* - Ensures role="text" is used on elements with no focusable descendants
|
|
500
|
+
* - "role=text" should have no focusable descendants ([url](https://dequeuniversity.com/rules/axe/4.8/aria-text?application=axeAPI))
|
|
481
501
|
*/
|
|
482
502
|
ariaText: "aria-text",
|
|
483
503
|
/**
|
|
484
504
|
* - Ensures every ARIA toggle field has an accessible name
|
|
485
|
-
* - ARIA toggle fields must have an accessible name ([url](https://dequeuniversity.com/rules/axe/4.
|
|
505
|
+
* - ARIA toggle fields must have an accessible name ([url](https://dequeuniversity.com/rules/axe/4.8/aria-toggle-field-name?application=axeAPI))
|
|
486
506
|
*/
|
|
487
507
|
ariaToggleFieldName: "aria-toggle-field-name",
|
|
488
508
|
/**
|
|
489
509
|
* - Ensures every ARIA tooltip node has an accessible name
|
|
490
|
-
* - ARIA tooltip nodes must have an accessible name ([url](https://dequeuniversity.com/rules/axe/4.
|
|
510
|
+
* - ARIA tooltip nodes must have an accessible name ([url](https://dequeuniversity.com/rules/axe/4.8/aria-tooltip-name?application=axeAPI))
|
|
491
511
|
*/
|
|
492
512
|
ariaTooltipName: "aria-tooltip-name",
|
|
493
513
|
/**
|
|
494
514
|
* - Ensures every ARIA treeitem node has an accessible name
|
|
495
|
-
* - ARIA treeitem nodes should have an accessible name ([url](https://dequeuniversity.com/rules/axe/4.
|
|
515
|
+
* - ARIA treeitem nodes should have an accessible name ([url](https://dequeuniversity.com/rules/axe/4.8/aria-treeitem-name?application=axeAPI))
|
|
496
516
|
*/
|
|
497
517
|
ariaTreeitemName: "aria-treeitem-name",
|
|
498
518
|
/**
|
|
499
519
|
* - Ensures all ARIA attributes have valid values
|
|
500
|
-
* - ARIA attributes must conform to valid values ([url](https://dequeuniversity.com/rules/axe/4.
|
|
520
|
+
* - ARIA attributes must conform to valid values ([url](https://dequeuniversity.com/rules/axe/4.8/aria-valid-attr-value?application=axeAPI))
|
|
501
521
|
*/
|
|
502
522
|
ariaValidAttrValue: "aria-valid-attr-value",
|
|
503
523
|
/**
|
|
504
524
|
* - Ensures attributes that begin with aria- are valid ARIA attributes
|
|
505
|
-
* - ARIA attributes must conform to valid names ([url](https://dequeuniversity.com/rules/axe/4.
|
|
525
|
+
* - ARIA attributes must conform to valid names ([url](https://dequeuniversity.com/rules/axe/4.8/aria-valid-attr?application=axeAPI))
|
|
506
526
|
*/
|
|
507
527
|
ariaValidAttr: "aria-valid-attr",
|
|
508
528
|
/**
|
|
509
|
-
* -
|
|
510
|
-
* -
|
|
511
|
-
*/
|
|
512
|
-
emptyTableHeader: "empty-table-header",
|
|
513
|
-
/**
|
|
514
|
-
* - Flags elements whose role is none or presentation and which cause the role conflict resolution to trigger.
|
|
515
|
-
* - Elements of role none or presentation should be flagged ([url](https://dequeuniversity.com/rules/axe/4.4/presentation-role-conflict?application=axeAPI))
|
|
529
|
+
* - Elements marked as presentational should not have global ARIA or tabindex to ensure all screen readers ignore them
|
|
530
|
+
* - Ensure elements marked as presentational are consistently ignored ([url](https://dequeuniversity.com/rules/axe/4.8/presentation-role-conflict?application=axeAPI))
|
|
516
531
|
*/
|
|
517
532
|
presentationRoleConflict: "presentation-role-conflict"
|
|
518
533
|
};
|
|
519
534
|
var nameRoleValue = {
|
|
520
535
|
/**
|
|
521
536
|
* - Ensures aria-hidden elements are not focusable nor contain focusable elements
|
|
522
|
-
* - ARIA hidden element must not be focusable or contain focusable elements ([url](https://dequeuniversity.com/rules/axe/4.
|
|
537
|
+
* - ARIA hidden element must not be focusable or contain focusable elements ([url](https://dequeuniversity.com/rules/axe/4.8/aria-hidden-focus?application=axeAPI))
|
|
523
538
|
*/
|
|
524
539
|
ariaHiddenFocus: "aria-hidden-focus",
|
|
525
540
|
/**
|
|
526
541
|
* - Ensures buttons have discernible text
|
|
527
|
-
* - Buttons must have discernible text ([url](https://dequeuniversity.com/rules/axe/4.
|
|
542
|
+
* - Buttons must have discernible text ([url](https://dequeuniversity.com/rules/axe/4.8/button-name?application=axeAPI))
|
|
528
543
|
*/
|
|
529
544
|
buttonName: "button-name",
|
|
530
545
|
/**
|
|
531
546
|
* - Ensures headings have discernible text
|
|
532
|
-
* - Headings should not be empty ([url](https://dequeuniversity.com/rules/axe/4.
|
|
547
|
+
* - Headings should not be empty ([url](https://dequeuniversity.com/rules/axe/4.8/empty-heading?application=axeAPI))
|
|
533
548
|
*/
|
|
534
549
|
emptyHeading: "empty-heading",
|
|
550
|
+
/**
|
|
551
|
+
* - Ensures table headers have discernible text
|
|
552
|
+
* - Table header text should not be empty ([url](https://dequeuniversity.com/rules/axe/4.8/empty-table-header?application=axeAPI))
|
|
553
|
+
*/
|
|
554
|
+
emptyTableHeader: "empty-table-header",
|
|
535
555
|
/**
|
|
536
556
|
* - Ensures input buttons have discernible text
|
|
537
|
-
* - Input buttons must have discernible text ([url](https://dequeuniversity.com/rules/axe/4.
|
|
557
|
+
* - Input buttons must have discernible text ([url](https://dequeuniversity.com/rules/axe/4.8/input-button-name?application=axeAPI))
|
|
538
558
|
*/
|
|
539
559
|
inputButtonName: "input-button-name",
|
|
540
560
|
/**
|
|
541
561
|
* - Ensures links have discernible text
|
|
542
|
-
* - Links must have discernible text ([url](https://dequeuniversity.com/rules/axe/4.
|
|
562
|
+
* - Links must have discernible text ([url](https://dequeuniversity.com/rules/axe/4.8/link-name?application=axeAPI))
|
|
543
563
|
*/
|
|
544
564
|
linkName: "link-name"
|
|
545
565
|
};
|
|
546
566
|
var timeAndMedia = {
|
|
547
567
|
/**
|
|
548
568
|
* - Ensures `<audio>` elements have captions
|
|
549
|
-
* - `<audio>` elements must have a captions track ([url](https://dequeuniversity.com/rules/axe/4.
|
|
569
|
+
* - `<audio>` elements must have a captions track ([url](https://dequeuniversity.com/rules/axe/4.8/audio-caption?application=axeAPI))
|
|
550
570
|
*/
|
|
551
571
|
audioCaption: "audio-caption",
|
|
552
572
|
/**
|
|
553
573
|
* - Ensures `<blink>` elements are not used
|
|
554
|
-
* - `<blink>` elements are deprecated and must not be used ([url](https://dequeuniversity.com/rules/axe/4.
|
|
574
|
+
* - `<blink>` elements are deprecated and must not be used ([url](https://dequeuniversity.com/rules/axe/4.8/blink?application=axeAPI))
|
|
555
575
|
*/
|
|
556
576
|
blink: "blink",
|
|
557
577
|
/**
|
|
558
|
-
* - Ensures `<meta http-equiv="refresh">` is not used
|
|
559
|
-
* -
|
|
578
|
+
* - Ensures `<meta http-equiv="refresh">` is not used for delayed refresh
|
|
579
|
+
* - Delayed refresh must not be used ([url](https://dequeuniversity.com/rules/axe/4.8/meta-refresh-no-exceptions?application=axeAPI))
|
|
580
|
+
*/
|
|
581
|
+
metaRefreshNoExceptions: "meta-refresh-no-exceptions",
|
|
582
|
+
/**
|
|
583
|
+
* - Ensures `<meta http-equiv="refresh">` is not used for delayed refresh
|
|
584
|
+
* - Delayed refresh under 20 hours must not be used ([url](https://dequeuniversity.com/rules/axe/4.8/meta-refresh?application=axeAPI))
|
|
560
585
|
*/
|
|
561
586
|
metaRefresh: "meta-refresh",
|
|
562
587
|
/**
|
|
563
588
|
* - Ensures `<video>` or `<audio>` elements do not autoplay audio for more than 3 seconds without a control mechanism to stop or mute the audio
|
|
564
|
-
* - `<video>` or `<audio>` elements must not play automatically ([url](https://dequeuniversity.com/rules/axe/4.
|
|
589
|
+
* - `<video>` or `<audio>` elements must not play automatically ([url](https://dequeuniversity.com/rules/axe/4.8/no-autoplay-audio?application=axeAPI))
|
|
565
590
|
*/
|
|
566
591
|
noAutoplayAudio: "no-autoplay-audio"
|
|
567
592
|
};
|
|
568
593
|
var forms = {
|
|
569
594
|
/**
|
|
570
595
|
* - Ensure the autocomplete attribute is correct and suitable for the form field
|
|
571
|
-
* - autocomplete attribute must be used correctly ([url](https://dequeuniversity.com/rules/axe/4.
|
|
596
|
+
* - autocomplete attribute must be used correctly ([url](https://dequeuniversity.com/rules/axe/4.8/autocomplete-valid?application=axeAPI))
|
|
572
597
|
*/
|
|
573
598
|
autocompleteValid: "autocomplete-valid",
|
|
574
599
|
/**
|
|
575
600
|
* - Ensures form field does not have multiple label elements
|
|
576
|
-
* - Form field must not have multiple label elements ([url](https://dequeuniversity.com/rules/axe/4.
|
|
601
|
+
* - Form field must not have multiple label elements ([url](https://dequeuniversity.com/rules/axe/4.8/form-field-multiple-labels?application=axeAPI))
|
|
577
602
|
*/
|
|
578
603
|
formFieldMultipleLabels: "form-field-multiple-labels",
|
|
579
604
|
/**
|
|
580
605
|
* - Ensures that every form element has a visible label and is not solely labeled using hidden labels, or the title or aria-describedby attributes
|
|
581
|
-
* - Form elements should have a visible label ([url](https://dequeuniversity.com/rules/axe/4.
|
|
606
|
+
* - Form elements should have a visible label ([url](https://dequeuniversity.com/rules/axe/4.8/label-title-only?application=axeAPI))
|
|
582
607
|
*/
|
|
583
608
|
labelTitleOnly: "label-title-only",
|
|
584
609
|
/**
|
|
585
610
|
* - Ensures every form element has a label
|
|
586
|
-
* - Form elements must have labels ([url](https://dequeuniversity.com/rules/axe/4.
|
|
611
|
+
* - Form elements must have labels ([url](https://dequeuniversity.com/rules/axe/4.8/label?application=axeAPI))
|
|
587
612
|
*/
|
|
588
613
|
label: "label",
|
|
589
614
|
/**
|
|
590
615
|
* - Ensures select element has an accessible name
|
|
591
|
-
* - Select element must have an accessible name ([url](https://dequeuniversity.com/rules/axe/4.
|
|
616
|
+
* - Select element must have an accessible name ([url](https://dequeuniversity.com/rules/axe/4.8/select-name?application=axeAPI))
|
|
592
617
|
*/
|
|
593
618
|
selectName: "select-name"
|
|
594
619
|
};
|
|
595
620
|
var structure = {
|
|
596
621
|
/**
|
|
597
622
|
* - Ensure that text spacing set through style attributes can be adjusted with custom stylesheets
|
|
598
|
-
* - Inline text spacing must be adjustable with custom stylesheets ([url](https://dequeuniversity.com/rules/axe/4.
|
|
623
|
+
* - Inline text spacing must be adjustable with custom stylesheets ([url](https://dequeuniversity.com/rules/axe/4.8/avoid-inline-spacing?application=axeAPI))
|
|
599
624
|
*/
|
|
600
625
|
avoidInlineSpacing: "avoid-inline-spacing",
|
|
601
626
|
/**
|
|
602
627
|
* - Ensures content is not locked to any specific display orientation, and the content is operable in all display orientations
|
|
603
|
-
* - CSS Media queries must not lock display orientation ([url](https://dequeuniversity.com/rules/axe/4.
|
|
628
|
+
* - CSS Media queries must not lock display orientation ([url](https://dequeuniversity.com/rules/axe/4.8/css-orientation-lock?application=axeAPI))
|
|
604
629
|
*/
|
|
605
630
|
cssOrientationLock: "css-orientation-lock",
|
|
606
631
|
/**
|
|
607
632
|
* - Ensures `<dl>` elements are structured correctly
|
|
608
|
-
* - `<dl>` elements must only directly contain properly-ordered `<dt>` and `<dd>` groups, `<script>`, `<template>` or `<div>` elements ([url](https://dequeuniversity.com/rules/axe/4.
|
|
633
|
+
* - `<dl>` elements must only directly contain properly-ordered `<dt>` and `<dd>` groups, `<script>`, `<template>` or `<div>` elements ([url](https://dequeuniversity.com/rules/axe/4.8/definition-list?application=axeAPI))
|
|
609
634
|
*/
|
|
610
635
|
definitionList: "definition-list",
|
|
611
636
|
/**
|
|
612
637
|
* - Ensures `<dt>` and `<dd>` elements are contained by a `<dl>`
|
|
613
|
-
* - `<dt>` and `<dd>` elements must be contained by a `<dl>` ([url](https://dequeuniversity.com/rules/axe/4.
|
|
638
|
+
* - `<dt>` and `<dd>` elements must be contained by a `<dl>` ([url](https://dequeuniversity.com/rules/axe/4.8/dlitem?application=axeAPI))
|
|
614
639
|
*/
|
|
615
640
|
dlitem: "dlitem",
|
|
616
641
|
/**
|
|
617
642
|
* - Ensures `<iframe>` and `<frame>` elements contain the axe-core script
|
|
618
|
-
* - Frames should be tested with axe-core ([url](https://dequeuniversity.com/rules/axe/4.
|
|
643
|
+
* - Frames should be tested with axe-core ([url](https://dequeuniversity.com/rules/axe/4.8/frame-tested?application=axeAPI))
|
|
619
644
|
*/
|
|
620
645
|
frameTested: "frame-tested",
|
|
621
646
|
/**
|
|
622
647
|
* - Informs users about hidden content.
|
|
623
|
-
* - Hidden content on the page should be analyzed ([url](https://dequeuniversity.com/rules/axe/4.
|
|
648
|
+
* - Hidden content on the page should be analyzed ([url](https://dequeuniversity.com/rules/axe/4.8/hidden-content?application=axeAPI))
|
|
624
649
|
*/
|
|
625
650
|
hiddenContent: "hidden-content",
|
|
626
651
|
/**
|
|
627
652
|
* - Ensures that lists are structured correctly
|
|
628
|
-
* - `<ul>` and `<ol>` must only directly contain `<li>`, `<script>` or `<template>` elements ([url](https://dequeuniversity.com/rules/axe/4.
|
|
653
|
+
* - `<ul>` and `<ol>` must only directly contain `<li>`, `<script>` or `<template>` elements ([url](https://dequeuniversity.com/rules/axe/4.8/list?application=axeAPI))
|
|
629
654
|
*/
|
|
630
655
|
list: "list",
|
|
631
656
|
/**
|
|
632
657
|
* - Ensures `<li>` elements are used semantically
|
|
633
|
-
* - `<li>` elements must be contained in a `<ul>` or `<ol>` ([url](https://dequeuniversity.com/rules/axe/4.
|
|
658
|
+
* - `<li>` elements must be contained in a `<ul>` or `<ol>` ([url](https://dequeuniversity.com/rules/axe/4.8/listitem?application=axeAPI))
|
|
634
659
|
*/
|
|
635
660
|
listitem: "listitem"
|
|
636
661
|
};
|
|
637
662
|
var parsing = {
|
|
638
663
|
/**
|
|
639
664
|
* - Ensures every id attribute value of active elements is unique
|
|
640
|
-
* - IDs of active elements must be unique ([url](https://dequeuniversity.com/rules/axe/4.
|
|
665
|
+
* - IDs of active elements must be unique ([url](https://dequeuniversity.com/rules/axe/4.8/duplicate-id-active?application=axeAPI))
|
|
641
666
|
*/
|
|
642
667
|
duplicateIdActive: "duplicate-id-active",
|
|
643
668
|
/**
|
|
644
669
|
* - Ensures every id attribute value used in ARIA and in labels is unique
|
|
645
|
-
* - IDs used in ARIA and labels must be unique ([url](https://dequeuniversity.com/rules/axe/4.
|
|
670
|
+
* - IDs used in ARIA and labels must be unique ([url](https://dequeuniversity.com/rules/axe/4.8/duplicate-id-aria?application=axeAPI))
|
|
646
671
|
*/
|
|
647
672
|
duplicateIdAria: "duplicate-id-aria",
|
|
648
673
|
/**
|
|
649
674
|
* - Ensures every id attribute value is unique
|
|
650
|
-
* - id attribute value must be unique ([url](https://dequeuniversity.com/rules/axe/4.
|
|
675
|
+
* - id attribute value must be unique ([url](https://dequeuniversity.com/rules/axe/4.8/duplicate-id?application=axeAPI))
|
|
651
676
|
*/
|
|
652
677
|
duplicateId: "duplicate-id",
|
|
653
678
|
/**
|
|
654
679
|
* - Ensures `<marquee>` elements are not used
|
|
655
|
-
* - `<marquee>` elements are deprecated and must not be used ([url](https://dequeuniversity.com/rules/axe/4.
|
|
680
|
+
* - `<marquee>` elements are deprecated and must not be used ([url](https://dequeuniversity.com/rules/axe/4.8/marquee?application=axeAPI))
|
|
656
681
|
*/
|
|
657
682
|
marquee: "marquee"
|
|
658
683
|
};
|
|
659
684
|
var semantics = {
|
|
660
685
|
/**
|
|
661
686
|
* - Ensures the order of headings is semantically correct
|
|
662
|
-
* - Heading levels should only increase by one ([url](https://dequeuniversity.com/rules/axe/4.
|
|
687
|
+
* - Heading levels should only increase by one ([url](https://dequeuniversity.com/rules/axe/4.8/heading-order?application=axeAPI))
|
|
663
688
|
*/
|
|
664
689
|
headingOrder: "heading-order",
|
|
665
690
|
/**
|
|
666
691
|
* - Ensure that links with the same accessible name serve a similar purpose
|
|
667
|
-
* - Links with the same name must have a similar purpose ([url](https://dequeuniversity.com/rules/axe/4.
|
|
692
|
+
* - Links with the same name must have a similar purpose ([url](https://dequeuniversity.com/rules/axe/4.8/identical-links-same-purpose?application=axeAPI))
|
|
668
693
|
*/
|
|
669
694
|
identicalLinksSamePurpose: "identical-links-same-purpose",
|
|
670
695
|
/**
|
|
671
696
|
* - Ensures that elements labelled through their content must have their visible text as part of their accessible name
|
|
672
|
-
* - Elements must have their visible text as part of their accessible name ([url](https://dequeuniversity.com/rules/axe/4.
|
|
697
|
+
* - Elements must have their visible text as part of their accessible name ([url](https://dequeuniversity.com/rules/axe/4.8/label-content-name-mismatch?application=axeAPI))
|
|
673
698
|
*/
|
|
674
699
|
labelContentNameMismatch: "label-content-name-mismatch",
|
|
675
700
|
/**
|
|
676
701
|
* - Ensures the banner landmark is at top level
|
|
677
|
-
* - Banner landmark should not be contained in another landmark ([url](https://dequeuniversity.com/rules/axe/4.
|
|
702
|
+
* - Banner landmark should not be contained in another landmark ([url](https://dequeuniversity.com/rules/axe/4.8/landmark-banner-is-top-level?application=axeAPI))
|
|
678
703
|
*/
|
|
679
704
|
landmarkBannerIsTopLevel: "landmark-banner-is-top-level",
|
|
680
705
|
/**
|
|
681
706
|
* - Ensures the complementary landmark or aside is at top level
|
|
682
|
-
* - Aside should not be contained in another landmark ([url](https://dequeuniversity.com/rules/axe/4.
|
|
707
|
+
* - Aside should not be contained in another landmark ([url](https://dequeuniversity.com/rules/axe/4.8/landmark-complementary-is-top-level?application=axeAPI))
|
|
683
708
|
*/
|
|
684
709
|
landmarkComplementaryIsTopLevel: "landmark-complementary-is-top-level",
|
|
685
710
|
/**
|
|
686
711
|
* - Ensures the contentinfo landmark is at top level
|
|
687
|
-
* - Contentinfo landmark should not be contained in another landmark ([url](https://dequeuniversity.com/rules/axe/4.
|
|
712
|
+
* - Contentinfo landmark should not be contained in another landmark ([url](https://dequeuniversity.com/rules/axe/4.8/landmark-contentinfo-is-top-level?application=axeAPI))
|
|
688
713
|
*/
|
|
689
714
|
landmarkContentinfoIsTopLevel: "landmark-contentinfo-is-top-level",
|
|
690
715
|
/**
|
|
691
716
|
* - Ensures the main landmark is at top level
|
|
692
|
-
* - Main landmark should not be contained in another landmark ([url](https://dequeuniversity.com/rules/axe/4.
|
|
717
|
+
* - Main landmark should not be contained in another landmark ([url](https://dequeuniversity.com/rules/axe/4.8/landmark-main-is-top-level?application=axeAPI))
|
|
693
718
|
*/
|
|
694
719
|
landmarkMainIsTopLevel: "landmark-main-is-top-level",
|
|
695
720
|
/**
|
|
696
721
|
* - Ensures the document has at most one banner landmark
|
|
697
|
-
* - Document should not have more than one banner landmark ([url](https://dequeuniversity.com/rules/axe/4.
|
|
722
|
+
* - Document should not have more than one banner landmark ([url](https://dequeuniversity.com/rules/axe/4.8/landmark-no-duplicate-banner?application=axeAPI))
|
|
698
723
|
*/
|
|
699
724
|
landmarkNoDuplicateBanner: "landmark-no-duplicate-banner",
|
|
700
725
|
/**
|
|
701
726
|
* - Ensures the document has at most one contentinfo landmark
|
|
702
|
-
* - Document should not have more than one contentinfo landmark ([url](https://dequeuniversity.com/rules/axe/4.
|
|
727
|
+
* - Document should not have more than one contentinfo landmark ([url](https://dequeuniversity.com/rules/axe/4.8/landmark-no-duplicate-contentinfo?application=axeAPI))
|
|
703
728
|
*/
|
|
704
729
|
landmarkNoDuplicateContentinfo: "landmark-no-duplicate-contentinfo",
|
|
705
730
|
/**
|
|
706
731
|
* - Ensures the document has at most one main landmark
|
|
707
|
-
* - Document should not have more than one main landmark ([url](https://dequeuniversity.com/rules/axe/4.
|
|
732
|
+
* - Document should not have more than one main landmark ([url](https://dequeuniversity.com/rules/axe/4.8/landmark-no-duplicate-main?application=axeAPI))
|
|
708
733
|
*/
|
|
709
734
|
landmarkNoDuplicateMain: "landmark-no-duplicate-main",
|
|
710
735
|
/**
|
|
711
736
|
* - Ensures the document has a main landmark
|
|
712
|
-
* - Document should have one main landmark ([url](https://dequeuniversity.com/rules/axe/4.
|
|
737
|
+
* - Document should have one main landmark ([url](https://dequeuniversity.com/rules/axe/4.8/landmark-one-main?application=axeAPI))
|
|
713
738
|
*/
|
|
714
739
|
landmarkOneMain: "landmark-one-main",
|
|
715
740
|
/**
|
|
716
741
|
* - Landmarks should have a unique role or role/label/title (i.e. accessible name) combination
|
|
717
|
-
* - Ensures landmarks are unique ([url](https://dequeuniversity.com/rules/axe/4.
|
|
742
|
+
* - Ensures landmarks are unique ([url](https://dequeuniversity.com/rules/axe/4.8/landmark-unique?application=axeAPI))
|
|
718
743
|
*/
|
|
719
744
|
landmarkUnique: "landmark-unique",
|
|
720
745
|
/**
|
|
721
746
|
* - Ensure bold, italic text and font-size is not used to style `<p>` elements as a heading
|
|
722
|
-
* - Styled `<p>` elements must not be used as headings ([url](https://dequeuniversity.com/rules/axe/4.
|
|
747
|
+
* - Styled `<p>` elements must not be used as headings ([url](https://dequeuniversity.com/rules/axe/4.8/p-as-heading?application=axeAPI))
|
|
723
748
|
*/
|
|
724
749
|
pAsHeading: "p-as-heading",
|
|
725
750
|
/**
|
|
726
751
|
* - Ensure that the page, or at least one of its frames contains a level-one heading
|
|
727
|
-
* - Page should contain a level-one heading ([url](https://dequeuniversity.com/rules/axe/4.
|
|
752
|
+
* - Page should contain a level-one heading ([url](https://dequeuniversity.com/rules/axe/4.8/page-has-heading-one?application=axeAPI))
|
|
728
753
|
*/
|
|
729
754
|
pageHasHeadingOne: "page-has-heading-one"
|
|
730
755
|
};
|
|
731
756
|
var language = {
|
|
732
757
|
/**
|
|
733
758
|
* - Ensures every HTML document has a lang attribute
|
|
734
|
-
* - `<html>` element must have a lang attribute ([url](https://dequeuniversity.com/rules/axe/4.
|
|
759
|
+
* - `<html>` element must have a lang attribute ([url](https://dequeuniversity.com/rules/axe/4.8/html-has-lang?application=axeAPI))
|
|
735
760
|
*/
|
|
736
761
|
htmlHasLang: "html-has-lang",
|
|
737
762
|
/**
|
|
738
763
|
* - Ensures the lang attribute of the `<html>` element has a valid value
|
|
739
|
-
* - `<html>` element must have a valid value for the lang attribute ([url](https://dequeuniversity.com/rules/axe/4.
|
|
764
|
+
* - `<html>` element must have a valid value for the lang attribute ([url](https://dequeuniversity.com/rules/axe/4.8/html-lang-valid?application=axeAPI))
|
|
740
765
|
*/
|
|
741
766
|
htmlLangValid: "html-lang-valid",
|
|
742
767
|
/**
|
|
743
768
|
* - Ensure that HTML elements with both valid lang and xml:lang attributes agree on the base language of the page
|
|
744
|
-
* - HTML elements with lang and xml:lang must have the same base language ([url](https://dequeuniversity.com/rules/axe/4.
|
|
769
|
+
* - HTML elements with lang and xml:lang must have the same base language ([url](https://dequeuniversity.com/rules/axe/4.8/html-xml-lang-mismatch?application=axeAPI))
|
|
745
770
|
*/
|
|
746
771
|
htmlXmlLangMismatch: "html-xml-lang-mismatch",
|
|
747
772
|
/**
|
|
748
773
|
* - Ensures lang attributes have valid values
|
|
749
|
-
* - lang attribute must have a valid value ([url](https://dequeuniversity.com/rules/axe/4.
|
|
774
|
+
* - lang attribute must have a valid value ([url](https://dequeuniversity.com/rules/axe/4.8/valid-lang?application=axeAPI))
|
|
750
775
|
*/
|
|
751
776
|
validLang: "valid-lang"
|
|
752
777
|
};
|
|
753
778
|
var sensoryAndVisualCues = {
|
|
754
779
|
/**
|
|
755
780
|
* - Ensures `<meta name="viewport">` can scale a significant amount
|
|
756
|
-
* - Users should be able to zoom and scale the text up to 500% ([url](https://dequeuniversity.com/rules/axe/4.
|
|
781
|
+
* - Users should be able to zoom and scale the text up to 500% ([url](https://dequeuniversity.com/rules/axe/4.8/meta-viewport-large?application=axeAPI))
|
|
757
782
|
*/
|
|
758
783
|
metaViewportLarge: "meta-viewport-large",
|
|
759
784
|
/**
|
|
760
785
|
* - Ensures `<meta name="viewport">` does not disable text scaling and zooming
|
|
761
|
-
* - Zooming and scaling
|
|
786
|
+
* - Zooming and scaling must not be disabled ([url](https://dequeuniversity.com/rules/axe/4.8/meta-viewport?application=axeAPI))
|
|
787
|
+
*/
|
|
788
|
+
metaViewport: "meta-viewport",
|
|
789
|
+
/**
|
|
790
|
+
* - Ensure touch target have sufficient size and space
|
|
791
|
+
* - All touch targets must be 24px large, or leave sufficient space ([url](https://dequeuniversity.com/rules/axe/4.8/target-size?application=axeAPI))
|
|
762
792
|
*/
|
|
763
|
-
|
|
793
|
+
targetSize: "target-size"
|
|
764
794
|
};
|
|
765
795
|
var tables = {
|
|
766
796
|
/**
|
|
767
797
|
* - Ensures the scope attribute is used correctly on tables
|
|
768
|
-
* - scope attribute should be used correctly ([url](https://dequeuniversity.com/rules/axe/4.
|
|
798
|
+
* - scope attribute should be used correctly ([url](https://dequeuniversity.com/rules/axe/4.8/scope-attr-valid?application=axeAPI))
|
|
769
799
|
*/
|
|
770
800
|
scopeAttrValid: "scope-attr-valid",
|
|
771
801
|
/**
|
|
772
802
|
* - Ensure the `<caption>` element does not contain the same text as the summary attribute
|
|
773
|
-
* - tables should not have the same summary and caption ([url](https://dequeuniversity.com/rules/axe/4.
|
|
803
|
+
* - tables should not have the same summary and caption ([url](https://dequeuniversity.com/rules/axe/4.8/table-duplicate-name?application=axeAPI))
|
|
774
804
|
*/
|
|
775
805
|
tableDuplicateName: "table-duplicate-name",
|
|
776
806
|
/**
|
|
777
807
|
* - Ensure that tables with a caption use the `<caption>` element.
|
|
778
|
-
* - Data or header cells must not be used to give caption to a data table. ([url](https://dequeuniversity.com/rules/axe/4.
|
|
808
|
+
* - Data or header cells must not be used to give caption to a data table. ([url](https://dequeuniversity.com/rules/axe/4.8/table-fake-caption?application=axeAPI))
|
|
779
809
|
*/
|
|
780
810
|
tableFakeCaption: "table-fake-caption",
|
|
781
811
|
/**
|
|
782
812
|
* - Ensure that each non-empty data cell in a `<table>` larger than 3 by 3 has one or more table headers
|
|
783
|
-
* - Non-empty `<td>` elements in larger `<table>` must have an associated table header ([url](https://dequeuniversity.com/rules/axe/4.
|
|
813
|
+
* - Non-empty `<td>` elements in larger `<table>` must have an associated table header ([url](https://dequeuniversity.com/rules/axe/4.8/td-has-header?application=axeAPI))
|
|
784
814
|
*/
|
|
785
815
|
tdHasHeader: "td-has-header",
|
|
786
816
|
/**
|
|
787
817
|
* - Ensure that each cell in a table that uses the headers attribute refers only to other cells in that table
|
|
788
|
-
* - Table cells that use the headers attribute must only refer to cells in the same table ([url](https://dequeuniversity.com/rules/axe/4.
|
|
818
|
+
* - Table cells that use the headers attribute must only refer to cells in the same table ([url](https://dequeuniversity.com/rules/axe/4.8/td-headers-attr?application=axeAPI))
|
|
789
819
|
*/
|
|
790
820
|
tdHeadersAttr: "td-headers-attr",
|
|
791
821
|
/**
|
|
792
822
|
* - Ensure that `<th>` elements and elements with role=columnheader/rowheader have data cells they describe
|
|
793
|
-
* - Table headers in a data table must refer to data cells ([url](https://dequeuniversity.com/rules/axe/4.
|
|
823
|
+
* - Table headers in a data table must refer to data cells ([url](https://dequeuniversity.com/rules/axe/4.8/th-has-data-cells?application=axeAPI))
|
|
794
824
|
*/
|
|
795
825
|
thHasDataCells: "th-has-data-cells"
|
|
796
826
|
};
|
|
@@ -804,8 +834,8 @@ var rules = {
|
|
|
804
834
|
aria.ariaAllowedAttr,
|
|
805
835
|
aria.ariaAllowedRole,
|
|
806
836
|
aria.ariaHiddenBody,
|
|
807
|
-
aria.ariaRoledescription,
|
|
808
837
|
aria.ariaRoles,
|
|
838
|
+
aria.ariaDeprecatedRole,
|
|
809
839
|
aria.presentationRoleConflict,
|
|
810
840
|
forms.autocompleteValid,
|
|
811
841
|
forms.formFieldMultipleLabels,
|
|
@@ -819,8 +849,6 @@ var rules = {
|
|
|
819
849
|
nameRoleValue.ariaHiddenFocus,
|
|
820
850
|
// Could not find error state
|
|
821
851
|
nameRoleValue.emptyHeading,
|
|
822
|
-
parsing.duplicateIdActive,
|
|
823
|
-
parsing.duplicateIdAria,
|
|
824
852
|
parsing.marquee,
|
|
825
853
|
semantics.identicalLinksSamePurpose,
|
|
826
854
|
// Could not find error state
|
|
@@ -848,6 +876,7 @@ var rules = {
|
|
|
848
876
|
*/
|
|
849
877
|
requiresAttrs: [
|
|
850
878
|
aria.ariaRequiredAttr,
|
|
879
|
+
aria.ariaProhibitedAttr,
|
|
851
880
|
language.htmlHasLang,
|
|
852
881
|
textAlternatives.areaAlt,
|
|
853
882
|
textAlternatives.imageAlt,
|
|
@@ -865,7 +894,7 @@ var rules = {
|
|
|
865
894
|
aria.ariaRequiredChildren,
|
|
866
895
|
aria.ariaText,
|
|
867
896
|
aria.ariaValidAttrValue,
|
|
868
|
-
|
|
897
|
+
nameRoleValue.emptyTableHeader,
|
|
869
898
|
keyboard.frameFocusableContent,
|
|
870
899
|
keyboard.skipLink,
|
|
871
900
|
nameRoleValue.ariaHiddenFocus,
|
|
@@ -878,8 +907,7 @@ var rules = {
|
|
|
878
907
|
textAlternatives.documentTitle,
|
|
879
908
|
textAlternatives.frameTitleUnique,
|
|
880
909
|
textAlternatives.frameTitle,
|
|
881
|
-
textAlternatives.videoCaption
|
|
882
|
-
timeAndMedia.audioCaption
|
|
910
|
+
textAlternatives.videoCaption
|
|
883
911
|
],
|
|
884
912
|
/**
|
|
885
913
|
* These rules can be resolved by changing content in
|
|
@@ -925,18 +953,20 @@ var rules = {
|
|
|
925
953
|
* These rules should not be enforced to all users of
|
|
926
954
|
* the official Marko language server.
|
|
927
955
|
*/
|
|
928
|
-
blacklist: [structure.frameTested
|
|
956
|
+
blacklist: [structure.frameTested],
|
|
929
957
|
/**
|
|
930
958
|
* These are rules that cannot currently be validated, either
|
|
931
959
|
* because of limitations with JSDom + axe-core or with the
|
|
932
960
|
* current implementation of the language server.
|
|
933
961
|
*/
|
|
934
962
|
cannotValidate: [
|
|
963
|
+
parsing.duplicateIdAria,
|
|
935
964
|
keyboard.scrollableRegionFocusable,
|
|
936
965
|
semantics.pAsHeading,
|
|
937
966
|
structure.avoidInlineSpacing,
|
|
938
967
|
structure.cssOrientationLock,
|
|
939
|
-
structure.hiddenContent
|
|
968
|
+
structure.hiddenContent,
|
|
969
|
+
sensoryAndVisualCues.targetSize
|
|
940
970
|
]
|
|
941
971
|
};
|
|
942
972
|
var separated_rules_default = rules;
|
|
@@ -2834,24 +2864,31 @@ function docLocationAtTextSpan(doc, { start, length }) {
|
|
|
2834
2864
|
end: doc.positionAt(start + length)
|
|
2835
2865
|
};
|
|
2836
2866
|
}
|
|
2867
|
+
function getTSConfigFile(fileName) {
|
|
2868
|
+
let configFile;
|
|
2869
|
+
const docFsDir = import_path7.default.dirname(fileName);
|
|
2870
|
+
const cache = import_language_tools16.Project.getCache(docFsDir);
|
|
2871
|
+
let configFileCache = cache.get(getTSConfigFile);
|
|
2872
|
+
if (configFileCache) {
|
|
2873
|
+
configFile = configFileCache.get(docFsDir);
|
|
2874
|
+
} else {
|
|
2875
|
+
configFileCache = /* @__PURE__ */ new Map();
|
|
2876
|
+
cache.set(getTSConfigFile, configFileCache);
|
|
2877
|
+
}
|
|
2878
|
+
if (!configFile) {
|
|
2879
|
+
configFile = import_tsserverlibrary.default.findConfigFile(fileName, import_tsserverlibrary.default.sys.fileExists, "tsconfig.json") || import_tsserverlibrary.default.findConfigFile(fileName, import_tsserverlibrary.default.sys.fileExists, "jsconfig.json");
|
|
2880
|
+
}
|
|
2881
|
+
configFileCache.set(docFsDir, configFile);
|
|
2882
|
+
return configFile;
|
|
2883
|
+
}
|
|
2837
2884
|
function getTSProject(docFsPath) {
|
|
2838
2885
|
var _a;
|
|
2839
2886
|
let configFile;
|
|
2840
2887
|
let markoScriptLang = import_language_tools16.ScriptLang.js;
|
|
2841
2888
|
if (docFsPath) {
|
|
2842
|
-
configFile =
|
|
2843
|
-
|
|
2844
|
-
import_tsserverlibrary.default.sys.fileExists,
|
|
2845
|
-
"tsconfig.json"
|
|
2846
|
-
);
|
|
2847
|
-
if (configFile) {
|
|
2889
|
+
configFile = getTSConfigFile(docFsPath);
|
|
2890
|
+
if (configFile == null ? void 0 : configFile.endsWith("tsconfig.json")) {
|
|
2848
2891
|
markoScriptLang = import_language_tools16.ScriptLang.ts;
|
|
2849
|
-
} else {
|
|
2850
|
-
configFile = import_tsserverlibrary.default.findConfigFile(
|
|
2851
|
-
docFsPath,
|
|
2852
|
-
import_tsserverlibrary.default.sys.fileExists,
|
|
2853
|
-
"jsconfig.json"
|
|
2854
|
-
);
|
|
2855
2892
|
}
|
|
2856
2893
|
}
|
|
2857
2894
|
const rootDir = configFile && import_path7.default.dirname(configFile) || process.cwd();
|
|
@@ -2938,8 +2975,12 @@ function getTSProject(docFsPath) {
|
|
|
2938
2975
|
const result = new Set(potentialGlobalFiles);
|
|
2939
2976
|
for (const doc of getAllOpen()) {
|
|
2940
2977
|
const { scheme, fsPath } = import_vscode_uri6.URI.parse(doc.uri);
|
|
2941
|
-
if (scheme === "file")
|
|
2942
|
-
|
|
2978
|
+
if (scheme === "file") {
|
|
2979
|
+
const projectForFile = getTSProject(fsPath);
|
|
2980
|
+
if (projectForFile === tsProject) {
|
|
2981
|
+
result.add(fsPath);
|
|
2982
|
+
}
|
|
2983
|
+
}
|
|
2943
2984
|
}
|
|
2944
2985
|
return [...result];
|
|
2945
2986
|
},
|