MediaWiki:Gadget-TranslationsFromIwiki.js

Замечание: Возможно, после публикации вам придётся очистить кэш своего браузера, чтобы увидеть изменения.

  • Firefox / Safari: Удерживая клавишу Shift, нажмите на панели инструментов Обновить либо нажмите Ctrl+F5 или Ctrl+R (⌘+R на Mac)
  • Google Chrome: Нажмите Ctrl+Shift+R (⌘+Shift+R на Mac)
  • Internet Explorer / Edge: Удерживая Ctrl, нажмите Обновить либо нажмите Ctrl+F5
  • Opera: Нажмите Ctrl+F5.
//[[Викисловарь:Гаджеты/Интервики в переводы]]
function translationsButton(){
 var tlb = document.getElementById('toolbar')
 if (!tlb) return
 var btn = document.createElement('input'); btn.type = 'button'
 btn.style.cssText = 'background:#adbede; height:22px; vertical-align:middle; padding:0'
 btn.value = 'iw'; btn.title = 'Преобразовать выделенные интервики в список переводов'
 btn.onclick = translationsFromIwikiRun; btn.id = 'transFromIwiki'
 tlb.appendChild(btn)
 if (window.es_accesskey){
   btn.accessKey = es_accesskey
   btn.title += ' ['+es_accesskey+']'
   updateTooltipAccessKeys([btn])
 } 
}

//mwCustomEditButtons['transFromIwiki'] = [translationsFromIwikiRun, 'commons/9/91/Link_go.png', 'Раскодировать URL перед курсором или все URL в выделенном тексте']
if ( mw.config.get( 'wgAction' ) === 'edit' || mw.config.get( 'wgAction' ) === 'submit' ) $(translationsButton)

function translationsFromIwikiRun(){ //main function

var localPrefix = 'ru'
var newText, linkSize, txtarea = document.editform.wpTextbox1
var isBeforeCursor = false

if (document.selection) { //IE/Opera
  var scrollTop = document.documentElement.scrollTop
  txtarea.focus()
  range = document.selection.createRange()
  if (!range.moveStart) return
  if (range.text){
    newText = processSelText(range.text)
  }else { //no selection
    if (!(rr=range.duplicate())) return
    rr.moveStart('character', - 1500)
    linkSize = processBeforeCursor(rr.text)
    if (!linkSize) return
    range.moveStart('character', - linkSize) //select matched
  }
  //replace text
  if (newText != range.text){
    range.text = newText
    range.moveStart('character', - newText.length)
    range.select()
  }
//  document.documentElement.scrollTop = scrollTop //restore window scroll position

}else if (txtarea.selectionStart || txtarea.selectionStart == '0') { // Mozilla
  var scrollTop = txtarea.scrollTop, txt = txtarea.value
  txtarea.focus()
  var startPos = txtarea.selectionStart, endPos = txtarea.selectionEnd
  if (startPos != endPos){
    newText = processSelText(txt.substring(startPos, endPos))
  }else{ //no selection
	linkSize = processBeforeCursor(txt.substring((endPos-1500>0?endPos-1500:0), endPos))
    if (!linkSize) return
    startPos = endPos - linkSize //select matched
  }
  //replace text
  if (newText != txt.substring(startPos, endPos)){
    txtarea.value = txt.substring(0, startPos) + newText +	txt.substring(endPos, txtarea.value.length)
    txtarea.selectionEnd = startPos + newText.length
    txtarea.selectionStart = startPos
  }
  txtarea.scrollTop = scrollTop
  }
}//end of main function

function processBeforeCursor(str){//finds beginning of possible list
isBeforeCursor = true
alert("Вы должны выделить список интервик")
return(false)
//var pos = str.lastIndexOf('http://')
}

function processSelText(txt){
 txt = txt.replace(/\[\[simple:([^\]]+)\n/ig, '').replace(/\[\[([-a-zA-Z]+):([^\]]+)\]\]/ig, '|$1=[[$2]]')
 return txt
}