ЙажаСценарий / Говнокод #23851 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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 vistefan, (Updated )

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

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

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

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

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

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

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

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

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

    А не использовать ли нам bbcode?


    8