Jump to content

MediaWiki:Common.js: Difference between revisions

From Megabonk Wiki
No edit summary
Tag: Reverted
No edit summary
Tag: Reverted
Line 1: Line 1:
mw.loader.using(['mediawiki.api','mediawiki.util']).then(function(){
mw.loader.using('mediawiki.api', function () {
   var api = new mw.Api();
   var api = new mw.Api();
   function togglePanel($btn){
   var cache = {}; // title -> { overviewHTML, strategyHTML }
    var targetId = $btn.attr('data-target');
    var $panel = $('#'+targetId);
    var $panelRow = $panel.closest('tr');
    var $content = $panel.find('.build-content');
    var $loading = $panel.find('.build-loading');


     if ($panelRow.is(':visible')) { $panelRow.hide(); $btn.text('Show'); return; }
  function extractParts(html) {
    $panelRow.show(); $btn.text('Hide');
     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>'
    };
  }


     if ($content.data('loaded')===1) return;
  function loadBuild(title, cb) {
     if (cache[title]) return cb(cache[title]);


    $loading.show();
     api.post({
     api.get({action:'parse',page:$panel.data('title'),prop:'text',disableeditsection:1,formatversion:2})
      action: 'parse',
      .then(function(data){
      format: 'json',
        var html=(data && data.parse && data.parse.text)?data.parse.text:'<em>Could not load content.</em>';
      page: title,
        $content.html(html);
      prop: 'text'
        $content.data('loaded',1);
    }).done(function (res) {
      })
      var html = (res.parse && res.parse.text && res.parse.text['*']) || '';
      .catch(function(){ $content.html('<em>Error while loading content.</em>'); })
      var parts = extractParts(html);
      .always(function(){ $loading.hide(); });
      cache[title] = { overviewHTML: parts.overview, strategyHTML: parts.strategy };
      cb(cache[title]);
    }).fail(function () {
      cb({ overviewHTML: '<div>Yüklenemedi.</div>', strategyHTML: '<div>Yüklenemedi.</div>'});
    });
   }
   }
   $(document).on('click','a.build-toggle',function(e){ e.preventDefault(); togglePanel($(this)); });
 
  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');
  });
});
});

Revision as of 21:59, 4 October 2025

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');
  });
});