From 44a9705da31aeb50e6e755b2153aef9b8fd34cae Mon Sep 17 00:00:00 2001 From: Owen Leonard Date: Wed, 13 Jun 2018 16:45:48 +0000 Subject: [PATCH] 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. --- .../opac-tmpl/bootstrap/css/jquery.rating.css | 14 - .../opac-tmpl/bootstrap/en/modules/opac-detail.tt | 90 +++-- .../opac-tmpl/bootstrap/en/modules/opac-results.tt | 34 +- .../bootstrap/images/star-ratings-sprite.png | Bin 2000 -> 0 bytes koha-tmpl/opac-tmpl/bootstrap/less/opac.less | 71 ++++ .../bootstrap/lib/jquery/plugins/jquery.rating.js | 392 --------------------- .../lib/jquery/plugins/jquery.barrating.min.js | 2 + 7 files changed, 134 insertions(+), 469 deletions(-) delete mode 100644 koha-tmpl/opac-tmpl/bootstrap/css/jquery.rating.css delete mode 100644 koha-tmpl/opac-tmpl/bootstrap/images/star-ratings-sprite.png delete mode 100644 koha-tmpl/opac-tmpl/bootstrap/lib/jquery/plugins/jquery.rating.js create mode 100644 koha-tmpl/opac-tmpl/lib/jquery/plugins/jquery.barrating.min.js diff --git a/koha-tmpl/opac-tmpl/bootstrap/css/jquery.rating.css b/koha-tmpl/opac-tmpl/bootstrap/css/jquery.rating.css deleted file mode 100644 index 461f015..0000000 --- a/koha-tmpl/opac-tmpl/bootstrap/css/jquery.rating.css +++ /dev/null @@ -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 */ diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-detail.tt b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-detail.tt index 7567a7c..58b2d56 100644 --- a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-detail.tt +++ b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-detail.tt @@ -37,9 +37,6 @@ [% IF ( bidi ) %] [% BLOCK cssinclude %][% Asset.css("css/right-to-left.css") %][% END %] [% END %] -[% IF ( OpacStarRatings != 'disable' ) %] - [% BLOCK cssinclude %][% Asset.css("css/jquery.rating.css") %][% END %] -[% END %] [% INCLUDE greybox.inc %] [% Asset.css("lib/emoji-picker/css/emoji.css") %] @@ -495,18 +492,19 @@ [% 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 %] - - [% ELSIF rating_avg_int == i %] - - [% ELSIF borrowernumber %] - - [% ELSE %] - - [% END %] + [% IF ( borrowernumber ) %] + [% END %] - + [% FOREACH i IN [ 1 2 3 4 5 ] %] + [% IF rating_avg_int == i %] + + [% ELSE %] + + [% END %] + [% END %] + @@ -515,12 +513,14 @@ [% UNLESS ( rating_readonly ) %]  [% END %]  [% IF my_rating %] - your rating: [% my_rating.rating_value %], + Your rating: [% my_rating.rating_value %]. + Cancel rating. [% ELSE %] + [% END %] - average rating: [% rating_avg %] ([% ratings.count %] votes) + Average rating: [% rating_avg %] ([% ratings.count %] votes) [% END # / IF OpacStarRatings != 'disable' %] @@ -1389,7 +1389,7 @@ [% END %] -[% IF ( OpacStarRatings != 'disable' ) %][% Asset.js("lib/jquery/plugins/jquery.rating.js") %][% END %] +[% IF ( OpacStarRatings != 'disable' ) %][% Asset.js("lib/jquery/plugins/jquery.barrating.min.js") %][% END %] [% IF ( OpacHighlightedWords ) %][% Asset.js("lib/jquery/plugins/jquery.highlight-3.js") %][% END %] @@ -1649,50 +1649,46 @@ // ----------------------------------------------------- // star-ratings code // ----------------------------------------------------- - // hide 'rate' button if javascript enabled + // hide 'rate' button if javascript enabled $('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, + readonly: rating_enabled, + onSelect: function(value, text) { + $.post("/cgi-bin/koha/opac-ratings-ajax.pl", { rating_old_value: $("#rating_value").attr("value"), borrowernumber: "[% borrowernumber %]", biblionumber: "[% biblio.biblionumber %]", rating_value: value, auth_error: value - }, function (data) { + }, function (data) { if (data.auth_status != 'ok') { - window.alert(_("Your CGI session cookie is not current. Please refresh the page and try again.")); + window.alert(_("Your session has expired. 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)); - + $("#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)); } - }, "json"); - }); - }; + }, "json"); } - }); }); - // ----------------------------------------------------- + + $("#cancel_rating_text a").on("click", function(){ + $("#star_rating").barrating("set", ""); + }); + [% END # / IF ( OpacStarRatings != 'disable' )%] [% IF ( IDreamBooksReviews || IDreamBooksReadometer ) %] diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-results.tt b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-results.tt index c30f330..52694b7 100644 --- a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-results.tt +++ b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-results.tt @@ -11,12 +11,7 @@ You did not specify any search criteria. [% END %] [% INCLUDE 'doc-head-close.inc' %] -[% IF ( OpacStarRatings == 'all' || Koha.Preference('Babeltheque') ) %] - [% BLOCK cssinclude %] - [% Asset.css("css/jquery.rating.css") %] - [% END %] -[% END %] - +[% BLOCK cssinclude %][% END %] @@ -425,6 +420,7 @@
[% i %]
[% END %] [% END %] +    [% SEARCH_RESULT.score_avg %] / 5 (on [% SEARCH_RESULT.num_scores %] rates) [% IF ( SEARCH_RESULT.num_critics ) %] @@ -482,15 +478,21 @@ [% IF ( OpacStarRatings == 'all' ) %]
- [% 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 %] - - [% ELSE %] - - [% END %] - [% END %] + [% 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 %] + + [% ELSIF rating_avg_int > i %] + + [% ELSE %] + + [% END %] + [% END %] +
+
[% IF SEARCH_RESULT.ratings.count > 0 %]   ([% SEARCH_RESULT.ratings.count %] votes) @@ -591,7 +593,7 @@ [% IF ( LibraryThingForLibrariesID ) %] [% END %] -[% IF ( OpacStarRatings == 'all' || Koha.Preference('Babeltheque') ) %][% Asset.js("lib/jquery/plugins/jquery.rating.js") %][% END %] +[% IF ( OpacStarRatings == 'all' || Koha.Preference('Babeltheque') ) %][% Asset.js("lib/jquery/plugins/jquery.barrating.min.js") %][% END %] [% IF ( OverDriveEnabled ) %][% Asset.js("js/overdrive.js") %][% END %] [% Asset.js("lib/jquery/plugins/jquery.checkboxes.min.js") %] [% IF ( OpacHighlightedWords ) %][% Asset.js("lib/jquery/plugins/jquery.highlight-3.js") %] diff --git a/koha-tmpl/opac-tmpl/bootstrap/images/star-ratings-sprite.png b/koha-tmpl/opac-tmpl/bootstrap/images/star-ratings-sprite.png deleted file mode 100644 index 1dadc550abfcc6824f5950c0caf717d5a26d8540..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2000 zcmdT^3s)1@7M=`&@RXGH3Mg$;TI52l1*JSxV1l3`T!ciCr#D1`#fv}zK_t-OAp+4Q z(y%0g1zkW91wp0qN}&ml(1gbojXZ+_CIp5AkR&{8?F{~k&RTQMI(wh9&-Zy-~8&_;o+gq{@*Z@$!4=PMd^zJ z-ct|ll}e>Tp-`z*3tUf?Bz#_YcynPvaxPl_c&A#eUhe-^DLDQ-Cugzfn!Ja+GUT;7 z8uA;}MUl;1910msOIseGzNvGbIZvOgv3Xm4S5;p*`|u$*)P1e#7vNN?}blct_? zR5?9ly}5o}p%}S(byFo(4-U$@S~PO`5-V9HeZ4$!iy!GD<$5Rte2whQcvbN@n~e;n zDqr}nya-wmpX@(->fM@B+TpUuvztpzdR1G#QCqfAR?zI}IeOblgS0P~6|3(4JP<)u z@X3EpjLf859J_ZDLU zzw2$;RE?|;i>7~dSea^Ay#~*w#LK!879Q2lHCV}eeJ4{AR+8y&6T;p-@1Jk_TEX|3 z&tlHD9b02vkc9;;<-~~s4#;>Rv)riZ4CeFr$e9f0%P{|y2lrN|raEafd2j5h7*ep{ zxz^TB-@X55nTy3@QB>6X_wPj_5jytO3yjce>qw&bQPJf;_yfFRb6n6q^7Hm2pSUunbfh>IiGS;mZfx{EEd~v>d5J1K|r`YdP(slOXz`TfZ!$K}A z)zr)`u@*qL_~&xW{~+LC01Z_vF~CC!#%M4ky8v3V-2}iq+&S$aTw#YX2{!9YhQ5Ol zoGz&lcrM`5enF2Hq3ta|Ej8w891gh^wtxXp51BMj6J)0YNqR(xgew{R9YdA+BlQ3q zM}+Kf^^+K0vi5^yrDJvj0P5N{l(JY_JW!XE2am?u+mi`)AEVc)gVz)E6k^%-*=gET zU91!&LWUa?VRSlu0zoV$CbBG$7y#GRaJ@7%-HAXraA4=o@z`X?G!(+E#)GPaG^oX>749CpJUJqVZLG#$%4ErN;9|M$N!*pySp*X z>4;0A7DixOZ1P8{ftr7--ADuy41qB*zmc4FX~dv6MmFZkZtm4IMTX;dM#5>62EMZWWD%T-Nzw_~!ZOc+{rj z`raZnHT9c}zxWJqt#)SO77S@eS0v53Xu%6iy{TaQuor@@l$Gw)nw6J?rso%fG>)Zp?7inC7|Z1>U>zJ=zB;JMKTm8cqGeGq1oyJ0=sv z(jWJiWB%pc#ER1C#t%*zr?NV0{p0CcCRWZvV;2rrx3`lroA)O^#l%P|VK6!Q^^5wG zh|!CIt&$hWPm}NS92}w+?FcIvs*yy=Ye(t+&)i~3ju4CklKza1V_aIUKp#oK+sn_h I-h-C)H_bQ)TL1t6 diff --git a/koha-tmpl/opac-tmpl/bootstrap/less/opac.less b/koha-tmpl/opac-tmpl/bootstrap/less/opac.less index 88b350a..73482c7 100644 --- a/koha-tmpl/opac-tmpl/bootstrap/less/opac.less +++ b/koha-tmpl/opac-tmpl/bootstrap/less/opac.less @@ -2643,6 +2643,77 @@ a.reviewlink:visited { } } +/* 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 { + font: normal normal normal 20px/1 FontAwesome; + text-rendering: auto; + -webkit-font-smoothing: antialiased; + text-decoration: none; + margin-right: 2px; + } + + a:after { + content: '\f005'; + color: @star-default; + } + + a.br-active:after { + color: @star-active; + } + + a.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 { + content: '\f006'; + color: black; + } + + a.br-active:after, + a.br-selected:after { + content: '\f005'; + color: black; + } + } + + } +} @import "responsive.less"; diff --git a/koha-tmpl/opac-tmpl/bootstrap/lib/jquery/plugins/jquery.rating.js b/koha-tmpl/opac-tmpl/bootstrap/lib/jquery/plugins/jquery.rating.js deleted file mode 100644 index f4a22d5..0000000 --- a/koha-tmpl/opac-tmpl/bootstrap/lib/jquery/plugins/jquery.rating.js +++ /dev/null @@ -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 = $(''); - 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 = $('') - .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 = $(''); - 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 #*/ diff --git a/koha-tmpl/opac-tmpl/lib/jquery/plugins/jquery.barrating.min.js b/koha-tmpl/opac-tmpl/lib/jquery/plugins/jquery.barrating.min.js new file mode 100644 index 0000000..c65b39f --- /dev/null +++ b/koha-tmpl/opac-tmpl/lib/jquery/plugins/jquery.barrating.min.js @@ -0,0 +1,2 @@ +!function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&module.exports?module.exports=t(require("jquery")):t(jQuery)}(function(t){var e=function(){function e(){var e=this,n=function(){var n=["br-wrapper"];""!==e.options.theme&&n.push("br-theme-"+e.options.theme),e.$elem.wrap(t("
",{"class":n.join(" ")}))},i=function(){e.$elem.unwrap()},a=function(n){return t.isNumeric(n)&&(n=Math.floor(n)),t('option[value="'+n+'"]',e.$elem)},r=function(){var n=e.options.initialRating;return n?a(n):t("option:selected",e.$elem)},o=function(){var n=e.$elem.find('option[value="'+e.options.emptyValue+'"]');return!n.length&&e.options.allowEmpty?(n=t("