{"version":3,"sources":["webpack:///./app/javascript/packs/searchParams.js"],"names":["getQueryParams","qs","split","join","tokens","params","re","exec","decodeURIComponent","document","location","search","searchMain","substories","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","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","result","story","push","buildArticleHTML","initializeReadingListIcons","waitingOnSearch","setInterval","clearInterval"],"mappings":"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","file":"js/searchParams-79f89596bf8ecc7ec275.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) {\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 =\n '

';\n if (document.getElementById('query-wrapper')) {\n search(query, filters, sortBy, sortDirection);\n initializeFilters(query, filters);\n initializeSortingTabs(query);\n }\n}\n\nfunction initializeSortingTabs(query) {\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 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 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 content.result.forEach((story) => {\n resultDivs.push(buildArticleHTML(story));\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 '
No results match that query
';\n }\n });\n}\n\nconst waitingOnSearch = setInterval(() => {\n if (\n typeof search === 'function' &&\n typeof filterXSS === 'function' &&\n typeof buildArticleHTML === 'function'\n ) {\n clearInterval(waitingOnSearch);\n const substories = document.getElementById('substories');\n if (\n substories &&\n document.getElementsByClassName('search-results-loaded').length === 0\n ) {\n searchMain(substories);\n }\n }\n}, 1);\n"],"sourceRoot":""}