96e1e874 |
1 | /******************************************************************************** |
2 | * javascript/spool_toggle : script for folding/unfolding threads in spool |
3 | * ------------------------ |
4 | * |
5 | * This file is part of the banana distribution |
6 | * Copyright: See COPYING files that comes with this distribution |
7 | ********************************************************************************/ |
8 | |
9 | /** prevent IE from launching two opposite toggle actions at the same time |
10 | * Usual parameters are: |
11 | * - 0 : no action is running |
12 | * - 1 : folding |
13 | * - 2 : unfolding |
14 | */ |
15 | var banana_toggle = 0; |
16 | |
17 | /** Release banana_toggle a little time after action is done |
18 | * called with : setTimeout(banana_release_toggle, 10); |
19 | */ |
20 | function banna_release_toggle() { |
21 | banana_toggle = 0; |
22 | } |
23 | |
24 | /** Unfold a thread by showing all its sons |
25 | * called on the img element of the thread |
26 | */ |
27 | function banana_unfold_thread() { |
28 | // don't unfold if already folding somewhere |
29 | if (banana_toggle == 1) { |
30 | return; |
31 | } |
32 | banana_toggle = 2; |
33 | var myid = $(this).parent().parent().parent().attr("id").replace(/[0-9]+_/,""); |
34 | // show all sons |
35 | $("tr[@id^="+myid+"_]").each(banana_subunfold_thread); |
36 | // change tree icon and prepare for folding |
37 | $(this). |
38 | attr("src",this.src.replace(/k3/,"k2")). |
39 | attr("alt","*"). |
40 | unbind("click",banana_unfold_thread). |
41 | click(banana_fold_thread); |
42 | setTimeout(banna_release_toggle, 10); |
43 | } |
44 | |
45 | /** Fold a thread by hiding all its sons |
46 | * called on the img element of the thread |
47 | */ |
48 | function banana_fold_thread() { |
49 | // don't fold if already unfolding somewhere |
50 | if (banana_toggle == 2) { |
51 | return; |
52 | } |
53 | banana_toggle = 1; |
54 | var myid = $(this).parent().parent().parent().attr("id").replace(/[0-9]+_/,""); |
55 | // hide all sons |
56 | $("tr[@id^="+myid+"_]").each(banana_subfold_thread); |
57 | // change tree icon and prepare for unfolding |
58 | $(this). |
59 | attr("src",this.src.replace(/k2/,"k3")). |
60 | attr("alt","+"). |
61 | unbind("click",banana_fold_thread). |
62 | click(banana_unfold_thread); |
63 | setTimeout(banna_release_toggle, 10); |
64 | } |
65 | |
66 | /** Show a son of a thread when unfolding |
67 | * called on the tr element of the son |
68 | */ |
69 | function banana_subunfold_thread() { |
70 | // show the element before working on sons |
71 | // otherwise they could be hidden and not managed |
72 | $(this).show(); |
73 | // if this son has subsons and is unfold |
74 | if ($("img[@alt='*']", this).size()) { |
75 | // show subsons |
76 | var myid = $(this).attr("id").replace(/[0-9]+_/,""); |
77 | $("tr[@id^="+myid+"_]").each(banana_subunfold_thread); |
78 | } |
79 | } |
80 | |
81 | /** Hide a son of a thread when folding |
82 | * called on the tr element of the son |
83 | */ |
84 | function banana_subfold_thread() { |
85 | // if this son has subsons and is unfold |
86 | if ($("img[@alt='*']", this).size()) { |
87 | // hide subsons |
88 | var myid = $(this).attr("id").replace(/[0-9]+_/,""); |
89 | $("tr[@id^="+myid+"_]").each(banana_subfold_thread); |
90 | } |
91 | // hide element only after working on sons |
92 | // otherwise they could be hidden and not managed |
93 | $(this).hide(); |
94 | } |
95 | |
96 | /** Fold all threads in page |
97 | */ |
98 | function banana_fold_all() { |
99 | $("tr img[alt='*'][@src*=k2]").each(banana_fold_thread); |
100 | } |
101 | |
102 | /** Unfold all threads in page |
103 | */ |
104 | function banana_unfold_all() { |
105 | $("tr img[alt='+'][@src*=k3]").each(banana_unfold_thread); |
106 | } |
107 | |
108 | // prepare for folding |
109 | $(document).ready( function() { |
110 | $("tr img[@alt='*'][@src*='k2']"). |
111 | css("cursor","pointer"). |
112 | click(banana_fold_thread); |
113 | }); |