MediaWiki:Common.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.
/* Размещённый здесь код JavaScript будет загружаться пользователям при обращении к каждой странице */

/* Викификатор */
function addWikifButton(){
 var toolbar = document.getElementById('toolbar')
 var textbox = document.getElementById('wpTextbox1')
 if (!textbox || !toolbar) return
 var i = document.createElement('img')
 i.src = 'https://upload.wikimedia.org/wikisource/ru/d/d1/Button-wikifikator.png'
 i.alt = i.title = 'Викификатор'
 i.onclick = Wikify_Select
 // i.onclick = Wikify
 i.style.cursor = 'pointer'
 toolbar.appendChild(i)
}
if (document.URL.indexOf('action=edit') > 0 || document.URL.indexOf('action=submit') > 0) {
 document.write('<script type="text/javascript" src="https://ru.wikipedia.org/w/index.php?title=MediaWiki:Gadget-wikificator.js&action=raw&ctype=text/javascript"><\/script>')
 addOnloadHook(addWikifButton)
}

// Added by Fritz
// Викификатор в какой-то момент отказался работать. Выяснилось, что он работает только в том случае,
// если какой-нибудь текст выделен. Пришлось добавить костыль: при нажатии на кнопку "Викифицировать"
// скрипт сначала выделяет всё в главном окне редактирования, и только потом передаёт управление
// на викификатор (Wikify).
function Wikify_Select(){
    if (getSelectedText()) {
        Wikify();
    } else {
        document.getElementById("wpTextbox1").select();
        Wikify();
        document.getSelection().removeAllRanges();
    }
}

// Надеюсь эта функция работает во всех браузерах
function getSelectedText() {
    var text = "";
    if (typeof window.getSelection != "undefined") {
        text = window.getSelection().toString();
    } else if (typeof document.selection != "undefined" && document.selection.type == "Text") {
        text = document.selection.createRange().text;
    }
    return text;
}

/* Кнопки «Поделиться» от Яндекса */

if (wgAction == 'view') {
$(function(){
if( (wgNamespaceNumber != 0 && wgNamespaceNumber != 6 && wgNamespaceNumber != 100) || wgAction != 'view' || /(oldid|diff)=/.test(window.location) ) { return; }
 
$.getScript('https://ruxpert.ru/skins/common/share.js', function( d, h, i ) { new Ya.share({
        element: 'sharingbuttons',
            elementStyle: {
                'type': 'button',
                'border': true,
                'quickServices': ['lj', 'twitter', 'vkontakte', 'facebook', 'gplus', 'moimir']
            },
            link: 'https://ruxpert.ru/' + wgPageName,
            title: wgTitle,
            popupStyle: {
                blocks: {
                    'Поделись-ка!': ['lj', 'twitter', 'vkontakte', 'facebook', 'gplus', 'yaru', 'moimir']
                },
                copyPasteField: false
            },
            serviceSpecific: {
                lj: {
                    link: '<a href="https://ruxpert.ru/' + wgPageName + '">' + wgPageName + ' — Русский эксперт</a>'
               }
        }
});} );

   $('#firstHeading').prepend( '<div style="font-size: 14px" id="sharingbuttons"></div>' );
});
}

/* Таблификатор */

//Форматирует таблицу, скопированную из Excel, по правилам вики-разметки.
//Часть кода позаимствована из httsp://ru.wikipedia.org/wiki/MediaWiki:Wikificator.js
//Автор: X-romix
 
var XRomix_Tablify_CantWork1 = 'Таблификатор не может работать в вашем браузере.\n\nTablificator cannot work in your browser' // английский текст для тех, кто не видит русские буквы
var XRomix_Tablify_FullText1 = 'Эта кнопка предназначена для форматирования табличного текста, скопированного из табличного редактора (например, из Excel). Чтобы функция заработала, сначала выделите нужный фрагмент текста в окне редактирования.'
 
//Добавляет кнопку
function addTablifikatorButton1(){
	var toolbar = document.getElementById('toolbar')
	var textbox = document.getElementById('wpTextbox1')
	if (!textbox || !toolbar) return
	var i = document.createElement('img')
	i.src = 'https://upload.wikimedia.org/wikipedia/ru/c/c1/Button-tablifikator.PNG'
	i.alt = i.title = 'Таблификатор'
	i.onclick = XRomix_Tablify1
	i.style.cursor = 'pointer'
	toolbar.appendChild(i)
 
}
 
