Ticket #1261: ticket

File ticket, 3.4 KB (added by jdlrobson, 20 months ago)
Line 
1Index: test/js/TiddlyWiki.js
2===================================================================
3--- test/js/TiddlyWiki.js       (revision 12456)
4+++ test/js/TiddlyWiki.js       (working copy)
5@@ -1,7 +1,25 @@
6 jQuery(document).ready(function(){
7+       var module_tiddlers = [{title: "tvalue1", tags: ["twtesthello"], fields: {xyz:"bar"}},
8+               {title: "tvalue2", tags: []},
9+               {title: "tvalue3", tags: ["twtesthello", "goodbye"], fields: {xyz: "bar"}},
10+               {title: "tvalue4", tags: ["what"], fields:{xyz:"bar"}},
11+               {title: "tvalue5", tags: [], fields:{xyz:"barz"}}
12+       ];
13+       module("TiddlyWiki.js", {
14+               setup: function() {
15+                       for(var i = 0; i < module_tiddlers.length; i++) {
16+                               var tid = module_tiddlers[i];
17+                               store.saveTiddler(tid.title, tid.title, tid.text, null, null, tid.tags, tid.fields);
18+                       }
19+               },
20+               teardown: function() {
21+                       for(var i = 0; i < module_tiddlers.length; i++) {
22+                               var tid = module_tiddlers[i];
23+                               store.removeTiddler(tid.title);
24+                       }
25+               }
26+       });
27 
28-       module("TiddlyWiki.js");
29-
30        test("Slices: calcAllSlices()", function() {
31 
32                var store = new TiddlyWiki();
33@@ -268,4 +286,26 @@
34 
35        });
36 
37+
38+       test("getTaggedTiddlers", function() {
39+               var tiddlers = store.getTaggedTiddlers("twtesthello");
40+               strictEqual(tiddlers.length, 2);
41+       });
42+       
43+       test("getValueTiddlers", function() {
44+               var tiddlers = store.getValueTiddlers("xyz", "bar");
45+               var tiddlers2 = store.getValueTiddlers("tags", "twtesthello");
46+               strictEqual(tiddlers.length, 3);
47+       });
48+       
49+       test("filterTiddlers", function() {
50+               var tiddlers = store.filterTiddlers("[tag[twtesthello]]");
51+               var tiddlers2 = store.filterTiddlers("[xyz[bar]]");
52+               var tiddlers3 = store.filterTiddlers("[tag[twtesthello]][limit[1]]");
53+               var tiddlers4 = store.filterTiddlers("[xyz[bar]][limit[2]]");
54+               strictEqual(tiddlers.length, 2);
55+               strictEqual(tiddlers2.length, 3);
56+               strictEqual(tiddlers3.length, 1);
57+               strictEqual(tiddlers4.length, 2);
58+       });
59 });
60Index: js/TiddlyWiki.js
61===================================================================
62--- js/TiddlyWiki.js    (revision 12456)
63+++ js/TiddlyWiki.js    (working copy)
64@@ -480,6 +480,11 @@
65        return this.reverseLookup("tags",tag,true,sortField);
66 };
67 
68+TiddlyWiki.prototype.getValueTiddlers = function(field,value,sortField)
69+{
70+       return this.reverseLookup(field,value,true,sortField);
71+};
72+
73 // Return an array of the tiddlers that link to a given tiddler
74 TiddlyWiki.prototype.getReferringTiddlers = function(title,unusedParameter,sortField)
75 {
76@@ -495,8 +500,14 @@
77        var results = [];
78        this.forEachTiddler(function(title,tiddler) {
79                var f = !lookupMatch;
80-               for(var lookup=0; lookup<tiddler[lookupField].length; lookup++) {
81-                       if(tiddler[lookupField][lookup] == lookupValue)
82+               var values;
83+               if(["links", "tags"].contains(lookupField)) {
84+                       values = tiddler[lookupField];
85+               } else {
86+                       values = tiddler.fields[lookupField] ? [tiddler.fields[lookupField]] : [];
87+               }
88+               for(var lookup=0; lookup<values.length; lookup++) {
89+                       if(values[lookup] == lookupValue)
90                                f = lookupMatch;
91                }
92                if(f)
93@@ -618,6 +629,14 @@
94                                        case "sort":
95                                                results = this.sortTiddlers(results,match[3]);
96                                                break;
97+                                       case "limit":
98+                                               results = results.slice(0, parseInt(match[3],10));
99+                                               break;
100+                                       default:
101+                                               var matched = this.getValueTiddlers(match[2],match[3]);
102+                                               for(var m = 0; m < matched.length; m++)
103+                                                       results.pushUnique(matched[m]);
104+                                               break;
105                                }
106                        }
107                        match = re.exec(filter);