app.js 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  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. rivets.binders['src-strict'] = function(el, value) {
  62. var img = new Image()
  63. img.onload = function() {
  64. $(el).attr('src', value)
  65. }
  66. img.src = value
  67. }
  68. var data = {
  69. allProducts: {},
  70. products: [],
  71. selectedCategory: ''
  72. }
  73. var view = rivets.bind(app, {
  74. sections: sections,
  75. selectedSection: selectedSection_,
  76. productCategories: productCategories_,
  77. data: data,
  78. selectedCategory: selectedCategory_,
  79. selectSection: function(event, scope) {
  80. var newValue = event.target.text;
  81. window.history.pushState({}, newValue, '#' + newValue)
  82. chooseSection(newValue);
  83. event.target.className = 'selected';
  84. scope.getData[newValue]();
  85. },
  86. selectCategory: function(event, scope) {
  87. var category = productCategories_.find(R.propEq('name', event.target.text));
  88. var categoryList = getElement('ul#product-category-nav > li > a')
  89. data.selectedCategory = category;
  90. getProducts(category._id);
  91. addSelectedClass(categoryList, category.name);
  92. },
  93. getData: {
  94. productos: getCategories,
  95. empresa: function() {}
  96. }
  97. });
  98. function getElement(selector) {
  99. return window.document.querySelectorAll(selector);
  100. }
  101. function chooseSection(section) {
  102. var navbarList = getElement('ul.navbar-list > li > a');
  103. addSelectedClass(navbarList, section, selectedSection_)
  104. }
  105. var elements = [];
  106. function addSelectedClass(elemList, x, opt) {
  107. console.log('elemList: ', elemList);
  108. elemList.forEach(function(el) {
  109. var isSelected = el.text === x;
  110. el.className = isSelected ? 'selected' : '';
  111. if (opt) {
  112. opt[el.text] = isSelected;
  113. }
  114. })
  115. }
  116. window.onscroll = function() {
  117. elements = elements.reduce(function(acc, e) {
  118. if (isInViewport(e)) {
  119. e.className = 'discover-li'
  120. return acc;
  121. } else {
  122. acc.push(e);
  123. return acc;
  124. }
  125. }, [])
  126. if (elements.length === 0) {
  127. window.onscroll = function() {};
  128. }
  129. };
  130. function isInViewport(element) {
  131. var rect = element.getBoundingClientRect();
  132. var html = document.documentElement;
  133. return (rect.top >= 0 &&
  134. rect.left >= 0 &&
  135. rect.bottom <= (window.innerHeight || html.clientHeight) &&
  136. rect.right <= (window.innerWidth || html.clientWidth))
  137. }
  138. window.onload = function() {
  139. chooseSection(window.location.hash.substr(1));
  140. }