MediaWiki:Gadget-rollback-button.js

De La Coppermind
Ir a la navegación Ir a la búsqueda

Nota: tras guardar, quizás necesites actualizar la caché de tu navegador para ver los cambios.

  • Firefox/Safari: Mantén presionada la tecla Mayús mientras pulsas el botón Actualizar, o presiona Ctrl+F5 o Ctrl+R (⌘+R en Mac)
  • Google Chrome: presiona Ctrl+Shift+R (⌘+Mayús+R en Mac)
  • Internet Explorer: mantén presionada Ctrl mientras pulsas Actualizar, o presiona Ctrl+F5
  • Opera: dirígete a Menú → Configuración (Opera → Preferencias en Mac) y luego a Privacidad y seguridad → Borrar datos de navegación → Imágenes y archivos en caché.
function convert_to_button(element) {
  mw.loader.load('jquery.spinner')
  mw.loader.load('mediawiki.notification');
  const api = new mw.Api;
  const self = document.createElement('button')
  const a = element.querySelector('a')
  const url = new mw.Uri(a.getAttribute('href'))
  const user = url.query.from
  const page = url.path.split('/').slice(2).join('/')
  console.debug('rollback:', { page: page, user: user, })
  self.textContent = a.innerText
  self.classList.add('rollback-btn')
  self.onclick = function confirm_rollback(ev) {

    if (!confirm('rollback changes to '+ page +' by '+ user +'?')) return
///----
    const spin = ($.createSpinner({ size: 'small', display: 'inline', }))[0]

    self.replaceWith(spin)
    // https://doc.wikimedia.org/mediawiki-core/master/js/#!/api/mw.Api.plugin.rollback
    api.rollback(page, user).done(function rolled_back(value) {
      console.log('rolled back:', value)
      mw.notify('rolled back changes to '+ page +' by '+ user +'!');
    }).fail(function bad_rollback(error) {
      console.warn('rollback:', error)
      spin.replaceWith(self)
    })
///----
 }
  element.replaceWith(self)
}

// rollback button on diff pages
mw.hook('wikipage.diff').add(function rollback_on_diff(){

const links = document.querySelectorAll('.mw-rollback-link')
if (!links.length) { return }
console.debug('gadget:', 'rollback-button (DIFF)', links)
links.forEach(convert_to_button)

})

// TODO: recent changes
mw.hook('Special:RecentChanges').add(function rollback_on_rc() {

const links = document.querySelectorAll('.mw-rollback-link')
if (!links.length) { return }
console.debug('gadget:', 'rollback-button (RC)', links)
links.forEach(convert_to_button)

})

// TODO: history pages
mw.hook('mw-action.history').add(function rollback_on_history() {

const links = document.querySelectorAll('.mw-rollback-link')
if (!links.length) { return }
console.debug('gadget:', 'rollback-button (HISTORY)', links)
links.forEach(convert_to_button)

})