Jump to content

MediaWiki:Common.js

From Megabonk Wiki
Revision as of 21:59, 4 October 2025 by MegaAdmin (talk | contribs)

Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
mw.loader.using('mediawiki.api', function () {
  var api = new mw.Api();
  var cache = {}; // title -> { overviewHTML, strategyHTML }

  function extractParts(html) {
    var $wrap = $('<div>').html(html);
    var $overview = $wrap.find('.build-layout-container').first();
    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) {
    if (cache[title]) return cb(cache[title]);

    api.post({
      action: 'parse',
      format: 'json',
      page: title,
      prop: 'text'
    }).done(function (res) {
      var html = (res.parse && res.parse.text && res.parse.text['*']) || '';
      var parts = extractParts(html);
      cache[title] = { overviewHTML: parts.overview, strategyHTML: parts.strategy };
      cb(cache[title]);
    }).fail(function () {
      cb({ overviewHTML: '<div>Yüklenemedi.</div>', strategyHTML: '<div>Yüklenemedi.</div>'});
    });
  }

  function onToggleClick(btn) {
    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') {
      $btn.attr('data-state', 'closed').text('Göster');
      $panel.attr('hidden', true);
      return;
    }

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

    $btn.attr('data-state', 'open').text('Gizle');
    $panel.removeAttr('hidden');

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

  // Basit sekme kontrolü
  $(document).on('click', '.build-inline-tabs .tab-btn', function () {
    var $btn = $(this);
    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');
  });
});