MediaWiki:Gadget-editSummary.js: различия между версиями

Материал из Абсурдопедии
Перейти к навигации Перейти к поиску
м :-)
гаджет взят из РуВП
 
(не показаны 54 промежуточные версии 3 участников)
Строка 1: Строка 1:
//Summary buttons
/* Стандартные описания правок. */
function SummaryButtons(){
/* Standard edit summaries. */
var sum = document.getElementById('wpSummary');
if (!sum || (sum.form.wpSection && sum.form.wpSection.value == 'new')) return;
var sp = document.createElement('span'); sp.id = 'userSummaryButtonsA';
sp.style = "display:block";
sum.parentNode.insertBefore(sp, sum.nextSibling);
sum.parentNode.insertBefore(document.createElement('br'), sum.nextSibling);


/*
// Код из польской Википедии, изначально адаптированный для русскоязычного раздела Википедии by Alex Smotrov
$("#userSummaryButtonsA").css({position:'relative', top:'-2em', marginBottom:'-2em', display:'inline-block', float:'right'});
// https://ru.wikipedia.org/w/index.php?diff=32005736&oldid=32004004&title=MediaWiki%3AEditpage.js&type=revision
*/
// https://ru.wikipedia.org/w/index.php?title=MediaWiki:Gadget-summaryButtons.js&oldid=94596871


  addSumButton('абсурдоф.', 'абсурдофикация', 'Произведена абсурдофикация');
function initSummaryButtons( mode ) {
addSumButton('оформл.', 'оформление', 'Улучшено оформление');
function insertSummary( txt ) {
addSumButton('стиль', 'стиль', 'Поправлен стиль изложения');
if ( typeof txt !== 'string' ) {
addSumButton('орфогр.', 'орфография', 'Поправлена орфография');
txt = this.title;
addSumButton('пункт.', 'пунктуация', 'Изменена пунктуация');
}
addSumButton('комм.', 'комментарий', 'Комментарий');
if ( typeof summaryItemsSeparator === 'undefined' ) {
addSumButton('ответ.', 'ответ', 'Ответ');
window.summaryItemsSeparator = ',';
addSumButton('обнов.', 'обновление', 'Обновление');
}
addSumButton('кат.', 'категория', 'Добавлены / изменены категории');
var val = $summary.val();
addSumButton('шаб.', 'шаблон', 'Добавлен / изменён шаблон');
var regExp = new RegExp( '(^|[,;.?!/]) ?' + mw.RegExp.escape( txt ) );
addSumButton('к удал.', 'КУ', 'Страница предложена к удалению');
if ( regExp.test( val ) ) {
addSumButton('мед. уд', 'мед. уд', 'Страница выставлена на медленное удаление');
return;
addSumButton('доп.', 'дополнение', 'Добавлены новые сведения');
}
addSumButton('уточ.', 'уточнение', 'Уточнение');
if ( /[^,; \/]$/.test( val ) ) {
addSumButton('картинка', 'картинка', 'Добавлены картинки');
val += summaryItemsSeparator;
}
sp.insertAdjacentHTML('afterbegin', '<b>[+]</b>');
if ( /[^ ]$/.test( val ) ) {
val += ' ';
$("#userSummaryButtonsA").on("mouseover", function() {
}
  $("#userSummaryButtonsA a").show();
$summary.val( val + txt ).focus().change();
});
}
$("#userSummaryButtonsA").on("mouseout", function() {
  $("#userSummaryButtonsA a").hide();
mode = mode || 'classic';
});
if ( typeof summaryButtons === 'undefined' ) {
window.summaryButtons = {
hideDefaultButtons: false
};
}
var veSaveDialog, $summaryWrapper, $summary;
if ( mode === 'classic' ) {
$summaryWrapper = $( '#wpSummaryWidget' );
$summary = $( '#wpSummary' );
} else {
veSaveDialog = ve.init.target.saveDialog;
$summaryWrapper = veSaveDialog.editSummaryInput.$element;
$summary = veSaveDialog.editSummaryInput.$input;
}
var $summaryButtons = $( '<div>' )
.addClass( 'summaryButtons' )
.insertAfter( $summaryWrapper );
var $groups = $( '<div>' )
.addClass( 'summaryButtons-groups' )
.appendTo( $summaryButtons );
window.addSumButton = window.addSummaryButton = function ( label, text, group ) {
group = group || 'custom'; // default is 'default'
var $group = $( '.summaryButtons-group-' + group );
if ( !$group.length ) {
$group = $( '<div>' )
.addClass( 'mw-ui-button-group summaryButtons-group summaryButtons-group-' + group )
.appendTo( $groups );
}
$( '<a>' )
.attr( 'role', 'button' )
.attr( 'title', text )
.addClass( 'mw-ui-button summaryButtons-button' )
.html( label )
.click( insertSummary )
.appendTo( $group );
};
    addSumButton('абсурдоф.', 'абсурдофикация', 'default');
    addSumButton('оформл.', 'оформление', 'default');
    addSumButton('стиль', 'стиль', 'default');
    addSumButton('орфогр.', 'орфография', 'default');
    addSumButton('пункт.', 'пунктуация', 'default');
    addSumButton('комм.', 'комментарий', 'default');
    addSumButton('ответ.', 'ответ', 'default');
    addSumButton('обнов.', 'обновление', 'default');
    addSumButton('кат.', 'категория', 'default');
    addSumButton('шаб.', 'шаблон', 'default');
    addSumButton('к удал.', 'КУ', 'default');
    addSumButton('мед. уд', 'мед. уд', 'default');
    addSumButton('доп.', 'дополнение', 'default');
    addSumButton('уточ.', 'уточнение', 'default');
    addSumButton('картинка', 'картинка', 'default');
 
// Эти стили находятся здесь, а не в отдельном CSS, потому что на страницах, где кнопок нет,
// они вредны, а за тем, где запускается CSS, мы не можем проследить.
mw.util.addCSS( '\
.mw-editform #wpSummaryWidget {\
margin-bottom: 0;\
}\
\
.mw-editform .editCheckboxes {\
margin-top: .85714em;\
}\
' );
if ( mode !== 'classic' && !additionalCSS ) {
additionalCSS = mw.util.addCSS( '\
.ve-ui-mwSaveDialog-savePanel .summaryButtons {\
margin-top: 2px;\
}\
\
.ve-ui-mwSaveDialog-savePanel .ve-ui-mwSaveDialog-options {\
border-top: 1px solid #c8ccd1;\
border-radius: 2px;\
}\
' );
veSaveDialog.updateSize();
}
mw.hook( 'summaryButtons' ).fire();
}
}
 
