${item.name}
\r\n${text}...
\r\n \r\n{"version":3,"sources":["template-blogs-landing.js"],"names":["TemplateBlogsLanding","constructor","container","apiEndpoint","redirectUrlIfNoResults","options","this","Object","assign","itemsContainer","featuredContainer","paginationContainer","paginationItemsContainer","paginationNextButton","paginationPreviousButton","filteredByContainer","tagsContainer","itemsPerPage","itemsOnPageOne","paginationScrollAmount","allBlogs","sortedBlogs","tags","filterValues","tag","page","document","querySelector","init","initEvents","fetch","then","response","json","items","syncFilterValuesFromQuerystring","filterAndSortBlogs","displayBlogs","renderPagination","setPaginationScolling","renderFilterTags","renderSelectedFilterTag","classList","remove","addEventListener","e","removeTag","urlParams","URLSearchParams","window","location","search","get","parseInt","filteredItems","filter","blogItem","shouldDisplayBlog","sort","a","b","Date","date","disableScrollingToTop","paginatedItems","paginateItems","length","scrollTo","top","behavior","renderFeaturedItem","renderItems","slice","style","display","some","blogTag","key","let","skip","take","diff","item","innerHTML","renderItem","images","featuredImageUrl","text","html","forEach","listImageUrl","substring","imageUrl","url","imageAltText","dateFormatted","renderBlogTags","name","index","comma","scrollAmount","totalPages","getTotalPages","activeClass","add","querySelectorAll","paginationElem","changePage","scrollLeft","elem","target","contains","innerText","scrollIntoView","block","updateQueryStrings","paginationScrollRight","paginationScrollLeft","paginationChangeScroll","reachEnd","offsetWidth","scrollWidth","totalItems","Math","ceil","getDistinctTags","tagElem","changeTag","selectedTag","dataset","allTags","blog","push","queries","history","pushState","join"],"mappings":"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","file":"template-blogs-landing.min.js","sourcesContent":["export default class TemplateBlogsLanding {\r\n constructor(container, apiEndpoint, redirectUrlIfNoResults, options) {\r\n \r\n const defaultOptions = { \r\n itemsContainer: '.blog-items',\r\n featuredContainer: '.blog-featured',\r\n paginationContainer: '.blog-pagination',\r\n paginationItemsContainer: '.blog-pagination ul',\r\n paginationNextButton: '.blog-pagination .next',\r\n paginationPreviousButton: '.blog-pagination .previous',\r\n filteredByContainer: '.blog-filtered-by',\r\n tagsContainer: '.blog-tags-filter',\r\n itemsPerPage: 9,\r\n itemsOnPageOne: 7,\r\n paginationScrollAmount: 43.5\r\n };\r\n\r\n this.options = Object.assign({}, defaultOptions, options);\r\n this.allBlogs = [];\r\n this.sortedBlogs = [];\r\n this.tags = [];\r\n\r\n this.filterValues = {\r\n tag: '',\r\n page: 1\r\n };\r\n\r\n this.apiEndpoint = apiEndpoint; \r\n this.redirectUrlIfNoResults = redirectUrlIfNoResults;\r\n\r\n this.container = document.querySelector(container);\r\n this.itemsContainer = this.container.querySelector(this.options.itemsContainer);\r\n this.featuredContainer = this.container.querySelector(this.options.featuredContainer);\r\n this.paginationItemsContainer = this.container.querySelector(this.options.paginationItemsContainer);\r\n this.paginationNextButton = this.container.querySelector(this.options.paginationNextButton);\r\n this.paginationPreviousButton = this.container.querySelector(this.options.paginationPreviousButton);\r\n this.tagsContainer = this.container.querySelector(this.options.tagsContainer);\r\n this.filteredByContainer = this.container.querySelector(this.options.filteredByContainer);\r\n\r\n this.init();\r\n this.initEvents();\r\n }\r\n\r\n init() {\r\n \r\n fetch(this.apiEndpoint)\r\n .then(response => response.json())\r\n .then(items => {\r\n \r\n this.allBlogs = items;\r\n\r\n this.syncFilterValuesFromQuerystring();\r\n\r\n this.filterAndSortBlogs();\r\n\r\n this.displayBlogs();\r\n\r\n this.renderPagination();\r\n\r\n this.setPaginationScolling();\r\n\r\n this.renderFilterTags();\r\n\r\n this.renderSelectedFilterTag();\r\n\r\n this.container.classList.remove('loading');\r\n\r\n });\r\n }\r\n \r\n initEvents(){\r\n\r\n this.filteredByContainer.querySelector(\".remove-filter\").addEventListener(\"click\", e => this.removeTag(e));\r\n\r\n }\r\n\r\n syncFilterValuesFromQuerystring(){\r\n\r\n const urlParams = new URLSearchParams(window.location.search);\r\n \r\n const tag = urlParams.get('tag');\r\n const page = urlParams.get('page');\r\n\r\n this.filterValues.tag = tag !== null ? tag : '';\r\n this.filterValues.page = page !== null ? parseInt(page) : 1;\r\n\r\n }\r\n\r\n filterAndSortBlogs(){\r\n\r\n const filteredItems = this.allBlogs.filter(blogItem => this.shouldDisplayBlog(blogItem));\r\n\r\n this.sortedBlogs = filteredItems.sort((a, b) => new Date(b.date) - new Date(a.date))\r\n\r\n }\r\n\r\n\r\n displayBlogs(disableScrollingToTop){\r\n\r\n const paginatedItems = this.paginateItems(this.sortedBlogs);\r\n\r\n if (paginatedItems.length === 0){\r\n\r\n window.location = this.redirectUrlIfNoResults;\r\n return; \r\n\r\n }\r\n\r\n if(!disableScrollingToTop){\r\n window.scrollTo({ top: 0, behavior: 'smooth'});\r\n }\r\n \r\n\r\n if(this.filterValues.page === 1)\r\n {\r\n this.renderFeaturedItem(paginatedItems[0]);\r\n \r\n this.renderItems(paginatedItems.slice(1)); \r\n }\r\n else\r\n {\r\n this.featuredContainer.style.display = 'none';\r\n\r\n this.renderItems(paginatedItems); \r\n }\r\n\r\n }\r\n\r\n shouldDisplayBlog(blogItem){\r\n \r\n if (this.filterValues.tag === '')\r\n return true;\r\n\r\n return blogItem.tags\r\n .some(blogTag => this.filterValues.tag == blogTag.key);\r\n\r\n }\r\n\r\n\r\n paginateItems(items){\r\n\r\n let skip = 0;\r\n let take = 0;\r\n\r\n if(this.filterValues.page === 1)\r\n {\r\n skip = 0;\r\n take = this.options.itemsOnPageOne;\r\n }\r\n else\r\n {\r\n var diff = this.options.itemsPerPage - this.options.itemsOnPageOne;\r\n skip = ((this.filterValues.page - 1) * this.options.itemsPerPage) - diff;\r\n take = this.options.itemsPerPage + skip;\r\n }\r\n \r\n return items.slice(skip, take); \r\n\r\n }\r\n\r\n renderFeaturedItem(item){\r\n\r\n this.featuredContainer.innerHTML = this.renderItem(item, item.images.featuredImageUrl, item.text);\r\n\r\n this.featuredContainer.style.display = 'flex';\r\n }\r\n\r\n renderItems(items){\r\n\r\n let html = \"\";\r\n\r\n items.forEach(item=> {\r\n\r\n html+= `
${text}...
\r\n \r\n