Advertisement
Guest User

IIchan скрывалка тредов

a guest
Mar 8th, 2017
16
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // ==UserScript==
  2. // @name         Hide thread iichan
  3. // @namespace    http://iichan.hk/
  4. // @license      WTFPL
  5. // @version      0.1
  6. // @description  adds hide thread feature to iichan
  7. // @author       Cirno
  8. // @match        http://iichan.hk/*
  9. // @grant        none
  10. // ==/UserScript==
  11.  
  12. (function() {
  13.     'use strict';
  14.  
  15.     var THREAD_TITLE_LENGTH = 50;  // Сколько первых символов из поста показывать в заголовке скрытого треда
  16.  
  17.     function removeClass(element, className) {
  18.         var reg = new RegExp('(\\s|^)' + className + '(\\s|$)');
  19.         element.className = element.className.replace(reg, ' ');
  20.     }
  21.  
  22.     function addHideBtns() {
  23.         var threads = document.querySelectorAll('[id^=thread]');
  24.         for (var i = threads.length - 1; i >= 0; i--) {
  25.             var thread = threads[i];
  26.             var label = thread.querySelector('label');
  27.             if (!label) continue;
  28.             var btn = document.createElement('a');
  29.             btn.innerHTML = '[-]';
  30.             btn.className = 'iichan-hide-thread-btn';
  31.             btn.title = 'Скрыть тред';
  32.             btn.addEventListener('click', function() {hideThread(thread.id);});
  33.             thread.insertBefore(btn, label.nextSibling);
  34.         }
  35.     }
  36.  
  37.     function unHideThread(threadId) {
  38.         var hiddenThreads = JSON.parse(window.localStorage.getItem('iichan_hidden_threads') || "[]");
  39.         var index = hiddenThreads.indexOf(threadId);
  40.         if (index === -1) {
  41.             return;
  42.         }
  43.         hiddenThreads.splice(index, 1);
  44.         window.localStorage.setItem('iichan_hidden_threads', JSON.stringify(hiddenThreads));
  45.  
  46.         var thread = document.getElementById(threadId);
  47.         if(!thread) {
  48.             return;
  49.         }
  50.         removeClass(thread, 'iichan-thread-hidden');
  51.         var placeholder = document.getElementById('iichan-hidden-' + threadId);
  52.         if (placeholder) {
  53.             placeholder.parentElement.removeChild(placeholder);
  54.         }
  55.     }
  56.  
  57.     function hideThread(threadId) {
  58.         var thread = document.getElementById(threadId);
  59.         if(!thread) {
  60.             return;
  61.         }
  62.         var parent = thread.parentNode;
  63.         var threadHiddenDiv = document.createElement('div');
  64.         var threadNo = threadId.split('-')[1];
  65.         var threadTitle = thread.querySelector('.filetitle').innerText || thread.querySelector('blockquote').innerText || 'картинка';
  66.         threadTitle = threadTitle.substr(0, THREAD_TITLE_LENGTH);
  67.         threadHiddenDiv.innerHTML = 'Тред №' + threadNo + ' скрыт (' + threadTitle + ')';
  68.         threadHiddenDiv.id = 'iichan-hidden-' + threadId;
  69.         threadHiddenDiv.className = 'reply iichan-hidden-thread-placeholder';
  70.         threadHiddenDiv.addEventListener('click', function() {unHideThread(threadId);});
  71.         thread.className += ' iichan-thread-hidden';
  72.         parent.insertBefore(threadHiddenDiv, thread);
  73.  
  74.         // save result
  75.         var hiddenThreads = JSON.parse(window.localStorage.getItem('iichan_hidden_threads') || "[]");
  76.         if (hiddenThreads.indexOf(threadId) === -1) {
  77.             hiddenThreads.push(threadId);
  78.             window.localStorage.setItem('iichan_hidden_threads', JSON.stringify(hiddenThreads));
  79.         }
  80.     }
  81.  
  82.     function hideAllHiddenThreads() {
  83.         var hiddenThreads = JSON.parse(window.localStorage.getItem('iichan_hidden_threads') || "[]");
  84.         for (var i = hiddenThreads.length - 1; i >= 0; i--) {
  85.             hideThread(hiddenThreads[i]);
  86.         }
  87.     }
  88.  
  89.     function appendCSS() {
  90.         var css = document.createElement('style');
  91.         css.type = 'text/css';
  92.         css.innerHTML =  '\
  93. .iichan-hidden-thread-placeholder {\
  94. cursor: pointer;\
  95. }\
  96. .iichan-hidden-thread-placeholder:hover + div, .iichan-hidden-thread-placeholder:hover + div + br {\
  97. display: block !important;\
  98. }\
  99. .iichan-thread-hidden {\
  100. display: none;\
  101. }\
  102. .iichan-thread-hidden + br {\
  103. display: none;\
  104. }\
  105. .iichan-hide-thread-btn {\
  106. margin-left: 0.2em;\
  107. cursor: pointer;\
  108. }\
  109. ';
  110.         document.body.appendChild(css);
  111.     }
  112.  
  113.     appendCSS();
  114.     addHideBtns();
  115.     hideAllHiddenThreads();
  116. })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement