info343/lib/courseweb/js/xpath4prototype.js

/*  XPath for Prototype 0.1.3
 *  (c) 2007 Cybozu Labs, Inc.
 *
 *  XPath for Prototype is freely distributable under the terms of an MIT-style license.
 *  For details, see the JavaScript-XPath web site: http://coderepos.org/share/wiki/JavaScript-XPath
 *
/*--------------------------------------------------------------------------*/

if (window.Prototype && !window.$x) {

    window.$x = function $x(expr, context, ordered) {
        switch (arguments.length) {
            case 0:
                expr = '/';
                context = document;
                ordered = false;
                break;
            case 1:
                context = document;
                ordered = false;
                break;
            case 2:
                if (typeof context == 'string') {
                    context = $(context);
                    ordered = false;
                }
                else if (Object.isElement(context)) {
                    ordered = false;
                }
                else {
                    ordered = context;
                    context = document;
                }
                break;
            default:
                context = $(context);
                break;
        }
        var type = ordered ? 7 : 6;

        expr = document.createExpression(expr, null);

        var result = expr.evaluate(context, type, null);
        var nodes = [];
        for (var i = 0, l = result.snapshotLength; i < l; i ++)
            nodes.push(Element.extend(result.snapshotItem(i)));
        return nodes;
    };

    document.getElementsByXPath = $x;

    (function(f) {
        Element.addMethods({
            xpath: f,
            getElementsByXPath: f
        });
    })(function (context, expr, ordered) {
        return $x(expr, context, ordered);
    });

}