HEX
Server: Apache/2.4.59 (Debian)
System: Linux emory.shared.1984.is 6.1.0-27-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.115-1 (2024-11-01) x86_64
User: u11574 (1020)
PHP: 7.4.33
Disabled: exec,system,passthru,shell_exec,popen,show_source,shell,symlink,proc_open,pcntl_exec,pcntl_fork,pcntl_wait,pcntl_alarm,pcntl_signal,pcntl_signal_dispatch,pcntl_getpriority,proc_get_status,expect_popen,dl,putenv,mail
Upload Files
File: /var/www/virtual/mariaellingsen.com/htdocs/wp-content/plugins/soliloquy/assets/js/addons.js
/* global soliloquy_addons, ajaxurl */
/* exported e */
/*jshint unused:false*/
/* ==========================================================
 * settings.js
 * https://soliloquywp.com/
 * ==========================================================
 * Copyright 2014 Thomas Griffin.
 *
 * Licensed under the GPL License, Version 2.0 or later (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.gnu.org/licenses/gpl-2.0.html
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * ========================================================== */
// jshint ignore:line
(function ($, window, document, soliloquy_addons) {
	//DOM Ready
	$(function () {
		//Create the Select boxes
		$('.soliloquy-chosen').each(function () {
			$(this).chosen({
				disable_search: true,
			});
		});

		//Sort Filter for addons
		$('#soliloquy-addon-filter').on('change', function () {
			var $select = $(this),
				$value = $select.val(),
				$container = $('#soliloquy-addons-area'),
				container_data = $container.data('soliloquy-filter'),
				$addon = $('#soliloquy-addons-area .soliloquy-addon');

			//Make sure the addons are visible.
			$addon.show();

			switch ($value) {
				case 'asc':
					$addon
						.sort(function (a, b) {
							return $(a)
								.data('addon-title')
								.localeCompare(
									$(b).data('addon-title'),
								);
						})
						.each(function (_, addon) {
							$(addon).removeClass('last');

							$container.append(addon).hide().fadeIn(100);
						});

					$(
						'#soliloquy-addons-area .soliloquy-addon:nth-child(3n)',
					).addClass('last');

					break;
				case 'desc':
					$addon
						.sort(function (a, b) {
							return $(b)
								.data('addon-title')
								.localeCompare(
									$(a).data('addon-title'),
								);
						})
						.each(function (_, addon) {
							$(addon).removeClass('last');
							$container.append(addon).hide().fadeIn(100);
						});

					$(
						'#soliloquy-addons-area .soliloquy-addon:nth-child(3n)',
					).addClass('last');

					break;
				case 'active':
					$addon
						.hide()
						.filter('[data-addon-status="active"]')
						.show();

					$addon.removeClass('last');

					$(
						'#soliloquy-addons-area .soliloquy-addon:visible',
					).each(function (i) {
						if ((i + 1) % 3 === 0) {
							$(this).addClass('last');
						}
					});

					break;
				case 'inactive':
					$addon
						.hide()
						.filter('[data-addon-status="inactive"]')
						.show();
					$addon.removeClass('last');

					$(
						'#soliloquy-addons-area .soliloquy-addon:visible',
					).each(function (i) {
						if ((i + 1) % 3 === 0) {
							$(this).addClass('last');
						}
					});

					break;
				case 'installed':
					var i = 0;
					$addon
						.hide()
						.filter('[data-addon-status="not_installed"]')
						.show();
					$addon.removeClass('last');
					$(
						'#soliloquy-addons-area .soliloquy-addon:visible',
					).each(function (i) {
						if ((i + 1) % 3 === 0) {
							$(this).addClass('last');
						}
					});
					break;
			}
		});

		// Re-enable install button if user clicks on it, needs creds but tries to install another addon instead.
		$('#soliloquy-addons-area').on(
			'click.refreshInstallAddon',
			'.soliloquy-addon-action-button',
			function (e) {
				e.preventDefault();

				var $el = $(this),
					buttons = $('#soliloquy-addons-area').find(
						'.soliloquy-addon-action-button',
					);

				$.each(buttons, function (i, element) {
					if ($el === element) {
						return true;
					}

					soliloquyAddonRefresh(element);
				});
			},
		);

		// Process Addon activations for those currently installed but not yet active.
		$('#soliloquy-addons-area').on(
			'click.activateAddon',
			'.soliloquy-activate-addon',
			function (e) {
				e.preventDefault();

				var $button = $(this),
					plugin = $button.attr('rel'),
					$el = $button.parent().parent(),
					$message = $button
						.parent()
						.parent()
						.find('.addon-status')
						.children('span');

				// Remove any leftover error messages, output an icon and get the plugin basename that needs to be activated.
				$('.soliloquy-addon-error').remove();

				$button.text(soliloquy_addons.activating);
				$button.next().css({
					'display': 'inline-block',
					'margin-top': '0px',
				});

				// Process the Ajax to perform the activation.
				var opts = {
					url: ajaxurl,
					type: 'post',
					async: true,
					cache: false,
					dataType: 'json',
					data: {
						action: 'soliloquy_activate_addon',
						nonce: soliloquy_addons.activate_nonce,
						plugin: plugin,
					},
					success: function (response) {
						// If there is a WP Error instance, output it here and quit the script.
						if (response && true !== response) {
							$el.slideDown('normal', function () {
								$(this).after(
									'<div class="soliloquy-addon-error"><strong>' +
										response.error +
										'</strong></div>',
								);
								$button.next().hide();
								$('.soliloquy-addon-error')
									.delay(3000)
									.slideUp();
							});
							return;
						}
						// The Ajax request was successful, so let's update the output.
						$button
							.text(soliloquy_addons.deactivate)
							.removeClass('soliloquy-activate-addon')
							.addClass('soliloquy-deactivate-addon');
						$message.text(soliloquy_addons.active);
						$el.removeClass(
							'soliloquy-addon-inactive',
						).addClass('soliloquy-addon-active');
						$button.next().hide();
					},
					error: function (xhr, textStatus, e) {
						$button.next().hide();
						return;
					},
				};
				$.ajax(opts);
			},
		);

		// Process Addon deactivations for those currently active.
		$('#soliloquy-addons-area').on(
			'click.deactivateAddon',
			'.soliloquy-deactivate-addon',
			function (e) {
				e.preventDefault();

				var $button = $(this),
					plugin = $button.attr('rel'),
					$el = $button.parent().parent(),
					$message = $button
						.parent()
						.parent()
						.find('.addon-status')
						.children('span');

				// Remove any leftover error messages, output an icon and get the plugin basename that needs to be activated.
				$('.soliloquy-addon-error').remove();

				$button.text(soliloquy_addons.deactivating);
				$button.next().css({
					'display': 'inline-block',
					'margin-top': '0px',
				});

				// Process the Ajax to perform the activation.
				var opts = {
					url: ajaxurl,
					type: 'post',
					async: true,
					cache: false,
					dataType: 'json',
					data: {
						action: 'soliloquy_deactivate_addon',
						nonce: soliloquy_addons.deactivate_nonce,
						plugin: plugin,
					},
					success: function (response) {
						// If there is a WP Error instance, output it here and quit the script.
						if (response && true !== response) {
							$el.slideDown('normal', function () {
								$(this).after(
									'<div class="soliloquy-addon-error"><strong>' +
										response.error +
										'</strong></div>',
								);
								$button.next().hide();
								$('.soliloquy-addon-error')
									.delay(3000)
									.slideUp();
							});

							return;
						}

						// The Ajax request was successful, so let's update the output.
						$button
							.text(soliloquy_addons.activate)
							.removeClass('soliloquy-deactivate-addon')
							.addClass('soliloquy-activate-addon');
						$message.text(soliloquy_addons.inactive);
						$el.removeClass(
							'soliloquy-addon-active',
						).addClass('soliloquy-addon-inactive');
						$button.next().hide();
					},
					error: function (xhr, textStatus, e) {
						$button.next().hide();
						return;
					},
				};
				$.ajax(opts);
			},
		);

		// Process Addon installations.
		$('#soliloquy-addons-area').on(
			'click.installAddon',
			'.soliloquy-install-addon',
			function (e) {
				e.preventDefault();

				var $button = $(this),
					plugin = $button.attr('rel'),
					$el = $button.parent().parent(),
					$message = $button
						.parent()
						.parent()
						.find('.addon-status')
						.children('span');

				// Remove any leftover error messages, output an icon and get the plugin basename that needs to be activated.
				$('.soliloquy-addon-error').remove();

				$button.text(soliloquy_addons.installing);
				$button.next().css({
					'display': 'inline-block',
					'margin-top': '0px',
				});

				// Process the Ajax to perform the activation.
				var opts = {
					url: ajaxurl,
					type: 'post',
					async: true,
					cache: false,
					dataType: 'json',
					data: {
						action: 'soliloquy_install_addon',
						nonce: soliloquy_addons.install_nonce,
						plugin: plugin,
					},
					success: function (response) {
						// If there is a WP Error instance, output it here and quit the script.
						if (response.error) {
							$el.slideDown('normal', function () {
								$button
									.parent()
									.parent()
									.after(
										'<div class="soliloquy-addon-error"><strong>' +
											response.error +
											'</strong></div>',
									);
								$button.text(soliloquy_addons.install);
								$button.next().hide();
								$('.soliloquy-addon-error')
									.delay(4000)
									.slideUp();
							});
							return;
						}

						// If we need more credentials, output the form sent back to us.
						if (response.form) {
							// Display the form to gather the users credentials.
							$el.slideDown('normal', function () {
								$(this).after(
									'<div class="soliloquy-addon-error">' +
										response.form +
										'</div>',
								);
								$button.next().hide();
							});

							// Add a disabled attribute the install button if the creds are needed.
							$button.attr('disabled', true);

							$('#soliloquy-addons-area').on(
								'click.installCredsAddon',
								'#upgrade',
								function (e) {
									// Prevent the default action, let the user know we are attempting to install again and go with it.
									e.preventDefault();
									$button.next().hide();
									$(this).val(
										soliloquy_addons.installing,
									);
									$(this).next().css({
										'display': 'inline-block',
										'margin-top': '0px',
									});

									// Now let's make another Ajax request once the user has submitted their credentials.
									var hostname = $(this)
											.parent()
											.parent()
											.find('#hostname')
											.val(),
										username = $(this)
											.parent()
											.parent()
											.find('#username')
											.val(),
										password = $(this)
											.parent()
											.parent()
											.find('#password')
											.val(),
										proceed = $(this),
										connect = $(this)
											.parent()
											.parent()
											.parent()
											.parent();
									var cred_opts = {
										url: ajaxurl,
										type: 'post',
										async: true,
										cache: false,
										dataType: 'json',
										data: {
											action: 'soliloquy_install_addon',
											nonce: soliloquy_addons.install_nonce,
											plugin: plugin,
											hostname: hostname,
											username: username,
											password: password,
										},
										success: function (response) {
											// If there is a WP Error instance, output it here and quit the script.
											if (response.error) {
												$el.slideDown(
													'normal',
													function () {
														$button
															.parent()
															.parent()
															.after(
																'<div class="soliloquy-addon-error"><strong>' +
																	response.error +
																	'</strong></div>',
															);
														$button.text(
															soliloquy_addons.install,
														);
														$button
															.next()
															.hide();
														$(
															'.soliloquy-addon-error',
														)
															.delay(
																4000,
															)
															.slideUp();
													},
												);

												return;
											}

											if (response.form) {
												$button
													.next()
													.hide();
												$(
													'.soliloquy-inline-error',
												).remove();
												$(proceed).val(
													soliloquy_addons.proceed,
												);
												$(proceed).after(
													'<span class="soliloquy-inline-error">' +
														soliloquy_addons.connect_error +
														'</span>',
												);
												return;
											}

											// The Ajax request was successful, so let's update the output.
											$(connect).remove();
											$button.show();
											$button
												.text(
													soliloquy_addons.activate,
												)
												.removeClass(
													'soliloquy-install-addon',
												)
												.addClass(
													'soliloquy-activate-addon',
												);
											$button.attr(
												'rel',
												response.plugin,
											);
											$button.removeAttr(
												'disabled',
											);
											$message.text(
												soliloquy_addons.inactive,
											);
											$el.removeClass(
												'soliloquy-addon-not-installed',
											).addClass(
												'soliloquy-addon-inactive',
											);
											$button.next().hide();
										},
										error: function (
											xhr,
											textStatus,
											e,
										) {
											$button.next().hide();
											return;
										},
									};
									$.ajax(cred_opts);
								},
							);

							// No need to move further if we need to enter our creds.
							return;
						}

						// The Ajax request was successful, so let's update the output.
						$button
							.text(soliloquy_addons.activate)
							.removeClass('soliloquy-install-addon')
							.addClass('soliloquy-activate-addon');
						$button.attr('rel', response.plugin);
						$message.text(soliloquy_addons.inactive);
						$el.removeClass(
							'soliloquy-addon-not-installed',
						).addClass('soliloquy-addon-inactive');
						$button.next().hide();
					},

					error: function (xhr, textStatus, e) {
						$button.next().hide();
						return;
					},
				};
				$.ajax(opts);
			},
		);

		// Function to clear any disabled buttons and extra text if the user needs to add creds but instead tries to install a different addon.
		function soliloquyAddonRefresh(element) {
			if ($(element).attr('disabled')) {
				$(element).removeAttr('disabled');
			}
			if (
				$(element)
					.parent()
					.parent()
					.hasClass('soliloquy-addon-not-installed')
			) {
				$(element).text(soliloquy_addons.install);
			}
		}
	});
})(jQuery, window, document, soliloquy_addons);