Advertisement
Guest User

Untitled

a guest
Mar 8th, 2017
120
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.threadId = thread.id;
  33.             btn.addEventListener('click', function() {hideThread(this.threadId);});
  34.             thread.insertBefore(btn, label.nextSibling);
  35.         }
  36.     }
  37.  
  38.     function unHideThread(threadId) {
  39.         var hiddenThreads = JSON.parse(window.localStorage.getItem('iichan_hidden_threads') || "[]");
  40.         var index = hiddenThreads.indexOf(threadId);
  41.         if (index === -1) {
  42.             return;
  43.         }
  44.         hiddenThreads.splice(index, 1);
  45.         window.localStorage.setItem('iichan_hidden_threads', JSON.stringify(hiddenThreads));
  46.  
  47.         var thread = document.getElementById(threadId);
  48.         if(!thread) {
  49.             return;
  50.         }
  51.         removeClass(thread, 'iichan-thread-hidden');
  52.         var placeholder = document.getElementById('iichan-hidden-' + threadId);
  53.         if (placeholder) {
  54.             placeholder.parentElement.removeChild(placeholder);
  55.         }
  56.     }
  57.  
  58.     function hideThread(threadId) {
  59.         var thread = document.getElementById(threadId);
  60.         if(!thread) {
  61.             return;
  62.         }
  63.         var parent = thread.parentNode;
  64.         var threadHiddenDiv = document.createElement('div');
  65.         var threadNo = threadId.split('-')[1];
  66.         var threadTitle = thread.querySelector('.filetitle').innerText || thread.querySelector('blockquote').innerText || 'картинка';
  67.         threadTitle = threadTitle.substr(0, THREAD_TITLE_LENGTH);
  68.         threadHiddenDiv.innerHTML = 'Тред №' + threadNo + ' скрыт (' + threadTitle + ')';
  69.         threadHiddenDiv.id = 'iichan-hidden-' + threadId;
  70.         threadHiddenDiv.className = 'reply iichan-hidden-thread-placeholder';
  71.         threadHiddenDiv.addEventListener('click', function() {unHideThread(threadId);});
  72.         thread.className += ' iichan-thread-hidden';
  73.         parent.insertBefore(threadHiddenDiv, thread);
  74.  
  75.         // save result
  76.         var hiddenThreads = JSON.parse(window.localStorage.getItem('iichan_hidden_threads') || "[]");
  77.         if (hiddenThreads.indexOf(threadId) === -1) {
  78.             hiddenThreads.push(threadId);
  79.             window.localStorage.setItem('iichan_hidden_threads', JSON.stringify(hiddenThreads));
  80.         }
  81.     }
  82.  
  83.     function hideAllHiddenThreads() {
  84.         var hiddenThreads = JSON.parse(window.localStorage.getItem('iichan_hidden_threads') || "[]");
  85.         for (var i = hiddenThreads.length - 1; i >= 0; i--) {
  86.             hideThread(hiddenThreads[i]);
  87.         }
  88.     }
  89.  
  90.     function appendCSS() {
  91.         var css = document.createElement('style');
  92.         css.type = 'text/css';
  93.         css.innerHTML =  '\
  94. .iichan-hidden-thread-placeholder {\
  95. cursor: pointer;\
  96. }\
  97. .iichan-hidden-thread-placeholder:hover + div, .iichan-hidden-thread-placeholder:hover + div + br {\
  98. display: block !important;\
  99. }\
  100. .iichan-thread-hidden {\
  101. display: none;\
  102. }\
  103. .iichan-thread-hidden + br {\
  104. display: none;\
  105. }\
  106. .iichan-hide-thread-btn {\
  107. margin-left: 0.2em;\
  108. cursor: pointer;\
  109. }\
  110. ';
  111.         document.body.appendChild(css);
  112.     }
  113.  
  114.     appendCSS();
  115.     addHideBtns();
  116.     hideAllHiddenThreads();
  117. })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement