Набла:MediaWiki:Common.js/edit.js
Материал из Справочника наблюдателя
Common.js/edit.js ? local • db • ext | загружается из {{ Common.js}} , если задано действие action=edit или action=submit |
× // Helper function for toolbar buttons
function wgImg ( img ) {
return '//upload.wikimedia.org/wikipedia/' + img;
}
function createFuncBtn ( id, func, img, tip ) {
$( '<img id="' + id + '" src="' + wgImg( img ) + '" style="cursor:pointer" ' +
'title="' + tip + '" alt="' + tip.substr( 0, 3 ) + '" />' )
.appendTo( '#gadget-toolbar' )
.click( func );
}
// Toolbar section for gadgets
if ( mw.user.options.get( 'usebetatoolbar' ) ) {
var gTlbLoc = '#wikiEditor-ui-toolbar';
mw.util.addCSS( '#gadget-toolbar img { padding:2px; }' +
'#gadget-toolbar { height:26px; margin:3px; }' );
$.when(
mw.loader.using( 'ext.wikiEditor.toolbar' ),
$.ready
).then( function() {
$( '#wpTextbox1' ).wikiEditor( 'addToToolbar', {
'section': 'main',
'groups': {
'gadgets': {}
}
} );
var $groupGadgets = $( '#wikiEditor-section-main .group-gadgets' ),
$groupFormat = $( '#wikiEditor-section-main .group-format' );
if ( $groupGadgets.length && $groupFormat.length ) {
$groupGadgets.insertBefore( $groupFormat );
}
} );
} else if ( document.getElementById( 'toolbar' ) ) {
var gTlbLoc = '#toolbar';
importMW( 'ToolbarOld' );
} else {
var gTlbLoc = '#editform';
importMW( 'ToolbarNone' );
}
function gToolbar() {
if ( !document.getElementById( 'gadget-toolbar' ) ) {
var $where = $( gTlbLoc );
if ( !$where.length ) {
return; //beta toolbar not ready yet
}
$( '<div id="gadget-toolbar" style="float:left" />' ).prependTo( $where );
}
for ( var id in mwCustomEditButtons ) {
var b = mwCustomEditButtons[id];
if ( !b.length ) {
continue;
}
createFuncBtn( id, b[0], b[1], b[2] );
delete mwCustomEditButtons[id];
}
}
$( function() {
gToolbar();
setTimeout( gToolbar, 2000 );
setTimeout( gToolbar, 6000 );
} );
// Summary buttons
function insertSummary ( txt ) {
if ( typeof txt !== 'string' ) {
txt = this.title;
}
var vv = $( '#wpSummary' ).val();
if ( vv.indexOf( txt ) !== -1 ) {
return;
}
if ( /[^,; \/]$/.test( vv ) ) {
vv += ',';
}
if ( /[^ ]$/.test( vv ) ) {
vv += ' ';
}
$( '#wpSummary' ).val( vv + txt );
}
function addSumButton ( btn, txt ) {
$( '<a title="' + txt + '">' + btn + '</a>' )
.appendTo( '#userSummaryButtonsA' )
.click( insertSummary );
}
$( function() {
var frm = document.getElementById( 'editform' );
if ( !mw.config.get( 'wgArticleId' ) || !frm || $( frm.wpSection ).val() === 'new' ) {
return;
}
mw.util.addCSS( '\
input#wpSummary { margin-bottom: 0 }\
#userSummaryButtonsA a { background:#cef; border:1px solid #adf; padding:0 2px;\
margin:0 2px;cursor:pointer; font-size:86%; color:#666 }\
#userSummaryButtonsA a:hover { background:#bdf; color:black; text-decoration:none }' );
$( '<div id=userSummaryButtonsA />' ).insertAfter( '#wpSummary' );
$.each(
[
'викиф|икация', 'оформл|ение', 'стил|евые правки', 'орфогр|афия',
'пункт|уация', 'ответ', 'комм|ентарий', 'кат|егория', 'шаб|лон',
'к удал|ению', 'иллюстрация', 'источ|ники', 'запр|ос источника',
'доп|олнение', 'уточн|ение', 'обнов|ление данных', 'закр|ыто', 'итог'
],
function ( i, s ) {
addSumButton( s.replace( /\|.*/, '' ), s.replace( /\|/, '' ) );
}
);
} );
// Wikificator
importMW( 'Wikificator' );
// Sig reminder
if ( mw.config.get( 'wgNamespaceNumber' ) % 2 !== 0 ) { // szr
$( function () {
var cp = document.getElementById( 'editpage-copywarn' ),
wpSave = document.getElementById( 'wpSave' );
if ( !cp || !wpSave ) {
return;
}
// FIXME: Use of "insertTags" is deprecated. Use mw.toolbar.insertTags instead.
var ins = ' <a href=\'javascript:insertTags(" ~~\~~","","")\'>~~\~~</a>';
cp.innerHTML += ' Не забудьте добавить к вашему сообщению подпись с помощью' + ins;
// szr if ( $.inArray( 'autoconfirmed', mw.config.get( 'wgUserGroups' ) ) !== -1 && !window.sigWarning ) {
// return;
// }
//unreg/new users only
var warningDone = false;
wpSave.onclick = function() {
try {
if ( warningDone || document.editform.wpTextbox1.value.indexOf( '~~\~~' ) !== -1 ) {
return true;
}
warningDone = true;
cp.innerHTML = 'Пожалуйста, <b>подпишитесь</b>, добавив в конце' +
' своего сообщения' + ins;
cp.style.background = '#FFD080';
cp.style.border = '1px solid orange';
return false;
} catch ( e ) {
return true;
}
};
} );
}
// Hack for Opera 11.6
if ( window.opera && /11\.6[01]/.test( window.opera.version() ) ) {
$( '#wpTextbox1' )
.mousedown( function() {
this.sT = this.scrollTop;
} )
.click( function() {
if ( this.scrollTop === 0 ) {
this.scrollTop = this.sT;
}
} );
}× | |
× /* Any JavaScript here will be loaded for all users on every page load. */ | |
ToolbarOld.js ? local • db • ext | |
× mw.util.addCSS( '#gadget-toolbar { white-space:nowrap; } \
#gadget-toolbar img { height:20px; background-color:#bce; border:1px outset #bce; margin-right:1px; }' );
mw.loader.using( 'mediawiki.toolbar', function() {
mw.toolbar.addButtons( [
{
speedTip: 'Перенаправление',
imageFile: wgImg( 'ru/1/1d/Button_redirect_rus.png' ),
tagOpen: '#REDIRECT [[',
sampleText: 'Название целевой страницы',
tagClose: ']]'
},
{
speedTip: 'Категория',
imageFile: wgImg( 'commons/3/3c/Button_cat_ru.png' ),
tagOpen: '[\[Категория:',
sampleText: '',
tagClose: ']]\n'
},
{
speedTip: 'Комментарий',
imageFile: wgImg( 'en/3/34/Button_hide_comment.png' ),
tagOpen: '<!-- ',
sampleText: 'Комментарий',
tagClose: ' -->'
},
{
speedTip: 'Развёрнутая цитата',
imageFile: wgImg( 'en/f/fd/Button_blockquote.png' ),
tagOpen: '<blockquote>\n',
sampleText: 'Развёрнутая цитата одним абзацем',
tagClose: '\n</blockquote>'
},
{
speedTip: 'Вставить таблицу',
imageFile: wgImg( 'en/6/60/Button_insert_table.png' ),
tagOpen: '{| class="wikitable"\n|',
sampleText: '-\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',
tagClose: '\n|}'
},
{
speedTip: 'Сноска',
imageFile: wgImg( 'commons/7/79/Button_reflink.png' ),
tagOpen: '<ref\>',
sampleText: 'Вставьте сюда текст сноски',
tagClose: '</ref>'
}
] );
setTimeout( _thumb, 2000 );
function _thumb() {
$( '#mw-editbutton-image' )
.off( 'click' )
.click( function() {
mw.toolbar.insertTags( '[[Файл:', '|thumb]]', 'Example.jpg' );
return false;
})
}
});
mw.log.deprecate( window, 'addCustomButton', function ( i, t, o, c, s ) {
mw.toolbar.addButton( wgImg( i ), t, o, c, s );
}, 'Use mw.toolbar.addButton instead.' );× | |
ToolbarNone.js ? local • db • ext | |
× mw.util.addCSS('#gadget-toolbar img {border:1px outset gray; background:#ddd; margin:2px; height:22px}') | |
Edittools ? local • db • ext | |
× <!-- Расположенный здесь текст будет показываться под формой редактирования и формой загрузки. -->{{#switch:{{NAMESPACE}}
| {{ns:0}} =<!-- <div id{{=}}"editpage-copywarn2" style{{=}}"padding:3px; border:1px solid #cc0000; background:#fff0f0; margin-top:1px; font-size:90%; line-height:1.4;"> Будьте точны в формулировках! Помните, что ваши слова могут быть восприняты другими как руководство к действию. ''Не пользуйтесь статьями основного пространства для тестирования и изучения возможностей редактирования, используйте, пожалуйста, для этого [[Project:Песочница|«песочницу»]]. См. также [[Project:Как править статью]]''</div> -->
| {{ns:100}} = <div id{{=}}"editpage-copywarn2" style{{=}}"padding:3px; border:1px solid #cc0000; background:#fff0f0; margin-top:1px; font-size:90%; line-height:1.4;"> Этот материал является текстом нормативного акта. Пожалуйста, будьте аккуратны. Для тестирования используйте [[Project:Песочница|«песочницу»]].</div>}}
<div id="editpage-specialchars" style="margin-top:1px;border:1px solid #aaa;padding:2px" class="unicode">
<span style="border-bottom:1px dotted gray; cursor:help" title="Эти ссылки служат для быстрой вставки разметки в окно редактирования"><small>Быстрая вставка</small></span>: <span style="font-size:1.3em">
<charinsert> «+» „+“ — … |</charinsert> </span>
<charinsert>{{+}} [+] [[|+]] <nowiki> <br /></nowiki> <nowiki>&</nowiki>nbsp;</charinsert>
<small><charinsert><nowiki>#REDIRECT [[</nowiki>+]]</charinsert>
<charinsert>[[Категория:+]] {{DEFAULTSORT:+}} [[Участник:+]]</charinsert>{{#switch:{{NAMESPACE}}
| {{ns:10}} = <charinsert>{{{+}}}</charinsert>
}}
<div style="font-size:smaller;">
<charinsert><nowiki>== + ==</nowiki></charinsert>
<charinsert><nowiki>=== + ===</nowiki></charinsert>
<charinsert><nowiki>== См. также ==</nowiki></charinsert>
<charinsert><nowiki>== Ссылки ==</nowiki></charinsert>
<charinsert><nowiki>== Примечания == {{примечания}}</nowiki></charinsert>
<charinsert> <ref>+</ref></charinsert>
<charinsert><nowiki><ref name=""></nowiki>+</ref></charinsert>
<charinsert><nowiki><references /></nowiki></charinsert>
<charinsert>{{примечания}}</charinsert>
<charinsert><nowiki><noinclude>{{подст:Ревизия| <!-- оценка: 1, 3 или 5 --> + | <!-- комментарий --> }}</noinclude></nowiki></charinsert>
<charinsert><>+</> <nowiki><!-- +--></nowiki> <u>+</u> <s>+</s> <small>+</small> <big>+</big> <sub>+</sub> <sup>+</sup> <blockquote>+</blockquote> <math>+</math> <gallery>+</gallery> <tt>+</tt> <code>+</code> <nowiki><syntaxhighlight lang=""></nowiki>+</syntaxhighlight> <pre>+</pre> <nowiki>+</nowiki> <includeonly>+</includeonly> <noinclude>+</noinclude></charinsert>
<charinsert>__NOTOC__</charinsert>
<charinsert>__TOC__</charinsert>
<charinsert>__FORCETOC__</charinsert>
<charinsert>{{Цитата|}} +{{Цитата|конец}}</charinsert>
<charinsert>{{ФЗГ|+}}</charinsert>
<charinsert>{{Маркер|+}}</charinsert>
</div>
<small>Символы:</small>
<charinsert>‘ “ ’ ” ~ # @ § ¶ № • · ← ↖ ↑ ↗ → ↘ ↓ ↙ ↔ ↕ ¡ ¿ \ ½ ¼ ¾ ≈ ≠ ± − × ÷ ° ^ ¹ ² ³ € £ ¥ $ ¢ ₪ † ‡ © ® ™</charinsert>
<span title="Знак ударения, ставится после ударной гласной"><charinsert> {{подст:ударение}}</charinsert></span>
<small>Греческий алфавит:</small>
<charinsert> Α α Β β Γ γ Δ δ Ε ε Ζ ζ Η η Θ θ Ι Ϊ ι ϊ Κ κ Λ λ Μ μ Ν ν Ξ ξ Ο ο Π π Ρ ρ Σ σ ς Τ τ Υ Ϋ υ ϋ Φ φ Χ χ Ψ ψ Ω ω </charinsert>
</div>× | |
× <!-- Расположенный здесь текст будет показываться под формой редактирования и формой загрузки. --> | |
Wikificator.js ? local • db • ext | ru:ВП:Викификатор, ru:ВП:Викификатор/Инструкция по установке |
× var wmCantWork = 'Викификатор не может работать в вашем браузере',
wmFullText = 'Викификатор обработает ВЕСЬ текст на этой странице. Продолжить?',
wmTalkPage = 'Викификатор не обрабатывает страницы обсуждения целиком.\n\nВыделите ваше сообщение — обработано будет только оно';
window.wfPlugins = window.wfPlugins || [];
function Wikify() {
'use strict';
var txt = '',
hidden = [],
wpTextbox1 = document.editform.wpTextbox1,
winScroll = document.documentElement.scrollTop;
// FUNCTIONS
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( new RegExp( '<' + tag + '( [^>]+)?>[\\s\\S]+?<\\/' + tag + '>', 'gi' ) );
}
function hideTemplates() {
var pos = 0,
stack = [],
tpl,
left,
right;
while ( true ) {
left = txt.indexOf( '{{', pos );
right = txt.indexOf( '}}', pos );
if ( left === -1 && right === -1 && !stack.length ) {
break;
}
if ( left !== -1 && ( left < right || right === -1 ) ) {
stack.push( left );
pos = left + 2;
} else {
left = stack.pop();
if ( typeof left === 'undefined' ) {
if ( right === -1 ) {
pos += 2;
continue;
} else {
left = 0;
}
}
if ( right === -1 ) {
right = txt.length;
}
right += 2;
tpl = txt.substring( left, right );
txt = txt.substring( 0, left ) +
'\x01' + hidden.push( tpl ) + '\x02' +
txt.substr( right );
pos = right - tpl.length;
}
}
}
function processText() {
var i,
u = '\u00A0'; // unbreakable space
if ( mw.config.get('wgNamespaceNumber') % 2 ) { // 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( 'syntaxhighlight' );
hideTag( 'templatedata' );
hideTag( 'code' );
hideTag( 'tt' );
hideTag( 'graph' );
hideTag( 'hiero' );
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' );
hideTemplates();
hide( /^[ \t].*/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( /(\[\[:?)(module|модуль):( *)/ig, '$1Модуль:' );
r( /(\[\[:?)(template|шаблон):( *)/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( /(su[pb]>)-(\d)/g, '$1−$2' ); // ->minus
r( /<(b|strong)>(.*?)<\/(b|strong)>/gi, "'''$2'''" );
r( /<(i|em)>(.*?)<\/(i|em)>/gi, "''$2''" );
r( /^<hr ?\/?>/gim, '----' );
r( /<[\/\\]?(hr|br)( [^\/\\>]+?)? ?[\/\\]?>/gi, '<$1$2 />' );
r( /[\u00A0 \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\u00A0]+/g, ' ' ); // double spaces
// Entities etc. → Unicode chars
if ( mw.config.get('wgNamespaceNumber') !== 10 ) {
r( /&(#x[0-9a-f]{2,4}|#[0-9]{3,4}|[0-9a-z]{2,8});/gi, function ( s ) {
var t = document.createElement( 'textarea' );
t.innerHTML = s;
var c = t.value;
if ( c.length === 1 && c.charCodeAt( 0 ) > 127 ) {
return c;
}
return s;
});
}
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( /([\wа-яА-ЯёЁ])'([\wа-яА-ЯёЁ])/g, '$1’$2' ); //'
r( /№№/g, '№' );
// 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( /(\s)-{1,3} /g, '$1— ' ); // hyphen -> —
r( /(\d)--(\d)/g, '$1—$2' ); // -> —
r( /(\s)-(\d)/g, '$1−$2' ); // hyphen -> minus
// Year and century ranges
r( /(\(|\s)([12]?\d{3})[\u00A0 ]?(-{1,3}|—) ?([12]?\d{3})(?![\wА-ЯЁа-яё]|-[^ех]|-[ех][\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' );
// szr Hyphens to Minuses
r( /([0-9A-ZА-ЯЁ])-([0-9A-ZА-ЯЁ])/g, '$1−$2' ); // szr
// 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?э(\.|(?=\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)[\u00A0 \t](-{1,3}|—)[\u00A0 \t](\S)/g, '$1' + u + '— $3' );
r( /(\S) +N[\u00A0 ]*(\d)/g, '$1 №' + u + '$2' ); // szr N → №
r( /([А-ЯЁ]\.) ?([А-ЯЁ]\.) ?([А-ЯЁ][а-яё])/g, '$1' + u + '$2' + u + '$3' );
r( /([а-я])\.([0-9])/g, '$1' + u + '$2' ); // szr ст.9 → ст. 9
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 % // szr
r( /([^%\/\wА-Яа-яЁё]\d+?(?:[\.,]\d+?)?) ?([%‰])(?!-[А-Яа-яЁё])/g, '$1' + '$2' ); //5% // szr
r( /(\d) ([%‰])(?=-[А-Яа-яЁё])/g, '$1$2' ); //5%-й
r( /([№§])(\s*)(\d)/g, '$1' + u + '$3' );
// inside ()
r( /\( +/g, '(' );
r( / +\)/g, ')' );
// Temperature
r( /([\s\d=≈≠≤≥<>—("'|])([+±−\-]?\d+?(?:[.,]\d+?)?)(([ °\^*]| [°\^*])(C|F))(?=[\s"').,;!?|\x01])/gm, '$1$2' + u + '°$5' ); //'
// Dot → comma in numbers
// r( /(\s\d+)\.(\d+[\u00A0 ]*[%‰°×])/gi, '$1,$2' ); // szr
r( /(\s\d+),(\d+[\u00A0 ]*[%‰°×])/gi, '$1.$2' ); // szr comma → dot
// Plugins
for ( i in window.wfPlugins ) {
if ( window.wfPlugins.hasOwnProperty( i ) ) {
window.wfPlugins[i]( txt, r );
}
}
// "" → «»
for ( 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 ( 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 processAllText() {
txt = wpTextbox1.value;
processText();
r( /^[\n\r]+/, '' );
wpTextbox1.value = txt;
txt = '';
if ( window.auto_comment &&
window.insertSummary &&
!document.editform.wpSection.value
) {
window.insertSummary( 'викификатор' );
}
}
// Check regexp support
try {
txt = 'ая'.replace( /а/g, 'б' ).replace( /б(?=я)/, 'в' );
} catch ( e ) {}
if ( txt !== 'вя' ) {
alert( wmCantWork );
return;
}
wpTextbox1.focus();
// Modern browsers
if ( typeof wpTextbox1.selectionStart !== 'undefined' ) {
var textScroll = wpTextbox1.scrollTop,
startPos = wpTextbox1.selectionStart,
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;
// IE
} else if ( document.selection && document.selection.createRange ) {
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();
}
// Other browsers
} else if ( confirm( wmFullText ) ) {
processAllText();
}
document.documentElement.scrollTop = winScroll; // scroll back, for IE/Opera
}
// Toolbar buttons
var addOldToolbarButton = function() {
var $toolbar = $( '#gadget-toolbar' );
if ( !$toolbar.length ) {
$toolbar = $( '#toolbar' );
}
$( '<div>' )
.addClass( 'mw-toolbar-editbutton' )
.attr( 'alt', 'Викификатор' )
.attr( 'title', 'Викификатор — автоматический обработчик текста' )
.css( {
'width': '69px',
'backgroundImage': 'url(//upload.wikimedia.org/wikipedia/commons/3/38/Button_wikify.png)'
} )
.appendTo( $toolbar )
.on( 'click', Wikify );
};
var addNewToolbarButton = function() {
$( '#wpTextbox1' ).wikiEditor( 'addToToolbar', {
'section': 'main',
'group': 'gadgets',
'tools': {
'wikif': {
label: 'Викификатор — автоматический обработчик текста',
type: 'button',
icon: '//upload.wikimedia.org/wikipedia/commons/0/06/Wikify-toolbutton.png',
action: {
type: 'callback',
execute: function() {
Wikify();
}
}
}
}
} );
};
if ( $.inArray( mw.config.get( 'wgAction' ), [ 'edit', 'submit' ] ) !== -1 ) {
mw.loader.using( [ 'user.options', 'jquery.textSelection' ], function () {
if ( mw.user.options.get( 'usebetatoolbar' ) ) { // szr убрал === 1
if ( mw.user.options.get( 'showtoolbar' ) === 1 ) {
$.when(
mw.loader.using( 'ext.wikiEditor.toolbar' ),
$.ready
).then( addNewToolbarButton );
}
} else {
mw.loader.using( 'mediawiki.toolbar', function() {
$( addOldToolbarButton );
});
}
} );
}× | |
Gadget-preview.js ? local • db • ext | См. также [[en:User:js/ajaxPreview.js]] |
× window.ajaxPreviewMsg = {
emptydiff: 'Изменений нет.',
difftip: 'Нажмите кнопку с зажатым Shift для сравнения с редактируемой старой версией',
diff2old: 'Это сравнение со старой версией',
viewtip: 'Нажмите кнопку с зажатым Shift для обновления также категорий и шаблонов (<a href="/wiki/Википедия:Гаджеты/Ajax-предпросмотр#preview" target="_blank">подробнее</a>)'
};
if ( /^(edit|submit)$/.test( mw.config.get( 'wgAction' ) ) &&
mw.config.get( 'wgCanonicalNamespace' ) !== 'Special'
) {
$( function () {
ajaxPreviewPos = window.ajaxPreviewPos || 'right';
if ( ajaxPreviewPos !== 'bottom' ) {
var previewToolbar = $( '<div>' )
.addClass( 'ajaxPreview-toolbar' )
.css( 'float', ajaxPreviewPos );
if ( mw.user.options.get( 'usebetatoolbar' ) || $.wikiEditor ) {
$( '#wikiPreview' ).after( previewToolbar );
} else {
var el = $( '#toolbar' );
if ( el.length ) {
el.prepend( previewToolbar );
} else {
$( '#editform' ).before( previewToolbar );
}
}
}
addBtn( window.ajaxPreviewButton, 'wpPreview', window.ajaxPreviewKey || 'p' );
addBtn( window.ajaxDiffButton, 'wpDiff', window.ajaxDiffKey || 'v' );
var wkPreview = $( '#wikiPreview' ),
frm = document.editform;
if ( !wkPreview.length || !frm ) return;
$( '#wpPreviewLive, #wpDiffLive' ).click( run );
var isDiff, isFullPreview, btn, oldHeight, htm, parse, scriptTip;
var mm = window.ajaxPreviewMsg;
function run( e ) {
btn = $( this );
if ( !btn.data( 'orig-value' ) ) {
btn.data( 'orig-value', btn.val() );
}
btn.val( '…' );
$( '#wikiDiff, #newarticletext' ).hide();
oldHeight = wkPreview.height();
scriptTip = '';
$( '#wikiPreview' ).addClass( 'ajaxPreview-preview-loading' );
$( 'body' ).addClass( 'ajaxPreview-body-loading' );
var data, ext;
var txt = $( '#wpTextbox1' ).textSelection( 'getContents' );
if ( frm.wpSection.value == 'new' && wpSummary.value ) {
txt = '== ' + wpSummary.value + ' ==\n\n' + txt;
}
isDiff = btn.attr( 'id' ) === 'wpDiffLive';
if ( isDiff ) {
data = {
action: 'compare',
fromtitle: mw.config.get( 'wgPageName' ).replace( /_/g, ' ' ),
toslots: 'main',
'totext-main': txt,
topst: true,
prop: 'diff',
formatversion: 2,
};
if ( frm.wpSection.value ) {
if ( frm.wpSection.value === 'new' ) {
data.fromslots = 'main';
data['fromtext-main'] = '';
} else {
// API says "fromsection" is deprecated, but if specifying "fromslots", it
// requires "fromslots-text" while we have "fromtitle".
data.fromsection = frm.wpSection.value;
}
}
// Can compare to currently edited older version, not to the latest
if ( frm.oldid.value && frm.oldid.value != '0' ) {
if ( e.shiftKey ) {
data.fromrev = frm.oldid.value;
scriptTip = mm.diff2old;
} else {
scriptTip = mm.difftip;
}
}
} else { // Preview
if ( frm.wpSection.value ) {
txt += '<br><references />';
}
data = {
action: 'parse',
title: mw.config.get( 'wgPageName' ),
text: txt,
pst: true,
summary: frm && frm.wpSummary ? frm.wpSummary.value : '',
disableeditsection: true,
disablelimitreport: true,
prop: [ 'text', 'modules', 'jsconfigvars' ],
formatversion: 2,
};
if ( window.ajaxPreviewFull || e.shiftKey ) {
isFullPreview = true;
data.prop.push( 'categorieshtml', 'templates' );
} else {
isFullPreview = false;
scriptTip = mm.viewtip;
}
}
new mw.Api().post( data, {
// Switch to multipart to decrease sent data volume on non-Latin languages
contentType: 'multipart/form-data',
} ).then( receive, receive );
}
function receive() {
var resp = typeof arguments[ 0 ] === 'string' ? arguments[ 1 ] : arguments[ 0 ];
$( '#wikiPreview' ).removeClass( 'ajaxPreview-preview-loading' );
$( 'body' ).removeClass( 'ajaxPreview-body-loading' );
btn.val( btn.data( 'orig-value' ) );
if ( window.currentFocused ) {
currentFocused.focus();
}
htm = '';
try {
if ( isDiff ) {
htm = resp && resp.compare && resp.compare.body;
if ( htm ) {
htm = '<table class="diff">' +
'<col class="diff-marker"><col class="diff-content">' +
'<col class="diff-marker"><col class="diff-content">' +
htm +
'</table>';
} else {
if ( htm === '' ) {
htm = mm.emptydiff;
} else {
if ( resp && resp.error && resp.error.code === 'missingtitle' ) {
htm = 'Страница ещё не создана — не с чем показывать разницу.';
} else {
htm = 'Ошибка при получении разницы версий.';
}
}
}
} else {
parse = resp.parse;
if (parse) {
htm = parse.text;
if ( frm.wpSection.value !== 'new' ) {
var $sum = $( frm ).find( '.mw-summary-preview' ); // Create summary preview if needed
if ( !$sum.length ) {
$sum = $( '<div>' )
.addClass( 'mw-summary-preview' )
.insertAfter( '#wpSummary' );
}
$sum.html( '<span class="comment">' + parse.parsedsummary + '</span>' );
}
if ( parse.modules ) {
mw.loader.load(
parse.modules.concat( parse.modulescripts, parse.modulestyles )
);
mw.config.set(parse.jsconfigvars);
}
} else {
htm = 'Ошибка при получении преобразованного кода.';
}
}
} catch ( err ) {
htm = 'Ошибка: ' + err;
}
htm =
(
scriptTip ?
'<span class="ajaxPreview-shiftTip">' + scriptTip + '</span>' :
''
) +
'<h3 id="ajaxPreview-label">' + btn.val() + '</h3>' +
'<hr>' +
htm;
wkPreview.html( htm ).show();
// New content is available, fire the hook
mw.hook( 'wikipage.content' ).fire( wkPreview );
if ( window.ajaxPreviewScrollTop ) {
wkPreview[ 0 ].scrollIntoView();
} else {
$( window ).scrollTop( $( window ).scrollTop() + wkPreview.height() - oldHeight );
}
if ( !isDiff ) {
finalizePreview( parse );
}
}
function finalizePreview( parse ) {
// Demonstrate that hiddencats will not be updated
$( '.hiddencats' ).addClass( '.ajaxPreview-outdated' );
if ( $( '.tex' ).length && mw.user.options.get( 'math' ) === '6' ) { // 6 — mathjax mode
mw.loader.using( 'ext.math.mathjax.enabler', function () {
$( '#wikiPreview' ).renderTex();
} );
}
if ( window.ajaxPreviewExec ) {
ajaxPreviewExec( wkPreview[ 0 ] );
}
// !!! [[mediazilla:36476]]
if ( $( 'body' ).hasClass( 'ltr' ) ) {
$( '#wikiPreview' ).addClass( 'mw-content-ltr' );
}
if ( !isFullPreview ) {
$( '.templatesUsed, #p-lang, #catlinks' ).addClass( 'ajaxPreview-outdated' );
// $( '#p-lang, #catlinks' ).attr( 'title', 'Not updated by latest preview' );
return;
}
// Otherwise update other areas
$( '.templatesUsed, #p-lang, #catlinks' ).removeClass( 'ajaxPreview-outdated' );
$( '#catlinks' ).replaceWith( parse.categorieshtml );
htm = '';
var tt = parse.templates;
for ( var i = 0; i < tt.length; i++ ) {
htm += '<li><a href="/wiki/' + encodeURIComponent( tt[ i ].title ) + '"' +
( tt[ i ].exists ? '' : ' class="new"' ) +
'>' + tt[ i ].title + '</a></li>';
}
$( '#editform' )
.find( 'div.templatesUsed' )
.find( 'ul' )
.html( htm );
}
function addBtn( name, id, akey ) {
var btnOld = $( '#' + id );
if ( !btnOld.length ) {
return;
}
var btn = $( '<input> ')
.attr( 'type', 'button' )
.attr( 'id', id + 'Live' )
.attr( 'title', btnOld.val() );
if ( ajaxPreviewPos === 'bottom' ) {
btn.val( '>' ).insertAfter( '#' + id + 'Widget' );
} else {
if ( !name ) { // Extract last word from standard buttons
name = btnOld.val();
var i = name.lastIndexOf( ' ' ) + 1;
name = name.substring( i, i + 1 ).toUpperCase() + name.substring( i + 1 );
}
btn
.val( name )
.addClass( 'ajaxPreview-button' )
.appendTo( previewToolbar );
}
if ( akey ) { // Reassign access key
if ( btnOld.attr( 'accesskey' ) === akey ) {
btnOld
.removeAttr( 'accesskey' )
.updateTooltipAccessKeys( '' );
}
btn
.attr( 'accesskey', akey )
.updateTooltipAccessKeys( akey );
}
btn.width( btn.width() );
}
} );
}× | |
Gadget-charinsert.js ? local • db • ext | См. также {{en: Gadget-charinsert-core.js}} |
× // copied from [[mw:User:Alex Smotrov/edittools.js]], modified for use on the English Wikipedia.
// enableForAllFields() feature from [[commons:MediaWiki:Edittools.js]]
// combined and modified by [[User:Ilmari Karonen]]
// Configuration (to be set from [[Special:MyPage/common.js]]):
// window.charinsertCustom – Object. Merged into the default charinsert list. For example, setting
// this to { Symbols: '‽' } will add the interrobang to the end of the Symbols section.
// window.editToolsRecall – Boolean. Set true to create a recall switch.
// window.charinsertDontMove – Boolean. Set true to leave the box in its default position, rather
// than moving it above the edit summary.
// window.updateEditTools() – Function. Call after updating window.charinsertCustom to regenerate the
// EditTools window.[[|{{[[≈≠≤≥−−−—]]}}]]
window.updateEditTools = function () {
};
jQuery( document ).ready( function ( $ ) {
var EditTools = {
// Entries prefixed with ␥ (U+2425 SYMBOL FOR DELETE FORM TWO) will not appear in the article namespace (namespace 0).
// Please make any changes to [[MediaWiki:Edittools]] as well, however, instead of using the ␥ symbol, use {{#ifeq:{{NAMESPACE}}|{{ns:0}}| | }}.
charinsert: {
'Стандарт': ' — «+» „+“ ≈ ≠ ≤ ≥ ± − × ÷ ← → · § [\[|+]] {\{+}} | ␥Подписаться: ␥~~\~~ Сноска: <ref>+</ref>',
'Разметка': 'Вставить: — «+» „+“ ≈ ≠ ≤ ≥ ± − × ÷ ← → · § ␥~~\~~ <ref>+</ref> Wiki_markup: {\{+}} {\{\{+}}} | [+] [\[+]] [\[Категория:+]] #REDIRECT.[\[+]] &nb'+'sp; <s>+</s> <sup>+</sup> <sub>+</sub> <code>+</code> <pre>+</pre> <blockquote>+</blockquote> <ref.name="+"_/> {\{#tag:ref|+|group="nb"|name=""}} {\{Reflist}} <references./> <includeonly>+</includeonly> <noinclude>+</noinclude> {\{DEFAULTSORT:+}} <nowiki>+</nowiki> <!--.+_--> <span.class="plainlinks">+</span>',
'Symbols': '~ | ¡¿†‡↔↑↓•¶#∞ ‘+’ “+” ‹+› «+» {\{angle.bracket|+}} ¤₳฿₵¢₡₢$₫₯€₠₣ƒ₴₭₤ℳ₥₦№₧₰£៛₨₪৳₮₩¥ ♠♣♥♦ ♭♯♮ ©®™ ◌ {\{Unicode|+}}',
// 'Latin': 'A a Á á À à  â Ä ä Ǎ ǎ Ă ă Ā ā à ã Å å Ą ą Æ æ Ǣ ǣ B b C c Ć ć Ċ ċ Ĉ ĉ Č č Ç ç D d Ď ď Đ đ Ḍ ḍ Ð ð E e É é È è Ė ė Ê ê Ë ë Ě ě Ĕ ĕ Ē ē Ẽ ẽ Ę ę Ẹ ẹ Ɛ ɛ Ə ə F f G g Ġ ġ Ĝ ĝ Ğ ğ Ģ ģ H h Ĥ ĥ Ħ ħ Ḥ ḥ I i İ ı Í í Ì ì Î î Ï ï Ǐ ǐ Ĭ ĭ Ī ī Ĩ ĩ Į į Ị ị J j Ĵ ĵ K k Ķ ķ L l Ĺ ĺ Ŀ ŀ Ľ ľ Ļ ļ Ł ł Ḷ ḷ Ḹ ḹ M m Ṃ ṃ N n Ń ń Ň ň Ñ ñ Ņ ņ Ṇ ṇ Ŋ ŋ O o Ó ó Ò ò Ô ô Ö ö Ǒ ǒ Ŏ ŏ Ō ō Õ õ Ǫ ǫ Ọ ọ Ő ő Ø ø Œ œ Ɔ ɔ P p Q q R r Ŕ ŕ Ř ř Ŗ ŗ Ṛ ṛ Ṝ ṝ S s Ś ś Ŝ ŝ Š š Ş ş Ș ș Ṣ ṣ ß T t Ť ť Ţ ţ Ț ț Ṭ ṭ Þ þ U u Ú ú Ù ù Û û Ü ü Ǔ ǔ Ŭ ŭ Ū ū Ũ ũ Ů ů Ų ų Ụ ụ Ű ű Ǘ ǘ Ǜ ǜ Ǚ ǚ Ǖ ǖ V v W w Ŵ ŵ X x Y y Ý ý Ŷ ŷ Ÿ ÿ Ỹ ỹ Ȳ ȳ Z z Ź ź Ż ż Ž ž ß Ð ð Þ þ Ŋ ŋ Ə ə {\{Unicode|+}}',
// 'Greek': 'ΆάΈέΉήΊίΌόΎύΏώ ΑαΒβΓγΔδ ΕεΖζΗηΘθ ΙιΚκΛλΜμ ΝνΞξΟοΠπ ΡρΣσςΤτΥυ ΦφΧχΨψΩω ᾼᾳᾴᾺὰᾲᾶᾷἈἀᾈᾀἉἁᾉᾁἌἄᾌᾄἊἂᾊᾂἎἆᾎᾆἍἅᾍᾅἋἃᾋᾃἏἇᾏᾇ ῈὲἘἐἙἑἜἔἚἒἝἕἛἓ ῌῃῄῊὴῂῆῇἨἠᾘᾐἩἡᾙᾑἬἤᾜᾔἪἢᾚᾒἮἦᾞᾖἭἥᾝᾕἫἣᾛᾓἯἧᾟᾗ ῚὶῖἸἰἹἱἼἴἺἲἾἶἽἵἻἳἿἷ ῸὸὈὀὉὁὌὄὊὂὍὅὋὃ ῤῬῥ ῪὺῦὐὙὑὔὒὖὝὕὛὓὟὗ ῼῳῴῺὼῲῶῷὨὠᾨᾠὩὡᾩᾡὬὤᾬᾤὪὢᾪᾢὮὦᾮᾦὭὥᾭᾥὫὣᾫᾣὯὧᾯᾧ {\{Polytonic|+}}',
// 'Cyrillic': 'АаБбВвГг ҐґЃѓДдЂђ ЕеЁёЄєЖж ЗзЅѕИиІі ЇїЙйЈјКк ЌќЛлЉљМм НнЊњОоПп РрСсТтЋћ УуЎўФфХх ЦцЧчЏџШш ЩщЪъЫыЬь ЭэЮюЯя ӘәӨөҒғҖҗ ҚқҜҝҢңҮү ҰұҲҳҸҹҺһ ҔҕӢӣӮӯҘҙ ҠҡҤҥҪҫӐӑ ӒӓӔӕӖӗӰӱ ӲӳӸӹӀ ҞҟҦҧҨҩҬҭ ҴҵҶҷҼҽҾҿ ӁӂӃӄӇӈӋӌ ӚӛӜӝӞӟӠӡ ӤӥӦӧӪӫӴӵ ́',
// 'Hebrew': 'אבגדהוזחטיךכלםמןנסעףפץצקרשת ׳ ״ װױײ',
// 'Arabic': ' Transcription: ʾ ṯ ḥ ḫ ẖ ḏ š ṣ ḍ ṭ ẓ ʿ ġ ẗ ا ﺁ ب ت ث ج ح خ د ذ ر ز س ش ص ض ط ظ ع غ ف ق ك ل م ن ه ة و ي ى ء أ إ ؤ ئ',
// 'IPA (English)': 'ˈ ˌ ŋ ɡ tʃ dʒ ʃ ʒ θ ð ʔ iː ɪ uː ʊ ʌ ɜr eɪ ɛ æ oʊ ɒ ɔː ɔɪ ɔr ɑː ɑr aɪ aʊ ə ər ɨ ɵ ʉ {\{angle.bracket|+}} {\{IPAc-en|+}} {\{IPA-en|+}} {\{IPA|+}}',
// 'IPA': 't̪ d̪ ʈɖɟɡɢʡʔ ɸβθðʃʒɕʑʂʐçʝɣχʁħʕʜʢɦ ɱɳɲŋɴ ʋɹɻɰ ʙⱱʀɾɽ ɫɬɮɺɭʎʟ ʍɥɧ ʼ ɓɗʄɠʛ ʘǀǃǂǁ ɨʉɯ ɪʏʊ øɘɵɤ ə ɚ ɛœɜɝɞʌɔ æ ɐɶɑɒ ʰʱʷʲˠˤˀ ᵊ k̚ ⁿˡ ˈˌːˑ t̪ d̪ s̺ s̻ θ̼ s̬ n̥ ŋ̊ a̤ a̰ β̞ ˕ r̝ ˔ o˞ ɚ ɝ e̘ e̙ u̟ i̠ ɪ̈ e̽ ɔ̹ ɔ̜ n̩ ə̆ ə̯ ə̃ ȷ̃ ɫ z̴ ə̋ ə́ ə̄ ə̀ ə̏ ə̌ ə̂ ə᷄ ə᷅ ə᷇ ə᷆ ə᷈ ə᷉ t͡ʃ d͡ʒ t͜ɬ ‿ ˥ ˦ ˧ ˨ ˩ ꜛ ꜜ | ‖ ↗ ↘ k͈ s͎ {\{IPA|+}}',
'Math and logic': '− × ÷ ⋅ ° ∗ ∘ ± ∓ ≤ ≥ ≠ ≡ ≅ ≜ ≝ ≐ ≃ ≈ ⊕ ⊗ ⇐ ⇔ ⇒ ∞ ← ↔ → ≪ ≫ ∝ √ ∤ ≀ ◅ ▻ ⋉ ⋊ ⋈ ∴ ∵ ↦ ¬ ∧ ∨ ⊻ ∀ ∃ ∈ ∉ ∋ ⊆ ⊈ ⊊ ⊂ ⊄ ⊇ ⊉ ⊋ ⊃ ⊅ ∪ ∩ ∑ ∏ ∐ ′ ∫ ∬ ∭ ∮ ∇ ∂ ∆ ∅ ℂ ℍ ℕ ℙ ℚ ℝ ℤ ℵ ⌊ ⌋ ⌈ ⌉ ⊤ ⊥ ⊢ ⊣ ⊧ □ ∠ ⟨ ⟩ {\{frac|+|}} &nb'+'sp; − <math>+</math> {\{math|+}} ° ′ ″'
},
charinsertDivider: "\240",
cookieName: 'edittoolscharsubset',
createEditTools: function ( placeholder ) {
var sel, id;
var box = document.createElement( "div" );
var prevSubset = 0, curSubset = 0;
box.id = "editpage-specialchars";
box.title = 'Click on the character or tag to insert it into the edit window';
// append user-defined sets
if ( window.charinsertCustom ) {
for ( id in charinsertCustom ) {
if ( !EditTools.charinsert[id] ) {
EditTools.charinsert[id] = '';
}
}
}
// create drop-down select
sel = document.createElement( 'select' );
for ( id in EditTools.charinsert ) {
sel.options[sel.options.length] = new Option( id, id );
}
sel.selectedIndex = 0;
sel.style.marginRight = '.3em';
sel.title = 'Choose character subset';
sel.onchange = sel.onkeyup = selectSubset;
box.appendChild( sel );
// create "recall" switch
if ( window.editToolsRecall ) {
var recall = document.createElement( 'span' );
recall.appendChild( document.createTextNode( '↕' ) ); // ↔
recall.onclick = function() {
sel.selectedIndex = prevSubset;
selectSubset();
}
with ( recall.style ) {
cssFloat = styleFloat = 'left';
marginRight = '5px';
cursor = 'pointer';
}
box.appendChild( recall );
}
// load latest selection from cookies
try {
var cookieRe = new RegExp( "(?:^|;)\\s*" + EditTools.cookieName + "=(\\d+)\\s*(?:;|$)" );
var m = cookieRe.exec( document.cookie );
if ( m && m.length > 1 && parseInt( m[1] ) < sel.options.length ) {
sel.selectedIndex = parseInt( m[1] );
}
} catch ( err ) {
// ignore
}
placeholder.parentNode.replaceChild( box, placeholder );
selectSubset();
return;
function selectSubset() {
// remember previous (for "recall" button)
prevSubset = curSubset;
curSubset = sel.selectedIndex;
//save into cookies for persistence
try {
var expires = new Date();
expires.setTime( expires.getTime() + 30 * 24 * 60 * 60 * 1000 ); // + 30 days
document.cookie = EditTools.cookieName + "=" + curSubset + ";path=/;expires=" + expires.toUTCString();
} catch ( err ) {
// ignore
}
//hide other subsets
var pp = box.getElementsByTagName( 'p' ) ;
for ( var i = 0; i < pp.length; i++ ) {
pp[i].style.display = 'none';
}
//show/create current subset
var id = sel.options[curSubset].value;
var p = document.getElementById( id );
if ( !p ) {
p = document.createElement( 'p' );
p.id = id;
if ( id == 'Arabic' || id == 'Hebrew' ) {
p.style.fontSize = '120%';
p.dir = 'rtl';
}
var tokens = EditTools.charinsert[id];
if ( window.charinsertCustom && charinsertCustom[id] ) {
if ( tokens.length > 0 ) {
tokens += ' ';
}
tokens += charinsertCustom[id];
}
EditTools.createTokens( p, tokens );
box.appendChild( p );
}
p.style.display = 'inline';
}
},
createTokens: function ( paragraph, str ) {
var tokens = str.split( ' ' ), token, i, n;
for ( i = 0; i < tokens.length; i++ ) {
token = tokens[i];
n = token.indexOf( '+' );
if ( token.charAt( 0 ) === '␥' ) {
if ( token.length > 1 && mw.config.get( 'wgNamespaceNumber' ) === 0 ) {
continue;
} else {
token = token.substring( 1 );
}
}
if ( token == '' || token == '_' ) {
addText( EditTools.charinsertDivider + ' ' );
} else if ( token == '\n' ) {
paragraph.appendChild( document.createElement( 'br' ) );
} else if ( token == '___' ) {
paragraph.appendChild( document.createElement( 'hr' ) );
} else if ( token.charAt( token.length-1 ) == ':' ) { // : at the end means just text
addBold( token );
} else if ( n == 0 ) { // +<tag> -> <tag>+</tag>
addLink( token.substring( 1 ), '</' + token.substring( 2 ), token.substring( 1 ) );
} else if ( n > 0 ) { // <tag>+</tag>
addLink( token.substring( 0, n ), token.substring( n+1 ) );
} else if ( token.length > 2 && token.charCodeAt( 0 ) > 127 ) { // a string of insertable characters
for ( var j = 0; j < token.length; j++ ) {
addLink( token.charAt( j ), '' );
}
} else {
addLink( token, '' );
}
}
return;
function addLink( tagOpen, tagClose, name ) {
var handler;
var dle = tagOpen.indexOf( '\x10' );
if ( dle > 0 ) {
var path = tagOpen.substring( dle + 1 ).split( '.' );
tagOpen = tagOpen.substring( 0, dle );
var handler = window;
for ( var i = 0; i < path.length; i++ ) {
handler = handler[path[i]];
}
} else {
tagOpen = tagOpen.replace( /\./g,' ' );
tagClose = tagClose ? tagClose.replace( /_/g,' ' ) : '';
handler = new Function(
"evt",
"insertTags('" + tagOpen + "', '" + tagClose + "', ''); evt.preventDefault(); return false;"
);
}
var a = document.createElement( 'a' );
name = name || tagOpen + tagClose;
name = name.replace( /\\n/g,'' );
a.appendChild( document.createTextNode( name ) );
a.href = "#";
$( a ).click( handler );
paragraph.appendChild( a );
addText( ' ' );
}
function addBold( text ) {
var b = document.createElement( 'b' );
b.appendChild( document.createTextNode( text.replace( /_/g,' ' ) ) );
paragraph.appendChild( b );
addText( ' ' );
}
function addText( txt ) {
paragraph.appendChild( document.createTextNode( txt ) );
}
},
enableForAllFields: function () {
if ( typeof( insertTags ) != 'function' || window.WikEdInsertTags ) {
return;
}
// insertTags from the site-wide /skins-1.5/common/edit.js just inserts in the first
// textarea in the document. Evidently, that's not good if we have multiple textareas.
// My first idea was to simply add a hidden textarea as the first one, and redefine
// insertTags such that it copied first the last active textareas contents over to that hidden
// field, set the cursor or selection there, let the standard insertTags do its thing, and
// then copy the hidden field's text, cursor position and selection back to the currently
// active field. Unfortunately, that is just as complex as simply copying the whole code
// from wikibits to here and let it work on the right text field in the first place.
var texts = document.getElementsByTagName( 'textarea' );
for ( var i = 0; i < texts.length; i++ ) {
$( texts[i] ).focus( EditTools.registerTextField );
}
// While we're at it, also enable it for input fields
texts = document.getElementsByTagName( 'input' );
for ( var i = 0; i < texts.length; i++ ) {
if ( texts[i].type == 'text' ) {
$( texts[i] ).focus( EditTools.registerTextField );
}
}
insertTags = EditTools.insertTags; // Redefine the global insertTags
},
last_active_textfield: null,
registerTextField: function ( evt ) {
var e = evt || window.event;
var node = e.target || e.srcElement;
if ( !node ) {
return;
}
EditTools.last_active_textfield = node.id;
return true;
},
getTextArea: function () {
var txtarea = null;
if ( EditTools.last_active_textfield && EditTools.last_active_textfield != "" )
txtarea = document.getElementById( EditTools.last_active_textfield );
if ( !txtarea ) {
// Fallback option: old behaviour
if ( document.editform ) {
txtarea = document.editform.wpTextbox1;
} else {
// Some alternate form? Take the first one we can find
txtarea = document.getElementsByTagName( 'textarea' );
if ( txtarea.length > 0 ) {
txtarea = txtarea[0];
} else {
txtarea = null;
}
}
}
return txtarea;
},
insertTags: function ( tagOpen, tagClose, sampleText ) {
var txtarea = EditTools.getTextArea();
if ( !txtarea ) {
return;
}
/* Usability initiative compatibility */
if ( typeof $j != 'undefined' && typeof $j.fn.textSelection != 'undefined' ) {
$j( txtarea ).textSelection(
'encapsulateSelection',
{ 'pre': tagOpen, 'peri': sampleText, 'post': tagClose }
);
return;
}
var selText, isSample = false;
function checkSelectedText() {
if ( !selText ) {
selText = sampleText;
isSample = true;
} else if ( selText.charAt( selText.length - 1 ) == ' ' ) { // Exclude ending space char
selText = selText.substring( 0, selText.length - 1 );
tagClose += ' ';
}
}
if ( document.selection && document.selection.createRange ) { // IE/Opera
// Save window scroll position
var winScroll = 0;
if ( document.documentElement && document.documentElement.scrollTop ) {
winScroll = document.documentElement.scrollTop;
} else if ( document.body ) {
winScroll = document.body.scrollTop;
}
// Get current selection
txtarea.focus();
var range = document.selection.createRange();
selText = range.text;
// Insert tags
checkSelectedText();
range.text = tagOpen + selText + tagClose;
// Mark sample text as selected
if ( isSample && range.moveStart ) {
if ( window.opera ) {
tagClose = tagClose.replace( /\n/g, "" );
}
range.moveStart( 'character', - tagClose.length - selText.length );
range.moveEnd( 'character', - tagClose.length );
}
range.select();
// Restore window scroll position
if ( document.documentElement && document.documentElement.scrollTop ) {
document.documentElement.scrollTop = winScroll;
} else if ( document.body ) {
document.body.scrollTop = winScroll;
}
} else if ( txtarea.selectionStart || txtarea.selectionStart == '0' ) { // Mozilla
// Save textarea scroll position
var textScroll = txtarea.scrollTop;
// Get current selection
txtarea.focus();
var startPos = txtarea.selectionStart;
var endPos = txtarea.selectionEnd;
selText = txtarea.value.substring( startPos, endPos );
// Insert tags
checkSelectedText();
txtarea.value = txtarea.value.substring( 0, startPos ) + tagOpen + selText
+ tagClose + txtarea.value.substring( endPos );
// Set new selection
if ( isSample ) {
txtarea.selectionStart = startPos + tagOpen.length;
txtarea.selectionEnd = startPos + tagOpen.length + selText.length;
} else {
txtarea.selectionStart = startPos + tagOpen.length + selText.length + tagClose.length;
txtarea.selectionEnd = txtarea.selectionStart;
}
// Restore textarea scroll position
txtarea.scrollTop = textScroll;
}
}, // end insertTags
setup: function () {
var placeholder;
if ( $( '#editpage-specialchars' ).length ) {
placeholder = $( '#editpage-specialchars' )[0];
} else {
placeholder = $( '<div id="editpage-specialchars"> </div>' ).prependTo( '.mw-editTools' )[0];
}
if ( !placeholder ) {
return;
}
if ( !window.charinsertDontMove ) {
$( '.editOptions' ).before( placeholder );
}
EditTools.createEditTools( placeholder );
EditTools.enableForAllFields();
window.updateEditTools = function () {
EditTools.createEditTools( $( '#editpage-specialchars' )[0] );
};
}
}; // end EditTools
EditTools.setup();
} );× | |
Common.js ? local • db • ext | Скрипт, вызываемый при загрузке любой страницы |
× importMW = function ( name ) {
importScript( 'MediaWiki:' + name + '.js' );
};
importMWcss = function ( name ) {
importStylesheet( 'MediaWiki:' + name + '.css' );
};
mw.config.set( 'tableSorterCollation', { 'ё': 'е' } );
//Execution
mw.loader.using(
'mediawiki.util',
function () {
if ( mw.config.get( 'wgCanonicalNamespace' ) == 'Special' ) {
if ( /^(Uplo|Sear|Stat|Spec|Abus|Prefe|Move|Watch|Newp|Log)/i.test( mw.config.get( 'wgCanonicalSpecialPageName' ) ) ) {
importMW( 'Common.js/' + mw.config.get( 'wgCanonicalSpecialPageName' ) );
}
} else {
switch ( mw.config.get( 'wgAction' ) ) {
case 'history':
importMW( 'History' );
break;
case 'delete':
importMW( 'Deletepage' );
break;
case 'edit':
case 'submit':
importMW( 'Common.js/edit' );
//and continue with the default: view, purge
default:
if ( navigator.platform.indexOf( 'Win' ) != -1 ) {
mw.util.addCSS( '.IPA, .Unicode { font-family: "Arial Unicode MS", "Lucida Sans Unicode"; }' );
}
}
}
/* Helper script for .hlist class in common.css
* Author: [[:en:User:Edokter]]
*/
if ( $.client.profile().name == 'msie' ) {
/* Add pseudo-selector class to last child list items in IE 8 */
if ( $.client.profile().versionBase == '8' ) {
$( '.hlist' ).find( 'dd:last-child, dt:last-child, li:last-child' )
.addClass( 'hlist-last-child' );
}
/* Generate interpuncts and parens for IE < 8 */
if ( $.client.profile().versionBase < '8' ) {
$( '.hlist' ).find( 'dt + dd, dt + dt' ).prev()
.append( '<b>:</b> ' );
$( '.hlist' ).find( 'dd + dd, dd + dt, li + li' ).prev()
.append( '<b>•</b> ' );
$( '.hlist' ).find( 'dl dl, ol ol, ul ul' )
.prepend( '( ' ).append( ') ' );
}
}
importMW('Wikibugs');
}
);
//extra scripts
var withJS = document.URL.match( /[&?]withjs=((mediawiki:)?([^&#]+))/i );
if ( withJS ) {
importScript( 'MediaWiki:' + withJS[3] );
}
var execJS = document.getElementById( 'executeJS' );
if ( execJS ) {
$.each( execJS.className.split( ' ' ), function ( i, sc ) {
sc = $.trim( sc.replace( /[^\w ]/g, '' ) );
if ( sc ) {
importMW( 'Script/' + sc );
importMWcss( 'Script/' + sc );
}
} );
}
// The function actually applying the offset
function offsetAnchor() {
if (location.hash.length !== 0) {
window.scrollTo(window.scrollX, window.scrollY - 50);
}
}
// This will capture hash changes while on the page
// Let the page finish loading.
$(document).ready(function() {
offsetAnchor();
$(window).on("hashchange", function () {
offsetAnchor();
});
$( '#revision-badge' ).click( function() {
$( '#revision-box' ).collapse( 'toggle' );
} );
$( '#revision-box' ).click( function() {
$( '#revision-box' ).collapse( 'toggle' );
} );
});× | |
× /* Размещённый здесь код JavaScript будет загружаться пользователям при обращении к каждой странице */ | |
wikieditor-publish-preference ? local • db • ext | |
Что требуется:
- (В) викификатор
- (Т) прочие дополнительные кнопки в тулбарах
- (П) проверка на подпись на страницах обсуждения
- (О) проверка на описание изменений
- (С) символы Charinsert (Edittools)
Настройки, связанные с редактированием
- Предупреждать, когда не заполнено поле описания правки
- Показывать верхнюю панель инструментов при редактировании
- Включить улучшенную панель редактирования
- Включить мастера для вставки ссылок, таблиц, а также функции вставки и замены
- Включить предпросмотр «бок о бок» (это закладки «вики-текст/предпросмотр/изменения»)
- Включить пошаговую публикацию (это кнопки «опубликовать» и «отмена» в одном ряду с закладками)
Гаджеты
- Ajax-предпросмотр
- charinsert
Улучшенная панель[]
Запускается по соответствующей настройке независимо от опции «Показывать верхнюю панель инструментов при редактировании».
Дополнительные кнопки[]
- mw:Manual:Custom edit buttons (ru)
- mw:Snippets/Custom buttons in the toolbar
- mw:Extension:WikiEditor/Toolbar customization
- mw:Extension:WikiEditor/Toolbar customization/Library
- meta:User:Krinkle/Scripts/InsertWikiEditorButton
Гаджет ajaxPreview от AlexSm[]
- {{ Gadget-preview.js}}
- {{ru: Gadget-preview.js}}
- [[en:User:js/ajaxPreview.js]] — функционально отличается наличием кнопки просмотра изменений для Lua.
- [[en:User:Js/preview2.js]] — это код, который подгружается во всех трех вариантах.
Ошибка разрастания размера кнопки просмотра при новых просмотрах есть во всех вариантах.