import { Dropdown } from "bootstrap"; import NoteContextAwareWidget from "./note_context_aware_widget.js"; import { getAvailableLocales, type Locale } from "../services/i18n.js"; import { t } from "i18next"; import type { EventData } from "../components/app_context.js"; import type FNote from "../entities/fnote.js"; const TPL = `\ `; export default class NoteLanguageWidget extends NoteContextAwareWidget { private dropdown!: Dropdown; private $noteLanguageDropdown!: JQuery; private $noteLanguageButton!: JQuery; private $noteLanguageDesc!: JQuery; doRender() { this.$widget = $(TPL); this.dropdown = Dropdown.getOrCreateInstance(this.$widget.find("[data-bs-toggle='dropdown']")[0]); this.$widget.on("show.bs.dropdown", () => this.renderDropdown()); this.$noteLanguageDropdown = this.$widget.find(".note-language-dropdown") this.$noteLanguageButton = this.$widget.find(".note-language-button"); this.$noteLanguageDesc = this.$widget.find(".note-language-desc"); } renderDropdown() { this.$noteLanguageDropdown.empty(); if (!this.note) { return; } const locales: (Locale | "---")[] = [ { id: "", name: t("note_language.not_set") }, "---", ...getAvailableLocales() ]; for (const locale of locales) { if (typeof locale === "object") { const $title = $("").text(locale.name); const $link = $('') .attr("data-language", locale.id) .append(' ') .append($title); this.$noteLanguageDropdown.append($link); } else { this.$noteLanguageDropdown.append(''); } } } async refreshWithNote(note: FNote) { this.$noteLanguageDesc.text(t("note_language.not_set")); } async entitiesReloadedEvent({ loadResults }: EventData<"entitiesReloaded">) { if (loadResults.isNoteReloaded(this.noteId)) { this.refresh(); } } }