22qa8u7nWWqFLrwCF6E7cT changeset

Changeset303139353737 (b)
ParentNone (a)
ab
0+/* comment */
0+
0+comment = {
0+   _id: "itsid"
0+   _rev : "",
0+   link_id: "id of item you comment",
0+   parent: "id of parent"n
0+   children: "comment children",
0+}
0+
0+/* map function */
0+function(doc) {
0+  if (doc.kind == "comment") {
0+      emit(doc.link_id, doc);
0+  }
0+}
0+
0+/* reduce */
0+function (key, values) {
0+  var idx_comments = {};
0+  var comments = [];
0+  for (var i=0; i<values.length; i++) {
0+    if (values[i]) {
0+        idx_comments[values[i]['_id']] = values[i];
0+        if (!values[i]['parent'])
0+              comments.push(values[i]);
0+    }     
0+  }
0+
0+   function iter_comments(lcomments) {
0+     for (var i=0; i<lcomments.length; i++) {
0+       var comment = lcomments[i] || [];
0+       var thread=[];
0+       if (comment['children'] && comment['children'].length > 0) {
0+
0+         for (var j=0; j<comment['children'].length; j++) {
0+            thread.push(idx_comments[comment['children'][j]]);
0+         }
0+         if (thread && thread.length >0) {
0+           comment['thread'] = iter_comments(thread);
0+         } else {
0+           comment['thread'] = null;
0+         }
0+        }
0+        lcomments[i] = comment
0+      }
0+      return lcomments;
0+    }
0+    tmp = iter_comments(comments);
0+    return tmp;
0+}
0+
0+
0+/* rereduce */
0+function(key, values) {
0+  function cmp(a, b) {
0+    if (a['created'] > b['created'])
0+        return true;
0+    return false;
0+  }
0+  function swap(arr, i, j) {
0+    var tmp = arr[i];
0+    arr[i] = arr[j];
0+    arr[j] = tmp;
0+  }
0+  function partition(arr, start, end, pivot) {
0+    var pval = arr[pivot];
0+    swap(arr, pivot, end--);
0+    while (start < end) {
0+      if (cmp(arr[start], pval) {
0+        swap(arr, start, pivot);
0+        pivot++;
0+      }
0+    }
0+    swap(arr, pivot, end+1);
0+    return pivot;
0+  }
0+ 
0+  function qsort(arr, start, end) {
0+    if (start < end) {
0+        var pivot = partition(arr, start, end, start);
0+        qsort(arr, start, pivot);
0+        qsort(arr, pivot+1, end)
0+    }
0+  }
0+ 
0+  function iter_comments(comments) {
0+    qsort(comments, 0, comments.length-1);
0+    for (var i=0; i<comments.length; i++) {
0+        comment = comments[i];
0+        if (comment['thread'] and comment['thread']>1)
0+            comment['thread'] = iter_comments(comment['thread']);
0+        comments[i] = comment;
0+
0+    }
0+    return comments;
0+  }
0+  return iter_comments(values);
0+}
...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
--- Revision None
+++ Revision 303139353737
@@ -0,0 +1,99 @@
+/* comment */
+
+comment = {
+ _id: "itsid"
+ _rev : "",
+ link_id: "id of item you comment",
+ parent: "id of parent"n
+ children: "comment children",
+}
+
+/* map function */
+function(doc) {
+ if (doc.kind == "comment") {
+ emit(doc.link_id, doc);
+ }
+}
+
+/* reduce */
+function (key, values) {
+ var idx_comments = {};
+ var comments = [];
+ for (var i=0; i<values.length; i++) {
+ if (values[i]) {
+ idx_comments[values[i]['_id']] = values[i];
+ if (!values[i]['parent'])
+ comments.push(values[i]);
+ }
+ }
+
+ function iter_comments(lcomments) {
+ for (var i=0; i<lcomments.length; i++) {
+ var comment = lcomments[i] || [];
+ var thread=[];
+ if (comment['children'] && comment['children'].length > 0) {
+
+ for (var j=0; j<comment['children'].length; j++) {
+ thread.push(idx_comments[comment['children'][j]]);
+ }
+ if (thread && thread.length >0) {
+ comment['thread'] = iter_comments(thread);
+ } else {
+ comment['thread'] = null;
+ }
+ }
+ lcomments[i] = comment
+ }
+ return lcomments;
+ }
+ tmp = iter_comments(comments);
+ return tmp;
+}
+
+
+/* rereduce */
+function(key, values) {
+ function cmp(a, b) {
+ if (a['created'] > b['created'])
+ return true;
+ return false;
+ }
+ function swap(arr, i, j) {
+ var tmp = arr[i];
+ arr[i] = arr[j];
+ arr[j] = tmp;
+ }
+ function partition(arr, start, end, pivot) {
+ var pval = arr[pivot];
+ swap(arr, pivot, end--);
+ while (start < end) {
+ if (cmp(arr[start], pval) {
+ swap(arr, start, pivot);
+ pivot++;
+ }
+ }
+ swap(arr, pivot, end+1);
+ return pivot;
+ }
+
+ function qsort(arr, start, end) {
+ if (start < end) {
+ var pivot = partition(arr, start, end, start);
+ qsort(arr, start, pivot);
+ qsort(arr, pivot+1, end)
+ }
+ }
+
+ function iter_comments(comments) {
+ qsort(comments, 0, comments.length-1);
+ for (var i=0; i<comments.length; i++) {
+ comment = comments[i];
+ if (comment['thread'] and comment['thread']>1)
+ comment['thread'] = iter_comments(comment['thread']);
+ comments[i] = comment;
+
+ }
+ return comments;
+ }
+ return iter_comments(values);
+}