Skip to content

Commit 1b0aca3

Browse files
committed
make html ids less likely to conflict
1 parent 62f74c8 commit 1b0aca3

File tree

5 files changed

+28
-25
lines changed

5 files changed

+28
-25
lines changed

src/AbstractItem.php

+4-1
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ protected function parseAttributes(array $in)
9090

9191
$out = array_except($in, static::$notHtmlAttributes);
9292
$out['class'] = isset($in['class']) ? explode(' ', $in['class']) : [];
93-
$out['id'] = isset($in['id']) ? $in['id'] : 'menu-item-' . Str::slug($this->title);
93+
$out['id'] = isset($in['id']) ? $in['id'] : Str::slug($this->title);
9494
return $out;
9595
}
9696

@@ -134,6 +134,9 @@ abstract public function renderUrl();
134134
public function renderAttributes()
135135
{
136136
$attributes = $this->attributes;
137+
if (isset($attributes['id']) && !Str::startsWith('menu-item--', $attributes['id'])) {
138+
$attributes['id'] = 'menu-item--'.$attributes['id'];
139+
}
137140
$attributes['class'] = implode(' ', $this->attributes['class']);
138141
$strings = [];
139142
foreach ($attributes as $key => $value) {

src/Collection.php

+3-3
Original file line numberDiff line numberDiff line change
@@ -94,9 +94,6 @@ public function __construct(array $attributes = array(), array $options = array(
9494
protected function parseAttributes(array $in)
9595
{
9696
$out = $in;
97-
if (isset($in['id']) && !Str::startsWith('menu-', $in['id'])) {
98-
$out['id'] = 'menu-' . $in['id'];
99-
}
10097
$out['class'] = isset($in['class']) ? explode(' ', $in['class']) : [];
10198
return $out;
10299
}
@@ -109,6 +106,9 @@ protected function parseAttributes(array $in)
109106
public function renderAttributes()
110107
{
111108
$attributes = $this->attributes;
109+
if (isset($attributes['id']) && !Str::startsWith('menu--', $attributes['id'])) {
110+
$attributes['id'] = 'menu--'.$attributes['id'];
111+
}
112112
$attributes['class'] = implode(' ', $this->attributes['class']);
113113
$strings = [];
114114
foreach ($attributes as $key => $value) {

tests/MenuBuilderTest.php

+12-12
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,13 @@ public function testRenderSimpleMenu()
3838
$builder->getMenu('left')->getItem('test-submenu')->addItem('Test Item 3', '/url-3');
3939
$builder->getMenu('left')->getItem('test-submenu')->addItem('Test Item 4', '/url-4');
4040
$str = $builder->render('left');
41-
$expected = str_replace(["\n","\t"], '', '<ul id="menu-left" class="nav navbar-nav">
42-
<li><a href="/url-1" class="foo-bar" id="test-item-1">Test Item 1</a></li>
43-
<li><a href="/url-2" data-foo="bar" id="test-item-2">Test Item 2</a></li>
44-
<li><a href="#" data-toggle="dropdown" class="dropdown-toggle" id="test-submenu">
41+
$expected = str_replace(["\n","\t"], '', '<ul id="menu--left" class="nav navbar-nav">
42+
<li><a href="/url-1" class="foo-bar" id="menu-item--test-item-1">Test Item 1</a></li>
43+
<li><a href="/url-2" data-foo="bar" id="menu-item--test-item-2">Test Item 2</a></li>
44+
<li><a href="#" data-toggle="dropdown" class="dropdown-toggle" id="menu-item--test-submenu">
4545
Test Submenu <b class="caret"></b></a><ul class="dropdown-menu">
46-
<li><a href="/url-3" id="test-item-3">Test Item 3</a></li>
47-
<li><a href="/url-4" id="test-item-4">Test Item 4</a></li>
46+
<li><a href="/url-3" id="menu-item--test-item-3">Test Item 3</a></li>
47+
<li><a href="/url-4" id="menu-item--test-item-4">Test Item 4</a></li>
4848
</ul></li></ul>');
4949
$this->assertEquals($expected, $str);
5050
}
@@ -66,13 +66,13 @@ public function setDefaultClasses()
6666
$builder->getMenu('left')->getItem('test-submenu')->addItem('Test Item 3', '/url-3');
6767
$builder->getMenu('left')->getItem('test-submenu')->addItem('Test Item 4', '/url-4');
6868
$str = $builder->render('left');
69-
$expected = str_replace(["\n","\t"], '', '<ul id="menu-left" class="custom-top-class">
70-
<li><a href="/url-1" class="foo-bar" id="test-item-1">Test Item 1</a></li>
71-
<li><a href="/url-2" data-foo="bar" id="test-item-2">Test Item 2</a></li>
72-
<li><a href="#" data-toggle="custom-data" class="custom-sub-toggle-class" id="test-submenu">
69+
$expected = str_replace(["\n","\t"], '', '<ul id="menu--left" class="custom-top-class">
70+
<li><a href="/url-1" class="foo-bar" id="menu-item--test-item-1">Test Item 1</a></li>
71+
<li><a href="/url-2" data-foo="bar" id="menu-item--test-item-2">Test Item 2</a></li>
72+
<li><a href="#" data-toggle="custom-data" class="custom-sub-toggle-class" id="menu-item--test-submenu">
7373
Test Submenu <custom-tag /></a><ul class="custom-sub-class">
74-
<li><a href="/url-3" id="test-item-3">Test Item 3</a></li>
75-
<li><a href="/url-4" id="test-item-4">Test Item 4</a></li>
74+
<li><a href="/url-3" id="menu-item--test-item-3">Test Item 3</a></li>
75+
<li><a href="/url-4" id="menu-item--test-item-4">Test Item 4</a></li>
7676
</ul></li></ul>');
7777
$this->assertEquals($expected, $str);
7878
}

tests/MenuCollectionTest.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,8 @@ public function testSimpleRender()
5050
$this->assertContains('Second Item', $str);
5151
$this->assertContains('<a href="/foo-bar', $str);
5252
$this->assertContains('<a href="/bar-baz', $str);
53-
$this->assertContains('id="test-item"', $str);
54-
$this->assertContains('id="second-item"', $str);
53+
$this->assertContains('id="menu-item--test-item"', $str);
54+
$this->assertContains('id="menu-item--second-item"', $str);
5555
}
5656

5757
public function testAddWithPriorities()

tests/MenuItemTest.php

+7-7
Original file line numberDiff line numberDiff line change
@@ -17,37 +17,37 @@ public function testRenderTitleAndUrl()
1717
public function testRenderAttributes()
1818
{
1919
$item = $this->makeItem('', '', ['id' => 'foobar', 'data-foo' => 'baz']);
20-
$this->assertEquals('id="foobar" data-foo="baz"', $item->renderAttributes());
20+
$this->assertEquals('id="menu-item--foobar" data-foo="baz"', $item->renderAttributes());
2121
}
2222

2323
public function testDefaultIdIsSetFromTitle()
2424
{
2525
$item = $this->makeItem('foo bar baz', '');
26-
$this->assertEquals('id="foo-bar-baz"', $item->renderAttributes());
26+
$this->assertEquals('id="menu-item--foo-bar-baz"', $item->renderAttributes());
2727
}
2828

2929
public function testRenderGlyphicon()
3030
{
3131
$item = $this->makeItem('foo', 'bar', ['glyphicon' => 'baz']);
32-
$this->assertEquals('<a href="bar" id="foo"><span class="glyphicon glyphicon-baz"></span> foo</a>', $item->render());
32+
$this->assertEquals('<a href="bar" id="menu-item--foo"><span class="glyphicon glyphicon-baz"></span> foo</a>', $item->render());
3333
}
3434

3535
public function testRenderFAIcon()
3636
{
3737
$item = $this->makeItem('foo', 'bar', ['fa-icon' => 'baz']);
38-
$this->assertEquals('<a href="bar" id="foo"><i class="fa fa-baz"></i> foo</a>', $item->render());
38+
$this->assertEquals('<a href="bar" id="menu-item--foo"><i class="fa fa-baz"></i> foo</a>', $item->render());
3939

4040
$item = $this->makeItem('foo', 'bar', ['fa-icon' => 'baz 4x']);
41-
$this->assertEquals('<a href="bar" id="foo"><i class="fa fa-baz fa-4x"></i> foo</a>', $item->render());
41+
$this->assertEquals('<a href="bar" id="menu-item--foo"><i class="fa fa-baz fa-4x"></i> foo</a>', $item->render());
4242
}
4343

4444
public function testCustomIconResolver()
4545
{
4646
\anlutro\Menu\Item::addIconResolvers(['custom' => 'CustomIcon']);
4747
$item = $this->makeItem('foo', 'bar', ['custom' => 'baz']);
48-
$this->assertEquals('<a href="bar" id="foo">custom-icon foo</a>', $item->render());
48+
$this->assertEquals('<a href="bar" id="menu-item--foo">custom-icon foo</a>', $item->render());
4949
$item = $this->makeItem('foo', 'bar', ['custom' => 'baz', 'glyphicon' => 'baz']);
50-
$this->assertEquals('<a href="bar" id="foo">custom-icon foo</a>', $item->render());
50+
$this->assertEquals('<a href="bar" id="menu-item--foo">custom-icon foo</a>', $item->render());
5151
}
5252
}
5353

0 commit comments

Comments
 (0)