| | 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 |
|---|
| | 536 | TiddlyWiki.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.isTaggedAllOf(match[3].split(" "))) { |
|---|
| | 553 | results.push(tiddler); |
|---|
| | 554 | } else displayMessage(match[3]); |
|---|
| | 555 | }); |
|---|
| | 556 | } |
|---|
| | 557 | } else if(match[4]) { |
|---|
| | 558 | //# matches (eg) [[tiddler title]] |
|---|
| | 559 | var tiddler = this.fetchTiddler(match[4]) |
|---|
| | 560 | if(tiddler) |
|---|
| | 561 | results.push(tiddler); |
|---|
| | 562 | } |
|---|
| | 563 | match = re.exec(filter); |
|---|
| | 564 | } |
|---|
| | 565 | } else { |
|---|
| | 566 | this.forEachTiddler(function(title,tiddler) {results.push(tiddler);}); |
|---|
| | 567 | } |
|---|
| | 568 | return results; |
|---|
| | 569 | }; |