├── .max-age ├── libraries ├── LiveFilter │ ├── package.json │ ├── images │ │ └── list-item-bg.gif │ ├── styles │ │ ├── text.css │ │ ├── reset.css │ │ └── screen.css │ ├── LICENSE │ └── README.md ├── tablesorter │ ├── css │ │ ├── images │ │ │ ├── ice-asc.gif │ │ │ ├── black-asc.gif │ │ │ ├── green-asc.gif │ │ │ ├── ice-desc.gif │ │ │ ├── white-asc.gif │ │ │ ├── black-desc.gif │ │ │ ├── dropbox-asc.png │ │ │ ├── dropbox-desc.png │ │ │ ├── green-desc.gif │ │ │ ├── green-header.gif │ │ │ ├── ice-unsorted.gif │ │ │ ├── white-desc.gif │ │ │ ├── black-unsorted.gif │ │ │ ├── green-unsorted.gif │ │ │ ├── metro-loading.gif │ │ │ ├── metro-unsorted.png │ │ │ ├── white-unsorted.gif │ │ │ ├── dragtable-handle.png │ │ │ ├── metro-black-asc.png │ │ │ ├── metro-black-desc.png │ │ │ ├── metro-white-asc.png │ │ │ ├── metro-white-desc.png │ │ │ ├── dropbox-asc-hovered.png │ │ │ ├── dropbox-desc-hovered.png │ │ │ ├── bootstrap-black-unsorted.png │ │ │ ├── bootstrap-white-unsorted.png │ │ │ └── dragtable-handle.svg │ │ ├── psd │ │ │ ├── green-asc.psd │ │ │ ├── green-desc.psd │ │ │ ├── metro-style.psd │ │ │ └── green-unsorted.psd │ │ └── dragtable.mod.css │ └── js │ │ ├── parsers │ │ ├── parser-image.js │ │ ├── parser-huge-numbers.js │ │ ├── parser-date.js │ │ ├── parser-date-iso8601.js │ │ ├── parser-date-month.js │ │ ├── parser-feet-inch-fraction.js │ │ ├── parser-duration.js │ │ ├── parser-date-two-digit-year.js │ │ ├── parser-ignore-articles.js │ │ ├── parser-globalize.js │ │ ├── parser-date-extract.js │ │ ├── parser-date-weekday.js │ │ ├── parser-roman.js │ │ ├── parser-file-type.js │ │ ├── parser-named-numbers.js │ │ └── parser-metric.js │ │ ├── widgets │ │ ├── widget-filter-type-insideRange.js │ │ ├── widget-repeatheaders.js │ │ ├── widget-formatter.js │ │ ├── widget-toggle.js │ │ ├── widget-columns.js │ │ ├── widget-saveSort.js │ │ ├── widget-headerTitles.js │ │ └── widget-staticRow.js │ │ └── extras │ │ └── jquery.metadata.js ├── Choices │ ├── README.md │ └── assets │ │ └── styles │ │ └── scss │ │ └── base.scss ├── motion-ui │ ├── LICENSE │ └── dist │ │ ├── motion-ui.min.js │ │ └── motion-ui.js └── foundation-6 │ └── js │ ├── foundation.util.nest.js │ └── foundation.util.motion.js ├── images ├── map.png ├── ajax-loader.gif ├── documentation │ ├── footer.png │ ├── header-bar.png │ ├── local-nav-bar.png │ └── secondary-menu.png ├── logos │ ├── EMBL-EBI │ │ ├── logo.png │ │ ├── favicons │ │ │ ├── favicon.ico │ │ │ ├── apple-icon.png │ │ │ ├── favicon-16x16.png │ │ │ ├── favicon-32x32.png │ │ │ ├── favicon-96x96.png │ │ │ ├── mstile-144x144.png │ │ │ ├── mstile-150x150.png │ │ │ ├── mstile-310x150.png │ │ │ ├── mstile-310x310.png │ │ │ ├── mstile-70x70.png │ │ │ ├── apple-icon-57x57.png │ │ │ ├── apple-icon-60x60.png │ │ │ ├── apple-icon-72x72.png │ │ │ ├── apple-icon-76x76.png │ │ │ ├── apple-touch-icon.png │ │ │ ├── favicon-194x194.png │ │ │ ├── apple-icon-114x114.png │ │ │ ├── apple-icon-120x120.png │ │ │ ├── apple-icon-144x144.png │ │ │ ├── apple-icon-152x152.png │ │ │ ├── apple-icon-180x180.png │ │ │ ├── android-chrome-36x36.png │ │ │ ├── android-chrome-48x48.png │ │ │ ├── android-chrome-72x72.png │ │ │ ├── android-chrome-96x96.png │ │ │ ├── android-chrome-144x144.png │ │ │ ├── android-chrome-192x192.png │ │ │ ├── apple-icon-precomposed.png │ │ │ ├── apple-touch-icon-114x114.png │ │ │ ├── apple-touch-icon-120x120.png │ │ │ ├── apple-touch-icon-144x144.png │ │ │ ├── apple-touch-icon-152x152.png │ │ │ ├── apple-touch-icon-180x180.png │ │ │ ├── apple-touch-icon-57x57.png │ │ │ ├── apple-touch-icon-60x60.png │ │ │ ├── apple-touch-icon-72x72.png │ │ │ ├── apple-touch-icon-76x76.png │ │ │ ├── apple-touch-icon-precomposed.png │ │ │ ├── browserconfig.xml │ │ │ └── manifest.json │ │ ├── EMBL_EBI_Logo_black.png │ │ ├── EMBL_EBI_Logo_white.png │ │ ├── EMBL-EBI_Logo_black_big.png │ │ ├── EMBL_EBI_Logo_black.svg │ │ └── EMBL_EBI_Logo_white.svg │ ├── ELIXIR │ │ ├── elixir-cdr.gif │ │ └── elixir-cdr_simple.gif │ └── EMBL │ │ ├── hexagon-mono-black.svg │ │ └── EMBL-mono-black.svg └── backgrounds │ ├── industry-blue-4.jpg │ ├── research-green-2.jpg │ ├── research-green-4.jpg │ ├── research-green.jpg │ ├── services-green-2.jpg │ ├── services-green-3.jpg │ ├── services-green-4.jpg │ ├── training-yellow.jpg │ ├── training-yellow-2.jpg │ ├── training-yellow-3.jpg │ ├── training-yellow-4.jpg │ ├── training-yellow-5.jpg │ ├── embl-ebi-background-4.jpg │ └── embl-ebi-background.jpg ├── css ├── ebi-css-build │ ├── documentation │ │ └── button.html │ ├── _ebi_visibility.scss │ ├── _ebi_code_styles.scss │ ├── _ebi_print_styles.scss │ ├── _ebi_dev_note.scss │ ├── _ebi_related_pattern.scss │ ├── _ebi_clearable_inputs.scss │ ├── _badge.scss │ ├── _ebi_footer_styles.scss │ ├── _ebi_foundation_overides.scss │ ├── _ebi_tag.scss │ ├── ebi-global.scss │ ├── _ebi_table_styles.scss │ ├── foundation │ │ ├── _settings-full-fat.scss │ │ ├── _settings-extras.scss │ │ └── _settings-lite.scss │ ├── _ebi_theme_settings.scss │ ├── _ebi_color_styles.scss │ └── _embl_selector.scss ├── styleguide │ ├── kss-assets │ │ ├── sample.png │ │ ├── noise-low.png │ │ ├── sample-inline.png │ │ ├── github-fork--black.png │ │ ├── WARNING.txt │ │ ├── sample.svg │ │ ├── sample-inline.svg │ │ ├── kss-guides.js │ │ ├── kss-markup.js │ │ ├── kss.js │ │ ├── kss-fullscreen.js │ │ └── scrollspy.js │ ├── index.html │ └── item-components.html ├── theme-readme-custom.txt ├── theme-ebi-research.css ├── theme-ebi-services-about.css ├── theme-embl-petrol.css ├── theme-pdbe-green.css ├── theme-template.css ├── theme-ebi-industry.css ├── theme-ebi-training.css ├── theme-light.css └── ebi-code.css ├── .travis.yml ├── .babelrc ├── .npmignore ├── .gitignore ├── bin └── deploy-aws ├── .gitlab-ci.yml ├── _config.yml ├── js ├── ebi-global-includes │ └── script │ │ ├── 6_ebiFrameworkInvokeScripts.js │ │ ├── 1_about.js │ │ └── 2_ebiFrameworkExternalLinks.js └── elixirBanner.min.js └── README.md /.max-age: -------------------------------------------------------------------------------- 1 | 86400 2 | -------------------------------------------------------------------------------- /libraries/LiveFilter/package.json: -------------------------------------------------------------------------------- 1 | { 2 | 3 | } -------------------------------------------------------------------------------- /images/map.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/images/map.png -------------------------------------------------------------------------------- /css/ebi-css-build/documentation/button.html: -------------------------------------------------------------------------------- 1 | Button 2 | -------------------------------------------------------------------------------- /images/ajax-loader.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/images/ajax-loader.gif -------------------------------------------------------------------------------- /images/documentation/footer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/images/documentation/footer.png -------------------------------------------------------------------------------- /images/logos/EMBL-EBI/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/images/logos/EMBL-EBI/logo.png -------------------------------------------------------------------------------- /images/logos/ELIXIR/elixir-cdr.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/images/logos/ELIXIR/elixir-cdr.gif -------------------------------------------------------------------------------- /css/styleguide/kss-assets/sample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/css/styleguide/kss-assets/sample.png -------------------------------------------------------------------------------- /images/documentation/header-bar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/images/documentation/header-bar.png -------------------------------------------------------------------------------- /css/styleguide/kss-assets/noise-low.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/css/styleguide/kss-assets/noise-low.png -------------------------------------------------------------------------------- /images/backgrounds/industry-blue-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/images/backgrounds/industry-blue-4.jpg -------------------------------------------------------------------------------- /images/backgrounds/research-green-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/images/backgrounds/research-green-2.jpg -------------------------------------------------------------------------------- /images/backgrounds/research-green-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/images/backgrounds/research-green-4.jpg -------------------------------------------------------------------------------- /images/backgrounds/research-green.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/images/backgrounds/research-green.jpg -------------------------------------------------------------------------------- /images/backgrounds/services-green-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/images/backgrounds/services-green-2.jpg -------------------------------------------------------------------------------- /images/backgrounds/services-green-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/images/backgrounds/services-green-3.jpg -------------------------------------------------------------------------------- /images/backgrounds/services-green-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/images/backgrounds/services-green-4.jpg -------------------------------------------------------------------------------- /images/backgrounds/training-yellow.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/images/backgrounds/training-yellow.jpg -------------------------------------------------------------------------------- /images/documentation/local-nav-bar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/images/documentation/local-nav-bar.png -------------------------------------------------------------------------------- /images/documentation/secondary-menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/images/documentation/secondary-menu.png -------------------------------------------------------------------------------- /images/backgrounds/training-yellow-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/images/backgrounds/training-yellow-2.jpg -------------------------------------------------------------------------------- /images/backgrounds/training-yellow-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/images/backgrounds/training-yellow-3.jpg -------------------------------------------------------------------------------- /images/backgrounds/training-yellow-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/images/backgrounds/training-yellow-4.jpg -------------------------------------------------------------------------------- /images/backgrounds/training-yellow-5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/images/backgrounds/training-yellow-5.jpg -------------------------------------------------------------------------------- /images/logos/ELIXIR/elixir-cdr_simple.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/images/logos/ELIXIR/elixir-cdr_simple.gif -------------------------------------------------------------------------------- /css/styleguide/kss-assets/sample-inline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/css/styleguide/kss-assets/sample-inline.png -------------------------------------------------------------------------------- /images/backgrounds/embl-ebi-background-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/images/backgrounds/embl-ebi-background-4.jpg -------------------------------------------------------------------------------- /images/backgrounds/embl-ebi-background.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/images/backgrounds/embl-ebi-background.jpg -------------------------------------------------------------------------------- /images/logos/EMBL-EBI/favicons/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/images/logos/EMBL-EBI/favicons/favicon.ico -------------------------------------------------------------------------------- /libraries/LiveFilter/images/list-item-bg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/libraries/LiveFilter/images/list-item-bg.gif -------------------------------------------------------------------------------- /libraries/tablesorter/css/images/ice-asc.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/libraries/tablesorter/css/images/ice-asc.gif -------------------------------------------------------------------------------- /libraries/tablesorter/css/psd/green-asc.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/libraries/tablesorter/css/psd/green-asc.psd -------------------------------------------------------------------------------- /libraries/tablesorter/css/psd/green-desc.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/libraries/tablesorter/css/psd/green-desc.psd -------------------------------------------------------------------------------- /images/logos/EMBL-EBI/EMBL_EBI_Logo_black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/images/logos/EMBL-EBI/EMBL_EBI_Logo_black.png -------------------------------------------------------------------------------- /images/logos/EMBL-EBI/EMBL_EBI_Logo_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/images/logos/EMBL-EBI/EMBL_EBI_Logo_white.png -------------------------------------------------------------------------------- /images/logos/EMBL-EBI/favicons/apple-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/images/logos/EMBL-EBI/favicons/apple-icon.png -------------------------------------------------------------------------------- /libraries/Choices/README.md: -------------------------------------------------------------------------------- 1 | # This is a forked version of Choices.js 2 | Minor optimisations and integrations done for the EBI Visual Framework. 3 | -------------------------------------------------------------------------------- /libraries/tablesorter/css/images/black-asc.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/libraries/tablesorter/css/images/black-asc.gif -------------------------------------------------------------------------------- /libraries/tablesorter/css/images/green-asc.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/libraries/tablesorter/css/images/green-asc.gif -------------------------------------------------------------------------------- /libraries/tablesorter/css/images/ice-desc.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/libraries/tablesorter/css/images/ice-desc.gif -------------------------------------------------------------------------------- /libraries/tablesorter/css/images/white-asc.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/libraries/tablesorter/css/images/white-asc.gif -------------------------------------------------------------------------------- /libraries/tablesorter/css/psd/metro-style.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/libraries/tablesorter/css/psd/metro-style.psd -------------------------------------------------------------------------------- /css/styleguide/kss-assets/github-fork--black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/css/styleguide/kss-assets/github-fork--black.png -------------------------------------------------------------------------------- /images/logos/EMBL-EBI/EMBL-EBI_Logo_black_big.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/images/logos/EMBL-EBI/EMBL-EBI_Logo_black_big.png -------------------------------------------------------------------------------- /images/logos/EMBL-EBI/favicons/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/images/logos/EMBL-EBI/favicons/favicon-16x16.png -------------------------------------------------------------------------------- /images/logos/EMBL-EBI/favicons/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/images/logos/EMBL-EBI/favicons/favicon-32x32.png -------------------------------------------------------------------------------- /images/logos/EMBL-EBI/favicons/favicon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/images/logos/EMBL-EBI/favicons/favicon-96x96.png -------------------------------------------------------------------------------- /images/logos/EMBL-EBI/favicons/mstile-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/images/logos/EMBL-EBI/favicons/mstile-144x144.png -------------------------------------------------------------------------------- /images/logos/EMBL-EBI/favicons/mstile-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/images/logos/EMBL-EBI/favicons/mstile-150x150.png -------------------------------------------------------------------------------- /images/logos/EMBL-EBI/favicons/mstile-310x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/images/logos/EMBL-EBI/favicons/mstile-310x150.png -------------------------------------------------------------------------------- /images/logos/EMBL-EBI/favicons/mstile-310x310.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/images/logos/EMBL-EBI/favicons/mstile-310x310.png -------------------------------------------------------------------------------- /images/logos/EMBL-EBI/favicons/mstile-70x70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/images/logos/EMBL-EBI/favicons/mstile-70x70.png -------------------------------------------------------------------------------- /libraries/tablesorter/css/images/black-desc.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/libraries/tablesorter/css/images/black-desc.gif -------------------------------------------------------------------------------- /libraries/tablesorter/css/images/dropbox-asc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/libraries/tablesorter/css/images/dropbox-asc.png -------------------------------------------------------------------------------- /libraries/tablesorter/css/images/dropbox-desc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/libraries/tablesorter/css/images/dropbox-desc.png -------------------------------------------------------------------------------- /libraries/tablesorter/css/images/green-desc.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/libraries/tablesorter/css/images/green-desc.gif -------------------------------------------------------------------------------- /libraries/tablesorter/css/images/green-header.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/libraries/tablesorter/css/images/green-header.gif -------------------------------------------------------------------------------- /libraries/tablesorter/css/images/ice-unsorted.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/libraries/tablesorter/css/images/ice-unsorted.gif -------------------------------------------------------------------------------- /libraries/tablesorter/css/images/white-desc.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/libraries/tablesorter/css/images/white-desc.gif -------------------------------------------------------------------------------- /libraries/tablesorter/css/psd/green-unsorted.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/libraries/tablesorter/css/psd/green-unsorted.psd -------------------------------------------------------------------------------- /images/logos/EMBL-EBI/favicons/apple-icon-57x57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/images/logos/EMBL-EBI/favicons/apple-icon-57x57.png -------------------------------------------------------------------------------- /images/logos/EMBL-EBI/favicons/apple-icon-60x60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/images/logos/EMBL-EBI/favicons/apple-icon-60x60.png -------------------------------------------------------------------------------- /images/logos/EMBL-EBI/favicons/apple-icon-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/images/logos/EMBL-EBI/favicons/apple-icon-72x72.png -------------------------------------------------------------------------------- /images/logos/EMBL-EBI/favicons/apple-icon-76x76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/images/logos/EMBL-EBI/favicons/apple-icon-76x76.png -------------------------------------------------------------------------------- /images/logos/EMBL-EBI/favicons/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/images/logos/EMBL-EBI/favicons/apple-touch-icon.png -------------------------------------------------------------------------------- /images/logos/EMBL-EBI/favicons/favicon-194x194.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/images/logos/EMBL-EBI/favicons/favicon-194x194.png -------------------------------------------------------------------------------- /libraries/tablesorter/css/images/black-unsorted.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/libraries/tablesorter/css/images/black-unsorted.gif -------------------------------------------------------------------------------- /libraries/tablesorter/css/images/green-unsorted.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/libraries/tablesorter/css/images/green-unsorted.gif -------------------------------------------------------------------------------- /libraries/tablesorter/css/images/metro-loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/libraries/tablesorter/css/images/metro-loading.gif -------------------------------------------------------------------------------- /libraries/tablesorter/css/images/metro-unsorted.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/libraries/tablesorter/css/images/metro-unsorted.png -------------------------------------------------------------------------------- /libraries/tablesorter/css/images/white-unsorted.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/libraries/tablesorter/css/images/white-unsorted.gif -------------------------------------------------------------------------------- /images/logos/EMBL-EBI/favicons/apple-icon-114x114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/images/logos/EMBL-EBI/favicons/apple-icon-114x114.png -------------------------------------------------------------------------------- /images/logos/EMBL-EBI/favicons/apple-icon-120x120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/images/logos/EMBL-EBI/favicons/apple-icon-120x120.png -------------------------------------------------------------------------------- /images/logos/EMBL-EBI/favicons/apple-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/images/logos/EMBL-EBI/favicons/apple-icon-144x144.png -------------------------------------------------------------------------------- /images/logos/EMBL-EBI/favicons/apple-icon-152x152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/images/logos/EMBL-EBI/favicons/apple-icon-152x152.png -------------------------------------------------------------------------------- /images/logos/EMBL-EBI/favicons/apple-icon-180x180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/images/logos/EMBL-EBI/favicons/apple-icon-180x180.png -------------------------------------------------------------------------------- /libraries/tablesorter/css/images/dragtable-handle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/libraries/tablesorter/css/images/dragtable-handle.png -------------------------------------------------------------------------------- /libraries/tablesorter/css/images/metro-black-asc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/libraries/tablesorter/css/images/metro-black-asc.png -------------------------------------------------------------------------------- /libraries/tablesorter/css/images/metro-black-desc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/libraries/tablesorter/css/images/metro-black-desc.png -------------------------------------------------------------------------------- /libraries/tablesorter/css/images/metro-white-asc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/libraries/tablesorter/css/images/metro-white-asc.png -------------------------------------------------------------------------------- /libraries/tablesorter/css/images/metro-white-desc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/libraries/tablesorter/css/images/metro-white-desc.png -------------------------------------------------------------------------------- /images/logos/EMBL-EBI/favicons/android-chrome-36x36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/images/logos/EMBL-EBI/favicons/android-chrome-36x36.png -------------------------------------------------------------------------------- /images/logos/EMBL-EBI/favicons/android-chrome-48x48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/images/logos/EMBL-EBI/favicons/android-chrome-48x48.png -------------------------------------------------------------------------------- /images/logos/EMBL-EBI/favicons/android-chrome-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/images/logos/EMBL-EBI/favicons/android-chrome-72x72.png -------------------------------------------------------------------------------- /images/logos/EMBL-EBI/favicons/android-chrome-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/images/logos/EMBL-EBI/favicons/android-chrome-96x96.png -------------------------------------------------------------------------------- /libraries/tablesorter/css/images/dropbox-asc-hovered.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/libraries/tablesorter/css/images/dropbox-asc-hovered.png -------------------------------------------------------------------------------- /css/styleguide/kss-assets/WARNING.txt: -------------------------------------------------------------------------------- 1 | WARNING: This folder is deleted and re-recreated each time the style guide is 2 | built. Do NOT put your own files in this folder. 3 | -------------------------------------------------------------------------------- /images/logos/EMBL-EBI/favicons/android-chrome-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/images/logos/EMBL-EBI/favicons/android-chrome-144x144.png -------------------------------------------------------------------------------- /images/logos/EMBL-EBI/favicons/android-chrome-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/images/logos/EMBL-EBI/favicons/android-chrome-192x192.png -------------------------------------------------------------------------------- /images/logos/EMBL-EBI/favicons/apple-icon-precomposed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/images/logos/EMBL-EBI/favicons/apple-icon-precomposed.png -------------------------------------------------------------------------------- /images/logos/EMBL-EBI/favicons/apple-touch-icon-114x114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/images/logos/EMBL-EBI/favicons/apple-touch-icon-114x114.png -------------------------------------------------------------------------------- /images/logos/EMBL-EBI/favicons/apple-touch-icon-120x120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/images/logos/EMBL-EBI/favicons/apple-touch-icon-120x120.png -------------------------------------------------------------------------------- /images/logos/EMBL-EBI/favicons/apple-touch-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/images/logos/EMBL-EBI/favicons/apple-touch-icon-144x144.png -------------------------------------------------------------------------------- /images/logos/EMBL-EBI/favicons/apple-touch-icon-152x152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/images/logos/EMBL-EBI/favicons/apple-touch-icon-152x152.png -------------------------------------------------------------------------------- /images/logos/EMBL-EBI/favicons/apple-touch-icon-180x180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/images/logos/EMBL-EBI/favicons/apple-touch-icon-180x180.png -------------------------------------------------------------------------------- /images/logos/EMBL-EBI/favicons/apple-touch-icon-57x57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/images/logos/EMBL-EBI/favicons/apple-touch-icon-57x57.png -------------------------------------------------------------------------------- /images/logos/EMBL-EBI/favicons/apple-touch-icon-60x60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/images/logos/EMBL-EBI/favicons/apple-touch-icon-60x60.png -------------------------------------------------------------------------------- /images/logos/EMBL-EBI/favicons/apple-touch-icon-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/images/logos/EMBL-EBI/favicons/apple-touch-icon-72x72.png -------------------------------------------------------------------------------- /images/logos/EMBL-EBI/favicons/apple-touch-icon-76x76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/images/logos/EMBL-EBI/favicons/apple-touch-icon-76x76.png -------------------------------------------------------------------------------- /libraries/tablesorter/css/images/dropbox-desc-hovered.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/libraries/tablesorter/css/images/dropbox-desc-hovered.png -------------------------------------------------------------------------------- /libraries/tablesorter/css/images/bootstrap-black-unsorted.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/libraries/tablesorter/css/images/bootstrap-black-unsorted.png -------------------------------------------------------------------------------- /libraries/tablesorter/css/images/bootstrap-white-unsorted.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/libraries/tablesorter/css/images/bootstrap-white-unsorted.png -------------------------------------------------------------------------------- /images/logos/EMBL-EBI/favicons/apple-touch-icon-precomposed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ebiwd/EBI-Framework/HEAD/images/logos/EMBL-EBI/favicons/apple-touch-icon-precomposed.png -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | 3 | node_js: 4 | - "12" 5 | 6 | # before_install: 7 | # - npm install -g npx 8 | 9 | install: 10 | - npm install 11 | 12 | script: 13 | - npm test 14 | -------------------------------------------------------------------------------- /css/theme-readme-custom.txt: -------------------------------------------------------------------------------- 1 | If you wish to build your colour palette: 2 | - Basic: 3 | Clone css/theme-template.css 4 | - Advanced; utilise sass by: 5 | 1. modifying ebi-css-build/_ebi_theme_settings.scss 6 | 2. running `npm run scss` 7 | -------------------------------------------------------------------------------- /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["env", { 4 | "targets": { 5 | "browsers": ["last 2 versions", "safari >= 7"] 6 | } 7 | }] 8 | ], 9 | "plugins": [ 10 | ["transform-remove-strict-mode"] 11 | ] 12 | } 13 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | .*.swp 2 | ._* 3 | .DS_Store 4 | .git 5 | .hg 6 | .npmrc 7 | .lock-wscript 8 | .svn 9 | .wafpickle-* 10 | config.gypi 11 | CVS 12 | npm-debug.log 13 | 14 | # Tablesorter's package.json disrupts storing some files in npm 15 | libraries/tablesorter/package.json 16 | libraries/tablesorter/docs 17 | 18 | libraries/motion-ui/motion-ui-* 19 | -------------------------------------------------------------------------------- /css/ebi-css-build/_ebi_visibility.scss: -------------------------------------------------------------------------------- 1 | // Custom tag class for Foundation-based EBI framework 2 | 3 | //// 4 | /// @group visibility 5 | //// 6 | 7 | /// Some extra visibility classes for edge cases 8 | /// as described in: https://github.com/ebiwd/EBI-Framework/issues/30 9 | @mixin ebi-visibility { 10 | .is-visible-block { display:block !important; } 11 | .is-visible-inline { display:inline-block !important; } 12 | } 13 | -------------------------------------------------------------------------------- /images/logos/EMBL-EBI/favicons/browserconfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | #2b5797 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /css/theme-ebi-research.css: -------------------------------------------------------------------------------- 1 | /* 2 | Colour palette: EMBL-EBI Research 3 | */ 4 | 5 | h2 { color: rgb(0, 159, 77) } 6 | 7 | .menu .active > a, 8 | .tag, 9 | .tabs-title > a:hover, 10 | .button, 11 | .button.primary { 12 | background-color: rgb(0, 159, 77); 13 | } 14 | a.tag:hover { color: #fff; } 15 | 16 | .tabs-title > a:hover, 17 | .button.primary:hover, 18 | .button.primary:focus { background: rgba(0, 159, 77, .9); } 19 | 20 | .masthead { background-color: rgb(0, 159, 77); } 21 | 22 | /* end */ 23 | -------------------------------------------------------------------------------- /libraries/tablesorter/css/images/dragtable-handle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /css/theme-ebi-services-about.css: -------------------------------------------------------------------------------- 1 | /* 2 | Colour palette: EMBL-EBI Services and About 3 | */ 4 | 5 | h2 { color: rgb(56,145,152); } 6 | 7 | .menu .active > a, 8 | .tag, 9 | .tabs-title > a:hover, 10 | .button, 11 | .button.primary { 12 | background-color: rgb(56,145,152); 13 | } 14 | a.tag:hover { color: #fff; } 15 | 16 | .tabs-title > a:hover, 17 | .button.primary:hover, 18 | .button.primary:focus { background: rgba(56,145,152,.9); } 19 | 20 | .masthead { background-color: rgb(56,145,152); } 21 | 22 | /* end */ 23 | -------------------------------------------------------------------------------- /css/styleguide/kss-assets/sample.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /css/styleguide/kss-assets/sample-inline.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /css/theme-embl-petrol.css: -------------------------------------------------------------------------------- 1 | /* 2 | Colour palette: EMBL-EBI Petrol 3 | */ 4 | 5 | h2 { color: rgb(0,124,130); } 6 | 7 | .menu .active > a, 8 | .tag, 9 | .tabs-title > a:hover, 10 | .button, 11 | .button.primary { 12 | background-color: rgb(0,124,130); 13 | } 14 | a.tag:hover { color: #fff; } 15 | 16 | .tabs-title > a:hover, 17 | .button.primary:hover, 18 | .button.primary:focus { background: rgba(0,124,130,.9); } 19 | .tabs-title > a:focus, 20 | .tabs-title > a[aria-selected='true'] { 21 | color: #fff; 22 | background: #666; } 23 | 24 | .masthead { background-color: rgb(0,124,130); } 25 | 26 | /* end */ 27 | -------------------------------------------------------------------------------- /css/theme-pdbe-green.css: -------------------------------------------------------------------------------- 1 | /* 2 | Colour palette: EMBL-EBI Green 3 | */ 4 | 5 | h2 { color: rgb(116,179,96); } 6 | 7 | .menu .active > a, 8 | .tag, 9 | .tabs-title > a:hover, 10 | .button, 11 | .button.primary { 12 | background-color: rgb(116,179,96); 13 | } 14 | a.tag:hover { color: #fff; } 15 | 16 | .tabs-title > a:hover, 17 | .button.primary:hover, 18 | .button.primary:focus { background: rgba(116,179,96,.9); } 19 | .tabs-title > a:focus, 20 | .tabs-title > a[aria-selected='true'] { 21 | color: #fff; 22 | background: #666; } 23 | 24 | .masthead { background-color: rgb(116,179,96); } 25 | 26 | /* end */ 27 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .DS_store 3 | npm-debug.log 4 | 5 | # Ignore all of foundation contrib but a few custom things 6 | libraries/foundation-6/_vendor 7 | libraries/foundation-6/dist 8 | libraries/foundation-6/foundation-sites* 9 | 10 | # Ignore all of foundation moutionui contrib but a few custom things 11 | libraries/motion-ui 12 | !libraries/motion-ui/dist 13 | !libraries/motion-ui/LICENSE 14 | 15 | # Ignore all of tablesorter contrib but a few custom things 16 | libraries/tablesorter 17 | !libraries/tablesorter/js 18 | !libraries/tablesorter/css 19 | 20 | # Jekyll stuff 21 | _site/ 22 | .sass-cache/ 23 | .jekyll-metadata 24 | -------------------------------------------------------------------------------- /libraries/tablesorter/js/parsers/parser-image.js: -------------------------------------------------------------------------------- 1 | /*! Parser: image - new 7/17/2014 (v2.17.5) */ 2 | /* alt attribute parser for jQuery 1.7+ & tablesorter 2.7.11+ */ 3 | /* NOTE! Moved to jquery.tablesorter.js (core) in v2.18.0 */ 4 | /*jshint jquery:true, unused:false */ 5 | ;(function($) { 6 | 'use strict'; 7 | 8 | $.tablesorter.addParser({ 9 | id: 'image', 10 | is: function() { 11 | return false; 12 | }, 13 | format: function(s, table, cell) { 14 | return $(cell).find('img').attr(table.config.imgAttr || 'alt') || s; 15 | }, 16 | parsed : true, // filter widget flag 17 | type: 'text' 18 | }); 19 | 20 | })(jQuery); 21 | -------------------------------------------------------------------------------- /css/ebi-css-build/_ebi_code_styles.scss: -------------------------------------------------------------------------------- 1 | @mixin ebi-code-styles { 2 | .code { 3 | font-family: $code-font-family; 4 | font-weight: normal; 5 | color: #0a0a0a; 6 | background-color: #e6e6e6; 7 | border: 1px solid #cacaca; 8 | padding: 0.125rem 0.3125rem 0.0625rem; 9 | overflow-x: auto; 10 | font-size: .95rem; 11 | } 12 | pre { 13 | overflow-x: auto; 14 | } 15 | pre > .code, 16 | pre > code { 17 | padding: 0; 18 | border: 0; 19 | background: none; 20 | font-size: .8rem; 21 | } 22 | .kbd { 23 | margin: 0; 24 | color: #0a0a0a; 25 | font-family: $code-font-family; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /css/theme-template.css: -------------------------------------------------------------------------------- 1 | /* 2 | Colour palette: EMBL-EBI [project name] [main colour] 3 | Save as theme-[projectname].css 4 | */ 5 | 6 | h2 { color: rgb(0,124,130); } 7 | 8 | .menu .active > a, 9 | .tag, 10 | .tabs-title > a:hover, 11 | .button, 12 | .button.primary { 13 | background-color: rgb(0,124,130); 14 | } 15 | a.tag:hover { color: #fff; } 16 | 17 | .tabs-title > a:hover, 18 | .button.primary:hover, 19 | .button.primary:focus { background: rgba(0,124,130,.9); } 20 | .tabs-title > a:focus, 21 | .tabs-title > a[aria-selected='true'] { 22 | color: #fff; 23 | background: #666; } 24 | 25 | .masthead { background-color: rgb(0,124,130); } 26 | 27 | /* end */ 28 | -------------------------------------------------------------------------------- /libraries/tablesorter/js/parsers/parser-huge-numbers.js: -------------------------------------------------------------------------------- 1 | /*! Parser: hugeNumbers - updated 3/1/2016 (v2.25.5) *//* 2 | * See https://github.com/Mottie/tablesorter/issues/1161 3 | */ 4 | /*jshint jquery:true */ 5 | ;( function( $ ) { 6 | 'use strict'; 7 | 8 | $.tablesorter.addParser({ 9 | id: 'hugeNumbers', 10 | is : function() { 11 | return false; 12 | }, 13 | format : function( str ) { 14 | // add commas every 12 digits; Number.MAX_SAFE_INTEGER is 16 digits long 15 | // regex modified from: http://stackoverflow.com/a/2901298/145346 16 | return str.replace(/\B(?=(\d{12})+(?!\d))/g, ','); 17 | }, 18 | type : 'text' 19 | }); 20 | 21 | })( jQuery ); 22 | -------------------------------------------------------------------------------- /css/ebi-css-build/_ebi_print_styles.scss: -------------------------------------------------------------------------------- 1 | @mixin ebi-print-styles { 2 | /* print styles */ 3 | @media print { 4 | a, a:visited { border-bottom: none; } 5 | #skip-to, 6 | form#local-search, 7 | .global-footer, 8 | #search_ebi, 9 | #shortcuts, 10 | #ebi_search_results { display: none; } 11 | body { font-size: .9rem; } // slightly decrease font for print 12 | // don't print main navigation links 13 | .masthead-black-bar nav a[href]:after, 14 | .masthead nav a[href]:after, 15 | .masthead-inner a[href]:after { 16 | content: " "; 17 | } 18 | // print at full width of page 19 | .row { max-width: 100%; } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /css/ebi-css-build/_ebi_dev_note.scss: -------------------------------------------------------------------------------- 1 | // Common rules for EMBL-EBI website elements - global and local headers and footers. 2 | // These build atop and tweak Foundation's base styles, which we do not directly edit. 3 | // 4 | // We do not recommend you edit this file. Rather add any overrides using the pattern in theme-template.css, 5 | // or if you're using Sass you can override settings in _theme_settings.scss 6 | 7 | // Note to show in compiled CSS 8 | /* 9 | ================ 10 | DEVELOPERS: READ BEFORE EDITING! 11 | ================ 12 | If you wish to use Sass, do not edit this file. Edit ebi-global.scss 13 | If you don't care about Sass, delete this block and the ebi-global.scss file 14 | and use the compiled CSS version. 15 | */ 16 | -------------------------------------------------------------------------------- /bin/deploy-aws: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # abort on error 4 | set -e; 5 | # abort on undefined variable 6 | set -u; 7 | 8 | # get current branch from git info 9 | PROJECT=${CI_PROJECT_NAME}; 10 | BRANCH=$(echo "${CI_COMMIT_REF_NAME}" | cut -d'.' -f1-2); # first two parts, if tag name 11 | 12 | # set project base 13 | DEPLOY_PATH="web_guidelines/${PROJECT}/${BRANCH}"; 14 | 15 | if [ "${1:-''}" = "prod" ]; then 16 | S3_BUCKET=${S3_BUCKET_PROD}; 17 | MAX_AGE=$(cat .max-age); # define in .max-age 18 | else 19 | S3_BUCKET=${S3_BUCKET_DEV}; 20 | fi; 21 | 22 | # push to AWS (exclude bin and .git) 23 | aws s3 sync . s3://${S3_BUCKET}/${DEPLOY_PATH} \ 24 | --exclude ".git*" \ 25 | --exclude "bin/*" \ 26 | --delete \ 27 | --cache-control "max-age=${MAX_AGE:-60}" \ 28 | ; 29 | -------------------------------------------------------------------------------- /css/theme-ebi-industry.css: -------------------------------------------------------------------------------- 1 | /* 2 | Colour palette: EMBL-EBI Industry 3 | */ 4 | 5 | h2 { color: rgb(49, 122, 226); } 6 | 7 | .menu .active > a, 8 | .tag, 9 | .tabs-title > a:hover, 10 | .button, 11 | .button.primary { 12 | background-color: rgb(49, 122, 226); 13 | } 14 | a.tag:hover { color: #fff; } 15 | 16 | .tabs-title > a:hover, 17 | .button.primary:hover, 18 | .button.primary:focus { background: rgba(49, 122, 226,.9); } 19 | 20 | .tabs-title > a:focus, 21 | .tabs-title > a[aria-selected='true'] { 22 | color: #fff; 23 | background: #666; } 24 | 25 | .masthead { background-color: rgb(49, 122, 226); } 26 | 27 | /* Menu hover triangle colour */ 28 | .masthead nav ul#global-nav.menu li a:hover:after { border-bottom-color: rgb(49, 122, 226); } 29 | 30 | /* end */ 31 | -------------------------------------------------------------------------------- /css/theme-ebi-training.css: -------------------------------------------------------------------------------- 1 | /* 2 | Colour palette: EMBL-EBI Training 3 | */ 4 | 5 | h2 { color: rgb(239, 192, 110); } 6 | 7 | .menu .active > a, 8 | .tag, 9 | .tabs-title > a:hover, 10 | .button, 11 | .button.primary { 12 | background-color: rgb(239, 192, 110); 13 | } 14 | a.tag:hover { color: #fff; } 15 | 16 | .tabs-title > a:hover, 17 | .button.primary:hover, 18 | .button.primary:focus { background: rgba(239, 192, 110,.9); } 19 | .tabs-title > a:focus, 20 | .tabs-title > a[aria-selected='true'] { 21 | color: #fff; 22 | background: #666; } 23 | 24 | .masthead { background-color: rgb(239, 192, 110); } 25 | 26 | body main.row { margin-top: 1.5rem; } 27 | body .form-checkboxes .form-item, 28 | body .form-radios .form-item { 29 | margin-top: 0; 30 | margin-bottom: 0; 31 | } 32 | 33 | /* end */ 34 | -------------------------------------------------------------------------------- /.gitlab-ci.yml: -------------------------------------------------------------------------------- 1 | variables: 2 | S3_BUCKET_DEV: origin.dev.ebi.emblstatic.net 3 | S3_BUCKET_PROD: origin.ebi.emblstatic.net 4 | # do not define here, put in project variables 5 | AWS_KEY: key 6 | AWS_SECRET: secret-key 7 | 8 | stages: 9 | - deploy 10 | 11 | deploy_aws_dev: 12 | image: ebiwd/alpine-ssh 13 | stage: deploy 14 | tags: 15 | - docker 16 | before_script: 17 | - add-aws-key ${AWS_KEY} ${AWS_SECRET} 18 | script: 19 | - bin/deploy-aws 20 | only: 21 | - v1.1 22 | - v1.1-lite 23 | - v1.2 24 | - v1.3 25 | - v1.4 26 | 27 | deploy_aws_live: 28 | image: ebiwd/alpine-ssh 29 | stage: deploy 30 | tags: 31 | - docker 32 | before_script: 33 | - add-aws-key ${AWS_KEY} ${AWS_SECRET} 34 | script: 35 | - bin/deploy-aws prod 36 | only: 37 | - tags 38 | -------------------------------------------------------------------------------- /css/styleguide/kss-assets/kss-guides.js: -------------------------------------------------------------------------------- 1 | (function (window, document) { 2 | 'use strict'; 3 | 4 | var KssGuides = function (config) { 5 | this.bodyClass = config.bodyClass || 'kss-guides-mode'; 6 | 7 | this.init(); 8 | }; 9 | 10 | KssGuides.prototype.init = function () { 11 | var self = this; 12 | // Initialize all guides toggle buttons. 13 | var elementList = document.querySelectorAll('a[data-kss-guides]'); 14 | for (var button of elementList) { 15 | button.onclick = self.showGuides.bind(self); 16 | } 17 | }; 18 | 19 | // Toggle the guides mode. 20 | KssGuides.prototype.showGuides = function () { 21 | document.getElementsByTagName('body')[0].classList.toggle(this.bodyClass); 22 | }; 23 | 24 | // Export to DOM global space. 25 | window.KssGuides = KssGuides; 26 | 27 | })(window, document); 28 | -------------------------------------------------------------------------------- /images/logos/EMBL-EBI/favicons/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ebi", 3 | "icons": [ 4 | { 5 | "src": "\/android-chrome-36x36.png", 6 | "sizes": "36x36", 7 | "type": "image\/png", 8 | "density": 0.75 9 | }, 10 | { 11 | "src": "\/android-chrome-48x48.png", 12 | "sizes": "48x48", 13 | "type": "image\/png", 14 | "density": 1 15 | }, 16 | { 17 | "src": "\/android-chrome-72x72.png", 18 | "sizes": "72x72", 19 | "type": "image\/png", 20 | "density": 1.5 21 | }, 22 | { 23 | "src": "\/android-chrome-96x96.png", 24 | "sizes": "96x96", 25 | "type": "image\/png", 26 | "density": 2 27 | }, 28 | { 29 | "src": "\/android-chrome-144x144.png", 30 | "sizes": "144x144", 31 | "type": "image\/png", 32 | "density": 3 33 | }, 34 | { 35 | "src": "\/android-chrome-192x192.png", 36 | "sizes": "192x192", 37 | "type": "image\/png", 38 | "density": 4 39 | } 40 | ] 41 | } 42 | -------------------------------------------------------------------------------- /css/ebi-css-build/_ebi_related_pattern.scss: -------------------------------------------------------------------------------- 1 | @mixin ebi-related-pattern { 2 | // related / popular box 3 | .related { 4 | background: $ebi-colour-dark; 5 | margin-top: 4.25rem; 6 | color: $ebi-colour-white; 7 | padding: .5rem 0 0 1.1rem; 8 | 9 | h3 { 10 | color: $ebi-colour-white; 11 | background: none; 12 | margin-bottom: 0; 13 | } 14 | 15 | ul { 16 | margin-left: 0; 17 | margin-top: .25rem; 18 | 19 | li { 20 | display:inline-block; 21 | width: 49%; 22 | padding-right: 0; 23 | font-size: .9rem; 24 | min-width: 7rem; // for odd mid-break points, ensure the text doesn't get too small 25 | 26 | a { color: $ebi-colour-white; border-bottom:none; } 27 | a:hover { text-decoration: underline; } 28 | a:after { content: " >"; } 29 | } 30 | } 31 | ul:after { content: " "; height: .5rem; display: block; clear: both; } // a clearfix to show background 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /css/ebi-css-build/_ebi_clearable_inputs.scss: -------------------------------------------------------------------------------- 1 | @mixin ebi-clearable-inputs { 2 | // Clearable text inputs 3 | // Also need JS, via: http://stackoverflow.com/questions/6258521/clear-icon-inside-input-text 4 | input.clearable { 5 | background: #fff url('data:image/gif;base64,R0lGODlhBwAHAIAAAP///5KSkiH5BAAAAAAALAAAAAAHAAcAAAIMTICmsGrIXnLxuDMLADs=') no-repeat right -10px center; 6 | padding: 3px 25px 3px 4px; 7 | transition: background 0.4s; 8 | } 9 | input.clearable.x { background-position: right 12px center; } // (jQ) Show icon 10 | input.clearable.onX{ cursor: pointer; } // (jQ) hover cursor style 11 | input.clearable::-ms-clear {display: none; width:0; height:0;} // Remove IE default X 12 | 13 | // choices clearable inputs 14 | .choices[data-type*=select-multiple] button.choices__button { 15 | background: none; 16 | padding: 0; 17 | vertical-align: middle; 18 | line-height: 1rem; 19 | height: 2rem; 20 | padding-left: .25rem; 21 | width: 1.5rem; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | # Site settings 2 | name: EMBL-EBI Visual Framework 3 | group: EMBL-EBI Web Development 4 | email: www-dev@ebi.ac.uk 5 | domain: //ebiwd.github.io 6 | baseurl: /EBI-Framework 7 | permalink: pretty 8 | 9 | # Add custom CSS / JS here 10 | # custom_css: 11 | # - "{{site.baseurl}}/static/css/YOUR-CSS-COMPONENTS.css" 12 | # - "{{site.baseurl}}/static/css/ANOTHER-CSS-COMPONENTS.css" 13 | # custom_js: 14 | # - "{{site.baseurl}}/static/js/YOUR-CSS-COMPONENTS.js" 15 | # - "{{site.baseurl}}/static/js/ANOTHER-CSS-COMPONENTS.js" 16 | ga_code: 'UA-XXXXX-X' 17 | 18 | # root repo for this project 19 | repo: "https://github.com/ebiwd/EBI-Framework" 20 | source: . 21 | destination: ./_site 22 | exclude: [node_modules, .sass-cache, gulpfile.js, package.json, HOWTO.md, '*.scss'] 23 | #plugins: ./_plugins 24 | future: false 25 | lsi: false 26 | markdown: kramdown 27 | highlighter: rouge 28 | 29 | # Allow redirects 30 | # https://help.github.com/articles/redirects-on-github-pages/ 31 | #gems: 32 | # - jekyll-redirect-from 33 | -------------------------------------------------------------------------------- /libraries/LiveFilter/styles/text.css: -------------------------------------------------------------------------------- 1 | /* 2 | Custom Text Reset 3 | Based on: 960 Grid System Text CSS 4 | */ 5 | 6 | /* `Basic HTML 7 | ----------------------------------------------------------------------------------------------------*/ 8 | 9 | body { font: 13px/1.5 Helvetica, Arial, 'Liberation Sans', FreeSans, sans-serif; } 10 | 11 | a:focus { outline: 1px dotted invert; } 12 | 13 | hr { border: 0 #ccc solid; border-top-width: 1px; clear: both; height: 0; } 14 | 15 | /* `Headings 16 | ----------------------------------------------------------------------------------------------------*/ 17 | 18 | h1 { font-size: 25px; } 19 | 20 | h2 { font-size: 23px; } 21 | 22 | h3 { font-size: 21px; } 23 | 24 | h4 { font-size: 19px; } 25 | 26 | h5 { font-size: 17px; } 27 | 28 | h6 { font-size: 15px; } 29 | 30 | /* `Spacing 31 | ----------------------------------------------------------------------------------------------------*/ 32 | 33 | li { margin-left: 30px; } 34 | 35 | p, dl, hr, h1, h2, h3, h4, h5, h6, ol, ul, pre, table, address, fieldset { margin-bottom: 20px; } -------------------------------------------------------------------------------- /js/ebi-global-includes/script/6_ebiFrameworkInvokeScripts.js: -------------------------------------------------------------------------------- 1 | /** 2 | * All scripts are automatically loaded, unless the page asked us not to. 3 | * @example 4 | * Configurable with a data attribute: 5 | * 6 | */ 7 | function ebiFrameworkInvokeScripts() { 8 | ebiFrameworkPopulateBlackBar(); 9 | ebiFrameworkActivateBlackBar(); 10 | ebiFrameworkExternalLinks(); 11 | ebiFrameworkManageGlobalSearch(); 12 | ebiFrameworkSearchNullError(); 13 | ebiFrameworkHideGlobalNav(); 14 | ebiFrameworkAssignImageByMetaTags(); 15 | ebiFrameworkInsertEMBLdropdown(); 16 | ebiFrameworkUpdateFoot(); 17 | ebiFrameworkUpdateFooterMeta(); 18 | ebiFrameworkIncludeAnnouncements(); 19 | ebiFrameworkRunDataProtectionBanner('1.4'); 20 | } 21 | 22 | document.addEventListener("DOMContentLoaded", function(event) { 23 | var bodyData = document.body.dataset; 24 | // document.body.dataset not supported in < ie10 25 | if (isIE () && isIE () <= 10) { bodyData = []; } 26 | if (bodyData["ebiframeworkinvokescripts"] != "false") { 27 | ebiFrameworkInvokeScripts(); 28 | } 29 | }); 30 | -------------------------------------------------------------------------------- /js/ebi-global-includes/script/1_about.js: -------------------------------------------------------------------------------- 1 | // Copyright (c) EMBL-EBI 2021 2 | // Do not edit this file directly. 3 | // It is made by concating .js files with by npm into script.js. 4 | // Source files: js/ebi-css-build/script/*.js 5 | 6 | /** 7 | * Utility function to get params from the URL. 8 | * 9 | * @param {string} name The string to look for 10 | * @param {string} [url=browserURL] Optionally pass a specific URL to parse 11 | * 12 | * @example 13 | * query string: ?foo=lorem&bar=&baz 14 | * var foo = getParameterByName('foo'); // "lorem" 15 | */ 16 | function ebiGetParameterByName(name, url) { 17 | if (!url) url = window.location.href; 18 | name = name.replace(/[\[\]]/g, "\\$&"); 19 | var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"), 20 | results = regex.exec(url); 21 | if (!results) return null; 22 | if (!results[2]) return ''; 23 | return decodeURIComponent(results[2].replace(/\+/g, " ")); 24 | } 25 | 26 | // utility function to see if element has a class 27 | // hasClass(element, 'class-deska'); 28 | function ebiHasClass(element, cls) { 29 | return (' ' + element.className + ' ').indexOf(' ' + cls + ' ') > -1; 30 | } 31 | -------------------------------------------------------------------------------- /libraries/motion-ui/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2013-2015 ZURB, inc. 2 | 3 | MIT License 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining 6 | a copy of this software and associated documentation files (the 7 | "Software"), to deal in the Software without restriction, including 8 | without limitation the rights to use, copy, modify, merge, publish, 9 | distribute, sublicense, and/or sell copies of the Software, and to 10 | permit persons to whom the Software is furnished to do so, subject to 11 | the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be 14 | included in all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 19 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 20 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 21 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 22 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /libraries/LiveFilter/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2010-2012 Mike Merritt 2 | http://www.mikemerritt.me 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy 5 | of this software and associated documentation files (the "Software"), to deal 6 | in the Software without restriction, including without limitation the rights 7 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | copies of the Software, and to permit persons to whom the Software is 9 | furnished to do so, subject to the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be included in 12 | all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | THE SOFTWARE. -------------------------------------------------------------------------------- /libraries/LiveFilter/styles/reset.css: -------------------------------------------------------------------------------- 1 | /* Custom CSS Reset Stylesheet */ 2 | /* Based on: http://meyerweb.com/eric/tools/css/reset/ */ 3 | 4 | 5 | html, body, div, span, applet, object, iframe, 6 | h1, h2, h3, h4, h5, h6, p, blockquote, pre, 7 | a, abbr, acronym, address, big, cite, code, 8 | del, dfn, em, font, img, ins, kbd, q, s, samp, 9 | small, strike, strong, sub, sup, tt, var, 10 | b, u, i, center, 11 | dl, dt, dd, ol, ul, li, 12 | fieldset, form, label, legend, 13 | table, caption, tbody, tfoot, thead, tr, th, td { margin: 0; padding: 0; border: 0; outline: 0; font-size: 100%; vertical-align: baseline; background: transparent; } 14 | body { line-height: 1; } 15 | blockquote, q { quotes: none; } 16 | blockquote:before, blockquote:after, 17 | q:before, q:after { content: ''; content: none; } 18 | 19 | /* remember to define focus styles! */ 20 | :focus { outline: 0; } 21 | 22 | /* remember to highlight inserts somehow! */ 23 | ins { text-decoration: none; } 24 | del { text-decoration: line-through; } 25 | 26 | /* tables still need 'cellspacing="0"' in the markup */ 27 | table { border-collapse: collapse; border-spacing: 0; } -------------------------------------------------------------------------------- /libraries/tablesorter/js/parsers/parser-date.js: -------------------------------------------------------------------------------- 1 | /*! Parser: dates - updated 5/24/2017 (v2.28.11) */ 2 | /* Extract dates using popular natural language date parsers */ 3 | /*jshint jquery:true */ 4 | /*global Sugar*/ 5 | ;(function($) { 6 | 'use strict'; 7 | 8 | /*! Sugar (https://sugarjs.com/docs/#/DateParsing) */ 9 | /* demo: http://jsfiddle.net/Mottie/7z0ss5xn/ */ 10 | $.tablesorter.addParser({ 11 | id: 'sugar', 12 | is: function() { 13 | return false; 14 | }, 15 | format: function(s) { 16 | // Add support for sugar v2.0+ 17 | var create = Date.create || Sugar.Date.create, 18 | date = create ? create(s) : s ? new Date(s) : s; 19 | return date instanceof Date && isFinite(date) ? date.getTime() : s; 20 | }, 21 | type: 'numeric' 22 | }); 23 | 24 | /*! Datejs (http://www.datejs.com/) */ 25 | /* demo: http://jsfiddle.net/Mottie/zge0L2u6/ */ 26 | $.tablesorter.addParser({ 27 | id: 'datejs', 28 | is: function() { 29 | return false; 30 | }, 31 | format: function(s) { 32 | var date = Date.parse ? Date.parse(s) : s ? new Date(s) : s; 33 | return date instanceof Date && isFinite(date) ? date.getTime() : s; 34 | }, 35 | type: 'numeric' 36 | }); 37 | 38 | })(jQuery); 39 | -------------------------------------------------------------------------------- /css/theme-light.css: -------------------------------------------------------------------------------- 1 | /* 2 | Colour palette: Light 3 | This theme is based off theme-embl-petrol.css but notably adds the section: 4 | "white on light masthead stlying" 5 | to allow for a masthead menu that is dark text on white. 6 | For more background, see: https://github.com/ebiwd/EBI-Framework/issues/34 7 | */ 8 | 9 | h2 { color: rgb(0,124,130); } 10 | 11 | .menu .active > a, 12 | .tag, 13 | .tabs-title > a:hover, 14 | .button, 15 | .button.primary { 16 | background-color: rgb(0,124,130); 17 | } 18 | a.tag:hover { color: #fff; } 19 | 20 | .tabs-title > a:hover, 21 | .button.primary:hover, 22 | .button.primary:focus { background: rgba(0,124,130,.9); } 23 | .tabs-title > a:focus, 24 | .tabs-title > a[aria-selected='true'] { 25 | color: #fff; 26 | background: #666; } 27 | 28 | .masthead {background-color: #eee;} 29 | 30 | /* white on light masthead stlying */ 31 | .masthead nav ul.menu li { border-right-color: #EEE; } 32 | .masthead h1, .masthead h4, .masthead p, .masthead a, 33 | .masthead .masthead-inner .menu > li > a { color: #666; } 34 | .masthead .masthead-inner .menu > li > a:hover { color: rgb(0,124,130); } 35 | .masthead .masthead-inner .menu > li.active-trail > a { background: rgb(0,124,130); color: #fff } 36 | 37 | /* end */ 38 | -------------------------------------------------------------------------------- /libraries/tablesorter/js/parsers/parser-date-iso8601.js: -------------------------------------------------------------------------------- 1 | /*! Parser: ISO-8601 date - updated 10/26/2014 (v2.18.0) */ 2 | /* This parser works with dates in ISO8601 format 3 | * 2013-02-18T18:18:44+00:00 4 | * Written by Sean Ellingham :https://github.com/seanellingham 5 | * See https://github.com/Mottie/tablesorter/issues/247 6 | */ 7 | /*global jQuery: false */ 8 | ;(function($) { 9 | 'use strict'; 10 | 11 | var iso8601date = /^([0-9]{4})(-([0-9]{2})(-([0-9]{2})(T([0-9]{2}):([0-9]{2})(:([0-9]{2})(\.([0-9]+))?)?(Z|(([-+])([0-9]{2}):([0-9]{2})))?)?)?)?$/; 12 | 13 | $.tablesorter.addParser({ 14 | id : 'iso8601date', 15 | is : function(s) { 16 | return s ? s.match(iso8601date) : false; 17 | }, 18 | format : function(s) { 19 | var result = s ? s.match(iso8601date) : s; 20 | if (result) { 21 | var date = new Date(result[1], 0, 1); 22 | if (result[3]) { date.setMonth(result[3] - 1); } 23 | if (result[5]) { date.setDate(result[5]); } 24 | if (result[7]) { date.setHours(result[7]); } 25 | if (result[8]) { date.setMinutes(result[8]); } 26 | if (result[10]) { date.setSeconds(result[10]); } 27 | if (result[12]) { date.setMilliseconds(Number('0.' + result[12]) * 1000); } 28 | return date.getTime(); 29 | } 30 | return s; 31 | }, 32 | type : 'numeric' 33 | }); 34 | 35 | })(jQuery); 36 | -------------------------------------------------------------------------------- /css/ebi-css-build/_badge.scss: -------------------------------------------------------------------------------- 1 | 2 | //// 3 | /// @group badge 4 | /// Here we have forked to not specify a font size in the badge 5 | //// 6 | 7 | /// Default background color for badges. 8 | /// @type Color 9 | $badge-background: $primary-color !default; 10 | 11 | /// Default text color for badges. 12 | /// @type Color 13 | $badge-color: foreground($badge-background) !default; 14 | 15 | /// Default padding inside badges. 16 | /// @type Number 17 | $badge-padding: 0.3em !default; 18 | 19 | /// Minimum width of a badge. 20 | /// @type Number 21 | $badge-minwidth: 2.1em !default; 22 | 23 | /// Default font size for badges. 24 | /// @type Number 25 | $badge-font-size: 0.6rem !default; 26 | 27 | /// Generates the base styles for a badge. 28 | @mixin badge { 29 | display: inline-block; 30 | padding: $badge-padding; 31 | min-width: $badge-minwidth; 32 | // font-size: $badge-font-size; 33 | text-align: center; 34 | border-radius: 50%; 35 | } 36 | 37 | @mixin foundation-badge { 38 | .badge { 39 | @include badge; 40 | 41 | background: $badge-background; 42 | color: $badge-color; 43 | 44 | @each $name, $color in $foundation-palette { 45 | @if $name != primary { 46 | &.#{$name} { 47 | background: $color; 48 | color: foreground($color); 49 | } 50 | } 51 | } 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /css/ebi-css-build/_ebi_footer_styles.scss: -------------------------------------------------------------------------------- 1 | @mixin ebi-footer-styles { 2 | // LOCAL FOOTER 3 | .local-footer { 4 | border-top: 2px solid #eee; 5 | } 6 | 7 | // GLOBAL FOOTER 8 | .global-footer { 9 | border-top: 5px solid $ebi-colour-light-green; 10 | background-color: $ebi-colour-dark; 11 | padding-top: 1.5rem; 12 | color: $white; 13 | 14 | h5 { 15 | margin-top: 1.25rem; 16 | margin-bottom: 5px; 17 | } 18 | 19 | .ebi-logo { 20 | display: block; 21 | height: 53px; 22 | width: 89%; 23 | background-image: url("../images/logos/EMBL-EBI/EMBL_EBI_Logo_black.svg"); 24 | background-size: contain; 25 | background-repeat: no-repeat; 26 | margin-left: -.25rem; 27 | position: relative; 28 | top: 8px; 29 | } 30 | 31 | p { 32 | margin: 0 0 5px 0; 33 | } 34 | 35 | ul { 36 | margin-left: 0; 37 | font-size: 85%; 38 | list-style: none; 39 | } 40 | 41 | a, 42 | a:visited { 43 | color: $white; 44 | text-decoration: none; 45 | border: none; 46 | } 47 | 48 | a:hover, 49 | a:focus, 50 | a:active{ 51 | color: $white; 52 | text-decoration: underline; 53 | } 54 | } // END .global-footer 55 | 56 | .ebi-footer-meta p { 57 | font-size: 85%; margin-bottom: 9px; 58 | } // END .ebi-footer-meta 59 | } 60 | -------------------------------------------------------------------------------- /css/styleguide/kss-assets/kss-markup.js: -------------------------------------------------------------------------------- 1 | (function (window, document) { 2 | 'use strict'; 3 | 4 | var KssMarkup = function (config) { 5 | this.bodyClass = config.bodyClass || 'kss-markup-mode'; 6 | this.detailsClass = config.detailsClass || 'kss-markup'; 7 | 8 | this.init(); 9 | }; 10 | 11 | KssMarkup.prototype.init = function () { 12 | var self = this; 13 | // Initialize all markup toggle buttons. 14 | var elementList = document.querySelectorAll('a[data-kss-markup]'); 15 | for (var button of elementList) { 16 | button.onclick = self.showGuides.bind(self); 17 | }; 18 | }; 19 | 20 | // Activation function that takes the ID of the element that will receive 21 | // fullscreen focus. 22 | KssMarkup.prototype.showGuides = function () { 23 | var body = document.getElementsByTagName('body')[0], 24 | enabled = body.classList.contains(this.bodyClass); 25 | 26 | var elementList = document.querySelectorAll('.' + this.detailsClass); 27 | for (var el of elementList) { 28 | if (enabled) { 29 | el.removeAttribute('open'); 30 | } else { 31 | el.setAttribute('open', ''); 32 | } 33 | } 34 | 35 | // Toggle the markup mode. 36 | body.classList.toggle(this.bodyClass); 37 | }; 38 | 39 | // Export to DOM global space. 40 | window.KssMarkup = KssMarkup; 41 | 42 | })(window, document); 43 | -------------------------------------------------------------------------------- /js/ebi-global-includes/script/2_ebiFrameworkExternalLinks.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Mark pdf/doc/txt links with link-pdf/link-doc/link-txt classes. 3 | */ 4 | function ebiFrameworkExternalLinks() { 5 | // exclude links with images 6 | // include only links to own domains 7 | function isOwnDomain(url) { 8 | return (url.indexOf('//') === -1 || 9 | url.indexOf('//www.ebi.ac.uk') !== -1 || 10 | url.indexOf('//wwwdev.ebi.ac.uk') !== -1 || 11 | url.indexOf('//srs.ebi.ac.uk') !== -1 || 12 | url.indexOf('//ftp.ebi.ac.uk') !== -1 || 13 | url.indexOf('//intranet.ebi.ac.uk') !== -1 || 14 | url.indexOf('//pdbe.org') !== -1 || 15 | url.indexOf('//' + document.domain) !== -1); 16 | } 17 | function isFileType(url, type) { 18 | return url.indexOf(type, url.length-type.length)!==-1; 19 | } 20 | try { 21 | var alist = document.getElementsByTagName('a'); 22 | var fileTypes = ['pdf', 'doc', 'txt']; 23 | var i, icon; 24 | for (i=0; i') === -1 && alist[i].innerHTML.indexOf(' $threshold) { 31 | @return $yes; 32 | } 33 | @else { 34 | @return $no; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /css/ebi-css-build/_ebi_tag.scss: -------------------------------------------------------------------------------- 1 | // Custom tag class for Foundation-based EBI framework 2 | 3 | //// 4 | /// @group tag 5 | //// 6 | 7 | /// Default background color for tags. 8 | /// @type Color 9 | $tag-background: $primary-color !default; 10 | 11 | /// Default text color for tags. 12 | /// @type Color 13 | $tag-color: foreground($tag-background) !default; 14 | 15 | /// Default font size for tags. 16 | /// @type Number 17 | $tag-font-size: 0.8rem !default; 18 | 19 | /// Default padding inside tags. 20 | /// @type Number 21 | $tag-padding: 0.33333rem 0.5rem !default; 22 | 23 | /// Default radius of tags. 24 | /// @type Number 25 | $tag-radius: $global-radius !default; 26 | 27 | /// Generates base styles for a tag. 28 | @mixin tag { 29 | display: inline-block; 30 | padding: $tag-padding; 31 | font-size: $tag-font-size; 32 | line-height: 1; 33 | white-space: nowrap; 34 | // cursor: default; 35 | } 36 | 37 | @mixin ebi-tag { 38 | a.tag { 39 | color: $tag-color; 40 | border-bottom-style: none; 41 | } 42 | // sometimes .tag can exist on (particularly in wordpress) 43 | .tag:not(body) { 44 | @include tag; 45 | 46 | background: $tag-background; 47 | color: $tag-color; 48 | border-bottom: none; 49 | 50 | // @each $name, $color in $foundation-palette { 51 | // @if $name != primary { 52 | // &.#{$name} { 53 | // background: $color; 54 | // color: foreground($color); 55 | // } 56 | // } 57 | // } 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /libraries/motion-ui/dist/motion-ui.min.js: -------------------------------------------------------------------------------- 1 | !function(n,e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof exports?module.exports=e(require("jquery")):n.MotionUI=e(n.jQuery)}(this,function(n){"use strict";function e(e,a,r,u){function s(){e||a.hide(),m(),u&&u.apply(a)}function m(){a[0].style.transitionDuration=0,a.removeClass(d+" "+c+" "+r)}if(a=n(a).eq(0),a.length){if(null===o)return e?a.show():a.hide(),void u();var d=e?i[0]:i[1],c=e?t[0]:t[1];m(),a.addClass(r),a.css("transition","none"),requestAnimationFrame(function(){a.addClass(d),e&&a.show()}),requestAnimationFrame(function(){a[0].offsetWidth,a.css("transition",""),a.addClass(c)}),a.one("transitionend",s)}}!function(){Date.now||(Date.now=function(){return(new Date).getTime()});for(var n=["webkit","moz"],e=0;e globalize : { lang: 'en' } 39 | // or per column by using the column index --> globalize : { 0 : { lang: 'fr' } } 40 | options = c.globalize && ( c.globalize[ cellIndex ] || c.globalize ) || {}, 41 | months = ts.dates.months[ options.lang || 'en' ]; 42 | if ( c.ignoreCase ) { 43 | str = str.toLowerCase(); 44 | } 45 | for ( month in months ) { 46 | if ( typeof month === 'string' ) { 47 | m = months[ month ]; 48 | if ( c.ignoreCase ) { 49 | m = m.toLowerCase(); 50 | } 51 | if ( str.match( m ) ) { 52 | return parseInt( month, 10 ); 53 | } 54 | } 55 | } 56 | } 57 | return str; 58 | }, 59 | type: 'numeric' 60 | }); 61 | 62 | })(jQuery); 63 | -------------------------------------------------------------------------------- /libraries/tablesorter/js/widgets/widget-repeatheaders.js: -------------------------------------------------------------------------------- 1 | /*! Widget: repeatHeaders - updated 9/23/2016 (v2.27.7) *//* 2 | * Requires tablesorter v2.8+ and jQuery 1.7+ 3 | * Original by Christian Bach from the example-widgets.html demo 4 | */ 5 | /*global jQuery: false */ 6 | ;(function($) { 7 | 'use strict'; 8 | 9 | $.tablesorter.addWidget({ 10 | id: 'repeatHeaders', 11 | priority: 10, 12 | options: { 13 | rowsToSkip : 4 14 | }, 15 | // format is called on init and when a sorting has finished 16 | format: function(table, c, wo) { 17 | var h = '', i, $tr, l, skip; 18 | // cache and collect all TH headers 19 | if (!wo.repeatHeaders) { 20 | h = ''; 21 | for (i = 0; i < c.columns; i++) { 22 | // repeat the content of the current header (including child elements) 23 | h += '' + $.trim( c.$headers.eq(i).html() ) + ''; 24 | } 25 | // 'remove-me' class was added in case the table needs to be updated, the 'remove-me' rows will be 26 | // removed prior to the update to prevent including the rows in the update - see 'selectorRemove' option 27 | wo.repeatHeaders = h + ''; 28 | } 29 | 30 | // number of rows to skip 31 | skip = wo && wo.rowsToSkip || 4; 32 | 33 | // remove appended headers by classname 34 | c.$table.find('tr.repeated-header').remove(); 35 | $tr = c.$tbodies.find('tr'); 36 | l = $tr.length; 37 | // loop all tr elements and insert a copy of the 'headers' 38 | for (i = skip; i < l; i += skip) { 39 | // insert a copy of the table head every X rows 40 | $tr.eq(i).before(wo.repeatHeaders); 41 | } 42 | }, 43 | // this remove function is called when using the refreshWidgets method or when destroying the tablesorter plugin 44 | // this function only applies to tablesorter v2.4+ 45 | remove: function(table, c, wo) { 46 | wo.repeatHeaders = ''; 47 | c.$table.find('tr.repeated-header').remove(); 48 | } 49 | 50 | }); 51 | 52 | })(jQuery); 53 | -------------------------------------------------------------------------------- /css/styleguide/kss-assets/kss.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | var KssStateGenerator; 3 | 4 | KssStateGenerator = (function() { 5 | var pseudo_selectors; 6 | 7 | pseudo_selectors = ['hover', 'enabled', 'disabled', 'active', 'visited', 'focus', 'target', 'checked', 'empty', 'first-of-type', 'last-of-type', 'first-child', 'last-child']; 8 | 9 | function KssStateGenerator() { 10 | var idx, idxs, pseudos, replaceRule, rule, stylesheet, _i, _len, _len2, _ref, _ref2; 11 | pseudos = new RegExp("(\\:" + (pseudo_selectors.join('|\\:')) + ")", "g"); 12 | try { 13 | _ref = document.styleSheets; 14 | for (_i = 0, _len = _ref.length; _i < _len; _i++) { 15 | stylesheet = _ref[_i]; 16 | if (stylesheet.href && stylesheet.href.indexOf(document.domain) >= 0) { 17 | idxs = []; 18 | _ref2 = stylesheet.cssRules; 19 | for (idx = 0, _len2 = _ref2.length; idx < _len2; idx++) { 20 | rule = _ref2[idx]; 21 | if ((rule.type === CSSRule.STYLE_RULE) && pseudos.test(rule.selectorText)) { 22 | replaceRule = function(matched, stuff) { 23 | return matched.replace(/\:/g, '.pseudo-class-'); 24 | }; 25 | this.insertRule(rule.cssText.replace(pseudos, replaceRule)); 26 | } 27 | pseudos.lastIndex = 0; 28 | } 29 | } 30 | } 31 | } catch (_error) {} 32 | } 33 | 34 | KssStateGenerator.prototype.insertRule = function(rule) { 35 | var headEl, styleEl; 36 | headEl = document.getElementsByTagName('head')[0]; 37 | styleEl = document.createElement('style'); 38 | styleEl.type = 'text/css'; 39 | if (styleEl.styleSheet) { 40 | styleEl.styleSheet.cssText = rule; 41 | } else { 42 | styleEl.appendChild(document.createTextNode(rule)); 43 | } 44 | return headEl.appendChild(styleEl); 45 | }; 46 | 47 | return KssStateGenerator; 48 | 49 | })(); 50 | 51 | new KssStateGenerator; 52 | 53 | }).call(this); 54 | -------------------------------------------------------------------------------- /libraries/tablesorter/js/parsers/parser-feet-inch-fraction.js: -------------------------------------------------------------------------------- 1 | /*! Parser: distance *//* 2 | * This parser will parser numbers like 5'10" (5 foot 10 inches) 3 | * and 31½ into sortable values. 4 | * Demo: http://jsfiddle.net/Mottie/abkNM/154/ 5 | */ 6 | /*global jQuery: false */ 7 | ;(function($) { 8 | 'use strict'; 9 | 10 | var ts = $.tablesorter; 11 | ts.symbolRegex = /[\u215b\u215c\u215d\u215e\u00bc\u00bd\u00be]/g; 12 | ts.processFractions = function(n, table) { 13 | if (n) { 14 | var t, p = 0; 15 | n = $.trim(n.replace(/\"/, '')); 16 | // look for a space in the first part of the number: '10 3/4' and save the '10' 17 | if (/\s/.test(n)) { 18 | p = ts.formatFloat(n.split(' ')[0], table); 19 | // remove stuff to the left of the space 20 | n = $.trim(n.substring(n.indexOf(' '), n.length)); 21 | } 22 | // look for a '/' to calculate fractions 23 | if (/\//g.test(n)) { 24 | t = n.split('/'); 25 | // turn 3/4 into .75; make sure we don't divide by zero 26 | n = p + parseInt(t[0], 10) / parseInt(t[1] || 1, 10); 27 | // look for fraction symbols 28 | } else if (ts.symbolRegex.test(n)) { 29 | n = p + n.replace(ts.symbolRegex, function(m) { 30 | return { 31 | '\u215b' : '.125', // 1/8 32 | '\u215c' : '.375', // 3/8 33 | '\u215d' : '.625', // 5/8 34 | '\u215e' : '.875', // 7/8 35 | '\u00bc' : '.25', // 1/4 36 | '\u00bd' : '.5', // 1/2 37 | '\u00be' : '.75' // 3/4 38 | }[m]; 39 | }); 40 | } 41 | } 42 | return n || 0; 43 | }; 44 | 45 | $.tablesorter.addParser({ 46 | id: 'distance', 47 | is: function() { 48 | // return false so this parser is not auto detected 49 | return false; 50 | }, 51 | format: function(s, table) { 52 | if (s === '') { return ''; } 53 | // look for feet symbol = ' 54 | // very generic test to catch 1.1', 1 1/2' and 1½' 55 | var d = (/^\s*\S*(\s+\S+)?\s*\'/.test(s)) ? s.split(/\'/) : [ 0, s ], 56 | f = ts.processFractions(d[0], table), // feet 57 | i = ts.processFractions(d[1], table); // inches 58 | return (/[\'\"]/).test(s) ? parseFloat(f) + (parseFloat(i) / 12 || 0) : parseFloat(f) + parseFloat(i); 59 | }, 60 | type: 'numeric' 61 | }); 62 | 63 | })(jQuery); 64 | -------------------------------------------------------------------------------- /libraries/foundation-6/js/foundation.util.nest.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | import $ from 'jquery'; 4 | 5 | const Nest = { 6 | Feather(menu, type = 'zf') { 7 | menu.attr('role', 'menubar'); 8 | 9 | var items = menu.find('li').attr({'role': 'menuitem'}), 10 | subMenuClass = `is-${type}-submenu`, 11 | subItemClass = `${subMenuClass}-item`, 12 | hasSubClass = `is-${type}-submenu-parent`, 13 | applyAria = (type !== 'accordion'); // Accordions handle their own ARIA attriutes. 14 | 15 | items.each(function() { 16 | var $item = $(this), 17 | $sub = $item.children('ul'); 18 | 19 | if ($sub.length) { 20 | $item.addClass(hasSubClass); 21 | if(applyAria) { 22 | $item.attr({ 23 | 'aria-haspopup': true, 24 | 'aria-label': $item.children('a:first').text() 25 | }); 26 | // Note: Drilldowns behave differently in how they hide, and so need 27 | // additional attributes. We should look if this possibly over-generalized 28 | // utility (Nest) is appropriate when we rework menus in 6.4 29 | if(type === 'drilldown') { 30 | $item.attr({'aria-expanded': false}); 31 | } 32 | } 33 | $sub 34 | .addClass(`submenu ${subMenuClass}`) 35 | .attr({ 36 | 'data-submenu': '', 37 | 'role': 'menubar' 38 | }); 39 | if(type === 'drilldown') { 40 | $sub.attr({'aria-hidden': true}); 41 | } 42 | } 43 | 44 | if ($item.parent('[data-submenu]').length) { 45 | $item.addClass(`is-submenu-item ${subItemClass}`); 46 | } 47 | }); 48 | 49 | return; 50 | }, 51 | 52 | Burn(menu, type) { 53 | var //items = menu.find('li'), 54 | subMenuClass = `is-${type}-submenu`, 55 | subItemClass = `${subMenuClass}-item`, 56 | hasSubClass = `is-${type}-submenu-parent`; 57 | 58 | menu 59 | .find('>li, > li > ul, .menu, .menu > li, [data-submenu] > li') 60 | .removeClass(`${subMenuClass} ${subItemClass} ${hasSubClass} is-submenu-item submenu is-active`) 61 | .removeAttr('data-submenu').css('display', ''); 62 | 63 | } 64 | } 65 | 66 | export {Nest}; 67 | -------------------------------------------------------------------------------- /libraries/LiveFilter/styles/screen.css: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | @import 'reset.css'; 3 | @import 'text.css'; 4 | 5 | /* Gloabal Styles 6 | *************************************/ 7 | body { min-height: 870px; background: #061220; color: #ffffff; } 8 | h1 { padding: 20px 0px 0px 0px; color: #268eff; letter-spacing: -1px; text-align: center; } 9 | .float_clear { clear: both; font: 0px sans-serif; } 10 | 11 | /* Gloabal Styles 12 | *************************************/ 13 | #page_wrapper { width: 960px; margin: 0px auto 0px auto; } 14 | .list_filter { width: 300px; padding: 0px 0px 30px 0px; margin: 0px auto 0px auto; float: left; display: inline; } 15 | .table_filter { width: 500px; padding: 0px 0px 30px 0px; margin: 0px auto 0px auto; float: right; display: inline; } 16 | input.filter { width: 203px; height: 30px; margin: 0px 0px 10px 0px; padding: 0px 5px 0px 5px; border: 1px solid #2a5d9c; font-size: 16px; color: #ffffff; background: #112f55; float: left; display: inline; } 17 | input.reset { width: 80px; height: 32px; padding: 0px; margin: 0px 0px 0px 5px; float: left; display: inline; } 18 | .list_filter ul { list-style: none; margin: 0px; padding: 0px; } 19 | .list_filter ul li { width: 300px; height: 30px; margin: 0px; border-bottom: 1px solid #061220; background: url(../images/list-item-bg.gif) 0px 0px no-repeat; } 20 | .list_filter ul li a { display: block; width: 293px; height: 23px; padding: 7px 0px 0px 7px; color: #ffffff; text-decoration: none; } 21 | .list_filter ul li a:hover { text-decoration: underline; } 22 | 23 | .table_filter table { width: 500px; } 24 | .table_filter table tr { width: 500px; height: 30px; margin: 0px; padding: 0px 0px 0px 0px; border: 0px; border-bottom: 1px solid #061220; background: #174175; } 25 | .table_filter table thead tr { background: #2a5d9c; } 26 | .table_filter table tr td.title { width: 425px; text-align: left; border-right: 1px solid #061220; padding: 5px 0px 0px 5px; } 27 | .table_filter table tr th.title { width: 425px; text-align: left; border-right: 1px solid #061220; padding: 5px 0px 0px 5px; } 28 | .table_filter table tr td.date { width: 65px; text-align: left; padding: 5px 0px 0px 5px; } 29 | .table_filter table tr th.date { width: 65px; text-align: left; padding: 5px 0px 0px 5px; } -------------------------------------------------------------------------------- /css/ebi-css-build/_ebi_table_styles.scss: -------------------------------------------------------------------------------- 1 | @mixin ebi-table-styles { 2 | table { 3 | font-family: $table-font-family; 4 | font-size: $table-font-size; 5 | } 6 | // padding for page content 7 | body.table-layout table { 8 | padding: 0; 9 | } 10 | 11 | // Tablesorter styling 12 | table.tablesorter thead tr th, 13 | table.tablesorter thead tr th.tablesorter-headerUnSorted { 14 | background-image: url(../libraries/tablesorter/css/images/black-unsorted.gif); 15 | background-repeat: no-repeat; 16 | background-position: center right; 17 | cursor: pointer; 18 | } 19 | table.tablesorter thead tr th.tablesorter-headerAsc { background-image: url(../libraries/tablesorter/css/images/black-asc.gif); } 20 | table.tablesorter thead tr th.tablesorter-headerDesc { background-image: url(../libraries/tablesorter/css/images/black-desc.gif); } 21 | 22 | // No colour striping tables 23 | table.no-stripe tbody tr:nth-child(even) { background-color: #fff; } 24 | 25 | /* Data table solutions */ 26 | /* Tables with custom padding */ 27 | table.padding-none { 28 | border-spacing: 0; 29 | } 30 | table .padding-none th, 31 | table .padding-none td, 32 | table.padding-none tbody th, 33 | table.padding-none tbody td { 34 | padding: 0; 35 | } 36 | table.data-table, 37 | table.padding-small { 38 | border-spacing: 0; 39 | } 40 | table .padding-small th, 41 | table .padding-small td, 42 | table.padding-small tbody th, 43 | table.padding-small tbody td, 44 | table.data-table tbody th, 45 | table.data-table tbody td { 46 | padding: 0rem 0.2rem 0.2rem; 47 | } 48 | /* border lines on data tables without striping */ 49 | table.no-stripe.data-table tbody td { 50 | border-top: 1px solid $ebi-colour-light-grey; 51 | } 52 | /* None 100% wide tables */ 53 | table.data-table, 54 | table.width-auto { width: auto; } 55 | /* some images should be stretched, such as sparkline-style gifs */ 56 | table.data-table img, 57 | img.stretch { height: inherit; max-width: none;} 58 | /* align table cell text to top */ 59 | table.data-table th, 60 | table.data-table td, 61 | table.align-top td, 62 | table td.align-top { 63 | vertical-align: top; 64 | } 65 | /* highlight table header background */ 66 | table.data-table thead { 67 | background: $ebi-colour-light-grey; 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /css/styleguide/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | KSS Style Guide 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 |
19 |

