User:Ale jrb/Scripts/userhist.js

if (histlimit === undefined) var histlimit = 40; if (typeof histwidth === 'undefined') var histwidth = 200;

function UserHistory { var me = this; this.displayBox = function(user) { // if user is set, this name will automatically be displayed on load if (user == null) { user = ''; } else { user = user.replace(/(_|%20)/gi, ' '); user = user.replace(/(%3A)/gi, ':'); }       var box = document.createElement( 'input' ); box.setAttribute('id', 'userhist-isolate'); box.setAttribute('type', 'text'); box.setAttribute('value', user); box.setAttribute('style', 'width: ' + histwidth + 'px'); var button = document.createElement( 'input' ); button.setAttribute('type', 'button'); button.setAttribute('value', 'Isolate history'); button.setAttribute('style', 'margin-left: 4px;'); if (button.addEventListener) { button.addEventListener('click', function {               userHist.getUserHist(document.getElementById('userhist-isolate').value);            }, false); } else { button.attachEvent('onclick', function {               userHist.getUserHist(document.getElementById('userhist-isolate').value);            }); }

var span = document.createElement('span'); span.setAttribute('style','display: block; margin-top: 12px;'); span.appendChild(box); span.appendChild(button); document.getElementById( 'mw-history-search' ).appendChild(span); };   this.getUserHist = function(user) { var api = 'https://en.fampedia.org/w/api.php'; if (typeof user === 'undefined' || !user) { return false; }       user = user.replace(/ /g, '_'); user = user.replace(/User(:|%3A)/gi, ''); // remove useless interface var histPar = document.getElementById('mw-history-compare'); histPar.innerHTML = ' isolating edits by ' + user + ' - please wait... ';       var apiLink = '?action=query&format=xml&prop=revisions&titles='+mw.config.get('wgPageName')+'&rvprop=ids|timestamp|flags|comment|user|size&rvlimit=500&rvuser='+user+''; this.req 				= new wa_ajaxcall; this.req.requestUrl		= api + apiLink; this.req.get			( function {                                   userHist.data = userHist.req.response;                                    userHist.showUserHist ;                                    return true;                                } ); };   this.showUserHist = function { var data = this.data; if (data.getElementsByTagName('rev').length <= 0) { this.showError('That user has never edited this page.'); return false; }       // get output var output = []; for (var i = 0; i < data.getElementsByTagName('rev').length; ++i) { var dataset = data.getElementsByTagName('rev')[i]; output[i] = []; output[i][0] = dataset.getAttribute('revid'); // oldid output[i][1] = dataset.getAttribute('user'); // user output[i][2] = dataset.getAttribute('timestamp'); // timestamp output[i][3] = dataset.getAttribute('comment'); // comment output[i][4] = dataset.getAttribute('size'); // size output[i][5] = dataset.getAttribute('minor'); // minor }       // build our own interface var newInt = ' '; var url = 'https://en.fampedia.org/w/index.php?title=' + mw.config.get('wgPageName'); for (var i = 0; i < output.length; i ++) { var timestamp = me.convertTimestamp(output[i][2]); var comment = me.parseComment(output[i][3]); if ( output[i][5] != null ) { var m = ' m '; } else { var m = ''; } newInt = newInt + ' (cur | prev) '+timestamp+' '+output[i][1]+' '+m+' ('+output[i][4]+' bytes) '+comment+''; }       newInt += ''; var histPar = document.getElementById('mw-history-compare'); histPar.innerHTML = newInt; };   this.showError = function(errorMessage) { var container = document.getElementById('mw-history-compare'); container.innerHTML = ' userhist error: ' + errorMessage + ' '; return true; };   this.convertTimestamp = function(timestamp) { var regTest = /([0-9]{4})-([0-9]{2})-([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})Z/g; regTest.lastIndex = 0; time = regTest.exec(timestamp); if (time == null) return 'failed to parse timestamp'; var d = new Date; var hourOffset = (d.getTimezoneOffset / 60) * -1; var h = parseInt( time[4], 10 ) + hourOffset; if (h < 10 ) h = '0' + h;        var months = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); var month = parseInt(time[2], 10); var newStamp = h + ':' + time[5] + ', ' + time[3] + ' ' + months[month-1] + ' ' + time[1]; return newStamp; };   this.parseComment = function(comment) { if (comment == null) return ''; comment = comment.replace('/*', ' →'); comment = comment.replace('*/', ' '); comment = comment.replace(/\[\[(.+?)(#.+?)?(?:\|(.+?))\]\]/g, "$3"); comment = comment.replace(/\[\[(.+?)(#.+?)?\]\]/g, "$1"); comment = '( ' + comment + ' )'; return comment; };   this.manageSize = function { var regTest = /class="history-size">\(([,0-9]+?) +?bytes\)<\/span>/ig, regMatch; var col = { 'add': '#006400', 'remove': '#8b0000' }, results = [], i = 0; while (regMatch = regTest.exec(document.getElementById('pagehistory').innerHTML)) { results [ i ++ ] = parseInt(regMatch [1].replace(',', ''), 10); if (i > histlimit) break; }       for (var i = 0, l = results.length; i < (l - 1); ++i) { var addition = results [i] - results [i + 1]; if (addition === 0) { var rep = ' 0 '; } else if (addition < 0) { var rep = '' + addition + ' '; } else { var rep = '+' + addition + ' '; } document.getElementById('pagehistory').innerHTML = document.getElementById('pagehistory').innerHTML.replace(/class="history-size">\(([,0-9]+?) +?bytes\)<\/span>/i, "class=\"historysize\">(" + rep + ", $1 bytes) "); }   };    this.init = function { if (mw.config.get('wgAction') == 'history' && mw.config.get('wgArticleId')) { if ( ( window.location.href.indexOf('&isolate=') > -1) && (window.location.href.indexOf('&offset=') == -1) && (window.location.href.indexOf('&limit=') == -1)) { var user = window.location.href.substr(window.location.href.indexOf('&isolate=') + 9); me.getUserHist(user); } else { //me.manageSize ; - FIXME: prevents the history diff selectors from working correctly var user = ''; }           me.displayBox(user); } else if ((mw.config.get('wgAction') == 'view') && (mw.config.get('wgCanonicalSpecialPageName') == 'Contributions') && (mw.config.exists('wgRelevantUserName'))) { var user = mw.config.get('wgRelevantUserName'); user = mw.util.isIPAddress(user) ? user : 'User:' + user; var list = $('.mw-changeslist-history'); list.each(function(idx, el) {				var span = document.createElement('span');				span.innerHTML = "<a class=\"mw-changeslist-all\" href=\"/w/index.php?title=" + encodeURIComponent(el.title) + "&action=history&isolate=" + user + "\">all</a>";				el.parentNode.parentNode.insertBefore(span, null);			}); }   }; }

importScript('User:Ale_jrb/Scripts/waLib.js'); var userHist = new UserHistory; $(userHist.init);