Bug 10659: Upgrade jQuery star ratings plugin

This patch replaces our current jQuery star ratings plugin with a newer
plugin which will be compatible with newer versions of jQuery:

http://antenna.io/demo/jquery-bar-rating/examples/

To test you should have one or more records in your catalog with star
ratings.

- Apply the patch and set the OpacStarRatings system preference
  to "results and details"
- Perform a search in the catalog which will return one or more titles
  which have ratings.
  - Confirm that the ratings appear correctly and the ratings are
    read-only.
- Open the "normal" detail page for that record.
  - Confirm that the star rating appears correctly.
  - Test setting and re-setting your star rating. Confirm that it is
    saved.
  - Confirm that the "cancel rating" link appears when you have a rating
    set, and that it disappears after you click it.
- Test that the "only details" and disabled options of the
  OpacStarRatings preference work as they should.
- Confirm that information about the plugin appears on the About page in
  the staff client, replacing the old star ratings plugin information.

Signed-off-by: Pierre-Marc Thibault <pierre-marc.thibault@inLibro.com>

Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
This commit is contained in:
Owen Leonard 2018-11-28 16:58:48 +00:00 committed by Nick Clemens
parent 6aadbcc4be
commit ef248b82d7
8 changed files with 156 additions and 477 deletions

View File

@ -980,10 +980,10 @@
</li>
</ul>
<h2>jQuery Star Rating Plugin</h2>
<p>jQuery Star Rating Plugin v3.14 by <a href="http://www.fyneworks.com/">Fyneworks.com</a> is licensed under the <a href="http://en.wikipedia.org/wiki/MIT_License">MIT License</a> and the <a href="http://creativecommons.org/licenses/GPL/2.0/">GPL License</a>.</p>
<h2>jQuery Bar Rating Plugin</h2>
<p>jQuery Bar Rating Plugin v1.22 by <a href="http://antenna.io/demo/jquery-bar-rating/examples/">Antenna.io</a> is licensed under the <a href="http://en.wikipedia.org/wiki/MIT_License">MIT License</a>.</p>
<p>Copyright &copy; 2008 <a href="http://www.fyneworks.com/">Fyneworks.com</a></p>
<p>Copyright &copy; 2012-2016 <a href="http://antenna.io">Kazik Pietruszewski</a></p>
<h2>jQuery insertAtCaret Plugin</h2>
<p>jQuery insertAtCaret Plugin v1.0 by the phpMyAdmin devel team is licensed under the <a href="http://www.gnu.org/licenses/gpl.html">GPL License</a>.</p>

View File

@ -1,14 +0,0 @@
/* jQuery.Rating Plugin CSS - http://www.fyneworks.com/jquery/star-rating/ */
div.rating-cancel,div.star-rating{float:left;width:15px;height:15px;text-indent:-999em;cursor:pointer;display:block;background:transparent;overflow:hidden}
div.rating-cancel,div.rating-cancel a{background:url(../images/star-ratings-sprite.png) no-repeat 0 -49px}
div.star-rating,div.star-rating a{background:url(../images/star-ratings-sprite.png) no-repeat 0 0px}
div.rating-cancel a{display:block;width:16px;height:100%;background-position:0 -49px;border:0}
div.star-rating a{display:block;width:16px;height:100%;background-position:0 0px;border:0}
div.star-rating-on a{background-position:0 -32px!important}
div.rating-cancel.star-rating-hover a{background-position:0 -65px}
div.star-rating-hover a{background-position:0 -16px}
/* Read Only CSS */
div.star-rating-readonly a{cursor:default !important}
/* Partial Star CSS */
div.star-rating{background:transparent!important;overflow:hidden!important}
/* END jQuery.Rating Plugin CSS */

View File

@ -3252,4 +3252,90 @@ button.closebtn {
max-height: 200px;
}
/* jQuery Bar Rating plugin for star ratings */
$star-default: #D2D2D2;
$star-active: #C24A4A;
$star-selected: #EDB867;
.br-wrapper {
display: inline-block;
}
.br-theme-fontawesome-stars {
.br-widget {
height: 28px;
white-space: nowrap;
a {
-webkit-font-smoothing: antialiased;
font: normal normal normal 20px/1 FontAwesome;
margin-right: 2px;
text-decoration: none;
text-rendering: auto;
&::after {
color: $star-default;
content: "\f005";
}
&.br-active {
&::after {
color: $star-active;
}
}
&.br-selected {
&::after {
color: $star-selected;
}
}
}
.br-current-rating {
display: none;
}
}
.br-readonly {
a {
cursor: default;
}
}
}
#cancel_rating_text {
a {
color: #C24A4A;
}
}
@media print {
.br-theme-fontawesome-stars {
.br-widget {
a {
&::after {
color: #000000;
content: "\f006";
}
&.br-active::after,
&.br-selected::after {
color: #000000;
content: "\f005";
}
}
}
}
}
/* END jQuery Bar Rating plugin for star ratings */
@import "responsive";

