import {nativeVlElement, define} from '/node_modules/vl-ui-core/dist/vl-core.js';
/**
* VlSearchResult
* @class
* @classdesc Een zoekresultaat als onderdeel van de zoekresultaten.
*
* @extends HTMLElement
* @mixes vlElement
*
* @see {@link https://www.github.com/milieuinfo/webcomponent-vl-ui-search-results/releases/latest|Release notes}
* @see {@link https://www.github.com/milieuinfo/webcomponent-vl-ui-search-results/issues|Issues}
* @see {@link https://webcomponenten.omgeving.vlaanderen.be/demo/vl-search-results.html|Demo}
*/
export class VlSearchResult extends nativeVlElement(HTMLLIElement) {
get _classPrefix() {
return 'vl-search-result';
}
get _sectionElement() {
return this.querySelector('.vl-search-result');
}
get _titleElement() {
return this.querySelector('.vl-search-result__title');
}
get _titleLinkElement() {
return this._titleElement?.querySelector(':scope > * ') || this.querySelector('a');
}
get _metaDataContainerElement() {
return this.querySelector('p.vl-search-result__content-group');
}
get _metaDataElement() {
return this._metaDataContainerElement?.querySelector(':scope > *') || this.querySelector(':scope > *:nth-child(2)');
}
get _contentContainerElements() {
return this.querySelectorAll('div.vl-search-result__content-group');
}
get _contentElements() {
return this.querySelectorAll('dl');
}
get _sectionTemplate() {
return `<section class="vl-search-result"></section>`;
}
get _titleTemplate() {
return `<h3 class="vl-search-result__title"></h3>`;
}
get _metaDataContainerTemplate() {
return `<p class="vl-search-result__content-group"></p>`;
}
get _contentContainerTemplate() {
return `<div class="vl-search-result__content-group"></div>`;
}
connectedCallback() {
this._processChildren();
}
_processChildren() {
this._appendSection();
this._processTitle();
this._processMetaData();
this._processContent();
}
_appendSection() {
this.insertAdjacentHTML('afterbegin', this._sectionTemplate);
}
_processTitle() {
if (this._titleLinkElement) {
this._sectionElement.insertAdjacentHTML('beforeend', this._titleTemplate);
this._titleElement.appendChild(this._titleLinkElement);
this._setTitleClasses();
}
}
_processMetaData() {
if (this._metaDataElement) {
this._sectionElement.insertAdjacentHTML('beforeend', this._metaDataContainerTemplate);
this._metaDataContainerElement.appendChild(this._metaDataElement);
this._setMetaDataClasses();
}
}
_processContent() {
this._contentElements.forEach((element) => {
const container = this._template(this._contentContainerTemplate).firstElementChild;
container.appendChild(element);
this._setContentClasses(element);
this._sectionElement.insertAdjacentElement('beforeend', container);
});
}
_setMetaDataClasses() {
this._metaDataElement.classList.add(`${this._classPrefix}__meta-data`);
}
_setTitleClasses() {
this._titleLinkElement.classList.add(`${this._classPrefix}__title__link`);
}
_setContentClasses(element) {
const dlClass = `${this._classPrefix}__description-list`;
element.classList.add(dlClass);
element.querySelectorAll('dt').forEach((dt) => dt.classList.add(`${dlClass}__description`));
}
}
define('vl-search-result', VlSearchResult, {extends: 'li'});