MediaWiki:Wikificator.js — версиосыз куспын пӧртэмлык

update from ru-wp
(update from ru-wp)
( function () {
var wmCantWork = 'Викификатор не может работать в вашем браузере',
var wmFullText = 'Викификатор обработает ВЕСЬ текст на этой странице. Продолжить?',
wmTalkPage = 'Викификатор не обрабатывает страницы обсуждения целиком.\n\nВыделите ваше сообщение — обработано будет только оно';
window.wfPlugins = window.wfPlugins || [];
window.wfPluginsT = window.wfPluginsT || [];
 
window.Wikify = function ( inputOrText ) {
 
function Wikify() {
'use strict';
 
var txt = '',
var $input, text, caretPosition, textScroll,
txt = '',
hidden = [],
wpTextbox1winScroll = document.editformdocumentElement.wpTextbox1scrollTop,
$CodeMirrorVscrollbar = $( '.CodeMirror-vscrollbar' );
winScroll = document.documentElement.scrollTop;
 
// Check what's in the first parameter
if ( typeof inputOrText === 'string' ) {
text = inputOrText;
} else {
$input = $( ( inputOrText &&
( ( inputOrText.nodeType && inputOrText.value !== undefined ) || // node
( inputOrText.prop && inputOrText.prop( 'nodeType' ) ) // jQuery object
)
) ?
inputOrText :
'#wpTextbox1'
);
}
 
// FUNCTIONS
 
function processAllText() {
txt = $input ? $input.textSelection( 'getContents' ) : text;
txt = wpTextbox1.value;
processText();
rif ( /^[\n\r]+/, ''$input ); {
r( /^[\n\r]+/, '' );
wpTextbox1.value = txt;
txt = '';
// 2017 wikitext editor adds an empty line to the end with every text replacement
// Remove the following block when [[phab:T198010]] is fixed.
if ( window.ve && ve.init && ve.init.target && ve.init.target.active ) {
r( /[\n\r]+$/, '' );
}
$input.textSelection( 'setContents', txt );
if ( caretPosition ) {
$input.textSelection( 'setSelection', {
start: caretPosition[0] > txt.length ? txt.length : caretPosition[0]
} );
}
} else {
text = txt;
}
if ( window.auto_comment &&
window.insertSummary &&
}
 
// MAIN CODE
 
if ( $input ) {
// Check regexp support
$input.focus();
try {
txt = 'ая'.replace( /а/g, 'б' ).replace( /б(?=я)/, 'в' );
caretPosition = $input.textSelection( 'getCaretPosition', { startAndEnd: true } );
} catch ( e ) {}
if ( txt !== 'вя'caretPosition ) {
textScroll = ( $CodeMirrorVscrollbar.length ? $CodeMirrorVscrollbar : $input )
alert( wmCantWork );
.scrollTop();
return;
if ( caretPosition[0] === caretPosition[1] ) {
}
processAllText();
 
} else {
wpTextbox1.focus();
txt = $input.textSelection( 'getSelection' );
 
processText();
// Modern browsers
// replaceSelection doesn't work with MediaWiki 1.30 in case this gadget is loaded
if ( typeof wpTextbox1.selectionStart !== 'undefined' ) {
// from other wiki
var textScroll = wpTextbox1.scrollTop,
$input.textSelection( 'encapsulateSelection', {
startPos = wpTextbox1.selectionStart,
replace: true,
endPos = wpTextbox1.selectionEnd;
peri: txt
txt = wpTextbox1.value.substring( startPos, endPos );
} );
if ( txt === '' ) {
// In CodeMirror, the selection isn't preserved, so we do it explicitly
$input.textSelection( 'setSelection', {
start: caretPosition[0],
end: caretPosition[0] + txt.length
} );
}
( $CodeMirrorVscrollbar.length ? $CodeMirrorVscrollbar : $input )
.scrollTop( textScroll );
// If something went wrong
} else if ( confirm( wmFullText ) ) {
processAllText();
} else {
processText();
wpTextbox1.value = wpTextbox1.value.substring( 0, startPos ) +
txt + wpTextbox1.value.substring( endPos );
}
} else {
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();
return text;
}
 
document.documentElement.scrollTop = winScroll; // scroll back, for 2017 wikitext editor, IE/, Opera
document.documentElement.scrollTop = winScroll;
}
};
 
 
//* Toolbar buttons */
 
var addOldToolbarButton = function () {
var $toolbar = $( '#gadget-toolbar' );
if ( !$toolbar.length ) {
};
 
var addNewToolbarButton = function () {
$( '#wpTextbox1' ).wikiEditor( 'addToToolbar', {
'section': 'main',
'group': mw.config.get( 'wgServerName' ) === 'ru.wikipedia.org' ? 'gadgets' : 'insert',
'tools': {
'wikif': {
action: {
type: 'callback',
execute: function() {Wikify
Wikify();
}
}
}
}
} );
 
mw.hook( 'wikieditor.toolbar.wikificator' ).fire();
};
 
mw.loader.using( [ 'user.options', 'jquery.textSelection' ], function () {
if ( mw.user.options.get( 'usebetatoolbar' ) === 1 ) {
$.when(
if ( mw.user.options.get( 'showtoolbar' ) === 1 ) {
mw.loader.using( 'ext.wikiEditor' ),
$.when(
$.ready
mw.loader.using( 'ext.wikiEditor.toolbar' ),
).then( function () {
$.ready
if ( mw.config.get( 'wgServerName' ) === 'ru.wikipedia.org' ) {
).then( addNewToolbarButton );
mw.hook( 'wikieditor.toolbar.gadgetsgroup' ).add( addNewToolbarButton );
}
} else {
addNewToolbarButton();
}
} );
} else {
mw.loader.usinghook( 'mediawikilegacy.toolbar.ready', ).add( function () {
$( addOldToolbarButton );
});
} );
}
 
 
/* VisualEditor code */
 
window.createVEWikificatorTool = function () {
// Create and register a command
function WikifyCommand() {
WikifyCommand.parent.call( this, 'wikificator' );
}
OO.inheritClass( WikifyCommand, ve.ui.Command );
 
// Forbid the command from being executed in the visual mode
WikifyCommand.prototype.isExecutable = function () {
var surface = ve.init.target.getSurface();
return surface && surface.getMode() === 'source';
};
 
WikifyCommand.prototype.execute = function ( surface ) {
Wikify();
return true;
};
 
if ( ve.ui.wikitextCommandRegistry ) {
ve.ui.wikitextCommandRegistry.register( new WikifyCommand() );
}
 
// Create and register a tool
function WikificatorTool() {
WikificatorTool.parent.apply( this, arguments );
}
OO.inheritClass( WikificatorTool, ve.ui.Tool );
 
WikificatorTool.static.name = 'wikificator';
WikificatorTool.static.group = 'gadgets';
WikificatorTool.static.title = 'Викификатор';
WikificatorTool.static.icon = 'wikify';
WikificatorTool.static.commandName = 'wikificator';
WikificatorTool.static.autoAddToCatchall = false;
WikificatorTool.static.deactivateOnSelect = false;
 
WikificatorTool.prototype.onUpdateState = function () {
WikificatorTool.parent.prototype.onUpdateState.apply( this, arguments );
this.setActive( false );
};
 
ve.ui.toolFactory.register( WikificatorTool );
 
ve.init.mw.DesktopArticleTarget.static.actionGroups[ 1 ].include.push( 'wikificator' );
};
 
}() );