Author

Topic: User script para eliminar citas anidadas / "Quote pyramids" (Read 153 times)

legendary
Activity: 3346
Merit: 3125
...
 el tratamiento de las citas (quotes) debería ser tal que se refleje la parte esencial de aquello a lo que nos queremos referir con nuestros comentarios.

Yo no le tomaba mucha importancia a como hacer las citas, incluso por perezoso la mayoría de las veces citaba el texto completo, pero ahora me voy dando cuenta de que es importante e incluso está mencionado en las reglas, por lo cual seré mas cuidadoso con este tema de las citas de ahora en adelante, gracias por el dato Ddmr, todos los días se aprende algo nuevo.
legendary
Activity: 2338
Merit: 10802
There are lies, damned lies and statistics. MTwain
Por cierto, realmente va contra las reglas del foro crear pirámides de citas (quotes) en nuestros posts, tal y como se refleja en las reglas del foro:

<…> 1. No publicar mensajes o crear hilos sin valor, con poco valor o sin que vengan a cuento. [1][e] <…>
Ejemplos:
1. Mensajes como "SELL SELL SELL", "Estoy de acuerdo", "+1", "Leyendo", "Interesante", "LOL", "SCAM", "LEGIT", "FAKE", otros mensajes de una sola palabra, mensajes en los que mayormente se insulte, pirámides de citas, hilos inútiles de presentaciones (N. del T: excepto el que ya tenemos a tal efecto), hilos acerca de algo que ya se esté debatiendo en otros hilos. <…>

Ya sea a mano, o mediante scripts como el elaborado por @EcuaMobi, el tratamiento de las citas (quotes) debería ser tal que se refleje la parte esencial de aquello a lo que nos queremos referir con nuestros comentarios. Excepcionalmente, los quotes más largos se pueden utilizar a modo de "archivo" de un post, de manera que se captura su totalidad ante una posible disputa derivada de su contenido (también están las utilidades de archivo externas, menos susceptibles de poder ser manipuladas como Archieve Today o TheWayBackMachine).
member
Activity: 588
Merit: 61
Pues un gran trabajo @EcuaMobi.
El tema de eliminar citas anteriores yo lo hago manualmente, pero es tan habitual que ya ni siquiera me doy cuenta de ello. Es un auto-script Tongue
Se agradece el curro, pero no soy partidario de utilizar ningún script en los navegadores, por muy segura que sea la fuente. Siempre acaban surgiendo problemas de compatibilidad, o en las actualizaciones, o conflictos con otros scripts, ..., en fin. Que no los utilizo ...

legendary
Activity: 1876
Merit: 1475
He escrito un user script que ayuda a eliminar las citas ("quotes") múltiples al responder a alguien. Es molestoso dejar varias citas anidadas (ejemplo), por lo que generalmente es necesario eliminar manualmente las citas anteriores. Este script lo hace automáticamente.

Por ejemplo, al hacer click en "quote" aquí:



el script elimina la cita más antigua y deja solo la última:


además, muestra 3 enlaces:

"Full text" vuelve a mostrar el texto completo:


"Latest quote" deja solo la cita más reciente (opción por emisión). Mientras que "~snip~" deja la última cita pero elimina su contenido:


Estos botones reemplazan el contenido, por lo que deben ser usados antes de escribir nada para no perder el trabajo realizado.

Cómo instalar:


Demo:
Esta captura gif fue tomada en un teléfono Android. Funciona igual que en un computador.

Código fuente para revisión y edición:
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;
  });
})();

Notas y limitaciones:
  • El script no se activará si no hay citas anidadas
  • Solo se activa con citas normales de la forma [ quote author=username link=.... No con citas simples (sin author o link)
  • Podría comportarse de forma extraña si la cita no está al inicio, o si hay varias citas mezcladas con respuestas a esas citas. Aún estoy trabajando en eso
  • Siempre revisa si el script funcionó correctamente, y haz clic en "Full text" de no ser así

Seguiré mejorando este script. Agradezco que publiquen sus comentarios en este thread (en español), o aquí, en inglés, que seguramente será actualizado más frecuentemente.
Jump to: