{"version":3,"file":"uppsala.vacancies-filter.min.js","names":["define","$","h","multiselect","_currentPageQueryParameterKey","_adminQueryParameterKey","_summerjobsQueryParameterKey","_searchtextQueryParameterKey","_listElementSelector","_queryStringKeyOrderBy","_sortOrderElementSelector","_searchInputSelector","_summerJobsInputSelector","originalTitle","document","title","vacancyPage","PageTitle","init","currentPageQueryParameterKey","adminQueryParameterKey","summerjobsQueryParameterKey","searchtextQueryParameterKey","queryStringKeyOrderBy","listElementSelector","sortOrderElementSelector","summerJobsInputSelector","searchInputElementSelector","event","UpdateHistory","window","History","enabled","hide","isInitial","isPagingReset","SetupAjax","UpdateHistoryFromUrlParameters","currentUrl","currentUrlWithoutHash","URL","split","urlParams","URLSearchParams","search","administrations","getAll","get","sortOrder","summerjobs","PushFilterStateToHistory","ReplaceFilterStateHistory","pageToSet","history","state","getState","adminValues","map","this","join","queryString","encodeURIComponent","replaceState","vacancysearch","administration","pushState","UpdateInputFields","historyState","data","val","decodeURIComponent","setSelected","selectedIndex","UpdateResultList","requestBaseUrl","url","indexOf","ajax","cache","dataType","success","response","html","error","request","status","errorThrown","createNewHistoryEntry","getSelectedValues","currentPage","location","timer","keyup","clearTimeout","setTimeout","change","on","e","preventDefault","attr","Adapter","bind"],"sources":["uppsala.vacancies-filter.js"],"mappings":"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","ignoreList":[],"sourcesContent":["define([\"jquery\", \"history\", \"multiselect\"], function ($, h, multiselect) {\r\n var originalTitle = document.title;\r\n var _currentPageQueryParameterKey;\r\n var _adminQueryParameterKey;\r\n var _summerjobsQueryParameterKey;\r\n var _searchtextQueryParameterKey;\r\n var _listElementSelector;\r\n var _queryStringKeyOrderBy;\r\n var _sortOrderElementSelector;\r\n var _searchInputSelector;\r\n var _summerJobsInputSelector;\r\n var clearFilterLinkSelector = \".js-clearfilter-link\";\r\n\r\n var vacancyPage = {\r\n\r\n PageTitle: document.title,\r\n\r\n init: function (\r\n currentPageQueryParameterKey,\r\n adminQueryParameterKey,\r\n summerjobsQueryParameterKey,\r\n searchtextQueryParameterKey,\r\n queryStringKeyOrderBy,\r\n listElementSelector,\r\n sortOrderElementSelector,\r\n summerJobsInputSelector,\r\n searchInputElementSelector\r\n ) {\r\n\r\n //assign component variables\r\n _currentPageQueryParameterKey = currentPageQueryParameterKey;\r\n _adminQueryParameterKey = adminQueryParameterKey;\r\n _summerjobsQueryParameterKey = summerjobsQueryParameterKey;\r\n _searchtextQueryParameterKey = searchtextQueryParameterKey;\r\n _listElementSelector = listElementSelector;\r\n _queryStringKeyOrderBy = queryStringKeyOrderBy;\r\n _sortOrderElementSelector = sortOrderElementSelector;\r\n _summerJobsInputSelector = summerJobsInputSelector\r\n _searchInputSelector = searchInputElementSelector;\r\n\r\n\r\n multiselect.init(function (event) {\r\n // on administration option change. history update is intial and paging should be reset.\r\n vacancyPage.UpdateHistory(true, true);\r\n });\r\n\r\n if (window.History.enabled) {\r\n //hide button\r\n $(\"#filter .btn\").hide();\r\n\r\n const isInitial = true;\r\n const isPagingReset = false;\r\n\r\n //Fix för att första sidladdningen utan querystring blir en dubblett i history-listan.\r\n vacancyPage.UpdateHistory(isInitial, isPagingReset);\r\n\r\n vacancyPage.SetupAjax();\r\n }\r\n },\r\n UpdateHistoryFromUrlParameters: function (currentUrl) {\r\n\r\n //remove anchorlink, urlparams set anchorlink as parameter value otherwise\r\n var currentUrlWithoutHash = new URL(currentUrl.split('#')[0]);\r\n\r\n //get querystring as object with url parameters\r\n const urlParams = new URLSearchParams(currentUrlWithoutHash.search);\r\n\r\n // collects values to a pattern &admin=1&admin=2 and so on.\r\n const administrations = urlParams.getAll(_adminQueryParameterKey);\r\n\r\n //assign to empty string to prevent \"null\" as value\r\n const search = urlParams.get(_searchtextQueryParameterKey) || \"\";\r\n const sortOrder = urlParams.get(_queryStringKeyOrderBy) || \"\";\r\n\r\n //set summerjob parameter value as bool\r\n const summerjobs = urlParams.get(_summerjobsQueryParameterKey) === \"true\";\r\n\r\n //reset paging\r\n const pageToSet = \"1\";\r\n\r\n //push url parameters to history\r\n vacancyPage.PushFilterStateToHistory(search, administrations, summerjobs, pageToSet, sortOrder);\r\n },\r\n ReplaceFilterStateHistory: function (\r\n search,\r\n administrations,\r\n summerjobs,\r\n pageToSet,\r\n sortOrder) {\r\n\r\n var history = window.History;\r\n var state = history.getState();\r\n state.title = search !== '' ? search + ' - ' + originalTitle : originalTitle;\r\n\r\n //admin values as query sting parameters\r\n var adminValues = $(administrations).map(function () { return '&' + _adminQueryParameterKey + '=' + this }).get().join('');\r\n var queryString = \"?\" + _searchtextQueryParameterKey + \"=\" + encodeURIComponent(search) + adminValues + \"&\" + _summerjobsQueryParameterKey + \"=\" + summerjobs + \"&\" + _currentPageQueryParameterKey + \"=\" + pageToSet + \"&\" + _queryStringKeyOrderBy + \"=\" + sortOrder;\r\n\r\n document.title = state.title;\r\n history.replaceState({ state: { vacancysearch: search, administration: administrations, summerjobs: summerjobs, _currentPageQueryParameterKey: pageToSet, _queryStringKeyOrderBy: sortOrder } }, state.title, queryString);\r\n },\r\n PushFilterStateToHistory: function (\r\n search,\r\n administrations,\r\n summerjobs,\r\n pageToSet,\r\n sortOrder) {\r\n\r\n var history = window.History;\r\n var state = history.getState();\r\n state.title = search !== '' ? search + ' - ' + originalTitle : originalTitle;\r\n\r\n //admin values as query sting parameters\r\n var adminValues = $(administrations).map(function () { return '&' + _adminQueryParameterKey + '=' + this }).get().join('');\r\n var queryString = \"?\" + _searchtextQueryParameterKey + \"=\" + encodeURIComponent(search) + adminValues + \"&\" + _summerjobsQueryParameterKey + \"=\" + summerjobs + \"&\" + _currentPageQueryParameterKey + \"=\" + pageToSet + \"&\" + _queryStringKeyOrderBy + \"=\" + sortOrder;\r\n\r\n history.pushState({\r\n state: {\r\n vacancysearch: search,\r\n administration: administrations,\r\n summerjobs: summerjobs,\r\n _currentPageQueryParameterKey: pageToSet,\r\n _queryStringKeyOrderBy: sortOrder\r\n }\r\n }, state.title, queryString);\r\n },\r\n UpdateInputFields: function (historyState) {\r\n if (historyState.data !== null) {\r\n if (historyState.data.state.vacancysearch !== null) {\r\n $(_searchInputSelector).val(decodeURIComponent(historyState.data.state.vacancysearch)); //J.R bakade in decode här, resterande koppling sköts av browsern.\r\n }\r\n else {\r\n $(_searchInputSelector).val(\"\");\r\n }\r\n\r\n if (historyState.data.state.administration !== null)\r\n multiselect.setSelected(historyState.data.state.administration);\r\n\r\n if (historyState.data.state.summerjobs !== null && historyState.data.state.summerjobs) {\r\n $(_summerJobsInputSelector)[0].selectedIndex = 1;\r\n }\r\n else {\r\n $(_summerJobsInputSelector)[0].selectedIndex = 0;\r\n }\r\n }\r\n },\r\n UpdateResultList: function (historyState) {\r\n //TODO: Handle history-stuff\r\n var requestBaseUrl = historyState.url.indexOf('?') !== -1 ? historyState.url + \"&isAjax=true\" : historyState.url + \"?isAjax=true\";\r\n\r\n $.ajax({\r\n url: requestBaseUrl,\r\n cache: true,\r\n dataType: \"html\",\r\n success: function (response) {\r\n $(_listElementSelector).html(response);\r\n },\r\n error: function (request, status, errorThrown) {\r\n //console.log(\"epic fail: \" + errorThrown + \", \" + status);\r\n }\r\n });\r\n },\r\n //Pushes the \"filter input control state\" and \"pagination info\" into history\r\n UpdateHistory: function (createNewHistoryEntry, isPagingReset) {\r\n\r\n var administrations = multiselect.getSelectedValues();\r\n var search = $(_searchInputSelector).val();\r\n var summerjobs = $(_summerJobsInputSelector)[0].selectedIndex > 0;\r\n var sortOrder = $(_sortOrderElementSelector).val();\r\n\r\n const urlParams = new URLSearchParams(window.location.search);\r\n const currentPage = urlParams.get(_currentPageQueryParameterKey) || \"\";\r\n const pageToSet = isPagingReset ? \"1\" : currentPage;\r\n\r\n if (createNewHistoryEntry === false) {\r\n //Ser till att querystring är komplett vid första första sidladdningen och gör sedan replace på history entryt.\r\n vacancyPage.ReplaceFilterStateHistory(search, administrations, summerjobs, pageToSet, sortOrder);\r\n\r\n } else {\r\n vacancyPage.PushFilterStateToHistory(search, administrations, summerjobs, pageToSet, sortOrder);\r\n }\r\n },\r\n //Binds change eventhandlers to input controls\r\n //multiselect is setup in init function\r\n SetupAjax: function () {\r\n\r\n const isInitial = false;\r\n const isPagingReset = true;\r\n\r\n var timer;\r\n $(_searchInputSelector).keyup(function () {\r\n var delay = 500;\r\n clearTimeout(timer);\r\n timer = setTimeout(function () {\r\n vacancyPage.UpdateHistory(isInitial, isPagingReset);\r\n }, delay);\r\n });\r\n\r\n $(_summerJobsInputSelector).change(function () {\r\n vacancyPage.UpdateHistory(isInitial, isPagingReset);\r\n });\r\n\r\n //Use event delegation for dynamically created elements\r\n $(document).on(\"change\", _sortOrderElementSelector, function () {\r\n vacancyPage.UpdateHistory(isInitial, isPagingReset);\r\n });\r\n\r\n //update history when clear filter link is clicked\r\n //a clear filter link contains a query string with the new \"filter state\"\r\n $(document).on(\"click\", clearFilterLinkSelector, function (e) {\r\n e.preventDefault();\r\n var currentUrl = $(this).attr(\"href\");\r\n vacancyPage.UpdateHistoryFromUrlParameters(currentUrl);\r\n });\r\n\r\n // binds to popstate that fires only when browser back/forward buttons are used\r\n History.Adapter.bind(window, \"statechange\", function () {\r\n var state = window.History.getState();\r\n\r\n //Uppdatera inmatningsfälten\r\n vacancyPage.UpdateInputFields(state);\r\n //Uppdatera resultatlistan\r\n vacancyPage.UpdateResultList(state);\r\n });\r\n }\r\n }\r\n return vacancyPage;\r\n});"]}