User:Proteins/listredlinks.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. |
Documentation for this user script can be added at User:Proteins/listredlinks. |
//<pre>
// Produce an ordered list of redlinks on a page, with links for searching out more information
//
// To use this script, add "importScript('User:Proteins/listredlinks.js');" to your monobook.js subpage
// under your user page, as you can see at User:Proteins/monobook.js
function listRedLinks() {
var alert_string = "";
var child_node;
var user_name = "";
var user_page_link;
var body_content;
var main_article_paragraphs;
var first_paragraph_in_main_article;
var hyperlinks;
var num_hyperlinks = 0;
var temp_hyperlink;
var temp_hyperlink_title = "";
var num_redlinks = 0;
var redlink_index = 0;
var redlink_list = new Array();
var redlink_title = "";
var redlink_title_list = new Array();
var redlink_list_div;
var redlink_list_item;
var redlink_ordered_list;
var lead_section_heading;
var redlink_section_heading;
// Get the bodyContent node
body_content = document.getElementById('bodyContent');
if (!body_content) {
alert_string = "ERROR: There is no bodyContent node in this article.";
window.alert(alert_string);
return;
}
main_article_paragraphs = body_content.getElementsByTagName("P");
if (!main_article_paragraphs) {
alert_string = "ERROR: The bodyContent node has no paragraphs.";
window.alert(alert_string);
return;
}
first_paragraph_in_main_article = main_article_paragraphs[0];
if (!first_paragraph_in_main_article) {
alert_string = "ERROR: The main article has no first paragraph.";
window.alert(alert_string);
return;
}
// Get a list of the hyperlinks
hyperlinks = body_content.getElementsByTagName("A");
if (!hyperlinks) {
window.alert("There are no hyperlinks in this article.");
return;
}
num_hyperlinks = hyperlinks.length;
if (num_hyperlinks < 1) {
window.alert("There are no hyperlinks in this article.");
return;
}
// Create a list of redlinks by looping over the hyperlinks
num_redlinks = 0;
redlink_title = "";
for (hyperlink_index=0; hyperlink_index<num_hyperlinks; hyperlink_index++) {
temp_hyperlink = hyperlinks[hyperlink_index];
if (!temp_hyperlink) { continue; }
temp_hyperlink_title = temp_hyperlink.title;
if (temp_hyperlink_title.match(/\(page does not exist\)$/ig)) {
num_redlinks++;
redlink_list.push(temp_hyperlink);
redlink_title = temp_hyperlink_title.replace(/\(page does not exist\)$/ig,"");
redlink_title = redlink_title.replace(/\s\([^\)]\)$/ig,"");
redlink_title = redlink_title.replace(/\s+$/ig,"");
redlink_title_list.push(redlink_title);
}
} // closes loop over hyperlinks in the bodyContent
if (num_redlinks == 0) {
window.alert("This article has no redlinks - congratulations!");
return;
}
// Print list of redlinks
alert_string = "";
for (redlink_index=0; redlink_index<num_redlinks; redlink_index++) {
alert_string += "Redlink " + redlink_index + ". " + redlink_title_list[redlink_index] + "\n";
} // closes loop over the red links
// window.alert(alert_string);
// Create a DIV element to enclose the redlink list and insert it into the present article
redlink_list_div = document.createElement("DIV");
if (!redlink_list_div) {
alert_string = "ERROR: Unable to create a new DIV element to hold the list of redlinks.";
window.alert(alert_string);
return;
}
redlink_list_div.className = "redlink-list-div";
body_content.insertBefore(redlink_list_div, first_paragraph_in_main_article);
alert_string = "Inserted a new DIV element ahead of the first paragraph in the main article.";
// window.alert(alert_string);
// Add lead section heading
lead_section_heading = document.createElement("HR");
if (!lead_section_heading) {
alert_string = "ERROR: Unable to create a new horizontal rule ahead of the lead section";
window.alert(alert_string);
return;
}
// lead_section_heading.appendChild(document.createTextNode("Lead section"));
body_content.insertBefore(lead_section_heading, first_paragraph_in_main_article);
// Add redlink section heading
redlink_section_heading = document.createElement("H2");
if (!redlink_section_heading) {
alert_string = "ERROR: Unable to create a new section heading for the redlink section";
window.alert(alert_string);
return;
}
redlink_section_heading.appendChild(document.createTextNode("Article redlinks"));
redlink_list_div.appendChild(redlink_section_heading);
if (num_redlinks == 1) {
redlink_list_div.appendChild(document.createTextNode("This article has one redlink. This is listed below, with links to search for information."));
} else {
redlink_list_div.appendChild(document.createTextNode("This article has " + num_redlinks + " redlinks. These are listed below, with links to search for information."));
}
// Create ordered list of redlinks
redlink_ordered_list = document.createElement("OL");
if (!redlink_ordered_list) {
alert_string = "ERROR: Unable to create a new OL element to hold the list of redlinks.";
window.alert(alert_string);
return;
}
redlink_ordered_list.className = "redlink-list";
redlink_list_div.appendChild(redlink_ordered_list);
alert_string = "Inserted a new OL element into the redlink DIV element.";
// window.alert(alert_string);
// Add the redlinks to the ordered list
for (redlink_index=0; redlink_index<num_redlinks; redlink_index++) {
redlink_list_item = document.createElement("LI");
if (!redlink_ordered_list) {
alert_string = "ERROR: Unable to create a new LI element for redlink " + redlink_index + "\n";
window.alert(alert_string);
continue;
}
redlink_ordered_list.appendChild(redlink_list_item);
temp_hyperlink = redlink_list[redlink_index];
if (!temp_hyperlink) {
alert_string = "ERROR: Unable to retrieve redlink " + redlink_index + "\n";
window.alert(alert_string);
continue;
}
redlink_list_item.appendChild(temp_hyperlink.cloneNode(true));
redlink_list_item.appendChild(document.createElement("BR"));
redlink_list_item.appendChild(document.createTextNode(" Search: "));
temp_hyperlink = document.createElement("A");
temp_hyperlink.target = "_blank";
temp_hyperlink.href = "http://en.wikipedia.org/wiki/Special:Search?search=" + redlink_title_list[redlink_index].replace(/\s/g, "+");
temp_hyperlink.appendChild(document.createTextNode("Wikipedia"));
redlink_list_item.appendChild(temp_hyperlink);
redlink_list_item.appendChild(document.createTextNode(" / "));
temp_hyperlink = document.createElement("A");
temp_hyperlink.target = "_blank";
temp_hyperlink.href = "http://www.google.com/search?q=\"" + redlink_title_list[redlink_index].replace(/\s/g, "+") + "\"";
temp_hyperlink.appendChild(document.createTextNode("Google"));
redlink_list_item.appendChild(temp_hyperlink);
redlink_list_item.appendChild(document.createTextNode(" / "));
temp_hyperlink = document.createElement("A");
temp_hyperlink.target = "_blank";
temp_hyperlink.href = "http://scholar.google.com/scholar?q=\"" + redlink_title_list[redlink_index].replace(/\s/g, "+") + "\"";
temp_hyperlink.appendChild(document.createTextNode("Google Scholar"));
redlink_list_item.appendChild(temp_hyperlink);
redlink_list_item.appendChild(document.createTextNode(" / "));
temp_hyperlink = document.createElement("A");
temp_hyperlink.target = "_blank";
temp_hyperlink.href = "http://books.google.com/books?&as_brr=0&q=\"" + redlink_title_list[redlink_index].replace(/\s/g, "+") + "\"";
temp_hyperlink.appendChild(document.createTextNode("Google Books"));
redlink_list_item.appendChild(temp_hyperlink);
redlink_list_item.appendChild(document.createTextNode(" / "));
temp_hyperlink = document.createElement("A");
temp_hyperlink.target = "_blank";
temp_hyperlink.href = "http://news.google.com/archivesearch?&as_src=-newswire+-wire+-presswire+-PR+-press+-release+-wikipedia&q=\"" + redlink_title_list[redlink_index].replace(/\s/g, "+") + "\"";
temp_hyperlink.appendChild(document.createTextNode("Google News"));
redlink_list_item.appendChild(temp_hyperlink);
redlink_list_item.appendChild(document.createTextNode(" / "));
temp_hyperlink = document.createElement("A");
temp_hyperlink.target = "_blank";
temp_hyperlink.href = "http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=pubmed&term=" + redlink_title_list[redlink_index].replace(/\s/g, "+");
temp_hyperlink.appendChild(document.createTextNode("PubMed"));
redlink_list_item.appendChild(temp_hyperlink);
redlink_list_item.appendChild(document.createTextNode(" / "));
temp_hyperlink = document.createElement("A");
temp_hyperlink.target = "_blank";
temp_hyperlink.href = "http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=pmc&term=" + redlink_title_list[redlink_index].replace(/\s/g, "+");
temp_hyperlink.appendChild(document.createTextNode("PubMedCentral"));
redlink_list_item.appendChild(temp_hyperlink);
redlink_list_item.appendChild(document.createTextNode(" / "));
temp_hyperlink = document.createElement("A");
temp_hyperlink.target = "_blank";
temp_hyperlink.href = "http://scienceworld.wolfram.com/search/index.cgi?as_q=" + redlink_title_list[redlink_index].replace(/\s/g, "+");
temp_hyperlink.appendChild(document.createTextNode("WorldofScience"));
redlink_list_item.appendChild(temp_hyperlink);
redlink_list_item.appendChild(document.createTextNode(" / "));
temp_hyperlink = document.createElement("A");
temp_hyperlink.target = "_blank";
temp_hyperlink.href = "http://www.britannica.com/bps/search?query=" + redlink_title_list[redlink_index].replace(/\s/g, "+");
temp_hyperlink.appendChild(document.createTextNode("Britannica"));
redlink_list_item.appendChild(temp_hyperlink);
redlink_list_item.appendChild(document.createTextNode(" / "));
temp_hyperlink = document.createElement("A");
temp_hyperlink.target = "_blank";
temp_hyperlink.href = "http://encarta.msn.com/encnet/refpages/search.aspx?q=" + redlink_title_list[redlink_index].replace(/\s/g, "+");
temp_hyperlink.appendChild(document.createTextNode("Encarta"));
redlink_list_item.appendChild(temp_hyperlink);
} // closes loop over the red links
// redlink_list_div.appendChild(document.createTextNode("Please suggest other databases to search through to User:Proteins; thank you!"));
redlink_list_div.appendChild(document.createElement("BR"));
// Print acknowledgment
alert_string = "Created ordered list of " + num_redlinks + " redlinks.\n";
// window.alert(alert_string);
} // closes function listRedLinks()
$(function () {
mw.util.addPortletLink('p-navigation', 'javascript:listRedLinks()', 'Redlinks & search', 'ca-redlinks', 'Ordered list of redlinks', '!', '');
});
//</pre>