View File

@ -32,15 +32,9 @@
[% INCLUDE 'doc-head-open.inc' %]
<title>[% IF ( LibraryNameTitle ) %][% LibraryNameTitle | html %][% ELSE %]Koha online[% END %] catalog &rsaquo; Details for: [% title | html %][% FOREACH subtitl IN subtitle %][% IF Koha.Preference('marcflavour')=='UNIMARC' %],[% END %] [% subtitl.subfield | html %][% END %]</title>
[% INCLUDE 'doc-head-close.inc' %]
[% IF ( bidi ) %]
[% BLOCK cssinclude %][% Asset.css("css/right-to-left.css") | $raw %][% END %]
[% END %]
[% IF ( OpacStarRatings != 'disable' ) %]
[% BLOCK cssinclude %][% Asset.css("css/jquery.rating.css") | $raw %][% END %]
[% END %]
[% INCLUDE greybox.inc %]
[% Asset.css("lib/emoji-picker/css/emoji.css") | $raw %]
</head>
[% BLOCK cssinclude %][% END %]
[% INCLUDE 'bodytag.inc' bodyid='opac-detail' bodyclass='scrollto' %]
[% INCLUDE 'masthead.inc' %]
@ -477,17 +471,21 @@
[% SET rating_avg = ratings.get_avg_rating() %]
[% rating_avg_int = BLOCK %][% rating_avg | format("%.0f") %][% END %]
[% FOREACH i IN [ 1 2 3 4 5 ] %]
[% IF rating_avg_int == i && borrowernumber %]
<input class="auto-submit-star" type="radio" name="rating" value="[% i | html %]" checked="checked" />
[% ELSIF rating_avg_int == i %]
<input class="auto-submit-star" type="radio" name="rating" value="[% i | html %]" checked="checked" disabled="disabled" />
[% ELSIF borrowernumber %]
<input class="auto-submit-star" type="radio" name="rating" value="[% i | html %]" />
[% ELSE %]
<input class="auto-submit-star" type="radio" name="rating" value="[% i | html %]" disabled="disabled" />
[% END %]
[% IF ( borrowernumber ) %]
<select id="star_rating" name="rating" data-rating-enabled="1" autocomplete="off">
[% ELSE %]
<select id="star_rating" name="rating" data-rating-enabled="0" disabled="disabled" autocomplete="off">
[% END %]
[% FOREACH i IN [ 1 2 3 4 5 ] %]
[% IF rating_avg_int == i %]
<option value="[% i | html %]" selected="selected">[% i | html %]</option>
[% ELSE %]
<option value"[% i | html %]">[% i | html %]</option>
[% END %]
[% END %]
</select>
<img id="rating-loading" style="display:none" src="[% interface | html %]/[% theme | html %]/images/spinner-small.gif" alt="" />
<!-- define some hidden vars for ratings -->
@ -497,12 +495,14 @@
[% UNLESS ( rating_readonly ) %]&nbsp; <input name="rate_button" type="submit" value="Rate me" />[% END %]&nbsp;
[% IF my_rating %]
<span id="rating_value_text">your rating: [% my_rating.rating_value | html %], </span>
<span id="rating_value_text">Your rating: [% my_rating.rating_value | html %].</span>
<span id="cancel_rating_text"><a href="#"><i class="fa fa-remove"></i> Cancel rating</a>.</span>
[% ELSE %]
<span id="rating_value_text"></span>
<span id="cancel_rating_text" style="display:none;"><a href="#"><i class="fa fa-remove"></i> Cancel rating</a>.</span>
[% END %]
<span id="rating_text">average rating: [% rating_avg | html %] ([% ratings.count | html %] votes)</span>
<span id="rating_text">Average rating: [% rating_avg | html %] ([% ratings.count | html %] votes)</span>
</div>
</form>
[% END # / IF OpacStarRatings != 'disable' %]
@ -1379,6 +1379,7 @@
[% BLOCK jsinclude %]
[% INCLUDE 'datatables.inc' %]
[% INCLUDE 'columns_settings.inc' %]
[% INCLUDE greybox.inc %]
[% IF ( SocialNetworks ) %]
//<![CDATA[
{lang: '[% lang | html %]'}
@ -1386,7 +1387,7 @@
</script>
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
[% END %]
[% IF ( OpacStarRatings != 'disable' ) %][% Asset.js("lib/jquery/plugins/jquery.rating.js") | $raw %][% END %]
[% IF ( OpacStarRatings != 'disable' ) %][% Asset.js("lib/jquery/plugins/jquery.barrating.min.js") | $raw %][% END %]
[% IF ( OpacHighlightedWords ) %][% Asset.js("lib/jquery/plugins/jquery.highlight-3.js") | $raw %][% END %]
@ -1618,46 +1619,41 @@
$('input[name="rate_button"]').remove();
$(function () {
$(".auto-submit-star").rating({
cancel: _("Cancel rating"),
callback: function (value, link) {
// if the new value equals the old value, dont execute callback...
// just do nothing!
if ($("#rating_value").attr("value") != value) {
$(function () {
$.post("/cgi-bin/koha/opac-ratings-ajax.pl", {
var rating_enabled = ( $("#star_rating").data("rating-enabled") == "1" ) ? false : true;
$('#star_rating').barrating({
theme: 'fontawesome-stars',
showSelectedRating: false,
allowEmpty: true,
deselectable: false,
readonly: rating_enabled,
onSelect: function(value, text) {
$("#rating-loading").show();
$.post("/cgi-bin/koha/opac-ratings-ajax.pl", {
rating_old_value: $("#rating_value").attr("value"),
borrowernumber: "[% borrowernumber | html %]",
biblionumber: "[% biblio.biblionumber | html %]",
rating_value: value,
auth_error: value
}, function (data) {
if (data.auth_status != 'ok') {
window.alert(_("Your CGI session cookie is not current. Please refresh the page and try again."));
} else {
$("#rating_value").val(data.rating_value);
if (data.rating_value) {
$("#rating_value_text").text(_("your rating: %s, ").format(data.rating_value));
} else {
$("#rating_value_text").text('');
}
$("#rating_text").text(_("average rating: %s (%s votes)").format(data.rating_avg, data.rating_total));
}
}, "json");
});
};
}, function (data) {
$("#rating_value").val(data.rating_value);
if (data.rating_value) {
$("#rating_value_text").text(_("Your rating: %s, ").format(data.rating_value));
$("#cancel_rating_text").show();
} else {
$("#rating_value_text").text('');
$("#cancel_rating_text").hide();
}
$("#rating_text").text(_("Average rating: %s (%s votes)").format(data.rating_avg, data.rating_total));
$("#rating-loading").hide();
}, "json");
}
});
});
// -----------------------------------------------------
$("#cancel_rating_text a").on("click", function(e){
e.preventDefault();
$("#star_rating").barrating("set", "");
});
[% END # / IF ( OpacStarRatings != 'disable' )%]
[% IF ( IDreamBooksReviews || IDreamBooksReadometer ) %]

View File

@ -18,15 +18,10 @@
You did not specify any search criteria.
[% END %]</title>
[% INCLUDE 'doc-head-close.inc' %]
[% IF ( OpacStarRatings == 'all' || Koha.Preference('Babeltheque') ) %]
[% BLOCK cssinclude %]
[% Asset.css("css/jquery.rating.css") | $raw %]
[% END %]
[% END %]
<link rel="alternate" type="application/rss+xml" title="[% LibraryName | html %] Search RSS feed" href="[% OPACBaseURL | url %]/cgi-bin/koha/opac-search.pl?[% query_cgi | $raw %][% limit_cgi | $raw %]&amp;count=[% countrss |uri %]&amp;sort_by=acqdate_dsc&amp;format=rss2" />
</head>
[% BLOCK cssinclude %][% END %]
[% INCLUDE 'bodytag.inc' bodyid='results' bodyclass='scrollto' %]
[% INCLUDE 'masthead.inc' %]
@ -503,15 +498,21 @@
[% IF ( OpacStarRatings == 'all' ) %]
<div class="results_summary ratings">
[% SET rating_avg = SEARCH_RESULT.ratings.get_avg_rating() %]
[% rating_avg_int = BLOCK %][% rating_avg | format("%.0f") %][% END %]
[% FOREACH i IN [ 1 2 3 4 5 ] %]
[% IF rating_avg_int == i %]
<input class="star" type="radio" name="rating-[% SEARCH_RESULT.biblionumber | html %]" value="[% i | html %]" checked="checked" disabled="disabled" />
[% ELSE %]
<input class="star" type="radio" name="rating-[% SEARCH_RESULT.biblionumber | html %]" value="[% i | html %]" disabled="disabled" />
[% END %]
[% END %]
[% SET rating_avg = SEARCH_RESULT.ratings.get_avg_rating() %]
[% rating_avg_int = BLOCK %][% rating_avg | format("%.0f") %][% END %]
<div class="br-wrapper br-theme-fontawesome-stars">
<div class="br-widget br-readonly">
[% FOREACH i IN [ 1 2 3 4 5 ] %]
[% IF rating_avg_int == i %]
<a href="#" class="br-selected br-current"></a>
[% ELSIF rating_avg_int > i %]
<a href="#" class="br-selected"></a>
[% ELSE %]
<a href="#"></a>
[% END %]
[% END %]
</div>
</div>
[% IF SEARCH_RESULT.ratings.count > 0 %]
<span id="rating_total_[% SEARCH_RESULT.biblionumber | html %]">&nbsp;&nbsp;([% SEARCH_RESULT.ratings.count | html %] votes)</span>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@ -1,392 +0,0 @@
/*
### jQuery Star Rating Plugin v3.14 - 2012-01-26 ###
* Home: http://www.fyneworks.com/jquery/star-rating/
* Code: http://code.google.com/p/jquery-star-rating-plugin/
*
* Dual licensed under the MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
###
*/
/*# AVOID COLLISIONS #*/
;if(window.jQuery) (function($){
/*# AVOID COLLISIONS #*/
// IE6 Background Image Fix
if ($.browser.msie) try { document.execCommand("BackgroundImageCache", false, true)} catch(e) { };
// Thanks to http://www.visualjquery.com/rating/rating_redux.html
// plugin initialization
$.fn.rating = function(options){
if(this.length==0) return this; // quick fail
// Handle API methods
if(typeof arguments[0]=='string'){
// Perform API methods on individual elements
if(this.length>1){
var args = arguments;
return this.each(function(){
$.fn.rating.apply($(this), args);
});
};
// Invoke API method handler
$.fn.rating[arguments[0]].apply(this, $.makeArray(arguments).slice(1) || []);
// Quick exit...
return this;
};
// Initialize options for this call
var options = $.extend(
{}/* new object */,
$.fn.rating.options/* default options */,
options || {} /* just-in-time options */
);
// Allow multiple controls with the same name by making each call unique
$.fn.rating.calls++;
// loop through each matched element
this
.not('.star-rating-applied')
.addClass('star-rating-applied')
.each(function(){
// Load control parameters / find context / etc
var control, input = $(this);
var eid = (this.name || 'unnamed-rating').replace(/\[|\]/g, '_').replace(/^\_+|\_+$/g,'');
var context = $(this.form || document.body);
// FIX: http://code.google.com/p/jquery-star-rating-plugin/issues/detail?id=23
var raters = context.data('rating');
if(!raters || raters.call!=$.fn.rating.calls) raters = { count:0, call:$.fn.rating.calls };
var rater = raters[eid];
// if rater is available, verify that the control still exists
if(rater) control = rater.data('rating');
if(rater && control)//{// save a byte!
// add star to control if rater is available and the same control still exists
control.count++;
//}// save a byte!
else{
// create new control if first star or control element was removed/replaced
// Initialize options for this rater
control = $.extend(
{}/* new object */,
options || {} /* current call options */,
($.metadata? input.metadata(): ($.meta?input.data():null)) || {}, /* metadata options */
{ count:0, stars: [], inputs: [] }
);
// increment number of rating controls
control.serial = raters.count++;
// create rating element
rater = $('<span class="star-rating-control"/>');
input.before(rater);
// Mark element for initialization (once all stars are ready)
rater.addClass('rating-to-be-drawn');
// Accept readOnly setting from 'disabled' property
if(input.attr('disabled') || input.hasClass('disabled')) control.readOnly = true;
// Accept required setting from class property (class='required')
if(input.hasClass('required')) control.required = true;
// Create 'cancel' button
rater.append(
control.cancel = $('<div class="rating-cancel"><a title="' + control.cancel + '">' + control.cancelValue + '</a></div>')
.mouseover(function(){
$(this).rating('drain');
$(this).addClass('star-rating-hover');
//$(this).rating('focus');
})
.mouseout(function(){
$(this).rating('draw');
$(this).removeClass('star-rating-hover');
//$(this).rating('blur');
})
.click(function(){
$(this).rating('select');
})
.data('rating', control)
);
}; // first element of group
// insert rating star
var star = $('<div class="star-rating rater-'+ control.serial +'"><a title="' + (this.title || this.value) + '">' + this.value + '</a></div>');
rater.append(star);
// inherit attributes from input element
if(this.id) star.attr('id', this.id);
if(this.className) star.addClass(this.className);
// Half-stars?
if(control.half) control.split = 2;
// Prepare division control
if(typeof control.split=='number' && control.split>0){
var stw = ($.fn.width ? star.width() : 0) || control.starWidth;
var spi = (control.count % control.split), spw = Math.floor(stw/control.split);
star
// restrict star's width and hide overflow (already in CSS)
.width(spw)
// move the star left by using a negative margin
// this is work-around to IE's stupid box model (position:relative doesn't work)
.find('a').css({ 'margin-left':'-'+ (spi*spw) +'px' })
};
// readOnly?
if(control.readOnly)//{ //save a byte!
// Mark star as readOnly so user can customize display
star.addClass('star-rating-readonly');
//} //save a byte!
else//{ //save a byte!
// Enable hover css effects
star.addClass('star-rating-live')
// Attach mouse events
.mouseover(function(){
$(this).rating('fill');
$(this).rating('focus');
})
.mouseout(function(){
$(this).rating('draw');
$(this).rating('blur');
})
.click(function(){
$(this).rating('select');
})
;
//}; //save a byte!
// set current selection
if(this.checked) control.current = star;
// set current select for links
if(this.nodeName=="A"){
if($(this).hasClass('selected'))
control.current = star;
};
// hide input element
input.hide();
// backward compatibility, form element to plugin
input.change(function(){
$(this).rating('select');
});
// attach reference to star to input element and vice-versa
star.data('rating.input', input.data('rating.star', star));
// store control information in form (or body when form not available)
control.stars[control.stars.length] = star[0];
control.inputs[control.inputs.length] = input[0];
control.rater = raters[eid] = rater;
control.context = context;
input.data('rating', control);
rater.data('rating', control);
star.data('rating', control);
context.data('rating', raters);
}); // each element
// Initialize ratings (first draw)
$('.rating-to-be-drawn').rating('draw').removeClass('rating-to-be-drawn');
return this; // don't break the chain...
};
/*--------------------------------------------------------*/
/*
### Core functionality and API ###
*/
$.extend($.fn.rating, {
// Used to append a unique serial number to internal control ID
// each time the plugin is invoked so same name controls can co-exist
calls: 0,
focus: function(){
var control = this.data('rating'); if(!control) return this;
if(!control.focus) return this; // quick fail if not required
// find data for event
var input = $(this).data('rating.input') || $( this.tagName=='INPUT' ? this : null );
// focus handler, as requested by focusdigital.co.uk
if(control.focus) control.focus.apply(input[0], [input.val(), $('a', input.data('rating.star'))[0]]);
}, // $.fn.rating.focus
blur: function(){
var control = this.data('rating'); if(!control) return this;
if(!control.blur) return this; // quick fail if not required
// find data for event
var input = $(this).data('rating.input') || $( this.tagName=='INPUT' ? this : null );
// blur handler, as requested by focusdigital.co.uk
if(control.blur) control.blur.apply(input[0], [input.val(), $('a', input.data('rating.star'))[0]]);
}, // $.fn.rating.blur
fill: function(){ // fill to the current mouse position.
var control = this.data('rating'); if(!control) return this;
// do not execute when control is in read-only mode
if(control.readOnly) return;
// Reset all stars and highlight them up to this element
this.rating('drain');
this.prevAll().andSelf().filter('.rater-'+ control.serial).addClass('star-rating-hover');
},// $.fn.rating.fill
drain: function() { // drain all the stars.
var control = this.data('rating'); if(!control) return this;
// do not execute when control is in read-only mode
if(control.readOnly) return;
// Reset all stars
control.rater.children().filter('.rater-'+ control.serial).removeClass('star-rating-on').removeClass('star-rating-hover');
},// $.fn.rating.drain
draw: function(){ // set value and stars to reflect current selection
var control = this.data('rating'); if(!control) return this;
// Clear all stars
this.rating('drain');
// Set control value
if(control.current){
control.current.data('rating.input').attr('checked','checked');
control.current.prevAll().andSelf().filter('.rater-'+ control.serial).addClass('star-rating-on');
}
else
$(control.inputs).removeAttr('checked');
// Show/hide 'cancel' button
control.cancel[control.readOnly || control.required?'hide':'show']();
// Add/remove read-only classes to remove hand pointer
this.siblings()[control.readOnly?'addClass':'removeClass']('star-rating-readonly');
},// $.fn.rating.draw
select: function(value,wantCallBack){ // select a value
// ***** MODIFICATION *****
// Thanks to faivre.thomas - http://code.google.com/p/jquery-star-rating-plugin/issues/detail?id=27
//
// ***** LIST OF MODIFICATION *****
// ***** added Parameter wantCallBack : false if you don't want a callback. true or undefined if you want postback to be performed at the end of this method'
// ***** recursive calls to this method were like : ... .rating('select') it's now like .rating('select',undefined,wantCallBack); (parameters are set.)
// ***** line which is calling callback
// ***** /LIST OF MODIFICATION *****
var control = this.data('rating'); if(!control) return this;
// do not execute when control is in read-only mode
if(control.readOnly) return;
// clear selection
control.current = null;
// programmatically (based on user input)
if(typeof value!='undefined'){
// select by index (0 based)
if(typeof value=='number')
return $(control.stars[value]).rating('select',undefined,wantCallBack);
// select by literal value (must be passed as a string
if(typeof value=='string')
//return
$.each(control.stars, function(){
if($(this).data('rating.input').val()==value) $(this).rating('select',undefined,wantCallBack);
});
}
else
control.current = this[0].tagName=='INPUT' ?
this.data('rating.star') :
(this.is('.rater-'+ control.serial) ? this : null);
// Update rating control state
this.data('rating', control);
// Update display
this.rating('draw');
// find data for event
var input = $( control.current ? control.current.data('rating.input') : null );
// click callback, as requested here: http://plugins.jquery.com/node/1655
// **** MODIFICATION *****
// Thanks to faivre.thomas - http://code.google.com/p/jquery-star-rating-plugin/issues/detail?id=27
//
//old line doing the callback :
//if(control.callback) control.callback.apply(input[0], [input.val(), $('a', control.current)[0]]);// callback event
//
//new line doing the callback (if i want :)
if((wantCallBack ||wantCallBack == undefined) && control.callback) control.callback.apply(input[0], [input.val(), $('a', control.current)[0]]);// callback event
//to ensure retro-compatibility, wantCallBack must be considered as true by default
// **** /MODIFICATION *****
},// $.fn.rating.select
readOnly: function(toggle, disable){ // make the control read-only (still submits value)
var control = this.data('rating'); if(!control) return this;
// setread-only status
control.readOnly = toggle || toggle==undefined ? true : false;
// enable/disable control value submission
if(disable) $(control.inputs).attr("disabled", "disabled");
else $(control.inputs).removeAttr("disabled");
// Update rating control state
this.data('rating', control);
// Update display
this.rating('draw');
},// $.fn.rating.readOnly
disable: function(){ // make read-only and never submit value
this.rating('readOnly', true, true);
},// $.fn.rating.disable
enable: function(){ // make read/write and submit value
this.rating('readOnly', false, false);
}// $.fn.rating.select
});
/*--------------------------------------------------------*/
/*
### Default Settings ###
eg.: You can override default control like this:
$.fn.rating.options.cancel = 'Clear';
*/
$.fn.rating.options = { //$.extend($.fn.rating, { options: {
cancel: 'Cancel Rating', // advisory title for the 'cancel' link
cancelValue: '', // value to submit when user click the 'cancel' link
split: 0, // split the star into how many parts?
// Width of star image in case the plugin can't work it out. This can happen if
// the jQuery.dimensions plugin is not available OR the image is hidden at installation
starWidth: 16//,
//NB.: These don't need to be pre-defined (can be undefined/null) so let's save some code!
//half: false, // just a shortcut to control.split = 2
//required: false, // disables the 'cancel' button so user can only select one of the specified values
//readOnly: false, // disable rating plugin interaction/ values cannot be changed
//focus: function(){}, // executed when stars are focused
//blur: function(){}, // executed when stars are focused
//callback: function(){}, // executed when a star is clicked
}; //} });
/*--------------------------------------------------------*/
/*
### Default implementation ###
The plugin will attach itself to file inputs
with the class 'multi' when the page loads
*/
$(function(){
$('input[type=radio].star').rating();
});
/*# AVOID COLLISIONS #*/
})(jQuery);
/*# AVOID COLLISIONS #*/

File diff suppressed because one or more lines are too long