MediaWiki:Mobile.js
注意: 保存後、変更を確認するにはブラウザーのキャッシュを消去する必要がある場合があります。
- Firefox / Safari: Shift を押しながら 再読み込み をクリックするか、Ctrl-F5 または Ctrl-R を押してください (Mac では ⌘-R)
- Google Chrome: Ctrl-Shift-R を押してください (Mac では ⌘-Shift-R)
- Microsoft Edge: Ctrl を押しながら 最新の情報に更新 をクリックするか、Ctrl-F5 を押してください。
/* ここにある全てのJavaScriptはモバイル版サイトの利用者に影響します */
// MediaWiki:Mobile.js または User:ご自身のユーザー名/mobile.js に記述
// MediaWiki:Mobile.js または User:ご自身のユーザー名/mobile.js に記述
mw.loader.using( ['jquery', 'mediawiki.util'], function () {
$( function () { // このスコープは $(document).ready とほぼ同様
'use strict';
// デバッグメッセージをコンソールに出力するフラグ
var enableDebugMessages = true;
function logDebug(message, element) {
if (enableDebugMessages && window.console && typeof window.console.log === 'function') {
if (element) {
console.log('[MobileExpandSections] ' + message, element);
} else {
console.log('[MobileExpandSections] ' + message);
}
}
}
logDebug('Script loaded. Attempting to expand sections.');
function expandAllSectionsInContext( $context ) {
logDebug('expandAllSectionsInContext called for context:', $context[0]);
// セレクタの候補:
// 1. MinervaNeueの標準的なセクションのヘッダー
// 2. MediaWiki標準の折りたたみ要素のトグル
// 3. MinervaNeueでセクション全体を囲む要素で、折りたたまれているもの
var selectorsToClick = [
'.collapsible-block.mw-collapsed .section-heading', // クリック対象はヘッダー
'.mw-collapsible.mw-collapsed .mw-collapsible-toggle' // クリック対象はトグル
];
var $elementsToClick = $();
selectorsToClick.forEach(function(selector) {
var $found = $context.find(selector);
if ($found.length > 0) {
logDebug('Found ' + $found.length + ' elements to click with selector: ' + selector);
$elementsToClick = $elementsToClick.add($found);
}
});
if ($elementsToClick.length > 0) {
$elementsToClick.each( function ( index ) {
var $this = $( this );
logDebug('Triggering click on element ' + ( index + 1 ) + ':', $this[0]);
$this.trigger( 'click' ); // Minervaのイベントハンドラを発火させる
// 念のため、展開されたか確認 (非同期の場合もあるので確実ではない)
// var $parentCollapsible = $this.closest('.collapsible-block, .mw-collapsible');
// setTimeout(function() {
// if ($parentCollapsible.hasClass('mw-collapsed')) {
// logDebug('Element ' + (index + 1) + ' might still be collapsed.', $parentCollapsible[0]);
// } else {
// logDebug('Element ' + (index + 1) + ' seems expanded.', $parentCollapsible[0]);
// }
// }, 150);
});
} else {
logDebug('No elements found to click for expansion in this context.');
// クリック対象が見つからない場合、mw-collapsedクラスを直接操作してみる (最終手段に近い)
var $directlyCollapsible = $context.find('.collapsible-block.mw-collapsed, .mw-collapsible.mw-collapsed');
if ($directlyCollapsible.length > 0) {
logDebug('Found ' + $directlyCollapsible.length + ' elements with .mw-collapsed. Attempting direct class manipulation.');
$directlyCollapsible.each(function() {
var $block = $(this);
var $header = $block.find('.section-heading, .mw-collapsible-toggle').first();
logDebug('Directly expanding block by removing .mw-collapsed:', $block[0]);
$block.removeClass('mw-collapsed');
if ($header.length) {
$header.attr('aria-expanded', 'true');
}
// Minervaの場合、コンテンツブロックの表示も制御している可能性
$block.find('.content_block').css('display', 'block');
});
} else {
logDebug('No .mw-collapsed elements found for direct class manipulation either.');
}
}
}
// 初回ページ読み込み時に関数実行
// 少し遅延させて、他のスクリプトやMinerva自身の初期化処理が終わるのを待つ
setTimeout(function() {
logDebug('Initial execution on document ready (after 500ms delay).');
// ページ全体のコンテンツを対象とする
expandAllSectionsInContext( $( document.body ) );
}, 500); // 500ミリ秒の遅延。必要に応じて調整してください。
// mw.hook を使用して、動的にコンテンツが更新された場合にも対応
// (例: Live Preview, VisualEditorからの切り替え、ページネーションなど)
mw.hook( 'wikipage.content' ).add( function ( $content ) {
logDebug('wikipage.content hook triggered for content:', $content[0]);
// $content は更新されたDOM要素のjQueryオブジェクト
// こちらも少し遅延させる
setTimeout(function() {
expandAllSectionsInContext( $content );
}, 100);
});
// MinervaNeueがAjaxでページ遷移を行う場合、追加のフックが必要なことがあります。
// mw.hook('minerva.pageLoaded').add(function() { ... }); のようなフックを調べてみてください。
// (このフック名は一例であり、正確ではない可能性があります)
} );
} );