「MediaWiki:Mobile.js」の版間の差分

提供:エケペディア
ナビゲーションに移動 検索に移動
(オーバーレイ機能を削除。書き直し。タブ機能のテスト実装)
(タブを非表示にする選択肢を追加)
2行目: 2行目:


mw.hook('wikipage.content').add(function() {
mw.hook('wikipage.content').add(function() {
/* ページ最後に挿入されたページ・ナビゲーションを章の折り畳みの外側に出す */
var $lastContentBlock = mw.util.$content.children('h2:last + div');
$lastContentBlock.children('table.collapsible').insertAfter($lastContentBlock);


/* [[テンプレート:折り畳みボックス]] */
/* [[テンプレート:折り畳みボックス]] */
27行目: 23行目:
     var M = mw.mobileFrontend;
     var M = mw.mobileFrontend;


     /* 折り畳みボックス */
     function onPageLoad() {
    mw.util.$content.find('table.collapsible').each(function() {
        /* ページ最後に挿入されたページ・ナビゲーションを章の折り畳みの外側に出す */
         var $table = $(this),
         var $lastContentBlock = $('#content > h2:last + div');
            collapse = $table.data('collapse');
         $lastContentBlock.children('table.collapsible').insertAfter($lastContentBlock);
         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();
        $('table.collapsible').each(function() {
            var $table = $(this),
                collapse = $table.data('collapse');
            if ($table.hasClass('made-collapsible') || collapse == 'plain') return;
            $table.addClass('made-collapsible');


        if (/^cookie-(.+)$/.test(collapse)) {
             var $button = $table.find('tr:first > td:first > .collapseButton');
             var key = 'collapse-' + RegExp.$1;
             $table.$toggle = $button.append('[<a href="#"></a>]').children();
            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' &&
            if (/^cookie-(.+)$/.test(collapse)) {
                                        $table.siblings('table.collapsible').length)) {
                var key = 'collapse-' + RegExp.$1;
            $table.addClass('collapsed').find('> tbody > tr:not(:first)').hide();
                collapse = $.cookie(key) || 'autocollapse';
             $table.$toggle.text(expandCaption);
                $table.$toggle.on(M.tapEvent('click'),
        } else {
                                  $.proxy(toggleCollapsible, $table, key));
            $table.$toggle.text(collapseCaption);
             } else {
        }
                $table.$toggle.on(M.tapEvent('click'),
    });
                                  $.proxy(toggleCollapsible, $table, null));
            }


    /* タブ */
            if (collapse == 'collapsed' || (collapse == 'autocollapse' &&
    $('.tab-list').each(function() {
                                            $table.siblings('table.collapsible').length)) {
        var $tabList = $(this),
                $table.addClass('collapsed').find('> tbody > tr:not(:first)').hide();
            $tabContent = $tabList.nextAll('.tab-content'),
                $table.$toggle.text(expandCaption);
            $menu = $('<select>');
            } else {
        $tabList.find('> ul > li').each(function() {
                $table.$toggle.text(collapseCaption);
          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;
        $('.tab-list').each(function() {
            $tabContent.hide().eq(index).show();
            var $tabList = $(this),
                $tabContent = $tabList.nextAll('.tab-content'),
                $menu = $('<select><option value="0">(タブを非表示)</option></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();
            });
         });
         });
     });
     }
 
    M.on('page-loaded', onPageLoad);
    onPageLoad();


     /* 旧エケペディアへの言語間リンクで「_」を「%20」に置換する */
     /* 旧エケペディアへの言語間リンクで「_」を「%20」に置換する */
85行目: 90行目:
         });
         });
     });
     });
});
}); });
 
});

2014年9月7日 (日) 16:10時点における版

/* ここにあるすべてのJavaScriptは携帯機器版サイトの利用者に影響します */

mw.hook('wikipage.content').add(function() {

/* [[テンプレート:折り畳みボックス]] */
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;

    function onPageLoad() {
        /* ページ最後に挿入されたページ・ナビゲーションを章の折り畳みの外側に出す */
        var $lastContentBlock = $('#content > h2:last + div');
        $lastContentBlock.children('table.collapsible').insertAfter($lastContentBlock);

        /* 折り畳みボックス */
        $('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><option value="0">(タブを非表示)</option></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();
            });
        });
    }

    M.on('page-loaded', onPageLoad);
    onPageLoad();

    /* 旧エケペディアへの言語間リンクで「_」を「%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;
        });
    });
}); });