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

    0

    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
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    // ==UserScript==
    // @name     syomaGKignore
    // @description x-cross to ban GK users for syoma
    // @version  0
    // @match    http://govnokod.ru/*
    // @match    http://www.govnokod.ru/*
    // @grant    none
    // ==/UserScript==
    
    
    window.addEventListener('load', function() {
      localStorage.setItem('banned', localStorage.getItem('banned') || JSON.stringify([]));
      
      var banned = JSON.parse(localStorage.getItem('banned'));
      for (var i = 0; i < banned.length; i++) {
        var hide = document.querySelectorAll('.entry-author a[href$="/' + banned[i] + '"]');
        for (var j = 0; j < hide.length; j++) {
          hide[j].parentNode.parentNode.parentNode.style.display = 'none';
        }
      }
      
      var count = document.querySelector('.enrty-comments-count');
      count.style.cursor = 'pointer';
      count.addEventListener('click', function() {
        localStorage.setItem('banned', JSON.stringify([]));
        location.reload();
      });
      
      var votes = document.querySelectorAll('.comment-vote');
      for (var i = 0; i < votes.length; i++) {
        
        var cross = document.createElement('div');
        cross.innerHTML = '☓';
        
        cross.style.display = 'inline-block';
        cross.style.color = 'black';
        cross.style.marginLeft = '10px';
        cross.style.cursor = 'pointer';
        
        cross.addEventListener('click', function() {
          var id = this.parentNode.querySelector('.entry-author a').href.replace(/^.*\//, '');
      		var banned = JSON.parse(localStorage.getItem('banned'));
          if (banned.indexOf(id) < 0)
          	banned.push(id);
          localStorage.setItem('banned', JSON.stringify(banned));
          location.reload();
        });
        
        votes[i].parentNode.insertBefore(cross, votes[i]);
      }
    });

    Крестик для Сёмы на чистейшем JS, без $ и сложных евентов на аяксы. Работает только на страницах конкретных постов (другие и не нужны, с бормандстока кликнул по ссылке — попал куда надо), и только после полной загрузки страницы. Разбанить всех — это клик по цифре с общим количеством комментариев под постом, рядом со ссылкой на RSS.

    Запостил: vistefan, 02 Марта 2018

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

    • SEO: #крестик для сёмы, #кнопка для сёмы, #вот те крест, #разбанить всех
      Ответить
      • а есть кнопка "забанить прыщеблядей и прыщи и одминов"?
        Ответить
        • Да, это кнопка "закрыть вкладку" в любом браузере, где открыт ГК.
          Ответить
          • Можно просто гк ёбнуть, чтобы уж наверняка.
            Ответить
    • > location.reload();

      Вот ленивая жопа. Нет бы пересчитать на лету.
      Ответить
      • Ещё и прочитанные комменты такой код запорет.
        Хотя, Страйкер их уже сам запорол.
        Ответить
        • > прочитанные комменты такой код запорет

          Да, об этом я забыл. Ну тогда скрытие вынести в функцию, и вызывать при инициализации и по крестику, а reload по крестику убрать.

          P.S. В своё оправдание скажу, что у борманда, видимо, по этой же причине, вообще нет крестиков при просмотре зеркал постов, только в стоке.
          Ответить
          • > нет крестиков при просмотре зеркал постов
            У борманда их нет только потому, что он — ленивая жопа.
            Ответить
            • Ну то есть, по той же причине, что и у меня
              Ответить
            • З.Ы. Да и пилить ps/2 клаву на verilog'е как-то поинтересней, чем рисовать эти ваши крестики на жс.
              Ответить
              • Ну ты хоть тредик создай, про то, какие там подводные.
                Ответить
                • Да там две основные траблы - уёбищная IDE, по юзабилити застрявшая где-то в 90-х и тормозной конпелятор синтезатор.
                  Ответить
                  • Cкрины может покажешь, охота узнать, как там у вас, мамонтов.
                    Ответить
                    • Скрины из проекта про vga, там картинки поинтересней (не текстовый редактор же показывать?):
                      https://yadi.sk/i/Nm8TE3bh3SybbR
                      https://yadi.sk/i/ze8iFb3u3SybbZ

                      Ну и пара старых фоточек оттуда же:
                      https://yadi.sk/i/a_Ukl3tIrFTzw
                      https://yadi.sk/i/NwQI8AEYrFU3T

                      З.Ы. А по юзабилити — там, к примеру, в редакторе автодополнения нету.
                      Ответить
                      • О, powerball.
                        Ответить
                        • Я его выронил и разбил недавно. Теперь он жутко гремит когда крутишь. Надо бы новый купить.
                          Ответить
                      • /home/fpga

                        не знал что тебя так зовут
                        Ответить
                  • Дурачок с никнеймом cykablyad случайно забанил сам себя и сделал из этого проблему
                    Ответить
                    • Какая-то проблема со вставкой комментов на клиенте, походу. Обнови страничку.
                      Ответить
    • > клик по цифре
      Вот ленивая жопа. Нет бы отдельную кнопку сделать.
      Ответить
    • for (var j = 0; j < hide.length; j++) {
            hide[j].parentNode.parentNode.parentNode.style.display = 'none';
          }

      Не делай так больше никогда. Есть же for... of
      Ответить
      • И правда.
        Ответить
        • var let
          Ответить
          • Ага.
            Ответить
          • У юзерскриптов свое пространство имен.
            Ответить
            • это не повод шырить пространство на весь скрипт, еслиможно закрыть его в блоке
              Ответить
              • Можно без этих нововведений в функции закрыть в том же Array.prototype.forEach.
                Ответить
                • Давай, давай, а ну, давай,
                  Меня шмонай ты, вертухай,
                  Да загляни под юбочку,
                  Да посмотри на булочки.
                  Понюхай попку носиком,
                  Прикинься, киса, пёсиком,
                  Вот в этом вся и разница,
                  Кто хочет, а кто дразнится.

                  ©Любимая группа мамки админа
                  Ответить
    • >только после полной загрузки страницы.
      Интересно, а по-другому можно?
      Ответить
      • Да, хитрецы же как-то цепляются сразу к изменениям в дом-дереве, пока страница ещё даже не построилась. Ну это ты лучше у 1024-- спроси.
        Ответить
        • Просто не видел ни разу. Даже адблоки работают после загрузки, бывает видно моргание.
          Ответить
        • Сам Сёма несколько месяцев назад говорил про какую-то стандартную JS-питушню для подобного дела (только я поленился её изучить), которую можно использовать для более широкого круга задач.
          Vindicar разработал хак для ГК. Кажется, для подгрузки комментов в стоке.
          В jQuery есть live/delegate/on-питушня, которая умеет заранее описать элементы, на которые навесится обработчик события, когда они будут созданы - надо почитать исходники (что-то в исходниках слишком много делегирования действий другим функция, надо IDE открывать, чтоб уследить за мыслью) или статьи.
          В юзерскриптах и расширениях (по крайней мере в хромных) можно указать стадию, на которой скрипт начнёт работать.
          Ответить
          • > IDE

            А каковы нынче IDE для JS?
            Ответить
            • Notepad++
              Ответить
              • ))

                Чувак, ты реально крэйзи.
                Ответить
              • Плюсану. Нельзя сказать, что совсем IDE, но подсветка есть и плагины тоже есть для линтования, жсон-питухов, ещё для чего-то.
                Ответить
                • Ты бы ещё vim плюсанул как не совсем IDE для JS.
                  IDE — это как минимум однозначный правильный go to definition по проекту и дебаг.
                  Ответить
                  • ненужно
                    Ответить
                  • И вим плюсану, хоть и почти не знаю, как им пользоваться. Предполагаю, что он не будет изводить тормозами как IDE, и в итоге знающему основные команды код там писать приятнее и эффективнее.

                    > однозначный правильный go to definition
                    Вероятно, для такого плагины есть. Хотя, в динамическом питухе эта штука должна как лампа накаливания на большую часть мощности греться, а на меньшую - выдавать что-то полезное.

                    > дебаг
                    console.log поприятнее будет; особенно - для асинхронной питушни, где легче распечатать всё, что нужно, чем через события прыгать.
                    В браузерах есть отличные гуёвые отладчики. У node.js есть мощный прыщgdb-подобный отладчик.
                    Ответить
                    • > он не будет изводить тормозами как IDE, и в итоге ... код там писать приятнее и эффективнее

                      Ну правильно, я просто хотел узнать, о чем ты подумал, когда сказал
                      > надо IDE открывать, чтоб уследить за мыслью
                      Ответить
                      • >>> как минимум однозначный правильный go to definition по проекту
                        > я просто хотел узнать, о чем ты подумал
                        Да, я действительно об IDE, где есть прыжки, подумал. Хотя, там код какой-то абстрактный сильно, проще нагуглить статью на хабре и почитать.
                        Ответить
                  • Тогда для питона есть одна единственная, мегатормозная иде.
                    Ответить
            • Точно не знаю. Я про Sublime-что-то-там слышал, про WebStorm, про MSVS (Node.js и python вроде в MSVS легко устанавливаются).
              Ответить
              • Node в последнюю студию чуть ли не интегрировали. Вот так вот заходишь поколупать проектик на WPF, а у тебя тут и нода, и еще всякого говна поназапускалось, и jQuery в нугете, вот же шок
                Ответить
                • И код под убунту генерится.
                  Ответить
                  • В дотнеткоре можно кросскомпилить собирать под убунту
                    Шланг (тоже встроенный в студию) вроде тоже умеет, и даже отлаживать
                    Ответить
              • WebStorm неплохо умеет JS.

                Но язык настолько динамичный, что кодинсайт для него крайне плохой
                Ответить
          • Точно, вспомнил. Только это еще, кажется со старого акка было. MutationObserver. Правда, не очень понятно, будет ли оно работать до загрузки страницы.
            Ответить
            • Судя по документации, MutationObserver может наблюдать, в частности, за деревом потомков некоторого Node. document instanceof Node, так что MutationObserver можно прикрутить к document.
              В документации к Greasemonkey в разделе про @run-at document-start пишут "To detect if you are running at document-start time, check the value of document.readyState".

              Т.е. на этапе document-start страница только начала грузиться, но document уже есть, и за ним можно следить. В теории, должно работать.
              Ответить

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