source: branches/2.1/themes/default/js/rating.js @ 6576

Last change on this file since 6576 was 6576, checked in by rvelices, 14 years ago
  • better javascript funcs + shorter notation
  • Property svn:eol-style set to LF
File size: 3.1 KB
Line 
1var gRatingOptions, gRatingButtons, gUserRating;
2
3function makeNiceRatingForm(options)
4{
5        gRatingOptions = options || {};
6        var form = document.getElementById('rateForm');
7        if (!form) return; //? template changed
8
9        gRatingButtons = form.getElementsByTagName('input');
10        gUserRating = "";
11        for (var i=0; i<gRatingButtons.length; i++)
12        {
13                if ( gRatingButtons[i].type=="button" )
14                {
15                        gUserRating = gRatingButtons[i].value;
16                        break;
17                }
18        }
19
20        for (var i=0; i<gRatingButtons.length; i++)
21        {
22                var rateButton = gRatingButtons[i];
23                rateButton.initialRateValue = rateButton.value; // save it as a property
24                try { rateButton.type = "button"; } catch (e){}// avoid normal submit (use ajax); not working in IE6
25
26                if (navigator.userAgent.indexOf('AppleWebKit/')==-1 && navigator.userAgent.indexOf('MSIE 8')==-1) rateButton.value = ""; //hide the text IE<8/Opera - breaks safari
27                with (rateButton.style)
28                {
29                        textIndent = "-50px"; //hide the text FF
30                        marginLeft = marginRight = 0;
31                }
32
33                if (i!=gRatingButtons.length-1 && rateButton.nextSibling.nodeType == 3 /*TEXT_NODE*/)
34                        rateButton.parentNode.removeChild(rateButton.nextSibling);
35                if (i>0 && rateButton.previousSibling.nodeType == 3 /*TEXT_NODE*/)
36                        rateButton.parentNode.removeChild(rateButton.previousSibling);
37
38                pwgAddEventListener(rateButton, "click", updateRating);
39                pwgAddEventListener(rateButton, "mouseout", resetRatingStarDisplay);
40                pwgAddEventListener(rateButton, "mouseover", updateRatingStarDisplayEvt);
41        }
42        resetRatingStarDisplay();
43}
44
45function resetRatingStarDisplay()
46{
47        updateRatingStarDisplay( gUserRating );
48}
49
50function updateRatingStarDisplay(userRating)
51{
52        for (var i=0; i<gRatingButtons.length; i++)
53                gRatingButtons[i].className = (userRating!=="" && userRating>=gRatingButtons[i].initialRateValue ) ? "rateButtonStarFull" : "rateButtonStarEmpty";
54}
55
56function updateRatingStarDisplayEvt(e)
57{
58        updateRatingStarDisplay(
59                e.target ? e.target.initialRateValue : e.srcElement.initialRateValue);
60}
61
62function updateRating(e)
63{
64        var rateButton = e.target || e.srcElement;
65        if (rateButton.initialRateValue == gUserRating)
66                return false; //nothing to do
67
68        for (var i=0; i<gRatingButtons.length; i++) gRatingButtons[i].disabled=true;
69        var y = new PwgWS(gRatingOptions.rootUrl);
70        y.callService(
71                "pwg.images.rate", {image_id: gRatingOptions.image_id, rate: rateButton.initialRateValue } ,
72                {
73                        onFailure: function(num, text) {
74                                alert(num + " " + text);
75                                document.location = rateButton.form.action + "&rate="+rateButton.initialRateValue;
76                        },
77                        onSuccess: function(result) {
78                                gUserRating = rateButton.initialRateValue;
79                                for (var i=0; i<gRatingButtons.length; i++) gRatingButtons[i].disabled=false;
80                                if (gRatingOptions.updateRateElement) gRatingOptions.updateRateElement.innerHTML = gRatingOptions.updateRateText;
81                                if (gRatingOptions.ratingSummaryElement)
82                                {
83                                        var t = gRatingOptions.ratingSummaryText;
84                                        var args =[result.average, result.count], idx = 0, rexp = new RegExp( /%\.?\d*[sdf]/ );
85                                        //_xxx = t.match( rexp );
86                                        while (idx<args.length) t=t.replace(rexp, args[idx++]);
87                                        gRatingOptions.ratingSummaryElement.innerHTML = t;
88                                }
89                        }
90                }
91        );
92        return false;
93}
Note: See TracBrowser for help on using the repository browser.