"use strict"; /// *** Scripts and utilities common to all the app ***/// // ** Constants and variables definition ** // // Element name constants const elementId_searchForm = 'search-form'; const elementId_buttonSearch = 'btn-search'; const elementClassName_languageListButton = 'ecl-language-list__link'; const elementClassName_loadingOverlay = 'overlay-loader'; const elementName_html = 'html'; const elementName_body = 'body'; const elementName_span = 'span'; const elementName_svg = 'svg'; const elementAttributeName_lang = 'lang'; const elementAttributeName_class = 'class'; // Key contants const key_cookieName_language = 'clanguage'; const key_cookieExpires = 'expires'; const key_cookiePath = 'path'; const key_ascOrdering = 'asc'; const key_descOrdering = 'desc'; const key_json = 'json'; const key_jsonc = 'jsonc'; const key_src = 'src'; const key_searchParameter = 'q'; const key_dataEclMessage = 'data-ecl-message'; const key_http = 'http'; const key_https = 'https'; // Value constants const val_cookieExpirationDays = 30; const val_emptyString = ''; const val_dot = '.'; const val_undefined = 'undefined'; const val_object = 'object'; const val_true = 'true'; const val_falsee = 'false'; // HTML snippet constants const htmlSnippet_errorMessage = ''; // Event name constants const eventName_click = 'click'; // Regular expression constants // Global variables var uriFromUrl = val_emptyString; var baseBreadcrumb = val_emptyString; var unparsedLanguageJSON = ""; var originalLanguages = new Dictionary(); originalLanguages.add("en", "English"); originalLanguages.add("es", "Español"); originalLanguages.add("bg", "български"); originalLanguages.add("cs", "čeština"); originalLanguages.add("da", "dansk"); originalLanguages.add("de", "Deutsch"); originalLanguages.add("et", "eesti"); originalLanguages.add("el", "ελληνικά"); originalLanguages.add("fr", "français"); originalLanguages.add("ga", "Gaeilge"); originalLanguages.add("hr", "hrvatski"); originalLanguages.add("it", "italiano"); originalLanguages.add("lv", "latviešu"); originalLanguages.add("lt", "lietuvių"); originalLanguages.add("hu", "magyar"); originalLanguages.add("mt", "Malti"); originalLanguages.add("nl", "Nederlands"); originalLanguages.add("pl", "polski"); originalLanguages.add("pt", "português"); originalLanguages.add("ro", "română"); originalLanguages.add("sk", "slovenčina"); originalLanguages.add("sl", "slovenščina"); originalLanguages.add("fi", "suomi"); originalLanguages.add("sv", "svenska"); // ** Script body ** // function bindCommonEvents() { // Event associated to the "Search" button $('#' + elementId_buttonSearch).on(eventName_click, function (e) { e.preventDefault(); performSearch(); }); // Language selector change event $('.' + elementClassName_languageListButton).on(eventName_click, function (event) { event.preventDefault(); updateLanguage($(this)); }); } /* * Seting a cookie * * @param {String} cookieName The name of the ckookie * @param {String} cookieValue The value of the cookie * @param {Integer} expiringDays The number of days to keep the cookie */ function setCookie(cookieName, cookieValue, expiringDays) { // Checks if the cookies are enabled in the system and if the EU cookie // consent has been accepted // if ($wt.analytics.isTrackable()) { var d = new Date(); d.setTime(d.getTime() + (expiringDays * 24 * 60 * 60 * 1000)); var expires = key_cookieExpires + '=' + d.toUTCString(); document.cookie = cookieName + '=' + cookieValue + ';' + expires + ';' + key_cookiePath + '=/'; // } } /* * Getting the cookie by name * * @param {String} cookieName The name of the ckookie to retrieve * @returns {String} The value of the cookie */ function getCookie(cookieName) { // if ($wt.analytics.isTrackable()) { var name = cookieName + '='; var decodedCookie = decodeURIComponent(document.cookie); var ca = decodedCookie.split(';'); for (var i = 0; i < ca.length; i++) { var c = ca[i]; while (c.charAt(0) === ' ') { c = c.substring(1); } if (c.indexOf(name) === 0) { return c.substring(name.length, c.length); } } return val_emptyString; // } } /* * Function to sort an array (to be used in Array.sort(function(a,b){})) * * @param {String} a The first value to compare * @param {String} b The second value to compare * @param {String} ordering The ordering method: asc|desc * @returns {Integer} Zero or one depending on the comparison */ function sortArray(a, b, ordering) { let aInt = parseInt(a); let bInt = parseInt(b); let outValue = 0; if (ordering === key_descOrdering) { // Descending outValue = (aInt > bInt) ? 0 : 1; } else if (ordering === key_ascOrdering) { // Ascending outValue = (aInt < bInt) ? 0 : 1; } return outValue; } /* * Function to process the URI of the current elemen. It gets eventual language * passed by URL parameter (e.g. registry.en.html) */ function processUri() { // Getting the current URL let currentUrl = window.location.href; if (currentUrl.endsWith("/")) { currentUrl = currentUrl.substring(0, currentUrl.length - 1); } // Getting the index of the lase occurence of "/" // let i = currentUrl.lastIndexOf('/'); // Cutting the current URL to the last portion // let tmpUrl = currentUrl.substring(i); // Splitting this portion with "." to chech if it is specified a language // (e.g. elementName.en.html, but also the localID could contain a ".") //example localID: de.codelist.test //example localID with language and format: de.codelist.test.en.xml // let urlCheck = tmpUrl.split(val_dot); // If the lenght of the urlCheck is 3 // if (urlCheck.length === 3) { // // // Getting the language specified in the URL and updating the // // global variable // let tmpLangIndex = tmpUrl.indexOf(val_dot); // let tmpLang = tmpUrl.substring(tmpLangIndex + 1, tmpLangIndex + 3); // languageFromUrl = tmpLang; // // // Getting the URI to be passed to the data service and updating the // // global variable // i = currentUrl.lastIndexOf(val_dot) - 3; // uriFromUrl = currentUrl.substring(0, i); // } else { // // // Passing the current URL as the URI to be passed to the data service // languageFromUrl = val_emptyString; // uriFromUrl = currentUrl; // } // Passing the current URL as the URI to be passed to the data service // languageFromUrl = val_emptyString; uriFromUrl = currentUrl; // Check if the flag to force http is on if (registryApp.forceHttpURIs) { uriFromUrl = uriFromUrl.replace(key_https + '://', key_http + '://') } } function getUrlParameter(parameterName) { let result = null; let tmp = []; location.search .substr(1) .split("&") .forEach(function (item) { tmp = item.split("="); if (tmp[0] === parameterName) result = decodeURIComponent(tmp[1]); }); return result; } /* * This method performs the search */ function performSearch() { let searchBoxElement = $('#' + elementId_searchForm); window.location.href = registryApp.searchURL + '?' + key_searchParameter + '=' + searchBoxElement.val(); } /* Show or hide the loading overlay */ function showLoadingOverlay(show) { let loadingOverlayElement = $('.' + elementClassName_loadingOverlay); if (show) { loadingOverlayElement.show(); } else { loadingOverlayElement.hide(); } } function Dictionary(){ this.add = add; this.dataStore = []; this.find = find; this.remove = remove; } function add(key, value){ this.dataStore[key] = value; } function remove(key){ delete this.dataStore[key]; } function find(key){ return this.dataStore[key]; } function fillLanguageTable(){ //Check if languages have already been set in the table // if(unparsedLanguageJSON == "" || document.getElementsByClassName("ecl-language-list__item").length == 0){ // Get the JSON that contains the active language list let JSONLINK = registryApp.hostURL + "/rest?lang=active&format=jsonc" unparsedLanguageJSON = $.ajax({ url: JSONLINK, async: false }).responseText; var languageJSON = JSON.parse(unparsedLanguageJSON); var columnChange = false; var finalLanguageColumns = document.getElementsByClassName("ecl-language-list__list"); for(var i=0; i