@websy/websy-designs 1.4.16 → 1.4.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -194,7 +194,7 @@ class ButtonGroup {
194
194
  }
195
195
  this.options.activeItem = index
196
196
  if (this.options.onActivate) {
197
- this.options.onActivate(this.options.items[index], index)
197
+ this.options.onActivate(this.options.items[index], index, event)
198
198
  }
199
199
  const el = document.getElementById(this.elementId)
200
200
  let buttons = Array.from(el.querySelectorAll('.websy-button-group-item'))
@@ -2510,6 +2510,35 @@ class WebsyNavigationMenu {
2510
2510
  this.render()
2511
2511
  }
2512
2512
  }
2513
+ activateItem (id) {
2514
+ const el = document.getElementById(id)
2515
+ if (el) {
2516
+ el.classList.add('active')
2517
+ let parent = el.parentElement
2518
+ while (parent) {
2519
+ if (parent.tagName === 'UL') {
2520
+ parent.classList.remove('websy-menu-collapsed')
2521
+ parent = parent.parentElement
2522
+ }
2523
+ else if (parent.tagName === 'LI') {
2524
+ parent = parent.parentElement
2525
+ }
2526
+ else {
2527
+ parent = null
2528
+ }
2529
+ }
2530
+ }
2531
+ }
2532
+ collapseAll () {
2533
+ const el = document.getElementById(this.elementId)
2534
+ const menuEls = el.querySelectorAll('.websy-child-list')
2535
+ const headerEls = el.querySelectorAll('.websy-menu-header')
2536
+ Array.from(menuEls).forEach(e => e.classList.add('websy-menu-collapsed'))
2537
+ Array.from(headerEls).forEach(e => {
2538
+ e.classList.remove('active')
2539
+ e.classList.remove('menu-open')
2540
+ })
2541
+ }
2513
2542
  flattenItems (index, items, level = 0, path = '') {
2514
2543
  if (items[index]) {
2515
2544
  this.lowestLevel = Math.max(level, this.lowestLevel)
@@ -2534,10 +2563,16 @@ class WebsyNavigationMenu {
2534
2563
  if (event.target.classList.contains('trigger-item') && item.level === this.lowestLevel) {
2535
2564
  this.toggleMobileMenu('remove')
2536
2565
  }
2537
- if (item.hasChildren === true) {
2566
+ if (item && item.hasChildren === true) {
2538
2567
  event.target.classList.toggle('menu-open')
2539
2568
  this.toggleMenu(item.id)
2540
2569
  }
2570
+ else {
2571
+ const el = document.getElementById(this.elementId)
2572
+ const allEls = el.querySelectorAll('.websy-menu-header')
2573
+ Array.from(allEls).forEach(e => e.classList.remove('active'))
2574
+ event.target.classList.add('active')
2575
+ }
2541
2576
  }
2542
2577
  if (event.target.classList.contains('websy-menu-mask')) {
2543
2578
  this.toggleMobileMenu()
@@ -2621,6 +2656,23 @@ class WebsyNavigationMenu {
2621
2656
  html += `</div>`
2622
2657
  }
2623
2658
  el.innerHTML = html
2659
+ // open the menu if an item is set as 'active'
2660
+ const activeEl = el.querySelector('.websy-menu-header.active')
2661
+ if (activeEl) {
2662
+ let parent = activeEl.parentElement
2663
+ while (parent) {
2664
+ if (parent.tagName === 'UL') {
2665
+ parent.classList.remove('websy-menu-collapsed')
2666
+ parent = parent.parentElement
2667
+ }
2668
+ else if (parent.tagName === 'LI') {
2669
+ parent = parent.parentElement
2670
+ }
2671
+ else {
2672
+ parent = null
2673
+ }
2674
+ }
2675
+ }
2624
2676
  if (this.options.enableSearch === true) {
2625
2677
  this.search = new WebsyDesigns.Search(`${this.elementId}_search`, Object.assign({}, {
2626
2678
  onSearch: this.handleSearch.bind(this),
@@ -2649,7 +2701,7 @@ class WebsyNavigationMenu {
2649
2701
  }
2650
2702
  html += `
2651
2703
  <li class='websy-${this.options.orientation}-list-item ${items[i].alwaysOpen === true ? 'always-open' : ''}'>
2652
- <div class='websy-menu-header ${items[i].classes || ''} ${selected} ${active}'
2704
+ <div class='websy-menu-header websy-menu-level-${level} ${items[i].classes || ''} ${selected} ${active}'
2653
2705
  id='${blockId}'
2654
2706
  data-id='${currentBlock}'
2655
2707
  data-path='${items[i].path}'
@@ -250,7 +250,7 @@ var ButtonGroup = /*#__PURE__*/function () {
250
250
  this.options.activeItem = index;
251
251
 
252
252
  if (this.options.onActivate) {
253
- this.options.onActivate(this.options.items[index], index);
253
+ this.options.onActivate(this.options.items[index], index, event);
254
254
  }
255
255
 
256
256
  var el = document.getElementById(this.elementId);
@@ -2642,6 +2642,41 @@ var WebsyNavigationMenu = /*#__PURE__*/function () {
2642
2642
  }
2643
2643
 
2644
2644
  _createClass(WebsyNavigationMenu, [{
2645
+ key: "activateItem",
2646
+ value: function activateItem(id) {
2647
+ var el = document.getElementById(id);
2648
+
2649
+ if (el) {
2650
+ el.classList.add('active');
2651
+ var parent = el.parentElement;
2652
+
2653
+ while (parent) {
2654
+ if (parent.tagName === 'UL') {
2655
+ parent.classList.remove('websy-menu-collapsed');
2656
+ parent = parent.parentElement;
2657
+ } else if (parent.tagName === 'LI') {
2658
+ parent = parent.parentElement;
2659
+ } else {
2660
+ parent = null;
2661
+ }
2662
+ }
2663
+ }
2664
+ }
2665
+ }, {
2666
+ key: "collapseAll",
2667
+ value: function collapseAll() {
2668
+ var el = document.getElementById(this.elementId);
2669
+ var menuEls = el.querySelectorAll('.websy-child-list');
2670
+ var headerEls = el.querySelectorAll('.websy-menu-header');
2671
+ Array.from(menuEls).forEach(function (e) {
2672
+ return e.classList.add('websy-menu-collapsed');
2673
+ });
2674
+ Array.from(headerEls).forEach(function (e) {
2675
+ e.classList.remove('active');
2676
+ e.classList.remove('menu-open');
2677
+ });
2678
+ }
2679
+ }, {
2645
2680
  key: "flattenItems",
2646
2681
  value: function flattenItems(index, items) {
2647
2682
  var level = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
@@ -2677,9 +2712,16 @@ var WebsyNavigationMenu = /*#__PURE__*/function () {
2677
2712
  this.toggleMobileMenu('remove');
2678
2713
  }
2679
2714
 
2680
- if (item.hasChildren === true) {
2715
+ if (item && item.hasChildren === true) {
2681
2716
  event.target.classList.toggle('menu-open');
2682
2717
  this.toggleMenu(item.id);
2718
+ } else {
2719
+ var el = document.getElementById(this.elementId);
2720
+ var allEls = el.querySelectorAll('.websy-menu-header');
2721
+ Array.from(allEls).forEach(function (e) {
2722
+ return e.classList.remove('active');
2723
+ });
2724
+ event.target.classList.add('active');
2683
2725
  }
2684
2726
  }
2685
2727
 
@@ -2779,7 +2821,24 @@ var WebsyNavigationMenu = /*#__PURE__*/function () {
2779
2821
  html += "</div>";
2780
2822
  }
2781
2823
 
2782
- el.innerHTML = html;
2824
+ el.innerHTML = html; // open the menu if an item is set as 'active'
2825
+
2826
+ var activeEl = el.querySelector('.websy-menu-header.active');
2827
+
2828
+ if (activeEl) {
2829
+ var parent = activeEl.parentElement;
2830
+
2831
+ while (parent) {
2832
+ if (parent.tagName === 'UL') {
2833
+ parent.classList.remove('websy-menu-collapsed');
2834
+ parent = parent.parentElement;
2835
+ } else if (parent.tagName === 'LI') {
2836
+ parent = parent.parentElement;
2837
+ } else {
2838
+ parent = null;
2839
+ }
2840
+ }
2841
+ }
2783
2842
 
2784
2843
  if (this.options.enableSearch === true) {
2785
2844
  this.search = new WebsyDesigns.Search("".concat(this.elementId, "_search"), _extends({}, {
@@ -2814,7 +2873,7 @@ var WebsyNavigationMenu = /*#__PURE__*/function () {
2814
2873
  items[i].classes = items[i].classes.join(' ');
2815
2874
  }
2816
2875
 
2817
- html += "\n\t\t\t<li class='websy-".concat(this.options.orientation, "-list-item ").concat(items[i].alwaysOpen === true ? 'always-open' : '', "'>\n\t\t\t\t<div class='websy-menu-header ").concat(items[i].classes || '', " ").concat(selected, " ").concat(active, "' \n id='").concat(blockId, "' \n data-id='").concat(currentBlock, "'\n data-path='").concat(items[i].path, "'\n data-menu-id='").concat(this.elementId, "_").concat(currentBlock, "_list'\n data-popout-id='").concat(level > 1 ? block : currentBlock, "'\n data-text='").concat(items[i].isLink !== true ? items[i].text : '', "'\n style='padding-left: ").concat(level * this.options.childIndentation, "px'\n ").concat(items[i].attributes && items[i].attributes.join(' ') || '', "\n >\n ");
2876
+ html += "\n\t\t\t<li class='websy-".concat(this.options.orientation, "-list-item ").concat(items[i].alwaysOpen === true ? 'always-open' : '', "'>\n\t\t\t\t<div class='websy-menu-header websy-menu-level-").concat(level, " ").concat(items[i].classes || '', " ").concat(selected, " ").concat(active, "' \n id='").concat(blockId, "' \n data-id='").concat(currentBlock, "'\n data-path='").concat(items[i].path, "'\n data-menu-id='").concat(this.elementId, "_").concat(currentBlock, "_list'\n data-popout-id='").concat(level > 1 ? block : currentBlock, "'\n data-text='").concat(items[i].isLink !== true ? items[i].text : '', "'\n style='padding-left: ").concat(level * this.options.childIndentation, "px'\n ").concat(items[i].attributes && items[i].attributes.join(' ') || '', "\n >\n ");
2818
2877
 
2819
2878
  if (this.options.orientation === 'horizontal') {
2820
2879
  html += items[i].text;