MediaWiki:Gadget-shiftrefs.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.
/* * Сдвиг всех примечаний на знаки препинания. * Автор: [[wikipedia:ru:User:Ignatus]] * Источник: https://ru.wikipedia.org/?oldid=43014528 */ function lebedevrefs(){ var diglasttext;var getsimpletext; diglasttext = function(n){ return n.lastChild ? diglasttext(n.lastChild) : n }; getsimpletext = function(n){ return n.innerHTML.replace(/<(?:"(?:\\\\|\\"|\\[^"]|[^\\"])*"|'(?:\\\\|\\'|\\[^']|[^\\'])*'|[^"'>])+>/ig,''); //' };//innerText работает не везде var zone = document.getElementById('wikiPreview') || document.getElementById('bodyContent') || document.getElementById('mw_contentholder') || document.getElementById('article'); var alles=Array(); {var j=zone.getElementsByTagName('*'); for(var i=0;i<j.length;i++){alles[i]=j[i]}; }; var getdots = /^([\s\S]*?)([.,…]*)$/; var i=0; var f=function(){ if(i<alles.length){ var ch=alles[i].childNodes; // Ищем последовательности элементов класса reference // а также рассматриваем ноды до и после них for(var j=0;j<ch.length;j++){ var l=0; while( j+l < ch.length // && && (ch[j+l].nodeType == 1) // && // элемент && /(^|\s)reference(\s|$)/i.test(ch[j+l].className) ){l++}; if(l){//есть группа var grp=document.createElement('span'); for(var k=0;k<l;k++){ grp.appendChild(ch[j]); //alles[i].removeChild(ch[j]);//автоматом }; if(j<ch.length){alles[i].insertBefore(grp,ch[j])}else{alles[i].appendChild(grp)}; grp.style.whiteSpace='nowrap'; var ppw = 0.; if( j ){ if( ch[j-1].nodeType == 3 ){ // текст var a=/^([\S\s]*\s)?(\S*?)([.,…]*)?$/.exec(ch[j-1].nodeValue); ch[j-1].nodeValue = a[1]||''; var b = document.createElement('span'); var t = document.createTextNode(a[3]||a[2]); b.appendChild(t); grp.insertBefore(b,grp.firstChild); if(a[3]){ b.style.marginRight = '-'+b.offsetWidth+'px'; t.nodeValue = a[2]+t.nodeValue; }; ppw = b.offsetWidth; }else{// если предыдущий узел - элемент var lt = diglasttext(ch[j-1]); var a = getdots.exec(lt.nodeValue); if(a[2]){//финишные точки выделяем lt.nodeValue=a[1]; var b = document.createElement('span'); b.appendChild(document.createTextNode(a[2])); lt.parentNode.appendChild(b); ppw = b.offsetWidth; b.style.marginRight = '-'+ppw+'px'; }; if(/nowrap|pre$/.test(ch[j-1].style.whiteSpace) || ! /\s/.test(getsimpletext(ch[j-1]))){ //если его можно втащить в неразрывный текст, делаем это grp.insertBefore(ch[j-1],grp.firstChild); ppw += grp.firstChild.offsetWidth; } };//else };//if ( j ) if(grp.nextSibling){//Смотрим дальше, если текст, отрезаем начальную точку if( grp.nextSibling.nodeType==3 ){ var a = /^([.,…]*)([\s\S]*?)$/.exec(grp.nextSibling.nodeValue); if(a[1]){ grp.nextSibling.nodeValue = a[2]; var b = document.createElement('span'); b.appendChild( document.createTextNode(a[1]) ); grpw = grp.offsetWidth; grp.appendChild(b); b.previousSibling.style.marginRight = (ppw-grpw)+'px'; b.style.marginRight = (grpw-ppw-b.offsetWidth)+'px'; }//if(a[1]) }//if( grp.nextSibling.nodeType==3 ) }//if(grp.nextSibling) }//if(l) };//for(ch) i++; window.setTimeout(f,0);//обрабатываем действия пользователя, затем идём дальше }else{//(i>=alles.length) f = null;//помогаем мусорнице };//if(i<alles.length) };//f if(alles.length){f()};//запускаем выполнение }; if ( wgNamespaceNumber >= 0 && wgUserName ) addOnloadHook( lebedevrefs );