Punto Switcher online

punto switcher online

Задался я целью сделать для себя аналог punto switcher только online. Не буду спорить, что существует множество онлайн аналогов, но кто знает, вдруг они логируют все то, что доверчивые пользователи в них вводят…

Для того чтобы было прозрачно для пользователя — буду делать на JavaScript — это и в онлайне работать будет, да и желающие смогут посмотреть JS код и успокоить свою паранойю! Мало того, что на JS так еще и так, чтобы скрипт был сразу виден пользователю. Найденные решения в интернете мне не очень понравились, поэтому я пошел изобретать свой велосипед :) Само интернет приложение доступно по ссылке Punto Switcher online, кому интересны подробности — читайте ниже.

Мой код будет делать инверсию раскладки, причем с учетом регистра. Ленивому человеку Мне не было желания составлять массивы соответствия, поэтому я решил, что проще всего работать со строками. Первая строка — это все русские буквы без SHIFT — "ёйцукенгшщзхъфывапролджэячсмитьбю", далее я переключил раскладку и нажимал все те же символы. В латинской раскладке вышло "`qwertyuiop[]asdfghjkl;'zxcvbnm,.". Все то же самое, но теперь с нажатым модификатором SHIFT на русском языке: "ЁЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ", и теперь на латинском языке — "~QWERTYUIOP{}ASDFGHJKL:"ZXCVBNM<>". Да, кстати, кажется будут проблемы со знаками препинания… Жду советов по этому поводу в комментариях! Мне пока пришло в голову сделать две дополнительные кнопки с явной конвертацией раскладок рус —> лат и лат —> рус.
Еще немного оптимизируем и в итоге будет всего две строки:
"ёйцукенгшщзхъфывапролджэячсмитьбю.ЁЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ,"
"`qwertyuiop[]asdfghjkl;'zxcvbnm,.~/QWERTYUIOP{}ASDFGHJKL:"ZXCVBNM<>?"
Причем, на мой взгляд, строчные символы должны идти именно первыми, так как вероятность их появления многим больше чем заглавных и мы немного будем экономить время работы скрипта.

Сама функция инвертирования символа раскладки клавиатуры будет представлять из себя:

//begin
function puntoit(bukva) {
var rus = "ёйцукенгшщзхъфывапролджэячсмитьбю.ЁЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ,";
var lat = "`qwertyuiop[]asdfghjkl;'zxcvbnm,.~/QWERTYUIOP{}ASDFGHJKL:\"ZXCVBNM<>?";
var pos = -1;
pos = rus.indexOf(bukva);
if (pos >= 0) {return lat.substr(pos, 1);}
pos = lat.indexOf(bukva);
if (pos >= 0) {return rus.substr(pos, 1);}
return bukva;
};
//end

Само тело скрипта будет так же весьма лаконичным:

//begin
var testData = document.getElementById('srctext').value;
var i = testData.length;
var newtext = "";
while (i--){newtext =  puntoit(testData.charAt(i)) + newtext;}
document.getElementById('srctext').value = newtext;
//end

Пользуемся, комментируем, хвалим, критикуем :)

Punto Switcher online: 2 комментария

  1. Дмитрий

    Здравствуйте, Евгений! Как Вы и предполагали, не рапотаут знаки препинания. Из-за этого невозможно получить вторуу и предпоследнуу пуквы русского алфавита.

  2. Виталий

    Евгений, во-первых спасибо за такой скрипт — то что нужно для моих целей. Очень выручает!
    Во-вторых , да, проблема со знаками препинания присутствует. Попытался немного модифицировать, чтобы хотя бы частота ошибок была ниже. Вот мой вариант строк:
    var rus = «ёйцукенгшщзхъфывапролджэячсмитьбюЁЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ»;
    var lat = «`qwertyuiop[]asdfghjkl;’zxcvbnm,.~QWERTYUIOP{}ASDFGHJKL:\»ZXCVBNM»;

Добавить комментарий для Дмитрий Отменить ответ

Ваш e-mail не будет опубликован. Обязательные поля помечены *


*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>