import {UIEventSource} from "../UIEventSource"; import LayoutConfig from "../../Customizations/JSON/LayoutConfig"; import Translations from "../../UI/i18n/Translations"; import Locale from "../../UI/i18n/Locale"; import {UIElement} from "../../UI/UIElement"; import TagRenderingAnswer from "../../UI/Popup/TagRenderingAnswer"; import {ElementStorage} from "../ElementStorage"; import Combine from "../../UI/Base/Combine"; class TitleElement extends UIElement { private readonly _layoutToUse: UIEventSource; private readonly _selectedFeature: UIEventSource; private readonly _allElementsStorage: ElementStorage; constructor(layoutToUse: UIEventSource, selectedFeature: UIEventSource, allElementsStorage : ElementStorage) { super(layoutToUse); this._layoutToUse = layoutToUse; this._selectedFeature = selectedFeature; this._allElementsStorage = allElementsStorage; this.ListenTo(Locale.language); this.dumbMode = false; } InnerRender(): string { const defaultTitle = Translations.WT(this._layoutToUse.data?.title)?.txt ?? "MapComplete" const feature = this._selectedFeature.data; if(feature === undefined){ return defaultTitle; } const layout = this._layoutToUse.data; const properties = this._selectedFeature.data.properties; for (const layer of layout.layers) { if(layer.title === undefined){ continue; } if (layer.overpassTags.matchesProperties(properties)) { const title = new TagRenderingAnswer( this._allElementsStorage.getEventSourceFor(feature), layer.title ) return new Combine([defaultTitle," | ", title]).Render(); } } return defaultTitle; } } export default class TitleHandler { constructor(layoutToUse: UIEventSource, selectedFeature: UIEventSource, allElementsStorage : ElementStorage) { new TitleElement(layoutToUse, selectedFeature, allElementsStorage) .addCallbackAndRun(contents => { const d = document.createElement('div'); d.innerHTML = contents; // We pass everything into a div to strip out images etc... document.title = (d.textContent || d.innerText); }); } }