// Copyright (c) EMBL-EBI 2021
// Do not edit this file directly.
// It is made by concating .js files with by npm into script.js.
// Source files: js/ebi-css-build/script/*.js
/**
* Utility function to get params from the URL.
*
* @param {string} name The string to look for
* @param {string} [url=browserURL] Optionally pass a specific URL to parse
*
* @example
* query string: ?foo=lorem&bar=&baz
* var foo = getParameterByName('foo'); // "lorem"
*/
function ebiGetParameterByName(name, url) {
if (!url) url = window.location.href;
name = name.replace(/[\[\]]/g, "\\$&");
var regex = new RegExp("[?&]" + name + "(=([^]*)|&|#|$)"),
results = regex.exec(url);
if (!results) return null;
if (!results[2]) return '';
return decodeURIComponent(results[2].replace(/\+/g, " "));
}
// utility function to see if element has a class
// hasClass(element, 'class-deska');
function ebiHasClass(element, cls) {
return (' ' + element.className + ' ').indexOf(' ' + cls + ' ') > -1;
}
/**
* Mark pdf/doc/txt links with link-pdf/link-doc/link-txt classes.
*/
function ebiFrameworkExternalLinks() {
// exclude links with images
// include only links to own domains
function isOwnDomain(url) {
return url.indexOf('//') === -1 || url.indexOf('//www.ebi.ac.uk') !== -1 || url.indexOf('//wwwdev.ebi.ac.uk') !== -1 || url.indexOf('//srs.ebi.ac.uk') !== -1 || url.indexOf('//ftp.ebi.ac.uk') !== -1 || url.indexOf('//intranet.ebi.ac.uk') !== -1 || url.indexOf('//pdbe.org') !== -1 || url.indexOf('//' + document.domain) !== -1;
}
function isFileType(url, type) {
return url.indexOf(type, url.length - type.length) !== -1;
}
try {
var alist = document.getElementsByTagName('a');
var fileTypes = ['pdf', 'doc', 'txt'];
var i, icon;
for (i = 0; i < alist.length; i++) {
for (var type in fileTypes) {
if (alist[i].innerHTML.indexOf('') === -1 && alist[i].innerHTML.indexOf('
* Can also be disabled by adding class 'no-global-search' to the body element.
*/
function ebiFrameworkManageGlobalSearch() {
try {
var hasLocalSearch = document.getElementById('local-search') !== null;
var hasLocalEBISearch = document.getElementById('ebi_search') !== null;
if (hasLocalSearch || hasLocalEBISearch) {
document.body.className += ' no-global-search';
} else {
try {
// If the page gets a global search, we specify how the dropdown box should be. #RespectMyAuthoriti
// remove any current dropdown
if ((elem = document.getElementById('search-bar')) !== null) {
document.getElementById('search-bar').remove();
}
var dropdownDiv = document.createElement("div");
dropdownDiv.innerHTML = '';
document.getElementById("masthead-black-bar").insertBefore(dropdownDiv, document.getElementById("masthead-black-bar").firstChild);
var searchBar = document.querySelectorAll(".search-bar")[0];
var searchBarButton = document.querySelectorAll(".search-toggle")[0];
var blackBar = document.querySelectorAll(".masthead-black-bar")[0];
// add "peeking" animation for embl selector
searchBarButton.addEventListener("mouseenter", function (event) {
if (ebiHasClass(document.querySelectorAll(".search-bar")[0], 'active') == false) {
blackBar.className += ' peek';
}
}, false);
searchBarButton.addEventListener("mouseleave", function (event) {
if (ebiHasClass(document.querySelectorAll(".search-bar")[0], 'active') == false) {
blackBar.classList.remove("peek");
}
}, false);
// toggle the .embl-bar
var searchSelector = document.querySelectorAll(".search-toggle")[0].addEventListener("click", function (event) {
event.preventDefault();
ebiToggleClass(searchBar, 'active');
ebiToggleClass(searchBarButton, 'active');
window.scrollTo(0, 0);
}, false);
var searchSelectorClose = document.querySelectorAll(".search-bar .close-button")[0].addEventListener("click", function (event) {
event.preventDefault();
ebiToggleClass(searchBar, 'active');
ebiToggleClass(searchBarButton, 'active');
window.scrollTo(0, 0);
}, false);
} catch (err) {
setTimeout(init, 500);
}
}
} catch (err) {}
}
/**
* Add error alerts for 'no input' on search boxes.
* Todo: this, perhaps, should be moved to a value-add script file
*/
function ebiFrameworkSearchNullError() {
try {
var disabled = document.body.className.indexOf('no-search-error') !== -1;
// Array of search box definition objects, specify inputNode, defaultText (optional, default ''), errorText (optional, default 'Please enter a search term')
var searchBoxes = [{ inputNode: document.getElementById('global-searchbox') }, // in global masthead
{ inputNode: document.getElementById('local-searchbox') }, // in local masthead
{ inputNode: document.body.className.indexOf('front') !== -1 ? document.getElementById('query') : null }, // on home page
{ inputNode: document.getElementById('people-groups') ? document.getElementById('people-groups').getElementsByTagName('input')[0] : null // on people and group page
}];
if (!disabled) {
for (searchBox in searchBoxes) {
var searchInput = searchBoxes[searchBox].inputNode;
var searchForm = searchInput ? searchInput.form : null;
var searchInputDefault = searchBoxes[searchBox].defaultText || '';
var searchError = searchBoxes[searchBox].errorText || 'Please enter a search term';
var searchAction = searchForm ? searchForm.action : '';
var isEbiSearch = searchAction.indexOf('/ebisearch/') !== -1;
if (searchForm && searchInput && isEbiSearch) {
// add reference to other items for onsubmit anonymous function
searchForm.searchInput = searchInput;
searchForm.searchInputDefault = searchInputDefault;
searchForm.searchError = searchError;
searchForm.onsubmit = function () {
searchInput = this.searchInput;
searchInputDefault = this.searchInputDefault;
searchError = this.searchError;
// Ensure input is trimmed
searchInput.value = searchInput.value.trim();
if (searchInput.value === searchInputDefault || searchInput.value === '') {
alert(searchError);
return false;
}
};
}
}
}
} catch (err) {}
}
/**
* Utility method to get if it is IE, and what integer version.
* via: https://stackoverflow.com/a/15983064
* @returns {int} the IE version number
* @example if (isIE () && isIE () < 9) { }
*/
function isIE() {
var myNav = navigator.userAgent.toLowerCase();
return myNav.indexOf('msie') != -1 ? parseInt(myNav.split('msie')[1]) : false;
}
/**
* Utility function to toggle classes. Chiefly to show the #embl-bar.
*/
function ebiToggleClass(element, toggleClass) {
var currentClass = element.className;
var newClass;
if (currentClass.split(" ").indexOf(toggleClass) > -1) {
// has class
newClass = currentClass.replace(new RegExp('\\b' + toggleClass + '\\b', 'g'), "");
} else {
newClass = currentClass + " " + toggleClass;
}
element.className = newClass.trim();
}
/**
* Utility function to add classes (only once).
*/
function ebiActivateClass(element, cssClass) {
element.classList.remove(cssClass);
element.classList.add(cssClass);
}
/**
* Utility function to remove classes.
*/
function ebiRemoveClass(element, cssClass) {
element.classList.remove(cssClass);
}
/**
* Remove global-nav/global-nav-expanded from header/footer if body.no-global-nav is set
*/
function ebiFrameworkHideGlobalNav() {
try {
var hasGlobalMasthead = document.getElementById('masthead-black-bar') !== null;
var disabled = document.body.className.indexOf('no-global-nav') !== -1;
var elem;
if (hasGlobalMasthead && disabled) {
if ((elem = document.getElementById('global-nav')) !== null) {
elem.parentNode.removeChild(elem);
}
if ((elem = document.getElementById('global-nav-expanded')) !== null) {
elem.parentNode.removeChild(elem);
}
}
} catch (err) {}
}
/**
* Assign global nav background images through meta tags
*/
function ebiFrameworkAssignImageByMetaTags() {
var masthead = document.getElementById('masthead');
// check for both ebi: and ebi- formatted meta tags
var mastheadColor = document.querySelector("meta[name='ebi:masthead-color']") || document.querySelector("meta[name='ebi-masthead-color']");
var mastheadImage = document.querySelector("meta[name='ebi:masthead-image']") || document.querySelector("meta[name='ebi-masthead-image']");
if (mastheadColor != null) {
masthead.style.backgroundColor = mastheadColor.getAttribute("content");
masthead.className += ' meta-background-color';
}
if (mastheadImage != null) {
masthead.style.backgroundImage = 'url(' + mastheadImage.getAttribute("content") + ')';
masthead.className += ' meta-background-image';
}
}
/**
* Populate `#masthead-black-bar`
*/
function ebiFrameworkPopulateBlackBar() {
try {
// Clear any existing black bar contents
if ((elem = document.getElementById('masthead-black-bar')) !== null) {
document.getElementById('masthead-black-bar').innerHTML = "";
}
var barContents = document.createElement("div");
barContents.innerHTML = '';
document.getElementById("masthead-black-bar").insertBefore(barContents, document.getElementById("masthead-black-bar").firstChild);
document.body.className += ' ebi-black-bar-loaded';
} catch (err) {};
}
/**
* Reusable function to get part of the black bar
*/
function ebiGetFacet(passedAttribute) {
var tag = "#masthead-black-bar ." + passedAttribute.toLowerCase();
return document.querySelectorAll(tag)[0];
}
/**
* Active tabs in `#masthead-black-bar` according to metadata
*/
function ebiFrameworkActivateBlackBar() {
// Look at the embl:facet-* meta tags to set active states
//
//
//
//
//
try {
// reset black bar contexts when mousing out
var resetBlackBar = function resetBlackBar() {
// console.log('purged');
// $('#masthead-black-bar .hover').removeClass('hover float-left');
// $('#masthead-black-bar .what').removeClass('hide');
// $('#masthead-black-bar .where').addClass('hide');
ebiFrameworkActivateBlackBar();
};
// This meta navigation concept has been deprecated in favour of the VF 2.0
// var metas = document.getElementsByTagName('meta');
// for (var i = 0; i < metas.length; i++) {
// if (metas[i].getAttribute("name") == "embl:active") {
// var targetFacet = ebiGetFacet(metas[i].getAttribute("content").replace(':','.'));
// ebiRemoveClass(targetFacet,'hide');
// ebiActivateClass(targetFacet,'active');
// }
// if (metas[i].getAttribute("name") == "embl:parent-1") {
// var targetFacet = ebiGetFacet(metas[i].getAttribute("content").replace(':','.'));
// ebiRemoveClass(targetFacet,'hide');
// ebiActivateClass(targetFacet,'active');
// }
// if (metas[i].getAttribute("name") == "embl:parent-2") {
// var targetFacet = ebiGetFacet(metas[i].getAttribute("content").replace(':','.'));
// ebiRemoveClass(targetFacet,'hide');
// ebiActivateClass(targetFacet,'active');
// }
// }
// add interactivity to facets, so that hovering on what:research shows what:*
// we do this bit with jquery to prototype; need to rewire as vanilla JS.
// ebiGetFacet('where.active').addEventListener("mouseenter", function( event ) {
// $('#masthead-black-bar .where.hide').addClass('hover float-left').removeClass('hide');
// // $('#masthead-black-bar .where.hide').removeClass('hide').addClass('hover');
// $('#masthead-black-bar .what').addClass('hide');
// }, false);
// ebiGetFacet('what.active').addEventListener("mouseenter", function( event ) {
// $('#masthead-black-bar .what').removeClass('hide float-left');
// $('#masthead-black-bar .what').addClass('hover float-left');
// $('#masthead-black-bar .where').addClass('hide');
// }, false);
// Only reset blackbar after XXXms outside the blackbar
var mouseoutTimer;
blackBar.addEventListener("mouseenter", function () {
window.clearTimeout(mouseoutTimer);
}, false);
blackBar.addEventListener("mouseleave", function () {
mouseoutTimer = window.setTimeout(function () {
resetBlackBar();
}, 500);
});
} catch (err) {};
}
/**
* Insert EMBL dropdown menu into `#masthead-black-bar`
*/
function ebiFrameworkInsertEMBLdropdown() {
try {
// remove any current dropdown
if ((elem = document.getElementById('embl-bar')) !== null) {
document.getElementById('embl-bar').remove();
}
var dropdownDiv = document.createElement("div");
dropdownDiv.innerHTML = '';
dropdownDiv.innerHTML = "";
document.getElementById("masthead-black-bar").insertBefore(dropdownDiv, document.getElementById("masthead-black-bar").firstChild);
var emblBar = document.querySelectorAll(".embl-bar")[0];
var emblBarButton = document.querySelectorAll(".embl-selector")[0];
var blackBar = document.querySelectorAll(".masthead-black-bar")[0];
// add "peeking" animation for embl selector
// emblBarButton.addEventListener("mouseenter", function( event ) {
// if (ebiHasClass(document.querySelectorAll(".embl-bar")[0], 'active') == false) {
// blackBar.className += ' peek';
// }
// }, false);
// emblBarButton.addEventListener("mouseleave", function( event ) {
// if (ebiHasClass(document.querySelectorAll(".embl-bar")[0], 'active') == false) {
// blackBar.classList.remove("peek");
// }
// }, false);
//
// // toggle the .embl-bar
// var emblSelector = document.querySelectorAll(".embl-selector")[0].addEventListener("click", function( event ) {
// ebiToggleClass(emblBar,'active');
// ebiToggleClass(emblBarButton,'active');
// event.preventDefault();
// window.scrollTo(0, 0);
// }, false);
var emblSelectorClose = document.querySelectorAll(".embl-bar .close-button")[0].addEventListener("click", function (event) {
ebiToggleClass(emblBar, 'active');
ebiToggleClass(emblBarButton, 'active');
event.preventDefault();
window.scrollTo(0, 0);
}, false);
} catch (err) {};
}
/**
* Insert EBI Footer into `#global-nav-expanded`
*/
function ebiFrameworkUpdateFoot() {
var html = '
EMBL-EBI, Wellcome Genome Campus, Hinxton, Cambridgeshire, CB10 1SD, UK. +44 (0)1223 49 44 44
Copyright © EMBL ' + d.getFullYear() + ' | EMBL-EBI is part of the European Molecular Biology Laboratory | Terms of use' + // 'Intranet' + '