Content deleted Content added
accessibility improvement: distinguish duplicate/duplicated links using border type (solid/dashed) as well as colour (red/green) |
make sure dependency mw.util is loaded |
||
Line 6:
return;
}
mw.loader.using('mediawiki.util').then(function(){
var portletlink = mw.util.addPortletLink('p-tb', '#', 'Highlight duplicate links', 'ca-findduplicatelinks');
$(portletlink).click( function(e) {
e.preventDefault();
// create a separate div surrounding the lead // first get the element immediately surrounding the article text. Unfortunately, MW doesn't seem to provide a non-fragile way for that.
// also check if VisualEditor is being used - the element surrounding text is different in VE
var href = window.___location.href;
if(href.search("veaction")>0) { var content = ".ve-ce-documentNode.ve-ce-branchNode"; }
else { var content = ".mw-parser-output"; }
$(content).prepend(document.createElement('div'));
var lead = $(content).children()[0];
$(lead).attr('id', 'lead');
$(content).children().each( function() {
if(this.nodeName.toLowerCase() == 'h2') {
return false;
}
if($(this).attr('id') != 'lead') {
$(lead).append(this);
}
return true;
});▼
// detect duplicate links▼
mw.util.addCSS(".duplicate-link { border: 1px solid red; }");▼
mw.util.addCSS(".duplicated-link { border: 1px dashed green; }");▼
var finddups = function() {▼
var href = $(this).attr('href');▼
if(href != undefined && href.indexOf('#') != 0) {▼
if(seen[href]) {▼
$(this).addClass("duplicate-link");▼
duplicated[href] = true;▼
}▼
else {▼
seen[href] = true;▼
}▼
}▼
return true;▼
};▼
// mark duplicated links▼
var markdups = function() {▼
var href = $(this).attr('href');▼
if(href != undefined && href.indexOf('#') != 0) {▼
if(duplicated[href]) {▼
$(this).addClass("duplicated-link");▼
duplicated[href] = '';▼
}▼
}▼
return true;▼
};
// arrays to keep track of whether we've seen a link before, and which links are duplicated▼
var seen = [];▼
var duplicated = [];▼
mw.util.$content.find('p a').not('#lead *, .infobox *, .navbox *').each(finddups);▼
mw.util.$content.find('p a').not('#lead *, .infobox *, .navbox *').each(markdups);▼
var seen = [];▼
var duplicated = [];▼
mw.util.$content.find('#lead p a').not('.infobox *, .navbox *').each(finddups);▼
mw.util.$content.find('#lead p a').not('.infobox *, .navbox *').each(markdups);▼
});
▲ // detect duplicate links
▲ mw.util.addCSS(".duplicate-link { border: 1px solid red; }");
▲ mw.util.addCSS(".duplicated-link { border: 1px dashed green; }");
▲ var finddups = function() {
▲ var href = $(this).attr('href');
▲ if(href != undefined && href.indexOf('#') != 0) {
▲ if(seen[href]) {
▲ $(this).addClass("duplicate-link");
▲ duplicated[href] = true;
▲ }
▲ else {
▲ seen[href] = true;
▲ }
▲ }
▲ return true;
▲ };
▲ // mark duplicated links
▲ var markdups = function() {
▲ var href = $(this).attr('href');
▲ if(href != undefined && href.indexOf('#') != 0) {
▲ if(duplicated[href]) {
▲ $(this).addClass("duplicated-link");
▲ duplicated[href] = '';
▲ }
▲ }
▲ return true;
▲ };
▲ // arrays to keep track of whether we've seen a link before, and which links are duplicated
▲ var seen = [];
▲ var duplicated = [];
▲ mw.util.$content.find('p a').not('#lead *, .infobox *, .navbox *').each(finddups);
▲ mw.util.$content.find('p a').not('#lead *, .infobox *, .navbox *').each(markdups);
▲ var seen = [];
▲ var duplicated = [];
▲ mw.util.$content.find('#lead p a').not('.infobox *, .navbox *').each(finddups);
▲ mw.util.$content.find('#lead p a').not('.infobox *, .navbox *').each(markdups);
});
});
|