app.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. var BASE_URL = 'http://192.168.1.127/api/';
  2. function http(url, params) {
  3. return new Promise(function(resolve, reject) {
  4. httpRequest = new XMLHttpRequest();
  5. httpRequest.onreadystatechange = function() {
  6. if (httpRequest.readyState == XMLHttpRequest.DONE) {
  7. if (httpRequest.status == 200) {
  8. resolve(JSON.parse(httpRequest.responseText));
  9. } else {
  10. reject("pls fix later");
  11. }
  12. }
  13. };
  14. httpRequest.open('GET', url, true);
  15. httpRequest.setRequestHeader('lang', 'ES')
  16. var x = params ? params : null;
  17. httpRequest.send(null);
  18. });
  19. }
  20. http('http://192.168.1.127/api/products/listcategories').then(function(data) {
  21. }, function(err) {
  22. console.log("err", err);
  23. });
  24. function logError(err) {
  25. console.log('Error: ', err);
  26. }
  27. var sections = [
  28. 'empresa',
  29. 'productos'
  30. ];
  31. function getProducts(category) {
  32. if (R.isNil(data.allProducts[category]) || R.isEmpty(data.allProducts[category])) {
  33. http(BASE_URL + 'products/category/' + category).then(function(xs) {
  34. data.allProducts[category] = xs;
  35. data.products = xs;
  36. }, logError)
  37. } else {
  38. data.products = data.allProducts[category];
  39. }
  40. }
  41. var selectedSection_ = {
  42. empresa: true,
  43. productos: false,
  44. productoDescripcion: false
  45. };
  46. var selectedCategory_ = 'proteccion intensiva';
  47. rivets.configure({
  48. executeFunctions: true
  49. })
  50. function getCategories() {
  51. if (productCategories_.length === 0) {
  52. http(BASE_URL + 'products/listcategories').then(function(data) {
  53. data.forEach(function(category) {
  54. productCategories_.push(category)
  55. })
  56. }, logError)
  57. }
  58. }
  59. var productCategories_ = [];
  60. var app = document.getElementById('app');
  61. var data = {
  62. allProducts: {},
  63. products: [],
  64. selectedCategory: ''
  65. }
  66. var view = rivets.bind(app, {
  67. sections: sections,
  68. selectedSection: selectedSection_,
  69. productCategories: productCategories_,
  70. data: data,
  71. selectedCategory: selectedCategory_,
  72. selectSection: function(event, scope) {
  73. var newValue = event.target.text;
  74. window.history.pushState({}, newValue, '#' + newValue)
  75. chooseSection(newValue);
  76. event.target.className = 'selected';
  77. scope.getData[newValue]();
  78. },
  79. selectCategory: function(event, scope) {
  80. var category = productCategories_.find(R.propEq('name', event.target.text));
  81. var categoryList = getElement('ul#product-category-nav > li > a')
  82. data.selectedCategory = category;
  83. getProducts(category._id);
  84. addSelectedClass(categoryList, category.name);
  85. },
  86. getData: {
  87. productos: getCategories,
  88. empresa: function() {}
  89. }
  90. });
  91. function getElement(selector) {
  92. return window.document.querySelectorAll(selector);
  93. }
  94. function chooseSection(section) {
  95. var navbarList = getElement('ul.navbar-list > li > a');
  96. addSelectedClass(navbarList, section, selectedSection_)
  97. }
  98. var elements = [];
  99. function addSelectedClass(elemList, x, opt) {
  100. console.log('elemList: ', elemList);
  101. elemList.forEach(function(el) {
  102. var isSelected = el.text === x;
  103. el.className = isSelected ? 'selected' : '';
  104. if (opt) {
  105. opt[el.text] = isSelected;
  106. }
  107. })
  108. }
  109. window.onscroll = function() {
  110. elements = elements.reduce(function(acc, e) {
  111. if (isInViewport(e)) {
  112. e.className = 'discover-li'
  113. return acc;
  114. } else {
  115. acc.push(e);
  116. return acc;
  117. }
  118. }, [])
  119. if (elements.length === 0) {
  120. window.onscroll = function() {};
  121. }
  122. };
  123. function isInViewport(element) {
  124. var rect = element.getBoundingClientRect();
  125. var html = document.documentElement;
  126. return (rect.top >= 0 &&
  127. rect.left >= 0 &&
  128. rect.bottom <= (window.innerHeight || html.clientHeight) &&
  129. rect.right <= (window.innerWidth || html.clientWidth))
  130. }
  131. window.onload = function() {
  132. chooseSection(window.location.hash.substr(1));
  133. }