PluginProbe
Responsive Menu – Create Mobile-Friendly Menu / 3.0.12
Responsive Menu – Create Mobile-Friendly Menu v3.0.12
4.7.4 4.7.3 3.1.5 3.1.6 3.1.7 3.1.8 3.1.9 4.0.0 4.0.1 4.0.2 4.0.3 4.0.4 4.1.0 4.1.1 4.1.10 4.1.11 4.1.12 4.1.2 4.1.3 4.1.4 4.1.5 4.1.6 4.1.7 4.1.8 4.1.9 All 91 releases
responsive-menu / src / app / Walkers / WpWalker.php

WpWalker.php in Responsive Menu – Create Mobile-Friendly Menu 3.0.12, at src/app/Walkers/WpWalker.php

132 lines 5.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace ResponsiveMenu\Walkers;
4 use ResponsiveMenu\Collections\OptionsCollection;
5
6 class WpWalker extends \Walker_Nav_Menu {
7
8 private $current_item;
9
10 public function __construct(OptionsCollection $options) {
11 $this->options = $options;
12 }
13
14 public function start_el(&$output, $item, $depth = 0, $args = array(), $id = 0) {
15
16 $this->setCurrentItem($item);
17
18 $classes = empty($item->classes) ? array() : (array) $item->classes;
19 $responsive_menu_classes = $classes;
20
21 # Turn into our Responsive Menu Classes
22 foreach($classes as $class):
23 switch($class):
24 case 'menu-item': $responsive_menu_classes[] = 'responsive-menu-item'; break;
25 case 'current-menu-item': $responsive_menu_classes[] = 'responsive-menu-current-item'; break;
26 case 'menu-item-has-children': $responsive_menu_classes[] = 'responsive-menu-item-has-children'; break;
27 case 'current-menu-parent': $responsive_menu_classes[] = 'responsive-menu-item-current-parent'; break;
28 case 'current-menu-ancestor': $responsive_menu_classes[] = 'responsive-menu-item-current-ancestor'; break;
29 endswitch;
30 endforeach;
31
32 /* Clear child class if we are at the final depth level */
33 if(isset($responsive_menu_classes)):
34 if($depth + 1 == $this->options['menu_depth']->getValue() && ($key = array_search('responsive-menu-item-has-children', $responsive_menu_classes)) !== false) {
35 unset($responsive_menu_classes[$key]);
36 }
37 endif;
38
39 $class_names = join(' ', array_unique($responsive_menu_classes));
40 $class_names = $class_names ? ' class="' . esc_attr( $class_names ) . '"' : '';
41
42 $id = ' id="responsive-menu-item-' . esc_attr( $item->ID ) . '"';
43
44 $output .= '<li' . $id . $class_names .'>';
45
46 $atts = array();
47 $atts['title'] = ! empty( $item->attr_title ) ? $item->attr_title : '';
48 $atts['target'] = ! empty( $item->target ) ? $item->target : '';
49 $atts['rel'] = ! empty( $item->xfn ) ? $item->xfn : '';
50 $atts['href'] = ! empty( $item->url ) ? $item->url : '';
51 $atts['class'] = 'responsive-menu-item-link';
52
53 $atts = apply_filters( 'nav_menu_link_attributes', $atts, $item, $args, $depth );
54
55 $attributes = '';
56 foreach ( $atts as $attr => $value ) {
57 if ( ! empty( $value ) ) {
58 $value = ( 'href' === $attr ) ? esc_url( $value ) : esc_attr( $value );
59 $attributes .= ' ' . $attr . '="' . $value . '"';
60 }
61 }
62
63 /** This filter is documented in wp-includes/post-template.php */
64 $title = apply_filters( 'the_title', $item->title, $item->ID );
65
66 $title = apply_filters( 'nav_menu_item_title', $title, $item, $args, $depth );
67
68 /* Calculate which arrow to show */
69 if(in_array('responsive-menu-item-has-children', $responsive_menu_classes)):
70 $inactive_arrow = '<div class="responsive-menu-subarrow">' . $this->options->getInActiveArrow() . '</div>';
71 $active_arrow = '<div class="responsive-menu-subarrow responsive-menu-subarrow-active">' . $this->options->getActiveArrow() . '</div>';
72 if($this->options['auto_expand_all_submenus'] == 'on'):
73 $initial_arrow = $active_arrow;
74 elseif(
75 $this->options['auto_expand_current_submenus'] == 'on' && (in_array('responsive-menu-item-current-parent', $responsive_menu_classes)
76 || in_array('responsive-menu-item-current-ancestor', $responsive_menu_classes))):
77 $initial_arrow = $active_arrow;
78 else:
79 $initial_arrow = $inactive_arrow;
80 endif;
81 else:
82 $initial_arrow = '';
83 endif;
84
85 /* Clear Arrow if we are at the final depth level */
86 if($depth + 1 == $this->options['menu_depth']->getValue())
87 $initial_arrow = '';
88
89 $item_output = '<a'. $attributes .'>';
90 $item_output .= $title;
91 $item_output .= $initial_arrow;
92 $item_output .= '</a>';
93
94 $output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args );
95
96 }
97
98 public function start_lvl(&$output, $depth = 0, $args = array()) {
99 $output .= "<ul class='responsive-menu-submenu responsive-menu-submenu-depth-" . ($depth + 1) . $this->getSubmenuClassOpenOrNot() . "'>";
100 }
101
102 public function end_el(&$output, $item, $depth = 0, $args = array()) {
103 $output .= "</li>";
104 }
105
106 public function end_lvl(&$output, $depth = 0, $args = array()) {
107 $output .= "</ul>";
108 }
109
110 public function setCurrentItem($item) {
111 $this->current_item = $item;
112 }
113
114 public function getCurrentItem() {
115 return $this->current_item;
116 }
117
118 public function getSubmenuClassOpenOrNot() {
119 return $this->expandAllSubmenuOptionsIsOn() || $this->expandCurrentSubmenuOnAndItemIsParent() ? ' responsive-menu-submenu-open' : '';
120 }
121
122 public function expandAllSubmenuOptionsIsOn() {
123 return $this->options['auto_expand_all_submenus'] == 'on';
124 }
125
126 public function expandCurrentSubmenuOnAndItemIsParent() {
127 return ($this->options['auto_expand_current_submenus'] == 'on')
128 && ($this->getCurrentItem()->current_item_ancestor || $this->getCurrentItem()->current_item_parent);
129 }
130
131 }
132