Ver código fonte

Merge branch 'main' into main

Melanie Caballero Pastor 4 anos atrás
pai
commit
696212e082
2 arquivos alterados com 265 adições e 219 exclusões
  1. 80 68
      index.html
  2. 185 151
      scripts/script.js

+ 80 - 68
index.html

@@ -1,68 +1,80 @@
-<!doctype html>
-<html lang="en-GB">
-<head>
-	<title>WCAG</title>
-
-	<meta charset="utf-8">
-	<meta name="viewport" content="width=device-width, initial-scale=1">
-	<link rel="shortcut icon" href="images/favicon.ico">
-	<link href="./css/bootstrap.css" rel="stylesheet">
-
-</head>
-
-<style>
-
-	button{	margin-top: 5px;}
-	legend{	margin-top: 5px;font-size:inherit;}
-
-</style>
-
-<body>
-
-	<div class="container">
-
-		<h1>WCAG <span id="wcagVersion">2.1</span></h1>
-		<div class="row">
-			<div class="col-sm-12 col-lg-7">
-				<p role="status">
-					Showing <span class="badge bg-primary" id="returnedResults">78</span> tests categorised by <span class="badge bg-primary" id="filter">all</span> success criteria
-				</p>
-			</div>
-		</div>
-
-		<fieldset>
-			<div class="row bg-light" style="padding:20px;">
-				<div class="col-3" style="padding-left:0px;">
-					<legend>Categorise WCAG</legend>
-				</div>
-				<div class="col" style="text-align:right">
-					<button type="button" class="btn btn-primary btn-sm">all</button>
-					<button type="button" class="btn btn-secondary btn-sm">content</button>
-					<button type="button" class="btn btn-secondary btn-sm">custom-controls</button>
-					<button type="button" class="btn btn-secondary btn-sm">forms-and-UI</button>
-					<button type="button" class="btn btn-secondary btn-sm">audio-video</button>
-					<button type="button" class="btn btn-secondary btn-sm">structure</button>
-					<button type="button" class="btn btn-secondary btn-sm">colour</button>
-					<button type="button" class="btn btn-secondary btn-sm">font-size</button>
-					<button type="button" class="btn btn-secondary btn-sm">dynamic-content</button>
-					<button type="button" class="btn btn-secondary btn-sm">keyboard</button>
-					<button type="button" class="btn btn-secondary btn-sm">link</button>
-				</div>
-			</div>
-		</fieldset>
-
-		<div style="overflow-x: auto;">
-		<table class="table">
-			<caption class="visually-hidden">WCAG success criteria sorted by category</caption>
-			<thead style="border-top:0px"><th>Understanding Criteria</th><th>Level</th><th>Version</th><th style="width: 40%;">Intent</th><th style="width: 40%;">Benefits</th><th>Category</th></thead>
-			<tbody></tbody>
-		</table>
-		</div>
-
-	</div>
-	</body>
-
-	<script src="./data/json-EN.js"></script>
-	<script src="./scripts/script.js"></script>
-
-</html>
+<!doctype html>
+<html lang="en-GB">
+<head>
+	<title>WCAG</title>
+
+	<meta charset="utf-8">
+	<meta name="viewport" content="width=device-width, initial-scale=1">
+	<link rel="shortcut icon" href="images/favicon.ico">
+	<link href="./css/bootstrap.css" rel="stylesheet">
+
+</head>
+
+<style>
+
+	button{	margin-top: 5px;}
+	legend{	margin-top: 5px;font-size:inherit;}
+
+</style>
+
+<body>
+
+	<div class="container">
+		<h1>WCAG</h1>
+		<div class="row">
+			<div class="col-sm-12 col-lg-7">
+				<p role="status">
+					Showing <span class="badge bg-primary" id="returnedResults">78</span> understanding criteria categorised by <span class="badge bg-primary" id="filter" data-level="">all</span> success criteria. Level <span class="badge bg-primary" id="level" >All</span>.
+				</p>
+			</div>
+		</div>
+
+		<fieldset>
+			<div class="row bg-light" style="padding:20px;">
+				<div class="col-3" style="padding-left:0px;">
+					<legend>Categorise WCAG</legend>
+				</div>
+				<div class="col" style="text-align:right">
+					<button type="button" onclick="btnLevel(this)" class="btn btn-primary btn-sm level">All</button>
+					<button type="button" onclick="btnLevel(this)" class="btn btn-info dark-text btn-sm level">A</button>
+					<button type="button" onclick="btnLevel(this)" class="btn btn-warning dark-text btn-sm level">AA</button>
+					<button type="button" onclick="btnLevel(this)" class="btn btn-danger btn-sm level">AAA</button>
+				</div>
+			</div>
+		</fieldset>
+
+		<fieldset>
+			<div class="row bg-light" style="padding:20px;">
+				<div class="col-3" style="padding-left:0px;">
+					<legend>Categorise WCAG</legend>
+				</div>
+				<div class="col" style="text-align:right">
+					<button type="button" onclick="btnCategory(this)" class="btn btn-primary btn-sm category">all</button>
+					<button type="button" onclick="btnCategory(this)" class="btn btn-secondary btn-sm category">content</button>
+					<button type="button" onclick="btnCategory(this)" class="btn btn-secondary btn-sm category">forms-and-UI</button>
+					<button type="button" onclick="btnCategory(this)" class="btn btn-secondary btn-sm category">audio-video</button>
+					<button type="button" onclick="btnCategory(this)" class="btn btn-secondary btn-sm category">structure</button>
+					<button type="button" onclick="btnCategory(this)" class="btn btn-secondary btn-sm category">colour</button>
+					<button type="button" onclick="btnCategory(this)" class="btn btn-secondary btn-sm category">font-size</button>
+					<button type="button" onclick="btnCategory(this)" class="btn btn-secondary btn-sm category">dynamic-content</button>
+					<button type="button" onclick="btnCategory(this)" class="btn btn-secondary btn-sm category">keyboard</button>
+					<button type="button" onclick="btnCategory(this)" class="btn btn-secondary btn-sm category">link</button>
+				</div>
+			</div>
+		</fieldset>
+
+		<div style="overflow-x: auto;">
+		<table class="table">
+			<caption class="visually-hidden">WCAG success criteria sorted by category</caption>
+			<thead style="border-top:0px"><th>Understanding Criteria</th><th>Level</th><th>Version</th><th style="width: 40%;">Intent</th><th style="width: 40%;">Benefits</th><th>Category</th></thead>
+			<tbody></tbody>
+		</table>
+		</div>
+
+	</div>
+	</body>
+
+	<script src="./data/json-EN.js"></script>
+	<script src="./scripts/script.js"></script>
+
+</html>

