├── .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 = '';
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 |
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 | [](https://travis-ci.org/ebiwd/EBI-Framework)
5 | [](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 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
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 |
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 |
--------------------------------------------------------------------------------