Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> переключатель раскладки клавиатуры, простой транслит 
:(
    Опции темы
Alx
Дата 21.1.2006, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: нет
Всего: 78



вот, часто бывает, что когда пишешь что-нибудь забываешь переключить раскладку клавиатуры.
конечно, есть специальные умные программы - переключатели клавиатуры, но к сожалению они не всегда делают то, что нужно и под конец начинают раздражать больше чем их отстутствие.
поэтому написал такую маленькую функцию - она меняет все английские символы в выделенной строке инпута так, если бы вы вводили их с русской раскладкой:

Код

function fix_layout(txt)
{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","<",">","\\?","\\|","@","#","\\$","\\^","&");
var layoutRu = new Array("ё","й","ц","у","к","е","н","г","ш","щ","з","х","ъ","ф","ы","в","а","п","р","о","л","д","ж","э","я","ч","с","м","и","т","ь","б","ю",".","Ё","Й","Ц","У","К","Е","Н","Г","Ш","Щ","З","Х","Ъ","Ф","Ы","В","А","П","Р","О","Л","Д","Ж","Э","Я","Ч","С","М","И","Т","Ь","Б","Ю","\,","/","\"","№",";",":","?");
var re = "";
for(var i=0;i<layoutEn.length;i++)
{re = new RegExp(layoutEn[i], "g");
txt = txt.replace(re,layoutRu[i]);
}
return txt;
}


как видите функция очень простая. в ней два массива. содержащих в соответственном расположению кнопок клавиатуры порядке символы на русской и английской раскладке. Затем просто заменяет встретившиеся ей английские символы на русские.

посмотреть как работает, можно тут.

я не очень хорошо понимаю, как выполняется работа с выделениями в разных браузерах, поэтому замена выделенного текста работает только в MSIE и Firefox. остальных браузерах заменятся всё содержимое инпута.
не знаю, может кто подправит, чтоб везде работало вот эту функию:
Код

function getfixes()
{var obj = document.getElementById("text_field");
if (navigator.userAgent.indexOf("MSIE") != -1 && navigator.userAgent.indexOf("Opera") == -1)
{var sel = document.selection.createRange();
if (sel.text)
sel.text = fix_layout(sel.text);
else
obj.value = fix_layout(obj.value);
}
else
if (navigator.userAgent.indexOf("Gecko") != -1)
{if (obj.selectionStart != obj.selectionEnd)
{var before_sel = obj.value.substring(0, obj.selectionStart);
var string_sel = fix_layout(obj.value.substring(obj.selectionStart, obj.selectionEnd));
var after_sel = obj.value.substring(obj.selectionEnd, obj.value.length);
obj.value = before_sel + string_sel + after_sel;
}
else
obj.value = fix_layout(obj.value);
}
else
if (window.opera)
{obj.value = fix_layout(obj.value);
}
}


ну вот) предлагаю внедрить на форум рядом с транслитом. имхо, не помешает!


--------------------
PM MAIL WWW ICQ   Вверх
Burrr
Дата 24.1.2006, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 459
Регистрация: 4.9.2005

Репутация: нет
Всего: 20



Вот понадобилось, написал транслит и перекод в одной ф-ии.
Объединение скрипта BearBeer и Alx с некоторой корректировкой дало следующие результаты
Код

