diff --git a/services/web/public/coffee/directives/bookmarkableTabset.coffee b/services/web/public/coffee/directives/bookmarkableTabset.coffee new file mode 100644 index 0000000000..d5b80f23d2 --- /dev/null +++ b/services/web/public/coffee/directives/bookmarkableTabset.coffee @@ -0,0 +1,38 @@ +define [ + "base" +], (App) -> + App.directive "bookmarkableTabset", ($location, _) -> + restrict: "A" + require: "tabset" + link: (scope, el, attrs, tabset) -> + linksToTabs = document.querySelectorAll(".link-to-tab"); + _clickLinkToTab = (event) -> + _makeActive(event.currentTarget.getAttribute("href").replace('#', '')) + + _makeActive = (hash) -> + if hash? and hash != "" + matchingTab = _.find tabset.tabs, (tab) -> + tab.bookmarkableTabId == hash + if matchingTab? + matchingTab.select() + el.children()[0].scrollIntoView({ behavior: "smooth" }) + + for link in linksToTabs + link.addEventListener("click", _clickLinkToTab) + + scope.$applyAsync () -> + # for page load + hash = $location.hash() + _makeActive(hash) + + App.directive "bookmarkableTab", ($location) -> + restrict: "A" + require: "tab" + link: (scope, el, attrs, tab) -> + tabScope = el.isolateScope() + tabId = attrs.bookmarkableTab + if tabScope? and tabId? and tabId != "" + tabScope.bookmarkableTabId = tabId + tabScope.$watch "active", (isActive, wasActive) -> + if isActive and !wasActive and $location.hash() != tabId + $location.hash tabId diff --git a/services/web/public/coffee/main.coffee b/services/web/public/coffee/main.coffee index 49b211b0aa..c44c7ba6ed 100644 --- a/services/web/public/coffee/main.coffee +++ b/services/web/public/coffee/main.coffee @@ -24,6 +24,7 @@ define [ "main/affiliations/controllers/UserAffiliationsController" "main/affiliations/factories/UserAffiliationsDataService" "main/keys" + "main/cms/blog" "main/cms/index" "analytics/AbTestingManager" "directives/asyncForm" @@ -36,6 +37,7 @@ define [ "directives/selectAll" "directives/maxHeight" "directives/creditCards" + "directives/bookmarkableTabset" "services/queued-http" "services/validateCaptcha" "filters/formatDate"