Skip to content

Commit a7f9257

Browse files
author
Habib Nurrahman
committed
Change default pattern nav is array
1 parent a06f166 commit a7f9257

File tree

4 files changed

+63
-17
lines changed

4 files changed

+63
-17
lines changed

src/Activators/LinkActivator.php

Lines changed: 43 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -25,32 +25,65 @@ public function isActive(Nav $nav)
2525

2626
protected function matchPath(Nav $nav)
2727
{
28-
$pathPattern = trim(parse_url($this->uri, PHP_URL_PATH), '/') . '/';
29-
$navPattern = ltrim($nav->getPattern(), '/');
28+
$currentPath = parse_url($this->uri, PHP_URL_PATH);
3029

31-
if (empty($navPattern)) {
32-
return false;
30+
$match = null;
31+
32+
foreach ($nav->getPattern() as $navPattern) {
33+
if (empty($navPattern)) {
34+
continue;
35+
}
36+
37+
$navPath = parse_url($navPattern, PHP_URL_PATH);
38+
$match = strpos($currentPath, $navPath) !== false || fnmatch($navPath, $currentPath);
39+
40+
if ($match) {
41+
break;
42+
}
3343
}
3444

35-
return strpos($pathPattern, $navPattern) !== false || fnmatch($navPattern, $pathPattern);
45+
return $match === true;
3646
}
3747

3848
protected function matchQuery(Nav $nav)
3949
{
4050
$expectedQuery = parse_url($this->uri, PHP_URL_QUERY);
41-
$navQuery = parse_url($nav->getPattern(), PHP_URL_QUERY);
4251

4352
parse_str($expectedQuery, $expectedQuery);
44-
parse_str($navQuery, $navQuery);
4553

46-
return empty(array_diff($navQuery, $expectedQuery));
54+
$match = null;
55+
56+
foreach ($nav->getPattern() as $navPattern) {
57+
$navQuery = parse_url($navPattern, PHP_URL_QUERY);
58+
59+
parse_str($navQuery, $navQuery);
60+
61+
$match = empty(array_diff($navQuery, $expectedQuery));
62+
63+
if ($match) {
64+
break;
65+
}
66+
}
67+
68+
return $match === true;
4769
}
4870

4971
protected function matchFragment(Nav $nav)
5072
{
5173
$expectedFragment = parse_url($this->uri, PHP_URL_FRAGMENT);
52-
$navFragment = parse_url($nav->getPattern(), PHP_URL_FRAGMENT);
5374

54-
return $expectedFragment === $navFragment;
75+
$match = null;
76+
77+
foreach ($nav->getPattern() as $navPattern) {
78+
$navFragment = parse_url($navPattern, PHP_URL_FRAGMENT);
79+
80+
$match = $expectedFragment === $navFragment;
81+
82+
if ($match) {
83+
break;
84+
}
85+
}
86+
87+
return $match === true;
5588
}
5689
}

src/Items/Nav.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ public function getChild();
5858
public function setChild(NavCollection $child);
5959

6060
/**
61-
* @return string
61+
* @return array
6262
*/
6363
public function getPattern();
6464

src/Items/NavItem.php

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ abstract class NavItem implements Nav
1313

1414
protected $visible = true;
1515

16-
protected $pattern;
16+
protected $patterns = [];
1717

1818
abstract public function getText();
1919

@@ -79,18 +79,31 @@ public function add(Nav $item)
7979

8080
public function match($pattern)
8181
{
82-
$this->pattern = $pattern;
82+
if (is_array($pattern)) {
83+
return $this->matches($pattern);
84+
}
85+
86+
$this->patterns[] = '/' . ltrim($pattern, '/');
87+
88+
return $this;
89+
}
90+
91+
public function matches(array $patterns = [])
92+
{
93+
foreach ($patterns as $pattern) {
94+
$this->match((string)$pattern);
95+
}
8396

8497
return $this;
8598
}
8699

87100
public function getPattern()
88101
{
89-
if (empty($this->pattern)) {
90-
$this->pattern = parse_url($this->getUrl(), PHP_URL_PATH);
102+
if (empty($this->patterns)) {
103+
$this->match(parse_url($this->getUrl(), PHP_URL_PATH));
91104
}
92105

93-
return $this->pattern;
106+
return $this->patterns;
94107
}
95108

96109
public function toJson($options = 0)

src/Items/NavSeparator.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ public function add(Nav $nav)
5656

5757
public function getPattern()
5858
{
59-
return '';
59+
return [];
6060
}
6161

6262
public function getType()

0 commit comments

Comments
 (0)