MediaWiki:AjaxPreview.js

Материал из eSyr's wiki.

(Различия между версиями)
Перейти к: навигация, поиск

ESyr01 (Обсуждение | вклад)
(Новая: function ajaxPreviewInit(){ if ((wgNamespaceNumber % 2 == 0) && /\.(js|css)$/.test(wgTitle)) return if (typeof ajaxPreviewKey != 'string') ajaxPreviewKey = 'p' if (typeof ajaxDiffKey ...)
К следующему изменению →

Текущая версия

function ajaxPreviewInit(){

if ((wgNamespaceNumber % 2 == 0) && /\.(js|css)$/.test(wgTitle)) return
if (typeof ajaxPreviewKey != 'string') ajaxPreviewKey = 'p'
if (typeof ajaxDiffKey != 'string') ajaxDiffKey  = 'v'
ajaxPreviewPos = window.ajaxPreviewPos || 'right'
if (ajaxPreviewPos != 'bottom'){
  var tOld = document.getElementById('toolbar') || document.getElementById('wpTextbox1')
  tOld.style.clear = 'none'
  var d = document.createElement('div'); d.style.cssText = 'width:100%; clear:both'
  tOld.parentNode.insertBefore(d, tOld)
  var tNew = document.createElement('div'); tNew.style.cssText = 'float:'+ ajaxPreviewPos
  tOld.parentNode.insertBefore(tNew, tOld)
}
addBtn(window.ajaxPreviewButton, 'wpPreview', ajaxPreviewKey)
addBtn(window.ajaxDiffButton, 'wpDiff', ajaxDiffKey)
function addBtn(name, id, akey){ 
 var btnOld = document.getElementById(id)
 if (!btnOld) return
 //var
 btn = document.createElement('input'); btn.type = 'button'
 btn.onclick = ajaxPreviewClick;  btn.id = id + 'Live'
 if (!name){ //extract last word from standard buttons
   name = btnOld.value.split(' '); name = name[name.length-1]
   name = name.substring(0,1).toUpperCase() + name.substring(1) 
 }
 btn.value = name;  btn.title = btnOld.value + ' (Ajax)'
 if (ajaxPreviewPos == 'bottom'){
   btnOld.parentNode.insertBefore(btn, btnOld)
   btn.value = btnOld.value
   btnOld.value = '>'
 }else{
   btn.style.cssText = 'height:22px; padding:0 1px'
   tNew.appendChild(btn)
 }
 if (akey){ //reassign acces key
   if (btnOld.accessKey == akey){ 
     btnOld.accessKey = 
     btnOld.title = btnOld.title.replace(tooltipAccessKeyRegexp, )
   }

btn.accessKey = akey

   btn.title += ' ['+tooltipAccessKeyPrefix+akey+']'
 }
 btn.value2 = btn.value
}

}


function ajaxPreviewClick(){ajaxPreviewRun(this)}

function ajaxPreviewRun(btn){

var wkPreview = document.getElementById('wikiPreview'), form = document.editform
var aj = sajax_init_object()
if (!wkPreview || !form || !aj) return
var oldHeight = wkPreview.offsetHeight
var el, htm, isDiff = (btn.id=='wpDiffLive')
wkPreview.style.opacity = '0.3'; wkPreview.style.color = 'gray'; document.body.style.cursor = 'wait'
if (el=document.getElementById('wikiDiff')) el.style.display = 'none'
if (el=document.getElementById('newarticletext')) el.style.display = 'none'
btn.style.width = Math.max(btn.scrollWidth, btn.offsetWidth) + 'px';  btn.value = '...'
//prepare
var txt = form.wpTextbox1.value, action = form.action
var boundary = '--------123xyz', data = 
if (isDiff){
  addData('wpDiff', ); addData('wpStarttime'); addData('wpEdittime')
  if (!window.ajaxPreview_CSS) ajaxPreview_CSS = importStylesheetURI('/skins-1.5/common/diff.css') 
}else{
  action += '&live'
  if (form.wpSection && form.wpSection.value) txt += '\n
' } addData('wpTextbox1', txt); addData('wpSection'); addData('wpSummary') //send aj.open('POST', action, true) aj.setRequestHeader('Content-Type', 'multipart/form-data; boundary='+boundary) aj.send(data + '--' + boundary) aj.onreadystatechange = function(){ if (aj.readyState != 4) return wkPreview.style.display = 'block' if (isDiff){ var htm = aj.responseText
var p1 = htm.indexOf("" ) var p2 = htm.indexOf('
', p1)
   htm = (p1!=-1 && p2!=-1) ? htm.substring(p1, p2+8) : 'Error'
 }else{
   htm = aj.responseText.replace(/>/g,'>').replace(/</g,'<').replace(/"/g,'"').replace(/&/g,'&').replace(/&apos;/g,"'")
 }
 wkPreview.innerHTML = htm
 btn.value = btn.value2
 btn.blur()


 if (el = wkPreview.getElementsByTagName('h2')[0]){
   if (el.style.textAlign != 'right') el.innerHML +=  ' (Ajax)'
   el.style.textAlign = 'right'
 }
 if (window.ajaxPreviewScrollTop && wkPreview.scrollIntoView) wkPreview.scrollIntoView()
 else document.documentElement.scrollTop +=  wkPreview.offsetHeight - oldHeight 
 wkPreview.style.opacity = ; wkPreview.style.color = ; document.body.style.cursor = 
 if (!isDiff) ajaxPreviewFinish(wkPreview)
}
function addData(name, value){
  if (!value) value = form[name] ? form[name].value : 
  data += '--' + boundary + '\nContent-Disposition: form-data; name="'+name+'"\n\n' + value + '\n'
}

}


function ajaxPreviewFinish(el){

sortables_init()
if (window.createCollapseButtons){//en.wp
  createCollapseButtons()
  createNavigationBarToggleButton()
} 
if (window.ajaxPreviewExec) ajaxPreviewExec(el)

}


if (wgCanonicalNamespace!='Special' && (wgAction=='edit' || wgAction=='submit'))

addOnloadHook(ajaxPreviewInit)
Личные инструменты
Разделы