MediaWiki:Common.js: Difference between revisions
Appearance
No edit summary Tag: Reverted |
No edit summary Tag: Reverted |
||
| Line 1: | Line 1: | ||
mw.loader.using( | mw.loader.using('mediawiki.api', function () { | ||
var api = new mw.Api(); | 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>' | |||
}; | |||
} | |||
if ( | function loadBuild(title, cb) { | ||
if (cache[title]) return cb(cache[title]); | |||
api.post({ | |||
api. | 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>'}); | |||
}); | |||
} | } | ||
$(document).on('click',' | |||
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,'"') + '"]'); | |||
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,'"') + '"]');
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');
});
});