\n
\n - ");
if (elementSettings.custom_style_list == 'hm-toc-slide-style') {
htmlul += "<".concat(elementSettings.html_tag, " class=\"hm-toc-title\">").concat(elementSettings.widget_title, "").concat(elementSettings.html_tag, ">");
} else {
htmlul += "<".concat(elementSettings.html_tag, " class=\"hm-toc-title\">").concat(elementSettings.widget_title, "").concat(elementSettings.html_tag, ">");
}
htmlul += "<".concat(settings.listWrapperTag, " class=\"hm-toc-items-inner\">");
for (var i = 0; i < this.headingsData.length; i++) {
var list = '';
var currentItemDot = this.headingsData[i];
if (level > currentItemDot.level) {
break;
}
var listItemTextClasses = settings.classes.listItemText;
if (0 === currentItemDot.level) {
// If the current list item is a top level item, give it the first level class
listItemTextClasses += " " + settings.classes.firstLevelListItem;
}
if (level === currentItemDot.level) {
list += "
- ");
if ('bullets' === elementSettings.marker_view && icon && elementSettings.custom_style_list == 'hm-toc-slide-style') {
list += "");
}
list += "").concat(currentItemDot.text, "");
list += "
";
}
htmlul += list;
}
htmlul += "".concat(settings.listWrapperTag, ">");
htmlul += " \n
";
}
return htmlul;
},
getNestedLevel: function getNestedLevel(level) {
var settings = this.getSettings(),
elementSettings = this.getElementSettings(),
icon = this.getElementSettings("icon");
var html = ''; // Open new list/nested list
html += "<" + settings.listWrapperTag + ' class="' + settings.classes.listWrapper + '">'; // for each list item, build its markup.
while (this.listItemPointer < this.headingsData.length) {
var currentItem = this.headingsData[this.listItemPointer];
var listItemTextClasses = settings.classes.listItemText;
if (0 === currentItem.level) {
// If the current list item is a top level item, give it the first level class
listItemTextClasses += " " + settings.classes.firstLevelListItem;
}
if (level > currentItem.level) {
break;
}
if (level === currentItem.level) {
html += '
';
html += '';
var liContent = '
' + currentItem.text + ""; // If list type is bullets, add the bullet icon as an
tag
if ("bullets" === elementSettings.marker_view && icon) {
liContent = '' + liContent;
}
html += liContent;
html += " ";
this.listItemPointer++;
var nextItem = this.headingsData[this.listItemPointer];
if (nextItem && level < nextItem.level) {
// If a new nested list has to be created under the current item,
// this entire method is called recursively (outside the while loop, a list wrapper is created)
html += this.getNestedLevel(nextItem.level);
}
html += "";
}
}
html += "" + settings.listWrapperTag + ">";
return html;
},
handleNoHeadingsFound: function handleNoHeadingsFound() {
var _messages = 'No headings were found on this page.';
if (elementorFrontend.isEditMode()) {
return this.elements.$tocBody.html(_messages);
}
},
collapseOnInit: function collapseOnInit() {
var $self = this;
var minimizedOn = this.getElementSettings("minimized_on"),
currentDeviceMode = elementorFrontend.getCurrentDeviceMode();
if ("" !== minimizedOn && "array" !== typeof minimizedOn) {
minimizedOn = [minimizedOn];
}
if (0 !== minimizedOn.length && "object" === _typeof(minimizedOn)) {
minimizedOn.forEach(function (value) {
if ("desktop" === value[0] && "desktop" == currentDeviceMode && $(window).width() < elementorFrontend.config.breakpoints.xxl || "tablet" === value[0] && "tablet" === currentDeviceMode && $(window).width() < elementorFrontend.config.breakpoints.lg || "mobile" === value[0] && "mobile" === currentDeviceMode && $(window).width() < elementorFrontend.config.breakpoints.md) {
$self.collapseBox();
}
});
}
},
getHeadingAnchorLink: function getHeadingAnchorLink(index, classes) {
var headingID = this.elements.$headings[index].id,
wrapperID = this.elements.$headings[index].closest('.elementor-widget').id;
var anchorLink = '';
if (headingID) {
anchorLink = headingID;
} else if (wrapperID) {
// If the heading itself has an ID, we don't want to overwrite it
anchorLink = wrapperID;
} // If there is no existing ID, use the heading text to create a semantic ID
if (headingID || wrapperID) {
jQuery(this.elements.$headings[index]).data('hasOwnID', true);
} else {
anchorLink = "".concat(classes.headingAnchor, "-").concat(index);
}
return anchorLink;
},
setHeadingsData: function setHeadingsData() {
var $this = this;
this.headingsData = [];
var classes = this.getSettings("classes"); // Create an array for simplifying TOC list creation
this.elements.$headings.each(function (index, element) {
var anchorLink = $this.getHeadingAnchorLink(index, classes);
$this.headingsData.push({
tag: +element.nodeName.slice(1),
text: element.textContent,
anchorLink: anchorLink
});
});
},
run: function run() {
var elementSettings = this.getElementSettings();
this.elements.$headings = this.getHeadings();
if (!this.elements.$headings.length) {
return this.handleNoHeadingsFound();
}
this.setHeadingsData();
if (!elementorFrontend.isEditMode()) {
this.addAnchorsBeforeHeadings();
}
this.populateTOC();
if (elementSettings.minimize_box) {
this.collapseOnInit();
}
if (elementSettings.sticky_toc_toggle) {
this.handleStickyToc();
}
if ("" !== elementSettings.scroll_offset.size) {
this.setOffset();
}
},
expandBox: function expandBox() {
var boxHeight = this.getCurrentDeviceSetting("min_height");
this.$element.removeClass(this.getSettings("classes.collapsed"));
this.elements.$tocBody.slideDown(); // return container to the full height in case a min-height is defined by the user
this.elements.$widgetContainer.css("min-height", boxHeight.size + boxHeight.unit);
},
collapseBox: function collapseBox() {
this.$element.addClass(this.getSettings("classes.collapsed"));
this.elements.$tocBody.slideUp(); // close container in case a min-height is defined by the user
this.elements.$widgetContainer.css("min-height", "0px");
},
onInit: function onInit() {
var $self = this;
this.initElements();
this.bindEvents();
jQuery(document).ready(function () {
$self.run();
});
},
onListItemClick: function onListItemClick(event) {
var $self = this;
this.itemClicked = true;
setTimeout(function () {
return $self.itemClicked = false;
}, 2000);
var $clickedItem = jQuery(event.target),
$list = $clickedItem.parent().next(),
collapseNestedList = this.getElementSettings("collapse_subitems");
if ("SPAN" == $clickedItem[0].tagName && 'yes' == this.getElementSettings("custom_style")) {
$clickedItem = jQuery(event.currentTarget);
}
var listIsActive = void 0;
if (collapseNestedList && $clickedItem.hasClass(this.getSettings("classes.firstLevelListItem"))) {
if ($list.is(":visible")) {
listIsActive = true;
}
}
this.activateItem($clickedItem);
if (collapseNestedList && listIsActive) {
$list.slideUp();
}
},
handleStickyToc: function handleStickyToc() {
var elementSettings = this.getElementSettings();
var currentDeviceMode = elementorFrontend.getCurrentDeviceMode();
var $devices = elementSettings.sticky_toc_disable_on;
var target = this.getID();
var type = elementSettings.sticky_toc_type;
if ("in-place" === type) {
var parentWidth = target.parent().parent().outerWidth();
target.css("width", parentWidth);
} else if ("custom-position" === type) {
var parentWidth = target.parent().parent().outerWidth();
target.css("width", parentWidth);
}
if (-1 == $.inArray(currentDeviceMode, $devices)) {
target.removeClass('floating-toc');
$(window).off('scroll', this.stickyScroll);
return;
}
$(window).on('scroll', $.proxy(this.stickyScroll, this));
},
stickyScroll: function stickyScroll() {
var target = this.getID();
var elementSettings = this.getElementSettings();
var item = document.querySelector(".ha-table-of-contents");
var bound, tocHeight;
bound = item.getBoundingClientRect();
tocHeight = target.outerHeight();
if (target.hasClass("floating-toc")) {
target.parent().parent().css("height", tocHeight);
} else {
target.parent().parent().css("height", '');
}
if (bound.y + bound.height / 2 < 0) {
if (target.hasClass('floating-toc')) {
return;
}
target.addClass("floating-toc");
} else {
if (!target.hasClass('floating-toc')) {
return;
}
target.removeClass("floating-toc");
}
},
scrollToTop: function scrollToTop() {
var $self = this;
var scrollTo = this.getElementSettings("scroll_to_top_option");
if ("window_top" === scrollTo) {
$("html, body").animate({
scrollTop: 0
}, 250);
} else {
var $id = this.getID().parents('.ha-table-of-contents');
$("html, body").animate({
scrollTop: $($id).offset().top - 60
}, 1000);
}
},
getID: function getID() {
return $("#ha-toc-" + this.$element[0].attributes["data-id"].nodeValue);
}
});
elementorFrontend.hooks.addAction("frontend/element_ready/ha-table-of-contents.default", function ($scope) {
elementorFrontend.elementsHandler.addHandler(HaTOC, {
$element: $scope
});
});
});
})(jQuery, Happy, window);