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

    +168

    1. 001
    2. 002
    3. 003
    4. 004
    5. 005
    6. 006
    7. 007
    8. 008
    9. 009
    10. 010
    11. 011
    12. 012
    13. 013
    14. 014
    15. 015
    16. 016
    17. 017
    18. 018
    19. 019
    20. 020
    21. 021
    22. 022
    23. 023
    24. 024
    25. 025
    26. 026
    27. 027
    28. 028
    29. 029
    30. 030
    31. 031
    32. 032
    33. 033
    34. 034
    35. 035
    36. 036
    37. 037
    38. 038
    39. 039
    40. 040
    41. 041
    42. 042
    43. 043
    44. 044
    45. 045
    46. 046
    47. 047
    48. 048
    49. 049
    50. 050
    51. 051
    52. 052
    53. 053
    54. 054
    55. 055
    56. 056
    57. 057
    58. 058
    59. 059
    60. 060
    61. 061
    62. 062
    63. 063
    64. 064
    65. 065
    66. 066
    67. 067
    68. 068
    69. 069
    70. 070
    71. 071
    72. 072
    73. 073
    74. 074
    75. 075
    76. 076
    77. 077
    78. 078
    79. 079
    80. 080
    81. 081
    82. 082
    83. 083
    84. 084
    85. 085
    86. 086
    87. 087
    88. 088
    89. 089
    90. 090
    91. 091
    92. 092
    93. 093
    94. 094
    95. 095
    96. 096
    97. 097
    98. 098
    99. 099
    100. 100
    // ==UserScript==
    // @name        no horses
    // @match       *://govnokod.ru/*
    // @grant       none
    // @run-at      document-start
    // ==/UserScript==
    var CONFIG = {
        horses: [ 
            "Horse2", 
            "PragramistOtBoga", 
            "anonimb84a2f6fd141",
        ],
        autoDownVote: true,
    };
    var observer = new MutationObserver(observeCallback);
    var config = {
        childList: true,
        subtree: true,
    };
    observer.observe(document, config);
    function observeCallback(mutations) {
        mutations.forEach(function(mutation) {
            if (mutation.addedNodes) {
                Array.prototype.forEach.call(mutation.addedNodes, function(node) {
                    try {
                        if (node.nodeType === 1 && /^comments_\d+$/.test(node.id)) {
                            handleComments(node);
                        }
                    } catch (e) {
                        console && console.warn && console.warn(e);
                    }
                });
            }
        });
    }
    function downVote(node, type) {
        var sel;
        switch (type) {
        case "post": sel = ".vote-against"; break;
        case "comment": sel = ".comment-vote-against"; break;
        default: throw 42; break;
        }
        var el = node.querySelector(sel);
        if (el) {
            var evt = document.createEvent("MouseEvents");
            evt.initMouseEvent("click", true, true, unsafeWindow, 
                0, 0, 0, 0, 0, false, false, false, false, 0, null); 
            el.dispatchEvent(evt);
        }
    }
    function handleComments(node) {
        var comments = node.querySelectorAll(".entry-comment-wrapper");
        Array.prototype.forEach.call(comments, function(comment) {
            try {
                handleComment(comment);
            } catch (e) {
                console && console.warn && console.warn(e);
            }
        });
    }
    function handleComment(node) {
        var author = node.querySelector(".entry-author").textContent.trim();
        if (CONFIG.horses.indexOf(author) != -1) {
            node.style.opacity = 0.3;
            node.style.maxHeight = "4em";
            node.style.overflow = "scroll";
    
            if (CONFIG.autoDownVote) {
                downVote(node, "comment");
            }
        }
    }
    function handlePosts(node) {
        var posts = node.querySelectorAll(".hentry");
        var i;
        for (i = 0; i < posts.length; i++) {
            try {
                handlePost(posts[i]);
            } catch (e) {
                console && console.warn && console.warn(e);
            }
        }
    }
    function handlePost(node) {
        var author = node.querySelector(".author a:nth-child(2)").textContent.trim();
        if (CONFIG.horses.indexOf(author) != -1) {
            if (!/^\/\d+$/.test(document.location.pathname)) {
                node.style.opacity = 0.3;
                node.style.maxHeight = "4em";
                node.style.overflow = "scroll";
            }
            if (CONFIG.autoDownVote) {
                downVote(node, "post");
            }
        }
    }
    document.addEventListener("DOMContentLoaded", function() {
        handleComments(document.body);
        handlePosts(document.body);
    });

    Я так и не смог заставить MutationObserver срабатывать на новые элементы, появляющиеся во время загрузки страницы. Отсюда и костыль в последних строчках.

    Запостил: WGH, 22 Октября 2013

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

    • показать все, что скрытоудалено
      Ответить
    • > evt.initMouseEvent("click", true, true, unsafeWindow, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
      Сигнатура этого метода достойна находиться на этом сайте ;)
      Ответить
      • Мда. Меня тоже озадачило. Многословно как-то.
        Кстати у меня уже список малолетних долбоёбов превысил объем кода.
        Ответить
        • показать все, что скрыто>малолетних долбоёбов
          Как вы ведете себя в приличном обществе сударь? Как вам не стыдно! Видимо у вас пылыхают кольсоны от моего искустного словесного творчества.
          Ответить
          • >> пылыхают кольсоны от моего искустного словесного творчества.
            Долбоёб. К тому же малограмотный. Про запятые уж молчу.

            'angrybird','Copy-Paste','TarasChlenodevka','Anal', 'Pedofil','Ushlepok','Uebok','Copy-Paste', 'anonimb84a2f6fd141','Pediastr','alexoy' , 'lohpider', 'uiopqwertyasd','TarasGovno','AnimeGovno ','komprenda', 'KomprendaTerrorSquad','Gordon', 'fuckyounoob', 'JavaGovno','Ebal_V_Anal'

            lucidfoxGovno
            PHPGovno
            LinuxGovno
            WindowsGovno
            dosGovno
            FaiGovno
            RS-232

            Не ты первый, не ты последний. Тут как в паноптикуме.
            Ответить
        • Так и стоит перед глазами картина: перед монитором сидит небритый 30-летний бетард(великовозрастный долбоеб) в зассаных трениках и воюет со школьниками(малолетними долбоебами), веря в то, что он если не спасает мир, то делает его лучше...
          Ответить
          • небритый 30-летний девственник-бетард
            Ответить
            • Как будто "битард" этого не подразумевает.
              Ответить
          • > воюет
            Не, ты не правильно понял. Он их тупо игнорирует.
            Ответить
            • показать все, что скрытоТы тут по всей видимости недавно, питушок с именем 3.14159265 является активным участником любых срачей, большинство его сообщений имеют явно провакационный характер с сексуальным подтекстом(гомосексуальные извращения)
              Ответить
              • Какой багор )))
                Ответить
                • Упс, не посмотрел на дату.
                  Ответить
                  • А вот это точно каког багог
                    Ответить
                    • Хватит уже тут свой багог повторять! Раньше эти слова мог изредка говорить без стыда только олдфаг для демонстрации своей власти. А сейчас это уже пошло смотрится.
                      Ответить
                      • Щито поделаешь, родной. Не я это начал а gost
                        Ответить
                        • какой еггог ))
                          Ответить
                          • Косплеишь Электроннику?
                            Ответить
                            • > Электроннику
                              Тебе нужен карманный лев со встроенным спеллчекером.
                              Ответить
                              • ты еще и скрепку из ворда косплеишь. Не трогай льва, я только его постирал
                                Ответить
                                • > я только его постирал
                                  Что ж ты с ним делаешь, что стирать приходится.
                                  Ответить
                                  • Пускаю погулять по общаге, что бы говнокодеры не могли плодиться
                                    Ответить
                                    • А работу так и не нашел?
                                      Ответить
                                      • и не искал пока. Сначала в сентябре все с учебой улажу, там посмотрю
                                        Ответить
                                        • > с учебой
                                          В магистратуру поступаешь?
                                          Ответить
                                          • уже зачислили. Еще 2 года учиться
                                            Ответить
                                          • почему магистратура
                                            он же писал, что не хочет быть программистом
                                            будет владычицой морской работать в отделе кадров
                                            ведь психология так востребована
                                            Ответить
                                            • Тру психологи так же востребованы как тру программисты.

                                              Я говорил, что не знаю, кем я буду. Но сейчас мне нравиться кодить, поэтому я решил учиться дальше.
                                              Ответить
                                              • ты же разочаровался в программе подготовки в своем вузе
                                                имхо, на грамотной работе лучше воспитают за 2 года магистратуры

                                                разве что найти магистратуру похалявней, чтобы на работу ходить, а дембель сам близился
                                                Ответить
                                              • > Тру психологи так же востребованы как тру программисты.
                                                востребованы клинические
                                                как ты колёса лечение будешь назначать, проводить психокоррекцию?
                                                есть диплом меда? нет? я так и думал

                                                гуманитарные могут реально только в отделе кадров пристроиться,

                                                при максимуме везения - тренерами (как там? коучинг?), только спрос на них единичный

                                                подумай, куда идут работать тысячи выпускников по специальности психология?
                                                Ответить
                                                • > подумай, куда идут работать тысячи выпускников по специальности психология?
                                                  Троллями на ГК. Работают за еду.
                                                  Ответить
                                                • А куда идут тысячи выпускников по специальности ИТ? Говносайтики лепить?

                                                  Если тебе нужны колеса - гоу к психиатору, психолог не по этой части.

                                                  Тренер работает с толпой - это мне не подходит. Если я когда то и буду заниматься психологией - то только индивидуально.
                                                  Ответить
                                                  • > говносайтики
                                                    ну это уже кто как учился
                                                    если плохо - либо в другую профессию, либо тестером, либо сисадмином, мало ли

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

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

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

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

                                                      Психолог - не врач в отличии от психотерапевта и психиатора. Психология - это самостоятельная наука, а не медицинская отрасль.
                                                      Ответить
                          • Кстати, «ЕГГОГ» умели писа́ть не все модели. Вернее, писали «ЕГГОГ» не только лишь все. Мало кто мог это делать. На некоторых микрокалькуляторах светилась жирная точка слева от числа, на других — одинокая буква «Е», а некоторые показывали число с денормализованной мантиссой, заведомо выходящее за пределы поддерживаемого диапазона.
                            Ответить
    • Ну я по привычке пользуюсь своим: http://userscripts.org/scripts/show/135571
      Я не очень понял, поддерживает ли твой скрипт фильтрацию аякс-комментариев на главной. Мой держит, но через тот еще костыль. Уговорил бы я Страйко вынести лямбду в отдельную функцию, то и костыль не потребовался бы.
      Конечно, то что он на чистом JS - это плюс. Я вот поленился и подцепил жквери прямо со страницы.

      Также не очень вкурил зачем такая адская конструкция в голосовалке, когда даже в обычном DOM есть метод .click(). Смотри http://www.w3schools.com/jsref/met_html_click.asp
      Ответить
      • показать все, что скрыто>Я вот поленился и подцепил жквери прямо со страницы.
        Что не так?
        Ответить
      • Да, действительно. Я где-то читал, что click поддерживается не всеми элементами, а выходит, что ситуация с тех пор изменилась.
        Ответить
      • А, да, про AJAX. Для того я и прикручивал MutationObserver, чтобы эти комментарии тоже обрабатывались. Так что поддерживает.
        Ответить
        • Я с аналогичной проблемой сталкивался на другом сайте (собственно, и скрипт мой - адаптация оттуда), и вроде когда изучал вопрос, вышло что кроссбраузерно такую штуку реализовать сложно. Хотя если затачивать под Гризманки - то ничего.

          А ещё можно попробовать разбросать клики по минусам по времени, чтобы больше походило на ручное минусование. :D
          Ответить
    • Мне трудно признавать это, но боюсь, что без использования волшебного свитка нам не удастся отвоевать сайт. Пусть этот урод поймет, что его усилия бессмыслены и что его, равно как и плоды его буйного труда никто не видит.

      >>
      var CONFIG = {
          horses: [ 
              "Horse2", 
              "PragramistOtBoga", 
              "anonimb84a2f6fd141",
          ],


      Иго-го!.. ))
      Ответить
    • Хуево скрывает. Надо чтобы вообще выкусывал посты со страницы, а не делал их полупрозрачными.
      Ответить
      • Можно вставить node.style.display = "none"; вместо строк 64-66.
        Ответить
        • >>node.style.display = "none";
          WGH, свиток ваш воистину волшебный. Спасибо!..

          Товарищи, срочно ставим юзерсвиток, и забываем о спаме! Ура, товарищи!..
          Ответить
          • Найден баг: ошибка редиректа, при переходе на другую страницу со страницы комментария (возвращает на текущую).
            Ответить
            • Расскажи поподробнее, как это повторить.
              Ответить
    • показать все, что скрытоЗапомните ник PragramistOtBoga, это человек который вас неоднократно унижал. Удачи вам с вашей разорваной жопой.
      Ответить
    • показать все, что скрытоА анонимб-то тут причем?

      Что мешает ботоводу сделать 100500 ботов вместо 1? Будете вайтлист делать?
      Ответить
    • показать все, что скрытоКуда делась та пурга, что тут была? Неужто модеры появились?
      Ответить
    • Скрипты-херипты, я минусую руками, блеать!
      Ответить
    • Короче, нашел баг. Когда заходишь на главную, перебрасывает на страницу первого поста, на котором срабатывает автоминусатор. Это связано с тем, что мой DOMContentLoaded срабатывает перед тем, как DOMContentLoaded говнокода навесит обработчики на кнопки голосования. Эти кнопки срабатывают как обычные ссылки, без AJAX.
      Ещё один костыль должен помочь (заменить в конце):
      document.addEventListener("DOMContentLoaded", function() {
          setTimeout(function() {
              handleComments(document.body);
              handlePosts(document.body);
          }, 0);
      });
      Ответить
    • показать все, что скрыто"bormand", "борманд"... СТОП! "борМАНД"...


      Манда, что ли?


      Бормандино с большой мандиной )))
      Ответить
    • Программер на заре в иде
      ‎Над копипастингом трудился;
      ‎Трудился так программер в тиме,
      ‎Что градом пот с него катился.

      ‎Мужик работник был прямой:
      И вечерком на говнокод запостил
      Шедевр - свой,
      Что за день высрал.
      ‎Зато, кто мимо ни проходит,
      ‎От всех ему: спасибо, я поржал!
      Но школоту такое в зависть вводит.

      Хвалы приманчивы, - как их не пожелать!
      И школьник вздумал потрудиться:
      ‎Зарегал акк, и ну над ним возиться!
      ‎Хлопот - мальчишке полон рот:
      ‎То в комментах насрёт,
      ‎То так, то сяк Тарасу гадит,
      ‎То вайпает, то спамит;

      ‎Рекой с бедняжки льётся пот;
      И наконец пыхтя, насилу дышит:
      А ото всех только посылы нахуй слышит.
      ‎И не диковинка, мой свет!
      Трудишься много ты, да пользы в этом нет.
      Ответить
    • показать все, что скрытоАналаьный пожар в комментариях
      Ответить
    • К слову, @TarasB. Мне таки интересно, ЧТО ты этому чудику сделал что ему так припекло?
      Ответить
      • Он сделал ему больно
        Ответить
        • Ого, говнокод переехал.
          Ответить
          • Я сам не поверил своим очам, когда увидел сие:

            http://www.govnokod.im
            Ответить
            • Мне просто на почту упало уведомление, когда ты оставил коммент выше.
              Ответить
              • Надо же, хоть какая то польза от меня.
                Служу Советскому Союзу.
                Ответить

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