diff --git a/.env b/.env index e750bf8d..57b46857 100644 --- a/.env +++ b/.env @@ -1,3 +1,5 @@ REACT_APP_AMP_DEV_SERVER=http://10.55.37.16:/api/amp -REACT_APP_AMP_PPR_SERVER=https://preprodaccessmonitor.acessibilidade.gov.pt/api/amp -REACT_APP_AMP_PRD_SERVER=https://accessmonitor.acessibilidade.gov.pt/api/amp \ No newline at end of file +REACT_APP_AMP_PROD_SERVER= + +REACT_APP_DEV_SERVER_URL="/amp/" +REACT_APP_PROD_SERVER_URL="/" \ No newline at end of file diff --git a/src/App.jsx b/src/App.jsx index 5de0386d..997bd83d 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -13,35 +13,39 @@ import Detail from "./pages/Details"; import PageCode from "./pages/PageCode"; import Error from "./pages/Error"; +export const pathURL = process.env.REACT_APP_DEV_SERVER_URL; +//export const pathURL = process.env.REACT_APP_PROD_SERVER_URL; + export default function App() { const [allData, setAllData] = useState([]); const [setEle] = useState([]); + return ( - - } /> + + } /> } /> } /> } /> {/* Outras rotas */} {/* Error page needs to be last */} - } /> + } /> diff --git a/src/pages/Details/index.js b/src/pages/Details/index.js index fcb11238..653b494c 100644 --- a/src/pages/Details/index.js +++ b/src/pages/Details/index.js @@ -7,13 +7,14 @@ import { useTranslation } from "react-i18next"; import { ThemeContext } from "../../context/ThemeContext"; import { Breadcrumb, Icon, LoadingComponent } from "ama-design-system"; -import { processData } from "../../services"; import { api } from "../../config/api"; import { useParams, useNavigate, useLocation } from "react-router-dom"; import { tot } from '../Resume' +import { pathURL } from "../../App"; + export let tot2; export default function Details({ allData, setAllData }) { @@ -29,7 +30,7 @@ export default function Details({ allData, setAllData }) { const handleGoBack = () => { const test = location.pathname.split("/") - navigate(`/amp/results/${test[3]}`); + navigate(`${pathURL}results/${test[3]}`); }; const url = allData?.rawUrl; @@ -39,9 +40,9 @@ export default function Details({ allData, setAllData }) { const dataBreadCrumb = [ { title: "Acessibilidade.gov.pt", - href: "/", + href: "https://www.acessibilidade.gov.pt/", }, - { title: "Access Monitor", href: "/amp" }, + { title: "Access Monitor", href: `${pathURL}` }, { title: url || "html", href: "", @@ -57,13 +58,8 @@ export default function Details({ allData, setAllData }) { return url.replace(/^(https?:\/\/)?(www\.)?/, ""); }; - function getDetails() { - const response = getTestResults(details, allData, tot); - setDataTable(response); - } - - function getDetailsData(data) { - const response = getTestResults(details, data, tot2); + function getDetailsData(data, tt) { + const response = getTestResults(details, data, tt); setDataTable(response); } @@ -73,7 +69,7 @@ export default function Details({ allData, setAllData }) { try { if(allData && allData.tot && allData.elems) { - getDetails(); + getDetailsData(allData, tot); setLoadingProgress(false); return; } @@ -86,7 +82,7 @@ export default function Details({ allData, setAllData }) { const parsedStoredData = JSON.parse(storedData); setAllData(parsedStoredData.result?.data); tot2 = parsedStoredData?.result?.data?.tot; - getDetailsData(parsedStoredData.result?.data); + getDetailsData(parsedStoredData.result?.data, tot2); setLoadingProgress(false); return; } @@ -95,8 +91,8 @@ export default function Details({ allData, setAllData }) { localStorage.setItem("evaluation", JSON.stringify(response.data)); localStorage.setItem("evaluationUrl", currentUrl); } - tot2 = response?.data?.result?.data.tot; + tot2 = response?.data?.result?.data.tot; setAllData(response.data?.result?.data); getDetailsData(response.data?.result?.data); setLoadingProgress(false); @@ -109,10 +105,6 @@ export default function Details({ allData, setAllData }) { fetchData(); }, []); - // useEffect(() => { - // getDetailsData(allData); - // }, [allData]); - let iconName; if (dataTable?.result === "R") { diff --git a/src/pages/Error/index.js b/src/pages/Error/index.js index 80c88bc5..4bad7598 100644 --- a/src/pages/Error/index.js +++ b/src/pages/Error/index.js @@ -4,6 +4,8 @@ import { ThemeContext } from "../../context/ThemeContext"; import { Icon } from 'ama-design-system' import "./styles.css"; +import { pathURL } from "../../App"; + export default function Resume() { const { t } = useTranslation(); @@ -14,7 +16,7 @@ export default function Resume() {

{t("MISC._404.title")}

{t("MISC._404.description")}

