PageSourceSearch

https://rna.id/blog/wp-content/plugins/multi-rating/assets/js/frontend.js?ver=5.0.6a

js rna.id collected 2026-10-04 15:10:50 UTC 11,879 bytes, 281 lines download raw bytes

1jQuery(document).ready(function() {	
2
3	// supporting different versions of Font Awesome icons
4	var icon_classes = mr_frontend_data.icon_classes;
5	if (typeof icon_classes === 'string') {
6		icon_classes = jQuery.parseJSON(icon_classes);
7	}
8	
9	jQuery(".rating-form :submit").click(function(e) {
10
11		e.preventDefault();
12	
13		var ratingItems = [];
14		var customFields = [];
15		var btnId = e.currentTarget.id; // btnType-postId-sequence
16		var parts = btnId.split("-"); 
17		var postId = parts[1];
18		var sequence = parts[2];
19		
20		// rating items - hidden inputs are used to find all rating items in the rating form
21		jQuery('.rating-form input[type="hidden"].rating-item-' + postId + '-' + sequence).each(function(index) {			
22			
23			var ratingItemId = jQuery(this).val();
24			
25			// get values for rating items
26			var element = jQuery('[name="rating-item-' + ratingItemId + '-' + sequence + '"]');
27			var value = null;
28			if (jQuery(element).is(':radio')) {
29				value = jQuery('input[type="radio"][name="rating-item-' + ratingItemId + '-' + sequence + '"]:checked').val(); 
30			} else if (jQuery(element).is('select')) {
31				value = jQuery('select[name="rating-item-' +ratingItemId + '-' + sequence + '"] :selected').val(); 
32			} else {
33				value = jQuery('input[type="hidden"][name="rating-item-' + ratingItemId + '-' + sequence + '"]').val();
34			}
35			
36			var ratingItem = { 'id' : ratingItemId, 'value' : value };
37			ratingItems[index] = ratingItem;
38			
39		});
40	
41		var data = {
42				action : "save_rating",
43				nonce : mr_frontend_data.ajax_nonce,
44				ratingItems : ratingItems,
45				postId : postId,
46				sequence : sequence
47		};
48		
49		var temp = postId +'-' + sequence;
50		var spinnerId = 'mr-spinner-' + temp;
51		
52		jQuery('<i style="margin-left: 10px;" id="' + spinnerId + '" class="' + icon_classes.spinner + '"></i>').insertAfter(jQuery('input#' + btnId).parent());
53	
54		jQuery.post(mr_frontend_data.ajax_url, data, function(response) {
55				handle_rating_form_submit_response(response);
56		});
57	});
58	
59	/**
60	 * Handles rating form submit response
61	 */
62	function handle_rating_form_submit_response(response) {
63		
64		var jsonResponse = jQuery.parseJSON(response);
65		var id = jsonResponse.data.post_id + "-" + jsonResponse.data.sequence;
66		
67		var ratingForm = jQuery("#rating-form-" + id);
68		
69		// update rating results if success
70		if (jsonResponse.status == 'success') {
71			var ratingResult = jQuery(".rating-result-" + jsonResponse.data.post_id).filter(".mr-filter");
72			
73			if (ratingResult) {
74				ratingResult.replaceWith(jsonResponse.data.html);
75			}
76		}
77		
78		// remove existing errors for rating items, optional fields and custom fields
79		jQuery("#rating-form-" + id + " .rating-item .mr-error").html("");
80		
81		// update messages
82		if ((jsonResponse.validation_results && jsonResponse.validation_results.length > 0) || jsonResponse.message) {
83			var messages = '';
84			
85			if (jsonResponse.validation_results) {
86				var index = 0;
87				for (index; index<jsonResponse.validation_results.length; index++) {
88					
89					if (jsonResponse.validation_results[index].field && jQuery("#" + jsonResponse.validation_results[index].field + "-" + jsonResponse.data.sequence + "-error").length) {
90						jQuery("#" + jsonResponse.validation_results[index].field + "-" + jsonResponse.data.sequence + "-error")
91								.html(jsonResponse.validation_results[index].message);
92					} else {
93						messages += '<p class="mr message mr-' + jsonResponse.validation_results[index].severity + '">' 
94								+ jsonResponse.validation_results[index].message + '</p>';
95					}
96				}
97			}
98			
99			if (jsonResponse.message) {
100				messages += '<p class="message ' + jsonResponse.status + '">' 
101						+ jsonResponse.message + '</p>';
102			}
103			
104			if (ratingForm && ratingForm.parent().find('.message')) {
105				ratingForm.parent().find('.message').remove();
106			}
107			
108			if (ratingForm && ratingForm.parent()) {
109				if (jsonResponse.status == 'success' && jsonResponse.data.hide_rating_form) {
110					ratingForm.parent().after(messages);
111				} else {
112					ratingForm.find(".save-rating").before(messages);
113				}
114			}
115		}
116		
117		// remove rating form if success
118		if (jsonResponse.status == 'success' && jsonResponse.data.hide_rating_form == true && ratingForm) {
119			ratingForm.remove();
120		}
121
122		var spinnerId = 'mr-spinner-' + id;
123		jQuery("#" + spinnerId).remove();
124	}
125	
126	/**
127	 * Selected rating item value on hover and click
128	 */
129	var ratingItemStatus = {};
130	
131	var useCustomStarImages = mr_frontend_data.use_custom_star_images;
132	if (typeof useCustomStarImages === 'string') {
133		useCustomStarImages = jQuery.parseJSON(useCustomStarImages);
134	}
135	
136	jQuery(".mr-star-rating-select .mr-star-empty, .mr-star-rating-select .mr-star-full").on("click", function(e) {
137		
138		updateRatingItemStatus(this.id, 'clicked');
139		
140		if (useCustomStarImages == true) {
141			jQuery(this).not('.mr-minus').removeClass('mr-custom-empty-star mr-star-empty mr-custom-hover-star mr-star-hover').addClass('mr-custom-full-star mr-star-full');
142			jQuery(this).prevAll().not('.mr-minus').removeClass('mr-custom-empty-star mr-star-empty mr-custom-hover-star mr-star-hover').addClass('mr-custom-full-star mr-star-full');
143			jQuery(this).nextAll().not('.mr-minus').removeClass('mr-custom-full-star mr-star-full mr-custom-hover-star mr-star-hover').addClass('mr-custom-empty-star mr-star-empty');
144		} else {
145			jQuery(this).not('.mr-minus').removeClass(icon_classes.star_empty + " " + icon_classes.star_hover).addClass(icon_classes.star_full);
146			jQuery(this).prevAll().not('.mr-minus').removeClass(icon_classes.star_empty + " " + icon_classes.star_hover).addClass(icon_classes.star_full);
147			jQuery(this).nextAll().not('.mr-minus').removeClass(icon_classes.star_full + " " + icon_classes.star_hover).addClass(icon_classes.star_empty);
148		}
149		
150		updateSelectedHiddenValue(this);
151	});
152	
153	jQuery(".mr-star-rating-select .mr-minus").on("click", function(e) {
154		
155		updateRatingItemStatus(this.id, '');
156		
157		if (useCustomStarImages == true) {
158			jQuery(this).not('.mr-minus').removeClass('mr-custom-empty-star mr-star-empty mr-custom-hover-star mr-star-hover').addClass('mr-custom-full-star mr-star-full');
159			jQuery(this).prevAll().not('.mr-minus').removeClass('mr-custom-empty-star mr-star-empty mr-custom-hover-star mr-star-hover').addClass('mr-custom-full-star mr-star-full');
160			jQuery(this).nextAll().not('.mr-minus').removeClass('mr-custom-full-star mr-star-full mr-custom-hover-star mr-star-hover').addClass('mr-custom-empty-star mr-star-empty');
161		} else {
162			jQuery(this).not('.mr-minus').removeClass(icon_classes.star_empty + " " + icon_classes.star_hover).addClass(icon_classes.star_full);
163			jQuery(this).prevAll().not('.mr-minus').removeClass(icon_classes.star_empty + " " + icon_classes.star_hover).addClass(icon_classes.star_full);
164			jQuery(this).nextAll().not('.mr-minus').removeClass(icon_classes.star_full + " " + icon_classes.star_hover).addClass(icon_classes.star_empty);
165		}
166		
167		updateSelectedHiddenValue(this);
168	});
169	
170	jQuery(".mr-star-rating-select .mr-minus, .mr-star-rating-select .mr-star-empty, .mr-star-rating-select .mr-star-full").on("mouseenter mouseleave", function(e) {
171
172		var elementId = this.id;
173		var ratingItemIdSequence = getRatingItemIdSequence(elementId);
174		
175		if (jQuery("#" + ratingItemIdSequence).val() == 0 || (ratingItemStatus[ratingItemIdSequence] != 'clicked' 
176				&& ratingItemStatus[ratingItemIdSequence] != undefined)) {
177			
178			updateRatingItemStatus(this.id, 'hovered');
179			
180			if (useCustomStarImages == true) {
181				jQuery(this).not('.mr-minus').removeClass('mr-custom-empty-star mr-star-empty').addClass('mr-custom-hover-star mr-star-hover');
182				jQuery(this).prevAll().not('.mr-minus').removeClass('mr-custom-empty-star mr-star-empty').addClass('mr-custom-hover-star mr-star-hover');
183				jQuery(this).nextAll().not('.mr-minus').removeClass('mr-custom-hover-star mr-star-hover mr-custom-full-star mr-star-full').addClass('mr-custom-empty-star mr-star-empty');	
184
185			} else {
186				jQuery(this).not('.mr-minus').removeClass(icon_classes.star_empty).addClass(icon_classes.star_hover);
187				jQuery(this).prevAll().not('.mr-minus').removeClass(icon_classes.star_empty).addClass(icon_classes.star_hover);
188				jQuery(this).nextAll().not('.mr-minus').removeClass(icon_classes.star_hover + " " + icon_classes.star_full).addClass(icon_classes.star_empty);	
189			}
190		}
191	});
192	
193	// now cater for touch screen devices
194	var touchData = {
195		started : null, // detect if a touch event is sarted
196		currrentX : 0,
197		yCoord : 0,
198		previousXCoord : 0,
199		previousYCoord : 0,
200		touch : null
201	};
202	
203	jQuery(".mr-star-rating-select .mr-star-empty, .mr-star-rating-select .mr-star-full, .mr-star-rating-select .mr-minus").on("touchstart", function(e) {
204		touchData.started = new Date().getTime();
205		var touch = e.originalEvent.touches[0];
206		touchData.previousXCoord = touch.pageX;
207		touchData.previousYCoord = touch.pageY;
208		touchData.touch = touch;
209	});
210	
211	jQuery(".mr-star-rating-select .mr-star-empty, .mr-star-rating-select .mr-star-full, .mr-star-rating-select .mr-minus").on("touchend touchcancel", function(e) {
212			var now = new Date().getTime();
213			// Detecting if after 200ms if in the same position.
214			if ((touchData.started !== null)
215					&& ((now - touchData.started) < 200)
216					&& (touchData.touch !== null)) {
217				var touch = touchData.touch;
218				var xCoord = touch.pageX;
219				var yCoord = touch.pageY;
220				if ((touchData.previousXCoord === xCoord)
221						&& (touchData.previousYCoord === yCoord)) {
222					
223					if (useCustomStarImages == true) {
224						jQuery(this).not('.mr-minus').removeClass('mr-custom-empty-star mr-star-empty').addClass('mr-custom-full-star mr-star-full');
225						jQuery(this).prevAll().not('.mr-minus').removeClass('mr-custom-empty-star mr-star-empty').addClass('mr-custom-full-star mr-star-full');
226						jQuery(this).nextAll().not('.mr-minus').removeClass('mr-custom-full-star mr-star-full').addClass('mr-custom-empty-star mr-star-empty');
227					} else {
228						jQuery(this).not('.mr-minus').removeClass(icon_classes.star_empty).addClass(icon_classes.star_full);
229						jQuery(this).prevAll().not('.mr-minus').removeClass(icon_classes.star_empty).addClass(icon_classes.star_full);
230						jQuery(this).nextAll().not('.mr-minus').removeClass(icon_classes.star_full).addClass(icon_classes.star_empty);
231					}
232					updateSelectedHiddenValue(this);
233				}
234			}
235			touchData.started = null;
236			touchData.touch = null;
237	});
238	
239	/**
240	 * Updates the rating item status to either hovered or clicked
241	 */
242	function updateRatingItemStatus(elementId, status) {
243		var ratingItemIdSequence = getRatingItemIdSequence(elementId);
244		if (ratingItemIdSequence != null) {
245			ratingItemStatus[ratingItemIdSequence] = status;
246		}
247	}
248	
249	/**
250	 * Retrieves the rating item id sequence used to store the status of a rating item option
251	 */
252	function getRatingItemIdSequence(elementId) {
253		var parts = elementId.split("-"); 
254		
255		var ratingItemId = parts[4]; /// skip 2: rating-item-
256		var sequence = parts[5];
257		
258		var ratingItemIdSequence = 'rating-item-' + ratingItemId + '-' + sequence;
259		return ratingItemIdSequence;
260	}
261	
262	/**
263	 * Updates the selected hidden value for a rating item
264	 */
265	function updateSelectedHiddenValue(element) {
266		
267		// id is in format "index-3-rating-item-2-1"
268		var elementId = element.id;
269		
270		var parts = elementId.split("-"); 
271		var value = parts[1]; // this is the star index
272		var ratingItemId = parts[4]; /// skipt 2: rating-item-
273		var sequence = parts[5];
274		    		
275		// update hidden value for storing selected option
276		var hiddenValue = '#rating-item-'+ ratingItemId + '-' + sequence;
277		    		
278		jQuery(hiddenValue).val(value);
279	}
280
281});

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.