| author | ymh <ymh.work@gmail.com> |
| Fri, 11 Feb 2011 14:02:37 +0100 | |
| changeset 0 | c357d5b60635 |
| permissions | -rw-r--r-- |
|
0
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
1 |
/** |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
2 |
* Modified Star Rating - jQuery plugin |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
3 |
* |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
4 |
* Copyright (c) 2006 Wil Stuckey |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
5 |
* |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
6 |
* Original source available: http://sandbox.wilstuckey.com/jquery-ratings/ |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
7 |
* Extensively modified by Lullabot: http://www.lullabot.com |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
8 |
* |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
9 |
* Dual licensed under the MIT and GPL licenses: |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
10 |
* http://www.opensource.org/licenses/mit-license.php |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
11 |
* http://www.gnu.org/licenses/gpl.html |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
12 |
*/ |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
13 |
|
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
14 |
/** |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
15 |
* Create a degradeable star rating interface out of a simple form structure. |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
16 |
* Returns a modified jQuery object containing the new interface. |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
17 |
* |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
18 |
* @example jQuery('form.rating').fivestar(); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
19 |
* @cat plugin |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
20 |
* @type jQuery |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
21 |
* |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
22 |
*/ |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
23 |
(function($){ // Create local scope. |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
24 |
/** |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
25 |
* Takes the form element, builds the rating interface and attaches the proper events. |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
26 |
* @param {Object} $obj |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
27 |
*/ |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
28 |
var buildRating = function($obj){ |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
29 |
var $widget = buildInterface($obj), |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
30 |
$stars = $('.star', $widget), |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
31 |
$cancel = $('.cancel', $widget), |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
32 |
$summary = $('.fivestar-summary', $obj), |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
33 |
feedbackTimerId = 0, |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
34 |
summaryText = $summary.html(), |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
35 |
summaryHover = $obj.is('.fivestar-labels-hover'), |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
36 |
currentValue = $("select", $obj).val(), |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
37 |
cancelTitle = $('label', $obj).html(), |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
38 |
voteTitle = cancelTitle != Drupal.settings.fivestar.titleAverage ? cancelTitle : Drupal.settings.fivestar.titleUser, |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
39 |
voteChanged = false; |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
40 |
|
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
41 |
// Record star display. |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
42 |
if ($obj.is('.fivestar-user-stars')) { |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
43 |
var starDisplay = 'user'; |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
44 |
} |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
45 |
else if ($obj.is('.fivestar-average-stars')) { |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
46 |
var starDisplay = 'average'; |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
47 |
currentValue = $("input[name=vote_average]", $obj).val(); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
48 |
} |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
49 |
else if ($obj.is('.fivestar-combo-stars')) { |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
50 |
var starDisplay = 'combo'; |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
51 |
} |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
52 |
else { |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
53 |
var starDisplay = 'none'; |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
54 |
} |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
55 |
|
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
56 |
// Smart is intentionally separate, so the average will be set if necessary. |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
57 |
if ($obj.is('.fivestar-smart-stars')) { |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
58 |
var starDisplay = 'smart'; |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
59 |
} |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
60 |
|
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
61 |
// Record text display. |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
62 |
if ($summary.size()) { |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
63 |
var textDisplay = $summary.attr('class').replace(/.*?fivestar-summary-([^ ]+).*/, '$1').replace(/-/g, '_'); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
64 |
} |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
65 |
else { |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
66 |
var textDisplay = 'none'; |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
67 |
} |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
68 |
|
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
69 |
// Add hover and focus events. |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
70 |
$stars |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
71 |
.mouseover(function(){ |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
72 |
event.drain(); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
73 |
event.fill(this); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
74 |
}) |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
75 |
.mouseout(function(){ |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
76 |
event.drain(); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
77 |
event.reset(); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
78 |
}); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
79 |
$stars.children() |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
80 |
.focus(function(){ |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
81 |
event.drain(); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
82 |
event.fill(this.parentNode) |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
83 |
}) |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
84 |
.blur(function(){ |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
85 |
event.drain(); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
86 |
event.reset(); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
87 |
}).end(); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
88 |
|
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
89 |
// Cancel button events. |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
90 |
$cancel |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
91 |
.mouseover(function(){ |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
92 |
event.drain(); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
93 |
$(this).addClass('on') |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
94 |
}) |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
95 |
.mouseout(function(){ |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
96 |
event.reset(); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
97 |
$(this).removeClass('on') |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
98 |
}); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
99 |
$cancel.children() |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
100 |
.focus(function(){ |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
101 |
event.drain(); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
102 |
$(this.parentNode).addClass('on') |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
103 |
}) |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
104 |
.blur(function(){ |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
105 |
event.reset(); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
106 |
$(this.parentNode).removeClass('on') |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
107 |
}).end(); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
108 |
|
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
109 |
// Click events. |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
110 |
$cancel.click(function(){ |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
111 |
currentValue = 0; |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
112 |
event.reset(); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
113 |
voteChanged = false; |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
114 |
// Inform a user that his vote is being processed |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
115 |
if ($("input.fivestar-path", $obj).size() && $summary.is('.fivestar-feedback-enabled')) { |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
116 |
setFeedbackText(Drupal.settings.fivestar.feedbackDeletingVote); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
117 |
} |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
118 |
// Save the currentValue in a hidden field. |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
119 |
$("select", $obj).val(0); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
120 |
// Update the title. |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
121 |
cancelTitle = starDisplay != 'smart' ? cancelTitle : Drupal.settings.fivestar.titleAverage; |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
122 |
$('label', $obj).html(cancelTitle); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
123 |
// Update the smart classes on the widget if needed. |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
124 |
if ($obj.is('.fivestar-smart-text')) { |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
125 |
$obj.removeClass('fivestar-user-text').addClass('fivestar-average-text'); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
126 |
$summary[0].className = $summary[0].className.replace(/-user/, '-average'); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
127 |
textDisplay = $summary.attr('class').replace(/.*?fivestar-summary-([^ ]+).*/, '$1').replace(/-/g, '_'); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
128 |
} |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
129 |
if ($obj.is('.fivestar-smart-stars')) { |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
130 |
$obj.removeClass('fivestar-user-stars').addClass('fivestar-average-stars'); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
131 |
} |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
132 |
// Submit the form if needed. |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
133 |
$("input.fivestar-path", $obj).each(function() { |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
134 |
var token = $("input.fivestar-token", $obj).val(); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
135 |
$.ajax({ |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
136 |
type: 'GET', |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
137 |
data: { token: token }, |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
138 |
dataType: 'xml', |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
139 |
url: this.value + '/' + 0, |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
140 |
success: voteHook |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
141 |
}); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
142 |
}); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
143 |
return false; |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
144 |
}); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
145 |
$stars.click(function(){ |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
146 |
currentValue = $('select option', $obj).get($stars.index(this) + $cancel.size() + 1).value; |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
147 |
// Save the currentValue to the hidden select field. |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
148 |
$("select", $obj).val(currentValue); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
149 |
// Update the display of the stars. |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
150 |
voteChanged = true; |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
151 |
event.reset(); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
152 |
// Inform a user that his vote is being processed. |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
153 |
if ($("input.fivestar-path", $obj).size() && $summary.is('.fivestar-feedback-enabled')) { |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
154 |
setFeedbackText(Drupal.settings.fivestar.feedbackSavingVote); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
155 |
} |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
156 |
// Update the smart classes on the widget if needed. |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
157 |
if ($obj.is('.fivestar-smart-text')) { |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
158 |
$obj.removeClass('fivestar-average-text').addClass('fivestar-user-text'); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
159 |
$summary[0].className = $summary[0].className.replace(/-average/, '-user'); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
160 |
textDisplay = $summary.attr('class').replace(/.*?fivestar-summary-([^ ]+).*/, '$1').replace(/-/g, '_'); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
161 |
} |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
162 |
if ($obj.is('.fivestar-smart-stars')) { |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
163 |
$obj.removeClass('fivestar-average-stars').addClass('fivestar-user-stars'); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
164 |
} |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
165 |
// Submit the form if needed. |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
166 |
$("input.fivestar-path", $obj).each(function () { |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
167 |
var token = $("input.fivestar-token", $obj).val(); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
168 |
$.ajax({ |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
169 |
type: 'GET', |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
170 |
data: { token: token }, |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
171 |
dataType: 'xml', |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
172 |
url: this.value + '/' + currentValue, |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
173 |
success: voteHook |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
174 |
}); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
175 |
}); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
176 |
return false; |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
177 |
}); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
178 |
|
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
179 |
var event = { |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
180 |
fill: function(el){ |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
181 |
// Fill to the current mouse position. |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
182 |
var index = $stars.index(el) + 1; |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
183 |
$stars |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
184 |
.children('a').css('width', '100%').end() |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
185 |
.filter(':lt(' + index + ')').addClass('hover').end(); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
186 |
// Update the description text and label. |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
187 |
if (summaryHover && !feedbackTimerId) { |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
188 |
var summary = $("select option", $obj)[index + $cancel.size()].text; |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
189 |
var value = $("select option", $obj)[index + $cancel.size()].value; |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
190 |
$summary.html(summary != index + 1 ? summary : ' '); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
191 |
$('label', $obj).html(voteTitle); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
192 |
} |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
193 |
}, |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
194 |
drain: function() { |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
195 |
// Drain all the stars. |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
196 |
$stars |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
197 |
.filter('.on').removeClass('on').end() |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
198 |
.filter('.hover').removeClass('hover').end(); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
199 |
// Update the description text. |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
200 |
if (summaryHover && !feedbackTimerId) { |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
201 |
var cancelText = $("select option", $obj)[1].text; |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
202 |
$summary.html(($cancel.size() && cancelText != 0) ? cancelText : ' '); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
203 |
if (!voteChanged) { |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
204 |
$('label', $obj).html(cancelTitle); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
205 |
} |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
206 |
} |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
207 |
}, |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
208 |
reset: function(){ |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
209 |
// Reset the stars to the default index. |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
210 |
var starValue = currentValue/100 * $stars.size(); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
211 |
var percent = (starValue - Math.floor(starValue)) * 100; |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
212 |
$stars.filter(':lt(' + Math.floor(starValue) + ')').addClass('on').end(); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
213 |
if (percent > 0) { |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
214 |
$stars.eq(Math.floor(starValue)).addClass('on').children('a').css('width', percent + "%").end().end(); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
215 |
} |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
216 |
// Restore the summary text and original title. |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
217 |
if (summaryHover && !feedbackTimerId) { |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
218 |
$summary.html(summaryText ? summaryText : ' '); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
219 |
} |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
220 |
if (voteChanged) { |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
221 |
$('label', $obj).html(voteTitle); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
222 |
} |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
223 |
else { |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
224 |
$('label', $obj).html(cancelTitle); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
225 |
} |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
226 |
} |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
227 |
}; |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
228 |
|
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
229 |
var setFeedbackText = function(text) { |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
230 |
// Kill previous timer if it isn't finished yet so that the text we |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
231 |
// are about to set will not get cleared too early. |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
232 |
feedbackTimerId = 1; |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
233 |
$summary.html(text); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
234 |
}; |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
235 |
|
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
236 |
/** |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
237 |
* Checks for the presence of a javascript hook 'fivestarResult' to be |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
238 |
* called upon completion of a AJAX vote request. |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
239 |
*/ |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
240 |
var voteHook = function(data) { |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
241 |
var returnObj = { |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
242 |
result: { |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
243 |
count: $("result > count", data).text(), |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
244 |
average: $("result > average", data).text(), |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
245 |
summary: { |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
246 |
average: $("summary average", data).text(), |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
247 |
average_count: $("summary average_count", data).text(), |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
248 |
user: $("summary user", data).text(), |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
249 |
user_count: $("summary user_count", data).text(), |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
250 |
combo: $("summary combo", data).text(), |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
251 |
count: $("summary count", data).text() |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
252 |
} |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
253 |
}, |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
254 |
vote: { |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
255 |
id: $("vote id", data).text(), |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
256 |
tag: $("vote tag", data).text(), |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
257 |
type: $("vote type", data).text(), |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
258 |
value: $("vote value", data).text() |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
259 |
}, |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
260 |
display: { |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
261 |
stars: starDisplay, |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
262 |
text: textDisplay |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
263 |
} |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
264 |
}; |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
265 |
// Check for a custom callback. |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
266 |
if (window.fivestarResult) { |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
267 |
fivestarResult(returnObj); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
268 |
} |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
269 |
// Use the default. |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
270 |
else { |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
271 |
fivestarDefaultResult(returnObj); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
272 |
} |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
273 |
// Update the summary text. |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
274 |
summaryText = returnObj.result.summary[returnObj.display.text]; |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
275 |
if ($(returnObj.result.summary.average).is('.fivestar-feedback-enabled')) { |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
276 |
// Inform user that his/her vote has been processed. |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
277 |
if (returnObj.vote.value != 0) { // check if vote has been saved or deleted |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
278 |
setFeedbackText(Drupal.settings.fivestar.feedbackVoteSaved); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
279 |
} |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
280 |
else { |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
281 |
setFeedbackText(Drupal.settings.fivestar.feedbackVoteDeleted); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
282 |
} |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
283 |
// Setup a timer to clear the feedback text after 3 seconds. |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
284 |
feedbackTimerId = setTimeout(function() { clearTimeout(feedbackTimerId); feedbackTimerId = 0; $summary.html(returnObj.result.summary[returnObj.display.text]); }, 2000); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
285 |
} |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
286 |
// Update the current star currentValue to the previous average. |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
287 |
if (returnObj.vote.value == 0 && (starDisplay == 'average' || starDisplay == 'smart')) { |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
288 |
currentValue = returnObj.result.average; |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
289 |
event.reset(); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
290 |
} |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
291 |
}; |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
292 |
|
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
293 |
event.reset(); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
294 |
return $widget; |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
295 |
}; |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
296 |
|
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
297 |
/** |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
298 |
* Accepts jQuery object containing a single fivestar widget. |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
299 |
* Returns the proper div structure for the star interface. |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
300 |
* |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
301 |
* @return jQuery |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
302 |
* @param {Object} $widget |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
303 |
* |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
304 |
*/ |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
305 |
var buildInterface = function($widget){ |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
306 |
var $container = $('<div class="fivestar-widget clear-block"></div>'); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
307 |
var $options = $("select option", $widget); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
308 |
var size = $('option', $widget).size() - 1; |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
309 |
var cancel = 1; |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
310 |
for (var i = 1, option; option = $options[i]; i++){ |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
311 |
if (option.value == "0") { |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
312 |
cancel = 0; |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
313 |
$div = $('<div class="cancel"><a href="#0" title="' + option.text + '">' + option.text + '</a></div>'); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
314 |
} |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
315 |
else { |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
316 |
var zebra = (i + cancel - 1) % 2 == 0 ? 'even' : 'odd'; |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
317 |
var count = i + cancel - 1; |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
318 |
var first = count == 1 ? ' star-first' : ''; |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
319 |
var last = count == size + cancel - 1 ? ' star-last' : ''; |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
320 |
$div = $('<div class="star star-' + count + ' star-' + zebra + first + last + '"><a href="#' + option.value + '" title="' + option.text + '">' + option.text + '</a></div>'); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
321 |
} |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
322 |
$container.append($div[0]); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
323 |
} |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
324 |
$container.addClass('fivestar-widget-' + (size + cancel - 1)); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
325 |
// Attach the new widget and hide the existing widget. |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
326 |
$('select', $widget).after($container).css('display', 'none'); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
327 |
return $container; |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
328 |
}; |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
329 |
|
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
330 |
/** |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
331 |
* Standard handler to update the average rating when a user changes their |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
332 |
* vote. This behavior can be overridden by implementing a fivestarResult |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
333 |
* function in your own module or theme. |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
334 |
* @param object voteResult |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
335 |
* Object containing the following properties from the vote result: |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
336 |
* voteResult.result.count The current number of votes for this item. |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
337 |
* voteResult.result.average The current average of all votes for this item. |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
338 |
* voteResult.result.summary.average The textual description of the average. |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
339 |
* voteResult.result.summary.user The textual description of the user's current vote. |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
340 |
* voteResult.vote.id The id of the item the vote was placed on (such as the nid) |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
341 |
* voteResult.vote.type The type of the item the vote was placed on (such as 'node') |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
342 |
* voteResult.vote.tag The multi-axis tag the vote was placed on (such as 'vote') |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
343 |
* voteResult.vote.average The average of the new vote saved |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
344 |
* voteResult.display.stars The type of star display we're using. Either 'average', 'user', or 'combo'. |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
345 |
* voteResult.display.text The type of text display we're using. Either 'average', 'user', or 'combo'. |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
346 |
*/ |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
347 |
function fivestarDefaultResult(voteResult) { |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
348 |
// Update the summary text. |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
349 |
$('div.fivestar-summary-'+voteResult.vote.tag+'-'+voteResult.vote.id).html(voteResult.result.summary[voteResult.display.text]); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
350 |
// If this is a combo display, update the average star display. |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
351 |
if (voteResult.display.stars == 'combo') { |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
352 |
$('div.fivestar-form-'+voteResult.vote.id).each(function() { |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
353 |
// Update stars. |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
354 |
var $stars = $('.fivestar-widget-static .star span', this); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
355 |
var average = voteResult.result.average/100 * $stars.size(); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
356 |
var index = Math.floor(average); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
357 |
$stars.removeClass('on').addClass('off').css('width', 'auto'); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
358 |
$stars.filter(':lt(' + (index + 1) + ')').removeClass('off').addClass('on'); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
359 |
$stars.eq(index).css('width', ((average - index) * 100) + "%"); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
360 |
// Update summary. |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
361 |
var $summary = $('.fivestar-static-form-item .fivestar-summary', this); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
362 |
if ($summary.size()) { |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
363 |
var textDisplay = $summary.attr('class').replace(/.*?fivestar-summary-([^ ]+).*/, '$1').replace(/-/g, '_'); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
364 |
$summary.html(voteResult.result.summary[textDisplay]); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
365 |
} |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
366 |
}); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
367 |
} |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
368 |
}; |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
369 |
|
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
370 |
/** |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
371 |
* Set up the plugin |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
372 |
*/ |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
373 |
$.fn.fivestar = function() { |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
374 |
var stack = []; |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
375 |
this.each(function() { |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
376 |
var ret = buildRating($(this)); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
377 |
stack.push(ret); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
378 |
}); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
379 |
return stack; |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
380 |
}; |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
381 |
|
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
382 |
// Fix ie6 background flicker problem. |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
383 |
if ($.browser.msie == true) { |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
384 |
try { |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
385 |
document.execCommand('BackgroundImageCache', false, true); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
386 |
} catch(err) {} |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
387 |
} |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
388 |
|
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
389 |
Drupal.behaviors.fivestar = function(context) { |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
390 |
$('div.fivestar-form-item:not(.fivestar-processed)', context).addClass('fivestar-processed').fivestar(); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
391 |
$('input.fivestar-submit', context).css('display', 'none'); |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
392 |
} |
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
393 |
|
|
c357d5b60635
First import. Last version from France culture
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
394 |
})(jQuery); |