MediaWiki:Gadget-Wikify.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 wikifyButton(){
 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 = '[[]]'; btn.title = 'Сделать все слова ссылками'
 btn.onclick = wikifyButtonRun; btn.id = 'wikifyButtonID'
 tlb.appendChild(btn)
 if (window.es_accesskey){
   btn.accessKey = es_accesskey
   btn.title += ' ['+es_accesskey+']'
   mw.util.updateTooltipAccessKeys([btn])
 } 
}

if ( mw.config.get( 'wgAction' ) === 'edit' || mw.config.get( 'wgAction' ) === 'submit' ) $(wikifyButton)

function wikifyButtonRun(){ //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 = processSelTextWikify(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 = processSelTextWikify(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 processSelTextWikify(txt){
 txt = txt.replace(/([-ёЁa-zа-яáćéíóśúýǿàèìòùâĉêĝĥîĵôŝûäëïöüÿãñõåůāēīōūőűøçǫşčěřšžŭłľťßæœðþα-ωἈἉἌἊἀἁἄἂἆἅἃἇὲἐἑἔἒἕἓὴῆἠἡἤἢἦἥἣἧϊΐὶῖἰἱὀὁὄὔὅὕὠὡὤᾤὥᾥϝϻϙϡϛϸϜϺϘϠϚϷ]+)(?!\\])/ig, '[[$1]]')
 return txt
}