Bienvenue sur PostGIS.fr

Bienvenue sur PostGIS.fr , le site de la communauté des utilisateurs francophones de PostGIS.

PostGIS ajoute le support d'objets géographique à la base de données PostgreSQL. En effet, PostGIS "spatialise" le serverur PostgreSQL, ce qui permet de l'utiliser comme une base de données SIG.

Maintenu à jour, en fonction de nos disponibilités et des diverses sorties des outils que nous testons, nous vous proposons l'ensemble de nos travaux publiés en langue française.

source: trunk/workshop-routing-foss4g/web/ext/src/widgets/tree/TreeFilter.js @ 76

Revision 76, 3.5 KB checked in by djay, 12 years ago (diff)

Ajout du répertoire web

  • Property svn:executable set to *
Line 
1/*!
2 * Ext JS Library 3.4.0
3 * Copyright(c) 2006-2011 Sencha Inc.
4 * licensing@sencha.com
5 * http://www.sencha.com/license
6 */
7/**
8 * @class Ext.tree.TreeFilter
9 * Note this class is experimental and doesn't update the indent (lines) or expand collapse icons of the nodes
10 * @param {TreePanel} tree
11 * @param {Object} config (optional)
12 */
13Ext.tree.TreeFilter = function(tree, config){
14    this.tree = tree;
15    this.filtered = {};
16    Ext.apply(this, config);
17};
18
19Ext.tree.TreeFilter.prototype = {
20    clearBlank:false,
21    reverse:false,
22    autoClear:false,
23    remove:false,
24
25     /**
26     * Filter the data by a specific attribute.
27     * @param {String/RegExp} value Either string that the attribute value
28     * should start with or a RegExp to test against the attribute
29     * @param {String} attr (optional) The attribute passed in your node's attributes collection. Defaults to "text".
30     * @param {TreeNode} startNode (optional) The node to start the filter at.
31     */
32    filter : function(value, attr, startNode){
33        attr = attr || "text";
34        var f;
35        if(typeof value == "string"){
36            var vlen = value.length;
37            // auto clear empty filter
38            if(vlen == 0 && this.clearBlank){
39                this.clear();
40                return;
41            }
42            value = value.toLowerCase();
43            f = function(n){
44                return n.attributes[attr].substr(0, vlen).toLowerCase() == value;
45            };
46        }else if(value.exec){ // regex?
47            f = function(n){
48                return value.test(n.attributes[attr]);
49            };
50        }else{
51            throw 'Illegal filter type, must be string or regex';
52        }
53        this.filterBy(f, null, startNode);
54        },
55
56    /**
57     * Filter by a function. The passed function will be called with each
58     * node in the tree (or from the startNode). If the function returns true, the node is kept
59     * otherwise it is filtered. If a node is filtered, its children are also filtered.
60     * @param {Function} fn The filter function
61     * @param {Object} scope (optional) The scope (<code>this</code> reference) in which the function is executed. Defaults to the current Node.
62     */
63    filterBy : function(fn, scope, startNode){
64        startNode = startNode || this.tree.root;
65        if(this.autoClear){
66            this.clear();
67        }
68        var af = this.filtered, rv = this.reverse;
69        var f = function(n){
70            if(n == startNode){
71                return true;
72            }
73            if(af[n.id]){
74                return false;
75            }
76            var m = fn.call(scope || n, n);
77            if(!m || rv){
78                af[n.id] = n;
79                n.ui.hide();
80                return false;
81            }
82            return true;
83        };
84        startNode.cascade(f);
85        if(this.remove){
86           for(var id in af){
87               if(typeof id != "function"){
88                   var n = af[id];
89                   if(n && n.parentNode){
90                       n.parentNode.removeChild(n);
91                   }
92               }
93           }
94        }
95    },
96
97    /**
98     * Clears the current filter. Note: with the "remove" option
99     * set a filter cannot be cleared.
100     */
101    clear : function(){
102        var t = this.tree;
103        var af = this.filtered;
104        for(var id in af){
105            if(typeof id != "function"){
106                var n = af[id];
107                if(n){
108                    n.ui.show();
109                }
110            }
111        }
112        this.filtered = {};
113    }
114};
Note: See TracBrowser for help on using the repository browser.