function addSumButton(name, text, title) {
var additionalCSS;
var btn = document.createElement('a');
if ( window.ve && ve.init && ve.init.target && ve.init.target.active || $( '.ve-loading' ).length ) {
btn.appendChild(document.createTextNode(name));
mw.hook( 've.saveDialog.stateChanged' ).add( function () {
btn.title = title;
if ( !mw.config.get( 'wgArticleId' ) || $( '.summaryButtons' ).length ) return;
btn.style = "float:left";
initSummaryButtons( ve.init.target.getSurface().getMode() );
btn.onclick = function(){insertSummary(text)};
} );
document.getElementById('userSummaryButtonsA').appendChild(btn);
} else if ( [ 'edit', 'submit' ].indexOf( mw.config.get( 'wgAction' ) ) !== -1 ) {
}
$( function () {
var frm = document.getElementById( 'editform' );
function insertSummary(text) {
if ( !mw.config.get( 'wgArticleId' ) || !frm || $( frm.wpSection ).val() === 'new' ) return;
var sum = document.getElementById('wpSummary');
initSummaryButtons( 'classic' );
if (sum.value.indexOf(text) != -1) return ;
} );
if (sum.value.match(/[^,; \/]$/)) sum.value += ',';
if (sum.value.match(/[^ ]$/)) sum.value += ' ';
sum.value += text;
}
}
addOnloadHook(SummaryButtons);

Текущая версия от 07:55, 15 августа 2019

/* Стандартные описания правок. */
/* Standard edit summaries. */

// Код из польской Википедии, изначально адаптированный для русскоязычного раздела Википедии by Alex Smotrov
// https://ru.wikipedia.org/w/index.php?diff=32005736&oldid=32004004&title=MediaWiki%3AEditpage.js&type=revision
// https://ru.wikipedia.org/w/index.php?title=MediaWiki:Gadget-summaryButtons.js&oldid=94596871

