Advertisement
Guest User

Untitled

a guest
Sep 27th, 2016
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.27 KB | None | 0 0
  1. import Sammy from 'sammy';
  2. import $ from 'jquery';
  3. import { CONSTANTS } from 'constants';
  4. import { UTILS } from 'utils';
  5. import { templates } from 'templates';
  6. import { booksData } from 'booksData';
  7. import { usersData } from 'usersData';
  8. import * as toastr from 'toastr';
  9.  
  10. var router = Sammy('#content', function () {
  11. var $content = $('#content');
  12. var $orderByChoice = $('#orderby > .dropdown-toggle');
  13. var booksInCart = [];
  14.  
  15. if (usersData.current()) {
  16. $('#nav-btn-login, #nav-btn-register').toggle('hidden');
  17. $('#shopping-cart-button').removeClass('hidden');
  18. $('#nav-btn-logout').removeClass('hidden');
  19. $('#detailed-btn').removeClass('hidden');
  20. } else {
  21. $('#shopping-cart-button').addClass('hidden');
  22. $('#nav-btn-logout').addClass('hidden');
  23. $('#detailed-btn').addClass('hidden');
  24. }
  25.  
  26. this.get('#/home/?:pageNumber&:orderByCode', function (context) {
  27. var pageNumber = this.params['pageNumber'];
  28. var orderByCode = this.params['orderByCode'] | 0;
  29. var totalBooks;
  30. var booksOnPage;
  31. var pageIndeces;
  32.  
  33. UTILS.setupOrderByLinks();
  34.  
  35. booksData.getAllBooks()
  36. .then(function (result) {
  37. result = booksData.orderBooksBy(result, orderByCode);
  38. booksOnPage = UTILS.createBooksOnPage(result, pageNumber, CONSTANTS.PAGE_SIZE_BIG);
  39. pageIndeces = UTILS.createPageIndeces(result, CONSTANTS.PAGE_SIZE_BIG);
  40. totalBooks = {
  41. books: booksOnPage,
  42. indeces: pageIndeces
  43. };
  44.  
  45. return templates.get('home');
  46. })
  47. .then(function (template) {
  48. $content.html(template(totalBooks));
  49. $('#filters').removeClass('hidden');
  50. UTILS.fixPaginationForOrderBy(orderByCode);
  51. });
  52.  
  53. $('#search-btn').on('click', function () {
  54. var searchQuery = $('#search-input').val();
  55. $('#search-input').val("");
  56. console.log('searching',searchQuery);
  57. context.redirect(`#/search/${searchQuery}&${pageNumber}&${orderByCode}`);
  58. });
  59. });
  60.  
  61. this.get('#/home/:pageNumber', function (context) {
  62. var pageNum = this.params["pageNumber"];
  63. context.redirect(`#/home/${pageNum}&${CONSTANTS.ORDERBY.DEFAULT}`);
  64. });
  65.  
  66. this.get('#/login', function (context) {
  67. if (usersData.current()) {
  68. context.redirect('#/home/1');
  69. return;
  70. }
  71.  
  72. templates.get('login')
  73. .then(function (template) {
  74. $content.html(template());
  75. $('#filters').addClass('hidden');
  76.  
  77. $('#btn-login').on('click', function () {
  78. var logUser = {
  79. username: $('#tb-username').val(),
  80. password: $('#tb-password').val()
  81. };
  82.  
  83. usersData.login(logUser)
  84. .then(function (response) {
  85. $('#nav-btn-logout').removeClass('hidden');
  86. $('#detailed-btn').removeClass('hidden');
  87. $('#shopping-cart-button').removeClass('hidden');
  88. $('#nav-btn-register').addClass('hidden');
  89. $('#nav-btn-login').addClass('hidden');
  90.  
  91. context.redirect('#/home/1');
  92. toastr.success('Login successful');
  93. //document.location.reload(true);
  94. });
  95. });
  96. });
  97. });
  98.  
  99. this.get('#/register', function (context) {
  100. if (usersData.current()) {
  101. context.redirect('#/login');
  102. return;
  103. }
  104. templates.get('register')
  105. .then(function (template) {
  106. $content.html(template());
  107. $('#filters').addClass('hidden');
  108.  
  109. $('#btn-register').on('click', function () {
  110. var newUser = {
  111. username: $('#tb-newUsername').val(),
  112. password: $('#tb-newPassword').val()
  113. };
  114.  
  115. usersData.register(newUser)
  116. .then(function (response) {
  117. if (newUser.username.trim() === '' || newUser.password.trim() === '') {
  118. toastr.error("Invalid username or password");
  119. } else {
  120. context.redirect('#/login');
  121. }
  122. });
  123. });
  124. });
  125. });
  126.  
  127. this.get('#/genre-info/?:genre&:pageNumber&:orderByCode', function (context) {
  128. var genre = this.params['genre'];
  129. var pageNumber = this.params['pageNumber'];
  130. var orderByCode = this.params['orderByCode'] | 0;
  131. var category;
  132. var booksOnPage;
  133. var pageIndeces;
  134.  
  135. UTILS.setupOrderByLinks();
  136.  
  137. booksData.getBooksByGenre(genre)
  138. .then(function (result) {
  139. result = booksData.orderBooksBy(result, orderByCode);
  140. booksOnPage = UTILS.createBooksOnPage(result, pageNumber, CONSTANTS.PAGE_SIZE_SMALL);
  141. pageIndeces = UTILS.createPageIndeces(result, CONSTANTS.PAGE_SIZE_SMALL);
  142.  
  143. category = {
  144. name: genre,
  145. books: booksOnPage,
  146. indeces: pageIndeces
  147. };
  148.  
  149. return templates.get('genre-info');
  150. })
  151. .then(function (template) {
  152. $content.html(template(category));
  153. $('#filters').removeClass('hidden');
  154. UTILS.fixPaginationForOrderBy(orderByCode);
  155.  
  156. });
  157. });
  158.  
  159. this.get('#/genre-info/?:genre&:pageNumber', function (context) {
  160. var pageNum = this.params['pageNumber'],
  161. genre = this.params['genre'];
  162. context.redirect(`#/genre-info/${genre}&${pageNum}&${CONSTANTS.ORDERBY.DEFAULT}`);
  163. });
  164.  
  165.  
  166. this.get('#/search/?:query&:pageNumber&:orderByCode', function (context) {
  167. var query = this.params['query'];
  168. var pageNumber = this.params['pageNumber'];
  169. var orderByCode = this.params['orderByCode'] | 0;
  170. console.log(query);
  171. console.log(orderByCode);
  172. var category;
  173. var booksOnPage;
  174. var pageIndeces;
  175.  
  176. UTILS.setupOrderByLinks();
  177.  
  178. Promise.all([booksData.searchBookByTitle(query),booksData.searchBookByAuthor(query)])
  179. .then((results)=>{
  180. let titleResults = results[0];
  181. let authorResults = results[1];
  182. titleResults.push.apply( titleResults, authorResults );
  183. let result = titleResults;
  184. booksOnPage = UTILS.createBooksOnPage(result, pageNumber, CONSTANTS.PAGE_SIZE_SMALL);
  185. pageIndeces = UTILS.createPageIndeces(result, CONSTANTS.PAGE_SIZE_SMALL);
  186.  
  187. category = {
  188. title: query,
  189. books: booksOnPage,
  190. indeces: pageIndeces
  191. };
  192. return templates.get('search-by-title-info');
  193. })
  194. .then(function (template) {
  195. $content.html(template(category));
  196. $('#filters').removeClass('hidden');
  197. UTILS.fixPaginationForOrderBy(orderByCode);
  198. });
  199. });
  200.  
  201.  
  202. this.get('#/book-info/:title', function () {
  203. var currentTitle = this.params['title'];
  204. var book;
  205.  
  206. booksData.getBookByTitle(currentTitle)
  207. .then(function (result) {
  208. book = result[0];
  209. return templates.get('book-info');
  210. })
  211. .then(function (template) {
  212. $content.html(template(book));
  213. $('#filters').addClass('hidden');
  214.  
  215. if (usersData.current()) {
  216. $('#btn-like').removeClass('hidden');
  217. $('#btn-dislike').removeClass('hidden');
  218. $('#btn-add-to-cart').removeClass('hidden');
  219. } else {
  220. $('#btn-like').addClass('hidden');
  221. $('#btn-dislike').addClass('hidden');
  222. $('#btn-add-to-cart').addClass('hidden');
  223. }
  224.  
  225. $('#btn-like').on('click', function () {
  226. booksData.rateBookPositive(book);
  227. });
  228.  
  229. $('#btn-dislike').on('click', function () {
  230. booksData.rateBookNegative(book);
  231. });
  232.  
  233. $('#reddit-submit').attr('href',
  234. `${$('#reddit-submit').attr('href')}&url=${encodeURIComponent(window.location.href)}`);
  235.  
  236. UTILS.getShortUrl(window.location.href, function (url) {
  237. var shareURL = `https://www.facebook.com/sharer/sharer.php?u=${encodeURI(url)}`;
  238. $('#facebook-share').on('click', function () {
  239. var fbpopup = window.open(shareURL, "pop", "width=600, height=400, scrollbars=no");
  240. return false;
  241. });
  242. });
  243.  
  244. $('#btn-add-to-cart').on('click', function () {
  245. let canAdd = true;
  246. let pictureURL = book.picture._downloadURL;
  247. let author = book.author;
  248. let title = book.title;
  249. let price = book.price;
  250. let bookId = book._id;
  251. let bookToPush = {};
  252.  
  253.  
  254. booksData.getUserBooks().then(function (user) {
  255. booksInCart = user.booksInCart;
  256. (booksInCart).forEach(function (book) {
  257. if (book.bookId === bookId) {
  258. canAdd = false;
  259. toastr.warning(`${title} - is already in the cart!`);
  260. UTILS.addBooksToCart(booksInCart);
  261. return;
  262. }
  263. });
  264.  
  265. if (canAdd) {
  266. toastr.success(`${title} - successfully added to cart!`);
  267. bookToPush = user.booksInCart;
  268. bookToPush.push({
  269. bookId,
  270. author,
  271. title,
  272. price,
  273. pictureURL
  274. });
  275. UTILS.addBooksToCart(booksInCart);
  276. booksData.addBooksToUser(bookToPush);
  277. }
  278. });
  279. });
  280. });
  281. });
  282.  
  283.  
  284. $('#nav-btn-logout').on('click', function () {
  285. $('#shopping-cart-button').addClass('hidden');
  286. $('#nav-btn-logout').addClass('hidden');
  287. $('#detailed-btn').addClass('hidden');
  288. $('#nav-btn-logout').addClass('hidden');
  289. $('#nav-btn-login').removeClass('hidden');
  290. $('#nav-btn-register').removeClass('hidden');
  291.  
  292. usersData.logout()
  293. .then(function () {
  294.  
  295. });
  296. });
  297.  
  298. $('#shopping-cart-button').on('click', function () {
  299. $('#shopping-cart-menu').toggleClass('hidden');
  300. $('.cart').toggleClass('activated');
  301.  
  302. booksData.getUserBooks().then(function (result) {
  303. UTILS.addBooksToCart(result.booksInCart);
  304.  
  305. });
  306. });
  307.  
  308. $('#shopping-cart-menu').on('click', '.btn-remove', function () {
  309. let bookToRemoveTitle = $(this).parent().
  310. find($('.book-characteristics')).
  311. find('.book-title').text();
  312. let updatedBooksAfterRemoval;
  313. let idToRemove;
  314.  
  315. booksData.getBookByTitle(bookToRemoveTitle)
  316. .then(function (result) {
  317. idToRemove = result[0]._id;
  318. })
  319. .then(function (res) {
  320. booksData.getUserBooks()
  321. .then(function (userBooks) {
  322. updatedBooksAfterRemoval = JSON.parse(JSON.stringify(userBooks.booksInCart));
  323.  
  324. (userBooks.booksInCart).forEach(function (book) {
  325. if (book.bookId === idToRemove) {
  326. updatedBooksAfterRemoval.splice(idToRemove, 1);
  327. return;
  328. }
  329. });
  330.  
  331. return updatedBooksAfterRemoval;
  332. })
  333. .then(function (books) {
  334. UTILS.addBooksToCart(books);
  335. booksData.addBooksToUser(books);
  336. });
  337. });
  338. });
  339.  
  340. $('.dropdown-menu a').on('click', function () {
  341. $orderByChoice.html($(this).html() + '<span class="caret"></span>');
  342. });
  343.  
  344. $('aside > ul.nav.nav-pills.nav-stacked > li > a').each((i, item) => {
  345. if (i === 0) {
  346. }
  347. else {
  348. item.addEventListener('click', UTILS.resetOrderByTypeOnChange);
  349. }
  350. });
  351. });
  352.  
  353. router.run('#/home/1');
  354. let sammyApp = {};
  355. export { sammyApp as sammyApp };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement