「MediaWiki:Mobile.js」の版間の差分
ナビゲーションに移動
検索に移動
(MediaWiki:Common.jsの一部機能をモバイル版へ移植) |
(折り畳みボックスをオーバーレイ表示させる実験コード) |
||
1行目: | 1行目: | ||
/* ここにあるすべてのJavaScriptは携帯機器版サイトの利用者に影響します */ | /* ここにあるすべてのJavaScriptは携帯機器版サイトの利用者に影響します */ | ||
/*試験的コードを有効にする*/ | |||
var beta = mw.util.getParamValue('beta'), enableTestCode; | |||
if (beta == 'on') { | |||
$.cookie('enable-test-code', 'on', { path: '/', expires: 30 }); | |||
enableTestCode = true; | |||
} else if (beta == 'off') { | |||
$.cookie('enable-test-code', null); | |||
} else { | |||
enableTestCode = $.cookie('enable-test-code') == 'on'; | |||
} | |||
/*[[テンプレート:折り畳みボックス]]*/ | /*[[テンプレート:折り畳みボックス]]*/ | ||
52行目: | 63行目: | ||
$lastContentBlock.children('table.collapsible').insertAfter($lastContentBlock); | $lastContentBlock.children('table.collapsible').insertAfter($lastContentBlock); | ||
makeCollapsibleBoxes(mw.util.$content); | if (!enableTestCode) makeCollapsibleBoxes(mw.util.$content); | ||
/*旧エケペディアへの言語間リンクで「_」を「%20」に変換する*/ | /*旧エケペディアへの言語間リンクで「_」を「%20」に変換する*/ | ||
59行目: | 70行目: | ||
}); | }); | ||
}); | }); | ||
if (enableTestCode) { | |||
/*[[テンプレート:折り畳みボックス]]をOverlayで表示*/ | |||
mw.loader.using('mobile.stable.common', function() { | |||
var CollapsibleBoxOverlay = mw.mobileFrontend.require('Overlay').extend({ | |||
className: 'collapsible-box-overlay mw-mf-overlay', | |||
initialize: function(options) { | |||
var title = options.table.find('> tbody > tr > td.navbox-title').html(), | |||
content = ''; | |||
options.heading = '<h2>' + title + '</h2>'; | |||
options.table.find('> tbody > tr > td.navbox-list').each(function() { | |||
var $list = $(this), | |||
$group = $list.prev('.navbox-group'); | |||
content += $list.html(); | |||
}); | |||
options.content = content; | |||
this._super(options); | |||
}, | |||
postRender: function(options) { | |||
var self = this; | |||
this._super(options); | |||
this.$('table.collapsible').each(function() { | |||
var $table = $(this); | |||
$table.on('click', function(e) { | |||
e.preventDefault(); | |||
new CollapsibleBoxOverlay({ table: $table, parent: self }).show(); | |||
}); | |||
}); | |||
} | |||
}); | |||
mw.hook('wikipage.content').add(function() { | |||
mw.util.$content.find('table.collapsible').each(function() { | |||
var $table = $(this); | |||
$table.find('> tbody > tr:not(:first)').hide(); | |||
$table.on('click', function(e) { | |||
e.preventDefault(); | |||
new CollapsibleBoxOverlay({ table: $table }).show(); | |||
}); | |||
}); | |||
}); | |||
}); | |||
} |
2014年3月6日 (木) 21:01時点における版
/* ここにあるすべてのJavaScriptは携帯機器版サイトの利用者に影響します */
/*試験的コードを有効にする*/
var beta = mw.util.getParamValue('beta'), enableTestCode;
if (beta == 'on') {
$.cookie('enable-test-code', 'on', { path: '/', expires: 30 });
enableTestCode = true;
} else if (beta == 'off') {
$.cookie('enable-test-code', null);
} else {
enableTestCode = $.cookie('enable-test-code') == 'on';
}
/*[[テンプレート:折り畳みボックス]]*/
var collapseCaption = '隠す';
var expandCaption = '表示';
function toggleCollapsible(key, e) {
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 });
}
e.preventDefault();
}
function makeCollapsibleBoxes($content) {
$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 = $('<span class="collapseButton">[<a href="#"></a>]</span>');
$table.find('tr:first > td:first').prepend($button);
$table.$toggle = $button.children();
if (/^cookie-(.+)$/.test(collapse)) {
var key = 'collapse-' + RegExp.$1;
collapse = $.cookie(key) || 'autocollapse';
$table.$toggle.on('click', $.proxy(toggleCollapsible, $table, key));
} else {
$table.$toggle.on('click', $.proxy(toggleCollapsible, $table, null));
}
if (collapse == 'collapsed' || (collapse == 'autocollapse' &&
$table.siblings('table.collapsible').length > 0)) {
$table.addClass('collapsed').find('> tbody > tr:not(:first)').hide();
$table.$toggle.text(expandCaption);
} else {
$table.$toggle.text(collapseCaption);
}
});
}
mw.hook('wikipage.content').add(function() {
/*ページ・ナビゲーションを章の外側に出す*/
var $lastContentBlock = mw.util.$content.children('h2:last + div');
$lastContentBlock.children('table.collapsible').insertAfter($lastContentBlock);
if (!enableTestCode) makeCollapsibleBoxes(mw.util.$content);
/*旧エケペディアへの言語間リンクで「_」を「%20」に変換する*/
$('#mw-mf-language-selection a:lang(akb49)').attr('href', function(i, href) {
return href.replace('_', '%20', 'g');
});
});
if (enableTestCode) {
/*[[テンプレート:折り畳みボックス]]をOverlayで表示*/
mw.loader.using('mobile.stable.common', function() {
var CollapsibleBoxOverlay = mw.mobileFrontend.require('Overlay').extend({
className: 'collapsible-box-overlay mw-mf-overlay',
initialize: function(options) {
var title = options.table.find('> tbody > tr > td.navbox-title').html(),
content = '';
options.heading = '<h2>' + title + '</h2>';
options.table.find('> tbody > tr > td.navbox-list').each(function() {
var $list = $(this),
$group = $list.prev('.navbox-group');
content += $list.html();
});
options.content = content;
this._super(options);
},
postRender: function(options) {
var self = this;
this._super(options);
this.$('table.collapsible').each(function() {
var $table = $(this);
$table.on('click', function(e) {
e.preventDefault();
new CollapsibleBoxOverlay({ table: $table, parent: self }).show();
});
});
}
});
mw.hook('wikipage.content').add(function() {
mw.util.$content.find('table.collapsible').each(function() {
var $table = $(this);
$table.find('> tbody > tr:not(:first)').hide();
$table.on('click', function(e) {
e.preventDefault();
new CollapsibleBoxOverlay({ table: $table }).show();
});
});
});
});
}