- + {t("MISC._404.homepage")} diff --git a/src/pages/Home/_components/insert-html.js b/src/pages/Home/_components/insert-html.js index 69d24ad4..3bb2d87e 100644 --- a/src/pages/Home/_components/insert-html.js +++ b/src/pages/Home/_components/insert-html.js @@ -6,6 +6,8 @@ import { ThemeContext } from "../../../context/ThemeContext"; import { TextArea, Button, Icon } from 'ama-design-system' +import { pathURL } from "../../../App"; + export function InsertHtml() { const { t } = useTranslation(); const { theme } = useContext(ThemeContext); @@ -15,7 +17,7 @@ export function InsertHtml() { async function handleSubmit() { try { const type = "html"; - navigate(`/amp/results/${type}`, { + navigate(`${pathURL}results/${type}`, { state: { contentHtml: htmlValue }, }); } catch (error) { diff --git a/src/pages/Home/_components/insert-upload-html.js b/src/pages/Home/_components/insert-upload-html.js index 043a1cd4..298c7fec 100644 --- a/src/pages/Home/_components/insert-upload-html.js +++ b/src/pages/Home/_components/insert-upload-html.js @@ -7,6 +7,8 @@ import { ThemeContext } from "../../../context/ThemeContext"; import { Button, Icon } from 'ama-design-system' +import { pathURL } from "../../../App"; + export function InsertHtmlUpload() { const { t } = useTranslation(); const { theme } = useContext(ThemeContext); @@ -40,7 +42,7 @@ export function InsertHtmlUpload() { async function handleSubmit() { try { const type = "html"; - navigate(`/amp/results/${type}`, { + navigate(`${pathURL}results/${type}`, { state: { contentHtml: file }, }); } catch (error) { diff --git a/src/pages/Home/_components/insert-url.js b/src/pages/Home/_components/insert-url.js index 859f2608..510293b6 100644 --- a/src/pages/Home/_components/insert-url.js +++ b/src/pages/Home/_components/insert-url.js @@ -9,6 +9,8 @@ import { ThemeContext } from "../../../context/ThemeContext"; import { Button, Icon, Input } from 'ama-design-system' +import { pathURL } from "../../../App"; + export function InsertUrl() { const [url, setURL] = useState(""); const [error, setError] = useState(null); @@ -25,7 +27,7 @@ export function InsertUrl() { const handleSubmit = () => { if (!error) { const encodedURL = encodeURIComponent(url); - navigate(`/amp/results/${encodedURL}`); + navigate(`${pathURL}results/${encodedURL}`); } }; diff --git a/src/pages/Home/index.js b/src/pages/Home/index.js index 00615a47..dcee1d70 100644 --- a/src/pages/Home/index.js +++ b/src/pages/Home/index.js @@ -9,6 +9,8 @@ import { Breadcrumb, Tabs } from "ama-design-system"; import { useTranslation } from "react-i18next"; +import { pathURL } from "../../App"; + export default function Home({ changeState }) { const { t } = useTranslation(); @@ -35,13 +37,13 @@ export default function Home({ changeState }) { title: "Acessibilidade.gov.pt", href: "https://www.acessibilidade.gov.pt/", }, - { title: "Access Monitor", href: "/amp" }, + { title: "Access Monitor", href: `${pathURL}` }, ]; const { theme } = useContext(ThemeContext); const main_content_home = theme === "light" ? "" : "main_content_home"; const imgUrl = - theme === "light" ? "/amp/img/verify.svg" : "/amp/img/verify-dark.svg"; + theme === "light" ? `${pathURL}img/verify.svg` : `${pathURL}img/verify-dark.svg`; return ( <> diff --git a/src/pages/Layout/index.js b/src/pages/Layout/index.js index d31474e6..ea9b783c 100644 --- a/src/pages/Layout/index.js +++ b/src/pages/Layout/index.js @@ -5,6 +5,8 @@ import { useLocation } from 'react-router-dom' import "./styles.css"; import { useTranslation } from "react-i18next"; +import { pathURL } from "../../App"; + export default function Layout({ children }) { const { theme, toggleTheme } = useContext(ThemeContext); const location = useLocation() @@ -26,13 +28,13 @@ export default function Layout({ children }) { <>
} - onClick={() => navigate("/amp")} + onClick={() => navigate(`${pathURL}`)} />
diff --git a/src/pages/PageCode/index.js b/src/pages/PageCode/index.js index 09212423..d39956b2 100644 --- a/src/pages/PageCode/index.js +++ b/src/pages/PageCode/index.js @@ -11,7 +11,7 @@ import { ThemeContext } from "../../context/ThemeContext"; import { downloadCSV } from "../../utils/utils"; -export let tot; +import { pathURL } from "../../App"; export default function Resume() { const location = useLocation(); @@ -33,7 +33,7 @@ export default function Resume() { const handleGoBack = () => { const test = location.pathname.split("/") - navigate(`/amp/results/${test[3]}`); + navigate(`${pathURL}results/${test[3]}`); }; const removeProtocol = (url) => { @@ -62,8 +62,6 @@ export default function Resume() { setDataProcess(processData(parsedStoredData?.result?.data?.tot)); setPageCode(parsedStoredData?.result?.pagecode || "html"); setLoadingProgress(false); - - tot = parsedStoredData?.result?.data?.tot; return; } const response = await api.get(`/eval/${currentUrl}`) @@ -71,7 +69,7 @@ export default function Resume() { localStorage.setItem("evaluation", JSON.stringify(response.data)); localStorage.setItem("evaluationUrl", currentUrl); } - tot = response?.data?.result?.data.tot; + setOriginalData(response.data); setDataProcess(processData(response.data?.result?.data?.tot)); setPageCode(response.data?.result?.pagecode || "html"); @@ -90,7 +88,7 @@ export default function Resume() { title: "Acessibilidade.gov.pt", href: "https://www.acessibilidade.gov.pt/", }, - { title: "Access Monitor", href: "/amp" }, + { title: "Access Monitor", href: `${pathURL}` }, { title: dataProcess?.metadata?.url || "html", href: "", diff --git a/src/pages/Resume/_components/buttons-revalidation.js b/src/pages/Resume/_components/buttons-revalidation.js index 03e09ed9..5949927c 100644 --- a/src/pages/Resume/_components/buttons-revalidation.js +++ b/src/pages/Resume/_components/buttons-revalidation.js @@ -5,6 +5,8 @@ import { useNavigate } from "react-router-dom"; import { useState } from "react"; import "./styles.css"; +import { pathURL } from "../../../App"; + export function ButtonsActions({ reRequest, seeCode, @@ -29,7 +31,7 @@ export function ButtonsActions({ size="md" text={t("HEADER.evaluate_new_page")} iconRight={} - onClick={() => navigate("/amp")} + onClick={() => navigate(`${pathURL}`)} />
@@ -95,7 +97,7 @@ export function ButtonsActions({ size="md" text={t("HEADER.evaluate_new_page")} iconRight={} - onClick={() => navigate("/amp")} + onClick={() => navigate(`${pathURL}`)} />
diff --git a/src/pages/Resume/index.js b/src/pages/Resume/index.js index 86b810dc..1eeff255 100644 --- a/src/pages/Resume/index.js +++ b/src/pages/Resume/index.js @@ -12,6 +12,8 @@ import { ThemeContext } from "../../context/ThemeContext"; import { optionForAccordion, callbackImgT } from "./utils"; import "./styles.css"; +import { pathURL } from "../../App"; + export let tot; export default function Resume({ setAllData, setEle }) { @@ -77,7 +79,7 @@ export default function Resume({ setAllData, setEle }) { } catch (error) { console.error("Erro", error); setLoadingProgress(false); - navigate("/amp/error") + navigate(`${pathURL}error`) } }; @@ -88,26 +90,26 @@ export default function Resume({ setAllData, setEle }) { if (content === "html") { const currentURL = window.location.pathname + window.location.search; - if (`/amp/results/${content}` === currentURL) { + if (`${pathURL}results/${content}` === currentURL) { window.location.href = currentURL; } else { - navigate(`/amp/results/${content}`, { state: { contentHtml } }); + navigate(`${pathURL}results/${content}`, { state: { contentHtml } }); } } else { const encodedURL = encodeURIComponent(content); const currentURL = window.location.pathname + window.location.search; - if (`/amp/results/${encodedURL}` === currentURL) { + if (`${pathURL}results/${encodedURL}` === currentURL) { window.location.href = currentURL; } else { - navigate(`/amp/results/${encodedURL}`); + navigate(`${pathURL}results/${encodedURL}`); } } }; const seeCode = () => { const encodedURL = encodeURIComponent(content); - navigate(`/amp/results/${encodedURL}/code`, { + navigate(`${pathURL}results/${encodedURL}/code`, { state: { content: dataProcess, original: originalData, @@ -122,10 +124,10 @@ export default function Resume({ setAllData, setEle }) { if (type === "") { const content = "html"; - navigate(`/amp/results/${content}/${ele}`); + navigate(`${pathURL}results/${content}/${ele}`); } else { const encodedURL = encodeURIComponent(allData?.rawUrl); - navigate(`/amp/results/${encodedURL}/${ele}`); + navigate(`${pathURL}results/${encodedURL}/${ele}`); } } @@ -134,7 +136,7 @@ export default function Resume({ setAllData, setEle }) { title: "Acessibilidade.gov.pt", href: "https://www.acessibilidade.gov.pt/", }, - { title: "Access Monitor", href: "/amp" }, + { title: "Access Monitor", href: `${pathURL}` }, { title: dataProcess?.metadata?.url || "html", href: dataProcess?.metadata?.url, diff --git a/src/routes/index.js b/src/routes/index.js deleted file mode 100644 index 8fa875e3..00000000 --- a/src/routes/index.js +++ /dev/null @@ -1,20 +0,0 @@ -import { Routes, Route } from "react-router-dom"; - -import Home from "../pages/Home"; -import Resume from "../pages/Resume"; -import Details from "../pages/Details"; -import PageCode from "../pages/PageCode"; -import Error from "../pages/Error"; - -export function RoutesConfig() { - return ( - - } /> - } /> - } /> - } /> - {/* } /> */} - } /> - - ); -} diff --git a/src/services/index.js b/src/services/index.js index 14194921..a496ddd2 100644 --- a/src/services/index.js +++ b/src/services/index.js @@ -3,7 +3,6 @@ import scs from "../lib/scs"; import tests from "../lib/tests"; import tests_colors from "../lib/tests_colors"; -import { tot } from "../pages/Resume"; import { refWebsite, testView } from "../pages/Resume/utils"; import { convertBytes } from "../utils/utils"; @@ -132,24 +131,24 @@ export function processData(tot) { return datax; } -export function getTestResults(test, data, totPassed) { +export function getTestResults(test, data, tot) { const { nodes } = data; const allNodes = nodes; const ele = test; - return getElements(allNodes, ele, totPassed); + return getElements(allNodes, ele, tot); } -export function getElements(allNodes, ele, totPassed) { +export function getElements(allNodes, ele, tot) { // const ead = processData(tot); - const dataTransform = processData(totPassed); + const dataTransform = processData(tot); if (ele === "form") { ele = "formSubmitNo"; } - const elements = getElementsList(allNodes && allNodes[ele], totPassed); + const elements = getElementsList(allNodes && allNodes[ele], tot); let result = "G"; const results = dataTransform?.results.map((r) => r.msg); @@ -185,7 +184,7 @@ export function getTagName(element) { return name; } -export function fixCode(code, totPassed) { +export function fixCode(code, tot) { code = code.replace(/_cssrules="true"/g, ""); code = code.replace(/_documentselector="undefined"/g, ""); @@ -209,10 +208,10 @@ export function fixCode(code, totPassed) { index = code.indexOf('_selector="'); } - return fixeSrcAttribute(code, totPassed); + return fixeSrcAttribute(code, tot); } -export function getElementsList(nodes, totPassed) { +export function getElementsList(nodes, tot) { const elements = new Array(); for (const node of nodes || []) { if (node.elements) { @@ -225,8 +224,8 @@ export function getElementsList(nodes, totPassed) { ? element.attributes : ele === "title" ? this.evaluation.processed.metadata.title - : fixCode(element.htmlCode, totPassed), - showCode: ele === "style" ? undefined : fixCode(element.htmlCode, totPassed), + : fixCode(element.htmlCode, tot), + showCode: ele === "style" ? undefined : fixCode(element.htmlCode, tot), pointer: element.pointer, }); } @@ -234,8 +233,8 @@ export function getElementsList(nodes, totPassed) { const ele = getTagName(node); elements.push({ ele, - code: ele === "style" ? node.attributes : fixCode(node.htmlCode, totPassed), - showCode: ele === "style" ? undefined : fixCode(node.htmlCode, totPassed), + code: ele === "style" ? node.attributes : fixCode(node.htmlCode, tot), + showCode: ele === "style" ? undefined : fixCode(node.htmlCode, tot), pointer: node.pointer, }); } @@ -244,8 +243,8 @@ export function getElementsList(nodes, totPassed) { return elements; } -function fixeSrcAttribute(code, totPassed) { - const ead = processData(totPassed); +function fixeSrcAttribute(code, tot) { + const ead = processData(tot); if (code.startsWith("obrigatório", - "message_close": "Fechar", - "unexpected_error": "Ocorreu um erro inesperado. Por favor tente aceder mais tarde.", - "error_contact": "Se o problema persistir, contacte-nos...", - "go_to_top": "Ir para o topo", - "_404": { - "title": "Erro 404", - "description": "A página que tentou aceder não existe.", - "homepage": "Voltar para a página inicial" - }, - "messages": { - "data_error": "Ocorreu um erro ao obter os dados", - "data_table_error": "Ocorreu um erro ao tentar carregar a tabela de dados" - } - }, - "ELEMS": { - "imgAlt": "Imagens com texto alternativo preenchido", - "imgAltNo": "Imagens sem equivalente alternativo em texto", - "imgAltNull": "Imagens com alt vazio", - "imgAltNot": "Imagens com um texto alternativo incorrecto", - "imgAltLong": "Imagens com um atributo alt longo", - "areaAltYes": "Áreas de mapas de imagem com alt", - "areaAltNo": "Áreas de mapas de imagem sem alt", - "inpImgAltYes": "Botões gráficos com alt", - "inpImgAltNo": "Botões gráficos sem alt", - "a": "Página sem links", - "aImgAltNo": "Links em que o único conteúdo é uma imagem com alt vazio ou sem legenda", - "aTitleMatch": "Links com o mesmo texto afixado no conteúdo e no atributo title", - "aSameText": "Grupos de links com o mesmo texto que apontam destinos diferentes", - "aAdjacentSame": "Links adjacentes que nos conduzem a um mesmo destino", - "aSkipFirst": "Link para saltar para o conteúdo principal", - "aSkipFirstNo": "Link que não salta para o conteúdo principal", - "aSkipNo": "Sem links para contornar blocos de conteúdo", - "aSkip": "Links para contornar blocos de conteúdo", - "hxNone": "Sem cabeçalhos (h1 - h6)", - "hx": "Cabeçalhos (h1 - h6)", - "h1": "Sem cabeçalho principal da página (h1)", - "hxSkip": "Cabeçalhos com salto(s) de nivel hierárquico incorrectos", - "hxNo": "Cabeçalhos (h1 ~ h6) sem conteúdo descritivo", - "liNoList": "Itens de lista utilizados fora das listas", - "brSec": "Sequência de elementos br", - "fieldNoForm": "Elementos fieldset usados fora de um formulário", - "fieldLegNo": "Elementos fieldset sem descrição", - "labelPosNo": "Elementos label que não estão visíveis ou estão posicionados incorretamente", - "inputLabel": "Controlos de formulário com nome acessível", - "inputLabelNo": "Controlos de formulário sem um nome acessível", - "inputIdTitleNo": "Controlos de formulário sem etiquetas (label) associadas e sem atributo title", - "focusBlur": "Scripts para remover o foco", - "inputAltNo": "Elementos input com atributo alt", - "formSubmit": "Formulários com botão de envio", - "formSubmitNo": "Formulários sem o botão de envio", - "tableDataCaption": "Tabelas de dados sem o elemento caption", - "tableCaptionSummary": "Tabelas com o mesmo texto no elemento caption e no atributo summary", - "tableLayoutCaption": "Tabelas sem células de cabeçalhos, mas com o elemento caption", - "tableComplexError": "Tabelas de dados complexas sem o atributo headers nas células de dados", - "scopeNo": "Valores inválidos para o atributo scope", - "tableLayout": "Tabelas sem células de cabeçalhos (i.e. elementos th)", - "tableNested": "Tabelas encadeadas", - "iframeTitleNo": "Elementos iframe sem title", - "frameTitleNo": "Elementos frame sem títle", - "newWinOnLoad": "Nova janela assim que a página é carregada", - "abbrNo": "Elementos abbr ou acronym sem definição", - "lineHeightNo": "Espaçamento entre linhas incorrecto", - "justifiedTxt": "Texto justificado com atributos (X)HTML", - "justifiedCss": "Texto justificado com CSS", - "fontAbsVal": "Tamanhos de letra definidos em unidades de medida absolutos", - "layoutFixed": "Elementos com valores absolutos na propriedade \"width\" da CSS", - "valueAbsCss": "Unidades de medida absolutas nas CSS", - "valueRelCss": "Unidades de medida relativas em CSS", - "valueAbsHtml": "Unidades de medida absolutas em (X)HTML", - "valueRelHtml": "Unidades de medida relativas em (X)HTML", - "colorContrast": "Combinações de cor com um rácio de contraste inferior a 4.5:1 para texto normal ou 3:1 para texto grande", - "colorFgBgNo": "Regras de CSS em que não se especifica simultaneamente a cor de fundo e cor da letra", - "cssBlink": "Propriedade de CSS text-decoration com valor blink", - "ehandBoth": "Manipuladores de eventos redundantes", - "ehandBothNo": "Manipuladores de eventos não redundantes", - "ehandTagNo": "Eventos associados a elementos não interactivos", - "w3cValidatorErrorsNo": "Sem erros de validação (X)HTML", - "w3cValidatorErrors": "Erros de validação (X)HTML", - "fontHtml": "Elementos e Atributos (X)HTML para formatar o Texto das páginas (p.e. basefont, font, link e alink)", - "layoutElemNo": "Sem elementos (x)HTML para formatar o Layout das páginas (p.e. blink e center)", - "layoutElem": "Elementos (x)HTML para formatar o Layout das páginas (p.e. blink e center)", - "lang": "Idioma principal da página", - "langNo": "Idioma principal não referenciado", - "langCodeNo": "Código de idioma incorrecto", - "langMatchNo": "Indicações de idioma não coincidentes", - "titleNo": "Elemento title inexistente", - "titleNull": "Elemento title sem conteúdo textual", - "titleOk": "Título da página", - "titleLong": "Quantidade de caracteres no elemento title", - "titleChars": "Título com cadeia de caracteres não textuais (provavelmente arte ASCII)", - "titleVrs": "Elementos title", - "linkRel": "Elementos link para navegação", - "metaRefresh": "Elemento meta não reinicia a página", - "metaRedir": "Elemento meta para redireccionar os utilizadores", - "hxHasAName": "Cabeçalhos com nome acessível", - "hxWithoutAName": "Cabeçalhos sem nome acessível", - "ariaCntxRole": "Elementos dentro do contexto obrigatório", - "ariaReqElem": "Elementos com os filhos obrigatórios", - "ariaStValid": "Valores de estados e propriedades ARIA de tipo válido", - "ariaStNotValid": "Valores de estados e propriedades ARIA de tipo inválido", - "ariaStPermitted": "Valores de estados e propriedades ARIA permitidos", - "ariaStNotPermitted": "Valores de estados e propriedades ARIA não permitidos", - "ariaAtribDefined": "Atributos aria-* definidos", - "ariaAtribNotDefined": "Atributos aria-* mal definidos", - "audioAvoidsAutoPlay": "Elementos audio e video não tocam automaticamente", - "audioAutoPlay": "Elementos audio e video tocam automaticamente", - "autoCmpltValid": "Atributos autocomplete válidos", - "autoCmpltNotValid": "Atributos autocomplete inválidos", - "buttonAname": "button tem nome acessível não vazio", - "buttonNotAname": "button sem nome acessível não vazio", - "seqFocus": "Elementos na ordem de foco sequencial", - "elementDec": "Elementos com o atributo aria-hidden sem conteúdo tocável", - "elementNotDec": "Elementos com o atributo aria-hidden com conteúdo focável", - "elementHiddenFocus": "Elementos marcados como decorativos", - "elementNotHiddenFocus": "Elementos marcados como decorativos e expostos a tecnologias de apoio", - "elementLang": "Elementos com atributo lang válido", - "elementNotLang": "Elementos com atributo lang inválido", - "elementPresentChildrenNoFocus": "Elementos com descendentes decorativos", - "elementPresentChildrenFocus": "Elementos com descendentes decorativos focáveis", - "elementRole": "Elementos com papel semântico explícito", - "headerAtt": "Atributos headers identificam células na mesma tabela", - "headerAttNot": "Atributos headers identificam células noutra tabela", - "idAtt": "Atributos id", - "idAttNot": "Atributos id repetidos", - "iframeSameAName": "Elementos iframe com o mesmo nome acessível que apresentam o mesmo recurso", - "iframeSameANameDiferent": "Elementos iframe com o mesmo nome acessível", - "iframeNegTabIndex": "Elementos iframe com tabindex negativo, sem elementos interativos", - "iframeNegTabIndexNot": "Elementos iframe com tabindex negativo, com elementos interativos", - "letterSpacing": "Propriedade de CSS letter-spacing", - "letterSpacingNot": "Propriedade de CSS letter-spacing com espaçamento incorreto", - "linkAName": "Hiperligações com nome acessível não vazio", - "linkNotAName": "Hiperligações sem conteúdo acessível ('nome acessível')", - "linkIdentAName": "Links com o mesmo nome acessível e contexto", - "linkIdentANameNot": "Links com o mesmo nome acessível e contexto mas destinos diferentes", - "menuItemAName": "Elementos com o papel semântico menuitem", - "menuItemANameNot": "Elementos com o papel semântico menuitem sem nome acessível", - "metaRefreshNot": "Elemento meta reinicia a página", - "metaViewport": "Elemento meta com atributo viewport", - "objectAName": "Elemento object com equivalente textual alternativo", - "objectANameNot": "Elemento object sem equivalente textual alternativo", - "orientationCSS": "Elemento com propriedade CSS transform", - "orientationCSSNot": "Elemento com propriedade CSS transform restringe a orientação da página", - "roleValid": "Elementos com atributo role válido", - "roleValidNot": "Elementos com atributo role inválido", - "scrollableAccess": "Elementos com varrimento podem ser usados com teclado", - "scrollableAccessNot": "Elementos com varrimento não podem ser usados com teclado", - "svgAName": "Elemento svg com papel semântico explícito e nome acessível", - "svgNotAName": "Elemento svg com papel semântico explícito sem nome acessível", - "tableHdr": "Células cabeçalho em tabelas", - "tableHdrNot": "Células cabeçalho em tabelas sem células de dados", - "textContrastH": "Combinações de cor com um rácio de contraste superior a 7:1 para texto normal ou 4.5:1 para texto grande", - "textContrastHNot": "Combinações de cor com um rácio de contraste inferior a 7:1 para texto normal ou 4.5:1 para texto grande", - "videoAudit": "Video com conteúdo áudio", - "videoVisual": "Video com conteúdo visual", - "labelAName": "Elementos interativos com conteúdo textual", - "labelANameNot": "Elementos interativos com conteúdo textual que não está presente no seu nome acessível", - "wordSpacing": "Propriedade de CSS word-spacing", - "wordSpacingNot": "Propriedade de CSS word-spacing impede aumentar espaçamento", - "overflow": "Propriedade de CSS overflow", - "bannerTopLevel": "Elemento com semântica banner", - "bannerNotTopLevel": "Elemento com semântica banner dentro de elementos com semântica", - "complementaryTopLevel": "Elemento com semântica complementary", - "complementaryNotTopLevel": "Elemento com semântica complementary dentro de elementos com outra semântica", - "contentinfoTopLevel": "Elemento com semântica contentinfo", - "contentinfoNotTopLevel": "Elemento com semântica contentinfo dentro de elementos com outra semântica", - "mainTopLevel": "Elemento com semântica main", - "mainNotTopLevel": "Elemento com semântica main dentro de elementos com outra semântica", - "noDuplicateBanner": "Elemento com semântica banner", - "duplicateBanner": "Elementos com semântica banner", - "noDuplicateContentinfo": "Elemento com semântica contentinfo", - "duplicateContentinfo": "Elementos com semântica contentinfo", - "noDuplicateMain": "Elemento com semântica main", - "duplicateMain": "Elementos com semântica main", - "liSemantically": "Itens de lista utilizados dentro de listas", - "liNotSemantically": "Itens de lista utilizados fora de listas", - "listCorrectly": "Listas só com itens de lista", - "listNotCorrectly": "Listas com elementos que não são itens de lista", - "descListElement": "Itens de lista utilizados dentro de listas de descrição", - "notDescListElement": "Itens de lista utilizados fora de listas de descrição", - "descList": "Listas de descrição só com itens de lista ordenados corretamente", - "notDescList": "Listas de descrição com elementos que não são itens de lista ou não estão ordenados corretamente" - }, - "CSV": { - "scorerror": "Erro", - "scorewar": "Aviso", - "scoreok": "Sucesso", - "errorType": "Tipo de erro", - "level": "Nivel de Conformidade", - "criteria": "Critério", - "desc": "Descrição", - "count": "Número de ocorrências", - "value": "Valor", - "date": "Data" - }, - "TESTS_RESULTS": { - "img_01a": { - "s": "Constatei que todas as imagens da página têm o necessário equivalente alternativo em texto.", - "p": "Constatei que todas as imagens da página têm o necessário equivalente alternativo em texto." - }, - "img_01b": { - "s": "Encontrei {{value}} imagem na página que não tem o necessário equivalente alternativo em texto.", - "p": "Encontrei {{value}} imagens na página que não têm o necessário equivalente alternativo em texto." - }, - "img_02": { - "s": "Encontrei {{value}} imagem na página com alt=\"\" (alt vazio).", - "p": "Encontrei {{value}} imagens na página com alt=\"\" (alt vazio)." - }, - "img_03": { - "s": "Encontrei {{value}} imagem na página com alt que não serve de equivalente alternativo.", - "p": "Encontrei {{value}} imagens na página com alt que não serve de equivalente alternativo." - }, - "img_04": { - "s": "Encontrei {{value}} imagem na página em que o alt tem mais de 100 carateres.", - "p": "Encontrei {{value}} imagens na página em que o alt tem mais de 100 carateres ." - }, - "area_01a": { - "s": "Constatei que todas as <area> ativas dos mapas de imagem da página fazem uso do atributo alt.", - "p": "Constatei que todas as <area> ativas dos mapas de imagem da página fazem uso do atributo alt." - }, - "area_01b": { - "s": "Encontrei {{value}} elemento <area> sem atributo alt ou com alt=\"\".", - "p": "Encontrei {{value}} elementos <area> sem atributo alt ou com alt=\"\"." - }, - "inp_img_01a": { - "s": "Constatei que todos os botões gráficos da página fazem uso do atributo alt.", - "p": "Constatei que todos os botões gráficos da página fazem uso do atributo alt." - }, - "inp_img_01b": { - "s": "Localizei {{value}} botão gráfico na página que não tem o atributo alt.", - "p": "Localizei {{value}} botões gráficos na página que não têm o atributo alt." - }, - "a_04": { - "s": "Constatei que esta página não tem links.", - "p": "Constatei que esta página não tem links." - }, - "a_03": { - "s": "Encontrei {{value}} link cujo conteúdo está vazio. Ou melhor, é composto apenas por uma imagem e a imagem tem um equivalente textual alternativo vazio (i.e. alt=\"\").", - "p": "Encontrei {{value}} links cujo conteúdo está vazio. Ou melhor, são compostos apenas por uma imagem e a imagem tem um equivalente textual alternativo vazio (i.e. alt=\"\")." - }, - "a_05": { - "s": "Identifiquei {{value}} caso em que o atributo title do elemento link se limita a repetir o texto existente no link.", - "p": "Identifiquei {{value}} casos em que o atributo title do elemento link se limita a repetir o texto existente no link." - }, - "a_09": { - "s": "Encontrei {{value}} grupo de links com o mesmo texto mas cujo destino é diferente.", - "p": "Encontrei {{value}} grupos de links com o mesmo texto mas cujo destino é diferente." - }, - "a_06": { - "s": "Encontrei {{value}} caso de links adjacentes a apontar para o mesmo destino.", - "p": "Encontrei {{value}} casos de links adjacentes a apontar para o mesmo destino." - }, - "a_01a": { - "s": "Constatei que o primeiro link da página nos permite saltar para o conteúdo principal.", - "p": "Constatei que o primeiro link da página nos permite saltar para o conteúdo principal." - }, - "a_01b": { - "s": "Constatei que a primeira hiperligação da página não permite saltar diretamente para a área do conteúdo principal.", - "p": "Constatei que a primeira hiperligação da página não permite saltar diretamente para a área do conteúdo principal." - }, - "a_02a": { - "s": "Não encontrei links para saltar blocos de texto.", - "p": "Não encontrei links para saltar blocos de texto." - }, - "a_02b": { - "s": "Encontrei {{value}} link para contornar blocos de conteúdo.", - "p": "Encontrei {{value}} links para contornar blocos de conteúdo." - }, - "hx_01a": { - "s": "Constatei que esta página não tem cabeçalhos", - "p": "Constatei que esta página não tem cabeçalhos" - }, - "hx_01b": { - "s": "Encontrei {{value}} cabeçalho na página.", - "p": "Encontrei {{value}} cabeçalhos na página." - }, - "hx_01c": { - "s": "Não encontrei nesta página um cabeçalho principal <H1> marcado.", - "p": "Não encontrei nesta página um cabeçalho principal <H1> marcado." - }, - "hx_03": { - "s": "Encontrei {{value}} caso em que se viola a sequência hierárquica dos níveis de cabeçalho.", - "p": "Encontrei {{value}} casos em que se viola a sequência hierárquica dos níveis de cabeçalho." - }, - "hx_02": { - "s": "Encontrei {{value}} cabeçalho cujo conteúdo é apenas composto por uma imagem sem atributo alt, ou seja sem qualquer equivalente textual alternativo.", - "p": "Encontrei {{value}} cabeçalhos cujo conteúdo é apenas composto por uma imagem sem atributo alt, ou seja sem qualquer equivalente textual alternativo." - }, - "list_01": { - "s": "Localizei {{value}} ocorrência de lista vazia ou com <li> fora da lista.", - "p": "Localizei {{value}} ocorrências de listas vazias ou com <li> fora das listas." - }, - "br_01": { - "s": "Encontrei {{value}} sequência composta por 3 ou mais elementos <br> - desconfio que está a usá-los para representar os itens de uma lista.", - "p": "Encontrei {{value}} sequências compostas por 3 ou mais elementos <br> - desconfio que está a usá-los para representar os itens de uma lista." - }, - "field_02": { - "s": "Encontrei {{value}} elemento <fieldset> fora do formulário.", - "p": "Encontrei {{value}} elementos <fieldset> fora do formulário." - }, - "field_01": { - "s": "Encontrei {{value}} elemento <fieldset> sem descrição.", - "p": "Encontrei {{value}} elementos <fieldset> sem descrição." - }, - "label_02": { - "s": "Localizei {{value}} elemento <label> que não está visível ou está incorretamente posicionado.", - "p": "Localizei {{value}} elementos <label> que não estão visíveis ou estão incorretamente posicionados." - }, - "input_02b": { - "s": "Constatei que todos os controlos de formulário têm um nome acessivel.", - "p": "Constatei que todos os controlos de formulário têm um nome acessivel." - }, - "input_02": { - "s": "Encontrei {{value}} controlo de formulário sem nome acessível.", - "p": "Encontrei {{value}} controlos de formulário sem nome acessivel." - }, - "input_01": { - "s": "Identifiquei {{value}} controlo de formulário sem o elemento <label> associado e sem o atributo title.", - "p": "Identifiquei {{value}} controlos de formulário sem o elemento <label> associado e sem o atributo title." - }, - "focus_01": { - "s": "Encontrei {{value}} caso em que se usa javascript para remover o foco do campo, sempre que o campo recebe o foco.", - "p": "Encontrei {{value}} casos em que se usa javascript para remover o foco do campo, sempre que o campo recebe o foco." - }, - "input_03": { - "s": "Encontrei {{value}} elemento <input> com o atributo alt que não é botão gráfico.", - "p": "Encontrei {{value}} elementos <input> com o atributo alt que não são botões gráficos." - }, - "form_01a": { - "s": "Constatei que todos os formulários têm um botão para submeter os dados ao servidor.", - "p": "Constatei que todos os formulários têm um botão para submeter os dados ao servidor." - }, - "form_01b": { - "s": "Identifiquei {{value}} formulário sem o botão para submeter os dados ao servidor.", - "p": "Identifiquei {{value}} formulários sem o botão para submeter os dados ao servidor." - }, - "table_02": { - "s": "Localizei {{value}} tabela de dados sem o elemento <caption>.", - "p": "Localizei {{value}} tabelas de dados sem o elemento <caption>." - }, - "table_03": { - "s": "Localizei {{value}} tabela em que o texto afixado em <caption> e summary é o mesmo.", - "p": "Localizei {{value}} tabelas em que o texto afixado em <caption> e summary é o mesmo." - }, - "table_01": { - "s": "Encontrei {{value}} tabela sem cabeçalhos identificados mas que usa o elemento <caption>.", - "p": "Encontrei {{value}} tabelas sem cabeçalhos identificados mas que usam o elemento <caption>." - }, - "table_06": { - "s": "Encontrei {{value}} tabela de dados complexos - em que múltiplas linhas configuram as células cabeçalho -, nas quais se constatou existirem células de dados sem o atributo <headers>.", - "p": "Encontrei {{value}} tabelas de dados complexos - em que múltiplas linhas configuram as células cabeçalho -, nas quais se constatou existirem células de dados sem o atributo <headers>." - }, - "scope_01": { - "s": "Verifiquei que há {{value}} caso em que o atributo scope da tabela de dados é inválido.", - "p": "Verifiquei que há {{value}} casos em que o atributo scope da tabela de dados é inválido." - }, - "table_05a": { - "s": "Encontrei {{value}} tabela sem cabeçalhos marcados.", - "p": "Encontrei {{value}} tabelas sem cabeçalhos marcados." - }, - "table_04": { - "s": "Verifiquei que há {{value}} tabela que está dentro de outra.", - "p": "Verifiquei que há {{value}} tabelas que estão umas dentro de outras." - }, - "iframe_01": { - "s": "Encontrei {{value}} elemento <iframe> sem title.", - "p": "Encontrei {{value}} elementos <iframe> sem title." - }, - "frame_01": { - "s": "Identifiquei {{value}} elemento frame sem o atributo title ou em que o mesmo é nulo.", - "p": "Identifiquei {{value}} elementos frame sem o atributo title ou em que o mesmo é nulo." - }, - "win_01": { - "s": "Constatei que esta página tem janelas pop-up.", - "p": "Constatei que esta página tem janelas pop-up." - }, - "abbr_01": { - "s": "Encontrei {{value}} abreviatura em que se esqueceu de colocar o valor por extenso.", - "p": "Encontrei {{value}} abreviaturas em que se esqueceu de colocar o valor por extenso." - }, - "css_01": { - "s": "Identifiquei {{value}} caso em que nas CSS se especifica um espaçamento entre linhas inferior a 1.5.", - "p": "Identifiquei {{value}} casos em que nas CSS se especifica um espaçamento entre linhas inferior a 1.5." - }, - "justif_txt_01": { - "s": "Encontrei {{value}} caso em que se usa texto justificado via HTML.", - "p": "Encontrei {{value}} casos em que se usa texto justificado via HTML." - }, - "justif_txt_02": { - "s": "Identifiquei {{value}} caso em que se usa texto justificado via CSS.", - "p": "Identifiquei {{value}} casos em que se usa texto justificado via CSS." - }, - "font_02": { - "s": "Identifiquei {{value}} caso em que o tamanho de letra está expresso em unidades de medida absolutas.", - "p": "Identifiquei {{value}} casos em que o tamanho de letra está expresso em unidades de medida absolutas." - }, - "layout_03": { - "s": "Identifiquei {{value}} caso na CSS em que se utiliza unidade de medida px para definir a largura das caixas de texto.", - "p": "Identifiquei {{value}} casos na CSS em que se utilizam unidades de medida px para definir a largura das caixas de texto." - }, - "values_02a": { - "s": "Identifiquei {{value}} caso na CSS em que se utiliza unidade de medida absoluta para definir a largura das caixas de conteúdo.", - "p": "Identifiquei {{value}} casos na CSS em que se utilizam unidades de medida absolutas para definir a largura das caixas de conteúdo." - }, - "values_02b": { - "s": "Identifiquei {{value}} caso na CSS em que se utiliza unidade de medida relativa para definir a largura das caixas de conteúdo.", - "p": "Identifiquei {{value}} casos na CSS em que se utilizam unidades de medida relativas para definir a largura das caixas de conteúdo." - }, - "values_01a": { - "s": "Verifiquei que há {{value}} caso em que as unidades de medida que definem a largura dos elementos de conteúdo existentes no HTML estão expressas em valores absolutos.", - "p": "Verifiquei que há {{value}} casos em que as unidades de medida que definem a largura dos elementos de conteúdo existentes no HTML estão expressas em valores absolutos." - }, - "values_01b": { - "s": "Verifiquei que há {{value}} caso em que as unidades de medida que definem a largura dos elementos de conteúdo existentes no HTML estão expressas em valores relativos.", - "p": "Verifiquei que há {{value}} casos em que as unidades de medida que definem a largura dos elementos de conteúdo existentes no HTML estão expressas em valores relativos." - }, - "color_02": { - "s": "Localizei {{value}} combinação de cor cuja relação de contraste é inferior ao rácio mínimo de contraste permitido pelas WCAG, ou seja 3 para 1 para texto com letra grande e 4,5 para 1 para texto com letra normal.", - "p": "Localizei {{value}} combinações de cor cuja relação de contraste é inferior ao rácio mínimo de contraste permitido pelas WCAG, ou seja 3 para 1 para texto com letra grande e 4,5 para 1 para texto com letra normal." - }, - "color_01": { - "s": "Identifiquei {{value}} regra de CSS em que não se especifica a cor da letra ou a cor do fundo.", - "p": "Identifiquei {{value}} regras de CSS em que não se especifica a cor da letra ou a cor do fundo." - }, - "blink_02": { - "s": "Encontrei {{value}} valor <blink> nas CSS que provoca o cintilar de partes do conteúdo.", - "p": "Localizei {{value}} valores <blink> nas CSS que provocam o cintilar de partes do conteúdo." - }, - "ehandler_03": { - "s": "Identifiquei {{value}} caso em que se faz uso de manipuladores de eventos redundantes.", - "p": "Identifiquei {{value}} casos em que se faz uso de manipuladores de eventos redundantes." - }, - "ehandler_02": { - "s": "Identifiquei {{value}} caso em que não se faz uso de manipuladores de eventos redundantes.", - "p": "Identifiquei {{value}} casos em que não se faz uso de manipuladores de eventos redundantes." - }, - "ehandler_04": { - "s": "Identifiquei {{value}} caso em que se associam manipuladores de eventos a elementos não interativos.", - "p": "Identifiquei {{value}} casos em que se associam manipuladores de eventos a elementos não interativos." - }, - "w3c_validator_01a": { - "s": "Perguntei ao validador de HTML do W3C e constatei que não existem erros de HTML.", - "p": "Perguntei ao validador de HTML do W3C e constatei que não existem erros de HTML." - }, - "w3c_validator_01b": { - "s": "Perguntei ao validador de HTML do W3C e constatei que há {{value}} erro de HTML.", - "p": "Perguntei ao validador de HTML do W3C e constatei que há {{value}} erros de HTML." - }, - "font_01": { - "s": "Localizei {{value}} elemento ou atributo de HTML que está a ser usado para controlo da apresentação visual do texto.", - "p": "Localizei {{value}} elementos ou atributos de HTML que estão a ser usados para controlo da apresentação visual do texto." - }, - "layout_01a": { - "s": "Constatei que não há elementos obsoletos usados para controlo visual da apresentação.", - "p": "Constatei que não há elementos obsoletos usados para controlo visual da apresentação." - }, - "layout_01b": { - "s": "Encontrei {{value}} elemento obsoleto usado para controlar a apresentação visual.", - "p": "Encontrei {{value}} elementos obsoletos usados para controlar a apresentação visual." - }, - "lang_01": { - "s": "Verifiquei que o idioma principal da página está marcado como \"{{value}}\".", - "p": "Verifiquei que o idioma principal da página está marcado como \"{{value}}\"." - }, - "lang_03": { - "s": "Constatei que o atributo {{value}} se encontra em falta.", - "p": "Constatei que o atributo {{value}} se encontra em falta." - }, - "lang_02": { - "s": "Verifiquei que o idioma principal da página está incorretamente marcado. \"{{value}}\" existe?", - "p": "Verifiquei que o idioma principal da página está incorretamente marcado. \"{{value}}\" existe?" - }, - "lang_04": { - "s": "Constatei que os atributos lang e/ou xml:lang estão a ser utilizados de forma incorreta.", - "p": "Constatei que os atributos lang e/ou xml:lang estão a ser utilizados de forma incorreta." - }, - "title_02": { - "s": "Verifiquei que esta página não tem título - falta-lhe o elemento <title>.", - "p": "Verifiquei que esta página não tem título - falta-lhe o elemento <title>." - }, - "title_03": { - "s": "Verifiquei que esta página não tem título - o elemento <title> está vazio.", - "p": "Verifiquei que esta página não tem título - o elemento <title> está vazio." - }, - "title_06": { - "s": "Encontrei um título na página e ele parece-me correto.", - "p": "Encontrei um título na página e ele parece-me correto." - }, - "title_04": { - "s": "Parece-me que o título da página é demasiado grande - ele contém {{value}} carateres.", - "p": "Parece-me que o título da página é demasiado grande - ele contém {{value}} carateres." - }, - "title_05": { - "s": "Verifiquei que o título da página tem {{value}} carateres seguidos que me parecem ser Arte-ASCII.", - "p": "Verifiquei que o título da página tem {{value}} carateres seguidos que me parecem ser Arte-ASCII." - }, - "title_01": { - "s": "Verifiquei que esta página não tem apenas um elemento <title>, como era suposto, mas {{value}}.", - "p": "Verifiquei que esta página não tem apenas um elemento <title>, como era suposto, mas {{value}}." - }, - "link_01": { - "s": "Localizei nos metadados da página {{value}} elemento <link> que poderá servir para construir um sistema de navegação.", - "p": "Localizei nos metadados da página {{value}} elementos <link> que poderão servir para construir um sistema de navegação.." - }, - "meta_01": { - "s": "Constatei que a página reinicia-se automaticamente através do elemento <meta http-equiv=\"refresh\">.", - "p": "Constatei que a página reinicia-se automaticamente através do elemento <meta http-equiv=\"refresh\">." - }, - "meta_02": { - "s": "Constatei que a página é redireccionada automaticamente através do elemento <meta http-equiv=\"redirect\">.", - "p": "Constatei que a página é redireccionada automaticamente através do elemento <meta http-equiv=\"redirect\">." - }, - "heading_01": { - "s": "Constatei que todos os cabeçalhos desta página têm nome acessível", - "p": "Constatei que todos os cabeçalhos desta página têm nome acessível" - }, - "heading_02": { - "s": "Identifiquei {{value}} cabeçalho sem nome acessível.", - "p": "Identifiquei {{value}} cabeçalhos sem nome acessível." - }, - "aria_01": { - "s": "Verifiquei que todos os elementos com papel semântico definido explicitamente estão dentro dos contextos obrigatórios.", - "p": "Verifiquei que todos os elementos com papel semântico definido explicitamente estão dentro dos contextos obrigatórios." - }, - "aria_02": { - "s": "Constatei que todos os elementos com papel semântico definido explicitamente têm pelo menos um dos elementos filho obrigatórios.", - "p": "Constatei que todos os elementos com papel semântico definido explicitamente têm pelo menos um dos elementos filho obrigatórios." - }, - "aria_03": { - "s": "Verifiquei que todos os estados e todas as propriedades ARIA têm um tipo de valor válido.", - "p": "Verifiquei que todos os estados e todas as propriedades ARIA têm um tipo de valor válido." - }, - "aria_04": { - "s": "Encontrei {{value}} estado ou propriedade ARIA com um valor de tipo incorreto.", - "p": "Encontrei {{value}} estados ou propriedades ARIA com tipos de valor incorretos." - }, - "aria_05": { - "s": "Verifiquei que todos os estados e todas as propriedades ARIA são permitidos.", - "p": "Verifiquei que todos os estados e todas as propriedades ARIA são permitidos." - }, - "aria_06": { - "s": "Encontrei {{value}} estado ou propriedade ARIA que não é permitido.", - "p": "Encontrei {{value}} estados ou propriedades ARIA que não são permitido." - }, - "aria_07": { - "s": "Verifiquei que todos os atributos aria-* estão de acordo com a especificação ARIA.", - "p": "Verifiquei que todos os atributos aria-* estão de acordo com a especificação ARIA." - }, - "aria_08": { - "s": "Encontrei {{value}} atributo aria-* que não está na especificação ARIA.", - "p": "Encontrei {{value}} atributos aria-* que não estão na especificação ARIA." - }, - "audio_video_01": { - "s": "Não encontrei nenhum elemento <audio> ou <video> que iniciasse automaticamente.", - "p": "Não encontrei nenhum elemento <audio> ou <video> que iniciasse automaticamente." - }, - "audio_video_02": { - "s": "Encontrei {{value}} elemento <audio> ou <video> que inicia automaticamente.", - "p": "Encontrei {{value}} elementos <audio> ou <video> que iniciam automaticamente." - }, - "autocomplete_01": { - "s": "Constatei que todos os atributos autocomplete têm um valor válido.", - "p": "Constatei que todos os atributos autocomplete têm um valor válido." - }, - "autocomplete_02": { - "s": "Identifiquei {{value}} atributo autocomplete com um valor inválido.", - "p": "Identifiquei {{value}} atributos autocomplete com valores inválidos." - }, - "button_01": { - "s": "Verifiquei que todos os elementos <button> têm nome acessível.", - "p": "Verifiquei que todos os elementos <button> têm nome acessível." - }, - "button_02": { - "s": "Encontrei {{value}} elemento <button> sem nome acessível.", - "p": "Encontrei {{value}} elementos <button> sem nome acessível." - }, - "element_01": { - "s": "Encontrei {{value}} elemento na ordem de foco sequencial.", - "p": "Encontrei {{value}} elementos na ordem de foco sequencial." - }, - "element_02": { - "s": "Não encontrei nenhum elemento com o atributo aria-hidden que tenha conteúdo focável", - "p": "Não encontrei nenhum elemento marcado com aria-hidden que tenha conteúdo focável" - }, - "element_03": { - "s": "Encontrei {{value}} elemento com o atributo aria-hidden que tem conteúdo focável", - "p": "Encontrei {{value}} elementos com o atributo aria-hidden que têm conteúdo focável" - }, - "element_04": { - "s": "Não encontrei elementos marcados como decorativos que tenham sido expostos a Tecnologias de Apoio", - "p": "Não encontrei elementos marcados como decorativos que tenham sido expostos a Tecnologias de Apoio" - }, - "element_05": { - "s": "Identifiquei {{value}} elemento marcado como decorativo que está exposto a Tecnologias de Apoio", - "p": "Identifiquei {{value}} elementos marcados como decorativos que estão expostos a Tecnologias de Apoio" - }, - "element_06": { - "s": "Verifiquei que todos os elementos com atributo lang têm uma etiqueta de linguagem válida", - "p": "Verifiquei que todos os elementos com atributo lang têm uma etiqueta de linguagem válida" - }, - "element_07": { - "s": "Encontrei {{value}} elemento com atributo lang que tem uma etiqueta de linguagem inválida", - "p": "Encontrei {{value}} elementos com atributo lang que têm etiquetas de linguagem inválidas" - }, - "element_08": { - "s": "Constatei que todos os elementos com um papel semântico que confere aos seus descendentes um papel decorativo, não têm descendentes focáveis", - "p": "Constatei que todos os elementos com um papel semântico que confere aos seus descendentes um papel decorativo, não têm descendentes focáveis" - }, - "element_09": { - "s": "Identifiquei {{value}} elemento com um papel semântico que confere aos seus descendentes um papel decorativo, que tem descendentes focáveis", - "p": "Identifiquei {{value}} elementos com papel semântico que confere aos seus descendentes um papel decorativo, que têm descendentes focáveis" - }, - "element_10": { - "s": "Constatei que todos os elementos com papel semântico explícito têm os necessários estados e propriedades.", - "p": "Constatei que todos os elementos com papel semântico explícito têm os necessários estados e propriedades." - }, - "headers_01": { - "s": "Verifiquei que todos os atributos headers apontam para células da mesma tabela.", - "p": "Verifiquei que todos os atributos headers apontam para células da mesma tabela." - }, - "headers_02": { - "s": "Localizei {{value}} atributo headers que aponta para células fora da tabela.", - "p": "Localizei {{value}} atributos headers que apontam para células fora das suas tabelas." - }, - "id_01": { - "s": "Constatei que nesta página não há atributos id repetidos.", - "p": "Constatei que nesta página não há atributos id repetidos." - }, - "id_02": { - "s": "Encontrei nesta página {{value}} atributo id repetido.", - "p": "Encontrei nesta página {{value}} atributos ids repetidos." - }, - "iframe_02": { - "s": "Encontrei {{value}} par de elementos <iframe> com o mesmo nome acessível que apontam para o mesmo conteúdo", - "p": "Encontrei {{value}} elementos <iframe> com o mesmo nome acessível que apontam para o mesmo conteúdo" - }, - "iframe_03": { - "s": "Encontrei {{value}} par de elementos <iframe> com o mesmo nome acessível", - "p": "Encontrei {{value}} elementos <iframe> com o mesmo nome acessível" - }, - "iframe_04": { - "s": "Verifiquei que não existem elementos interativos dentro de elementos <iframe> com um atributo tabindex negativo", - "p": "Verifiquei que não existem elementos interativos dentro de elementos <iframe> com um atributo tabindex negativo" - }, - "iframe_05": { - "s": "Encontrei {{value}} elemento <iframe> com um atributo tabindex com valor negativo que contém elementos interativos", - "p": "Encontrei {{value}} elementos <iframe> com um atributo tabindex com valor negativo que contêm elementos interativos" - }, - "letter_01": { - "s": "Constatei que não se usam estilos para impedir aumentar o espaçamento entre letras", - "p": "Constatei que não se usam estilos para impedir aumentar o espaçamento entre letras" - }, - "letter_02": { - "s": "Identifiquei {{value}} elemento cujos estilos impedem o aumento do espaçamento entre letras para um valor que seja pelo menos 0,12 vezes o tamanho da fonte", - "p": "Identifiquei {{value}} elementos cujos estilos impedem o aumento do espaçamento entre letras para um valor que seja pelo menos 0,12 vezes o tamanho da fonte" - }, - "a_10": { - "s": "Verifiquei que todas as ligações têm nome acessível.", - "p": "Verifiquei que todas as ligações têm nome acessível." - }, - "a_11": { - "s": "Encontrei {{value}} ligação sem nome acessível.", - "p": "Encontrei {{value}} ligações sem nome acessível." - }, - "a_12": { - "s": "Verifiquei que todos os grupos de links com o mesmo nome acessível e contexto têm o mesmo destino.", - "p": "Verifiquei que todos os grupos de links com o mesmo nome acessível e contexto têm o mesmo destino." - }, - "a_13": { - "s": "Encontrei {{value}} grupo de links com o mesmo nome acessível e contexto mas cujo destino é diferente.", - "p": "Encontrei {{value}} grupos de links com o mesmo nome acessível e contexto mas cujos destinos são diferentes." - }, - "menuItem_01": { - "s": "Verifiquei que todos os elementos com papel semântico menuitem têm nome acessível.", - "p": "Verifiquei que todos os elementos com papel semântico menuitem têm nome acessível." - }, - "menuItem_02": { - "s": "Encontrei {{value}} elemento com papel semântico menuitem sem nome acessível.", - "p": "Encontrei {{value}} elementos com papel semântico menuitem sem nome acessível." - }, - "meta_03": { - "s": "Constatei que nenhum elemento meta refresh causa um refrescamento não imediato da página", - "p": "Constatei que nenhum elemento meta refresh causa um refrescamento não imediato da página" - }, - "meta_04": { - "s": "Localizei {{value}} elemento meta refresh que causa um refrescamento não imediato da página", - "p": "Localizei {{value}} elementos meta refresh que causam refrescamento não imediato da página" - }, - "meta_05": { - "s": "Constatei que o elemento meta não impede o utilizador de fazer zoom.", - "p": "Constatei que o elemento meta não impede o utilizador de fazer zoom." - }, - "object_01": { - "s": "Verifiquei que todos os elementos <object> têm equivalente textual alternativo.", - "p": "Verifiquei que todos os elementos <object> têm equivalente textual alternativo." - }, - "object_02": { - "s": "Localizei {{value}} elemento <object> sem equivalente textual alternativo.", - "p": "Localizei {{value}} elementos <object> sem equivalente textual alternativo." - }, - "orientation_01": { - "s": "Constatei a orientação dos elementos desta página não é restringida através de propriedades CSS", - "p": "Constatei a orientação dos elementos desta página não é restringida através de propriedades CSS" - }, - "orientation_02": { - "s": "Encontrei {{value}} elemento cuja orientação é restringida através de propriedades CSS", - "p": "Encontrei {{value}} elementos cuja orientações são restringidas através de propriedades CSS" - }, - "role_01": { - "s": "Verifiquei que todos os atributos role têm um valor válido", - "p": "Verifiquei que todos os atributos role têm um valor válido" - }, - "role_02": { - "s": "Identifiquei {{value}} atributo role com valor inválido", - "p": "Identifiquei {{value}} atributos role com valores inválidos" - }, - "scrollable_01": { - "s": "Constatei que todos os elementos com varrimento podem ser usados com o teclado", - "p": "Constatei que todos os elementos com varrimento podem ser usados com o teclado" - }, - "scrollable_02": { - "s": "Encontrei {{value}} elemento com varrimento que não pode ser usado com o teclado", - "p": "Encontrei {{value}} elementos com varrimento que não podem ser usados com o teclado" - }, - "svg_01": { - "s": "Verifiquei que todos os elementos <svg> com papel semântico explícito têm um nome acessível", - "p": "Verifiquei que todos os elementos <svg> com papel semântico explícito têm um nome acessível" - }, - "svg_02": { - "s": "Localizei {{value}} elemento <svg> com papel semântico explícito sem nome acessível", - "p": "Localizei {{value}} elementos <svg> com papel semântico explícito sem nome acessível" - }, - "table_07": { - "s": "Observei que todas os cabeçalhos das tabelas têm células de dados correspondentes", - "p": "Observei que todas os cabeçalhos das tabelas têm células de dados correspondentes" - }, - "table_08": { - "s": "Identifiquei {{value}} célula cabeçalho de tabela que não tem nenhuma célula de dados associada", - "p": "Identifiquei {{value}} células cabeçalho de tabela que não têm nenhuma célula de dados associada" - }, - "textC_01": { - "s": "Verifiquei que todas as combinações de cor têm uma relação de contraste superior ao rácio de contraste otimizado sugerido pelas WCAG, ou seja 4,5 para 1 para texto com letra grande e 7 para 1 para texto com letra normal.", - "p": "Verifiquei que todas as combinações de cor têm uma relação de contraste superior ao rácio de contraste otimizado sugerido pelas WCAG, ou seja 4,5 para 1 para texto com letra grande e 7 para 1 para texto com letra normal." - }, - "textC_02": { - "s": "Localizei {{value}} combinação de cor cuja relação de contraste é inferior ao rácio de contraste otimizado sugerido pelas WCAG, ou seja 4,5 para 1 para texto com letra grande e 7 para 1 para texto com letra normal.", - "p": "Localizei {{value}} combinações de cor cujas relações de contraste são inferiores ao rácio de contraste otimizado sugerido pelas WCAG, ou seja 4,5 para 1 para texto com letra grande e 7 para 1 para texto com letra normal." - }, - "video_01": { - "s": "Observei que existe {{value}} elemento <video> com conteúdo áudio que deve ter uma alternativa acessível", - "p": "Observei que existem {{value}} elementos <video> com conteúdo áudio que devem ter alternativas acessíveis" - }, - "video_02": { - "s": "Observei que existe {{value}} elemento <video> com conteúdo visual que deve ter uma alternativa acessível", - "p": "Observei que existem {{value}} elementos <video> com conteúdo visual que devem ter alternativas acessíveis" - }, - "label_01": { - "s": "Constatei que todos os elementos interativos têm no seu nome acessível o texto visível das etiquetas", - "p": "Constatei que todos os elementos interativos têm no seu nome acessível o texto visível das etiquetas" - }, - "label_03": { - "s": "Encontrei {{value}} elemento interativo que tem texto visível da sua etiqueta que não faz parte do seu nome acessível", - "p": "Encontrei {{value}} elementos interativos que têm texto visível das suas etiquetas que não faz parte dos seus nomes acessíveis" - }, - "word_01": { - "s": "Constatei que não se usam estilos para impedir aumentar o espaçamento entre palavras", - "p": "Constatei que não se usam estilos para impedir aumentar o espaçamento entre palavras" - }, - "word_02": { - "s": "Identifiquei {{value}} elemento cujos estilos impedem o aumento do espaçamento entre palavras para um valor que seja pelo menos 0,16 vezes o tamanho da fonte", - "p": "Identifiquei {{value}} elementos cujos estilos impedem o aumento do espaçamento entre palavras para um valor que seja pelo menos 0,16 vezes o tamanho da fonte" - }, - "css_02": { - "s": "Verifiquei que existe {{value}} nó de texto com propriedade CSS overflow que pode impedir um utilizador de ver o texto quando faz zoom", - "p": "Verifiquei que existem {{value}} nós de texto com propriedade CSS overflow que podem impedir um utilizador de ver o texto quando faz zoom" - }, - "landmark_01": { - "s": "Constatei que o elemento com a semântica de banner não está contido dentro de nenhum elemento com outra semântica", - "p": "Constatei que os elementos com a semântica de banner não estão contidos dentro de nenhum elemento com outra semântica" - }, - "landmark_02": { - "s": "Constatei que o elemento com a semântica de banner está contido dentro de um elemento com outra semântica", - "p": "Constatei que os elementos com a semântica de banner estão contidos dentro de elementos com outra semântica" - }, - "landmark_03": { - "s": "Constatei que o elemento com a semântica de complementary não está contido dentro de nenhum elemento com outra semântica", - "p": "Constatei que os elementos com a semântica de complementary não estão contidos dentro de nenhum elemento com outra semântica" - }, - "landmark_04": { - "s": "Constatei que o elemento com a semântica de complementary está contido dentro de um elemento com outra semântica", - "p": "Constatei que os elementos com a semântica de complementary estão contidos dentro de elementos com outra semântica" - }, - "landmark_05": { - "s": "Constatei que o elemento com a semântica de contentinfo não está contido dentro de nenhum elemento com outra semântica", - "p": "Constatei que os elementos com a semântica de contentinfo não estão contidos dentro de nenhum elemento com outra semântica" - }, - "landmark_06": { - "s": "Constatei que o elemento com a semântica de contentinfo está contido dentro de um elemento com outra semântica", - "p": "Constatei que os elementos com a semântica de contentinfo estão contidos dentro de elementos com outra semântica" - }, - "landmark_07": { - "s": "Constatei que o elemento com a semântica de main não está contido dentro de nenhum elemento com outra semântica", - "p": "Constatei que os elementos com a semântica de main não estão contidos dentro de nenhum elemento com outra semântica" - }, - "landmark_08": { - "s": "Constatei que o elemento com a semântica de main está contido dentro de um elemento com outra semântica", - "p": "Constatei que os elementos com a semântica de main estão contidos dentro de elementos com outra semântica" - }, - "landmark_09": { - "s": "Encontrei um elemento com a semântica de banner.", - "p": "Encontrei um elemento com a semântica de banner." - }, - "landmark_10": { - "s": "Encontrei {{value}} elementos com a semântica de banner.", - "p": "Encontrei {{value}} elementos com a semântica de banner." - }, - "landmark_11": { - "s": "Encontrei um elemento com a semântica de contentinfo.", - "p": "Encontrei um elemento com a semântica de contentinfo." - }, - "landmark_12": { - "s": "Encontrei {{value}} elementos com a semântica de contentinfo.", - "p": "Encontrei {{value}} elementos com a semântica de contentinfo." - }, - "landmark_13": { - "s": "Encontrei um elemento com a semântica de main.", - "p": "Encontrei um elemento com a semântica de main." - }, - "landmark_14": { - "s": "Encontrei {{value}} elementos com a semântica de main.", - "p": "Encontrei {{value}} elementos com a semântica de main." - }, - "listitem_01": { - "s": "Verifiquei que todos os elementos <li> estão contidos dentro de uma lista.", - "p": "Verifiquei que todos os elementos <li> estão contidos dentro de uma lista." - }, - "listitem_02": { - "s": "Localizei {{value}} elemento <li> que não está contido dentro de uma lista.", - "p": "Localizei {{value}} elementos <li> que não estão contidos dentro de listas." - }, - "list_02": { - "s": "Verifiquei que todas as listas só contêm itens de lista.", - "p": "Verifiquei que todas as listas só contêm itens de lista." - }, - "list_03": { - "s": "Localizei {{value}} lista que contém elementos que não são itens de lista.", - "p": "Localizei {{value}} listas que contêm elementos que não são itens de lista." - }, - "list_04": { - "s": "Verifiquei que todos os elementos <dd> e <dt> estão contidos dentro de uma lista.", - "p": "Verifiquei que todos os elementos <dd> e <dt> estão contidos dentro de uma lista." - }, - "list_05": { - "s": "Localizei {{value}} elemento <dd> ou <dt> que não está contido dentro de uma lista.", - "p": "Localizei {{value}} elementos <dd> ou <dt> que não estão contidos dentro de lista." - }, - "list_06": { - "s": "Verifiquei que todas as listas de descrição só contêm itens de lista corretamente ordenados.", - "p": "Verifiquei que todas as listas de descrição só contêm itens de lista corretamente ordenados." - }, - "list_07": { - "s": "Localizei {{value}} lista de descrição que contém elementos que não são itens de lista ou que não estão corretamente ordenados.", - "p": "Localizei {{value}} listas de descrição que contêm elementos que não são itens de lista ou que não estão corretamente ordenados." - } - }, - "TECHS": { - "H37": "Utilizar atributos alt em elementos img", - "F65": "Falha do Critério de Sucesso 1.1.1 devido à omissão do atributo alt em elementos img, elementos area e elementos input do tipo \"imagem\"", - "C9": "Utilizar CSS para incluir imagens decorativas", - "F30": "Falha dos Critérios de Sucesso 1.1.1 e 1.2.1 devido à utilização de alternativas em texto que não são alternativas (por ex., nomes de ficheiros ou texto genérico)", - "H45": "Utilizar longdesc", - "H24": "Fornecer alternativas em texto para os elementos area de mapas de imagens", - "H36": "Utilizar atributos alt em imagens utilizadas como botões Submit", - "G125": "Fornecer links para navegar para páginas Web relacionadas", - "F89": "Falha dos Critérios de Sucesso 2.4.4, 2.4.9 e 4.1.2 devido à utilização de alt vazio numa imagem em que a imagem é o único conteúdo de um link", - "H33": "Suplementar o texto do link com o atributo title", - "F84": "Falha do Critério de Sucesso 2.4.9 devido à utilização de um link não específico, tal como \"clique aqui\" ou \"mais\" sem um mecanismo para alterar o texto do link para texto específico", - "H2": "Combinar a imagem adjacente e os links de texto para o mesmo recurso", - "G1": "Adicionar um link no topo de cada página para aceder directamente à área do conteúdo principal", - "G123": "Adicionar um link no início de um bloco de conteúdo repetido para aceder directamente ao fim do bloco", - "H42": "Utilizar h1-h6 para identificar cabeçalhos", - "G141": "Organizar uma página utilizando cabeçalhos", - "G130": "Fornecer cabeçalhos descritivos", - "H48": "Utilizar ol, ul e dl para listas", - "H71": "Fornecer uma descrição para grupos de controlos de formulário utilizando elementos fieldset e legend", - "G162": "Colocar etiquetas para aumentar a previsibilidade das relações", - "H44": "Utilizar elementos label para associar etiquetas de texto a controlos de formulário", - "H65": "Utilizar o atributo title para identificar controlos de formulário quando o elemento label não puder ser utilizado", - "F55": "Falha dos Critérios de Sucesso 2.1.1, 2.4.7 e 3.2.1 devido à utilização de script para remover o foco quando o foco é recebido", - "H32": "Fornecer botões Submit", - "H39": "Utilizar elementos caption para associar títulos às tabelas de dados", - "H73": "Utilizar o atributo summary do elemento table para fornecer uma descrição geral das tabelas de dados", - "F46": "Falha do Critério de Sucesso 1.3.1 devido à utilização de elementos th, elementos caption ou atributos summary não vazios em tabelas de esquema", - "H43": "Utilizar os atributos id e headers para associar células de dados a células de cabeçalho em tabelas de dados", - "H63": "Utilizar o atributo scope para associar células de cabeçalho a células de dados em tabelas de dados", - "H51": "Utilizar a marcação da tabela para apresentar informações dispostas em tabelas", - "F49": "Falha do Critério de Sucesso 1.3.2 devido à utilização de uma tabela de esquema HTML que não faz sentido quando linearizada", - "H64": "Utilizar o atributo title dos elementos frame e iframe", - "F52": "Falha do Critério de Sucesso 3.2.1 devido à apresentação de uma nova janela assim que uma página nova é carregada", - "G102": "Fornecer a definição por extenso ou explicação de uma abreviatura", - "C21": "Especificar o espaçamento entre linhas em CSS", - "F88": "Falha do Critério de Sucesso 1.4.8 devido à utilização de texto justificado (alinhado às margens esquerda e direita)", - "C19": "Especificar o alinhamento à esquerda OU à direita em CSS", - "C12": "Utilizar percentagem para tamanhos de letra", - "G146": "Utilizar disposições líquidas", - "C24": "Utilizar valores de percentagem em CSS para os tamanhos das caixas", - "G145": "Garantir uma relação de contraste de, no mínimo, 3 para 1", - "F24": "Falha dos Critérios de Sucesso 1.4.3, 1.4.6 e 1.4.8 devido à especificação de cores de primeiro plano sem especificar as cores de fundo e vice-versa", - "F4": "Falha do Critério de Sucesso 2.2.2 devido à utilização de text-decoration:blink sem um mecanismo para o desligar em menos de cinco segundos", - "G90": "Fornecer manipuladores de eventos accionados por teclado", - "SCR20": "Utilizar o teclado e outras funções específicas do dispositivo", - "F59": "Falha do Critério de Sucesso 4.1.2 devido à utilização de script para tornar um div ou um span num controlo da interface de utilizador em HTML", - "G134": "Validar páginas Web", - "C22": "Utilizar CSS para controlar a apresentação visual do texto", - "G115": "Utilizar elementos semanticos para marcar a estrutura", - "H57": "Utilizar atributo language no elemento html", - "H25": "Fornecer um título utilizando o elemento title", - "F25": "Falha do Critério de Sucesso 2.4.2 devido ao título de uma página Web não identificar os conteúdos", - "G88": "Fornecer títulos descritivos para páginas Web", - "H59": "Utilizar o elemento link e as ferramentas de navegação", - "F41": "Falha dos Critérios de Sucesso 2.2.1, 2.2.4 e 3.2.5 devido à utilização de um meta refresh com um tempo limite excedido", - "F40": "Falha dos Critérios de Sucesso 2.2.1 e 2.2.4 devido à utilização de um meta redirect com um limite de tempo", - "ff89c9": "Contexto ARIA obrigatório", - "bc4a75": "Elementos necessários pele especificação ARIA", - "6a7281": "Estados e propriedades ARIA com valores do tipo válido", - "5c01ea": "Estados e propriedades ARIA permitidos", - "5f99a7": "Atributos aria-* definidos na especificação ARIA", - "80f0bf": "Elementos audio e video evitam tocar automaticamente", - "73f2c2": "Atributos autocomplete têm valores válidos", - "97a4e1": "O nome acessível do elemento button não está vazio", - "oj04fd": "Elementos na ordem de foco sequencial devem ter foco visível", - "6cfa84": "Elementos com aria-hidden não devem ter conteúdo focável", - "46ca7f": "Elementos decorativos não devem ser expostos a Tecnologias de Apoio", - "H58": "Usar o atributo lang para identificar mudanças na linguagem", - "307n5z": "Elementos com descendentes decorativos não têm conteúdo focável", - "4e8ab6": "Elementos com atributo role definem os estados e propriedades necessários", - "H93": "Garantir que os atributos id são únicos na página", - "4b1c6c": "Elementos iframe com o mesmo nome acessível servem o mesmo propósito", - "G202": "Elemento svg com papel semântico explícito tem nome acessível não vazio", - "24afc2": "Espaçamento de letras nos atributos de estilo não é !important", - "G91": "Fornecer texto da ligação que descreva o seu propósito", - "fd3a94": "Links com o mesmo nome acessível e contexto têm o mesmo propósito", - "m6b1q3": "menuitem tem nome acessível não vazio", - "G110": "Usar redirecionamento instantâneo do cliente", - "b4f0c3": "meta viewport permite zoom", - "8fc3b6": "Element object com conteúdo não textual tem nome acessível não vazio", - "b33eff": "Orientação da página não é restringida através da propriedade CSS transform", - "674b10": "Atributo role com valor válido", - "d0f69e": "Células cabeçalho de tabelas têm células de dados atribuídas", - "G17": "Garantir uma relação de contraste de, no mínimo, 4.5 para 1", - "G87": "Conteúdo audio de um elemento vídeo tem alternativa acessível", - "G8": "Conteúdo visual de um elemento vídeo tem alternativa acessível", - "G208": "Incluir o texto da etiqueta visível no nome acessível", - "9e45ec": "Espaçamento de palavras nos atributos de estilo não é !important", - "59br37": "Nó de texto ampliado não é cortado por CSS overflow", - "ARIA11": "Usar landmarks ARIA para identificar regiões da página", - "H40": "Usar listas de descrição" - }, - "TXT_TECHNIQUES": { - "H37": "

Verifique se o equivalente alternativo em texto existente nas imagens serve informação ou função igual à desempenhada pela imagem na página.

", - "F65": "

Verifique se o equivalente textual alternativo existente nos botões gráficos serve informação ou função igual à desempenhada pelo botão gráfico na página.

", - "C9": "

O uso de textos alternativos vazios em HTML é uma prática comum para imagens classificadas como sendo decorativas. Todavia, todas as imagens classificadas como decorativas devem ser afixadas via CSS e não via HTML.

", - "F30": "

No atributo <alt> do elemento <img> encontrei o nome do ficheiro imagem ou um dos seguintes valores: \"img\", \"image\", \"spacer\", \"space\", \"picture\", \"alt\", \"alttext\", \"imagen\", \"imagem\", \"foto\", \"photo\", ou uma das seguintes extensões de imagem .jpg, .jpeg, .gif, .png. Nenhum dos valores referidos acima serve de equivalente textual alternativo.

", - "H45": "

O atributo longdesc tem de ser composto por um URI que aponte a localização onde se encontra a descrição longa - pode ser outra página ou uma âncora na mesma página.

", - "H24": "

Verifique se o equivalente textual alternativo existente nas áreas ativas dos mapas de imagem serve informação ou função igual à desempenhada pelo mapa de imagem na página.

", - "H36": "

O elemento <input> é utilizado para criar muitos tipos de controlos de formulário. Apesar das DTDs de HTML e XHTML permitirem o uso do atributo alt em todos os seus elementos, o atributo alt deve ser usado, no caso do elemento <input>, apenas nos botões gráficos.

", - "G125": "

A natureza da WWW é disponibilizar nas páginas links para outras páginas relacionadas. É isso que permite aos utilizadores navegar pela informação. Uma página Web sem links é, à priori, estranho!

", - "F89": "

Esta falha ocorre sempre que um link é composto por uma imagem e a imagem tem um equivalente textual alternativo vazio - desconfio que os utilizadores de Tecnologias de Apoio não saibam qual é o seu destino ou para que serve, ou que possam mesmo nem sequer dar conta que o link existe.

", - "H33": "

O atributo title é utilizado para proporcionar informação complementar à existente no texto do link. O atributo title e o texto do link devem ser suficientes para compreender o propósito do link.

", - "F84": "

É importante que os utilizadores consigam determinar o propósito e o destino do link sem recorrer ao contexto em que ele se encontra. Há utilizadores cujas Tecnologias de Apoio lhes fornecem todos os links da página em forma de listagem, sem qualquer contexto.

", - "H2": "

No caso de links adjacentes que apontam exatamente para o mesmo recurso é sinal que os podemos agregar num só link. Geralmente, nestes casos, temos a sensação visual de estar perante um único link mas no caso de alguns utilizadores de Tecnologias de Apoio surgem duplicados, podendo resultar confuso.

", - "G1": "

Disponibilize no topo da página um link que permita saltar diretamente para o conteúdo principal da mesma. Este link facilita a navegação a muitos utilizadores, nomeadamente os que usam software de seleção por varrimento. Estes utilizadores usam a visão para ler a informação pelo que o link tem de estar sempre visível ou ficar visível ao receber o foco.

", - "G123": "

Verifique se de facto os links que encontrei proporcionam os saltos de conteúdo mais adequados; se os mesmos estão sempre visíveis ou se ficam visíveis ao receberem o foco via teclado.

", - "H42": "

As páginas Web devem ser marcadas com uma estrutura hierarquizada de títulos e subtítulos. Cada página deve ter, no mínimo, um título de nível 1. O nível 2 deve marcar as secções e o nível 3 as subsecções destas. Esta mesma lógica deve ser aplicada até às subsecções de nível 6.

", - "G141": "

As páginas Web devem ser marcadas com uma estrutura hierarquizada de títulos e subtítulos. Cada página deve ter, no mínimo, um título de nível 1. O nível 2 deve marcar as secções e o nível 3 as subsecções destas. Esta mesma lógica deve ser aplicada até às subsecções de nível 6.

", - "G130": "

Os cabeçalhos devem ser descritivos mas ao mesmo tempo sucintos. O seu conteúdo nunca, em caso algum, deve ser nulo - é o que está a acontecer neste caso.

", - "H48": "

Se o conteúdo que identifiquei é, na verdade, uma lista de opções então use a marcação estrutural correta (i.e. <ul>, <ol>).

", - "H71": "

Os controlos de formulário podem ser agrupados, de acordo com a sua afinidade, através do elemento <fieldset>. O primeiro elemento dentro do <fieldset> deve ser o <legend>, o qual serve de etiqueta ou descrição para o agrupamento.

", - "G162": "

As etiquetas devem ser posicionadas imediatamente antes dos campos. As etiquetas para os campos do tipo listas de verificação (checkbox) e do tipo botões de rádio (radio) devem ser posicionadas logo após os campos.

", - "H44": "

Os elementos <label> associados aos elementos <input> permitem aos utilizadores de Tecnologias de Apoio identificar a etiqueta que contextualiza um campo de edição. A associação explicita é feita pelo par de atributos id e for, respetivamente, dos elementos <input> e <label>.

", - "H65": "

Para preencher os campos de edição, os utilizadores precisam que os mesmos estejam identificados. Pode ser uma identificação explicita (marcada no código) ou implícita (geralmente derivada da posição relativa). Explicitamente pode ser feita pelo elemento <label> ou pelo atributo title do elemento <input>.

", - "F55": "

Percorra os campos de edição e verifique se o foco é inibido por técnicas de programação. Ao retirar o foco do conteúdo, este deixa de ser operável por quem usa apenas teclado para navegar.

", - "H32": "

Depois de preenchido, é necessário submeter os dados do formulário ao servidor. Essa é a função do botão submeter ou submit button.

", - "H39": "

Desconfio que possa ter encontrado tabelas de dados sem a identificação do título (<caption>).

", - "H73": "

Desconfio que possa ter encontrado tabelas de dados em que o conteúdo que se encontra no elemento <caption> é o mesmo que está no atributo summary.

", - "F46": "

Desconfio que possa ter encontrado tabelas de dados sem a identificação dos cabeçalhos. Caso contrário, poderão ser tabelas layout e neste caso têm título, que deve ser retirado.

", - "H43": "

Em tabelas de dados complexas (com cabeçalhos em várias linhas) é importante associar explicitamente as células de dados aos vários cabeçalhos que lhe dão contexto. Essa associação é feita com o atributo headers.

", - "H63": "

O atributo scope identifica se uma célula constitui um cabeçalho de uma linha, de uma coluna, de um grupo de linhas ou de um grupo de colunas. Os valores row, col, rowgroup e colgroup identificam respectivamente os valores que o scope pode assumir.

", - "H51": "

Apesar das WCAG não proibirem o uso de tabelas layout é recomendável não as usar. Se as tabelas em causa forem de dados então marque as células de cabeçalho convenientemente.

", - "F49": "

Ao linearizar as tabelas verifique se o conteúdo é percetível.

", - "H64": "

As molduras (frame) são janelas onde é possível visualizar conteúdo proveniente de outro servidor. É importante identificar convenientemente essas molduras. Use o atributo title para o efeito!

", - "F52": "

Alguns sítios Web abrem uma nova janela assim que a página carrega, para publicitar um produto ou serviço. Assegure-se que isto não desorienta os utilizadores.

", - "G102": "

Marque as abreviaturas e/ou acrónimos com a respetiva extensão. No caso de HTML5 usa-se o elemento <abbr> quer para marcar abreviaturas quer para marcar acrónimos. Por exemplo: <abbr title=\"Fundação para a Ciência e a Tecnologia\">FCT</abbr>

", - "C21": "

Muitas pessoas com incapacidades cognitivas têm dificuldade em acompanhar as linhas do texto quando o texto se apresenta com um espaçamento simples. Usar um espaçamento entre 1,5 e 2, facilita-lhes a passagem entre linhas.

", - "F88": "

Algumas pessoas com baixa visão e algumas pessoas com incapacidades cognitivas têm grande dificuldade em lidar com blocos de texto que se encontram justificados.

", - "C19": "

Algumas pessoas com baixa visão e algumas pessoas com incapacidades cognitivas têm grande dificuldade em lidar com blocos de texto que se encontram justificados.

", - "C12": "

Quando o tamanho do texto está expresso em unidades absolutas há browsers que terão dificuldade em ampliar o texto.

", - "G146": "

Amplie 200% o ecrã e verifique que todo o conteúdo é visível sem necessidade de efetuar varrimentos horizontais.

", - "C24": "

Amplie 200% o ecrã e verifique que todo o conteúdo é visível sem necessidade de efetuar varrimentos horizontais.

", - "G145": "

De acordo com o critério de sucesso 1.4.3, o rácio 3 para 1 corresponde ao contraste mínimo para texto \"em tamanho grande\" (18 pt ou 14 pt negrito, ou maior). Recordo que para tamanho de letra normal o rácio mínimo é de 4,5 para 1.

", - "F24": "

Não é necessário que a cor da letra e a cor do fundo estejam definidos na mesma regra de CSS mas é recomendável que assim seja. Esta é a única forma de garantir ao utilizador a obtenção do contraste desejado.

", - "F4": "

Alguns grupos de utilizadores, particularmente os que têm perturbações que causam défices de atenção, encontram no conteúdo cintilante elementos de distracção, dificultando-lhes a capacidade de concentração nas restantes partes do conteúdo da página Web.

", - "G90": "

Deve assegurar que os eventos de javascript são ativados não só através do rato mas também do teclado. Verifique os pares de manipuladores: mousedown/keydown, mouseup/keyup, mouseover/focus, mouseout/blur. Nota: O AccessMonitor não verifica o par onclick / onkeypress porque considera que os browsers suportam o onclick também quando se usa apenas o teclado. Este teste só é classificado correto quando não existem erros nos outros testes de manipulares verificados.

", - "SCR20": "

Deve assegurar que os eventos de javascript são ativados não só através do rato mas também do teclado. Verifique os pares de manipuladores: mousedown/keydown, mouseup/keyup, mouseover/focus, mouseout/blur. Nota: O AccessMonitor não verifica o par onclick / onkeypress porque considera que os browsers suportam o onclick também quando se usa apenas o teclado.

", - "F59": "

Os elementos genéricos como <div> e <span> não têm um papel pré-definido. Quando se faz uso destes elementos genéricos para criar controlos de interface de utilizador em HTML, as tecnologias de apoio não dispõem de informação suficiente para descrever e interagir com os controlos, nomeadamente se não se definir um \"role\" (papel) com técnicas de ARIA.

", - "G134": "

Os erros de HTML são uma das causas para as páginas Web se apresentarem de forma inconsistente nos vários browsers. Seguir uma especificação e validar a sintaxe de acordo com essa especificação potencia a consistência e correta interpretação por parte das tecnologias, nomeadamente as Tecnologias de Apoio.

", - "C22": "

Esta prática está obsoleta. Em vez dela, deve usar as CSS para controlar a apresentação visual do texto. Quando este erro surge é porque está a usar dentro do elemento <body> da página os elementos: b, basefont, font, i, s, strike, u, ou os atributos: text, vlink, alink, link.

", - "G115": "

Com o aparecimento das CSS todos os elementos de HTML usados para controlo de estilos da página ficaram obsoletos. Elementos como: b, big, blink, center, font, i, s, strike, u ficaram obsoletos - use CSS para os substituir

", - "H57": "

O HTML apenas dispõe do atributo lang. O XHTML 1.1 apenas permite o xml:lang. O XHTML 1.0 (como medida de transição) permite ambos os atributos. O XHTML servido como text/html utiliza os atributos lang e xml:lang do elemento html.

", - "H25": "

Tome nota que o elemento <title> apenas deve aparecer uma vez na página.

", - "F25": "

Define-se como condição de falha sempre que uma página Web tem um título igual a um título de outra página do mesmo sítio Web. Cada página deve possuir um título único que identifique o propósito dos conteúdos.

", - "G88": "

O <title> de cada página deve: (1) identificar o assunto da página; (2) fazer sentido quando lido fora do contexto; (3) ser curto.

", - "H59": "

Verifique se em cada cada um dos elementos <link> existentes no <head> da página, o href aponta um recurso apropriado.

", - "F41": "

O valor \"refresh\" deve ser usado com cuidado, uma vez que ele retira o controlo da página ao utilizador.

", - "F40": "

O valor “redirect\" deve ser usado com cuidado, uma vez que ele retira o controlo da página ao utilizador.

", - "ff89c9": "

Quando se define explicitamente o papel semântico de um elemento, deve garantir-se que se ele tiver um contexto obrigatório, os pais do elemento fornecem esse contexto.

", - "bc4a75": "

Quando se define explicitamente o papel semântico de um elemento, deve garantir-se que se ele tiver filhos obrigatórios, pelo menos um destes existe.

", - "6a7281": "

A especificação ARIA define o tipo de valores que os estados e as propriedades ARIA podem assumir. Garanta que usa valores do tipo correto, caso contrário o seu código não irá produzir o efeito desejado.

", - "5c01ea": "

As especificações HTML e ARIA definem os estados e propriedades ARIA que são permitidos nos diferentes elementos HTML. Garanta que apenas usa estados e propriedades permitidos, caso contrário o seu código não irá produzir o efeito desejado.

", - "5f99a7": "

A especificação ARIA define o conjunto de atributos que podem ser usados. Se usar atributos que não estão definidos na especificação, eles não irão funcionar.

", - "80f0bf": "

Elementos <audio> e <video> que tocam automaticamente podem prejudicar utilizadores de leitor de ecrã ao sobreporem o som. Por isso, estes elementos não devem tocar automaticamente, ou, caso toquem, devem ter áudio inferior a 3 segundos, ou possuir um mecanismo que permita interromper ou silenciar o áudio.

", - "73f2c2": "

As regras de preenchimento dos atributos autocomplete são definidas na especificação HTML. Garante que obedece as estas regras, caso contrário, os elementos não serão preenchidos automaticamente.

", - "97a4e1": "

Os elementos <button&t; são elementos com os quais o utilizador pode interagir. Por isso, devem ter nome acessível de modo a que utilizadores de tecnologias de apoio saibam qual o seu propósito.

", - "oj04fd": "

O foco visível permite distinguir quando é os elementos na ordem de foco sequencial recebem o foco. Verifique que todos os elementos na ordem de foco sequencial têm um indicador de foco visível quando recebem o foco.

", - "6cfa84": "

Os elementos com o atributo aria-hidden são escondidos das tecnologias de apoio. Se forem focáveis por teclado, quando forem focados os utilizadores de tecnologias de apoio não recebem informação sobre esses elementos.

", - "46ca7f": "

Os elementos decorativos não têm conteúdo informativo que deve ser apresentado aos utilizadores. Assim, estes elementos não devem ser expostos às Tecnologias de Apoio, para que não sejam apresentados aos seus utilizadores.

", - "H58": "

Quando existem mudanças na linguagem do documento, estas devem ser identificadas recorrendo ao atributo lang.

", - "307n5z": "

Elementos com um papel semântico que confere aos seus descendentes um papel decorativo, não devem possuir conteúdo focável, pois este conteúdo, quando for focado, não será apresentado às Tecnologias de Apoio.

", - "4e8ab6": "

Quando se define explicitamente o papel semântico de um elemento é necessário garantir que todos os estados e propriedades necessários ao funcionamento correto desse papel semântico com Tecnologias de Apoio foram definidos.

", - "H93": "

É conhecido que ter o mesmo atributo id em diferentes elementos causa problemas às tecnologias de apoio. Estes problemas podem ser evitados se garantir que na mesma página não se usam valores de id duplicados.

", - "4b1c6c": "

O nome acessível de um elemento iframe permite aos utilizadores de Tecnologias de Apoio saber o propósito do conteúdo desse elemento. Verifique que quando dois elementos iframe têm o mesmo nome acessível, o seu conteúdo serve o mesmo propósito.

", - "G202": "

Verifique se o equivalente alternativo em texto existente nos elementos svg serve informação ou função igual à desempenhada pela imagem na página.

", - "24afc2": "

Um espaçamento entre letras igual ou superior a 0,12 vezes o tamanho da fonte é importante para garantir que todos os utilizadores conseguem ler o texto. Os estilos CSS não devem impedir que os utilizadores aumentem o espaçamento entre letras se assim o entenderem.

", - "G91": "

A descrição de um link permite ao utilizador compreender o destino da ligação e decidir se quer seguir a ligação ou não.

", - "fd3a94": "

É importante que links com o mesmo nome acessível e que partilhem o mesmo contexto não levem para destinos com diferentes propósitos, pois isso confundirá o utilizador.

", - "m6b1q3": "

Os elementos com o papel semântico menuitem correspondem a opções de navegação que o utilizador por selecionar. Se não tiverem nome acessível, os utilizadores de tecnologias de apoio não conseguirão saber a opção que estão a selecionar.

", - "G110": "

Redirecionamentos implementados no cliente e que não acontecem instantaneamente, podem causar confusão aos utilizadores, pois estes não entendem a razão pela qual o redirecionamento aconteceu.

", - "b4f0c3": "

Alguns browsers mais antigos de dispositivos móveis podem limitar a capacidade do utilizador fazer zoom na página, em função dos valores do atributo viewport do elemento meta. Apesar dos browsers mais recentes ignorarem estes atributos é sempre preferível não dar instruções que podem limitar as capacidades do utilizador.

", - "8fc3b6": "

Quando algum elemento object é usado para apresentar conteúdo não-textual, é necessário garantir que o nome acessível deste elemento existe, para que utilizadores de Tecnologias de Apoio possam saber que conteúdo está a ser apresentado pelo object.

", - "b33eff": "

Alguns utilizadores precisam de usar os seus dispositivos numa orientação específica. Se a página impedir o seu conteúdo de se adaptar à orientação do dispositivo, esses utilizadores ficam impossibilitados de a usar corretamente.

", - "674b10": "

As Tecnologias de Apoio precisam de entender a semântica dos elementos de modo a poder transmitir corretamente aos seus utilizadores os conteúdos e possibilidades de interação disponibilizados pelos elementos de uma página. Quando definir explicitamente o role de um elemento, deve assegurar-se que o valor do role é um valor válido.

", - "d0f69e": "

Em tabelas de dados, o contexto que permite dar significado à informação é transmitido pelas células cabeçalho (que se aplicam às linhas ou às colunas da tabela). Estes cabeçalhos devem estar atribuídos, implicitamente ou explicitamente, a células de dados.

", - "G17": "

De acordo com o critério de sucesso 1.4.6, o rácio 4.5 para 1 corresponde ao contraste otimizado para texto \"em tamanho grande\" (18 pt ou 14 pt negrito, ou maior). Recordo que para tamanho de letra normal o rácio otimizado é de 7 para 1.

", - "G87": "

O áudio de um vídeo deve ser apresentado na página sob a forma de uma alternativa acessível. Esta alternativa pode ser a legendagem do vídeo ou a inclusão de texto na página correspondente ao conteúdo áudio do vídeo.

", - "G8": "

O conteúdo visual de um vídeo deve ser apresentado na página sob a forma de uma alternativa acessível. Esta alternativa pode ser uma áudio descrição ou uma transcrição do vídeo.

", - "G208": "

Os utilizadores de sistemas de reconhecimento de fala, tipicamente dizem o nome de um comando seguido de uma referência ao texto de um elemento (p.ex. selecionar pesquisa, para ativar o botão com o texto “pesquisa”). Os sistemas de reconhecimento de fala usam o nome acessível do elemento para o associar ao comando do utilizador. Assim, se o nome acessível não incluir o texto visível, estes sistemas não conseguirão fazer a associação necessária ao seu funcionamento.

", - "9e45ec": "

Um espaçamento entre palavras igual ou superior a 0,16 vezes o tamanho da fonte é importante para garantir que todos os utilizadores conseguem ler o texto. Os estilos CSS não devem impedir que os utilizadores aumentem o espaçamento entre palavras se assim o entenderem.

", - "59br37": "

Ao ampliar a página a dimensão relativa do texto e dos seus contentores pode mudar o que faz com que estes possam necessitar de mais espaço para apresentar o mesmo texto. A propriedade CSS overflow determina como os contentores se ajustam. Alguns dos seus valores podem resultar no texto ser cortado.

", - "ARIA11": "

Garanta que só há um elemento com a semântica de main na página. Elementos com esta semântica designam a parte principal da página e permitem que utilizadores de leitor de ecrã naveguem rapidamente para essa parte da página. Cada página só deve ter um conteúdo principal, independentemente de ser especificado usando HTML5 ou ARIA.

", - "H40": "

Se uma lista de descrições conter elementos que não são itens da lista, ou se a ordem dos elementos não estiver correta, isto é, os elementos

precederem os elementos
, a lista estará mal formatada, e tecnologias de apoio não serão capazes de a apresentar corretamente.

" - }, - "TECHFAIL": { - "relationF": "Esta falha WCAG 2.1 está relacionada com:", - "relationT": "Esta técnica WCAG 2.1 está relacionada com:", - "relationACT": "Esta regra ACT está relacionada com:" - } -}