script-1.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433
  1. const tableHeader = document.querySelector('thead');
  2. const tableBody = document.querySelector('tbody');
  3. const filterCategory = document.getElementById('filter');
  4. const level = document.getElementById('level')
  5. const version = document.getElementById('version')
  6. const resultsElement = document.getElementById('returnedResults');
  7. const tests = wcagObj['criterion'];
  8. const headers = ['understandingCriteria', 'wcagLevel', 'wcagVersion', 'goal', 'intent', 'benefits', 'verification', 'verification', 'tools', 'category']
  9. const checks = ['understandingCriteria', 'wcagLevel', 'wcagVersion', 'goal', 'category']
  10. let lang = 'en'
  11. const headings = {
  12. understandingCriteria : {
  13. cat: 'Criteri',
  14. es: 'Criterio',
  15. 'en': 'Criteria'
  16. },
  17. wcagLevel: {
  18. cat: 'Nivell',
  19. es: 'Nivel',
  20. en: 'Level'
  21. },
  22. wcagVersion : {
  23. cat: 'Versió',
  24. es: 'Versión',
  25. en: 'Version'
  26. },
  27. goal : {
  28. cat: 'Objectiu',
  29. es: 'Objetivo',
  30. en: 'Goal'
  31. },
  32. intent : {
  33. cat: 'Intent',
  34. es: 'Intent',
  35. en: 'Intent'
  36. },
  37. benefits : {
  38. cat: 'Beneficis',
  39. es: 'Beneficios',
  40. en: 'Benefits'
  41. },
  42. verification : {
  43. cat: 'Verificació',
  44. es: 'Verificación',
  45. en: 'Verification'
  46. },
  47. tools : {
  48. cat: 'Eines',
  49. es: 'Herramientas',
  50. en: 'Tools'
  51. },
  52. category : {
  53. cat: 'Categoria',
  54. es: 'Categoría',
  55. en: 'Category'
  56. }
  57. }
  58. function populateTable() {
  59. const filterLevel = level.innerHTML.split(",")
  60. const filterVersion = version.innerHTML.split(",")
  61. let returnedResults = 0;
  62. tableHeader.innerHTML = ''
  63. tableBody.innerHTML = '';
  64. const tableHeaderRow = document.createElement('tr');
  65. for (let j = 0; j < headers.length; j++) {
  66. console.log(headings[headers[j]][lang])
  67. let tableHeader = document.createElement('th');
  68. let headerText = document.createTextNode(headings[headers[j]][lang])
  69. tableHeader.appendChild(headerText)
  70. tableHeaderRow.appendChild(tableHeader)
  71. }
  72. tableHeader.appendChild(tableHeaderRow);
  73. for (let i = 0; i < tests.length; i++) {
  74. if ((tests[i].category.includes(filterCategory.innerHTML) || filterCategory.innerHTML == 'all') && (filterLevel.find(item => item === tests[i].wcagLevel) || filterLevel[0] === 'All' ) && (filterVersion.find(item => item === tests[i].wcagVersion) || filterVersion[0] === 'All' )) {
  75. const tableRow = document.createElement('tr');
  76. for (let key in tests[i]) {
  77. if (tests[i].hasOwnProperty(key)) {
  78. if (key !== 'link' && (key == 'understandingCriteria' || (checks.find(item => item === key)))) {
  79. let val = tests[i][key];
  80. let tableData = document.createElement('td');
  81. if (key === 'understandingCriteria') {
  82. const a = document.createElement('a');
  83. let linkText;
  84. switch (lang) {
  85. case 'cat':
  86. linkText = document.createTextNode(tests[i][key].cat);
  87. break;
  88. case 'es':
  89. linkText = document.createTextNode(tests[i][key].es);
  90. break;
  91. case 'en':
  92. linkText = document.createTextNode(tests[i][key].en);
  93. break;
  94. default:
  95. linkText = document.createTextNode(tests[i][key].en);
  96. break;
  97. }
  98. a.appendChild(linkText);
  99. a.title = val
  100. a.target = '_blank';
  101. a.href = tests[i].link;
  102. tableData.appendChild(a);
  103. }
  104. else if (key === 'wcagLevel') {
  105. let cssSpan;
  106. switch (val) {
  107. case 'A':
  108. cssSpan = document.createElement('span');
  109. cssSpan.textContent = val;
  110. ['bg-info', 'text-dark', 'badge', 'rounded-pill' ].forEach(item => {
  111. cssSpan.classList.add(item);
  112. })
  113. /*cssSpan.classList.add('bg-info');
  114. cssSpan.classList.add('text-dark');
  115. cssSpan.classList.add('badge');
  116. cssSpan.classList.add('rounded-pill');*/
  117. tableData.appendChild(cssSpan);
  118. break;
  119. case 'AA':
  120. cssSpan = document.createElement('span');
  121. cssSpan.textContent = val;
  122. cssSpan.classList.add('bg-warning');
  123. cssSpan.classList.add('text-dark');
  124. cssSpan.classList.add('badge');
  125. cssSpan.classList.add('rounded-pill');
  126. tableData.appendChild(cssSpan);
  127. break;
  128. case 'AAA':
  129. cssSpan = document.createElement('span');
  130. cssSpan.textContent = val;
  131. cssSpan.classList.add('bg-danger');
  132. cssSpan.classList.add('badge');
  133. cssSpan.classList.add('rounded-pill');
  134. tableData.appendChild(cssSpan);
  135. break;
  136. default:
  137. tableData.textContent = val;
  138. break;
  139. }
  140. }
  141. else if (key === 'goal') {
  142. const p = document.createElement('p');
  143. let text;
  144. switch (lang) {
  145. case 'cat':
  146. text = document.createTextNode(tests[i][key].cat);
  147. break;
  148. case 'es':
  149. text = document.createTextNode(tests[i][key].es);
  150. break;
  151. case 'en':
  152. text = document.createTextNode(tests[i][key].en);
  153. break;
  154. default:
  155. text = document.createTextNode(tests[i][key].en);
  156. break;
  157. }
  158. p.appendChild(text);
  159. tableData.appendChild(p);
  160. }
  161. else if (key === "intent") {
  162. let p
  163. let text
  164. switch (lang) {
  165. case 'cat':
  166. p = document.createElement('p');
  167. text = document.createTextNode(val.cat);
  168. p.appendChild(text);
  169. tableData.appendChild(p);
  170. break;
  171. case 'es':
  172. p = document.createElement('p');
  173. text = document.createTextNode(val.es);
  174. p.appendChild(text);
  175. tableData.appendChild(p);
  176. break;
  177. case 'en':
  178. p = document.createElement('p');
  179. text = document.createTextNode(val.en);
  180. p.appendChild(text);
  181. tableData.appendChild(p);
  182. break;
  183. default:
  184. p = document.createElement('p');
  185. text = document.createTextNode(val.en);
  186. p.appendChild(text);
  187. tableData.appendChild(p);
  188. break;
  189. }
  190. }
  191. else if (key === 'benefits') {
  192. const ul = document.createElement('ul');
  193. let lista
  194. switch (lang) {
  195. case 'cat':
  196. lista = val.cat.split("#")
  197. lista.forEach(element => {
  198. const li = document.createElement('li');
  199. const liText = document.createTextNode(element);
  200. li.appendChild(liText);
  201. ul.appendChild(li)
  202. });
  203. break;
  204. case 'es':
  205. lista = val.es.split("#")
  206. lista.forEach(element => {
  207. const li = document.createElement('li');
  208. const liText = document.createTextNode(element);
  209. li.appendChild(liText);
  210. ul.appendChild(li)
  211. });
  212. break;
  213. case 'en':
  214. lista = val.en.split("#")
  215. lista.forEach(element => {
  216. const li = document.createElement('li');
  217. const liText = document.createTextNode(element);
  218. li.appendChild(liText);
  219. ul.appendChild(li)
  220. });
  221. break;
  222. default:
  223. lista = val.en.split("#")
  224. lista.forEach(element => {
  225. const li = document.createElement('li');
  226. const liText = document.createTextNode(element);
  227. li.appendChild(liText);
  228. ul.appendChild(li)
  229. });
  230. break;
  231. }
  232. tableData.appendChild(ul);
  233. }
  234. else if (key === 'verification') {
  235. const ul = document.createElement('ul');
  236. let lista
  237. switch (lang) {
  238. case 'cat':
  239. lista = val.cat.split("#")
  240. lista.forEach(element => {
  241. const li = document.createElement('li');
  242. const liText = document.createTextNode(element);
  243. li.appendChild(liText);
  244. ul.appendChild(li)
  245. });
  246. break;
  247. case 'es':
  248. lista = val.es.split("#")
  249. lista.forEach(element => {
  250. const li = document.createElement('li');
  251. const liText = document.createTextNode(element);
  252. li.appendChild(liText);
  253. ul.appendChild(li)
  254. });
  255. break;
  256. case 'en':
  257. lista = val.en.split("#")
  258. lista.forEach(element => {
  259. const li = document.createElement('li');
  260. const liText = document.createTextNode(element);
  261. li.appendChild(liText);
  262. ul.appendChild(li)
  263. });
  264. break;
  265. default:
  266. lista = val.en.split("#")
  267. lista.forEach(element => {
  268. const li = document.createElement('li');
  269. const liText = document.createTextNode(element);
  270. li.appendChild(liText);
  271. ul.appendChild(li)
  272. });
  273. break;
  274. }
  275. tableData.appendChild(ul);
  276. }
  277. else if (key === 'tools') {
  278. const ul = document.createElement('ul');
  279. let lista
  280. switch (lang) {
  281. case 'cat':
  282. lista = val.cat.split("#")
  283. lista.forEach(element => {
  284. const li = document.createElement('li');
  285. const liText = document.createTextNode(element);
  286. li.appendChild(liText);
  287. ul.appendChild(li)
  288. });
  289. break;
  290. case 'es':
  291. lista = val.es.split("#")
  292. lista.forEach(element => {
  293. const li = document.createElement('li');
  294. const liText = document.createTextNode(element);
  295. li.appendChild(liText);
  296. ul.appendChild(li)
  297. });
  298. break;
  299. case 'en':
  300. lista = val.en.split("#")
  301. lista.forEach(element => {
  302. const li = document.createElement('li');
  303. const liText = document.createTextNode(element);
  304. li.appendChild(liText);
  305. ul.appendChild(li)
  306. });
  307. break;
  308. default:
  309. lista = val.en.split("#")
  310. lista.forEach(element => {
  311. const li = document.createElement('li');
  312. const liText = document.createTextNode(element);
  313. li.appendChild(liText);
  314. ul.appendChild(li)
  315. });
  316. break;
  317. }
  318. tableData.appendChild(ul);
  319. }
  320. else if (key === 'category') {
  321. returnedResults++;
  322. for (let a = 0; a < tests[i][key].length; a++) {
  323. cssSpan = document.createElement('span');
  324. cssSpan.textContent = val[a];
  325. cssSpan.classList.add('bg-primary');
  326. cssSpan.classList.add('badge');
  327. cssSpan.classList.add('rounded-pill');
  328. tableData.appendChild(cssSpan);
  329. }
  330. }
  331. else
  332. {
  333. let texto = document.createElement('p');
  334. texto.textContent = val
  335. tableData.appendChild(texto);
  336. }
  337. tableRow.appendChild(tableData);
  338. tableBody.appendChild(tableRow);
  339. }
  340. }
  341. }
  342. }
  343. }
  344. resultsElement.textContent = returnedResults;
  345. }
  346. function btnLang(btn) {
  347. lang = btn.id
  348. populateTable()
  349. }
  350. function btnCategory(btn) {
  351. filterCategory.textContent = btn.textContent;
  352. populateTable()
  353. }
  354. function btnLevel(btn) {
  355. const contentLevel = btn.textContent
  356. const arrayLevels = level.innerHTML.split(",")
  357. if (contentLevel == "All") {
  358. level.textContent = 'All'
  359. }
  360. else if (arrayLevels.indexOf(contentLevel) !== -1) {
  361. const newArray = arrayLevels.filter(item => item != contentLevel)
  362. level.textContent = newArray.join()
  363. if (level.innerHTML == "") {
  364. level.textContent = 'All'
  365. }
  366. }
  367. else {
  368. if (arrayLevels.indexOf('All') !== -1) {
  369. arrayLevels.splice(arrayLevels.indexOf('All'), 1)
  370. level.textContent = arrayLevels.join()
  371. }
  372. arrayLevels.push(contentLevel)
  373. if (arrayLevels.length === 3) {
  374. level.textContent = 'All'
  375. } else {
  376. level.textContent = arrayLevels.join()
  377. }
  378. }
  379. populateTable()
  380. }
  381. function btnVersion(btn) {
  382. const contentVersion = btn.textContent
  383. const arrayVersions = version.innerHTML.split(",")
  384. if (contentVersion == "All") {
  385. version.textContent = 'All'
  386. }
  387. else if (arrayVersions.indexOf(contentVersion) !== -1) {
  388. const newArray = arrayVersions.filter(item => item != contentVersion)
  389. version.textContent = newArray.join()
  390. if (version.innerHTML == "") {
  391. version.textContent = 'All'
  392. }
  393. }
  394. else {
  395. if (arrayVersions.indexOf('All') !== -1) {
  396. arrayVersions.splice(arrayVersions.indexOf('All'), 1)
  397. version.textContent = arrayVersions.join()
  398. }
  399. arrayVersions.push(contentVersion)
  400. if (arrayVersions.length === 3) {
  401. version.textContent = 'All'
  402. } else {
  403. version.textContent = arrayVersions.join()
  404. }
  405. }
  406. populateTable()
  407. }
  408. function showColumns(check){
  409. if (!checks.includes(check.id)){
  410. checks.push(check.id)
  411. } else if (checks.includes(check.id)){
  412. let index = checks.indexOf(check.id)
  413. checks.splice(index, 1)
  414. }
  415. populateTable()
  416. }
  417. populateTable()