User:Proteins/listredlinks.js

//

// 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

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

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

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', '!', '');

});

//