「MediaWiki:Mobile.js」の版間の差分
ナビゲーションに移動
検索に移動
編集の要約なし |
(オーバーレイ機能を削除。書き直し。タブ機能のテスト実装) |
||
1行目: | 1行目: | ||
/* ここにあるすべてのJavaScriptは携帯機器版サイトの利用者に影響します */ | /* ここにあるすべてのJavaScriptは携帯機器版サイトの利用者に影響します */ | ||
/* | mw.hook('wikipage.content').add(function() { | ||
var | |||
/* ページ最後に挿入されたページ・ナビゲーションを章の折り畳みの外側に出す */ | |||
var $lastContentBlock = mw.util.$content.children('h2:last + div'); | |||
$lastContentBlock.children('table.collapsible').insertAfter($lastContentBlock); | |||
/*[[テンプレート:折り畳みボックス]]*/ | /* [[テンプレート:折り畳みボックス]] */ | ||
var collapseCaption = '隠す'; | var collapseCaption = '隠す'; | ||
var expandCaption = '表示'; | var expandCaption = '表示'; | ||
function toggleCollapsible(key, e) { | function toggleCollapsible(key, e) { | ||
e.preventDefault(); | |||
if (this.hasClass('collapsed')) { | if (this.hasClass('collapsed')) { | ||
this.removeClass('collapsed').find('> tbody > tr:not(:first)').fadeIn(); | this.removeClass('collapsed').find('> tbody > tr:not(:first)').fadeIn(); | ||
26行目: | 22行目: | ||
if (key) $.cookie(key, 'collapsed', { path: '/', expires: 90 }); | if (key) $.cookie(key, 'collapsed', { path: '/', expires: 90 }); | ||
} | } | ||
} | } | ||
function | mw.loader.using('mobile.stable.common', function() { | ||
$content.find('table.collapsible').each(function() { | var M = mw.mobileFrontend; | ||
/* 折り畳みボックス */ | |||
mw.util.$content.find('table.collapsible').each(function() { | |||
var $table = $(this), | var $table = $(this), | ||
collapse = $table.data('collapse'); | collapse = $table.data('collapse'); | ||
36行目: | 34行目: | ||
$table.addClass('made-collapsible'); | $table.addClass('made-collapsible'); | ||
var $button = | var $button = $table.find('tr:first > td:first > .collapseButton'); | ||
$table.$toggle = $button.append('[<a href="#"></a>]').children(); | |||
$table.$toggle = $button.children(); | |||
if (/^cookie-(.+)$/.test(collapse)) { | if (/^cookie-(.+)$/.test(collapse)) { | ||
var key = 'collapse-' + RegExp.$1; | var key = 'collapse-' + RegExp.$1; | ||
collapse = $.cookie(key) || 'autocollapse'; | collapse = $.cookie(key) || 'autocollapse'; | ||
$table.$toggle.on('click', $.proxy(toggleCollapsible, $table, key)); | $table.$toggle.on(M.tapEvent('click'), | ||
$.proxy(toggleCollapsible, $table, key)); | |||
} else { | } else { | ||
$table.$toggle.on('click', $.proxy(toggleCollapsible, $table, null)); | $table.$toggle.on(M.tapEvent('click'), | ||
$.proxy(toggleCollapsible, $table, null)); | |||
} | } | ||
if (collapse == 'collapsed' || (collapse == 'autocollapse' && | if (collapse == 'collapsed' || (collapse == 'autocollapse' && | ||
$table.siblings('table.collapsible').length | $table.siblings('table.collapsible').length)) { | ||
$table.addClass('collapsed').find('> tbody > tr:not(:first)').hide(); | $table.addClass('collapsed').find('> tbody > tr:not(:first)').hide(); | ||
$table.$toggle.text(expandCaption); | $table.$toggle.text(expandCaption); | ||
56行目: | 55行目: | ||
} | } | ||
}); | }); | ||
/* タブ */ | |||
$('.tab-list').each(function() { | |||
var $tabList = $(this), | |||
$tabContent = $tabList.nextAll('.tab-content'), | |||
$menu = $('<select>'); | |||
$tabList.find('> ul > li').each(function() { | |||
var $tab = $(this), | |||
$menuitem = $('<option>'); | |||
$menuitem.attr('value', $tab.data('tab')); | |||
$menuitem.text($tab.text()); | |||
if ($tab.hasClass('current-tab')) { | |||
$menuitem.attr('selected', 'selected'); | |||
} | |||
$menu.append($menuitem); | |||
}); | |||
$tabList.append($menu); | |||
$menu.bind('change', function() { | |||
var index = $menu.val() - 1; | |||
$tabContent.hide().eq(index).show(); | |||
}); | |||
} | |||
}); | }); | ||
/* 旧エケペディアへの言語間リンクで「_」を「%20」に置換する */ | |||
M.on('language-overlay-initialize', function(options) { | |||
options.languages = options.languages.map(function(o) { | |||
if (o.lang === 'akb49') o.url = o.url.replace('_', '%20', 'g'); | |||
return o; | |||
}); | }); | ||
}); | }); | ||
}); | }); | ||
} | }); |
2014年4月25日 (金) 18:34時点における版
/* ここにあるすべてのJavaScriptは携帯機器版サイトの利用者に影響します */
mw.hook('wikipage.content').add(function() {
/* ページ最後に挿入されたページ・ナビゲーションを章の折り畳みの外側に出す */
var $lastContentBlock = mw.util.$content.children('h2:last + div');
$lastContentBlock.children('table.collapsible').insertAfter($lastContentBlock);
/* [[テンプレート:折り畳みボックス]] */
var collapseCaption = '隠す';
var expandCaption = '表示';
function toggleCollapsible(key, e) {
e.preventDefault();
if (this.hasClass('collapsed')) {
this.removeClass('collapsed').find('> tbody > tr:not(:first)').fadeIn();
this.$toggle.text(collapseCaption);
if (key) $.cookie(key, 'uncollapsed', { path: '/', expires: 90 });
} else {
this.addClass('collapsed').find('> tbody > tr:not(:first)').fadeOut();
this.$toggle.text(expandCaption);
if (key) $.cookie(key, 'collapsed', { path: '/', expires: 90 });
}
}
mw.loader.using('mobile.stable.common', function() {
var M = mw.mobileFrontend;
/* 折り畳みボックス */
mw.util.$content.find('table.collapsible').each(function() {
var $table = $(this),
collapse = $table.data('collapse');
if ($table.hasClass('made-collapsible') || collapse == 'plain') return;
$table.addClass('made-collapsible');
var $button = $table.find('tr:first > td:first > .collapseButton');
$table.$toggle = $button.append('[<a href="#"></a>]').children();
if (/^cookie-(.+)$/.test(collapse)) {
var key = 'collapse-' + RegExp.$1;
collapse = $.cookie(key) || 'autocollapse';
$table.$toggle.on(M.tapEvent('click'),
$.proxy(toggleCollapsible, $table, key));
} else {
$table.$toggle.on(M.tapEvent('click'),
$.proxy(toggleCollapsible, $table, null));
}
if (collapse == 'collapsed' || (collapse == 'autocollapse' &&
$table.siblings('table.collapsible').length)) {
$table.addClass('collapsed').find('> tbody > tr:not(:first)').hide();
$table.$toggle.text(expandCaption);
} else {
$table.$toggle.text(collapseCaption);
}
});
/* タブ */
$('.tab-list').each(function() {
var $tabList = $(this),
$tabContent = $tabList.nextAll('.tab-content'),
$menu = $('<select>');
$tabList.find('> ul > li').each(function() {
var $tab = $(this),
$menuitem = $('<option>');
$menuitem.attr('value', $tab.data('tab'));
$menuitem.text($tab.text());
if ($tab.hasClass('current-tab')) {
$menuitem.attr('selected', 'selected');
}
$menu.append($menuitem);
});
$tabList.append($menu);
$menu.bind('change', function() {
var index = $menu.val() - 1;
$tabContent.hide().eq(index).show();
});
});
/* 旧エケペディアへの言語間リンクで「_」を「%20」に置換する */
M.on('language-overlay-initialize', function(options) {
options.languages = options.languages.map(function(o) {
if (o.lang === 'akb49') o.url = o.url.replace('_', '%20', 'g');
return o;
});
});
});
});