| 1 |
|
// $Id:$ |
| 2 |
if (Drupal.jsEnabled) { |
if (Drupal.jsEnabled) { |
| 3 |
$(document).ready(function () { |
$(document).ready(function () { |
| 4 |
function URLify(s, num_chars) { |
var LATIN_MAP = { |
| 5 |
|
'À': 'A', 'Á': 'A', 'Â': 'A', 'Ã': 'A', 'Ä': 'A', 'Å': 'A', 'Æ': 'AE', 'Ç': |
| 6 |
|
'C', 'È': 'E', 'É': 'E', 'Ê': 'E', 'Ë': 'E', 'Ì': 'I', 'Í': 'I', 'Î': 'I', |
| 7 |
|
'Ï': 'I', 'Ð': 'D', 'Ñ': 'N', 'Ò': 'O', 'Ó': 'O', 'Ô': 'O', 'Õ': 'O', 'Ö': |
| 8 |
|
'O', 'Ő': 'O', 'Ø': 'O', 'Ù': 'U', 'Ú': 'U', 'Û': 'U', 'Ü': 'U', 'Ű': 'U', |
| 9 |
|
'Ý': 'Y', 'Þ': 'TH', 'ß': 'ss', 'à':'a', 'á':'a', 'â': 'a', 'ã': 'a', 'ä': |
| 10 |
|
'a', 'å': 'a', 'æ': 'ae', 'ç': 'c', 'è': 'e', 'é': 'e', 'ê': 'e', 'ë': 'e', |
| 11 |
|
'ì': 'i', 'í': 'i', 'î': 'i', 'ï': 'i', 'ð': 'o', 'ñ': 'n', 'ò': 'o', 'ó': |
| 12 |
|
'o', 'ô': 'o', 'õ': 'o', 'ö': 'o', 'ő': 'o', 'ø': 'o', 'ù': 'u', 'ú': 'u', |
| 13 |
|
'û': 'u', 'ü': 'u', 'ű': 'u', 'ý': 'y', 'þ': 'th', 'ÿ': 'y' |
| 14 |
|
}; |
| 15 |
|
|
| 16 |
|
var LATIN_SYMBOLS_MAP = { |
| 17 |
|
'©':'(c)' |
| 18 |
|
}; |
| 19 |
|
|
| 20 |
|
var GREEK_MAP = { |
| 21 |
|
'α':'a', 'β':'b', 'γ':'g', 'δ':'d', 'ε':'e', 'ζ':'z', 'η':'h', 'θ':'8', |
| 22 |
|
'ι':'i', 'κ':'k', 'λ':'l', 'μ':'m', 'ν':'n', 'ξ':'3', 'ο':'o', 'π':'p', |
| 23 |
|
'ρ':'r', 'σ':'s', 'τ':'t', 'υ':'y', 'φ':'f', 'χ':'x', 'ψ':'ps', 'ω':'w', |
| 24 |
|
'ά':'a', 'έ':'e', 'ί':'i', 'ό':'o', 'ύ':'y', 'ή':'h', 'ώ':'w', 'ς':'s', |
| 25 |
|
'ϊ':'i', 'ΰ':'y', 'ϋ':'y', 'ΐ':'i', |
| 26 |
|
'Α':'A', 'Β':'B', 'Γ':'G', 'Δ':'D', 'Ε':'E', 'Ζ':'Z', 'Η':'H', 'Θ':'8', |
| 27 |
|
'Ι':'I', 'Κ':'K', 'Λ':'L', 'Μ':'M', 'Ν':'N', 'Ξ':'3', 'Ο':'O', 'Π':'P', |
| 28 |
|
'Ρ':'R', 'Σ':'S', 'Τ':'T', 'Υ':'Y', 'Φ':'F', 'Χ':'X', 'Ψ':'PS', 'Ω':'W', |
| 29 |
|
'Ά':'A', 'Έ':'E', 'Ί':'I', 'Ό':'O', 'Ύ':'Y', 'Ή':'H', 'Ώ':'W', 'Ϊ':'I', |
| 30 |
|
'Ϋ':'Y' |
| 31 |
|
}; |
| 32 |
|
|
| 33 |
|
var TURKISH_MAP = { |
| 34 |
|
'ş':'s', 'Ş':'S', 'ı':'i', 'İ':'I', 'ç':'c', 'Ç':'C', 'ü':'u', 'Ü':'U', |
| 35 |
|
'ö':'o', 'Ö':'O', 'ğ':'g', 'Ğ':'G' |
| 36 |
|
}; |
| 37 |
|
|
| 38 |
|
var RUSSIAN_MAP = { |
| 39 |
|
'а':'a', 'б':'b', 'в':'v', 'г':'g', 'д':'d', 'е':'e', 'ё':'yo', 'ж':'zh', |
| 40 |
|
'з':'z', 'и':'i', 'й':'j', 'к':'k', 'л':'l', 'м':'m', 'н':'n', 'о':'o', |
| 41 |
|
'п':'p', 'р':'r', 'с':'s', 'т':'t', 'у':'u', 'ф':'f', 'х':'h', 'ц':'c', |
| 42 |
|
'ч':'ch', 'ш':'sh', 'щ':'sh', 'ъ':'', 'ы':'y', 'ь':'', 'э':'e', 'ю':'yu', |
| 43 |
|
'я':'ya', |
| 44 |
|
'А':'A', 'Б':'B', 'В':'V', 'Г':'G', 'Д':'D', 'Е':'E', 'Ё':'Yo', 'Ж':'Zh', |
| 45 |
|
'З':'Z', 'И':'I', 'Й':'J', 'К':'K', 'Л':'L', 'М':'M', 'Н':'N', 'О':'O', |
| 46 |
|
'П':'P', 'Р':'R', 'С':'S', 'Т':'T', 'У':'U', 'Ф':'F', 'Х':'H', 'Ц':'C', |
| 47 |
|
'Ч':'Ch', 'Ш':'Sh', 'Щ':'Sh', 'Ъ':'', 'Ы':'Y', 'Ь':'', 'Э':'E', 'Ю':'Yu', |
| 48 |
|
'Я':'Ya' |
| 49 |
|
}; |
| 50 |
|
|
| 51 |
|
var UKRAINIAN_MAP = { |
| 52 |
|
'Є':'Ye', 'І':'I', 'Ї':'Yi', 'Ґ':'G', 'є':'ye', 'і':'i', 'ї':'yi', 'ґ':'g' |
| 53 |
|
}; |
| 54 |
|
|
| 55 |
|
var CZECH_MAP = { |
| 56 |
|
'č':'c', 'ď':'d', 'ě':'e', 'ň': 'n', 'ř':'r', 'š':'s', 'ť':'t', 'ů':'u', |
| 57 |
|
'ž':'z' |
| 58 |
|
}; |
| 59 |
|
|
| 60 |
|
var ALL_DOWNCODE_MAPS = new Array(); |
| 61 |
|
ALL_DOWNCODE_MAPS[0] = LATIN_MAP; |
| 62 |
|
ALL_DOWNCODE_MAPS[1] = LATIN_SYMBOLS_MAP; |
| 63 |
|
ALL_DOWNCODE_MAPS[2] = GREEK_MAP; |
| 64 |
|
ALL_DOWNCODE_MAPS[3] = TURKISH_MAP; |
| 65 |
|
ALL_DOWNCODE_MAPS[4] = RUSSIAN_MAP; |
| 66 |
|
ALL_DOWNCODE_MAPS[5] = UKRAINIAN_MAP; |
| 67 |
|
ALL_DOWNCODE_MAPS[6] = CZECH_MAP; |
| 68 |
|
|
| 69 |
|
var Downcoder = new Object(); |
| 70 |
|
|
| 71 |
|
Downcoder.Initialize = function() { |
| 72 |
|
if (Downcoder.map) // already made |
| 73 |
|
return ; |
| 74 |
|
|
| 75 |
|
Downcoder.map = {}; |
| 76 |
|
Downcoder.chars = '' ; |
| 77 |
|
|
| 78 |
|
for(var i in ALL_DOWNCODE_MAPS) { |
| 79 |
|
var lookup = ALL_DOWNCODE_MAPS[i]; |
| 80 |
|
for (var c in lookup) { |
| 81 |
|
Downcoder.map[c] = lookup[c] ; |
| 82 |
|
Downcoder.chars += c ; |
| 83 |
|
} |
| 84 |
|
} |
| 85 |
|
|
| 86 |
|
Downcoder.regex = new RegExp('[' + Downcoder.chars + ']|[^' + Downcoder.chars + ']+','g'); |
| 87 |
|
} |
| 88 |
|
|
| 89 |
|
downcode = function( slug ) { |
| 90 |
|
Downcoder.Initialize() ; |
| 91 |
|
var downcoded = ""; |
| 92 |
|
var pieces = slug.match(Downcoder.regex); |
| 93 |
|
if (pieces) { |
| 94 |
|
for (var i = 0 ; i < pieces.length ; i++) { |
| 95 |
|
if (pieces[i].length == 1) { |
| 96 |
|
var mapped = Downcoder.map[pieces[i]] ; |
| 97 |
|
if (mapped != null) { |
| 98 |
|
downcoded += mapped; |
| 99 |
|
continue ; |
| 100 |
|
} |
| 101 |
|
} |
| 102 |
|
downcoded += pieces[i]; |
| 103 |
|
} |
| 104 |
|
} |
| 105 |
|
else { |
| 106 |
|
downcoded = slug; |
| 107 |
|
} |
| 108 |
|
return downcoded; |
| 109 |
|
}; |
| 110 |
|
//FIXME: Why doesn't function URLify() works anymore? |
| 111 |
|
// The form below has to be used for some reason. |
| 112 |
|
URLify = function (s, num_chars) { |
| 113 |
// changes, e.g., "Petty theft" to "petty_theft" |
// changes, e.g., "Petty theft" to "petty_theft" |
| 114 |
// remove all these words from the string before urlifying |
// remove all these words from the string before urlifying |
| 115 |
|
s = downcode(s); |
| 116 |
var removelist = [Drupal.settings.urlify.remove_list]; |
var removelist = [Drupal.settings.urlify.remove_list]; |
| 117 |
r = new RegExp('\\\b(' + removelist.join('|') + ')\\\b', 'gi'); |
r = new RegExp('\\\b(' + removelist.join('|') + ')\\\b', 'gi'); |
| 118 |
s = s.replace(r, ''); |
s = s.replace(r, ''); |
| 119 |
s = s.replace(/[^-A-Z0-9\s]/gi, ''); // remove unneeded chars |
// if downcode doesn't hit, the char will be stripped here |
| 120 |
|
s = s.replace(/[^-\w\s]/g, ''); // remove unneeded chars |
| 121 |
|
//s = s.replace(/[^-A-Z0-9\s]/gi, ''); |
| 122 |
s = s.replace(/^\s+|\s+$/g, ''); // trim leading/trailing spaces |
s = s.replace(/^\s+|\s+$/g, ''); // trim leading/trailing spaces |
| 123 |
s = s.replace(/[-\s]+/g, '-'); // convert spaces to hyphens |
s = s.replace(/[-\s]+/g, '-'); // convert spaces to hyphens |
| 124 |
s = s.toLowerCase(); // convert to lowercase |
s = s.toLowerCase(); // convert to lowercase |