Sha256: 51f3f87c73770cd8d0224b41e9c86d54e0ce0489820daca3da9d24806a407f9c
Contents?: true
Size: 1.46 KB
Versions: 7
Compression:
Stored size: 1.46 KB
Contents
import { Controller } from "@hotwired/stimulus"; export default class MainController extends Controller { static get targets() { return ["tab", "link"]; } connect() { let tabs = this.tabNames(); if (tabs.length > 0) { let initTab = null; const tabExpression = /#(.*)$/; if (document.location.toString().match(tabExpression)) { let id = document.location.toString().match(tabExpression)[1]; if (tabs.indexOf(id) !== -1) { initTab = id; } } this.showTab(initTab || tabs[0]); } window.addEventListener("popstate", this.stateHandler.bind(this)); } disconnect() { window.removeEventListener("popstate", this.stateHandler.bind(this)); } stateHandler(evt) { if (evt.state && evt.state.tabId) { this.showTab(evt.state.tabId); } } changeTab(evt) { evt.preventDefault(); const tab = evt.target.dataset.tab; this.showTab(tab); history.pushState({ tabId: tab }, "", `${window.location.pathname}#${tab}`); } showTab(tab) { this.linkTargets.forEach((l) => { if (l.dataset.tab == tab) { l.classList.add("current"); } else { l.classList.remove("current"); } }); this.tabTargets.forEach((t) => { if (t.dataset.tab == tab) { t.classList.remove("hidden"); } else { t.classList.add("hidden"); } }); } tabNames () { return this.linkTargets.map((l) => l.dataset.tab); } }
Version data entries
7 entries across 7 versions & 1 rubygems