1. JavaScript / Говнокод #16018

    +154

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    (function () {
    
        if (location.pathname === "/") {
            document.body.id = 'front-page';
        }
        else {
            var path = window.location.pathname.replace('/index.php/', ''),
                splittedPath = path.split('/') || ['', ''],
                category = splittedPath[0],
                subcategory = '';
    
            for (var i = 1; i < splittedPath.length; i++) {
                subcategory += ('-' + splittedPath[i]);
            }
    
            if (category && (typeof category === 'string')) {
                document.body.classList.add('page-' + category);
            }
    
            if (subcategory && (typeof subcategory === 'string')) {
                document.body.classList.add('page-' + subcategory.replace(/^[-]/, ''));
            }
        }
    
    })();

    Сей замысловатый код призван добавить уникальный класс в body для каждой страницы прямо из урла. Предназначалось в качестве костыля для джумлы, так как через пых не работало, а разбираться никто не стал :)

    Запостил: DrDre, 19 Мая 2014

    Комментарии (26) RSS

    • split не может нулевой результат вернуть.
      Ответить
      • Точно. Кроме того, если урл будет как здесь: govnokod.ru/javascript, то строка javascript уйдет в subcategory, а category будет пустой.
        Ответить
      • В кои-то веки сивоконь правду сказал.

        split возвращает непустой массив
        Ответить
    • Можно сделать в плагине событие onAfterRender
      class  plgSystemGovno extends JPlugin {
      
         function onAfterRender()
         {
            $document = JFactory::getDocument();
            $buffer        = $document->getBuffer();
            // do something with a $buffer
            $document->setBuffer($buffer)
         }
      }
      Ответить
      • Ты что-то перепутал. Код на JS-е в браузере, а ты привёл какой-то пыхокод.
        Ответить
        • Это забота о пользователе, валидация говна на стороне говна
          Ответить
    • >>(location.pathname === "/") {
      >>===
      три знака равенства(!!) это не ошибка в днк ?
      Ответить
      • Ошибка в днк у тебя. Три знака равенства это сравнение с учетом типа данных.
        Ответить
        • cleaned
          Ответить
          • Вне всяких сомнений, такой эстет как ты, смог бы написать куда более приятный для глаз и души язык программирования.
            Ответить
        • А еще можно было бы придумать:
          = обычное присваивание
          == присваивание с учетом типов
          === необычное присваивание
          Ответить
          • Для разнообразных присваиваний можно поюзать <= <== := и <- А == и === оставить для сравнений :)
            Ответить
            • >=< деструктивное присваивание, >= левое деструктивное присваивание, =< правое деструктивное присваивание (как в брейнфаке), <=> обычное присваивание (не работает), <= левое присваивание, => правое присваивание,
              >+< средний деструктивный инкремент, ><=+ левый неопределённый инкремент.
              А wvxvw говорил, что русские учёные не делают открытий в программировании...
              Ответить
              • <=> - swap же
                Ответить
              • Это называется не присваивание, а унификация (и уже есть, в Прологе). Т.е. когда "присваивают" значение в левой части переменной в правой части.
                Ответить
                • 2023-ий год, люди пишут Пролог!


                  https://github.com/trealla-prolog/trealla


                  https://github.com/mthom/scryer-prolog
                  Ответить
            • Я уже когда-то предлагал для сравнения выбрать отдельный одиночный символ, например, ":", а знак равенства оставить для присвоения. Но, вообще, надо смотреть по частоте использования.
              Меня больше угнетает в русской раскладке запятая с шифтом, а в английской - скобки {}.
              Ответить
          • ==== очень необычное присваивание, с вероятностью 1/2 присваивает случайное число.
            ============== присваивание-рельсы.
            Ответить
            • Необычное присваивание - =??=
              Ответить
              • -===??===-
                Необычное присваивание с учетом типов данных
                Ответить
                • -~=#$#=~- нелинейное присваивание.
                  Ответить
                  • ¯\(°==o)/¯ - специальное присваивание, которое используют когда не знают, что писать.
                    Ответить
            • > присваивание-рельсы.

              Переводит проект на руби?
              Ответить
              • Затирает старое значение переменной строкой «переведи на "Ruby"».
                Ответить

    Добавить комментарий