File "main.js"

Full Path: /home/romayxjt/public_html/wp-content/plugins/orderable/inc/vendor/iconic-onboard/assets/js/main.js
File size: 12.26 KB
MIME-type: text/plain
Charset: utf-8

(function( $, document ) {
	var iconic_core_onboard = {
		modal: null,
		current_step: null,
		total_steps: null,
		sliding_timeout: null,
		/**
		 * On ready.
		 */
		on_ready: function() {
			var $modal = $( "#iconic-onboard-modal" );

			if ( $modal.length <= 0 ) {
				return;
			}

			if ( !$modal.hasClass( "iconic-onboard-modal--disable-auto-popup" ) ) {
				iconic_core_onboard.open_modal();
			}

			//iconic_core_onboard.setup_toggle_switch();
			iconic_core_onboard.setup_next_prev();
			iconic_core_onboard.setup_modal_bullets();
			iconic_core_onboard.setup_submit();
			iconic_core_onboard.dismiss_handler();
			iconic_core_onboard.next_button();
			iconic_core_onboard.setup_image_fields_list();

			$( document ).on( 'iconic_onboard_disable_next', iconic_core_onboard.disable_next );
			$( document ).on( 'iconic_onboard_enable_next', iconic_core_onboard.enable_next );
			$( document ).on( 'iconic_onboard_next_slide', iconic_core_onboard.next_slide );
			$( document ).on( 'iconic_onboard_prev_slide', iconic_core_onboard.prev_slide );
		},

		/**
		 * Open onboarding modal.
		 */
		open_modal: function() {
			$.iconicModal.open( {
				mainClass: 'iconic-onboard-modal-wrapper',
				closeOnBgClick: false,
				showCloseBtn: false,
				items: [
					{
						src: '#iconic-onboard-modal',
						type: 'inline'
					}
				],
			} );

			iconic_core_onboard.modal = $.iconicModal.instance;
		},

		/**
		 * Setup toggle switch
		 */
		setup_toggle_switch: function() {
			$( ".iconic-onboard-modal__body input" ).not( ".iconic-onboard-modal--disable-switch" ).toggleSwitch();
		},

		/**
		 * Setup modal bullets.
		 */
		setup_modal_bullets: function() {
			var bullets_html = this.generate_bullets_html();
			$( "#iconic-onboard-modal" ).append( bullets_html );
			iconic_core_onboard.show_slide( 0 );

			$( document ).on( 'click', '.iconic-onboard-modal-bullets__bullet', function( e ) {
				e.preventDefault();
				if ( !$( this ).hasClass( "iconic-onboard--disabled" ) ) {
					var step = parseInt( $( this ).data( 'step' ) );
					iconic_core_onboard.show_slide( step );
				}
			} );

			iconic_core_onboard.disable_bullets_after_wait();
		},

		/**
		 * Disable all bullets after the first "wait" slide.
		 */
		disable_bullets_after_wait: function() {
			var wait_index = $( '.iconic-onboard-modal__slide--wait' ).first().index();

			if ( wait_index >= 0 ) {
				$( '.iconic-onboard-modal-bullets li' ).eq( wait_index ).nextAll().find( '.iconic-onboard-modal-bullets__bullet' ).addClass( 'iconic-onboard--disabled' );
			}
		},

		/**
		 * Setup Next and Previous buttons
		 */
		setup_next_prev: function() {
			var next_prev_html = `<div class='iconic-onboard-modal__next_prev'>
                                    <div class='iconic-onboard-modal__next'>
                                    </div>
                                    <div class='iconic-onboard-modal__prev'>
                                    </div>
                                   </div>`;
			$( "#iconic-onboard-modal" ).append( next_prev_html );

			$( document ).on( "click", ".iconic-onboard-modal__next", function() {
				if ( !$( ".iconic-onboard-modal__next" ).hasClass( "iconic-onboard--disabled" ) ) {
					iconic_core_onboard.next_slide();
				}
			} );

			$( document ).on( "click", ".iconic-onboard-modal__prev", function() {
				if ( !$( this ).hasClass( "iconic-onboard--disabled" ) ) {
					iconic_core_onboard.prev_slide();
				}
			} );
		},

		/**
		 * Generates HTML for the modal bullets depending on the number of slides there are.
		 */
		generate_bullets_html: function() {
			var html = `<ul class="iconic-onboard-modal-bullets">`;
			this.total_steps = $( ".iconic-onboard-modal__slide" ).length;

			for ( i = 0; i < this.total_steps; i ++ ) {
				html += `<li >
                            <button class="iconic-onboard-modal-bullets__bullet" data-step="${i}">${i + 1}</button>
                        </li>`;
			}
			html += "</ul>";
			return html;
		},

		/**
		 * Hides the current slide and shows the given slide.
		 *
		 * @param string step. The index of slide to be shown.
		 */
		show_slide: function( step ) {
			// Do nothing if target step is current step.
			if ( step === this.current_step ) {
				return;
			}

			$( document ).trigger( 'iconic_onboard_enable_next' );

			var $modal = $( "#iconic-onboard-modal" ),
				$bullets = $( ".iconic-onboard-modal-bullets li" ),
				$slides = $( ".iconic-onboard-modal__slides .iconic-onboard-modal__slide" ),
				$next = $( ".iconic-onboard-modal__next" ),
				$prev = $( ".iconic-onboard-modal__prev" );

			// Stop previous transition.
			clearTimeout( this.sliding_timeout );
			$modal.removeClass( 'iconic-onboard-modal--animate-right iconic-onboard-modal--animate-left' );

			var oldStep = this.current_step;

			// Bullets
			$bullets.removeClass( "iconic-onboard-modal-bullets__active" );
			$bullets.eq( step ).addClass( "iconic-onboard-modal-bullets__active" );

			// Slide content
			$slides.hide();
			var $upcomingSlide = $slides.eq( step );
			$upcomingSlide.fadeIn();

			if ( $upcomingSlide.hasClass( 'iconic-onboard-modal__slide--wait' ) ) {
				$( document ).trigger( 'iconic_onboard_disable_next' );
			}

			iconic_core_onboard.disable_bullets_after_wait();

			// Animation
			var animation_class = this.current_step < step || this.current_step === null ? "iconic-onboard-modal--animate-right" : "iconic-onboard-modal--animate-left";
			$modal.addClass( animation_class );

			// Hide left navigation for first slide, and right navigation for last slide
			if ( step === 0 ) {
				$prev.hide();
				$next.show();
			} else if ( step === this.total_steps - 1 ) {
				$next.hide();
				$prev.show();
			} else {
				$prev.show();
				$next.show();
			}

			this.current_step = step;

			// Remove the animation class after animation has ended.
			this.sliding_timeout = setTimeout( function() {
				$modal.removeClass( animation_class );
			}, 1000 );

			$( document ).trigger( "iconic_onboard_step_change", { from: oldStep, to: step } );
		},

		/**
		 * Go to the next slide.
		 */
		next_slide: function() {
			var next_step = iconic_core_onboard.current_step + 1;
			iconic_core_onboard.show_slide( next_step );
		},

		/**
		 * Go to the previous slide.
		 */
		prev_slide: function() {
			var prev_step = this.current_step - 1;
			iconic_core_onboard.show_slide( prev_step );
		},

		/**
		 * Setup form submission.
		 */
		setup_submit: function() {
			$( document ).on( 'click', '.iconic-onboard-modal__submit', function( e ) {
				e.preventDefault();

				var $loader = $( this ).find( ".iconic-onboard-modal__loader" );
				$loader.css( "display", "inline-block" );

				var data = {
					action: "iconic_onboard_" + iconic_onboarding_params.plugin_slug + "_save_modal",
					plugin_slug: iconic_onboarding_params.plugin_slug,
					security: iconic_onboarding_params.nonce,
					fields: $( '.iconic-onboard-modal__form' ).serialize(),
				};

				$.post( ajaxurl, data )
					.done( function( response ) {
						try {
							if ( response.success ) {
								location.reload();
							}
						} catch ( ex ) {
							console.log( response );
							console.log( ex );
							alert( "Couldn't save." );
						}
					} )
					.fail( function() {
						alert( "Couldn't save. Are you connected to the internet? " );
					} )
					.always( function() {
						$loader.css( "display", "none" );
					} );

			} );
		},

		/**
		 * Handles the action when user clicks on "Skip" button.
		 */
		dismiss_handler: function() {
			$( document ).on( "click", ".iconic-onboard-modal__dismiss_a", function( e ) {
				e.preventDefault();
				iconic_core_onboard.modal.close();
				var data = {
					action: "iconic_onboard_" + iconic_onboarding_params.plugin_slug + "_dismiss_modal",
					plugin_slug: iconic_onboarding_params.plugin_slug,
					security: iconic_onboarding_params.nonce,
				};
				$.post( ajaxurl, data, function() {
					console.log( "OK" );
				} );
			} );
		},

		/**
		 * Handles the action when user clicks on "Skip" button.
		 */
		install_plugin_handler: function( plugin_data, callback ) {
			var data = {
				action: "iconic_onboard_" + iconic_onboarding_params.plugin_slug + "_install_plugin",
				plugin_slug: iconic_onboarding_params.plugin_slug,
				security: iconic_onboarding_params.nonce,
				plugin_data: plugin_data
			};

			$.post( ajaxurl, data, function( response ) {
				if ( typeof callback === 'function' ) {
					callback( response );
				}
			} );
		},

		/**
		 * Handles click for '.iconic-onboard-modal__nextslide'
		 */
		next_button: function() {
			$( document ).on( "click", ".iconic-onboard-modal__nextslide", function() {
				var $button = $( this ),
					hasDisabledClass = $( ".iconic-onboard-modal__next" ).hasClass( "iconic-onboard--disabled" ),
					hasWaitClass = $button.hasClass( "iconic-onboard-modal__button--wait" );

				if ( $button.hasClass( 'iconic-onboard-modal__button--loading' ) ) {
					return;
				}

				$( '.iconic-onboard-notice--error' ).remove();

				if ( !hasWaitClass && !hasDisabledClass ) {
					iconic_core_onboard.next_slide();
				}

				if ( hasWaitClass ) {
					var $slide = $button.closest( '.iconic-onboard-modal__slide' ),
						$loader = $button.find( '.iconic-onboard-modal__loader' ),
						slide_id = $slide.data( 'slide-index' ),
						json_data = iconic_core_onboard.get_slide_json_data( slide_id ),
						button_text = $button.html(),
						wait_text = typeof json_data.wait_text !== 'undefined' ? json_data.wait_text : false,
						wait_function = json_data.wait + '_handler';

					$loader.css( 'display', 'inline-block' );
					$button.addClass( 'iconic-onboard-modal__button--loading' ).html( wait_text ).append( $loader );

					iconic_core_onboard[ wait_function ]( json_data.plugin_data, function( response ) {
						$loader.css( 'display', 'none' );

						if ( response.success ) {
							$slide.removeClass( 'iconic-onboard-modal__slide--wait' );

							if ( typeof response.data !== 'undefined' && typeof response.data.button !== 'undefined' ) {
								$button.replaceWith( response.data.button );
							}

							$( document.body ).trigger( 'iconic_onboard_wait_complete', {
								wait_event: json_data.wait,
								json: json_data,
								response: response
							} );

							setTimeout( function() {
								iconic_core_onboard.next_slide();
								$( document ).trigger( 'iconic_onboard_enable_next' );
							}, 1000 );
						} else {
							$button.removeClass( 'iconic-onboard-modal__button--loading' ).html( button_text ).after( '<p class="iconic-onboard-notice iconic-onboard-notice--error">' + iconic_onboarding_params.i18n.error_install_plugin + '</p>' );
						}
					} );
				}
			} );
		},

		/**
		 * Handles click for '.iconic-onboard-modal__prevslide'
		 */
		prev_button: function() {
			$( document ).on( "click", ".iconic-onboard-modal__prevslide", function() {
				iconic_core_onboard.prev_slide();
			} );
		},

		/**
		 * Get slide json data.
		 *
		 * @param slide_id
		 * @returns {jQuery|string|number|Object<string, *>|Array<?>|boolean}
		 */
		get_slide_json_data: function( slide_id ) {
			var $json = $( '#iconic-onboard-modal-slide-json-data-' + slide_id );

			if ( $json.length <= 0 ) {
				return false;
			}

			var json = $.parseJSON( $json.text() );

			return json;
		},

		/**
		 * Add checked class when radio button changes.
		 */
		setup_image_fields_list: function() {
			var checked_class = 'iconic-onboard-fields-list__item--checked';

			$( document ).on( 'change', '.iconic-onboard-fields-list input[type="radio"]', function() {
				var $this = $( this ),
					$list = $this.closest( '.iconic-onboard-fields-list' ),
					$list_item = $this.closest( '.iconic-onboard-fields-list__item' ),
					$checked = $list.find( '.' + checked_class );

				$checked.removeClass( checked_class );
				$list_item.addClass( checked_class );
			} );
		},

		/**
		 * Disable the next slide button
		 */
		disable_next: function() {
			$( ".iconic-onboard-modal__next" ).addClass( "iconic-onboard--disabled" );
			$( ".iconic-onboard-modal-bullets__active" ).nextAll().find( '.iconic-onboard-modal-bullets__bullet' ).addClass( "iconic-onboard--disabled" );
		},

		/**
		 * Enable the next slide button
		 */
		enable_next: function() {
			$( ".iconic-onboard-modal__next" ).removeClass( "iconic-onboard--disabled" );
			$( ".iconic-onboard-modal-bullets__bullet" ).removeClass( "iconic-onboard--disabled" );
		}

	};

	$( document ).ready( iconic_core_onboard.on_ready );
}( jQuery, document ));