{"version":3,"file":"/js/components/latest-posts.js","mappings":"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","sources":["webpack://bitc/./src/js/components/latest-posts.js"],"sourcesContent":["// Set an initial page number.\nlet globalPageNum = 1;\nlet globalFilterType = 'all';\n\nif ( document.readyState === 'loading' ) {\n\n\t// The DOM has not yet been loaded.\n\tdocument.addEventListener( 'DOMContentLoaded', initLatestPostsComponent );\n\n} else {\n\n\t// The DOM has already been loaded.\n\tinitLatestPostsComponent();\n}\n\n\n/**\n * Update the global page number to maintain state\n *\n * @param {Int} num The page number to update\n */\nfunction updatePageNum( num ) {\n\tglobalPageNum = parseInt( num );\n}\n\n/**\n * Return the global page number\n *\n * @return {Int} globalPageNum\n */\nfunction getPageNum() {\n\treturn parseInt( globalPageNum );\n}\n\n/**\n * Update the global post type so it can be used when\n * navigation to another page. This maintins the\n * pagination query. If type is a blank string, the\n * filters are reset.\n *\n * @param {String} type the selected filter post type\n */\nfunction setFilterType( type ) {\n\tglobalFilterType = type;\n}\n\n/**\n * Return the global filter type\n *\n * @return {String} globalFilterType\n */\nfunction getFilterType() {\n\treturn globalFilterType;\n}\n\n/**\n * Fetch the dynamic content through the custom REST API endpoints.\n */\nfunction initLatestPostsComponent() {\n\n\tconst postsContainer = jQuery('.js-recent-posts');\n\tconst filtersContainer = jQuery('.js-filters');\n\tconst paginationContainer = jQuery( '.js-pagination' );\n\tconst filterCats = {...filtersContainer.data('cats')};\n\tconst filterTags = {...filtersContainer.data('tags')};\n\tconst filterType = postsContainer.data('post_type');\n\tconst mobileFilterSelect = jQuery( '.js-select-filter' );\n\n\t// If post type set activate filter in order for the pagination to work properly.\n\tif ( filterType ) {\n\t\tsetFilterType( filterType );\n\t}\n\n\tlet mobileFilterSelectText = jQuery( '.js-select-filter > option:first-child' );\n\n\tconst wp = window.wp;\n\tconst latestPostsTemplate = wp.template( \"latest-posts\" );\n\tconst paginationTemplate = wp.template( \"latest-posts-pagination\" );\n\n\t// INIT.\n\tinitDesktopFilters();\n\tinitMobileFilters();\n\tinitPaginationHandler();\n\n\tfunction initDesktopFilters() {\n\n\t\tif ( filtersContainer === undefined || filtersContainer.length === 0 ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tlet filterButton = jQuery( '.js-button-filter' );\n\n\t\t// Add click handlers on to the pagination.\n\t\tfilterButton.on( 'click', function(e) {\n\n\t\t\tlet selectedFilter = jQuery(this).data('type');\n\t\t\tif( selectedFilter !== undefined ) {\n\t\t\t\tsetFilterType( selectedFilter );\n\t\t\t\tupdatePageNum( 1 );\n\t\t\t\tfetchLatestPosts();\n\t\t\t}\n\n\t\t\te.preventDefault();\n\t\t} );\n\t}\n\n\tfunction initMobileFilters() {\n\n\t\tif ( mobileFilterSelect === undefined || mobileFilterSelect.length === 0 ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tmobileFilterSelect.on( 'change', function() {\n\n\t\t\tlet filterType = jQuery(this).val();\n\t\t\tif( filterType !== undefined ) {\n\n\t\t\t\tif( filterType !== 'all' ) {\n\t\t\t\t\tmobileFilterSelectText.text('Show all...');\n\t\t\t\t} else {\n\t\t\t\t\tmobileFilterSelectText.text('Select...');\n\t\t\t\t}\n\n\t\t\t\tsetFilterType( filterType );\n\t\t\t\tupdatePageNum( 1 );\n\t\t\t\tfetchLatestPosts();\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n\t// Function to set up the pagination.\n\tfunction initPaginationHandler() {\n\n\t\t// Return early if the pagination is not in the DOM.\n\t\tif ( paginationContainer === undefined || paginationContainer.length === 0 ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Add a class for mobile to position the pagination for small screen devices.\n\t\tpaginationContainer.removeClass('negative-offset negative-offset--sm');\n\t\tif( getPageNum() === 2 || getPageNum() === 3 || getPageNum() === 9 ) {\n\t\t\tpaginationContainer.addClass('negative-offset--sm');\n\t\t} else if( getPageNum() > 3 && getPageNum() < 9 ) {\n\t\t\tpaginationContainer.addClass('negative-offset');\n\t\t}\n\n\t\t// Set up the event handlers on the pagination.\n\t\tjQuery( '.js-pagination li a.page-numbers' ).on( 'click', function(e) {\n\t\t\te.preventDefault();\n\t\t\tlet $this = jQuery(this);\n\n\t\t\tif ( $this.hasClass( 'prev' ) ) {\n\t\t\t\tupdatePageNum( getPageNum() - 1 );\n\t\t\t} else if ( $this.hasClass( 'next' ) ) {\n\t\t\t\tupdatePageNum( getPageNum() + 1 );\n\t\t\t} else {\n\t\t\t\tupdatePageNum( $this.text() );\n\t\t\t}\n\n\t\t\tif ( getPageNum() >= 1 ) {\n\t\t\t\tfetchLatestPosts();\n\t\t\t}\n\t\t} );\n\t}\n\n\t/**\n\t * Use wp.template to output the HTML page numbers inside the pagination container.\n\t *\n\t * @param {Object} paginationObj The data containing pages from the AJAX response.\n\t */\n\tfunction renderPagination( paginationObj ) {\n\n\t\t// Pages is an array of objects.\n\t\tfor( let i = 0; i < paginationObj.pages.length; i++ ) {\n\t\t\tpaginationContainer.append(\n\t\t\t\tpaginationTemplate( paginationObj.pages[i] )\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Perform the actual AJAX call to the custom REST API endpoint.\n\t *\n\t * @file Latest_Posts\\Component\n\t *\n\t * @param {int} pageNum page number needed for the API endpoint.\n\t */\n\tfunction fetchLatestPosts() {\n\n\t\tconst selectedClass = 'c-button--current';\n\t\tconst filterButton = jQuery('.js-button-filter');\n\n\t\tjQuery.ajax({\n\t\t\turl: bitc_postdata.endpoint,\n\t\t\tdataType: 'json',\n\t\t\tdata: {\n\t\t\t\tpage: getPageNum(),\n\t\t\t\ttype: getFilterType(),\n\t\t\t\tcats: filterCats,\n\t\t\t\ttags: filterTags\n\t\t\t},\n\t\t\tsuccess: function( data ) {\n\n\t\t\t\t// Update the current filter class.\n\t\t\t\tfilterButton.removeClass(selectedClass);\n\t\t\t\tjQuery(`.js-button-filter[data-type=\"${getFilterType()}\"]`).addClass(selectedClass);\n\n\t\t\t\t// Clear the posts container.\n\t\t\t\tjQuery(postsContainer).empty();\n\n\t\t\t\t// Pages is an array of objects.\n\t\t\t\tfor( let p = 0; p < data.posts.length; p++ ) {\n\t\t\t\t\tpostsContainer.append(\n\t\t\t\t\t\tlatestPostsTemplate( data.posts[p] )\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif ( paginationContainer !== undefined || paginationContainer.length !== 0 ) {\n\t\t\t\t\tjQuery( paginationContainer ).empty();\n\t\t\t\t\tif( data.pagination.pages ) {\n\t\t\t\t\t\t// Render the pagination.\n\t\t\t\t\t\trenderPagination( data.pagination );\n\n\t\t\t\t\t\t// Add the pagination handler.\n\t\t\t\t\t\tinitPaginationHandler();\n\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\terror: function( data ) {\n\t\t\t},\n\n\t\t});\n\t}\n\n}\n"],"names":["globalPageNum","globalFilterType","document","readyState","addEventListener","initLatestPostsComponent","updatePageNum","num","parseInt","getPageNum","setFilterType","type","getFilterType","postsContainer","jQuery","filtersContainer","paginationContainer","filterCats","_objectSpread","data","filterTags","filterType","mobileFilterSelect","mobileFilterSelectText","wp","window","latestPostsTemplate","template","paginationTemplate","initDesktopFilters","initMobileFilters","initPaginationHandler","undefined","length","filterButton","on","e","selectedFilter","fetchLatestPosts","preventDefault","val","text","removeClass","addClass","$this","hasClass","renderPagination","paginationObj","i","pages","append","selectedClass","ajax","url","bitc_postdata","endpoint","dataType","page","cats","tags","success","concat","empty","p","posts","pagination","error"],"sourceRoot":""}