TLsqueezer

groups all releases of same movies and serials into single expendable row

Terá de instalar uma extensão como Tampermonkey, Greasemonkey ou Violentmonkey para instalar este script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

Terá de instalar uma extensão como Tampermonkey ou Violentmonkey para instalar este script.

Terá de instalar uma extensão como Tampermonkey ou Userscripts para instalar este script.

Terá de instalar uma extensão como Tampermonkey para instalar este script.

Terá de instalar uma extensão de gestão de scripts de utilizador para instalar este script.

(Já tenho um gestor de scripts de utilizador, deixe-me instalá-lo!)

Terá de instalar uma extensão como Stylus para instalar este estilo.

Terá de instalar uma extensão como Stylus para instalar este estilo.

Terá de instalar uma extensão como Stylus para instalar este estilo.

Terá de instalar uma extensão de gestão de estilos de utilizador para instalar este estilo.

Terá de instalar uma extensão de gestão de estilos de utilizador para instalar este estilo.

Terá de instalar uma extensão de gestão de estilos de utilizador para instalar este estilo.

(Já tenho um gestor de estilos de utilizador, deixe-me instalá-lo!)

// ==UserScript==
// @name           TLsqueezer
// @author         paxamit 
// @description    groups all releases of same movies and serials into single expendable row
// @namespace      paxamit
// @include        http://*.torrentleech.org/torrents/*
// @include        https://*.torrentleech.org/torrents/*
// @grant          none
// @version        0.22
// @license        MIT
// ==/UserScript==

function contentEval(source) {
  var script = document.createElement('script')
  script.setAttribute("type", "application/javascript")
  script.textContent = '(' + source + ')();'

  document.body.appendChild(script)
  document.body.removeChild(script)
}

contentEval(function() {
  //                      movies     serials
  var title_regexp = /.*?([12]\d\d\d|S\d\dE\d\d)/i 

  function guess_title(title) { 
    var guessed = title_regexp.exec(title)
    return guessed ? guessed[0] : title 
  }

  function fix_odd_even() {
    var odd = true
    var count = 0
    var was_odd = false

    $('#torrents tr').each(function () {
      var tr = $(this)
      if (tr.hasClass('squeezer')) {
        count = parseInt(tr.attr('data-count')) + 1
        was_odd = odd
      }
      tr.removeClass('odd even').addClass(odd ? 'odd' : 'even')
      odd = --count == 0 ? !was_odd : !odd
    })
  }

  $(document).ready(function() {
    var elements = $('#torrents tr')

    elements.each(function() {
      var tr = $(this)
      this.guessed_title = guess_title(tr.find('.title a').text())
      this.guessed_title_lowercase = this.guessed_title.toLowerCase()
      this.seeds = parseInt(tr.find('.seeders').text())
      this.peers = parseInt(tr.find('.leechers').text())
    })

    for (var x = 0; x < elements.length; ++x) {
      var el = elements[x]
      if (el.processed) 
        continue

      var found_elements = ['#' + $(el).attr('id')]
      var peers = el.peers
      var seeds = el.seeds

      for (var y = elements.length - 1; y > x; y--) {
        var other = elements[y]
        if (!other.processed && el.guessed_title_lowercase == other.guessed_title_lowercase) {
          $(el).after(other);
          other.processed = true
          peers = Math.max(other.peers, peers)
          seeds = Math.max(other.seeds, seeds)
          found_elements.push('#' + $(other).attr('id'))
        }
      }
      if (found_elements.length > 1) {
        var row = '<tr class="squeezer" data-count="' + found_elements.length + '">' 
          + '<td class="category" style="font-size: 20px; line-height: 44px">' 
          + found_elements.length + '</td>' 
          + '<td class="name"><span class="title"><a href="javascript:">' 
          + el.guessed_title + '</a></span></td>'
          + '<td class="quickdownload"></td><td></td><td></td><td></td>' 
          + '<td class="seeders">' + seeds + '</td>' 
          + '<td class="leechers">' + peers + '</td><td></td></tr>'

        var new_row = $(el).before(row).prev()
        var ids = $(found_elements.join(','))

        ids.hide()

        if (ids.find('.newicon').length > 0) 
          new_row.find('.name').append('<span class="newicon"> (NEW)</span>')

        new_row.data('ids', ids)
        new_row.data('show', false)

        ids.find('.title a').each(function () {
          this.innerHTML = this.innerHTML.substr(el.guessed_title.length)
        })

        ids.find('.category img').css({position: 'relative', left: '50px' })
        ids.find('td.name').prepend('<div style="float: left; width: 55px; height: 20px"></div>')

        new_row.click(function () {
          var show = $(this).data('show')
          var ids  = $(this).data('ids')
          show ? $(ids).hide() : $(ids).show()
          $(this).data('show', !show)
        })

        fix_odd_even()
      }
    }
  })
})