Jump to content

MediaWiki:Common.js: Difference between revisions

From Megabonk Wiki
No edit summary
Tag: Reverted
No edit summary
Tag: Manual revert
 
(26 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 }
        var ADS_ENABLED = false;


  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 cleanupAdContainers() {
      action: 'parse',
            $('#megabonk_top_banner').remove();
      format: 'json',
            $('#megabonk_sidebar').remove();
      page: title,
            $('#megabonk_anchor').remove();
      prop: 'text'
            $('#megabonk_video').remove();
    }).done(function (res) {
            $('#megabonk_sticky').remove();
      var html = (res.parse && res.parse.text && res.parse.text['*']) || '';
 
      var parts = extractParts(html);
            $('.nitro-top-banner').remove();
      cache[title] = { overviewHTML: parts.overview, strategyHTML: parts.strategy };
            $('.nitro-sidebar-ad').remove();
      cb(cache[title]);
        }
    }).fail(function () {
 
      cb({ overviewHTML: '<div>Yüklenemedi.</div>', strategyHTML: '<div>Yüklenemedi.</div>'});
        /*
    });
        * Reklamlar kapalıysa hiçbir NitroAds çağrısı yapılmaz.
  }
        */
        if (!ADS_ENABLED) {
            cleanupAdContainers();
            return;
        }
 
        function logNitroError(name, err) {
            if (window.console && console.warn) {
                console.warn('[Megabonk Nitro] ' + name + ' failed:', err);
            }
        }
 
        function createNitroAd(name, adId, options) {
            if (!window.nitroAds || typeof window.nitroAds.createAd !== 'function') {
                return false;
            }
 
            if (!options || typeof options !== 'object') {
                logNitroError(name, 'Invalid options object');
                return false;
            }
 
            try {
                window.nitroAds.createAd(adId, options);
                return true;
            } catch (err) {
                logNitroError(name, err);
                return false;
            }
        }
 
        function runWhenNitroReady(callback, attemptsLeft) {
            attemptsLeft = attemptsLeft || 40;
 
            if (window.nitroAds && typeof window.nitroAds.createAd === 'function') {
                callback();
                return;
            }
 
            if (attemptsLeft <= 0) {
                logNitroError('loader', 'nitroAds.createAd was not available');
                return;
            }
 
            window.setTimeout(function () {
                runWhenNitroReady(callback, attemptsLeft - 1);
            }, 250);
        }
 
        function runIdle(callback, timeout) {
            if ('requestIdleCallback' in window) {
                window.requestIdleCallback(callback, {
                    timeout: timeout || 2500
                });
            } else {
                window.setTimeout(callback, timeout || 800);
            }
        }
 
        function initTopBanner() {
            if (isMainPage || 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);
            }
 
            createNitroAd('top banner', 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);
            }
 
            createNitroAd('sidebar', adId, {
                sizes: [
                    [300, 350],
                    [300, 250],
                    [300, 600],
                    [160, 600]
                ],
                geoDeny: ['RU']
            });
        }
 
        function initAnchor() {
            if (flags.anchorInit) {
                return;
            }
 
            flags.anchorInit = true;
 
            createNitroAd('anchor', '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;
 
            createNitroAd('floating video', 'megabonk_video', {
                format: 'floating',
                geoDeny: ['RU']
            });
        }
 
        function initSticky() {
            if (flags.stickyInit) {
                return;
            }


  function onToggleClick(btn) {
            flags.stickyInit = true;
    var $btn = $(btn);
    var state = $btn.attr('data-state') || 'closed';
    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') {
            createNitroAd('sticky rail', 'megabonk_sticky', {
      $btn.attr('data-state', 'closed').text('Göster');
                format: 'rail',
      $panel.attr('hidden', true);
                rail: 'right',
      return;
                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']
            });
        }


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


    $btn.attr('data-state', 'open').text('Gizle');
            /*
    $panel.removeAttr('hidden');
            * Sidebar reklamı mevcut hatanız nedeniyle kapalı bırakıldı:
            * "NitroAds: Invalid invocation of createAd..."
            */
            // initSidebarAd();


    // İlk açılışta yükle
            runIdle(function () {
    if (!$panel.data('loaded')) {
                initSticky();
      loadBuild(title, function (data) {
            }, 1200);
        $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
            runIdle(function () {
  $(document).on('click', '.br-toggle', function () { onToggleClick(this); });
                initAnchor();
            }, 2200);


  // Basit sekme kontrolü
            runIdle(function () {
  $(document).on('click', '.build-inline-tabs .tab-btn', function () {
                initVideo();
    var $btn = $(this);
            }, 4000);
    var tab = $btn.attr('data-tab');
        });
    var $panel = $btn.closest('.build-inline-panel');
     });
     $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 16:51, 22 May 2026

mw.loader.using(['mediawiki.util'], function () {
    $(function () {
        var ADS_ENABLED = false;

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

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

        function cleanupAdContainers() {
            $('#megabonk_top_banner').remove();
            $('#megabonk_sidebar').remove();
            $('#megabonk_anchor').remove();
            $('#megabonk_video').remove();
            $('#megabonk_sticky').remove();

            $('.nitro-top-banner').remove();
            $('.nitro-sidebar-ad').remove();
        }

        /*
         * Reklamlar kapalıysa hiçbir NitroAds çağrısı yapılmaz.
         */
        if (!ADS_ENABLED) {
            cleanupAdContainers();
            return;
        }

        function logNitroError(name, err) {
            if (window.console && console.warn) {
                console.warn('[Megabonk Nitro] ' + name + ' failed:', err);
            }
        }

        function createNitroAd(name, adId, options) {
            if (!window.nitroAds || typeof window.nitroAds.createAd !== 'function') {
                return false;
            }

            if (!options || typeof options !== 'object') {
                logNitroError(name, 'Invalid options object');
                return false;
            }

            try {
                window.nitroAds.createAd(adId, options);
                return true;
            } catch (err) {
                logNitroError(name, err);
                return false;
            }
        }

        function runWhenNitroReady(callback, attemptsLeft) {
            attemptsLeft = attemptsLeft || 40;

            if (window.nitroAds && typeof window.nitroAds.createAd === 'function') {
                callback();
                return;
            }

            if (attemptsLeft <= 0) {
                logNitroError('loader', 'nitroAds.createAd was not available');
                return;
            }

            window.setTimeout(function () {
                runWhenNitroReady(callback, attemptsLeft - 1);
            }, 250);
        }

        function runIdle(callback, timeout) {
            if ('requestIdleCallback' in window) {
                window.requestIdleCallback(callback, {
                    timeout: timeout || 2500
                });
            } else {
                window.setTimeout(callback, timeout || 800);
            }
        }

        function initTopBanner() {
            if (isMainPage || 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);
            }

            createNitroAd('top banner', 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);
            }

            createNitroAd('sidebar', adId, {
                sizes: [
                    [300, 350],
                    [300, 250],
                    [300, 600],
                    [160, 600]
                ],
                geoDeny: ['RU']
            });
        }

        function initAnchor() {
            if (flags.anchorInit) {
                return;
            }

            flags.anchorInit = true;

            createNitroAd('anchor', '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;

            createNitroAd('floating video', 'megabonk_video', {
                format: 'floating',
                geoDeny: ['RU']
            });
        }

        function initSticky() {
            if (flags.stickyInit) {
                return;
            }

            flags.stickyInit = true;

            createNitroAd('sticky rail', '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']
            });
        }

        runWhenNitroReady(function () {
            initTopBanner();

            /*
             * Sidebar reklamı mevcut hatanız nedeniyle kapalı bırakıldı:
             * "NitroAds: Invalid invocation of createAd..."
             */
            // initSidebarAd();

            runIdle(function () {
                initSticky();
            }, 1200);

            runIdle(function () {
                initAnchor();
            }, 2200);

            runIdle(function () {
                initVideo();
            }, 4000);
        });
    });
});