+ 185 - 151
scripts/script.js

@@ -1,151 +1,185 @@
-const tableBody = document.querySelector('tbody');
-const filteredBy = document.getElementById('filter');
-const wcagVersion = document.getElementById('wcagVersion');
-
-function populateTable(obj, filter)
-{
-	let cssSpan
-	const resultsElement = document.getElementById('returnedResults');
-	const tests = obj['intents'];
-	let returnedResults = 0
-
-	wcagVersion.textContent = obj.latestWCAGversion;
-
-	for(let i = 0;i < tests.length; i++)
-	{
-		const tableRow = document.createElement('tr');
-		for (let key in tests[i])
-		{
-			if (tests[i].hasOwnProperty(key))
-			{
-				if(key!=='link')
-				{
-					const val = tests[i][key]
-					const tableData = document.createElement('td')
-
-					if(tests[i].category.includes(filter) || filter == 'all')
-					{
-						if(key=='category')
-						{
-							returnedResults++;
-							for(let a = 0;a < tests[i][key].length; a++)
-							{
-								cssSpan = document.createElement('span')
-								cssSpan.textContent = val[a];
-								cssSpan.classList.add('bg-primary');
-								cssSpan.classList.add('badge');
-								cssSpan.classList.add('rounded-pill');
-								tableData.appendChild(cssSpan);
-							}
-						}
-						else if(key==='wcagLevel')
-						{
-							cssSpan = document.createElement('span')
-							cssSpan.textContent = val;
-							cssSpan.classList.add(val);
-							tableData.appendChild(cssSpan);
-						/*	switch(val)
-							{
-								case 'A':
-									var cssSpan = document.createElement('span');
-									cssSpan.textContent = val;
-									cssSpan.classList.add(val);
-									/*cssSpan.classList.add('text-dark');
-									cssSpan.classList.add('badge');
-									cssSpan.classList.add('rounded-pill');
-									tableData.appendChild(cssSpan);
-									break;
-								case 'AA':
-									var cssSpan = document.createElement('span');
-									cssSpan.textContent = val;
-									cssSpan.classList.add('bg-success');
-									cssSpan.classList.add('badge');
-									cssSpan.classList.add('rounded-pill');
-									tableData.appendChild(cssSpan);
-									break;
-								case 'AAA':
-									var cssSpan = document.createElement('span');
-									cssSpan.textContent = val;
-									cssSpan.classList.add('bg-warning');
-									cssSpan.classList.add('text-dark');
-									cssSpan.classList.add('badge');
-									cssSpan.classList.add('rounded-pill');
-									tableData.appendChild(cssSpan);
-									break;
-								default:
-									tableData.textContent = val;
-									break;
-							} */
-						}
-						else if(key=='understandingCriteria')
-						{
-							const a = document.createElement('a');
-							const linkText = document.createTextNode(val);
-							a.appendChild(linkText);
-							a.title = val
-							a.target = '_blank';
-							a.href = tests[i].link;
-							tableData.appendChild(a);
-						}
-						else if(key=='benefit')
-						{
-							const ul = document.createElement('ul');
-							const lista = val.split("#")
-							lista.forEach(element => {
-								const li = document.createElement('li');
-								const liText = document.createTextNode(element);
-								li.appendChild(liText);
-								ul.appendChild(li)
-							});
-							tableData.appendChild(ul);
-						}
-						else if(key="intent")
-						{
-							const pText = val.split("#")
-							pText.forEach(element => {
-								const p = document.createElement('p');
-								const pText = document.createTextNode(element);
-								p.appendChild(pText);
-								tableData.appendChild(p);
-							});
-						}
-						tableRow.appendChild(tableData);
-						tableBody.appendChild(tableRow);
-					}
-				}
-			}
-		}
-
-	}
-	resultsElement.textContent = returnedResults;
-}
-
-const btns = document.querySelectorAll('button');
-for (i of btns)
-{
-  i.addEventListener('click', function(){
-		tableBody.innerHTML = '';
-		populateTable(wcagObj,this.textContent);
-		filteredBy.textContent = this.textContent;
-  });
-}
-
-const hashstring = window.location.hash;
-switch(hashstring.replace('#',''))
-{
-	case 'dynamic-content':
-	case 'custom-controls':
-	case 'forms-and-UI':
-	case 'audio-video':
-	case 'structure':
-	case 'colour':
-	case 'content':
-	case 'keyboard':
-	case 'link':
-	case 'font-size':
-		populateTable(wcagObj, hashstring.replace('#',''));
-		break;
-	default:
-		populateTable(wcagObj, 'all');
-		break;
-}
+const tableBody = document.querySelector('tbody');
+const filterCategory = document.getElementById('filter');
+const level = document.getElementById('level')
+const resultsElement = document.getElementById('returnedResults');
+const tests = wcagObj['intents'];
+
+function populateTable(obj, filter)
+{
+	let cssSpan
+	const resultsElement = document.getElementById('returnedResults');
+	const tests = obj['intents'];
+	let returnedResults = 0
+
+	wcagVersion.textContent = obj.latestWCAGversion;
+
+	for(let i = 0;i < tests.length; i++)
+	{
+		const tableRow = document.createElement('tr');
+		for (let key in tests[i])
+		{
+			if (tests[i].hasOwnProperty(key))
+			{
+				if(key!=='link')
+				{
+					const val = tests[i][key]
+					const tableData = document.createElement('td')
+
+					if(tests[i].category.includes(filter) || filter == 'all')
+					{
+						if(key=='category')
+						{
+							returnedResults++;
+							for(let a = 0;a < tests[i][key].length; a++)
+							{
+								cssSpan = document.createElement('span')
+								cssSpan.textContent = val[a];
+								cssSpan.classList.add('bg-primary');
+								cssSpan.classList.add('badge');
+								cssSpan.classList.add('rounded-pill');
+								tableData.appendChild(cssSpan);
+							}
+						}
+						else if(key==='wcagLevel')
+						{
+							cssSpan = document.createElement('span')
+							cssSpan.textContent = val;
+							cssSpan.classList.add(val);
+							tableData.appendChild(cssSpan);
+						/*	switch(val)
+							{
+								case 'A':
+									var cssSpan = document.createElement('span');
+									cssSpan.textContent = val;
+									cssSpan.classList.add(val);
+									/*cssSpan.classList.add('text-dark');
+									cssSpan.classList.add('badge');
+									cssSpan.classList.add('rounded-pill');
+									tableData.appendChild(cssSpan);
+									break;
+								case 'AA':
+									var cssSpan = document.createElement('span');
+									cssSpan.textContent = val;
+									cssSpan.classList.add('bg-warning');
+									cssSpan.classList.add('text-dark');
+									cssSpan.classList.add('badge');
+									cssSpan.classList.add('rounded-pill');
+									tableData.appendChild(cssSpan);
+									break;
+								case 'AAA':
+									var cssSpan = document.createElement('span');
+									cssSpan.textContent = val;
+									cssSpan.classList.add('bg-danger');
+									cssSpan.classList.add('badge');
+									cssSpan.classList.add('rounded-pill');
+									tableData.appendChild(cssSpan);
+									break;
+								default:
+									tableData.textContent = val;
+									break;
+							} */
+						}
+						else if (key == 'category') {
+							returnedResults++;
+							for (let a = 0; a < tests[i][key].length; a++) {
+								var cssSpan = document.createElement('span');
+								cssSpan.textContent = val[a];
+								cssSpan.classList.add('bg-primary');
+								cssSpan.classList.add('badge');
+								cssSpan.classList.add('rounded-pill');
+								tableData.appendChild(cssSpan);
+							}
+						}
+						else if (key == 'understandingCriteria') {
+							const a = document.createElement('a');
+							const linkText = document.createTextNode(val);
+							a.appendChild(linkText);
+							a.title = val
+							a.target = '_blank';
+							a.href = tests[i].link;
+							tableData.appendChild(a);
+						}
+						else if(key=='benefit')
+						{
+							const ul = document.createElement('ul');
+							const lista = val.split("#")
+							lista.forEach(element => {
+								const li = document.createElement('li');
+								const liText = document.createTextNode(element);
+								li.appendChild(liText);
+								ul.appendChild(li)
+							});
+							tableData.appendChild(ul);
+						}
+						else if (key = "intent") {
+							const pText = val.split("#")
+							pText.forEach(element => {
+								const p = document.createElement('p');
+								const pText = document.createTextNode(element);
+								p.appendChild(pText);
+								tableData.appendChild(p);
+							});
+						}
+						tableRow.appendChild(tableData);
+						tableBody.appendChild(tableRow);
+					}
+				}
+			}
+		}
+	}
+	resultsElement.textContent = returnedResults;
+}
+
+function btnCategory(btn) {
+	filterCategory.textContent = btn.textContent;
+	populateTable();
+}
+
+function btnLevel(btn) {
+	const contentLevel = btn.textContent
+	const arrayLevels = level.innerHTML.split(",")
+
+	if (contentLevel == "All") {
+		level.textContent = 'All'
+	}
+	else if (arrayLevels.indexOf(contentLevel) !== -1) {
+		const newArray = arrayLevels.filter(item => item != contentLevel)
+		level.textContent = newArray.join()
+		if (level.innerHTML == "") {
+			level.textContent = 'All'
+		}
+	}
+	else {
+
+		if (arrayLevels.indexOf('All') !== -1) {
+			arrayLevels.splice(arrayLevels.indexOf('All'), 1)
+			level.textContent = arrayLevels.join()
+		}
+		arrayLevels.push(contentLevel)
+		if (arrayLevels.length === 3) {
+			level.textContent = 'All'
+		} else {
+		level.textContent = arrayLevels.join()
+		}
+	}
+	populateTable();
+}
+
+const hashstring = window.location.hash;
+switch (hashstring.replace('#', '')) {
+	case 'dynamic-content':
+	case 'custom-controls':
+	case 'forms-and-UI':
+	case 'audio-video':
+	case 'structure':
+	case 'colour':
+	case 'content':
+	case 'keyboard':
+	case 'link':
+	case 'font-size':
+		populateTable();
+		break;
+	default:
+		populateTable();
+		break;
+}