Hack Forums - Multi Quote

Adds a multiquote button to the post management buttons.

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

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

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

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

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

You will need to install a user script manager extension to install this script.

(I already have a user script manager, let me install it!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

ستحتاج إلى تثبيت إضافة مثل Stylus لتثبيت هذا النمط.

ستحتاج إلى تثبيت إضافة لإدارة أنماط المستخدم لتتمكن من تثبيت هذا النمط.

ستحتاج إلى تثبيت إضافة لإدارة أنماط المستخدم لتثبيت هذا النمط.

ستحتاج إلى تثبيت إضافة لإدارة أنماط المستخدم لتثبيت هذا النمط.

(لدي بالفعل مثبت أنماط للمستخدم، دعني أقم بتثبيته!)

// ==UserScript==
// @name        Hack Forums - Multi Quote
// @namespace   Doctor Blue
// @description Adds a multiquote button to the post management buttons.
// @include     *hackforums.net/showthread.php?tid=*
// @require     https://cdn.jsdelivr.net/jquery/1.10.2/jquery-1.10.2.min.js
// @require     https://cdn.jsdelivr.net/jquery.cookie/1.4.1/jquery.cookie.min.js
// @version     0.2.2
// @grant       none
// ==/UserScript==

// Prevent conflicts with other userscripts
var $j = $.noConflict(true)

// Add the button to post management buttons
var $posts = $j('table[id*="post_"] .bitButton:contains("Quote")')
  .after(' <a class="bitButton multiquote" href="javascript:void(0)">Quote+</a>')

// Restyle the multiquote insert message
$j('#quickreply_multiquote')
  .css('background-color', '#777777')
  .css('border', '1px #CCCCCC dashed')

// Parse the multiquote cookie
function getQuotes() {
  var quotes = $j.cookie('multiquote')
  return (quotes === undefined ? new Array() : quotes.split('|'))
}

// Change button text to Q- if post is already being quoted on load
function quoteInit() {
  var quotes = getQuotes()
  $j('.multiquote').text('Quote+')
  quotes.forEach(function(pid) {
    $j('#post_' + pid + ' .multiquote').text('Quote-')
  })
}

// Retrieve the quoted content
function fetchQuoteText() {
  Thread.spinner = new ActivityIndicator("body", {image: imagepath + "/spinner_big.gif"})
  $j.get('/xmlhttp.php?action=get_multiquoted&load_all=1', function(data) {
    console.log("Inserting text")
    var olddata = $j('#message').val()
    $j('#message').val(olddata + data)
    Thread.spinner.destroy()
    Thread.spinner = ""
    clearQuotes()
  })
}

function clearQuotes() {
  $j.removeCookie('multiquote', {path: '/', domain: '.hackforums.net'})
  $j('#quickreply_multiquote').hide()
  quoteInit()
}

// Set all buttons to Q+ after inserting
$j('#quickreply_multiquote > span > a[href*="load_all_quotes"]')
  .prop('onclick', null).off('click') // Remove MyBB handler

$j('#quickreply_multiquote > span > a[href*="load_all_quotes"]').on('click', function(event) {
    console.log("Inserting quotes")
    $j('.bitButton.multiquote').text('Quote+')
    fetchQuoteText()
    event.preventDefault()
  })

$j('.bitButton.multiquote').on('click', function(event) {
  // Get the post id (Dunno why parentsUntil doesn't work here)
  var pid = $j(this).parent().parent().parent().parent().parent().attr('id').substr(5)
  var quotes = getQuotes()
  
  // Remove the quote if it's already there, add it if it isn't
  var i = $j.inArray(pid, quotes)
  if(i !== -1) { // Remove quote if found
    quotes.splice(i, 1)
    $j(this).text("Quote+")
  } else { // Add quote if not found
    quotes.push(pid)
    $j(this).text("Quote-")
  }

  // Update the cookie
  if(quotes.length > 0) {
    $j('#quickreply_multiquote').show()
    $j.cookie('multiquote', quotes.join('|'), {expires: 365, path: '/', domain: '.hackforums.net'})
  } else {
    $j('#quickreply_multiquote').hide()
    $j.removeCookie('multiquote', {path: '/', domain: '.hackforums.net'})
  }
})