User:Revent/dupdetect.js

/* Get links from page */ var externalLinks = []; $('a.external').each(function{	externalLinks[externalLinks.length] = $(this).attr('href'); }); /* Clean out the duplicates */ externalLinks.sort.reverse; var uniqueLinks = []; $.each( externalLinks, function( i, el ){	if($.inArray(el + '/', uniqueLinks) === -1 && $.inArray(el, uniqueLinks) === -1) uniqueLinks.push(el); }); uniqueLinks.reverse; /* Filter out the invalid ones */ var uniqueURLs = []; $.each( uniqueLinks, function( i, el ){	if( /* Internal WMF links			*/ el.search(/\/\/(enwp|([\w]{2}|test|meta)\.wiki[mp]edia)\.org\/?(w|wiki)?(\/index.php\?)?/i) === -1 &&/* Wikipedias */ el.search(/\/\/en\.wikichecker\.com\/user\//i) === -1 &&/* Wikichecker */ el.search(/\/\/tools(erver|\.wmflabs)\.org\/?/i) === -1 &&/* Tools and Labs */ /* Stats.grok.[\w]{2}			*/ el.search(/\/\/stats\.grok\.[\w]{2}\/?/i) === -1 && /* Wikiblame			*/ el.search(/\/\/wikipedia\.ramselehof\.de\/wikiblame\.php/i) === -1 && /* Google and Bing searches		*/ el.search(/\/\/(scholar|www).(bing|google).com\/(images|scholar|search|webhp)\?([\w_#&]*)?=/i) === -1 && /* jstor search				*/ el.search(/\/\/www\.jstor\.org\/action\/doBasicSearch\?Query=/i) === -1 && /* Webchat / IRC				*/ el.search(/(irc:\/\/|\/\/webchat.freenode.net\/?)/i) === -1 ){		if(el.search(/https?:/i) === -1){			el= 'http:' + el;		}		uniqueURLs.push(el);	} }); /* TRON report */ function lpad(n, e, d) { var o = ''; if(typeof(d) === 'undefined'){ d='0'; } if(typeof(e) === 'undefined'){ e=2; } if(n.length < e){ for(var r=0; r < e - n.length; r++){ o += d; } o += n; } else { o=n; } return o; } var loadTS = new Date; loadTS = lpad(loadTS.getUTCFullYear.toString, 4) + lpad((loadTS.getUTCMonth+1).toString, 2) + lpad(loadTS.getUTCDate.toString, 2) + lpad(loadTS.getUTCHours.toString, 2) + lpad(loadTS.getUTCMinutes.toString, 2) + lpad(loadTS.getUTCSeconds.toString, 2); var taskBUG = '== CVD bug report for ' + mw.config.get('wgPageName') + ' by ' + mw.config.get('wgUserName').replace(/ /g,'_') + ' ==\n'; taskBUG += '{'+'{User8|' + mw.config.get('wgUserName') + '}} (usergroups ) loaded ' + mw.config.get('wgPageName').replace(/_/g,' ') + ' at {'+'{#time: H:i:s, F j, Y|' + loadTS + '}} (UTC).\n'; taskBUG += 'The script found the following ' + externalLinks.length.toString + ' link(s) and filtered out ' + (externalLinks.length - uniqueLinks.length).toString + ' duplicate(s) and ' + (uniqueLinks.length - uniqueURLs.length).toString + ' invalid link(s). This left the ' + uniqueURLs.length + ' URL(s) listed below.'; var linkBUG = '{'+'{Hst|reason=Links}}\n{'+'{Div col start|2}}\n# ' + externalLinks.join('\n# ') + '\n{'+'{Div col end}}\n{'+'{Hsb}}'; var urlBUG = '; URLs\n{'+'{Div col start|2}}\n# ' + uniqueURLs.join('\n# ') + '\n{'+'{Div col end}}'; if(externalLinks.length > 0){ var eL = true; } else { var el = false; } if(uniqueURLs.length > 0){ var eU = true; } else { var eU = false; } if(eL && eU){ var bugBUG = '{'+'{Hst|reason='; } if(eL){ bugBUG += 'Links'; } if(eL && eU){ bugBUG += ' and '; } if(eU){ bugBUG += 'URLs' } if(eL && eU){ bugBUG += ' returned by script}}\n'; } if(eL){ bugBUG += linkBUG; } if(eL && eU){ bugBUG += '\n'; } if(eU){ bugBUG += urlBUG; } if(eL && eU){ bugBUG += '\n{'+'{Hsb}}'; } console.info('\n%s\n%s\n', taskBUG, bugBUG); /* report TROFF */ var toolTip = 'Scan for copyright violations in the ' + uniqueURLs.length + ' unique URL'; if(uniqueURLs.length !== 1){ toolTip += 's'; } toolTip += ' detected using Derrick Coetzee\'s Duplication Detector tools. ('; if(uniqueURLs.length > 5){ toolTip += 'WARNING: '; } toolTip += 'This will open ' + ((uniqueURLs.length*2)+1) + ' new tabs/windows.)'; var scanCV = mw.util.addPortletLink(	'p-tb',	'#',	'dupdetect (' + (uniqueURLs.length) + ')',	'p-cv-detector',	toolTip ); $( scanCV ).click( function ( e ) {	e.preventDefault;	if(uniqueURLs.length > 20){		var lottaTabs = confirm('Are you SURE that you want to open ' + (uniqueURLs.length) + ' new tabs?');		if(lottaTabs === true){			for(var i=0; i < uniqueURLs.length; i++){				window.open('http://tools.wmflabs.org/dupdet/compare.php?url1=' + encodeURIComponent('https:' + mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/index.php?title=' + wgPageName) + '&url2=' + encodeURIComponent(uniqueURLs[i]), '_blank');			}		} else {			alert('Only opening tabs for the first five links then');			for(var i=0; i < 5; i++){				window.open('http:///tools.wmflabs.org/dupdet/compare.php?url1=' + encodeURIComponent('https:' + mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/index.php?title=' + wgPageName) + '&url2=' + encodeURIComponent(uniqueURLs[i]), '_blank');			}		}	} else {		for(var i=0; i < uniqueURLs.length; i++){ window.open('http:///tools.wmflabs.org/dupdet/compare.php?url1=' + encodeURIComponent('https:' + mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/index.php?title=' + wgPageName) + '&url2=' + encodeURIComponent(uniqueURLs[i]), '_blank'); }	} });