HEX
Server: nginx/1.18.0
System: Linux test-ipsremont 5.4.0-214-generic #234-Ubuntu SMP Fri Mar 14 23:50:27 UTC 2025 x86_64
User: ips (1000)
PHP: 8.0.30
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/quadcode-site/src/js/components/news/renderCard.js
import { NEWS } from "./news";
import { cardHtml } from "./cardHtml";

export const renderCard = () => {
  const allNews = NEWS.items;
  let filter = '';
  const container = document.querySelector('.block-news__items');
  const loadEl = document.querySelector('.block-news__button');
  const filterEls = document.querySelectorAll('.block-filter__item');
  const path = window.location.pathname.split('/');


  if (!container || !loadEl || !filterEls) return false;

  let preloadCount = 6;

  if (path.length > 2 && path.slice(-1)[0]) {
    const news = allNews.filter(item => item.tagsFilter.includes(path.slice(-1)[0]))
    firstRender(news, container, preloadCount);
    activeFilter(filterEls, path.slice(-1)[0]);
    removeUrlParameters('filter');
  } else {
    firstRender(allNews, container, preloadCount);
  }

  loadHide(allNews.length, preloadCount, loadEl);

  // if (filterEls.length) {
  //   filterEls.forEach(item => {
  //     item.addEventListener('click', () => {
  //       container.innerHTML = '';
  //       activeRemoveAllFilter(filterEls);
  //       item.classList.add('active');
  //       filter = item.dataset.filter;
  //       if (filter && filter === 'All posts') {
  //         firstRender(allNews, container, preloadCount);
  //         loadHide(allNews.length, preloadCount, loadEl);
  //       } else {
  //         if (allNews.length) {
  //           const news = allNews.filter(item => item.tags.includes(filter))
  //           firstRender(news, container, preloadCount);
  //           loadHide(news.length, preloadCount, loadEl);
  //         }
  //       }
  //     }, false);
  //   });
  // }

  loadEl.addEventListener('click', () => {
    let prevMax = preloadCount;
    preloadCount = preloadCount + preloadCount;
    loadEl.classList.add('button--loading');
    if (filter) {
      const news = allNews.filter(item => item.tags.includes(filter));
      news.forEach((item, key) => {
        if (prevMax <= preloadCount && key + 1 > prevMax && key + 1 <= preloadCount) {
          render(container, item);
        }
        loadEl.classList.remove('button--loading');
      });
      loadHide(news.length, preloadCount, loadEl);
    } else {
      allNews.forEach((item, key) => {
        if (prevMax <= preloadCount && key + 1 > prevMax && key + 1 <= preloadCount) {
          render(container, item);
        }
        loadEl.classList.remove('button--loading');
      });
      loadHide(allNews.length, preloadCount, loadEl);
    }
  });
}

const loadHide = (count, preloadCount, el) => {
  if (count <= preloadCount) {
    el.classList.add('hide');
  }
}

const firstRender = (news, container, preloadCount) => {
  news.forEach((item, key) => {
    if (key + 1 <= preloadCount) {
      render(container, item);
    }
  });
}

const render = (container, item) => {
  return container.innerHTML += `<div class="block-news__item">${cardHtml(item)}</div>`;
}

const activeRemoveAllFilter = (filterEls) => {
  filterEls.forEach(all => all.classList.remove('active'));
}

const activeFilter = (filterEls, paramsFilter) => {
  activeRemoveAllFilter(filterEls);
  filterEls.forEach(item => {
    if (item && item.dataset.filter === paramsFilter) {
      item.classList.add('active');
    }
  });
}

const removeUrlParameters = (parameter) => {
  const url = new URL(document.location);
  const searchParams = url.searchParams;
  searchParams.delete(parameter);
  window.history.pushState({}, '', url.toString());
}