MediaWiki:Common.js — различия между версиями
Ivgon (обсуждение | вклад) |
Ivgon (обсуждение | вклад) |
||
| Строка 16: | Строка 16: | ||
e.stopPropagation(); | e.stopPropagation(); | ||
| + | // Если код уже в памяти — просто запускаем | ||
if ( typeof Wikify === 'function' ) { | if ( typeof Wikify === 'function' ) { | ||
Wikify(); | Wikify(); | ||
} else { | } else { | ||
| − | // | + | // Запрашиваем текст страницы напрямую через MediaWiki API |
| − | + | $.getJSON( mw.util.wikiScript( 'api' ), { | |
| − | + | format: 'json', | |
| − | + | action: 'query', | |
| − | . | + | prop: 'revisions', |
| + | titles: 'MediaWiki:Wikificator.js', | ||
| + | rvprop: 'content', | ||
| + | indexpageids: true | ||
| + | } ) | ||
| + | .done( function ( data ) { | ||
| + | try { | ||
| + | var pageId = data.query.pageids[0]; | ||
| + | var code = data.query.pages[pageId].revisions[0]['*']; | ||
| + | |||
| + | // Безопасно выполняем полученный JS-код в контексте страницы | ||
| + | $.globalEval( code ); | ||
| + | |||
if ( typeof Wikify === 'function' ) { | if ( typeof Wikify === 'function' ) { | ||
Wikify(); | Wikify(); | ||
} else { | } else { | ||
| − | alert( ' | + | alert( 'Код получен, но функция Wikify не найдена внутри MediaWiki:Wikificator.js' ); |
} | } | ||
| − | } ) | + | } catch ( err ) { |
| − | .fail( function() { | + | alert( 'Не удалось прочитать текст страницы MediaWiki:Wikificator.js. Возможно, страница пуста или не создана.' ); |
| − | + | } | |
| − | + | } ) | |
| + | .fail( function() { | ||
| + | alert( 'Критическая ошибка API при запросе к базе данных вики.' ); | ||
| + | } ); | ||
} | } | ||
} ); | } ); | ||
| Строка 41: | Строка 57: | ||
if ( $.inArray( mw.config.get( 'wgAction' ), [ 'edit', 'submit' ] ) !== -1 ) { | if ( $.inArray( mw.config.get( 'wgAction' ), [ 'edit', 'submit' ] ) !== -1 ) { | ||
| − | $( document ).ready( injectWikificatorLink ); | + | // Явно требуем модуль медиавики 'mediawiki.util' перед запуском |
| + | mw.loader.using( 'mediawiki.util', function () { | ||
| + | $( document ).ready( injectWikificatorLink ); | ||
| + | } ); | ||
} | } | ||
Версия 13:13, 1 ноября 2026
function injectWikificatorLink() {
if ( $( '#wikif-custom-btn-final' ).length ) return;
var $target = $( '.editButtons' );
if ( $target.length ) {
var $button = $( '<button>' )
.attr( {
'id': 'wikif-custom-btn-final',
'type': 'button',
'style': 'font-weight: bold; color: #252525; background: #f8f9fa; border: 1px solid #a2a9b1; padding: 3px 8px; margin-right: 8px; border-radius: 2px; cursor: pointer; display: inline-block; margin-top: 5px; vertical-align: middle;'
} )
.text( 'Викификатор' );
$button.on( 'click', function ( e ) {
e.preventDefault();
e.stopPropagation();
// Если код уже в памяти — просто запускаем
if ( typeof Wikify === 'function' ) {
Wikify();
} else {
// Запрашиваем текст страницы напрямую через MediaWiki API
$.getJSON( mw.util.wikiScript( 'api' ), {
format: 'json',
action: 'query',
prop: 'revisions',
titles: 'MediaWiki:Wikificator.js',
rvprop: 'content',
indexpageids: true
} )
.done( function ( data ) {
try {
var pageId = data.query.pageids[0];
var code = data.query.pages[pageId].revisions[0]['*'];
// Безопасно выполняем полученный JS-код в контексте страницы
$.globalEval( code );
if ( typeof Wikify === 'function' ) {
Wikify();
} else {
alert( 'Код получен, но функция Wikify не найдена внутри MediaWiki:Wikificator.js' );
}
} catch ( err ) {
alert( 'Не удалось прочитать текст страницы MediaWiki:Wikificator.js. Возможно, страница пуста или не создана.' );
}
} )
.fail( function() {
alert( 'Критическая ошибка API при запросе к базе данных вики.' );
} );
}
} );
$target.append( $button );
}
}
if ( $.inArray( mw.config.get( 'wgAction' ), [ 'edit', 'submit' ] ) !== -1 ) {
// Явно требуем модуль медиавики 'mediawiki.util' перед запуском
mw.loader.using( 'mediawiki.util', function () {
$( document ).ready( injectWikificatorLink );
} );
}