//Этот код выполняется в начале.
if (wgAction == 'edit' || wgAction == 'submit'){
  addOnloadHook(addTablifikatorButton1)
}
 
 
//Функция для оформления таблицы
function XRomix_Tablify1(){
 
 //Проверяем, поддерживает ли браузер регулярные выражения (RegExp)	
 if (('code'.replace(/d/g, 'r') != 'core') 
    || (navigator.appName=='Netscape' && navigator.appVersion.substr (0, 1) < 5))
  { alert(XRomix_Tablify_CantWork1); return }
 //setWpSummary();
 var txt, hidden = [], hidIdx = 0, wpTextbox1 = document.editform.wpTextbox1
 var winScroll = document.documentElement.scrollTop //remember window scroll
 wpTextbox1.focus()
 
 if (typeof wpTextbox1.selectionStart != 'undefined' 
    && (navigator.productSub > 20031000 || is_safari)) { //Mozilla/Opera/Safari3
 
    var textScroll = wpTextbox1.scrollTop
    var startPos = wpTextbox1.selectionStart
    var endPos = wpTextbox1.selectionEnd
    txt = wpTextbox1.value.substring(startPos, endPos)
    if (txt == '') {alert(XRomix_Tablify_FullText1); return}
    else{
 
	  processText()
      wpTextbox1.value = wpTextbox1.value.substring(0, startPos) + txt + wpTextbox1.value.substring(endPos)
    }
    wpTextbox1.selectionStart = startPos
    wpTextbox1.selectionEnd = startPos + txt.length
    wpTextbox1.scrollTop = textScroll
 
 }else if (document.selection && document.selection.createRange) { //IE
 
   var range = document.selection.createRange()
   txt = range.text
   if (txt == '') {alert(XRomix_Tablify_FullText1); return}
   else{
 
     processText()
	  range.text = txt
     //if (!window.opera) txt = txt.replace(/\r/g,'')
     if (range.moveStart) range.moveStart('character', - txt.length)
     range.select() 
   }
 
 }else // Для браузеров, которые не умеют возвращать выделенный фрагмент, выдаем ошибку
   { alert(XRomix_Tablify_CantWork1); return }
 
 document.documentElement.scrollTop = winScroll // scroll back, for IE/Opera
 
//Здесь производим замену в переменной txt - это отразится на выделенном фрагменте текста 
function processText(){
  var col1hdr=0;
  if (confirm('Вы хотите оформить первую колонку как заголовок?')) col1hdr=1;
 
 
 
  txt = txt.replace(/^\s+|\s+$/g, '')  //Обрезаем пробелы слева и справа
   var arr1=txt.split("\n")
 
   txt='\n{| class="standard"\n'
 
   for (var i=0; i<arr1.length; i++){ 
     txt = txt+"|-\n"
     s1=arr1[i];
	   var arr2=s1.split("\t")
	   for (var j=0; j<arr2.length; j++){
	     var s2=arr2[j];
		 if ((col1hdr==1 && j==0)||i==0){
		   txt = txt+"! "+s2+"\n"
		 }else{
		   txt = txt+"| "+s2+"\n"
		 }  
	   }  
   }  
  txt = txt+"|}"
 
}	
 
  function setWpSummary(){
     var wpSummary = document.getElementById('wpSummary')
	 if(wpSummary){
	    var temp=wpSummary.value;
	    temp=temp.replace(/\/\*.*?\*\// , ""); //комментарии
	    temp=temp.replace(/[\s]*/ , ""); //пробелы
	    if (temp==""){
	       wpSummary.value=wpSummary.value+" - [[User talk:X-romix/tablifikator.js|tablifikator.js]] - таблица из Excel/Calc";
	    }
	 }
  } 
 
}

//Scripts for supporting extension https://www.mediawiki.org/wiki/Extension:HarvardReferences
 
var HrvHighlight = new function(){
 
var state = "";
 
function setBackground(prm_name){
        var anchorTags = document.getElementsByTagName("li");
        for (var i = 0; i < anchorTags.length ; i++){
                var ob1=anchorTags[i];
                if(ob1.className=="harvBackground"){
                        ob1.className = "";
                }
        }
 
        var anchorTags = document.getElementsByTagName("sup");
        for (var i = 0; i < anchorTags.length ; i++){
                var ob1=anchorTags[i];
                if(ob1.id.indexOf("harv_note-"+prm_name)==0){
                        ob1.parentNode.className = "harvBackground";
                }else if(ob1.id.indexOf("harv_note-")==0){
                        ob1.parentNode.className = "";
                }
        }
}
 
 
function setBackground1(prm_name, prm_n){
        var anchorTags = document.getElementsByTagName("sup");
        for (var i = 0; i < anchorTags.length ; i++){
                var ob1=anchorTags[i];
                if(ob1.id.indexOf("harv_note-")==0){
                        ob1.parentNode.className = "";
                }
        }
        var anchorTags = document.getElementsByTagName("li");
        for (var i = 0; i < anchorTags.length ; i++){
                var ob1=anchorTags[i];
                if(ob1.className=="harvBackground"){
                        ob1.className = "";
                }
 
                if(ob1.id.indexOf("cite_note-"+prm_name+"-"+prm_n)==0){
                        ob1.className = "harvBackground";
                }else if(ob1.id.indexOf("cite_note-")==0){
                        ob1.className = "";
                }
        }
 
}
 
function setBackground2(prm_name){
 
        var n="";
 
        var arr=prm_name.split("-");
        var arr1=arr[1].split("_");
 
        if(arr[2]){
                n="cite_note-"+arr1[0]+"-"+arr1[1];
        }else{
                n="cite_note-"+arr[1];
        }
 
        var anchorTags = document.getElementsByTagName("li");
        for (var i = 0; i < anchorTags.length ; i++){
                var ob1=anchorTags[i];
                if(ob1.className=="harvBackground"){
                        ob1.className = "";
                }
                if(ob1.id.indexOf("cite_note-")==0){
                        if(ob1.id==n){
                                ob1.className = "harvBackground";
                        }else{
                                ob1.className = "";
                        }
                }
        }
 
}
 
//when user clicks to harv ref in article text
function whenUserClicksToHarvRef(prm_name, prm_n){
        var anchorTags = document.getElementsByTagName("a");
        for (var i = 0; i < anchorTags.length ; i++){
                var ob1=anchorTags[i];
                if(ob1.className == "harvReferenceLink" || ob1.className == "harvVisitedLink"){
                        ob1.className = "";
                }
        }
 
        var anchorTags = document.getElementsByTagName("sup");
        for (var i = 0; i < anchorTags.length ; i++){
                var ob1=anchorTags[i];
                if(ob1.id=="harv_ref-"+prm_name+"-"+prm_n){
                        ob1.className = "harvVisitedLink";
                }else if(ob1.id=="harv_note-"+prm_name+"-"+prm_n){      
                        ob1.className = "harvReferenceLink";
                }else if(ob1.id=="harv_note-"+prm_name){        
                        ob1.className = "harvReferenceLink";
                }else{  
                        ob1.className = "";
                }
        }
        setBackground(prm_name);
}
 
//when user clicks to big backlink from bibliography
function whenUserClicksToHarvBigBacklink(prm_name){
        var anchorTags = document.getElementsByTagName("a");
        for (var i = 0; i < anchorTags.length ; i++){
                var ob1=anchorTags[i];
                if(ob1.className == "harvReferenceLink" || ob1.className == "harvVisitedLink"){
                        ob1.className = "";
                }
        }
 
        var anchorTags = document.getElementsByTagName("sup");
        for (var i = 0; i < anchorTags.length ; i++){
                var ob1=anchorTags[i];
                if(ob1.className == "harvReferenceLink" || ob1.className == "harvVisitedLink"){
                        ob1.className = "";
                }
 
                if(ob1.id.indexOf("harv_ref-"+prm_name+"-")==0){
                        ob1.className = "harvVisitedLink";
                }else if(ob1.id=="harv_note-"+prm_name){
                        ob1.className = "harvReferenceLink";
                }
        }
 
        setBackground(prm_name);
}
 
//when user clicks to small (number) backlink from bibliography
function whenUserClicksToHarvSmallBacklink(prm_name, prm_n){
        var anchorTags = document.getElementsByTagName("a");
        for (var i = 0; i < anchorTags.length ; i++){
                var ob1=anchorTags[i];
                if(ob1.className == "harvReferenceLink" || ob1.className == "harvVisitedLink"){
                        ob1.className = "";
                }
        }
 
        var anchorTags = document.getElementsByTagName("sup");
        for (var i = 0; i < anchorTags.length ; i++){
                var ob1=anchorTags[i];
                if(ob1.className == "harvReferenceLink" || ob1.className == "harvVisitedLink"){
                        ob1.className = "";
                }
 
                if(ob1.id=="harv_ref-"+prm_name+"-"+prm_n){
                        ob1.className = "harvVisitedLink";
                }else if(ob1.id=="harv_note-"+prm_name){
                        ob1.className = "harvReferenceLink";
                }else if(ob1.id=="harv_note-"+prm_name+"-"+prm_n){
                        ob1.className = "harvReferenceLink";
                }
        }
        setBackground(prm_name);
}
 
function showRefsMode(n){
        var anchorTags = document.getElementsByTagName("sup");
        for (var i = 0; i < anchorTags.length ; i++){
                var ob1=anchorTags[i];
                if(ob1.id.indexOf("harv_ref-")==0){
                        if(n==""){
                                ob1.style.display = "";
                                ob2=ob1.childNodes[0]; 
                                ob3=ob2.childNodes[0]; 
                                if(ob3.nodeValue.indexOf("*")>=0){
                                        t=ob2.title;
                                        ob3.nodeValue=t;
                                };
                        }else if(n=="hide"){
                                ob1.style.display = "none";
                        }else if (n=="short"){
                                ob1.style.display = "";
                                ob2=ob1.childNodes[0]; 
                                ob3=ob2.childNodes[0]; 
                                var t=ob3.nodeValue;
                                if(ob1.childNodes.length>1){
                                        var p=ob1.childNodes[1].nodeValue;
                                        t=t+ob1.childNodes[1].nodeValue;
                                        ob1.childNodes[1].nodeValue="";
                                }
                                ob2.title=t;
                                ob3.nodeValue="* ";
                        }else{  
                                ob1.style.display = "";
                        }
                }
        }
}
 
this.changeFormat = function(){
 
        var s=state;
        if(s==""){
                s="short";
        }else if(s=="short"){   
                s="hide";
        }else if(s=="hide"){    
                s="";
        }
        state=s;
        showRefsMode(s);
}
 
//when user clicks to ref in article text whenUserClicksToRef
function whenUserClicksToRef(prm_name, prm_n){
        var anchorTags = document.getElementsByTagName("sup");
        //alert('"#cite_ref'+prm_name+'-'+prm_n+'"');
        for (var i = 0; i < anchorTags.length ; i++){
                var ob1=anchorTags[i];
                //alert(ob1.id+"==="+ob1.id.indexOf('cite_ref-'));
                if(ob1.id.indexOf("cite_ref-")==0){     
                        if(ob1.id=="cite_ref"+prm_name+"-"+prm_n){
                                ob1.className = "harvVisitedLink";
                        }else{  
                                ob1.className = "harvNone";
                        }
                }else if(ob1.id.indexOf("harv_ref-")==0){       
                        ob1.className = "";
                }else if(ob1.id.indexOf("harv_note-")==0){      
                        ob1.className = "";
                }
        }
        //setBackground(prm_name);
 
        var anchorTags = document.getElementsByTagName("a");
        for (var i = 0; i < anchorTags.length ; i++){
                var ob1=anchorTags[i];
                var h=ob1.href;
                var p=h.lastIndexOf("#");
                if(p==-1) continue;
                var h=h.substring(p, h.length);
                if(h.indexOf("#cite_ref-")==0){ 
                        if(h == "#cite_ref"+prm_name+"-"+prm_n){        
                                ob1.className = "harvReferenceLink";
                        }else{  
                                ob1.className = "";
                        }
                }
        }
        setBackground1(prm_name, prm_n);
}
 
function handler1(id){
        var arr=id.split("-");
        whenUserClicksToHarvRef(arr[1], arr[2]);
}
 
function handler2(id){
        var arr=id.split("-");
        if(arr[2]){
                whenUserClicksToHarvSmallBacklink(arr[1], arr[2]);
        }else{
                whenUserClicksToHarvBigBacklink(arr[1]);
        }
}
 
function handler3(id){
        var arr=id.split("-");
        if(arr[2]){
                whenUserClicksToRef("-"+arr[1], arr[2]);
        }else{
                whenUserClicksToRef("", arr[1]);
        }
}
 
function handler4(id, h){
        var p=h.lastIndexOf("#");
        if(p==-1) return;
        var h=h.substring(p+1, h.length);
        whenUserClicksToBackRef(h);
}
 
//when user clicks to ref in article text whenUserClicksToRef
function whenUserClicksToBackRef(prm_href){
 
        var anchorTags = document.getElementsByTagName("sup");
        for (var i = 0; i < anchorTags.length ; i++){
                var ob1=anchorTags[i];
                if(ob1.className == "harvReferenceLink"){
                        ob1.className = "";
                }
                if(ob1.className == "harvVisitedLink"){
                        ob1.className = "";
                }
                if(ob1.id.indexOf("cite_ref-")==0){     
                        if(ob1.id==prm_href){
                                ob1.className = "harvVisitedLink";
                        }else{  
                                ob1.className = "";
                        }
                }
        }
 
        var anchorTags = document.getElementsByTagName("a");
        for (var i = 0; i < anchorTags.length ; i++){
                var ob1=anchorTags[i];
                var h=ob1.href;
                var p=h.lastIndexOf("#");
                if(p==-1) continue;
                var h=h.substring(p, h.length);
                if(h.indexOf("#cite_ref-")==0){ 
                        if(h == "#"+prm_href){  
                                ob1.className = "harvReferenceLink";
                        }else{  
                                ob1.className = "";
                        }
                }
        }
        setBackground2(prm_href);
}
 
//Main function on load page
this.onLoad = function(){
        if (wgAction=="view"){ //only for view pages
                var ok=0;
                //install events
                var anchorTags = document.getElementsByTagName("a");
                for (var i = 0; i < anchorTags.length ; i++){
                        var ob1=anchorTags[i];
 
                        if(ob1.href.indexOf("#harv_note-")>=0){
                                ob1.onclick= function(){handler1(this.parentNode.id)};
                        }else if(ob1.href.indexOf("#harv_ref-")>=0){
                                ob1.onclick= function(){handler2(this.parentNode.id)};
                                ok=1;
                        }else if(ob1.href.indexOf("#cite_note-")>=0){
                                ob1.onclick= function(){handler3(this.parentNode.id)};
                                ok=1;
                        }else if(ob1.href.indexOf("#cite_ref-")>=0){
                                ob1.onclick= function(){handler4(this.parentNode.id, this.href)};
                                ok=1;
                        }
                }
 
                //install the portlet
                if(ok==1){
                        var hist; var url;
                        if (!(hist = document.getElementById('ca-history') )) return;
                        if (!(url = hist.getElementsByTagName('a')[0] )) return;
                        if (!(url = url.href )) return;
                        addPortletLink('p-cactions', 'javascript:HrvHighlight.changeFormat();',
                                                   'links', 'ca-harvrefs', 'Change format of harvard references', '');
 
                        var s=state;
                        if(s!="") showRefsMode(s);
                }        }
}
 
}//obj
 
//Script is starting here
if (doneOnloadHook) HrvHighlight.onLoad()
else addOnloadHook(HrvHighlight.onLoad);

/*******************/
/*                 */
/*  Cloudpayments  */
/*                 */
/*******************/

document.write('<script src="https://widget.cloudpayments.ru/bundles/cloudpayments"></script>')

$(function () {
    $('#cloudpayments').html('<input value="Оформить регулярное пожертвование" type="button">');
}());


    var payHandler = function () {
        //требуется библиотека jquery
         
    var widget = new cp.CloudPayments();
    
    var data = {};
    data.cloudPayments = {recurrent: { interval: 'Month', period: 1 }}; //создание ежемесячной подписки

    widget.charge({ // options
        publicId: 'pk_0301af503fe072af06e3e048912fc', //id из личного кабинета
        description: 'Ежемесячное пожертвование сайту Ruxpert.ru', //назначение
        amount: 300, //сумма
        currency: 'RUB', //валюта
        invoiceId: '1234567', //номер заказа  (необязательно)
        accountId: 'user@example.com', //идентификатор плательщика (обязательно для создания подписки)
        data: data
    },
    function (options) { // success
        //действие при успешной оплате
    },
    function (reason, options) { // fail
        //действие при неуспешной оплате
    });
    };
    $("#cloudpayments").on("click", payHandler); //кнопка "Оплатить"
       
/*      
        widget.charge({ // options
                publicId: 'pk_0301af503fe072af06e3e048912fc',
                description: 'Оплата в ruxpert.ru',
                amount: 123.00, //сумма
                currency: 'RUB',
                invoiceId: '1234567', //номер заказа
                accountId: 'user@example.com', //плательщик
            },
            function (options) { // success
                //действие при успешном платеже
            },
            function (reason, options) { // fail
                //действие при неуспешном платеже
            });
    };
    $("#cloudpayments").on("click", payHandler); //кнопка "Оплатить"
*/