-
Notifications
You must be signed in to change notification settings - Fork 2k
/
jquery.url-helpers.js
167 lines (158 loc) · 9.33 KB
/
jquery.url-helpers.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
/* .slugify() based on jQuery Slugify a string! by Pablo Bandin
*
* See: http://tracehello.wordpress.com/2011/06/15/jquery-real-slugify-plugin/
*
* Dual licensed under the MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
*/
(function ($, window) {
$.url = {
/* Escapes a string for use in a url component. All special characters
* are url encoded and spaces are replaced by a plus rather than a %20.
*
* string - A string to convert.
*
* Examples
*
* jQuery.url.escape('apples & pears'); //=> "apples+%26+pears"
*
* Returns the escaped string.
*/
escape: function (string) {
return window.encodeURIComponent(string || '').replace(/%20/g, '+');
},
/* Converts a string into a url compatible slug. Characters that cannot
* be converted will be replaced by hyphens.
*
* string - The string to convert.
* trim - Remove starting, trailing and duplicate hyphens (default: true)
*
* Examples
*
* jQuery.url.slugify('apples & pears'); //=> 'apples-pears'
*
* Returns the new slug.
*/
slugify: function (string, trim) {
var str = '';
var index = 0;
var length = string.length;
var map = this.map;
for (;index < length; index += 1) {
str += map[string.charCodeAt(index).toString(16)] || '-';
}
str = str.toLowerCase();
return trim === false ? str : str.replace(/\-+/g, '-').replace(/^-|-$/g, '');
}
};
// The following takes two sets of characters, the first a set of hexadecimal
// Unicode character points, the second their visually similar counterparts.
// I'm not 100% sure this is the best way to handle such characters but
// it seems to be a common practice.
var unicode = ('20 30 31 32 33 34 35 36 37 38 39 41 42 43 44 45 46 ' +
'47 48 49 50 51 52 53 54 55 56 57 58 59 61 62 63 64 65 66 67 68 69 70 ' +
'71 72 73 74 75 76 77 78 79 100 101 102 103 104 105 106 107 108 109 ' +
'110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 ' +
'126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 ' +
'142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 ' +
'158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 ' +
'174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 ' +
'190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 ' +
'206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 ' +
'222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 ' +
'238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 ' +
'254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 ' +
'270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 ' +
'286 287 288 289 290 291 292 293 294 295 296 297 298 299 363 364 ' +
'365 366 367 368 369 386 388 389 390 391 392 393 394 395 396 397 ' +
'398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 ' +
'414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 ' +
'430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 ' +
'446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 ' +
'462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 ' +
'478 479 480 481 490 491 492 493 494 495 496 497 498 499 500 501 ' +
'502 503 504 505 506 507 508 509 510 511 512 513 514 515 531 532 ' +
'533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 ' +
'549 550 551 552 553 554 555 556 561 562 563 564 565 566 567 568 ' +
'569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 ' +
'585 586 587 4a 4b 4c 4d 4e 4f 5a 6a 6b 6c 6d 6e 6f 7a a2 a3 a5 a7 ' +
'a9 aa ae b2 b3 b5 b6 b9 c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 ca cb cc cd ' +
'ce cf d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 da db dc dd de df e0 e1 e2 e3 ' +
'e4 e5 e6 e7 e8 e9 ea eb ec ed ee ef f0 f1 f2 f3 f4 f5 f6 f8 f9 fa ' +
'fb fc fd ff 10a 10b 10c 10d 10e 10f 11a 11b 11c 11d 11e 11f 12a ' +
'12b 12c 12d 12e 12f 13a 13b 13c 13d 13e 13f 14a 14b 14c 14d 14e ' +
'14f 15a 15b 15c 15d 15e 15f 16a 16b 16c 16d 16e 16f 17a 17b 17c ' +
'17d 17e 17f 18a 18b 18c 18d 18e 18f 19a 19b 19c 19d 19e 19f 1a0 ' +
'1a1 1a2 1a3 1a4 1a5 1a6 1a7 1a8 1a9 1aa 1ab 1ac 1ad 1ae 1af 1b0 ' +
'1b1 1b2 1b3 1b4 1b5 1b6 1b7 1b8 1b9 1ba 1bb 1bc 1bd 1be 1bf 1c4 ' +
'1c5 1c6 1c7 1c8 1c9 1ca 1cb 1cc 1cd 1ce 1cf 1d0 1d1 1d2 1d3 1d4 ' +
'1d5 1d6 1d7 1d8 1d9 1da 1db 1dc 1dd 1de 1df 1e0 1e1 1e2 1e3 1e4 ' +
'1e5 1e6 1e7 1e8 1e9 1ea 1eb 1ec 1ed 1ee 1ef 1f0 1f1 1f2 1f3 1f4 ' +
'1f5 1f6 1f7 1f8 1f9 1fa 1fb 1fc 1fd 1fe 1ff 20a 20b 20c 20d 20e ' +
'20f 21a 21b 21c 21d 21e 21f 22a 22b 22c 22d 22e 22f 23a 23b 23c ' +
'23d 23e 23f 24a 24b 24c 24d 24e 24f 25a 25b 25c 25d 25e 25f 26a ' +
'26b 26c 26d 26e 26f 27a 27b 27c 27d 27e 27f 28a 28b 28c 28d 28e ' +
'28f 29a 29b 29c 29d 29e 29f 2a0 2a1 2a2 2a3 2a4 2a5 2a6 2a7 2a8 ' +
'2a9 2aa 2ab 2ac 2ae 2af 2b0 2b1 2b2 2b3 2b4 2b5 2b6 2b7 2b8 2df ' +
'2e0 2e1 2e2 2e3 2e4 36a 36b 36c 36d 36e 36f 37b 37c 37d 38a 38c ' +
'38e 38f 39a 39b 39c 39d 39e 39f 3a0 3a1 3a3 3a4 3a5 3a6 3a7 3a8 ' +
'3a9 3aa 3ab 3ac 3ad 3ae 3af 3b0 3b1 3b2 3b3 3b4 3b5 3b6 3b7 3b8 ' +
'3b9 3ba 3bb 3bc 3bd 3be 3bf 3c0 3c1 3c2 3c3 3c4 3c5 3c6 3c7 3c8 ' +
'3c9 3ca 3cb 3cc 3cd 3ce 3d0 3d1 3d2 3d3 3d4 3d5 3d6 3d7 3d8 3d9 ' +
'3da 3db 3dc 3dd 3de 3df 3e2 3e3 3e4 3e5 3e6 3e7 3e8 3e9 3ea 3eb ' +
'3ec 3ed 3ee 3ef 3f0 3f1 3f2 3f3 3f4 3f5 3f6 3f7 3f8 3f9 3fa 3fb ' +
'3fc 3fd 3fe 3ff 40a 40b 40c 40d 40e 40f 41a 41b 41c 41d 41e 41f ' +
'42a 42b 42c 42d 42e 42f 43a 43b 43c 43d 43e 43f 44a 44b 44c 44d ' +
'44e 44f 45a 45b 45c 45d 45e 45f 46a 46b 46c 46d 46e 46f 47a 47b ' +
'47c 47d 47e 47f 48a 48b 48c 48d 48e 48f 49a 49b 49c 49d 49e 49f ' +
'4a0 4a1 4a2 4a3 4a4 4a5 4a6 4a7 4a8 4a9 4aa 4ab 4ac 4ad 4ae 4af ' +
'4b0 4b1 4b2 4b3 4b4 4b5 4b6 4b7 4b8 4b9 4ba 4bb 4bc 4bd 4be 4bf ' +
'4c0 4c1 4c2 4c3 4c4 4c5 4c6 4c7 4c8 4c9 4ca 4cb 4cc 4cd 4ce 4cf ' +
'4d0 4d1 4d2 4d3 4d4 4d5 4d6 4d7 4d8 4d9 4da 4db 4dc 4dd 4de 4df ' +
'4e0 4e1 4e2 4e3 4e4 4e5 4e6 4e7 4e8 4e9 4ea 4eb 4ec 4ed 4ee 4ef ' +
'4f0 4f1 4f2 4f3 4f4 4f5 4f6 4f7 4f8 4f9 4fa 4fb 4fc 4fd 4fe 4ff ' +
'50a 50b 50c 50d 50e 50f 51a 51b 51c 51d 53a 53b 53c 53d 53e 53f ' +
'54a 54b 54c 54d 54e 54f 56a 56b 56c 56d 56e 56f 57a 57b 57c 57d ' +
'57e 57f 5f').split(' ');
var replacement = ('- 0 1 2 3 4 5 6 7 8 9 A B C D E F G H I P Q R S T ' +
'U V W X Y a b c d e f g h i p q r s t u v w x y A a A a A a C c C c ' +
'D d E e E e E e E e G g G g H h H h I i I i IJ ij J j K k k L l L l ' +
'N n N n N n n O o OE oe R r R r R r S s T t T t T t U u U u U u W w ' +
'Y y Y Z b B b b b b C C c D E F f G Y h i I K k A a A a E e E e I i ' +
'R r R r U u U u S s n d 8 8 Z z A a E e O o Y y l n t j db qp < ? ? ' +
'B U A E e J j a a a b c e d d e e g g g Y x u h h i i w m n n N o oe ' +
'm o r R R S f f f f t t u Z Z 3 3 ? ? 5 C O B a e i o u c d A ' +
'E H i A B r A E Z H O I E E T r E S I I J jb A B B r D E X 3 N N P ' +
'C T y O X U h W W a 6 B r d e x 3 N N P C T Y qp x U h W W e e h r ' +
'e s i i j jb W w Tb tb IC ic A a IA ia Y y O o V v V v Oy oy C c R ' +
'r F f H h X x 3 3 d d d d R R R R JT JT E e JT jt JX JX U D Q N T ' +
'2 F r p z 2 n x U B j t n C R 8 R O P O S w f q n t q t n p h a n ' +
'a u j u 2 n 2 n g l uh p o S u J K L M N O Z j k l m n o z c f Y s ' +
'c a r 2 3 u p 1 A A A A A A AE C E E E E I I I I D N O O O O O X O ' +
'U U U U Y p b a a a a a a ae c e e e e i i i i o n o o o o o o u u ' +
'u u y y C c C c D d E e G g G g I i I i I i l L l L l L n n O o O ' +
'o S s S s S s U u U u U u z Z z Z z f D d d q E e l h w N n O O o ' +
'P P P p R S s E l t T t T U u U U Y y Z z 3 3 3 3 2 5 5 5 p DZ Dz ' +
'dz Lj Lj lj NJ Nj nj A a I i O o U u U u U u U u U u e A a A a AE ' +
'ae G g G g K k Q q Q q 3 3 J dz dZ DZ g G h p N n A a AE ae O o I ' +
'i O o O o T t 3 3 H h O o O o O o A C c L T s Q q R r Y y e 3 3 3 ' +
'3 j i I I I h w R r R R r r u v A M Y Y B G H j K L q ? c dz d3 dz ' +
'ts tf tc fn ls lz ww u u h h j r r r R W Y x Y 1 s x c h m r t v x ' +
'c c c I O Y O K A M N E O TT P E T Y O X Y O I Y a e n i v a b y d ' +
'e c n 0 1 k j u v c o tt p s o t u q X Y w i u o u w b e Y Y Y O w ' +
'x Q q C c F f N N W w q q h e S s X x 6 6 t t x e c j O E E p p C ' +
'M M p C C C Hb Th K N Y U K jI M H O TT b bI b E IO R K JI M H O N ' +
'b bI b e io r Hb h k n y u mY my Im Im 3 3 O o W w W W H H B b P p ' +
'K k K k K k K k H h H h Ih ih O o C c T t Y y Y y X x TI ti H h H ' +
'h H h E e E e I X x K k jt jt H h H h H h M m l A a A a AE ae E e ' +
'e e E e X X 3 3 3 3 N n N n O o O o O o E e Y y Y y Y y H h R r bI ' +
'bi F f X x X x H h G g T t Q q W w d r L Iu O y m o N U Y S d h l ' +
'lu d y w 2 n u y un _').split(' ');
// Map the Unicode characters to their counterparts in an object.
var map = {};
for (var index = 0, length = unicode.length; index < length; index += 1) {
map[unicode[index]] = replacement[index];
}
$.url.map = map;
})(this.jQuery, this);