Jump to content

MediaWiki:Common.js: Difference between revisions

From Megabonk Wiki
No edit summary
Tag: Reverted
mNo edit summary
 
(18 intermediate revisions by the same user not shown)
Line 1: Line 1:
mw.loader.using('mediawiki.api', function () {
mw.loader.using(['mediawiki.util'], function () {
  var api = new mw.Api();
    $(function () {
  var cache = {}; // title -> { overviewHTML, strategyHTML }
        if (!window.nitroAds || !window.nitroAds.createAd) return;


  function extractParts(html) {
        var isMainPage =
    var $wrap = $('<div>').html(html);
            mw.config.get('wgIsMainPage') ||
    var $overview = $wrap.find('.build-layout-container').first();
            mw.config.get('wgPageName') === mw.config.get('wgMainPageTitle');
    var $strategy = $wrap.find('.build-strategy').first();
    return {
      overview: $overview.length ? $overview.prop('outerHTML') : '<div>Overview bulunamadı.</div>',
      strategy: $strategy.length ? $strategy.prop('outerHTML') : '<div>Strategy bulunamadı.</div>'
    };
  }


  function loadBuild(title, cb) {
        window.megabonkNitro = window.megabonkNitro || {};
    if (cache[title]) return cb(cache[title]);
        var flags = window.megabonkNitro;


    api.post({
        function initTopBanner() {
      action: 'parse',
            if (isMainPage) return;
      format: 'json',
            if (flags.topBannerInit) return;
      page: title,
            flags.topBannerInit = true;
      prop: 'text'
 
    }).done(function (res) {
            var bannerId = 'megabonk_top_banner';
      var html = (res.parse && res.parse.text && res.parse.text['*']) || '';
            var $bodyContent = $('#bodyContent');
      var parts = extractParts(html);
            if (!$bodyContent.length) return;
      cache[title] = { overviewHTML: parts.overview, strategyHTML: parts.strategy };
 
      cb(cache[title]);
            var $banner = $('#' + bannerId);
    }).fail(function () {
            if (!$banner.length) {
      cb({ overviewHTML: '<div>Yüklenemedi.</div>', strategyHTML: '<div>Yüklenemedi.</div>'});
                $banner = $('<div>', {
    });
                    id: bannerId,
  }
                    'class': 'nitro-top-banner'
                }).css({
                    margin: '10px 0 20px',
                    textAlign: 'center'
                });
                $bodyContent.prepend($banner);
            }
 
            window.nitroAds.createAd(bannerId, {
                sizes: [
                    [728, 90],
                    [970, 90],
                    [320, 100],
                    [320, 50]
                ],
                geoDeny: ["RU"]
            });
        }
 
        function initSidebarAd() {
            if (flags.sidebarInit) return;
            flags.sidebarInit = true;
 
            var adId = 'megabonk_sidebar';
            var $menuContainer = $('.vector-main-menu-container');
            if (!$menuContainer.length) return;
 
            var $adDiv = $('#' + adId);
            if (!$adDiv.length) {
                $adDiv = $('<div>', {
                    id: adId,
                    'class': 'nitro-sidebar-ad'
                }).css({
                    margin: '20px 0',
                    textAlign: 'center'
                });
 
                $menuContainer.after($adDiv);
            }
 
            window.nitroAds.createAd(adId, {
                sizes: [
                    [300, 350],
                    [300, 250],
                    [300, 600],
                    [160, 600]
                ],
                geoDeny: ["RU"]
            });
        }


  function onToggleClick(btn) {
        function initAnchor() {
    var $btn = $(btn);
            if (flags.anchorInit) return;
    var state = $btn.attr('data-state') || 'closed';
            flags.anchorInit = true;
    var $row = $btn.closest('.build-row--interactive');
    var title = $row.attr('data-page');
    var $panel = $('.build-inline-panel[data-target="' + title.replace(/"/g,'&quot;') + '"]');


    if (state === 'open') {
            window.nitroAds.createAd('megabonk_anchor', {
      $btn.attr('data-state', 'closed').text('Göster');
                format: "anchor-v2",
      $panel.attr('hidden', true);
                anchor: "bottom",
      return;
                anchorBgColor: "transparent",
    }
                anchorClose: false,
                anchorPersistClose: false,
                anchorStickyOffset: 0,
                mediaQuery: "(min-width: 0px)",
                geoDeny: ["RU"]
            });
        }


    // önce diğer açık panelleri kapat (opsiyonel)
        function initVideo() {
    $('.build-inline-panel:not([hidden])').attr('hidden', true);
            if (flags.videoInit) return;
    $('.br-toggle[data-state="open"]').attr('data-state','closed').text('Göster');
            flags.videoInit = true;


    $btn.attr('data-state', 'open').text('Gizle');
            window.nitroAds.createAd('megabonk_video', {
    $panel.removeAttr('hidden');
                format: "floating",
                geoDeny: ["RU"]
            });
        }


    // İlk açılışta yükle
        function initSticky() {
    if (!$panel.data('loaded')) {
            if (flags.stickyInit) return;
      loadBuild(title, function (data) {
            flags.stickyInit = true;
        $panel.find('.tab-panel[data-tab="overview"]').html(data.overviewHTML);
        $panel.find('.tab-panel[data-tab="strategy"]').html(data.strategyHTML);
        $panel.data('loaded', '1');
      });
    }
  }


  // Satır düğmesi
            window.nitroAds.createAd('megabonk_sticky', {
  $(document).on('click', '.br-toggle', function () { onToggleClick(this); });
                format: "rail",
                rail: "right",
                railOffsetTop: 0,
                railOffsetBottom: 0,
                railCollisionWhitelist: [],
                railCloseColor: "#666666",
                railSpacing: 5,
                railStack: true,
                railStickyTop: 0,
                railVerticalAlign: "center",
                sizes: [
                    [160, 600],
                    [300, 250],
                    [300, 600]
                ],
                mediaQuery: "(min-width: 1025px)",
                geoDeny: ["RU"]
            });
        }


  // Basit sekme kontrolü
        initTopBanner();
  $(document).on('click', '.build-inline-tabs .tab-btn', function () {
        initSidebarAd();
    var $btn = $(this);
        initAnchor();
    var tab = $btn.attr('data-tab');
        initVideo();
    var $panel = $btn.closest('.build-inline-panel');
        initSticky();
    $panel.find('.tab-btn').removeClass('active');
     });
    $btn.addClass('active');
     $panel.find('.tab-panel').attr('hidden', true);
    $panel.find('.tab-panel[data-tab="' + tab + '"]').removeAttr('hidden');
  });
});
});

Latest revision as of 14:32, 24 November 2025

mw.loader.using(['mediawiki.util'], function () {
    $(function () {
        if (!window.nitroAds || !window.nitroAds.createAd) return;

        var isMainPage =
            mw.config.get('wgIsMainPage') ||
            mw.config.get('wgPageName') === mw.config.get('wgMainPageTitle');

        window.megabonkNitro = window.megabonkNitro || {};
        var flags = window.megabonkNitro;

        function initTopBanner() {
            if (isMainPage) return;
            if (flags.topBannerInit) return;
            flags.topBannerInit = true;

            var bannerId = 'megabonk_top_banner';
            var $bodyContent = $('#bodyContent');
            if (!$bodyContent.length) return;

            var $banner = $('#' + bannerId);
            if (!$banner.length) {
                $banner = $('<div>', {
                    id: bannerId,
                    'class': 'nitro-top-banner'
                }).css({
                    margin: '10px 0 20px',
                    textAlign: 'center'
                });
                $bodyContent.prepend($banner);
            }

            window.nitroAds.createAd(bannerId, {
                sizes: [
                    [728, 90],
                    [970, 90],
                    [320, 100],
                    [320, 50]
                ],
                geoDeny: ["RU"]
            });
        }

        function initSidebarAd() {
            if (flags.sidebarInit) return;
            flags.sidebarInit = true;

            var adId = 'megabonk_sidebar';
            var $menuContainer = $('.vector-main-menu-container');
            if (!$menuContainer.length) return;

            var $adDiv = $('#' + adId);
            if (!$adDiv.length) {
                $adDiv = $('<div>', {
                    id: adId,
                    'class': 'nitro-sidebar-ad'
                }).css({
                    margin: '20px 0',
                    textAlign: 'center'
                });

                $menuContainer.after($adDiv);
            }

            window.nitroAds.createAd(adId, {
                sizes: [
                    [300, 350],
                    [300, 250],
                    [300, 600],
                    [160, 600]
                ],
                geoDeny: ["RU"]
            });
        }

        function initAnchor() {
            if (flags.anchorInit) return;
            flags.anchorInit = true;

            window.nitroAds.createAd('megabonk_anchor', {
                format: "anchor-v2",
                anchor: "bottom",
                anchorBgColor: "transparent",
                anchorClose: false,
                anchorPersistClose: false,
                anchorStickyOffset: 0,
                mediaQuery: "(min-width: 0px)",
                geoDeny: ["RU"]
            });
        }

        function initVideo() {
            if (flags.videoInit) return;
            flags.videoInit = true;

            window.nitroAds.createAd('megabonk_video', {
                format: "floating",
                geoDeny: ["RU"]
            });
        }

        function initSticky() {
            if (flags.stickyInit) return;
            flags.stickyInit = true;

            window.nitroAds.createAd('megabonk_sticky', {
                format: "rail",
                rail: "right",
                railOffsetTop: 0,
                railOffsetBottom: 0,
                railCollisionWhitelist: [],
                railCloseColor: "#666666",
                railSpacing: 5,
                railStack: true,
                railStickyTop: 0,
                railVerticalAlign: "center",
                sizes: [
                    [160, 600],
                    [300, 250],
                    [300, 600]
                ],
                mediaQuery: "(min-width: 1025px)",
                geoDeny: ["RU"]
            });
        }

        initTopBanner();
        initSidebarAd();
        initAnchor();
        initVideo();
        initSticky();
    });
});