// Оформлять все реплики в обсуждениях ***********звёздочками
(function () {
var tbox = $( '#wpTextbox1' );
var cf=':', ct='*';//символы, которые надо заменять друг на друга
var asterisker = function(){
// Структуризация: *:#;
var se = tbox.textSelection('getCaretPosition', {startAndEnd: true});
var se_old = {start:se[0],end:se[1]};
var lastMatch = ''; // Начало предыдущей строки
var maker = function(inp,UTC,init,offs){
// Если за рабочей областью, не заменяем
if(offs<se[0] || offs>se[1])return;
//Заменяем : на *, если они не после ; или не в середине реплики
var i = 0, newinit='';// Начало, которое может быть общим
while (
i<init.length &&
i<lastMatch.length &&
(
init.charAt(i)==lastMatch.charAt(i) ||
init.charAt(i)==cf && lastMatch.charAt(i)==ct ||
init.charAt(i)==':' && lastMatch.charAt(i)==';'
)
){
newinit += init.charAt(i)==cf && lastMatch.charAt(i)==ct
? ( i==init.length-1 && !UTC ? cf : ct )
: init.charAt(i);
i++;
}
// Здесь может начинаться новый уровень списка как выше, так и ниже
if(i<init.length){
newinit += init.charAt(i)==cf ? ( !UTC ? cf : ct ) : init.charAt(i);
i++;
}
// Дальнейшее может быть введено ошибочно, но может быть и внутренней разметкой реплики
// Ошибки исправлять пока не научились, так что не трогаем
if(i<init.length){newinit+=init.slice(i)}
lastMatch = newinit;
return (UTC||'')+newinit;
};//maker
var text = tbox.textSelection('getContents');
if(se[1]-se[0]<=1){
se=[0,text.length];
}
tbox.val(text.replace(//После подписей, заголовков, а также убираем пустые строки из списков
/(\n|^)\n*([*:;#]+)/mg,
maker
));
tbox.textSelection('setSelection',se_old);
};
function addNewToolbarButton() {
tbox.wikiEditor( 'addToToolbar', {
section: 'main',
group: 'gadgets',
'tools': {
'asterisker': {
label: 'Оформить все реплики маркерами', // or use labelMsg for a localized label, see above
type: 'button',
icon: '//upload.wikimedia.org/wikipedia/commons/7/76/Silk_asterisk_yellow.png',
action: {
type: 'callback',
execute: asterisker
}
}
}
} );
}
if ( $.inArray( mw.config.get( 'wgAction' ), ['edit', 'submit'] ) !== -1 ) {
mw.loader.using( 'user.options', function () {
if( typeof Ignatus == 'object' && typeof Ignatus.discussion == 'object' && Ignatus.discussion.oldpanel
|| !mw.user.options.get('usebetatoolbar') ){// старая панель
var bpar = [asterisker, 'commons/7/76/Silk_asterisk_yellow.png', 'Оформить все реплики маркерами'];
// Чтоб работало и до, и после MediaWiki:Editpage.js
if(typeof addFuncBtn == 'function')addFuncBtn('wikilinker',bpar[0],bpar[1],bpar[2]);else{
/*mw.toolbar.addButton( {
imageFile: '//upload.wikimedia.org/wikipedia/commons/7/76/Silk_asterisk_yellow.png',
speedTip: 'Оформить все реплики маркерами',
imageId: 'askterisker',
onClick: asterisker
} );*/
}
}else if ( mw.user.options.get('usebetatoolbar') ) { // новая панель
$.when( mw.loader.using( 'ext.wikiEditor' ), $.ready ).then( function () {
var buttonAdded = false;
mw.hook( 'wikieditor.toolbar.wikificator' ).add( function () {
if ( !buttonAdded ) {
addNewToolbarButton();
buttonAdded = true;
}
} );
mw.hook( 'wikieditor.toolbar.gadgetsgroup' ).add( function () {
setTimeout( function () {
if ( !buttonAdded ) {
addNewToolbarButton();
buttonAdded = true;
}
}, 2000 );
} );
} );
}
} );
}
}());