ポケモンWikiでは記事の投稿、加筆、検証、修正等参加、協力してくださる方を必要としています。方法や詳細はポケモンWikiに投稿するにはをご覧ください。

MediaWiki:Gadget-toggle.js

提供:ポケモンWiki
ナビゲーションに移動検索に移動

注意: 保存後、変更を確認するにはブラウザーのキャッシュを消去する必要がある場合があります。

  • Firefox / Safari: Shift を押しながら 再読み込み をクリックするか、Ctrl-F5 または Ctrl-R を押してください (Mac では ⌘-R)
  • Google Chrome: Ctrl-Shift-R を押してください (Mac では ⌘-Shift-R)
  • Internet Explorer / Microsoft Edge: Ctrl を押しながら 最新の情報に更新 をクリックするか、Ctrl-F5 を押してください
  • Opera: Ctrl-F5を押してください
(function(){
    /** 
        Toggles the display of elements on a page 
        Author/contact: Austin Che http://openwetware.org/wiki/User:Austin_J._Che
        See http://openwetware.org/wiki/OpenWetWare:Toggle for examples and documentation
     */
    var togglers = new Array();     
    var allClasses = new Object(); // associative map of class names to page elements
     
    function toggler(id)
    {
        var toBeToggled = togglers[id];
        if (!toBeToggled)
            return;
     
        // if some element is in list more than once, it will be toggled multiple times
        for (var i = 0; i < toBeToggled.length; i++)
        {
            // get array of elements to operate on
            var toggles = toBeToggled[i][1];
            if (typeof(toggles) == "string")
            {
                if (toggles.charAt(0) == '-')
                {
                    // treat as an element ID, not as class
                    toggles = document.getElementById(toggles.substring(1));
                    if (toggles)
                        toggles = new Array(toggles);
                }
                else
                    toggles = allClasses[toggles];
            }
            if (!toggles || !toggles.length)
                continue;
     
            var op = toBeToggled[i][0]; // what the operation will be
     
            switch (op)
            {
                case "_reset":
                    for (var j in toggles)
                        toggles[j].style.display = toggles[j]._toggle_original_display;
                    break;
                case "_show":
                    for (var j in toggles)
                        toggles[j].style.display = '';
                    break;
                case "_hide":
                    for (var j in toggles)
                        toggles[j].style.display = 'none';
                    break;
                case "":
                default:
                    // Toggle
                    for (var j in toggles)
                        toggles[j].style.display = ((toggles[j].style.display == 'none') ? '' : 'none');
                    break;
            }
        }
    }
     
    function createTogglerLink(elem, id)
    {
        var toggle = document.createElement("a");
        toggle.className = 'toggler-link';
        toggle.setAttribute('id', 'toggler' + id);
        toggle.setAttribute('href', '#');
        toggle.addEventListener('click', function (e) {
            e.preventDefault();
            toggler(id);
        }, false);
        var child = elem.firstChild;
        elem.removeChild(child);
        toggle.appendChild(child);
        elem.insertBefore(toggle, elem.firstChild);
    }
     
    function toggleInit()
    {
        var togglerElems = new Array();
        var toggleGroup = new Array();
     
        // initialize/clear any old information
        togglers = new Array();     
        allClasses = new Object();
        allClasses.watch = undefined;
        allClasses.unwatch = undefined;
     
     
        // make list of all document classes
        var elems = document.getElementsByTagName("*");
        var numelems = elems.length;
        for (var i = 0; i < elems.length; i++)
        {
            var elem = elems[i];
            if (typeof elem.className != 'string' || !elem.className) 
                continue;
     
            elem._toggle_original_display = elem.style.display;
            var togglerID = -1;
            var elemClasses = elem.className.split(' '); // get list of classes
            for (var j = 0; j < elemClasses.length; j++)
            {
                var elemClass = elemClasses[j];
                if (! allClasses[elemClass])
                    allClasses[elemClass] = new Array();
                allClasses[elemClass].push(elem);
     
                // all the special classes begin with _toggle
                if (elemClass.substring(0, 7) != "_toggle")
                    continue;
     
                if (elemClass == "_togglegroup")
                    toggleGroup = new Array();
                else if (elemClass == "_toggle")
                    toggleGroup.push(elem);
                else if (elemClass.substring(0, 12) == "_toggle_init")
                {
                    // set initial value for display (ignore the original CSS set value)
                    // understands _toggle_initshow and _toggle_inithide
                    var disp = elemClass.substring(12);
                    if (disp == "show")
                        elem.style.display = '';
                    else if (disp == "hide")
                        elem.style.display = 'none';
                    elem._toggle_original_display = disp;
                }
                else if (elemClass.substring(0, 8) == "_toggler")
                {
                    if (togglerID == -1)
                    {
                        togglerID = togglers.length;
                        togglers[togglerID] = new Array();
                        togglerElems[togglerID] = elem;
                    }
     
                    // all classes are of form _toggler_op-CLASS
                    // figure out what class we're toggling
                    // if none is specified, then we use the current toggle group
                    var toBeToggled;
                    var hyphen = elemClass.indexOf('-');
                    if (hyphen != -1)
                        toBeToggled = elemClass.substring(hyphen+1);
                    else
                    {
                        toBeToggled = toggleGroup;
                        hyphen = elemClass.length;
                    }
     
                    var op = elemClass.substring(8, hyphen);
                    togglers[togglerID].push(new Array(op, toBeToggled));
                }
            }
        }
     
        // add javascript links to all toggler elements
        for (var i = 0; i < togglerElems.length; i++)
            createTogglerLink(togglerElems[i], i);
    }
     
    $(toggleInit);
})();