User:L235/culoghelper-personaltesting.js

//

/*

* This lifted right from User:Amalthea/culoghelper.js.

* ----

* Small script to help navigate the CU log.

* Turns timestamps of a filtered CU log like on [//en.wikipedia.org/wiki/Special:CheckUserLog?cuSearchType=target&cuSearch=Example]

* into links that try to locate the entry in the full log.

* This simplifies looking at the context of a previous check.

*/

jQuery(function($){

if ( mw.config.get("wgNamespaceNumber")===-1 && mw.config.get("wgCanonicalSpecialPageName")==="CheckUserLog" )

{

mw.loader.using( ['mediawiki.util', 'mediawiki.user', 'moment'], function() {

var paraCuloghighlight = mw.util.getParamValue('culogHighlight');

var paraCusearch = !paraCuloghighlight; // hack for now; want links everywhere

if (!paraCuloghighlight && !paraCusearch) return;

//collect all date text nodes

var dateNodes = $("#bodyContent > #mw-content-text > ul > li").map(function(i,n){return $(n).contents().first();})

//highlight all nodes with a matching date

if (paraCuloghighlight)

{

dateNodes.each(function(i,n){

if(n[0].textContent !== paraCuloghighlight) return;

//highlight

n.wrap("");

//and scroll into view

var windowtop = $(window).scrollTop();

var windowbottom = windowtop + $(window).height();

var ntop = n.parent().offset().top;

var nbottom = ntop + n.parent().outerHeight(true);

if (ntop < windowtop) $(window).scrollTop(ntop);

else if (nbottom > windowbottom) $(window).scrollTop(nbottom + windowtop- windowbottom);

});

}

//link all date nodes to the full log view

if (paraCusearch)

{

var locale = mw.config.get("wgUserLanguage");

// Date parsing in Javascript is aweful.

// Localized, configurable date output on Mediawiki doesn't make this any easier.

// It's conceivable to write a parser that could match /most/ variants out there ...

// but I'll just strict parse the English date formats instead

var parsingStrings = {

"en": {

"mdy": "HH:mm, MMMM D, YYYY",

"dmy": "HH:mm, D MMMM YYYY",

"ymd": "HH:mm, YYYY MMMM D",

"ISO 8601": "YYYY-MM-DDTHH:mm:ss",

},

}

var localeParsingStrings = parsingStrings[locale];

if (localeParsingStrings)

var parsingString = localeParsingStrings[mw.config.get("wgDefaultDateFormat")];

if (parsingString)

var parseDate = function(input){return moment(input, parsingString + ", ", true);}

else

var parseDate = moment;

//Note: We append ", " above since the messages building the log lines, e.g. MediaWiki:Checkuser-log-entry-userips,

// look like this: $3, $1 got IP addresses for $2

// That is, they do in English! Might need adapting for other languages, or imprecise parsing, or some markup in the messages!

//function lifted from popups.js

function getTimeOffsetMinutes(tz)

{

if( tz && typeof tz === 'string' )

{

if( tz.indexOf('|') > -1 ) // New format

return parseInt(tz.split('|')[1],10);

else if ( tz.indexOf(':') > -1 ) // Old format

return( parseInt(tz,10)*60 + parseInt(tz.split(':')[1],10) );

}

return 0;

}

var timeOffsetMinutes = getTimeOffsetMinutes(mw.user.options.get("timecorrection"));

//calculate one hour into the future; this will be the upper limit of the log displayed

timeOffsetMinutes -= 60;

dateNodes.wrap(function(){

var dateText = $(this)[0].textContent;

var timestamp = parseDate(dateText);

if (!timestamp.isValid()) return;

timestamp.subtract(timeOffsetMinutes, 'minutes');

var dateOffsetString = timestamp.format("YYYYMMDDHHmm");

return "";

});

}

});

}

});

//