MediaWiki:Extensions/historynav.js: Difference between revisions
From OpenWetWare
Jump to navigationJump to search
No edit summary |
No edit summary |
||
(19 intermediate revisions by one other user not shown) | |||
Line 1: | Line 1: | ||
// <pre> | // <pre> | ||
// At http://openwetware.org/wiki/ | // At http://openwetware.org/wiki/MediaWiki:Extensions/historynav.js | ||
// Author: Austin Che | // Author: Austin Che | ||
// | // | ||
// This only works with MediaWiki > 1.8 (which defines wgPageName as Javascript variable) | // This only works with MediaWiki > 1.8 (which defines wgPageName as Javascript variable) | ||
// Add the following line to User:YOURNAME/monobook.js | // Add the following line to User:YOURNAME/monobook.js | ||
// document.write('<script type="text/javascript" src="http://openwetware.org/index.php?title= | // document.write('<script type="text/javascript" src="http://openwetware.org/index.php?title=MediaWiki:Extensions/historynav.js&action=raw&ctype=text/javascript"></script>'); | ||
if (document.getElementById | // This version has been modified to load from the 'History' MediaWiki extension rather than dynamically placed at the top right of a MediaWiki page. | ||
// The script requires an existing '<select>' tag named 'hist'. | |||
if (document.getElementById && addOnloadHook) | |||
addOnloadHook(initVisitHistory); | addOnloadHook(initVisitHistory); | ||
var historyNumSaved = | var historyNumSaved = 15; | ||
var historyExpiration = 30; // days | var historyExpiration = 30; // days | ||
var historyCookieName = "wikihist"; | var historyCookieName = "wikihist"; | ||
Line 19: | Line 22: | ||
var expires = ""; | var expires = ""; | ||
if (days) | if (days) | ||
{ | |||
var date = new Date(); // current time | var date = new Date(); // current time | ||
date.setTime(date.getTime() + (days*24*60*60*1000)); | date.setTime(date.getTime() + (days*24*60*60*1000)); | ||
Line 137: | Line 140: | ||
function showHistory() | function showHistory() | ||
{ | { | ||
if (!historyList || !historyList.length) | if (!historyList || !historyList.length) | ||
Line 180: | Line 145: | ||
var hist = document.getElementById('hist'); | var hist = document.getElementById('hist'); | ||
hist.id = 'visithistory'; | if (hist != null){ | ||
hist.id = 'visithistory'; | |||
// without removing text-transform, page names are lowercased | |||
hist.style.textTransform = "none"; | |||
hist.changed = false; | |||
hist.onchange = jumpToHistoryPage; | |||
hist.onfocus = historyFocus; | |||
hist.onkeydown = historyKeydown; | |||
hist.onclick = historyClicked; | |||
var o = addOption(historyList[0]); | |||
o.selected = true; | |||
hist.appendChild(o); | |||
for (var i = 1; i < historyList.length; i++) | |||
{ | |||
hist.appendChild(addOption(historyList[i])); | |||
} | |||
} | } | ||
} | } | ||
Line 203: | Line 170: | ||
loadSaveHistory(); | loadSaveHistory(); | ||
showHistory(); | showHistory(); | ||
} | } | ||
// </pre> | // </pre> |
Latest revision as of 09:51, 14 December 2009
// <pre> // At http://openwetware.org/wiki/MediaWiki:Extensions/historynav.js // Author: Austin Che // // This only works with MediaWiki > 1.8 (which defines wgPageName as Javascript variable) // Add the following line to User:YOURNAME/monobook.js // document.write('<script type="text/javascript" src="http://openwetware.org/index.php?title=MediaWiki:Extensions/historynav.js&action=raw&ctype=text/javascript"></script>'); // This version has been modified to load from the 'History' MediaWiki extension rather than dynamically placed at the top right of a MediaWiki page. // The script requires an existing '<select>' tag named 'hist'. if (document.getElementById && addOnloadHook) addOnloadHook(initVisitHistory); var historyNumSaved = 15; var historyExpiration = 30; // days var historyCookieName = "wikihist"; var historyList = new Array(); function setCookie(name, value, days) { var expires = ""; if (days) { var date = new Date(); // current time date.setTime(date.getTime() + (days*24*60*60*1000)); expires = "; expires=" + date.toGMTString(); } document.cookie = name + "=" + escape(value) + expires + "; path=/"; } function getCookie(name) { // returns the value of the cookie with name if (! document.cookie.length) return null; // search for cookie var search = name + "="; var offset = document.cookie.indexOf(search); if (offset == -1) return null; // no such cookie // set offset to the beginning of the cookie value offset += search.length; var end = document.cookie.indexOf(";", offset); // find end if (end == -1) end = document.cookie.length; return unescape(document.cookie.substring(offset, end)); } function loadSaveHistory() { var cookie = getCookie(historyCookieName); // using | as separator as it is not valid in wiki page name if (cookie) historyList = cookie.split('|'); for (var i = 0; i < historyList.length; i++) { if (historyList[i] == wgPageName) { historyList.splice(i, 1); break; } } // add current page to beginning of history list if (historyList.length == 0 || historyList[0] != wgPageName) historyList.unshift(wgPageName); if (historyList.length > historyNumSaved) historyList = historyList.slice(0, historyNumSaved); setCookie(historyCookieName, historyList.join('|'), historyExpiration); } function jumpToHistoryPage() { var hist = document.getElementById('visithistory'); if (!hist.changed) return false; var page = hist.options[hist.selectedIndex].text; var s = new String(wgArticlePath); s = s.replace(/\$1/, page); var url = wgServer + encodeURI(s.toString()); window.location = url; return true; } function historyClicked() { this.changed = true; } function historyFocus() { this.initValue = this.value; return true; } function historyKeydown(e) { var theEvent; var keyCodeTab = "9"; var keyCodeEnter = "13"; var keyCodeEsc = "27"; if (e) theEvent = e; else theEvent = event; if ((theEvent.keyCode == keyCodeEnter || theEvent.keyCode == keyCodeTab) && this.value != this.initValue) { this.changed = true; jumpToHistoryPage(); } else if (theEvent.keyCode == keyCodeEsc) this.value = this.initValue; else this.changed = false; return true; } function addOption(text) { var o = document.createElement('option'); o.appendChild(document.createTextNode(text)); return o; } function showHistory() { if (!historyList || !historyList.length) return; var hist = document.getElementById('hist'); if (hist != null){ hist.id = 'visithistory'; // without removing text-transform, page names are lowercased hist.style.textTransform = "none"; hist.changed = false; hist.onchange = jumpToHistoryPage; hist.onfocus = historyFocus; hist.onkeydown = historyKeydown; hist.onclick = historyClicked; var o = addOption(historyList[0]); o.selected = true; hist.appendChild(o); for (var i = 1; i < historyList.length; i++) { hist.appendChild(addOption(historyList[i])); } } } function initVisitHistory() { loadSaveHistory(); showHistory(); } // </pre>