World of Warcraft Forums Google Search

By Kimiko of Uldum Last update Aug 4, 2005 — Installed 1,157 times.
// ==UserScript==
// @name        World of Warcraft Forums Google Search
// @namespace   tag:kimiko.uldum+greasemonkey@gmail.com
// @description Alters the World of Warcraft forums to use Google search
// @include     http://forums.worldofwarcraft.com/*
// @exclude     http://forums.worldofwarcraft.com/
// ==/UserScript==

(function()
{
    function xpath(expr, context)
    {
        if( !context )
            context = document;
        var nodes = document.evaluate(expr, context, null,
            XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
        var result = new Array(nodes.snapshotLength);
        for( var i=0; i<result.length; i++ )
            result[i] = nodes.snapshotItem(i);

        return result;
    }

    function submitHandler(form)
    {
        function __handler(event)
        {
            var input = xpath("descendant::input[@name = 'SearchText']",
                    form)[0].value;
            var forum = xpath("descendant::input[@name = 'ForumName']",
                    form)[0].value;
            
            var url = "http://www.google.com/search?q=";
            
            // Add search terms
            url += input;
            
            // Add forum selection
            url += " inurl:"+forum;
            
            // Add site modifier
            url += " site:forums.worldofwarcraft.com";
            
            // Go there
            //window.location.href = url;
            GM_openInTab(url);
            
            event.preventDefault();
        }
        return __handler;
    }

    function googliseForm(form)
    {
        // Change form submit to google
        form.addEventListener("submit", submitHandler(form), false);
    }

    function googlise()
    {
        var forms = getForms();
        for( var i=0; i<forms.length; i++ )
            googliseForm(forms[i]);
    }

    function getForms()
    {
        return xpath("//form[@action = 'thread-search.aspx']");
    }

    googlise();
}
)();