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