Usuário:Juan90264/DesabilitarRollback.js

Nota: Depois de publicar, poderá ter de contornar a cache do seu navegador para ver as alterações.

  • Firefox / Safari: Pressione Shift enquanto clica Recarregar, ou pressione Ctrl-F5 ou Ctrl-R (⌘-R no Mac)
  • Google Chrome: Pressione Ctrl-Shift-R (⌘-Shift-R no Mac)
  • Edge: Pressione Ctrl enquanto clica Recarregar, ou pressione Ctrl-F5.
/* 
 * DesabilitarRollback.js
 * 
 * Cria um botão no menu "Ferramentas", que permite desabilitar o botão reverter somente de edições
 * feitas por usuários Autorrevisores

 * Script baseado na sugestão feita na "Lista de desejos tecnológicos da lusofonia", 
 * em [[meta:Lista de desejos tecnológicos da lusofonia/Propostas/Opção de desabilitar Rollback em edição de editores regulares]]
 * @author: [[pt:User:Juan90264]]
 *
*/

/// Carregar o CSS do script
mw.loader.load( 'https://pt.wikipedia.org/w/index.php?title=User:Juan90264/DesabilitarRollback.css&action=raw&ctype=text/css', 'text/css' );

/// Carrega o titulo da página
var title = $("h1#firstHeading").text();
var regexTitle = /(?<title>[a-z A-Z0-9á-úÁ-Ú()\[\]:-]*):/gm;
var resultTitle = regexTitle.exec(title);
var resultTitle1 = resultTitle.groups.title;

/// Função para identificar o último usuário que editou
function userRevision(title) {
  var params = {
    action: 'query',
    prop: 'revisions',
    formatversion: "2",
    titles: title,
    format: 'json'
  },
  api = new mw.Api();
  api.postWithToken( 'csrf', params ).done(function(data){
	userAutorreviewer(data.query.pages[0].revisions[0].user);
  });
}
function userAutorreviewer(userEdit) {
   var params = {
	action: "query",
	format: "json",
	list: "users",
	formatversion: "2",
	usprop: "groups",
	ususers: userEdit
  },
  api = new mw.Api();
  api.post( params ).done(function(r){
    var userGroups = r.query.users[0].groups;
    /// Verifica também se é administrador, levando em consideração que esse estatuto
    /// acaba deixando obsoleto o estatuto de autorrevisor em alguns casos,
    /// e não aparecendo nos grupos de usuários do último usuário que editou uma página
    var userGroupsConditions = ["autoreviewer", "sysop"];
    var resultAutorreviewer = userGroupsConditions.some(r => userGroups.toString().includes(r));

    /// Se for verdadeiro que o último usuário que editou
    /// for um Autorrevisor, o código permite o botão
    if (resultAutorreviewer) {
      /// Cria botão para desabilitar
      var menu = mw.util.addPortlet( 'p-cactions' );
      document.body.appendChild(menu);
      var menuButton = mw.util.addPortletLink( 
          'p-cactions', 
          '#', 
          'DesabilitarRollback (' + ( localStorage.getItem( 'desabilitarollbackHidden' ) == 'true' ? 'esconder' : 'exibir' ) + ')', 
          "ca-desabilitarollback" );
      
      var buttonRollback = "span.mw-rollback-link";
      var separatorRollback = "li.before > .mw-changeslist-links.mw-pager-tools";
      if (localStorage.getItem( 'desabilitarollbackHidden' ) == 'true') {
        $(buttonRollback).removeClass("RollbackNone");
        $(separatorRollback).removeClass("RollbackNone");
      } else {
        $(buttonRollback).addClass("RollbackNone");
        $(separatorRollback).addClass("RollbackNone");
      }

      /// Exibe/esconde o botão "Reverter"
      $("#ca-desabilitarollback").click(function(){
        if (localStorage.getItem( 'desabilitarollbackHidden' ) == 'true') {
          localStorage.setItem( 'desabilitarollbackHidden', false );
          $("#ca-desabilitarollback > a" ).text("DesabilitarRollback (exibir)");
          $(buttonRollback).addClass("RollbackNone");
          $(separatorRollback).addClass("RollbackNone");
        } else {
          localStorage.setItem( 'desabilitarollbackHidden', true );
          $("#ca-desabilitarollback > a" ).text("DesabilitarRollback (esconder)");
          $(buttonRollback).removeClass("RollbackNone");
          $(separatorRollback).removeClass("RollbackNone");
        }
      });
    } else {
    }
  });
}

/// Inicia o script
userRevision(resultTitle1);