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