User:Joeytje50/shortLink.js
Appearance
Code that you insert on this page could contain malicious content capable of compromising your account. If you import a script from another page with "importScript", "mw.loader.load", "iusc", or "lusc", take note that this causes you to dynamically load a remote script, which could be changed by others. Editors are responsible for all edits and actions they perform, including by scripts. User scripts are not centrally supported and may malfunction or become inoperable due to software changes. A guide to help you find broken scripts is available. If you are unsure whether code you are adding to this page is safe, you can ask at the appropriate village pump. This code will be executed when previewing this page. |
This user script seems to have a documentation page at User:Joeytje50/shortLink. |
$(window).on('load',function() {
var accesskey = !$('[accesskey="s"]').length;
$('#t-shortlink').remove(); //prevent duplication
$('#t-whatlinkshere').after('<li id="t-shortlink"><a href="javascript:_shortURL.getShortenedURL();" title="Get a list of the shortest urls you could link to, using the enwp.org url shortener and internal redirects'+(accesskey&&' ['+mw.util.tooltipAccessKeyPrefix+'s]" accesskey="s')+'">Get short URL</a></li>');
});
window._shortURL = {};
_shortURL.shorten = function(page) {
var slash = page.charAt(0) == '?' ? '' : '/';
var lang = document.location.host.split('.')[0];
var shortpage = page.replace(/^Project\:/,'WP:'); //Not all wikis support WP:->Project: redirection, so this is not default.
switch (lang) {
case 'en': return 'http://enwp.org'+slash+shortpage;
case 'fr': return 'http://frwp.org'+slash+shortpage;
default: if (slash) {return 'http://enwp.org/'+lang+page;} else {return 'http://'+document.location.host+'/wiki/'+page;}
}
};
_shortURL.getShortenedURL = function(cont) {
if (_shortURL.list && !cont) return _shortURL.addShortenedURL(); //Apparently the shortened urls have been looked for before.
_shortURL.list = _shortURL.list||[];
$.get('https://en.wikipedia.org/w/api.php?action=query&list=backlinks&blfilterredir=redirects&bllimit=500&format=json&bltitle='+mw.util.wikiUrlencode(mw.config.get("wgPageName"))+(cont||''), function(response) {
var list = response.query.backlinks;
list.push({"pageid":mw.config.get("wgArticleId"), "ns":mw.config.get("wgNamespaceNumber"), "title":(mw.config.get("wgCanonicalNamespace")&&mw.config.get("wgCanonicalNamespace")+':')+mw.config.get("wgTitle"), "redirect":""});
for (var i=0;i<list.length;i++) {
var urls = [_shortURL.shorten(mw.util.wikiUrlencode(list[i].title)), {0:_shortURL.shorten('?curid='+list[i].pageid), 1:list[i].title}];
urls[1].length = urls[1][0].length;
for (var n=0;n<urls.length;n++) {
if (!_shortURL.list[urls[n].length]) _shortURL.list[urls[n].length] = [urls[n]];
else _shortURL.list[urls[n].length].push(urls[n]);
}
}
if (response['query-continue']) {
var blcont = '&blcontinue='+response['query-continue'].backlinks.blcontinue;
_shortURL.getShortenedURL(blcont);
} else {
_shortURL.addShortenedURL();
}
});
};
_shortURL.addShortenedURL = function() {
var $blackout = $('<div id="shortURLBlackout" style="position:fixed;top:0;left:0;z-index:99999;height:100%;width:100%;background:black;opacity:0.6;"></div>').appendTo('body');
$blackout.click(_shortURL.closeShortURLPopup);
var $popupBox = $('<div id="shortURLPopup" style="position:fixed;top:25%;left:25%;z-index:99999;width:50%;height:50%;border:3px solid black;background:white;font-size:13px;padding:10px;padding-top:40px;overflow:auto;"><ul></ul></div>').appendTo('body');
$popupBox.prepend('<div style="padding-right:10px;display:none;" id="shortURLPopupInfo">Left-click on the URL you like to select, and then press CTRL+C to copy it, or right click the URL and choose the option to copy the link address.<br/>\
You can also open the link by right clicking it and choosing one of the open link options, by middle clicking (via the scroll wheel), by holding the Ctrl or Shift key and clicking it, or by dragging the link to your current url bar.</div>');
$popupBox.append('<a href="javascript:_shortURL.closeShortURLPopup()" style="position:absolute;top:5px;right:5px;font-size:30px;color:black;text-decoration:none;font-family:calibri;">X</a>');
$popupBox.append('<a href="javascript:$(\'#shortURLPopupInfo\').toggle();" style="position:absolute;top:5px;left:5px;font-size:30px;color:black;text-decoration:none;border-bottom:1px dotted black;line-height:1em;font-family:calibri;">?</a>');
for (var i=0,shortest=0;i<_shortURL.list.length&&(shortest>i-5||!shortest||$popupBox.children('.shortURLLink').length<10);i++) {
if (_shortURL.list[i]) {
shortest = shortest||i;
$popupBox.append('<li><h2>Length '+i+'</h2></li>');
for (var n=0,url,target='';n<_shortURL.list[i].length;n++) {
url = _shortURL.list[i][n];
if (typeof url == 'object') {
target = ' <i style="float:right;">=> '+url[1]+'</i>';
url = url[0];
}
$popupBox.append('<li><a href="'+url+'" class="shortURLLink" style="outline:none;">'+url+target+'</a></li>');
}
}
}
$popupBox.click(function(e) {
var $target = $(e.target).is('a.shortURLLink *') ? $(e.target).parent() : $(e.target);
if ($('#shortURLSelected').length && !$target.is('#shortURLSelected')) $('#shortURLSelected').prev().show().next().remove();
if (!$target.is('a.shortURLLink, a.shortURLLink *') || e.shiftKey || e.ctrlKey || e.which == 2) return;
e.preventDefault();
$target.hide();
$('<input type="text" id="shortURLSelected" style="width:75%;min-width:300px;" value="'+$target[0].href+'"/>').insertAfter($target).select();
});
};
_shortURL.closeShortURLPopup = function() {
$('#shortURLBlackout, #shortURLPopup').remove();
};