මාධ්යවිකි:Gadget-rightsfilter.js
Appearance
සටහන: සුරැකීමෙන් පසුව, වෙනස් කම් දැකගැනුමට ඔබගේ බ්රවුසරයෙහි කෑෂය මගහැරයෑමට ඔබට සිදුවිය හැක. ගූගල් ක්රෝම්, ෆයර්ෆොක්ස්, මයික්රොසොෆ්ට් එජ් සහ සෆාරි: Reload ඔබන අතරතුර ⇧ Shift ඔබන්න. සවිස්තරාත්ම උපදෙස් සහ වෙනත් බ්රව්සර වලට අදාළ තොරතුරු සඳහා, විකිපීඩියා:කෑෂය මගහැරයෑම වෙතට යොමු වන්න.
// Log filter script
// Created by [[w:User:Splarka|Splarka]] & amended [[b:User:Mike.lifeguard]]
var rightsLogOnly = (document.location.href.indexOf('type=rights')==-1 && document.location.href.indexOf('Log/rights')==-1) ? false : true
if (mw.config.get('wgPageName')=="Special:CheckUser" || mw.config.get('wgPageName')=="Special:Contributions" || mw.config.get('wgPageName')=="Special:Log"){
$.when($.ready,mw.loader.using('mediawiki.util')).then(filterLogsButton)
}
function filterLogsButton() {
mw.util.addPortletLink('p-cactions','javascript:filterLogsForm()','Filter','ca-rxfilter','Open interactive log entry regex filter thingy');
if(window.AutoLoadLogsFilter) filterLogsForm();
}
function filterLogsForm() {
var instructions = (rightsLogOnly) ? 'Regex filter the space-delimited list of rights.' : 'Regex filter the plain text representation of these log entries.'
//generate the form
document.getElementById('ca-rxfilter').style.display = 'none';
var frm = document.getElementsByTagName('form')[0];
var rf = document.createElement('form');
rf.setAttribute('action','javascript:void(0)');
rf.setAttribute('id','rfform');
var fs = document.createElement('fieldset');
var is = document.createElement('p');
is.appendChild(document.createTextNode(instructions));
fs.appendChild(is);
var lg = document.createElement('legend');
lg.appendChild(document.createTextNode('Filter logs (javascript)'));
fs.appendChild(lg);
if(rightsLogOnly) {
var sel = document.createElement('select');
sel.setAttribute('id','rfselect');
var op1 = document.createElement('option');
op1.appendChild(document.createTextNode('added rights'));
sel.appendChild(op1);
var op2 = document.createElement('option');
op2.appendChild(document.createTextNode('removed rights'));
sel.appendChild(op2);
var op3 = document.createElement('option');
op3.appendChild(document.createTextNode('added OR removed'));
sel.appendChild(op3);
var op4 = document.createElement('option');
op4.appendChild(document.createTextNode('added/removed/static'));
sel.appendChild(op4);
fs.appendChild(sel);
}
var lab1 = document.createElement('label');
lab1.appendChild(document.createTextNode(' Regex string: '));
lab1.setAttribute('for','rfinput1');
fs.appendChild(lab1);
fs.appendChild(document.createTextNode(' '));
var inp1 = document.createElement('input');
inp1.setAttribute('id','rfinput1');
inp1.setAttribute('name','rfinput1');
inp1.setAttribute('type','text');
fs.appendChild(inp1);
var chk1 = document.createElement('input');
chk1.setAttribute('id','rfinput2');
chk1.setAttribute('name','rfinput2');
chk1.setAttribute('type','checkbox');
fs.appendChild(chk1);
var lab2 = document.createElement('label');
lab2.appendChild(document.createTextNode('Invert '));
lab2.setAttribute('for','rfinput2');
fs.appendChild(lab2);
var sub1 = document.createElement('input');
sub1.setAttribute('type','button');
sub1.setAttribute('value','filter');
sub1.setAttribute('onclick','filterLogs(false)');
fs.appendChild(sub1)
fs.appendChild(document.createTextNode(' '));
var sub2 = document.createElement('input');
sub2.setAttribute('type','button');
sub2.setAttribute('value','hilight');
sub2.setAttribute('onclick','filterLogs(true)');
fs.appendChild(sub2)
rf.appendChild(fs);
frm.parentNode.insertBefore(rf,frm);
}
function filterLogs(hilight) {
//grab options from form
if(rightsLogOnly) var type = document.getElementById('rfselect').selectedIndex;
var invert = document.getElementById('rfinput2').checked;
var srch = document.getElementById('rfinput1').value;
var rx = new RegExp(srch,'ig');
//grab the list of <li>
var uls = document.getElementById('bodyContent').getElementsByTagName('ul');
if(uls.length == 0) return
var lis = uls[0].getElementsByTagName('li');
//iterate
var rightrx = /^.*?User\:.*? from (.*?) to (.*?) \u200E.*?$/i //the regex used to grab the Special:Log/rights changes
for(var i=0;i<lis.length;i++) {
if(rightsLogOnly) {
//Special:Log/rights
var oldr = gettext(lis[i]).replace(rightrx,'$1').replace(/\, /g,' ');
var newr = gettext(lis[i]).replace(rightrx,'$2').replace(/\, /g,' ');
var oldrl = oldr.split(' '); var newrl = newr.split(' ');
for (var j=0;j<oldrl.length;j++) {
for (var k=0;k<newrl.length;k++) {
if(oldrl[j]==newrl[k]) {
oldrl[j] = ''; newrl[k] = '';
}
}
}
var remr = oldrl.join(' '); var addr = newrl.join(' ');
switch(type) {
case 0: var look = addr; break;
case 1: var look = remr; break;
case 2: var look = remr + ' ' + addr; break;
case 3: var look = oldr + ' ' + newr; break;
}
} else {
//Any other Special:Log
var look = gettext(lis[i]);
}
lis[i].style.display = '';
lis[i].style.backgroundColor = '';
if ((look.search(rx)!=-1 && !invert) || (look.search(rx)==-1 && invert)) {
if(hilight) lis[i].style.backgroundColor = '#ffff99';
} else {
if(!hilight) lis[i].style.display = 'none';
}
}
}
function gettext(object) {
if (object.nodeType == 3) return object.nodeValue;
var txt = [];
var i=0;
while(object.childNodes[i]) {
txt[txt.length] = gettext(object.childNodes[i]);
i++;
}
return txt.join('');
}