beta This component version is ready to be used but is still in active development.

EMBL ContentHub Loader component utility

Use this component to remotely load markup and content from the central EMBL ContentHub, this particular component allows reuse and distribution of content ranging articles to navigation elements (such as a global footer).

github location npm version


Currently this is done as HTML imports (see the code example) + some JS. In the future other methods will be support (such as JSON).


After loading from contentHub, this component will also invoke these functions on child content:

  • vf-banner/vf-banner
  • vf-tabs/vf-tabs
  • embl-conditional-edit/embl-conditional-edit
  • embl-notifications/embl-notifications

Supported patterns

See the introductory text on the contentHub.

Standard HTML import

Load a content and pattern through the contentHub:

<link rel="import" href="" data-target="self" data-embl-js-content-hub-loader>


There are optional features specified by data attributes, looks like:

<link rel="import" href="[changed]=DESC&orcid=0000-0002-2524-5026&source=contenthub" data-target="publications-block" data-embl-js-content-hub-loader-no-content="No publications were found." data-embl-js-content-hub-loader-no-content-hide=".publications-container" data-embl-js-content-hub-loader>


  • data-target="publications-block": pass the class of an element to insert text into
  • data-embl-js-content-hub-loader-no-content="No publications were found.": String to use if no results found, can also pass true to use default no match text
  • data-embl-js-content-hub-loader-no-content-hide=".publications-container": If no results, hide an element that matches this selector selector
  • data-inject-class="vf-grid vf-grid__col-2" data-inject-class-target="ul": Inject class(es) to a an element inside the returned content


Below we do a sample import from the ContentHub:

<div class="embl-content-hub-loader">
  <p>Below we do a sample import from the ContentHub:</p>
  <link rel="import" href="" data-target="self" data-embl-js-content-hub-loader>



Installation info

This repository is distributed with npm. After installing npm and yarn, you can install with this command.

$ yarn add --dev @visual-framework/embl-content-hub-loader


The style files included are written in Sass. If you're using a VF-core project, you can import it like this:

@import "@visual-framework/embl-content-hub-loader/index.scss";

Make sure you import Sass requirements along with the modules. You can use a project boilerplate or the vf-sass-starter




  • contentHub html responses are nested deep in many layers of divs, so we ensure a default vf--stack applies to grid containers.


  • Avoid a null variable issue when contentHub returns no results.


  • adds overrides for more permutations of where the vf-global header lives


  • Improve JS module import support.


  • Fix a bug when vfBanner or vfTabs are not present


  • JS linting


  • invoke emblContentHubSignalFinished() even in cases where there was nothing to load


  • Fix detection of no response from the contentHub for embl-js-content-hub-loader-no-content and embl-js-content-hub-loader-no-content-hide

1.0.4 (2020-03-20)

  • adds support to load embl-notifications component


  • adds features for when no content is returned. Supply "no content found" text or hide a region

1.0.1 (2019)

  • adds CSS for times when the *-content-hub-html is a direct child of vf-body

1.0.0 (2019-12-17)

  • Initial stable release


File system location: components/embl-content-hub-loader

Find an issue on this page? Propose a change or discuss it.