]> CyberLeo.Net >> Repos - SourceForge/phpwiki.git/blob - themes/wikilens/wikilens.js
Remove $Id$
[SourceForge/phpwiki.git] / themes / wikilens / wikilens.js
1 // Wikilens Javascript functions.
2 // $Id$
3
4 /* Globals:
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 var rating = new Array; var prediction = new Array;
12 var avg = new Array; var numusers = new Array;
13 var msg_rating_votes = "Rating: %.1f (%d votes)";
14 var msg_curr_rating = "Your current rating: ";
15 var msg_curr_prediction = "Your current prediction: ";
16 var msg_chg_rating = "Change your rating from ";
17 var msg_to = " to ";
18 var msg_add_rating = "Add your rating: ";
19 var msg_thanks = "Thanks!";
20 var msg_rating_deleted = "Rating deleted!";
21
22 var rating_imgsrc = '/phpwiki-cvs/themes/MonoBook/images/RateIt';
23 var rateit_action = 'RateIt';
24 */
25
26 function displayRating(imgId, imgPrefix, ratingvalue, pred, init) {
27   var ratings = new Array('Not Rated','Awful','Very Poor','Poor','Below Average',
28                           'Average','Above Average','Good','Very Good','Excellent','Outstanding');
29   var cancel = imgId + imgPrefix + 'Cancel';
30   var curr_rating = rating[imgId];
31   var curr_pred = prediction[imgId];
32   var title = '';
33   if (init) { // re-initialize titles
34     title = msg_curr_rating+curr_rating+' '+ratings[curr_rating*2];
35     var linebreak = '. '; //&#xD or &#13 within IE only;
36     if (pred) {
37       title = title+' '+msg_curr_prediction+ curr_pred+' '+ratings[curr_pred*2];
38     }
39   }
40   for (var i=1; i<=10; i++) {
41     var imgName = imgId + i;
42     var imgSrc = rateit_imgsrc;
43     if (init) {
44       if (curr_rating) document[cancel].style.display = 'inline';
45       document[imgName].title = title;
46       var j = i/2;
47       if (ratingvalue > 0) {
48         if (curr_rating) {
49           document[imgName].onmouseout = function() { displayRating(imgId,imgPrefix,curr_rating,0,0) };
50         } else if (curr_pred) {
51           document[imgName].onmouseout = function() { displayRating(imgId,imgPrefix,curr_pred,1,0) };
52         }
53         if (curr_rating != ratingvalue) {
54           document[imgName].title = msg_chg_rating+curr_rating+' '+ratings[curr_rating*2]+msg_to+j+' '+ratings[i];
55         } 
56       } else {
57         document[imgName].onmouseout = function() { displayRating(imgId,imgPrefix,0,0,0) };
58         document[imgName].title = msg_add_rating+j+' '+ratings[i];
59       }
60     }
61     var imgType = 'N';
62     if (pred) {
63       if (init)
64         document[imgName].title = title+linebreak+msg_add_rating+ratings[i];
65       imgType = 'R';
66     } else if (i<=(ratingvalue*2)) {
67       imgType = 'O';
68     }
69     document[imgName].src = imgSrc + imgPrefix + imgType + ((i%2) ? 'k1' : 'k0') + '.png';
70   }
71 }
72 function sprintfRating(s, num, count) {
73     var num1 = num.toString().replace(/\.(\d).*/, '.$1');
74     return s.replace(/\%.1f/, num1).replace(/\%d/, count);
75 }
76 function clickRating(imgPrefix,pagename,version,imgId,dimension,newrating) {
77   var actionImg = imgId+'Action';
78   var top = document.getElementById('rateit-widget-top');
79   var nusers = numusers[imgId];
80   var old_rating = rating[imgId];
81   if (newrating == 'X') {
82     deleteRating(actionImg,pagename,dimension);
83     displayRating(imgId,imgPrefix,0,0,1);
84     if (top && nusers) {
85         var sum1 = avg[imgId] * nusers;
86         var new_avg;
87         if (nusers > 1)
88             new_avg = (sum1 - old_rating)  / (nusers-1);
89         else    
90             new_avg = 0.0;
91         if (new_avg.toString() != "NaN") {
92             top.childNodes[0].innerHTML = sprintfRating(msg_rating_votes, new_avg, nusers-1);
93             avg[imgId] = new_avg;
94             numusers[imgId]--;
95         }
96     }
97     rating[imgId] = 0;
98   } else {
99     submitRating(actionImg,pagename,version,dimension,newrating);
100     displayRating(imgId,imgPrefix,newrating,0,1);
101     if (top && nusers) {
102         var new_avg;
103         var sum1 = avg[imgId] * nusers;
104         if (old_rating && (old_rating > 0)) {
105             new_avg = (sum1 + newrating - old_rating)  / nusers;
106         } else {
107             new_avg = (sum1 + newrating) / (nusers + 1);
108             avg[imgId] = new_avg;
109             numusers[imgId]++;
110         }
111         if ((rating != rating[imgId]) && (new_avg.toString() != "NaN")) {
112             top.childNodes[0].innerHTML = sprintfRating(msg_rating_votes, new_avg, numusers[imgId]);
113         }
114     } else if (top) {
115         top.childNodes[0].innerHTML = sprintfRating(msg_rating_votes, newrating, 1);
116         avg[imgId] = newrating;
117         numusers[imgId] = 1;
118     }
119     rating[imgId] = newrating;
120   }
121 }
122 function submitRating(actionImg,page,version,dimension,newrating) {
123   //TODO: GET => PUT request
124   // currently ratings are changed with side-effect, but GET should be side-effect free.
125   var myRand = Math.round(Math.random()*(1000000));
126   var imgSrc = WikiURL(page) + 'version=' + version + '&action=' + rateit_action + '+&mode=add&rating=' + newrating + '&dimension=' + dimension + '&nocache=1&nopurge=1&rand=' + myRand;
127   //alert('submitRating("'+actionImg+'", "'+page+'", '+version+', '+dimension+', '+newrating+') => '+imgSrc);
128   document[actionImg].title = msg_thanks;
129   document[actionImg].src = imgSrc;
130 }
131 function deleteRating(actionImg, page, dimension) {
132   //TODO: GET => DELETE request
133   // currently ratings are changed with side-effect, but GET should be side-effect free.
134   var myRand = Math.round(Math.random()*(1000000));
135   var imgSrc = WikiURL(page) + 'action=' + rateit_action + '&mode=delete&dimension=' + dimension + '&nocache=1&nopurge=1&rand=' + myRand;
136   //alert('deleteRating("'+actionImg+'", "'+page+'", '+version+', '+dimension+')');
137   document[actionImg].title = msg_rating_deleted;
138   document[actionImg].src = imgSrc;
139 }