PTH Hide quote trains

Hide nested quotes with a link to show them

目前為 2017-01-11 提交的版本,檢視 最新版本

// ==UserScript==
// @name         PTH Hide quote trains
// @version      0.2
// @description  Hide nested quotes with a link to show them
// @author       Chameleon
// @include      http*://passtheheadphones.me/*
// @grant        none
// @namespace https://greasyfork.org/users/87476
// ==/UserScript==

(function() {
  'use strict';

  var settings=getSettings();

  if(window.location.href.indexOf("threadid=7721") != -1)
  {
    showSettings();
  }

  var quotes=document.getElementsByTagName('blockquote');
  for(var i=0; i<quotes.length; i++)
  {
    var q=quotes[i];
    var e=q.firstElementChild;
    var depth=getDepth(q);
    if(depth >= settings.depth)
    {
      while(e)
      {
        if(e.tagName=="BLOCKQUOTE")
        {
          var a=document.createElement('a');
          a.href='javascript:void(0);';
          a.setAttribute('style', 'margin-right: 5px;'); 
          a.setAttribute('class', 'showQuotes');
          a.innerHTML='Show Quote';
          a.addEventListener('click', toggleQuote.bind(undefined, a, e), false);
          e.parentNode.insertBefore(a, e);
          e.parentNode.insertBefore(document.createElement('br'), e);
          e.style.display='none';
        }

        e=e.nextElementSibling;
      }
    }
    if(depth===0)
    {
      var hidden=q.getElementsByClassName('showQuotes');
      if(hidden.length > 0)
      {
        var a=document.createElement('a');
        a.innerHTML='Toggle quotes';
        a.href='javascript:void(0);';
        //a.setAttribute('style', 'margin-left: 5px;'); 
        q.parentNode.insertBefore(a, q);
        a.addEventListener('click', toggleQuotes.bind(undefined, q), false);
      }
    }
  }
})();

function showSettings()
{
  var div=document.getElementById('ChameleonSettings');
  if(!div)
  {
    var before = document.getElementsByClassName('forum_post')[0];
    div = document.createElement('div');
    div.setAttribute('id', 'ChameleonSettings');
    before.parentNode.insertBefore(div, before);
    div.setAttribute('style', 'width: 100%; text-align: center; padding-bottom: 10px;');
    div.setAttribute('class', 'box');
  }
  div.innerHTML = '<h2>Hide quote trains Settings</h2><br />';
  var settings = getSettings();

  var input=document.createElement('input');
  input.placeholder = 'Quote depth';
  input.value=settings.depth ? settings.depth:'';
  input.addEventListener('change', changeSettings.bind(undefined, undefined, div), false);
  div.appendChild(input);
  div.appendChild(document.createElement('br'));

  var a=document.createElement('a');
  div.appendChild(a);
  a.href='javascript:void(0);';
  a.innerHTML = 'Save';
}

function changeSettings(a, div)
{
  var settings=getSettings();
  /*var as=div.getElementsByTagName('a');

  if(a == as[0])
  {
    if(as[0].innerHTML.indexOf('Off') != -1) 
    {
      settings.masterPlayer = true;
    }
    else
      settings.masterPlayer = false;
  }*/

  var inputs=div.getElementsByTagName('input');
  settings.depth=inputs[0].value;

  window.localStorage.hideQuoteTrains = JSON.stringify(settings);
  showSettings();
}

function getSettings()
{
  var settings = window.localStorage.hideQuoteTrains;
  if(!settings)
  {
    settings = {depth:''};
  }
  else
    settings = JSON.parse(settings);
  return settings;
}

function toggleQuotes(q)
{
  var as=q.getElementsByClassName('showQuotes');
  for(var i=0; i<as.length; i++)
  {
    as[i].click();
  }
}

function getDepth(q)
{
  var count=0;
  var parent=q.parentNode;
  while(parent)
  {
    if(parent.tagName=="BLOCKQUOTE")
      count++;
    parent=parent.parentNode;
  }
  return count;
}

function toggleQuote(a, q)
{
  if(q.style.display=='none')
  {
    a.innerHTML='Hide Quote';
    q.style.display='';
  }
  else
  {
    a.innerHTML = 'Show Quote';
    q.style.display='none';
  }
}