├── logs └── .keep ├── .nvmrc ├── test ├── config │ ├── defaults.js │ ├── mobile.js │ ├── index.js │ └── local.js └── assessmentSpecs │ ├── specs │ ├── embedHasAssociatedNoEmbed │ │ └── assets │ │ │ ├── history_of_rome.mov │ │ │ └── transcript_history_rome.htm │ ├── imgHasAlt │ │ ├── assets │ │ │ └── rex.jpg │ │ ├── imgHasAlt-nomatch.html │ │ └── imgHasAlt.html │ ├── headersHaveText │ │ ├── assets │ │ │ └── rex.jpg │ │ └── headersHaveText.html │ ├── imgAltIsTooLong │ │ ├── assets │ │ │ └── rex.jpg │ │ └── imgAltIsTooLong.html │ ├── aMustContainText │ │ └── assets │ │ │ └── rex.jpg │ ├── imgAltIsDifferent │ │ ├── assets │ │ │ └── rex.jpg │ │ └── imgAltIsDifferent.html │ ├── newWindowIsOpened │ │ ├── assets │ │ │ └── go.gif │ │ └── newWindowIsOpened.html │ ├── aImgAltNotRepetitive │ │ └── assets │ │ │ └── rex.jpg │ ├── colorFontContrast │ │ └── assets │ │ │ ├── fish.gif │ │ │ ├── kids.jpg │ │ │ └── quail.png │ ├── imgAltNotPlaceHolder │ │ └── assets │ │ │ └── rex.jpg │ ├── labelMustNotBeEmpty │ │ └── assets │ │ │ └── name.jpg │ ├── documentStrictDocType │ │ ├── assets │ │ │ └── rex.jpg │ │ ├── documentStrictDocType-fail.html │ │ ├── documentStrictDocType.html │ │ ├── documentStrictDocType-fail-2.html │ │ ├── documentStrictDocType-fail-3.html │ │ └── documentStrictDocType-pass-2.html │ ├── imgAltNotEmptyInAnchor │ │ └── assets │ │ │ └── rex.jpg │ ├── imgNonDecorativeHasAlt │ │ └── assets │ │ │ └── rex.jpg │ ├── imgShouldNotHaveTitle │ │ ├── assets │ │ │ └── rex.jpg │ │ ├── imgShouldNotHaveTitle-nomatch.html │ │ └── imgShouldNotHaveTitle.html │ ├── imgWithMapHasUseMap │ │ ├── assets │ │ │ └── image.gif │ │ ├── imgWithMapHasUseMap-nomatch.html │ │ └── imgWithMapHasUseMap.html │ ├── inputImageAltIsShort │ │ └── assets │ │ │ ├── input.jpg │ │ │ └── name.jpg │ ├── animatedGifMayBePresent │ │ ├── assets │ │ │ ├── fish.gif │ │ │ ├── kids.jpg │ │ │ └── fishswim.gif │ │ └── animatedGifMayBePresent.html │ ├── areaAltRefersToText │ │ ├── assets │ │ │ └── welcome.gif │ │ ├── areaAltRefersToText-nomatch.html │ │ └── areaAltRefersToText.html │ ├── imgImportantNoSpacerAlt │ │ ├── assets │ │ │ ├── rex.jpg │ │ │ ├── spacer.gif │ │ │ └── big-fail.png │ │ └── imgImportantNoSpacerAlt.html │ ├── imgServerSideMapNotUsed │ │ ├── assets │ │ │ └── image.gif │ │ └── imgServerSideMapNotUsed-nomatch.html │ ├── objectMustContainText │ │ └── assets │ │ │ └── clock.png │ ├── documentHasTitleElement │ │ ├── documentHasTitleElement-nomatch.html │ │ ├── documentHasTitleElement-pass.html │ │ └── documentHasTitleElement-fail.html │ ├── documentTitleDescribesDocument │ │ ├── documentTitleDescribesDocument-nomatch.html │ │ └── documentTitleDescribesDocument.html │ ├── inputImageAltIsNotFileName │ │ └── assets │ │ │ ├── name.jpg │ │ │ └── input.jpg │ ├── inputImageAltNotRedundant │ │ ├── assets │ │ │ └── name.jpg │ │ └── inputImageAltNotRedundant.html │ ├── colorBackgroundImageContrast │ │ └── assets │ │ │ ├── fish.gif │ │ │ ├── kids.jpg │ │ │ └── quail.png │ ├── inputImageAltIsNotPlaceholder │ │ └── assets │ │ │ └── name.jpg │ ├── areaAltIdentifiesDestination │ │ ├── assets │ │ │ └── library.gif │ │ ├── areaAltIdentifiesDestination.html │ │ └── areaAltIdentifiesDestination-nomatch.html │ ├── tableLayoutMakesSenseLinearized │ │ └── assets │ │ │ └── logo.png │ ├── frameIsNotUsed │ │ ├── assets │ │ │ └── frame-a.html │ │ ├── frameIsNotUsed-nomatch.html │ │ └── frameIsNotUsed.html │ ├── imgMapAreasHaveDuplicateLink │ │ └── assets │ │ │ └── navigation.png │ ├── headerH1Format │ │ ├── headerH1Format-nomatch.html │ │ └── headerH1Format.html │ ├── aAdjacentWithSameResourceShouldBeCombined │ │ └── assets │ │ │ ├── go.gif │ │ │ └── bullet.gif │ ├── aLinkTextDoesNotBeginWithRedundantWord │ │ └── assets │ │ │ └── star.gif │ ├── colorElementBehindBackgroundImageContrast │ │ └── assets │ │ │ ├── fish.gif │ │ │ ├── kids.jpg │ │ │ └── quail.png │ ├── imageMapServerSide │ │ ├── imageMapServerSide-nomatch.html │ │ └── imageMapServerSide.html │ ├── formHasSubmitButton │ │ └── formHasSubmitButton-nomatch.html │ ├── documentTitleNotEmpty │ │ ├── documentTitleNotEmpty-fail.html │ │ └── documentTitleNotEmpty.html │ ├── formHasGoodErrorMessage │ │ └── formHasGoodErrorMessage-nomatch.html │ ├── headerH2Format │ │ ├── headerH2Format-nomatch.html │ │ └── headerH2Format.html │ ├── headerH3Format │ │ ├── headerH3Format-nomatch.html │ │ └── headerH3Format.html │ ├── headerH4Format │ │ ├── headerH4Format-nomatch.html │ │ └── headerH4Format.html │ ├── headerH5Format │ │ ├── headerH5Format-nomatch.html │ │ └── headerH5Format.html │ ├── headerH6Format │ │ ├── headerH6Format-nomatch.html │ │ └── headerH6Format.html │ ├── tableIsGrouped │ │ └── tableIsGrouped-nomatch.html │ ├── documentReadingDirection │ │ ├── documentReadingDirection-nomatch.html │ │ └── documentReadingDirection.html │ ├── fieldsetHasLabel │ │ └── fieldsetHasLabel-nomatch.html │ ├── formErrorMessageHelpsUser │ │ └── formErrorMessageHelpsUser-nomatch.html │ ├── framesHaveATitle │ │ └── framesHaveATitle-nomatch.html │ ├── iframeMustNotHaveLongdesc │ │ ├── iframeMustNotHaveLongdesc-nomatch.html │ │ └── iframeMustNotHaveLongdesc.html │ ├── inputImageHasAlt │ │ └── inputImageHasAlt-nomatch.html │ ├── marqueeIsNotUsed │ │ ├── marqueeIsNotUsed-nomatch.html │ │ └── marqueeIsNotUsed.html │ ├── svgContainsTitle │ │ └── svgContainsTitle-nomatch.html │ ├── tableUsesCaption │ │ └── tableUsesCaption-nomatch.html │ ├── framesetIsNotUsed │ │ └── framesetIsNotUsed-nomatch.html │ ├── imgAltIsSameInText │ │ ├── imgAltIsSameInText-nomatch.html │ │ └── imgAltIsSameInText.html │ ├── legendTextNotEmpty │ │ └── legendTextNotEmpty-nomatch.html │ ├── frameTitlesNotEmpty │ │ └── frameTitlesNotEmpty-nomatch.html │ ├── objectMustHaveEmbed │ │ └── objectMustHaveEmbed-nomatch.html │ ├── objectMustHaveTitle │ │ ├── objectMustHaveTitle-nomatch.html │ │ └── objectMustHaveTitle.html │ ├── scriptsDoNotFlicker │ │ ├── scriptsDoNotFlicker-nomatch.html │ │ └── scriptsDoNotFlicker.html │ ├── documentLangNotIdentified │ │ ├── documentLangNotIdentified-fail.html │ │ └── documentLangNotIdentified.html │ ├── documentMetaNotUsedWithTimeout │ │ ├── documentMetaNotUsedWithTimeout-nomatch.html │ │ └── documentMetaNotUsedWithTimeout.html │ ├── frameSrcIsAccessible │ │ └── frameSrcIsAccessible-nomatch.html │ ├── objectDoesNotFlicker │ │ ├── objectDoesNotFlicker-nomatch.html │ │ └── objectDoesNotFlicker.html │ ├── tableDataShouldHaveTh │ │ └── tableDataShouldHaveTh-nomatch.html │ ├── videoProvidesCaptions │ │ └── videoProvidesCaptions-nomatch.html │ ├── liDontUseImageForBullet │ │ ├── liDontUseImageForBullet-nomatch.html │ │ └── liDontUseImageForBullet.html │ ├── tableComplexHasSummary │ │ └── tableComplexHasSummary-nomatch.html │ ├── documentTitleIsNotPlaceholder │ │ ├── documentTitleIsNotPlaceholder-fail.html │ │ ├── documentTitleIsNotPlaceholder-fail-2.html │ │ ├── documentTitleIsNotPlaceholder-fail-3.html │ │ └── documentTitleIsNotPlaceholder.html │ ├── labelDoesNotContainInput │ │ ├── labelDoesNotContainInput-nomatch.html │ │ └── labelDoesNotContainInput.html │ ├── objectUIMustBeAccessible │ │ ├── objectUIMustBeAccessible-nomatch.html │ │ └── objectUIMustBeAccessible.html │ ├── embedMustHaveAltAttribute │ │ ├── embedMustHaveAltAttribute-nomatch.html │ │ └── embedMustHaveAltAttribute.html │ ├── objectDoesNotUseColorAlone │ │ ├── objectDoesNotUseColorAlone-nomatch.html │ │ └── objectDoesNotUseColorAlone.html │ ├── objectWithClassIDHasNoText │ │ ├── objectWithClassIDHasNoText-nomatch.html │ │ └── objectWithClassIDHasNoText.html │ ├── scriptsDoNotUseColorAlone │ │ ├── scriptsDoNotUseColorAlone-nomatch.html │ │ └── scriptsDoNotUseColorAlone.html │ ├── documentAutoRedirectNotUsed │ │ ├── documentAutoRedirectNotUsed-nomatch.html │ │ ├── documentAutoRedirectNotUsed-pass.html │ │ └── documentAutoRedirectNotUsed-fail.html │ ├── framesAreUsedToGroupContent │ │ ├── framesAreUsedToGroupContent-nomatch.html │ │ └── framesAreUsedToGroupContent-fail.html │ ├── imgNotReferredToByColorAlone │ │ └── imgNotReferredToByColorAlone-nomatch.html │ ├── linkUsedForAlternateContent │ │ ├── linkUsedForAlternateContent-nomatch.html │ │ ├── linkUsedForAlternateContent-fail.html │ │ └── linkUsedForAlternateContent-pass.html │ ├── linkUsedToDescribeNavigation │ │ └── linkUsedToDescribeNavigation-nomatch.html │ ├── noembedHasEquivalentContent │ │ ├── noembedHasEquivalentContent-nomatch.html │ │ └── noembedHasEquivalentContent.html │ ├── objectInterfaceIsAccessible │ │ ├── objectInterfaceIsAccessible-nomatch.html │ │ └── objectInterfaceIsAccessible.html │ ├── scriptInBodyMustHaveNoscript │ │ ├── scriptInBodyMustHaveNoscript-nomatch.html │ │ ├── scriptInBodyMustHaveNoscript-fail.html │ │ └── scriptInBodyMustHaveNoscript-pass.html │ ├── tableCaptionIdentifiesTable │ │ └── tableCaptionIdentifiesTable-nomatch.html │ ├── tableWithBothHeadersUseScope │ │ └── tableWithBothHeadersUseScope-nomatch.html │ ├── areaHasAltValue │ │ ├── areaHasAltValue-nomatch.html │ │ └── areaHasAltValue.html │ ├── appletsDoNotFlicker │ │ ├── appletsDoNotFlicker-nomatch.html │ │ └── appletsDoNotFlicker.html │ ├── doctypeProvided │ │ ├── doctypeProvided-fail.html │ │ └── doctypeProvided.html │ ├── documentTitleIsShort │ │ ├── documentTitleIsShort.html │ │ └── documentTitleIsShort-fail.html │ ├── framesetMustHaveNoFramesSection │ │ └── framesetMustHaveNoFramesSection-nomatch.html │ ├── imgAltEmptyForDecorativeImages │ │ └── imgAltEmptyForDecorativeImages-nomatch.html │ ├── imgAltIdentifiesLinkDestination │ │ ├── imgAltIdentifiesLinkDestination-nomatch.html │ │ └── imgAltIdentifiesLinkDestination.html │ ├── objectContentUsableWhenDisabled │ │ ├── objectContentUsableWhenDisabled-nomatch.html │ │ └── objectContentUsableWhenDisabled.html │ ├── objectShouldHaveLongDescription │ │ ├── objectShouldHaveLongDescription-nomatch.html │ │ └── objectShouldHaveLongDescription.html │ ├── frameRelationshipsMustBeDescribed │ │ └── frameRelationshipsMustBeDescribed-nomatch.html │ ├── areaLinksToSoundFile │ │ └── areaLinksToSoundFile-nomatch.html │ ├── objectTextUpdatesWhenObjectChanges │ │ ├── objectTextUpdatesWhenObjectChanges-nomatch.html │ │ └── objectTextUpdatesWhenObjectChanges.html │ ├── radioMarkedWithFieldgroupAndLegend │ │ └── radioMarkedWithFieldgroupAndLegend-nomatch.html │ ├── appletUIMustBeAccessible │ │ ├── appletUIMustBeAccessible-nomatch.html │ │ └── appletUIMustBeAccessible.html │ ├── appletsDonotUseColorAlone │ │ ├── appletsDonotUseColorAlone-nomatch.html │ │ └── appletsDonotUseColorAlone.html │ ├── noframesSectionMustHaveTextEquivalent │ │ └── noframesSectionMustHaveTextEquivalent-nomatch.html │ ├── aMultimediaTextAlternative │ │ └── aMultimediaTextAlternative-inapplicable.html │ ├── blinkIsNotUsed │ │ ├── blinkIsNotUsed-nomatch.html │ │ └── blinkIsNotUsed.html │ ├── objectLinkToMultimediaHasTextTranscript │ │ ├── objectLinkToMultimediaHasTextTranscript-nomatch.html │ │ └── objectLinkToMultimediaHasTextTranscript.html │ ├── objectProvidesMechanismToReturnToParent │ │ └── objectProvidesMechanismToReturnToParent-nomatch.html │ ├── fontIsNotUsed │ │ ├── fontIsNotUsed-nomatch.html │ │ └── fontIsNotUsed.html │ ├── appletTextEquivalentsGetUpdated │ │ ├── appletTextEquivalentsGetUpdated-nomatch.html │ │ └── appletTextEquivalentsGetUpdated.html │ ├── scriptContentAccessibleWithScriptsTurnedOff │ │ ├── scriptContentAccessibleWithScriptsTurnedOff-nomatch.html │ │ └── scriptContentAccessibleWithScriptsTurnedOff.html │ ├── aTitleDescribesDestination │ │ ├── aTitleDescribesDestination-nomatch.html │ │ └── aTitleDescribesDestination.html │ ├── aLinksToSoundFilesNeedTranscripts │ │ └── aLinksToSoundFilesNeedTranscripts-inapplicable.html │ ├── blockquoteNotUsedForIndentation │ │ ├── blockquoteNotUsedForIndentation-nomatch.html │ │ └── blockquoteNotUsedForIndentation.html │ ├── cssDocumentMakesSenseStyleTurnedOff │ │ └── cssDocumentMakesSenseStyleTurnedOff.html │ ├── formButtonsHaveValue │ │ └── formButtonsHaveValue-nomatch.html │ ├── aLinksToMultiMediaRequireTranscript │ │ └── aLinksToMultiMediaRequireTranscript-inapplicable.html │ ├── appletProvidesMechanismToReturnToParent │ │ └── appletProvidesMechanismToReturnToParent-nomatch.html │ ├── basefontIsNotUsed │ │ ├── basefontIsNotUsed-nomatch.html │ │ └── basefontIsNotUsed.html │ ├── documentContentReadableWithoutStylesheets │ │ └── documentContentReadableWithoutStylesheets.html │ ├── scriptOnmouseoverHasOnfocus │ │ └── scriptOnmouseoverHasOnfocus.html │ ├── aMustNotHaveJavascriptHref │ │ ├── aMustNotHaveJavascriptHref.html │ │ └── aMustNotHaveJavascriptHref-nomatch.html │ ├── siteMap │ │ └── siteMap.html │ ├── iIsNotUsed │ │ ├── iIsNotUsed-nomatch.html │ │ └── iIsNotUsed.html │ ├── boldIsNotUsed │ │ ├── boldIsNotUsed-nomatch.html │ │ └── boldIsNotUsed.html │ ├── KINGStrongList │ │ └── KINGStrongList.html │ ├── documentLangIsISO639Standard │ │ ├── documentLangIsISO639Standard-inapplicable.html │ │ ├── documentLangIsISO639Standard.html │ │ └── documentLangIsISO639Standard-fail.html │ ├── inputElementsDontHaveAlt │ │ ├── inputElementsDontHaveAlt-nomatch.html │ │ └── inputElementsDontHaveAlt.html │ ├── KINGUseCurrencyAsSymbol │ │ └── KINGUseCurrencyAsSymbol.html │ ├── aMustHaveTitle │ │ └── aMustHaveTitle.html │ ├── KINGUsePercentageWithSymbol │ │ └── KINGUsePercentageWithSymbol.html │ ├── documentAcronymsHaveElement │ │ └── documentAcronymsHaveElement.html │ ├── scriptOnmousemove │ │ └── scriptOnmousemove.html │ ├── linkDoesNotChangeContextOnFocus │ │ └── linkDoesNotChangeContextOnFocus.html │ ├── scriptOnmouseupHasOnkeyup │ │ └── scriptOnmouseupHasOnkeyup.html │ ├── listNotUsedForFormatting │ │ └── listNotUsedForFormatting.html │ ├── scriptOndblclickRequiresOnKeypress │ │ └── scriptOndblclickRequiresOnKeypress.html │ ├── preShouldNotBeUsedForTabularLayout │ │ └── preShouldNotBeUsedForTabularLayout.html │ ├── scriptOnmousedownRequiresOnKeypress │ │ └── scriptOnmousedownRequiresOnKeypress.html │ ├── whiteSpaceInWord │ │ └── whiteSpaceInWord.html │ ├── frameTitlesNotPlaceholder │ │ └── frameTitlesNotPlaceholder.html │ ├── inputTextValueNotEmpty │ │ └── inputTextValueNotEmpty.html │ ├── textIsNotSmall │ │ └── textIsNotSmall.html │ ├── headerH1 │ │ └── headerH1.html │ ├── headerH2 │ │ └── headerH2.html │ ├── headerH3 │ │ └── headerH3.html │ ├── scriptOnFocusChangeBackgroundOrBorder │ │ └── scriptOnFocusChangeBackgroundOrBorder.html │ ├── aLinksAreSeparatedByPrintableCharacters │ │ └── aLinksAreSeparatedByPrintableCharacters.html │ ├── blockquoteUseForQuotations │ │ └── blockquoteUseForQuotations.html │ ├── headerH4 │ │ └── headerH4.html │ ├── skipToContentLinkProvided │ │ ├── skipToContentLinkProvided.html │ │ ├── skipToContentLinkProvided-fail.html │ │ ├── skipToContentLinkProvided-pass-2.html │ │ └── skipToContentLinkProvided-fail-2.html │ ├── documentAbbrIsUsed │ │ └── documentAbbrIsUsed.html │ ├── scriptOnmouseoutHasOnmouseblur │ │ └── scriptOnmouseoutHasOnmouseblur.html │ ├── whiteSpaceNotUsedForFormatting │ │ └── whitespaceNotUsedForFormatting.html │ └── aLinksNotSeparatedBySymbols │ │ └── aLinksNotSeparatedBySymbols.html │ └── templates │ ├── htmlTemplate.html │ ├── assessmentHtmlTemplate.html │ └── componentTemplate.js ├── examples ├── editors │ └── plugins │ │ ├── aloha │ │ └── quail │ │ │ └── package.json │ │ ├── tinymce │ │ └── quail │ │ │ ├── langs │ │ │ └── en.js │ │ │ ├── img │ │ │ └── quail.png │ │ │ ├── editor_plugin.js │ │ │ └── css │ │ │ └── content.css │ │ └── ckeditor │ │ └── quail │ │ └── img │ │ └── quail.png ├── php │ ├── data │ │ ├── stats.json │ │ └── guideline.json │ ├── stats.php │ └── README.md └── common │ ├── kogepan.png │ └── Untitled copy.png ├── .babelrc ├── docs └── tests │ ├── tableIsGrouped.rst │ ├── scriptOnmouseupHasOnkeyup.rst │ ├── scriptOnmouseoverHasOnfocus.rst │ ├── scriptOnmouseoutHasOnmouseblur.rst │ ├── imgWithMapHasUseMap.rst │ ├── scriptOnclickRequiresOnKeypress.rst │ ├── scriptOnmousedownRequiresOnKeypress.rst │ ├── svgContainsTitle.rst │ ├── frameIsNotUsed.rst │ ├── objectDoesNotFlicker.rst │ ├── skipToContentLinkProvided.rst │ ├── tableComplexHasSummary.rst │ ├── videoProvidesCaptions.rst │ ├── imgServerSideMapNotUsed.rst │ ├── scriptOnmousemove.rst │ ├── frameTitlesNotEmpty.rst │ ├── tabIndexFollowsLogicalOrder.rst │ ├── tabularDataIsInTable.rst │ ├── framesetIsNotUsed.rst │ ├── imgAltIsDifferent.rst │ ├── imgAltIsSameInText.rst │ ├── inputElementsDontHaveAlt.rst │ ├── aLinkTextDoesNotBeginWithRedundantWord.rst │ ├── documentStrictDocType.rst │ ├── frameTitlesNotPlaceholder.rst │ ├── basefontIsNotUsed.rst │ ├── fontIsNotUsed.rst │ ├── scriptOndblclickRequiresOnKeypress.rst │ ├── scriptsDoNotFlicker.rst │ ├── bodyMustNotHaveBackground.rst │ ├── addressForAuthor.rst │ ├── imgNeedsLongDescWDlink.rst │ ├── textIsNotSmall.rst │ ├── areaAltIdentifiesDestination.rst │ ├── tableLayoutHasNoSummary.rst │ ├── tableUseColGroup.rst │ ├── cssTextHasContrast.rst │ ├── documentAllColorsAreSet.rst │ ├── inputImageAltIsShort.rst │ ├── tableCaptionIdentifiesTable.rst │ ├── videosEmbeddedOrLinkedNeedCaptions.rst │ ├── aMustNotHaveJavascriptHref.rst │ ├── aSuspiciousLinkText.rst │ ├── inputImageAltIsNotPlaceholder.rst │ ├── addressForAuthorMustBeValid.rst │ ├── headersUseToMarkSections.rst │ ├── iframeMustNotHaveLongdesc.rst │ ├── inputImageAltIsNotFileName.rst │ ├── radioMarkedWithFieldgroupAndLegend.rst │ ├── fileHasLabel.rst │ ├── imgAltEmptyForDecorativeImages.rst │ ├── inputTextHasLabel.rst │ ├── frameSrcIsAccessible.rst │ ├── preShouldNotBeUsedForTabularLayout.rst │ ├── radioHasLabel.rst │ ├── appletsDoNotFlicker.rst │ ├── siteMap.rst │ ├── textareaHasAssociatedLabel.rst │ ├── checkboxHasLabel.rst │ ├── selectHasAssociatedLabel.rst │ ├── imageMapServerSide.rst │ ├── imgNotReferredToByColorAlone.rst │ ├── scriptsDoNotUseColorAlone.rst │ ├── documentReadingDirection.rst │ ├── imgImportantNoSpacerAlt.rst │ ├── noframesSectionMustHaveTextEquivalent.rst │ ├── passwordHasLabel.rst │ ├── documentIsWrittenClearly.rst │ ├── labelsAreAssignedToAnInput.rst │ ├── tableLayoutMakesSenseLinearized.rst │ ├── linkUsedToDescribeNavigation.rst │ ├── headersHaveText.rst │ ├── tableWithBothHeadersUseScope.rst │ ├── appletProvidesMechanismToReturnToParent.rst │ ├── objectProvidesMechanismToReturnToParent.rst │ ├── areaHasAltValue.rst │ ├── bodyColorContrast.rst │ ├── embedProvidesMechanismToReturnToParent.rst │ ├── objectUIMustBeAccessible.rst │ ├── appletUIMustBeAccessible.rst │ ├── objectInterfaceIsAccessible.rst │ ├── scriptContentAccessibleWithScriptsTurnedOff.rst │ ├── areaDontOpenNewWindow.rst │ ├── ariaOrphanedContent.rst │ ├── formHasGoodErrorMessage.rst │ ├── bodyLinkColorContrast.rst │ ├── objectWithClassIDHasNoText.rst │ ├── selectJumpMenu.rst │ ├── areaAltRefersToText.rst │ ├── cssDocumentMakesSenseStyleTurnedOff.rst │ ├── documentContentReadableWithoutStylesheets.rst │ ├── bodyActiveLinkColorContrast.rst │ ├── documentAutoRedirectNotUsed.rst │ ├── framesetMustHaveNoFramesSection.rst │ ├── tableUsesCaption.rst │ ├── bodyVisitedLinkColorContrast.rst │ ├── areaLinksToSoundFile.rst │ ├── tableSummaryDoesNotDuplicateCaption.rst │ ├── frameRelationshipsMustBeDescribed.rst │ ├── imgAltIsTooLong.rst │ ├── objectDoesNotUseColorAlone.rst │ ├── appletsDoneUseColorAlone.rst │ ├── objectTextUpdatesWhenObjectChanges.rst │ ├── documentColorWaiAlgorithim.rst │ ├── blinkIsNotUsed.rst │ ├── imgMapAreasHaveDuplicateLink.rst │ ├── documentColorWaiLinkAlgorithim.rst │ ├── formDeleteIsReversable.rst │ ├── imgHasAlt.rst │ ├── tableSummaryIsEmpty.rst │ ├── aMustHaveTitle.rst │ ├── headerH1.rst │ ├── documentColorWaiActiveLinkAlgorithim.rst │ ├── documentColorWaiVisitedLinkAlgorithim.rst │ ├── headerH2.rst │ ├── documentLangNotIdentified.rst │ ├── headerH3.rst │ ├── imgShouldNotHaveTitle.rst │ ├── formErrorMessageHelpsUser.rst │ ├── headerH4.rst │ ├── objectMustHaveTitle.rst │ ├── documentHasTitleElement.rst │ ├── embedMustHaveAltAttribute.rst │ ├── framesHaveATitle.rst │ ├── headerH5.rst │ ├── linkUsedForAlternateContent.rst │ ├── objectMustHaveEmbed.rst │ ├── aLinksDontOpenNewWindow.rst │ ├── documentTitleNotEmpty.rst │ ├── embedMustNotHaveEmptyAlt.rst │ ├── iIsNotUsed.rst │ ├── objectMustHaveValidTitle.rst │ ├── documentIDsMustBeUnique.rst │ ├── boldIsNotUsed.rst │ ├── tableLayoutHasNoCaption.rst │ ├── documentAbbrIsUsed.rst │ ├── documentLangIsISO639Standard.rst │ ├── imgNonDecorativeHasAlt.rst │ ├── inputImageHasAlt.rst │ ├── marqueeIsNotUsed.rst │ ├── objectShouldHaveLongDescription.rst │ ├── doctypeProvided.rst │ ├── documentAcronymsHaveElement.rst │ ├── aTitleDescribesDestination.rst │ ├── documentTitleIsNotPlaceholder.rst │ ├── scriptInBodyMustHaveNoscript.rst │ └── inputImageAltNotRedundant.rst ├── bin └── quail.js ├── .editorconfig ├── .quailrc ├── scripts ├── regexes.txt └── upperCaseIt.py ├── .gitignore └── src └── assessments └── TagsAreNestedCorrectly.js /logs/.keep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | 0.12 2 | -------------------------------------------------------------------------------- /test/config/defaults.js: -------------------------------------------------------------------------------- 1 | module.exports = {}; 2 | -------------------------------------------------------------------------------- /examples/editors/plugins/aloha/quail/package.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /examples/php/data/stats.json: -------------------------------------------------------------------------------- 1 | {"severe":"0","moderate":"0","suggestion":"0"} -------------------------------------------------------------------------------- /examples/php/data/guideline.json: -------------------------------------------------------------------------------- 1 | ["imgAltIsDifferent","imgAltIsTooLong","imgHasAlt"] -------------------------------------------------------------------------------- /examples/common/kogepan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quailjs/quail/HEAD/examples/common/kogepan.png -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/embedHasAssociatedNoEmbed/assets/history_of_rome.mov: -------------------------------------------------------------------------------- 1 | empty text file 2 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/embedHasAssociatedNoEmbed/assets/transcript_history_rome.htm: -------------------------------------------------------------------------------- 1 | empty text file 2 | -------------------------------------------------------------------------------- /examples/common/Untitled copy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quailjs/quail/HEAD/examples/common/Untitled copy.png -------------------------------------------------------------------------------- /examples/editors/plugins/tinymce/quail/langs/en.js: -------------------------------------------------------------------------------- 1 | tinyMCE.addI18n('en.quail',{ 2 | desc : 'Accessibility check' 3 | }); 4 | -------------------------------------------------------------------------------- /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | "es2015" 4 | ], 5 | "plugins": [ 6 | "transform-object-rest-spread" 7 | ] 8 | } 9 | -------------------------------------------------------------------------------- /examples/editors/plugins/tinymce/quail/img/quail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quailjs/quail/HEAD/examples/editors/plugins/tinymce/quail/img/quail.png -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/imgHasAlt/assets/rex.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quailjs/quail/HEAD/test/assessmentSpecs/specs/imgHasAlt/assets/rex.jpg -------------------------------------------------------------------------------- /examples/editors/plugins/ckeditor/quail/img/quail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quailjs/quail/HEAD/examples/editors/plugins/ckeditor/quail/img/quail.png -------------------------------------------------------------------------------- /examples/editors/plugins/tinymce/quail/editor_plugin.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quailjs/quail/HEAD/examples/editors/plugins/tinymce/quail/editor_plugin.js -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/headersHaveText/assets/rex.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quailjs/quail/HEAD/test/assessmentSpecs/specs/headersHaveText/assets/rex.jpg -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/imgAltIsTooLong/assets/rex.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quailjs/quail/HEAD/test/assessmentSpecs/specs/imgAltIsTooLong/assets/rex.jpg -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/aMustContainText/assets/rex.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quailjs/quail/HEAD/test/assessmentSpecs/specs/aMustContainText/assets/rex.jpg -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/imgAltIsDifferent/assets/rex.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quailjs/quail/HEAD/test/assessmentSpecs/specs/imgAltIsDifferent/assets/rex.jpg -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/newWindowIsOpened/assets/go.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quailjs/quail/HEAD/test/assessmentSpecs/specs/newWindowIsOpened/assets/go.gif -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/aImgAltNotRepetitive/assets/rex.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quailjs/quail/HEAD/test/assessmentSpecs/specs/aImgAltNotRepetitive/assets/rex.jpg -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/colorFontContrast/assets/fish.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quailjs/quail/HEAD/test/assessmentSpecs/specs/colorFontContrast/assets/fish.gif -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/colorFontContrast/assets/kids.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quailjs/quail/HEAD/test/assessmentSpecs/specs/colorFontContrast/assets/kids.jpg -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/colorFontContrast/assets/quail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quailjs/quail/HEAD/test/assessmentSpecs/specs/colorFontContrast/assets/quail.png -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/imgAltNotPlaceHolder/assets/rex.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quailjs/quail/HEAD/test/assessmentSpecs/specs/imgAltNotPlaceHolder/assets/rex.jpg -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/labelMustNotBeEmpty/assets/name.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quailjs/quail/HEAD/test/assessmentSpecs/specs/labelMustNotBeEmpty/assets/name.jpg -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/documentStrictDocType/assets/rex.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quailjs/quail/HEAD/test/assessmentSpecs/specs/documentStrictDocType/assets/rex.jpg -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/imgAltNotEmptyInAnchor/assets/rex.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quailjs/quail/HEAD/test/assessmentSpecs/specs/imgAltNotEmptyInAnchor/assets/rex.jpg -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/imgNonDecorativeHasAlt/assets/rex.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quailjs/quail/HEAD/test/assessmentSpecs/specs/imgNonDecorativeHasAlt/assets/rex.jpg -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/imgShouldNotHaveTitle/assets/rex.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quailjs/quail/HEAD/test/assessmentSpecs/specs/imgShouldNotHaveTitle/assets/rex.jpg -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/imgWithMapHasUseMap/assets/image.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quailjs/quail/HEAD/test/assessmentSpecs/specs/imgWithMapHasUseMap/assets/image.gif -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/inputImageAltIsShort/assets/input.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quailjs/quail/HEAD/test/assessmentSpecs/specs/inputImageAltIsShort/assets/input.jpg -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/inputImageAltIsShort/assets/name.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quailjs/quail/HEAD/test/assessmentSpecs/specs/inputImageAltIsShort/assets/name.jpg -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/animatedGifMayBePresent/assets/fish.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quailjs/quail/HEAD/test/assessmentSpecs/specs/animatedGifMayBePresent/assets/fish.gif -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/animatedGifMayBePresent/assets/kids.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quailjs/quail/HEAD/test/assessmentSpecs/specs/animatedGifMayBePresent/assets/kids.jpg -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/areaAltRefersToText/assets/welcome.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quailjs/quail/HEAD/test/assessmentSpecs/specs/areaAltRefersToText/assets/welcome.gif -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/imgImportantNoSpacerAlt/assets/rex.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quailjs/quail/HEAD/test/assessmentSpecs/specs/imgImportantNoSpacerAlt/assets/rex.jpg -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/imgServerSideMapNotUsed/assets/image.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quailjs/quail/HEAD/test/assessmentSpecs/specs/imgServerSideMapNotUsed/assets/image.gif -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/objectMustContainText/assets/clock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quailjs/quail/HEAD/test/assessmentSpecs/specs/objectMustContainText/assets/clock.png -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/documentHasTitleElement/documentHasTitleElement-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/documentTitleDescribesDocument/documentTitleDescribesDocument-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/imgImportantNoSpacerAlt/assets/spacer.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quailjs/quail/HEAD/test/assessmentSpecs/specs/imgImportantNoSpacerAlt/assets/spacer.gif -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/inputImageAltIsNotFileName/assets/name.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quailjs/quail/HEAD/test/assessmentSpecs/specs/inputImageAltIsNotFileName/assets/name.jpg -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/inputImageAltNotRedundant/assets/name.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quailjs/quail/HEAD/test/assessmentSpecs/specs/inputImageAltNotRedundant/assets/name.jpg -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/animatedGifMayBePresent/assets/fishswim.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quailjs/quail/HEAD/test/assessmentSpecs/specs/animatedGifMayBePresent/assets/fishswim.gif -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/colorBackgroundImageContrast/assets/fish.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quailjs/quail/HEAD/test/assessmentSpecs/specs/colorBackgroundImageContrast/assets/fish.gif -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/colorBackgroundImageContrast/assets/kids.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quailjs/quail/HEAD/test/assessmentSpecs/specs/colorBackgroundImageContrast/assets/kids.jpg -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/colorBackgroundImageContrast/assets/quail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quailjs/quail/HEAD/test/assessmentSpecs/specs/colorBackgroundImageContrast/assets/quail.png -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/imgImportantNoSpacerAlt/assets/big-fail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quailjs/quail/HEAD/test/assessmentSpecs/specs/imgImportantNoSpacerAlt/assets/big-fail.png -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/inputImageAltIsNotFileName/assets/input.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quailjs/quail/HEAD/test/assessmentSpecs/specs/inputImageAltIsNotFileName/assets/input.jpg -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/inputImageAltIsNotPlaceholder/assets/name.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quailjs/quail/HEAD/test/assessmentSpecs/specs/inputImageAltIsNotPlaceholder/assets/name.jpg -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/areaAltIdentifiesDestination/assets/library.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quailjs/quail/HEAD/test/assessmentSpecs/specs/areaAltIdentifiesDestination/assets/library.gif -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/tableLayoutMakesSenseLinearized/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quailjs/quail/HEAD/test/assessmentSpecs/specs/tableLayoutMakesSenseLinearized/assets/logo.png -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/frameIsNotUsed/assets/frame-a.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | frameIsNotUsed | frame A 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/imgMapAreasHaveDuplicateLink/assets/navigation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quailjs/quail/HEAD/test/assessmentSpecs/specs/imgMapAreasHaveDuplicateLink/assets/navigation.png -------------------------------------------------------------------------------- /test/assessmentSpecs/templates/htmlTemplate.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %name% 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/frameIsNotUsed/frameIsNotUsed-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | frameIsNotUsed 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/headerH1Format/headerH1Format-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | headerH1Format 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/aAdjacentWithSameResourceShouldBeCombined/assets/go.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quailjs/quail/HEAD/test/assessmentSpecs/specs/aAdjacentWithSameResourceShouldBeCombined/assets/go.gif -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/aLinkTextDoesNotBeginWithRedundantWord/assets/star.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quailjs/quail/HEAD/test/assessmentSpecs/specs/aLinkTextDoesNotBeginWithRedundantWord/assets/star.gif -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/colorElementBehindBackgroundImageContrast/assets/fish.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quailjs/quail/HEAD/test/assessmentSpecs/specs/colorElementBehindBackgroundImageContrast/assets/fish.gif -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/colorElementBehindBackgroundImageContrast/assets/kids.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quailjs/quail/HEAD/test/assessmentSpecs/specs/colorElementBehindBackgroundImageContrast/assets/kids.jpg -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/imageMapServerSide/imageMapServerSide-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | imageMapServerSide 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/imgHasAlt/imgHasAlt-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | imgHasAlt 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/aAdjacentWithSameResourceShouldBeCombined/assets/bullet.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quailjs/quail/HEAD/test/assessmentSpecs/specs/aAdjacentWithSameResourceShouldBeCombined/assets/bullet.gif -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/colorElementBehindBackgroundImageContrast/assets/quail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quailjs/quail/HEAD/test/assessmentSpecs/specs/colorElementBehindBackgroundImageContrast/assets/quail.png -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/formHasSubmitButton/formHasSubmitButton-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | formHasSubmitButton 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/documentTitleNotEmpty/documentTitleNotEmpty-fail.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/formHasGoodErrorMessage/formHasGoodErrorMessage-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | formHasGoodErrorMessage 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/headerH2Format/headerH2Format-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | headerH2Format 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/headerH3Format/headerH3Format-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | headerH3Format 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/headerH4Format/headerH4Format-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | headerH4Format 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/headerH5Format/headerH5Format-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | headerH5Format 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/headerH6Format/headerH6Format-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | headerH6Format 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/tableIsGrouped/tableIsGrouped-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | tableIsGrouped 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/tests/tableIsGrouped.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | Mark up the areas of tables using "thead 3 | =============================== 4 | 5 | Severity code: 0 6 | 7 | .. php:class:: tableIsGrouped 8 | 9 | tbody 10 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/documentReadingDirection/documentReadingDirection-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | documentReadingDirection 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/fieldsetHasLabel/fieldsetHasLabel-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | fieldsetHasLabel 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/formErrorMessageHelpsUser/formErrorMessageHelpsUser-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | formErrorMessageHelpsUser 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/framesHaveATitle/framesHaveATitle-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | framesHaveATitle 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/iframeMustNotHaveLongdesc/iframeMustNotHaveLongdesc-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | iframeMustNotHaveLongdesc 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/inputImageHasAlt/inputImageHasAlt-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | inputImageHasAlt 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/marqueeIsNotUsed/marqueeIsNotUsed-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | marqueeIsNotUsed 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/svgContainsTitle/svgContainsTitle-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | svgContainsTitle 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/tableUsesCaption/tableUsesCaption-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | tableUsesCaption 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /bin/quail.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | console.error("The CLI has been moved into the package `@quailjs/quail-cli`."); 4 | console.log(); 5 | console.log("$ npm install -g @quailjs/quail-cli"); 6 | console.log(); 7 | process.exit(1); 8 | -------------------------------------------------------------------------------- /examples/php/stats.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | framesetIsNotUsed 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/imgAltIsSameInText/imgAltIsSameInText-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | imgAltIsSameInText 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/legendTextNotEmpty/legendTextNotEmpty-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | legendTextNotEmpty 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/documentHasTitleElement/documentHasTitleElement-pass.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | documentHasTitleElement-pass 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/frameTitlesNotEmpty/frameTitlesNotEmpty-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | frameTitlesNotEmpty 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/imgWithMapHasUseMap/imgWithMapHasUseMap-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | imgWithMapHasUseMap 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/objectMustHaveEmbed/objectMustHaveEmbed-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | objectMustHaveEmbed 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/objectMustHaveTitle/objectMustHaveTitle-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | objectMustHaveTitle 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/scriptsDoNotFlicker/scriptsDoNotFlicker-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | scriptsDoNotFlicker 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/documentLangNotIdentified/documentLangNotIdentified-fail.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | documentLangNotIdentified 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/documentLangNotIdentified/documentLangNotIdentified.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | documentLangNotIdentified 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/documentMetaNotUsedWithTimeout/documentMetaNotUsedWithTimeout-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | documentMetaNotUsedWithTimeout 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/documentTitleDescribesDocument/documentTitleDescribesDocument.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | documentTitleDescribesDocument 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/frameSrcIsAccessible/frameSrcIsAccessible-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | frameSrcIsAccessible 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/imgShouldNotHaveTitle/imgShouldNotHaveTitle-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | imgShouldNotHaveTitle 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/objectDoesNotFlicker/objectDoesNotFlicker-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | objectDoesNotFlicker 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/tableDataShouldHaveTh/tableDataShouldHaveTh-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | tableDataShouldHaveTh 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/videoProvidesCaptions/videoProvidesCaptions-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | videoProvidesCaptions 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/imgServerSideMapNotUsed/imgServerSideMapNotUsed-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | imgServerSideMapNotUsed 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/liDontUseImageForBullet/liDontUseImageForBullet-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | liDontUseImageForBullet 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/tableComplexHasSummary/tableComplexHasSummary-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | tableComplexHasSummary 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/documentTitleIsNotPlaceholder/documentTitleIsNotPlaceholder-fail.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | title 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/labelDoesNotContainInput/labelDoesNotContainInput-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | labelDoesNotContainInput 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/objectUIMustBeAccessible/objectUIMustBeAccessible-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | objectUIMustBeAccessible 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/embedMustHaveAltAttribute/embedMustHaveAltAttribute-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | embedMustHaveAltAttribute 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/objectDoesNotUseColorAlone/objectDoesNotUseColorAlone-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | objectDoesNotUseColorAlone 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/objectWithClassIDHasNoText/objectWithClassIDHasNoText-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | objectWithClassIDHasNoText 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/scriptsDoNotUseColorAlone/scriptsDoNotUseColorAlone-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | scriptsDoNotUseColorAlone 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/documentAutoRedirectNotUsed/documentAutoRedirectNotUsed-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | documentAutoRedirectNotUsed 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/framesAreUsedToGroupContent/framesAreUsedToGroupContent-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | framesAreUsedToGroupContent 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/imgNotReferredToByColorAlone/imgNotReferredToByColorAlone-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | imgNotReferredToByColorAlone 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/linkUsedForAlternateContent/linkUsedForAlternateContent-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | linkUsedForAlternateContent 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/linkUsedToDescribeNavigation/linkUsedToDescribeNavigation-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | linkUsedToDescribeNavigation 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/noembedHasEquivalentContent/noembedHasEquivalentContent-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | noembedHasEquivalentContent 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/objectInterfaceIsAccessible/objectInterfaceIsAccessible-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | objectInterfaceIsAccessible 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/scriptInBodyMustHaveNoscript/scriptInBodyMustHaveNoscript-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | scriptInBodyMustHaveNoscript 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/tableCaptionIdentifiesTable/tableCaptionIdentifiesTable-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | tableCaptionIdentifiesTable 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/tableWithBothHeadersUseScope/tableWithBothHeadersUseScope-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | tableWithBothHeadersUseScope 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/areaHasAltValue/areaHasAltValue-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | areaHasAltValue 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/documentTitleIsNotPlaceholder/documentTitleIsNotPlaceholder-fail-2.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | this is the title 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/documentTitleIsNotPlaceholder/documentTitleIsNotPlaceholder-fail-3.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | untitled document 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/documentTitleNotEmpty/documentTitleNotEmpty.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | The title is not empty 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/headerH1Format/headerH1Format.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | headerH1Format 5 | 6 | 7 |

With great tower, falls great gravity.

8 | 9 | 10 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/headerH2Format/headerH2Format.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | headerH2Format 5 | 6 | 7 |

With great tower, falls great gravity.

8 | 9 | 10 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/headerH3Format/headerH3Format.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | headerH3Format 5 | 6 | 7 |

With great tower, falls great gravity.

8 | 9 | 10 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/headerH4Format/headerH4Format.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | headerH4Format 5 | 6 | 7 |

With great tower, falls great gravity.

8 | 9 | 10 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/headerH5Format/headerH5Format.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | headerH5Format 5 | 6 | 7 |
With great tower, falls great gravity.
8 | 9 | 10 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/headerH6Format/headerH6Format.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | headerH6Format 5 | 6 | 7 |
With great tower, falls great gravity.
8 | 9 | 10 | -------------------------------------------------------------------------------- /test/assessmentSpecs/templates/assessmentHtmlTemplate.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {{assessmentName}} 5 | 7 | 8 | 9 |
10 | 11 | 12 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/appletsDoNotFlicker/appletsDoNotFlicker-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | appletsDoNotFlicker 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/areaAltRefersToText/areaAltRefersToText-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | areaAltRefersToText 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/doctypeProvided/doctypeProvided-fail.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | doctypeProvided 4 | 5 | 6 |

Doctype was provided for this page.

7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/documentTitleIsShort/documentTitleIsShort.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Test of documentTitleIsShort 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/framesetMustHaveNoFramesSection/framesetMustHaveNoFramesSection-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | framesetMustHaveNoFramesSection 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/imgAltEmptyForDecorativeImages/imgAltEmptyForDecorativeImages-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | imgAltEmptyForDecorativeImages 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/imgAltIdentifiesLinkDestination/imgAltIdentifiesLinkDestination-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | imgAltIdentifiesLinkDestination 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/objectContentUsableWhenDisabled/objectContentUsableWhenDisabled-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | objectContentUsableWhenDisabled 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/objectShouldHaveLongDescription/objectShouldHaveLongDescription-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | objectShouldHaveLongDescription 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/doctypeProvided/doctypeProvided.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | doctypeProvided 5 | 6 | 7 |

Doctype was provided for this page.

8 | 9 | 10 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/documentTitleIsNotPlaceholder/documentTitleIsNotPlaceholder.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | documentTitleIsNotPlaceholder-pass 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/frameRelationshipsMustBeDescribed/frameRelationshipsMustBeDescribed-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | frameRelationshipsMustBeDescribed 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/areaLinksToSoundFile/areaLinksToSoundFile-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | areaLinksToSoundFile 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/objectTextUpdatesWhenObjectChanges/objectTextUpdatesWhenObjectChanges-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | objectTextUpdatesWhenObjectChanges 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/radioMarkedWithFieldgroupAndLegend/radioMarkedWithFieldgroupAndLegend-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | radioMarkedWithFieldgroupAndLegend 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # This file is for unifying the coding style for different editors and IDEs 2 | # editorconfig.org 3 | 4 | root = true 5 | 6 | [*] 7 | charset = utf-8 8 | trim_trailing_whitespace = true 9 | insert_final_newline = true 10 | indent_style = space 11 | indent_size = 2 12 | -------------------------------------------------------------------------------- /docs/tests/scriptOnmouseupHasOnkeyup.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | If an element has an "onmouseup" attribute 3 | =============================== 4 | 5 | Severity code: 0 6 | 7 | .. php:class:: scriptOnmouseupHasOnkeyup 8 | 9 | it should also have an "onkeyup" attribute 10 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/appletUIMustBeAccessible/appletUIMustBeAccessible-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | appletUIMustBeAccessible 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/documentAutoRedirectNotUsed/documentAutoRedirectNotUsed-pass.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | documentAutoRedirectNotUsed-fail 5 | 6 | 7 |

This page has no auto-redirect.

8 | 9 | 10 | -------------------------------------------------------------------------------- /.quailrc: -------------------------------------------------------------------------------- 1 | { 2 | "assessmentSpecsPath": "test/assessmentSpecs/specs", 3 | "quail": "dist/runInBrowser.js", 4 | "requireModules": [], 5 | "requireAssessmentModules": [ 6 | "config/all_assessments.json" 7 | ], 8 | "requirePaths": [ 9 | "./src/assessments" 10 | ] 11 | } 12 | -------------------------------------------------------------------------------- /docs/tests/scriptOnmouseoverHasOnfocus.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | If an element has an "onmouseover" attribute 3 | =============================== 4 | 5 | Severity code: 0 6 | 7 | .. php:class:: scriptOnmouseoverHasOnfocus 8 | 9 | it should also have an "onfocus" attribute 10 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/appletsDonotUseColorAlone/appletsDonotUseColorAlone-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | appletsDonotUseColorAlone 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/noframesSectionMustHaveTextEquivalent/noframesSectionMustHaveTextEquivalent-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | noframesSectionMustHaveTextEquivalent 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/tests/scriptOnmouseoutHasOnmouseblur.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | If an element has a "onmouseout" attribute 3 | =============================== 4 | 5 | Severity code: 0 6 | 7 | .. php:class:: scriptOnmouseoutHasOnmouseblur 8 | 9 | it should also have an "onblur" attribute 10 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/aMultimediaTextAlternative/aMultimediaTextAlternative-inapplicable.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | aMultimediaTextAlternative 5 | 6 | 7 |
8 | 9 | 10 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/blinkIsNotUsed/blinkIsNotUsed-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | blinkIsNotUsed 5 | 6 | 7 | 8 |
9 |

No blink!

10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/documentHasTitleElement/documentHasTitleElement-fail.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | documentHasTitleElement 5 | And another title 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/objectLinkToMultimediaHasTextTranscript/objectLinkToMultimediaHasTextTranscript-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | objectLinkToMultimediaHasTextTranscript 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/objectProvidesMechanismToReturnToParent/objectProvidesMechanismToReturnToParent-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | objectProvidesMechanismToReturnToParent 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/tests/imgWithMapHasUseMap.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | Any image with an "ismap" attribute have a valid "usemap" attribute 3 | =============================== 4 | 5 | Severity code: 0 6 | 7 | .. php:class:: imgWithMapHasUseMap 8 | 9 | 10 | If an image has an "ismap" attribute 11 | -------------------------------------------------------------------------------- /docs/tests/scriptOnclickRequiresOnKeypress.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | If an element has an "onclick" attribute 3 | =============================== 4 | 5 | Severity code: 0 6 | 7 | .. php:class:: scriptOnclickRequiresOnKeypress 8 | 9 | it should also have an "onkeypress" attribute 10 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/fontIsNotUsed/fontIsNotUsed-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | fontIsNotUsed 5 | 6 | 7 |
8 |

This paragraph has no font tag

9 |
10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/tests/scriptOnmousedownRequiresOnKeypress.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | If an element has a "mousedown" attribute 3 | =============================== 4 | 5 | Severity code: 0 6 | 7 | .. php:class:: scriptOnmousedownRequiresOnKeypress 8 | 9 | it should also have an "onkeydown" attribute 10 | -------------------------------------------------------------------------------- /docs/tests/svgContainsTitle.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | Inline SVG should use Title elements 3 | =============================== 4 | 5 | *Severity code:* Severe error 6 | 7 | .. php:class:: svgContainsTitle 8 | 9 | 10 | Any inline SVG image should have an embedded title element 11 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/appletTextEquivalentsGetUpdated/appletTextEquivalentsGetUpdated-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | appletTextEquivalentsGetUpdated 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/blinkIsNotUsed/blinkIsNotUsed.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | blinkIsNotUsed 5 | 6 | 7 | 8 |
9 | blinks 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/scriptContentAccessibleWithScriptsTurnedOff/scriptContentAccessibleWithScriptsTurnedOff-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | scriptContentAccessibleWithScriptsTurnedOff 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/tests/frameIsNotUsed.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | Frames are not used 3 | =============================== 4 | 5 | *Severity code:* Severe error 6 | 7 | .. php:class:: frameIsNotUsed 8 | 9 | 10 | .. code-block:: html 11 | 12 | Frame elements should not be used. 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/aTitleDescribesDestination/aTitleDescribesDestination-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | aTitleDescribesDestination 5 | 6 | 7 | 8 |
9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /docs/tests/objectDoesNotFlicker.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | Objects do not flicker 3 | =============================== 4 | 5 | *Severity code:* Information only 6 | 7 | .. php:class:: objectDoesNotFlicker 8 | 9 | 10 | The content within an object tag must not flicker. 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/tests/skipToContentLinkProvided.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | A "skip to content" link should exist as one of the first links on the page 3 | =============================== 4 | 5 | Severity code: 0 6 | 7 | .. php:class:: skipToContentLinkProvided 8 | 9 | 10 | A link reading "skip to content 11 | -------------------------------------------------------------------------------- /docs/tests/tableComplexHasSummary.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | Complex tables should have a summary 3 | =============================== 4 | 5 | Severity code: 0 6 | 7 | .. php:class:: tableComplexHasSummary 8 | 9 | 10 | If a table is complex (for example, has some cells with "colspan" attributes 11 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/aLinksToSoundFilesNeedTranscripts/aLinksToSoundFilesNeedTranscripts-inapplicable.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | aLinksToSoundFilesNeedTranscripts 5 | 6 | 7 |
8 | 9 | 10 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/blockquoteNotUsedForIndentation/blockquoteNotUsedForIndentation-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | blockquoteNotUsedForIndentation 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/cssDocumentMakesSenseStyleTurnedOff/cssDocumentMakesSenseStyleTurnedOff.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | cssDocumentMakesSenseStyleTurnedOff 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/fontIsNotUsed/fontIsNotUsed.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | fontIsNotUsed 5 | 6 | 7 |
8 |

This paragraph has a font tag

9 |
10 | 11 | 12 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/formButtonsHaveValue/formButtonsHaveValue-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | formButtonsHaveValue 5 | 6 | 7 |
8 | 9 |
10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/tests/videoProvidesCaptions.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | All video tags must provide captions 3 | =============================== 4 | 5 | *Severity code:* Possible error 6 | 7 | .. php:class:: videoProvidesCaptions 8 | 9 | 10 | All HTML5 video tags must provide captions. 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/aLinksToMultiMediaRequireTranscript/aLinksToMultiMediaRequireTranscript-inapplicable.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | aLinksToMultiMediaRequireTranscript 5 | 6 | 7 |
8 | 9 | 10 | -------------------------------------------------------------------------------- /docs/tests/imgServerSideMapNotUsed.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | Server-side image maps should not be used 3 | =============================== 4 | 5 | *Severity code:* Severe error 6 | 7 | .. php:class:: imgServerSideMapNotUsed 8 | 9 | 10 | Server-side image maps should not be used. 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/tests/scriptOnmousemove.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | Any element with an "onmousemove" attribute shoul have a keyboard-related action as well 3 | =============================== 4 | 5 | Severity code: 0 6 | 7 | .. php:class:: scriptOnmousemove 8 | 9 | 10 | If an element has an "onmousemove" attribute 11 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/appletProvidesMechanismToReturnToParent/appletProvidesMechanismToReturnToParent-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | appletProvidesMechanismToReturnToParent 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/basefontIsNotUsed/basefontIsNotUsed-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | basefontIsNotUsed 5 | 6 | 7 | 8 |
9 |

A paragraph with no basefont.

10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/documentContentReadableWithoutStylesheets/documentContentReadableWithoutStylesheets.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | documentContentReadableWithoutStylesheets 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/frameIsNotUsed/frameIsNotUsed.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | frameIsNotUsed 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/framesAreUsedToGroupContent/framesAreUsedToGroupContent-fail.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | framesAreUsedToGroupContent 5 | 6 | 7 |

There are no frames here

