User:Js/preview2.js
//this script is called from en:user:js/ajaxPreview.js and ru:MediaWiki:Gadget-preview.js
//after the buttons are created
ajaxPreview = new function(){
var wkPreview = $('#wikiPreview'), frm = document.editform
if (!wkPreview.length || !frm) return
$('#wpPreviewLive, #wpDiffLive').click(run)
var cssWait, cssLang, cssPreview, cssOutdated
var isDiff, isFullPreview, btn, oldHeight, htm, scriptTip
var mm = window.ajaxPreviewMsg || {}
function run (e){
btn = $(this)
btn.width( btn.outerWidth() ).attr('orig', btn.val())
btn.val('...')
$('#wikiDiff, #newarticletext').hide()
oldHeight = wkPreview.height()
scriptTip = ''
if (!cssWait) cssWait = mw.util.addCSS('#wikiPreview {opacity: 0.3; color:gray} body {cursor:wait }')
else cssWait.disabled = false
var url = mw.config.get('wgScriptPath') + '/api.php?format=json', data, ext
var txt = $( '#wpTextbox1' ).textSelection( 'getContents' );
isDiff = btn.attr('id') == 'wpDiffLive'
if (isDiff){
mw.loader.load( 'mediawiki.diff.styles' )
url += '&action=query&prop=revisions'
data = { titles: mw.config.get('wgPageName').replace(/_/g,' '), rvdifftotext: txt}
if (frm.wpSection.value) url += '&rvsection=' + frm.wpSection.value
if (frm.oldid.value && frm.oldid.value != '0'){ //can compare to currently edited older version, not to the latest
if (e.shiftKey) {
url += '&rvstartid=' + frm.oldid.value + '&rvendid=' + frm.oldid.value
scriptTip = mm.diff2old
}
else scriptTip = mm.difftip
}
}else{ //preview
if (frm.wpSection.value) txt += '
if ( $.inArray(mw.config.get('wgNamespaceNumber'), [2 , 8]) !== -1 && (ext = /\.(js|css)$/.exec(mw.config.get('wgTitle'))) ){
if (!cssLang) {
cssLang = true
mw.loader.load('ext.geshi.language.' + ext[1]=='js'?'javascript':'css' )
}
}
url += '&action=parse&pst=&disablepp=&prop=text|modules'
data = { title: mw.config.get('wgPageName'), text: txt, summary: frm.wpSummary.value}
if (window.ajaxPreviewFull || e.shiftKey){
isFullPreview = true
url += '|categorieshtml|languageshtml|templates'
}else{
isFullPreview = false
if (mw.config.get('wgNamespaceNumber')==0) scriptTip = mm.viewtip
}
}
//switch to multipart to decrease sent data volume on non-latin languages
var boundary = '--------123xyz' + Math.random(), dat2 = ''
for (var nm in data) dat2 += '--' + boundary + '\nContent-Disposition: form-data; name="'+nm+'"\n\n' + data[nm] + '\n'
//send
$.ajax({
url: url,
type: 'post',
data : dat2 + '--' + boundary,
contentType: 'multipart/form-data; charset=UTF-8; boundary='+boundary,
success: receive
})
}//run
function receive(resp){
cssWait.disabled = true
btn.val(btn.attr('orig'))
if (window.currentFocused) currentFocused.focus()
htm = ''
try {
if (isDiff){
htm = resp.query.pages[mw.config.get('wgArticleId')].revisions[0].diff['*']
if (htm)
htm = '
else
htm = mm.emptydiff
}else{
resp = resp.parse
htm = resp.text['*']
if (frm.wpSection.value == 'new'){ //add summary as H2
htm = '
' + resp.parsedsummary['*'] + '
' + htm}else{
var $sum = $(frm).find('div.mw-summary-preview') //create summary preview if needed
if (!$sum.length) $sum = $('
').insertAfter('#wpSummary')$sum.html(''+resp.parsedsummary['*']+'')
}
if (resp.modules) {
mw.loader.load( resp.modules.concat( resp.modulescripts, resp.modulestyles, resp.modulemessages ) );
}
}
}catch (err) { var htm = 'error: ' + err }
htm =
(scriptTip ?
'! '
+scriptTip+'' : '')
+ '
'+btn.val()+' (ajax)
' // font-style:italic; text-align:right
+ htm
wkPreview.html(htm).show()
// New content is available, fire the hook
mw.hook( 'wikipage.content' ).fire( wkPreview );
if (window.ajaxPreviewScrollTop) wkPreview[0].scrollIntoView()
else $(window).scrollTop( $(window).scrollTop() + wkPreview.height() - oldHeight )
if (!isDiff) finalizePreview(resp)
}
function finalizePreview(resp){
if (!cssPreview) cssPreview = mw.util.addCSS('span.editsection {display:none} .hiddencats {opacity:0.5}') // demonstrate that hiddencats will not be updated
if (window.collapsibleDivs){ //ruwiki
collapsibleDivs()
}
if (window.collapsibleTables){ //ruwiki
collapsibleTables()
}
if ( $( '.tex' ).length && mw.user.options.get('math') === '6' ) { // 6 == mathjax mode
mw.loader.using( 'ext.math.mathjax.enabler', function () {
$('#wikiPreview').renderTex();
} );
}
if (window.ajaxPreviewExec) ajaxPreviewExec(wkPreview[0])
// !!! mediazilla:36476
if( $('body').hasClass('ltr') )
$('#wikiPreview').addClass('mw-content-ltr')
if (!isFullPreview){
if (!cssOutdated) cssOutdated = mw.util.addCSS('.templatesUsed, #p-lang, #catlinks {opacity:0.5}')
else cssOutdated.disabled = false
//$('#p-lang, #catlinks').attr('title', 'Not updated by latest preview')
return
}
//otherwise update other areas
if (cssOutdated) cssOutdated.disabled = true
$('#catlinks').replaceWith(resp.categorieshtml['*'])
if( resp.languageshtml ) {
htm = resp.languageshtml['*']
var plang = $('#p-lang')
if (!plang.length)
plang = $('#p-tb').clone(true).attr('id','p-lang').insertAfter('#p-tb')
.find('h5').text( htm.replace(/[:<].+$/,'') ).end()
plang.find('ul').html(
'
)
}
htm = ''
var tt = resp.templates
for (var i=0; i htm += ' + (typeof tt[i].exists == 'string' ? '' : ' class=new') + '>' + tt[i]['*'] + '
$('#editform').find('div.templatesUsed').find('ul').html(htm)
}
}