1 // Wikilens Javascript functions.
3 function displayRating(imgId, imgPrefix, ratingvalue, pred, init) {
4 var ratings = new Array('Not Rated','Awful','Very Poor','Poor','Below Average',
5 'Average','Above Average','Good','Very Good','Excellent','Outstanding');
6 var cancel = imgId + imgPrefix + 'Cancel';
7 var curr_rating = rating[imgId];
8 var curr_pred = prediction[imgId];
10 if (init) { // re-initialize titles
11 title = msg_curr_rating+curr_rating+' '+ratings[curr_rating*2];
12 var linebreak = '. '; //
 or 
 within IE only;
14 title = title+' '+msg_curr_prediction+ curr_pred+' '+ratings[curr_pred*2];
17 for (var i=1; i<=10; i++) {
18 var imgName = imgId + i;
19 var imgSrc = rateit_imgsrc;
21 if (curr_rating) document[cancel].style.display = 'inline';
22 document[imgName].title = title;
24 if (ratingvalue > 0) {
26 document[imgName].onmouseout = function() { displayRating(imgId,imgPrefix,curr_rating,0,0) };
27 } else if (curr_pred) {
28 document[imgName].onmouseout = function() { displayRating(imgId,imgPrefix,curr_pred,1,0) };
30 if (curr_rating != ratingvalue) {
31 document[imgName].title = msg_chg_rating+curr_rating+' '+ratings[curr_rating*2]+msg_to+j+' '+ratings[i];
34 document[imgName].onmouseout = function() { displayRating(imgId,imgPrefix,0,0,0) };
35 document[imgName].title = msg_add_rating+j+' '+ratings[i];
41 document[imgName].title = title+linebreak+msg_add_rating+ratings[i];
43 } else if (i<=(ratingvalue*2)) {
46 document[imgName].src = imgSrc + imgPrefix + imgType + ((i%2) ? 'k1' : 'k0') + '.png';
49 function sprintfRating(s, num, count) {
50 var num1 = num.toString().replace(/\.(\d).*/, '.$1');
51 return s.replace(/\%.1f/, num1).replace(/\%d/, count);
53 function clickRating(imgPrefix,pagename,version,imgId,dimension,newrating) {
54 var actionImg = imgId+'Action';
55 var top = document.getElementById('rateit-widget-top');
56 var nusers = numusers[imgId];
57 var old_rating = rating[imgId];
58 if (newrating == 'X') {
59 deleteRating(actionImg,pagename,dimension);
60 displayRating(imgId,imgPrefix,0,0,1);
62 var sum1 = avg[imgId] * nusers;
65 new_avg = (sum1 - old_rating) / (nusers-1);
68 if (new_avg.toString() != "NaN") {
69 top.childNodes[0].innerHTML = sprintfRating(msg_rating_votes, new_avg, nusers-1);
76 submitRating(actionImg,pagename,version,dimension,newrating);
77 displayRating(imgId,imgPrefix,newrating,0,1);
80 var sum1 = avg[imgId] * nusers;
81 if (old_rating && (old_rating > 0)) {
82 new_avg = (sum1 + newrating - old_rating) / nusers;
84 new_avg = (sum1 + newrating) / (nusers + 1);
88 if ((rating != rating[imgId]) && (new_avg.toString() != "NaN")) {
89 top.childNodes[0].innerHTML = sprintfRating(msg_rating_votes, new_avg, numusers[imgId]);
92 top.childNodes[0].innerHTML = sprintfRating(msg_rating_votes, newrating, 1);
93 avg[imgId] = newrating;
96 rating[imgId] = newrating;
99 function submitRating(actionImg,page,version,dimension,newrating) {
100 //TODO: GET => PUT request
101 // currently ratings are changed with side-effect, but GET should be side-effect free.
102 var myRand = Math.round(Math.random()*(1000000));
103 var imgSrc = WikiURL(page) + 'version=' + version + '&action=' + rateit_action + '+&mode=add&rating=' + newrating + '&dimension=' + dimension + '&nocache=1&nopurge=1&rand=' + myRand;
104 //alert('submitRating("'+actionImg+'", "'+page+'", '+version+', '+dimension+', '+newrating+') => '+imgSrc);
105 document[actionImg].title = msg_thanks;
106 document[actionImg].src = imgSrc;
108 function deleteRating(actionImg, page, dimension) {
109 //TODO: GET => DELETE request
110 // currently ratings are changed with side-effect, but GET should be side-effect free.
111 var myRand = Math.round(Math.random()*(1000000));
112 var imgSrc = WikiURL(page) + 'action=' + rateit_action + '&mode=delete&dimension=' + dimension + '&nocache=1&nopurge=1&rand=' + myRand;
113 //alert('deleteRating("'+actionImg+'", "'+page+'", '+version+', '+dimension+')');
114 document[actionImg].title = msg_rating_deleted;
115 document[actionImg].src = imgSrc;