{"version":3,"sources":["webpack:///./src/js/helpers/index.js","webpack:///./src/js/modules/news-media/NewsList.js"],"names":["getParameterByName","name","url","window","location","href","replace","results","RegExp","exec","decodeURIComponent","_core","__webpack_require__","_helpers","NewsList","Component","this","dom","$window","$","$form","$el","find","$viewBtns","$dropdown","$select","$keyword","$category","$date","$spinner","$filters","$results","$noResults","attr","action","page","view","initSelect","parseUrl","search","keyword","category","date","val","categoryChoices","setChoiceByValue","dateChoices","parseInt","config","searchEnabled","searchChoices","itemSelectText","shouldSort","Choices","addClass","on","handleSubmit","bind","triggerViewMode","handleFirstButtonClick","handlePrevButtonClick","handlePageButtonClick","handleNextButtonClick","handleLastButtonClick","handlePopState","e","preventDefault","stopPropagation","$activeBtn","currentTarget","$newsList","removeClass","hasClass","goToPage","data","scrollTop","offset","top","animate","_this2","updateUrl","arguments","length","undefined","filters","params","param","pathname","history","pushState","fadeOut","empty","fadeIn","getData","then","renderResults","catch","handleErrors","ajax","value","text","response","articles","$content","desc","renderDescription","list","renderList","pagination","renderPagination","html","_response$data","total","_response$filters","categoryLabel","getLabel","kc","_this3","items","map","item","renderItem","classes","push","join","renderItemImage","type","headline","dateFormatted","imageUrl","_response$data2","limit","pages","Math","ceil","numbers","half","floor","buttons","createRange","splice","createNumbers","renderFirstButton","renderPrevButton","renderPageButtons","renderNextButton","renderLastButton","currentPage","renderButton","_this4","num","renderPageButton","number","label","ariaLabel","error","console","len","start","out","end","i"],"mappings":"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","file":"55.93e4f1a05e7dc19cb8c0.bundle.js","sourcesContent":["export const getParameterByName = (name, url) => {\n if (!url) url = window.location.href;\n name = name.replace(/[\\[\\]]/g, '\\\\$&');\n const regex = new RegExp(`[?&]${ name }(=([^]*)|&|#|$)`)\n const results = regex.exec(url);\n if (!results) return null;\n if (!results[2]) return '';\n return decodeURIComponent(results[2].replace(/\\+/g, ' '));\n}\n","import { Component } from '@verndale/core';\nimport Choices from 'choices.js';\nimport { getParameterByName } from '../../helpers';\nclass NewsList extends Component {\n setupDefaults() {\n this.dom = {\n $window: $(window),\n $form: this.$el.find('.news-filters__form'),\n $viewBtns: this.$el.find('.js-news-list-btn'),\n $dropdown: this.$el.find('.news-filters__dropdown'),\n $select: this.$el.find('.field__select'),\n $keyword: this.$el.find('.news-filters__keyword .field__input'),\n $category: this.$el.find('.news-filters__category .field__select'),\n $date: this.$el.find('.news-filters__date-range .field__select'),\n $spinner: this.$el.find('.spinner'),\n $filters: this.$el.find('.news-filters'),\n $results: this.$el.find('.news-list__results'),\n $noResults: this.$el.find('.news-list__no-results')\n };\n\n this.url = this.dom.$form.attr('action');\n this.action = this.dom.$form.attr('method') || 'GET';\n this.page = 1;\n this.view = 'grid';\n\n this.initSelect();\n this.parseUrl();\n this.search(this.page, false);\n }\n\n parseUrl() {\n const keyword = getParameterByName('keyword') || '';\n const category = getParameterByName('category') || '';\n const date = getParameterByName('date') || '';\n const page = getParameterByName('page') || '1';\n\n this.dom.$keyword.val(keyword);\n this.categoryChoices.setChoiceByValue(category);\n this.dateChoices.setChoiceByValue(date);\n\n this.page = parseInt(page, 10);\n }\n\n initSelect() {\n const config = {\n searchEnabled: false,\n searchChoices: false,\n itemSelectText: '',\n shouldSort: false\n };\n this.categoryChoices = new Choices(this.dom.$category[0], config);\n this.dateChoices = new Choices(this.dom.$date[0], config);\n this.dom.$dropdown.addClass('is-active');\n }\n\n addListeners() {\n this.dom.$form.on('submit', ::this.handleSubmit);\n this.dom.$category.on('change', ::this.handleSubmit);\n this.dom.$date.on('change', ::this.handleSubmit);\n this.dom.$viewBtns.on('click touchstart', ::this.triggerViewMode);\n this.dom.$results.on(\n 'click',\n '.pagination__button--first',\n ::this.handleFirstButtonClick\n );\n this.dom.$results.on(\n 'click',\n '.pagination__button--prev',\n ::this.handlePrevButtonClick\n );\n this.dom.$results.on(\n 'click',\n '.pagination__button--page',\n ::this.handlePageButtonClick\n );\n this.dom.$results.on(\n 'click',\n '.pagination__button--next',\n ::this.handleNextButtonClick\n );\n this.dom.$results.on(\n 'click',\n '.pagination__button--last',\n ::this.handleLastButtonClick\n );\n\n this.dom.$window.on('popstate', ::this.handlePopState);\n }\n\n triggerViewMode(e) {\n e.preventDefault();\n e.stopPropagation();\n\n const $activeBtn = $(e.currentTarget);\n const $newsList = this.dom.$results.find('.news-list__list');\n this.dom.$viewBtns.removeClass('is-active');\n $activeBtn.addClass('is-active');\n if ($activeBtn.hasClass('js-list-view')) {\n $newsList.addClass('is-list-view');\n this.view = 'list';\n } else {\n $newsList.removeClass('is-list-view');\n this.view = 'grid';\n }\n }\n\n handleSubmit(e) {\n e.preventDefault();\n this.search(1);\n }\n\n handlePopState() {\n this.parseUrl();\n this.search(this.page, false);\n }\n\n handleFirstButtonClick() {\n this.goToPage(1);\n }\n\n handlePrevButtonClick() {\n const page = this.page - 1;\n this.goToPage(page);\n }\n\n handlePageButtonClick(e) {\n const $btn = $(e.currentTarget);\n const page = $btn.data('page');\n this.goToPage(page);\n }\n\n handleNextButtonClick() {\n const page = this.page + 1;\n this.goToPage(page);\n }\n\n handleLastButtonClick(e) {\n const $btn = $(e.currentTarget);\n const page = $btn.data('page');\n this.goToPage(page);\n }\n\n goToPage(page) {\n const scrollTop = this.dom.$filters.offset().top;\n $('html, body').animate({ scrollTop }, 200);\n this.search(page);\n }\n\n search(page, updateUrl = true) {\n const keyword = this.dom.$keyword.val();\n const category = this.dom.$category.val();\n const date = this.dom.$date.val();\n const filters = { page };\n\n if (keyword) {\n filters.keyword = keyword;\n }\n if (category) {\n filters.category = category;\n }\n if (date) {\n filters.date = date;\n }\n\n this.page = page;\n\n if (updateUrl) {\n const params = $.param(filters);\n let url = location.pathname;\n\n if (params) {\n url = `${url}?${params}`;\n }\n\n window.history.pushState({}, null, url);\n }\n\n this.dom.$noResults.fadeOut();\n this.dom.$results.fadeOut(() => {\n this.dom.$results.empty();\n this.dom.$spinner.addClass('is-active');\n this.dom.$spinner.fadeIn();\n\n this.getData(filters)\n .then(::this.renderResults)\n .catch(::this.handleErrors);\n });\n }\n\n getData(filters) {\n return $.ajax({\n url: this.url,\n action: this.action,\n data: filters\n }).then(data => {\n return { filters, data };\n });\n }\n\n getLabel($select, value) {\n return $select.find(`option[value=\"${value}\"]`).text();\n }\n\n renderResults(response) {\n const { articles } = response.data;\n let $content;\n\n if (articles && articles.length) {\n const desc = this.renderDescription(response);\n const list = this.renderList(response);\n const pagination = this.renderPagination(response);\n\n this.dom.$results.html(`\n ${desc}\n ${list}\n ${pagination}\n `);\n\n $content = this.dom.$results;\n } else {\n $content = this.dom.$noResults;\n }\n\n this.dom.$spinner.fadeOut(() => {\n $content.fadeIn();\n });\n }\n\n scrollToFilters() {\n const scrollTop = this.dom.$filters.offset().top;\n $('html, body').animate({ scrollTop }, 600);\n }\n\n renderDescription(response) {\n const { total, articles } = response.data;\n\n const { keyword, category } = response.filters;\n const categoryLabel = this.getLabel(this.dom.$category, category);\n\n let kc = '';\n if (keyword) {\n kc = `for ${keyword} `;\n }\n if (categoryLabel) {\n kc = `${kc}in ${categoryLabel}`;\n }\n\n return /*HTML*/ `\n