MediaWiki:Common.js/SpecialSearchEnhanced.js

提供: ひつじ小屋別館2代目
< MediaWiki:Common.js
2010年3月1日 (月) 18:45時点におけるMarine-Blue (トーク)による版 (検索ボックスの仕様変更に伴う修正、依頼による: http://ja.wikipedia.org/w/index.php?oldid=30569769)

(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
移動先: 案内検索

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

  • Firefox / Safari: Shift を押しながら 再読み込み をクリックするか、Ctrl-F5 または Ctrl-R を押してください (Mac では ⌘-R)
  • Google Chrome: Ctrl-Shift-R を押してください (Mac では ⌘-Shift-R)
  • Internet Explorer: Ctrl を押しながら 最新の情報に更新 をクリックするか、Ctrl-F5 を押してください
  • Opera: ツール → 設定 からキャッシュをクリアしてください。
/*
 *
 * Change Special:Search to use a drop-down menu
 *
 * Created by: [[en:User:Gracenotes]]
 * Modified by: [[ja:User:Mizusumashi]]
 *
 */

function createArgInput(name, value)
{
    var input = document.createElement('input');
    
    input.name = name;
    input.value = value;
    input.type = 'hidden';
    
    return input;
}

function SpecialSearchEnhanced()
{
    var searchForm = document.forms['powersearch'];
    if(! searchForm){
        return;
    }
    var searchBox = searchForm.search;
    var searchEngines = [];
    var selectBox = document.createElement('select');
    var hiddenDiv = document.createElement('div');
    hiddenDiv.style.display = 'none';

    searchForm.onsubmit = function () {
        if( ! searchEngines[selectBox.selectedIndex][0] ){
            return true;
        }
        searchEngines[selectBox.selectedIndex][0]();
        if(window.event){
            window.event.returnValue = false;
        }
        return false;
    }

    selectBox.onchange = function (){
        searchEngines[selectBox.selectedIndex][1]();
        if(window.event){
            window.event.returnValue = false;
        }
        return false;
    }

    var nsCheckBoxs = [
        searchForm.ns0,
        searchForm.ns1,
        searchForm.ns2,
        searchForm.ns3,
        searchForm.ns4,
        searchForm.ns5,
        searchForm.ns6,
        searchForm.ns7,
        searchForm.ns8,
        searchForm.ns9,
        searchForm.ns10,
        searchForm.ns11,
        searchForm.ns12,
        searchForm.ns13,
        searchForm.ns14,
        searchForm.ns15,
        searchForm.ns100,
        searchForm.ns101
    ]
    
    var setNsCheckBoxs = function(disabled, color){
        for(var i in nsCheckBoxs){
            nsCheckBoxs[i].disabled = disabled;
            if(nsCheckBoxs[i].nextSibling.nextSibling.style){
                nsCheckBoxs[i].nextSibling.nextSibling.style.color = color;
            }
        }
    }
    
    var enableNsCheckBoxs = function(){ setNsCheckBoxs(false, 'black')}
    var disableNsCheckBoxs = function(){ setNsCheckBoxs(true, 'silver')}

    var setOption = function (name, submit, change) {
        var opt = document.createElement('option');
        opt.appendChild(document.createTextNode(name));
        selectBox.appendChild(opt);
        searchEngines[searchEngines.length] = [submit, change];
    }
    
    var setSerchEngineOption = function (name, action, title, args) {
        var form = document.createElement('form');

        form.action = action;
        form.method = 'get';
        form.style.display = 'none';
        
        var keyword = createArgInput(title, '');
        form.appendChild(keyword);
        
        for(var i = 0; i < args.length; i += 2){
            form.appendChild(createArgInput(args[i],args[i+1]));
        }

        var search = function(){
            keyword.value = searchForm.search.value;
            form.submit();
        }

        setOption(name, search, disableNsCheckBoxs);
        hiddenDiv.appendChild(form);

        return form;
    }

    setOption('MediaWiki 検索 ', false, enableNsCheckBoxs);
    setSerchEngineOption('AltaVista ',
                         'http://www.altavista.com/web/results',
                         'aqa',
                         ['aqmode', 's', 'rc', 'dmn', 'swd', 'ja.wikipedia.org']);
    setSerchEngineOption('goo ',
                         'http://search.goo.ne.jp/web.jsp',
                         'MT',
                         ['Domain', 'ja.wikipedia.org', 'DS', 'IN', 'IE', 'UTF-8']);
    setSerchEngineOption('GoodSearch ',
                         'http://www.goodsearch.com/Search.aspx',
                         'Keywords',
                         ['site', 'ja.wikipedia.org', 'charityid', '812661']);
    setSerchEngineOption('Google ',
                         'http://www.google.co.jp/search',
                         'q',
                         ['as_sitesearch', 'ja.wikipedia.org']);
    setSerchEngineOption('Wikiwix ',
                         'http://www.wikiwix.com/index.php',
                         'action',
                         ['lang', 'ja'/*, 'disp', 'article' */]);
    setSerchEngineOption('Windows Live ',
                         'http://search.live.com/results.aspx',
                         'q',
                         ['q1', 'site:ja.wikipedia.org']);
    setSerchEngineOption('Yahoo! ',
                         'http://search.yahoo.co.jp/search',
                         'p',
                         ['vs', 'ja.wikipedia.org', 'ei', 'UTF-8']);

    searchBox.style.marginLeft = '0px';
    selectBox.style.marginTop = '2px';
    selectBox.style.marginRight = '2px';
    searchForm.search.parentNode.insertBefore(selectBox,
                                              searchForm.search.nextSibling.nextSibling);
    searchForm.appendChild(hiddenDiv);
    
    enableNsCheckBoxs();
}

addOnloadHook(SpecialSearchEnhanced);