PDA

Просмотр полной версии : punto switcher на js ))


Дикс
10.06.2009, 22:22
function revert(id)
{
if(typeof(window.originals[id]) != 'undefined' && window.originals[id] !== null)
document.getElementById(id).innerHTML = window.originals[id];
}

function convert(id)
{

charsArray = {
'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':'ь',
',':'б',
'.':'ю',
'/':'.'
};

oldText = document.getElementById(id).innerHTML;
window.originals[id] = oldText;
newText = '';

for(var i = 0; i < oldText.length; i++)
{
character = oldText.charAt(i);
newText += (character in charsArray)? charsArray[character] : character;
}

document.getElementById(id).innerHTML = newText;
}


помог человеку, написал две функции:

1. convert(id) - меняет содержимое id с "cjkywt" на "солнце"
2. revert(id) - отменяет случившееся

работа была кропотливая, код кроссбраузерный и компактный, поэтому выкладываю сюда, вдруг кому это сэкономит время и силы :)

astrologer
10.06.2009, 22:27
работа была кропотливая, код кроссбраузерный и компактный Серьёзно? Впрочем, тебе видней.

D1mOn
10.06.2009, 22:34
Почему именно 61 символ? Почему бы не получить размер строки и исходя из него делать нужное количество выполнений операции замены?

astrologer
10.06.2009, 22:46
Потому что в массиве 61 символ, количество заменяемых символов от строки не меняется Нет, замечание было верное. Будут обработаны первые 62 символа текста. Остальные останутся как есть.
Почему именно 61 символ? Наверное потому, что 80% кода - копипаст того, что было написано около двух месяцев назад. Копипаст содержит старые ошибки (в их числе вышеупомянутую), а также новые. Ну и ещё он не работает.

D1mOn
10.06.2009, 22:56
Нет, замечание было верное. Будут обработаны первые 62 символа текста. Остальные останутся как есть.
Наверное потому, что 80% кода - копипаст того, что было написано около двух месяцев назад. Копипаст содержит старые ошибки (в их числе вышеупомянутую), а также новые. Ну и ещё он не работает.
:D Как говорится афтар жжёт...

FireFenix
10.06.2009, 22:59
Нет, замечание было верное. Будут обработаны первые 62 символа текста. Остальные останутся как есть.
Наверное потому, что 80% кода - копипаст того, что было написано около двух месяцев назад. Копипаст содержит старые ошибки (в их числе вышеупомянутую), а также новые. Ну и ещё он не работает.

Тада, я вначале отпостил, а потом присмотрелся к тексту. Создатель пунтосвичера в гробу перевернётся :)

да и порадовал комментарий - "работа была кропотливая"

Дикс
11.06.2009, 07:57
как показывает практика, необходимый ажиотаж вокруг любой фигни можно поднять всего одной фразой
работа была кропотливая
:D

спасибо за замечания, проверю и постараюсь исправить

Дикс
11.06.2009, 08:03
про 62 исправил

astrologer
Копипаст содержит старые ошибки (в их числе вышеупомянутую), а также новые
какие?
у меня код работает без ошибок в опере 9.6, ИЕ6 (!) и ФФ 3.0.7

Ну и ещё он не работает
в чем?

scrat
11.06.2009, 10:29
1. Код без комментариев
2. Функция revert ужасно оформлена.
3. Я надеюсь ты хоть не собственноручно впечатывал этот массив?

astrologer
11.06.2009, 11:24
у меня код работает без ошибок в опере 9.6, ИЕ6 (!) и ФФ 3.0.7 Ну разумеется. Сейчас всё, что там происходит - определяются две функции. Имеет смысл дать ссылку на готовый пример, чтобы все могли воочию убедиться, как оно функционирует - не у всех в голове интерпретатор js.

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

какие? Добавь такое вот поле на страницу: <input id="character" name="character"> и IE внезапно начнет фейлить

nerezus
11.06.2009, 13:04
1. Код без комментариев Собвственно там они только в 2х местах нужны: перед функциями

А еще можно в ~6 недлинных строк весь код уложить.

Дикс
12.06.2009, 21:02
я бы с радостью изучил такой код в шесть строк

nerezus
13.06.2009, 02:17
строка1 = русские символы
строка 2 = латиница
функция 1:
цикл по целевой строке: заменить букву из одного массива на соответствующую букву из другого
функция 2:
цикл по целевой строке: заменить букву из другого массива на соответствующую букву из одного