Passed
Pull Request — master (#57)
by Kyle
06:09
created

NavbarPresenter   A

Complexity

Total Complexity 11

Size/Duplication

Total Lines 101
Duplicated Lines 100 %

Coupling/Cohesion

Components 1
Dependencies 2

Test Coverage

Coverage 16.66%

Importance

Changes 0
Metric Value
wmc 11
lcom 1
cbo 2
dl 101
loc 101
ccs 4
cts 24
cp 0.1666
rs 10
c 0
b 0
f 0

9 Methods

Rating   Name   Duplication   Size   Complexity  
A getMultiLevelDropdownWrapper() 0 12 1
A getMenuWithDropDownWrapper() 0 12 1
A getActiveState() 0 3 2
A getOpenTagWrapper() 0 3 1
A getCloseTagWrapper() 0 3 1
A getDividerWrapper() 0 3 1
A getActiveStateOnChild() 0 3 2
A getHeaderWrapper() 0 3 1
A getMenuWithoutDropdownWrapper() 0 3 1

How to fix   Duplicated Code   

Duplicated Code

Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.

Common duplication problems, and corresponding solutions are:

1
<?php
2
3
namespace KyleMassacre\Menus\Presenters\Bootstrap;
4
5
use KyleMassacre\Menus\Presenters\Presenter;
6
7
class NavbarPresenter extends Presenter
8
{
9
    /**
10
     * {@inheritdoc }.
11
     */
12 3
    public function getOpenTagWrapper()
13
    {
14 3
        return PHP_EOL . '<ul class="nav navbar-nav">' . PHP_EOL;
15
    }
16
17
    /**
18
     * {@inheritdoc }.
19
     */
20 3
    public function getCloseTagWrapper()
21
    {
22 3
        return PHP_EOL . '</ul>' . PHP_EOL;
23
    }
24
25
    /**
26
     * {@inheritdoc }.
27
     */
28
    public function getMenuWithoutDropdownWrapper($item)
29
    {
30
        return '<li' . $this->getActiveState($item) . '><a href="' . $item->getUrl() . '" ' . $item->getAttributes() . '>' . $item->getIcon() . ' ' . $item->title . '</a></li>' . PHP_EOL;
31
    }
32
33
    /**
34
     * {@inheritdoc }.
35
     */
36
    public function getActiveState($item, $state = ' class="active"')
37
    {
38
        return $item->isActive() ? $state : null;
39
    }
40
41
    /**
42
     * Get active state on child items.
43
     *
44
     * @param $item
45
     * @param string $state
46
     *
47
     * @return null|string
48
     */
49
    public function getActiveStateOnChild($item, $state = 'active')
50
    {
51
        return $item->hasActiveOnChild() ? $state : null;
52
    }
53
54
    /**
55
     * {@inheritdoc }.
56
     */
57
    public function getDividerWrapper()
58
    {
59
        return '<li class="divider"></li>';
60
    }
61
62
    /**
63
     * {@inheritdoc }.
64
     */
65
    public function getHeaderWrapper($item)
66
    {
67
        return '<li class="dropdown-header">' . $item->title . '</li>';
68
    }
69
70
    /**
71
     * {@inheritdoc }.
72
     */
73
    public function getMenuWithDropDownWrapper($item)
74
    {
75
        return '<li class="dropdown' . $this->getActiveStateOnChild($item, ' active') . '">
76
		          <a href="#" class="dropdown-toggle" data-toggle="dropdown">
77
					' . $item->getIcon() . ' ' . $item->title . '
78
			      	<b class="caret"></b>
79
			      </a>
80
			      <ul class="dropdown-menu">
81
			      	' . $this->getChildMenuItems($item) . '
82
			      </ul>
83
		      	</li>'
84
        . PHP_EOL;
85
    }
86
87
    /**
88
     * Get multilevel menu wrapper.
89
     *
90
     * @param \KyleMassacre\Menus\MenuItem $item
91
     *
92
     * @return string`
0 ignored issues
show
Documentation Bug introduced by
The doc comment string` at position 0 could not be parsed: Unknown type name 'string`' at position 0 in string`.
Loading history...
93
     */
94
    public function getMultiLevelDropdownWrapper($item)
95
    {
96
        return '<li class="dropdown' . $this->getActiveStateOnChild($item, ' active') . '">
97
		          <a href="#" class="dropdown-toggle" data-toggle="dropdown">
98
					' . $item->getIcon() . ' ' . $item->title . '
99
			      	<b class="caret pull-right caret-right"></b>
100
			      </a>
101
			      <ul class="dropdown-menu">
102
			      	' . $this->getChildMenuItems($item) . '
103
			      </ul>
104
		      	</li>'
105
        . PHP_EOL;
106
    }
107
}
108