MediaWiki:Gadget-summaryButtons.js: различия между версиями
Перейти к навигации
Перейти к поиску
Содержимое удалено Содержимое добавлено
отмена — пардон, итога там не было. тогда посмотрим, что скажут на форуме |
функцию insertSummary в глобальную область видимости (её, оказывается, требует MediaWiki:Gadget-wikificator.js) |
||
(не показаны 32 промежуточные версии 6 участников) | |||
Строка 1: | Строка 1: | ||
// Код из польской Википедии, изначально адаптированный для |
// Код из польской Википедии, изначально адаптированный для русскоязычного раздела Википедии by [[u:Alex Smotrov]] |
||
// https://ru.wikipedia.org/ruwiki/w/index.php?diff=32005736&oldid=32004004&title=MediaWiki%3AEditpage.js&type=revision |
// https://ru.wikipedia.org/ruwiki/w/index.php?diff=32005736&oldid=32004004&title=MediaWiki%3AEditpage.js&type=revision |
||
function |
function initSummaryButtons( mode ) { |
||
function insertSummary( txt ) { |
|||
if ( typeof txt !== 'string' ) { |
|||
txt = this.title; |
|||
txt = this.title; |
|||
} |
|||
} |
|||
if ( typeof summaryItemsSeparator == 'undefined' ) { |
|||
if ( typeof summaryItemsSeparator === 'undefined' ) { |
|||
window.summaryItemsSeparator = ','; |
|||
} |
|||
} |
|||
var val = $( '#wpSummary' ).val(); |
|||
var val = $summary.val(); |
|||
var regExp = new RegExp( '(^|[,;.?!/]) ?' + mw.RegExp.escape( txt ) ); |
|||
var regExp = new RegExp( '(^|[,;.?!/]) ?' + mw.util.escapeRegExp( txt ) ); |
|||
if ( regExp.test( val ) ) { |
|||
if ( regExp.test( val ) ) { |
|||
return; |
|||
return; |
|||
} |
|||
if ( /[^,; \/]$/.test( val ) ) { |
|||
val += summaryItemsSeparator; |
|||
} |
|||
if ( /[^ ]$/.test( val ) ) { |
|||
val += ' '; |
|||
} |
|||
$summary.val( val + txt ).focus().change(); |
|||
} |
} |
||
if ( /[^,; \/]$/.test( val ) ) { |
|||
mode = mode || 'classic'; |
|||
val += summaryItemsSeparator; |
|||
window.insertSummary = insertSummary; |
|||
if ( /[^ ]$/.test( val ) ) { |
|||
if ( typeof summaryButtons === 'undefined' ) { |
|||
val += ' '; |
|||
} |
|||
$( '#wpSummary' ).val( val + txt ).focus().change(); |
|||
} |
|||
window.addSummaryButton = function ( btn, txt, type ) { |
|||
type = type || 'custom'; // 'default' or 'custom' |
|||
$( '<a class="mw-ui-button summaryButtons-button summaryButtons-button-' + type + '" title="' + txt + '">' + btn + '</a>' ) |
|||
.appendTo( '.summaryButtons-group' ) |
|||
.click( insertSummary ); |
|||
} |
|||
$( function() { |
|||
if (typeof summaryButtons === 'undefined') { |
|||
window.summaryButtons = { |
window.summaryButtons = { |
||
hideDefaultButtons: false |
hideDefaultButtons: false |
||
} |
}; |
||
} |
} |
||
var veSaveDialog, $summaryWrapper, $summary; |
|||
var frm = document.getElementById( 'editform' ); |
|||
if ( mode === 'classic' ) { |
|||
if ( !mw.config.get( 'wgArticleId' ) || !frm || $( frm.wpSection ).val() === 'new' ) { |
|||
$summaryWrapper = $( '#wpSummaryWidget' ); |
|||
return; |
|||
$summary = $( '#wpSummary' ); |
|||
} else { |
|||
veSaveDialog = ve.init.target.saveDialog; |
|||
$summaryWrapper = veSaveDialog.editSummaryInput.$element; |
|||
$summary = veSaveDialog.editSummaryInput.$input; |
|||
} |
} |
||
var $summaryButtons = $( '<div>' ) |
|||
$( '<div class="summaryButtons"></div>' ).insertAfter( '#wpSummaryWidget' ); |
|||
.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 ); |
|||
} |
|||
$( '<button>' ) |
|||
.attr( 'type', 'button' ) |
|||
.attr( 'title', text ) |
|||
.addClass( 'mw-ui-button summaryButtons-button' ) |
|||
.html( label ) |
|||
.click( insertSummary ) |
|||
.appendTo( $group ); |
|||
}; |
|||
var buttons = mode !== 'visual' ? |
|||
// Кнопки для обычного режима редактирования |
|||
[ |
|||
'викиф|икация', 'внутр|енние ссылки', 'оформл|ение', 'стил|евые правки', 'орфогр|афия', 'пункт|уация', |
|||
'вопрос', 'ответ', 'комм|ентарий', 'кат|егоризация', 'к удал|ению', 'илл|юстрирование', |
|||
'источ|ники', 'запр|ос источника', 'доп|олнение', 'уточн|ение', 'испр|авление', |
|||
'обнов|ление', 'закр|ыто', 'итог' |
|||
] : |
|||
// Кнопки для визуального редактора — без кнопок для обсуждений (визуальный редактор |
|||
// не предназначен для использования на страницах обсуждения) |
|||
[ |
|||
'викиф|икация', 'внутр|енние ссылки', 'оформл|ение', 'стил|евые правки', 'орфогр|афия', 'пункт|уация', |
|||
'кат|егоризация', 'к удал|ению', 'илл|юстрирование', 'источ|ники', 'запр|ос источника', |
|||
'доп|олнение', 'уточн|ение', 'испр|авление', 'обнов|ление' |
|||
]; |
|||
if ( !summaryButtons.hideDefaultButtons ) { |
if ( !summaryButtons.hideDefaultButtons ) { |
||
$.each( |
$.each( |
||
buttons, |
|||
'викиф|икация', 'оформл|ение', 'стил|евые правки', 'орфогр|афия', 'пункт|уация', |
|||
'вопрос', 'ответ', 'комм|ентарий', 'кат|егоризация', |
|||
'к удал|ению', 'илл|юстрация', 'источ|ники', 'запр|ос источника', |
|||
'доп|олнение', 'уточн|ение', 'испр|авление', 'обнов|ление', 'закр|ыто', 'итог' |
|||
], |
|||
function ( i, s ) { |
function ( i, s ) { |
||
addSummaryButton( s.replace( /\|.*/, '' ), s.replace( /\|/, '' ), 'default' ); |
addSummaryButton( s.replace( /\|.*/, '' ), s.replace( /\|/, '' ), 'default' ); |
||
Строка 57: | Строка 92: | ||
); |
); |
||
} |
} |
||
$( '<a>' ) |
|||
$( '<div class="summaryButtons-info"><a href="https://ru.wikipedia.org/wiki/Википедия:Гаджеты/Кнопки_описания_правок" class="mw-ui-button mw-ui-quiet summaryButtons-info-button" title="Информация о кнопках описания правок">?</a></div>' ) |
|||
.attr( 'href', 'https://ru.wikipedia.org/wiki/Википедия:Гаджеты/Кнопки_описания_правок' ) |
|||
.appendTo( '.summaryButtons' ); |
|||
.attr( 'target', '_blank' ) |
|||
} ); |
|||
.attr( 'title', 'Информация о кнопках описания правок' ) |
|||
.attr( 'tabindex', '-1' ) |
|||
.addClass( 'mw-ui-button mw-ui-quiet summaryButtons-info-link' ) |
|||
.text( '?' ) |
|||
.appendTo( $summaryButtons ); |
|||
// Эти стили находятся здесь, а не в отдельном 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' ); |
|||
} ); |
|||
} |
Текущая версия от 15:53, 26 декабря 2021
// Код из польской Википедии, изначально адаптированный для русскоязычного раздела Википедии by [[u:Alex Smotrov]]
// https://ru.wikipedia.org/ruwiki/w/index.php?diff=32005736&oldid=32004004&title=MediaWiki%3AEditpage.js&type=revision
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.util.escapeRegExp( txt ) );
if ( regExp.test( val ) ) {
return;
}
if ( /[^,; \/]$/.test( val ) ) {
val += summaryItemsSeparator;
}
if ( /[^ ]$/.test( val ) ) {
val += ' ';
}
$summary.val( val + txt ).focus().change();
}
mode = mode || 'classic';
window.insertSummary = insertSummary;
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 );
}
$( '<button>' )
.attr( 'type', 'button' )
.attr( 'title', text )
.addClass( 'mw-ui-button summaryButtons-button' )
.html( label )
.click( insertSummary )
.appendTo( $group );
};
var buttons = mode !== 'visual' ?
// Кнопки для обычного режима редактирования
[
'викиф|икация', 'внутр|енние ссылки', 'оформл|ение', 'стил|евые правки', 'орфогр|афия', 'пункт|уация',
'вопрос', 'ответ', 'комм|ентарий', 'кат|егоризация', 'к удал|ению', 'илл|юстрирование',
'источ|ники', 'запр|ос источника', 'доп|олнение', 'уточн|ение', 'испр|авление',
'обнов|ление', 'закр|ыто', 'итог'
] :
// Кнопки для визуального редактора — без кнопок для обсуждений (визуальный редактор
// не предназначен для использования на страницах обсуждения)
[
'викиф|икация', 'внутр|енние ссылки', 'оформл|ение', 'стил|евые правки', 'орфогр|афия', 'пункт|уация',
'кат|егоризация', 'к удал|ению', 'илл|юстрирование', 'источ|ники', 'запр|ос источника',
'доп|олнение', 'уточн|ение', 'испр|авление', 'обнов|ление'
];
if ( !summaryButtons.hideDefaultButtons ) {
$.each(
buttons,
function ( i, s ) {
addSummaryButton( s.replace( /\|.*/, '' ), s.replace( /\|/, '' ), 'default' );
}
);
}
$( '<a>' )
.attr( 'href', 'https://ru.wikipedia.org/wiki/Википедия:Гаджеты/Кнопки_описания_правок' )
.attr( 'target', '_blank' )
.attr( 'title', 'Информация о кнопках описания правок' )
.attr( 'tabindex', '-1' )
.addClass( 'mw-ui-button mw-ui-quiet summaryButtons-info-link' )
.text( '?' )
.appendTo( $summaryButtons );
// Эти стили находятся здесь, а не в отдельном 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' );
} );
}