private void ActivateTab(int newActiveTabIdx) { _activeTab = newActiveTabIdx; _tabContentContainer.RemoveAllChildren(); _tabHandleContainer.Children[_activeTab].ClassList.Add(Magics.CssClassActive); var activeTabContent = _tabContents[_activeTab]; _tabContentContainer.AppendChild(activeTabContent); }
private HorizontalTabbedView(Action <HorizontalTabbedView> addTabs) { _container = new HTMLDivElement { Id = UniqueIdGenerator.GenerateAsString(), ClassName = GetType().FullName }; _tabHandleContainer = new HTMLDivElement { ClassName = Magics.CssClassTabHandleContainer }; _tabContentContainer = new HTMLDivElement { ClassName = Magics.CssClassTabContentContainer }; _container.AppendChild(_tabHandleContainer); _container.AppendChild(_tabContentContainer); _tabHandleContainer.OnClick += ev => { if (!ev.HasHtmlTarget()) { return; } var target = ev.HtmlTarget(); if (target == _tabHandleContainer) { return; } var newActiveTabHandle = target.GetParentElementHavingParent(_tabHandleContainer); var newActiveTabIdx = _tabHandleContainer.Children.IndexOfUsingEquals(newActiveTabHandle); if (_activeTab == newActiveTabIdx) { Logger.Debug(GetType(), "already active tab selected {0}", _activeTab); return; } Logger.Debug(GetType(), "switching tab from {0} to {1}", _activeTab, newActiveTabIdx); if (newActiveTabIdx < 0 || newActiveTabIdx >= _tabContents.Count) { Logger.Error(GetType(), "there's no tab at index {0}. ignoring tab switch", newActiveTabIdx); return; } if (_activeTab >= 0) { _tabHandleContainer.Children[_activeTab].ClassList.Remove(Magics.CssClassActive); _tabContentContainer.RemoveAllChildren(); } ActivateTab(newActiveTabIdx); }; addTabs(this); DocumentUtil.AddElementAttachedToDocumentListener(_container, () => { if (_measured) { return; } var formerlyFocused = Document.ActiveElement; Logger.Debug(GetType(), "Measuring tab heights in onAttached"); // measure tab content var oldVis = _tabContentContainer.Style.Visibility; _tabContentContainer.Style.Visibility = Visibility.Hidden; _tabContents.ForEachI((i, tab) => { _tabContentContainer.RemoveAllChildren(); _tabContentContainer.AppendChild(tab); }); _tabContentContainer.RemoveAllChildren(); _tabContentContainer.Style.Visibility = oldVis; _measured = true; //assure that focused element within tab stays focused(it may have been lost during measurement process above) if (_tabContents.Any()) { ActivateTab(_activeTab); if (formerlyFocused != Document.ActiveElement) { formerlyFocused.TryFocusElement(); } } }); //activate first tab if (_tabContents.Any()) { ActivateTab(0); } }