MediaWiki:Common.js: различия между версиями
Материал из Набег Wiki
Перейти к навигацииПерейти к поиску
Алисофаг (обсуждение | вклад) Блджад, да ёбаный же костыль |
Алисофаг (обсуждение | вклад) Нет описания правки |
||
| Строка 35: | Строка 35: | ||
} ); | } ); | ||
} | } | ||
/* CloudImage: robust alignment class transfer | |||
/* CloudImage alignment class | Переносит классы выравнивания с <img> на родительский <figure>, | ||
Переносит классы выравнивания с <img> на <figure>. */ | пытается несколько раз и реагирует на динамические вставки. */ | ||
mw.loader.using(['jquery'], function () { | mw.loader.using(['jquery'], function () { | ||
(function ($) { | (function ($) { | ||
var allowed = ['tright', 'tleft', 'tcenter', 'tnone']; | var allowed = ['tright', 'tleft', 'tcenter', 'tnone']; | ||
function | function transferIn($root) { | ||
$ | $root.find('figure.cimg').each(function () { | ||
var $fig = $(this); | var $fig = $(this); | ||
var $img = $fig.find('img.cimg').first(); | var $img = $fig.find('img.cimg').first(); | ||
if (!$img.length) return; | if (!$img.length) return; | ||
var moved = false; | |||
allowed.forEach(function (cls) { | allowed.forEach(function (cls) { | ||
if ($img.hasClass(cls) && !$fig.hasClass(cls)) { | if ($img.hasClass(cls) && !$fig.hasClass(cls)) { | ||
$fig.addClass(cls); | $fig.addClass(cls); | ||
$img.removeClass(cls); | $img.removeClass(cls); | ||
moved = true; | |||
} | } | ||
}); | }); | ||
// если класс был на <img> но у фигуры уже есть другой выравнивающий класс, | |||
// мы всё равно оставляем существующий — это нормально | |||
if (moved) { | |||
// trigger reflow if needed (safety) | |||
$fig[0].offsetHeight; | |||
} | |||
}); | }); | ||
} | } | ||
| Строка 59: | Строка 66: | ||
// initial pass on DOM ready | // initial pass on DOM ready | ||
$(function () { | $(function () { | ||
transferIn($(document)); | |||
}); | }); | ||
| Строка 65: | Строка 72: | ||
if (mw.hook && mw.hook('wikipage.content')) { | if (mw.hook && mw.hook('wikipage.content')) { | ||
mw.hook('wikipage.content').add(function ($context) { | mw.hook('wikipage.content').add(function ($context) { | ||
transferIn($context); | |||
}); | }); | ||
} | } | ||
// MutationObserver fallback | // MutationObserver fallback for dynamic insertions | ||
var observer = new MutationObserver(function (mutations) { | try { | ||
var observer = new MutationObserver(function (mutations) { | |||
mutations.forEach(function (m) { | |||
if (m.addedNodes && m.addedNodes.length) { | |||
$(m.addedNodes).each(function () { | |||
var $n = $(this); | |||
if ($n.is && $n.is('figure.cimg')) { | |||
transferIn($n); | |||
} | } else if ($n.find && $n.find('figure.cimg').length) { | ||
} | transferIn($n); | ||
} | } | ||
}); | |||
} | |||
}); | |||
}); | }); | ||
observer.observe(document.body, { childList: true, subtree: true }); | |||
} catch (e) { | |||
// MutationObserver может не быть в очень старых браузерах — это не критично | |||
} | |||
// safety retries: если CloudImage рендерит позже, попробуем несколько раз | |||
(function retryLoop() { | |||
var tries = 0, maxTries = 12; | |||
var iv = setInterval(function () { | |||
transferIn($(document)); | |||
tries++; | |||
if (tries >= maxTries) clearInterval(iv); | |||
}, 400); | |||
})(); | |||
})(jQuery); | })(jQuery); | ||
}); | }); | ||
Версия от 01:17, 22 сентября 2025
/* Размещённый здесь код JavaScript будет загружаться пользователям при обращении к каждой странице */
/*WikiEditor/Викификатор*/
if ( $.inArray( mw.config.get( 'wgAction' ), ['edit', 'submit'] ) !== -1 ) {
mw.loader.load( '//ru.wikipedia.org/w/index.php?title=MediaWiki:Gadget-wikificator.js&action=raw&ctype=text/javascript' );
}
var customizeToolbar = function() {
$( '#wpTextbox1' ).wikiEditor( 'addToToolbar', {
'section': 'advanced',
'group': 'format',
'tools': {
'wikify': {
label: 'Викификатор',
type: 'button',
icon: '//upload.wikimedia.org/wikipedia/commons/0/06/Wikify-toolbutton.png',
action: {
type: 'callback',
execute: function(context){
Wikify();
}
}
}
}
} );
};
if ( $.inArray( mw.config.get( 'wgAction' ), ['edit', 'submit'] ) !== -1 ) {
mw.loader.using( 'user.options', function () {
if ( mw.user.options.get('usebetatoolbar') ) {
mw.loader.using( 'ext.wikiEditor.toolbar', function () {
$(document).ready( customizeToolbar );
} );
}
} );
}
/* CloudImage: robust alignment class transfer
Переносит классы выравнивания с <img> на родительский <figure>,
пытается несколько раз и реагирует на динамические вставки. */
mw.loader.using(['jquery'], function () {
(function ($) {
var allowed = ['tright', 'tleft', 'tcenter', 'tnone'];
function transferIn($root) {
$root.find('figure.cimg').each(function () {
var $fig = $(this);
var $img = $fig.find('img.cimg').first();
if (!$img.length) return;
var moved = false;
allowed.forEach(function (cls) {
if ($img.hasClass(cls) && !$fig.hasClass(cls)) {
$fig.addClass(cls);
$img.removeClass(cls);
moved = true;
}
});
// если класс был на <img> но у фигуры уже есть другой выравнивающий класс,
// мы всё равно оставляем существующий — это нормально
if (moved) {
// trigger reflow if needed (safety)
$fig[0].offsetHeight;
}
});
}
// initial pass on DOM ready
$(function () {
transferIn($(document));
});
// react to wikipage content replacements (preview, VE, ajax)
if (mw.hook && mw.hook('wikipage.content')) {
mw.hook('wikipage.content').add(function ($context) {
transferIn($context);
});
}
// MutationObserver fallback for dynamic insertions
try {
var observer = new MutationObserver(function (mutations) {
mutations.forEach(function (m) {
if (m.addedNodes && m.addedNodes.length) {
$(m.addedNodes).each(function () {
var $n = $(this);
if ($n.is && $n.is('figure.cimg')) {
transferIn($n);
} else if ($n.find && $n.find('figure.cimg').length) {
transferIn($n);
}
});
}
});
});
observer.observe(document.body, { childList: true, subtree: true });
} catch (e) {
// MutationObserver может не быть в очень старых браузерах — это не критично
}
// safety retries: если CloudImage рендерит позже, попробуем несколько раз
(function retryLoop() {
var tries = 0, maxTries = 12;
var iv = setInterval(function () {
transferIn($(document));
tries++;
if (tries >= maxTries) clearInterval(iv);
}, 400);
})();
})(jQuery);
});