1/* global jQuery:false */ 2var THEMEREX_user_marks = false; 3 4 5 6 7 8function initReviews() { 9 "use strict"; 10 11 var fromFront = arguments[0] ? true : false; 12 13 // Show current marks 14 jQuery('.reviews_data '+(reviews_max_level < 100 ? '.criteria_stars' : '.criteria_bar')).each(function() { 15 "use strict"; 16 setStarsOnMark(jQuery(this).find(reviews_max_level < 100 ? '.theme_stars' : '.criteria_level').eq(0), null); 17 }); 18 19 if (allowUserReviews) { 20 if (reviews_max_level < 100) { 21 // Stars selector: over, out and click 22 jQuery('.reviews_users .reviews_data').on('mouseover', '.theme_stars', function(e) { 23 "use strict"; 24 if (!allowUserReviews) return; 25 jQuery(this).parent().find('.theme_stars').removeClass('theme_stars_on'); 26 jQuery(this).addClass('theme_stars_on').prevAll().addClass('theme_stars_on'); 27 }); 28 jQuery('.reviews_users .reviews_data').on('mouseout', '.theme_stars', function(e) { 29 "use strict"; 30 if (!allowUserReviews) return; 31 setStarsOnMark(jQuery(this), null); 32 }); 33 jQuery('.reviews_users .reviews_data').on('click', '.theme_stars', function(e) { 34 "use strict"; 35 if (!allowUserReviews) return; 36 if (!THEMEREX_user_marks && jQuery(this).parents('#reviews_users').length > 0) { 37 jQuery(this).parent().parent().parent().find('.theme_stars').removeClass('theme_stars_on'); 38 jQuery(this).parent().parent().parent().find('input').val(0); 39 THEMEREX_user_marks = true; 40 } 41 var mark = Number(jQuery(this).data('mark')); 42 if (mark === 1 && mark === Number(jQuery(this).parent().siblings('input').val())) { 43 mark = 0; 44 } 45 setStarsOnMark(jQuery(this), mark); 46 setAverageMark(jQuery(this).parents('.reviews_tab').attr('id')); 47 // Change description to button 48 if (!jQuery('.reviews_users .criteria_summary_text').hasClass('show_button')) { 49 jQuery('.reviews_users .criteria_summary_text').addClass('show_button'); 50 } 51 }); 52 } else { 53 initDrag(); 54 } 55 } else { 56 if (reviews_max_level == 100) { 57 jQuery(".reviews_users .reviews_data .criteria_dragger" ).hide(); 58 } 59 } 60 61 // Summary hover 62 if (fromFront) { 63 jQuery('.criteria_summary').hover( 64 function(e) { 65 "use strict"; 66 jQuery(this).addClass('show_word'); 67 }, 68 function(e) { 69 "use strict"; 70 jQuery(this).removeClass('show_word'); 71 } 72 ); 73 } 74} 75 76function initDrag() { 77 "use strict"; 78 var step = 0; 79 jQuery(".reviews_users .reviews_data .criteria_dragger" ).each(function () { 80 "use strict"; 81 var obj = jQuery(this); 82 var bar = jQuery(this).parent(); 83 var barWidth = bar.width()-obj.width(); 84 var mark = bar.siblings('input').val(); 85 if (step == 0) { 86 step = barWidth/reviews_max_level; 87 } 88 obj.css('left', Math.round(mark*step)); 89 }); 90 jQuery(".reviews_users .reviews_data .criteria_dragger" ).draggable({ 91 axis: 'x', 92 grid: [step, step], 93 containment: 'parent', 94 drag: function(e, ui) { 95 "use strict"; 96 if (!allowUserReviews) return; 97 var pos = ui.position.left; 98 var mark = Math.max(0, Math.min(reviews_max_level, Math.round(ui.position.left / step))); 99 if (!THEMEREX_user_marks && ui.helper.parents('#reviews_users').length > 0) { 100 ui.helper.parents('#reviews_users').find('.criteria_level').width(0); 101 ui.helper.parents('#reviews_users').find('input').val(0); 102 ui.helper.parents('#reviews_users').find('.criteria_mark').html(0); 103 ui.helper.parents('#reviews_users').find('.criteria_dragger').css('left', 0); 104 THEMEREX_user_marks = true; 105 } 106 setStarsOnMark(ui.helper.siblings('.criteria_bar').find('.criteria_level'), mark); 107 setAverageMark(ui.helper.parents('.reviews_tab').attr('id')); 108 // Change description to button 109 if (!jQuery('.reviews_users .criteria_summary_text').hasClass('show_button')) { 110 jQuery('.reviews_users .criteria_summary_text').addClass('show_button'); 111 } 112 } 113 }); 114} 115 116// Show average mark 117function setAverageMark() { 118 "use strict"; 119 var id = arguments[0] ? arguments[0] : ''; 120 var avg = 0; 121 var cnt = 0; 122 jQuery((id ? '#'+id+' ' : '')+'.reviews_data .criteria_row input').each(function() { 123 avg += parseFloat(jQuery(this).val()); 124 cnt++; 125 }); 126 avg = cnt > 0 ? Math.round(avg/cnt*10)/10 : '0.0'; 127 if (String(avg).indexOf('.') < 0) { 128 avg += '.0'; 129 } 130 jQuery((id ? '#'+id+' ' : '')+'.reviews_summary .criteria_mark').html(avg); 131 jQuery((id ? '#'+id+' ' : '')+'.reviews_summary .criteria_word').html(getReviewsRatingWordValue(avg)); 132 setAverageStars(id, avg); 133} 134 135// Set average stars width 136function setAverageStars(id, avg) { 137 "use strict"; 138 jQuery((id ? '#'+id+' ' : '')+'.reviews_summary '+(reviews_max_level < 100 ? '.stars_on' : '.criteria_level')).css('width', Math.round(avg/reviews_max_level*100)+'%'); 139} 140 141// Restore or set new stars value 142function setStarsOnMark(obj, mark) { 143 "use strict"; 144 var prnt = reviews_max_level < 100 ? obj.parent() : obj.parent().parent(); 145 if (mark!==null) { 146 prnt.siblings('input').val(mark); 147 } else {
148 mark = prnt.siblings('input').val(); 149 } 150 prnt.siblings('.criteria_mark').html(mark); 151 if (reviews_max_level < 100) { 152 prnt.find('.theme_stars').removeClass('theme_stars_on').each(function(idx) { 153 if (idx+1 <= Math.round(mark)) jQuery(this).addClass('theme_stars_on'); 154 }); 155 } else { 156 obj.css('width', mark/reviews_max_level*100+'%'); 157 } 158} 159 160// Get word-value review rating 161function getReviewsRatingWordValue(r) { 162 "use strict"; 163 var words = reviews_levels.split(','); 164 var k = reviews_max_level / words.length; 165 r = Math.max(0, Math.min(words.length-1, Math.floor(r/k))); 166 return words[r]; 167}
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.