/django/contrib/admin/media/js/urlify.js

https://code.google.com/p/mango-py/ · JavaScript · 140 lines · 129 code · 8 blank · 3 comment · 9 complexity · 11f885692a3b65de7f75581e1c2a5a1c MD5 · raw file

  1. var LATIN_MAP = {
  2. 'Ŕ': 'A', 'Á': 'A', 'Â': 'A', 'Ă': 'A', 'Ä': 'A', 'Ĺ': 'A', 'Ć': 'AE', 'Ç':
  3. 'C', 'Č': 'E', 'É': 'E', 'Ę': 'E', 'Ë': 'E', 'Ě': 'I', 'Í': 'I', 'Î': 'I',
  4. 'Ď': 'I', 'Đ': 'D', 'Ń': 'N', 'Ň': 'O', 'Ó': 'O', 'Ô': 'O', 'Ő': 'O', 'Ö':
  5. 'O', '?': 'O', 'Ř': 'O', 'Ů': 'U', 'Ú': 'U', 'Ű': 'U', 'Ü': 'U', '?': 'U',
  6. 'Ý': 'Y', 'Ţ': 'TH', 'ß': 'ss', 'ŕ':'a', 'á':'a', 'â': 'a', 'ă': 'a', 'ä':
  7. 'a', 'ĺ': 'a', 'ć': 'ae', 'ç': 'c', 'č': 'e', 'é': 'e', 'ę': 'e', 'ë': 'e',
  8. 'ě': 'i', 'í': 'i', 'î': 'i', 'ď': 'i', 'đ': 'd', 'ń': 'n', 'ň': 'o', 'ó':
  9. 'o', 'ô': 'o', 'ő': 'o', 'ö': 'o', '?': 'o', 'ř': 'o', 'ů': 'u', 'ú': 'u',
  10. 'ű': 'u', 'ü': 'u', '?': 'u', 'ý': 'y', 'ţ': 'th', '˙': 'y'
  11. }
  12. var LATIN_SYMBOLS_MAP = {
  13. 'Š':'(c)'
  14. }
  15. var GREEK_MAP = {
  16. '?':'a', '?':'b', '?':'g', '?':'d', '?':'e', '?':'z', '?':'h', '?':'8',
  17. '?':'i', '?':'k', '?':'l', '?':'m', '?':'n', '?':'3', '?':'o', '?':'p',
  18. '?':'r', '?':'s', '?':'t', '?':'y', '?':'f', '?':'x', '?':'ps', '?':'w',
  19. '?':'a', '?':'e', '?':'i', '?':'o', '?':'y', '?':'h', '?':'w', '?':'s',
  20. '?':'i', '?':'y', '?':'y', '?':'i',
  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', '?':'I',
  25. '?':'Y'
  26. }
  27. var TURKISH_MAP = {
  28. '?':'s', '?':'S', '?':'i', '?':'I', 'ç':'c', 'Ç':'C', 'ü':'u', 'Ü':'U',
  29. 'ö':'o', 'Ö':'O', '?':'g', '?':'G'
  30. }
  31. var RUSSIAN_MAP = {
  32. '?':'a', '?':'b', '?':'v', '?':'g', '?':'d', '?':'e', '?':'yo', '?':'zh',
  33. '?':'z', '?':'i', '?':'j', '?':'k', '?':'l', '?':'m', '?':'n', '?':'o',
  34. '?':'p', '?':'r', '?':'s', '?':'t', '?':'u', '?':'f', '?':'h', '?':'c',
  35. '?':'ch', '?':'sh', '?':'sh', '?':'', '?':'y', '?':'', '?':'e', '?':'yu',
  36. '?':'ya',
  37. '?':'A', '?':'B', '?':'V', '?':'G', '?':'D', '?':'E', '?':'Yo', '?':'Zh',
  38. '?':'Z', '?':'I', '?':'J', '?':'K', '?':'L', '?':'M', '?':'N', '?':'O',
  39. '?':'P', '?':'R', '?':'S', '?':'T', '?':'U', '?':'F', '?':'H', '?':'C',
  40. '?':'Ch', '?':'Sh', '?':'Sh', '?':'', '?':'Y', '?':'', '?':'E', '?':'Yu',
  41. '?':'Ya'
  42. }
  43. var UKRAINIAN_MAP = {
  44. '?':'Ye', '?':'I', '?':'Yi', '?':'G', '?':'ye', '?':'i', '?':'yi', '?':'g'
  45. }
  46. var CZECH_MAP = {
  47. '?':'c', '?':'d', '?':'e', '?': 'n', '?':'r', 'š':'s', '?':'t', '?':'u',
  48. 'ž':'z', '?':'C', '?':'D', '?':'E', '?': 'N', '?':'R', 'Š':'S', '?':'T',
  49. '?':'U', 'Ž':'Z'
  50. }
  51. var POLISH_MAP = {
  52. '?':'a', '?':'c', '?':'e', '?':'l', '?':'n', 'ó':'o', '?':'s', '?':'z',
  53. '?':'z', '?':'A', '?':'C', '?':'e', '?':'L', '?':'N', 'Ó':'o', '?':'S',
  54. '?':'Z', '?':'Z'
  55. }
  56. var LATVIAN_MAP = {
  57. '?':'a', '?':'c', '?':'e', '?':'g', '?':'i', '?':'k', '?':'l', '?':'n',
  58. 'š':'s', '?':'u', 'ž':'z', '?':'A', '?':'C', '?':'E', '?':'G', '?':'i',
  59. '?':'k', '?':'L', '?':'N', 'Š':'S', '?':'u', 'Ž':'Z'
  60. }
  61. var ALL_DOWNCODE_MAPS=new Array()
  62. ALL_DOWNCODE_MAPS[0]=LATIN_MAP
  63. ALL_DOWNCODE_MAPS[1]=LATIN_SYMBOLS_MAP
  64. ALL_DOWNCODE_MAPS[2]=GREEK_MAP
  65. ALL_DOWNCODE_MAPS[3]=TURKISH_MAP
  66. ALL_DOWNCODE_MAPS[4]=RUSSIAN_MAP
  67. ALL_DOWNCODE_MAPS[5]=UKRAINIAN_MAP
  68. ALL_DOWNCODE_MAPS[6]=CZECH_MAP
  69. ALL_DOWNCODE_MAPS[7]=POLISH_MAP
  70. ALL_DOWNCODE_MAPS[8]=LATVIAN_MAP
  71. var Downcoder = new Object();
  72. Downcoder.Initialize = function()
  73. {
  74. if (Downcoder.map) // already made
  75. return ;
  76. Downcoder.map ={}
  77. Downcoder.chars = '' ;
  78. for(var i in ALL_DOWNCODE_MAPS)
  79. {
  80. var lookup = ALL_DOWNCODE_MAPS[i]
  81. for (var c in lookup)
  82. {
  83. Downcoder.map[c] = lookup[c] ;
  84. Downcoder.chars += c ;
  85. }
  86. }
  87. Downcoder.regex = new RegExp('[' + Downcoder.chars + ']|[^' + Downcoder.chars + ']+','g') ;
  88. }
  89. downcode= function( slug )
  90. {
  91. Downcoder.Initialize() ;
  92. var downcoded =""
  93. var pieces = slug.match(Downcoder.regex);
  94. if(pieces)
  95. {
  96. for (var i = 0 ; i < pieces.length ; i++)
  97. {
  98. if (pieces[i].length == 1)
  99. {
  100. var mapped = Downcoder.map[pieces[i]] ;
  101. if (mapped != null)
  102. {
  103. downcoded+=mapped;
  104. continue ;
  105. }
  106. }
  107. downcoded+=pieces[i];
  108. }
  109. }
  110. else
  111. {
  112. downcoded = slug;
  113. }
  114. return downcoded;
  115. }
  116. function URLify(s, num_chars) {
  117. // changes, e.g., "Petty theft" to "petty_theft"
  118. // remove all these words from the string before urlifying
  119. s = downcode(s);
  120. removelist = ["a", "an", "as", "at", "before", "but", "by", "for", "from",
  121. "is", "in", "into", "like", "of", "off", "on", "onto", "per",
  122. "since", "than", "the", "this", "that", "to", "up", "via",
  123. "with"];
  124. r = new RegExp('\\b(' + removelist.join('|') + ')\\b', 'gi');
  125. s = s.replace(r, '');
  126. // if downcode doesn't hit, the char will be stripped here
  127. s = s.replace(/[^-\w\s]/g, ''); // remove unneeded chars
  128. s = s.replace(/^\s+|\s+$/g, ''); // trim leading/trailing spaces
  129. s = s.replace(/[-\s]+/g, '-'); // convert spaces to hyphens
  130. s = s.toLowerCase(); // convert to lowercase
  131. return s.substring(0, num_chars);// trim to first num_chars chars
  132. }