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

Материал из Набег Wiki
Перейти к навигацииПерейти к поиску
Блджад, да ёбаный же костыль
Нет описания правки
Строка 35: Строка 35:
         } );
         } );
}
}
 
/* CloudImage: robust alignment class transfer
/* CloudImage alignment class fixer
   Переносит классы выравнивания с <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 transferOnce($context) {
     function transferIn($root) {
       $context.find('figure.cimg').each(function () {
       $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 — но лучше убрать, чтобы не дублировать
             $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 () {
       transferOnce($(document));
       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) {
         transferOnce($context);
         transferIn($context);
       });
       });
     }
     }


     // MutationObserver fallback (на случай, если что-то динамически вставляет узлы)
     // MutationObserver fallback for dynamic insertions
     var observer = new MutationObserver(function (mutations) {
     try {
      mutations.forEach(function (m) {
      var observer = new MutationObserver(function (mutations) {
        if (m.addedNodes && m.addedNodes.length) {
        mutations.forEach(function (m) {
          // ищем только в добавленных узлах для экономии
          if (m.addedNodes && m.addedNodes.length) {
          $(m.addedNodes).each(function () {
            $(m.addedNodes).each(function () {
            var $n = $(this);
              var $n = $(this);
            if ($n.is && $n.is('figure.cimg') || $n.find && $n.find('figure.cimg').length) {
              if ($n.is && $n.is('figure.cimg')) {
              transferOnce($n);
                transferIn($n);
             }
              } else if ($n.find && $n.find('figure.cimg').length) {
           });
                transferIn($n);
         }
              }
             });
           }
         });
       });
       });
    });
      observer.observe(document.body, { childList: true, subtree: true });
    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);
});