MediaWiki:Gadget-fancy-css-on-cats.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é.
mw.hook('wikipage.content').add(function hook_handler() {

// SEE: [[MediaWiki:Gadget-fancy.css]] for icons and colors

// only on categories
if (mw.config.get('wgCanonicalNamespace') != 'Category') return

// add specials for keepers
if (mw.config.get('wgUserGroups').includes('keeper')) {
  document.body.classList.add('user-is-keeper')
}

console.warn('gadget:', 'fancy-cats')

const query = {
  prop: "categories",
    indexpageids: true,
    cllimit: "max",
  generator: "categorymembers",
    gcmtitle: mw.config.get('wgPageName'),
    gcmlimit: "max",
    gcmtype: "page",
}

const api = new mw.Api({ parameters: query, })

// page => [cat,...]
const categories = {}

function paginate(resp) {
  resp.query.pageids.forEach(function each_pageid(id) {
    const page = resp.query.pages[id]
    if (!categories[page.title])
      categories[page.title] = []
    if (!page.categories) return
    page.categories.forEach(function pid_each_cat(row) {
      const cat = row.title.replace('Category:','')
      categories[page.title].push(cat)	
    })
  })
  if (!resp.continue) {
    return categories
  }
  console.debug('continuing:', resp.continue)
  // TODO: this doesn't work
  return api.get(resp.continue).then(paginate)
}

api.get().then(paginate).then(function all_results(all) {

console.debug('fancy-cats:', all)

const links = document.querySelectorAll('#mw-pages a')

console.debug('fancy-links:', links)

links.forEach(function each_link(el) {
  const title = el.getAttribute('title')
  const li = el.parentElement
  all[title].forEach(function each_link_cat(cat) {
    if (mw.config.get('wgTitle') == cat) return
    const cls = 'fancy-' + cat.toLowerCase().replace(/ /g, '-')
    li.classList.add(cls)
  })
})

mw.hook('fancy-cats').fire()

}) // end of API query

}) // end of MW hook