examples.js 3.8 KB

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