class NavigationDocument { constructor(el) { this.el = $(el); } get id() { return this.el.find('[data-document-id]').data().documentId; } setAsHighlighted() { this.el.find('li.al-collection-context').addClass('al-hierarchy-highlight'); } makeCollapsible() { this.el.find('li.al-collection-context').addClass('collapsible'); } collapse() { this.el.find('li.al-collection-context').addClass('collapsed'); } render() { return this.el.html(); } } /** * Models the "Expand"/"Collapse" button, and provides an onClick event handler * for the jQuery element * @class */ class ExpandButton { /** * This retrieves the
  • elements which are hidden/rendered in response to * clicking the `); this.handleClick = this.handleClick.bind(this); this.$el.click(this.handleClick); } } /** * Models the placeholder display elements for content loading from AJAX * requests * @class */ class Placeholder { /* * Builds the element set which contains the placeholder markup * classes */ /* eslint-disable class-methods-use-this */ buildElement() { const elementMarkup = '
    ' + '

    ' + '

    ' + '

    ' + '

    ' + '
    '; const markup = Array(3).join(elementMarkup); return $(markup); } /* eslint-enable class-methods-use-this */ /* * @constructor */ constructor() { this.$el = this.buildElement(); } } class ContextNavigation { constructor(el, originalParents = null, originalDocument = null) { this.el = $(el); this.data = this.el.data(); this.parentLi = this.el.parent(); this.eadid = this.data.arclight.eadid; this.originalParents = originalParents; // let originalParents stay null this.originalDocument = originalDocument || this.data.arclight.originalDocument; this.ul = $(''); } // Gets the targetId to select, based off of parents and current level get targetId() { if (this.originalParents && this.originalParents[this.data.arclight.level]) { return `${this.eadid}${this.originalParents[this.data.arclight.level]}`; } return this.data.arclight.originalDocument; } get requestParent() { // Cases where you're viewing a component page (use its ancestor trail)... if (this.originalParents && this.originalParents[this.data.arclight.level - 1]) { return this.originalParents[this.data.arclight.level - 1]; } // Cases where there are no parents provided... // 1) when on a top-level collection page // 2) when +/- gets clicked return this.data.arclight.originalDocument.replace(this.eadid, ''); } getData() { const that = this; // Add a placeholder so flashes of text are not as significant const placeholder = new Placeholder(); this.el.after(placeholder.$el); $.ajax({ url: this.data.arclight.path, data: { 'f[component_level_isim][]': this.data.arclight.level, 'f[has_online_content_ssim][]': this.data.arclight.access, 'f[collection_sim][]': this.data.arclight.name, 'f[parent_ssi][]': this.requestParent, search_field: this.data.arclight.search_field, original_parents: this.data.arclight.originalParents, original_document: this.originalDocument, view: 'collection_context' } }).done((response) => that.updateView(response)); } /** * Constructs a