Задача: Переключатель в кириллицу
Исходник: Преобразователь английского текста в русский, язык: javascript [code #149, hits: 8680]
автор: - [добавлен: 24.05.2006]
  1. <html>
  2. <head>
  3. <title>Layout Mistakes Fixer</title>
  4. <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
  5. <script language="JavaScript">
  6. <!--//
  7. function getfixes()
  8. {var obj = document.getElementById("text_field");
  9.  
  10. if (navigator.userAgent.indexOf("MSIE") != -1 && navigator.userAgent.indexOf("Opera") == -1)
  11. {var sel = document.selection.createRange();
  12. if (sel.text)
  13. sel.text = fix_layout(sel.text);
  14. else
  15. obj.value = fix_layout(obj.value);
  16. }
  17. else
  18. if (navigator.userAgent.indexOf("Gecko") != -1)
  19. {if (obj.selectionStart != obj.selectionEnd)
  20. {var before_sel = obj.value.substring(0, obj.selectionStart);
  21. var string_sel = fix_layout(obj.value.substring(obj.selectionStart, obj.selectionEnd));
  22. var after_sel = obj.value.substring(obj.selectionEnd, obj.value.length);
  23. obj.value = before_sel + string_sel + after_sel;
  24. }
  25. else
  26. obj.value = fix_layout(obj.value);
  27. }
  28. else
  29. if (window.opera)
  30. {obj.value = fix_layout(obj.value);
  31. }
  32.  
  33. }
  34.  
  35. function fix_layout(txt)
  36. {var layoutEn = new Array("`","q","w","e","r","t","y","u","i","o","p","\\[","\\]","a","s","d","f","g","h","j","k","l",";","'","z","x","c","v","b","n","m","\,","\\.","\\/","~","Q","W","E","R","T","Y","U","I","O","P","\\{","\\}","A","S","D","F","G","H","J","K","L",":","\"","Z","X","C","V","B","N","M","<",">","\\?","\\|","@","#","\\$","\\^","&");
  37. var layoutRu = new Array("ё","й","ц","у","к","е","н","г","ш","щ","з","х","ъ","ф","ы","в","а","п","р","о","л","д","ж","э","я","ч","с","м","и","т","ь","б","ю",".","Ё","Й","Ц","У","К","Е","Н","Г","Ш","Щ","З","Х","Ъ","Ф","Ы","В","А","П","Р","О","Л","Д","Ж","Э","Я","Ч","С","М","И","Т","Ь","Б","Ю","\,","/","\"","№",";",":","?");
  38. var re = "";
  39. for(var i=0;i<layoutEn.length;i++)
  40. {re = new RegExp(layoutEn[i], "g");
  41. txt = txt.replace(re,layoutRu[i]);
  42. }
  43. return txt;
  44. }
  45. //-->
  46. </script>
  47. </head>
  48. <body>
  49. <input type="button" onclick="getfixes()" value="фикс раскладки">
  50. <br><br>
  51. <textarea id="text_field" cols="60" rows="7"></textarea>
  52. </body>
  53. </html>
В виде 2-х массивов реализуется прозрачный маппинг одной раскладки в другую.
Поддержка замены в выделенном тексте работает для MSIE и Gecko-based браузеров.
Тестировалось на: IE 6.0 SP2, Mozilla FF 1.5, Opera 8.5

+добавить реализацию