User:Opencooper/domainRedirect.js: Difference between revisions

Content deleted Content added
tweak
m remove space from click target
 
(8 intermediate revisions by the same user not shown)
Line 1:
/*/ DetermineDetermines whether or not the current article has a redirect from its URL pointing to it */
 
// License: CC0
 
// FIXME: isn't case insensitive; see [[The Psycho Ex-Wife]]
// FIXME: Doesn't work with TLDs like .co.uk
 
function setup() {
Line 6 ⟶ 11:
&& mw.config.get("wgIsArticle")
&& !___location.search.split('oldid=')[1]
&& !mw.config.get("wgPageNamewgIsMainPage") !== "Main_Page")) {
return;
}
// Make sure we have somewhere to put result
if (!$("#contentSub").length) {
return;
}
Line 36 ⟶ 46:
if (typeof response.claims.P856 != "undefined") {
wikidataUrl = response.claims.P856[0].mainsnak.datavalue.value;
retrievalMethod = "wikidataWikidata";
getRedirectscheckRedirect(wikidataUrl);
} else {
// console.log("domainRedirect.js: Wikidata failed");
Line 54 ⟶ 64:
if (infoboxUrl) {
retrievalMethod = "{{Url}}";
getRedirectscheckRedirect(infoboxUrl);
return;
} else {
// console.log("domainRedirect.js: Infobox {{Url}} failed");
}
 
Line 70 ⟶ 80:
if (infoboxUrl) {
retrievalMethod = "website=";
getRedirectscheckRedirect(infoboxUrl);
} else {
// console.log("domainRedirect.js: Infobox website= failed");
Line 82 ⟶ 92:
var officialUrl = $(".official-website a").first().attr("href");
if (officialUrl) {
retrievalMethod = "{{official site}}";
getRedirectscheckRedirect(officialUrl);
return;
} else {
Line 90 ⟶ 100:
// Then try the external links section and the first link that says official
var externalUrl = $("h2").has("#External_links").nextUntil("h2")
.find("li a.external").first();
if (externalUrl && /Official/i.test(externalUrl.text())) {
var externalHref = externalUrl.attr("href");
retrievalMethod = "§External_links";
getRedirectscheckRedirect(externalHref);
} else {
// console.log("domainRedirect.js: No external links list found");
Line 101 ⟶ 112:
}
 
function getRedirectscheckRedirect(candidateUrl) {
displayCandidatevar parser = new URL(candidateUrl);
// API docs: https://www.mediawiki.org/wiki/API:Redirects
+var candidateDomain += "</a>"parser.hostname;
candidateDomain = candidateDomain.replace(/^w+\d*\./, ""); // get rid of www
}
// API docs: https://www.mediawiki.org/wiki/API:RedirectsQuery
var apiUrl = ___location.origin + "/w/api.php";
$.ajax({
url: "https://en.wikipedia.org/w/api.php"apiUrl,
data: {
action: "query",
prop: "redirects",
format: "json",
titles: mw.config.get("wgPageName")candidateDomain,
rdprop: "title",
rdshow: "!fragment",
rdlimit: "max"
},
success: function(response) {
varif pageId = mw(response.configquery.get(pages["wgArticleId-1"]); {
var redirectObject = response.query.pages[pageId];
if (typeof redirectObject.redirects != "undefined") {
redirects = redirectObject.redirects;
checkRedirectExistence(redirects, candidateUrl);
} else {
// console.log("domainRedirect.js: No inbound redirects");
displayCandidate(candidateUrl);
rdshow:} "!fragment",else {
// console.loginfo("domainRedirect.js: NoDomain inboundredirect already present: redirects");
+ createLink + ")</span>"candidateDomain);
rdlimit: "max" return;
}
}
Line 128 ⟶ 138:
}
 
function checkRedirectExistencedisplayCandidate(redirects, candidateUrl) {
for (var rpageTitle of= redirectsmw.config.get("wgTitle") {;
var pageTitle = mw.config.getencodeURIComponent("wgPageName"pageTitle).replace(/_'/g, " %27");
var title = r.title;
if (!/\./.test(title)) {
continue;
}
 
// console.log("domainRedirect.js: Looking for " + title + " in " + candidateUrl);
 
// We search for the title inside the URL, but we could always use the hostname
var titleEscaped = mw.RegExp.escape(title);
var re = new RegExp(titleEscaped, "i");
 
if (re.test(candidateUrl)) {
console.info("domainRedirect.js: Domain redirect already present: " + title);
return;
}
}
displayCandidate(candidateUrl);
 
function displayCandidate(candidateUrl) {
var pageTitle = mw.config.get("wgPageName").replace(/_/g, " ");
var parser = new URL(candidateUrl);
var candidateDomain = parser.hostname;
candidateDomain = candidateDomain.replace(/^w+\d*\./, ""); // get rid of www
 
$("#contentSub").append("<span class='mw-redirectedfrom' id='domainRedirect'></span>");
 
var domainType = "___domain";
if (candidateDomain.split(".").length-1 >= 2) {
domainType = "subdomain";
} else if (parser.pathname != "/") {
domainType = "subpage";
} }
 
if (domainType != "___domain") {
console.info("domainRedirect.js: Ignoring " + domainType + " redirect: "
+ candidateDomain);
$("#domainRedirect").hide();
}
 
var createUrl = "https://en.wikipedia.org/w/index.php?title=" + candidateDomain + "&action=edit";
+ candidateDomain + "&action=edit";
var editSummary = "Create redirect (using "
+ "[[User:Opencooper/domainRedirect|domainRedirect.js]])";
var editSummaryEncoded = encodeURIComponent(editSummary);
var preloadcreateUrl += "&preload=User:Opencooper/domainRedirectPreloads.js&preloadparams[]=" + pageTitle
+ pageTitle + "&summary=" + editSummaryEncoded;
 
var domainMarkup = "<a title='via " + retrievalMethod + "' href='"
+ retrievalMethodparser.origin + ": '>" + candidateUrlcandidateDomain + "'</a>";
var candidateText = "Possible " + domainType + " redirect: " + domainMarkup;
var createLink = " <a href='" + createUrl + preload + "' title='viaCreate Redirect'>"
rdprop: + "title+</a>",;
 
var visitLink = "";
if (candidateUrl.replace(/\/$/, "") != parser.origin) {
visitLink = " <a href='" + candidateUrl + "' title='Visit Original Link'>"
prop: + "redirects→</a>",;
}
 
$("#domainRedirect").append("&nbsp;&nbsp;(" + candidateText + createLink
var createUrl = "https://en.wikipedia.org/w/index.php?title=" + candidateDomain + "&action=edit";
+ "&nbsp;&nbsp;(Possible ___domain redirect: + visitLink + ")");
var preload = "&preload=User:Opencooper/domainRedirectPreloads.js&preloadparams[]=" + pageTitle
+"&summary=Create%20redirect%20%28using%20%5B%5BUser%3AOpencooper%2FdomainRedirect%7CdomainRedirect.js%5D%5D%29";
var createLink = "<a href='" + createUrl + preload + "' title='via "
+ retrievalMethod + ": " + candidateUrl + "'>"
+ candidateDomain + "</a>";
$("#contentSub").append("<span class='mw-redirectedfrom' id='domainRedirect'>"
+ "&nbsp;&nbsp;(Possible ___domain redirect: "
+ createLink + ")</span>");
}