Difference between revisions of "User:Fbstj/gadget/history-test.js"
m (+notices junk) |
m (Fbstj moved page User:Fbstj/common.js to User:Fbstj/gadget/history-test.js without leaving a redirect) |
||
(150 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
mw.hook('wikipage.content').add(function revs_gadget() { |
|||
/* Add edit buttons to templates */ |
|||
$(function () { |
|||
const pageid = mw.config.get('wgArticleId') |
|||
function edit_button(i, v) { |
|||
const query = { |
|||
if (!v) return v; |
|||
// request the history of this page |
|||
v = v.replace(/\.(\d+)/, "%$1"); |
|||
pageids: [pageid], |
|||
var a = "<a href='/edit/Template:" + v +"'>edit</a>"; |
|||
prop: 'revisions', |
|||
$('.title', this).append("<span class='mw-editsection' style='float: right;' >[" + a + "]</span>"); |
|||
// 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, }) |
|||
api.get().then(function old_hist(resp) { |
|||
$('.navbar').attr('id', edit_button); |
|||
const page = resp.query.pages[pageid] |
|||
$('.infobox').attr('id', edit_button); |
|||
page.revisions.forEach(console.log) |
|||
}) |
}) |
||
/* see User:Fbstj/notice_sandbox */ |
|||
/* |
|||
filters for the first previous `sel` on each of `this` |
|||
cb gets the passed element and the first matched element (or _default, if nothing matched) |
|||
*/ |
|||
$.fn.previous = function (sel, cb/*(el)*/, _default) { |
|||
$(this).each(function () { |
|||
var pre = $(this).prevAll(sel); |
|||
cb.call(this, pre.length ? pre.first() : _default); |
|||
}) |
|||
} |
|||
/* returns true if the element has the passed class */ |
|||
$.fn.classed = function (cls) { |
|||
return $(this)[0].classList ? $(this)[0].classList.contains(cls) : false; |
|||
} |
|||
/* |
|||
filter for all .notice instances (not including .stub's) |
|||
returning the 'parent' header: |
|||
- subsection: the hX of the subsection |
|||
- preamble: the first h1 element |
|||
*/ |
|||
function NoticeHeaderPairs(cb/*(el_header)*/){ |
|||
$('.notice:not(.stub)').previous('h1,h2,h3,h4,h5', cb, $('h1')) |
|||
} |
|||
/* |
|||
pass to NoticeHeaderPairs to add notices to headers |
|||
*/ |
|||
function AddNoticeToHeader(h){ |
|||
var that = $(this) |
|||
function _match(cls,el){ |
|||
if (!that.classed(cls)) |
|||
return; |
|||
h.append(el); |
|||
that.hide(); |
|||
el.click(function(){ that.toggle(); }); |
|||
} |
|||
function _el(text,color){ return ne('span').attr('class','notice').attr('title',text).css('color',color); } |
|||
function _img(source,text){ return ne('img').attr('class','notice').attr('src', source).attr('alt', text).attr('title', text); } |
|||
/* matches */ |
|||
_match('exemplary',_el('This article is exemplary','gold').text('★')); |
|||
_match('attention',_el('This article needs serious attention', 'red').text('!')); |
|||
_match('delete',_img('http://upload.wikimedia.org/wikipedia/commons/9/93/Trash_can.svg', 'This article is to be deleted')); |
|||
_match('move',_el('This article may be moved', 'blue').text('⇄')); |
|||
_match('copyright',_el('This article is copyright','brown').text('©')); |
|||
_match('spoilers',_el('This article/section has spoilers','#FAA').text('¬.¬')); |
|||
_match('theory',_el('This article/section contains theory or speculation','#29F').text('¿')); |
|||
} |
|||
jQuery(function ($) { |
|||
$('h1,h2:not(.notes),h3,h4', $('#content')).children(':not(.editsection,.notice)').css('margin-right','1em'); |
|||
}) |
}) |
Latest revision as of 19:54, 20 August 2019
mw.hook('wikipage.content').add(function revs_gadget() { 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, }) api.get().then(function old_hist(resp) { const page = resp.query.pages[pageid] page.revisions.forEach(console.log) }) })