Usuari:Forat Negre/languagetool-ca.js

Nota: Després de desar, heu de netejar la memòria cau del navegador per veure els canvis. En la majoria de navegadors amb Windows o Linux, premeu Ctrl+F5 o bé premeu Shift i cliqueu el botó "Actualitza" (Ctrl i "Actualitza" amb Internet Explorer). Vegeu més informació i instruccions per a cada navegador a Viquipèdia:Neteja de la memòria cau.

//<nowiki>
/* languagetool-ca.js
--------------------------------
  Versió actual: 1.1
  Autor: Forat Negre
--------------------------------
  Corrector ortogràfic per editors.
  Si LanguageTool està activat al teu navegador, aquest codi l'utilitza
  per analitzar directament el text de l'article.

  >> Registre de canvis
  Versió 1.0 [8 de gener 2023]
  * Versió operativa que s'executa automàticament

  Versió 1.1 [12 de gener 2023]
  * Implementat JQuery 3.2.1
  * Afegit botó "LT" a l'extrem dret del cos del text
*/

function langCheck_Article(button) {
  // Obtenir l'element amb el contingut de la pàgina
  var content = button.querySelector(".mw-parser-output"); if (!content) { return; } // Sortir si no hi ha text
  var prevClick = button.querySelector(".ca-langcheck"); if (prevClick) { return; }  // Sortir si ja s'havia aplicat la correcció

  // Definir casos excepcionals (table of contents)
  content.querySelectorAll(".toc ul").forEach(function(e) {
    e.classList.add("ca-langdisabled");
  });

  // Afegir un nou parent editable als subelements de text
  content.querySelectorAll("p, ul, .mw-headline").forEach(function(e) {
    var validNode = true;
    // Es descarten alguns casos
    if (e.classList.contains("ca-langdisabled")) validNode = false;
    if (e.id == ("Referències")) validNode = false;
    if (e.id == ("Bibliografia")) validNode = false;
    // Aplicar el canvi
    if (validNode == true) {
      var style = "display:inherit; resize:none; border:none; overflow:auto; outline:none;";
      e.innerHTML = '<div class="ca-langcheck" contenteditable="true" style="' + style + '">' + e.innerHTML + '</div>';
    }
  });

  // Iteració asincrònica a cada paràgraf
  var checkers = document.querySelectorAll(".ca-langcheck");
  var i = 0, j = 0, k = 0; for (i; i < checkers.length; i++) {
    setTimeout(function(){
      // Clicar automàticament cada parent per activar-ne el langtool
      checkers[j].focus({ preventScroll: true }); j++;
    }, i * 1000);
    setTimeout(function(){
      // Fer els parents no editables de nou per tornar a activar els enllaços
      checkers[k].setAttribute("contenteditable", "false"); k++;
    }, (i + 1) * 1000);
  }

}

// Afegir un botó als llocs necessaris que en clicar-lo activa la correcció
$(function() {
  var content = document.querySelector('.mw-body-content'); if (!content) return;
  var lt_button = document.createElement("div");
  $(lt_button).addClass("lt_button");
  lt_button.onclick = function(button) { langCheck_Article(button.path[1]) };
  content.insertBefore(lt_button, content.firstChild);

  /* Definir CSS personalitzat */
  var css = '.lt_button {' +
  '  position: absolute;' +
  '  right: 0;' +
  '  top: 0;' +
  '  font-family: serif;' +
  '  font-weight: 800;' +
  '  cursor: pointer;' +
  '  background: url("https://upload.wikimedia.org/wikipedia/commons/thumb/4/45/LanguageTool_Logo.svg/140px-LanguageTool_Logo.svg.png");' +
  '  background-size: 36px;' +
  '  width: 36px;' +
  '  height: 36px;' +
  '  text-align: center;' +
  '}' +
  '.lt_button:hover {' +
  '  filter: hue-rotate(45deg);' +
  '}';

  /* Importar el CSS a la pàgina actual */
  var head = document.head || document.getElementsByTagName('head')[0], style = document.createElement('style');
  style.type = 'text/css';
  style.appendChild(document.createTextNode(css));
  head.appendChild(style);
});

//</nowiki>