Home Reference Source

js/template/LanguageListTemplate.js

import Template, { TemplateType } from '~/template/Template';
import LanguageTemplate from '~/template/LanguageTemplate';

/**
 * A template representing a list of {@link LanguageTemplate} objects.
 */
export default class LanguageListTemplate extends Template {
    /**
     * Creates a LanuageListTemplate stub. Use state transitions to set values.
     */
    constructor() {
        let root = <ul class="lang-list"></ul>;
        super(root);

        this._list = root;
        this._langs = [];
    }

    /**
     * Appends a language to the list.
     * @param {Language} language Lang
     */
    appendLanguage(language) {
        let lang = new LanguageTemplate(language).loadInContext(this._list);
        this._langs.push(lang);
        return lang;
    }

    /**
     * Removes all the languages from the list.
     */
    clearList() {
        while (this._langs.length > 0) {
            let lang = this._langs.pop();
            lang.parentNode.removeChild(lang);
        }
    }
}