コード例 #1
0
ファイル: eligo.js プロジェクト: jhamlet/node-eligo
    traverse: function (obj, query, breakOnFirst) {
        var queries, queryEngine,
            results, qLen, q, f;
        
        this.reset();
        
        obj = obj || this.subject;
        results = this.results;
        
        query = utils.isArray(query) ? query.toString() : query;

        if (typeof query === 'string') {
            queries = [[Query.parse(query, this.options), false]];
        }
        else {
            queries = utils.keys(query).
                map(function (src) {
                    return [queryEngine.parse(src), query[src]];
                });
        }
        
        qLen = queries.length;
        
        this.traverser.
            on('leave', function (path, traverser) {
                var i = 0,
                    node;
                
                for (; i < qLen; i++) {
                    node = path.node;
                    q = queries[i];
                    if (q[0].test(path)) {
                        results.push(node);
                        f = q[1];
                        if (f) {
                            path.ffwd();
                            f(path);
                        }
                        if (breakOnFirst) {
                            traverser.break();
                            break;
                        }
                    }
                }
            }).
            walk(obj);
        
        return this;
    },
コード例 #2
0
ファイル: segment.js プロジェクト: jhamlet/node-eligo
 map(function (key) {
     var from, to, by;
     switch (typeof key) {
         case 'string':
         case 'number':
             return key;
         case 'object':
             if (!utils.isArray(key)) {
                 from = key.from || 0;
                 to = key.to + 1;
                 by = key.by || 1;
                 key = utils.range(from, to, by);
             }
             return key;
     }
 }).