function initSummaryButtons( mode ) {
	function insertSummary( txt ) {
		if ( typeof txt !== 'string' ) {
			txt = this.title;
		}
		if ( typeof summaryItemsSeparator === 'undefined' ) {
			window.summaryItemsSeparator = ',';
		}
		var val = $summary.val();
		var regExp = new RegExp( '(^|[,;.?!/]) ?' + mw.RegExp.escape( txt ) );
		if ( regExp.test( val ) ) {
			return;
		}
		if ( /[^,; \/]$/.test( val ) ) {
			val += summaryItemsSeparator;
		}
		if ( /[^ ]$/.test( val ) ) {
			val += ' ';
		}
		$summary.val( val + txt ).focus().change();
	}
	
	mode = mode || 'classic';
	
	if ( typeof summaryButtons === 'undefined' ) {
		window.summaryButtons = {
			hideDefaultButtons: false
		};
	}
	
	var veSaveDialog, $summaryWrapper, $summary;
	if ( mode === 'classic' ) {
		$summaryWrapper = $( '#wpSummaryWidget' );
		$summary = $( '#wpSummary' );
	} else {
		veSaveDialog = ve.init.target.saveDialog;
		$summaryWrapper = veSaveDialog.editSummaryInput.$element;
		$summary = veSaveDialog.editSummaryInput.$input;
	}
	
	var $summaryButtons = $( '<div>' )
		.addClass( 'summaryButtons' )
		.insertAfter( $summaryWrapper );
	var $groups = $( '<div>' )
		.addClass( 'summaryButtons-groups' )
		.appendTo( $summaryButtons );
	
	window.addSumButton = window.addSummaryButton = function ( label, text, group ) {
		group = group || 'custom';  // default is 'default'
		var $group = $( '.summaryButtons-group-' + group );
		if ( !$group.length ) {
			$group = $( '<div>' )
				.addClass( 'mw-ui-button-group summaryButtons-group summaryButtons-group-' + group )
				.appendTo( $groups );
		}
		
		$( '<a>' )
			.attr( 'role', 'button' )
			.attr( 'title', text )
			.addClass( 'mw-ui-button summaryButtons-button' )
			.html( label )
			.click( insertSummary )
			.appendTo( $group );
	};
	
    addSumButton('абсурдоф.', 'абсурдофикация', 'default');
    addSumButton('оформл.', 'оформление', 'default');
    addSumButton('стиль', 'стиль', 'default');
    addSumButton('орфогр.', 'орфография', 'default');
    addSumButton('пункт.', 'пунктуация', 'default');
    addSumButton('комм.', 'комментарий', 'default');
    addSumButton('ответ.', 'ответ', 'default');
    addSumButton('обнов.', 'обновление', 'default');
    addSumButton('кат.', 'категория', 'default');
    addSumButton('шаб.', 'шаблон', 'default');
    addSumButton('к удал.', 'КУ', 'default');
    addSumButton('мед. уд', 'мед. уд', 'default');
    addSumButton('доп.', 'дополнение', 'default');
    addSumButton('уточ.', 'уточнение', 'default');
    addSumButton('картинка', 'картинка', 'default');

	// Эти стили находятся здесь, а не в отдельном CSS, потому что на страницах, где кнопок нет,
	// они вредны, а за тем, где запускается CSS, мы не можем проследить.
	mw.util.addCSS( '\
		.mw-editform #wpSummaryWidget {\
			margin-bottom: 0;\
		}\
		\
		.mw-editform .editCheckboxes {\
			margin-top: .85714em;\
		}\
	' );
	
	if ( mode !== 'classic' && !additionalCSS ) {
		additionalCSS = mw.util.addCSS( '\
			.ve-ui-mwSaveDialog-savePanel .summaryButtons {\
				margin-top: 2px;\
			}\
			\
			.ve-ui-mwSaveDialog-savePanel .ve-ui-mwSaveDialog-options {\
				border-top: 1px solid #c8ccd1;\
				border-radius: 2px;\
			}\
		' );
		veSaveDialog.updateSize();
	}
	
	mw.hook( 'summaryButtons' ).fire();
}

var additionalCSS;
if ( window.ve && ve.init && ve.init.target && ve.init.target.active || $( '.ve-loading' ).length ) {
	mw.hook( 've.saveDialog.stateChanged' ).add( function () {
		if ( !mw.config.get( 'wgArticleId' ) || $( '.summaryButtons' ).length ) return;
		initSummaryButtons( ve.init.target.getSurface().getMode() );
	} );
} else if ( [ 'edit', 'submit' ].indexOf( mw.config.get( 'wgAction' ) ) !== -1 ) {
	$( function () {
		var frm = document.getElementById( 'editform' );
		if ( !mw.config.get( 'wgArticleId' ) || !frm || $( frm.wpSection ).val() === 'new' ) return;
		initSummaryButtons( 'classic' );
	} );
}