AnonSec Team
Server IP : 10.131.40.8  /  Your IP : 216.73.216.37
Web Server : Apache
System : Linux webd008.cluster131.gra.hosting.ovh.net 5.15.167-ovh-vps-grsec-zfs-classid #1 SMP Tue Sep 17 08:14:20 UTC 2024 x86_64
User : ludmqhh ( 137773)
PHP Version : 8.4.10
Disable Function : _dyuweyrj4,_dyuweyrj4r,dl
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON
Directory (0705) :  /home/ludmqhh/www/hotel-forum/wp-content/_plugins/wp-hotelier/assets/js/frontend/

[  Home  ][  C0mmand  ][  Upload File  ]

Current File : /home/ludmqhh/www/hotel-forum/wp-content/_plugins/wp-hotelier/assets/js/frontend/hotelier.js
jQuery(function ($) {
	"use strict";
	/* global jQuery, hotelier_params */

	// datepicker_params is required to continue, ensure the object exists
	if (typeof hotelier_params === "undefined") {
		return false;
	}

	var HTL_Hotelier = {
		listing_form: $("form.form--listing"),

		init: function () {
			this.book_now_button();
			this.show_room_meta();
			if (hotelier_params.expand_rates !== "1") {
				this.show_room_rates();
			}
			this.show_price_breakdown();
			this.scroll_to_rates_button();
			this.scroll_to_datpicker_from_rates();
			this.apply_coupon();
		},

		// Show the quantity input and update the text button
		book_now_button: function () {
			var add_to_cart_button = this.listing_form.find(
				".button--add-to-cart"
			);
			var qty_input = this.listing_form.find(".room-quantity");

			qty_input.hide();

			if (hotelier_params.book_now_redirect_to_booking_page === "1") {
				$("#reserve-button").hide();
			}

			add_to_cart_button.on("click", function (e) {
				e.preventDefault();

				var _this = $(this);
				var parent = _this.closest(".add-to-cart-wrapper");
				var qty = parent.find(".room-quantity");
				var input = qty.find("input.room-quantity__input");

				var inputValue = parseInt(input.val());

				if (!inputValue || 1 > inputValue) {
					inputValue = 1;
				}

				// Redirect to booking page directly if the option is enabled
				if (
					hotelier_params.book_now_redirect_to_booking_page === "1" &&
					hotelier_params.book_now_allow_quantity_selection !== "1"
				) {
					input.val(inputValue);
					$("#reserve-button").click();
					return;
				}

				if (!_this.hasClass("button--selected")) {
					var parent_room = _this.closest("li.room");

					if (inputValue > 1) {
						var selected_txt = _this.data("selected-text-plural");
					} else {
						var selected_txt = _this.data("selected-text-singular");
					}

					var selected_html =
						'<span class="add-to-cart-selected"><span class="add-to-cart-selected__count">' +
						inputValue +
						'</span> <span class="add-to-cart-selected__text">' +
						selected_txt +
						"</span></span>";

					parent_room.addClass("room--selected");
					_this.addClass("button--selected");
					_this.append(selected_html);
					input.val(inputValue);
					qty.show();
				} else if (parseInt(input.val(), 10) > 0) {
					// Redirect to booking page directly if the option is enabled
					if (
						hotelier_params.book_now_redirect_to_booking_page ===
						"1"
					) {
						$("#reserve-button").click();
						return;
					}

					$("html, body").animate(
						{
							scrollTop: $("#reserve-button").offset().top - 300,
						},
						600
					);
				}
			});

			qty_input.on("change", function () {
				var _this = $(this);
				var input = _this.find("input.room-quantity__input");
				var parent_room = _this.closest("li.room");
				var value = parseInt(input.val(), 10);
				var button = _this
					.closest(".add-to-cart-wrapper")
					.find(".button--add-to-cart");
				var count = button.find(".add-to-cart-selected__count");
				var text = button.find(".add-to-cart-selected__text");

				if (value === 1) {
					text.html(button.data("selected-text-singular"));
				} else {
					text.html(button.data("selected-text-plural"));

					if (isNaN(value)) {
						value = 0;
					}
				}

				count.html(value);

				if (value === 0) {
					parent_room.removeClass("room--selected");
				} else {
					parent_room.addClass("room--selected");
				}
			});
		},

		// Show/hide room details in the available rooms form (listing page)
		show_room_meta: function () {
			var room_meta = this.listing_form.find(".room__details--listing");
			var room_meta_button = this.listing_form.find(".room__more-link");
			var open_text = room_meta_button.data("open");
			var closed_text = room_meta_button.data("closed");

			room_meta.hide();
			room_meta_button.text(closed_text);

			room_meta_button.on("click", function (e) {
				e.preventDefault();

				var _this = $(this);
				var meta_id = _this.attr("href");
				var txt = $(meta_id).is(":visible") ? closed_text : open_text;

				_this.text(txt);
				$(meta_id).toggle();
			});
		},

		// Show/hide room rates in the available rooms form (listing page)
		show_room_rates: function () {
			var room_variations = this.listing_form.find(
				".room__rates--listing"
			);
			var room_variations_button = this.listing_form.find(
				".button--toggle-rates"
			);
			var open_text = room_variations_button.data("open");
			var closed_text = room_variations_button.data("closed");

			room_variations.hide();
			room_variations_button.text(closed_text);

			room_variations_button.on("click", function (e) {
				e.preventDefault();

				var _this = $(this);
				var variations_id = _this.attr("href");
				var txt = $(variations_id).is(":visible")
					? closed_text
					: open_text;

				_this.text(txt);
				$(variations_id).toggle();
			});
		},

		// Show/hide the price breakdown table
		show_price_breakdown: function () {
			var breakdown_tables = $("table.table--price-breakdown");
			var breakdown_button = $("table.table--reservation-table").find(
				".view-price-breakdown"
			);
			var open_text = breakdown_button.data("open");
			var closed_text = breakdown_button.data("closed");

			breakdown_tables.hide();
			breakdown_button.text(closed_text);

			breakdown_button.on("click", function (e) {
				e.preventDefault();

				var _this = $(this);
				var table_id = _this.attr("href");
				var table = $(table_id);
				var txt = $(table_id).is(":visible") ? closed_text : open_text;

				_this.text(txt);
				if (table.hasClass("open")) {
					table.removeClass("open");
					table.hide();
				} else {
					table.addClass("open");
					table.show();
				}
			});
		},

		// Scroll to available rates in single page
		scroll_to_rates_button: function () {
			var rates_button = $(".room-available-rates__link");
			var rates_section = $(".room__rates--single");

			if (rates_button.length === 0 || rates_section.length === 0) {
				return;
			}

			rates_button.on("click", function (e) {
				e.preventDefault();

				var target = rates_section.offset().top - 300;

				$("html, body").stop().animate(
					{
						scrollTop: target,
					},
					600
				);
			});
		},

		// Scroll to datepicker from rate in single page
		scroll_to_datpicker_from_rates: function () {
			var button = $(".button--check-availability");

			if (button.length === 0) {
				return;
			}

			// Check if default room datepicker exists
			var datepicker = $("#hotelier-datepicker");

			if (datepicker.length === 0) {
				// Check if the ajax room booking widget exists
				var ajax_room_booking_widget = $(
					"#widget-ajax-room-booking-form"
				);
				if (ajax_room_booking_widget.length !== 0) {
					datepicker = ajax_room_booking_widget;
				}
			}

			if (datepicker.length === 0) {
				return;
			}

			button.on("click", function (e) {
				e.preventDefault();

				var target = datepicker.offset().top - 300;

				$("html, body").stop().animate(
					{
						scrollTop: target,
					},
					600
				);
			});
		},

		// Handle coupon form
		apply_coupon: function () {
			$(".table--reservation-table").on(
				"click",
				".coupon-form__apply, .coupon-form__remove",
				function (e) {
					e.preventDefault();

					var _this = $(this);
					var table = _this.closest("table");
					var main_form = _this.closest("form");
					var coupon_form = _this.closest(".coupon-form");
					var coupon_input = coupon_form.find(
						"input.coupon-form__input"
					);
					var isRemoving = Boolean(
						_this.hasClass("coupon-form__remove button")
					);
					var form_data = main_form.serialize();

					var coupon_data = {
						form_data: form_data,
						coupon_nonce: hotelier_params.apply_coupon_nonce,
						coupon_code: coupon_input.val(),
						is_removing: isRemoving,
						action: "hotelier_apply_coupon",
					};

					table.removeClass("loading");
					table.addClass("loading");
					coupon_form.find(".hotelier-notice").remove();

					// Check if field is empty
					if (!isRemoving && !coupon_input.val()) {
						coupon_form.append(
							'<div class="hotelier-notice hotelier-notice--error">' +
								hotelier_params.apply_coupon_i18n.empty_coupon +
								"</div>"
						);
						table.removeClass("loading");

						return;
					}

					$.ajax({
						method: "POST",
						url: hotelier_params.ajax_url.toString(),
						data: coupon_data,
					})
						.done(function (response) {
							if (response.success === true) {
								if (response.data.html) {
									var new_template = response.data.html;
									var new_table = $(new_template)
										.find("table")
										.html();

									table.html(new_table);
									HTL_Hotelier.show_price_breakdown();
									$(window).trigger(
										"htl_window_coupon_applied"
									);
								}
							} else {
								coupon_form.append(
									'<div class="hotelier-notice hotelier-notice--error">' +
										response.data.message +
										"</div>"
								);
							}
						})
						.fail(function (response) {
							if (hotelier_params.enable_debug) {
								console.log(response);
							}
						})
						.always(function () {
							table.removeClass("loading");
						});
				}
			);
		},
	};

	$(document).ready(function () {
		HTL_Hotelier.init();
	});
});

AnonSec - 2021