{"version":3,"file":"articles.4f8bfb.js","mappings":"+EAMA,IAAMA,EAAkB,WAKpB,IAAIC,EAAS,GAMTC,EAAc,GAEZC,EAAkBC,EAAE,0BACpBC,EAAmBD,EAAE,iBAE3B,SAASE,IACL,IAAMC,EAAQH,EAAE,kDAADI,OAAmDP,EAAM,OAExEG,EAAE,8BAA8BK,OAChCF,EAAMG,MACV,CAiFA,MAAO,CACHC,KAnBJ,WAEI,IAAMC,EAAUR,EAAE,2BAGlBH,EAASW,EAAQC,KAAK,gBACtBX,EAAcU,EAAQC,KAAK,gBAzB3BC,OAAOC,UAAUC,OAAO,sBAAsB,WAC1Cb,EAAgBc,OAAO,QACvBZ,EAAiBa,IAAI,CAAEC,QAAS,MACpC,IACAL,OAAOC,UAAUC,OAAO,yBAAyB,WAC7Cb,EAAgBiB,QAAQ,QACxBf,EAAiBa,IAAI,CAAEC,QAAS,KACpC,IAGAf,EAAE,eAAeiB,GAAG,SAAS,SAACC,IA9ClC,SAAsBA,GAClB,IAiBIC,EAjBEC,EAAiBpB,EAAEkB,EAAMG,QAE3BD,EAAeX,KAAK,iBAAmBZ,IAK3CG,EAAE,eAAesB,YAAY,YAG7BtB,EAAE,6BAA6BuB,KAAKH,EAAeX,KAAK,uBAGxDZ,EAASuB,EAAeX,KAAK,eAC7BW,EAAeI,SAAS,YAIT,KAAX3B,GAEAsB,EAAYrB,EACZY,OAAOe,QAAQC,UAAU7B,EAAQ,KAAMsB,KAGvCA,EAAY,GAAHf,OAAMN,EAAW,WAAAM,OAAUP,EAAM,KAC1Ca,OAAOe,QAAQC,UAAU7B,EAAQ,KAAMsB,IAE3CjB,IACJ,CAkBQyB,CAAaT,EACjB,IAgBAnB,EAAgBiB,QAAQ,QACxBd,GACJ,EAUJ,CAzGwB,GA2GxBF,EAAE4B,UAAUC,OAAM,WACdjC,EAAeW,MACnB,G","sources":["webpack://electro/./js/pages/articles.js"],"sourcesContent":["/**\n * Service for the article landing page template.\n *\n * @type {{init}}\n * @author Nick Galvez\n */\nconst articleService = (() => {\n /**\n * The article_tag taxonomy.\n * @type {string}\n */\n let filter = '';\n\n /**\n * The current landing page.\n * @type {string}\n */\n let landingPage = '';\n\n const $loadingElement = $('.article-grid__loading');\n const $articlesElement = $('.article-grid');\n\n function updateGrid() {\n const tiles = $(`#article-grid-container li[data-article-tags~='${filter}']`);\n\n $('#article-grid-container li').hide();\n tiles.show();\n }\n\n /**\n * Process a click on a filter button.\n * @param event\n *\n * @private\n */\n function updateFilter(event) {\n const selectedButton = $(event.target);\n\n if (selectedButton.data('filter-name') === filter) {\n // user clicked the same button. Don't reload.\n return;\n }\n\n $('.tag-button').removeClass('selected');\n // Update the landing page copy\n // $('.article-landing-text > h1').html(selectedButton.text());\n $('.article-landing-text > p').html(selectedButton.data('filter-description'));\n\n // Update the filter.\n filter = selectedButton.data('filter-name');\n selectedButton.addClass('selected');\n\n // write tag name to URL\n let filterURL;\n if (filter === '') {\n // if the filter button is the \"show all\" button, reset URL to have no filter\n filterURL = landingPage;\n window.history.pushState(filter, null, filterURL);\n } else {\n // all other buttons write the filter name to the URL\n filterURL = `${landingPage}filter/${filter}/`;\n window.history.pushState(filter, null, filterURL);\n }\n updateGrid();\n }\n\n /**\n * Attach event listeners to the DOM.\n * @private\n */\n function attachEvents() {\n window.ajaxEvent.attach('ajaxStart.articles', () => {\n $loadingElement.fadeIn('fast');\n $articlesElement.css({ opacity: '.2' });\n });\n window.ajaxEvent.attach('ajaxComplete.articles', () => {\n $loadingElement.fadeOut('fast');\n $articlesElement.css({ opacity: '1' });\n });\n\n // Clicks\n $('.tag-button').on('click', (event) => {\n updateFilter(event);\n });\n }\n\n /**\n * Init function. Called on load.\n * @private\n */\n function init() {\n // Get data passed from backend\n const dataDiv = $('#article-grid-container');\n\n // Set initial state.\n filter = dataDiv.data('article-tags');\n landingPage = dataDiv.data('landing-page');\n\n attachEvents();\n $loadingElement.fadeOut('fast');\n updateGrid();\n }\n\n /**\n * Public Function(s)\n *\n * @public\n */\n return {\n init,\n };\n})();\n\n$(document).ready(() => {\n articleService.init();\n});\n"],"names":["articleService","filter","landingPage","$loadingElement","$","$articlesElement","updateGrid","tiles","concat","hide","show","init","dataDiv","data","window","ajaxEvent","attach","fadeIn","css","opacity","fadeOut","on","event","filterURL","selectedButton","target","removeClass","html","addClass","history","pushState","updateFilter","document","ready"],"sourceRoot":""}