MediaWiki:Common.js: Difference between revisions
From MediaWiki
Jump to navigationJump to search
Suki Brits (talk | contribs) No edit summary |
Suki Brits (talk | contribs) No edit summary |
||
| Line 25: | Line 25: | ||
addOnloadHook(tfwiki_hooks); | addOnloadHook(tfwiki_hooks); | ||
/* ========== Upload preview ========== | |||
========== -BEGIN- ========== | |||
========== CODE IS UNREVIEWED ========== */ | |||
/** | |||
* Live preview script for MediaWiki | |||
* | |||
* 2007-04-25 – Nikerabbit: | |||
* Worked around text cutoff in mozilla-based browsers | |||
* Support for categories | |||
*/ | |||
lpIdPreview = 'wikiPreview'; | |||
lpIdCategories = 'catlinks'; | |||
lpIdDiff = 'wikiDiff'; | |||
/* | |||
* Returns XMLHttpRequest based on browser support or null | |||
*/ | |||
function openXMLHttpRequest() { | |||
if( window.XMLHttpRequest ) { | |||
return new XMLHttpRequest(); | |||
} else if( window.ActiveXObject && navigator.platform != 'MacPPC' ) { | |||
// IE/Mac has an ActiveXObject but it doesn't work. | |||
return new ActiveXObject("Microsoft.XMLHTTP"); | |||
} else { | |||
return null; | |||
} | |||
} | |||
/** | |||
* Returns true if could open the request, | |||
* false otherwise (eg no browser support). | |||
*/ | |||
function lpDoPreview(text, postUrl) { | |||
lpRequest = openXMLHttpRequest(); | |||
if( !lpRequest ) return false; | |||
lpRequest.onreadystatechange = lpStatusUpdate; | |||
lpRequest.open("POST", postUrl, true); | |||
var postData = 'wpTextbox1=' + encodeURIComponent(text); | |||
lpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); | |||
lpRequest.send(postData); | |||
return true; | |||
} | |||
function lpStatusUpdate() { | |||
/* We are at some stage of loading */ | |||
if (lpRequest.readyState > 0 && lpRequest.readyState < 4) { | |||
notify(i18n(wgLivepreviewMessageLoading)); | |||
} | |||
/* Not loaded yet */ | |||
if(lpRequest.readyState != 4) { | |||
return; | |||
} | |||
/* We got response, bug it not what we wanted */ | |||
if( lpRequest.status != 200 ) { | |||
var keys = new Array(); | |||
keys[0] = lpRequest.status; | |||
keys[1] = lpRequest.statusText; | |||
window.alert(i18n(wgLivepreviewMessageError, keys)); | |||
lpShowNormalPreview(); | |||
return; | |||
} | |||
/* All good */ | |||
dismissNotify(i18n(wgLivepreviewMessageReady), 750); | |||
var XMLObject = lpRequest.responseXML.documentElement; | |||
/* Work around Firefox (Gecko?) limitation where it shows only the first 4096 | |||
* bytes of data. Ref: http://www.thescripts.com/forum/thread482760.html | |||
*/ | |||
XMLObject.normalize(); | |||
var previewElement = XMLObject.getElementsByTagName('preview')[0]; | |||
var categoryElement = XMLObject.getElementsByTagName('category')[0]; | |||
/* Hide the active diff if it exists */ | |||
var diff = document.getElementById(lpIdDiff); | |||
if ( diff ) { diff.style.display = 'none'; } | |||
/* Inject preview */ | |||
var previewContainer = document.getElementById( lpIdPreview ); | |||
if ( previewContainer && previewElement ) { | |||
previewContainer.innerHTML = previewElement.firstChild.data; | |||
previewContainer.style.display = 'block'; | |||
} else { | |||
/* Should never happen */ | |||
window.alert(i18n(wgLivepreviewMessageFailed)); | |||
lpShowNormalPreview(); | |||
return; | |||
} | |||
/* Inject categories */ | |||
var categoryContainer = document.getElementById( lpIdCategories ); | |||
if ( categoryElement && categoryElement.firstChild ) { | |||
if ( categoryContainer ) { | |||
categoryContainer.innerHTML = categoryElement.firstChild.data; | |||
/* May be hidden */ | |||
categoryContainer.style.display = 'block'; | |||
} else { | |||
/* Just dump them somewhere */ | |||
/* previewContainer.innerHTML += categoryElement.firstChild.data;*/ | |||
} | |||
} else { | |||
/* Nothing to show, hide old data */ | |||
if ( categoryContainer ) { | |||
categoryContainer.style.display = 'none'; | |||
} | |||
} | |||
} | |||
function lpShowNormalPreview() { | |||
var fallback = document.getElementById('wpPreview'); | |||
if ( fallback ) { fallback.style.display = 'inline'; } | |||
} | |||
// TODO: move elsewhere | |||
/* Small non-intrusive popup which can be used for example to notify the user | |||
* about completed AJAX action. Supports only one notify at a time. | |||
*/ | |||
function notify(message) { | |||
var notifyElement = document.getElementById('mw-js-notify'); | |||
if ( !notifyElement ) { | |||
createNotify(); | |||
var notifyElement = document.getElementById('mw-js-notify'); | |||
} | |||
notifyElement.style.display = 'block'; | |||
notifyElement.innerHTML = message; | |||
} | |||
function dismissNotify(message, timeout) { | |||
var notifyElement = document.getElementById('mw-js-notify'); | |||
if ( notifyElement ) { | |||
if ( timeout == 0 ) { | |||
notifyElement.style.display = 'none'; | |||
} else { | |||
notify(message); | |||
setTimeout("dismissNotify('', 0)", timeout); | |||
} | |||
} | |||
} | |||
function createNotify() { | |||
var div = document.createElement("div"); | |||
var txt = '###PLACEHOLDER###' | |||
var txtNode = document.createTextNode(txt); | |||
div.appendChild(txtNode); | |||
div.id = 'mw-js-notify'; | |||
// TODO: move styles to css | |||
div.setAttribute('style', | |||
'display: none; position: fixed; bottom: 0px; right: 0px; color: white; background-color: DarkRed; z-index: 5; padding: 0.1em 1em 0.1em 1em; font-size: 120%;'); | |||
var body = document.getElementsByTagName('body')[0]; | |||
body.appendChild(div); | |||
} | |||
/* Helper function similar to wfMsgReplaceArgs() */ | |||
function i18n(message, keys) { | |||
var localMessage = message; | |||
if ( !keys ) { return localMessage; } | |||
for( var i = 0; i < keys.length; i++) { | |||
var myregexp = new RegExp("\\$"+(i+1), 'g'); | |||
localMessage = localMessage.replace(myregexp, keys[i]); | |||
} | |||
return localMessage; | |||
} | |||
if (wgCanonicalNamespace == 'Special' && wgCanonicalSpecialPageName == 'Upload'){ | |||
addOnloadHook(uploadPreviewInit) | |||
//prepare Mediawiki Live Preview | |||
wgLivepreviewMessageLoading = 'Wait...' | |||
wgLivepreviewMessageReady = 'Done' | |||
document.write('<script type= "text/javascript" src="/skins-1.5/common/preview.js"></script>') | |||
} | |||
function uploadPreviewInit(){ | |||
wpUploadDescription = document.getElementById('wpUploadDescription') //global var | |||
var but = document.createElement('input') | |||
but.type = 'button' | |||
but.value='Preview' | |||
but.onclick=uploadPreviewDo | |||
wpUploadDescription.parentNode.insertBefore(but, wpUploadDescription.nextSibling) | |||
} | |||
function uploadPreviewDo(){ | |||
if (!window.wikiPreview) //create preview div | |||
wikiPreview = document.createElement('div') | |||
wikiPreview.id = 'wikiPreview' | |||
wpUploadDescription.parentNode.insertBefore(wikiPreview, wpUploadDescription.nextSibling.nextSibling) | |||
lpDoPreview(wpUploadDescription.value, '/w2/index.php?action=submit&live') | |||
} | |||
/* ========== Upload preview ========== | |||
========== -End- ========== | |||
========== CODE IS UNREVIEWED ========== */ | |||
Revision as of 03:46, 18 June 2009
/* Blatantly based on Wookiepedia's ShowEras */
function showTitles(className) {
if(typeof(SKIP_ERAS) != 'undefined' && SKIP_ERAS)
return;
var titleDiv = document.getElementById(className);
if(titleDiv == null || titleDiv == undefined)
return;
var cloneNode = titleDiv.cloneNode(true);
var firstHeading = getFirstHeading();
firstHeading.insertBefore(cloneNode, firstHeading.childNodes[0]);
cloneNode.style.display = "block";
}// END JavaScript title rewrite
function getFirstHeading(){
var a = getElementsByClassName(document.getElementById('content'), 'h1', 'firstHeading');
return a[0];
}
function tfwiki_hooks() {
showTitles('title-factionicons');
}
addOnloadHook(tfwiki_hooks);
/* ========== Upload preview ==========
========== -BEGIN- ==========
========== CODE IS UNREVIEWED ========== */
/**
* Live preview script for MediaWiki
*
* 2007-04-25 – Nikerabbit:
* Worked around text cutoff in mozilla-based browsers
* Support for categories
*/
lpIdPreview = 'wikiPreview';
lpIdCategories = 'catlinks';
lpIdDiff = 'wikiDiff';
/*
* Returns XMLHttpRequest based on browser support or null
*/
function openXMLHttpRequest() {
if( window.XMLHttpRequest ) {
return new XMLHttpRequest();
} else if( window.ActiveXObject && navigator.platform != 'MacPPC' ) {
// IE/Mac has an ActiveXObject but it doesn't work.
return new ActiveXObject("Microsoft.XMLHTTP");
} else {
return null;
}
}
/**
* Returns true if could open the request,
* false otherwise (eg no browser support).
*/
function lpDoPreview(text, postUrl) {
lpRequest = openXMLHttpRequest();
if( !lpRequest ) return false;
lpRequest.onreadystatechange = lpStatusUpdate;
lpRequest.open("POST", postUrl, true);
var postData = 'wpTextbox1=' + encodeURIComponent(text);
lpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
lpRequest.send(postData);
return true;
}
function lpStatusUpdate() {
/* We are at some stage of loading */
if (lpRequest.readyState > 0 && lpRequest.readyState < 4) {
notify(i18n(wgLivepreviewMessageLoading));
}
/* Not loaded yet */
if(lpRequest.readyState != 4) {
return;
}
/* We got response, bug it not what we wanted */
if( lpRequest.status != 200 ) {
var keys = new Array();
keys[0] = lpRequest.status;
keys[1] = lpRequest.statusText;
window.alert(i18n(wgLivepreviewMessageError, keys));
lpShowNormalPreview();
return;
}
/* All good */
dismissNotify(i18n(wgLivepreviewMessageReady), 750);
var XMLObject = lpRequest.responseXML.documentElement;
/* Work around Firefox (Gecko?) limitation where it shows only the first 4096
* bytes of data. Ref: http://www.thescripts.com/forum/thread482760.html
*/
XMLObject.normalize();
var previewElement = XMLObject.getElementsByTagName('preview')[0];
var categoryElement = XMLObject.getElementsByTagName('category')[0];
/* Hide the active diff if it exists */
var diff = document.getElementById(lpIdDiff);
if ( diff ) { diff.style.display = 'none'; }
/* Inject preview */
var previewContainer = document.getElementById( lpIdPreview );
if ( previewContainer && previewElement ) {
previewContainer.innerHTML = previewElement.firstChild.data;
previewContainer.style.display = 'block';
} else {
/* Should never happen */
window.alert(i18n(wgLivepreviewMessageFailed));
lpShowNormalPreview();
return;
}
/* Inject categories */
var categoryContainer = document.getElementById( lpIdCategories );
if ( categoryElement && categoryElement.firstChild ) {
if ( categoryContainer ) {
categoryContainer.innerHTML = categoryElement.firstChild.data;
/* May be hidden */
categoryContainer.style.display = 'block';
} else {
/* Just dump them somewhere */
/* previewContainer.innerHTML += categoryElement.firstChild.data;*/
}
} else {
/* Nothing to show, hide old data */
if ( categoryContainer ) {
categoryContainer.style.display = 'none';
}
}
}
function lpShowNormalPreview() {
var fallback = document.getElementById('wpPreview');
if ( fallback ) { fallback.style.display = 'inline'; }
}
// TODO: move elsewhere
/* Small non-intrusive popup which can be used for example to notify the user
* about completed AJAX action. Supports only one notify at a time.
*/
function notify(message) {
var notifyElement = document.getElementById('mw-js-notify');
if ( !notifyElement ) {
createNotify();
var notifyElement = document.getElementById('mw-js-notify');
}
notifyElement.style.display = 'block';
notifyElement.innerHTML = message;
}
function dismissNotify(message, timeout) {
var notifyElement = document.getElementById('mw-js-notify');
if ( notifyElement ) {
if ( timeout == 0 ) {
notifyElement.style.display = 'none';
} else {
notify(message);
setTimeout("dismissNotify('', 0)", timeout);
}
}
}
function createNotify() {
var div = document.createElement("div");
var txt = '###PLACEHOLDER###'
var txtNode = document.createTextNode(txt);
div.appendChild(txtNode);
div.id = 'mw-js-notify';
// TODO: move styles to css
div.setAttribute('style',
'display: none; position: fixed; bottom: 0px; right: 0px; color: white; background-color: DarkRed; z-index: 5; padding: 0.1em 1em 0.1em 1em; font-size: 120%;');
var body = document.getElementsByTagName('body')[0];
body.appendChild(div);
}
/* Helper function similar to wfMsgReplaceArgs() */
function i18n(message, keys) {
var localMessage = message;
if ( !keys ) { return localMessage; }
for( var i = 0; i < keys.length; i++) {
var myregexp = new RegExp("\\$"+(i+1), 'g');
localMessage = localMessage.replace(myregexp, keys[i]);
}
return localMessage;
}
if (wgCanonicalNamespace == 'Special' && wgCanonicalSpecialPageName == 'Upload'){
addOnloadHook(uploadPreviewInit)
//prepare Mediawiki Live Preview
wgLivepreviewMessageLoading = 'Wait...'
wgLivepreviewMessageReady = 'Done'
document.write('<script type= "text/javascript" src="/skins-1.5/common/preview.js"></script>')
}
function uploadPreviewInit(){
wpUploadDescription = document.getElementById('wpUploadDescription') //global var
var but = document.createElement('input')
but.type = 'button'
but.value='Preview'
but.onclick=uploadPreviewDo
wpUploadDescription.parentNode.insertBefore(but, wpUploadDescription.nextSibling)
}
function uploadPreviewDo(){
if (!window.wikiPreview) //create preview div
wikiPreview = document.createElement('div')
wikiPreview.id = 'wikiPreview'
wpUploadDescription.parentNode.insertBefore(wikiPreview, wpUploadDescription.nextSibling.nextSibling)
lpDoPreview(wpUploadDescription.value, '/w2/index.php?action=submit&live')
}
/* ========== Upload preview ==========
========== -End- ==========
========== CODE IS UNREVIEWED ========== */

