{"version":3,"sources":["webpack:///./app/javascript/packs/searchParams.js"],"names":["getQueryParams","qs","split","join","tokens","params","re","exec","decodeURIComponent","document","location","search","searchMain","substories","loadingHTML","query","filterXSS","q","filters","sortBy","sort_by","sortDirection","sort_direction","innerHTML","getElementById","filterButts","getElementsByClassName","i","length","dataset","filter","classList","add","onclick","e","currentParams","sortString","buildSortString","target","contains","checkUserLoggedIn","window","history","pushState","className","remove","indexOf","replaceState","showLoginModal","referring_source","trigger","initializeFilters","sortingTabs","querySelectorAll","addEventListener","j","setAttribute","initializeSortingTabs","hashtags","match","searchTerm","replace","trim","searchHash","per_page","page","userData","user_id","class_name","tag_names","forEach","key","value","search_fields","searchParams","URLSearchParams","Object","keys","Array","isArray","arrayValue","append","fetch","toString","method","headers","Accept","csrfToken","credentials","then","response","json","content","resultDivs","currentUser","currentUserId","id","result","story","push","buildArticleHTML","initializeReadingListIcons","waitingOnSearch","setInterval","clearInterval","querySelector"],"mappings":"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","file":"js/searchParams-211f18bcb9b1af39a43d.chunk.js","sourcesContent":["/* global checkUserLoggedIn, showLoginModal, userData, buildArticleHTML, initializeReadingListIcons */\n/* eslint no-undef: \"error\" */\n\nfunction getQueryParams(qs) {\n qs = qs.split('+').join(' ');\n\n const params = {},\n re = /[?&]?([^=]+)=([^&]*)/g;\n let tokens;\n\n while ((tokens = re.exec(qs))) {\n params[decodeURIComponent(tokens[1])] = decodeURIComponent(tokens[2]);\n }\n\n return params;\n}\n\nconst params = getQueryParams(document.location.search);\n\nfunction searchMain(substories, loadingHTML) {\n const query = filterXSS(params.q);\n const filters = filterXSS(params.filters || 'class_name:Article');\n const sortBy = filterXSS(params.sort_by || '');\n const sortDirection = filterXSS(params.sort_direction || '');\n\n substories.innerHTML = loadingHTML;\n if (document.getElementById('query-wrapper')) {\n search(query, filters, sortBy, sortDirection);\n initializeFilters(query, filters);\n initializeSortingTabs(query, substories, loadingHTML);\n }\n}\n\nfunction initializeSortingTabs(query, substories, loadingHTML) {\n const sortingTabs = document.querySelectorAll(\n '#sorting-option-tabs .crayons-navigation__item',\n );\n\n for (let i = 0; i < sortingTabs.length; i++) {\n const tab = sortingTabs[i];\n\n tab.addEventListener('click', (e) => {\n const currentParams = getQueryParams(document.location.search);\n const filters = filterXSS(currentParams.filters);\n\n const { sortBy, sortDirection } = e.target.dataset;\n const sortString = buildSortString(sortBy, sortDirection);\n\n substories.innerHTML = loadingHTML;\n if (filters) {\n window.history.pushState(\n null,\n null,\n `/search?q=${query}&filters=${filters}${sortString}`,\n );\n search(query, filters, sortBy, sortDirection);\n } else {\n window.history.pushState(null, null, `/search?q=${query}${sortString}`);\n search(query, '', sortBy, sortDirection);\n }\n\n for (let j = 0; j < sortingTabs.length; j++) {\n if (sortingTabs[j] !== e.target) {\n sortingTabs[j].classList.remove('crayons-navigation__item--current');\n sortingTabs[j].setAttribute('aria-current', '');\n }\n }\n\n e.target.classList.add('crayons-navigation__item--current');\n e.target.setAttribute('aria-current', 'page');\n });\n }\n}\n\nfunction initializeFilters(query, filters) {\n const filterButts = document.getElementsByClassName('query-filter-button');\n for (let i = 0; i < filterButts.length; i++) {\n if (filters === filterButts[i].dataset.filter) {\n filterButts[i].classList.add('crayons-navigation__item--current');\n }\n filterButts[i].onclick = function (e) {\n const currentParams = getQueryParams(document.location.search);\n const sortBy = filterXSS(currentParams.sort_by);\n const sortDirection = filterXSS(currentParams.sort_direction);\n const sortString = buildSortString(sortBy, sortDirection);\n\n if (\n e.target.classList.contains('my-posts-query-button') &&\n !checkUserLoggedIn()\n ) {\n showLoginModal({\n referring_source: 'search',\n trigger: 'my_posts_filter',\n });\n return;\n }\n const filters = e.target.dataset.filter;\n window.history.pushState(\n null,\n null,\n `/search?q=${query}&filters=${filters}${sortString}`,\n );\n const { className } = e.target;\n for (let i = 0; i < filterButts.length; i++) {\n filterButts[i].classList.remove('crayons-navigation__item--current');\n }\n if (className.indexOf('crayons-navigation__item--current') === -1) {\n e.target.classList.add('crayons-navigation__item--current');\n window.history.replaceState(\n null,\n null,\n `/search?q=${query}&filters=${filters}${sortString}`,\n );\n search(query, filters, sortBy, sortDirection);\n } else {\n window.history.replaceState(\n null,\n null,\n `/search?q=${query}${sortString}`,\n );\n search(query, '', sortBy, sortDirection);\n }\n };\n }\n}\n\nfunction buildSortString(sortBy, sortDirection) {\n return sortBy && sortDirection\n ? `&sort_by=${sortBy}&sort_direction=${sortDirection}`\n : '';\n}\n\nfunction search(query, filters, sortBy, sortDirection) {\n const hashtags = query.match(/#\\w+/g);\n const searchTerm = query.replace(/#/g, '').trim();\n const searchHash = { per_page: 60, page: 0 };\n\n if (sortBy && sortDirection) {\n searchHash.sort_by = sortBy;\n searchHash.sort_direction = sortDirection;\n }\n\n if (filters === 'MY_POSTS' && userData()) {\n searchHash.user_id = userData()['id'];\n searchHash.class_name = 'Article';\n }\n\n if (hashtags && hashtags.length > 0) {\n for (let i = 0; i < hashtags.length; i++) {\n hashtags[i] = hashtags[i].replace(/#/, '');\n }\n searchHash.tag_names = hashtags;\n }\n\n if (filters) {\n filters.split('&').forEach((filter) => {\n const [key, value] = filter.split(':');\n searchHash[key] = value;\n });\n }\n\n if (searchTerm) {\n searchHash.search_fields = searchTerm;\n }\n\n // Brute force copying code from a utility for quick fix\n const searchParams = new URLSearchParams();\n Object.keys(searchHash).forEach((key) => {\n const value = searchHash[key];\n if (Array.isArray(value)) {\n value.forEach((arrayValue) => {\n searchParams.append(`${key}[]`, arrayValue);\n });\n } else {\n searchParams.append(key, value);\n }\n });\n\n fetch(`/search/feed_content?${searchParams.toString()}`, {\n method: 'GET',\n headers: {\n Accept: 'application/json',\n 'X-CSRF-Token': window.csrfToken,\n 'Content-Type': 'application/json',\n },\n credentials: 'same-origin',\n })\n .then((response) => response.json())\n .then((content) => {\n const resultDivs = [];\n const currentUser = userData();\n const currentUserId = currentUser && currentUser.id;\n content.result.forEach((story) => {\n resultDivs.push(buildArticleHTML(story, currentUserId));\n });\n document.getElementById('substories').innerHTML = resultDivs.join('');\n initializeReadingListIcons();\n document\n .getElementById('substories')\n .classList.add('search-results-loaded');\n if (content.result.length === 0) {\n document.getElementById('substories').innerHTML =\n '