blob: ad8e523a0c8b6815a3139d363a759fc131221436 [file] [log] [blame]
// Licensed under the Apache License, Version 2.0 (the 'License'); you may not
// use this file except in compliance with the License. You may obtain a copy of
// the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an 'AS IS' BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// License for the specific language governing permissions and limitations under
// the License.
$(document).ready(function () {
function Navbar(conf) {
var idCTA = conf["classNameCTA"],
idContainer = conf["classNameContainer"],
idNavMask = conf["classNameMask"],
idBackCTA = conf["classNameBackCTA"],
idSectionNav = conf["classNameSectionNav"],
idNavItemTitleCollapsible = conf["classNameNavItemTitleCollapsible"],
classNavItemCollapsible = conf["classNameNavItemCollapsible"],
classNavActiveItem = conf["classNameNavActiveItem"];
var CONST = {
ACTIVE_CLASS: "active",
EXPANDED_CLASS: "expanded",
DESKTOP_BREAKPOINT: 1024,
OPEN_CLASS: "open"
};
var expandCollapseItem = function (item, effect) {
var sectionNav = item.parent('li'),
expanded = sectionNav.hasClass(CONST.EXPANDED_CLASS),
sectionNavList = item.next('ul');
if (expanded) {
if (effect) {
sectionNavList.slideUp().fadeOut(600);
} else {
sectionNavList.hide();
}
sectionNav.removeClass(CONST.EXPANDED_CLASS);
} else {
if (effect) {
sectionNavList.slideDown().fadeIn(600);
} else {
sectionNavList.show();
}
sectionNav.addClass(CONST.EXPANDED_CLASS);
}
};
return {
"idCTA": idCTA,
"idContainer": idContainer,
"idNavMask": idNavMask,
"idSectionNav": idSectionNav,
"idBackCTA": idBackCTA,
"hasSectionNav": false,
"setCollapsibleBehaviourItems": function () {
$("." + idNavItemTitleCollapsible).click(function (e) {
var item = $(e.target);
expandCollapseItem(item, true);
e.stopPropagation();
});
},
"setActiveItemClassEvent": function () {
$("." + idSectionNav + " a").click(function (e) {
var currentItem = document.querySelector(classNavActiveItem);
if (currentItem)
currentItem.classList.remove(CONST.ACTIVE_CLASS);
e.target.classList.add(CONST.ACTIVE_CLASS);
});
},
"displayActiveItem": function () {
const currentLocation = window.location.pathname + window.location.hash;
var activeItem = document.querySelectorAll("nav [href='" + currentLocation + "']");
if (activeItem && activeItem.length > 0) {
activeItem = activeItem[0];
activeItem.classList.add(CONST.ACTIVE_CLASS);
var collapsibleParents = $(activeItem).parents('li' + classNavItemCollapsible);
for (var i = 0; collapsibleParents.length > i; i++) {
var item = $(collapsibleParents[i]).find('span')[0];
expandCollapseItem($(item), false);
}
}
},
"bindEvents": function () {
var _self = this;
var sectionNavEl = $("." + idSectionNav);
var sectionNavHeight = $(sectionNavEl).height();
var mainContent = $(".container-main-content");
mainContent.css({"min-height": sectionNavHeight});
sectionNavEl.css({"max-height": mainContent.css("height")});
$(window).resize(function () {
if ($(window).width() > CONST.DESKTOP_BREAKPOINT) {
var sectionNavHeight = $(sectionNavEl).height();
$(".container-main-content").css({"min-height": sectionNavHeight});
} else {
$(".container-main-content").css({"min-height": ''});
}
});
if (_self.hasSectionNav) {
$("." + _self.idCTA).click(function (el) {
$("." + _self.idNavMask).addClass(CONST.OPEN_CLASS);
$("." + _self.idSectionNav).addClass(CONST.OPEN_CLASS);
});
$("." + _self.idBackCTA).click(function (el) {
$("." + _self.idSectionNav).removeClass(CONST.OPEN_CLASS);
$("." + _self.idContainer).addClass(CONST.OPEN_CLASS);
});
} else {
$("." + _self.idCTA).click(function (el) {
$("." + _self.idNavMask).addClass(CONST.OPEN_CLASS);
$("." + _self.idContainer).addClass(CONST.OPEN_CLASS);
});
}
$("." + _self.idNavMask).click(function (el) {
$("." + _self.idNavMask).removeClass(CONST.OPEN_CLASS);
$("." + _self.idContainer).removeClass(CONST.OPEN_CLASS);
if (_self.hasSectionNav) {
$("." + _self.idSectionNav).removeClass(CONST.OPEN_CLASS);
}
});
this.setCollapsibleBehaviourItems();
this.setActiveItemClassEvent();
setTimeout(function () {
this.displayActiveItem();
}.bind(this), 0);
},
"findSectionNav": function () {
var sectionNavEl = $('body').find("[data-section-nav]");
if (sectionNavEl.length) {
this.hasSectionNav = true;
}
},
"init": function () {
this.findSectionNav();
this.bindEvents();
}
}
}
Navbar(
{
"classNameContainer": "navbar-container",
"classNameSectionNav": "section-nav",
"classNameBackCTA": "section-nav-back",
"classNameCTA": "navbar-toggle",
"classNameMask": "navbar-mask",
"classNameNavItemTitleCollapsible": "section-nav-item--collapsible span",
"classNameNavItemCollapsible": ".section-nav-item--collapsible",
"classNameNavActiveItem": ".section-nav a.active"
}
).init();
});