diff options
author | Pierre Schmitz <pierre@archlinux.de> | 2006-10-11 18:12:39 +0000 |
---|---|---|
committer | Pierre Schmitz <pierre@archlinux.de> | 2006-10-11 18:12:39 +0000 |
commit | 183851b06bd6c52f3cae5375f433da720d410447 (patch) | |
tree | a477257decbf3360127f6739c2f9d0ec57a03d39 /skins/common/preview.js |
MediaWiki 1.7.1 wiederhergestellt
Diffstat (limited to 'skins/common/preview.js')
-rw-r--r-- | skins/common/preview.js | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/skins/common/preview.js b/skins/common/preview.js new file mode 100644 index 00000000..b117e85b --- /dev/null +++ b/skins/common/preview.js @@ -0,0 +1,53 @@ +// Live preview + +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 livePreview(target, text, postUrl) { + prevTarget = target; + if( !target ) { + window.alert('Live preview failed!\nTry normal preview.'); + var fallback = document.getElementById('wpPreview'); + if ( fallback ) { fallback.style.display = 'inline'; } + } + prevReq = openXMLHttpRequest(); + if( !prevReq ) return false; + + prevReq.onreadystatechange = updatePreviewText; + prevReq.open("POST", postUrl, true); + + var postData = 'wpTextbox1=' + encodeURIComponent(text); + prevReq.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); + prevReq.send(postData); + return true; +} + +function updatePreviewText() { + if( prevReq.readyState != 4 ) { + return; + } + if( prevReq.status != 200 ) { + window.alert('Failed to connect: ' + prevReq.status + + ' "' + prevReq.statusText + '"'); + var fallback = document.getElementById('wpPreview'); + if ( fallback ) { fallback.style.display = 'inline'; } + return; + } + prevTarget.innerHTML = prevReq.responseText; + + /* Hide the active diff if it exists */ + var diff = document.getElementById('wikiDiff'); + if ( diff ) { diff.style.display = 'none'; } +} |