MediaWiki:Common.js — различия между версиями

Материал из ПокеВики
Перейти к: навигация, поиск
(+скрываемый текст)
Строка 85: Строка 85:
 
     }
 
     }
 
});
 
});
 +
 +
//Скрываемый текст
 +
 +
var NavigationBarHide = '[скрыть]'
 +
var NavigationBarShow = '[показать]'
 +
 +
var hasClass = (function (){
 +
var reCache = {}
 +
return function (element, className){
 +
  return (reCache[className] ? reCache[className] : (reCache[className] = new RegExp("(?:\\s|^)" + className + "(?:\\s|$)"))).test(element.className)
 +
  }
 +
})()
 +
 +
function collapsibleDivs(){
 +
var navIdx = 0, colNavs = [], i, NavFrame
 +
var divs = document.getElementById('content').getElementsByTagName('div')
 +
for (i=0; NavFrame = divs[i]; i++) {
 +
  if (!hasClass(NavFrame, 'NavFrame')) continue
 +
  NavFrame.id = 'NavFrame' + navIdx
 +
  var a = document.createElement('a')
 +
  a.className = 'NavToggle'
 +
  a.id = 'NavToggle' + navIdx
 +
  a.href = 'javascript:collapseDiv(' + navIdx + ');'
 +
  a.appendChild(document.createTextNode(NavigationBarShow))
 +
  for (var j=0; j < NavFrame.childNodes.length; j++)
 +
    if (hasClass(NavFrame.childNodes[j], 'NavHead'))
 +
      NavFrame.childNodes[j].appendChild(a)
 +
  colNavs[navIdx++] = NavFrame
 +
}
 +
 +
for (i=0; i < navIdx; i++)
 +
  if (hasClass(colNavs[i], 'expanded'))
 +
    collapseDiv(i)
 +
}
 +
 +
function collapseDiv(idx) {
 +
var div = document.getElementById('NavFrame' + idx)
 +
var btn = document.getElementById('NavToggle' + idx)
 +
if (!div || !btn) return false
 +
var isShown = (btn.firstChild.data == NavigationBarHide)
 +
btn.firstChild.data = isShown ? NavigationBarShow : NavigationBarHide
 +
var disp = isShown ? 'none' : 'block'
 +
for (var child = div.firstChild;  child != null;  child = child.nextSibling)
 +
  if (hasClass(child, 'NavPic') || hasClass(child, 'NavContent'))
 +
      child.style.display = disp
 +
}
 +
 +
//вызов функций для скрываемого текста
 +
addOnloadHook(collapsibleDivs)

Версия 00:43, 14 мая 2010

/* Размещённый здесь JavaScript код будет загружаться всем пользователям при обращении к каждой странице */
 function addWikifButton(){
  var toolbar = document.getElementById('toolbar')
  var textbox = document.getElementById('wpTextbox1')
  if (!textbox || !toolbar) return
  var i = document.createElement('img')
  i.src = 'http://upload.wikimedia.org/wikisource/ru/d/d1/Button-wikifikator.png'
  i.alt = i.title = 'Wikificator'
  i.onclick = Wikify
  i.style.cursor = 'pointer'
  toolbar.appendChild(i)
 }
 if (wgAction == 'edit' || wgAction == 'submit'){
 document.write('<script type="text/javascript" src="/index.php?title=MediaWiki:Wikificator.js&action=raw&ctype=text/javascript"><\/script>')
  addOnloadHook(addWikifButton)
 }

//Кнопки быстрого описания правки
 
//список кнопок
function SummaryButtons(){
 var wpSummary = document.getElementById('wpSummary')
 if (!wpSummary || (wpSummary.form.wpSection && wpSummary.form.wpSection.value == 'new')) return
 wpSummaryBtn = document.createElement('span') //global var
 wpSummaryBtn.id = 'userSummaryButtonsA'

// +Рекомендация
 var wpSummaryBtnRec = document.createElement('i')
 wpSummaryBtnRec.appendChild(document.createTextNode('Пожалуйста, если вы не торопитесь, опишите вашу правку подробно: например, не «дополнение», а «+персонажи».'))
 wpSummaryBtnRec.appendChild(document.createElement('br'))
 wpSummaryBtn.appendChild(wpSummaryBtnRec)

 wpSummary.parentNode.insertBefore(wpSummaryBtn, wpSummary.nextSibling)
 wpSummary.parentNode.insertBefore(document.createElement('br'), wpSummary.nextSibling)
 addSumButton('викиф.', 'викификация', 'Произведена викификация')
 addSumButton('оформл.', 'оформление', 'Оформление')
 addSumButton('стиль', 'стилевые правки', 'Стилевые правки')
 addSumButton('орфогр.', 'орфография', 'Поправлена орфография')
 addSumButton('пункт.', 'пунктуация', 'Изменена пунктуация')
// addSumButton('интервики', 'интервики', 'Изменены межъязыковые ссылки (интервики)')
 addSumButton('кат.', 'правка категорий', 'Изменены категории')
 addSumButton('шаб.', 'шаблон', 'Добавлен / изменён шаблон')
 addSumButton('к удал.', 'к удалению', 'Страница предложена к удалению')
 addSumButton('доп.', 'дополнение', 'Добавлены новые сведения')
 addSumButton('иллюстрация', 'иллюстрация', 'Размещена иллюстрация')
 addSumButton('обнов.', 'обновление данных', 'Обновлены устаревшие данные')
 addSumButton('разметка', 'правка разметки', 'Изменение разметки')
}
 
