User:Rutilant/ajax-watchlist.js: Difference between revisions

Content deleted Content added
m this looked annoying
Complete progression "log": testwiki:User:RainFall/ajax-watchlist.js
Line 1:
/*
Last update: January 1530, 2019
Status: Experimental
*/
(function() {
var watchlist_ajax={timer:null,status:false}, token=false, lasttimecurrent_revs=false{}, last_message = {};
if(test_currentPage()){
var top_content="<input id='watchlist-ajax-timeOut' placeholder='Refresh rate in milliseconds'><button id='a-w-start'>Start</button><button id='a-w-stop'>Stop</button><br>Status: <span id='aj-w-status'>not running</span>";
Line 17:
var timeout=$.isNumeric($("#watchlist-ajax-timeOut").val())?$("#watchlist-ajax-timeOut").val():5000;
watchlist_ajax.status=true;
lasttime=false;
$("#auto-updating-watchlist").html("");
update_watchlistAjax(timeout);
Line 26 ⟶ 25:
watchlist_ajax.status=false;
clearTimeout(watchlist_ajax.timer);
lasttime=false;
$("#aj-w-status").html('stopped');
}
Line 33 ⟶ 31:
if(test_currentPage() && watchlist_ajax.status){
var start_from="";
if(lasttime!==false){
start_from="&wlstart="+lasttime+"&wldir=newer";
}
$.ajax({
type: 'GET',
Line 44 ⟶ 39:
var sitelink=''; /* for local testing */
var watchlist_items="";
var fetched_revs=[];
lasttime=returndata.curtimestamp;
returndata=returndata.query.watchlist;
if(returndata.length>0){
returndata.forEach(function(e){
var length=efetched_revs.newlen-push(e.oldlenpageid);
let length=e.newlen-e.oldlen;
varlet edit_summary=e.comment.substring(0, 400)||"<span style='color:#cecccc'>No edit summary.</span>" /* trim extremly long edit summary*/ ;
edit_summary=edit_summary.replace(/\[\[(.*?)\|(.*?)\]\]/g, "<a href=\"/wiki/$1\">$2</a>"); /* parse wikilinks */
varlet difflink=sitelink+`/w/index.php?title=${e.title}&diff=${e.revid}`;
varlet histlink=sitelink+`/w/index.php?title=${e.title}&action=history`;
let rollback_msg = "ajax rollback";
var userlink=`
if (e.revid in last_message){
rollback_msg = last_message[e.revid];
}
let rollback_btn = `[<a href='#' class='aj-rollback-btn' data-rollback-pageid="${e.pageid}" data-rollback-revid="${e.revid}" data-rollback-user="${e.user}">${rollback_msg}</a>]`;
if( e.pageid in current_revs ){
if(current_revs[e.pageid] != e.revid){
rollback_btn = "";
}
}
 
varlet userlink=`
<a href='${sitelink}/wiki/User:${e.user}'>${e.user}</a>
(<a href='${sitelink}/wiki/User talk:${e.user}'>talk</a> |
Line 62 ⟶ 69:
<div style='margin-bottom:5px; padding:3px; font-family:Calibri; width: 100%; word-break:break-all'>
(<a href="${difflink}">diff</a> | <a href="${histlink}">hist</a>)
<a href="${sitelink}/wiki/${e.title}">${e.title}</a> (${e.type}) (${length}) &mdash; ${userlink} (<span style='font-style:italic'>${edit_summary}</span>) [<span class="mw-rollback-link"><a href='#' class='aj-rollback-btn' data-rollback-pageid="${e.pageid}" data-rollback-user="${e.user}">ajax rollback</adata-revid="${e.revid}">${rollback_btn}</span>]
</div>
`;
Line 70 ⟶ 77:
$(".aj-rollback-btn").click(function(e) {custom_rollback(e, this)});
}
check_revisions(fetched_revs);
},
error:e=>console.log(e),
Line 79 ⟶ 87:
}
}
 
function check_revisions(pageid_array){
pageid_array = [...new Set(pageid_array)];
var pageids=pageid_array.join("|");
$.get("/w/api.php?action=query&format=json&prop=revisions&pageids=" + pageids).then(response => {
var pages = response.query.pages;
pageid_array.forEach (pageid => {
let revision = pages[pageid].revisions[0].revid;
current_revs[pageid] = revision;
$(`.mw-rollback-link[data-rollback-pageid=${pageid}]`).each(function(){
if($(this)[0].dataset.revid != revision){
$(this.c_b).attrhtml("href", "#");
}else{
let pageid = $(this)[0].dataset.rollbackPageid;
let user = $(this)[0].dataset.rollbackUser;
let rollback_msg = "ajax rollback";
if (revision in last_message){
rollback_msg = last_message[revision];
}
let rollback_btn = `[<a href='#' class='aj-rollback-btn' data-rollback-pageid="${pageid}" data-rollback-revid="${revision}" data-rollback-user="${user}">${rollback_msg}</a>]`;
$(this).html(rollback_btn);
}
});
});
$(".aj-rollback-btn").click(function(e) {custom_rollback(e, this)});
});
}
 
function test_currentPage(){
Line 112 ⟶ 147:
var user=$(clicked).attr("data-rollback-user");
$(clicked).text('rollbacking...');
last_message[$(clicked)[0].attr("href",dataset.rollbackRevid] null= $(clicked).text();
$.ajax({
type: 'POST',
Line 123 ⟶ 158:
}else{
$(this.c_b).text(e.error.code);
$(this.c_b).attr("href", "#");
console.log(e);
}
last_message[$(this.c_b)[0].dataset.rollbackRevid] = $(this.c_b).text();
},
error:function(e){
$(this.c_b).text('rollback failed');
last_message[$(this.c_b)[0].attr("href",dataset.rollbackRevid] "#"= $(this.c_b).text();
console.log(e);
}
});
}
mw.util.addPortletLink('p-cactions', '/wiki/User:RainFall/sandbox', 'Ajax watchlist');
})();