examples.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. /**
  2. * This JS file is for examples list and actions linked to examples.
  3. */
  4. class Examples {
  5. constructor() {
  6. this.isExamplesDisplayed = false;
  7. // There's a "close" button on the mobile interface.
  8. document.getElementById("examplesButtonClose").addEventListener("click", this.hideExamples.bind(this));
  9. /**
  10. * Display / hide with the "examples" button. On any size interface
  11. */
  12. var examplesButton = document.getElementsByClassName("examplesButton");
  13. if (examplesButton.length > 0) {
  14. for (var i = 0; i < examplesButton.length; i++) {
  15. examplesButton[i].parentElement.onclick = function () {
  16. if (!this.isExamplesDisplayed) this.displayExamples();
  17. else this.hideExamples();
  18. }.bind(this);
  19. }
  20. }
  21. /**
  22. * The filter bar is used to search a thing on the examples.
  23. * This react on any input on the bar, or on a click on the search button.
  24. */
  25. var filterBar = document.getElementById("filterBar");
  26. if (filterBar) {
  27. var filterBarClear = document.getElementById("filterBarClear");
  28. var filter = function () {
  29. var filterText = filterBar.value.toLowerCase();
  30. if (filterText == "") filterBarClear.style.display = "none";
  31. else filterBarClear.style.display = "inline-block";
  32. var lines = document.getElementsByClassName("itemLine");
  33. for (var lineIndex = 0; lineIndex < lines.length; lineIndex++) {
  34. var line = lines[lineIndex];
  35. if (line.innerText.toLowerCase().indexOf(filterText) > -1) {
  36. line.style.display = "";
  37. } else {
  38. line.style.display = "none";
  39. }
  40. }
  41. var categories = document.getElementsByClassName("categoryContainer");
  42. var displayCount = categories.length;
  43. for (var categoryIndex = 0; categoryIndex < categories.length; categoryIndex++) {
  44. var category = categories[categoryIndex];
  45. category.style.display = "block";
  46. if (category.clientHeight < 25) {
  47. category.style.display = "none";
  48. displayCount--;
  49. }
  50. }
  51. if (displayCount == 0) document.getElementById("noResultsContainer").style.display = "block";
  52. else document.getElementById("noResultsContainer").style.display = "none";
  53. }
  54. filterBar.oninput = function () {
  55. filter();
  56. }
  57. filterBarClear.onclick = function () {
  58. filterBar.value = "";
  59. filter();
  60. }
  61. }
  62. }
  63. /**
  64. * Function to display the examples menu
  65. */
  66. displayExamples = function() {
  67. this.isExamplesDisplayed = true;
  68. document.getElementById("fpsLabel").style.display = "none";
  69. document.getElementById("exampleList").style.display = "block";
  70. document.getElementsByClassName("wrapper")[0].style.width = "calc(100% - 400px)";
  71. var menus = document.getElementsByClassName("toDisplay");
  72. for (var i = 0; i < menus.length; i++) {
  73. menus[i].style.display = "none";
  74. }
  75. };
  76. /**
  77. * Function to hide the examples menu
  78. */
  79. hideExamples = function() {
  80. this.isExamplesDisplayed = false;
  81. document.getElementById("fpsLabel").style.display = "block";
  82. document.getElementById("exampleList").style.display = "none";
  83. document.getElementsByClassName("wrapper")[0].style.width = "100%";
  84. };
  85. }