const PREFIX = "OpenSearch "; const tpl = ` `; class VersionSelector extends HTMLElement { static get observedAttributes() { return ['selected']; } constructor() { super(); this.attachShadow({mode: 'open'}); this._onBlur = (e => { this._expand(false); this.removeEventListener('blur', this._onBlur); }).bind(this); } async connectedCallback() { const {shadowRoot} = this; const frag = this._makeFragment(tpl); frag.querySelector('#selected').textContent = `${PREFIX}${this.getAttribute('selected')}`; const pathName = location.pathname.replace(/\/docs(\/((latest|\d+\.\d+)\/?)?)?/, ''); const versionsDOMText = DOC_VERSIONS.map((v, idx) => `${PREFIX}${v}`) .join(''); frag.querySelector('#dropdown').appendChild(this._makeFragment(versionsDOMText)); frag.querySelector('#spacer').appendChild(this._makeFragment(versionsDOMText)); shadowRoot.appendChild(frag); this._instrument(shadowRoot); } _instrument(shadowRoot) { shadowRoot.querySelector('#root').addEventListener('click', e => { this._expand(this.getAttribute('aria-expanded') !== 'true'); }); } _expand(flag) { this.setAttribute('aria-expanded', flag); if (flag) this.addEventListener('blur', this._onBlur); } _makeFragment(html) { return document.createRange().createContextualFragment(html); } } customElements.define('version-selector', VersionSelector);