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