"use strict"; (function() { function getTotalTopOffset(element) { var result = 0; while (element) { result += element.offsetTop; element = element.offsetParent; } return result; } var $select = $(".keyword-tags").select2({ language: "cs", maximumSelectionSize: 20, minimumInputLength: 3, width: '100%', ajax: { quietMillis: 1000, dataType: "json", url: "/edudocs/subject-version.json?lang=cs", cache: true, transport: function (params, success, failure) { var request = new XMLHttpRequest(); request.open("GET", params.url + "&term=" + params.data.term); request.onload = function (event) { var target = event.target; if (target.status == 200) success(target.response); else failure(); }; request.onerror = failure; request.send(); return request; }, processResults: function (response, params) { var result = { results: [] }; try { var jsonData = JSON.parse(response); var keywords = jsonData.subjectVersions; var keywordsLen = keywords.length; console.log("Nalezeno " + keywordsLen + " předmětů"); for (var i = 0; i < keywordsLen; i++) { var term = jsonData.term.toLowerCase(); //console.log("TERM=" + term); var isCsTitle = false; var isEnTitle = false; var isCode = false; if (keywords[i].titleCs.toLowerCase().indexOf(term) != -1) { isCsTitle = true; } if (keywords[i].titleEn.toLowerCase().indexOf(term) != -1) { isEnTitle = true; } if (keywords[i].versionCode.toLowerCase().indexOf(term) != -1) { isCode = true; } //console.log("isCsTitle=" + isCsTitle + ", isEnTitle=" + isEnTitle + ", isCode=" + isCode); if(isEnTitle && !isCsTitle) { result.results.push({id: keywords[i].subjectVersionId, text: keywords[i].titleEn + " (" + keywords[i].versionCode + ")", code: keywords[i].versionCode }); } else { result.results.push({id: keywords[i].subjectVersionId, text: keywords[i].titleCs + " (" + keywords[i].versionCode + ")", code: keywords[i].versionCode}); } } } catch (e) { console.error(e.message); } return result; } } }); window.$select = $select; $(".keyword-tags").on("select2:select", function(e) { var data = e.params.data; window.location.href='/e-vyuka/cs/subject/' + data.code; }); if ("".length > 0) $select.val([]).trigger("change"); // ------- filter state handling ------- var filterSize = {}; filterSize.BASIC = 0; filterSize.FULL = 1; var currentFilterSize = filterSize.BASIC; function loadFilterState() { var filterState = {}; try { filterState = JSON.parse(sessionStorage.getItem("vsb-pbs-filter-state")); } catch (e) { console.error(e.message); } if (filterState !== null) { // load academic year selectbox values var academicYearSelect = document.querySelector('#pbsfilter .academicYearSelect'); if ((academicYearSelect !== null) && (filterState.academicYear !== undefined)) { setTimeout(function () { var value = filterState.academicYear; var displayedOption = academicYearSelect.parentElement.querySelector(".select-selected"); var academicYearOptions = academicYearSelect.getElementsByTagName("option"); academicYearOptions = Array.prototype.slice.call(academicYearOptions, 0); // Array.from for Internet Explorer academicYearOptions.forEach(function (option) { if (option.value === value) { option.setAttribute("selected", "true"); displayedOption.innerHTML = option.innerHTML; } else { option.removeAttribute("selected"); } }); }, 1000); } // load form checkboxes var checkboxes = document.querySelectorAll("#pbsfilter input[name=faculty], #pbsfilter input[name=studyType], #pbsfilter input[name=studyForm], #pbsfilter input[name=language], #pbsfilter input[name=tutorialCentre]"); checkboxes = Array.prototype.slice.call(checkboxes, 0); // Array.from for Internet Explorer if (filterState.checkboxes !== undefined) { filterState.checkboxes.forEach(function (checkboxState) { checkboxes.forEach(function (checkbox) { if ((checkbox.name === checkboxState.name) && (checkbox.value === checkboxState.value)) checkbox.checked = checkboxState.checked; }); }); } // load keywords field var keywordsInput = document.querySelector("#pbsfilter .keyword-tags"); if ((keywordsInput !== null) && (filterState.keywords !== undefined) && (filterState.keywords !== null)) { filterState.keywords.forEach(function (keyword) { $select.append($("").val(keyword).text(keyword)); }); $select.val(filterState.keywords).trigger("change"); } // load filter size if (filterState.size !== undefined) { currentFilterSize = filterState.size; var el = document.querySelector("#pbsfilter .toggle-type-button"); if (el !== null) { if (currentFilterSize === filterSize.BASIC) { showBasicFilter(el, "noeffects"); } else { showFullFilter(el, "noeffects"); } } } } } function saveFilterState() { var filterState = {}; // save academic year selectbox values var academicYearSelect = document.querySelector('#pbsfilter .academicYearSelect'); if (academicYearSelect !== null) filterState.academicYear = academicYearSelect.value; // save form checkboxes var checkboxes = document.querySelectorAll("#pbsfilter input[name=faculty], #pbsfilter input[name=studyType], #pbsfilter input[name=studyForm], #pbsfilter input[name=language], #pbsfilter input[name=tutorialCentre]"); checkboxes = Array.prototype.slice.call(checkboxes, 0); // Array.from for Internet Explorer filterState.checkboxes = []; checkboxes.forEach(function (checkbox) { filterState.checkboxes.push({name: checkbox.name, value: checkbox.value, checked: checkbox.checked}); }); // save keywords field var keywordsInput = document.querySelector("#pbsfilter .keyword-tags"); if (keywordsInput !== null) { filterState.keywords = $(keywordsInput).val(); } // save filter size filterState.size = currentFilterSize; sessionStorage.setItem("vsb-pbs-filter-state", JSON.stringify(filterState)); } function toggleFilterSize(el, event) { if (currentFilterSize === filterSize.BASIC) showFullFilter(el); else showBasicFilter(el); event.preventDefault(); } window["pbsfilter"] = {}; window["pbsfilter"].toggleFilterSize = toggleFilterSize; function scrollToTop() { var formContainer = document.getElementById("pbsfilter"); var topOffset = getTotalTopOffset(formContainer); var topbarHeight = document.querySelector(".topbar").offsetHeight; var navbarHeight = document.querySelector(".navbar-wrapper").offsetHeight; window.scrollTo(0, topOffset - topbarHeight - navbarHeight - 50); } function showFullFilter(el, effects) { currentFilterSize = filterSize.FULL; el.innerHTML = "  " + el.getAttribute("data-full-state-label"); var sections = document.querySelectorAll("#pbsfilter .filter-section"); sections = Array.prototype.slice.call(sections, 0); // Array.from for Internet Explorer var container = document.querySelector("#pbsfilter .filter-container"); sections.forEach(function (section) { section.style.display = "block"; }); if (effects !== "noeffects") setTimeout(scrollToTop, 100); } function showBasicFilter(el, effects) { currentFilterSize = filterSize.BASIC; el.innerHTML = "  " + el.getAttribute("data-basic-state-label"); var sections = document.querySelectorAll("#pbsfilter .filter-section:not(.basic)"); sections = Array.prototype.slice.call(sections, 0); // Array.from for Internet Explorer var container = document.querySelector("#pbsfilter .filter-container"); sections.forEach(function (section) { section.style.display = "none"; }); if (effects !== "noeffects") setTimeout(scrollToTop, 100); } function clearFilter() { // clear academic year selectpox var academicYearSelect = document.querySelector('#pbsfilter .academicYearSelect'); if (academicYearSelect !== null) { var academicYearOptions = academicYearSelect.getElementsByTagName("option"); academicYearOptions = Array.prototype.slice.call(academicYearOptions, 0); // Array.from for Internet Explorer academicYearOptions.forEach(function (option) { option.removeAttribute("selected"); }); academicYearOptions[3].setAttribute("selected", "true"); var displayedOption = academicYearSelect.parentElement.querySelector(".select-selected"); displayedOption.innerHTML = academicYearOptions[3].innerHTML; } // clear form checkboxes var checkboxes = document.querySelectorAll("#pbsfilter input[name=faculty], #pbsfilter input[name=studyType], #pbsfilter input[name=studyForm], #pbsfilter input[name=language], #pbsfilter input[name=tutorialCentre]"); var checkboxes = Array.prototype.slice.call(checkboxes, 0); // Array.from for Internet Explorer checkboxes.forEach(function (checkbox) { checkbox.checked = false; }); // clear keywords field $('#pbsfilter .keyword-tags').val(null).trigger('change'); } window["pbsfilter"].clearFilter = clearFilter; window.addEventListener("load", function () { if (window.location.href.indexOf("backLink=true") !== -1) loadFilterState(); }); window.addEventListener("unload", function () { saveFilterState(); history.pushState({test: 1}, window.title, window.location.href); }); })();