{"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","concat","className","remove","indexOf","replaceState","showLoginModal","referring_source","trigger","initializeFilters","sortingTabs","querySelectorAll","addEventListener","_e$target$dataset","j","setAttribute","initializeSortingTabs","hashtags","match","searchTerm","replace","trim","searchHash","per_page","page","userData","user_id","class_name","tag_names","forEach","_filter$split2","_slicedToArray","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-fa57037afbcc1be9e0dc.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 '
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 const loadingHTML = document.querySelector(\n 'template[id=crayons-story-loading]',\n ).innerHTML;\n if (\n substories &&\n document.getElementsByClassName('search-results-loaded').length === 0\n ) {\n searchMain(substories, loadingHTML);\n }\n }\n}, 1);\n"],"sourceRoot":""}