Advertisement
AHOHNMYC

Ебан Кукарекыч

May 14th, 2017
634
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // ==UserScript==
  2. // @name        anti-weip
  3. // @name:ru     Ебан Кукарекыч
  4. // @namespace   0chan
  5. // @include     https://0chan.hk/*
  6. // @version     v0.0.2.5
  7. // @grant       GM_addStyle
  8. // ==/UserScript==
  9.  
  10. // На вход подаются регулярные выражения. Не забывайте разграничивать их при помощи |
  11. // И это самое, скрипт **должен работать** как у лисоблядей с их Greasemonkey, так и у хромогов с Tampermonkey. Если это не соответствует действительности, пишите на 0x59f3c84d.
  12.  
  13. let DEFAULT_EBANS = 'говну(х|льч)|Добро-кун|как(а|о)(ет|л|ю|ть)|моче(параш|фокс)|н(а|э)вэльный|олабляд|Ольгино|Педалито|пид(а|о)рах|порвалик|п(р|с){2,}|Пын(е|я)|форси(нг|ть)|чмодер|шизик|';
  14. DEFAULT_EBANS += 'Правила(\s|\n)+Нульчана:|';
  15. // Спорные выражения
  16. DEFAULT_EBANS += 'параш(а|у)|';
  17.  
  18. /* Тут ещё чейнджлог заказывали.
  19. v0.0.2.5
  20.  По просьбе https://0chan.hk/speak/22950#337801 запилено скрытие **КАПСБОЛДА**
  21. v0.0.2.4.1
  22.  В 0.0.2.4 **вообще не работали** пользовательские выражения из-за того, что я сам забыл поставить пайп. Починено.
  23. v0.0.2.4
  24.  Переписаны функции скрытия и удаления. Вместо .search использован .test. Добавлено заебатое XPath-выражение (эта штука поддерживает возможность "подниматься" по DOM).
  25. */
  26.  
  27. GM_addStyle(`#kukarekDeleter:not(:hover) {opacity: .7}
  28. #kukarekDeleter {position: fixed; bottom:0; right:0; z-index: 42}`);
  29.  
  30. Object.defineProperty(this, 'kukarek', {
  31.     get: ()=>localStorage.kukarek,
  32.     set: kukarek=>localStorage.kukarek=kukarek
  33. });
  34.  
  35. if ( !kukarek ) kukarek = 'С каждым днём всё радостнее жить!';
  36.  
  37. function main(){
  38.     if (kukarek.length < 4) if (!confirm('Подозрительно короткий кукарек. Всё равно убрать?')) return;
  39.     let regex = new RegExp(DEFAULT_EBANS+kukarek, 'i');
  40.  
  41.     /* Hide all with RegExp */ document.querySelectorAll('div.post').forEach(el=>{
  42.         if ( regex.test(el.textContent) ) el.querySelector('span.post-button').click();
  43.     });
  44.  
  45.     /* Hide **CAPSBOLD** */ Array.from(document.getElementsByTagName('b')).forEach(el=>{
  46.         if (el.textContent.toUpperCase() != el.textContent) return;
  47.         while ( ! el.classList.contains('post') ) el = el.parentElement;
  48.         el.querySelector('span.post-button').click();
  49.     });
  50.  
  51.     /* Delete hidden */ setTimeout(()=>{
  52.         let a = document.evaluate('//div[@class="post-footer" and position() = 2]/../..', document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
  53.         for (let i=0; i<a.snapshotLength; i++) a.snapshotItem(i).remove();
  54.     }, 1000);
  55. }
  56.  
  57. function addEl(el, newEl) { return el.appendChild(document.createElement(newEl)); }
  58. let div = addEl(document.body, 'div'),
  59.     inp = addEl(div, 'input'),
  60.     btn = addEl(div, 'button');
  61. div.id = 'kukarekDeleter';
  62. inp.value = kukarek;
  63. inp.addEventListener('focus', ({target:el})=>{el.selectionStart = 0; el.selectionEnd = el.value.length;});
  64. inp.addEventListener('change', ({target:{value:v}})=>{
  65.     if (!v) {btn.enabled = false; return;}
  66.     kukarek = v;
  67.     btn.enabled = true;
  68. });
  69. inp.style.display = 'none';
  70. btn.addEventListener('mouseover', ()=>{inp.style.display = inp.style.display ? '' : 'none';});
  71. btn.addEventListener('click', main);
  72. btn.innerText = 'Убрать кукареки';
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement