script.js 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. window.onload = function () {
  2. category = document.getElementById('id_category').value;
  3. param = document.getElementById('id_param').value;
  4. requestStationList(category, param)
  5. }
  6. function initSearch() {
  7. var stationsearch = document.getElementById('stationsearch');
  8. stationsearch.value = '';
  9. stationsearch.onkeyup = function () {
  10. var filter = stationsearch.value.toUpperCase();
  11. var lis = document.getElementsByTagName('li');
  12. for (var i = 0; i < lis.length; i++) {
  13. var searchval = lis[i].dataset.search;
  14. if (searchval.indexOf(filter) > -1)
  15. lis[i].style.display = 'flex';
  16. else
  17. lis[i].style.display = 'none';
  18. }
  19. }
  20. }
  21. function createItem(name, icon, description) {
  22. var itemElem = document.createElement("div");
  23. itemElem.className = "item";
  24. var itemicon = document.createElement("div");
  25. itemicon.className = "itemicon";
  26. var itemiconimg = document.createElement("img");
  27. itemiconimg.src = icon;
  28. itemiconimg.className = "itemicon";
  29. var itemtext = document.createElement("div");
  30. itemtext.className = "itemtext";
  31. var h4text = document.createElement("h4");
  32. h4text.textContent = name;
  33. var desc = document.createElement("p");
  34. desc.textContent = description;
  35. itemicon.appendChild(itemiconimg);
  36. itemtext.appendChild(h4text);
  37. itemtext.appendChild(desc);
  38. itemElem.appendChild(itemicon);
  39. itemElem.appendChild(itemtext);
  40. return itemElem;
  41. }
  42. function requestStationList(category, param) {
  43. var url = 'api/stations?category=' + category;
  44. if (category.indexOf('language') > -1) {
  45. url = url + '&language=' + param.toLowerCase();
  46. }
  47. if (category.indexOf('country') > -1) {
  48. url = url + '&country=' + param;
  49. }
  50. var myRequest = new Request(url);
  51. var myOldList = document.getElementById("stationList");
  52. var myList = myOldList.cloneNode(false);
  53. myOldList.parentNode.replaceChild(myList, myOldList);
  54. fetch(myRequest)
  55. .then(response => response.json())
  56. .then(data => {
  57. for (const station of data) {
  58. let listItem = document.createElement('li');
  59. listItem.appendChild(
  60. createItem(station.name, station.icon, station.description)
  61. );
  62. listItem.dataset.json = JSON.stringify(station);
  63. listItem.dataset.search = (station.name + '#' + station.description).toUpperCase();
  64. myList.appendChild(listItem);
  65. }
  66. })
  67. .catch(console.error);
  68. initSearch();
  69. }
  70. function onInputSelect(e, objElem) {
  71. if (objElem.id == 'id_category') {
  72. paramElem = document.getElementById('id_param')
  73. param = paramElem.value
  74. category = objElem.value
  75. switch (category) {
  76. case 'language':
  77. setParamlist();
  78. try {paramElem.fokus();} catch(e) {};
  79. return;
  80. case 'country':
  81. setParamlist();
  82. try {paramElem.fokus();} catch(e) {};
  83. return;
  84. default:
  85. paramElem.disabled = true;
  86. break;
  87. }
  88. requestStationList(category, param);
  89. }
  90. }
  91. function setParamlist() {
  92. var category = document.getElementById('id_category').value
  93. var url = 'api/paramlist?category=' + category;
  94. document.getElementById('id_param').value = '';
  95. var myRequest = new Request(url);
  96. var myOldList = document.getElementById('paramlist');
  97. var myList = myOldList.cloneNode(false);
  98. myOldList.parentNode.replaceChild(myList, myOldList);
  99. fetch(myRequest)
  100. .then(response => response.json())
  101. .then(data => {
  102. for (const param of data) {
  103. var option = document.createElement('option');
  104. option.value = param.name;
  105. myList.appendChild(option);
  106. }
  107. })
  108. .catch(console.error);
  109. document.getElementById('id_param').disabled = false;
  110. }
  111. function keyUpEvent(e, objElem) {
  112. switch (objElem.id) {
  113. case 'id_param':
  114. param = objElem.value;
  115. category = document.getElementById('id_category').value;
  116. if (e instanceof KeyboardEvent) {
  117. // it is a keyboard event!
  118. if (e.code == 'Enter') {
  119. requestStationList(category, param);
  120. } else if (e.code == 'Backspace')
  121. this.value = '';
  122. } else if (e instanceof Event) {
  123. // one Element from selection is selected
  124. requestStationList(category, param);
  125. }
  126. break;
  127. default:
  128. break;
  129. }
  130. }