KSS Style Guide

20 |
21 | 36 |
37 |
38 |
39 |
40 |
41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | -------------------------------------------------------------------------------- /css/styleguide/kss-assets/kss-fullscreen.js: -------------------------------------------------------------------------------- 1 | (function (window, document) { 2 | 'use strict'; 3 | 4 | // Set the configuration values on object creation. 5 | // - idPrefix: The string that uniquely prefixes the ID of all elements that 6 | // can receive the fullscreen focus. 7 | // - bodyClass: The class that is set on the body element when the fullscreen 8 | // mode is toggled on. 9 | // - elementClass: the class that is set on the element that is receiving the 10 | // fullscreen focus. 11 | var KssFullScreen = function (config) { 12 | this.idPrefix = config.idPrefix || 'kss-fullscreen-'; 13 | this.bodyClass = config.bodyClass || 'kss-fullscreen-mode'; 14 | this.elementClass = config.elementClass || 'is-fullscreen'; 15 | 16 | this.init(); 17 | }; 18 | 19 | // Initialize the page to see if the fullscreen mode should be immediately 20 | // turned on. 21 | KssFullScreen.prototype.init = function () { 22 | // Check the location hash to see if it matches the idPrefix. 23 | if (window.location.hash.slice(0, this.idPrefix.length + 1) === '#' + this.idPrefix) { 24 | this.setFocus(window.location.hash.slice(1 + this.idPrefix.length)); 25 | } 26 | 27 | var self = this; 28 | // Initialize all fullscreen toggle buttons. 29 | var elementList = document.querySelectorAll('a[data-kss-fullscreen]'); 30 | for (var button of elementList) { 31 | // Get the section reference from the data attribute. 32 | button.onclick = self.setFocus.bind(self, button.dataset.kssFullscreen); 33 | } 34 | }; 35 | 36 | // Activation function that takes the ID of the element that will receive 37 | // fullscreen focus. 38 | KssFullScreen.prototype.setFocus = function (id) { 39 | var el; 40 | 41 | // Find the element with the given ID and start fullscreen mode. 42 | if (el = document.getElementById(id)) { 43 | el.classList.toggle('is-fullscreen'); 44 | document.body.classList.toggle('kss-fullscreen-mode'); 45 | 46 | // When enabling the focus mode, change the location hash. 47 | if (el.classList.contains('is-fullscreen')) { 48 | window.location.hash = '#' + this.idPrefix + id; 49 | // Don't follow the link location. 50 | return false; 51 | } 52 | } 53 | 54 | return true; 55 | }; 56 | 57 | // Export to DOM global space. 58 | window.KssFullScreen = KssFullScreen; 59 | 60 | })(window, document); 61 | -------------------------------------------------------------------------------- /libraries/tablesorter/js/parsers/parser-duration.js: -------------------------------------------------------------------------------- 1 | /*! Parser: duration & countdown - updated 2/7/2015 (v2.19.0) */ 2 | /*jshint jquery:true, unused:false */ 3 | ;(function($) { 4 | 'use strict'; 5 | 6 | // If any number > 9999, then set table.config.durationLength = 5 7 | // The below regex matches this duration example: 1y 23d 12h 44m 9s 8 | $.tablesorter.addParser({ 9 | id: 'duration', 10 | is: function() { 11 | return false; 12 | }, 13 | format: function(s, table) { 14 | var i, time, 15 | c = table.config, 16 | t = '', 17 | duration = '', 18 | len = c.durationLength || 4, 19 | str = new Array(len + 1).join('0'), 20 | labels = (c.durationLabels || '(?:years|year|y),(?:days|day|d),(?:hours|hour|h),(?:minutes|minute|min|m),(?:seconds|second|sec|s)').split(/\s*,\s*/), 21 | llen = labels.length; 22 | // build regex 23 | if (!c.durationRegex) { 24 | for (i = 0; i < llen; i++) { 25 | t += '(?:(\\d+)\\s*' + labels[i] + '\\s*)?'; 26 | } 27 | c.durationRegex = new RegExp(t, 'i'); 28 | } 29 | // remove commas from value 30 | time = ( c.usNumberFormat ? s.replace(/,/g, '') : s.replace( /(\d)(?:\.|\s*)(\d)/g, '$1$2') ).match(c.durationRegex); 31 | for (i = 1; i < llen + 1; i++) { 32 | duration += ( str + ( time[i] || 0 ) ).slice(-len); 33 | } 34 | return duration; 35 | }, 36 | type: 'text' 37 | }); 38 | 39 | /*! Countdown parser ( hh:mm:ss ) */ 40 | /* Added 2/7/2015 (v2.19.0) - see http://stackoverflow.com/a/27023733/145346 */ 41 | $.tablesorter.addParser({ 42 | id: 'countdown', 43 | is: function () { 44 | return false; 45 | }, 46 | format: function ( text, table ) { 47 | // change maxDigits to 4, if values go > 999 48 | // or to 5 for values > 9999, etc. 49 | var maxDigits = table.config.durationLength || 4, 50 | // prefix contains leading zeros that are tacked 51 | prefix = new Array( maxDigits + 1 ).join( '0' ), 52 | // split time into blocks 53 | blocks = text.split( /\s*:\s*/ ), 54 | len = blocks.length, 55 | result = []; 56 | // add values in reverse, so if there is only one block 57 | // ( e.g. '10' ), then it would be the time in seconds 58 | while ( len ) { 59 | result.push( ( prefix + ( blocks[ --len ] || 0 ) ).slice( -maxDigits ) ); 60 | } 61 | // reverse the results and join them 62 | return result.length ? result.reverse().join( '' ) : text; 63 | }, 64 | type: 'text' 65 | }); 66 | 67 | })(jQuery); 68 | -------------------------------------------------------------------------------- /libraries/tablesorter/css/dragtable.mod.css: -------------------------------------------------------------------------------- 1 | /* 2 | * dragtable 3 | * @Version 2.0.14 MOD 4 | * default css 5 | */ 6 | .dragtable-sortable { 7 | list-style-type: none; 8 | margin: 0; 9 | padding: 0; 10 | -moz-user-select: none; 11 | z-index: 10; 12 | } 13 | .dragtable-sortable li { 14 | margin: 0; 15 | padding: 0; 16 | float: left; 17 | font-size: 1em; 18 | } 19 | .dragtable-sortable table { 20 | margin-top: 0; 21 | } 22 | .dragtable-sortable th, .dragtable-sortable td { 23 | border-left: 0px; 24 | } 25 | .dragtable-sortable li:first-child th, .dragtable-sortable li:first-child td { 26 | border-left: 1px solid #CCC; 27 | } 28 | .dragtable-handle-selected { 29 | /* table-handle class while actively dragging a column */ 30 | } 31 | .ui-sortable-helper { 32 | opacity: 0.7; 33 | filter: alpha(opacity=70); 34 | } 35 | .ui-sortable-placeholder { 36 | -moz-box-shadow: 4px 5px 4px rgba(0,0,0,0.2) inset; 37 | -webkit-box-shadow: 4px 5px 4px rgba(0,0,0,0.2) inset; 38 | box-shadow: 4px 5px 4px rgba(0,0,0,0.2) inset; 39 | border-bottom: 1px solid rgba(0,0,0,0.2); 40 | border-top: 1px solid rgba(0,0,0,0.2); 41 | visibility: visible !important; 42 | /* change the background color here to match the tablesorter theme */ 43 | background: #EFEFEF; 44 | } 45 | .ui-sortable-placeholder * { 46 | opacity: 0.0; 47 | visibility: hidden; 48 | } 49 | .table-handle, .table-handle-disabled { 50 | /* background-image: url(images/dragtable-handle.png); */ 51 | /* background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAANAQMAAAC5Li2yAAAABlBMVEUAAAAzMzPI8eYgAAAAAnRSTlMAzORBQ6MAAAAOSURBVAjXYwABByyYAQAQWgFBLN2RnwAAAABJRU5ErkJggg=='); */ 52 | background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyIiBoZWlnaHQ9IjEzIj48cmVjdCBzdHlsZT0iZmlsbDojMzMzO2ZpbGwtb3BhY2l0eTouODsiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHg9IjEiIHk9IjIiLz4JPHJlY3Qgc3R5bGU9ImZpbGw6IzMzMztmaWxsLW9wYWNpdHk6Ljg7IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4PSIxIiB5PSI0Ii8+CTxyZWN0IHN0eWxlPSJmaWxsOiMzMzM7ZmlsbC1vcGFjaXR5Oi44OyIgd2lkdGg9IjEiIGhlaWdodD0iMSIgeD0iMSIgeT0iNiIvPjxyZWN0IHN0eWxlPSJmaWxsOiMzMzM7ZmlsbC1vcGFjaXR5Oi44OyIgd2lkdGg9IjEiIGhlaWdodD0iMSIgeD0iMSIgeT0iOCIvPjxyZWN0IHN0eWxlPSJmaWxsOiMzMzM7ZmlsbC1vcGFjaXR5Oi44OyIgd2lkdGg9IjEiIGhlaWdodD0iMSIgeD0iMSIgeT0iMTAiLz48L3N2Zz4=); 53 | background-repeat: repeat-x; 54 | height: 13px; 55 | margin: 0 1px; 56 | cursor: move; 57 | } 58 | .table-handle-disabled { 59 | opacity: 0; 60 | cursor: not-allowed; 61 | } 62 | .dragtable-sortable table { 63 | margin-bottom: 0; 64 | } 65 | -------------------------------------------------------------------------------- /css/ebi-css-build/foundation/_settings-full-fat.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * This is the full version of the Foundation CSS library 3 | * (with minor) edits for EMBL-EBI tastes. 4 | * It is the default an we expect it to be the most commonly used version. 5 | */ 6 | 7 | @import '../ebi_dev_note'; 8 | 9 | // Include the common settings 10 | @import 'settings-common-foundation'; 11 | 12 | // 38. Invoke build process 13 | // ------------------------ 14 | 15 | @mixin foundation-everything($flex: false) { 16 | @if $flex { 17 | $global-flexbox: true !global; 18 | } 19 | 20 | @include foundation-global-styles; 21 | @if not $flex { 22 | @include foundation-grid; 23 | } 24 | @else { 25 | @include foundation-flex-grid; 26 | } 27 | @include foundation-typography; 28 | @include foundation-forms; 29 | @include foundation-button; 30 | @include foundation-accordion; 31 | @include foundation-accordion-menu; 32 | @include foundation-badge; 33 | @include foundation-breadcrumbs; 34 | @include foundation-button-group; 35 | @include foundation-callout; 36 | @include foundation-close-button; 37 | @include foundation-menu; 38 | @include foundation-menu-icon; 39 | @include foundation-drilldown-menu; 40 | @include foundation-dropdown; 41 | @include foundation-dropdown-menu; 42 | @include foundation-responsive-embed; 43 | @include foundation-label; 44 | @include foundation-media-object; 45 | @include foundation-off-canvas; 46 | @include foundation-orbit; 47 | @include foundation-pagination; 48 | @include foundation-progress-bar; 49 | @include foundation-slider; 50 | @include foundation-sticky; 51 | @include foundation-reveal; 52 | @include foundation-switch; 53 | @include foundation-table; 54 | @include foundation-tabs; 55 | @include foundation-thumbnail; 56 | @include foundation-title-bar; 57 | @include foundation-tooltip; 58 | @include foundation-top-bar; 59 | @include foundation-visibility-classes; 60 | @include ebi-visibility; 61 | @include foundation-float-classes; 62 | 63 | @if $use-animations { 64 | @include motion-ui-transitions; 65 | @include motion-ui-animations; 66 | } 67 | 68 | @if $flex { 69 | @include foundation-flex-classes; 70 | } 71 | } 72 | 73 | // invoke Foundation 74 | @include foundation-everything; 75 | 76 | // ebi-specific fixes 77 | @include ebi-foundation-overides; 78 | 79 | // Include all EBI branding 80 | $include-ebi-global-styles: true !global; 81 | $include-ebi-extra-styles: true !global; 82 | @import '../ebi-global.scss'; 83 | -------------------------------------------------------------------------------- /libraries/tablesorter/js/parsers/parser-date-two-digit-year.js: -------------------------------------------------------------------------------- 1 | /*! Parser: two digit year - updated 11/26/2016 (v2.28.0) */ 2 | /* Demo: http://mottie.github.io/tablesorter/docs/example-parsers-dates.html */ 3 | /*jshint jquery:true */ 4 | ;(function($) { 5 | 'use strict'; 6 | 7 | // Make the date be within +/- range of the 2 digit year 8 | // so if the current year is 2020, and the 2 digit year is 80 (2080 - 2020 > 50), it becomes 1980 9 | // if the 2 digit year is 50 (2050 - 2020 < 50), then it becomes 2050. 10 | var range = 50, 11 | 12 | // no need to change any of the code below 13 | ts = $.tablesorter, 14 | now = new Date().getFullYear(); 15 | 16 | // add dateRange to defaults for validator; value must be falsy 17 | ts.defaults.dataRange = ''; 18 | 19 | if ( !ts.dates ) { ts.dates = {}; } 20 | ts.dates.regxxxxyy = /(\d{1,2})[\/\s](\d{1,2})[\/\s](\d{2})/; 21 | ts.dates.regyyxxxx = /(\d{2})[\/\s](\d{1,2})[\/\s](\d{1,2})/; 22 | 23 | ts.formatDate = function(s, regex, format, table) { 24 | if (s) { 25 | var y, rng, 26 | n = s 27 | // replace separators 28 | .replace(/\s+/g, ' ').replace(/[-.,]/g, '/') 29 | // reformat xx/xx/xx to mm/dd/19yy; 30 | .replace(regex, format), 31 | d = new Date(n); 32 | if ( d instanceof Date && isFinite(d) ) { 33 | y = d.getFullYear(); 34 | rng = table && table.config.dateRange || range; 35 | // if date > 50 years old (set range), add 100 years 36 | // this will work when people start using '50' and mean '2050' 37 | while (now - y > rng) { 38 | y += 100; 39 | } 40 | return d.setFullYear(y); 41 | } 42 | } 43 | return s; 44 | }; 45 | 46 | $.tablesorter.addParser({ 47 | id: 'ddmmyy', 48 | is: function() { 49 | return false; 50 | }, 51 | format: function(s, table) { 52 | // reformat dd/mm/yy to mm/dd/19yy; 53 | return ts.formatDate(s, ts.dates.regxxxxyy, '$2/$1/19$3', table); 54 | }, 55 | type: 'numeric' 56 | }); 57 | 58 | $.tablesorter.addParser({ 59 | id: 'mmddyy', 60 | is: function() { 61 | return false; 62 | }, 63 | format: function(s, table) { 64 | // reformat mm/dd/yy to mm/dd/19yy 65 | return ts.formatDate(s, ts.dates.regxxxxyy, '$1/$2/19$3', table); 66 | }, 67 | type: 'numeric' 68 | }); 69 | 70 | $.tablesorter.addParser({ 71 | id: 'yymmdd', 72 | is: function() { 73 | return false; 74 | }, 75 | format: function(s, table) { 76 | // reformat yy/mm/dd to mm/dd/19yy 77 | return ts.formatDate(s, ts.dates.regyyxxxx, '$2/$3/19$1', table); 78 | }, 79 | type: 'numeric' 80 | }); 81 | 82 | })(jQuery); 83 | -------------------------------------------------------------------------------- /libraries/tablesorter/js/widgets/widget-formatter.js: -------------------------------------------------------------------------------- 1 | /*! Widget: formatter - 2/9/2015 (v2.19.1) *//* 2 | * Requires tablesorter v2.8+ and jQuery 1.7+ 3 | * by Rob Garrison 4 | */ 5 | /*jshint browser:true, jquery:true, unused:false */ 6 | /*global jQuery: false */ 7 | ;(function($) { 8 | 'use strict'; 9 | var ts = $.tablesorter; 10 | 11 | ts.formatter = { 12 | init : function( c ) { 13 | var events = c.widgetOptions.formatter_event + 14 | ' pagerComplete updateComplete '.split(' ').join('.tsformatter '); 15 | c.$table 16 | .off( events.replace(/\s+/g, ' ') ) 17 | .on( events, function() { 18 | ts.formatter.setup( c ); 19 | }); 20 | ts.formatter.setup( c ); 21 | }, 22 | setup : function( c ) { 23 | // do nothing for empty tables 24 | if ( $.isEmptyObject( c.cache ) ) { return; } 25 | var $tbody, tbodyIndex, rowIndex, rows, cell, len, column, 26 | wo = c.widgetOptions, 27 | data = { config: c, wo: wo }, 28 | formatter = [], 29 | $headers = []; 30 | // set up variables 31 | for ( column = 0; column < c.columns; column++ ) { 32 | $headers[ column ] = c.$headerIndexed[ column ]; 33 | formatter[ column ] = ts.getColumnData( c.table, wo.formatter_column, column ) || false; 34 | } 35 | // main loop 36 | for ( tbodyIndex = 0; tbodyIndex < c.$tbodies.length; tbodyIndex++ ) { 37 | $tbody = ts.processTbody( c.table, c.$tbodies.eq( tbodyIndex ), true ); // detach tbody 38 | rows = c.cache[ tbodyIndex ]; 39 | len = rows.normalized.length; 40 | for ( rowIndex = 0; rowIndex < len; rowIndex++ ) { 41 | data.$row = rows.normalized[ rowIndex ][ c.columns ].$row; 42 | data.$cells = data.$row.children( 'th, td' ); 43 | for ( column = 0; column < c.columns; column++ ) { 44 | if ( formatter[ column ] ) { 45 | data.columnIndex = column; 46 | data.$header = $headers[ column ]; 47 | data.$cell = data.$cells.eq( column ); 48 | cell = data.$cell[0]; 49 | // get text from attribute first, just in case we're updating 50 | data.text = cell.getAttribute( c.textAttribute ) || cell.textContent || data.$cell.text(); 51 | cell.innerHTML = formatter[ column ]( data.text, data ); 52 | } 53 | } 54 | } 55 | ts.processTbody( c.table, $tbody, false); // restore tbody 56 | } 57 | } 58 | }; 59 | 60 | ts.addWidget({ 61 | id: 'formatter', 62 | priority: 100, 63 | options: { 64 | formatter_column : {}, 65 | formatter_event : 'applyFormatter' 66 | }, 67 | init: function( table ) { 68 | ts.formatter.init( table.config ); 69 | } 70 | }); 71 | 72 | })( jQuery ); 73 | -------------------------------------------------------------------------------- /libraries/tablesorter/js/parsers/parser-ignore-articles.js: -------------------------------------------------------------------------------- 1 | /*! Parser: ignoreArticles - updated 9/15/2014 (v2.17.8) *//* 2 | * This parser will remove 'The', 'A' and 'An' from the beginning of a book 3 | * or movie title, so it sorts by the second word or number 4 | * Demo: http://jsfiddle.net/Mottie/abkNM/5/ 5 | */ 6 | /*jshint browser: true, jquery:true, unused:false */ 7 | ;(function($) { 8 | 'use strict'; 9 | 10 | var ts = $.tablesorter; 11 | 12 | // basic list from http://en.wikipedia.org/wiki/Article_%28grammar%29 13 | ts.ignoreArticles = { 14 | 'en' : 'the, a, an', 15 | 'de' : 'der, die, das, des, dem, den, ein, eine, einer, eines, einem, einen', 16 | 'nl' : 'de, het, de, een', 17 | 'es' : 'el, la, lo, los, las, un, una, unos, unas', 18 | 'pt' : 'o, a, os, as, um, uma, uns, umas', 19 | 'fr' : 'le, la, l\'_, les, un, une, des', 20 | 'it' : 'il, lo, la, l\'_, i, gli, le, un\', uno, una, un', 21 | 'hu' : 'a, az, egy' 22 | }; 23 | 24 | // To add a custom parser, define: 25 | // $.tablesorter.ignoreArticles['xx'] = 'A, B, C'; 26 | // and then set the language id 'xx' in the headers option 27 | // ignoreArticles : 'xx' 28 | 29 | ts.addParser({ 30 | id: 'ignoreArticles', 31 | is: function() { 32 | return false; 33 | }, 34 | format: function(s, table, cell, cellIndex) { 35 | var art, ignore, lang, 36 | c = table.config, 37 | str = s || ''; 38 | if ( !(c.headers && c.headers[cellIndex] && c.headers[cellIndex].ignoreArticlesRegex) ) { 39 | // initialize - save regex in c.headers[cellIndex].ignoreArticlesRegex 40 | if (!c.headers) { c.headers = {}; } 41 | if (!c.headers[cellIndex]) { c.headers[cellIndex] = {}; } 42 | lang = ts.getData( c.$headers.eq(cellIndex), ts.getColumnData( table, c.headers, cellIndex ), 'ignoreArticles' ); 43 | art = (ts.ignoreArticles[lang] || 'the, a, an' ) + ''; 44 | c.headers[cellIndex].ignoreArticlesRegex = new RegExp('^(' + $.trim( art.split(/\s*\,\s*/).join('\\s|') + '\\s' ).replace('_\\s', '') + ')', 'i'); 45 | // exception regex stored in c.headers[cellIndex].ignoreArticlesRegex2 46 | ignore = ts.getData( c.$headers.eq(cellIndex), ts.getColumnData( table, c.headers, cellIndex ), 'ignoreArticlesExcept' ); 47 | c.headers[cellIndex].ignoreArticlesRegex2 = ignore !== '' ? new RegExp('^(' + ignore.replace(/\s/g, '\\s') + ')', 'i') : ''; 48 | } 49 | art = c.headers[cellIndex].ignoreArticlesRegex; 50 | if (art.test(str)) { 51 | ignore = c.headers[cellIndex].ignoreArticlesRegex2; 52 | if ( !(ignore && ignore.test(str)) ) { 53 | return str.replace(art, ''); 54 | } 55 | } 56 | return str; 57 | }, 58 | type: 'text' 59 | }); 60 | 61 | })(jQuery); 62 | -------------------------------------------------------------------------------- /css/ebi-css-build/foundation/_settings-extras.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * This file is what was trimmed out of the 'lite' version. 3 | * By adding this file in you get the full EBI implementation of Foundation. 4 | * Teams might find this useful if they want to use the 'lite' version in most 5 | * areas, but have a few specific pages where they want the added components. 6 | */ 7 | 8 | @import '../ebi_dev_note'; 9 | 10 | // Include the common settings 11 | @import 'settings-common-foundation'; 12 | 13 | // 38. Invoke build process 14 | // ------------------------ 15 | 16 | @mixin foundation-extras($flex: false) { 17 | // @if $flex { 18 | // $global-flexbox: true !global; 19 | // } 20 | 21 | // @include foundation-global-styles; 22 | // @if not $flex { 23 | // @include foundation-grid; 24 | // } 25 | // @else { 26 | // @include foundation-flex-grid; 27 | // } 28 | // @include foundation-typography; 29 | @include foundation-forms; 30 | @include foundation-button; 31 | @include foundation-accordion; 32 | @include foundation-accordion-menu; 33 | @include foundation-badge; 34 | // @include foundation-breadcrumbs; 35 | @include foundation-button-group; 36 | @include foundation-callout; 37 | @include foundation-close-button; 38 | // @include foundation-menu; 39 | @include foundation-menu-icon; 40 | @include foundation-drilldown-menu; 41 | // @include foundation-dropdown; 42 | @include foundation-dropdown-menu; 43 | @include foundation-responsive-embed; 44 | @include foundation-label; 45 | @include foundation-media-object; 46 | @include foundation-off-canvas; 47 | @include foundation-orbit; 48 | @include foundation-pagination; 49 | @include foundation-progress-bar; 50 | @include foundation-slider; 51 | @include foundation-sticky; 52 | @include foundation-reveal; 53 | @include foundation-switch; 54 | @include foundation-table; 55 | @include foundation-tabs; 56 | @include foundation-thumbnail; 57 | @include foundation-title-bar; 58 | @include foundation-tooltip; 59 | @include foundation-top-bar; 60 | // @include foundation-visibility-classes; 61 | // @include ebi-visibility; 62 | // @include foundation-float-classes; 63 | 64 | @if $use-animations { 65 | @include motion-ui-transitions; 66 | @include motion-ui-animations; 67 | } 68 | 69 | @if $flex { 70 | @include foundation-flex-classes; 71 | } 72 | } 73 | 74 | // invoke Foundation 75 | @include foundation-extras; 76 | 77 | // ebi-specific fixes 78 | // @include ebi-foundation-overides; 79 | 80 | // Include all EBI branding 81 | $include-ebi-global-styles: false !global; 82 | $include-ebi-extra-styles: true !global; 83 | @import '../ebi-global.scss'; 84 | -------------------------------------------------------------------------------- /css/ebi-css-build/foundation/_settings-lite.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * This is a 'lite' version of the Foundation CSS library. 3 | * It removes CSS styling around tables, buttons, etc. 4 | * We expect this to be used by teams that wish to bring their own front-end 5 | * solution (such as Bootstrap) or find that Foundation's stylign causes 6 | * compatibility issues. 7 | */ 8 | 9 | @import '../ebi_dev_note'; 10 | 11 | // Include the common settings 12 | @import 'settings-common-foundation'; 13 | 14 | // 38. Invoke build process 15 | // ------------------------ 16 | 17 | @mixin foundation-lite($flex: false) { 18 | @if $flex { 19 | $global-flexbox: true !global; 20 | } 21 | 22 | @include foundation-global-styles; 23 | @if not $flex { 24 | @include foundation-grid; 25 | } 26 | @else { 27 | @include foundation-flex-grid; 28 | } 29 | @include foundation-typography; 30 | // @include foundation-forms; 31 | // @include foundation-button; 32 | // @include foundation-accordion; 33 | // @include foundation-accordion-menu; 34 | // @include foundation-badge; 35 | @include foundation-breadcrumbs; 36 | // @include foundation-button-group; 37 | // @include foundation-callout; 38 | // @include foundation-close-button; 39 | @include foundation-menu; 40 | // @include foundation-menu-icon; 41 | // @include foundation-drilldown-menu; 42 | @include foundation-dropdown; 43 | // @include foundation-dropdown-menu; 44 | // @include foundation-responsive-embed; 45 | // @include foundation-label; 46 | // @include foundation-media-object; 47 | // @include foundation-off-canvas; 48 | // @include foundation-orbit; 49 | // @include foundation-pagination; 50 | // @include foundation-progress-bar; 51 | // @include foundation-slider; 52 | // @include foundation-sticky; 53 | // @include foundation-reveal; 54 | // @include foundation-switch; 55 | // @include foundation-table; 56 | // @include foundation-tabs; 57 | // @include foundation-thumbnail; 58 | // @include foundation-title-bar; 59 | // @include foundation-tooltip; 60 | // @include foundation-top-bar; 61 | @include foundation-visibility-classes; 62 | @include ebi-visibility; 63 | @include foundation-float-classes; 64 | 65 | // @if $use-animations { 66 | // @include motion-ui-transitions; 67 | // @include motion-ui-animations; 68 | // } 69 | 70 | // @if $flex { 71 | // @include foundation-flex-classes; 72 | // } 73 | } 74 | 75 | // invoke Foundation 76 | @include foundation-lite; 77 | 78 | // ebi-specific fixes 79 | @include ebi-foundation-overides; 80 | 81 | // Include all EBI branding 82 | $include-ebi-global-styles: true !global; 83 | $include-ebi-extra-styles: false !global; 84 | @import '../ebi-global.scss'; 85 | -------------------------------------------------------------------------------- /libraries/tablesorter/js/widgets/widget-toggle.js: -------------------------------------------------------------------------------- 1 | /*! tablesorter enable/disable sort & filter (BETA) - 11/10/2015 (v2.24.4) 2 | * Requires tablesorter v2.24.4+ & jQuery 1.7+ 3 | * by Rob Garrison 4 | */ 5 | ;( function( $ ) { 6 | 'use strict'; 7 | var ts = $.tablesorter, 8 | 9 | tst = ts.toggleTS = { 10 | 11 | init : function( c, wo ) { 12 | wo.toggleTS_isEnabled = true; // enabled 13 | wo.toggleTS_areDisabled = { 14 | headers : [], 15 | filters : [] 16 | }; 17 | c.$table.on('enable.toggleTS disable.toggleTS', function( event ) { 18 | tst.toggle( this.config, this.config.widgetOptions, event.type === 'enable' ); 19 | }); 20 | }, 21 | toggle : function( c, wo, isEnabled ) { 22 | if ( wo.toggleTS_isEnabled !== isEnabled ) { 23 | wo.toggleTS_isEnabled = isEnabled; 24 | var indx, $el, 25 | len = c.$headers.length; 26 | 27 | // table headers 28 | for ( indx = 0; indx < len; indx++ ) { 29 | $el = c.$headers.eq( indx ); 30 | // function added in v2.24.4 31 | ts.setColumnSort( c, $el, !isEnabled ); 32 | // function added in v2.24.4; passing "isEnabled" allows removal of "next sort" labels 33 | ts.setColumnAriaLabel( c, $el, isEnabled ); 34 | } 35 | if ( wo.toggleTS_hideFilterRow ) { 36 | c.$table.find( '.' + ts.css.filterRow ).toggle( isEnabled ); 37 | } else if ( ts.hasWidget( c.$table, 'filter' ) ) { 38 | // c.$filters points to filter CELL 39 | len = c.$filters.length; 40 | for ( indx = 0; indx < len; indx++ ) { 41 | if ( isEnabled && !wo.toggleTS_areDisabled.filters[ indx ] ) { 42 | c.$filters.eq( indx ).find( 'input, select' ) 43 | .removeClass( ts.css.filterDisabled ) 44 | .prop( 'disabled', false ); 45 | } else if ( !isEnabled ) { 46 | $el = c.$filters.eq( indx ).find( 'input, select' ); 47 | if ( $el.hasClass( ts.css.filterDisabled ) ) { 48 | wo.toggleTS_areDisabled.filters[ indx ] = true; 49 | } 50 | $el 51 | .addClass( ts.css.filterDisabled ) 52 | .prop( 'disabled', true ); 53 | } 54 | } 55 | } 56 | // include external filters 57 | wo.filter_$externalFilters 58 | .toggleClass( ts.css.filterDisabled, isEnabled ) 59 | .prop( 'disabled', !isEnabled ); 60 | } 61 | if ( typeof wo.toggleTS_callback === 'function' ) { 62 | wo.toggleTS_callback( c, isEnabled ); 63 | } 64 | } 65 | }; 66 | 67 | ts.addWidget({ 68 | id: 'toggle-ts', 69 | options: { 70 | toggleTS_hideFilterRow : false, 71 | toggleTS_callback : null 72 | }, 73 | init : function( table, thisWidget, c, wo ) { 74 | tst.init( c, wo ); 75 | }, 76 | remove : function( table, c ) { 77 | c.$table.off( 'enable.toggleTS disable.toggleTS' ); 78 | } 79 | }); 80 | 81 | })( jQuery ); 82 | -------------------------------------------------------------------------------- /css/ebi-css-build/_ebi_theme_settings.scss: -------------------------------------------------------------------------------- 1 | // Colours 2 | // https://wwwdev.ebi.ac.uk/style-lab/general/#embl-ebi-official-colours 3 | // https://wwwdev.embl.org/guidelines/design/brand-guidelines/colour/ 4 | $ebi-colour-dark: #373a36; 5 | $ebi-colour-light: #f8f8f8; 6 | $ebi-colour-dark-grey: #555; 7 | $ebi-colour-medium-grey: #777; 8 | $ebi-colour-light-grey: #eaeaea; 9 | $ebi-colour-light-green: rgb(0, 159, 77); 10 | $ebi-colour-dark-green: rgb(0, 123, 83); 11 | $ebi-colour-petrol: rgb(0,124,130); 12 | $ebi-colour-gold: rgb(239, 192, 110); 13 | $ebi-colour-orange: rgb(255, 163, 0); 14 | $ebi-colour-blue: rgb(49, 122, 226); 15 | $ebi-colour-white: rgb(255,255,255); 16 | 17 | $primary-color: $ebi-colour-petrol; 18 | $secondary-color: $ebi-colour-dark-grey; 19 | 20 | $ebi-colour-main: $ebi-colour-petrol; 21 | $ebi-colour-services: $ebi-colour-dark-green; 22 | $ebi-colour-research: $ebi-colour-light-green; 23 | $ebi-colour-training: $ebi-colour-gold; 24 | $ebi-colour-industry: $ebi-colour-blue; 25 | $ebi-colour-elixir: $ebi-colour-orange; 26 | 27 | // Generic colours 28 | $success-color: #3adb76; 29 | $warning-color: #ffae00; 30 | $alert-color: #ec5840; 31 | $light-gray: #e6e6e6; 32 | $medium-gray: $ebi-colour-medium-grey; 33 | $dark-gray: #8a8a8a; 34 | $black: #0a0a0a; 35 | $white: #fefefe; 36 | 37 | $body-background: $ebi-colour-white; 38 | 39 | // typography 40 | $body-antialiased: true; 41 | $body-font-color: $black; 42 | $body-font-family: "IBM Plex Sans", Helvetica, Arial, sans-serif; 43 | $body-font-family-serif: "IBM Plex Mono", Monaco, Consolas, "Lucida Console", monospace; 44 | $code-font-family: "IBM Plex Mono", Monaco, Consolas, "Lucida Console", monospace; 45 | $table-font-family: $body-font-family; 46 | $table-font-size: 1rem; 47 | 48 | // masthead 49 | $masthead-background: $secondary-color; 50 | $masthead-font-color: $ebi-colour-light; 51 | 52 | // Set foundation colours 53 | $foundation-palette: ( 54 | primary: $primary-color, 55 | secondary: $ebi-colour-medium-grey, 56 | success: $success-color, 57 | warning: $warning-color, 58 | alert: $alert-color, 59 | ); 60 | 61 | // Label tweaks 62 | $label-background: $ebi-colour-white; 63 | $label-color: $primary-color; 64 | $label-padding: 0.33333rem 0; 65 | 66 | // Tags 67 | $tag-background: $primary-color; 68 | $tag-color: $label-background; 69 | $tag-font-size: 0.8rem; 70 | $tag-padding: 0.33333rem 0.5rem; 71 | 72 | // Headlines 73 | $global-weight-h1: 600; 74 | $global-weight-h2: 600; 75 | $global-weight-h3: 600; 76 | $global-weight-h4: 600; 77 | $global-weight-h5: 500; 78 | 79 | // These don't do anything yet... 80 | $global-margin: 1rem; 81 | $global-padding: 1rem; 82 | $global-weight-normal: normal; 83 | $global-weight-bold: 600; 84 | $global-radius: 0; 85 | $global-font-size: 100%; 86 | $global-width: rem-calc(1200); 87 | $global-lineheight: 1.5; 88 | $global-flexbox: false; 89 | -------------------------------------------------------------------------------- /libraries/tablesorter/js/parsers/parser-globalize.js: -------------------------------------------------------------------------------- 1 | /*! Parser: jQuery Globalize - updated 11/2/2015 (v2.24.1) */ 2 | /* Extract localized data using jQuery's Globalize parsers; set 3 | Globalize.locale( 'xx' ) in the globalize settings */ 4 | /*jshint jquery:true, newcap: false */ 5 | /*global Globalize:false */ 6 | ;( function( $ ) { 7 | 'use strict'; 8 | 9 | /*! jQuery Globalize date parser (https://github.com/jquery/globalize#date-module) */ 10 | $.tablesorter.addParser({ 11 | id: 'globalize-date', 12 | is: function () { 13 | return false; 14 | }, 15 | format: function ( str, table, cell, cellIndex ) { 16 | var globalize, date, 17 | c = table.config, 18 | // add options to 'config.globalize' for all columns --> globalize : { skeleton: 'GyMMMd' } 19 | // or per column by using the column index --> globalize : { 0 : { datetime: 'medium' } } 20 | options = c.globalize && ( c.globalize[ cellIndex ] || c.globalize ) || {}; 21 | if ( Globalize ) { 22 | globalize = typeof options.Globalize === 'object' ? 23 | // initialized Globalize object 24 | options.Globalize : 25 | // Globalize initialized from "lang" option 26 | Globalize( options.lang || 'en' ); 27 | if ( !options.Globalize ) { 28 | // cache the object 29 | options.Globalize = globalize; 30 | } 31 | } 32 | date = globalize && globalize.dateParser ? globalize.dateParser( options )( str ) : 33 | str ? new Date( str ) : str; 34 | return date instanceof Date && isFinite( date ) ? date.getTime() : str; 35 | }, 36 | type: 'numeric' 37 | }); 38 | 39 | /*! jQuery Globalize number parser (https://github.com/jquery/globalize#number-module) */ 40 | $.tablesorter.addParser({ 41 | id: 'globalize-number', 42 | is: function () { 43 | return false; 44 | }, 45 | format: function ( str, table, cell, cellIndex ) { 46 | var globalize, num, 47 | c = table.config, 48 | // add options to 'config.globalize' for all columns --> globalize : { skeleton: 'GyMMMd' } 49 | // or per column by using the column index --> globalize : { 0 : { datetime: 'medium' } } 50 | options = c.globalize && ( c.globalize[ cellIndex ] || c.globalize ) || {}; 51 | if ( Globalize ) { 52 | globalize = typeof options.Globalize === 'object' ? 53 | // initialized Globalize object 54 | options.Globalize : 55 | // Globalize initialized from "lang" option 56 | Globalize( options.lang || 'en' ); 57 | if ( !options.Globalize ) { 58 | // cache the object 59 | options.Globalize = globalize; 60 | } 61 | } 62 | num = globalize && globalize.numberParser ? globalize.numberParser( options )( str ) : 63 | str ? $.tablesorter.formatFloat( ( str || '' ).replace( /[^\w,. \-()]/g, '' ), table ) : str; 64 | return str && typeof num === 'number' ? num : str; 65 | }, 66 | type: 'numeric' 67 | }); 68 | 69 | })( jQuery ); 70 | -------------------------------------------------------------------------------- /libraries/tablesorter/js/widgets/widget-columns.js: -------------------------------------------------------------------------------- 1 | /*! Widget: columns - updated 5/24/2017 (v2.28.11) */ 2 | ;(function ($) { 3 | 'use strict'; 4 | var ts = $.tablesorter || {}; 5 | 6 | ts.addWidget({ 7 | id: 'columns', 8 | priority: 65, 9 | options : { 10 | columns : [ 'primary', 'secondary', 'tertiary' ] 11 | }, 12 | format: function(table, c, wo) { 13 | var $tbody, tbodyIndex, $rows, rows, $row, $cells, remove, indx, 14 | $table = c.$table, 15 | $tbodies = c.$tbodies, 16 | sortList = c.sortList, 17 | len = sortList.length, 18 | // removed c.widgetColumns support 19 | css = wo && wo.columns || [ 'primary', 'secondary', 'tertiary' ], 20 | last = css.length - 1; 21 | remove = css.join(' '); 22 | // check if there is a sort (on initialization there may not be one) 23 | for (tbodyIndex = 0; tbodyIndex < $tbodies.length; tbodyIndex++ ) { 24 | $tbody = ts.processTbody(table, $tbodies.eq(tbodyIndex), true); // detach tbody 25 | $rows = $tbody.children('tr'); 26 | // loop through the visible rows 27 | $rows.each(function() { 28 | $row = $(this); 29 | if (this.style.display !== 'none') { 30 | // remove all columns class names 31 | $cells = $row.children().removeClass(remove); 32 | // add appropriate column class names 33 | if (sortList && sortList[0]) { 34 | // primary sort column class 35 | $cells.eq(sortList[0][0]).addClass(css[0]); 36 | if (len > 1) { 37 | for (indx = 1; indx < len; indx++) { 38 | // secondary, tertiary, etc sort column classes 39 | $cells.eq(sortList[indx][0]).addClass( css[indx] || css[last] ); 40 | } 41 | } 42 | } 43 | } 44 | }); 45 | ts.processTbody(table, $tbody, false); 46 | } 47 | // add classes to thead and tfoot 48 | rows = wo.columns_thead !== false ? [ 'thead tr' ] : []; 49 | if (wo.columns_tfoot !== false) { 50 | rows.push('tfoot tr'); 51 | } 52 | if (rows.length) { 53 | $rows = $table.find( rows.join(',') ).children().removeClass(remove); 54 | if (len) { 55 | for (indx = 0; indx < len; indx++) { 56 | // add primary. secondary, tertiary, etc sort column classes 57 | $rows.filter('[data-column="' + sortList[indx][0] + '"]').addClass(css[indx] || css[last]); 58 | } 59 | } 60 | } 61 | }, 62 | remove: function(table, c, wo) { 63 | var tbodyIndex, $tbody, 64 | $tbodies = c.$tbodies, 65 | remove = (wo.columns || [ 'primary', 'secondary', 'tertiary' ]).join(' '); 66 | c.$headers.removeClass(remove); 67 | c.$table.children('tfoot').children('tr').children('th, td').removeClass(remove); 68 | for (tbodyIndex = 0; tbodyIndex < $tbodies.length; tbodyIndex++ ) { 69 | $tbody = ts.processTbody(table, $tbodies.eq(tbodyIndex), true); // remove tbody 70 | $tbody.children('tr').each(function() { 71 | $(this).children().removeClass(remove); 72 | }); 73 | ts.processTbody(table, $tbody, false); // restore tbody 74 | } 75 | } 76 | }); 77 | 78 | })(jQuery); 79 | -------------------------------------------------------------------------------- /libraries/tablesorter/js/widgets/widget-saveSort.js: -------------------------------------------------------------------------------- 1 | /*! Widget: saveSort - updated 2018-03-19 (v2.30.1) *//* 2 | * Requires tablesorter v2.16+ 3 | * by Rob Garrison 4 | */ 5 | ;(function ($) { 6 | 'use strict'; 7 | var ts = $.tablesorter || {}; 8 | 9 | function getStoredSortList(c) { 10 | var stored = ts.storage( c.table, 'tablesorter-savesort' ); 11 | return (stored && stored.hasOwnProperty('sortList') && $.isArray(stored.sortList)) ? stored.sortList : []; 12 | } 13 | 14 | function sortListChanged(c, sortList) { 15 | return (sortList || getStoredSortList(c)).join(',') !== c.sortList.join(','); 16 | } 17 | 18 | // this widget saves the last sort only if the 19 | // saveSort widget option is true AND the 20 | // $.tablesorter.storage function is included 21 | // ************************** 22 | ts.addWidget({ 23 | id: 'saveSort', 24 | priority: 20, 25 | options: { 26 | saveSort : true 27 | }, 28 | init: function(table, thisWidget, c, wo) { 29 | // run widget format before all other widgets are applied to the table 30 | thisWidget.format(table, c, wo, true); 31 | }, 32 | format: function(table, c, wo, init) { 33 | var time, 34 | $table = c.$table, 35 | saveSort = wo.saveSort !== false, // make saveSort active/inactive; default to true 36 | sortList = { 'sortList' : c.sortList }, 37 | debug = ts.debug(c, 'saveSort'); 38 | if (debug) { 39 | time = new Date(); 40 | } 41 | if ($table.hasClass('hasSaveSort')) { 42 | if (saveSort && table.hasInitialized && ts.storage && sortListChanged(c)) { 43 | ts.storage( table, 'tablesorter-savesort', sortList ); 44 | if (debug) { 45 | console.log('saveSort >> Saving last sort: ' + c.sortList + ts.benchmark(time)); 46 | } 47 | } 48 | } else { 49 | // set table sort on initial run of the widget 50 | $table.addClass('hasSaveSort'); 51 | sortList = ''; 52 | // get data 53 | if (ts.storage) { 54 | sortList = getStoredSortList(c); 55 | if (debug) { 56 | console.log('saveSort >> Last sort loaded: "' + sortList + '"' + ts.benchmark(time)); 57 | } 58 | $table.bind('saveSortReset', function(event) { 59 | event.stopPropagation(); 60 | ts.storage( table, 'tablesorter-savesort', '' ); 61 | }); 62 | } 63 | // init is true when widget init is run, this will run this widget before all other widgets have initialized 64 | // this method allows using this widget in the original tablesorter plugin; but then it will run all widgets twice. 65 | if (init && sortList && sortList.length > 0) { 66 | c.sortList = sortList; 67 | } else if (table.hasInitialized && sortList && sortList.length > 0) { 68 | // update sort change 69 | if (sortListChanged(c, sortList)) { 70 | ts.sortOn(c, sortList); 71 | } 72 | } 73 | } 74 | }, 75 | remove: function(table, c) { 76 | c.$table.removeClass('hasSaveSort'); 77 | // clear storage 78 | if (ts.storage) { ts.storage( table, 'tablesorter-savesort', '' ); } 79 | } 80 | }); 81 | 82 | })(jQuery); 83 | -------------------------------------------------------------------------------- /libraries/Choices/assets/styles/scss/base.scss: -------------------------------------------------------------------------------- 1 | $global-guttering: 24px; 2 | $global-font-size-h1: 32px; 3 | $global-font-size-h2: 24px; 4 | $global-font-size-h3: 20px; 5 | $global-font-size-h4: 18px; 6 | $global-font-size-h5: 16px; 7 | $global-font-size-h6: 14px; 8 | 9 | /*============================================= 10 | = Generic styling = 11 | =============================================*/ 12 | 13 | * { 14 | -webkit-font-smoothing: antialiased; 15 | -moz-osx-font-smoothing: grayscale 16 | } 17 | 18 | 19 | *, *:before, *:after { 20 | box-sizing: border-box 21 | } 22 | 23 | 24 | html, body { 25 | position: relative; 26 | margin: 0; 27 | width: 100%; 28 | height: 100%; 29 | } 30 | 31 | body { 32 | font-family: $body-font-family; 33 | font-size: 16px; 34 | line-height: 1.4; 35 | color: #FFFFFF; 36 | background-color: #333; 37 | overflow-x: hidden; 38 | } 39 | 40 | label { 41 | display: block; 42 | margin-bottom: 8px; 43 | font-size: 14px; 44 | font-weight: 500; 45 | cursor: pointer; 46 | } 47 | 48 | p { margin-top: 0; } 49 | 50 | hr { 51 | display: block; 52 | margin: $global-guttering*1.5 0; 53 | border: 0; 54 | border-bottom: 1px solid #eaeaea; 55 | height: 1px; 56 | } 57 | 58 | h1, h2, h3, h4, h5, h6 { 59 | margin-top: 0; 60 | margin-bottom: $global-guttering/2; 61 | font-weight: 400; 62 | line-height: 1.2; 63 | } 64 | 65 | a, a:visited, a:focus { 66 | color: #FFFFFF; 67 | text-decoration: none; 68 | font-weight: 600; 69 | } 70 | 71 | .form-control { 72 | display: block; 73 | width: 100%; 74 | background-color: #f9f9f9; 75 | padding: 12px; 76 | border: 1px solid #ddd; 77 | border-radius: 2.5px; 78 | font-size: 14px; 79 | -webkit-appearance: none; 80 | appearance: none; 81 | margin-bottom: $global-guttering; 82 | } 83 | 84 | h1, .h1 { font-size: $global-font-size-h1; } 85 | h2, .h2 { font-size: $global-font-size-h2; } 86 | h3, .h3 { font-size: $global-font-size-h3; } 87 | h4, .h4 { font-size: $global-font-size-h4; } 88 | h5, .h5 { font-size: $global-font-size-h5; } 89 | h6, .h6 { font-size: $global-font-size-h6; } 90 | 91 | .container { 92 | display: block; 93 | margin: auto; 94 | max-width: 40em; 95 | padding: $global-guttering*2; 96 | @media (max-width: 620px) { padding: 0; } 97 | } 98 | 99 | .section { 100 | background-color: #FFFFFF; 101 | padding: $global-guttering; 102 | color: #333; 103 | a, a:visited, a:focus { color: #00bcd4; } 104 | } 105 | 106 | .logo { 107 | display: block; 108 | margin-bottom: $global-guttering/2; 109 | } 110 | 111 | .logo__img { 112 | width: 100%; 113 | height: auto; 114 | display: inline-block; 115 | max-width: 100%; 116 | vertical-align: top; 117 | padding: $global-guttering/4 0; 118 | } 119 | 120 | .visible-ie { display: none; } 121 | .zero-bottom { margin-bottom: 0; } 122 | .zero-top { margin-top: 0; } 123 | 124 | /*===== End of Section comment block ======*/ 125 | -------------------------------------------------------------------------------- /libraries/foundation-6/js/foundation.util.motion.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | import $ from 'jquery'; 4 | import { transitionend } from './foundation.core.utils'; 5 | 6 | /** 7 | * Motion module. 8 | * @module foundation.motion 9 | */ 10 | 11 | const initClasses = ['mui-enter', 'mui-leave']; 12 | const activeClasses = ['mui-enter-active', 'mui-leave-active']; 13 | 14 | const Motion = { 15 | animateIn: function(element, animation, cb) { 16 | animate(true, element, animation, cb); 17 | }, 18 | 19 | animateOut: function(element, animation, cb) { 20 | animate(false, element, animation, cb); 21 | } 22 | } 23 | 24 | function Move(duration, elem, fn){ 25 | var anim, prog, start = null; 26 | // console.log('called'); 27 | 28 | if (duration === 0) { 29 | fn.apply(elem); 30 | elem.trigger('finished.zf.animate', [elem]).triggerHandler('finished.zf.animate', [elem]); 31 | return; 32 | } 33 | 34 | function move(ts){ 35 | if(!start) start = ts; 36 | // console.log(start, ts); 37 | prog = ts - start; 38 | fn.apply(elem); 39 | 40 | if(prog < duration){ anim = window.requestAnimationFrame(move, elem); } 41 | else{ 42 | window.cancelAnimationFrame(anim); 43 | elem.trigger('finished.zf.animate', [elem]).triggerHandler('finished.zf.animate', [elem]); 44 | } 45 | } 46 | anim = window.requestAnimationFrame(move); 47 | } 48 | 49 | /** 50 | * Animates an element in or out using a CSS transition class. 51 | * @function 52 | * @private 53 | * @param {Boolean} isIn - Defines if the animation is in or out. 54 | * @param {Object} element - jQuery or HTML object to animate. 55 | * @param {String} animation - CSS class to use. 56 | * @param {Function} cb - Callback to run when animation is finished. 57 | */ 58 | function animate(isIn, element, animation, cb) { 59 | element = $(element).eq(0); 60 | 61 | if (!element.length) return; 62 | 63 | var initClass = isIn ? initClasses[0] : initClasses[1]; 64 | var activeClass = isIn ? activeClasses[0] : activeClasses[1]; 65 | 66 | // Set up the animation 67 | reset(); 68 | 69 | element 70 | .addClass(animation) 71 | .css('transition', 'none'); 72 | 73 | requestAnimationFrame(() => { 74 | element.addClass(initClass); 75 | if (isIn) element.show(); 76 | }); 77 | 78 | // Start the animation 79 | requestAnimationFrame(() => { 80 | element[0].offsetWidth; 81 | element 82 | .css('transition', '') 83 | .addClass(activeClass); 84 | }); 85 | 86 | // Clean up the animation when it finishes 87 | element.one(transitionend(element), finish); 88 | 89 | // Hides the element (for out animations), resets the element, and runs a callback 90 | function finish() { 91 | if (!isIn) element.hide(); 92 | reset(); 93 | if (cb) cb.apply(element); 94 | } 95 | 96 | // Resets transitions and removes motion-specific classes 97 | function reset() { 98 | element[0].style.transitionDuration = 0; 99 | element.removeClass(`${initClass} ${activeClass} ${animation}`); 100 | } 101 | } 102 | 103 | export { Move, Motion }; 104 | 105 | -------------------------------------------------------------------------------- /libraries/tablesorter/js/parsers/parser-date-extract.js: -------------------------------------------------------------------------------- 1 | /*! Parser: Extract out date - updated 10/26/2014 (v2.18.0) */ 2 | /*jshint jquery:true */ 3 | ;(function($) { 4 | 'use strict'; 5 | 6 | var regex = { 7 | usLong : /[A-Z]{3,10}\.?\s+\d{1,2},?\s+(?:\d{4})(?:\s+\d{1,2}:\d{2}(?::\d{2})?(?:\s+[AP]M)?)?/i, 8 | mdy : /(\d{1,2}[\/\s]\d{1,2}[\/\s]\d{4}(\s+\d{1,2}:\d{2}(:\d{2})?(\s+[AP]M)?)?)/i, 9 | 10 | dmy : /(\d{1,2}[\/\s]\d{1,2}[\/\s]\d{4}(\s+\d{1,2}:\d{2}(:\d{2})?(\s+[AP]M)?)?)/i, 11 | dmyreplace : /(\d{1,2})[\/\s](\d{1,2})[\/\s](\d{4})/, 12 | 13 | ymd : /(\d{4}[\/\s]\d{1,2}[\/\s]\d{1,2}(\s+\d{1,2}:\d{2}(:\d{2})?(\s+[AP]M)?)?)/i, 14 | ymdreplace : /(\d{4})[\/\s](\d{1,2})[\/\s](\d{1,2})/ 15 | }; 16 | 17 | /*! extract US Long Date *//* (ignore any other text) 18 | * e.g. 'Sue's Birthday! Jun 26, 2004 7:22 AM (8# 2oz)' 19 | * demo: http://jsfiddle.net/Mottie/abkNM/4165/ */ 20 | $.tablesorter.addParser({ 21 | id: 'extractUSLongDate', 22 | is: function () { 23 | // don't auto detect this parser 24 | return false; 25 | }, 26 | format: function (s) { 27 | var date, 28 | str = s ? s.match(regex.usLong) : s; 29 | if (str) { 30 | date = new Date( str[0] ); 31 | return date instanceof Date && isFinite(date) ? date.getTime() : s; 32 | } 33 | return s; 34 | }, 35 | type: 'numeric' 36 | }); 37 | 38 | /*! extract MMDDYYYY *//* (ignore any other text) 39 | * demo: http://jsfiddle.net/Mottie/abkNM/4166/ */ 40 | $.tablesorter.addParser({ 41 | id: 'extractMMDDYYYY', 42 | is: function () { 43 | // don't auto detect this parser 44 | return false; 45 | }, 46 | format: function (s) { 47 | var date, 48 | str = s ? s.replace(/\s+/g, ' ').replace(/[\-.,]/g, '/').match(regex.mdy) : s; 49 | if (str) { 50 | date = new Date( str[0] ); 51 | return date instanceof Date && isFinite(date) ? date.getTime() : s; 52 | } 53 | return s; 54 | }, 55 | type: 'numeric' 56 | }); 57 | 58 | /*! extract DDMMYYYY *//* (ignore any other text) 59 | * demo: http://jsfiddle.net/Mottie/abkNM/4167/ */ 60 | $.tablesorter.addParser({ 61 | id: 'extractDDMMYYYY', 62 | is: function () { 63 | // don't auto detect this parser 64 | return false; 65 | }, 66 | format: function (s) { 67 | var date, 68 | str = s ? s.replace(/\s+/g, ' ').replace(/[\-.,]/g, '/').match(regex.dmy) : s; 69 | if (str) { 70 | date = new Date( str[0].replace(regex.dmyreplace, '$2/$1/$3') ); 71 | return date instanceof Date && isFinite(date) ? date.getTime() : s; 72 | } 73 | return s; 74 | }, 75 | type: 'numeric' 76 | }); 77 | 78 | /*! extract YYYYMMDD *//* (ignore any other text) 79 | * demo: http://jsfiddle.net/Mottie/abkNM/4168/ */ 80 | $.tablesorter.addParser({ 81 | id: 'extractYYYYMMDD', 82 | is: function () { 83 | // don't auto detect this parser 84 | return false; 85 | }, 86 | format: function (s) { 87 | var date, 88 | str = s ? s.replace(/\s+/g, ' ').replace(/[\-.,]/g, '/').match(regex.ymd) : s; 89 | if (str) { 90 | date = new Date( str[0].replace(regex.ymdreplace, '$2/$3/$1') ); 91 | return date instanceof Date && isFinite(date) ? date.getTime() : s; 92 | } 93 | return s; 94 | }, 95 | type: 'numeric' 96 | }); 97 | 98 | })(jQuery); 99 | -------------------------------------------------------------------------------- /libraries/tablesorter/js/parsers/parser-date-weekday.js: -------------------------------------------------------------------------------- 1 | /*! Parser: weekday - updated 11/22/2015 (v2.24.6) */ 2 | /* Demo: http://jsfiddle.net/Mottie/abkNM/4169/ */ 3 | /*jshint jquery:true */ 4 | ;(function($) { 5 | 'use strict'; 6 | 7 | var ts = $.tablesorter; 8 | 9 | if ( !ts.dates ) { ts.dates = {}; } 10 | if ( !ts.dates.weekdays ) { ts.dates.weekdays = {}; } 11 | // See http://mottie.github.io/tablesorter/docs/example-widget-grouping.html 12 | // for details on how to use CLDR data for a locale to add data for this parser 13 | // CLDR returns { sun: "Sun", mon: "Mon", tue: "Tue", wed: "Wed", thu: "Thu", ... } 14 | ts.dates.weekdays.en = { 15 | 'sun' : 'Sun', 16 | 'mon' : 'Mon', 17 | 'tue' : 'Tue', 18 | 'wed' : 'Wed', 19 | 'thu' : 'Thu', 20 | 'fri' : 'Fri', 21 | 'sat' : 'Sat' 22 | }; 23 | // set table.config.weekStarts to change weekday start date for your locale 24 | // cross-reference of a date on which the week starts on a... 25 | // https://github.com/unicode-cldr/cldr-core/blob/master/supplemental/weekData.json 26 | // locale agnostic 27 | ts.dates.weekStartList = { 28 | 'sun' : '1995', // Sun 1/1/1995 29 | 'mon' : '1996', // Mon 1/1/1996 30 | 'fri' : '1999', // Friday 1/1/1999 31 | 'sat' : '2000' // Sat 1/1/2000 32 | }; 33 | // do not modify this array; it is used for cross referencing weekdays 34 | // locale agnostic 35 | ts.dates.weekdaysXref = [ 'sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat' ]; 36 | 37 | ts.addParser({ 38 | id: 'weekday', 39 | is: function() { 40 | return false; 41 | }, 42 | format: function( str, table, cell, cellIndex ) { 43 | if ( str ) { 44 | var d, day, num, 45 | c = table.config, 46 | // add options to 'config.globalize' for all columns --> globalize : { lang: 'en' } 47 | // or per column by using the column index --> globalize : { 0 : { lang: 'fr' } } 48 | options = c.globalize && ( c.globalize[ cellIndex ] || c.globalize ) || {}, 49 | days = ts.dates.weekdays[ options.lang || 'en' ], 50 | xref = ts.dates.weekdaysXref; 51 | if ( c.ignoreCase ) { 52 | str = str.toLowerCase(); 53 | } 54 | for ( day in days ) { 55 | if ( typeof day === 'string' ) { 56 | d = days[ day ]; 57 | if ( c.ignoreCase ) { 58 | d = d.toLowerCase(); 59 | } 60 | if ( str.match( d ) ) { 61 | num = $.inArray( day, xref ); 62 | return num > -1 ? num : str; 63 | } 64 | } 65 | } 66 | } 67 | return str; 68 | }, 69 | type: 'numeric' 70 | }); 71 | 72 | // useful when a group widget date column is set to "group-date-week" 73 | // and you want to only sort on the day of the week ignore the actual date, month and year 74 | ts.addParser({ 75 | id: 'weekday-index', 76 | is: function() { 77 | return false; 78 | }, 79 | format: function( str, table ) { 80 | if ( str ) { 81 | var c = table.config, 82 | date = new Date( str ); 83 | if ( date instanceof Date && isFinite( date ) ) { 84 | // use a specific date that started with that weekday so sorting is only going to be 85 | // based on the day of the week and not the date, month or year 86 | return new Date( '1/' + ( date.getDay() + 1 ) + '/' + ts.dates.weekStartList[ c.weekStarts || 'sun' ] ); 87 | } 88 | } 89 | return str; 90 | }, 91 | type: 'numeric' 92 | }); 93 | 94 | })(jQuery); 95 | -------------------------------------------------------------------------------- /libraries/tablesorter/js/parsers/parser-roman.js: -------------------------------------------------------------------------------- 1 | /*! Parser: roman - updated 6/28/MMXIV (v2.17.3) *//* 2 | * code modified from both: 3 | * Steven Levithan @ http://blog.stevenlevithan.com/archives/javascript-roman-numeral-converter 4 | * Jonathan Snook comment @ http://blog.stevenlevithan.com/archives/javascript-roman-numeral-converter#comment-16140 5 | */ 6 | /*jshint jquery:true, unused:false */ 7 | ;(function($) { 8 | 'use strict'; 9 | 10 | // allow lower case roman numerals, since lists use i, ii, iii, etc. 11 | var validator = /^M*(?:D?C{0,3}|C[MD])(?:L?X{0,3}|X[CL])(?:V?I{0,3}|I[XV])$/i, 12 | matcher = /\b([MCDLXVI]+\b)/gi, 13 | lookup = { I:1, V:5, X:10, L:50, C:100, D:500, M:1000 }; 14 | 15 | $.tablesorter.addParser({ 16 | id: 'roman', 17 | is: function() { 18 | return false; 19 | }, 20 | format: function(s) { 21 | var val, 22 | roman = s.toUpperCase().split(''), 23 | num = 0; 24 | 25 | // roman numerals not found! 26 | if ( !(s && validator.test(s)) ) { 27 | return s; 28 | } 29 | 30 | while (roman.length) { 31 | val = lookup[roman.shift()]; 32 | num += val * (val < lookup[roman[0]] ? -1 : 1); 33 | } 34 | 35 | return num; 36 | }, 37 | type: 'numeric' 38 | }); 39 | 40 | $.tablesorter.addParser({ 41 | id: 'roman-ignore', 42 | is: function() { 43 | return false; 44 | }, 45 | format: function(s, table, cell, column) { 46 | var val, orig, 47 | c = table.config, 48 | ignore = $.isArray(c.roman_ignore) ? c.roman_ignore[column] : 0, 49 | // find roman numerals 50 | roman = ( isNaN(ignore) ? 51 | // ignore can be a regex or string 52 | $.trim( s.replace(ignore, '') ) : 53 | // or a number to ignore the last x letters... 54 | $.trim( s.substring(0, s.length - ignore) ) 55 | ).match(matcher), 56 | v = validator.test(roman), 57 | num = 0; 58 | 59 | // roman numerals not found! 60 | if ( !(v) ) { 61 | return s; 62 | } 63 | 64 | // save roman numeral for replacement 65 | orig = roman[0]; 66 | roman = orig.toUpperCase().split(''); 67 | 68 | while (roman.length) { 69 | val = lookup[roman.shift()]; 70 | // ignore non-roman numerals 71 | if (val) { 72 | num += val * (val < lookup[roman[0]] ? -1 : 1); 73 | } 74 | } 75 | 76 | return num ? s.replace(orig, num) : s; 77 | }, 78 | type: 'text' 79 | }); 80 | 81 | $.tablesorter.addParser({ 82 | id: 'roman-extract', 83 | is: function() { 84 | return false; 85 | }, 86 | format: function(s) { 87 | var val, 88 | // find roman numerals 89 | roman = $.grep(s.split(/\b/), function(v) { 90 | return validator.test(v) ? v : ''; 91 | }).join('').match(matcher), 92 | 93 | v = roman ? validator.test(roman) : 0, 94 | num = 0; 95 | 96 | // roman numerals not found! 97 | if ( !(v) ) { 98 | return s; 99 | } 100 | 101 | // save roman numeral for replacement 102 | roman = roman[0].toUpperCase().split(''); 103 | 104 | while (roman.length) { 105 | val = lookup[roman.shift()]; 106 | // ignore non-roman numerals 107 | if (val) { 108 | num += val * (val < lookup[roman[0]] ? -1 : 1); 109 | } 110 | } 111 | 112 | return num ? num : s; 113 | }, 114 | type: 'numeric' 115 | }); 116 | 117 | })(jQuery); 118 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # This repository and old EBI framework is not supported anymore, please update your websites to use new Visual Framework - https://stable.visual-framework.dev/ 2 | 3 | 4 | [![Build Status](https://travis-ci.org/ebiwd/EBI-Framework.svg?branch=v1.4)](https://travis-ci.org/ebiwd/EBI-Framework) 5 | [![Chat for support on Slack](https://img.shields.io/static/v1?label=chat&message=Slack&color=blue)](https://join.slack.com/t/visual-framework/shared_invite/enQtNDAxNzY0NDg4NTY0LWFhMjEwNGY3ZTk3NWYxNWVjOWQ1ZWE4YjViZmY1YjBkMDQxMTNlNjQ0N2ZiMTQ1ZTZiMGM4NjU5Y2E0MjM3ZGQ) 6 | 7 | # The EBI Visual Framework v1.4 8 | 9 | The 1.x version of the Framework is at its end of life. You should only use 1.4 project if you have an existing 1.x project. For new project [you should use 2.0](https://visual-framework.github.io/vf-core/), which [can be used along side 1.x code](https://visual-framework.github.io/vf-core/demos/integration-vf1/). 10 | 11 | ## What's new in v1.4? 12 | 13 | See a [full overview of changes in v1.4 in issue 162](https://github.com/ebiwd/EBI-Framework/issues/162). 14 | 15 | ## Upgrading? 16 | 17 | | Your current version | Effort required | What you'll get | 18 | | ---- | ---- | ---- | 19 | | v1.1 | 1-2 hours | Better performance, a more functional design | 20 | | v1.2 | minutes | Better performance, more design flexibility | 21 | | v1.3 | minutes | Alignment with the VF 2.0 | 22 | 23 | ### Details on upgrading 24 | 25 | - From v1.3: 26 | 1. Update your `v1.3` asset references to `v1.4` 27 | - From v1.2: 28 | 1. Update your `v1.2` asset references to `v1.4` 29 | 1. Remove the reference to `foundation.min.css` or `foundation.css` (this is now included in [`ebi-global.css`](https://ebi.emblstatic.net/web_guidelines/EBI-Framework/v1.4/css/ebi-global.css)) 30 | 1. [Remove the HTML markup](https://github.com/ebiwd/EBI-Style-lab/blob/master/content/pages/websites/sample-site/boilerplate/blank.html#L69) inside your `div#masthead-black-bar`. This will automatically be inserted by `script.js`. 31 | 1. Bonus: you should also [load assets from the EMBL-EBI CDN at ebi.emblstatic.net](https://github.com/ebiwd/EBI-Framework/issues/119) 32 | - From v1.1: 33 | 1. [Follow the update guide from v1.1 to v1.2](https://github.com/ebiwd/EBI-Framework/issues/85) 34 | 2. Then follow the steps above for updating from v1.2 35 | 36 | ## About the EBI Visual Framework 37 | 38 | This project helps ensure brand consistency and the easy use of modern web design best practices -- such as responsive design, iterative maintenance cycles, and UX-tested patterns. 39 | 40 | ## Outreach 41 | 42 | Not all developers are in the same place, so we plan make use of multiple channels: 43 | 44 | - Github: We know many developers already live in the Github ecosystem, so go ahead and [open an issue with your question/comment/concern](https://github.com/ebiwd/EBI-Framework/issues). 45 | - [Web Guidelines Committee](https://www.ebi.ac.uk/seqdb/confluence/display/WGC/): overseeing the tooling for the look, feel and function of EMBL-EBI websites 46 | 47 | #### Deploying with npm 48 | 49 | Releases are available via npm at https://www.npmjs.com/package/ebi-framework 50 | 51 | ## Developing locally 52 | 53 | 1. Edit any CSS or JS and build with `npm run scss` and `npm run js` 54 | 2. Serve index.html 55 | - `npm install -g browser-sync` 56 | - `browser-sync start --files index.html --server` OR: 57 | - `browser-sync start --files local-dev.html --server` 58 | - https://www.browsersync.io/docs/command-line 59 | -------------------------------------------------------------------------------- /css/styleguide/item-components.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | KSS Style Guide 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 |
19 |

KSS Style Guide

20 |
21 | 44 |
45 |
46 | 72 |
73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | -------------------------------------------------------------------------------- /libraries/tablesorter/js/parsers/parser-file-type.js: -------------------------------------------------------------------------------- 1 | /*! Parser: filetype - updated 11/10/2015 (v2.24.4) *//* 2 | * When a file type extension is found, the equivalent name is 3 | * prefixed into the parsed data, so sorting occurs in groups 4 | */ 5 | /*global jQuery: false */ 6 | ;(function($) { 7 | 'use strict'; 8 | 9 | // basic list from http://en.wikipedia.org/wiki/List_of_file_formats 10 | // To add a custom equivalent, define: 11 | // $.tablesorter.fileTypes.equivalents['xx'] = 'A|B|C'; 12 | $.tablesorter.fileTypes = { 13 | // divides filetype extensions in the equivalent list below 14 | separator : '|', 15 | equivalents : { 16 | '3D Image' : '3dm|3ds|dwg|max|obj', 17 | 'Audio' : 'aif|aac|ape|flac|la|m4a|mid|midi|mp2|mp3|ogg|ra|raw|rm|wav|wma', 18 | 'Compressed' : '7z|bin|cab|cbr|gz|gzip|iso|lha|lz|rar|tar|tgz|zip|zipx|zoo', 19 | 'Database' : 'csv|dat|db|dbf|json|ldb|mdb|myd|pdb|sql|tsv|wdb|wmdb|xlr|xls|xlsx|xml', 20 | 'Development' : 'asm|c|class|cls|cpp|cc|cs|cxx|cbp|cs|dba|fla|h|java|lua|pl|py|pyc|pyo|sh|sln|r|rb|vb', 21 | 'Document' : 'doc|docx|odt|ott|pages|pdf|rtf|tex|wpd|wps|wrd|wri', 22 | 'Executable' : 'apk|app|com|exe|gadget|lnk|msi', 23 | 'Fonts' : 'eot|fnt|fon|otf|ttf|woff', 24 | 'Icons' : 'ani|cur|icns|ico', 25 | 'Images' : 'bmp|gif|jpg|jpeg|jpe|jp2|pic|png|psd|tga|tif|tiff|wmf|webp', 26 | 'Presentation' : 'pps|ppt', 27 | 'Published' : 'chp|epub|lit|pub|ppp|fm|mobi', 28 | 'Script' : 'as|bat|cgi|cmd|jar|js|lua|scpt|scptd|sh|vbs|vb|wsf', 29 | 'Styles' : 'css|less|sass', 30 | 'Text' : 'info|log|md|markdown|nfo|tex|text|txt', 31 | 'Vectors' : 'awg|ai|eps|cdr|ps|svg', 32 | 'Video' : 'asf|avi|flv|m4v|mkv|mov|mp4|mpe|mpeg|mpg|ogg|rm|rv|swf|vob|wmv', 33 | 'Web' : 'asp|aspx|cer|cfm|htm|html|php|url|xhtml' 34 | } 35 | }; 36 | 37 | $.tablesorter.addParser({ 38 | id: 'filetype', 39 | is: function() { 40 | return false; 41 | }, 42 | format: function(s, table) { 43 | var t, 44 | c = table.config, 45 | wo = c.widgetOptions, 46 | groupSeparator = wo.group_separator || '-', 47 | i = s.lastIndexOf('.'), 48 | sep = $.tablesorter.fileTypes.separator, 49 | m = $.tablesorter.fileTypes.matching, 50 | types = $.tablesorter.fileTypes.equivalents; 51 | if (!m) { 52 | // make a string to 'quick' match the existing equivalents 53 | t = []; 54 | $.each(types, function(i, v) { 55 | t.push(v); 56 | }); 57 | m = $.tablesorter.fileTypes.matching = sep + t.join(sep) + sep; 58 | } 59 | if (i >= 0) { 60 | t = sep + s.substring(i + 1, s.length) + sep; 61 | if (m.indexOf(t) >= 0) { 62 | for (i in types) { 63 | if ((sep + types[i] + sep).indexOf(t) >= 0) { 64 | // groupSeparator may use a regular expression! 65 | return i + ( groupSeparator.toString().charAt(0) !== '/' ? wo.group_separator : '-' ) + s; 66 | } 67 | } 68 | } 69 | } 70 | return s; 71 | }, 72 | type: 'text' 73 | }); 74 | 75 | // sort by file extension 76 | // converts "this.is.an.image.jpg" into "jpg.this.is.an.image" 77 | $.tablesorter.addParser({ 78 | id: 'file-extension', 79 | is: function() { 80 | return false; 81 | }, 82 | format: function( str ) { 83 | var ext, 84 | parts = str.split( '.' ); 85 | if ( parts.length ) { 86 | ext = parts.pop(); 87 | parts.unshift( ext ); 88 | return parts.join( '.' ); 89 | } 90 | return str; 91 | }, 92 | type: 'text' 93 | }); 94 | 95 | })(jQuery); 96 | -------------------------------------------------------------------------------- /images/logos/EMBL/hexagon-mono-black.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | EMBL-white 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | -------------------------------------------------------------------------------- /libraries/tablesorter/js/parsers/parser-named-numbers.js: -------------------------------------------------------------------------------- 1 | /*! Parser: namedNumbers - updated 10/26/2014 (v2.18.0) *//* 2 | * code modified from http://stackoverflow.com/a/12014376/145346 3 | */ 4 | /*jshint jquery:true */ 5 | ;(function($) { 6 | 'use strict'; 7 | 8 | // Change language of the named numbers as needed 9 | var named = { 10 | negative: [ 'negative', 'minus' ], 11 | numbers : { 12 | 'zero' : 0, 13 | 'one' : 1, 14 | 'two' : 2, 15 | 'three' : 3, 16 | 'four' : 4, 17 | 'five' : 5, 18 | 'six' : 6, 19 | 'seven' : 7, 20 | 'eight' : 8, 21 | 'nine' : 9, 22 | 'ten' : 10, 23 | 'eleven' : 11, 24 | 'twelve' : 12, 25 | 'thirteen' : 13, 26 | 'fourteen' : 14, 27 | 'fifteen' : 15, 28 | 'sixteen' : 16, 29 | 'seventeen' : 17, 30 | 'eighteen' : 18, 31 | 'nineteen' : 19, 32 | 'twenty' : 20, 33 | 'thirty' : 30, 34 | 'forty' : 40, 35 | 'fourty' : 40, // common misspelling 36 | 'fifty' : 50, 37 | 'sixty' : 60, 38 | 'seventy' : 70, 39 | 'eighty' : 80, 40 | 'ninety' : 90 41 | }, 42 | // special case 43 | hundred : 'hundred', 44 | // multiples 45 | powers : { 46 | 'thousand' : 1e3, 47 | 'million' : 1e6, 48 | 'billion' : 1e9, 49 | 'trillion' : 1e12, 50 | 'quadrillion' : 1e15, 51 | 'quintillion' : 1e18, 52 | 'sextillion' : 1e21, 53 | 'septillion' : 1e24, 54 | 'octillion' : 1e27, 55 | 'nonillion' : 1e30, 56 | 'decillion' : 1e33, 57 | 'undecillion' : 1e36, 58 | 'duodecillion' : 1e39, 59 | 'tredecillion' : 1e42, 60 | 'quattuordecillion' : 1e45, 61 | 'quindecillion' : 1e48, 62 | 'sexdecillion' : 1e51, 63 | 'septendecillion' : 1e54, 64 | 'octodecillion' : 1e57, 65 | 'novemdecillion' : 1e60, 66 | 'vigintillion' : 1e63, 67 | 'unvigintillion' : 1e66, 68 | 'duovigintillion' : 1e69, 69 | 'trevigintillion' : 1e72, 70 | 'quattuorvigintillion' : 1e75, 71 | 'quinvigintillion' : 1e78, 72 | 'sexvigintillion' : 1e81, 73 | 'septenvigintillion' : 1e84, 74 | 'octovigintillion' : 1e87, 75 | 'novemvigintillion' : 1e90, 76 | 'trigintillion' : 1e93, 77 | 'untrigintillion' : 1e96, 78 | 'duotrigintillion' : 1e99, 79 | 'googl' : 1e100 80 | } 81 | }, 82 | result, group, 83 | negativeRegex = new RegExp('(' + named.negative.join('|') + ')'), 84 | calc = function ( rawWord, table ) { 85 | // remove extra characters that might be next to the word 86 | var word = rawWord.replace( /[,."']/g, '' ), 87 | // formatFloat will deal with the commas & decimals in the number format 88 | num = $.tablesorter.formatFloat( rawWord || '', table ), 89 | power = named.powers.hasOwnProperty( word ) ? named.powers[ word ] : null; 90 | num = typeof num === 'number' ? num : named.numbers.hasOwnProperty( word ) ? named.numbers[ word ] : null; 91 | if ( num !== null ) { 92 | group += num; 93 | } else if ( word === named.hundred ) { 94 | group *= 100; 95 | } else if ( power !== null ) { 96 | result += group * power; 97 | group = 0; 98 | } 99 | }; 100 | 101 | $.tablesorter.addParser({ 102 | id: 'namedNumbers', 103 | is: function () { 104 | return false; 105 | }, 106 | format: function ( str, table ) { 107 | result = 0; 108 | group = 0; 109 | var indx, 110 | arry = ( str || '' ).split( /[\s-]+/ ), 111 | len = arry.length; 112 | for ( indx = 0; indx < len; indx++ ) { 113 | calc( arry[ indx ].toLowerCase(), table ); 114 | } 115 | result = ( result + group ) * ( str.match( negativeRegex ) ? -1 : 1 ); 116 | // make sure to let zero get parsed, so check hasOwnProperty 117 | return result || named.numbers.hasOwnProperty( str ) ? result : $.tablesorter.formatFloat( str || '', table ); 118 | }, 119 | type: 'numeric' 120 | }); 121 | 122 | })( jQuery ); 123 | -------------------------------------------------------------------------------- /libraries/motion-ui/dist/motion-ui.js: -------------------------------------------------------------------------------- 1 | ;(function(root, factory) { 2 | if (typeof define === 'function' && define.amd) { 3 | define(['jquery'], factory); 4 | } else if (typeof exports === 'object') { 5 | module.exports = factory(require('jquery')); 6 | } else { 7 | root.MotionUI = factory(root.jQuery); 8 | } 9 | }(this, function($) { 10 | 'use strict'; 11 | 12 | // Polyfill for requestAnimationFrame 13 | (function() { 14 | if (!Date.now) 15 | Date.now = function() { return new Date().getTime(); }; 16 | 17 | var vendors = ['webkit', 'moz']; 18 | for (var i = 0; i < vendors.length && !window.requestAnimationFrame; ++i) { 19 | var vp = vendors[i]; 20 | window.requestAnimationFrame = window[vp+'RequestAnimationFrame']; 21 | window.cancelAnimationFrame = (window[vp+'CancelAnimationFrame'] 22 | || window[vp+'CancelRequestAnimationFrame']); 23 | } 24 | if (/iP(ad|hone|od).*OS 6/.test(window.navigator.userAgent) 25 | || !window.requestAnimationFrame || !window.cancelAnimationFrame) { 26 | var lastTime = 0; 27 | window.requestAnimationFrame = function(callback) { 28 | var now = Date.now(); 29 | var nextTime = Math.max(lastTime + 16, now); 30 | return setTimeout(function() { callback(lastTime = nextTime); }, 31 | nextTime - now); 32 | }; 33 | window.cancelAnimationFrame = clearTimeout; 34 | } 35 | })(); 36 | 37 | var initClasses = ['mui-enter', 'mui-leave']; 38 | var activeClasses = ['mui-enter-active', 'mui-leave-active']; 39 | 40 | // Find the right "transitionend" event for this browser 41 | var endEvent = (function() { 42 | var transitions = { 43 | 'transition': 'transitionend', 44 | 'WebkitTransition': 'webkitTransitionEnd', 45 | 'MozTransition': 'transitionend', 46 | 'OTransition': 'otransitionend' 47 | } 48 | var elem = window.document.createElement('div'); 49 | 50 | for (var t in transitions) { 51 | if (typeof elem.style[t] !== 'undefined') { 52 | return transitions[t]; 53 | } 54 | } 55 | 56 | return null; 57 | })(); 58 | 59 | function animate(isIn, element, animation, cb) { 60 | element = $(element).eq(0); 61 | 62 | if (!element.length) return; 63 | 64 | if (endEvent === null) { 65 | isIn ? element.show() : element.hide(); 66 | cb(); 67 | return; 68 | } 69 | 70 | var initClass = isIn ? initClasses[0] : initClasses[1]; 71 | var activeClass = isIn ? activeClasses[0] : activeClasses[1]; 72 | 73 | // Set up the animation 74 | reset(); 75 | element.addClass(animation); 76 | element.css('transition', 'none'); 77 | requestAnimationFrame(function() { 78 | element.addClass(initClass); 79 | if (isIn) element.show(); 80 | }); 81 | 82 | // Start the animation 83 | requestAnimationFrame(function() { 84 | element[0].offsetWidth; 85 | element.css('transition', ''); 86 | element.addClass(activeClass); 87 | }); 88 | 89 | // Clean up the animation when it finishes 90 | element.one('transitionend', finish); 91 | 92 | // Hides the element (for out animations), resets the element, and runs a callback 93 | function finish() { 94 | if (!isIn) element.hide(); 95 | reset(); 96 | if (cb) cb.apply(element); 97 | } 98 | 99 | // Resets transitions and removes motion-specific classes 100 | function reset() { 101 | element[0].style.transitionDuration = 0; 102 | element.removeClass(initClass + ' ' + activeClass + ' ' + animation); 103 | } 104 | } 105 | 106 | var MotionUI = { 107 | animateIn: function(element, animation, cb) { 108 | animate(true, element, animation, cb); 109 | }, 110 | 111 | animateOut: function(element, animation, cb) { 112 | animate(false, element, animation, cb); 113 | } 114 | } 115 | 116 | return MotionUI; 117 | })); 118 | -------------------------------------------------------------------------------- /css/ebi-css-build/_ebi_color_styles.scss: -------------------------------------------------------------------------------- 1 | @mixin ebi-color-styles { 2 | h1, h2, h3, h4, h5, h6 { color: $body-font-color; } 3 | 4 | a, 5 | a:hover, 6 | a:focus, 7 | a:active { 8 | color: $body-font-color; 9 | } 10 | a:visited { color: $ebi-colour-dark-grey; } 11 | 12 | .text-highlight { 13 | color: $ebi-colour-light; 14 | background-color: $ebi-colour-dark-grey; 15 | padding: 0 0.2em; 16 | } 17 | 18 | .callout { background: $ebi-colour-light-grey; border: none; } 19 | div.warning { border: none; } 20 | 21 | .ebi-background { 22 | @at-root a#{&}, &, &.button, &.button:hover, &.tag { background: $ebi-colour-main; } 23 | } 24 | .services-background { 25 | @at-root a#{&}, &, &.button, &.button:hover, &.tag { background: $ebi-colour-services; } 26 | } 27 | .research-background { 28 | @at-root a#{&}, &, &.button, &.button:hover, &.tag { background: $ebi-colour-research; } 29 | } 30 | .training-background { 31 | @at-root a#{&}, &, &.button, &.button:hover, &.tag { background: $ebi-colour-training; } 32 | } 33 | .industry-background { 34 | @at-root a#{&}, &, &.button, &.button:hover, &.tag { background: $ebi-colour-industry; } 35 | } 36 | .elixir-background { 37 | @at-root a#{&}, &,, &.button, &.button:hover, &.tag { background: $ebi-colour-elixir; } 38 | } 39 | .white-background { 40 | @at-root a#{&}, &, &.button, &.button:hover, &.tag { background: $ebi-colour-white; } 41 | } 42 | .black-background { 43 | @at-root a#{&}, &, &.button, &.button:hover, &.tag { background: $black; } 44 | } 45 | .secondary-background { 46 | @at-root a#{&}, &, &.button, &.button:hover, &.tag { background: $ebi-colour-dark-grey; } 47 | } 48 | .tag.secondary { background: $ebi-colour-dark-grey; } 49 | .medium-gray-background { 50 | @at-root a#{&}, &, &.button, &.button:hover, &.tag { background: $ebi-colour-medium-grey; } 51 | } 52 | 53 | .ebi-color { 54 | @at-root .label#{&}, .button#{&}, a#{&}, a:hover#{&}, &, & cite, & a, & a:hover, & a:visited, & h3, & h4 { 55 | color: $ebi-colour-petrol; 56 | } 57 | } 58 | .services-color { 59 | @at-root .label#{&}, .button#{&}, a#{&}, a:hover#{&}, &, & cite, & a, & a:hover, & a:visited, & h3, & h4 { 60 | color: $ebi-colour-services; 61 | } 62 | } 63 | .research-color { 64 | @at-root .label#{&}, .button#{&}, a#{&}, a:hover#{&}, &, & cite, & a, & a:hover, & a:visited, & h3, & h4 { 65 | color: $ebi-colour-light-green; 66 | } 67 | } 68 | .training-color { 69 | @at-root .label#{&}, .button#{&}, a#{&}, a:hover#{&}, &, & cite, & a, & a:hover, & a:visited, & h3, & h4 { 70 | color: $ebi-colour-training; 71 | } 72 | } 73 | .industry-color { 74 | @at-root .label#{&}, .button#{&}, a#{&}, a:hover#{&}, &, & cite, & a, & a:hover, & a:visited, & h3, & h4 { 75 | color: $ebi-colour-industry; 76 | } 77 | } 78 | .elixir-color { 79 | @at-root .label#{&}, .button#{&}, a#{&}, a:hover#{&}, &, & cite, & a, & a:hover, & a:visited, & h3, & h4 { 80 | color: $ebi-colour-elixir; 81 | } 82 | } 83 | .white-color { 84 | @at-root .label#{&}, .button#{&}, a#{&}, a:hover#{&}, &, & cite, & a, & a:hover, & a:visited, & h3, & h4 { 85 | color: $ebi-colour-white; 86 | } 87 | } 88 | .black-color { 89 | @at-root .label#{&}, .button#{&}, a#{&}, a:hover#{&}, &, & cite, & a, & a:hover, & a:visited, & h3, & h4 { 90 | color: $black; 91 | } 92 | } 93 | .secondary-color { 94 | @at-root .label#{&}, .button#{&}, a#{&}, a:hover#{&}, &, & cite, & a, & a:hover, & a:visited, & h3, & h4 { 95 | color: $ebi-colour-dark-grey; 96 | } 97 | } 98 | .medium-gray-color { 99 | @at-root .label#{&}, .button#{&}, a#{&}, a:hover#{&}, &, & cite, & a, & a:hover, & a:visited, & h3, & h4 { 100 | color: $ebi-colour-medium-grey; 101 | } 102 | } 103 | } 104 | -------------------------------------------------------------------------------- /js/elixirBanner.min.js: -------------------------------------------------------------------------------- 1 | function elixirBanner(){try{var divElixirBanner=document.getElementById("elixir-banner");if(divElixirBanner){var defaultName="This",defaultDescription="This is part of the ELIXIR distributed infrastructure for life-science information.",basicStylingForNonfoundationSites="",defaultLogo="https://ebi.emblstatic.net/web_guidelines/EBI-Framework/v1.2/images/logos/assorted/elixir_kitemark-60px.png",defaultLink="https://www.elixir-europe.org/about-us/why-needed",defaultTextColor="#fff",defaultColor="blue";void 0!==divElixirBanner.dataset.color&&(defaultTextColor="transparent"==(defaultColor="none"==(defaultColor="blue"==(defaultColor="green"==(defaultColor="grey"==(defaultColor="orange"==(defaultColor=divElixirBanner.dataset.color)?"rgb(244,125,32)":defaultColor)?"rgb(77,77,72)":defaultColor)?"rgb(190,191,50)":defaultColor)?"rgb(79,138,156)":defaultColor)?"transparent":defaultColor)?"#222":defaultTextColor),void 0!==divElixirBanner.dataset.name&&(defaultName=divElixirBanner.dataset.name),"true"==divElixirBanner.dataset.useCdrLogo&&(defaultLogo="https://ebi.emblstatic.net/web_guidelines/EBI-Framework/v1.4/images/logos/ELIXIR/elixir-cdr.gif"),void 0!==divElixirBanner.dataset.description&&(defaultDescription=divElixirBanner.dataset.description),void 0!==divElixirBanner.dataset.moreInformationLink&&(defaultLink=divElixirBanner.dataset.moreInformationLink),"true"===divElixirBanner.dataset.useBasicStyles&&(basicStylingForNonfoundationSites="\n .elixir-ribbon {\n font-family: Helvetica, Arial, FreeSans, 'Liberation Sans', sans-serif;\n clear: both;\n }\n\n .elixir-ribbon a, .elixir-ribbon a:active, .elixir-ribbon a:visited, .elixir-ribbon a:hover {\n border-bottom: none;\n }\n\n .elixir-ribbon .row {\n max-width: 1200px;\n margin: 0 auto 1rem;\n }\n\n .elixir-ribbon .row::before,\n .elixir-ribbon .row::after {\n display: table;\n content: ' ';\n }\n\n .elixir-ribbon h5 {\n font-size: 1.3rem;\n padding: 0;\n display: inline-block;\n }\n ");var html='\n \n\n \n ';divElixirBanner.innerHTML=html}}catch(err){console.log(err)}}elixirBanner(); -------------------------------------------------------------------------------- /libraries/tablesorter/js/widgets/widget-headerTitles.js: -------------------------------------------------------------------------------- 1 | /*! Widget: headerTitles - updated 11/10/2015 (v2.24.4) *//* 2 | * Requires tablesorter v2.8+ and jQuery 1.7+ 3 | * by Rob Garrison 4 | */ 5 | /*jshint browser:true, jquery:true, unused:false */ 6 | /*global jQuery: false */ 7 | ;(function($) { 8 | 'use strict'; 9 | var ts = $.tablesorter; 10 | 11 | ts.addWidget({ 12 | id: 'headerTitles', 13 | options: { 14 | // use aria-label text 15 | // e.g. 'First Name: Ascending sort applied, activate to apply a descending sort' 16 | headerTitle_useAria : false, 17 | // add tooltip class 18 | headerTitle_tooltip : '', 19 | // custom titles [ ascending, descending, unsorted ] 20 | headerTitle_cur_text : [ ' sort: A - Z', ' sort: Z - A', 'ly unsorted' ], 21 | headerTitle_cur_numeric : [ ' sort: 0 - 9', ' sort: 9 - 0', 'ly unsorted' ], 22 | headerTitle_nxt_text : [ ' sort: A - Z', ' sort: Z - A', 'remove sort' ], 23 | headerTitle_nxt_numeric : [ ' sort: 0 - 9', ' sort: 9 - 0', 'remove sort' ], 24 | 25 | // title display; {prefix} adds above prefix 26 | // {type} adds the current sort order from above (text or numeric) 27 | // {next} adds the next sort direction using the sort order above 28 | headerTitle_output_sorted : 'current{current}; activate to {next}', 29 | headerTitle_output_unsorted : 'current{current}; activate to {next} ', 30 | headerTitle_output_nosort : 'No sort available', 31 | // use this type to override the parser detection result 32 | // e.g. use for numerically parsed columns (e.g. dates), but you 33 | // want the user to see a text sort, e.g. [ 'text', 'numeric' ] 34 | headerTitle_type : [], 35 | // manipulate the title as desired 36 | headerTitle_callback : null // function($cell, txt) { return txt; } 37 | }, 38 | init: function(table, thisWidget, c, wo) { 39 | // force refresh 40 | c.$table.on('refreshHeaderTitle', function() { 41 | thisWidget.format(table, c, wo); 42 | }); 43 | // add tooltip class 44 | if ($.isArray(wo.headerTitle_tooltip)) { 45 | c.$headers.each(function() { 46 | $(this).addClass( wo.headerTitle_tooltip[this.column] || '' ); 47 | }); 48 | } else if (wo.headerTitle_tooltip !== '') { 49 | c.$headers.addClass( wo.headerTitle_tooltip ); 50 | } 51 | }, 52 | format: function (table, c, wo) { 53 | var txt; 54 | c.$headers.each(function() { 55 | var $this = $(this), 56 | col = parseInt( $this.attr( 'data-column' ), 10 ), 57 | sortType = wo.headerTitle_type[ col ] || c.parsers[ col ].type || 'text', 58 | sortDirection = $this.hasClass(ts.css.sortAsc) ? 0 : $this.hasClass(ts.css.sortDesc) ? 1 : 2, 59 | sortNext = c.sortVars[ col ].order[ ( c.sortVars[ col ].count + 1 ) % ( c.sortReset ? 3 : 2 ) ]; 60 | if (wo.headerTitle_useAria) { 61 | txt = $this.attr('aria-label') || wo.headerTitle_output_nosort || ''; 62 | } else { 63 | txt = (wo.headerTitle_prefix || '') + // now deprecated 64 | ($this.hasClass('sorter-false') ? wo.headerTitle_output_nosort : 65 | ts.isValueInArray( col, c.sortList ) >= 0 ? wo.headerTitle_output_sorted : wo.headerTitle_output_unsorted); 66 | txt = txt.replace(/\{(current|next|name)\}/gi, function(m) { 67 | return { 68 | '{name}' : $this.text(), 69 | '{current}' : wo[ 'headerTitle_cur_' + sortType ][ sortDirection ] || '', 70 | '{next}' : wo[ 'headerTitle_nxt_' + sortType ][ sortNext ] || '' 71 | }[m.toLowerCase()]; 72 | }); 73 | } 74 | $this.attr('title', $.isFunction(wo.headerTitle_callback) ? wo.headerTitle_callback($this, txt) : txt); 75 | }); 76 | }, 77 | remove: function (table, c, wo) { 78 | c.$headers.attr('title', ''); 79 | c.$table.off('refreshHeaderTitle'); 80 | // remove tooltip class 81 | if ($.isArray(wo.headerTitle_tooltip)) { 82 | c.$headers.each(function() { 83 | $(this).removeClass( wo.headerTitle_tooltip[this.column] || '' ); 84 | }); 85 | } else if (wo.headerTitle_tooltip !== '') { 86 | c.$headers.removeClass( wo.headerTitle_tooltip ); 87 | } 88 | } 89 | }); 90 | 91 | })(jQuery); 92 | -------------------------------------------------------------------------------- /libraries/LiveFilter/README.md: -------------------------------------------------------------------------------- 1 | # License Information 2 | LiveFilter jQuery Plugin 3 | https://github.com/mikemerritt/LiveFilter 4 | 5 | COPYRIGHT (c) 2010-2012 Mike Merritt 6 | http://www.mikemerritt.me 7 | 8 | The terms of this software are described in the file LICENSE, which you should have received as 9 | part of this distribution. Redistributions of files must retain the above copyright notice. 10 | 11 | # Description 12 | LiveFilter is a jQuery plugin that can be used to sort lists of data in realtime, as you type. 13 | 14 | # How to Use 15 | LiveFilter expects your list to use a certain HTML structure. It can be used on ordered/unordered lists and tables. Your list must reside inside of a div that the plugin will be targeting. An example of the structure is below. 16 | 17 | ```html 18 |
19 | 20 | 21 |
    22 |
  • List Item
  • 23 |
  • List Item
  • 24 |
  • List Item
  • 25 |
  • List Item
  • 26 |
  • List Item
  • 27 |
  • List Item
  • 28 |
29 |
30 | ``` 31 | 32 | If your list follows the proper structure like above, you can then call the `liveFilter()` function on the wrapping div like so. 33 | 34 | ```html 35 | 38 | ```` 39 | 40 | If you need custom settings you can set them like this. 41 | 42 | ```html 43 | 54 | ``` 55 | 56 | The full list of available properties, their defaults and what they expect are listed below. 57 | 58 | + delay - A delay between when typing starts and when the list starts to filter. 59 | + Default: 0 60 | + Expects: Number 61 | + defaultText - The default text inside of the text input. 62 | + Default: 'Type to Filter:' 63 | + Exepcts: String 64 | + hideDefault - Hides the full list by default. 65 | + Default: False 66 | + Expects: True/False 67 | + addInputs - Will automatically add text and reset inputs inside the wrapping div. 68 | + Default: False 69 | + Expects: True/False 70 | + noMatches - Will display text if no matches are found. 71 | + Default: 'No Matches' 72 | + Expects: String 73 | + zebra - An object for all zebra-striping settings. 74 | + enabled - Toggles zebra-striping on/off. 75 | + Default: False 76 | + Expects: True/False 77 | + baseColor - The base color to be used for zebra striping. 78 | + Default: False 79 | + Expects: False/Hex color string. 80 | + altColor - The alternate color for zebra striping. 81 | + Default: False 82 | + Expects: False/Hex color string. 83 | 84 | # Changelog 85 | 86 | + Version 1.4 87 | + Refactored code & updated for jQuery 1.7. 88 | + Added "No matches" text. 89 | + Added Non-consecutive search. E.g. A filter of "hot mustard" would match the list item "hot dog with mustard" 90 | + Changed zebra-striping options 91 | + Performance improvements. 92 | + Fixed hideDefault so that when no filter is supplied it will revert back to it's hidden state. 93 | + Updated readme. 94 | 95 | + Version 1.3 96 | + Completely re-written from scratch. 97 | + Added delay feature to increase performance during fast typing. 98 | + Added default text option which adds default text to text inputs. 99 | + Added an option to allow hiding of the list/table as the default state. 100 | + Added the ability zebra stripe a list/table that also keeps it's correct striping as it is filtered. 101 | + Added an option to automatically generate text and reset inputs in the wrapping div. 102 | 103 | + Version 1.2 104 | + Performance and flexibility improvments. 105 | + Improved table support. 106 | + Added optional filter animations. 107 | + Intelligent element detection. 108 | 109 | + Version 1.1 110 | + Added support for filtering tables. 111 | + Code optimizations. 112 | 113 | + Version 1.0.1 114 | + Fixed an expression compatibility issue with jQuery 1.3.x 115 | 116 | + Version 1.0.0 117 | + Initial Version. -------------------------------------------------------------------------------- /libraries/tablesorter/js/parsers/parser-metric.js: -------------------------------------------------------------------------------- 1 | /*! Parser: metric *//* 2 | * Demo: http://jsfiddle.net/Mottie/abkNM/382/ 3 | * Set the metric name in the header (defaults to 'm|meter'), e.g. 4 | * HDD Size 5 | * Distance 6 | */ 7 | /*jshint jquery:true */ 8 | ;( function( $ ) { 9 | 'use strict'; 10 | 11 | var prefixes = { 12 | // 'prefix' : [ base 10, base 2 ] 13 | // skipping IEEE 1541 defined prefixes: kibibyte, mebibyte, etc, for now. 14 | 'Y|Yotta|yotta' : [ 1e24, Math.pow(1024, 8) ], // 1024^8 15 | 'Z|Zetta|zetta' : [ 1e21, Math.pow(1024, 7) ], // 1024^7 16 | 'E|Exa|exa' : [ 1e18, Math.pow(1024, 6) ], // 1024^6 17 | 'P|Peta|peta' : [ 1e15, Math.pow(1024, 5) ], // 1024^5 18 | 'T|Tera|tera' : [ 1e12, Math.pow(1024, 4) ], // 1024^4 19 | 'G|Giga|giga' : [ 1e9, Math.pow(1024, 3) ], // 1024^3 20 | 'M|Mega|mega' : [ 1e6, Math.pow(1024, 2) ], // 1024^2 21 | 'k|Kilo|kilo' : [ 1e3, 1024 ], // 1024 22 | // prefixes below here are rarely, if ever, used in binary 23 | 'h|hecto' : [ 1e2, 1e2 ], 24 | 'da|deka' : [ 1e1, 1e1 ], 25 | 'd|deci' : [ 1e-1, 1e-1 ], 26 | 'c|centi' : [ 1e-2, 1e-2 ], 27 | 'm|milli' : [ 1e-3, 1e-3 ], 28 | 'µ|micro' : [ 1e-6, 1e-6 ], 29 | 'n|nano' : [ 1e-9, 1e-9 ], 30 | 'p|pico' : [ 1e-12, 1e-12 ], 31 | 'f|femto' : [ 1e-15, 1e-15 ], 32 | 'a|atto' : [ 1e-18, 1e-18 ], 33 | 'z|zepto' : [ 1e-21, 1e-21 ], 34 | 'y|yocto' : [ 1e-24, 1e-24 ] 35 | }, 36 | // the \\d+ will not catch digits with spaces, commas or decimals; so use the value from n instead 37 | RegLong = '(\\d+)(\\s+)?([Zz]etta|[Ee]xa|[Pp]eta|[Tt]era|[Gg]iga|[Mm]ega|kilo|hecto|deka|deci|centi|milli|micro|nano|pico|femto|atto|zepto|yocto)(', 38 | RegAbbr = '(\\d+)(\\s+)?(Z|E|P|T|G|M|k|h|da|d|c|m|µ|n|p|f|a|z|y)(', 39 | // make these case-insensitive because we all forget the case for these binary values 40 | byteTest = /^[b|bit|byte|o|octet]/i; 41 | 42 | $.tablesorter.addParser({ 43 | id: 'metric', 44 | is: function() { 45 | return false; 46 | }, 47 | format: function(txt, table, cell, cellIndex) { 48 | var unit, isBinary, nameLong, nameAbbr, 49 | // default base unit name 50 | base = 'm|meter', 51 | // process number here to get a numerical format (us or eu) 52 | num = $.tablesorter.formatFloat( txt.replace(/[^\w,. \-()]/g, ''), table ), 53 | $t = table.config.$headerIndexed[ cellIndex ], 54 | regex = $t.data( 'metric' ); 55 | if ( !regex ) { 56 | // stored values 57 | unit = ( $t.attr('data-metric-name') || base ).split( '|' ); 58 | nameLong = $t.attr( 'data-metric-name-full' ) || ''; 59 | nameAbbr = $t.attr( 'data-metric-name-abbr' ) || ''; 60 | regex = [ nameLong || unit[1] || unit[0].substring(1), nameAbbr || unit[0] ]; 61 | isBinary = byteTest.test( regex.join( '' ) ); 62 | // adding 'data-metric-name-full' which would contain 'byte|BYTE|Byte' etc 63 | regex[2] = new RegExp( RegLong + ( 64 | ( nameLong === '' ? '' : nameLong + '|' + nameAbbr ) || 65 | // with data-metric-name='b|byte', we end up with 'b|B|byte|BYTE' - maybe not the best solution for case-insensitivity 66 | ( ( isBinary ? regex[0].toLowerCase() + '|' + regex[0].toUpperCase() : regex[0] ) + '|' + 67 | ( isBinary ? regex[1].toLowerCase() + '|' + regex[1].toUpperCase() : regex[1] ) ) ) + 68 | ')' ); 69 | // adding 'data-metric-name-abbr' which would contain 'b|B' etc 70 | regex[3] = new RegExp( RegAbbr + ( nameAbbr || 71 | ( ( isBinary ? regex[1].toLowerCase() + '|' + regex[1].toUpperCase() : regex[1] ) ) ) + 72 | ')' ); 73 | $t.data( 'metric', regex ); 74 | } 75 | // find match to full name or abbreviation 76 | unit = txt.match( regex[2] ) || txt.match( regex[3] ); 77 | if ( unit ) { 78 | for ( base in prefixes ) { 79 | if ( unit[3].match( base ) ) { 80 | // exception when using binary prefix 81 | // change base for binary use 82 | isBinary = byteTest.test( unit[4] ) ? 1 : 0; 83 | return num * prefixes[ base ][ isBinary ]; 84 | } 85 | } 86 | } 87 | return num; 88 | }, 89 | type: 'numeric' 90 | }); 91 | 92 | })(jQuery); 93 | -------------------------------------------------------------------------------- /images/logos/EMBL/EMBL-mono-black.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | EMBL-white 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 75 | 76 | 77 | 78 | -------------------------------------------------------------------------------- /libraries/tablesorter/js/extras/jquery.metadata.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Metadata - jQuery plugin for parsing metadata from elements 3 | * 4 | * Copyright (c) 2006 John Resig, Yehuda Katz, Jörn Zaefferer, Paul McLanahan 5 | * 6 | * Dual licensed under the MIT and GPL licenses: 7 | * http://www.opensource.org/licenses/mit-license.php 8 | * http://www.gnu.org/licenses/gpl.html 9 | * 10 | */ 11 | 12 | /** 13 | * Sets the type of metadata to use. Metadata is encoded in JSON, and each property 14 | * in the JSON will become a property of the element itself. 15 | * 16 | * There are three supported types of metadata storage: 17 | * 18 | * attr: Inside an attribute. The name parameter indicates *which* attribute. 19 | * 20 | * class: Inside the class attribute, wrapped in curly braces: { } 21 | * 22 | * elem: Inside a child element (e.g. a script tag). The 23 | * name parameter indicates *which* element. 24 | * 25 | * The metadata for an element is loaded the first time the element is accessed via jQuery. 26 | * 27 | * As a result, you can define the metadata type, use $(expr) to load the metadata into the elements 28 | * matched by expr, then redefine the metadata type and run another $(expr) for other elements. 29 | * 30 | * @name $.metadata.setType 31 | * 32 | * @example

This is a p

33 | * @before $.metadata.setType("class") 34 | * @after $("#one").metadata().item_id == 1; $("#one").metadata().item_label == "Label" 35 | * @desc Reads metadata from the class attribute 36 | * 37 | * @example

This is a p

38 | * @before $.metadata.setType("attr", "data") 39 | * @after $("#one").metadata().item_id == 1; $("#one").metadata().item_label == "Label" 40 | * @desc Reads metadata from a "data" attribute 41 | * 42 | * @example

This is a p

43 | * @before $.metadata.setType("elem", "script") 44 | * @after $("#one").metadata().item_id == 1; $("#one").metadata().item_label == "Label" 45 | * @desc Reads metadata from a nested script element 46 | * 47 | * @param String type The encoding type 48 | * @param String name The name of the attribute to be used to get metadata (optional) 49 | * @cat Plugins/Metadata 50 | * @descr Sets the type of encoding to be used when loading metadata for the first time 51 | * @type undefined 52 | * @see metadata() 53 | */ 54 | 55 | (function($) { 56 | 57 | $.extend({ 58 | metadata : { 59 | defaults : { 60 | type: 'class', 61 | name: 'metadata', 62 | cre: /(\{.*\})/, 63 | single: 'metadata' 64 | }, 65 | setType: function( type, name ){ 66 | this.defaults.type = type; 67 | this.defaults.name = name; 68 | }, 69 | get: function( elem, opts ){ 70 | var data, m, e, attr, 71 | settings = $.extend({},this.defaults,opts); 72 | // check for empty string in single property 73 | if ( !settings.single.length ) { settings.single = 'metadata'; } 74 | 75 | data = $.data(elem, settings.single); 76 | // returned cached data if it already exists 77 | if ( data ) { return data; } 78 | 79 | data = "{}"; 80 | 81 | if ( settings.type === "class" ) { 82 | m = settings.cre.exec( elem.className ); 83 | if ( m ) { data = m[1]; } 84 | } else if ( settings.type === "elem" ) { 85 | if( !elem.getElementsByTagName ) { return undefined; } 86 | e = elem.getElementsByTagName(settings.name); 87 | if ( e.length ) { data = $.trim(e[0].innerHTML); } 88 | } else if ( elem.getAttribute !== undefined ) { 89 | attr = elem.getAttribute( settings.name ); 90 | if ( attr ) { data = attr; } 91 | } 92 | 93 | if ( data.indexOf( '{' ) <0 ) { data = "{" + data + "}"; } 94 | 95 | /*jshint evil:true */ 96 | data = eval("(" + data + ")"); 97 | 98 | $.data( elem, settings.single, data ); 99 | return data; 100 | } 101 | } 102 | }); 103 | 104 | /** 105 | * Returns the metadata object for the first member of the jQuery object. 106 | * 107 | * @name metadata 108 | * @descr Returns element's metadata object 109 | * @param Object opts An object contianing settings to override the defaults 110 | * @type jQuery 111 | * @cat Plugins/Metadata 112 | */ 113 | $.fn.metadata = function( opts ){ 114 | return $.metadata.get( this[0], opts ); 115 | }; 116 | 117 | })(jQuery); -------------------------------------------------------------------------------- /libraries/tablesorter/js/widgets/widget-staticRow.js: -------------------------------------------------------------------------------- 1 | /*! widget: staticRow - updated 10/31/2015 (v2.24.0) *//* 2 | * Version 1.2 mod by Rob Garrison (requires tablesorter v2.16+) 3 | * Requires: 4 | * jQuery v1.4+ 5 | * tablesorter plugin, v2.8+, available at http://mottie.github.com/tablesorter/docs/ 6 | * 7 | * Copyright (c) 2011 Nils Luxton 8 | * Licensed under the MIT license: 9 | * http://www.opensource.org/licenses/mit-license.php 10 | * 11 | */ 12 | /*jshint browser:true, jquery:true, unused:false */ 13 | /*global jQuery: false */ 14 | ;(function($) { 15 | 'use strict'; 16 | var ts = $.tablesorter, 17 | 18 | // add/refresh row indexes 19 | addIndexes = function(table) { 20 | var $tr, wo, v, indx, rows, 21 | c = table.config; 22 | // 'Index' the static rows, saving their current (starting) position in the 23 | // table inside a data() param on the element itself for later use. 24 | if (c) { 25 | wo = c.widgetOptions; 26 | c.$tbodies.each(function() { 27 | $tr = $(this).children(); 28 | rows = $tr.length; 29 | $tr.filter(wo.staticRow_class).each(function() { 30 | $tr = $(this); 31 | indx = $tr.data(wo.staticRow_index); 32 | if (typeof indx !== 'undefined') { 33 | v = parseFloat(indx); 34 | // percentage of total rows 35 | indx = (/%/.test(indx)) ? Math.round(v / 100 * rows) : v; 36 | } else { 37 | indx = $tr.index(); 38 | } 39 | // row indexing starts over within each tbody 40 | $tr.data( wo.staticRow_data, indx ); 41 | }); 42 | }); 43 | } 44 | }; 45 | 46 | ts.addWidget({ 47 | // Give the new Widget an ID to be used in the tablesorter() call, as follows: 48 | // $('#myElement').tablesorter({ widgets: ['zebra', 'staticRow'] }); 49 | id: 'staticRow', 50 | 51 | options: { 52 | staticRow_class : '.static', 53 | staticRow_data : 'static-index', 54 | staticRow_index : 'row-index', 55 | staticRow_event : 'staticRowsRefresh' 56 | }, 57 | 58 | init: function(table, thisWidget, c, wo) { 59 | addIndexes(table); 60 | // refresh static rows after updates 61 | c.$table 62 | .unbind( ('updateComplete.tsstaticrows ' + wo.staticRow_event).replace(/\s+/g, ' ') ) 63 | .bind('updateComplete.tsstaticrows ' + wo.staticRow_event, function() { 64 | addIndexes(table); 65 | ts.applyWidget( table ); 66 | }); 67 | }, 68 | 69 | format: function(table, c, wo) { 70 | // Loop thru static rows, moving them to their original 'indexed' position, 71 | // & repeat until no more re-shuffling is needed 72 | var targetIndex, $thisRow, indx, numRows, $tbody, hasShuffled, $rows, max; 73 | 74 | c.$tbodies.each(function() { 75 | $tbody = $.tablesorter.processTbody(table, $(this), true); // remove tbody 76 | hasShuffled = true; 77 | indx = 0; 78 | $rows = $tbody.children(wo.staticRow_class); 79 | numRows = $tbody.children('tr').length - 1; 80 | max = $rows.length; 81 | 82 | // don't allow the while loop to cycle more times than the set number of static rows 83 | while (hasShuffled && indx < max) { 84 | hasShuffled = false; 85 | /*jshint loopfunc:true */ 86 | $rows.each(function() { 87 | targetIndex = $(this).data(wo.staticRow_data); 88 | // allow setting target index >> num rows to always make a row last 89 | targetIndex = targetIndex >= numRows ? numRows : targetIndex < 0 ? 0 : targetIndex; 90 | if (targetIndex !== $(this).index()) { 91 | hasShuffled = true; 92 | $thisRow = $(this).detach(); 93 | 94 | if (targetIndex >= numRows) { 95 | // Are we trying to be the last row? 96 | $thisRow.appendTo( $tbody ); 97 | } else if (targetIndex === 0) { 98 | // Are we trying to be the first row? 99 | $thisRow.prependTo( $tbody ); 100 | } else { 101 | // No, we want to be somewhere in the middle! 102 | $thisRow.insertBefore( $tbody.find('tr:eq(' + targetIndex + ')') ); 103 | } 104 | } 105 | }); 106 | indx++; 107 | } 108 | 109 | $.tablesorter.processTbody(table, $tbody, false); // restore tbody 110 | }); 111 | 112 | c.$table.triggerHandler('staticRowsComplete', table); 113 | }, 114 | 115 | remove : function(table, c, wo) { 116 | c.$table.unbind( ('updateComplete.tsstaticrows ' + wo.staticRow_event).replace(/\s+/g, ' ') ); 117 | } 118 | 119 | }); 120 | 121 | })(jQuery); 122 | -------------------------------------------------------------------------------- /css/styleguide/kss-assets/scrollspy.js: -------------------------------------------------------------------------------- 1 | (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o scrollTop); 116 | }; 117 | 118 | ScrollSpy.prototype.markNav = function (elems) { 119 | var navItems = this.nav, 120 | isAlreadyMarked = false; 121 | 122 | for (var i = 0, max = navItems.length; i < max; i++) { 123 | if (elems.viewStatusList[i] && !isAlreadyMarked) { 124 | isAlreadyMarked = true; 125 | navItems[i].classList.add(this.className); 126 | } else { 127 | navItems[i].classList.remove(this.className); 128 | } 129 | } 130 | }; 131 | 132 | 133 | module.exports = ScrollSpy; 134 | 135 | },{}],2:[function(require,module,exports){ 136 | (function (global){ 137 | /** 138 | * ScrollSpy 139 | * 140 | */ 141 | 142 | var ScrollSpy = require('./modules/scrollspy'); 143 | 144 | global.ScrollSpy = module.exports = ScrollSpy; 145 | 146 | }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) 147 | },{"./modules/scrollspy":1}]},{},[2]); 148 | -------------------------------------------------------------------------------- /css/ebi-code.css: -------------------------------------------------------------------------------- 1 | /* Pygments CSS code highlighting */ 2 | /* Base styles via default.css: https://github.com/richleland/pygments-css */ 3 | .highlight .hll { background-color: #ffffcc } 4 | .highlight { background: #f8f8f8; } 5 | .highlight .c { color: #408080; font-style: italic } /* Comment */ 6 | .highlight .err { border: 1px solid #FF0000 } /* Error */ 7 | .highlight .k { color: #008000; font-weight: bold } /* Keyword */ 8 | .highlight .o { color: #666666 } /* Operator */ 9 | .highlight .ch { color: #408080; font-style: italic } /* Comment.Hashbang */ 10 | .highlight .cm { color: #408080; font-style: italic } /* Comment.Multiline */ 11 | .highlight .cp { color: #BC7A00 } /* Comment.Preproc */ 12 | .highlight .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */ 13 | .highlight .c1 { color: #408080; font-style: italic } /* Comment.Single */ 14 | .highlight .cs { color: #408080; font-style: italic } /* Comment.Special */ 15 | .highlight .gd { color: #A00000 } /* Generic.Deleted */ 16 | .highlight .ge { font-style: italic } /* Generic.Emph */ 17 | .highlight .gr { color: #FF0000 } /* Generic.Error */ 18 | .highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ 19 | .highlight .gi { color: #00A000 } /* Generic.Inserted */ 20 | .highlight .go { color: #888888 } /* Generic.Output */ 21 | .highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */ 22 | .highlight .gs { font-weight: bold } /* Generic.Strong */ 23 | .highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ 24 | .highlight .gt { color: #0044DD } /* Generic.Traceback */ 25 | .highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */ 26 | .highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */ 27 | .highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */ 28 | .highlight .kp { color: #008000 } /* Keyword.Pseudo */ 29 | .highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */ 30 | .highlight .kt { color: #B00040 } /* Keyword.Type */ 31 | .highlight .m { color: #666666 } /* Literal.Number */ 32 | .highlight .s { color: #BA2121 } /* Literal.String */ 33 | .highlight .na { color: #7D9029 } /* Name.Attribute */ 34 | .highlight .nb { color: #008000 } /* Name.Builtin */ 35 | .highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */ 36 | .highlight .no { color: #880000 } /* Name.Constant */ 37 | .highlight .nd { color: #AA22FF } /* Name.Decorator */ 38 | .highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */ 39 | .highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */ 40 | .highlight .nf { color: #0000FF } /* Name.Function */ 41 | .highlight .nl { color: #A0A000 } /* Name.Label */ 42 | .highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */ 43 | .highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */ 44 | .highlight .nv { color: #19177C } /* Name.Variable */ 45 | .highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */ 46 | .highlight .w { color: #bbbbbb } /* Text.Whitespace */ 47 | .highlight .mb { color: #666666 } /* Literal.Number.Bin */ 48 | .highlight .mf { color: #666666 } /* Literal.Number.Float */ 49 | .highlight .mh { color: #666666 } /* Literal.Number.Hex */ 50 | .highlight .mi { color: #666666 } /* Literal.Number.Integer */ 51 | .highlight .mo { color: #666666 } /* Literal.Number.Oct */ 52 | .highlight .sa { color: #BA2121 } /* Literal.String.Affix */ 53 | .highlight .sb { color: #BA2121 } /* Literal.String.Backtick */ 54 | .highlight .sc { color: #BA2121 } /* Literal.String.Char */ 55 | .highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */ 56 | .highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */ 57 | .highlight .s2 { color: #BA2121 } /* Literal.String.Double */ 58 | .highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */ 59 | .highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */ 60 | .highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */ 61 | .highlight .sx { color: #008000 } /* Literal.String.Other */ 62 | .highlight .sr { color: #BB6688 } /* Literal.String.Regex */ 63 | .highlight .s1 { color: #BA2121 } /* Literal.String.Single */ 64 | .highlight .ss { color: #19177C } /* Literal.String.Symbol */ 65 | .highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */ 66 | .highlight .fm { color: #0000FF } /* Name.Function.Magic */ 67 | .highlight .vc { color: #19177C } /* Name.Variable.Class */ 68 | .highlight .vg { color: #19177C } /* Name.Variable.Global */ 69 | .highlight .vi { color: #19177C } /* Name.Variable.Instance */ 70 | .highlight .vm { color: #19177C } /* Name.Variable.Magic */ 71 | .highlight .il { color: #666666 } /* Literal.Number.Integer.Long */ 72 | -------------------------------------------------------------------------------- /images/logos/EMBL-EBI/EMBL_EBI_Logo_black.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | -------------------------------------------------------------------------------- /css/ebi-css-build/_embl_selector.scss: -------------------------------------------------------------------------------- 1 | // Custom tag class for Foundation-based EBI framework 2 | 3 | //// 4 | /// @group embl-selector 5 | //// 6 | 7 | /// Classses to theme the embl dropdown selector for the .masthead-black-bar 8 | @mixin embl-selector { 9 | 10 | .masthead-black-bar { 11 | // peeking animation for black bar 12 | transition: border-width 0.25s ease-in-out; 13 | border-top: 0 solid #EEE; 14 | 15 | &.peek { 16 | border-top: 4px solid #EEE; 17 | } 18 | 19 | li.embl-selector { 20 | //margin-left: 0.5rem; 21 | //border-left: .5px solid rgba(255,255,255,.5); 22 | padding-left: 0.5rem; 23 | } 24 | 25 | .embl-bar { 26 | background-color: #eee; 27 | color: #222; 28 | a { 29 | color: #222; 30 | } 31 | a:hover { border-bottom: 1px solid #fff; } 32 | .youarehere { 33 | margin-left: -1.5rem; 34 | } 35 | } 36 | 37 | 38 | .dropdown-pane.embl-dropdown { 39 | left: 0; //fix position of menu, to prevent horizontal scrolling of page 40 | 41 | background-color: $ebi-colour-dark; 42 | background-position: 100% 100%; 43 | background-repeat: no-repeat; 44 | color: #fff; 45 | min-width: 30em; 46 | left: 0; //fix position of menu, to prevent horizontal scrolling of page 47 | 48 | h6 { color: white; font-weight: 700; } 49 | .button { color: #007c82; background: #fff; } 50 | a { border-bottom: 1px dashed $ebi-colour-dark-grey; } 51 | a:hover { border-bottom: 1px solid $ebi-colour-dark-grey; } 52 | } 53 | @media screen and (max-width: 39.9375em) { 54 | .dropdown-pane.embl-dropdown { 55 | // do not show embl-dropdown on small screens at all 56 | display: none; 57 | width: 0 !important; 58 | overflow: hidden; 59 | } 60 | } 61 | 62 | .embl-selector { 63 | .button, 64 | .button.hover, 65 | .button:focus, 66 | .button:hover { 67 | background: no-repeat 100% 50% url("../images/logos/EMBL/EMBL-white.svg"); 68 | padding-left: 2px; 69 | background-size: 62px; 70 | width: 63px; 71 | padding-right: 17px; 72 | line-height: 12px; 73 | } 74 | .button.hover, 75 | .button:hover { 76 | cursor: s-resize; 77 | background-color: transparent; 78 | } 79 | .button[aria-expanded="false"]::after { 80 | content: ''; 81 | display: block; 82 | width: 0; 83 | height: 0; 84 | border: inset 4px; 85 | border-color: #fff transparent transparent; 86 | border-top-style: solid; 87 | position: absolute; 88 | top: 18px; 89 | margin-left: 55px; 90 | } 91 | 92 | &.embl-ebi { 93 | .button, 94 | .button.hover, 95 | .button:focus, 96 | .button:hover { 97 | background: no-repeat 4px 50% url("../images/logos/EMBL-EBI/EMBL_EBI_Logo_white.svg"); 98 | padding-left: 95px; 99 | background-size: 100px; 100 | } 101 | } 102 | 103 | &.active { 104 | background-color: #ddd; 105 | padding-right: 1rem; 106 | .button, 107 | .button.hover, 108 | .button:focus, 109 | .button:hover { 110 | cursor: n-resize; 111 | background-image: url("../images/logos/EMBL/EMBL-black.svg"); 112 | } 113 | } 114 | 115 | &.active.embl-ebi { 116 | .button, 117 | .button.hover, 118 | .button:focus, 119 | .button:hover { 120 | background-image: url("../images/logos/EMBL-EBI/EMBL_EBI_Logo_black.svg"); 121 | } 122 | } 123 | 124 | } 125 | 126 | // begin to hide bits of dropdown toggle as screen shrinks 127 | @media screen and (max-width: 53em) { 128 | li.embl-selector { padding-left: .5rem; } 129 | .embl-selector .button { width: 0px; padding-right:1rem; overflow: hidden; } 130 | .embl-selector .button:after { display: none; } 131 | nav ul.menu li a { padding-right: .35rem; padding-left: .35rem;} 132 | } 133 | } 134 | } 135 | .custom-ebi-logo-bg { 136 | background: no-repeat 3px 48% url("../images/logos/EMBL-EBI/EMBL_EBI_Logo_white.svg"); 137 | background-size: 90px; 138 | padding-left: 95px; 139 | width: 133px; 140 | } 141 | .custom-ebi-logo-bg-transparent-text { 142 | color: transparent !important; 143 | //font-size: 0 !important; 144 | } 145 | .input-group { 146 | display: inline-flex !important; 147 | width: 95%; 148 | } 149 | @media only screen and (max-width: 600px) { 150 | .input-group { 151 | width: 88% !important; 152 | margin-left: -19% !important; 153 | } 154 | } 155 | -------------------------------------------------------------------------------- /images/logos/EMBL-EBI/EMBL_EBI_Logo_white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | --------------------------------------------------------------------------------