1 // Wikilens Javascript functions.
6 var data_path = '/phpwiki-cvs';
7 var pagename = 'HomePage';
8 var script_url= '/wikicvs';
9 var stylepath = data_path+'/themes/MonoBook/';
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 ";
20 var msg_add_rating = "Add your rating: ";
21 var msg_thanks = "Thanks!";
22 var msg_rating_deleted = "Rating deleted!";
24 //var rateit_imgsrc = '/phpwiki-cvs/themes/MonoBook/images/RateIt';
25 var rateit_imgsrc = '/wiki/themes/fusionforge/images/RateIt';
26 var rateit_action = 'RateIt';
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];
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 = '. '; //
 or 
 within IE only;
42 title = title+' '+msg_curr_prediction+ curr_pred+' '+ratings[curr_pred*2];
46 document.getElementById(cancel).style.display = 'inline';
49 document.getElementById(cancel).style.display = 'none';
53 for (var i=1; i<=10; i++) {
54 var imgName = imgId + i;
56 //document[imgName].title = title;
58 if (ratingvalue > 0) {
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) };
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];
68 document.getElementById(imgName).onmouseout = function() { displayRating(imgId,imgPrefix,avg[imgId],0,0) };
69 document.getElementById(imgName).title = msg_add_rating+j+' '+ratings[i];
75 document.getElementById(imgName).title = title+linebreak+msg_add_rating+ratings[i];
77 } else if (i<=(ratingvalue*2)) {
80 document.getElementById(imgName).src = imgSrc + imgPrefix + imgType + ((i%2) ? 'k1' : 'k0') + '.png';
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];
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 = '. '; //
 or 
 within IE only;
96 title = title+' '+msg_curr_prediction+ curr_pred+' '+ratings[curr_pred*2];
99 document.getElementById(cancel).style.display = 'inline';
102 document.getElementById(cancel).style.display = 'none';
105 for (var i=1; i<=10; i++) {
106 var imgName = imgId + i;
108 //document[imgName].title = title;
110 if (ratingvalue > 0) {
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) };
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];
120 document.getElementById(imgName).onmouseout = function() { displayRating(imgId,imgPrefix,avg[imgId],0,0) };
121 document.getElementById(imgName).title = msg_add_rating+j+' '+ratings[i];
127 document.getElementById(imgName).title = title+linebreak+msg_add_rating+ratings[i];
130 if (ratingvalue <= curr_rating) {
131 if (i <= (ratingvalue * 2))
134 if (i <= (curr_rating * 2))
138 if (i <= (curr_rating * 2))
141 if (i <= (ratingvalue * 2))
145 document.getElementById(imgName).src = imgSrc + imgPrefix + imgType + ((i%2) ? 'k1' : 'k0') + '.png';
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);
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;
161 if (newrating == 'X') {
162 deleteRating(actionImg,pagename,dimension);
164 if (old_rating && old_rating > 0) {
166 new_avg = (sum1 - old_rating) / (nusers - 1);
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);
180 displayRating2(imgId,imgPrefix,0,0,1);
182 submitRating(actionImg,pagename,version,dimension,newrating);
184 if (old_rating && (old_rating > 0)) {
185 new_avg = (sum1 + newrating - old_rating) / nusers;
187 new_avg = (sum1 + newrating) / (nusers + 1);
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]);
196 } else if (top && idTop == imgId) {
197 top.childNodes[0].innerHTML = sprintfRating(msg_rating_votes, newrating, 1);
198 avg[imgId] = newrating;
201 rating[imgId] = newrating;
202 displayRating2(imgId,imgPrefix,newrating,0,1);
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;
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;