Diferencia entre revisiones de «MediaWiki:Gadget-show-quality-on-cats.js»

De La Coppermind
Ir a la navegación Ir a la búsqueda
m (oops)
m (maybe break things)
Línea 32: Línea 32:
}
}


;(new mw.Api).get(query).then(function query_response(response) {
const api = new mw.Api({ parameters: query, })


// page => [cat,...]
console.debug(response)
const categories = {}
if (response.continue) {

console.warn('gadget:', 'show-quality-on-cats', 'missing results', response)
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 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) {
const all = {}

response.query.pageids.forEach(function each_pageid(id) {
console.debug('article-qualities:', all)
const page = response.query.pages[id]
if (!page.categories) return
all[page.title] = page.categories[0].title.replace('Category:','')
})


document.querySelectorAll('#mw-pages a').forEach(function each_link(el) {
document.querySelectorAll('#mw-pages a').forEach(function each_link(el) {
const title = el.getAttribute('title')
const title = el.getAttribute('title')
const cat = all[title]
const cat = all[title][0]
if (!cat) return
if (!cat) return
const icon = String.fromCodePoint.apply(null, icons[cat])
const icon = String.fromCodePoint.apply(null, icons[cat])
const li = el.parentElement
const li = el.parentElement
//-li.append(icon)
li.classList.add('quality')
li.classList.add('quality')
li.classList.add(css_class[cat])
li.classList.add(css_class[cat])

Revisión del 17:40 14 ago 2019

mw.hook('wikipage.content').add(function hook_handler() {

const icons = {
  'Stubs': [0x25D4],
  'Partially complete articles': [0x25D2],
  'Articles nearing completion': [0x25D5],
  'Complete articles': [0x26AB, 0xFE0E],
}
const css_class = {
                        'Stubs': 'quality-stub',
  'Partially complete articles': 'quality-part',
  'Articles nearing completion': 'quality-good',
            'Complete articles': 'quality-done',
}

// only on categories
if (mw.config.get('wgCanonicalNamespace') != 'Category') return
// not on quality cats (pointless)
if (Object.keys(icons).includes(mw.config.get('wgTitle'))) return

console.warn('gadget:', 'show-quality-markers')

const query = {
  prop: "categories",
    indexpageids: true,
    cllimit: "max",
    clcategories: Object.keys(icons).map(function(cat) { return 'Category:'+ cat }),
  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 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('article-qualities:', all)

document.querySelectorAll('#mw-pages a').forEach(function each_link(el) {
  const title = el.getAttribute('title')
  const cat = all[title][0]
  if (!cat) return
  const icon = String.fromCodePoint.apply(null, icons[cat])
  const li = el.parentElement
  li.classList.add('quality')
  li.classList.add(css_class[cat])
})

mw.hook('quality-on-cats').fire()

}) // end of API query


}) // end of MW hook