diff --git a/app/assets/javascripts/initializers/initScrolling.js.erb b/app/assets/javascripts/initializers/initScrolling.js.erb index a018c760f..b46144491 100644 --- a/app/assets/javascripts/initializers/initScrolling.js.erb +++ b/app/assets/javascripts/initializers/initScrolling.js.erb @@ -179,40 +179,46 @@ function fetchNextPodcastPage(el) { fetchNext(el, "/api/podcast_episodes", insertArticles) } -function paginate(tag, requiresApproval) { - var tagFilters = []; - if (tag && tag.length > 0) { - tagFilters.push(tag); - } +function paginate(tag, params, requiresApproval) { + const searchHash = { ...{ per_page: 15, page: nextPage }, ...JSON.parse(params) }; - var searchObj = { - hitsPerPage: 15, - page: nextPage, - attributesToHighlight: [], - tagFilters, - filters: (requiresApproval === 'true') ? 'approved:true' : '' + if (tag && tag.length > 0) { + searchHash.tag_names = searchHash.tag_names || []; + searchHash.tag_names.push(tag); } + searchHash.approved = (requiresApproval === 'true') ? 'true' : ''; var homeEl = document.getElementById("index-container"); - var paginationArticlesIndex; if (homeEl.dataset.feed === "base-feed") { - paginationArticlesIndex = client.initIndex('ordered_articles_<%= Rails.env %>'); + searchHash.class_name = "Article"; } else if (homeEl.dataset.feed === "latest") { - paginationArticlesIndex = client.initIndex('ordered_articles_by_published_at_<%= Rails.env %>'); + searchHash.class_name = "Article"; + searchHash.sort_by = "published_at"; } else { - var preamble = (requiresApproval === 'true') ? ' AND ' : '' - searchObj.filters += ( preamble +'published_at_int > ' + homeEl.dataset.articlesSince); - paginationArticlesIndex = client.initIndex('ordered_articles_by_positive_reactions_count_<%= Rails.env %>'); + searchHash.class_name = "Article"; + searchHash["published_at[gte]"] = homeEl.dataset.articlesSince; + searchHash.sort_by = "positive_reactions_count"; } - paginationArticlesIndex.search("*", searchObj) - .then(function searchDone(content) { + const searchParams = new URLSearchParams(searchHash).toString(); + + fetch(`/search/feed_content?${searchParams}`, { + method: 'GET', + headers: { + Accept: 'application/json', + 'X-CSRF-Token': window.csrfToken, + 'Content-Type': 'application/json', + }, + credentials: 'same-origin', + }) + .then(response => response.json()) + .then((content) => { nextPage += 1; - insertArticles(content.hits); + insertArticles(content.result); const checkBlockedContentEvent = new CustomEvent('checkBlockedContent') window.dispatchEvent(checkBlockedContentEvent); initializeReadingListIcons(); - if (content.hits.length === 0) { + if (content.result.length === 0) { document.getElementById("loading-articles").style.display = "none" done = true; } @@ -253,7 +259,11 @@ function fetchNextPageIfNearBottom() { } else { scrollableElemId = "articles-list"; fetchCallback = function fetch() { - paginate(indexContainer.dataset.tag, indexContainer.dataset.requiresApproval); + paginate( + indexContainer.dataset.tag, + indexContainer.dataset.params, + indexContainer.dataset.requiresApproval + ); }; } @@ -266,9 +276,6 @@ function fetchNextPageIfNearBottom() { } function checkIfNearBottomOfPage() { - var publicSearchKey = '<%= ALGOLIASEARCH_PUBLIC_SEARCH_ONLY_KEY %>'; - client = algoliasearch('<%= ApplicationConfig["ALGOLIASEARCH_APPLICATION_ID"] %>', publicSearchKey); - if (document.getElementsByClassName("single-article").length < 2 || window.location.search.indexOf("q=") > -1 ) { document.getElementById("loading-articles").style.display = "none"; done = true; diff --git a/app/assets/javascripts/utilities/buildArticleHTML.js.erb b/app/assets/javascripts/utilities/buildArticleHTML.js.erb index 55d8cf2e5..c08bdb767 100644 --- a/app/assets/javascripts/utilities/buildArticleHTML.js.erb +++ b/app/assets/javascripts/utilities/buildArticleHTML.js.erb @@ -1,5 +1,5 @@ function buildArticleHTML(article) { - if (article && article.type_of == "podcast_episodes") { + if (article && article.class_name == "PodcastEpisode") { return '