punto switcher на js ))

Discussion in 'PHP' started by Дикс, 10 Jun 2009.

  1. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    PHP:
    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 
    0oldText.lengthi++)
        {
            
    character oldText.charAt(i);
            
    newText += (character in charsArray)? charsArray[character] : character;
        }

        
    document.getElementById(id).innerHTML newText;
    }
    помог человеку, написал две функции:

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

    работа была кропотливая, код кроссбраузерный и компактный, поэтому выкладываю сюда, вдруг кому это сэкономит время и силы :)
     
    #1 Дикс, 10 Jun 2009
    Last edited: 11 Jun 2009
    4 people like this.
  2. astrologer

    astrologer Elder - Старейшина

    Joined:
    30 Aug 2007
    Messages:
    837
    Likes Received:
    267
    Reputations:
    59
    Серьёзно? Впрочем, тебе видней.
     
  3. D1mOn

    D1mOn Elder - Старейшина

    Joined:
    2 Oct 2005
    Messages:
    380
    Likes Received:
    144
    Reputations:
    29
    Почему именно 61 символ? Почему бы не получить размер строки и исходя из него делать нужное количество выполнений операции замены?
     
    1 person likes this.
  4. astrologer

    astrologer Elder - Старейшина

    Joined:
    30 Aug 2007
    Messages:
    837
    Likes Received:
    267
    Reputations:
    59
    Нет, замечание было верное. Будут обработаны первые 62 символа текста. Остальные останутся как есть.
    Наверное потому, что 80% кода - копипаст того, что было написано около двух месяцев назад. Копипаст содержит старые ошибки (в их числе вышеупомянутую), а также новые. Ну и ещё он не работает.
     
    1 person likes this.
  5. D1mOn

    D1mOn Elder - Старейшина

    Joined:
    2 Oct 2005
    Messages:
    380
    Likes Received:
    144
    Reputations:
    29
    :D Как говорится афтар жжёт...
     
  6. FireFenix

    FireFenix Elder - Старейшина

    Joined:
    3 Jun 2009
    Messages:
    390
    Likes Received:
    115
    Reputations:
    23
    Тада, я вначале отпостил, а потом присмотрелся к тексту. Создатель пунтосвичера в гробу перевернётся :)

    да и порадовал комментарий - "работа была кропотливая"
     
    #6 FireFenix, 10 Jun 2009
    Last edited: 10 Jun 2009
    1 person likes this.
  7. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    как показывает практика, необходимый ажиотаж вокруг любой фигни можно поднять всего одной фразой
    :D

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

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    про 62 исправил

    astrologer
    какие?
    у меня код работает без ошибок в опере 9.6, ИЕ6 (!) и ФФ 3.0.7

    в чем?
     
  9. scrat

    scrat кодер

    Joined:
    8 Apr 2007
    Messages:
    625
    Likes Received:
    541
    Reputations:
    3
    1. Код без комментариев
    2. Функция revert ужасно оформлена.
    3. Я надеюсь ты хоть не собственноручно впечатывал этот массив?
     
    1 person likes this.
  10. astrologer

    astrologer Elder - Старейшина

    Joined:
    30 Aug 2007
    Messages:
    837
    Likes Received:
    267
    Reputations:
    59
    Ну разумеется. Сейчас всё, что там происходит - определяются две функции. Имеет смысл дать ссылку на готовый пример, чтобы все могли воочию убедиться, как оно функционирует - не у всех в голове интерпретатор js.

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

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

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    727
    Reputations:
    266
    Собвственно там они только в 2х местах нужны: перед функциями

    А еще можно в ~6 недлинных строк весь код уложить.
     
    1 person likes this.
  12. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    я бы с радостью изучил такой код в шесть строк
     
  13. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    727
    Reputations:
    266
    строка1 = русские символы
    строка 2 = латиница
    функция 1:
    цикл по целевой строке: заменить букву из одного массива на соответствующую букву из другого
    функция 2:
    цикл по целевой строке: заменить букву из другого массива на соответствующую букву из одного