8 | 9 | 10 | -------------------------------------------------------------------------------- /test/assessmentSpecs/templates/componentTemplate.js: -------------------------------------------------------------------------------- 1 | /** 2 | * A wrapper for assessments that call a component to determine 3 | * the test outcome. 4 | */ 5 | quail.%name% = function (quail, test, Case) { 6 | var options = { 7 | %options% 8 | }; 9 | quail.components.%component%(quail, test, Case, options); 10 | }; 11 | -------------------------------------------------------------------------------- /docs/tests/frameTitlesNotEmpty.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | Frames cannot have empty "title" attributes 3 | =============================== 4 | 5 | *Severity code:* Severe error 6 | 7 | .. php:class:: frameTitlesNotEmpty 8 | 9 | 10 | All frame elements must have a valid "title" attribute. 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/tests/tabIndexFollowsLogicalOrder.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | The tab order of a document is logical 3 | =============================== 4 | 5 | *Severity code:* Possible error 6 | 7 | .. php:class:: tabIndexFollowsLogicalOrder 8 | 9 | 10 | Check that the tab-order of a page is logical. 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/tests/tabularDataIsInTable.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | All tabular information should use a table 3 | =============================== 4 | 5 | *Severity code:* Possible error 6 | 7 | .. php:class:: tabularDataIsInTable 8 | 9 | 10 | Tables should be used when displaying tabular information. 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/objectUIMustBeAccessible/objectUIMustBeAccessible.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | objectUIMustBeAccessible 5 | 6 | 7 |
8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /docs/tests/framesetIsNotUsed.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | The "frameset" element should not be used 3 | =============================== 4 | 5 | *Severity code:* Severe error 6 | 7 | .. php:class:: framesetIsNotUsed 8 | 9 | 10 | .. code-block:: html 11 | 12 | Frameset elements should not be used. 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /docs/tests/imgAltIsDifferent.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | Image "alt" attributes should not be the same as the filename 3 | =============================== 4 | 5 | Severity code: 0 6 | 7 | .. php:class:: imgAltIsDifferent 8 | 9 | 10 | All img elements should have an "alt" attribute that is not just the name of the file 11 | -------------------------------------------------------------------------------- /docs/tests/imgAltIsSameInText.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | Check that any text within an image is also in the "alt" attribute 3 | =============================== 4 | 5 | Severity code: 0 6 | 7 | .. php:class:: imgAltIsSameInText 8 | 9 | 10 | If an image has text within it, that text should be repeated in the "alt" attribute 11 | -------------------------------------------------------------------------------- /docs/tests/inputElementsDontHaveAlt.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | Input elements which are not images should not have an "alt" attribute 3 | =============================== 4 | 5 | Severity code: 0 6 | 7 | .. php:class:: inputElementsDontHaveAlt 8 | 9 | 10 | Because of inconsistencies in how user agents use the "alt" attribute 11 | -------------------------------------------------------------------------------- /scripts/regexes.txt: -------------------------------------------------------------------------------- 1 | (\$?\(?[a-zA-Z0-9]+\)?)\.find\(('?[a-zA-Z0-9\.\#\-\[\]\"\=\_\, \$\:\(\)]+'?)\) 2 | (test\.get\('scope'\))\.find\(('?[a-zA-Z0-9\.\#\-\[\]\"\=\_\, \$\:\(\)]+'?)(?!\.each)\) 3 | \$\.each\(([a-zA-Z0-9]*), function \(index, ([a-zA-Z0-9]+) 4 | $1.forEach(function ($2, index 5 | \.each\(function \((index), ([a-zA-Z0-9\.#-\[\]'"=_, \$:]+)\) 6 | -------------------------------------------------------------------------------- /docs/tests/aLinkTextDoesNotBeginWithRedundantWord.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | Link text should not begin with redundant text 3 | =============================== 4 | 5 | Severity code: 0 6 | 7 | .. php:class:: aLinkTextDoesNotBeginWithRedundantWord 8 | 9 | 10 | Link text should not begin with redundant words or phrases like "link 11 | -------------------------------------------------------------------------------- /docs/tests/documentStrictDocType.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | The page uses a strict doctype 3 | =============================== 4 | 5 | *Severity code:* Severe error 6 | 7 | .. php:class:: documentStrictDocType 8 | 9 | 10 | The doctype of the page or document should be either an HTML or XHTML strict doctype. 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/tests/frameTitlesNotPlaceholder.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | Frames cannot have "title" attributes that are just placeholder text 3 | =============================== 4 | 5 | Severity code: 0 6 | 7 | .. php:class:: frameTitlesNotPlaceholder 8 | 9 | 10 | Frame "title" attributes should not be simple placeholder text like "frame 11 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/marqueeIsNotUsed/marqueeIsNotUsed.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | marqueeIsNotUsed 5 | 6 | 7 |
8 |

9 | this is marquee text 10 |

11 |
12 | 13 | 14 | -------------------------------------------------------------------------------- /docs/tests/basefontIsNotUsed.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | Basefont" should not be used 3 | =============================== 4 | 5 | *Severity code:* Severe error 6 | 7 | .. php:class:: basefontIsNotUsed 8 | 9 | 10 | The basefont tag is deprecated and should not be used. Investigate using stylesheets instead. 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/tests/fontIsNotUsed.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | Font" elements should not be used 3 | =============================== 4 | 5 | *Severity code:* Severe error 6 | 7 | .. php:class:: fontIsNotUsed 8 | 9 | 10 | The basefont tag is deprecated and should not be used. Investigate using stylesheets instead. 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/tests/scriptOndblclickRequiresOnKeypress.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | Any element with an "ondblclick" attribute shoul have a keyboard-related action as well 3 | =============================== 4 | 5 | Severity code: 0 6 | 7 | .. php:class:: scriptOndblclickRequiresOnKeypress 8 | 9 | 10 | If an element has an "ondblclick" attribute 11 | -------------------------------------------------------------------------------- /docs/tests/scriptsDoNotFlicker.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | Scripts should not cause the screen to flicker 3 | =============================== 4 | 5 | *Severity code:* Information only 6 | 7 | .. php:class:: scriptsDoNotFlicker 8 | 9 | 10 | All scripts should be assessed to see if their interface does not flicker. 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/basefontIsNotUsed/basefontIsNotUsed.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | basefontIsNotUsed 5 | 6 | 7 | 8 |
9 | Wow, basefont. Yeah 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /docs/tests/bodyMustNotHaveBackground.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | Body elements do not use a background image 3 | =============================== 4 | 5 | *Severity code:* Severe error 6 | 7 | .. php:class:: bodyMustNotHaveBackground 8 | 9 | 10 | The body element for the page may not have a "background" attribute. 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/tests/addressForAuthor.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | The document should contain an address for the author 3 | =============================== 4 | 5 | *Severity code:* Severe error 6 | 7 | .. php:class:: addressForAuthor 8 | 9 | 10 | Documents should provide a valid email address within an address element. 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /docs/tests/imgNeedsLongDescWDlink.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | An image with a "longdesc" attribute should have a corresponding description link 3 | =============================== 4 | 5 | Severity code: 0 6 | 7 | .. php:class:: imgNeedsLongDescWDlink 8 | 9 | 10 | Any image that has a "longdesc" attribute must also have a corresponding "d-link 11 | -------------------------------------------------------------------------------- /docs/tests/textIsNotSmall.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | The text size is not less than 9 pixels high 3 | =============================== 4 | 5 | *Severity code:* Possible error 6 | 7 | .. php:class:: textIsNotSmall 8 | 9 | 10 | To help users with difficulty reading small text, ensure text size is no less than 9 pixels high. 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /test/config/mobile.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | desiredCapabilities: { 3 | browserName: process.env._BROWSER || '', 4 | platformName: (process.env._PLATFORM || '').replace(/_/g,' '), 5 | platformVersion: (process.env._VERSION || ''), 6 | 'appium-version': '1.0', 7 | deviceName: (process.env._DEVICENAME || '').replace(/_/g,' ') 8 | } 9 | }; 10 | -------------------------------------------------------------------------------- /docs/tests/areaAltIdentifiesDestination.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | All "area" elements must have an "alt" attribute which describes the link destination 3 | =============================== 4 | 5 | Severity code: 0 6 | 7 | .. php:class:: areaAltIdentifiesDestination 8 | 9 | 10 | All area elements within a map must have an "alt" attribute 11 | -------------------------------------------------------------------------------- /docs/tests/tableLayoutHasNoSummary.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | All tables used for layout have no summary or an empty summary 3 | =============================== 4 | 5 | Severity code: 0 6 | 7 | .. php:class:: tableLayoutHasNoSummary 8 | 9 | 10 | If a table contains no data, and is used simply for layout, then it should not have a "summary" attribute 11 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/scriptInBodyMustHaveNoscript/scriptInBodyMustHaveNoscript-fail.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | scriptInBodyMustHaveNoscript-fail 5 | 6 | 7 |

There is a script element on this page.

8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /docs/tests/tableUseColGroup.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | Group columns using "colgroup" or "col" elements 3 | =============================== 4 | 5 | *Severity code:* Information only 6 | 7 | .. php:class:: tableUseColGroup 8 | 9 | 10 | To help complex table headers make sense, use colgroup or col to group them together. 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/documentAutoRedirectNotUsed/documentAutoRedirectNotUsed-fail.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | documentAutoRedirectNotUsed-fail 5 | 6 | 7 | 8 |

This page has an auto-redirect.

9 | 10 | 11 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/linkUsedForAlternateContent/linkUsedForAlternateContent-fail.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | linkUsedForAlternateContent-fail 5 | 6 | 7 |

This document has no link to alternate content.

8 | 9 | 10 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/scriptOnmouseoverHasOnfocus/scriptOnmouseoverHasOnfocus.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | scriptOnmouseoverHasOnfocus 5 | 6 | 7 |
8 | 9 |
10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/tests/cssTextHasContrast.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | All elements should have appropriate color contrast 3 | =============================== 4 | 5 | *Severity code:* Severe error 6 | 7 | .. php:class:: cssTextHasContrast 8 | 9 | 10 | For users who have color blindness, all text or other elements should have a color contrast of 5:1. 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/tests/documentAllColorsAreSet.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | All the document colors must be set 3 | =============================== 4 | 5 | *Severity code:* Severe error 6 | 7 | .. php:class:: documentAllColorsAreSet 8 | 9 | 10 | If any colors for text or the background are set in the body element, then all colors must be set. 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/tests/inputImageAltIsShort.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | All "input" elements with a type of "image" must have an "alt" attribute which is as short as possible 3 | =============================== 4 | 5 | Severity code: 0 6 | 7 | .. php:class:: inputImageAltIsShort 8 | 9 | 10 | All input elements with a type of "image" should have an "alt" attribute 11 | -------------------------------------------------------------------------------- /docs/tests/tableCaptionIdentifiesTable.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | Captions should identify their table 3 | =============================== 4 | 5 | *Severity code:* Information only 6 | 7 | .. php:class:: tableCaptionIdentifiesTable 8 | 9 | 10 | Check to make sure that a table's caption identifies the table with a name, figure number, etc. 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/tests/videosEmbeddedOrLinkedNeedCaptions.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | All linked or embedded videos need captions 3 | =============================== 4 | 5 | *Severity code:* Severe error 6 | 7 | .. php:class:: videosEmbeddedOrLinkedNeedCaptions 8 | 9 | 10 | Any video hosted or otherwise which is linked or embedded must have a caption. 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /examples/editors/plugins/tinymce/quail/css/content.css: -------------------------------------------------------------------------------- 1 | .quail-result { padding: 3px; border-radius: 3px;} 2 | .quail-result.severe { border: 3px dashed red; } 3 | .quail-result.moderate { border: 3px dashed orange; } 4 | .quail-result.reccomendation { border: 3px solid green; } 5 | 6 | .quail-message { position: fixed; background: #fff; color: #000; border: 1px solid black; padding: 10px;} -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/documentMetaNotUsedWithTimeout/documentMetaNotUsedWithTimeout.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | documentMetaNotUsedWithTimeout 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /docs/tests/aMustNotHaveJavascriptHref.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | Links should not use "javascript" in their location 3 | =============================== 4 | 5 | *Severity code:* Severe error 6 | 7 | .. php:class:: aMustNotHaveJavascriptHref 8 | 9 | 10 | Anchor (a) elements may not use the "javascript" protocol in their "href" attributes. 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/tests/aSuspiciousLinkText.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | Link text should be useful 3 | =============================== 4 | 5 | Severity code: 0 6 | 7 | .. php:class:: aSuspiciousLinkText 8 | 9 | 10 | Because many users of screen-readers use links to navigate the page, providing links with text that simply read "click here" gives no hint of the function of the link 11 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/aMustNotHaveJavascriptHref/aMustNotHaveJavascriptHref.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | aMustNotHaveJavascriptHref 5 | 6 | 7 |
8 | Scripted link 9 |
10 | 11 | 12 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/siteMap/siteMap.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | siteMap 5 | 6 | 7 |
8 | Site Map 9 | 10 |

11 | This document is part of a large collection of related documents. 12 |

13 |
14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /docs/tests/inputImageAltIsNotPlaceholder.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | All "input" elements with a type of "image" must have an "alt" attribute which is not placeholder text 3 | =============================== 4 | 5 | Severity code: 0 6 | 7 | .. php:class:: inputImageAltIsNotPlaceholder 8 | 9 | 10 | All input elements with a type of "image" should have an "alt" attribute 11 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/iIsNotUsed/iIsNotUsed-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | iIsNotUsed 5 | 6 | 7 |
8 |

9 | What she really 10 | meant to say was, "This isn't ok, it is excellent!" 11 |

12 |
13 | 14 | 15 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/linkUsedForAlternateContent/linkUsedForAlternateContent-pass.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | linkUsedForAlternateContent-pass 6 | 7 | 8 |

This document has a link to alternate content.

9 | 10 | 11 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/objectShouldHaveLongDescription/objectShouldHaveLongDescription.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | objectShouldHaveLongDescription 5 | 6 | 7 |
8 | 9 | 10 |
11 |
12 |
13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/scriptsDoNotUseColorAlone/scriptsDoNotUseColorAlone.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | scriptsDoNotUseColorAlone 5 | 6 | 7 |
8 | 9 |
10 |

No scripts be here.

11 |
12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /test/config/index.js: -------------------------------------------------------------------------------- 1 | var merge = require('deepmerge'); 2 | 3 | var env = process.env.TRAVIS ? 'travis-ci' : 'local'; 4 | 5 | var defaults = require('./defaults.js'); 6 | var asked = require('./' + env + '.js'); 7 | 8 | if (process.env._ENV === 'mobile') { 9 | var mobile = require('./mobile'); 10 | asked = merge(asked,mobile); 11 | } 12 | 13 | module.exports = merge(defaults, asked); 14 | -------------------------------------------------------------------------------- /docs/tests/addressForAuthorMustBeValid.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | The document should contain a valid email address for the author 3 | =============================== 4 | 5 | *Severity code:* Possible error 6 | 7 | .. php:class:: addressForAuthorMustBeValid 8 | 9 | 10 | Documents should provide a valid email address within an address element. 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /docs/tests/headersUseToMarkSections.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | Use headers to mark the beginning of each section 3 | =============================== 4 | 5 | *Severity code:* Possible error 6 | 7 | .. php:class:: headersUseToMarkSections 8 | 9 | 10 | Check that each logical section of the page is broken or introduced with a header () element. 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/tests/iframeMustNotHaveLongdesc.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | Inline frames ("iframes") should not have a "longdesc" attribute 3 | =============================== 4 | 5 | *Severity code:* Severe error 6 | 7 | .. php:class:: iframeMustNotHaveLongdesc 8 | 9 | 10 | .. code-block:: html 11 | 12 | Iframe elements should not have a "longdesc" attribute. 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /docs/tests/inputImageAltIsNotFileName.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | All "input" elements with a type of "image" must have an "alt" attribute which is not the same as the filename 3 | =============================== 4 | 5 | Severity code: 0 6 | 7 | .. php:class:: inputImageAltIsNotFileName 8 | 9 | 10 | All input elements with a type of "image" should have an "alt" attribute 11 | -------------------------------------------------------------------------------- /examples/php/README.md: -------------------------------------------------------------------------------- 1 | ======================= 2 | Note about this example 3 | ======================= 4 | 5 | This is an example of how to integrate a PHP backend with QUAIL. You must run it from within a web server, it will not work by just viewing the html files in a browser. 6 | 7 | **WARNING:** This is a totally insecure way to do things, it's just a simple example. Do not post this to a public place. -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/iIsNotUsed/iIsNotUsed.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | iIsNotUsed 5 | 6 | 7 |
8 |

9 | What she really 10 | meant to say was, "This isn't ok, it is excellent !" 11 |

12 |
13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/tests/radioMarkedWithFieldgroupAndLegend.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | All radio button groups are marked using fieldset and legend elements. 3 | =============================== 4 | 5 | *Severity code:* Severe error 6 | 7 | .. php:class:: radioMarkedWithFieldgroupAndLegend 8 | 9 | form element content must contain both fieldset and legend elements if there are related radio buttons. 10 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/documentStrictDocType/documentStrictDocType-fail.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | documentStrictDocType-fail 5 | 6 | 7 | 8 |

9 | A black and brown cat named Rex. 10 |

11 | 12 | 13 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/objectContentUsableWhenDisabled/objectContentUsableWhenDisabled.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | objectContentUsableWhenDisabled 5 | 6 | 7 |
8 | 9 | 10 | 11 |
12 |
13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/objectDoesNotUseColorAlone/objectDoesNotUseColorAlone.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | objectDoesNotUseColorAlone 5 | 6 | 7 |
8 | 9 |
10 | 11 |
12 |

No object

13 |
14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /docs/tests/fileHasLabel.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | All "file" input elements have a corresponding label 3 | =============================== 4 | 5 | Severity code: 0 6 | 7 | .. php:class:: fileHasLabel 8 | 9 | 10 | All input elements of type "file" should have a corresponding label element. Screen readers often enter a "form mode" where only label text is read aloud to the user 11 | -------------------------------------------------------------------------------- /docs/tests/imgAltEmptyForDecorativeImages.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | If an image is purely decorative, the "alt" text must be empty 3 | =============================== 4 | 5 | Severity code: 0 6 | 7 | .. php:class:: imgAltEmptyForDecorativeImages 8 | 9 | 10 | Any image that is only decorative (serves no function or adds to the purpose of the page content) should have an "alt" attribute 11 | -------------------------------------------------------------------------------- /docs/tests/inputTextHasLabel.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | All "input" elements should have a corresponding "label 3 | =============================== 4 | 5 | Severity code: 0 6 | 7 | .. php:class:: inputTextHasLabel 8 | 9 | 10 | All input elements should have a corresponding label element. Screen readers often enter a "form mode" where only label text is read aloud to the user 11 | -------------------------------------------------------------------------------- /docs/tests/frameSrcIsAccessible.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | The source for each frame is accessible content. 3 | =============================== 4 | 5 | *Severity code:* Information only 6 | 7 | .. php:class:: frameSrcIsAccessible 8 | 9 | 10 | Each frame should contain accessible content, and contain content accessible to screen readers, like HTML as opposed to an image. 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/tests/preShouldNotBeUsedForTabularLayout.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | Pre" elements should not be used for tabular data 3 | =============================== 4 | 5 | *Severity code:* Information only 6 | 7 | .. php:class:: preShouldNotBeUsedForTabularLayout 8 | 9 | 10 | If a pre element is used for tabular data, change the data to use a well-formed table. 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /docs/tests/radioHasLabel.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | All "radio" input elements have a corresponding label 3 | =============================== 4 | 5 | Severity code: 0 6 | 7 | .. php:class:: radioHasLabel 8 | 9 | 10 | All input elements of type "radio" should have a corresponding label element. Screen readers often enter a "form mode" where only label text is read aloud to the user 11 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/aMustNotHaveJavascriptHref/aMustNotHaveJavascriptHref-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | aMustNotHaveJavascriptHref 5 | 6 | 7 | 8 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/iframeMustNotHaveLongdesc/iframeMustNotHaveLongdesc.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | iframeMustNotHaveLongdesc 5 | 6 | 7 |
8 | 9 |
10 |
11 | 12 |
13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/objectTextUpdatesWhenObjectChanges/objectTextUpdatesWhenObjectChanges.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | objectTextUpdatesWhenObjectChanges 5 | 6 | 7 |
8 | 9 |
10 | 11 |
12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/tests/appletsDoNotFlicker.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | All applets do not flicker 3 | =============================== 4 | 5 | *Severity code:* Information only 6 | 7 | .. php:class:: appletsDoNotFlicker 8 | 9 | 10 | Applets should not flicker. 11 | 12 | 13 | 14 | 15 | Applets cannot be checked using automated tools, this should be reviewed manually. 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /docs/tests/siteMap.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | Websites must have a site map 3 | =============================== 4 | 5 | *Severity code:* Information only 6 | 7 | .. php:class:: siteMap 8 | 9 | 10 | Every web site should have a page which provides a site map or another method to navigate most of the site from a single page to save time for users of assistive devices. 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /docs/tests/textareaHasAssociatedLabel.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | All textareas should have a corresponding label 3 | =============================== 4 | 5 | Severity code: 0 6 | 7 | .. php:class:: textareaHasAssociatedLabel 8 | 9 | 10 | All textarea elements should have a corresponding label element. Screen readers often enter a "form mode" where only label text is read aloud to the user 11 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/boldIsNotUsed/boldIsNotUsed-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | boldIsNotUsed 5 | 6 | 7 | 8 |
9 |

10 | What she really 11 | meant to say was, "This isn't ok, it is excellent!" 12 |

13 |
14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/imgAltIsSameInText/imgAltIsSameInText.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | imgAltIsSameInText 5 | 6 | 7 |
8 | My cat 9 |
10 | 11 |
12 |

No image

13 |
14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/scriptInBodyMustHaveNoscript/scriptInBodyMustHaveNoscript-pass.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | scriptInBodyMustHaveNoscript-pass 5 | 6 | 7 |

There is a script element on this page.

8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /docs/tests/checkboxHasLabel.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | All checkboxes must have a corresponding label 3 | =============================== 4 | 5 | Severity code: 0 6 | 7 | .. php:class:: checkboxHasLabel 8 | 9 | 10 | All input elements with a type of "checkbox" should have a corresponding label element. Screen readers often enter a "form mode" where only label text is read aloud to the user 11 | -------------------------------------------------------------------------------- /docs/tests/selectHasAssociatedLabel.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | All select elements have an explicitly associated label. 3 | =============================== 4 | 5 | Severity code: 0 6 | 7 | .. php:class:: selectHasAssociatedLabel 8 | 9 | 10 | All select elements should have a corresponding label element. Screen readers often enter a "form mode" where only label text is read aloud to the user 11 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/aTitleDescribesDestination/aTitleDescribesDestination.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | aTitleDescribesDestination 5 | 6 | 7 | 8 |
9 |

We have more information about dogs on our site.

10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/objectInterfaceIsAccessible/objectInterfaceIsAccessible.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | objectInterfaceIsAccessible 5 | 6 | 7 |
8 | 9 |
10 | 11 |
12 |

No object

13 |
14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/objectLinkToMultimediaHasTextTranscript/objectLinkToMultimediaHasTextTranscript.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | objectLinkToMultimediaHasTextTranscript 5 | 6 | 7 |
8 | 9 |
10 | 11 |
12 |
13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /docs/tests/imageMapServerSide.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | All links in a server-side map should have duplicate links available in the document 3 | =============================== 4 | 5 | *Severity code:* Severe error 6 | 7 | .. php:class:: imageMapServerSide 8 | 9 | 10 | Any image with an "usemap" attribute for a server-side image map should have the available links duplicated elsewhere. 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/tests/imgNotReferredToByColorAlone.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | For any image, the "alt" text cannot refer to color alone 3 | =============================== 4 | 5 | Severity code: 0 6 | 7 | .. php:class:: imgNotReferredToByColorAlone 8 | 9 | 10 | The "alt" text or content text for any image should not refer to the image by color alone. This is often fixed by changing the "alt" text to the meaning of the image 11 | -------------------------------------------------------------------------------- /docs/tests/scriptsDoNotUseColorAlone.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | The interface in scripts should not use color alone 3 | =============================== 4 | 5 | *Severity code:* Information only 6 | 7 | .. php:class:: scriptsDoNotUseColorAlone 8 | 9 | 10 | All scripts should be assessed to see if their interface does not have an interface which requires distinguishing beteween colors alone. 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/boldIsNotUsed/boldIsNotUsed.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | boldIsNotUsed 5 | 6 | 7 |
8 |

What she 9 | really 10 | meant to say was, "This isn't ok, it is 11 | excellent!" 12 |

13 |
14 | 15 | 16 | -------------------------------------------------------------------------------- /docs/tests/documentReadingDirection.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | Reading direction of text is correctly marked 3 | =============================== 4 | 5 | *Severity code:* Possible error 6 | 7 | .. php:class:: documentReadingDirection 8 | 9 | 10 | Where required, the reading direction of the document (for language that read in different directions), or portions of the text, must be declared. 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /docs/tests/imgImportantNoSpacerAlt.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | Images that are important should not have a purely white-space "alt" attribute 3 | =============================== 4 | 5 | Severity code: 0 6 | 7 | .. php:class:: imgImportantNoSpacerAlt 8 | 9 | 10 | Any image that is not used decorativey or which is purely for layout purposes cannot have an "alt" attribute that consists solely of white space (i.e. a space 11 | -------------------------------------------------------------------------------- /docs/tests/noframesSectionMustHaveTextEquivalent.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | All "noframes" elements should contain the text content from all frames 3 | =============================== 4 | 5 | *Severity code:* Possible error 6 | 7 | .. php:class:: noframesSectionMustHaveTextEquivalent 8 | 9 | 10 | The noframes content should either replicate or link to the content visible within the frames. 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/tests/passwordHasLabel.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | All password input elements should have a corresponding label 3 | =============================== 4 | 5 | Severity code: 0 6 | 7 | .. php:class:: passwordHasLabel 8 | 9 | 10 | All input elements with a type of "password"should have a corresponding label element. Screen readers often enter a "form mode" where only label text is read aloud to the user 11 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/KINGStrongList/KINGStrongList.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | KINGStrongList 5 | 6 | 7 |
8 |
    9 |
  • Some bold text.
  • 10 |
11 |
12 | 13 |
14 |

Bold at the wrong place.

15 |
16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/documentStrictDocType/documentStrictDocType.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | documentStrictDocType-pass 6 | 7 | 8 | 9 |

10 | A black and brown cat named Rex. 11 |

12 | 13 | 14 | -------------------------------------------------------------------------------- /docs/tests/documentIsWrittenClearly.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | The document should be written to the target audience and read clearly 3 | =============================== 4 | 5 | *Severity code:* Possible error 6 | 7 | .. php:class:: documentIsWrittenClearly 8 | 9 | 10 | If a document is beyond a 10th grade level, then a summary or other guide should also be provided to guide the user through the content. 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/tests/labelsAreAssignedToAnInput.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | All labels should be associated with an input 3 | =============================== 4 | 5 | *Severity code:* Severe error 6 | 7 | .. php:class:: labelsAreAssignedToAnInput 8 | 9 | 10 | All label elements should be assigned to an input item, and should have a for attribute which equals the id attribute of a form element. 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/tests/tableLayoutMakesSenseLinearized.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | All tables used for layout should make sense when removed 3 | =============================== 4 | 5 | *Severity code:* Information only 6 | 7 | .. php:class:: tableLayoutMakesSenseLinearized 8 | 9 | 10 | If a table element is used for layout purposes only, then the content of the table should make sense if the table is linearized. 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/tests/linkUsedToDescribeNavigation.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | Document uses link element to describe navigation if it is within a collection. 3 | =============================== 4 | 5 | *Severity code:* Severe error 6 | 7 | .. php:class:: linkUsedToDescribeNavigation 8 | 9 | The link element can provide metadata about the position of an HTML page within a set of Web units or can assist in locating content with a set of Web units. 10 | -------------------------------------------------------------------------------- /docs/tests/headersHaveText.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | All headers should contain readable text 3 | =============================== 4 | 5 | *Severity code:* Severe error 6 | 7 | .. php:class:: headersHaveText 8 | 9 | 10 | Users with screen readers use headings like the tabs h1 to navigate the structure of a page. All headings should contain either text, or images with appropriate alt attributes. 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/tests/tableWithBothHeadersUseScope.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | Data tables with multiple headers should use the "scope" attribute 3 | =============================== 4 | 5 | *Severity code:* Possible error 6 | 7 | .. php:class:: tableWithBothHeadersUseScope 8 | 9 | 10 | Where there are table headers for both rows and columns, use the "scope" attribute to help relate those headers with their appropriate cells. 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/documentLangIsISO639Standard/documentLangIsISO639Standard-inapplicable.html: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | documentLangIsISO639Standard-inapplicable 7 | 8 | 9 | 10 |

This document has no language code.

11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/documentLangIsISO639Standard/documentLangIsISO639Standard.html: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | documentLangIsISO639Standard-fail 7 | 8 | 9 | 10 |

This document is missing a standard language code.

11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/inputElementsDontHaveAlt/inputElementsDontHaveAlt-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | inputElementsDontHaveAlt 5 | 6 | 7 |
8 |
9 |

10 | 11 |

12 |
13 |
14 | 15 | 16 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/newWindowIsOpened/newWindowIsOpened.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | newWindowIsOpened 5 | 6 | 7 |
8 |

9 | 10 | 11 | 12 |

13 |
14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/objectWithClassIDHasNoText/objectWithClassIDHasNoText.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | objectWithClassIDHasNoText 5 | 6 | 7 |
8 | 9 | text equiv for object 10 |
11 |
12 | 13 | 14 |
15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/scriptContentAccessibleWithScriptsTurnedOff/scriptContentAccessibleWithScriptsTurnedOff.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | scriptContentAccessibleWithScriptsTurnedOff 5 | 6 | 7 |
8 | 9 |
10 |
11 |

No script element here.

12 |
13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /docs/tests/appletProvidesMechanismToReturnToParent.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | All applets should provide a way for keyboard users to escape 3 | =============================== 4 | 5 | *Severity code:* Information only 6 | 7 | .. php:class:: appletProvidesMechanismToReturnToParent 8 | 9 | 10 | Ensure that a user who has only a keyboard as an input device can escape an applet element. This requires manual confirmation. 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/tests/objectProvidesMechanismToReturnToParent.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | All objects should provide a way for keyboard users to escape 3 | =============================== 4 | 5 | *Severity code:* Information only 6 | 7 | .. php:class:: objectProvidesMechanismToReturnToParent 8 | 9 | 10 | Ensure that a user who has only a keyboard as an input device can escape a object element. This requires manual confirmation. 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/KINGUseCurrencyAsSymbol/KINGUseCurrencyAsSymbol.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | KINGUseCurrencyAsSymbol 5 | 6 | 7 |
8 |

Text with a few prices, 500 dollars, 500 euros. Dollars 500

9 |
10 | 11 |
12 |

Text with a few prices, 500 USD, 300€.

13 |
14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/aMustHaveTitle/aMustHaveTitle.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | aMustHaveTitle 5 | 6 | 7 | 8 |

We have information about dogs on our site.

9 | 10 |

We have more information about dogs on our site.

11 | 12 | 13 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/imgAltIdentifiesLinkDestination/imgAltIdentifiesLinkDestination.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | imgAltIdentifiesLinkDestination 5 | 6 | 7 |
8 |

9 | 10 | Current routes at Boulders Climbing Gym 11 | 12 |

13 |
14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /docs/tests/areaHasAltValue.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | All "area" elements must have an "alt" attribute 3 | =============================== 4 | 5 | Severity code: 0 6 | 7 | .. php:class:: areaHasAltValue 8 | 9 | 10 | All area elements within a map must have an "alt" attribute. 11 | 12 | 13 | 14 | Example 15 | ------- 16 | Wrong 17 | ----- 18 | 19 | .. code-block:: html 20 | 21 | Learn more about color contrast and how to measure it. 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/tests/embedProvidesMechanismToReturnToParent.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | All embed elements should provide a way for keyboard users to escape 3 | =============================== 4 | 5 | *Severity code:* Information only 6 | 7 | .. php:class:: embedProvidesMechanismToReturnToParent 8 | 9 | 10 | Ensure that a user who has only a keyboard as an input device can escape an embed element. This requires manual confirmation. 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/tests/objectUIMustBeAccessible.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | Content within an "object" element should be usable with objects disabled 3 | =============================== 4 | 5 | *Severity code:* Information only 6 | 7 | .. php:class:: objectUIMustBeAccessible 8 | 9 | 10 | Objects who's content changes using java, ActiveX, or other similar technologies, should have their default text change when the object's content changes. 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/KINGUsePercentageWithSymbol/KINGUsePercentageWithSymbol.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | KINGUsePercentageWithSymbol 5 | 6 | 7 |
8 |

Text with a few percentages, 50 pct., 500 percent.

9 |
10 | 11 |
12 |

Text with a few percentages: 50%, 50.30%.

13 |
14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/documentAcronymsHaveElement/documentAcronymsHaveElement.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | documentAcronymsHaveElement 5 | 6 | 7 |
8 |

Everyone loves QUAIL.

9 |
10 | 11 |
12 |

Hi this is a document with no acronyms.

13 |
14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /docs/tests/appletUIMustBeAccessible.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | Any user interface in an applet must be accessible 3 | =============================== 4 | 5 | *Severity code:* Information only 6 | 7 | .. php:class:: appletUIMustBeAccessible 8 | 9 | 10 | Applet content should be assessed for accessibility. 11 | 12 | 13 | 14 | 15 | Applets cannot be checked using automated tools, this should be reviewed manually. 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /docs/tests/objectInterfaceIsAccessible.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | Interfaces within objects must be accessible 3 | =============================== 4 | 5 | *Severity code:* Information only 6 | 7 | .. php:class:: objectInterfaceIsAccessible 8 | 9 | 10 | Object content should be assessed for accessibility. 11 | 12 | 13 | 14 | 15 | Objects cannot be checked using automated tools, this should be reviewed manually. 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /docs/tests/scriptContentAccessibleWithScriptsTurnedOff.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | Content on the page should still be available if scripts are disabled 3 | =============================== 4 | 5 | *Severity code:* Information only 6 | 7 | .. php:class:: scriptContentAccessibleWithScriptsTurnedOff 8 | 9 | 10 | All scripts should be assessed to see if, when the user is browing with scrips turned off, the page content is still available. 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/scriptOnmousemove/scriptOnmousemove.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | scriptOnmousemove 5 | 6 | 7 |
8 | 9 |
10 |
11 | 12 |
13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/tests/areaDontOpenNewWindow.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | No "area" elements should open a new window without warning 3 | =============================== 4 | 5 | Severity code: 0 6 | 7 | .. php:class:: areaDontOpenNewWindow 8 | 9 | 10 | No area elements should open a new window without warning. 11 | 12 | 13 | 14 | Example 15 | ------- 16 | Wrong 17 | ----- 18 | 19 | .. code-block:: html 20 | 21 | label element of input items where the errors happened 11 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/documentLangIsISO639Standard/documentLangIsISO639Standard-fail.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | documentLangIsISO639Standard-fail 6 | 7 | 8 | 9 |

This document is missing a standard language code.

10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/linkDoesNotChangeContextOnFocus/linkDoesNotChangeContextOnFocus.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | linkDoesNotChangeContextOnFocus 5 | 6 | 7 |
8 | Open a link 9 |
10 | 11 |
12 | Open a link 13 |
14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/noembedHasEquivalentContent/noembedHasEquivalentContent.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | noembedHasEquivalentContent 5 | 6 | 7 |
8 | 9 | Alternate content for the embed 10 | 11 |
12 |
13 | 14 |
15 | 16 | 17 | -------------------------------------------------------------------------------- /docs/tests/bodyLinkColorContrast.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | Contrast between link text and background should be 5:1 3 | =============================== 4 | 5 | Severity code: 6 | 7 | .. php:class:: bodyLinkColorContrast 8 | 9 | 10 | The contrast ratio of link text should be at lest 5:1 between the foreground text and the background. Learn more about color contrast and how to measure it. 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/tests/objectWithClassIDHasNoText.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | Objects with "classid" attributes should change their text if the content of the object changes 3 | =============================== 4 | 5 | *Severity code:* Severe error 6 | 7 | .. php:class:: objectWithClassIDHasNoText 8 | 9 | 10 | Objects who's content changes using java, ActiveX, or other similar technologies, should have their default text change when the object's content changes. 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/tests/selectJumpMenu.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | Select jump menus should jump on button press, not on state change 3 | =============================== 4 | 5 | *Severity code:* Possible error 6 | 7 | .. php:class:: selectJumpMenus 8 | 9 | 10 | If you wish to use a 'Jump' menu with a select item that then redirects users to another page, the jump should occur on the user pressing a button, rather than on the change event of that select eleemnt. 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/documentStrictDocType/documentStrictDocType-fail-2.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | documentStrictDocType-fail-2 6 | 7 | 8 | 9 |

10 | A black and brown cat named Rex. 11 |

12 | 13 | 14 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/documentStrictDocType/documentStrictDocType-fail-3.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | documentStrictDocType-fail-3 6 | 7 | 8 | 9 |

10 | A black and brown cat named Rex. 11 |

12 | 13 | 14 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/documentTitleIsShort/documentTitleIsShort-fail.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | This is a really really long title and maybe it should be shortened. In 6 | fact I think it really should be shortened. Yes, let's all shorted the 7 | title so it's more manageable for everyone. 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/scriptOnmouseupHasOnkeyup/scriptOnmouseupHasOnkeyup.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | scriptOnmouseupHasOnkeyup 5 | 6 | 7 |
8 | 9 |
10 |
11 | 12 |
13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/tests/areaAltRefersToText.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | Alt text for "area" elements should replicate the text found in the image 3 | =============================== 4 | 5 | *Severity code:* Information only 6 | 7 | .. php:class:: areaAltRefersToText 8 | 9 | 10 | If an image is being used as a map, and an area encompasses text within the image, then the "alt" attribute of that area element should be the same as the text found in the image. 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/tests/cssDocumentMakesSenseStyleTurnedOff.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | The document must be readable with styles turned off 3 | =============================== 4 | 5 | *Severity code:* Information only 6 | 7 | .. php:class:: cssDocumentMakesSenseStyleTurnedOff 8 | 9 | 10 | With all the styles for a page turned off, the content of the page should still make sense. Try to turn styles off in the browser and see if the page content is readable and clear. 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/documentStrictDocType/documentStrictDocType-pass-2.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | documentStrictDocType-pass-2 6 | 7 | 8 | 9 |

10 | A black and brown cat named Rex. 11 |

12 | 13 | 14 | -------------------------------------------------------------------------------- /docs/tests/documentContentReadableWithoutStylesheets.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | Content should be readable without style sheets 3 | =============================== 4 | 5 | *Severity code:* Information only 6 | 7 | .. php:class:: documentContentReadableWithoutStylesheets 8 | 9 | 10 | With all the styles for a page turned off, the content of the page should still make sense. Try to turn styles off in the browser and see if the page content is readable and clear. 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/listNotUsedForFormatting/listNotUsedForFormatting.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | listNotUsedForFormatting 5 | 6 | 7 |
8 |
    9 |
  1. Item text
  2. 10 |
11 |
12 |
13 | 14 |
    15 |
  1. Item text 1
  2. 16 |
  3. Item text 2
  4. 17 |
18 |
19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/scriptsDoNotFlicker/scriptsDoNotFlicker.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | scriptsDoNotFlicker 5 | 9 | 10 | 11 |
12 | 13 |
14 | 15 |
16 |

No scripts here.

17 |
18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /docs/tests/bodyActiveLinkColorContrast.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | Contrast between active link text and background should be 5:1 3 | =============================== 4 | 5 | Severity code: 6 | 7 | .. php:class:: bodyActiveLinkColorContrast 8 | 9 | 10 | The contrast ratio of active link text should be at lest 5:1 between the foreground text and the background. Learn more about color contrast and how to measure it. 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/tests/documentAutoRedirectNotUsed.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | Auto-redirect with "meta" elements must not be used 3 | =============================== 4 | 5 | Severity code: 0 6 | 7 | .. php:class:: documentAutoRedirectNotUsed 8 | 9 | 10 | Because different users have different speeds and abilities when it comes to parsing the content of a page, a "meta-refresh" method to redirect users can prevent users from fully understanding the document before being redirected. If a pure redirect is needed 11 | -------------------------------------------------------------------------------- /docs/tests/framesetMustHaveNoFramesSection.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | All framesets should contain a noframes section 3 | =============================== 4 | 5 | Severity code: 50 6 | 7 | .. php:class:: framesetMustHaveNoFramesSection 8 | 9 | 10 | If a frameset contains three or more frames, use a "longdesc" attribute to help describe the purpose of the frames. 11 | 12 | 13 | 14 | Example 15 | ------- 16 | Wrong 17 | ----- 18 | 19 | .. code-block:: html 20 | 21 | caption elements to describe the purpose of the table. 11 | 12 | 13 | 14 | Example 15 | ------- 16 |
A short description of this table
17 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/scriptOndblclickRequiresOnKeypress/scriptOndblclickRequiresOnKeypress.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | scriptOndblclickRequiresOnKeypress 5 | 6 | 7 |
8 | 9 |
10 | 11 |
12 | 13 |
14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /docs/tests/bodyVisitedLinkColorContrast.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | Contrast between visited link text and background should be 5:1 3 | =============================== 4 | 5 | Severity code: 6 | 7 | .. php:class:: bodyVisitedLinkColorContrast 8 | 9 | 10 | The contrast ratio of visited link text should be at lest 5:1 between the foreground text and the background. Learn more about color contrast and how to measure it. 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/preShouldNotBeUsedForTabularLayout/preShouldNotBeUsedForTabularLayout.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | preShouldNotBeUsedForTabularLayout 5 | 6 | 7 |
8 | 9 |
10 |      dogs  cats
11 | big	  2     4
12 | small 5     7
13 | 		
14 |
15 |
16 |
No table here
17 |
18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/scriptOnmousedownRequiresOnKeypress/scriptOnmousedownRequiresOnKeypress.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | scriptOnmousedownRequiresOnKeypress 5 | 6 | 7 |
8 | 9 |
10 | 11 |
12 | 13 | 14 |
15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /test/config/local.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | host: 'localhost', 3 | port: process.env._PORT || 4444, 4 | logLevel: 'silent', // verbose | silent | command | data | result 5 | waitforTimeout: 1000, 6 | desiredCapabilities: { 7 | browserName: process.env._BROWSER || 'phantomjs', 8 | 'tunnel-identifier': process.env.TRAVIS_JOB_NUMBER, 9 | 'idle-timeout': 900, 10 | build: process.env.TRAVIS_BUILD_NUMBER, 11 | 'phantomjs.binary.path': './node_modules/phantomjs/bin/phantomjs' 12 | } 13 | }; 14 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | _site/* 2 | .htaccess 3 | .idea 4 | *.DS_Store 5 | examples/wysiwyg/editors/aloha/* 6 | examples/wysiwyg/editors/tinymce/* 7 | examples/wysiwyg/editors/ckeditor/* 8 | examples/wysiwyg/editors/ckeditor4/* 9 | node_modules/* 10 | .grunt/* 11 | lib 12 | test/quail-testing.jquery.js 13 | test/accessibility-tests/_tests.json 14 | test/quail-testrunner.js 15 | test/accessibility-tests/_tests.json 16 | test/core/_tests.json 17 | analyses/* 18 | karma_html/* 19 | tmp/* 20 | logs/* 21 | phantomjsdriver.log 22 | vendor/* 23 | -------------------------------------------------------------------------------- /docs/tests/areaLinksToSoundFile.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | All "area" elements which link to a sound file should also provide a link to a transcript 3 | =============================== 4 | 5 | Severity code: 0 6 | 7 | .. php:class:: areaLinksToSoundFile 8 | 9 | 10 | All area elements which link to a sound file should have a text transcript 11 | 12 | 13 | 14 | Example 15 | ------- 16 | Wrong 17 | ----- 18 | 19 | .. code-block:: html 20 | 21 | caption 2 | 3 | 4 | imgWithMapHasUseMap 5 | 6 | 7 |
8 |

9 | image map 10 |

11 |
12 | 13 |
14 |

15 | image map 16 |

17 |
18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /docs/tests/frameRelationshipsMustBeDescribed.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | Complex framesets should contain a "longdesc" attribute 3 | =============================== 4 | 5 | Severity code: 50 6 | 7 | .. php:class:: frameRelationshipsMustBeDescribed 8 | 9 | 10 | If a frameset contains three or more frames, use a "longdesc" attribute to help describe the purpose of the frames. 11 | 12 | 13 | 14 | Example 15 | ------- 16 | Wrong 17 | ----- 18 | 19 | .. code-block:: html 20 | 21 | img elements should be clear and concise. "Alt" attributes over 100 characters long should be reviewed to see if they are too long. 11 | 12 | 13 | 14 | Example 15 | ------- 16 | Wrong 17 | ----- 18 | 19 | .. code-block:: html 20 | 21 | A photograph of my very
22 | 


--------------------------------------------------------------------------------
/docs/tests/objectDoesNotUseColorAlone.rst:
--------------------------------------------------------------------------------
 1 | ===============================
 2 | Objects must not use color to communicate alone
 3 | ===============================
 4 | 
 5 | *Severity code:* Information only
 6 | 
 7 | .. php:class:: objectDoesNotUseColorAlone
 8 | 
 9 | 
10 | Objects should contain content that makes sense without color and is accessible to users who are color blind.
11 | 
12 | 
13 | 
14 | 
15 | <strong>Objects cannot be checked using automated tools, this should be reviewed manually.</strong>
16 | 
17 | 
18 | 
19 | 
20 | 


--------------------------------------------------------------------------------
/test/assessmentSpecs/specs/areaAltIdentifiesDestination/areaAltIdentifiesDestination.html:
--------------------------------------------------------------------------------
 1 | <!doctype html>
 2 | <html>
 3 |   <head>
 4 |     <title>areaAltIdentifiesDestination</title>
 5 |   </head>
 6 |   <body>
 7 |     <div data-expected= 8 | Image map of areas in the library 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/areaAltRefersToText/areaAltRefersToText.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | areaAltRefersToText 5 | 6 | 7 | 8 |
9 | Image map of areas in the library 10 | 11 | Reference 12 | 13 |
14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /docs/tests/appletsDoneUseColorAlone.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | Applets should not use color alone to communicate content 3 | =============================== 4 | 5 | *Severity code:* Information only 6 | 7 | .. php:class:: appletsDoneUseColorAlone 8 | 9 | 10 | Applets should contain content that makes sense without color and is accessible to users who are color blind. 11 | 12 | 13 | 14 | 15 | Applets cannot be checked using automated tools, this should be reviewed manually. 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /docs/tests/objectTextUpdatesWhenObjectChanges.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | The text equivalents of an object should update if the object changes 3 | =============================== 4 | 5 | *Severity code:* Information only 6 | 7 | .. php:class:: objectTextUpdatesWhenObjectChanges 8 | 9 | 10 | If an object changes, the text equivalent of that object should also change. 11 | 12 | 13 | 14 | 15 | Objects cannot be checked using automated tools, this should be reviewed manually. 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/imgShouldNotHaveTitle/imgShouldNotHaveTitle.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | imgShouldNotHaveTitle 5 | 6 | 7 |
8 | A brown and black cat named Rex. 9 |
10 | 11 |
12 | A brown and black cat named Rex. 13 |
14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/whiteSpaceInWord/whiteSpaceInWord.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | whiteSpaceInWord 5 | 6 | 7 |
8 |

H E L L O T H E R E

9 |
10 | 11 |
12 |

H E L L O T H E R E

13 |
14 | 15 |
16 |

Hello there

17 |
18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /docs/tests/documentColorWaiAlgorithim.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | Contrast between text and the background must be greater than the WAI ERT color algorithm threshold 3 | =============================== 4 | 5 | Severity code: 6 | 7 | .. php:class:: documentColorWaiAlgorithm 8 | 9 | 10 | The contrast between foreground text and the background must be more than the WAI ERT threshold. Learn more about WAI ERT color contrast and how to measure it. 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/imgAltIsDifferent/imgAltIsDifferent.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | imgAltIsDifferent 5 | 6 | 7 |
8 | assets/rex.jpg 9 |
10 | 11 |
12 | photo of rex the cat 13 |
14 | 15 |
16 | photo of rex the cat 17 |
18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /docs/tests/blinkIsNotUsed.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | The "blink" tag should not be used 3 | =============================== 4 | 5 | *Severity code:* Severe error 6 | 7 | .. php:class:: blinkIsNotUsed 8 | 9 | 10 | The blink tag should not be used. Ever. 11 | 12 | 13 | 14 | Example 15 | ------- 16 | Wrong 17 | ----- 18 | 19 | .. code-block:: html 20 | 21 | Please read me! 22 | 23 | 24 | 25 | Right 26 | ----- 27 | 28 | .. code-block:: html 29 | 30 | Please read me! 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /docs/tests/imgMapAreasHaveDuplicateLink.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | All links within a client-side image are duplicated elsewhere in the document 3 | =============================== 4 | 5 | Severity code: 0 6 | 7 | .. php:class:: imgMapAreasHaveDuplicateLink 8 | 9 | 10 | Any image that has a "usemap" attribute must have links replicated somewhere else in the document. 11 | 12 | 13 | 14 | Example 15 | ------- 16 | Wrong 17 | ----- 18 | 19 | .. code-block:: html 20 | 21 |

Learn more about WAI ERT color contrast and how to measure it. 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/tests/formDeleteIsReversable.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | Deleting items using a form should be reversable 3 | =============================== 4 | 5 | *Severity code:* Information only 6 | 7 | .. php:class:: formDeleteIsReversable 8 | 9 | 10 | Check that, if a form has the option to delete an item, that the user has a chance to either reverse the delete process, or is asked for confirmation before the item is deleted. This is not something that can be checked through automated testing and requires manual confirmation. 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/tests/imgHasAlt.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | Image elements must have an "alt" attribute 3 | =============================== 4 | 5 | *Severity code:* Severe error 6 | 7 | .. php:class:: imgHasAlt 8 | 9 | 10 | All img elements must have an alt attribute 11 | 12 | 13 | 14 | Example 15 | ------- 16 | Wrong 17 | ----- 18 | 19 | .. code-block:: html 20 | 21 | 22 | 23 | 24 | 25 | Right 26 | ----- 27 | 28 | .. code-block:: html 29 | 30 | A photograph of a dog 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /docs/tests/tableSummaryIsEmpty.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | All data tables should have a summary 3 | =============================== 4 | 5 | *Severity code:* Possible error 6 | 7 | .. php:class:: tableSummaryIsEmpty 8 | 9 | 10 | If a table contains data, it should have a "summary" attribute. 11 | 12 | 13 | 14 | Example 15 | ------- 16 | Wrong 17 | ----- 18 | 19 | .. code-block:: html 20 | 21 | 22 | 23 | 24 | 25 | Right 26 | ----- 27 | 28 | .. code-block:: html 29 | 30 |
31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/areaAltIdentifiesDestination/areaAltIdentifiesDestination-nomatch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | areaAltIdentifiesDestination 5 | 6 | 7 | 8 |
9 | Image map of areas in the library 10 | 11 | drawing of a blue book 12 | 13 |
14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/embedMustHaveAltAttribute/embedMustHaveAltAttribute.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | embedMustHaveAltAttribute 5 | 6 | 7 |
8 | 9 | Alternate content for the embed 10 | 11 |
12 |
13 | 14 | Alternate content for the embed 15 | 16 |
17 | 18 | 19 | -------------------------------------------------------------------------------- /docs/tests/aMustHaveTitle.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | All links must have a "title" attribute 3 | =============================== 4 | 5 | *Severity code:* Severe error 6 | 7 | .. php:class:: aMustHaveTitle 8 | 9 | 10 | Every link must have a "title" attribute. 11 | 12 | 13 | 14 | Example 15 | ------- 16 | Wrong 17 | ----- 18 | 19 | .. code-block:: html 20 | 21 | Home 22 | 23 | 24 | 25 | Right 26 | ----- 27 | 28 | .. code-block:: html 29 | 30 | Home 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/frameTitlesNotPlaceholder/frameTitlesNotPlaceholder.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | frameTitlesNotPlaceholder 5 | 6 | 7 |
8 | 9 |

This is an iframe.

10 | 11 |
12 |
13 | 14 |

This is an iframe.

15 | 16 |
17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/objectDoesNotFlicker/objectDoesNotFlicker.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | objectDoesNotFlicker 5 | 6 | 7 |
8 |

9 | There is not a real object here. I need an object that does not flicker. 10 |

11 | 12 |
13 | 14 |
15 |

16 | There is not a real object here. I need an object that flickers. 17 |

18 | 19 |
20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /docs/tests/headerH1.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | The header following an h1 is h1 or h2 3 | =============================== 4 | 5 | *Severity code:* Information only 6 | 7 | .. php:class:: headerH1 8 | 9 | 10 | The header following an h1 element should either be an h2 or another h1. 11 | 12 | 13 | 14 | 15 | Users of screen readers often use headers to make sense of the structure of the document, and having headers in the right order can be very helpful. It also helps the document itself to be consistently structured. 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/inputTextValueNotEmpty/inputTextValueNotEmpty.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | inputTextValueNotEmpty 5 | 6 | 7 |
8 |
9 | 10 | 11 | 12 |
13 |
14 |
15 | 16 | 17 | 18 |
19 | 20 | 21 | -------------------------------------------------------------------------------- /docs/tests/documentColorWaiActiveLinkAlgorithim.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | Contrast between active link text and the background must be greater than the WAI ERT color algorithm threshold 3 | =============================== 4 | 5 | Severity code: 6 | 7 | .. php:class:: documentColorWaiActiveLinkAlgorithm 8 | 9 | 10 | The contrast between foreground active link text and the background must be more than the WAI ERT threshold. Learn more about WAI ERT color contrast and how to measure it. 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/liDontUseImageForBullet/liDontUseImageForBullet.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | liDontUseImageForBullet 5 | 6 | 7 |
8 |

9 |

    10 |
  • 11 | This is item one
  • 12 |
13 |

14 |
15 | 16 |
17 |

18 |

    19 |
  • This is item one
  • 20 |
21 |

22 |
23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /docs/tests/documentColorWaiVisitedLinkAlgorithim.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | Contrast between visited link text and the background must be greater than the WAI ERT color algorithm threshold 3 | =============================== 4 | 5 | Severity code: 6 | 7 | .. php:class:: documentColorWaiVisitedLinkAlgorithm 8 | 9 | 10 | The contrast between foreground visited link text and the background must be more than the WAI ERT threshold. Learn more about WAI ERT color contrast and how to measure it. 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/tests/headerH2.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | The header following an h2 is h1, h2 or h3 3 | =============================== 4 | 5 | *Severity code:* Information only 6 | 7 | .. php:class:: headerH2 8 | 9 | 10 | The header following an h2 element should either be an h3, h1 or another h2. 11 | 12 | 13 | 14 | 15 | Users of screen readers often use headers to make sense of the structure of the document, and having headers in the right order can be very helpful. It also helps the document itself to be consistently structured. 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/documentReadingDirection/documentReadingDirection.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | documentReadingDirection 6 | 7 | 8 |
9 |

10 | The title says "פעילות הבינאום, W3C" in Hebrew. 11 |

12 |
13 |
14 | 15 |

16 | The title says "פעילות הבינאום, W3C"in Hebrew. 17 |

18 |
19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/headersHaveText/headersHaveText.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | headersHaveText 5 | 6 | 7 |
8 |

9 |
10 |
11 |

12 | 13 |

14 |
15 |
16 |

This is a correct header

17 |

This header is also OK.

18 |
19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /docs/tests/documentLangNotIdentified.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | The document must have a "lang" attribute 3 | =============================== 4 | 5 | *Severity code:* Severe error 6 | 7 | .. php:class:: documentLangNotIdentified 8 | 9 | 10 | The document should have a default langauge, by setting the "lang" attribute in the html element. 11 | 12 | 13 | 14 | Example 15 | ------- 16 | Wrong 17 | ----- 18 | 19 | .. code-block:: html 20 | 21 | 22 | 23 | 24 | 25 | Right 26 | ----- 27 | 28 | .. code-block:: html 29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /docs/tests/headerH3.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | The header following an h3 is h1, h2, h3 or h4 3 | =============================== 4 | 5 | *Severity code:* Information only 6 | 7 | .. php:class:: headerH3 8 | 9 | 10 | The header following an h3 element should either be an h4, h2, h1 or another h3. 11 | 12 | 13 | 14 | 15 | Users of screen readers often use headers to make sense of the structure of the document, and having headers in the right order can be very helpful. It also helps the document itself to be consistently structured. 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/areaHasAltValue/areaHasAltValue.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | areaHasAltValue 5 | 6 | 7 | 8 | 9 | 10 | reference section 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/textIsNotSmall/textIsNotSmall.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | textIsNotSmall 5 | 10 | 11 | 12 |
13 |

This text is fine.

14 |
15 | 16 |
17 |

This text is too small.

18 |
19 | 20 |
21 |

This text is fine.

22 |
23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /docs/tests/imgShouldNotHaveTitle.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | Images should not have a "title" attribute 3 | =============================== 4 | 5 | *Severity code:* Severe error 6 | 7 | .. php:class:: imgShouldNotHaveTitle 8 | 9 | 10 | Images should not contain a "title" attribute. 11 | 12 | 13 | 14 | Example 15 | ------- 16 | Wrong 17 | ----- 18 | 19 | .. code-block:: html 20 | 21 | My brown dog 22 | 23 | 24 | 25 | Right 26 | ----- 27 | 28 | .. code-block:: html 29 | 30 | My brown dog 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/imgImportantNoSpacerAlt/imgImportantNoSpacerAlt.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | imgImportantNoSpacerAlt 5 | 6 | 7 |
8 |   9 |
10 | 11 |
12 | 13 |
14 | 15 |
16 |   17 |
18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /docs/tests/formErrorMessageHelpsUser.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | Forms offer the user a way to check the results of their form before performing an irrevokable action 3 | =============================== 4 | 5 | *Severity code:* Information only 6 | 7 | .. php:class:: formErrorMessageHelpsUser 8 | 9 | 10 | If the form allows users to perform some irrevokable action, like ordreing a product, ensure that users have the ability to review the contents of the form they submitted first. This is not something that can be checked through automated testing and requires manual confirmation. 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/tests/headerH4.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | The header following an h4 is h1, h2, h3, h4 or h5 3 | =============================== 4 | 5 | *Severity code:* Information only 6 | 7 | .. php:class:: headerH4 8 | 9 | 10 | The header following an h4 element should either be an h5, h3, h2, h1, or another h4. 11 | 12 | 13 | 14 | 15 | Users of screen readers often use headers to make sense of the structure of the document, and having headers in the right order can be very helpful. It also helps the document itself to be consistently structured. 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /docs/tests/objectMustHaveTitle.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | Objects should have a title attribute 3 | =============================== 4 | 5 | *Severity code:* Severe error 6 | 7 | .. php:class:: objectMustHaveTitle 8 | 9 | 10 | All object elements should contain a "title" attribute. 11 | 12 | 13 | 14 | Example 15 | ------- 16 | Wrong 17 | ----- 18 | 19 | .. code-block:: html 20 | 21 | 22 | 23 | 24 | 25 | Right 26 | ----- 27 | 28 | .. code-block:: html 29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/labelDoesNotContainInput/labelDoesNotContainInput.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | labelDoesNotContainInput 5 | 6 | 7 |
8 |
9 | 13 | 14 |
15 | 16 |
17 |
18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /docs/tests/documentHasTitleElement.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | The document should have a title element 3 | =============================== 4 | 5 | *Severity code:* Severe error 6 | 7 | .. php:class:: documentHasTitleElement 8 | 9 | 10 | The document should have a title element. 11 | 12 | 13 | 14 | Example 15 | ------- 16 | Wrong 17 | ----- 18 | 19 | .. code-block:: html 20 | 21 | .... 22 | 23 | 24 | 25 | Right 26 | ----- 27 | 28 | .. code-block:: html 29 | 30 | My Great Web page.... 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /docs/tests/embedMustHaveAltAttribute.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | Embed" elements must have an "alt" attribute 3 | =============================== 4 | 5 | *Severity code:* Severe error 6 | 7 | .. php:class:: embedMustHaveAltAttribute 8 | 9 | 10 | All embed elements must have an "alt" attribute. 11 | 12 | 13 | 14 | Example 15 | ------- 16 | Wrong 17 | ----- 18 | 19 | .. code-block:: html 20 | 21 | 22 | 23 | 24 | 25 | Right 26 | ----- 27 | 28 | .. code-block:: html 29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /docs/tests/framesHaveATitle.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | All "frame" elements should have a "title" attribute 3 | =============================== 4 | 5 | *Severity code:* Severe error 6 | 7 | .. php:class:: framesHaveATitle 8 | 9 | 10 | Each frame elements should have a "title" attribute. 11 | 12 | 13 | 14 | Example 15 | ------- 16 | Wrong 17 | ----- 18 | 19 | .. code-block:: html 20 | 21 | 22 | 23 | 24 | 25 | Right 26 | ----- 27 | 28 | .. code-block:: html 29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /scripts/upperCaseIt.py: -------------------------------------------------------------------------------- 1 | import os 2 | import re 3 | 4 | searchDir = '/Users/jessebeach/code/quailjs/quail/lib/assessments' 5 | exclude = ['.git', 'node_modules','bin'] 6 | os.chdir(searchDir) 7 | 8 | for root, dirs, files in os.walk(searchDir): 9 | dirs[:] = [d for d in dirs if d not in exclude] 10 | for f in files: 11 | if re.match(r'[a-z]', f): 12 | fullPath = os.path.join(root, f) 13 | fullPathLower = os.path.join(root, f[0].upper() + f[1:]) 14 | command = 'git mv --force ' + fullPath + ' ' + fullPathLower 15 | print(command) 16 | os.system(command) 17 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/headerH1/headerH1.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | headerH1 5 | 6 | 7 |
8 | 9 |

The First Heading

10 | 11 |

Here is some demo text.

12 | 13 |

The bad Heading

14 | 15 |

Here is some more demo text.

16 |
17 |
18 | 19 |

The First Heading

20 | 21 |

Here is some demo text.

22 | 23 |

The Second Heading

24 | 25 |

Here is some more demo text.

26 |
27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/objectMustHaveTitle/objectMustHaveTitle.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | objectMustHaveTitle 5 | 6 | 7 |
8 | 9 | The text equivalent for the object should go here. 10 | 11 |
12 | 13 |
14 | 15 | The text equivalent for the object should go here. 16 | 17 |
18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /docs/tests/headerH5.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | The header following an h5 is h6 or any header less than h6 3 | =============================== 4 | 5 | *Severity code:* Information only 6 | 7 | .. php:class:: headerH5 8 | 9 | 10 | The header following an h5 element should either be an h6, h3, h2, h1, or another h5. 11 | 12 | 13 | 14 | 15 | Users of screen readers often use headers to make sense of the structure of the document, and having headers in the right order can be very helpful. It also helps the document itself to be consistently structured. 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /docs/tests/linkUsedForAlternateContent.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | Use a "link" element for alternate content 3 | =============================== 4 | 5 | *Severity code:* Information only 6 | 7 | .. php:class:: linkUsedForAlternateContent 8 | 9 | 10 | Documents which contain things like videos, sound, or other forms of media that are not accessible, should provide a link element with a "rel" attribute of "alternate" in the document header. 11 | 12 | 13 | 14 | Example 15 | ------- 16 | 17 | .. code-block:: html 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /docs/tests/objectMustHaveEmbed.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | Every object should contain an "embed" element 3 | =============================== 4 | 5 | *Severity code:* Severe error 6 | 7 | .. php:class:: objectMustHaveEmbed 8 | 9 | 10 | Every object element must also contain an embed element. 11 | 12 | 13 | 14 | Example 15 | ------- 16 | Wrong 17 | ----- 18 | 19 | .. code-block:: html 20 | 21 | 22 | 23 | 24 | 25 | Right 26 | ----- 27 | 28 | .. code-block:: html 29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /docs/tests/aLinksDontOpenNewWindow.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | Links should not open a new window without warning 3 | =============================== 4 | 5 | *Severity code:* Severe error 6 | 7 | .. php:class:: aLinksDontOpenNewWindow 8 | 9 | 10 | Links which open a new window using the "target" attribute should warn users. 11 | 12 | 13 | 14 | Example 15 | ------- 16 | Wrong 17 | ----- 18 | 19 | .. code-block:: html 20 | 21 | View my page 22 | 23 | 24 | 25 | Right 26 | ----- 27 | 28 | .. code-block:: html 29 | 30 | View my page (opens new window) 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/headerH2/headerH2.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | headerH2 5 | 6 | 7 |
8 | 9 |

The First Heading

10 | 11 |

Here is some demo text.

12 | 13 |

The bad Heading

14 | 15 |

Here is some more demo text.

16 |
17 |
18 | 19 |

The First Heading

20 | 21 |

Here is some demo text.

22 | 23 |

This Heading Is OK

24 | 25 |

Here is some more demo text.

26 |
27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/headerH3/headerH3.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | headerH3 5 | 6 | 7 |
8 | 9 |

The First Heading

10 | 11 |

Here is some demo text.

12 | 13 |
The bad Heading
14 | 15 |

Here is some more demo text.

16 |
17 |
18 | 19 |

The First Heading

20 | 21 |

Here is some demo text.

22 | 23 |

This Heading Is OK

24 | 25 |

Here is some more demo text.

26 |
27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/inputElementsDontHaveAlt/inputElementsDontHaveAlt.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | inputElementsDontHaveAlt 5 | 6 | 7 |
8 |
9 |

10 | 11 |

12 | 13 |
14 | 15 |
16 |
17 |

18 | 19 |

20 | 21 |
22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /docs/tests/documentTitleNotEmpty.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | The document should not have an empty title 3 | =============================== 4 | 5 | *Severity code:* Severe error 6 | 7 | .. php:class:: documentTitleNotEmpty 8 | 9 | 10 | The document should have a title element that is not white space 11 | 12 | 13 | 14 | Example 15 | ------- 16 | Wrong 17 | ----- 18 | 19 | .. code-block:: html 20 | 21 | .... 22 | 23 | 24 | 25 | Right 26 | ----- 27 | 28 | .. code-block:: html 29 | 30 | My Great Web page.... 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /docs/tests/embedMustNotHaveEmptyAlt.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | Embed" elements cannot have an empty "alt" attribute 3 | =============================== 4 | 5 | *Severity code:* Severe error 6 | 7 | .. php:class:: embedMustNotHaveEmptyAlt 8 | 9 | 10 | All embed elements must have an "alt" attribute that is not empty. 11 | 12 | 13 | 14 | Example 15 | ------- 16 | Wrong 17 | ----- 18 | 19 | .. code-block:: html 20 | 21 | 22 | 23 | 24 | 25 | Right 26 | ----- 27 | 28 | .. code-block:: html 29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /docs/tests/iIsNotUsed.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | The "i" (italic) element is not used 3 | =============================== 4 | 5 | *Severity code:* Severe error 6 | 7 | .. php:class:: iIsNotUsed 8 | 9 | 10 | The i (italic) element provides no emphasis for non-sighted readers. Use the em tag instead. 11 | 12 | 13 | 14 | Example 15 | ------- 16 | Wrong 17 | ----- 18 | 19 | .. code-block:: html 20 | 21 |

I think that you should really read this.

22 | 23 | 24 | 25 | Right 26 | ----- 27 | 28 | .. code-block:: html 29 | 30 |

I think that you should really read this.

31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /docs/tests/objectMustHaveValidTitle.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | Objects must not have an empty title attribute 3 | =============================== 4 | 5 | *Severity code:* Severe error 6 | 7 | .. php:class:: objectMustHaveValidTitle 8 | 9 | 10 | All object elements should have a "title" attribute which is not empty. 11 | 12 | 13 | 14 | Example 15 | ------- 16 | Wrong 17 | ----- 18 | 19 | .. code-block:: html 20 | 21 | 22 | 23 | 24 | 25 | Right 26 | ----- 27 | 28 | .. code-block:: html 29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/scriptOnFocusChangeBackgroundOrBorder/scriptOnFocusChangeBackgroundOrBorder.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | scriptOnFocusChangeBackgroundOrBorder 5 | 6 | 7 |
8 | 9 |
10 | 11 |
12 | 13 |
14 | 15 |
16 | 17 |
18 | 19 | 20 | -------------------------------------------------------------------------------- /docs/tests/documentIDsMustBeUnique.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | All element "id" attributes must be unique 3 | =============================== 4 | 5 | *Severity code:* Severe error 6 | 7 | .. php:class:: documentIDsMustBeUnique 8 | 9 | 10 | Element "id" attributes must be unique. 11 | 12 | 13 | 14 | Example 15 | ------- 16 | Wrong 17 | ----- 18 | 19 | .. code-block:: html 20 | 21 |

First Paragraph

Second Paragraph

22 | 23 | 24 | 25 | Right 26 | ----- 27 | 28 | .. code-block:: html 29 | 30 |

First Paragraph

Second Paragraph

31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/aLinksAreSeparatedByPrintableCharacters/aLinksAreSeparatedByPrintableCharacters.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | aLinksAreSeparatedByPrintableCharacters 5 | 6 | 7 |
8 | dogs | cats | birds | snakes 9 |
10 | 11 |
12 | dogs cats birds snakes 13 |
14 | 15 | 16 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/blockquoteUseForQuotations/blockquoteUseForQuotations.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | blockquoteUseForQuotations 5 | 6 | 7 |
8 |
9 |

"This is a paragraph that is a quote inside a larger blockquote."

10 |
11 |
12 | 13 |
14 |

This is a paragraph that is not a quote.

15 |
16 | 17 |
18 |

"This entire paragraph is a single quote."

19 |
20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /docs/tests/boldIsNotUsed.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | The "b" (bold) element is not used 3 | =============================== 4 | 5 | *Severity code:* Severe error 6 | 7 | .. php:class:: boldIsNotUsed 8 | 9 | 10 | The b (bold) element provides no emphasis for non-sighted readers. Use the strong tag instead. 11 | 12 | 13 | 14 | Example 15 | ------- 16 | Wrong 17 | ----- 18 | 19 | .. code-block:: html 20 | 21 |

I think that you should really read this.

22 | 23 | 24 | 25 | Right 26 | ----- 27 | 28 | .. code-block:: html 29 | 30 |

I think that you should really read this.

31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/headerH4/headerH4.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | headerH4 5 | 6 | 7 |
8 | 9 |

The First Heading

10 | 11 |
The Second Heading
12 |
13 |
14 | 15 |

The First Heading

16 |

The first paragraph

17 | 18 |

The Second Heading

19 |
20 |
21 | 22 |
The First Heading
23 |

The first paragraph

24 | 25 |
The Second Heading
26 |
27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /docs/tests/tableLayoutHasNoCaption.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | All tables used for layout have no "caption" element 3 | =============================== 4 | 5 | *Severity code:* Severe error 6 | 7 | .. php:class:: tableLayoutHasNoCaption 8 | 9 | 10 | If a table contains no data, and is used simply for layout, then it should not contain a caption element. 11 | 12 | 13 | 14 | Example 15 | ------- 16 | Wrong 17 | ----- 18 | 19 | .. code-block:: html 20 | 21 |
... 22 | 23 | 24 | 25 | Right 26 | ----- 27 | 28 | .. code-block:: html 29 | 30 |
The layout of this page, broken into two areas.
... 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /docs/tests/documentAbbrIsUsed.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | Abbreviations must be marked with an "abbr" element 3 | =============================== 4 | 5 | *Severity code:* Possible error 6 | 7 | .. php:class:: documentAbbrIsUsed 8 | 9 | 10 | Abbreviations should be marked with an abbr element, at least once on the page for each abbreviation. 11 | 12 | 13 | 14 | Example 15 | ------- 16 | Wrong 17 | ----- 18 | 19 | .. code-block:: html 20 | 21 |

I work for the CIA.

22 | 23 | 24 | 25 | Right 26 | ----- 27 | 28 | .. code-block:: html 29 | 30 |

I work for the CIA.

31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /docs/tests/documentLangIsISO639Standard.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | The document's language attribute should be a standard code 3 | =============================== 4 | 5 | *Severity code:* Severe error 6 | 7 | .. php:class:: documentLangIsISO639Standard 8 | 9 | 10 | The document should have a default langauge, and that language should use the valid 2 or 3 letter language code according to ISO specification 639. 11 | 12 | 13 | 14 | Example 15 | ------- 16 | Wrong 17 | ----- 18 | 19 | .. code-block:: html 20 | 21 | 22 | 23 | 24 | 25 | Right 26 | ----- 27 | 28 | .. code-block:: html 29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /docs/tests/imgNonDecorativeHasAlt.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | Any non-decorative images should have a non-empty "alt" attribute 3 | =============================== 4 | 5 | *Severity code:* Possible error 6 | 7 | .. php:class:: imgNonDecorativeHasAlt 8 | 9 | 10 | Any image that is not used decorativey or which is purely for layout purposes cannot have an empty "alt" attribute. 11 | 12 | 13 | 14 | Example 15 | ------- 16 | Wrong 17 | ----- 18 | 19 | .. code-block:: html 20 | 21 | 22 | 23 | 24 | 25 | Right 26 | ----- 27 | 28 | .. code-block:: html 29 | 30 | A photograph of a dog 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /docs/tests/inputImageHasAlt.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | All "input" elements with a type of "image" must have an "alt" attribute 3 | =============================== 4 | 5 | *Severity code:* Severe error 6 | 7 | .. php:class:: inputImageHasAlt 8 | 9 | 10 | All input elements with a type of "image" should have an "alt" attribute. 11 | 12 | 13 | 14 | Example 15 | ------- 16 | Wrong 17 | ----- 18 | 19 | .. code-block:: html 20 | 21 | 22 | 23 | 24 | 25 | Right 26 | ----- 27 | 28 | .. code-block:: html 29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/skipToContentLinkProvided/skipToContentLinkProvided.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | skipToContentLinkProvided 5 | 16 | 17 | 18 |
19 | Skip to content 20 |
21 | This is the main page content. 22 |
23 |
24 | 25 | 26 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/animatedGifMayBePresent/animatedGifMayBePresent.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | animatedGifMayBePresent 5 | 6 | 7 |
8 | eat at Joes 9 |
10 | 11 |
12 | eat at Joes 13 |
14 | 15 |
16 | A brown and black cat named Rex. 17 |
18 | 19 | 20 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/documentAbbrIsUsed/documentAbbrIsUsed.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | documentAbbrIsUsed 5 | 6 | 7 |
8 |

Everyone loves QUAIL.

9 |
10 | 11 |
12 |

13 | Everyone loves QUAIL. 14 |

15 |
16 | 17 |
18 |

This might be A acronym.

19 |
20 | 21 |
22 |

hello

23 |
24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/blockquoteNotUsedForIndentation/blockquoteNotUsedForIndentation.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | blockquoteNotUsedForIndentation 5 | 6 | 7 | 8 |
9 |
Ideas are like rabbits. You get a couple and learn how to handle them, and pretty soon you have a dozen.
10 |
11 | 12 |
13 |
Ideas are like rabbits. You get a couple and learn how to handle them, and pretty soon you have a dozen.
14 |
15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/imageMapServerSide/imageMapServerSide.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | imageMapServerSide 5 | 6 | 7 |
8 |

9 | map of the country 10 |

11 |
12 | 13 |
14 |

15 | map of the country 16 |

17 |

18 | East Coast | 19 | Central | 20 | West Coast 21 |

22 |
23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/inputImageAltNotRedundant/inputImageAltNotRedundant.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | inputImageAltNotRedundant 5 | 6 | 7 |
8 |
9 | 10 | 11 |
12 | 13 |
14 |
15 | 16 | 17 |
18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/skipToContentLinkProvided/skipToContentLinkProvided-fail.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | skipToContentLinkProvided 5 | 16 | 17 | 18 |
19 | Somewhere else 20 |
21 | This is the main page content. 22 |
23 |
24 | 25 | 26 | -------------------------------------------------------------------------------- /docs/tests/marqueeIsNotUsed.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | The "marquee" tag should not be used 3 | =============================== 4 | 5 | *Severity code:* Severe error 6 | 7 | .. php:class:: marqueeIsNotUsed 8 | 9 | 10 | The marquee element is difficult for users to read and is not a standard HTML element. Try to find another way to convey the importance of this text. 11 | 12 | 13 | 14 | Example 15 | ------- 16 | Wrong 17 | ----- 18 | 19 | .. code-block:: html 20 | 21 | This is really hard to read 22 | 23 | 24 | 25 | Right 26 | ----- 27 | 28 | .. code-block:: html 29 | 30 | This is much easier to read 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /docs/tests/objectShouldHaveLongDescription.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | An object might require a long description 3 | =============================== 4 | 5 | *Severity code:* Information only 6 | 7 | .. php:class:: objectShouldHaveLongDescription 8 | 9 | 10 | Objects might require a long description, especially if their content is complicated. 11 | 12 | 13 | 14 | Example 15 | ------- 16 | Wrong 17 | ----- 18 | 19 | .. code-block:: html 20 | 21 | 22 | 23 | 24 | 25 | Right 26 | ----- 27 | 28 | .. code-block:: html 29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /src/assessments/TagsAreNestedCorrectly.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Not yet implemented. 3 | */ 4 | var TagsAreNestedCorrectly = { 5 | run: function () { 6 | return; 7 | }, 8 | 9 | meta: { 10 | testability: 1, 11 | title: { 12 | en: 'All tags should be nested correctly', 13 | nl: 'Alle tags moeten juist genest worden' 14 | }, 15 | description: { 16 | en: '', 17 | nl: '' 18 | }, 19 | guidelines: { 20 | wcag: { 21 | '4.1.1': { 22 | techniques: [ 23 | 'H74' 24 | ] 25 | } 26 | } 27 | }, 28 | tags: [ 29 | 'html' 30 | ] 31 | } 32 | }; 33 | module.exports = TagsAreNestedCorrectly; 34 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/appletsDoNotFlicker/appletsDoNotFlicker.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | appletsDoNotFlicker 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/scriptOnmouseoutHasOnmouseblur/scriptOnmouseoutHasOnmouseblur.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | scriptOnmouseoutHasOnmouseblur 5 | 6 | 7 |
8 | 11 | 12 |
13 |
14 | 15 |
16 | 17 | 18 | -------------------------------------------------------------------------------- /docs/tests/doctypeProvided.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | The document should contain a valid "doctype" declaration 3 | =============================== 4 | 5 | *Severity code:* Severe error 6 | 7 | .. php:class:: doctypeProvided 8 | 9 | 10 | Each document must contain a valid doctype declaration.. 11 | 12 | 13 | 14 | Example 15 | ------- 16 | Wrong 17 | ----- 18 | 19 | .. code-block:: html 20 | 21 | 22 | 23 | 24 | 25 | Right 26 | ----- 27 | 28 | .. code-block:: html 29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /docs/tests/documentAcronymsHaveElement.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | Acronyms must be marked with an "acronym" element 3 | =============================== 4 | 5 | *Severity code:* Possible error 6 | 7 | .. php:class:: documentAcronymsHaveElement 8 | 9 | 10 | Abbreviations should be marked with an acronym element, at least once on the page for each abbreviation. 11 | 12 | 13 | 14 | Example 15 | ------- 16 | Wrong 17 | ----- 18 | 19 | .. code-block:: html 20 | 21 |

I work for the CIA.

22 | 23 | 24 | 25 | Right 26 | ----- 27 | 28 | .. code-block:: html 29 | 30 |

I work for the CIA.

31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/skipToContentLinkProvided/skipToContentLinkProvided-pass-2.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | skipToContentLinkProvided 5 | 16 | 17 | 18 |
19 | Skip to content 20 |
21 | This is the main page content. 22 |
23 |
24 | 25 | 26 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/appletUIMustBeAccessible/appletUIMustBeAccessible.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | appletUIMustBeAccessible 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/imgAltIsTooLong/imgAltIsTooLong.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | imgAltIsTooLong 5 | 6 | 7 |
8 |

9 | A picture of Rex the cat with some extra text. This is very long alt text. In fact, it was much much too long for this image. Sort alt text would be much better and this alt text should be shortened. 10 |

11 |
12 | 13 |
14 |

15 | photo of rex the cat 16 |

17 |
18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/imgHasAlt/imgHasAlt.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | imgHasAlt 5 | 6 | 7 |
8 | 9 |
10 | 11 |
12 | My cat 13 |
14 | 15 |
16 | 17 |
18 | 19 |
20 |
21 | 22 |
23 |
24 | 25 | 26 | -------------------------------------------------------------------------------- /test/assessmentSpecs/specs/skipToContentLinkProvided/skipToContentLinkProvided-fail-2.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | skipToContentLinkProvided 5 | 16 | 17 | 18 |
19 | 20 |
21 | This is the main page content. 22 |
23 |
24 | 25 | 26 | -------------------------------------------------------------------------------- /docs/tests/aTitleDescribesDestination.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | The title attribute of all source a (anchor) elements describes the link destination. 3 | =============================== 4 | 5 | *Severity code:* Information only 6 | 7 | .. php:class:: aTitleDescribesDestination 8 | 9 | 10 | Every link must have a "title" attribute which describes the purpose or destination of the link. 11 | 12 | 13 | 14 | Example 15 | ------- 16 | Wrong 17 | ----- 18 | 19 | .. code-block:: html 20 | 21 | Home 22 | 23 | 24 | 25 | Right 26 | ----- 27 | 28 | .. code-block:: html 29 | 30 | Home 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /docs/tests/documentTitleIsNotPlaceholder.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | The document title should not be placeholder text 3 | =============================== 4 | 5 | *Severity code:* Severe error 6 | 7 | .. php:class:: documentTitleIsNotPlaceholder 8 | 9 | 10 | The document title should not be wasted placeholder text which does not describe the page. 11 | 12 | 13 | 14 | Example 15 | ------- 16 | Wrong 17 | ----- 18 | 19 | .. code-block:: html 20 | 21 | title.... 22 | 23 | 24 | 25 | Right 26 | ----- 27 | 28 | .. code-block:: html 29 | 30 | All about salamanders.... 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /docs/tests/scriptInBodyMustHaveNoscript.rst: -------------------------------------------------------------------------------- 1 | =============================== 2 | Scripts should have a corresponding "noscript" element 3 | =============================== 4 | 5 | Severity code: 0 6 | 7 | .. php:class:: scriptInBodyMustHaveNoscript 8 | 9 | 10 | Scripts should be followed by a noscripts element to guide the user to content in an alternative way. 11 | 12 | 13 | 14 | Example 15 | ------- 16 | Wrong 17 | ----- 18 | 19 | .. code-block:: html 20 | 21 | 22 | 23 | 24 | 25 | Right 26 | ----- 27 | 28 | .. code-block:: html 29 | 30 |