"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: "en",
maximumSelectionSize: 20,
minimumInputLength: 3,
width: '100%',
ajax: {
quietMillis: 1000,
dataType: "json",
url: "/edudocs/subject-version.json?lang=en",
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/en/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);
});
})();