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