Difference between revisions of "User:Fbstj/gadget/revision-contrib-pie.js"

From The Coppermind
Jump to navigation Jump to search
(+)
 
m (stash)
 
Line 1: Line 1:
const pageid = mw.config.get('wgPageName')
+
const pageid = mw.config.get('wgArticleID')
 
const query = {
 
const query = {
 
// request the history of this page
 
// request the history of this page
Line 8: Line 8:
 
// request as many as you can at once
 
// request as many as you can at once
 
rvlimit: 'max',
 
rvlimit: 'max',
  +
// properties to fetch:
  +
rvprop: [ 'ids', 'user', 'timestamp', 'size', 'tags', ],
 
}
 
}
 
const api = new mw.Api({ parameters: query, })
 
const api = new mw.Api({ parameters: query, })
Line 17: Line 19:
 
}
 
}
   
  +
/// fetch consecutive results from the API until all "continue" have been fetched
function paginate(resp) {
 
  +
///
const page = let resp.query[pageid]
 
 
function paginate_one(resp) {
  +
const page = resp.query.pages[pageid]
  +
if (!page) {
  +
console.warn('gadget:', 'revision-contrib-pie', 'no results?', resp, revs)
  +
return
  +
}
  +
page.revisions.forEach(each_rev)
  +
if (!resp.continue) {
  +
console.debug('gadget:', 'revision-contrib-pie', 'done! found', revs.length)
  +
return
  +
}
  +
console.debug('continuing:', resp.continue)
  +
return api.get(resp.continue).then(paginate)
  +
}
  +
  +
function paginate_all(resp) {
  +
const pageids = Object.keys(resp.query.pages)
  +
 
const page = let resp.query.pages[pageid]
 
if (!page) {
 
if (!page) {
 
console.warn('gadget:', 'revision-contrib-pie', 'no results?', resp, revs)
 
console.warn('gadget:', 'revision-contrib-pie', 'no results?', resp, revs)

Latest revision as of 19:54, 20 August 2019

const pageid = mw.config.get('wgArticleID')
const query = {
  // request the history of this page
  pageids: [pageid],
  prop: 'revisions',
   // request the oldest edits first
   rvdir: 'newer',
   // request as many as you can at once
   rvlimit: 'max',
   // properties to fetch:
   rvprop: [ 'ids', 'user', 'timestamp', 'size', 'tags', ],
}
const api = new mw.Api({ parameters: query, })

const revs = []

function each_rev(rev) {
  revs.push(rev)
}

/// fetch consecutive results from the API until all "continue" have been fetched
/// 
function paginate_one(resp) {
  const page = resp.query.pages[pageid]
  if (!page) {
    console.warn('gadget:', 'revision-contrib-pie', 'no results?', resp, revs)
    return
  }
  page.revisions.forEach(each_rev)
  if (!resp.continue) {
    console.debug('gadget:', 'revision-contrib-pie', 'done! found', revs.length)
    return
  }
  console.debug('continuing:', resp.continue)
  return api.get(resp.continue).then(paginate)
}

function paginate_all(resp) {
  const pageids = Object.keys(resp.query.pages)
  
  const page = let resp.query.pages[pageid]
  if (!page) {
    console.warn('gadget:', 'revision-contrib-pie', 'no results?', resp, revs)
    return revs
  }
  page.revisions.forEach(each)rev)
  if (!resp.continue) {
    return revs
  }
  console.debug('continuing:', resp.continue)
  return api.get(resp.continue).then(paginate)
}

api.get().then(paginate).then(function all_results(all) {
  // TODO: create pie chart of contributors (accurate to how much they contributed?
  mw.hook('page-history').fire(all)
})