MediaWiki:Common.js: различия между версиями
Перейти к навигации
Перейти к поиску
Karaby (обсуждение | вклад) Нет описания правки |
Karaby (обсуждение | вклад) Нет описания правки |
||
Строка 124: | Строка 124: | ||
*/ | */ | ||
function createXhr() { | function createXhr() { | ||
// debug( 'sajax_init_object() called..' ); | |||
var a; | var a; | ||
try { | try { |
Версия от 11:22, 22 апреля 2017
importScript = function ( page ) {
mw.loader.load( '/w/index.php?title=' + mw.util.wikiUrlencode( page ) + '&action=raw&ctype=text/javascript' );
};
importMW = function ( name ) {importScript( 'MediaWiki:' + name + '.js' );};
mw.config.set( 'tableSorterCollation', { 'ё': 'е' } );
importMW('Wikificator');
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 );
}
// автоматическое заполнение полей при добавлении новых тем сверху
var summary = $('#wpSummary').val();
if ( decodeURIComponent(location.search).search(/[?&]summary=\/\*[+ ]*\*\//) != -1
|| ( mw.config.get('wgAction') == 'submit'
&& summary != undefined && summary.search(/\/\*\s*\*\//) != -1)) {
importMW( 'NewTopicOnTop' );
}
// Toolbar section for gadgets
if ( mw.user.options.get( 'usebetatoolbar' ) === 1 ) {
var gadgetToolbarLocation = '#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() {
function addGadgetsGroup() {
gadgetToolbar();
$( '#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 );
}
if ( $groupGadgets.length ) {
mw.hook( 'wikieditor.toolbar.gadgetsgroup' ).fire();
// Quickfix until https://phabricator.wikimedia.org/T150172 is resolved
$newlineButton = $( '.wikiEditor-toolbar-spritedButton[rel="newline"]' );
$newlineButton.off('click').on('click', function(e) {
$.wikiEditor.modules.toolbar.fn.doAction($( '#wpTextbox1' ).data( 'wikiEditor-context' ), {
type: 'encapsulate',
options: {
pre: '<br>\n'
}
}, $newlineButton);
e.preventDefault();
return false;
} );
}
}
addGadgetsGroup();
if ( !$( '#wikiEditor-section-main .group-gadgets' ).length ) {
// Лечение для случаев, когда панель инструментов поздно прорисовывается
setTimeout( addGadgetsGroup, 0 );
}
} );
} else if ( mw.user.options.get( 'showtoolbar' ) === 1 ) {
var gadgetToolbarLocation = '#toolbar';
importMW( 'ToolbarOld' );
} else {
var gadgetToolbarLocation = '#editform';
importMW( 'ToolbarNone' );
}
function gadgetToolbar() {
if ( !document.getElementById( 'gadget-toolbar' ) ) {
var $where = $( gadgetToolbarLocation );
if ( !$where.length ) {
return; // Beta toolbar not ready yet
}
$( '<div id="gadget-toolbar" style="float:left;"></div>' ).prependTo( $where );
}
for ( var id in mwCustomEditButtons ) {
var btn = mwCustomEditButtons[id];
if ( !btn.length ) {
continue;
}
createFuncBtn( id, btn[0], btn[1], btn[2] );
delete mwCustomEditButtons[id];
}
}
if ( mw.user.options.get( 'usebetatoolbar' ) !== 1 ) {
$( function() {
gadgetToolbar();
setTimeout( gadgetToolbar, 2000 );
setTimeout( gadgetToolbar, 6000 );
} );
}
/* * * * * * * * * * Ajax functions * * * * * * * * * */
var prevReq;
var pageUrlTpl = wgScript + "?title=$1&action=raw&templates=expand";
var pageUrl = "";
var pageToFetch = "";
/**
* Compatibility wrapper for creating a new XMLHttpRequest object.
*/
function createXhr() {
// debug( 'sajax_init_object() called..' );
var a;
try {
// Try the new style before ActiveX so we don't
// unnecessarily trigger warnings in IE 7 when
// set to prompt about ActiveX usage
a = new XMLHttpRequest();
} catch ( xhrE ) {
try {
a = new window.ActiveXObject( 'Msxml2.XMLHTTP' );
} catch ( msXmlE ) {
try {
a = new window.ActiveXObject( 'Microsoft.XMLHTTP' );
} catch ( msXhrE ) {
a = null;
}
}
}
if ( !a ) {
debug( 'Could not create connection object.' );
}
return a;
}
function loadPage(page) {
//deprecated prevReq = sajax_init_object();
prevReq = createXhr();
if ( !prevReq ) return false;
pageToFetch = page;
pageUrl = pageUrlTpl.replace(/\$1/, encodeURI(page));
showLoadIndicator();
prevReq.onreadystatechange = insertIntoWikiTextFromRequest;
prevReq.open("GET", pageUrl, true);
prevReq.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
prevReq.send(null);
return true;
}
function insertIntoWikiTextFromRequest() {
if ( prevReq.readyState != 4 ) {
return;
}
hideLoadIndicator();
if ( prevReq.status != 200 ) {
window.alert(/*gLang.msg(*/"et-ajaxerror", prevReq.status, prevReq.statusText,
pageToFetch, pageUrl/*)*/);
return;
}
insertIntoWikiText(prevReq.responseText);
}
function insertIntoWikiText(content) {
// delete text marked for no inclusion + <pre> and <nowiki>
var re = /<!--noinclude-->.*<!--\/noinclude-->|<\/?pre>|<\/?nowiki>/g;
content = content.replace(re, "");
// replace escaped tags
var specials = ["pre", "nowiki"];
for (var i in specials) {
re = new RegExp("\\[(\/?)"+ specials[i] +"\\]", "g");
content = content.replace(re, "<$1"+ specials[i] +">");
}
// we can have >>|sample text|<< or >>|<< or just simple text
var parts = null;
var left, right, def = "";
content = escapeNl(content);
if ( ( parts = content.match(/(.*)>>\|(.*)\|<<(.*)/) ) ) {
left = parts[1];
def = parts[2];
right = parts[3];
} else { // no sample text: split at caret’s position
parts = content.split(">>|<<");
left = parts[0];
delete(parts[0]);
right = parts.join("");
}
insertTags(unescapeNl(left), unescapeNl(right), unescapeNl(def));
}
function escapeNl(s) { return s.replace(/\n/g, "\x01"); }
function unescapeNl(s) { return s.replace(/\x01/g, "\n"); }
var loadIndicator;
function showLoadIndicator() {
if ( loadIndicator ) {
loadIndicator.style.display = "block";
return;
}
loadIndicator = document.createElement("div");
loadIndicator.id = "loadIndicator";
loadIndicator.appendChild( document.createTextNode(/*gLang.msg(*/"et-tplloading"/*)*/) );
document.getElementsByTagName("body")[0].appendChild(loadIndicator);
}
function hideLoadIndicator() {
if (loadIndicator) loadIndicator.style.display = "none";
}
var customizeToolbar = function() {
$('#wpTextbox1').wikiEditor('addToToolbar', {
section: 'advanced',
group: 'format',
tools: {
"strikethrough": {
label: 'Зачеркнуть',
type: 'button',
icon: '//upload.wikimedia.org/wikipedia/commons/f/f9/Toolbaricon_regular_S_stroke.png',
action: {
type: 'encapsulate',
options: {
pre: "<s>",
post: "</s>"
}
}
}
}
});
$( '#wpTextbox1' ).wikiEditor( 'addToToolbar', {
section: 'advanced',
group: 'format',
tools: {
"hline": {
label: 'Горизонт. линия',
type: 'button',
icon: '//upload.wikimedia.org/wikipedia/commons/b/b4/Toolbaricon_rule.png',
action: {
type: 'encapsulate',
options: {
pre: "----",
ownline: true
}
}
}
}
} );
$( '#wpTextbox1' ).wikiEditor( 'addToToolbar', {
section: 'advanced',
group: 'format',
tools: {
"comment": {
label: 'Комментарий',
type: 'button',
icon: '//upload.wikimedia.org/wikipedia/commons/1/11/Toolbaricon_hiddencomment.png',
action: {
type: 'encapsulate',
options: {
pre: "<!-- ",
post: " -->"
}
}
}
}
} );
$( '#wpTextbox1' ).wikiEditor( 'addToToolbar', {
section: 'advanced',
group: 'format',
tools: {
"math": {
label: 'Математика',
type: 'button',
icon: '//upload.wikimedia.org/wikipedia/commons/3/38/Button_Math.png',
action: {
type: 'encapsulate',
options: {
pre: "<math>",
post: "</math>"
}
}
}
}
} );
$( '#wpTextbox1' ).wikiEditor( 'addToToolbar', {
'section': 'advanced',
'groups': {
'blanks': {
'label': '' // or use labelMsg for a localized label, see above
}
}
} );
$( '#wpTextbox1' ).wikiEditor( 'addToToolbar', {
'section': 'advanced',
'group': 'blanks',
'tools': {
'blank-page':{
'label':'Заготовка статьи',
'type':'select',
'list':{
'blank-page-5':{
'label':'Газета',
'action':{
'type':'callback',
execute: function(context){loadPage("MediaWiki:Common.js/Edit_tools_data/Периодическое_издание/Газета");}
}
},
'blank-page-4':{
'label':'Журнал',
'action':{
'type':'callback',
execute: function(context){loadPage("MediaWiki:Common.js/Edit_tools_data/Периодическое_издание/Журнал");}
}
},
'blank-page-3':{
'label':'Периодическое издание (общее)',
'action':{
'type':'callback',
execute: function(context){loadPage("MediaWiki:Common.js/Edit_tools_data/Периодическое_издание");}
}
},
'blank-page-2':{
'label':'Автор и т.п.',
'action':{
'type':'callback',
execute: function(context){loadPage("MediaWiki:Common.js/Edit_tools_data/Автор");}
}
},
'blank-page-1':{
'label':'Исполнитель аудиокниг',
'action':{
'type':'callback',
execute: function(context){loadPage("MediaWiki:Common.js/Edit_tools_data/Исполнитель");}
}
}
}
},
'blank-card':{
'label':'Заготовка карточки',
'type':'select',
'list':{
'blank-page-1':{
'label':'Персона',
'action':{
'type':'callback',
execute: function(context){loadPage("MediaWiki:Common.js/Edit_tools_data/Персона");}
}
},
'blank-page-2':{
'label':'Периодич. издание',
'action':{
'type':'callback',
execute: function(context){loadPage("MediaWiki:Common.js/Edit_tools_data/Периодика");}
}
}
}
},
'blank-ins': {
'label': 'Доп. форматирование', // or use labelMsg for a localized label, see above
'type': 'select',
'list': {
'blank-ins-1' : { // Вставить новую пустую категорию
'label': 'Категория',
'action': {
'type': 'encapsulate',
'options': {
'pre': '[[Категория:',
'peri': '', // <== сюда курсор (текущее выделение)
'post': ']]',
}
}
},
'blank-ins-3' : { // Вставить includeonly
'label': 'includeonly',
'action': {
'type': 'encapsulate',
'options': {
'pre': '<includeonly>',
'peri': '', // <== сюда курсор (текущее выделение)
'post': '</includeonly>',
}
}
},
'blank-ins-4' : { // Вставить noinclude
'label': 'noinclude',
'action': {
'type': 'encapsulate',
'options': {
'pre': '<noinclude>',
'peri': '', // <== сюда курсор (текущее выделение)
'post': '</noinclude>',
}
}
},
'blank-ins-5' : { // Вставить ссылку на статью в Web
'label': 'Ссылка на статью в Web',
'action': {
'type': 'encapsulate',
'options': {
'pre': '<ref>{{cite web| url =',
'peri': 'url', // <== сюда курсор (текущее выделение)
'post': ' | title = [Заголовок статьи]}}</ref>',
}
}
},
'blank-ins-2' : { // шаблон Автор статьи
'label': 'Подпись',
'action': {
'type': 'encapsulate',
'options': {
'pre': '{{автор статьи|',
'peri': 'Автор и дата',
'post': '}}',
'regex': /^(\s*)(={1,6})(.*?)\2(\s*)$/,
'regexReplace': "$1===$3===$4",
// 'ownline': true // новая строка
}
}
}
}
}
}
} );
};
////////////////////////////////////////
/* Check if view is in edit mode and that the required modules are available. Then, customize the toolbar … */
/*
if ( $.inArray( mw.config.get( 'wgAction' ), [ 'edit', 'submit' ] ) !== -1 ) {
mw.loader.using( 'user.options' ).then( function () {
// This can be the string "0" if the user disabled the preference ([[phab:T54542#555387]])
if ( mw.user.options.get( 'usebetatoolbar' ) == 1 ) {
$.when(
mw.loader.using( 'ext.wikiEditor.toolbar' ), $.ready
).then( customizeToolbar );
}
} );
}
*/
if ( $.inArray( mw.config.get( 'wgAction' ), ['edit', 'submit'] ) !== -1 ) {
mw.loader.using( 'user.options', function () {
if ( mw.user.options.get('usebetatoolbar') ) {
mw.loader.using( 'ext.wikiEditor.toolbar', function () {
$(document).ready( customizeToolbar );
} );
}
} );
}
// Summary buttons
function insertSummary( txt ) {
if ( typeof txt !== 'string' ) {
txt = this.title;
}
if (typeof summaryItemsSeparator == 'undefined') {
window.summaryItemsSeparator = ',';
}
var val = $( '#wpSummary' ).val();
var regExp = new RegExp( '(^|[,;.?!/]) ?' + mw.RegExp.escape(txt) );
if ( regExp.test( val ) ) {
return;
}
if ( /[^,; \/]$/.test( val ) ) {
val += summaryItemsSeparator;
}
if ( /[^ ]$/.test( val ) ) {
val += ' ';
}
$( '#wpSummary' ).val( val + 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"></div>' ).insertAfter( '#wpSummary' );
$.each(
[
'викиф|икация', 'оформл|ение', 'опеч|атки', 'стил|евые правки', 'орфогр|афия',
'пункт|уация', 'ответ', 'комм|ентарий', 'кат|егория', 'ссылки', 'шаб|лон',
'к удал|ению', 'иллюстрация','источ|ники', 'запр|ос источника', 'доп|олнение',
'уточ|нение', 'обнов|ление данных'
],
function ( i, s ) {
addSumButton( s.replace( /\|.*/, '' ), s.replace( /\|/, '' ) );
}
);
} );