Post
Topic
Board Новички
Merits 3 from 2 users
Re: 📌 Подборка скриптов для форума
by
Xal0lex
on 29/05/2019, 01:01:55 UTC
⭐ Merited by xandry (2) ,IeSua (1)
Чтобы избавиться от лишних цитат при цитировании оверквотинга EcuaMobi написал скрипт по работе с цитатами.

После установки скрипт добавляет три кнопки-ссылки:



1. Full text - возвращает на место весь оверквотинг (всё как было);



2. Latest quote - удаляет из оверквотинга все цитаты, кроме последней;



3. ~snip~ - удаляет весь оверквотинг и в последней цитате меняет весь текст на ~snip~ (вырезано).



Важно: все действия с цитатами с помощью этих кнопок нужно производить до того как вы начнёте набирать свой комментарий. Иначе вы потеряете всё, что вы написали.

Установка скрипта не составляет труда. У вас должно быть установлено расширение для браузера: Tampermonkey для Chrome, Greasemonkey для Firefox, или Violentmonkey для Opera.

Можно установить скрипт по этой ссылке https://openuserjs.org/scripts/EcuaMobi/Quote_plus

Исходный код скрипта https://openuserjs.org/scripts/EcuaMobi/Quote_plus/source

Code:
// ==UserScript==
// @name        Quote plus
// @namespace   ecuamobi
// @author      EcuaMobi
// @include     https://bitcointalk.org/index.php?action=post;quote=*
// @require     https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.3.1.min.js
// @version     1.0
// @license   MIT
// @grant none
// ==/UserScript==

(() => {
  var full_text = document.forms.postmodify.message.value;
  var regex = /\[quote author/gi,
    result, indices = [];
  // Find second [quote]
  var i = 0;
  var start2 = 0;
  var end2 = 0;
  while ((result = regex.exec(full_text))) {
    i++;
    if (2 == i) {
      start2 = result.index;
      break;
    }
  }
  regex = /\[\/quote\]/gi, result, indices = [];
  var last = 0;
  while ((result = regex.exec(full_text))) {
    if (last > 0) {
      end2 = last + 8;
    }
    last = result.index;
  }

  // Are there several quotes?
  if (start2 == 0 || end2 == 0) {
    // Abort
    return;
  }

  // Get text to use for every option
  var latest_quote = full_text.substr(0, start2).trim() + '\n' + full_text.substr(end2).trim() + '\n';
  var snip_quote = full_text.substr(0, start2).trim() + '~snip~[/quote]\n';
  full_text = full_text.trim() + '\n';

  // By default use the latest quote. REPLACE THIS BY snip_quote OR REMOVE IF DESIRED
  document.forms.postmodify.message.value = latest_quote;

  // Add buttons to manually use full text, latest quote or snip
  const $links = $("Full text | Latest quote | ~snip~");
  $links.insertAfter($("#postMoreOptions"));

  $("#full_text").click((e) => {
    e.preventDefault();
    document.forms.postmodify.message.value = full_text;
  });
  $("#latest_quote").click((e) => {
    e.preventDefault();
    document.forms.postmodify.message.value = latest_quote;
  });
  $("#snip_quote").click((e) => {
    e.preventDefault();
    document.forms.postmodify.message.value = snip_quote;
  });
})();

Примечания и ограничения:

- скрипт не будет работать, если нет вложенных цитат;
- скрипт учитывает только цитаты вида "[ quote author=username link=...". Обычный тег [ quote] не учитывается;
- скрипт может не работать, если вложенные цитаты находятся не в начале поста или цитаты смешаны с ответами на эти цитаты;
- вы должны проверять с помощью "Preview" как отработал скрипт, в противном случае вы можете вернуть всё как и было, нажав на кнопку "Full text".

Так как EcuaMobi продолжит работу над развитием скрипта, комментарии и пожелания по работе скрипта в топике автора приветствуются.