# friends/2.9.1/plugin-installer.js

Friends, version 2.9.1. 160 lines.

- Page: https://pluginprobe.com/plugins/friends/2.9.1/code/plugin-installer.js
- Raw: https://pluginprobe.com/plugins/friends/2.9.1/raw/plugin-installer.js
- Modified: 2023-07-23T07:15:30+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/friends/2.9.1/code/plugin-installer.js#L10-L20`.

```javascript
var friends_plugin_installer = friends_plugin_installer || {};

jQuery( document ).ready( function ( $ ) {
	'use strict';

	let is_loading = false;

	/**
	 * Install the plugin
	 *
	 * @since 1.0
	 * @param  el     object Button element
	 * @param  plugin string Plugin slug
	 */
	friends_plugin_installer.install_plugin = function ( el, plugin ) {
		is_loading = true;
		el.addClass( 'installing' );
		el.text( friends_plugin_installer_localize.installing );

		$.ajax( {
			type: 'POST',
			url: friends_plugin_installer_localize.ajax_url,
			data: {
				action: 'friends_plugin_installer',
				plugin,
				nonce: friends_plugin_installer_localize.admin_nonce,
				dataType: 'json',
			},
			success( data ) {
				if ( data ) {
					if ( data.status === 'success' ) {
						el.attr( 'class', 'activate button button-primary' );
						el.text(
							friends_plugin_installer_localize.activate_btn
						);
					} else {
						el.removeClass( 'installing' );
					}
				} else {
					el.removeClass( 'installing' );
				}
				is_loading = false;
			},
			error( xhr, status, error ) {
				el.removeClass( 'installing' );
				is_loading = false;
			},
		} );
	};

	/**
	 * Activate the plugin
	 *
	 * @since 1.0
	 * @param  el     object Button element
	 * @param  plugin string Plugin slug
	 */
	friends_plugin_installer.activate_plugin = function ( el, plugin ) {
		$.ajax( {
			type: 'POST',
			url: friends_plugin_installer_localize.ajax_url,
			data: {
				action: 'friends_plugin_activation',
				plugin,
				nonce: friends_plugin_installer_localize.admin_nonce,
				dataType: 'json',
			},
			success( data ) {
				if ( data ) {
					if ( data.status === 'success' ) {
						el.attr( 'class', 'installed button disabled' );
						el.text(
							friends_plugin_installer_localize.installed_btn
						);
						el.closest( 'div' )
							.find( '.deactivate' )
							.toggleClass( 'hidden' );
					}
				}
				is_loading = false;
			},
			error( xhr, status, error ) {
				is_loading = false;
			},
		} );
	};

	/**
	 * Deactivate the plugin
	 *
	 * @since 1.0
	 * @param  el     object Button element
	 * @param  plugin string Plugin slug
	 */
	friends_plugin_installer.deactivate_plugin = function ( el, plugin ) {
		$.ajax( {
			type: 'POST',
			url: friends_plugin_installer_localize.ajax_url,
			data: {
				action: 'friends_plugin_deactivation',
				plugin,
				nonce: friends_plugin_installer_localize.admin_nonce,
				dataType: 'json',
			},
			success( data ) {
				if ( data ) {
					if ( data.status === 'success' ) {
						el.toggleClass( 'hidden' );
						el.closest( 'div' )
							.find( '.installed' )
							.attr( 'class', 'activate button button-primary' )
							.text(
								friends_plugin_installer_localize.activate_btn
							);
					}
				}
				is_loading = false;
			},
			error( xhr, status, error ) {
				is_loading = false;
			},
		} );
	};

	/**
	 * Install/Activate Button Click
	 *
	 * @since 1.0
	 */
	$( document ).on(
		'click',
		'.friends-plugin-installer a.button:not(.details)',
		function ( e ) {
			const el = $( this ),
				plugin = el.data( 'slug' );

			e.preventDefault();

			if ( ! el.hasClass( 'disabled' ) ) {
				if ( is_loading ) return false;

				// Installation
				if ( el.hasClass( 'install' ) ) {
					friends_plugin_installer.install_plugin( el, plugin );
				}

				// Activation
				if ( el.hasClass( 'activate' ) ) {
					friends_plugin_installer.activate_plugin( el, plugin );
				}

				// Activation
				if ( el.hasClass( 'deactivate' ) ) {
					friends_plugin_installer.deactivate_plugin( el, plugin );
				}
			}
		}
	);
} );

```
