Advertisement
Guest User

Untitled

a guest
May 19th, 2019
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import "./style.css";
  2.  
  3. const apiKey = 'f6b42179fdf54aba9e1ce12c168bcd3f';
  4.  
  5. const defaultSource = '';
  6. const defaultQuery = '';
  7. const defaultCountry = 'us';
  8.  
  9. let currentSource = defaultSource;
  10. let currentQuery = defaultQuery;
  11. let currentCountry = defaultCountry;
  12. let currentPage = 0;
  13. let currentUrl = 'https://newsapi.org/v2/top-headlines?' +
  14.     currentSource + currentQuery + currentCountry +
  15.     'pageSize=5&page=' + currentPage + '&apiKey=' + apiKey;
  16.  
  17. loadMore();
  18.  
  19. function show(node) {
  20.     document.querySelector(node).style.display = 'unset';
  21. }
  22.  
  23. function hide(node) {
  24.     document.querySelector(node).style.display = 'none';
  25. }
  26.  
  27. document.querySelector('#btn-load-more').addEventListener('click', () => {
  28.     loadMore();
  29. });
  30.  
  31. document.querySelector('#filter-button').addEventListener('click', () => {
  32.     const filterInput = document.querySelector('#filter-input');
  33.     findNewsByQuery(filterInput.value);
  34. });
  35.  
  36. function findNewsBySource(source) {
  37.     currentPage = 0;
  38.     currentQuery = defaultQuery;
  39.     currentCountry = defaultCountry;
  40.     currentSource = source;
  41.     const nowFoundBlock = document.querySelector('#not-found-block');
  42.     if (loadMore())
  43.         hide(nowFoundBlock);
  44.     else
  45.         show(nowFoundBlock);
  46. }
  47.  
  48. function findNewsByQuery(query) {
  49.     currentPage = 0;
  50.     currentQuery = query;
  51.     const nowFoundBlock = document.querySelector('#not-found-block');
  52.     const newsBlock = document.querySelector('#app-news-list');
  53.     newsBlock.innerHTML = '';
  54.     if (loadMore()) {
  55.         hide(nowFoundBlock);
  56.     } else
  57.         show(nowFoundBlock);
  58. }
  59.  
  60.  
  61. function loadMore() {
  62.     currentUrl = 'https://newsapi.org/v2/top-headlines?' +
  63.     `country=${currentCountry}&` + `source=${currentSource}&` + `q=${currentQuery}&` +
  64.     `pageSize=5&page=${++currentPage}&` + 'apiKey=' + apiKey;
  65.     alert(currentUrl);
  66.     const request = new Request(currentUrl);
  67.     let newsCount = 0;
  68.     fetch(request)
  69.         .then(function (response) {
  70.             return response.json();
  71.         })
  72.         .then(function (data) {
  73.             newsCount = data.articles.length;
  74.             if (newsCount < 5) {
  75.                 hide('#btn-load-more');
  76.                 if (newsCount === 0)
  77.                     return;
  78.             } else
  79.                 show('#btn-load-more');
  80.             const block = createNewsBlock(newsCount, data.articles);
  81.             const newsBlock = document.querySelector('#app-news-list');
  82.             newsBlock.appendChild(block);
  83.         });
  84.     return newsCount;
  85. }
  86.  
  87. function createNewsBlock(newsCount, jsonDataArticles) {
  88.     const newsBlock = document.createDocumentFragment();
  89.     const news_item = document.querySelector('#news-item-template');
  90.     for (let i = 0; i < newsCount; i++) {
  91.         const item = news_item.content.cloneNode(true).querySelector('.news-item');
  92.         const child = fillTemplate(item, jsonDataArticles[i]);
  93.         newsBlock.appendChild(child);
  94.     }
  95.     return newsBlock;
  96. }
  97.  
  98. function fillTemplate(item, jsonData) {
  99.     item.querySelector('.image').setAttribute('src', jsonData.urlToImage);
  100.     item.querySelector('.item-title').textContent = jsonData.title;
  101.     item.querySelector('.item-source').textContent = jsonData.source.name;
  102.     item.querySelector('.item-text').textContent = jsonData.description;
  103.     item.querySelector('.item-link').setAttribute('href', jsonData.url);
  104.     return item;
  105. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement