]> CyberLeo.Net >> Repos - SourceForge/phpwiki.git/blob - themes/fusionforge/wikilens.js
Remove CVS backend
[SourceForge/phpwiki.git] / themes / fusionforge / wikilens.js
1 // Wikilens Javascript functions.
2
3 // Globals:
4
5 var rating = new Array; var prediction = new Array;
6 var avg = new Array; var numusers = new Array;
7 var canRate = new Array;
8 var msg_rating_votes = "Rating: %.1f (%d votes)";
9 var msg_curr_rating = "Your current rating: ";
10 var msg_curr_prediction = "Your current prediction: ";
11 //var msg_chg_rating = "Change your rating from ";
12 var msg_to = " to ";
13 var msg_add_rating = "Add your rating: ";
14 var msg_thanks = "Thanks!";
15 var msg_rating_deleted = "Rating deleted!";
16
17 var rateit_imgsrc = '/wiki/themes/fusionforge/images/RateIt';
18 var rateit_action = 'RateIt';
19 var idTop = '';
20 //
21
22 function displayRating(imgId, imgPrefix, ratingvalue, pred, init) {
23   var ratings = new Array('Not Rated','Awful','Very Poor','Poor','Below Average',
24     'Average','Above Average','Good','Very Good','Excellent','Outstanding');
25   var cancel = imgId + imgPrefix + 'Cancel';
26   var curr_rating = rating[imgId];
27   var curr_pred = prediction[imgId];
28   var title = '';
29   var imgSrc = rateit_imgsrc;
30   if (init) { // re-initialize titles
31     title = msg_curr_rating+curr_rating+' '+ratings[curr_rating*2];
32     var linebreak = '. '; //&#xD or &#13 within IE only;
33     if (pred) {
34       title = title+' '+msg_curr_prediction+ curr_pred+' '+ratings[curr_pred*2];
35     }
36         if (canRate[imgId]) {
37       if (curr_rating) {
38         document.getElementById(cancel).style.display = 'inline';
39       }
40       else {
41         document.getElementById(cancel).style.display = 'none';
42       }
43     }
44   }
45   for (var i=1; i<=10; i++) {
46     var imgName = imgId + i;
47     if (init) {
48       //document[imgName].title = title;
49       var j = i/2;
50       if (ratingvalue > 0) {
51         if (curr_rating) {
52           document.getElementById(imgName).onmouseout = function() { displayRating(imgId,imgPrefix,avg[imgId],0,0) };
53         } else if (curr_pred) {
54           document.getElementById(imgName).onmouseout = function() { displayRating(imgId,imgPrefix,curr_pred,1,0) };
55         }
56         if (curr_rating != ratingvalue && typeof(msg_chg_rating) != "undefined") {
57           document.getElementById(imgName).title = msg_chg_rating+curr_rating+' '+ratings[curr_rating*2]+msg_to+j+' '+ratings[i];
58         }
59       } else {
60         document.getElementById(imgName).onmouseout = function() { displayRating(imgId,imgPrefix,avg[imgId],0,0) };
61         document.getElementById(imgName).title = msg_add_rating+j+' '+ratings[i];
62       }
63     }
64     var imgType = 'N';
65     if (pred) {
66       if (init)
67         document.getElementById(imgName).title = title+linebreak+msg_add_rating+ratings[i];
68       imgType = 'R';
69     } else if (i<=(ratingvalue*2)) {
70       imgType = 'O';
71     }
72     document.getElementById(imgName).src = imgSrc + imgPrefix + imgType + ((i%2) ? 'k1' : 'k0') + '.png';
73   }
74 }
75
76 function displayRating2(imgId, imgPrefix, ratingvalue, pred, init) {
77   var ratings = new Array('Not Rated','Awful','Very Poor','Poor','Below Average',
78     'Average','Above Average','Good','Very Good','Excellent','Outstanding');
79   var cancel = imgId + imgPrefix + 'Cancel';
80   var curr_rating = rating[imgId];
81   var curr_pred = prediction[imgId];
82   var title = '';
83   var imgSrc = rateit_imgsrc;
84   if (init) { // re-initialize titles
85     title = msg_curr_rating+curr_rating+' '+ratings[curr_rating*2];
86     var linebreak = '. '; //&#xD or &#13 within IE only;
87     if (pred) {
88       title = title+' '+msg_curr_prediction+ curr_pred+' '+ratings[curr_pred*2];
89     }
90         if (curr_rating) {
91       document.getElementById(cancel).style.display = 'inline';
92         }
93         else {
94       document.getElementById(cancel).style.display = 'none';
95         }
96   }
97   for (var i=1; i<=10; i++) {
98     var imgName = imgId + i;
99     if (init) {
100       //document[imgName].title = title;
101       var j = i/2;
102       if (ratingvalue > 0) {
103         if (curr_rating) {
104           document.getElementById(imgName).onmouseout = function() { displayRating(imgId,imgPrefix,avg[imgId],0,0) };
105         } else if (curr_pred) {
106           document.getElementById(imgName).onmouseout = function() { displayRating(imgId,imgPrefix,curr_pred,1,0) };
107         }
108         if (curr_rating != ratingvalue && typeof(msg_chg_rating) != "undefined") {
109           document.getElementById(imgName).title = msg_chg_rating+curr_rating+' '+ratings[curr_rating*2]+msg_to+j+' '+ratings[i];
110         }
111       } else {
112         document.getElementById(imgName).onmouseout = function() { displayRating(imgId,imgPrefix,avg[imgId],0,0) };
113         document.getElementById(imgName).title = msg_add_rating+j+' '+ratings[i];
114       }
115     }
116     var imgType = 'N';
117     if (pred) {
118       if (init)
119         document.getElementById(imgName).title = title+linebreak+msg_add_rating+ratings[i];
120       imgType = 'R';
121     } else {
122       if (ratingvalue <= curr_rating) {
123         if (i <= (ratingvalue * 2))
124           imgType = 'Rp';
125         else
126           if (i <= (curr_rating * 2))
127             imgType = 'R';
128       }
129       else {
130         if (i <= (curr_rating * 2))
131           imgType = 'Rp';
132         else
133           if (i <= (ratingvalue * 2))
134             imgType = 'Rm';
135       }
136     }
137     document.getElementById(imgName).src = imgSrc + imgPrefix + imgType + ((i%2) ? 'k1' : 'k0') + '.png';
138   }
139 }
140
141 function sprintfRating(s, num, count) {
142   var num1 = Math.round(num * 10) / 10;
143   if (count < 2) s = s.replace(/votes/, 'vote');
144   return s.replace(/\%.1f/, num1).replace(/\%d/, count);
145 }
146 function clickRating(imgPrefix,pagename,version,imgId,dimension,newrating) {
147   var actionImg = imgId+'Action';
148   var top = document.getElementById('rateit-widget-top');
149   var nusers = numusers[imgId];
150   var old_rating = rating[imgId];
151   var sum1 = avg[imgId] * nusers;
152   var new_avg;
153   if (newrating == 'X') {
154     deleteRating(actionImg,pagename,dimension);
155     if (top && nusers) {
156       if (old_rating && old_rating > 0) {
157         if (nusers > 1) {
158           new_avg = (sum1 - old_rating) / (nusers - 1);
159           numusers[imgId]--;
160         }
161         else {
162           new_avg = 0;
163           numusers[imgId] = 0;
164         }
165       }
166       if (new_avg.toString() != "NaN" && idTop == imgId) {
167         avg[imgId] = new_avg;
168         top.childNodes[0].innerHTML = sprintfRating(msg_rating_votes, new_avg, nusers-1);
169       }
170     }
171     rating[imgId] = 0;
172         displayRating2(imgId,imgPrefix,0,0,1);
173   } else {
174     submitRating(actionImg,pagename,version,dimension,newrating);
175     if (top && nusers) {
176       if (old_rating && (old_rating > 0)) {
177         new_avg = (sum1 + newrating - old_rating)  / nusers;
178       } else {
179         new_avg = (sum1 + newrating) / (nusers + 1);
180         numusers[imgId]++;
181       }
182       if (new_avg.toString() != "NaN" && idTop == imgId) {
183         avg[imgId] = new_avg;
184         if (newrating != rating[imgId]) {
185           top.childNodes[0].innerHTML = sprintfRating(msg_rating_votes, new_avg, numusers[imgId]);
186         }
187       }
188     } else if (top && idTop == imgId) {
189       top.childNodes[0].innerHTML = sprintfRating(msg_rating_votes, newrating, 1);
190       avg[imgId] = newrating;
191       numusers[imgId] = 1;
192     }
193     rating[imgId] = newrating;
194     displayRating2(imgId,imgPrefix,newrating,0,1);
195   }
196 }
197 function submitRating(actionImg,page,version,dimension,newrating) {
198   //TODO: GET => PUT request
199   // currently ratings are changed with side-effect, but GET should be side-effect free.
200   var myRand = Math.round(Math.random()*(1000000));
201   var imgSrc = WikiURL(page) + 'version=' + version + '&action=' + rateit_action + '&mode=add&rating=' + newrating + '&dimension=' + dimension + '&nocache=1&nopurge=1&rand=' + myRand;
202   document.getElementById(actionImg).title = msg_thanks;
203   document.getElementById(actionImg).src = imgSrc;
204 }
205 function deleteRating(actionImg, page, dimension) {
206   //TODO: GET => DELETE request
207   // currently ratings are changed with side-effect, but GET should be side-effect free.
208   var myRand = Math.round(Math.random()*(1000000));
209   var imgSrc = WikiURL(page) + 'action=' + rateit_action + '&mode=delete&dimension=' + dimension + '&nocache=1&nopurge=1&rand=' + myRand;
210   document.getElementById(actionImg).title = msg_rating_deleted;
211   document.getElementById(actionImg).src = imgSrc;
212 }