User:Proteins/showrandomlinksonpage.js

// // Create a slideshow of random articles linked in the article (a so-called "aleation" or an "aleatory fugue") // // To use this script, add "importScript('User:Proteins/showrandomlinksonpage.js');" to your monobook.js subpage // under your user page, as you can see at User:Proteins/monobook.js

// Global variables var new_window; var wait_time = 0; var random_link_index = 0; var random_link_href_list = new Array; var random_link_title_list = new Array;

function timeoutRoutine {	alert("Wait = " + wait_time + " Slide " + random_link_index + ": " + random_link_title_list[random_link_index]); new_window.location = random_link_href_list[random_link_index]; }

function showRandomLinksOnPage { var alert_string = "";

var top_node;

var hyperlinks; var num_hyperlinks = 0;

var random_double = 0.5; var random_hyperlink_index = 0;

var random_link; var random_link_href = ""; var random_link_title = "";

var num_iterations = 0; var max_num_iterations = 100;

var bad_link = true;

var num_random_links = 0;

// Get the bodyContent node top_node = document.getElementById('bodyContent'); if (!top_node) { window.alert("There is no bodyContent node in this article."); return; } // Get a list of the hyperlinks hyperlinks = top_node.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; }

num_random_links = 5; random_link_index = 0; random_link_href_list[0] = ""; random_link_title_list[0] = "";

while (random_link_index < num_random_links) {

// Choose a random hyperlink bad_link = true; num_iterations = 0; random_link = null; random_link_href = ""; random_link_title = "";

while ((num_iterations= num_hyperlinks)) { continue; }

random_link = hyperlinks[random_hyperlink_index]; random_link_href = random_link.href; random_link_title = random_link.title;

if ((!random_link) || (!random_link_title) || (!random_link_title)) { // Check that all three exist continue; } else if (random_link.className) { // Don't follow external links continue; } else if (random_link_title.match(/\(page does not exist\)$/ig)) { // Don't follow red links continue; } else if (random_link_title.match(/^Image:/ig)) { // Don't follow Image links continue; } else if (random_link_title.match(/^Category:/ig)) { // Don't follow Category links continue; } else if (random_link_title.match(/^Special:/ig)) { // Don't follow links to Special pages continue; } else if ((random_link_title.match(/^Edit\ssection:/i)) && (random_link_href.match(/action\=edit/i))) { // Don't follow edit links continue; }

if (wgNamespaceNumber == 0) { // special behavior for Main article space if (random_link.id) { continue; } if (random_link_href.match(/Talk:/ig)) { continue; } if (random_link_href.match(/Wikipedia:/ig)) { continue; } if (random_link_href.match(/Wikipedia talk:/ig)) { continue; } if (random_link_href.match(/Portal:/ig)) { continue; } if (random_link_href.match(/Portal talk:/ig)) { continue; } if (random_link_href.match(/User:/ig)) { continue; } if (random_link_href.match(/User talk:/ig)) { continue; } if (random_link_href.match(/Help:/ig)) { continue; } if (random_link_href.match(/Help talk:/ig)) { continue; } if (random_link_href.match(/Template:/ig)) { continue; } if (random_link_href.match(/Template talk:/ig)) { continue; } if (random_link_href.match(/Category:/ig)) { continue; } if (random_link_href.match(/Category talk:/ig)) { continue; } if (random_link_href.match(/File:/ig)) { continue; } if (random_link_href.match(/File talk:/ig)) { continue; } if (random_link_href.match(/MediaWiki:/ig)) { continue; } if (random_link_href.match(/MediaWiki talk:/ig)) { continue; } } // closes check for Main article space

bad_link = false;

} // closes loop generating a random hyperlink

// Add the randomly chosen link to the list

if (bad_link == false) { random_link_index++; random_link_href_list[random_link_index] = random_link_href; random_link_title_list[random_link_index] = random_link_title; } else { alert_string = "Unable to find a suitable random link " + random_link_index + " in " + max_num_iterations + " attempts.\n"; window.alert(alert_string); break; }	}	num_random_links = random_link_index; if (num_random_links > 0) { alert_string = "Show slideshow of " + num_random_links + " random links from this page\?\n\n"; for (random_link_index=1; 		    random_link_index<=num_random_links; 		     random_link_index++) { alert_string += random_link_title_list[random_link_index] + "\n"; if (random_link_index%5 == 0) { alert_string += "\n"; } }		if (window.confirm(alert_string) == false) { return; } random_link_href = random_link_href_list[1]; new_window = window.open(random_link_href, "new_window"); random_link_index = 2; new_window.setTimeout("timeoutRoutine;", 3000); //		for (random_link_index=2; //		    random_link_index<=num_random_links; //		     random_link_index++) { //				if (window.confirm("Continue slideshow to \"" + random_link_title_list[random_link_index] + "\"\?") == false) { return; } //				random_link_href = random_link_href_list[random_link_index]; //				new_window.location = random_link_href; //				wait_time = 3000 * (random_link_index - 1); //				new_window.setTimeout("timeoutRoutine;", wait_time); //new_window.setTimeout("new_window.location=" + random_link_href_list[random_link_index]+ ";",wait_time); //  new_window.setTimeout("if (new_window.confirm('Continue slideshow?') == false) { break; }",800); //		}	} } // closes function showRandomLinksOnPage

$(function { mw.util.addPortletLink('p-navigation', 'javascript:showRandomLinksOnPage', 'Show random links', 'ca-slideshow', 'Show sequence of random links from this page', '$', ''); }); //