function fix_coding(what_do,txt)
{
    var cyr=new Array("url","ё", "ж", "й", "ч", "ш", "щ", "э", "ю", "я", "а","б","в","г","д","е","з","и","к","л","м","н","о","п","р","с","т","у","ф","ц","ь","ы","ъ","ж","х","Ё","Ё","Ж","Ж","Й","Ч","Ч","Ш","Ш","Щ","Щ","Э","Э","Ю","Ю","Я","Я","А","Б","В","Г","Д","Е","З","И","К","Л","М","Н","О","П","Р","С","Т","У","Ф","Ц","Ы","Ж","Х");
    var lat=new Array("url","jo","zh","i'","ch","sh","xh","je","ju","ja","a","b","v","g","d","e","z","i","k","l","m","n","o","p","r","s","t","u","f","c","'","y","`","j","h","JO","Jo","ZH","Zh","I'","Ch","CH","Sh","SH","Xh","XH","Je","JE","Ju","JU","Ja","JA","A","B","V","G","D","E","Z","I","K","L","M","N","O","P","R","S","T","U","F","C","Y","J","H");
    var layout1 = 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","<",">","\\?","\\|","ё","Ё","№","Й","Ц","У","К","Е","Н","Г","Ш","Щ","З","Х","Ъ","Ф","Ы","В","А","П","Р","О","Л","Д","Ж" ,"Э","Я","Ч","С","М","И","Т","Ь","Б","Ю","й","ц","у","к","е","н","г","ш","щ","з","х","ъ","ф","ы","в","а","п","р","о","л","д","ж","э","я","ч","с","м","и","т","ь","б","ю");
    var layout2 = 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",",",".");
    if (what_do=="trans") {arr1=cyr;arr2=lat}
    if (what_do=="code") {arr1=layout1;arr2=layout2;}
    res="";
    var re = "";
    txt=txt.toString();
    for (j=0;j<txt.length;j++)
    {
        simb=txt.substring(j,j+1);
        for(var i=0;i<arr1.length;i++)
        {
            try{
                re = new RegExp(arr1[i], "g");
                if (re.test(simb)) {
                    simb = simb.replace(re,arr2[i]);break;
                }
            }
            catch(e){}//nothing
        }
        res+=simb;
    }
    return res;
}

Соот-но на входе мы получаем некоторые строковые данные, а на выходе отдаем их обработанными, в зависимости от значения флага.

Перекодинг работает как в одну, так и в друю сторону (Ru <--> En), только символы, присутствующие в обоих регистрах (типа : ' " перекодируются только из английского в русский, чтоб не было путаницы). Отсюда массивы layout1 и layout1 существенно изменились.
Думаю, что ф-ию еще можно серьезно оптимизнуть, так что сильно прошу не ругаться smile .



--------------------
PM MAIL ICQ   Вверх
Innuendo
Дата 24.1.2006, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 24.12.2005
Где: Молдова

Репутация: нет
Всего: 6



скрипт, конечно хороший... только мы на столько привыкли, что если начали писать не на той раскладке, сразу стереть и поменять язык, что сложно будет привыкать нажимать на какую-то кнопку, чтоб он переформировал текст
я никогда больше чем слова-полслова так не писал.... видно потому что, на монитор смотрю когда печатаю...


--------------------
=)
PM MAIL ICQ Jabber   Вверх
Alx
Дата 24.1.2006, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: нет
Всего: 78



Innuendo
я тоже чаще всего на монитор смотрю, но иногда, когда нужно какой-то относительно большой текст напечатать ещё по привычке гляжу на клаву. кстати, именно когда мне это в конец надоело и написал эту функцию.


--------------------
PM MAIL WWW ICQ   Вверх
Burrr
Дата 25.1.2006, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 459
Регистрация: 4.9.2005

Репутация: нет
Всего: 20



Innuendo
Эта функция писалась как опция к WYSIWYG-редактору (которым будут пользоваться различные люди, в том числе и те, которые смотрят на клаву при наборе). Я например частенько пользуюсь этой опцией в российском Интернет-пейджере Mail.Ru-агент (аналог аськи), когда понимаю, что выделить и нажать кнопку быстрее, чем перепечатать.


--------------------
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Здесь публикуют скрипты, которые уже проверены в обсуждениях других тем (при этом полезно поставить ссылки на все смежные обсуждения) или переносятся кем-либо из модераторов по просьбе участников, если видно, что в результате обсуждения темы был написан полезный или интересный скрипт. Третий возможный вариант - участник форума публикует скрипт, заведомо известный как полезный и эффективный, для, возможно, небольшой доработки и обсуждения.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Наши скрипты | Следующая тема »


 




[ Время генерации скрипта: 0.0437 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.