MediaWiki:Gadget-piitabdropdownmenu.js

From PinataIsland.info, the Viva Piñata wiki
Jump to: navigation, search

Note: After saving, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Internet Explorer: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: Go to Menu → Settings (Opera → Preferences on a Mac) and then to Privacy & security → Clear browsing data → Cached images and files.
/*********************************************************************
**                ***WARNING: GLOBAL GADGET FILE***                 **
**         any changes to this file will affect many users          **
**          please discuss changes on the talk page or at           **
**             [[Wikipedia talk:Gadget]] before editing             **
**     (consider dropping the script author a note as well...)      **
**                                                                  **
**********************************************************************
**             Script:        Drop-down menus                       **
**            Version:        4.40g                                 **
**             Author:        Haza-w                                **
**      Documentation:        [[User:Haza-w/Drop-down menus]]       **
**                                                                  **
*********************************************************************/

// "Fail gracefully" if skin not supported
switch (skin) {
    case 'modern': case 'monobook':

    // Global variables
    var _cactions = {
        menus: [],
        mouse: null,
        timer: []
    };

    // Find absolute position of element
    function findPos(eid,offset) {
        var obj = document.getElementById(eid), pos = [0,0];
        do with (obj) {
            pos[0] += offsetLeft;
            pos[1] += offsetTop;
        } while (obj = obj.offsetParent);
        pos[0] += offset[0]; pos[1] += offset[1];
        return pos;
    }

    // Create menu div element
    function createMenu(mid,html) {
        var menu = document.createElement('div');
        with (menu) {
            id = mid;
            className = 'ca-menu';
            style.display = 'none';
        }
        menu.onmouseover = function () {showMenu(mid)};
        menu.onmouseout = function () {hideMenu(mid)};

        var elements = {
            ul: document.createElement('ul'),
            li: null,
            a: null,
            txt: null
        };
        with (elements) {
            for (var i = 0; i < html.length; i++) if (html[i].length) {
                li = document.createElement('li'); li.id = html[i][0];
                a = document.createElement('a'); a.href = html[i][2];
                txt = document.createTextNode(html[i][1]);
                a.appendChild(txt); li.appendChild(a); ul.appendChild(li);
            }
            menu.appendChild(ul);
        }

        document.body.appendChild(menu);

        return mid;
    }

    // Create cactions LI tab
    function createTab(cid,mid,ltxt) {
        var elements = {
            li: document.createElement('li'),
            a: document.createElement('a'),
            txt: document.createTextNode(ltxt)
        };
        with (elements) {
            li.id = cid;
            a.href = '#';
            a.onmouseover = function () {showMenu(mid,findPos(cid,[-10,20]))};
            a.onmouseout = function () {hideMenu(mid)};
            a.appendChild(txt); li.appendChild(a);
        }

        return elements.li;
    }

    // CSS hide elements
    function hideElements(elements,conditionals) {
        if (typeof(conditionals) == 'undefined') {
            for (var i = 0; i < elements.length; i++) if (document.getElementById(elements[i])) document.getElementById(elements[i]).style.display = 'none';
        }
        else for (var i = 0; i < elements.length; i++) if (document.getElementById(elements[i])) {
            document.getElementById(elements[i]).style.display = 'none';
            if (conditionals[i]) document.getElementById(conditionals[i]).style.display = 'none';
        }
    }

    // Show/hide menu functions
    function showMenu(mid,pos) {
        with (_cactions) {
            mouse = mid;
            if (pos) for (var i = 0; i < menus.length; i++) {
                if (timer[menus[i]]) {
                    clearTimeout(timer[menus[i]]);
                    timer[menus[i]] = null;
                }
                if (mid.replace(/-[^-]+$/,'') == menus[i]) continue;
                document.getElementById(menus[i]).style.display = 'none';
            }
            if (!timer[mid]) with (document.getElementById(mid).style) {
                display = '';
                if (pos) {
                    left = pos[0]+'px';
                    top = pos[1]+'px';
                }
            }
            else {
                clearTimeout(timer[mid]);
                timer[mid] = null;
            }
        }
    }
    function hideMenu(mid) {
        with (_cactions) {
            if (mid == mouse.replace(/-[^-]+$/,'')) timer[mid] = null;

            if (timer[mid]) {
                timer[mid] = null;
                document.getElementById(mid).style.display = 'none';
                if (mid == mouse && mid.search(/opt-.*-/) != -1) document.getElementById(mid.replace(/-[^-]+$/,'')).style.display = 'none';
            }
            else timer[mid] = setTimeout('hideMenu(\''+mid+'\');',400);
        }
    }

    // Delink element
    function removeLink(eid) {
        var element = document.getElementById(eid);
        if (!element.getElementsByTagName('a').length) return false;

        var a = element.getElementsByTagName('a')[0];
        element.appendChild(a.removeChild(a.firstChild));
        element.removeChild(a);

        element.className = 'ca-disabled';
    }

    // Page options hook
    addOnloadHook(function () {
        if (!wgCanonicalSpecialPageName) {
            with (_cactions) {
                menus[menus.length] = createMenu('opt-piinav',Array(
                                    ['c-pii-home',      'Home >',           		wgScript+'?title=Main_Page'],
                                    ['c-pii-classic',   'Classic >',        		wgScript+'?title=Viva_Piñata:_Classic'],
                                    ['c-pii-tip',       'Trouble in Paradise >',        wgScript+'?title=Viva_Piñata:_Trouble_in_Paradise'],
                                    ['c-pii-pp',        'Pocket Paradise >',        	wgScript+'?title=Viva_Piñata:_Pocket_Paradise'],
                                    ['c-pii-pa',        'Party Animals >',        	wgScript+'?title=Viva_Piñata:_Party_Animals'],
                                    ['c-pii-tv',       	'Television series >',          wgScript+'?title=Television_series'],
                                    ['c-pii-help',      'Help >',        		wgScript+'?title=Help:Contents']
                ));

                menus[menus.length] = createMenu('opt-piinav-home',Array(
                                                ['c-pii-home-plants',       	'Plants',    		wgScript+'?title=Plants'],
                                                ['c-pii-home-species',       	'Species',    		wgScript+'?title=Species'],
                                                ['c-pii-home-achievements',	'Achievements',    	wgScript+'?title=Achievements'],
                                                ['c-pii-home-shops',       	'Shops',    		wgScript+'?title=Shop'],
                                                ['c-pii-home-fertilizer',       'Fertilizing',    	wgScript+'?title=Fertilizer'],
                                                ['c-pii-home-tinker',       	'Tinkering',    	wgScript+'?title=Transformation'],
                                                ['c-pii-home-popular',       	'Popular articles',    	wgScript+'?title=Main_Page']
                ));

                menus[menus.length] = createMenu('opt-piinav-tv',Array(
                                                ['c-pii-tv-episodes',       	'Episode guide',    	wgScript+'?title=List_of_Viva_Piñata_episodes'],
                                                ['c-pii-tv-song',       	'Theme song',    	wgScript+'?title=Theme_Song'],
                                                ['c-pii-tv-all',		'All articles',		wgScript+'?title=Category:Television_Series']
                ));

                menus[menus.length] = createMenu('opt-piinav-classic',Array(
                                                ['c-pii-classic-plants',       	'Plants',    		wgScript+'?title=List_of_Viva_Piñata:_Classic_plants'],
                                                ['c-pii-classic-species',       'Species',    		wgScript+'?title=List_of_Viva_Piñata:_Classic_species'],
                                                ['c-pii-classic-popular',	'Popular articles',	wgScript+'?title=Viva_Piñata:_Classic'],
                                                ['c-pii-classic-all',		'All articles',		wgScript+'?title=Category:Classic']
                ));

                menus[menus.length] = createMenu('opt-piinav-tip',Array(
                                                ['c-pii-tip-plants',       	'Plants',    		wgScript+'?title=List_of_Viva_Piñata:_Trouble_in_Paradise_plants'],
                                                ['c-pii-tip-species',       	'Species',    		wgScript+'?title=List_of_Viva_Piñata:_Trouble_in_Paradise_species'],
                                                ['c-pii-tip-amber',		'Amber gem',		wgScript+'?title=Amber_gem'],
                                                ['c-pii-tip-bone',		'Bone',			wgScript+'?title=Bone'],
                                                ['c-pii-tip-famous',		'Famous piñata',	wgScript+'?title=Famous_piñata'],
                                                ['c-pii-tip-medal',		'Gold combat medal',	wgScript+'?title=Combat_medal'],
                                                ['c-pii-tip-pv',		'Piñata Vision',	wgScript+'?title=Piñata_Vision'],
                                                ['c-pii-tip-popular',		'Popular articles',	wgScript+'?title=Viva_Piñata:_Trouble_in_Paradise'],
                                                ['c-pii-tip-all',		'All articles',		wgScript+'?title=Category:Trouble_in_Paradise']
                ));

                menus[menus.length] = createMenu('opt-piinav-pp',Array(
                                                ['c-pii-pp-plants',       	'Plants',    		wgScript+'?title=List_of_Viva_Piñata:_Pocket_Paradise_plants'],
                                                ['c-pii-pp-species',       	'Species',    		wgScript+'?title=List_of_Viva_Piñata:_Pocket_Paradise_species'],
                                                ['c-pii-pp-popular',		'Popular articles',	wgScript+'?title=Viva_Piñata:_Pocket_Paradise'],
                                                ['c-pii-pp-all',		'All articles',		wgScript+'?title=Category:Pocket_Paradise']
                ));

                menus[menus.length] = createMenu('opt-piinav-pa',Array(
                                                ['c-pii-pa-achievements',       'Achievements',    	wgScript+'?title=Achievements'],
                                                ['c-pii-pa-events',       	'Challenge events',    	wgScript+'?title=Challenge_Events'],
                                                ['c-pii-pa-tracks',		'Racetracks',		wgScript+'?title=Racetracks'],
                                                ['c-pii-pa-all',		'All articles',		wgScript+'?title=Category:Party_Animals']
                ));

                menus[menus.length] = createMenu('opt-piinav-help',Array(
                                                ['c-pii-help-faq',       	'Frequently asked questions',    	wgScript+'?title=Frequently_Asked_Questions'],
                                                ['c-pii-help-common',       	'Other questions',    	wgScript+'?title=Category:Commonly_asked_questions'],
                                                ['c-pii-help-tips',		'Tips and strategies',	wgScript+'?title=Category:Gameplay_Tips'],
                                                ['c-pii-help-search',		'Search the site',	'http://pinataisland.info/forum/search.php'],
                                                ['c-pii-help-guides',		'Printable guides',	wgScript+'?title=Printable_Pinata_Guides']
                ));

                document.getElementById('p-cactions').getElementsByTagName('div')[0].getElementsByTagName('ul')[0].appendChild(createTab('ca-pii-nav','opt-piinav','Nav'));
                document.getElementById('p-navigation').getElementsByTagName('div')[0].getElementsByTagName('ul')[0].appendChild(createTab('p-pii-nav','opt-piinav','Navigation >'));
            }

            var eid = document.getElementById('n-Classic');
            if (eid) {
                    eid.onmouseover = function () {showMenu('opt-piinav-classic',findPos('n-Classic',[40,0]))};
                    eid.onmouseout = function () {hideMenu('opt-piinav-classic')};
                    if (typeof eid.getElementsByTagName('a')[0].textContent == 'string') eid.getElementsByTagName('a')[0].textContent += ' >';
                    if (typeof eid.getElementsByTagName('a')[0].innerText == 'string') eid.getElementsByTagName('a')[0].innerText += ' >';
            }

            document.getElementById('c-pii-home').onmouseover = function () {showMenu('opt-piinav-home',findPos('c-pii-home',[40,0]))};
            document.getElementById('c-pii-home').onmouseout = function () {hideMenu('opt-piinav-home')};
//            document.getElementById('c-pii-home').style.fontWeight = 'bold';

            document.getElementById('c-pii-tv').onmouseover = function () {showMenu('opt-piinav-tv',findPos('c-pii-tv',[40,0]))};
            document.getElementById('c-pii-tv').onmouseout = function () {hideMenu('opt-piinav-tv')};
//            document.getElementById('c-pii-tv').style.fontWeight = 'bold';

            document.getElementById('c-pii-classic').onmouseover = function () {showMenu('opt-piinav-classic',findPos('c-pii-classic',[40,0]))};
            document.getElementById('c-pii-classic').onmouseout = function () {hideMenu('opt-piinav-classic')};
//            document.getElementById('c-pii-classic').style.fontWeight = 'bold';

            document.getElementById('c-pii-tip').onmouseover = function () {showMenu('opt-piinav-tip',findPos('c-pii-tip',[40,0]))};
            document.getElementById('c-pii-tip').onmouseout = function () {hideMenu('opt-piinav-tip')};
//            document.getElementById('c-pii-tip').style.fontWeight = 'bold';

            document.getElementById('c-pii-pp').onmouseover = function () {showMenu('opt-piinav-pp',findPos('c-pii-pp',[40,0]))};
            document.getElementById('c-pii-pp').onmouseout = function () {hideMenu('opt-piinav-pp')};
//            document.getElementById('c-pii-pp').style.fontWeight = 'bold';

            document.getElementById('c-pii-pa').onmouseover = function () {showMenu('opt-piinav-pa',findPos('c-pii-pa',[40,0]))};
            document.getElementById('c-pii-pa').onmouseout = function () {hideMenu('opt-piinav-pa')};
//            document.getElementById('c-pii-pa').style.fontWeight = 'bold';

            document.getElementById('c-pii-help').onmouseover = function () {showMenu('opt-piinav-help',findPos('c-pii-help',[40,0]))};
            document.getElementById('c-pii-help').onmouseout = function () {hideMenu('opt-piinav-help')};
//            document.getElementById('c-pii-help').style.fontWeight = 'bold';

//            document.getElementById('c-pii-help-search').style.fontWeight = 'bold';
        }
    } );
}