Skip to content

Commit c5b9543

Browse files
committed
remove dependencies
1 parent 625802f commit c5b9543

File tree

7 files changed

+140
-15
lines changed

7 files changed

+140
-15
lines changed

composer.json

+1-3
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,7 @@
99
}
1010
],
1111
"require": {
12-
"php": ">=5.4.0",
13-
"illuminate/support": "~4.1",
14-
"patchwork/utf8": "1.1.*"
12+
"php": ">=5.4.0"
1513
},
1614
"require-dev": {
1715
"mockery/mockery": "0.9.*"

src/Builder.php

-2
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@
99

1010
namespace anlutro\Menu;
1111

12-
use Illuminate\Support\Str;
13-
1412
/**
1513
* The top-level menu builder that contains information about the whole menu
1614
* system.

src/Collection.php

+2-3
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,7 @@
99

1010
namespace anlutro\Menu;
1111

12-
use Illuminate\Support\Str;
13-
use Illuminate\Support\Collection as BaseCollection;
12+
use anlutro\Menu\Util\StringUtils;
1413

1514
/**
1615
* A collection of menu items.
@@ -155,7 +154,7 @@ public function addSubmenu($title, array $attributes = array(), $location = null
155154
*/
156155
public function makeSubmenu($title, array $attributes = array())
157156
{
158-
$collection = new static($this->builder, ['id' => Str::slug($title)]);
157+
$collection = new static($this->builder, ['id' => StringUtils::slug($title)]);
159158

160159
return new Nodes\SubmenuNode($title, $collection, $attributes);
161160
}

src/Nodes/AbstractNode.php

+4-4
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
namespace anlutro\Menu\Nodes;
1111

12-
use Illuminate\Support\Str;
12+
use anlutro\Menu\Util\StringUtils;
1313

1414
/**
1515
* A menu item.
@@ -119,9 +119,9 @@ protected function parseAttributes(array $attributes)
119119
$this->prefix = $attributes['prefix'];
120120
}
121121

122-
$attributes['id'] = isset($attributes['id']) ? $attributes['id'] : Str::slug($this->title);
122+
$attributes['id'] = isset($attributes['id']) ? $attributes['id'] : StringUtils::slug($this->title);
123123

124-
return array_except($attributes, static::$notHtmlAttributes);
124+
return array_diff_key($attributes, array_flip(static::$notHtmlAttributes));
125125
}
126126

127127
/**
@@ -136,7 +136,7 @@ public function getId()
136136

137137
public function getTitle()
138138
{
139-
return $this->prefix.e($this->title).$this->suffix;
139+
return $this->prefix.htmlentities($this->title, ENT_QUOTES, 'UTF-8', false).$this->suffix;
140140
}
141141

142142
public function getAttributes()

src/Nodes/AnchorNode.php

-2
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@
99

1010
namespace anlutro\Menu\Nodes;
1111

12-
use Illuminate\Support\Str;
13-
1412
/**
1513
* A menu item.
1614
*/

src/Nodes/SubmenuNode.php

-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99

1010
namespace anlutro\Menu\Nodes;
1111

12-
use Illuminate\Support\Str;
1312
use anlutro\Menu\Collection;
1413

1514
/**

src/Util/StringUtils.php

+133
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
<?php
2+
namespace anlutro\Menu\Util;
3+
4+
class StringUtils
5+
{
6+
public static function slug($string, $separator = '-')
7+
{
8+
foreach (static::charsArray() as $key => $value) {
9+
$string = str_replace($value, $key, $string);
10+
}
11+
12+
$string = preg_replace('/[^\x20-\x7E]/u', '', $string);
13+
14+
// convert all dashes/underscores into separator
15+
$flip = ($separator == '-') ? '_' : '-';
16+
17+
$string = preg_replace('!['.preg_quote($flip).']+!u', $separator, $string);
18+
19+
// remove all characters that are not the separator, letters, numbers, or whitespace.
20+
$string = preg_replace('![^'.preg_quote($separator).'\pL\pN\s]+!u', '', mb_strtolower($string));
21+
22+
// replace all separator characters and whitespace by a single separator
23+
$string = preg_replace('!['.preg_quote($separator).'\s]+!u', $separator, $string);
24+
25+
return trim($string, $separator);
26+
}
27+
28+
protected static function charsArray()
29+
{
30+
static $charsArray;
31+
if (isset($charsArray)) return $charsArray;
32+
33+
return $charsArray = array(
34+
'a' => array(
35+
'à', 'á', '', 'ã', '', 'ă', '', '', '', '',
36+
'', 'â', '', '', '', '', '', 'ä', 'ā', 'ą',
37+
'å', 'α', 'ά', '', '', '', '', '', '', '',
38+
'', '', '', '', '', '', '', '', '', '',
39+
'ά', '', '', '', '', '', '', '', 'а'),
40+
'b' => array('б', 'β'),
41+
'c' => array('ç', 'ć', 'č', 'ĉ', 'ċ'),
42+
'd' => array('ď', 'ð', 'đ', 'ƌ', 'ȡ', 'ɖ', 'ɗ', '', '', '',
43+
'д'),
44+
'e' => array('é', 'è', '', '', '', 'ê', 'ế', '', '', '',
45+
'', 'ë', 'ē', 'ę', 'ě', 'ĕ', 'ė', 'ε', 'έ', '',
46+
'', '', '', '', '', '', 'έ', 'е', 'ё', 'э',
47+
'є'),
48+
'f' => array('ф'),
49+
'g' => array('ĝ', 'ğ', 'ġ', 'ģ', 'г', 'ґ'),
50+
'h' => array('ĥ', 'ħ'),
51+
'i' => array('í', 'ì', '', 'ĩ', '', 'î', 'ï', 'ī', 'ĭ', 'į',
52+
'ı', 'ι', 'ί', 'ϊ', 'ΐ', '', '', '', '', '',
53+
'', '', '', '', 'ί', '', '', '', 'ΐ', '',
54+
'', 'і', 'ї', 'и'),
55+
'j' => array('ĵ'),
56+
'k' => array('ķ', 'ĸ', 'к'),
57+
'l' => array('ł', 'ľ', 'ĺ', 'ļ', 'ŀ', 'л'),
58+
'm' => array('м'),
59+
'n' => array('ñ', 'ń', 'ň', 'ņ', 'ʼn', 'ŋ', 'ν', 'н'),
60+
'o' => array('ó', 'ò', '', 'õ', '', 'ô', '', '', '', '',
61+
'', 'ơ', '', '', '', '', '', 'ø', 'ō', 'ő',
62+
'ŏ', 'ο', '', '', '', '', '', '', '', 'ό',
63+
'ö', 'о'),
64+
'p' => array('п'),
65+
'r' => array('ŕ', 'ř', 'ŗ', 'р'),
66+
's' => array('ś', 'š', 'ş', 'с'),
67+
't' => array('ť', 'ţ', 'т'),
68+
'u' => array('ú', 'ù', '', 'ũ', '', 'ư', '', '', '', '',
69+
'', 'ü', 'û', 'ū', 'ů', 'ű', 'ŭ', 'ų', 'µ', 'у'),
70+
'v' => array('в'),
71+
'w' => array('ŵ'),
72+
'y' => array('ý', '', '', '', '', 'ÿ', 'ŷ', 'й', 'ы'),
73+
'z' => array('ź', 'ž', 'ż', 'з'),
74+
'ch' => array('ч'),
75+
'kh' => array('х'),
76+
'oe' => array('œ'),
77+
'sh' => array('ш'),
78+
'shch' => array('щ'),
79+
'ts' => array('ц'),
80+
'ya' => array('я'),
81+
'yu' => array('ю'),
82+
'zh' => array('ж'),
83+
'A' => array('Á', 'À', '', 'Ã', '', 'Ă', '', '', '', '',
84+
'', 'Â', '', '', '', '', '', 'Ä', 'Å', 'Ā',
85+
'Ą', 'Α', 'Ά', '', '', '', '', '', '', '',
86+
'', '', '', '', '', '', '', '', '', '',
87+
'', '', 'Ά', '', 'А'),
88+
'B' => array('Б'),
89+
'C' => array('Ć', 'Č', 'Ĉ', 'Ċ'),
90+
'D' => array('Ď', 'Ð', 'Đ', 'Ɖ', 'Ɗ', 'Ƌ', '', '', 'Д'),
91+
'E' => array('É', 'È', '', '', '', 'Ê', '', '', '', '',
92+
'', 'Ë', 'Ē', 'Ę', 'Ě', 'Ĕ', 'Ė', 'Ε', 'Έ', '',
93+
'', '', '', '', '', 'Έ', '', 'Е', 'Ё', 'Э',
94+
'Є'),
95+
'F' => array('Ф'),
96+
'G' => array('Ğ', 'Ġ', 'Ģ', 'Г', 'Ґ'),
97+
'I' => array('Í', 'Ì', '', 'Ĩ', '', 'Î', 'Ï', 'Ī', 'Ĭ', 'Į',
98+
'İ', 'Ι', 'Ί', 'Ϊ', '', '', '', '', '', '',
99+
'Ἷ', '', '', '', 'Ί', 'И', 'І', 'Ї'),
100+
'K' => array('К'),
101+
'L' => array('Ĺ', 'Ł', 'Л'),
102+
'M' => array('М'),
103+
'N' => array('Ń', 'Ñ', 'Ň', 'Ņ', 'Ŋ', 'Н'),
104+
'O' => array('Ó', 'Ò', '', 'Õ', '', 'Ô', '', '', '', '',
105+
'', 'Ơ', '', '', '', '', '', 'Ö', 'Ø', 'Ō',
106+
'Ő', 'Ŏ', 'Ο', 'Ό', '', '', '', '', '', '',
107+
'', 'Ό', 'О'),
108+
'P' => array('П'),
109+
'R' => array('Ř', 'Ŕ', 'Р'),
110+
'S' => array('Ş', 'Ŝ', 'Ș', 'Š', 'Ś', 'С'),
111+
'T' => array('Ť', 'Ţ', 'Ŧ', 'Ț', 'Т'),
112+
'U' => array('Ú', 'Ù', '', 'Ũ', '', 'Ư', '', '', '', '',
113+
'', 'Û', 'Ü', 'Ū', 'Ů', 'Ű', 'Ŭ', 'Ų', 'У'),
114+
'V' => array('В'),
115+
'Y' => array('Ý', '', '', '', '', 'Ÿ', '', '', '', 'Ύ',
116+
'Ы', 'Й'),
117+
'Z' => array('Ź', 'Ž', 'Ż', 'З'),
118+
'CH' => array('Ч'),
119+
'KH' => array('Х'),
120+
'SH' => array('Ш'),
121+
'SHCH' => array('Щ'),
122+
'TS' => array('Ц'),
123+
'YA' => array('Я'),
124+
'YU' => array('Ю'),
125+
'ZH' => array('Ж'),
126+
' ' => array("\xC2\xA0", "\xE2\x80\x80", "\xE2\x80\x81",
127+
"\xE2\x80\x82", "\xE2\x80\x83", "\xE2\x80\x84",
128+
"\xE2\x80\x85", "\xE2\x80\x86", "\xE2\x80\x87",
129+
"\xE2\x80\x88", "\xE2\x80\x89", "\xE2\x80\x8A",
130+
"\xE2\x80\xAF", "\xE2\x81\x9F", "\xE3\x80\x80"),
131+
);
132+
}
133+
}

0 commit comments

Comments
 (0)