//код вставки кнопок быстрого описания
function addSumButton(name, text, title) {
 var btn = document.createElement('a')
 btn.appendChild(document.createTextNode(name))
 btn.title = title
 btn.onclick = function(){insertSummary(text)}
 wpSummaryBtn.appendChild(btn)
}
 
//код вставки описания
function insertSummary(text) {
 var wpSummary = document.getElementById('wpSummary')
 if (wpSummary.value.indexOf(text) != -1) return 
 if (wpSummary.value.match(/[^,; \/]$/)) wpSummary.value += ','
 if (wpSummary.value.match(/[^ ]$/)) wpSummary.value += ' '
 wpSummary.value += text
}

//вызов функции вставки кнопок быстрого описания правки при загрузке страницы
addOnloadHook(SummaryButtons)

//перемещение ссылок "править" влево, к заголовку секции, для борьбы с багом движка
addOnloadHook(function() {
    if (typeof oldEditsectionLinks != 'undefined' && oldEditsectionLinks)   return;
    var spans = document.getElementsByTagName("span");
    for (var i=0; i<spans.length; i++) {
        var span = spans[i];
        if (span.className != "editsection")    continue;
        span.style.fontSize = "x-small";
        span.style.fontWeight = "normal";
        span.style.styleFloat = "none"; // IE-Fix für die folgende Zeile
        span.style.cssFloat = "none";
        span.style.marginLeft = "0px";
        span.parentNode.appendChild(document.createTextNode(" "));
        span.parentNode.appendChild(span);
    }
});

//Скрываемый текст
 
var NavigationBarHide = '[скрыть]'
var NavigationBarShow = '[показать]'
 
var hasClass = (function (){
 var reCache = {}
 return function (element, className){
   return (reCache[className] ? reCache[className] : (reCache[className] = new RegExp("(?:\\s|^)" + className + "(?:\\s|$)"))).test(element.className)
  }
})()
 
function collapsibleDivs(){
 var navIdx = 0, colNavs = [], i, NavFrame
 var divs = document.getElementById('content').getElementsByTagName('div')
 for (i=0; NavFrame = divs[i]; i++) {
   if (!hasClass(NavFrame, 'NavFrame')) continue
   NavFrame.id = 'NavFrame' + navIdx
   var a = document.createElement('a')
   a.className = 'NavToggle'
   a.id = 'NavToggle' + navIdx
   a.href = 'javascript:collapseDiv(' + navIdx + ');'
   a.appendChild(document.createTextNode(NavigationBarShow))
   for (var j=0; j < NavFrame.childNodes.length; j++)
     if (hasClass(NavFrame.childNodes[j], 'NavHead'))
       NavFrame.childNodes[j].appendChild(a)
   colNavs[navIdx++] = NavFrame
 }

 for (i=0; i < navIdx; i++)
  if (hasClass(colNavs[i], 'expanded'))
     collapseDiv(i)
}
 
function collapseDiv(idx) {
 var div = document.getElementById('NavFrame' + idx)
 var btn = document.getElementById('NavToggle' + idx)
 if (!div || !btn) return false
 var isShown = (btn.firstChild.data == NavigationBarHide)
 btn.firstChild.data = isShown ? NavigationBarShow : NavigationBarHide 
 var disp = isShown ? 'none' : 'block'
 for (var child = div.firstChild;  child != null;  child = child.nextSibling)
   if (hasClass(child, 'NavPic') || hasClass(child, 'NavContent')) 
      child.style.display = disp
}

//вызов функций для скрываемого текста
addOnloadHook(collapsibleDivs)