| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- import _ from 'lodash'
- import App from '../base'
- App.directive('bookmarkableTabset', $location => ({
- restrict: 'A',
- require: 'tabset',
- link(scope, el, attrs, tabset) {
- const _makeActive = function (hash) {
- if (hash && hash !== '') {
- const matchingTab = _.find(
- tabset.tabs,
- tab => tab.bookmarkableTabId === hash
- )
- if (matchingTab) {
- matchingTab.select()
- return el.children()[0].scrollIntoView({ behavior: 'smooth' })
- }
- }
- }
- scope.$applyAsync(function () {
- // for page load
- const hash = $location.hash()
- _makeActive(hash)
- // for links within page to a tab
- // this needs to be within applyAsync because there could be a link
- // within a tab to another tab
- const linksToTabs = document.querySelectorAll('.link-to-tab')
- const _clickLinkToTab = event => {
- const hash = event.currentTarget.getAttribute('href').split('#').pop()
- _makeActive(hash)
- }
- if (linksToTabs) {
- Array.from(linksToTabs).map(link =>
- link.addEventListener('click', _clickLinkToTab)
- )
- }
- })
- },
- }))
- App.directive('bookmarkableTab', $location => ({
- restrict: 'A',
- require: 'tab',
- link(scope, el, attrs, tab) {
- const tabScope = el.isolateScope()
- const tabId = attrs.bookmarkableTab
- if (tabScope && tabId && tabId !== '') {
- tabScope.bookmarkableTabId = tabId
- tabScope.$watch('active', function (isActive, wasActive) {
- if (isActive && !wasActive && $location.hash() !== tabId) {
- return $location.hash(tabId)
- }
- })
- }
- },
- }))
|