Changeset 2574

Show
Ignore:
Timestamp:
10/09/07 03:30:24 (12 months ago)
Author:
JeremyRuston
Message:

Added tiddler filtering mechanism (ticket #381)

Location:
Trunk/core/js
Files:
5 modified

Legend:

Unmodified
Added
Removed
  • Trunk/core/js/Config.js

    r2437 r2574  
    106106                orphans: {}, 
    107107                shadowed: {}, 
    108                 touched: {} 
     108                touched: {}, 
     109                filter: {} 
    109110        }, 
    110111        closeAll: {}, 
  • Trunk/core/js/FileAdaptor.js

    r2194 r2574  
    9090 
    9191// Gets the list of tiddlers within a given workspace 
     92//#   context - passed on to callback function 
     93//#   userParams - user parameters passed through to the callback function 
    9294//#   callback - function to be called on completion 
    93 //#   context - passed on to callback function 
     95//#   filter - filter expression 
    9496//# Return value is true if the request was successfully issued, 
    9597//#   or an error description string if there was a problem 
     
    99101//#   context - parameters as originally passed into the getTiddlerList function 
    100102//#   tiddlerList - array of objects describing each tiddler 
    101 FileAdaptor.prototype.getTiddlerList = function(context,userParams,callback) 
     103FileAdaptor.prototype.getTiddlerList = function(context,userParams,callback,filter) 
    102104{ 
    103105        if(!this.store) 
     
    105107        if(!context) 
    106108                context = {}; 
    107         context.tiddlers = []; 
    108         this.store.forEachTiddler(function(title,tiddler) 
    109                 { 
    110                 var t = new Tiddler(title); 
    111                 t.text = tiddler.text; 
    112                 t.modified = tiddler.modified; 
    113                 t.modifier = tiddler.modifier; 
    114                 t.fields['server.page.revision'] = tiddler.modified.convertToYYYYMMDDHHMM(); 
    115                 t.tags = tiddler.tags; 
    116                 context.tiddlers.push(t); 
    117                 }); 
     109        context.tiddlers = this.store.filterTiddlers(filter); 
     110        for(var t=0; t<context.tiddlers.length; t++) { 
     111                context.tiddlers[t].fields['server.page.revision'] = context.tiddlers[t].modified.convertToYYYYMMDDHHMM(); 
     112        } 
    118113        context.status = true; 
    119114        window.setTimeout(function() {callback(context,userParams);},10); 
  • Trunk/core/js/Macros.js

    r2463 r2574  
    5959{ 
    6060        return store.getTouched(); 
     61}; 
     62 
     63config.macros.list.filter.handler = function(params) 
     64{ 
     65        var filter = params[1]; 
     66        var results = []; 
     67        if(filter) { 
     68                var tiddlers = store.filterTiddlers(filter); 
     69                for(var t=0; t<tiddlers.length; t++) 
     70                        results.push(tiddlers[t].title); 
     71        } 
     72        return results; 
    6173}; 
    6274 
  • Trunk/core/js/TiddlyWiki.js

    r2339 r2574  
    531531}; 
    532532 
     533// Filter a list of tiddlers 
     534//#   filter - filter expression (eg "tidlertitle [[multi word tiddler title]] [tag[systemConfig]]") 
     535//# Returns an array of Tiddler() objects that match the filter expression 
     536TiddlyWiki.prototype.filterTiddlers = function(filter) 
     537{ 
     538        var results = []; 
     539        if(filter) { 
     540                var re = /(\w+)|(?:\[([ \w]+)\[([ \w]+)\]\])|(?:\[\[([ \w]+)\]\])/mg; 
     541                var match = re.exec(filter); 
     542                while(match) { 
     543                        if(match[1]) { 
     544                                //# matches (eg) text 
     545                                var tiddler = this.fetchTiddler(match[1]) 
     546                                if(tiddler) 
     547                                        results.push(tiddler); 
     548                        } else if(match[2]) { 
     549                                //# matches (eg) [text[more text]] 
     550                                if(match[2]=="tag") { 
     551                                        this.forEachTiddler(function(title,tiddler) { 
     552                                                if(tiddler.isTagged(match[3])) 
     553                                                        results.push(tiddler); 
     554                                        }); 
     555                                } 
     556                        } else if(match[4]) { 
     557                                //# matches (eg) [[tiddler title]] 
     558                                var tiddler = this.fetchTiddler(match[4]) 
     559                                if(tiddler) 
     560                                        results.push(tiddler); 
     561                        }                        
     562                        match = re.exec(filter); 
     563                } 
     564        } else { 
     565                this.forEachTiddler(function(title,tiddler) {results.push(tiddler);}); 
     566        } 
     567        return results; 
     568}; 
     569 
  • Trunk/core/js/main.js

    r2503 r2574  
    8383        invokeParamifier(params,"onstart"); 
    8484        if(story.isEmpty()) { 
    85                 var defaultParams = store.getTiddlerText("DefaultTiddlers").parseParams("open",null,false); 
    86                 invokeParamifier(defaultParams,"onstart"); 
     85                var tiddlers = store.filterTiddlers(store.getTiddlerText("DefaultTiddlers")); 
     86                for(var t=0; t<tiddlers.length; t++) { 
     87                        story.displayTiddler("bottom",tiddlers[t].title); 
     88                } 
    8789        } 
    8890        window.scrollTo(0,0);