script.js 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562
  1. const criteria = wcagObj['criterion'];
  2. let lang = 'cat';
  3. let totalElem = "78";
  4. let version = 'All';
  5. let level = 'All';
  6. let category = 'All';
  7. const resume = document.getElementById('resume');
  8. let message;
  9. let checksAlias = [
  10. {
  11. "name" : "level",
  12. "alias" : {
  13. "cat" : "Nivell",
  14. "es" : "Nivel",
  15. "en" : "Level"
  16. }
  17. },
  18. {
  19. "name" : "version",
  20. "alias" : {
  21. "cat" : "Versió",
  22. "es" : "Versión",
  23. "en" : "Version"
  24. }
  25. },
  26. {
  27. "name" : "goal",
  28. "alias" : {
  29. "cat" : "Objectiu",
  30. "es" : "Objetivo",
  31. "en" : "Goal"
  32. }
  33. },
  34. {
  35. "name" : "intent",
  36. "alias" : {
  37. "cat" : "Intenció",
  38. "es" : "Intención",
  39. "en" : "Intent"
  40. }
  41. },
  42. {
  43. "name" : "benefits",
  44. "alias" : {
  45. "cat" : "Beneficis",
  46. "es" : "Beneficios",
  47. "en" : "Benefits"
  48. }
  49. },
  50. {
  51. "name" : "examples",
  52. "alias" : {
  53. "cat" : "Exemples",
  54. "es" : "Ejemplos",
  55. "en" : "Examples"
  56. }
  57. },
  58. {
  59. "name" : "techniques",
  60. "alias" : {
  61. "cat" : "Tècniques",
  62. "es" : "Técnicas",
  63. "en" : "Techniques"
  64. }
  65. },
  66. {
  67. "name" : "verification",
  68. "alias" : {
  69. "cat" : "Verificació",
  70. "es" : "Verificación",
  71. "en" : "Verification"
  72. }
  73. },
  74. {
  75. "name" : "tools",
  76. "alias" : {
  77. "cat" : "Eines",
  78. "es" : "Herramientas",
  79. "en" : "Tools"
  80. }
  81. },
  82. {
  83. "name" : "category",
  84. "alias" : {
  85. "cat" : "Categoria",
  86. "es" : "Categoría",
  87. "en" : "Category"
  88. }
  89. }
  90. ];
  91. let headers = [
  92. {
  93. "name" : "criteria",
  94. "alias" : {
  95. "cat" : "Criteri",
  96. "es" : "Criterio",
  97. "en" : "Criteria"
  98. },
  99. "view" : true
  100. },
  101. {
  102. "name" : "link",
  103. "alias" : "Link",
  104. "view" : false
  105. },
  106. {
  107. "name" : "level",
  108. "alias" : {
  109. "cat" : "Nivell",
  110. "es" : "Nivel",
  111. "en" : "Level"
  112. },
  113. "view" : true
  114. },
  115. {
  116. "name" : "version",
  117. "alias" : {
  118. "cat" : "Versió",
  119. "es" : "Versión",
  120. "en" : "Version"
  121. },
  122. "view" : true
  123. },
  124. {
  125. "name" : "goal",
  126. "alias" : {
  127. "cat" : "Objectiu",
  128. "es" : "Objetivo",
  129. "en" : "Goal"
  130. },
  131. "view" : true
  132. },
  133. {
  134. "name" : "intent",
  135. "alias" : {
  136. "cat" : "Intenció",
  137. "es" : "Intención",
  138. "en" : "Intent"
  139. },
  140. "view" : true
  141. },
  142. {
  143. "name" : "benefits",
  144. "alias" : {
  145. "cat" : "Beneficis",
  146. "es" : "Beneficios",
  147. "en" : "Benefits"
  148. },
  149. "view" : false
  150. },
  151. {
  152. "name" : "examples",
  153. "alias" : {
  154. "cat" : "Exemples",
  155. "es" : "Ejemplos",
  156. "en" : "Examples"
  157. },
  158. "view" : false
  159. },
  160. {
  161. "name" : "techniques",
  162. "alias" : {
  163. "cat" : "Tècniques",
  164. "es" : "Técnicas",
  165. "en" : "Techniques"
  166. },
  167. "view" : false
  168. },
  169. {
  170. "name" : "verification",
  171. "alias" : {
  172. "cat" : "Verificació",
  173. "es" : "Verificación",
  174. "en" : "Verification"
  175. },
  176. "view" : false
  177. },
  178. {
  179. "name" : "tools",
  180. "alias" : {
  181. "cat" : "Eines",
  182. "es" : "Herramientas",
  183. "en" : "Tools"
  184. },
  185. "view" : false
  186. },
  187. {
  188. "name" : "category",
  189. "alias" : {
  190. "cat" : "Categoria",
  191. "es" : "Categoria",
  192. "en" : "Category"
  193. },
  194. "view" : false
  195. }
  196. ];
  197. function createTable() {
  198. const filterLevel = level.split(",");
  199. const filterVersion = version.split(",");
  200. const tableHeader = document.getElementById('thead');
  201. const tableBody = document.getElementById('tbody');
  202. const totalHead = tableHeader.children.length;
  203. const totalBody = tableBody.children.length;
  204. for(let g= 0; g<totalHead; g++) {
  205. if (tableHeader.children.length >0 ) { tableHeader.removeChild(tableHeader.children[0]); }
  206. }
  207. for (let i = 0; i < totalBody;i++ ) {
  208. if (tableBody.children.length > 0 ) { tableBody.removeChild(tableBody.children[0]); }
  209. }
  210. // Create table headers
  211. let tr = document.createElement('tr');
  212. headers.forEach(item => {
  213. if (item.view) {
  214. const th = document.createElement('th')
  215. th.setAttribute('scope', 'column')
  216. th.innerHTML = item.alias[lang];
  217. tr.appendChild(th)
  218. }
  219. })
  220. tableHeader.appendChild(tr)
  221. // Create table body
  222. criteria.forEach(item => {
  223. tr = document.createElement('tr')
  224. headers.forEach(head => {
  225. if (head.view===true && (item.category.includes(category) || category === 'All') && (filterLevel.find(lev => lev === item.level) || filterLevel[0] === 'All') && (filterVersion.find(lev => lev === item.version) || filterVersion[0] === 'All')) {
  226. const a = document.createElement('a');
  227. let linkText;
  228. if (typeof item[head.name] === 'object') {
  229. if (head.name === 'criteria') {
  230. const th = document.createElement('th')
  231. th.setAttribute('scope', 'row');
  232. linkText = document.createTextNode(item.criteria[lang]);
  233. a.appendChild(linkText);
  234. a.title = item.criteria[lang];
  235. a.target = '_blank';
  236. a.href = item.link;
  237. th.appendChild(a);
  238. tr.appendChild(th);
  239. } else {
  240. const td = document.createElement('td');
  241. td.innerHTML = item[head.name][lang];
  242. tr.appendChild(td);
  243. }
  244. } else {
  245. const td = document.createElement('td');
  246. if (head.name === 'examples' && item.examples != '') {
  247. switch (lang) {
  248. case 'cat':
  249. linkText = document.createTextNode(item.criteria[lang] + ' Exemples');
  250. a.title = item.criteria[lang] + ' Exemples';
  251. break;
  252. case 'es':
  253. linkText = document.createTextNode(item.criteria[lang] + ' Ejemplos');
  254. a.title = item.criteria[lang] + ' Ejemplos';
  255. break;
  256. case 'en':
  257. linkText = document.createTextNode(item.criteria[lang] + ' Examples');
  258. a.title = item.criteria[lang] + ' Examples';
  259. break;
  260. default:
  261. linkText = document.createTextNode(item.criteria[lang] + ' Examples');
  262. a.title = item.criteria[lang] + ' Examples';
  263. break;
  264. }
  265. a.appendChild(linkText);
  266. a.target = '_blank';
  267. a.href = item.examples;
  268. td.appendChild(a);
  269. } else if (head.name === 'techniques' && item.techniques != '') {
  270. switch (lang) {
  271. case 'cat':
  272. linkText = document.createTextNode(item.criteria.cat + ' Tècniques');
  273. a.title = item.criteria.cat + ' Tècniques';
  274. break;
  275. case 'es':
  276. linkText = document.createTextNode(item.criteria.es + ' Tecnicas');
  277. a.title = item.criteria.es + ' Tecnicas';
  278. break;
  279. case 'en':
  280. linkText = document.createTextNode(item.criteria.en + ' Techniques');
  281. a.title = item.criteria.en + ' Techniques';
  282. break;
  283. default:
  284. linkText = document.createTextNode(item.criteria.en + ' Techniques');
  285. a.title = item.criteria.en + ' Techniques';
  286. break;
  287. }
  288. a.appendChild(linkText);
  289. a.target = '_blank';
  290. a.href = item.techniques;
  291. td.appendChild(a);
  292. } else {
  293. td.innerHTML = item[head.name];
  294. }
  295. tr.appendChild(td);
  296. }
  297. }
  298. });
  299. if (tr.firstElementChild != null){
  300. tableBody.append(tr);
  301. }
  302. });
  303. total = document.getElementById('wcagTable').rows.length - 1;
  304. updateResume();
  305. }
  306. function translateInterface() {
  307. const legendLang = document.getElementById('btnLang').firstElementChild;
  308. switch (lang) {
  309. case 'cat':
  310. legendLang.innerHTML = 'Idioma';
  311. break;
  312. case 'es':
  313. legendLang.innerHTML = 'Idioma';
  314. break;
  315. case 'en':
  316. default:
  317. legendLang.innerHTML = 'Language';
  318. break;
  319. }
  320. const legendVersion = document.getElementById('btnVersion').firstElementChild;
  321. switch (lang) {
  322. case 'cat':
  323. legendVersion.innerHTML = 'Versió';
  324. break;
  325. case 'es':
  326. legendVersion.innerHTML = 'Versión';
  327. break;
  328. case 'en':
  329. default:
  330. legendVersion.innerHTML = 'Version';
  331. break;
  332. }
  333. const legendLevel = document.getElementById('btnLevel').firstElementChild;
  334. switch (lang) {
  335. case 'cat':
  336. legendLevel.innerHTML = 'Nivell';
  337. break;
  338. case 'es':
  339. legendLevel.innerHTML = 'Nivel';
  340. break;
  341. case 'en':
  342. default:
  343. legendLevel.innerHTML = 'Level';
  344. break;
  345. }
  346. const legendColumns = document.getElementById('columns').firstElementChild;
  347. switch (lang) {
  348. case 'cat':
  349. legendColumns.innerHTML = 'Columnes a mostrar';
  350. break;
  351. case 'es':
  352. legendColumns.innerHTML = 'Columnas a mostrar';
  353. break;
  354. case 'en':
  355. default:
  356. legendColumns.innerHTML = 'Show columns';
  357. break;
  358. }
  359. const checks = document.getElementsByClassName('checks');
  360. for (i=0; i < checks.length; i++) {
  361. checks[i].innerHTML = checksAlias[i].alias[lang];
  362. }
  363. const legendCategory = document.getElementById('btnCategory').firstElementChild;
  364. switch (lang) {
  365. case 'cat':
  366. legendCategory.innerHTML = 'Categoria';
  367. break;
  368. case 'es':
  369. legendCategory.innerHTML = 'Categoría';
  370. break;
  371. case 'en':
  372. default:
  373. legendCategory.innerHTML = 'Category';
  374. break;
  375. }
  376. }
  377. function updateResume() {
  378. switch (lang) {
  379. case 'cat':
  380. //message = 'Mostrar <span class="btn btn-info btn-sm">' + total + '</span> tests. Versió <span class="btn btn-info btn-sm">' + version + '</span> nivell <span class="btn btn-info btn-sm">' + level + '</span>. Categoritzats en <span class="btn btn-info btn-sm">' + category + '</span> criteris.';
  381. message = 'Mostrant <span class="btn btn-info dark-text btn-sm">' + total + '</span> tests. Versió <span class="btn btn-info btn-sm">' + version + '</span> nivell <span class="btn btn-info btn-sm">' + level + '</span>.';
  382. break;
  383. case 'es':
  384. //message = 'Showing <span class="btn btn-info btn-sm">' + total + '</span> tests. Version <span class="btn btn-info btn-sm">' + version + '</span> level <span class="btn btn-info btn-sm">' + level + '</span>. Categorised by <span class="btn btn-info btn-sm">' + category + '</span> criterios.';
  385. message = 'Mostrando <span class="btn btn-info dark-text btn-sm">' + total + '</span> tests. Versión <span class="btn btn-info btn-sm">' + version + '</span> nivel <span class="btn btn-info btn-sm">' + level + '</span>.';
  386. break;
  387. case 'en':
  388. //message = 'Showing <span class="btn btn-info btn-sm">' + total + '</span> tests. Version <span class="btn btn-info btn-sm">' + version + '</span> level <span class="btn btn-info btn-sm">' + level + '</span>. Categorised by <span class="btn btn-info btn-sm">' + category + '</span> criteria.';
  389. message = 'Showing <span class="btn btn-info dark-text btn-sm">' + total + '</span> tests. Version <span class="btn btn-info btn-sm">' + version + '</span> level <span class="btn btn-info btn-sm">' + level + '</span>.';
  390. break;
  391. default:
  392. //message = 'Showing <span class="btn btn-info btn-sm">' + total + '</span> tests. Version <span class="btn btn-info btn-sm">' + version + '</span> level <span class="btn btn-info btn-sm">' + level + '</span>. Categorised by <span class="btn btn-info btn-sm">' + category + '</span> criteria.';
  393. message = 'Showing <span class="btn btn-info dark-text btn-sm">' + total + '</span> tests. Version <span class="btn btn-info btn-sm">' + version + '</span> level <span class="btn btn-info btn-sm">' + level + '</span>.';
  394. break;
  395. }
  396. resume.innerHTML = message;
  397. }
  398. function btnLang(btn) {
  399. lang = btn.id
  400. const btns = document.getElementsByClassName('language');
  401. for (i=0; i< btns.length; i++) {
  402. if (btns[i].id === btn.id) {
  403. btns[i].ariaPressed = true;
  404. btns[i].classList.remove('btn-secondary');
  405. btns[i].classList.add('btn-primary')
  406. } else {
  407. btns[i].ariaPressed = false;
  408. btns[i].classList.remove('btn-primary');
  409. btns[i].classList.add('btn-secondary')
  410. }
  411. }
  412. translateInterface();
  413. createTable();
  414. }
  415. function btnVersion(btn) {
  416. const versions = document.getElementsByClassName('version');
  417. const arrayVersions = [];
  418. let checker = false;
  419. if (btn.textContent === 'All') {
  420. for (i=0; i< versions.length; i++) {
  421. versions[i].ariaPressed = false;
  422. }
  423. versions[0].ariaPressed = true;
  424. } else {
  425. versions[0].ariaPressed = false;
  426. btn.ariaPressed === 'true' ? btn.ariaPressed = false : btn.ariaPressed = true;
  427. }
  428. for (i=0; i< versions.length; i++) {
  429. if (versions[i].ariaPressed === 'true') {
  430. checker = true;
  431. versions[i].classList.remove('btn-secondary');
  432. versions[i].classList.add('btn-primary');
  433. arrayVersions.push(versions[i].textContent);
  434. } else {
  435. versions[i].ariaPressed = false;
  436. versions[i].classList.remove('btn-primary');
  437. versions[i].classList.add('btn-secondary');
  438. }
  439. console.log(versions[i].ariaPressed)
  440. }
  441. if (checker === false) {
  442. versions[0].ariaPressed = true;
  443. versions[0].classList.remove('btn-secondary');
  444. versions[0].classList.add('btn-primary');
  445. arrayVersions.push(versions[0].textContent);
  446. }
  447. version = arrayVersions.join();
  448. createTable()
  449. }
  450. function btnLevel(btn) {
  451. const levels = document.getElementsByClassName('level');
  452. const arrayLevels = [];
  453. let checker = false;
  454. if (btn.textContent === 'All') {
  455. for (i=0; i< levels.length; i++) {
  456. levels[i].ariaPressed = false;
  457. }
  458. levels[0].ariaPressed = true;
  459. } else {
  460. levels[0].ariaPressed = false;
  461. btn.ariaPressed === 'true' ? btn.ariaPressed = false : btn.ariaPressed = true;
  462. }
  463. for (i=0; i< levels.length; i++) {
  464. if (levels[i].ariaPressed === 'true') {
  465. checker = true;
  466. levels[i].classList.remove('btn-secondary');
  467. levels[i].classList.add('btn-primary');
  468. arrayLevels.push(levels[i].textContent);
  469. } else {
  470. levels[i].ariaPressed = false;
  471. levels[i].classList.remove('btn-primary');
  472. levels[i].classList.add('btn-secondary');
  473. }
  474. }
  475. if (checker === false) {
  476. levels[0].ariaPressed = true;
  477. levels[0].classList.remove('btn-secondary');
  478. levels[0].classList.add('btn-primary');
  479. arrayLevels.push(levels[0].textContent);
  480. }
  481. level = arrayLevels.join();
  482. createTable()
  483. }
  484. function showColumns(check){
  485. headers.forEach(item => {
  486. if (item.name === check.id) {
  487. console.log(item.view)
  488. item.view ? item.view = false : item.view = true;
  489. }
  490. })
  491. createTable();
  492. }
  493. function btnCategory(btn) {
  494. category = btn.textContent;
  495. createTable()
  496. }
  497. function init() {
  498. const btnLang = document.getElementsByClassName('language');
  499. const btnVersion = document.getElementsByClassName('version')[0];
  500. const btnLevel = document.getElementsByClassName('level')[0];
  501. const btnCategory = document.getElementsByClassName('level')[0];
  502. for (i=0; i < btnLang.length; i++) {
  503. if (btnLang[i].id === lang) {
  504. btnLang[i].ariaPressed = true;
  505. btnLang[i].classList.remove('btn-secondary');
  506. btnLang[i].classList.add('btn-primary')
  507. }
  508. }
  509. btnVersion.ariaPressed = true;
  510. btnVersion.classList.remove('btn-secondary');
  511. btnVersion.classList.add('btn-primary')
  512. btnLevel.ariaPressed = true;
  513. btnLevel.classList.remove('btn-secondary');
  514. btnLevel.classList.add('btn-primary')
  515. btnCategory.ariaPressed = true;
  516. btnCategory.classList.remove('btn-secondary');
  517. btnCategory.classList.add('btn-primary')
  518. headers.forEach(item => {
  519. if (item.name !== 'criteria' && item.name !== 'link') {
  520. if (item.view === true) {
  521. document.getElementById(item.name).checked = true;
  522. document.getElementById(item.name).ariaPressed = true;
  523. } else {
  524. document.getElementById(item.name).checked = false;
  525. document.getElementById(item.name).ariaPressed = false;
  526. }
  527. }
  528. })
  529. }
  530. init();
  531. translateInterface();
  532. createTable();