'use strict';

import { $, $$ } from './util.js';

export default class NavHighlighter {
    /**
     * Hightlight section in viewport in sidebar, using in-view library.
     * @param {string} sectionAttr - Data attribute of sections.
     * @param {string} navAttr - Data attribute of navigation items.
     * @param {string} activeClass – Class name of active element.
     */
    constructor(sectionAttr, navAttr, activeClass = 'is-active') {
        this.sections = [...$$(`[${navAttr}]`)];
        // highlight first item regardless
        if (this.sections.length) this.sections[0].classList.add(activeClass);
        this.navAttr = navAttr;
        this.sectionAttr = sectionAttr;
        this.activeClass = activeClass;
        if (window.inView) inView(`[${sectionAttr}]`)
            .on('enter', this.highlightSection.bind(this));
    }

    /**
     * Check if section in view exists in sidebar and mark as active.
     * @param {node} section - The section in view.
     */
    highlightSection(section) {
        const id = section.getAttribute(this.sectionAttr);
        const el = $(`[${this.navAttr}="${id}"]`);
        if (el) {
            this.sections.forEach(el => el.classList.remove(this.activeClass));
            el.classList.add(this.activeClass);
        }
    }
}