Passed
Push — master ( d496e8...5e6728 )
by Kiran
11:05 queued 05:14
created
includes/class-wpinv.php 1 patch
Indentation   +615 added lines, -615 removed lines patch added patch discarded remove patch
@@ -14,619 +14,619 @@
 block discarded – undo
14 14
  */
15 15
 class WPInv_Plugin {
16 16
 
17
-	/**
18
-	 * GetPaid version.
19
-	 *
20
-	 * @var string
21
-	 */
22
-	public $version;
23
-
24
-	/**
25
-	 * Data container.
26
-	 *
27
-	 * @var array
28
-	 */
29
-	protected $data = array();
30
-
31
-	/**
32
-	 * Form elements instance.
33
-	 *
34
-	 * @var WPInv_Payment_Form_Elements
35
-	 */
36
-	public $form_elements;
37
-
38
-	/**
39
-	 * @var array An array of payment gateways.
40
-	 */
41
-	public $gateways;
42
-
43
-	/**
44
-	 * Class constructor.
45
-	 */
46
-	public function __construct() {
47
-		$this->define_constants();
48
-		$this->includes();
49
-		$this->init_hooks();
50
-		$this->set_properties();
51
-	}
52
-
53
-	/**
54
-	 * Sets a custom data property.
55
-	 *
56
-	 * @param string $prop The prop to set.
57
-	 * @param mixed $value The value to retrieve.
58
-	 */
59
-	public function set( $prop, $value ) {
60
-		$this->data[ $prop ] = $value;
61
-	}
62
-
63
-	/**
64
-	 * Gets a custom data property.
65
-	 *
66
-	 * @param string $prop The prop to set.
67
-	 * @return mixed The value.
68
-	 */
69
-	public function get( $prop ) {
70
-		if ( isset( $this->data[ $prop ] ) ) {
71
-			return $this->data[ $prop ];
72
-		}
73
-
74
-		return null;
75
-	}
76
-
77
-	/**
78
-	 * Define class properties.
79
-	 */
80
-	public function set_properties() {
81
-		// Sessions.
82
-		$this->set( 'session', new WPInv_Session_Handler() );
83
-		$GLOBALS['wpi_session'] = $this->get( 'session' ); // Backwards compatibility.
84
-		$GLOBALS['wpinv_euvat'] = new WPInv_EUVat(); // Backwards compatibility.
85
-
86
-		// Init other objects.
87
-		$this->set( 'notes', new WPInv_Notes() );
88
-		$this->set( 'api', new WPInv_API() );
89
-		$this->set( 'post_types', new GetPaid_Post_Types() );
90
-		$this->set( 'template', new GetPaid_Template() );
91
-		$this->set( 'admin', new GetPaid_Admin() );
92
-		$this->set( 'subscriptions', new WPInv_Subscriptions() );
93
-		$this->set( 'invoice_emails', new GetPaid_Invoice_Notification_Emails() );
94
-		$this->set( 'subscription_emails', new GetPaid_Subscription_Notification_Emails() );
95
-		$this->set( 'daily_maintenace', new GetPaid_Daily_Maintenance() );
96
-		$this->set( 'payment_forms', new GetPaid_Payment_Forms() );
97
-		$this->set( 'maxmind', new GetPaid_MaxMind_Geolocation() );
98
-	}
99
-
100
-	 /**
101
-	 * Define plugin constants.
102
-	 */
103
-	public function define_constants() {
104
-		define( 'WPINV_PLUGIN_DIR', plugin_dir_path( WPINV_PLUGIN_FILE ) );
105
-		define( 'WPINV_PLUGIN_URL', plugin_dir_url( WPINV_PLUGIN_FILE ) );
106
-		$this->version = WPINV_VERSION;
107
-	}
108
-
109
-	/**
110
-	 * Hook into actions and filters.
111
-	 *
112
-	 * @since 1.0.19
113
-	 */
114
-	protected function init_hooks() {
115
-		/* Internationalize the text strings used. */
116
-		add_action( 'plugins_loaded', array( &$this, 'plugins_loaded' ) );
117
-
118
-		// Init the plugin after WordPress inits.
119
-		add_action( 'init', array( $this, 'init' ), 1 );
120
-		add_action( 'init', array( $this, 'maybe_process_ipn' ), 10 );
121
-		add_action( 'init', array( $this, 'wpinv_actions' ) );
122
-		add_action( 'init', array( $this, 'maybe_do_authenticated_action' ), 100 );
123
-		add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ), 11 );
124
-		add_action( 'wp_footer', array( $this, 'wp_footer' ) );
125
-		add_action( 'wp_head', array( $this, 'wp_head' ) );
126
-		add_action( 'widgets_init', array( $this, 'register_widgets' ) );
127
-		add_filter( 'wpseo_exclude_from_sitemap_by_post_ids', array( $this, 'wpseo_exclude_from_sitemap_by_post_ids' ) );
128
-		add_filter( 'the_seo_framework_sitemap_supported_post_types', array( $this, 'exclude_invoicing_post_types' ) );
129
-		add_filter( 'pre_get_posts', array( &$this, 'pre_get_posts' ) );
130
-
131
-		add_filter( 'query_vars', array( $this, 'custom_query_vars' ) );
132
-		add_action( 'init', array( $this, 'add_rewrite_rule' ), 10, 0 );
133
-		add_action( 'pre_get_posts', array( $this, 'maybe_process_new_ipn' ), 1 );
134
-
135
-		// Fires after registering actions.
136
-		do_action( 'wpinv_actions', $this );
137
-		do_action( 'getpaid_actions', $this );
138
-	}
139
-
140
-	public function plugins_loaded() {
141
-		/* Internationalize the text strings used. */
142
-		$this->load_textdomain();
143
-
144
-		do_action( 'wpinv_loaded' );
145
-
146
-		// Fix oxygen page builder conflict
147
-		if ( function_exists( 'ct_css_output' ) ) {
148
-			wpinv_oxygen_fix_conflict();
149
-		}
150
-	}
151
-
152
-	/**
153
-	 * Load Localisation files.
154
-	 *
155
-	 * Note: the first-loaded translation file overrides any following ones if the same translation is present.
156
-	 *
157
-	 * Locales found in:
158
-	 *      - WP_LANG_DIR/plugins/invoicing-LOCALE.mo
159
-	 *      - WP_PLUGIN_DIR/invoicing/languages/invoicing-LOCALE.mo
160
-	 *
161
-	 * @since 1.0.0
162
-	 */
163
-	public function load_textdomain() {
164
-		// Determines the current locale.
165
-		if ( function_exists( 'determine_locale' ) ) {
166
-			$locale = determine_locale();
167
-		} else if ( function_exists( 'get_user_locale' ) ) {
168
-			$locale = get_user_locale();
169
-		} else {
170
-			$locale = get_locale();
171
-		}
172
-
173
-		/**
174
-		 * Filter the locale to use for translations.
175
-		 */
176
-		$locale = apply_filters( 'plugin_locale', $locale, 'invoicing' );
177
-
178
-		unload_textdomain( 'invoicing', true );
179
-		load_textdomain( 'invoicing', WP_LANG_DIR . '/invoicing/invoicing-' . $locale . '.mo' );
180
-		load_plugin_textdomain( 'invoicing', false, plugin_basename( dirname( WPINV_PLUGIN_FILE ) ) . '/languages/' );
181
-	}
182
-
183
-	/**
184
-	 * Include required core files used in admin and on the frontend.
185
-	 */
186
-	public function includes() {
187
-		// Start with the settings.
188
-		require_once WPINV_PLUGIN_DIR . 'includes/admin/register-settings.php';
189
-
190
-		// Packages/libraries.
191
-		require_once WPINV_PLUGIN_DIR . 'vendor/autoload.php';
192
-		require_once WPINV_PLUGIN_DIR . 'vendor/ayecode/wp-ayecode-ui/ayecode-ui-loader.php';
193
-
194
-		// Load functions.
195
-		require_once WPINV_PLUGIN_DIR . 'includes/deprecated-functions.php';
196
-		require_once WPINV_PLUGIN_DIR . 'includes/wpinv-email-functions.php';
197
-		require_once WPINV_PLUGIN_DIR . 'includes/wpinv-general-functions.php';
198
-		require_once WPINV_PLUGIN_DIR . 'includes/wpinv-helper-functions.php';
199
-		require_once WPINV_PLUGIN_DIR . 'includes/wpinv-tax-functions.php';
200
-		require_once WPINV_PLUGIN_DIR . 'includes/wpinv-template-functions.php';
201
-		require_once WPINV_PLUGIN_DIR . 'includes/wpinv-address-functions.php';
202
-		require_once WPINV_PLUGIN_DIR . 'includes/invoice-functions.php';
203
-		require_once WPINV_PLUGIN_DIR . 'includes/subscription-functions.php';
204
-		require_once WPINV_PLUGIN_DIR . 'includes/wpinv-item-functions.php';
205
-		require_once WPINV_PLUGIN_DIR . 'includes/wpinv-discount-functions.php';
206
-		require_once WPINV_PLUGIN_DIR . 'includes/wpinv-gateway-functions.php';
207
-		require_once WPINV_PLUGIN_DIR . 'includes/wpinv-payment-functions.php';
208
-		require_once WPINV_PLUGIN_DIR . 'includes/user-functions.php';
209
-		require_once WPINV_PLUGIN_DIR . 'includes/error-functions.php';
210
-
211
-		// Register autoloader.
212
-		try {
213
-			spl_autoload_register( array( $this, 'autoload' ), true );
214
-		} catch ( Exception $e ) {
215
-			wpinv_error_log( $e->getMessage(), '', __FILE__, 149, true );
216
-		}
217
-
218
-		require_once WPINV_PLUGIN_DIR . 'includes/abstracts/abstract-wpinv-session.php';
219
-		require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-session-handler.php';
220
-		require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-ajax.php';
221
-		require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-api.php';
222
-		require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-cache-helper.php';
223
-		require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-db.php';
224
-		require_once WPINV_PLUGIN_DIR . 'includes/admin/subscriptions.php';
225
-		require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-subscriptions-db.php';
226
-		require_once WPINV_PLUGIN_DIR . 'includes/wpinv-subscription.php';
227
-		require_once WPINV_PLUGIN_DIR . 'includes/abstracts/abstract-wpinv-privacy.php';
228
-		require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-privacy.php';
229
-		require_once WPINV_PLUGIN_DIR . 'includes/libraries/class-ayecode-addons.php';
230
-		require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-addons.php';
231
-		require_once WPINV_PLUGIN_DIR . 'widgets/checkout.php';
232
-		require_once WPINV_PLUGIN_DIR . 'widgets/invoice-history.php';
233
-		require_once WPINV_PLUGIN_DIR . 'widgets/invoice-receipt.php';
234
-		require_once WPINV_PLUGIN_DIR . 'widgets/invoice-messages.php';
235
-		require_once WPINV_PLUGIN_DIR . 'widgets/subscriptions.php';
236
-		require_once WPINV_PLUGIN_DIR . 'widgets/buy-item.php';
237
-		require_once WPINV_PLUGIN_DIR . 'widgets/getpaid.php';
238
-		require_once WPINV_PLUGIN_DIR . 'widgets/invoice.php';
239
-		require_once WPINV_PLUGIN_DIR . 'includes/admin/admin-pages.php';
240
-
241
-		if ( is_admin() || ( defined( 'WP_CLI' ) && WP_CLI ) ) {
242
-			GetPaid_Post_Types_Admin::init();
243
-
244
-			require_once WPINV_PLUGIN_DIR . 'includes/admin/wpinv-admin-functions.php';
245
-			require_once WPINV_PLUGIN_DIR . 'includes/admin/meta-boxes/class-mb-payment-form.php';
246
-			require_once WPINV_PLUGIN_DIR . 'includes/admin/meta-boxes/class-mb-invoice-notes.php';
247
-			require_once WPINV_PLUGIN_DIR . 'includes/admin/class-wpinv-admin-menus.php';
248
-			require_once WPINV_PLUGIN_DIR . 'includes/admin/class-wpinv-users.php';
249
-			require_once WPINV_PLUGIN_DIR . 'includes/admin/class-getpaid-admin-profile.php';
250
-			// load the user class only on the users.php page
251
-			global $pagenow;
252
-			if ( $pagenow == 'users.php' ) {
253
-				new WPInv_Admin_Users();
254
-			}
255
-		}
256
-
257
-		// Register cli commands
258
-		if ( defined( 'WP_CLI' ) && WP_CLI ) {
259
-			require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-cli.php';
260
-			WP_CLI::add_command( 'invoicing', 'WPInv_CLI' );
261
-		}
262
-	}
263
-
264
-	/**
265
-	 * Class autoloader
266
-	 *
267
-	 * @param       string $class_name The name of the class to load.
268
-	 * @access      public
269
-	 * @since       1.0.19
270
-	 * @return      void
271
-	 */
272
-	public function autoload( $class_name ) {
273
-		// Normalize the class name...
274
-		$class_name  = strtolower( $class_name );
275
-
276
-		// ... and make sure it is our class.
277
-		if ( false === strpos( $class_name, 'getpaid_' ) && false === strpos( $class_name, 'wpinv_' ) ) {
278
-			return;
279
-		}
280
-
281
-		// Next, prepare the file name from the class.
282
-		$file_name = 'class-' . str_replace( '_', '-', $class_name ) . '.php';
283
-
284
-		// Base path of the classes.
285
-		$plugin_path = untrailingslashit( WPINV_PLUGIN_DIR );
286
-
287
-		// And an array of possible locations in order of importance.
288
-		$locations = array(
289
-			"$plugin_path/includes",
290
-			"$plugin_path/includes/data-stores",
291
-			"$plugin_path/includes/gateways",
292
-			"$plugin_path/includes/payments",
293
-			"$plugin_path/includes/geolocation",
294
-			"$plugin_path/includes/reports",
295
-			"$plugin_path/includes/api",
296
-			"$plugin_path/includes/admin",
297
-			"$plugin_path/includes/admin/meta-boxes",
298
-		);
299
-
300
-		foreach ( apply_filters( 'getpaid_autoload_locations', $locations ) as $location ) {
301
-			if ( file_exists( trailingslashit( $location ) . $file_name ) ) {
302
-				include trailingslashit( $location ) . $file_name;
303
-				break;
304
-			}
305
-		}
306
-	}
307
-
308
-	/**
309
-	 * Inits hooks etc.
310
-	 */
311
-	public function init() {
312
-		// Fires before getpaid inits.
313
-		do_action( 'before_getpaid_init', $this );
314
-
315
-		// Maybe upgrade.
316
-		$this->maybe_upgrade_database();
317
-
318
-		// Load default gateways.
319
-		$gateways = apply_filters(
320
-			'getpaid_default_gateways',
321
-			array(
322
-				'manual'        => 'GetPaid_Manual_Gateway',
323
-				'paypal'        => 'GetPaid_Paypal_Gateway',
324
-				'worldpay'      => 'GetPaid_Worldpay_Gateway',
325
-				'bank_transfer' => 'GetPaid_Bank_Transfer_Gateway',
326
-				'authorizenet'  => 'GetPaid_Authorize_Net_Gateway',
327
-			)
328
-		);
329
-
330
-		foreach ( $gateways as $id => $class ) {
331
-			$this->gateways[ $id ] = new $class();
332
-		}
333
-
334
-		if ( 'yes' != get_option( 'wpinv_renamed_gateways' ) ) {
335
-			GetPaid_Installer::rename_gateways_label();
336
-			update_option( 'wpinv_renamed_gateways', 'yes' );
337
-		}
338
-
339
-		// Fires after getpaid inits.
340
-		do_action( 'getpaid_init', $this );
341
-	}
342
-
343
-	/**
344
-	 * Checks if this is an IPN request and processes it.
345
-	 */
346
-	public function maybe_process_ipn() {
347
-		// Ensure that this is an IPN request.
348
-		if ( empty( $_GET['wpi-listener'] ) || 'IPN' !== $_GET['wpi-listener'] || empty( $_GET['wpi-gateway'] ) ) {
349
-			return;
350
-		}
351
-
352
-		$gateway = sanitize_text_field( $_GET['wpi-gateway'] );
353
-
354
-		do_action( 'wpinv_verify_payment_ipn', $gateway );
355
-		do_action( "wpinv_verify_{$gateway}_ipn" );
356
-		exit;
357
-	}
358
-
359
-	public function enqueue_scripts() {
360
-		// Fires before adding scripts.
361
-		do_action( 'getpaid_enqueue_scripts' );
362
-
363
-		$localize                         = array();
364
-		$localize['ajax_url']             = admin_url( 'admin-ajax.php' );
365
-		$localize['thousands']            = wpinv_thousands_separator();
366
-		$localize['decimals']             = wpinv_decimal_separator();
367
-		$localize['nonce']                = wp_create_nonce( 'wpinv-nonce' );
368
-		$localize['txtComplete']          = __( 'Continue', 'invoicing' );
369
-		$localize['UseTaxes']             = wpinv_use_taxes();
370
-		$localize['formNonce']            = wp_create_nonce( 'getpaid_form_nonce' );
371
-		$localize['loading']              = __( 'Loading...', 'invoicing' );
372
-		$localize['connectionError']      = __( 'Could not establish a connection to the server.', 'invoicing' );
373
-		$localize['recaptchaSettings']    = getpaid_get_recaptcha_settings();
374
-
375
-		$localize = apply_filters( 'wpinv_front_js_localize', $localize );
376
-
377
-		// reCaptcha.
378
-		if ( getpaid_is_recaptcha_enabled() && ( $recaptcha_js = getpaid_recaptcha_api_url() ) ) {
379
-			wp_enqueue_script( 'recaptcha', $recaptcha_js, array(), null, true ); // phpcs:ignore WordPress.WP.EnqueuedResourceParameters.MissingVersion
380
-		}
381
-
382
-		wp_enqueue_script( 'wpinv-front-script', WPINV_PLUGIN_URL . 'assets/js/payment-forms.min.js', array( 'jquery' ), WPINV_VERSION, true );
383
-		wp_localize_script( 'wpinv-front-script', 'WPInv', $localize );
384
-	}
385
-
386
-	public function wpinv_actions() {
387
-		if ( isset( $_REQUEST['wpi_action'] ) ) {
388
-			do_action( 'wpinv_' . wpinv_sanitize_key( $_REQUEST['wpi_action'] ), $_REQUEST );
389
-		}
390
-
391
-		if ( defined( 'WP_ALL_IMPORT_ROOT_DIR' ) ) {
392
-			include plugin_dir_path( __FILE__ ) . 'libraries/wp-all-import/class-getpaid-wp-all-import.php';
393
-		}
394
-	}
395
-
396
-	/**
397
-	 * Fires an action after verifying that a user can fire them.
398
-	 *
399
-	 * Note: If the action is on an invoice, subscription etc, esure that the
400
-	 * current user owns the invoice/subscription.
401
-	 */
402
-	public function maybe_do_authenticated_action() {
403
-		if ( isset( $_REQUEST['getpaid-action'] ) && isset( $_REQUEST['getpaid-nonce'] ) && wp_verify_nonce( $_REQUEST['getpaid-nonce'], 'getpaid-nonce' ) ) {
404
-			$key  = sanitize_key( $_REQUEST['getpaid-action'] );
405
-			$data = wp_unslash( $_REQUEST );
406
-
407
-			if ( is_user_logged_in() ) {
408
-				do_action( "getpaid_authenticated_action_$key", $data );
409
-			}
410
-
411
-			do_action( "getpaid_unauthenticated_action_$key", $data );
412
-		}
413
-	}
414
-
415
-	public function pre_get_posts( $wp_query ) {
416
-		if ( ! is_admin() && ! empty( $wp_query->query_vars['post_type'] ) && getpaid_is_invoice_post_type( $wp_query->query_vars['post_type'] ) && is_user_logged_in() && is_single() && $wp_query->is_main_query() ) {
417
-			$wp_query->query_vars['post_status'] = array_keys( wpinv_get_invoice_statuses( false, false, $wp_query->query_vars['post_type'] ) );
418
-		}
419
-
420
-		return $wp_query;
421
-	}
422
-
423
-	/**
424
-	 * Register widgets
425
-	 *
426
-	 */
427
-	public function register_widgets() {
428
-		global $pagenow;
429
-
430
-		// Currently, UX Builder does not work particulaly well with SuperDuper.
431
-		// So we disable our widgets when editing a page with UX Builder.
432
-		if ( function_exists( 'ux_builder_is_active' ) && ux_builder_is_active() ) {
433
-			return;
434
-		}
435
-
436
-		$block_widget_init_screens = function_exists( 'sd_pagenow_exclude' ) ? sd_pagenow_exclude() : array();
437
-
438
-		if ( is_admin() && $pagenow && in_array( $pagenow, $block_widget_init_screens ) ) {
439
-			// don't initiate in these conditions.
440
-		} else {
441
-			// Only load allowed widgets.
442
-			$exclude = function_exists( 'sd_widget_exclude' ) ? sd_widget_exclude() : array();
443
-			$widgets = apply_filters(
444
-				'getpaid_widget_classes',
445
-				array(
446
-					'WPInv_Checkout_Widget',
447
-					'WPInv_History_Widget',
448
-					'WPInv_Receipt_Widget',
449
-					'WPInv_Subscriptions_Widget',
450
-					'WPInv_Buy_Item_Widget',
451
-					'WPInv_Messages_Widget',
452
-					'WPInv_GetPaid_Widget',
453
-					'WPInv_Invoice_Widget',
454
-				)
455
-			);
456
-
457
-			// For each widget...
458
-			foreach ( $widgets as $widget ) {
459
-				// Abort early if it is excluded for this page.
460
-				if ( in_array( $widget, $exclude ) ) {
461
-					continue;
462
-				}
463
-
464
-				// SD V1 used to extend the widget class. V2 does not, so we cannot call register widget on it.
465
-				if ( is_subclass_of( $widget, 'WP_Widget' ) ) {
466
-					register_widget( $widget );
467
-				} else {
468
-					new $widget();
469
-				}
470
-			}
471
-		}
472
-	}
473
-
474
-	/**
475
-	 * Upgrades the database.
476
-	 *
477
-	 * @since 2.0.2
478
-	 */
479
-	public function maybe_upgrade_database() {
480
-		// Ensure the database tables are up to date.
481
-		GetPaid_Installer::maybe_create_db_tables();
482
-
483
-		$wpi_version = get_option( 'wpinv_version', 0 );
484
-
485
-		if ( $wpi_version == WPINV_VERSION ) {
486
-			return;
487
-		}
488
-
489
-		$installer = new GetPaid_Installer();
490
-
491
-		if ( empty( $wpi_version ) ) {
492
-			return $installer->upgrade_db( 0 );
493
-		}
494
-
495
-		$upgrades  = array(
496
-			'0.0.5' => '004',
497
-			'1.0.3' => '102',
498
-			'2.0.0' => '118',
499
-			'2.8.0' => '279',
500
-		);
501
-
502
-		foreach ( $upgrades as $key => $method ) {
503
-			if ( version_compare( $wpi_version, $key, '<' ) ) {
504
-				return $installer->upgrade_db( $method );
505
-			}
506
-		}
507
-	}
508
-
509
-	/**
510
-	 * Flushes the permalinks if needed.
511
-	 *
512
-	 * @since 2.0.8
513
-	 */
514
-	public function maybe_flush_permalinks() {
515
-		$flush = get_option( 'wpinv_flush_permalinks', 0 );
516
-
517
-		if ( ! empty( $flush ) ) {
518
-			flush_rewrite_rules();
519
-			delete_option( 'wpinv_flush_permalinks' );
520
-		}
521
-	}
522
-
523
-	/**
524
-	 * Remove our pages from yoast sitemaps.
525
-	 *
526
-	 * @since 1.0.19
527
-	 * @param int[] $excluded_posts_ids
528
-	 */
529
-	public function wpseo_exclude_from_sitemap_by_post_ids( $excluded_posts_ids ) {
530
-		// Ensure that we have an array.
531
-		if ( ! is_array( $excluded_posts_ids ) ) {
532
-			$excluded_posts_ids = array();
533
-		}
534
-
535
-		// Prepare our pages.
536
-		$our_pages = array();
537
-
538
-		// Checkout page.
539
-		$our_pages[] = wpinv_get_option( 'checkout_page', false );
540
-
541
-		// Success page.
542
-		$our_pages[] = wpinv_get_option( 'success_page', false );
543
-
544
-		// Failure page.
545
-		$our_pages[] = wpinv_get_option( 'failure_page', false );
546
-
547
-		// History page.
548
-		$our_pages[] = wpinv_get_option( 'invoice_history_page', false );
549
-
550
-		// Subscriptions page.
551
-		$our_pages[] = wpinv_get_option( 'invoice_subscription_page', false );
552
-
553
-		$our_pages   = array_map( 'intval', array_filter( $our_pages ) );
554
-
555
-		$excluded_posts_ids = $excluded_posts_ids + $our_pages;
556
-
557
-		return array_unique( $excluded_posts_ids );
558
-	}
559
-
560
-	/**
561
-	 * Remove our pages from yoast sitemaps.
562
-	 *
563
-	 * @since 1.0.19
564
-	 * @param string[] $post_types
565
-	 */
566
-	public function exclude_invoicing_post_types( $post_types ) {
567
-		// Ensure that we have an array.
568
-		if ( ! is_array( $post_types ) ) {
569
-			$post_types = array();
570
-		}
571
-
572
-		// Remove our post types.
573
-		return array_diff( $post_types, array_keys( getpaid_get_invoice_post_types() ) );
574
-	}
575
-
576
-	/**
577
-	 * Displays additional footer code.
578
-	 *
579
-	 * @since 2.0.0
580
-	 */
581
-	public function wp_footer() {
582
-		wpinv_get_template( 'frontend-footer.php' );
583
-	}
584
-
585
-	/**
586
-	 * Displays additional header code.
587
-	 *
588
-	 * @since 2.0.0
589
-	 */
590
-	public function wp_head() {
591
-		wpinv_get_template( 'frontend-head.php' );
592
-	}
593
-
594
-	/**
595
-	 * Custom query vars.
596
-	 *
597
-	 */
598
-	public function custom_query_vars( $vars ) {
599
-		$vars[] = 'getpaid-ipn';
600
-		return $vars;
601
-	}
602
-
603
-	/**
604
-	 * Add rewrite tags and rules.
605
-	 *
606
-	 */
607
-	public function add_rewrite_rule() {
608
-		$tag = 'getpaid-ipn';
609
-		add_rewrite_tag( "%$tag%", '([^&]+)' );
610
-		add_rewrite_rule( "^$tag/([^/]*)/?", "index.php?$tag=\$matches[1]", 'top' );
611
-	}
612
-
613
-	/**
614
-	 * Processes non-query string ipns.
615
-	 *
616
-	 */
617
-	public function maybe_process_new_ipn( $query ) {
618
-		if ( is_admin() || ! $query->is_main_query() ) {
619
-			return;
620
-		}
621
-
622
-		$gateway = get_query_var( 'getpaid-ipn' );
623
-
624
-		if ( ! empty( $gateway ) ) {
625
-			$gateway = sanitize_text_field( $gateway );
626
-			nocache_headers();
627
-			do_action( 'wpinv_verify_payment_ipn', $gateway );
628
-			do_action( "wpinv_verify_{$gateway}_ipn" );
629
-			exit;
630
-		}
631
-	}
17
+    /**
18
+     * GetPaid version.
19
+     *
20
+     * @var string
21
+     */
22
+    public $version;
23
+
24
+    /**
25
+     * Data container.
26
+     *
27
+     * @var array
28
+     */
29
+    protected $data = array();
30
+
31
+    /**
32
+     * Form elements instance.
33
+     *
34
+     * @var WPInv_Payment_Form_Elements
35
+     */
36
+    public $form_elements;
37
+
38
+    /**
39
+     * @var array An array of payment gateways.
40
+     */
41
+    public $gateways;
42
+
43
+    /**
44
+     * Class constructor.
45
+     */
46
+    public function __construct() {
47
+        $this->define_constants();
48
+        $this->includes();
49
+        $this->init_hooks();
50
+        $this->set_properties();
51
+    }
52
+
53
+    /**
54
+     * Sets a custom data property.
55
+     *
56
+     * @param string $prop The prop to set.
57
+     * @param mixed $value The value to retrieve.
58
+     */
59
+    public function set( $prop, $value ) {
60
+        $this->data[ $prop ] = $value;
61
+    }
62
+
63
+    /**
64
+     * Gets a custom data property.
65
+     *
66
+     * @param string $prop The prop to set.
67
+     * @return mixed The value.
68
+     */
69
+    public function get( $prop ) {
70
+        if ( isset( $this->data[ $prop ] ) ) {
71
+            return $this->data[ $prop ];
72
+        }
73
+
74
+        return null;
75
+    }
76
+
77
+    /**
78
+     * Define class properties.
79
+     */
80
+    public function set_properties() {
81
+        // Sessions.
82
+        $this->set( 'session', new WPInv_Session_Handler() );
83
+        $GLOBALS['wpi_session'] = $this->get( 'session' ); // Backwards compatibility.
84
+        $GLOBALS['wpinv_euvat'] = new WPInv_EUVat(); // Backwards compatibility.
85
+
86
+        // Init other objects.
87
+        $this->set( 'notes', new WPInv_Notes() );
88
+        $this->set( 'api', new WPInv_API() );
89
+        $this->set( 'post_types', new GetPaid_Post_Types() );
90
+        $this->set( 'template', new GetPaid_Template() );
91
+        $this->set( 'admin', new GetPaid_Admin() );
92
+        $this->set( 'subscriptions', new WPInv_Subscriptions() );
93
+        $this->set( 'invoice_emails', new GetPaid_Invoice_Notification_Emails() );
94
+        $this->set( 'subscription_emails', new GetPaid_Subscription_Notification_Emails() );
95
+        $this->set( 'daily_maintenace', new GetPaid_Daily_Maintenance() );
96
+        $this->set( 'payment_forms', new GetPaid_Payment_Forms() );
97
+        $this->set( 'maxmind', new GetPaid_MaxMind_Geolocation() );
98
+    }
99
+
100
+        /**
101
+         * Define plugin constants.
102
+         */
103
+    public function define_constants() {
104
+        define( 'WPINV_PLUGIN_DIR', plugin_dir_path( WPINV_PLUGIN_FILE ) );
105
+        define( 'WPINV_PLUGIN_URL', plugin_dir_url( WPINV_PLUGIN_FILE ) );
106
+        $this->version = WPINV_VERSION;
107
+    }
108
+
109
+    /**
110
+     * Hook into actions and filters.
111
+     *
112
+     * @since 1.0.19
113
+     */
114
+    protected function init_hooks() {
115
+        /* Internationalize the text strings used. */
116
+        add_action( 'plugins_loaded', array( &$this, 'plugins_loaded' ) );
117
+
118
+        // Init the plugin after WordPress inits.
119
+        add_action( 'init', array( $this, 'init' ), 1 );
120
+        add_action( 'init', array( $this, 'maybe_process_ipn' ), 10 );
121
+        add_action( 'init', array( $this, 'wpinv_actions' ) );
122
+        add_action( 'init', array( $this, 'maybe_do_authenticated_action' ), 100 );
123
+        add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ), 11 );
124
+        add_action( 'wp_footer', array( $this, 'wp_footer' ) );
125
+        add_action( 'wp_head', array( $this, 'wp_head' ) );
126
+        add_action( 'widgets_init', array( $this, 'register_widgets' ) );
127
+        add_filter( 'wpseo_exclude_from_sitemap_by_post_ids', array( $this, 'wpseo_exclude_from_sitemap_by_post_ids' ) );
128
+        add_filter( 'the_seo_framework_sitemap_supported_post_types', array( $this, 'exclude_invoicing_post_types' ) );
129
+        add_filter( 'pre_get_posts', array( &$this, 'pre_get_posts' ) );
130
+
131
+        add_filter( 'query_vars', array( $this, 'custom_query_vars' ) );
132
+        add_action( 'init', array( $this, 'add_rewrite_rule' ), 10, 0 );
133
+        add_action( 'pre_get_posts', array( $this, 'maybe_process_new_ipn' ), 1 );
134
+
135
+        // Fires after registering actions.
136
+        do_action( 'wpinv_actions', $this );
137
+        do_action( 'getpaid_actions', $this );
138
+    }
139
+
140
+    public function plugins_loaded() {
141
+        /* Internationalize the text strings used. */
142
+        $this->load_textdomain();
143
+
144
+        do_action( 'wpinv_loaded' );
145
+
146
+        // Fix oxygen page builder conflict
147
+        if ( function_exists( 'ct_css_output' ) ) {
148
+            wpinv_oxygen_fix_conflict();
149
+        }
150
+    }
151
+
152
+    /**
153
+     * Load Localisation files.
154
+     *
155
+     * Note: the first-loaded translation file overrides any following ones if the same translation is present.
156
+     *
157
+     * Locales found in:
158
+     *      - WP_LANG_DIR/plugins/invoicing-LOCALE.mo
159
+     *      - WP_PLUGIN_DIR/invoicing/languages/invoicing-LOCALE.mo
160
+     *
161
+     * @since 1.0.0
162
+     */
163
+    public function load_textdomain() {
164
+        // Determines the current locale.
165
+        if ( function_exists( 'determine_locale' ) ) {
166
+            $locale = determine_locale();
167
+        } else if ( function_exists( 'get_user_locale' ) ) {
168
+            $locale = get_user_locale();
169
+        } else {
170
+            $locale = get_locale();
171
+        }
172
+
173
+        /**
174
+         * Filter the locale to use for translations.
175
+         */
176
+        $locale = apply_filters( 'plugin_locale', $locale, 'invoicing' );
177
+
178
+        unload_textdomain( 'invoicing', true );
179
+        load_textdomain( 'invoicing', WP_LANG_DIR . '/invoicing/invoicing-' . $locale . '.mo' );
180
+        load_plugin_textdomain( 'invoicing', false, plugin_basename( dirname( WPINV_PLUGIN_FILE ) ) . '/languages/' );
181
+    }
182
+
183
+    /**
184
+     * Include required core files used in admin and on the frontend.
185
+     */
186
+    public function includes() {
187
+        // Start with the settings.
188
+        require_once WPINV_PLUGIN_DIR . 'includes/admin/register-settings.php';
189
+
190
+        // Packages/libraries.
191
+        require_once WPINV_PLUGIN_DIR . 'vendor/autoload.php';
192
+        require_once WPINV_PLUGIN_DIR . 'vendor/ayecode/wp-ayecode-ui/ayecode-ui-loader.php';
193
+
194
+        // Load functions.
195
+        require_once WPINV_PLUGIN_DIR . 'includes/deprecated-functions.php';
196
+        require_once WPINV_PLUGIN_DIR . 'includes/wpinv-email-functions.php';
197
+        require_once WPINV_PLUGIN_DIR . 'includes/wpinv-general-functions.php';
198
+        require_once WPINV_PLUGIN_DIR . 'includes/wpinv-helper-functions.php';
199
+        require_once WPINV_PLUGIN_DIR . 'includes/wpinv-tax-functions.php';
200
+        require_once WPINV_PLUGIN_DIR . 'includes/wpinv-template-functions.php';
201
+        require_once WPINV_PLUGIN_DIR . 'includes/wpinv-address-functions.php';
202
+        require_once WPINV_PLUGIN_DIR . 'includes/invoice-functions.php';
203
+        require_once WPINV_PLUGIN_DIR . 'includes/subscription-functions.php';
204
+        require_once WPINV_PLUGIN_DIR . 'includes/wpinv-item-functions.php';
205
+        require_once WPINV_PLUGIN_DIR . 'includes/wpinv-discount-functions.php';
206
+        require_once WPINV_PLUGIN_DIR . 'includes/wpinv-gateway-functions.php';
207
+        require_once WPINV_PLUGIN_DIR . 'includes/wpinv-payment-functions.php';
208
+        require_once WPINV_PLUGIN_DIR . 'includes/user-functions.php';
209
+        require_once WPINV_PLUGIN_DIR . 'includes/error-functions.php';
210
+
211
+        // Register autoloader.
212
+        try {
213
+            spl_autoload_register( array( $this, 'autoload' ), true );
214
+        } catch ( Exception $e ) {
215
+            wpinv_error_log( $e->getMessage(), '', __FILE__, 149, true );
216
+        }
217
+
218
+        require_once WPINV_PLUGIN_DIR . 'includes/abstracts/abstract-wpinv-session.php';
219
+        require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-session-handler.php';
220
+        require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-ajax.php';
221
+        require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-api.php';
222
+        require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-cache-helper.php';
223
+        require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-db.php';
224
+        require_once WPINV_PLUGIN_DIR . 'includes/admin/subscriptions.php';
225
+        require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-subscriptions-db.php';
226
+        require_once WPINV_PLUGIN_DIR . 'includes/wpinv-subscription.php';
227
+        require_once WPINV_PLUGIN_DIR . 'includes/abstracts/abstract-wpinv-privacy.php';
228
+        require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-privacy.php';
229
+        require_once WPINV_PLUGIN_DIR . 'includes/libraries/class-ayecode-addons.php';
230
+        require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-addons.php';
231
+        require_once WPINV_PLUGIN_DIR . 'widgets/checkout.php';
232
+        require_once WPINV_PLUGIN_DIR . 'widgets/invoice-history.php';
233
+        require_once WPINV_PLUGIN_DIR . 'widgets/invoice-receipt.php';
234
+        require_once WPINV_PLUGIN_DIR . 'widgets/invoice-messages.php';
235
+        require_once WPINV_PLUGIN_DIR . 'widgets/subscriptions.php';
236
+        require_once WPINV_PLUGIN_DIR . 'widgets/buy-item.php';
237
+        require_once WPINV_PLUGIN_DIR . 'widgets/getpaid.php';
238
+        require_once WPINV_PLUGIN_DIR . 'widgets/invoice.php';
239
+        require_once WPINV_PLUGIN_DIR . 'includes/admin/admin-pages.php';
240
+
241
+        if ( is_admin() || ( defined( 'WP_CLI' ) && WP_CLI ) ) {
242
+            GetPaid_Post_Types_Admin::init();
243
+
244
+            require_once WPINV_PLUGIN_DIR . 'includes/admin/wpinv-admin-functions.php';
245
+            require_once WPINV_PLUGIN_DIR . 'includes/admin/meta-boxes/class-mb-payment-form.php';
246
+            require_once WPINV_PLUGIN_DIR . 'includes/admin/meta-boxes/class-mb-invoice-notes.php';
247
+            require_once WPINV_PLUGIN_DIR . 'includes/admin/class-wpinv-admin-menus.php';
248
+            require_once WPINV_PLUGIN_DIR . 'includes/admin/class-wpinv-users.php';
249
+            require_once WPINV_PLUGIN_DIR . 'includes/admin/class-getpaid-admin-profile.php';
250
+            // load the user class only on the users.php page
251
+            global $pagenow;
252
+            if ( $pagenow == 'users.php' ) {
253
+                new WPInv_Admin_Users();
254
+            }
255
+        }
256
+
257
+        // Register cli commands
258
+        if ( defined( 'WP_CLI' ) && WP_CLI ) {
259
+            require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-cli.php';
260
+            WP_CLI::add_command( 'invoicing', 'WPInv_CLI' );
261
+        }
262
+    }
263
+
264
+    /**
265
+     * Class autoloader
266
+     *
267
+     * @param       string $class_name The name of the class to load.
268
+     * @access      public
269
+     * @since       1.0.19
270
+     * @return      void
271
+     */
272
+    public function autoload( $class_name ) {
273
+        // Normalize the class name...
274
+        $class_name  = strtolower( $class_name );
275
+
276
+        // ... and make sure it is our class.
277
+        if ( false === strpos( $class_name, 'getpaid_' ) && false === strpos( $class_name, 'wpinv_' ) ) {
278
+            return;
279
+        }
280
+
281
+        // Next, prepare the file name from the class.
282
+        $file_name = 'class-' . str_replace( '_', '-', $class_name ) . '.php';
283
+
284
+        // Base path of the classes.
285
+        $plugin_path = untrailingslashit( WPINV_PLUGIN_DIR );
286
+
287
+        // And an array of possible locations in order of importance.
288
+        $locations = array(
289
+            "$plugin_path/includes",
290
+            "$plugin_path/includes/data-stores",
291
+            "$plugin_path/includes/gateways",
292
+            "$plugin_path/includes/payments",
293
+            "$plugin_path/includes/geolocation",
294
+            "$plugin_path/includes/reports",
295
+            "$plugin_path/includes/api",
296
+            "$plugin_path/includes/admin",
297
+            "$plugin_path/includes/admin/meta-boxes",
298
+        );
299
+
300
+        foreach ( apply_filters( 'getpaid_autoload_locations', $locations ) as $location ) {
301
+            if ( file_exists( trailingslashit( $location ) . $file_name ) ) {
302
+                include trailingslashit( $location ) . $file_name;
303
+                break;
304
+            }
305
+        }
306
+    }
307
+
308
+    /**
309
+     * Inits hooks etc.
310
+     */
311
+    public function init() {
312
+        // Fires before getpaid inits.
313
+        do_action( 'before_getpaid_init', $this );
314
+
315
+        // Maybe upgrade.
316
+        $this->maybe_upgrade_database();
317
+
318
+        // Load default gateways.
319
+        $gateways = apply_filters(
320
+            'getpaid_default_gateways',
321
+            array(
322
+                'manual'        => 'GetPaid_Manual_Gateway',
323
+                'paypal'        => 'GetPaid_Paypal_Gateway',
324
+                'worldpay'      => 'GetPaid_Worldpay_Gateway',
325
+                'bank_transfer' => 'GetPaid_Bank_Transfer_Gateway',
326
+                'authorizenet'  => 'GetPaid_Authorize_Net_Gateway',
327
+            )
328
+        );
329
+
330
+        foreach ( $gateways as $id => $class ) {
331
+            $this->gateways[ $id ] = new $class();
332
+        }
333
+
334
+        if ( 'yes' != get_option( 'wpinv_renamed_gateways' ) ) {
335
+            GetPaid_Installer::rename_gateways_label();
336
+            update_option( 'wpinv_renamed_gateways', 'yes' );
337
+        }
338
+
339
+        // Fires after getpaid inits.
340
+        do_action( 'getpaid_init', $this );
341
+    }
342
+
343
+    /**
344
+     * Checks if this is an IPN request and processes it.
345
+     */
346
+    public function maybe_process_ipn() {
347
+        // Ensure that this is an IPN request.
348
+        if ( empty( $_GET['wpi-listener'] ) || 'IPN' !== $_GET['wpi-listener'] || empty( $_GET['wpi-gateway'] ) ) {
349
+            return;
350
+        }
351
+
352
+        $gateway = sanitize_text_field( $_GET['wpi-gateway'] );
353
+
354
+        do_action( 'wpinv_verify_payment_ipn', $gateway );
355
+        do_action( "wpinv_verify_{$gateway}_ipn" );
356
+        exit;
357
+    }
358
+
359
+    public function enqueue_scripts() {
360
+        // Fires before adding scripts.
361
+        do_action( 'getpaid_enqueue_scripts' );
362
+
363
+        $localize                         = array();
364
+        $localize['ajax_url']             = admin_url( 'admin-ajax.php' );
365
+        $localize['thousands']            = wpinv_thousands_separator();
366
+        $localize['decimals']             = wpinv_decimal_separator();
367
+        $localize['nonce']                = wp_create_nonce( 'wpinv-nonce' );
368
+        $localize['txtComplete']          = __( 'Continue', 'invoicing' );
369
+        $localize['UseTaxes']             = wpinv_use_taxes();
370
+        $localize['formNonce']            = wp_create_nonce( 'getpaid_form_nonce' );
371
+        $localize['loading']              = __( 'Loading...', 'invoicing' );
372
+        $localize['connectionError']      = __( 'Could not establish a connection to the server.', 'invoicing' );
373
+        $localize['recaptchaSettings']    = getpaid_get_recaptcha_settings();
374
+
375
+        $localize = apply_filters( 'wpinv_front_js_localize', $localize );
376
+
377
+        // reCaptcha.
378
+        if ( getpaid_is_recaptcha_enabled() && ( $recaptcha_js = getpaid_recaptcha_api_url() ) ) {
379
+            wp_enqueue_script( 'recaptcha', $recaptcha_js, array(), null, true ); // phpcs:ignore WordPress.WP.EnqueuedResourceParameters.MissingVersion
380
+        }
381
+
382
+        wp_enqueue_script( 'wpinv-front-script', WPINV_PLUGIN_URL . 'assets/js/payment-forms.min.js', array( 'jquery' ), WPINV_VERSION, true );
383
+        wp_localize_script( 'wpinv-front-script', 'WPInv', $localize );
384
+    }
385
+
386
+    public function wpinv_actions() {
387
+        if ( isset( $_REQUEST['wpi_action'] ) ) {
388
+            do_action( 'wpinv_' . wpinv_sanitize_key( $_REQUEST['wpi_action'] ), $_REQUEST );
389
+        }
390
+
391
+        if ( defined( 'WP_ALL_IMPORT_ROOT_DIR' ) ) {
392
+            include plugin_dir_path( __FILE__ ) . 'libraries/wp-all-import/class-getpaid-wp-all-import.php';
393
+        }
394
+    }
395
+
396
+    /**
397
+     * Fires an action after verifying that a user can fire them.
398
+     *
399
+     * Note: If the action is on an invoice, subscription etc, esure that the
400
+     * current user owns the invoice/subscription.
401
+     */
402
+    public function maybe_do_authenticated_action() {
403
+        if ( isset( $_REQUEST['getpaid-action'] ) && isset( $_REQUEST['getpaid-nonce'] ) && wp_verify_nonce( $_REQUEST['getpaid-nonce'], 'getpaid-nonce' ) ) {
404
+            $key  = sanitize_key( $_REQUEST['getpaid-action'] );
405
+            $data = wp_unslash( $_REQUEST );
406
+
407
+            if ( is_user_logged_in() ) {
408
+                do_action( "getpaid_authenticated_action_$key", $data );
409
+            }
410
+
411
+            do_action( "getpaid_unauthenticated_action_$key", $data );
412
+        }
413
+    }
414
+
415
+    public function pre_get_posts( $wp_query ) {
416
+        if ( ! is_admin() && ! empty( $wp_query->query_vars['post_type'] ) && getpaid_is_invoice_post_type( $wp_query->query_vars['post_type'] ) && is_user_logged_in() && is_single() && $wp_query->is_main_query() ) {
417
+            $wp_query->query_vars['post_status'] = array_keys( wpinv_get_invoice_statuses( false, false, $wp_query->query_vars['post_type'] ) );
418
+        }
419
+
420
+        return $wp_query;
421
+    }
422
+
423
+    /**
424
+     * Register widgets
425
+     *
426
+     */
427
+    public function register_widgets() {
428
+        global $pagenow;
429
+
430
+        // Currently, UX Builder does not work particulaly well with SuperDuper.
431
+        // So we disable our widgets when editing a page with UX Builder.
432
+        if ( function_exists( 'ux_builder_is_active' ) && ux_builder_is_active() ) {
433
+            return;
434
+        }
435
+
436
+        $block_widget_init_screens = function_exists( 'sd_pagenow_exclude' ) ? sd_pagenow_exclude() : array();
437
+
438
+        if ( is_admin() && $pagenow && in_array( $pagenow, $block_widget_init_screens ) ) {
439
+            // don't initiate in these conditions.
440
+        } else {
441
+            // Only load allowed widgets.
442
+            $exclude = function_exists( 'sd_widget_exclude' ) ? sd_widget_exclude() : array();
443
+            $widgets = apply_filters(
444
+                'getpaid_widget_classes',
445
+                array(
446
+                    'WPInv_Checkout_Widget',
447
+                    'WPInv_History_Widget',
448
+                    'WPInv_Receipt_Widget',
449
+                    'WPInv_Subscriptions_Widget',
450
+                    'WPInv_Buy_Item_Widget',
451
+                    'WPInv_Messages_Widget',
452
+                    'WPInv_GetPaid_Widget',
453
+                    'WPInv_Invoice_Widget',
454
+                )
455
+            );
456
+
457
+            // For each widget...
458
+            foreach ( $widgets as $widget ) {
459
+                // Abort early if it is excluded for this page.
460
+                if ( in_array( $widget, $exclude ) ) {
461
+                    continue;
462
+                }
463
+
464
+                // SD V1 used to extend the widget class. V2 does not, so we cannot call register widget on it.
465
+                if ( is_subclass_of( $widget, 'WP_Widget' ) ) {
466
+                    register_widget( $widget );
467
+                } else {
468
+                    new $widget();
469
+                }
470
+            }
471
+        }
472
+    }
473
+
474
+    /**
475
+     * Upgrades the database.
476
+     *
477
+     * @since 2.0.2
478
+     */
479
+    public function maybe_upgrade_database() {
480
+        // Ensure the database tables are up to date.
481
+        GetPaid_Installer::maybe_create_db_tables();
482
+
483
+        $wpi_version = get_option( 'wpinv_version', 0 );
484
+
485
+        if ( $wpi_version == WPINV_VERSION ) {
486
+            return;
487
+        }
488
+
489
+        $installer = new GetPaid_Installer();
490
+
491
+        if ( empty( $wpi_version ) ) {
492
+            return $installer->upgrade_db( 0 );
493
+        }
494
+
495
+        $upgrades  = array(
496
+            '0.0.5' => '004',
497
+            '1.0.3' => '102',
498
+            '2.0.0' => '118',
499
+            '2.8.0' => '279',
500
+        );
501
+
502
+        foreach ( $upgrades as $key => $method ) {
503
+            if ( version_compare( $wpi_version, $key, '<' ) ) {
504
+                return $installer->upgrade_db( $method );
505
+            }
506
+        }
507
+    }
508
+
509
+    /**
510
+     * Flushes the permalinks if needed.
511
+     *
512
+     * @since 2.0.8
513
+     */
514
+    public function maybe_flush_permalinks() {
515
+        $flush = get_option( 'wpinv_flush_permalinks', 0 );
516
+
517
+        if ( ! empty( $flush ) ) {
518
+            flush_rewrite_rules();
519
+            delete_option( 'wpinv_flush_permalinks' );
520
+        }
521
+    }
522
+
523
+    /**
524
+     * Remove our pages from yoast sitemaps.
525
+     *
526
+     * @since 1.0.19
527
+     * @param int[] $excluded_posts_ids
528
+     */
529
+    public function wpseo_exclude_from_sitemap_by_post_ids( $excluded_posts_ids ) {
530
+        // Ensure that we have an array.
531
+        if ( ! is_array( $excluded_posts_ids ) ) {
532
+            $excluded_posts_ids = array();
533
+        }
534
+
535
+        // Prepare our pages.
536
+        $our_pages = array();
537
+
538
+        // Checkout page.
539
+        $our_pages[] = wpinv_get_option( 'checkout_page', false );
540
+
541
+        // Success page.
542
+        $our_pages[] = wpinv_get_option( 'success_page', false );
543
+
544
+        // Failure page.
545
+        $our_pages[] = wpinv_get_option( 'failure_page', false );
546
+
547
+        // History page.
548
+        $our_pages[] = wpinv_get_option( 'invoice_history_page', false );
549
+
550
+        // Subscriptions page.
551
+        $our_pages[] = wpinv_get_option( 'invoice_subscription_page', false );
552
+
553
+        $our_pages   = array_map( 'intval', array_filter( $our_pages ) );
554
+
555
+        $excluded_posts_ids = $excluded_posts_ids + $our_pages;
556
+
557
+        return array_unique( $excluded_posts_ids );
558
+    }
559
+
560
+    /**
561
+     * Remove our pages from yoast sitemaps.
562
+     *
563
+     * @since 1.0.19
564
+     * @param string[] $post_types
565
+     */
566
+    public function exclude_invoicing_post_types( $post_types ) {
567
+        // Ensure that we have an array.
568
+        if ( ! is_array( $post_types ) ) {
569
+            $post_types = array();
570
+        }
571
+
572
+        // Remove our post types.
573
+        return array_diff( $post_types, array_keys( getpaid_get_invoice_post_types() ) );
574
+    }
575
+
576
+    /**
577
+     * Displays additional footer code.
578
+     *
579
+     * @since 2.0.0
580
+     */
581
+    public function wp_footer() {
582
+        wpinv_get_template( 'frontend-footer.php' );
583
+    }
584
+
585
+    /**
586
+     * Displays additional header code.
587
+     *
588
+     * @since 2.0.0
589
+     */
590
+    public function wp_head() {
591
+        wpinv_get_template( 'frontend-head.php' );
592
+    }
593
+
594
+    /**
595
+     * Custom query vars.
596
+     *
597
+     */
598
+    public function custom_query_vars( $vars ) {
599
+        $vars[] = 'getpaid-ipn';
600
+        return $vars;
601
+    }
602
+
603
+    /**
604
+     * Add rewrite tags and rules.
605
+     *
606
+     */
607
+    public function add_rewrite_rule() {
608
+        $tag = 'getpaid-ipn';
609
+        add_rewrite_tag( "%$tag%", '([^&]+)' );
610
+        add_rewrite_rule( "^$tag/([^/]*)/?", "index.php?$tag=\$matches[1]", 'top' );
611
+    }
612
+
613
+    /**
614
+     * Processes non-query string ipns.
615
+     *
616
+     */
617
+    public function maybe_process_new_ipn( $query ) {
618
+        if ( is_admin() || ! $query->is_main_query() ) {
619
+            return;
620
+        }
621
+
622
+        $gateway = get_query_var( 'getpaid-ipn' );
623
+
624
+        if ( ! empty( $gateway ) ) {
625
+            $gateway = sanitize_text_field( $gateway );
626
+            nocache_headers();
627
+            do_action( 'wpinv_verify_payment_ipn', $gateway );
628
+            do_action( "wpinv_verify_{$gateway}_ipn" );
629
+            exit;
630
+        }
631
+    }
632 632
 }
Please login to merge, or discard this patch.
vendor/ayecode/wp-ayecode-ui/includes/ayecode-ui-settings.php 1 patch
Indentation   +2390 added lines, -2390 removed lines patch added patch discarded remove patch
@@ -13,7 +13,7 @@  discard block
 block discarded – undo
13 13
  * Bail if we are not in WP.
14 14
  */
15 15
 if ( ! defined( 'ABSPATH' ) ) {
16
-	exit;
16
+    exit;
17 17
 }
18 18
 
19 19
 /**
@@ -21,472 +21,472 @@  discard block
 block discarded – undo
21 21
  */
22 22
 if ( ! class_exists( 'AyeCode_UI_Settings' ) ) {
23 23
 
24
-	/**
25
-	 * A Class to be able to change settings for Font Awesome.
26
-	 *
27
-	 * Class AyeCode_UI_Settings
28
-	 * @ver 1.0.0
29
-	 * @todo decide how to implement textdomain
30
-	 */
31
-	class AyeCode_UI_Settings {
32
-
33
-		/**
34
-		 * Class version version.
35
-		 *
36
-		 * @var string
37
-		 */
38
-		public $version = '0.2.30';
39
-
40
-		/**
41
-		 * Class textdomain.
42
-		 *
43
-		 * @var string
44
-		 */
45
-		public $textdomain = 'aui';
46
-
47
-		/**
48
-		 * Latest version of Bootstrap at time of publish published.
49
-		 *
50
-		 * @var string
51
-		 */
52
-		public $latest = "5.2.2";
53
-
54
-		/**
55
-		 * Current version of select2 being used.
56
-		 *
57
-		 * @var string
58
-		 */
59
-		public $select2_version = "4.0.11";
60
-
61
-		/**
62
-		 * The title.
63
-		 *
64
-		 * @var string
65
-		 */
66
-		public $name = 'AyeCode UI';
67
-
68
-		/**
69
-		 * The relative url to the assets.
70
-		 *
71
-		 * @var string
72
-		 */
73
-		public $url = '';
74
-
75
-		/**
76
-		 * Holds the settings values.
77
-		 *
78
-		 * @var array
79
-		 */
80
-		private $settings;
81
-
82
-		/**
83
-		 * AyeCode_UI_Settings instance.
84
-		 *
85
-		 * @access private
86
-		 * @since  1.0.0
87
-		 * @var    AyeCode_UI_Settings There can be only one!
88
-		 */
89
-		private static $instance = null;
90
-
91
-
92
-		/**
93
-		 * Main AyeCode_UI_Settings Instance.
94
-		 *
95
-		 * Ensures only one instance of AyeCode_UI_Settings is loaded or can be loaded.
96
-		 *
97
-		 * @since 1.0.0
98
-		 * @static
99
-		 * @return AyeCode_UI_Settings - Main instance.
100
-		 */
101
-		public static function instance() {
102
-			if ( ! isset( self::$instance ) && ! ( self::$instance instanceof AyeCode_UI_Settings ) ) {
103
-
104
-				self::$instance = new AyeCode_UI_Settings;
105
-
106
-				add_action( 'init', array( self::$instance, 'init' ) ); // set settings
107
-
108
-				if ( is_admin() ) {
109
-					add_action( 'admin_menu', array( self::$instance, 'menu_item' ) );
110
-					add_action( 'admin_init', array( self::$instance, 'register_settings' ) );
111
-
112
-					// Maybe show example page
113
-					add_action( 'template_redirect', array( self::$instance,'maybe_show_examples' ) );
114
-
115
-					if ( defined( 'BLOCKSTRAP_VERSION' ) ) {
116
-						add_filter( 'sd_aui_colors', array( self::$instance,'sd_aui_colors' ), 10, 3 );
117
-					}
118
-				}
24
+    /**
25
+     * A Class to be able to change settings for Font Awesome.
26
+     *
27
+     * Class AyeCode_UI_Settings
28
+     * @ver 1.0.0
29
+     * @todo decide how to implement textdomain
30
+     */
31
+    class AyeCode_UI_Settings {
32
+
33
+        /**
34
+         * Class version version.
35
+         *
36
+         * @var string
37
+         */
38
+        public $version = '0.2.30';
119 39
 
120
-				add_action( 'customize_register', array( self::$instance, 'customizer_settings' ));
40
+        /**
41
+         * Class textdomain.
42
+         *
43
+         * @var string
44
+         */
45
+        public $textdomain = 'aui';
121 46
 
122
-				do_action( 'ayecode_ui_settings_loaded' );
123
-			}
47
+        /**
48
+         * Latest version of Bootstrap at time of publish published.
49
+         *
50
+         * @var string
51
+         */
52
+        public $latest = "5.2.2";
124 53
 
125
-			return self::$instance;
126
-		}
54
+        /**
55
+         * Current version of select2 being used.
56
+         *
57
+         * @var string
58
+         */
59
+        public $select2_version = "4.0.11";
127 60
 
128
-		/**
129
-		 * Add custom colors to the color selector.
130
-		 *
131
-		 * @param $theme_colors
132
-		 * @param $include_outlines
133
-		 * @param $include_branding
134
-		 *
135
-		 * @return mixed
136
-		 */
137
-		public function sd_aui_colors( $theme_colors, $include_outlines, $include_branding ){
61
+        /**
62
+         * The title.
63
+         *
64
+         * @var string
65
+         */
66
+        public $name = 'AyeCode UI';
138 67
 
68
+        /**
69
+         * The relative url to the assets.
70
+         *
71
+         * @var string
72
+         */
73
+        public $url = '';
139 74
 
140
-			$setting = wp_get_global_settings();
75
+        /**
76
+         * Holds the settings values.
77
+         *
78
+         * @var array
79
+         */
80
+        private $settings;
141 81
 
142
-			if(!empty($setting['color']['palette']['custom'])){
143
-				foreach($setting['color']['palette']['custom'] as $color){
144
-					$theme_colors[$color['slug']] = esc_attr($color['name']);
145
-				}
146
-			}
147
-
148
-			return $theme_colors;
149
-		}
150
-
151
-		/**
152
-		 * Setup some constants.
153
-		 */
154
-		public function constants(){
155
-			define( 'AUI_PRIMARY_COLOR_ORIGINAL', "#1e73be" );
156
-			define( 'AUI_SECONDARY_COLOR_ORIGINAL', '#6c757d' );
157
-			define( 'AUI_INFO_COLOR_ORIGINAL', '#17a2b8' );
158
-			define( 'AUI_WARNING_COLOR_ORIGINAL', '#ffc107' );
159
-			define( 'AUI_DANGER_COLOR_ORIGINAL', '#dc3545' );
160
-			define( 'AUI_SUCCESS_COLOR_ORIGINAL', '#44c553' );
161
-			define( 'AUI_LIGHT_COLOR_ORIGINAL', '#f8f9fa' );
162
-			define( 'AUI_DARK_COLOR_ORIGINAL', '#343a40' );
163
-			define( 'AUI_WHITE_COLOR_ORIGINAL', '#fff' );
164
-			define( 'AUI_PURPLE_COLOR_ORIGINAL', '#ad6edd' );
165
-			define( 'AUI_SALMON_COLOR_ORIGINAL', '#ff977a' );
166
-			define( 'AUI_CYAN_COLOR_ORIGINAL', '#35bdff' );
167
-			define( 'AUI_GRAY_COLOR_ORIGINAL', '#ced4da' );
168
-			define( 'AUI_INDIGO_COLOR_ORIGINAL', '#502c6c' );
169
-			define( 'AUI_ORANGE_COLOR_ORIGINAL', '#orange' );
170
-			define( 'AUI_BLACK_COLOR_ORIGINAL', '#000' );
171
-
172
-			if ( ! defined( 'AUI_PRIMARY_COLOR' ) ) {
173
-				define( 'AUI_PRIMARY_COLOR', AUI_PRIMARY_COLOR_ORIGINAL );
174
-			}
175
-			if ( ! defined( 'AUI_SECONDARY_COLOR' ) ) {
176
-				define( 'AUI_SECONDARY_COLOR', AUI_SECONDARY_COLOR_ORIGINAL );
177
-			}
178
-			if ( ! defined( 'AUI_INFO_COLOR' ) ) {
179
-				define( 'AUI_INFO_COLOR', AUI_INFO_COLOR_ORIGINAL );
180
-			}
181
-			if ( ! defined( 'AUI_WARNING_COLOR' ) ) {
182
-				define( 'AUI_WARNING_COLOR', AUI_WARNING_COLOR_ORIGINAL );
183
-			}
184
-			if ( ! defined( 'AUI_DANGER_COLOR' ) ) {
185
-				define( 'AUI_DANGER_COLOR', AUI_DANGER_COLOR_ORIGINAL );
186
-			}
187
-			if ( ! defined( 'AUI_SUCCESS_COLOR' ) ) {
188
-				define( 'AUI_SUCCESS_COLOR', AUI_SUCCESS_COLOR_ORIGINAL );
189
-			}
190
-			if ( ! defined( 'AUI_LIGHT_COLOR' ) ) {
191
-				define( 'AUI_LIGHT_COLOR', AUI_LIGHT_COLOR_ORIGINAL );
192
-			}
193
-			if ( ! defined( 'AUI_DARK_COLOR' ) ) {
194
-				define( 'AUI_DARK_COLOR', AUI_DARK_COLOR_ORIGINAL );
195
-			}
196
-			if ( ! defined( 'AUI_WHITE_COLOR' ) ) {
197
-				define( 'AUI_WHITE_COLOR', AUI_WHITE_COLOR_ORIGINAL );
198
-			}
199
-			if ( ! defined( 'AUI_PURPLE_COLOR' ) ) {
200
-				define( 'AUI_PURPLE_COLOR', AUI_PURPLE_COLOR_ORIGINAL );
201
-			}
202
-			if ( ! defined( 'AUI_SALMON_COLOR' ) ) {
203
-				define( 'AUI_SALMON_COLOR', AUI_SALMON_COLOR_ORIGINAL );
204
-			}
205
-			if ( ! defined( 'AUI_CYAN_COLOR' ) ) {
206
-				define( 'AUI_CYAN_COLOR', AUI_CYAN_COLOR_ORIGINAL );
207
-			}
208
-			if ( ! defined( 'AUI_GRAY_COLOR' ) ) {
209
-				define( 'AUI_GRAY_COLOR', AUI_GRAY_COLOR_ORIGINAL );
210
-			}
211
-			if ( ! defined( 'AUI_INDIGO_COLOR' ) ) {
212
-				define( 'AUI_INDIGO_COLOR', AUI_INDIGO_COLOR_ORIGINAL );
213
-			}
214
-			if ( ! defined( 'AUI_ORANGE_COLOR' ) ) {
215
-				define( 'AUI_ORANGE_COLOR', AUI_ORANGE_COLOR_ORIGINAL );
216
-			}
217
-			if ( ! defined( 'AUI_BLACK_COLOR' ) ) {
218
-				define( 'AUI_BLACK_COLOR', AUI_BLACK_COLOR_ORIGINAL );
219
-			}
220
-
221
-		}
222
-
223
-		public static function get_colors( $original = false){
224
-
225
-			if ( ! defined( 'AUI_PRIMARY_COLOR' ) ) {
226
-				return array();
227
-			}
228
-			if ( $original ) {
229
-				return array(
230
-					'primary'   => AUI_PRIMARY_COLOR_ORIGINAL,
231
-					'secondary' => AUI_SECONDARY_COLOR_ORIGINAL,
232
-					'info'      => AUI_INFO_COLOR_ORIGINAL,
233
-					'warning'   => AUI_WARNING_COLOR_ORIGINAL,
234
-					'danger'    => AUI_DANGER_COLOR_ORIGINAL,
235
-					'success'   => AUI_SUCCESS_COLOR_ORIGINAL,
236
-					'light'     => AUI_LIGHT_COLOR_ORIGINAL,
237
-					'dark'      => AUI_DARK_COLOR_ORIGINAL,
238
-					'white'     => AUI_WHITE_COLOR_ORIGINAL,
239
-					'purple'    => AUI_PURPLE_COLOR_ORIGINAL,
240
-					'salmon'    => AUI_SALMON_COLOR_ORIGINAL,
241
-					'cyan'      => AUI_CYAN_COLOR_ORIGINAL,
242
-					'gray'      => AUI_GRAY_COLOR_ORIGINAL,
243
-					'indigo'    => AUI_INDIGO_COLOR_ORIGINAL,
244
-					'orange'    => AUI_ORANGE_COLOR_ORIGINAL,
245
-					'black'     => AUI_BLACK_COLOR_ORIGINAL,
246
-				);
247
-			}
248
-
249
-			return array(
250
-				'primary'   => AUI_PRIMARY_COLOR,
251
-				'secondary' => AUI_SECONDARY_COLOR,
252
-				'info'      => AUI_INFO_COLOR,
253
-				'warning'   => AUI_WARNING_COLOR,
254
-				'danger'    => AUI_DANGER_COLOR,
255
-				'success'   => AUI_SUCCESS_COLOR,
256
-				'light'     => AUI_LIGHT_COLOR,
257
-				'dark'      => AUI_DARK_COLOR,
258
-				'white'     => AUI_WHITE_COLOR,
259
-				'purple'    => AUI_PURPLE_COLOR,
260
-				'salmon'    => AUI_SALMON_COLOR,
261
-				'cyan'      => AUI_CYAN_COLOR,
262
-				'gray'      => AUI_GRAY_COLOR,
263
-				'indigo'    => AUI_INDIGO_COLOR,
264
-				'orange'    => AUI_ORANGE_COLOR,
265
-				'black'     => AUI_BLACK_COLOR,
266
-			);
267
-		}
268
-
269
-		/**
270
-		 * Add admin body class to show when BS5 is active.
271
-		 *
272
-		 * @param $classes
273
-		 *
274
-		 * @return mixed
275
-		 */
276
-		public function add_bs5_admin_body_class( $classes = '' ) {
277
-			$classes .= ' aui_bs5';
278
-
279
-			return $classes;
280
-		}
281
-
282
-		/**
283
-		 * Add a body class to show when BS5 is active.
284
-		 *
285
-		 * @param $classes
286
-		 *
287
-		 * @return mixed
288
-		 */
289
-		public function add_bs5_body_class( $classes ) {
290
-			$classes[] = 'aui_bs5';
291
-
292
-			return $classes;
293
-		}
294
-
295
-		/**
296
-		 * Initiate the settings and add the required action hooks.
297
-		 */
298
-		public function init() {
82
+        /**
83
+         * AyeCode_UI_Settings instance.
84
+         *
85
+         * @access private
86
+         * @since  1.0.0
87
+         * @var    AyeCode_UI_Settings There can be only one!
88
+         */
89
+        private static $instance = null;
90
+
91
+
92
+        /**
93
+         * Main AyeCode_UI_Settings Instance.
94
+         *
95
+         * Ensures only one instance of AyeCode_UI_Settings is loaded or can be loaded.
96
+         *
97
+         * @since 1.0.0
98
+         * @static
99
+         * @return AyeCode_UI_Settings - Main instance.
100
+         */
101
+        public static function instance() {
102
+            if ( ! isset( self::$instance ) && ! ( self::$instance instanceof AyeCode_UI_Settings ) ) {
103
+
104
+                self::$instance = new AyeCode_UI_Settings;
105
+
106
+                add_action( 'init', array( self::$instance, 'init' ) ); // set settings
107
+
108
+                if ( is_admin() ) {
109
+                    add_action( 'admin_menu', array( self::$instance, 'menu_item' ) );
110
+                    add_action( 'admin_init', array( self::$instance, 'register_settings' ) );
111
+
112
+                    // Maybe show example page
113
+                    add_action( 'template_redirect', array( self::$instance,'maybe_show_examples' ) );
114
+
115
+                    if ( defined( 'BLOCKSTRAP_VERSION' ) ) {
116
+                        add_filter( 'sd_aui_colors', array( self::$instance,'sd_aui_colors' ), 10, 3 );
117
+                    }
118
+                }
119
+
120
+                add_action( 'customize_register', array( self::$instance, 'customizer_settings' ));
121
+
122
+                do_action( 'ayecode_ui_settings_loaded' );
123
+            }
124
+
125
+            return self::$instance;
126
+        }
127
+
128
+        /**
129
+         * Add custom colors to the color selector.
130
+         *
131
+         * @param $theme_colors
132
+         * @param $include_outlines
133
+         * @param $include_branding
134
+         *
135
+         * @return mixed
136
+         */
137
+        public function sd_aui_colors( $theme_colors, $include_outlines, $include_branding ){
138
+
139
+
140
+            $setting = wp_get_global_settings();
141
+
142
+            if(!empty($setting['color']['palette']['custom'])){
143
+                foreach($setting['color']['palette']['custom'] as $color){
144
+                    $theme_colors[$color['slug']] = esc_attr($color['name']);
145
+                }
146
+            }
147
+
148
+            return $theme_colors;
149
+        }
150
+
151
+        /**
152
+         * Setup some constants.
153
+         */
154
+        public function constants(){
155
+            define( 'AUI_PRIMARY_COLOR_ORIGINAL', "#1e73be" );
156
+            define( 'AUI_SECONDARY_COLOR_ORIGINAL', '#6c757d' );
157
+            define( 'AUI_INFO_COLOR_ORIGINAL', '#17a2b8' );
158
+            define( 'AUI_WARNING_COLOR_ORIGINAL', '#ffc107' );
159
+            define( 'AUI_DANGER_COLOR_ORIGINAL', '#dc3545' );
160
+            define( 'AUI_SUCCESS_COLOR_ORIGINAL', '#44c553' );
161
+            define( 'AUI_LIGHT_COLOR_ORIGINAL', '#f8f9fa' );
162
+            define( 'AUI_DARK_COLOR_ORIGINAL', '#343a40' );
163
+            define( 'AUI_WHITE_COLOR_ORIGINAL', '#fff' );
164
+            define( 'AUI_PURPLE_COLOR_ORIGINAL', '#ad6edd' );
165
+            define( 'AUI_SALMON_COLOR_ORIGINAL', '#ff977a' );
166
+            define( 'AUI_CYAN_COLOR_ORIGINAL', '#35bdff' );
167
+            define( 'AUI_GRAY_COLOR_ORIGINAL', '#ced4da' );
168
+            define( 'AUI_INDIGO_COLOR_ORIGINAL', '#502c6c' );
169
+            define( 'AUI_ORANGE_COLOR_ORIGINAL', '#orange' );
170
+            define( 'AUI_BLACK_COLOR_ORIGINAL', '#000' );
171
+
172
+            if ( ! defined( 'AUI_PRIMARY_COLOR' ) ) {
173
+                define( 'AUI_PRIMARY_COLOR', AUI_PRIMARY_COLOR_ORIGINAL );
174
+            }
175
+            if ( ! defined( 'AUI_SECONDARY_COLOR' ) ) {
176
+                define( 'AUI_SECONDARY_COLOR', AUI_SECONDARY_COLOR_ORIGINAL );
177
+            }
178
+            if ( ! defined( 'AUI_INFO_COLOR' ) ) {
179
+                define( 'AUI_INFO_COLOR', AUI_INFO_COLOR_ORIGINAL );
180
+            }
181
+            if ( ! defined( 'AUI_WARNING_COLOR' ) ) {
182
+                define( 'AUI_WARNING_COLOR', AUI_WARNING_COLOR_ORIGINAL );
183
+            }
184
+            if ( ! defined( 'AUI_DANGER_COLOR' ) ) {
185
+                define( 'AUI_DANGER_COLOR', AUI_DANGER_COLOR_ORIGINAL );
186
+            }
187
+            if ( ! defined( 'AUI_SUCCESS_COLOR' ) ) {
188
+                define( 'AUI_SUCCESS_COLOR', AUI_SUCCESS_COLOR_ORIGINAL );
189
+            }
190
+            if ( ! defined( 'AUI_LIGHT_COLOR' ) ) {
191
+                define( 'AUI_LIGHT_COLOR', AUI_LIGHT_COLOR_ORIGINAL );
192
+            }
193
+            if ( ! defined( 'AUI_DARK_COLOR' ) ) {
194
+                define( 'AUI_DARK_COLOR', AUI_DARK_COLOR_ORIGINAL );
195
+            }
196
+            if ( ! defined( 'AUI_WHITE_COLOR' ) ) {
197
+                define( 'AUI_WHITE_COLOR', AUI_WHITE_COLOR_ORIGINAL );
198
+            }
199
+            if ( ! defined( 'AUI_PURPLE_COLOR' ) ) {
200
+                define( 'AUI_PURPLE_COLOR', AUI_PURPLE_COLOR_ORIGINAL );
201
+            }
202
+            if ( ! defined( 'AUI_SALMON_COLOR' ) ) {
203
+                define( 'AUI_SALMON_COLOR', AUI_SALMON_COLOR_ORIGINAL );
204
+            }
205
+            if ( ! defined( 'AUI_CYAN_COLOR' ) ) {
206
+                define( 'AUI_CYAN_COLOR', AUI_CYAN_COLOR_ORIGINAL );
207
+            }
208
+            if ( ! defined( 'AUI_GRAY_COLOR' ) ) {
209
+                define( 'AUI_GRAY_COLOR', AUI_GRAY_COLOR_ORIGINAL );
210
+            }
211
+            if ( ! defined( 'AUI_INDIGO_COLOR' ) ) {
212
+                define( 'AUI_INDIGO_COLOR', AUI_INDIGO_COLOR_ORIGINAL );
213
+            }
214
+            if ( ! defined( 'AUI_ORANGE_COLOR' ) ) {
215
+                define( 'AUI_ORANGE_COLOR', AUI_ORANGE_COLOR_ORIGINAL );
216
+            }
217
+            if ( ! defined( 'AUI_BLACK_COLOR' ) ) {
218
+                define( 'AUI_BLACK_COLOR', AUI_BLACK_COLOR_ORIGINAL );
219
+            }
220
+
221
+        }
222
+
223
+        public static function get_colors( $original = false){
224
+
225
+            if ( ! defined( 'AUI_PRIMARY_COLOR' ) ) {
226
+                return array();
227
+            }
228
+            if ( $original ) {
229
+                return array(
230
+                    'primary'   => AUI_PRIMARY_COLOR_ORIGINAL,
231
+                    'secondary' => AUI_SECONDARY_COLOR_ORIGINAL,
232
+                    'info'      => AUI_INFO_COLOR_ORIGINAL,
233
+                    'warning'   => AUI_WARNING_COLOR_ORIGINAL,
234
+                    'danger'    => AUI_DANGER_COLOR_ORIGINAL,
235
+                    'success'   => AUI_SUCCESS_COLOR_ORIGINAL,
236
+                    'light'     => AUI_LIGHT_COLOR_ORIGINAL,
237
+                    'dark'      => AUI_DARK_COLOR_ORIGINAL,
238
+                    'white'     => AUI_WHITE_COLOR_ORIGINAL,
239
+                    'purple'    => AUI_PURPLE_COLOR_ORIGINAL,
240
+                    'salmon'    => AUI_SALMON_COLOR_ORIGINAL,
241
+                    'cyan'      => AUI_CYAN_COLOR_ORIGINAL,
242
+                    'gray'      => AUI_GRAY_COLOR_ORIGINAL,
243
+                    'indigo'    => AUI_INDIGO_COLOR_ORIGINAL,
244
+                    'orange'    => AUI_ORANGE_COLOR_ORIGINAL,
245
+                    'black'     => AUI_BLACK_COLOR_ORIGINAL,
246
+                );
247
+            }
248
+
249
+            return array(
250
+                'primary'   => AUI_PRIMARY_COLOR,
251
+                'secondary' => AUI_SECONDARY_COLOR,
252
+                'info'      => AUI_INFO_COLOR,
253
+                'warning'   => AUI_WARNING_COLOR,
254
+                'danger'    => AUI_DANGER_COLOR,
255
+                'success'   => AUI_SUCCESS_COLOR,
256
+                'light'     => AUI_LIGHT_COLOR,
257
+                'dark'      => AUI_DARK_COLOR,
258
+                'white'     => AUI_WHITE_COLOR,
259
+                'purple'    => AUI_PURPLE_COLOR,
260
+                'salmon'    => AUI_SALMON_COLOR,
261
+                'cyan'      => AUI_CYAN_COLOR,
262
+                'gray'      => AUI_GRAY_COLOR,
263
+                'indigo'    => AUI_INDIGO_COLOR,
264
+                'orange'    => AUI_ORANGE_COLOR,
265
+                'black'     => AUI_BLACK_COLOR,
266
+            );
267
+        }
268
+
269
+        /**
270
+         * Add admin body class to show when BS5 is active.
271
+         *
272
+         * @param $classes
273
+         *
274
+         * @return mixed
275
+         */
276
+        public function add_bs5_admin_body_class( $classes = '' ) {
277
+            $classes .= ' aui_bs5';
278
+
279
+            return $classes;
280
+        }
281
+
282
+        /**
283
+         * Add a body class to show when BS5 is active.
284
+         *
285
+         * @param $classes
286
+         *
287
+         * @return mixed
288
+         */
289
+        public function add_bs5_body_class( $classes ) {
290
+            $classes[] = 'aui_bs5';
291
+
292
+            return $classes;
293
+        }
294
+
295
+        /**
296
+         * Initiate the settings and add the required action hooks.
297
+         */
298
+        public function init() {
299 299
             global $aui_bs5;
300 300
 
301
-			// Maybe fix settings
302
-			if ( ! empty( $_REQUEST['aui-fix-admin'] ) && !empty($_REQUEST['nonce']) && wp_verify_nonce( $_REQUEST['nonce'], "aui-fix-admin" ) ) {
303
-				$db_settings = get_option( 'ayecode-ui-settings' );
304
-				if ( ! empty( $db_settings ) ) {
305
-					$db_settings['css_backend'] = 'compatibility';
306
-					$db_settings['js_backend'] = 'core-popper';
307
-					update_option( 'ayecode-ui-settings', $db_settings );
308
-					wp_safe_redirect(admin_url("options-general.php?page=ayecode-ui-settings&updated=true"));
309
-				}
310
-			}
301
+            // Maybe fix settings
302
+            if ( ! empty( $_REQUEST['aui-fix-admin'] ) && !empty($_REQUEST['nonce']) && wp_verify_nonce( $_REQUEST['nonce'], "aui-fix-admin" ) ) {
303
+                $db_settings = get_option( 'ayecode-ui-settings' );
304
+                if ( ! empty( $db_settings ) ) {
305
+                    $db_settings['css_backend'] = 'compatibility';
306
+                    $db_settings['js_backend'] = 'core-popper';
307
+                    update_option( 'ayecode-ui-settings', $db_settings );
308
+                    wp_safe_redirect(admin_url("options-general.php?page=ayecode-ui-settings&updated=true"));
309
+                }
310
+            }
311 311
 
312
-			$this->constants();
313
-			$this->settings = $this->get_settings();
314
-			$this->url = $this->get_url();
312
+            $this->constants();
313
+            $this->settings = $this->get_settings();
314
+            $this->url = $this->get_url();
315 315
 
316 316
             // define the version
317
-			$aui_bs5 = $this->settings['bs_ver'] === '5';
318
-
319
-			if ( $aui_bs5 ) {
320
-				include_once( dirname( __FILE__ ) . '/inc/bs-conversion.php' );
321
-				add_filter( 'admin_body_class', array( $this, 'add_bs5_admin_body_class' ), 99, 1 );
322
-				add_filter( 'body_class', array( $this, 'add_bs5_body_class' ) );
323
-			}
324
-
325
-			/**
326
-			 * Maybe load CSS
327
-			 *
328
-			 * We load super early in case there is a theme version that might change the colors
329
-			 */
330
-			if ( $this->settings['css'] ) {
331
-				$priority = $this->is_bs3_compat() ? 100 : 1;
317
+            $aui_bs5 = $this->settings['bs_ver'] === '5';
318
+
319
+            if ( $aui_bs5 ) {
320
+                include_once( dirname( __FILE__ ) . '/inc/bs-conversion.php' );
321
+                add_filter( 'admin_body_class', array( $this, 'add_bs5_admin_body_class' ), 99, 1 );
322
+                add_filter( 'body_class', array( $this, 'add_bs5_body_class' ) );
323
+            }
324
+
325
+            /**
326
+             * Maybe load CSS
327
+             *
328
+             * We load super early in case there is a theme version that might change the colors
329
+             */
330
+            if ( $this->settings['css'] ) {
331
+                $priority = $this->is_bs3_compat() ? 100 : 1;
332 332
                 $priority = $aui_bs5 ? 10 : $priority;
333
-				add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_style' ), $priority );
334
-			}
335
-			if ( $this->settings['css_backend'] && $this->load_admin_scripts() ) {
336
-				add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_style' ), 1 );
337
-			}
338
-
339
-			// maybe load JS
340
-			if ( $this->settings['js'] ) {
341
-				$priority = $this->is_bs3_compat() ? 100 : 1;
342
-				add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ), $priority );
343
-			}
344
-			if ( $this->settings['js_backend'] && $this->load_admin_scripts() ) {
345
-				add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_scripts' ), 1 );
346
-			}
347
-
348
-			// Maybe set the HTML font size
349
-			if ( $this->settings['html_font_size'] ) {
350
-				add_action( 'wp_footer', array( $this, 'html_font_size' ), 10 );
351
-			}
352
-
353
-			// Maybe show backend style error
354
-			if( $this->settings['css_backend'] != 'compatibility' || $this->settings['js_backend'] != 'core-popper' ){
355
-				add_action( 'admin_notices', array( $this, 'show_admin_style_notice' ) );
356
-			}
357
-
358
-		}
359
-
360
-		/**
361
-		 * Show admin notice if backend scripts not loaded.
362
-		 */
363
-		public function show_admin_style_notice(){
364
-			$fix_url = admin_url("options-general.php?page=ayecode-ui-settings&aui-fix-admin=true&nonce=".wp_create_nonce('aui-fix-admin'));
365
-			$button = '<a href="'.esc_url($fix_url).'" class="button-primary">Fix Now</a>';
366
-			$message = __( '<b>Style Issue:</b> AyeCode UI is disable or set wrong.')." " .$button;
367
-			echo '<div class="notice notice-error aui-settings-error-notice"><p>'. wp_kses_post( $message ).'</p></div>';
368
-		}
369
-
370
-		/**
371
-		 * Check if we should load the admin scripts or not.
372
-		 *
373
-		 * @return bool
374
-		 */
375
-		public function load_admin_scripts(){
376
-			$result = true;
377
-
378
-			// check if specifically disabled
379
-			if(!empty($this->settings['disable_admin'])){
380
-				$url_parts = explode("\n",$this->settings['disable_admin']);
381
-				foreach($url_parts as $part){
382
-					if( strpos($_SERVER['REQUEST_URI'], trim($part)) !== false ){
383
-						return false; // return early, no point checking further
384
-					}
385
-				}
386
-			}
387
-
388
-			return $result;
389
-		}
390
-
391
-		/**
392
-		 * Add a html font size to the footer.
393
-		 */
394
-		public function html_font_size(){
395
-			$this->settings = $this->get_settings();
396
-			echo "<style>html{font-size:".absint($this->settings['html_font_size'])."px;}</style>";
397
-		}
398
-
399
-		/**
400
-		 * Check if the current admin screen should load scripts.
401
-		 *
402
-		 * @return bool
403
-		 */
404
-		public function is_aui_screen(){
333
+                add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_style' ), $priority );
334
+            }
335
+            if ( $this->settings['css_backend'] && $this->load_admin_scripts() ) {
336
+                add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_style' ), 1 );
337
+            }
338
+
339
+            // maybe load JS
340
+            if ( $this->settings['js'] ) {
341
+                $priority = $this->is_bs3_compat() ? 100 : 1;
342
+                add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ), $priority );
343
+            }
344
+            if ( $this->settings['js_backend'] && $this->load_admin_scripts() ) {
345
+                add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_scripts' ), 1 );
346
+            }
347
+
348
+            // Maybe set the HTML font size
349
+            if ( $this->settings['html_font_size'] ) {
350
+                add_action( 'wp_footer', array( $this, 'html_font_size' ), 10 );
351
+            }
352
+
353
+            // Maybe show backend style error
354
+            if( $this->settings['css_backend'] != 'compatibility' || $this->settings['js_backend'] != 'core-popper' ){
355
+                add_action( 'admin_notices', array( $this, 'show_admin_style_notice' ) );
356
+            }
357
+
358
+        }
359
+
360
+        /**
361
+         * Show admin notice if backend scripts not loaded.
362
+         */
363
+        public function show_admin_style_notice(){
364
+            $fix_url = admin_url("options-general.php?page=ayecode-ui-settings&aui-fix-admin=true&nonce=".wp_create_nonce('aui-fix-admin'));
365
+            $button = '<a href="'.esc_url($fix_url).'" class="button-primary">Fix Now</a>';
366
+            $message = __( '<b>Style Issue:</b> AyeCode UI is disable or set wrong.')." " .$button;
367
+            echo '<div class="notice notice-error aui-settings-error-notice"><p>'. wp_kses_post( $message ).'</p></div>';
368
+        }
369
+
370
+        /**
371
+         * Check if we should load the admin scripts or not.
372
+         *
373
+         * @return bool
374
+         */
375
+        public function load_admin_scripts(){
376
+            $result = true;
377
+
378
+            // check if specifically disabled
379
+            if(!empty($this->settings['disable_admin'])){
380
+                $url_parts = explode("\n",$this->settings['disable_admin']);
381
+                foreach($url_parts as $part){
382
+                    if( strpos($_SERVER['REQUEST_URI'], trim($part)) !== false ){
383
+                        return false; // return early, no point checking further
384
+                    }
385
+                }
386
+            }
387
+
388
+            return $result;
389
+        }
390
+
391
+        /**
392
+         * Add a html font size to the footer.
393
+         */
394
+        public function html_font_size(){
395
+            $this->settings = $this->get_settings();
396
+            echo "<style>html{font-size:".absint($this->settings['html_font_size'])."px;}</style>";
397
+        }
398
+
399
+        /**
400
+         * Check if the current admin screen should load scripts.
401
+         *
402
+         * @return bool
403
+         */
404
+        public function is_aui_screen(){
405 405
 //			echo '###';exit;
406
-			$load = false;
407
-			// check if we should load or not
408
-			if ( is_admin() ) {
409
-				// Only enable on set pages
410
-				$aui_screens = array(
411
-					'page',
406
+            $load = false;
407
+            // check if we should load or not
408
+            if ( is_admin() ) {
409
+                // Only enable on set pages
410
+                $aui_screens = array(
411
+                    'page',
412 412
                     //'docs',
413
-					'post',
414
-					'settings_page_ayecode-ui-settings',
415
-					'appearance_page_gutenberg-widgets',
416
-					'widgets',
417
-					'ayecode-ui-settings',
418
-					'site-editor'
419
-				);
420
-				$screen_ids = apply_filters( 'aui_screen_ids', $aui_screens );
413
+                    'post',
414
+                    'settings_page_ayecode-ui-settings',
415
+                    'appearance_page_gutenberg-widgets',
416
+                    'widgets',
417
+                    'ayecode-ui-settings',
418
+                    'site-editor'
419
+                );
420
+                $screen_ids = apply_filters( 'aui_screen_ids', $aui_screens );
421 421
 
422
-				$screen = get_current_screen();
422
+                $screen = get_current_screen();
423 423
 
424 424
 //				echo '###'.$screen->id;
425 425
 
426
-				// check if we are on a AUI screen
427
-				if ( $screen && in_array( $screen->id, $screen_ids ) ) {
428
-					$load = true;
429
-				}
426
+                // check if we are on a AUI screen
427
+                if ( $screen && in_array( $screen->id, $screen_ids ) ) {
428
+                    $load = true;
429
+                }
430 430
 
431
-				//load for widget previews in WP 5.8
432
-				if( !empty($_REQUEST['legacy-widget-preview'])){
433
-					$load = true;
434
-				}
435
-			}
431
+                //load for widget previews in WP 5.8
432
+                if( !empty($_REQUEST['legacy-widget-preview'])){
433
+                    $load = true;
434
+                }
435
+            }
436 436
 
437 437
 
438 438
 
439
-			return apply_filters( 'aui_load_on_admin' , $load );
440
-		}
439
+            return apply_filters( 'aui_load_on_admin' , $load );
440
+        }
441 441
 
442
-		/**
443
-		 * Check if the current theme is a block theme.
444
-		 *
445
-		 * @return bool
446
-		 */
447
-		public static function is_block_theme() {
448
-			if ( function_exists( 'wp_is_block_theme' && wp_is_block_theme() ) ) {
449
-				return true;
450
-			}
442
+        /**
443
+         * Check if the current theme is a block theme.
444
+         *
445
+         * @return bool
446
+         */
447
+        public static function is_block_theme() {
448
+            if ( function_exists( 'wp_is_block_theme' && wp_is_block_theme() ) ) {
449
+                return true;
450
+            }
451 451
 
452
-			return false;
453
-		}
452
+            return false;
453
+        }
454 454
 
455
-		/**
456
-		 * Adds the styles.
457
-		 */
458
-		public function enqueue_style() {
455
+        /**
456
+         * Adds the styles.
457
+         */
458
+        public function enqueue_style() {
459 459
             global $aui_bs5;
460 460
 
461 461
             $load_fse = false;
462 462
 
463
-			if ( is_admin() && ! $this->is_aui_screen() ) {
464
-				// Don't add wp-admin scripts if not requested to.
465
-			} else {
466
-				$css_setting = current_action() == 'wp_enqueue_scripts' ? 'css' : 'css_backend';
467
-				$rtl = is_rtl() && ! $aui_bs5 ? '-rtl' : '';
463
+            if ( is_admin() && ! $this->is_aui_screen() ) {
464
+                // Don't add wp-admin scripts if not requested to.
465
+            } else {
466
+                $css_setting = current_action() == 'wp_enqueue_scripts' ? 'css' : 'css_backend';
467
+                $rtl = is_rtl() && ! $aui_bs5 ? '-rtl' : '';
468 468
                 $bs_ver = $this->settings['bs_ver'] == '5' ? '-v5' : '';
469 469
 
470
-				if ( $this->settings[ $css_setting ] ) {
471
-					$compatibility = $this->settings[$css_setting]=='core' ? false : true;
472
-					$url = $this->settings[$css_setting]=='core' ? $this->url.'assets'.$bs_ver.'/css/ayecode-ui'.$rtl.'.css' : $this->url.'assets'.$bs_ver.'/css/ayecode-ui-compatibility'.$rtl.'.css';
470
+                if ( $this->settings[ $css_setting ] ) {
471
+                    $compatibility = $this->settings[$css_setting]=='core' ? false : true;
472
+                    $url = $this->settings[$css_setting]=='core' ? $this->url.'assets'.$bs_ver.'/css/ayecode-ui'.$rtl.'.css' : $this->url.'assets'.$bs_ver.'/css/ayecode-ui-compatibility'.$rtl.'.css';
473 473
 
474
-					wp_register_style( 'ayecode-ui', $url, array(), $this->version );
475
-					wp_enqueue_style( 'ayecode-ui' );
474
+                    wp_register_style( 'ayecode-ui', $url, array(), $this->version );
475
+                    wp_enqueue_style( 'ayecode-ui' );
476 476
 
477
-					if ( is_admin() && ( !empty($_REQUEST['postType']) || self::is_block_editor() ) && ( defined( 'BLOCKSTRAP_VERSION' ) || defined( 'AUI_FSE' ) )  ) {
478
-						$url = $this->url.'assets'.$bs_ver.'/css/ayecode-ui-fse.css';
479
-						wp_register_style( 'ayecode-ui-fse', $url, array(), $this->version );
480
-						wp_enqueue_style( 'ayecode-ui-fse' );
481
-						$load_fse = true;
482
-					}
477
+                    if ( is_admin() && ( !empty($_REQUEST['postType']) || self::is_block_editor() ) && ( defined( 'BLOCKSTRAP_VERSION' ) || defined( 'AUI_FSE' ) )  ) {
478
+                        $url = $this->url.'assets'.$bs_ver.'/css/ayecode-ui-fse.css';
479
+                        wp_register_style( 'ayecode-ui-fse', $url, array(), $this->version );
480
+                        wp_enqueue_style( 'ayecode-ui-fse' );
481
+                        $load_fse = true;
482
+                    }
483 483
 
484
-					// flatpickr
485
-					wp_register_style( 'flatpickr', $this->url.'assets'.$bs_ver.'/css/flatpickr.min.css', array(), $this->version );
484
+                    // flatpickr
485
+                    wp_register_style( 'flatpickr', $this->url.'assets'.$bs_ver.'/css/flatpickr.min.css', array(), $this->version );
486 486
 
487
-					// fix some wp-admin issues
488
-					if(is_admin()){
489
-						$custom_css = "
487
+                    // fix some wp-admin issues
488
+                    if(is_admin()){
489
+                        $custom_css = "
490 490
                 body{
491 491
                     background-color: #f1f1f1;
492 492
                     font-family: -apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,Oxygen-Sans,Ubuntu,Cantarell,\"Helvetica Neue\",sans-serif;
@@ -526,63 +526,63 @@  discard block
 block discarded – undo
526 526
 				}
527 527
                 ";
528 528
 
529
-						// @todo, remove once fixed :: fix for this bug https://github.com/WordPress/gutenberg/issues/14377
530
-						$custom_css .= "
529
+                        // @todo, remove once fixed :: fix for this bug https://github.com/WordPress/gutenberg/issues/14377
530
+                        $custom_css .= "
531 531
 						.edit-post-sidebar input[type=color].components-text-control__input{
532 532
 						    padding: 0;
533 533
 						}
534 534
 					";
535
-						wp_add_inline_style( 'ayecode-ui', $custom_css );
536
-					}
537
-
538
-					// custom changes
539
-					if ( $load_fse ) {
540
-						wp_add_inline_style( 'ayecode-ui-fse', self::custom_css($compatibility, true) );
541
-					}else{
542
-						wp_add_inline_style( 'ayecode-ui', self::custom_css($compatibility) );
543
-					}
544
-				}
545
-			}
546
-		}
547
-
548
-		/**
549
-		 * Get inline script used if bootstrap enqueued
550
-		 *
551
-		 * If this remains small then its best to use this than to add another JS file.
552
-		 */
553
-		public function inline_script() {
554
-            global $aui_bs5;
555
-			// Flatpickr calendar locale
556
-			$flatpickr_locale = self::flatpickr_locale();
535
+                        wp_add_inline_style( 'ayecode-ui', $custom_css );
536
+                    }
557 537
 
558
-			ob_start();
559
-			if ( $aui_bs5 ) {
560
-				include_once( dirname( __FILE__ ) . '/inc/bs5-js.php' );
561
-			}else{
562
-				include_once( dirname( __FILE__ ) . '/inc/bs4-js.php' );
538
+                    // custom changes
539
+                    if ( $load_fse ) {
540
+                        wp_add_inline_style( 'ayecode-ui-fse', self::custom_css($compatibility, true) );
541
+                    }else{
542
+                        wp_add_inline_style( 'ayecode-ui', self::custom_css($compatibility) );
543
+                    }
544
+                }
563 545
             }
546
+        }
564 547
 
565
-			$output = ob_get_clean();
548
+        /**
549
+         * Get inline script used if bootstrap enqueued
550
+         *
551
+         * If this remains small then its best to use this than to add another JS file.
552
+         */
553
+        public function inline_script() {
554
+            global $aui_bs5;
555
+            // Flatpickr calendar locale
556
+            $flatpickr_locale = self::flatpickr_locale();
557
+
558
+            ob_start();
559
+            if ( $aui_bs5 ) {
560
+                include_once( dirname( __FILE__ ) . '/inc/bs5-js.php' );
561
+            }else{
562
+                include_once( dirname( __FILE__ ) . '/inc/bs4-js.php' );
563
+            }
566 564
 
567
-			/*
565
+            $output = ob_get_clean();
566
+
567
+            /*
568 568
 			 * We only add the <script> tags for code highlighting, so we strip them from the output.
569 569
 			 */
570
-			return str_replace( array(
571
-				'<script>',
572
-				'</script>'
573
-			), '', self::minify_js($output) );
574
-		}
575
-
576
-
577
-		/**
578
-		 * JS to help with conflict issues with other plugins and themes using bootstrap v3.
579
-		 *
580
-		 * @TODO we may need this when other conflicts arrise.
581
-		 * @return mixed
582
-		 */
583
-		public static function bs3_compat_js() {
584
-			ob_start();
585
-			?>
570
+            return str_replace( array(
571
+                '<script>',
572
+                '</script>'
573
+            ), '', self::minify_js($output) );
574
+        }
575
+
576
+
577
+        /**
578
+         * JS to help with conflict issues with other plugins and themes using bootstrap v3.
579
+         *
580
+         * @TODO we may need this when other conflicts arrise.
581
+         * @return mixed
582
+         */
583
+        public static function bs3_compat_js() {
584
+            ob_start();
585
+            ?>
586 586
             <script>
587 587
 				<?php if( defined( 'FUSION_BUILDER_VERSION' ) ){ ?>
588 588
                 /* With Avada builder */
@@ -590,20 +590,20 @@  discard block
 block discarded – undo
590 590
 				<?php } ?>
591 591
             </script>
592 592
 			<?php
593
-			return str_replace( array(
594
-				'<script>',
595
-				'</script>'
596
-			), '', ob_get_clean());
597
-		}
598
-
599
-		/**
600
-		 * Get inline script used if bootstrap file browser enqueued.
601
-		 *
602
-		 * If this remains small then its best to use this than to add another JS file.
603
-		 */
604
-		public function inline_script_file_browser(){
605
-			ob_start();
606
-			?>
593
+            return str_replace( array(
594
+                '<script>',
595
+                '</script>'
596
+            ), '', ob_get_clean());
597
+        }
598
+
599
+        /**
600
+         * Get inline script used if bootstrap file browser enqueued.
601
+         *
602
+         * If this remains small then its best to use this than to add another JS file.
603
+         */
604
+        public function inline_script_file_browser(){
605
+            ob_start();
606
+            ?>
607 607
             <script>
608 608
                 // run on doc ready
609 609
                 jQuery(document).ready(function () {
@@ -611,314 +611,314 @@  discard block
 block discarded – undo
611 611
                 });
612 612
             </script>
613 613
 			<?php
614
-			$output = ob_get_clean();
614
+            $output = ob_get_clean();
615 615
 
616
-			/*
616
+            /*
617 617
 			 * We only add the <script> tags for code highlighting, so we strip them from the output.
618 618
 			 */
619
-			return str_replace( array(
620
-				'<script>',
621
-				'</script>'
622
-			), '', $output );
623
-		}
624
-
625
-		/**
626
-		 * Adds the Font Awesome JS.
627
-		 */
628
-		public function enqueue_scripts() {
629
-			if( is_admin() && !$this->is_aui_screen()){
630
-				// Don't add wp-admin scripts if not requested to.
631
-			} else {
632
-				$js_setting = current_action() == 'wp_enqueue_scripts' ? 'js' : 'js_backend';
633
-
634
-				$bs_ver = $this->settings['bs_ver'] == '5' ? '-v5' : '';
635
-
636
-				// select2
637
-				wp_register_script( 'select2', $this->url . 'assets/js/select2.min.js', array( 'jquery' ), $this->select2_version );
638
-
639
-				// flatpickr
640
-				wp_register_script( 'flatpickr', $this->url . 'assets/js/flatpickr.min.js', array(), $this->version );
641
-
642
-				// iconpicker
643
-				if ( defined( 'FAS_ICONPICKER_JS_URL' ) ) {
644
-					wp_register_script( 'iconpicker', FAS_ICONPICKER_JS_URL, array(), $this->version );
645
-				}else{
646
-					wp_register_script( 'iconpicker', $this->url . 'assets/js/fa-iconpicker.min.js', array(), $this->version );
647
-				}
619
+            return str_replace( array(
620
+                '<script>',
621
+                '</script>'
622
+            ), '', $output );
623
+        }
648 624
 
649
-				// Bootstrap file browser
650
-				wp_register_script( 'aui-custom-file-input', $url = $this->url . 'assets/js/bs-custom-file-input.min.js', array( 'jquery' ), $this->select2_version );
651
-				wp_add_inline_script( 'aui-custom-file-input', $this->inline_script_file_browser() );
625
+        /**
626
+         * Adds the Font Awesome JS.
627
+         */
628
+        public function enqueue_scripts() {
629
+            if( is_admin() && !$this->is_aui_screen()){
630
+                // Don't add wp-admin scripts if not requested to.
631
+            } else {
632
+                $js_setting = current_action() == 'wp_enqueue_scripts' ? 'js' : 'js_backend';
652 633
 
653
-				$load_inline = false;
634
+                $bs_ver = $this->settings['bs_ver'] == '5' ? '-v5' : '';
654 635
 
655
-				// Load select2 only when required.
656
-				if ( $this->force_load_select2() ) {
657
-					$dependency = array( 'select2', 'jquery' );
658
-				} else {
659
-					$dependency = array( 'jquery' );
660
-				}
636
+                // select2
637
+                wp_register_script( 'select2', $this->url . 'assets/js/select2.min.js', array( 'jquery' ), $this->select2_version );
661 638
 
662
-				if ( $this->settings[ $js_setting ] == 'core-popper' ) {
663
-					// Bootstrap bundle
664
-					$url = $this->url . 'assets' . $bs_ver . '/js/bootstrap.bundle.min.js';
665
-					wp_register_script( 'bootstrap-js-bundle', $url, $dependency, $this->version, $this->is_bs3_compat() );
666
-
667
-					// If in admin then add to footer for compatibility.
668
-					is_admin() ? wp_enqueue_script( 'bootstrap-js-bundle', '', null, null, true ) : wp_enqueue_script( 'bootstrap-js-bundle' );
669
-
670
-					$script = $this->inline_script();
671
-					wp_add_inline_script( 'bootstrap-js-bundle', $script );
672
-				} elseif ( $this->settings[ $js_setting ] == 'popper' ) {
673
-					$url = $this->url . 'assets/js/popper.min.js'; // @todo we need to update this to bs5
674
-					wp_register_script( 'bootstrap-js-popper', $url, $dependency, $this->version );
675
-					wp_enqueue_script( 'bootstrap-js-popper' );
676
-					$load_inline = true;
677
-				} else {
678
-					$load_inline = true;
679
-				}
639
+                // flatpickr
640
+                wp_register_script( 'flatpickr', $this->url . 'assets/js/flatpickr.min.js', array(), $this->version );
641
+
642
+                // iconpicker
643
+                if ( defined( 'FAS_ICONPICKER_JS_URL' ) ) {
644
+                    wp_register_script( 'iconpicker', FAS_ICONPICKER_JS_URL, array(), $this->version );
645
+                }else{
646
+                    wp_register_script( 'iconpicker', $this->url . 'assets/js/fa-iconpicker.min.js', array(), $this->version );
647
+                }
680 648
 
681
-				// Load needed inline scripts by faking the loading of a script if the main script is not being loaded
682
-				if ( $load_inline ) {
683
-					wp_register_script( 'bootstrap-dummy', '', $dependency );
684
-					wp_enqueue_script( 'bootstrap-dummy' );
649
+                // Bootstrap file browser
650
+                wp_register_script( 'aui-custom-file-input', $url = $this->url . 'assets/js/bs-custom-file-input.min.js', array( 'jquery' ), $this->select2_version );
651
+                wp_add_inline_script( 'aui-custom-file-input', $this->inline_script_file_browser() );
685 652
 
686
-					$script = $this->inline_script();
687
-					wp_add_inline_script( 'bootstrap-dummy', $script );
688
-				}
689
-			}
690
-		}
691
-
692
-		/**
693
-		 * Enqueue select2 if called.
694
-		 *
695
-		 * @since 0.2.29
696
-		 */
697
-		public function force_load_select2() {
698
-			global $aui_select2_enqueued;
699
-
700
-			$conditional_select2 = apply_filters( 'aui_is_conditional_select2', true );
701
-
702
-			if ( $conditional_select2 !== true ) {
703
-				return true;
704
-			}
705
-
706
-			$load = is_admin() && ! $aui_select2_enqueued;
707
-
708
-			return apply_filters( 'aui_force_load_select2', $load );
709
-		}
710
-
711
-		/**
712
-		 * Enqueue select2 if called.
713
-		 *
714
-		 * @since 0.2.29
715
-		 */
716
-		public function enqueue_select2() {
717
-			wp_enqueue_script( 'select2' );
718
-		}
719
-
720
-		/**
721
-		 * Enqueue flatpickr if called.
722
-		 */
723
-		public function enqueue_flatpickr(){
724
-			wp_enqueue_style( 'flatpickr' );
725
-			wp_enqueue_script( 'flatpickr' );
726
-		}
727
-
728
-		/**
729
-		 * Enqueue iconpicker if called.
730
-		 */
731
-		public function enqueue_iconpicker(){
732
-			wp_enqueue_style( 'iconpicker' );
733
-			wp_enqueue_script( 'iconpicker' );
734
-		}
735
-
736
-		/**
737
-		 * Get the url path to the current folder.
738
-		 *
739
-		 * @return string
740
-		 */
741
-		public function get_url() {
742
-			$content_dir = wp_normalize_path( untrailingslashit( WP_CONTENT_DIR ) );
743
-			$content_url = untrailingslashit( WP_CONTENT_URL );
744
-
745
-			// Replace http:// to https://.
746
-			if ( strpos( $content_url, 'http://' ) === 0 && strpos( plugins_url(), 'https://' ) === 0 ) {
747
-				$content_url = str_replace( 'http://', 'https://', $content_url );
748
-			}
749
-
750
-			// Check if we are inside a plugin
751
-			$file_dir = str_replace( "/includes", "", wp_normalize_path( dirname( __FILE__ ) ) );
752
-			$url = str_replace( $content_dir, $content_url, $file_dir );
753
-
754
-			return trailingslashit( $url );
755
-		}
756
-
757
-		/**
758
-		 * Get the url path to the current folder.
759
-		 *
760
-		 * @return string
761
-		 */
762
-		public function get_url_old() {
763
-
764
-			$url = '';
765
-			// check if we are inside a plugin
766
-			$file_dir = str_replace( "/includes","", wp_normalize_path( dirname( __FILE__ ) ) );
767
-
768
-			// add check in-case user has changed wp-content dir name.
769
-			$wp_content_folder_name = basename(WP_CONTENT_DIR);
770
-			$dir_parts = explode("/$wp_content_folder_name/",$file_dir);
771
-			$url_parts = explode("/$wp_content_folder_name/",plugins_url());
772
-
773
-			if(!empty($url_parts[0]) && !empty($dir_parts[1])){
774
-				$url = trailingslashit( $url_parts[0]."/$wp_content_folder_name/".$dir_parts[1] );
775
-			}
776
-
777
-			return $url;
778
-		}
779
-
780
-		/**
781
-		 * Register the database settings with WordPress.
782
-		 */
783
-		public function register_settings() {
784
-			register_setting( 'ayecode-ui-settings', 'ayecode-ui-settings' );
785
-		}
786
-
787
-		/**
788
-		 * Add the WordPress settings menu item.
789
-		 * @since 1.0.10 Calling function name direct will fail theme check so we don't.
790
-		 */
791
-		public function menu_item() {
792
-			$menu_function = 'add' . '_' . 'options' . '_' . 'page'; // won't pass theme check if function name present in theme
793
-			call_user_func( $menu_function, $this->name, $this->name, 'manage_options', 'ayecode-ui-settings', array(
794
-				$this,
795
-				'settings_page'
796
-			) );
797
-		}
798
-
799
-		/**
800
-		 * Get a list of themes and their default JS settings.
801
-		 *
802
-		 * @return array
803
-		 */
804
-		public function theme_js_settings(){
805
-			return array(
806
-				'ayetheme' => 'popper',
807
-				'listimia' => 'required',
808
-				'listimia_backend' => 'core-popper',
809
-				//'avada'    => 'required', // removed as we now add compatibility
810
-			);
811
-		}
812
-
813
-		/**
653
+                $load_inline = false;
654
+
655
+                // Load select2 only when required.
656
+                if ( $this->force_load_select2() ) {
657
+                    $dependency = array( 'select2', 'jquery' );
658
+                } else {
659
+                    $dependency = array( 'jquery' );
660
+                }
661
+
662
+                if ( $this->settings[ $js_setting ] == 'core-popper' ) {
663
+                    // Bootstrap bundle
664
+                    $url = $this->url . 'assets' . $bs_ver . '/js/bootstrap.bundle.min.js';
665
+                    wp_register_script( 'bootstrap-js-bundle', $url, $dependency, $this->version, $this->is_bs3_compat() );
666
+
667
+                    // If in admin then add to footer for compatibility.
668
+                    is_admin() ? wp_enqueue_script( 'bootstrap-js-bundle', '', null, null, true ) : wp_enqueue_script( 'bootstrap-js-bundle' );
669
+
670
+                    $script = $this->inline_script();
671
+                    wp_add_inline_script( 'bootstrap-js-bundle', $script );
672
+                } elseif ( $this->settings[ $js_setting ] == 'popper' ) {
673
+                    $url = $this->url . 'assets/js/popper.min.js'; // @todo we need to update this to bs5
674
+                    wp_register_script( 'bootstrap-js-popper', $url, $dependency, $this->version );
675
+                    wp_enqueue_script( 'bootstrap-js-popper' );
676
+                    $load_inline = true;
677
+                } else {
678
+                    $load_inline = true;
679
+                }
680
+
681
+                // Load needed inline scripts by faking the loading of a script if the main script is not being loaded
682
+                if ( $load_inline ) {
683
+                    wp_register_script( 'bootstrap-dummy', '', $dependency );
684
+                    wp_enqueue_script( 'bootstrap-dummy' );
685
+
686
+                    $script = $this->inline_script();
687
+                    wp_add_inline_script( 'bootstrap-dummy', $script );
688
+                }
689
+            }
690
+        }
691
+
692
+        /**
693
+         * Enqueue select2 if called.
694
+         *
695
+         * @since 0.2.29
696
+         */
697
+        public function force_load_select2() {
698
+            global $aui_select2_enqueued;
699
+
700
+            $conditional_select2 = apply_filters( 'aui_is_conditional_select2', true );
701
+
702
+            if ( $conditional_select2 !== true ) {
703
+                return true;
704
+            }
705
+
706
+            $load = is_admin() && ! $aui_select2_enqueued;
707
+
708
+            return apply_filters( 'aui_force_load_select2', $load );
709
+        }
710
+
711
+        /**
712
+         * Enqueue select2 if called.
713
+         *
714
+         * @since 0.2.29
715
+         */
716
+        public function enqueue_select2() {
717
+            wp_enqueue_script( 'select2' );
718
+        }
719
+
720
+        /**
721
+         * Enqueue flatpickr if called.
722
+         */
723
+        public function enqueue_flatpickr(){
724
+            wp_enqueue_style( 'flatpickr' );
725
+            wp_enqueue_script( 'flatpickr' );
726
+        }
727
+
728
+        /**
729
+         * Enqueue iconpicker if called.
730
+         */
731
+        public function enqueue_iconpicker(){
732
+            wp_enqueue_style( 'iconpicker' );
733
+            wp_enqueue_script( 'iconpicker' );
734
+        }
735
+
736
+        /**
737
+         * Get the url path to the current folder.
738
+         *
739
+         * @return string
740
+         */
741
+        public function get_url() {
742
+            $content_dir = wp_normalize_path( untrailingslashit( WP_CONTENT_DIR ) );
743
+            $content_url = untrailingslashit( WP_CONTENT_URL );
744
+
745
+            // Replace http:// to https://.
746
+            if ( strpos( $content_url, 'http://' ) === 0 && strpos( plugins_url(), 'https://' ) === 0 ) {
747
+                $content_url = str_replace( 'http://', 'https://', $content_url );
748
+            }
749
+
750
+            // Check if we are inside a plugin
751
+            $file_dir = str_replace( "/includes", "", wp_normalize_path( dirname( __FILE__ ) ) );
752
+            $url = str_replace( $content_dir, $content_url, $file_dir );
753
+
754
+            return trailingslashit( $url );
755
+        }
756
+
757
+        /**
758
+         * Get the url path to the current folder.
759
+         *
760
+         * @return string
761
+         */
762
+        public function get_url_old() {
763
+
764
+            $url = '';
765
+            // check if we are inside a plugin
766
+            $file_dir = str_replace( "/includes","", wp_normalize_path( dirname( __FILE__ ) ) );
767
+
768
+            // add check in-case user has changed wp-content dir name.
769
+            $wp_content_folder_name = basename(WP_CONTENT_DIR);
770
+            $dir_parts = explode("/$wp_content_folder_name/",$file_dir);
771
+            $url_parts = explode("/$wp_content_folder_name/",plugins_url());
772
+
773
+            if(!empty($url_parts[0]) && !empty($dir_parts[1])){
774
+                $url = trailingslashit( $url_parts[0]."/$wp_content_folder_name/".$dir_parts[1] );
775
+            }
776
+
777
+            return $url;
778
+        }
779
+
780
+        /**
781
+         * Register the database settings with WordPress.
782
+         */
783
+        public function register_settings() {
784
+            register_setting( 'ayecode-ui-settings', 'ayecode-ui-settings' );
785
+        }
786
+
787
+        /**
788
+         * Add the WordPress settings menu item.
789
+         * @since 1.0.10 Calling function name direct will fail theme check so we don't.
790
+         */
791
+        public function menu_item() {
792
+            $menu_function = 'add' . '_' . 'options' . '_' . 'page'; // won't pass theme check if function name present in theme
793
+            call_user_func( $menu_function, $this->name, $this->name, 'manage_options', 'ayecode-ui-settings', array(
794
+                $this,
795
+                'settings_page'
796
+            ) );
797
+        }
798
+
799
+        /**
800
+         * Get a list of themes and their default JS settings.
801
+         *
802
+         * @return array
803
+         */
804
+        public function theme_js_settings(){
805
+            return array(
806
+                'ayetheme' => 'popper',
807
+                'listimia' => 'required',
808
+                'listimia_backend' => 'core-popper',
809
+                //'avada'    => 'required', // removed as we now add compatibility
810
+            );
811
+        }
812
+
813
+        /**
814 814
          * Get the date the site was installed.
815 815
          *
816
-		 * @return false|string
817
-		 */
816
+         * @return false|string
817
+         */
818 818
         public function get_site_install_date() {
819
-	        global $wpdb; // This gives you access to the WordPress database object
819
+            global $wpdb; // This gives you access to the WordPress database object
820
+
821
+            // Prepare the SQL query to get the oldest registration date
822
+            $query = "SELECT MIN(user_registered) AS oldest_registration_date FROM {$wpdb->users}";
820 823
 
821
-	        // Prepare the SQL query to get the oldest registration date
822
-	        $query = "SELECT MIN(user_registered) AS oldest_registration_date FROM {$wpdb->users}";
824
+            // Execute the query
825
+            $date = $wpdb->get_var( $query ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
823 826
 
824
-	        // Execute the query
825
-	        $date = $wpdb->get_var( $query ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
827
+            return $date ? $date : false;
828
+        }
826 829
 
827
-	        return $date ? $date : false;
830
+        /**
831
+         * Show admin notice if backend scripts not loaded.
832
+         */
833
+        public function show_admin_version_notice(){
834
+            $fix_url = admin_url("options-general.php?page=ayecode-ui-settings" );
835
+            $button = '<a href="'.esc_url($fix_url).'" class="button-primary">View Settings</a>';
836
+            $message = __( '<b>Style Issue:</b> AyeCode UI has changed its default version from v4 to v5, if you notice unwanted style changes, please revert to v4 (saving the settings page will remove this notice)')." " .$button;
837
+            echo '<div class="notice notice-error aui-settings-error-notice"><p>'. wp_kses_post( $message ).'</p></div>';
828 838
         }
829 839
 
830
-		/**
831
-		 * Show admin notice if backend scripts not loaded.
832
-		 */
833
-		public function show_admin_version_notice(){
834
-			$fix_url = admin_url("options-general.php?page=ayecode-ui-settings" );
835
-			$button = '<a href="'.esc_url($fix_url).'" class="button-primary">View Settings</a>';
836
-			$message = __( '<b>Style Issue:</b> AyeCode UI has changed its default version from v4 to v5, if you notice unwanted style changes, please revert to v4 (saving the settings page will remove this notice)')." " .$button;
837
-			echo '<div class="notice notice-error aui-settings-error-notice"><p>'. wp_kses_post( $message ).'</p></div>';
838
-		}
839
-
840
-		/**
841
-		 * Get the current Font Awesome output settings.
842
-		 *
843
-		 * @return array The array of settings.
844
-		 */
845
-		public function get_settings() {
846
-
847
-			$db_settings = get_option( 'ayecode-ui-settings' );
840
+        /**
841
+         * Get the current Font Awesome output settings.
842
+         *
843
+         * @return array The array of settings.
844
+         */
845
+        public function get_settings() {
846
+
847
+            $db_settings = get_option( 'ayecode-ui-settings' );
848 848
 
849 849
             // Maybe show default version notice
850
-			$site_install_date = new DateTime( self::get_site_install_date() );
851
-			$switch_over_date = new DateTime("2024-02-01");
852
-			if ( empty( $db_settings ) && $site_install_date < $switch_over_date ) {
853
-				add_action( 'admin_notices', array( $this, 'show_admin_version_notice' ) );
854
-			}
855
-
856
-			$js_default = 'core-popper';
857
-			$js_default_backend = $js_default;
858
-
859
-			// maybe set defaults (if no settings set)
860
-			if(empty($db_settings)){
861
-				$active_theme = strtolower( get_template() ); // active parent theme.
862
-				$theme_js_settings = self::theme_js_settings();
863
-				if(isset($theme_js_settings[$active_theme])){
864
-					$js_default = $theme_js_settings[$active_theme];
865
-					$js_default_backend = isset($theme_js_settings[$active_theme."_backend"]) ? $theme_js_settings[$active_theme."_backend"] : $js_default;
866
-				}
867
-			}
850
+            $site_install_date = new DateTime( self::get_site_install_date() );
851
+            $switch_over_date = new DateTime("2024-02-01");
852
+            if ( empty( $db_settings ) && $site_install_date < $switch_over_date ) {
853
+                add_action( 'admin_notices', array( $this, 'show_admin_version_notice' ) );
854
+            }
868 855
 
869
-			/**
870
-			 * Filter the default settings.
871
-			 */
872
-			$defaults = apply_filters( 'ayecode-ui-default-settings', array(
873
-				'css'            => 'compatibility', // core, compatibility
874
-				'js'             => $js_default, // js to load, core-popper, popper
875
-				'html_font_size' => '16', // js to load, core-popper, popper
876
-				'css_backend'    => 'compatibility', // core, compatibility
877
-				'js_backend'     => $js_default_backend, // js to load, core-popper, popper
878
-				'disable_admin'  => '', // URL snippets to disable loading on admin
856
+            $js_default = 'core-popper';
857
+            $js_default_backend = $js_default;
858
+
859
+            // maybe set defaults (if no settings set)
860
+            if(empty($db_settings)){
861
+                $active_theme = strtolower( get_template() ); // active parent theme.
862
+                $theme_js_settings = self::theme_js_settings();
863
+                if(isset($theme_js_settings[$active_theme])){
864
+                    $js_default = $theme_js_settings[$active_theme];
865
+                    $js_default_backend = isset($theme_js_settings[$active_theme."_backend"]) ? $theme_js_settings[$active_theme."_backend"] : $js_default;
866
+                }
867
+            }
868
+
869
+            /**
870
+             * Filter the default settings.
871
+             */
872
+            $defaults = apply_filters( 'ayecode-ui-default-settings', array(
873
+                'css'            => 'compatibility', // core, compatibility
874
+                'js'             => $js_default, // js to load, core-popper, popper
875
+                'html_font_size' => '16', // js to load, core-popper, popper
876
+                'css_backend'    => 'compatibility', // core, compatibility
877
+                'js_backend'     => $js_default_backend, // js to load, core-popper, popper
878
+                'disable_admin'  => '', // URL snippets to disable loading on admin
879 879
                 'bs_ver'         => '5', // The default bootstrap version to sue by default
880
-			), $db_settings );
880
+            ), $db_settings );
881 881
 
882
-			$settings = wp_parse_args( $db_settings, $defaults );
882
+            $settings = wp_parse_args( $db_settings, $defaults );
883 883
 
884
-			/**
885
-			 * Filter the Bootstrap settings.
886
-			 *
887
-			 * @todo if we add this filer people might use it and then it defeats the purpose of this class :/
888
-			 */
889
-			return $this->settings = apply_filters( 'ayecode-ui-settings', $settings, $db_settings, $defaults );
890
-		}
884
+            /**
885
+             * Filter the Bootstrap settings.
886
+             *
887
+             * @todo if we add this filer people might use it and then it defeats the purpose of this class :/
888
+             */
889
+            return $this->settings = apply_filters( 'ayecode-ui-settings', $settings, $db_settings, $defaults );
890
+        }
891 891
 
892 892
 
893
-		/**
894
-		 * The settings page html output.
895
-		 */
896
-		public function settings_page() {
897
-			if ( ! current_user_can( 'manage_options' ) ) {
898
-				wp_die( esc_attr__( 'You do not have sufficient permissions to access this page.', 'ayecode-connect' ) );
899
-			}
893
+        /**
894
+         * The settings page html output.
895
+         */
896
+        public function settings_page() {
897
+            if ( ! current_user_can( 'manage_options' ) ) {
898
+                wp_die( esc_attr__( 'You do not have sufficient permissions to access this page.', 'ayecode-connect' ) );
899
+            }
900 900
             $overrides = apply_filters( 'ayecode-ui-settings', array(), array(), array() );
901 901
 
902
-			?>
902
+            ?>
903 903
             <div class="wrap">
904 904
                 <h1><?php echo esc_attr( $this->name ); ?></h1>
905 905
                 <p><?php echo esc_html( apply_filters( 'ayecode-ui-settings-message', __("Here you can adjust settings if you are having compatibility issues.", 'ayecode-connect' ) ) );?></p>
906 906
                 <form method="post" action="options.php">
907 907
 					<?php
908
-					settings_fields( 'ayecode-ui-settings' );
909
-					do_settings_sections( 'ayecode-ui-settings' );
910
-					?>
908
+                    settings_fields( 'ayecode-ui-settings' );
909
+                    do_settings_sections( 'ayecode-ui-settings' );
910
+                    ?>
911 911
 
912 912
                     <h2><?php esc_html_e( 'BootStrap Version', 'ayecode-connect' ); ?></h2>
913 913
                     <p><?php echo esc_html( apply_filters( 'ayecode-ui-version-settings-message', __("V5 is recommended, however if you have another plugin installed using v4, you may need to use v4 also.", 'ayecode-connect' ) ) );?></p>
914 914
 	                <div class="bsui"><?php
915
-	                if ( ! empty( $overrides ) ) {
916
-		                echo aui()->alert(array( // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
917
-			                'type'=> 'info',
918
-			                'content'=> esc_attr__("Some options are disabled as your current theme is overriding them.", 'ayecode-connect' )
919
-		                ));
920
-	                }
921
-	                ?>
915
+                    if ( ! empty( $overrides ) ) {
916
+                        echo aui()->alert(array( // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
917
+                            'type'=> 'info',
918
+                            'content'=> esc_attr__("Some options are disabled as your current theme is overriding them.", 'ayecode-connect' )
919
+                        ));
920
+                    }
921
+                    ?>
922 922
                     </div>
923 923
                     <table class="form-table wpbs-table-version-settings">
924 924
                         <tr valign="top">
@@ -1002,77 +1002,77 @@  discard block
 block discarded – undo
1002 1002
                     </table>
1003 1003
 
1004 1004
 					<?php
1005
-					submit_button();
1006
-					?>
1005
+                    submit_button();
1006
+                    ?>
1007 1007
                 </form>
1008 1008
                 <div id="wpbs-version" data-aui-source="<?php echo esc_attr( $this->get_load_source() ); ?>"><?php echo esc_html( $this->version ); ?></div>
1009 1009
             </div>
1010 1010
 			<?php
1011
-		}
1011
+        }
1012 1012
 
1013 1013
         public function get_load_source(){
1014
-	        $file = str_replace( array( "/", "\\" ), "/", realpath( __FILE__ ) );
1015
-	        $plugins_dir = str_replace( array( "/", "\\" ), "/", realpath( WP_PLUGIN_DIR ) );
1016
-
1017
-	        // Find source plugin/theme of SD
1018
-	        $source = array();
1019
-	        if ( strpos( $file, $plugins_dir ) !== false ) {
1020
-		        $source = explode( "/", plugin_basename( $file ) );
1021
-	        } else if ( function_exists( 'get_theme_root' ) ) {
1022
-		        $themes_dir = str_replace( array( "/", "\\" ), "/", realpath( get_theme_root() ) );
1023
-
1024
-		        if ( strpos( $file, $themes_dir ) !== false ) {
1025
-			        $source = explode( "/", ltrim( str_replace( $themes_dir, "", $file ), "/" ) );
1026
-		        }
1027
-	        }
1014
+            $file = str_replace( array( "/", "\\" ), "/", realpath( __FILE__ ) );
1015
+            $plugins_dir = str_replace( array( "/", "\\" ), "/", realpath( WP_PLUGIN_DIR ) );
1016
+
1017
+            // Find source plugin/theme of SD
1018
+            $source = array();
1019
+            if ( strpos( $file, $plugins_dir ) !== false ) {
1020
+                $source = explode( "/", plugin_basename( $file ) );
1021
+            } else if ( function_exists( 'get_theme_root' ) ) {
1022
+                $themes_dir = str_replace( array( "/", "\\" ), "/", realpath( get_theme_root() ) );
1023
+
1024
+                if ( strpos( $file, $themes_dir ) !== false ) {
1025
+                    $source = explode( "/", ltrim( str_replace( $themes_dir, "", $file ), "/" ) );
1026
+                }
1027
+            }
1028 1028
 
1029 1029
             return isset($source[0]) ? esc_attr($source[0]) : '';
1030 1030
         }
1031 1031
 
1032
-		public function customizer_settings($wp_customize){
1033
-			$wp_customize->add_section('aui_settings', array(
1034
-				'title'    => __('AyeCode UI', 'ayecode-connect' ),
1035
-				'priority' => 120,
1036
-			));
1037
-
1038
-			//  =============================
1039
-			//  = Color Picker              =
1040
-			//  =============================
1041
-			$wp_customize->add_setting('aui_options[color_primary]', array(
1042
-				'default'           => AUI_PRIMARY_COLOR,
1043
-				'sanitize_callback' => 'sanitize_hex_color',
1044
-				'capability'        => 'edit_theme_options',
1045
-				'type'              => 'option',
1046
-				'transport'         => 'refresh',
1047
-			));
1048
-			$wp_customize->add_control( new WP_Customize_Color_Control($wp_customize, 'color_primary', array(
1049
-				'label'    => __('Primary Color', 'ayecode-connect' ),
1050
-				'section'  => 'aui_settings',
1051
-				'settings' => 'aui_options[color_primary]',
1052
-			)));
1053
-
1054
-			$wp_customize->add_setting('aui_options[color_secondary]', array(
1055
-				'default'           => '#6c757d',
1056
-				'sanitize_callback' => 'sanitize_hex_color',
1057
-				'capability'        => 'edit_theme_options',
1058
-				'type'              => 'option',
1059
-				'transport'         => 'refresh',
1060
-			));
1061
-			$wp_customize->add_control( new WP_Customize_Color_Control($wp_customize, 'color_secondary', array(
1062
-				'label'    => __('Secondary Color', 'ayecode-connect' ),
1063
-				'section'  => 'aui_settings',
1064
-				'settings' => 'aui_options[color_secondary]',
1065
-			)));
1066
-		}
1067
-
1068
-		/**
1069
-		 * CSS to help with conflict issues with other plugins and themes using bootstrap v3.
1070
-		 *
1071
-		 * @return mixed
1072
-		 */
1073
-		public static function bs3_compat_css() {
1074
-			ob_start();
1075
-			?>
1032
+        public function customizer_settings($wp_customize){
1033
+            $wp_customize->add_section('aui_settings', array(
1034
+                'title'    => __('AyeCode UI', 'ayecode-connect' ),
1035
+                'priority' => 120,
1036
+            ));
1037
+
1038
+            //  =============================
1039
+            //  = Color Picker              =
1040
+            //  =============================
1041
+            $wp_customize->add_setting('aui_options[color_primary]', array(
1042
+                'default'           => AUI_PRIMARY_COLOR,
1043
+                'sanitize_callback' => 'sanitize_hex_color',
1044
+                'capability'        => 'edit_theme_options',
1045
+                'type'              => 'option',
1046
+                'transport'         => 'refresh',
1047
+            ));
1048
+            $wp_customize->add_control( new WP_Customize_Color_Control($wp_customize, 'color_primary', array(
1049
+                'label'    => __('Primary Color', 'ayecode-connect' ),
1050
+                'section'  => 'aui_settings',
1051
+                'settings' => 'aui_options[color_primary]',
1052
+            )));
1053
+
1054
+            $wp_customize->add_setting('aui_options[color_secondary]', array(
1055
+                'default'           => '#6c757d',
1056
+                'sanitize_callback' => 'sanitize_hex_color',
1057
+                'capability'        => 'edit_theme_options',
1058
+                'type'              => 'option',
1059
+                'transport'         => 'refresh',
1060
+            ));
1061
+            $wp_customize->add_control( new WP_Customize_Color_Control($wp_customize, 'color_secondary', array(
1062
+                'label'    => __('Secondary Color', 'ayecode-connect' ),
1063
+                'section'  => 'aui_settings',
1064
+                'settings' => 'aui_options[color_secondary]',
1065
+            )));
1066
+        }
1067
+
1068
+        /**
1069
+         * CSS to help with conflict issues with other plugins and themes using bootstrap v3.
1070
+         *
1071
+         * @return mixed
1072
+         */
1073
+        public static function bs3_compat_css() {
1074
+            ob_start();
1075
+            ?>
1076 1076
             <style>
1077 1077
                 /* Bootstrap 3 compatibility */
1078 1078
                 body.modal-open .modal-backdrop.show:not(.in) {opacity:0.5;}
@@ -1101,368 +1101,368 @@  discard block
 block discarded – undo
1101 1101
                 <?php } ?>
1102 1102
             </style>
1103 1103
 			<?php
1104
-			return str_replace( array(
1105
-				'<style>',
1106
-				'</style>'
1107
-			), '', self::minify_css( ob_get_clean() ) );
1108
-		}
1104
+            return str_replace( array(
1105
+                '<style>',
1106
+                '</style>'
1107
+            ), '', self::minify_css( ob_get_clean() ) );
1108
+        }
1109 1109
 
1110
-		public static function custom_css( $compatibility = true, $is_fse = false ) {
1111
-			global $aui_bs5;
1110
+        public static function custom_css( $compatibility = true, $is_fse = false ) {
1111
+            global $aui_bs5;
1112 1112
 
1113
-			$colors = array();
1113
+            $colors = array();
1114 1114
 
1115
-			if ( defined( 'BLOCKSTRAP_VERSION' ) ) {
1116
-				$setting = wp_get_global_settings();
1115
+            if ( defined( 'BLOCKSTRAP_VERSION' ) ) {
1116
+                $setting = wp_get_global_settings();
1117 1117
 
1118
-				if ( ! empty( $setting['color']['palette']['theme'] ) ) {
1119
-					foreach ( $setting['color']['palette']['theme'] as $color ) {
1120
-						$colors[$color['slug']] = esc_attr( $color['color'] );
1121
-					}
1122
-				}
1118
+                if ( ! empty( $setting['color']['palette']['theme'] ) ) {
1119
+                    foreach ( $setting['color']['palette']['theme'] as $color ) {
1120
+                        $colors[$color['slug']] = esc_attr( $color['color'] );
1121
+                    }
1122
+                }
1123 1123
 
1124
-				if ( ! empty( $setting['color']['palette']['custom'] ) ) {
1125
-					foreach ( $setting['color']['palette']['custom'] as $color ) {
1126
-						$colors[$color['slug']] = esc_attr( $color['color'] );
1127
-					}
1128
-				}
1129
-			} else {
1130
-				$settings = get_option( 'aui_options' );
1131
-
1132
-				$colors = array(
1133
-					'primary'   => ! empty( $settings['color_primary'] ) ? $settings['color_primary'] : AUI_PRIMARY_COLOR,
1134
-					'secondary' => ! empty( $settings['color_secondary'] ) ? $settings['color_secondary'] : AUI_SECONDARY_COLOR
1135
-				);
1136
-			}
1137
-
1138
-			ob_start();
1139
-			?><style><?php
1140
-			// BS v3 compat
1141
-			if( self::is_bs3_compat() ){
1142
-				echo self::bs3_compat_css(); //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
1143
-			}
1144
-
1145
-			//$is_fse = false;
1146
-			//if ( is_admin() && ( !empty($_REQUEST['postType']) || self::is_block_editor() ) && ( defined( 'BLOCKSTRAP_VERSION' ) || defined( 'AUI_FSE' ) )  ) {
1147
-				//$is_fse = true;
1148
-			//}
1149
-
1150
-			$custom_front = ! is_admin() ? true : apply_filters('ayecode_ui_custom_front', false );
1151
-			$custom_admin = $is_fse || self::is_preview() ? true : apply_filters('ayecode_ui_custom_admin', false );
1124
+                if ( ! empty( $setting['color']['palette']['custom'] ) ) {
1125
+                    foreach ( $setting['color']['palette']['custom'] as $color ) {
1126
+                        $colors[$color['slug']] = esc_attr( $color['color'] );
1127
+                    }
1128
+                }
1129
+            } else {
1130
+                $settings = get_option( 'aui_options' );
1131
+
1132
+                $colors = array(
1133
+                    'primary'   => ! empty( $settings['color_primary'] ) ? $settings['color_primary'] : AUI_PRIMARY_COLOR,
1134
+                    'secondary' => ! empty( $settings['color_secondary'] ) ? $settings['color_secondary'] : AUI_SECONDARY_COLOR
1135
+                );
1136
+            }
1137
+
1138
+            ob_start();
1139
+            ?><style><?php
1140
+            // BS v3 compat
1141
+            if( self::is_bs3_compat() ){
1142
+                echo self::bs3_compat_css(); //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
1143
+            }
1144
+
1145
+            //$is_fse = false;
1146
+            //if ( is_admin() && ( !empty($_REQUEST['postType']) || self::is_block_editor() ) && ( defined( 'BLOCKSTRAP_VERSION' ) || defined( 'AUI_FSE' ) )  ) {
1147
+                //$is_fse = true;
1148
+            //}
1149
+
1150
+            $custom_front = ! is_admin() ? true : apply_filters('ayecode_ui_custom_front', false );
1151
+            $custom_admin = $is_fse || self::is_preview() ? true : apply_filters('ayecode_ui_custom_admin', false );
1152 1152
             $bs_custom_css = apply_filters( 'ayecode_ui_bs_custom_css', $custom_admin || $custom_front );
1153
-			//$bs_custom_css = true; // Force true to fix any color issue.
1153
+            //$bs_custom_css = true; // Force true to fix any color issue.
1154 1154
 
1155
-			$colors_css = '';
1156
-			if ( ! empty( $colors ) && $bs_custom_css ) {
1157
-				$d_colors = self::get_colors(true);
1155
+            $colors_css = '';
1156
+            if ( ! empty( $colors ) && $bs_custom_css ) {
1157
+                $d_colors = self::get_colors(true);
1158 1158
 
1159
-				foreach ( $colors as $key => $color ) {
1160
-					if ( ( empty( $d_colors[$key]) || $d_colors[$key] != $color) || $is_fse ) {
1161
-						$var = $is_fse ? "var(--wp--preset--color--$key)" : $color;
1162
-						$compat = $is_fse ? '.editor-styles-wrapper' : $compatibility;
1159
+                foreach ( $colors as $key => $color ) {
1160
+                    if ( ( empty( $d_colors[$key]) || $d_colors[$key] != $color) || $is_fse ) {
1161
+                        $var = $is_fse ? "var(--wp--preset--color--$key)" : $color;
1162
+                        $compat = $is_fse ? '.editor-styles-wrapper' : $compatibility;
1163 1163
 
1164
-						$colors_css .= $aui_bs5 ? self::css_overwrite_bs5( $key,$var, $compat, $color ) : self::css_overwrite( $key, $var, $compat, $color );
1165
-					}
1166
-				}
1167
-			}
1164
+                        $colors_css .= $aui_bs5 ? self::css_overwrite_bs5( $key,$var, $compat, $color ) : self::css_overwrite( $key, $var, $compat, $color );
1165
+                    }
1166
+                }
1167
+            }
1168 1168
 
1169
-			if ( $colors_css ) {
1170
-				echo $colors_css; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
1171
-			}
1169
+            if ( $colors_css ) {
1170
+                echo $colors_css; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
1171
+            }
1172 1172
 
1173
-			// Set admin bar z-index lower when modal is open.
1174
-			echo ' body.modal-open #wpadminbar{z-index:999}.embed-responsive-16by9 .fluid-width-video-wrapper{padding:0 !important;position:initial}';
1173
+            // Set admin bar z-index lower when modal is open.
1174
+            echo ' body.modal-open #wpadminbar{z-index:999}.embed-responsive-16by9 .fluid-width-video-wrapper{padding:0 !important;position:initial}';
1175 1175
 
1176
-			if ( is_admin() ) {
1177
-				echo ' body.modal-open #adminmenuwrap{z-index:999} body.modal-open #wpadminbar{z-index:1025}';
1178
-			}
1176
+            if ( is_admin() ) {
1177
+                echo ' body.modal-open #adminmenuwrap{z-index:999} body.modal-open #wpadminbar{z-index:1025}';
1178
+            }
1179 1179
 
1180
-			$custom_css = '';
1180
+            $custom_css = '';
1181 1181
 
1182
-			if ( $aui_bs5 && defined( 'BLOCKSTRAP_VERSION' ) && $bs_custom_css ) {
1183
-				$css = '';
1184
-				$theme_settings = wp_get_global_styles();
1182
+            if ( $aui_bs5 && defined( 'BLOCKSTRAP_VERSION' ) && $bs_custom_css ) {
1183
+                $css = '';
1184
+                $theme_settings = wp_get_global_styles();
1185 1185
 
1186
-				// Font face
1187
-				if( !empty( $theme_settings['typography']['fontFamily'] ) ){
1188
-					$t_fontface = str_replace( array('var:preset|','font-family|'), array('--wp--preset--','font-family--'), $theme_settings['typography']['fontFamily']  ); //var(--wp--preset--font-family--poppins)
1189
-					$css .= '--bs-body-font-family: ' . esc_attr($t_fontface) . ';';
1190
-				}
1186
+                // Font face
1187
+                if( !empty( $theme_settings['typography']['fontFamily'] ) ){
1188
+                    $t_fontface = str_replace( array('var:preset|','font-family|'), array('--wp--preset--','font-family--'), $theme_settings['typography']['fontFamily']  ); //var(--wp--preset--font-family--poppins)
1189
+                    $css .= '--bs-body-font-family: ' . esc_attr($t_fontface) . ';';
1190
+                }
1191 1191
 
1192
-				// font size
1193
-				if( !empty( $theme_settings['typography']['fontSize'] ) ){
1194
-					$css .= '--bs-body-font-size: ' . esc_attr( $theme_settings['typography']['fontSize'] ) . ' ;';
1195
-				}
1192
+                // font size
1193
+                if( !empty( $theme_settings['typography']['fontSize'] ) ){
1194
+                    $css .= '--bs-body-font-size: ' . esc_attr( $theme_settings['typography']['fontSize'] ) . ' ;';
1195
+                }
1196 1196
 
1197
-				// line height
1198
-				 if( !empty( $theme_settings['typography']['lineHeight'] ) ){
1199
-					$css .= '--bs-body-line-height: ' . esc_attr( $theme_settings['typography']['lineHeight'] ) . ';';
1200
-				}
1197
+                // line height
1198
+                    if( !empty( $theme_settings['typography']['lineHeight'] ) ){
1199
+                    $css .= '--bs-body-line-height: ' . esc_attr( $theme_settings['typography']['lineHeight'] ) . ';';
1200
+                }
1201 1201
 
1202 1202
 
1203
-				   // font weight
1204
-				 if( !empty( $theme_settings['typography']['fontWeight'] ) ){
1205
-					$css .= '--bs-body-font-weight: ' . esc_attr( $theme_settings['typography']['fontWeight'] ) . ';';
1206
-				}
1203
+                    // font weight
1204
+                    if( !empty( $theme_settings['typography']['fontWeight'] ) ){
1205
+                    $css .= '--bs-body-font-weight: ' . esc_attr( $theme_settings['typography']['fontWeight'] ) . ';';
1206
+                }
1207 1207
 
1208
-				// Background
1209
-				 if( !empty( $theme_settings['color']['background'] ) ){
1210
-					$css .= '--bs-body-bg: ' . esc_attr( $theme_settings['color']['background'] ) . ';';
1211
-				}
1208
+                // Background
1209
+                    if( !empty( $theme_settings['color']['background'] ) ){
1210
+                    $css .= '--bs-body-bg: ' . esc_attr( $theme_settings['color']['background'] ) . ';';
1211
+                }
1212 1212
 
1213
-				 // Background Gradient
1214
-				 if( !empty( $theme_settings['color']['gradient'] ) ){
1215
-					$css .= 'background: ' . esc_attr( $theme_settings['color']['gradient'] ) . ';';
1216
-				}
1213
+                    // Background Gradient
1214
+                    if( !empty( $theme_settings['color']['gradient'] ) ){
1215
+                    $css .= 'background: ' . esc_attr( $theme_settings['color']['gradient'] ) . ';';
1216
+                }
1217 1217
 
1218
-				   // Background Gradient
1219
-				 if( !empty( $theme_settings['color']['gradient'] ) ){
1220
-					$css .= 'background: ' . esc_attr( $theme_settings['color']['gradient'] ) . ';';
1221
-				}
1218
+                    // Background Gradient
1219
+                    if( !empty( $theme_settings['color']['gradient'] ) ){
1220
+                    $css .= 'background: ' . esc_attr( $theme_settings['color']['gradient'] ) . ';';
1221
+                }
1222 1222
 
1223
-				// text color
1224
-				if( !empty( $theme_settings['color']['text'] ) ){
1225
-					$css .= '--bs-body-color: ' . esc_attr( $theme_settings['color']['text'] ) . ';';
1226
-				}
1223
+                // text color
1224
+                if( !empty( $theme_settings['color']['text'] ) ){
1225
+                    $css .= '--bs-body-color: ' . esc_attr( $theme_settings['color']['text'] ) . ';';
1226
+                }
1227 1227
 
1228 1228
 
1229
-				// link colors
1230
-				if( !empty( $theme_settings['elements']['link']['color']['text'] ) ){
1231
-					$css .= '--bs-link-color: ' . esc_attr( $theme_settings['elements']['link']['color']['text'] ) . ';';
1232
-				}
1233
-				if( !empty( $theme_settings['elements']['link'][':hover']['color']['text'] ) ){
1234
-					$css .= '--bs-link-hover-color: ' . esc_attr( $theme_settings['elements']['link'][':hover']['color']['text'] ) . ';';
1235
-				}
1229
+                // link colors
1230
+                if( !empty( $theme_settings['elements']['link']['color']['text'] ) ){
1231
+                    $css .= '--bs-link-color: ' . esc_attr( $theme_settings['elements']['link']['color']['text'] ) . ';';
1232
+                }
1233
+                if( !empty( $theme_settings['elements']['link'][':hover']['color']['text'] ) ){
1234
+                    $css .= '--bs-link-hover-color: ' . esc_attr( $theme_settings['elements']['link'][':hover']['color']['text'] ) . ';';
1235
+                }
1236 1236
 
1237
-				if($css){
1238
-					$custom_css .= $is_fse ? 'body.editor-styles-wrapper{' . esc_attr( $css ) . '}' : 'body{' . esc_attr( $css ) . '}';
1239
-				}
1237
+                if($css){
1238
+                    $custom_css .= $is_fse ? 'body.editor-styles-wrapper{' . esc_attr( $css ) . '}' : 'body{' . esc_attr( $css ) . '}';
1239
+                }
1240 1240
 
1241
-				$bep = $is_fse ? 'body.editor-styles-wrapper ' : '';
1241
+                $bep = $is_fse ? 'body.editor-styles-wrapper ' : '';
1242 1242
 
1243
-				// Headings
1244
-				$headings_css = '';
1245
-				if( !empty( $theme_settings['elements']['heading']['color']['text'] ) ){
1246
-					$headings_css .= "color: " . esc_attr( $theme_settings['elements']['heading']['color']['text'] ) . ";";
1247
-				}
1243
+                // Headings
1244
+                $headings_css = '';
1245
+                if( !empty( $theme_settings['elements']['heading']['color']['text'] ) ){
1246
+                    $headings_css .= "color: " . esc_attr( $theme_settings['elements']['heading']['color']['text'] ) . ";";
1247
+                }
1248 1248
 
1249
-				// heading background
1250
-				if( !empty( $theme_settings['elements']['heading']['color']['background'] ) ){
1251
-					$headings_css .= 'background: ' . esc_attr( $theme_settings['elements']['heading']['color']['background'] ) . ';';
1252
-				}
1249
+                // heading background
1250
+                if( !empty( $theme_settings['elements']['heading']['color']['background'] ) ){
1251
+                    $headings_css .= 'background: ' . esc_attr( $theme_settings['elements']['heading']['color']['background'] ) . ';';
1252
+                }
1253 1253
 
1254
-				 // heading font family
1255
-				if( !empty( $theme_settings['elements']['heading']['typography']['fontFamily'] ) ){
1256
-					$headings_css .= 'font-family: ' . esc_attr( $theme_settings['elements']['heading']['typography']['fontFamily']  ) . ';';
1257
-				}
1254
+                    // heading font family
1255
+                if( !empty( $theme_settings['elements']['heading']['typography']['fontFamily'] ) ){
1256
+                    $headings_css .= 'font-family: ' . esc_attr( $theme_settings['elements']['heading']['typography']['fontFamily']  ) . ';';
1257
+                }
1258 1258
 
1259
-				if( $headings_css ){
1260
-					$custom_css .= "$bep h1,$bep h2,$bep h3, $bep h4,$bep h5,$bep h6{ " . esc_attr( $headings_css ) . "}";
1261
-				}
1259
+                if( $headings_css ){
1260
+                    $custom_css .= "$bep h1,$bep h2,$bep h3, $bep h4,$bep h5,$bep h6{ " . esc_attr( $headings_css ) . "}";
1261
+                }
1262 1262
 
1263
-				$hs = array('h1','h2','h3','h4','h5','h6');
1263
+                $hs = array('h1','h2','h3','h4','h5','h6');
1264 1264
 
1265
-				foreach($hs as $hn){
1266
-					$h_css = '';
1267
-					 if( !empty( $theme_settings['elements'][$hn]['color']['text'] ) ){
1268
-						$h_css .= 'color: ' . esc_attr( $theme_settings['elements'][$hn]['color']['text'] ) . ';';
1269
-					 }
1265
+                foreach($hs as $hn){
1266
+                    $h_css = '';
1267
+                        if( !empty( $theme_settings['elements'][$hn]['color']['text'] ) ){
1268
+                        $h_css .= 'color: ' . esc_attr( $theme_settings['elements'][$hn]['color']['text'] ) . ';';
1269
+                        }
1270 1270
 
1271
-					  if( !empty( $theme_settings['elements'][$hn]['typography']['fontSize'] ) ){
1272
-						$h_css .= 'font-size: ' . esc_attr( $theme_settings['elements'][$hn]['typography']['fontSize']  ) . ';';
1273
-					 }
1271
+                        if( !empty( $theme_settings['elements'][$hn]['typography']['fontSize'] ) ){
1272
+                        $h_css .= 'font-size: ' . esc_attr( $theme_settings['elements'][$hn]['typography']['fontSize']  ) . ';';
1273
+                        }
1274 1274
 
1275
-					  if( !empty( $theme_settings['elements'][$hn]['typography']['fontFamily'] ) ){
1276
-						$h_css .= 'font-family: ' . esc_attr( $theme_settings['elements'][$hn]['typography']['fontFamily']  ) . ';';
1277
-					 }
1275
+                        if( !empty( $theme_settings['elements'][$hn]['typography']['fontFamily'] ) ){
1276
+                        $h_css .= 'font-family: ' . esc_attr( $theme_settings['elements'][$hn]['typography']['fontFamily']  ) . ';';
1277
+                        }
1278 1278
 
1279
-					 if($h_css){
1280
-						$custom_css .= esc_attr( $bep  . $hn ) . '{'.esc_attr( $h_css ).'}';
1281
-					 }
1282
-				}
1283
-			}
1279
+                        if($h_css){
1280
+                        $custom_css .= esc_attr( $bep  . $hn ) . '{'.esc_attr( $h_css ).'}';
1281
+                        }
1282
+                }
1283
+            }
1284 1284
 			
1285
-			if ( $custom_css ) {
1286
-				echo $custom_css; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
1287
-			}
1288
-
1289
-			// Pagination on Hello Elementor theme.
1290
-			if ( function_exists( 'hello_elementor_setup' ) ) {
1291
-				echo '.aui-nav-links .pagination{justify-content:inherit}';
1292
-			}
1293
-			?></style><?php
1294
-			$custom_css = ob_get_clean();
1295
-
1296
-			/*
1285
+            if ( $custom_css ) {
1286
+                echo $custom_css; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
1287
+            }
1288
+
1289
+            // Pagination on Hello Elementor theme.
1290
+            if ( function_exists( 'hello_elementor_setup' ) ) {
1291
+                echo '.aui-nav-links .pagination{justify-content:inherit}';
1292
+            }
1293
+            ?></style><?php
1294
+            $custom_css = ob_get_clean();
1295
+
1296
+            /*
1297 1297
 			 * We only add the <script> tags for code highlighting, so we strip them from the output.
1298 1298
 			 */
1299
-			return str_replace( array(
1300
-				'<style>',
1301
-				'</style>'
1302
-			), '', self::minify_css( $custom_css ) );
1303
-		}
1304
-
1305
-		/**
1306
-		 * Check if we should add booststrap 3 compatibility changes.
1307
-		 *
1308
-		 * @return bool
1309
-		 */
1310
-		public static function is_bs3_compat(){
1311
-			return defined('AYECODE_UI_BS3_COMPAT') || defined('SVQ_THEME_VERSION') || defined('FUSION_BUILDER_VERSION');
1312
-		}
1313
-
1314
-		public static function hex_to_rgb( $hex ) {
1315
-			// Remove '#' if present
1316
-			$hex = str_replace( '#', '', $hex );
1317
-
1318
-			// Check if input is RGB
1319
-			if ( strpos( $hex, 'rgba(' ) === 0 || strpos( $hex, 'rgb(' ) === 0 ) {
1320
-				$_rgb = explode( ',', str_replace( array( 'rgba(', 'rgb(', ')' ), '', $hex ) );
1321
-
1322
-				$rgb = ( isset( $_rgb[0] ) ? (int) trim( $_rgb[0] ) : '0' ) . ',';
1323
-				$rgb .= ( isset( $_rgb[1] ) ? (int) trim( $_rgb[1] ) : '0' ) . ',';
1324
-				$rgb .= ( isset( $_rgb[2] ) ? (int) trim( $_rgb[2] ) : '0' );
1325
-
1326
-				return $rgb;
1327
-			}
1328
-
1329
-			// Convert 3-digit hex to 6-digit hex
1330
-			if ( strlen( $hex ) == 3 ) {
1331
-				$hex = str_repeat( substr( $hex, 0, 1 ), 2 ) . str_repeat( substr( $hex, 1, 1 ), 2 ) . str_repeat( substr( $hex, 2, 1 ), 2 );
1332
-			}
1333
-
1334
-			// Convert hex to RGB
1335
-			$r = hexdec( substr( $hex, 0, 2 ) );
1336
-			$g = hexdec( substr( $hex, 2, 2 ) );
1337
-			$b = hexdec( substr( $hex, 4, 2 ) );
1338
-
1339
-			// Return RGB values as an array
1340
-			return $r . ',' . $g . ',' . $b;
1341
-		}
1342
-
1343
-		/**
1344
-		 * Build the CSS to overwrite a bootstrap color variable.
1345
-		 *
1346
-		 * @param $type
1347
-		 * @param $color_code
1348
-		 * @param $compatibility
1349
-		 *
1350
-		 * @return string
1351
-		 */
1352
-		public static function css_overwrite_bs5($type,$color_code,$compatibility, $hex = '' ){
1353
-			global $aui_bs5;
1354
-
1355
-			$is_var = false;
1356
-			$is_custom = strpos($type, 'custom-') !== false ? true : false;
1357
-			if(!$color_code){return '';}
1358
-			if(strpos($color_code, 'var') !== false){
1359
-				//if(!sanitize_hex_color($color_code)){
1360
-				$color_code = esc_attr($color_code);
1361
-				$is_var = true;
1299
+            return str_replace( array(
1300
+                '<style>',
1301
+                '</style>'
1302
+            ), '', self::minify_css( $custom_css ) );
1303
+        }
1304
+
1305
+        /**
1306
+         * Check if we should add booststrap 3 compatibility changes.
1307
+         *
1308
+         * @return bool
1309
+         */
1310
+        public static function is_bs3_compat(){
1311
+            return defined('AYECODE_UI_BS3_COMPAT') || defined('SVQ_THEME_VERSION') || defined('FUSION_BUILDER_VERSION');
1312
+        }
1313
+
1314
+        public static function hex_to_rgb( $hex ) {
1315
+            // Remove '#' if present
1316
+            $hex = str_replace( '#', '', $hex );
1317
+
1318
+            // Check if input is RGB
1319
+            if ( strpos( $hex, 'rgba(' ) === 0 || strpos( $hex, 'rgb(' ) === 0 ) {
1320
+                $_rgb = explode( ',', str_replace( array( 'rgba(', 'rgb(', ')' ), '', $hex ) );
1321
+
1322
+                $rgb = ( isset( $_rgb[0] ) ? (int) trim( $_rgb[0] ) : '0' ) . ',';
1323
+                $rgb .= ( isset( $_rgb[1] ) ? (int) trim( $_rgb[1] ) : '0' ) . ',';
1324
+                $rgb .= ( isset( $_rgb[2] ) ? (int) trim( $_rgb[2] ) : '0' );
1325
+
1326
+                return $rgb;
1327
+            }
1328
+
1329
+            // Convert 3-digit hex to 6-digit hex
1330
+            if ( strlen( $hex ) == 3 ) {
1331
+                $hex = str_repeat( substr( $hex, 0, 1 ), 2 ) . str_repeat( substr( $hex, 1, 1 ), 2 ) . str_repeat( substr( $hex, 2, 1 ), 2 );
1332
+            }
1333
+
1334
+            // Convert hex to RGB
1335
+            $r = hexdec( substr( $hex, 0, 2 ) );
1336
+            $g = hexdec( substr( $hex, 2, 2 ) );
1337
+            $b = hexdec( substr( $hex, 4, 2 ) );
1338
+
1339
+            // Return RGB values as an array
1340
+            return $r . ',' . $g . ',' . $b;
1341
+        }
1342
+
1343
+        /**
1344
+         * Build the CSS to overwrite a bootstrap color variable.
1345
+         *
1346
+         * @param $type
1347
+         * @param $color_code
1348
+         * @param $compatibility
1349
+         *
1350
+         * @return string
1351
+         */
1352
+        public static function css_overwrite_bs5($type,$color_code,$compatibility, $hex = '' ){
1353
+            global $aui_bs5;
1354
+
1355
+            $is_var = false;
1356
+            $is_custom = strpos($type, 'custom-') !== false ? true : false;
1357
+            if(!$color_code){return '';}
1358
+            if(strpos($color_code, 'var') !== false){
1359
+                //if(!sanitize_hex_color($color_code)){
1360
+                $color_code = esc_attr($color_code);
1361
+                $is_var = true;
1362 1362
 //				$color_code = "rgba($color_code, 0.5)";
1363 1363
 //                echo '###1'.$color_code.'###';//exit;
1364
-			}
1364
+            }
1365 1365
 
1366 1366
 //            echo '@@@'.$color_code.'==='.self::hex_to_rgb($color_code);exit;
1367 1367
 
1368
-			if(!$color_code){return '';}
1368
+            if(!$color_code){return '';}
1369 1369
 
1370
-			$rgb = self::hex_to_rgb($hex);
1370
+            $rgb = self::hex_to_rgb($hex);
1371 1371
 
1372
-			if($compatibility===true || $compatibility===1){
1373
-				$compatibility = '.bsui';
1374
-			}elseif(!$compatibility){
1375
-				$compatibility = '';
1376
-			}else{
1377
-				$compatibility = esc_attr($compatibility);
1378
-			}
1372
+            if($compatibility===true || $compatibility===1){
1373
+                $compatibility = '.bsui';
1374
+            }elseif(!$compatibility){
1375
+                $compatibility = '';
1376
+            }else{
1377
+                $compatibility = esc_attr($compatibility);
1378
+            }
1379 1379
 
1380
-			$prefix = $compatibility ? $compatibility . " " : "";
1380
+            $prefix = $compatibility ? $compatibility . " " : "";
1381 1381
 
1382 1382
 
1383 1383
             $output = '';
1384 1384
 
1385 1385
 //            echo '####'.$color_code;exit;
1386 1386
 
1387
-			$type = sanitize_html_class($type);
1387
+            $type = sanitize_html_class($type);
1388
+
1389
+            /**
1390
+             * c = color, b = background color, o = border-color, f = fill
1391
+             */
1392
+            $selectors = array(
1393
+                ".btn-{$type}"                                              => array( 'b', 'o' ),
1394
+                ".btn-{$type}.disabled"                                     => array( 'b', 'o' ),
1395
+                ".btn-{$type}:disabled"                                     => array( 'b', 'o' ),
1396
+                ".btn-outline-{$type}"                                      => array( 'c', 'o' ),
1397
+                ".btn-outline-{$type}:hover"                                => array( 'b', 'o' ),
1398
+                ".btn-outline-{$type}:not(:disabled):not(.disabled).active" => array( 'b', 'o' ),
1399
+                ".btn-outline-{$type}:not(:disabled):not(.disabled):active" => array( 'b', 'o' ),
1400
+                ".show>.btn-outline-{$type}.dropdown-toggle"                => array( 'b', 'o' ),
1401
+                ".badge-{$type}"                                            => array( 'b' ),
1402
+                ".alert-{$type}"                                            => array( 'b', 'o' ),
1403
+                ".bg-{$type}"                                               => array( 'b', 'f' ),
1404
+                ".btn-link.btn-{$type}"                                     => array( 'c' ),
1405
+                ".text-{$type}"                                     => array( 'c' ),
1406
+            );
1407
+
1408
+            if ( $aui_bs5 ) {
1409
+                unset($selectors[".alert-{$type}" ]);
1410
+            }
1388 1411
 
1389
-			/**
1390
-			 * c = color, b = background color, o = border-color, f = fill
1391
-			 */
1392
-			$selectors = array(
1393
-				".btn-{$type}"                                              => array( 'b', 'o' ),
1394
-				".btn-{$type}.disabled"                                     => array( 'b', 'o' ),
1395
-				".btn-{$type}:disabled"                                     => array( 'b', 'o' ),
1396
-				".btn-outline-{$type}"                                      => array( 'c', 'o' ),
1397
-				".btn-outline-{$type}:hover"                                => array( 'b', 'o' ),
1398
-				".btn-outline-{$type}:not(:disabled):not(.disabled).active" => array( 'b', 'o' ),
1399
-				".btn-outline-{$type}:not(:disabled):not(.disabled):active" => array( 'b', 'o' ),
1400
-				".show>.btn-outline-{$type}.dropdown-toggle"                => array( 'b', 'o' ),
1401
-				".badge-{$type}"                                            => array( 'b' ),
1402
-				".alert-{$type}"                                            => array( 'b', 'o' ),
1403
-				".bg-{$type}"                                               => array( 'b', 'f' ),
1404
-				".btn-link.btn-{$type}"                                     => array( 'c' ),
1405
-				".text-{$type}"                                     => array( 'c' ),
1406
-			);
1407
-
1408
-			if ( $aui_bs5 ) {
1409
-				unset($selectors[".alert-{$type}" ]);
1410
-			}
1411
-
1412
-			if ( $type == 'primary' ) {
1413
-				$selectors = $selectors + array(
1414
-						'a'                                                                                                    => array( 'c' ),
1415
-						'.btn-link'                                                                                            => array( 'c' ),
1416
-						'.dropdown-item.active'                                                                                => array( 'b' ),
1417
-						'.custom-control-input:checked~.custom-control-label::before'                                          => array(
1418
-							'b',
1419
-							'o'
1420
-						),
1421
-						'.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before'                   => array(
1422
-							'b',
1423
-							'o'
1424
-						),
1425
-						'.nav-pills .nav-link.active'                                                                          => array( 'b' ),
1426
-						'.nav-pills .show>.nav-link'                                                                           => array( 'b' ),
1427
-						'.page-link'                                                                                           => array( 'c' ),
1428
-						'.page-item.active .page-link'                                                                         => array(
1429
-							'b',
1430
-							'o'
1431
-						),
1432
-						'.progress-bar'                                                                                        => array( 'b' ),
1433
-						'.list-group-item.active'                                                                              => array(
1434
-							'b',
1435
-							'o'
1436
-						),
1437
-						'.select2-container .select2-results__option--highlighted.select2-results__option[aria-selected=true]' => array( 'b' ),
1438
-					);
1439
-			}
1412
+            if ( $type == 'primary' ) {
1413
+                $selectors = $selectors + array(
1414
+                        'a'                                                                                                    => array( 'c' ),
1415
+                        '.btn-link'                                                                                            => array( 'c' ),
1416
+                        '.dropdown-item.active'                                                                                => array( 'b' ),
1417
+                        '.custom-control-input:checked~.custom-control-label::before'                                          => array(
1418
+                            'b',
1419
+                            'o'
1420
+                        ),
1421
+                        '.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before'                   => array(
1422
+                            'b',
1423
+                            'o'
1424
+                        ),
1425
+                        '.nav-pills .nav-link.active'                                                                          => array( 'b' ),
1426
+                        '.nav-pills .show>.nav-link'                                                                           => array( 'b' ),
1427
+                        '.page-link'                                                                                           => array( 'c' ),
1428
+                        '.page-item.active .page-link'                                                                         => array(
1429
+                            'b',
1430
+                            'o'
1431
+                        ),
1432
+                        '.progress-bar'                                                                                        => array( 'b' ),
1433
+                        '.list-group-item.active'                                                                              => array(
1434
+                            'b',
1435
+                            'o'
1436
+                        ),
1437
+                        '.select2-container .select2-results__option--highlighted.select2-results__option[aria-selected=true]' => array( 'b' ),
1438
+                    );
1439
+            }
1440 1440
 
1441 1441
 
1442 1442
 
1443 1443
             // link
1444
-			if ( $type === 'primary' ) {
1445
-				$output .= 'html body {--bs-link-hover-color: rgba(var(--bs-'.esc_attr($type).'-rgb), .75); --bs-link-color: var(--bs-'.esc_attr($type).'); }';
1446
-				$output .= $prefix . ' .breadcrumb{--bs-breadcrumb-item-active-color: '.esc_attr($color_code).';  }';
1447
-				$output .= $prefix . ' .navbar { --bs-nav-link-hover-color: '.esc_attr($color_code).'; --bs-navbar-hover-color: '.esc_attr($color_code).'; --bs-navbar-active-color: '.esc_attr($color_code).'; }';
1444
+            if ( $type === 'primary' ) {
1445
+                $output .= 'html body {--bs-link-hover-color: rgba(var(--bs-'.esc_attr($type).'-rgb), .75); --bs-link-color: var(--bs-'.esc_attr($type).'); }';
1446
+                $output .= $prefix . ' .breadcrumb{--bs-breadcrumb-item-active-color: '.esc_attr($color_code).';  }';
1447
+                $output .= $prefix . ' .navbar { --bs-nav-link-hover-color: '.esc_attr($color_code).'; --bs-navbar-hover-color: '.esc_attr($color_code).'; --bs-navbar-active-color: '.esc_attr($color_code).'; }';
1448 1448
 
1449
-				$output .= $prefix . ' a{color: var(--bs-'.esc_attr($type).');}';
1450
-				$output .= $prefix . ' .text-primary{color: var(--bs-'.esc_attr($type).') !important;}';
1449
+                $output .= $prefix . ' a{color: var(--bs-'.esc_attr($type).');}';
1450
+                $output .= $prefix . ' .text-primary{color: var(--bs-'.esc_attr($type).') !important;}';
1451 1451
 
1452 1452
                 // dropdown
1453
-				$output .= $prefix . ' .dropdown-menu{--bs-dropdown-link-hover-color: var(--bs-'.esc_attr($type).'); --bs-dropdown-link-active-color: var(--bs-'.esc_attr($type).');}';
1453
+                $output .= $prefix . ' .dropdown-menu{--bs-dropdown-link-hover-color: var(--bs-'.esc_attr($type).'); --bs-dropdown-link-active-color: var(--bs-'.esc_attr($type).');}';
1454 1454
 
1455 1455
                 // pagination
1456
-				$output .= $prefix . ' .pagination{--bs-pagination-hover-color: var(--bs-'.esc_attr($type).'); --bs-pagination-active-bg: var(--bs-'.esc_attr($type).');}';
1456
+                $output .= $prefix . ' .pagination{--bs-pagination-hover-color: var(--bs-'.esc_attr($type).'); --bs-pagination-active-bg: var(--bs-'.esc_attr($type).');}';
1457 1457
 
1458
-			}
1458
+            }
1459 1459
 
1460
-			$output .= $prefix . ' .link-'.esc_attr($type).' {color: var(--bs-'.esc_attr($type).'-rgb) !important;}';
1461
-			$output .= $prefix . ' .link-'.esc_attr($type).':hover {color: rgba(var(--bs-'.esc_attr($type).'-rgb), .8) !important;}';
1460
+            $output .= $prefix . ' .link-'.esc_attr($type).' {color: var(--bs-'.esc_attr($type).'-rgb) !important;}';
1461
+            $output .= $prefix . ' .link-'.esc_attr($type).':hover {color: rgba(var(--bs-'.esc_attr($type).'-rgb), .8) !important;}';
1462 1462
 
1463
-			//  buttons
1464
-			$output .= $prefix . ' .btn-'.esc_attr($type).'{';
1465
-			$output .= ' 
1463
+            //  buttons
1464
+            $output .= $prefix . ' .btn-'.esc_attr($type).'{';
1465
+            $output .= ' 
1466 1466
             --bs-btn-bg: '.esc_attr($color_code).';
1467 1467
             --bs-btn-border-color: '.esc_attr($color_code).';
1468 1468
             --bs-btn-hover-bg: rgba(var(--bs-'.esc_attr($type).'-rgb), .9);
@@ -1480,917 +1480,917 @@  discard block
 block discarded – undo
1480 1480
 //			--bs-btn-active-color: #fff;
1481 1481
 //			--bs-btn-disabled-color: #fff;
1482 1482
 //            ';
1483
-			$output .= '}';
1483
+            $output .= '}';
1484
+
1485
+            //  buttons outline
1486
+            $output .= $prefix . ' .btn-outline-'.esc_attr($type).'{';
1487
+            $output .= ' 
1488
+			--bs-btn-color: '.esc_attr($color_code).';
1489
+            --bs-btn-border-color: '.esc_attr($color_code).';
1490
+            --bs-btn-hover-bg: rgba(var(--bs-'.esc_attr($type).'-rgb), .9);
1491
+            --bs-btn-hover-border-color: rgba(var(--bs-'.esc_attr($type).'-rgb), .9);
1492
+            --bs-btn-focus-shadow-rgb: --bs-'.esc_attr($type).'-rgb;
1493
+            --bs-btn-active-bg: rgba(var(--bs-'.esc_attr($type).'-rgb), .9);
1494
+            --bs-btn-active-border-color: rgba(var(--bs-'.esc_attr($type).'-rgb), .9);
1495
+            --bs-btn-active-shadow: unset;
1496
+            --bs-btn-disabled-bg: rgba(var(--bs-'.esc_attr($type).'-rgb), .5);
1497
+            --bs-btn-disabled-border-color: rgba(var(--bs-'.esc_attr($type).'-rgb), .1);
1498
+            ';
1499
+//			$output .= '
1500
+//		    --bs-btn-color: #fff;
1501
+//			--bs-btn-hover-color: #fff;
1502
+//			--bs-btn-active-color: #fff;
1503
+//			--bs-btn-disabled-color: #fff;
1504
+//            ';
1505
+            $output .= '}';
1506
+
1507
+
1508
+            // button hover
1509
+            $output .= $prefix . ' .btn-'.esc_attr($type).':hover{';
1510
+            $output .= ' 
1511
+            box-shadow: 0 0.25rem 0.25rem 0.125rem rgb(var(--bs-'.esc_attr($type).'-rgb), .1), 0 0.375rem 0.75rem -0.125rem rgb(var(--bs-'.esc_attr($type).'-rgb) , .4);
1512
+            }
1513
+            ';
1514
+
1515
+
1516
+            if ( $aui_bs5 ) {
1517
+//				$output .= $is_var ? 'html body {--bs-'.esc_attr($type).'-rgb: '.$color_code.'; }' : 'html body {--bs-'.esc_attr($type).'-rgb: '.self::hex_to_rgb($color_code).'; }';
1518
+                $output .= 'html body {--bs-'.esc_attr($type).': '.esc_attr($color_code).'; }';
1519
+                $output .= 'html body {--bs-'.esc_attr($type).'-rgb: '.$rgb.'; }';
1520
+            }
1521
+
1522
+
1523
+            if ( $is_custom ) {
1524
+
1525
+//				echo '###'.$type;exit;
1526
+
1527
+                // build rules into each type
1528
+                foreach($selectors as $selector => $types){
1529
+                    $selector = $compatibility ? $compatibility . " ".$selector : $selector;
1530
+                    $types = array_combine($types,$types);
1531
+                    if(isset($types['c'])){$color[] = $selector;}
1532
+                    if(isset($types['b'])){$background[] = $selector;}
1533
+                    if(isset($types['o'])){$border[] = $selector;}
1534
+                    if(isset($types['f'])){$fill[] = $selector;}
1535
+                }
1536
+
1537
+//				// build rules into each type
1538
+//				foreach($important_selectors as $selector => $types){
1539
+//					$selector = $compatibility ? $compatibility . " ".$selector : $selector;
1540
+//					$types = array_combine($types,$types);
1541
+//					if(isset($types['c'])){$color_i[] = $selector;}
1542
+//					if(isset($types['b'])){$background_i[] = $selector;}
1543
+//					if(isset($types['o'])){$border_i[] = $selector;}
1544
+//					if(isset($types['f'])){$fill_i[] = $selector;}
1545
+//				}
1546
+
1547
+                // add any color rules
1548
+                if(!empty($color)){
1549
+                    $output .= implode(",",$color) . "{color: $color_code;} ";
1550
+                }
1551
+                if(!empty($color_i)){
1552
+                    $output .= implode(",",$color_i) . "{color: $color_code !important;} ";
1553
+                }
1554
+
1555
+                // add any background color rules
1556
+                if(!empty($background)){
1557
+                    $output .= implode(",",$background) . "{background-color: $color_code;} ";
1558
+                }
1559
+                if(!empty($background_i)){
1560
+                    $output .= $aui_bs5 ? '' : implode(",",$background_i) . "{background-color: $color_code !important;} ";
1561
+//				$output .= implode(",",$background_i) . "{background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;} ";
1562
+                }
1563
+
1564
+                // add any border color rules
1565
+                if(!empty($border)){
1566
+                    $output .= implode(",",$border) . "{border-color: $color_code;} ";
1567
+                }
1568
+                if(!empty($border_i)){
1569
+                    $output .= implode(",",$border_i) . "{border-color: $color_code !important;} ";
1570
+                }
1571
+
1572
+                // add any fill color rules
1573
+                if(!empty($fill)){
1574
+                    $output .= implode(",",$fill) . "{fill: $color_code;} ";
1575
+                }
1576
+                if(!empty($fill_i)){
1577
+                    $output .= implode(",",$fill_i) . "{fill: $color_code !important;} ";
1578
+                }
1579
+
1580
+            }
1581
+
1582
+
1583
+
1584
+
1585
+            $transition = $is_var ? 'transition: color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out,filter 0.15s ease-in-out;' : '';
1586
+            // darken
1587
+            $darker_075 = $is_var ? $color_code.';filter:brightness(0.925)' : self::css_hex_lighten_darken($color_code,"-0.075");
1588
+            $darker_10 = $is_var ? $color_code.';filter:brightness(0.9)' : self::css_hex_lighten_darken($color_code,"-0.10");
1589
+            $darker_125 = $is_var ? $color_code.';filter:brightness(0.875)' : self::css_hex_lighten_darken($color_code,"-0.125");
1590
+            $darker_40 = $is_var ? $color_code.';filter:brightness(0.6)' : self::css_hex_lighten_darken($color_code,"-0.4");
1591
+
1592
+            // lighten
1593
+            $lighten_25 = $is_var ? $color_code.';filter:brightness(1.25)' :self::css_hex_lighten_darken($color_code,"0.25");
1594
+
1595
+            // opacity see https://css-tricks.com/8-digit-hex-codes/
1596
+            $op_25 = $color_code."40"; // 25% opacity
1597
+
1598
+
1599
+            // button states
1600
+            $output .= $is_var ? $prefix ." .btn-{$type}{{$transition }} " : '';
1601
+            $output .= $prefix ." .btn-{$type}:hover, $prefix .btn-{$type}:focus, $prefix .btn-{$type}.focus{background-color: ".$darker_075.";    border-color: ".$darker_10.";} ";
1602
+//			$output .= $prefix ." .btn-{$type}:hover, $prefix .btn-{$type}:focus, $prefix .btn-{$type}.focus{background-color: #000;    border-color: #000;} ";
1603
+            $output .= $prefix ." .btn-outline-{$type}:not(:disabled):not(.disabled):active:focus, $prefix .btn-outline-{$type}:not(:disabled):not(.disabled).active:focus, .show>$prefix .btn-outline-{$type}.dropdown-toggle:focus{box-shadow: 0 0 0 0.2rem $op_25;} ";
1604
+            $output .= $prefix ." .btn-{$type}:not(:disabled):not(.disabled):active, $prefix .btn-{$type}:not(:disabled):not(.disabled).active, .show>$prefix .btn-{$type}.dropdown-toggle{background-color: ".$darker_10.";    border-color: ".$darker_125.";} ";
1605
+            $output .= $prefix ." .btn-{$type}:not(:disabled):not(.disabled):active:focus, $prefix .btn-{$type}:not(:disabled):not(.disabled).active:focus, .show>$prefix .btn-{$type}.dropdown-toggle:focus {box-shadow: 0 0 0 0.2rem $op_25;} ";
1606
+            $output .= $prefix ." .btn-{$type}:not(:disabled):not(.disabled):active:focus, $prefix .btn-{$type}:not(:disabled):not(.disabled):focus {box-shadow: 0 0.25rem 0.25rem 0.125rem rgba(var(--bs-{$type}-rgb), 0.1), 0 0.375rem 0.75rem -0.125rem rgba(var(--bs-{$type}-rgb), 0.4);} ";
1607
+
1608
+            // text
1609
+//			$output .= $prefix .".xxx, .text-{$type} {color: var(--bs-".esc_attr($type).");} ";
1610
+
1611
+
1612
+//			if ( $type == 'primary' ) {
1613
+//				// dropdown's
1614
+//				$output .= $prefix . " .dropdown-item.active, $prefix .dropdown-item:active{background-color: $color_code;} ";
1615
+//
1616
+//				// input states
1617
+//				$output .= $prefix . " .form-control:focus{border-color: " . $lighten_25 . ";box-shadow: 0 0 0 0.2rem $op_25;} ";
1618
+//
1619
+//				// page link
1620
+//				$output .= $prefix . " .page-link:focus{box-shadow: 0 0 0 0.2rem $op_25;} ";
1621
+//			}
1622
+
1623
+            // alerts
1624
+            if ( $aui_bs5 ) {
1625
+//				$output .= $is_var ? '' : $prefix ." .alert-{$type} {background-color: ".$color_code."20;    border-color: ".$color_code."30;color:$darker_40} ";
1626
+                $output .= $prefix ." .alert-{$type} {--bs-alert-bg: rgba(var(--bs-{$type}-rgb), .1 ) !important;--bs-alert-border-color: rgba(var(--bs-{$type}-rgb), .25 ) !important;--bs-alert-color: rgba(var(--bs-{$type}-rgb), 1 ) !important;} ";
1627
+            }
1628
+
1629
+            return $output;
1630
+        }
1631
+
1632
+        /**
1633
+         * Build the CSS to overwrite a bootstrap color variable.
1634
+         *
1635
+         * @param $type
1636
+         * @param $color_code
1637
+         * @param $compatibility
1638
+         *
1639
+         * @return string
1640
+         */
1641
+        public static function css_overwrite($type,$color_code,$compatibility, $hex = '' ){
1642
+            global $aui_bs5;
1643
+
1644
+            $is_var = false;
1645
+            if(!$color_code){return '';}
1646
+            if(strpos($color_code, 'var') !== false){
1647
+                //if(!sanitize_hex_color($color_code)){
1648
+                $color_code = esc_attr($color_code);
1649
+                $is_var = true;
1650
+//				$color_code = "rgba($color_code, 0.5)";
1651
+//                echo '###1'.$color_code.'###';//exit;
1652
+            }
1653
+
1654
+//            echo '@@@'.$color_code.'==='.self::hex_to_rgb($color_code);exit;
1655
+
1656
+            if(!$color_code){return '';}
1657
+
1658
+            $rgb = self::hex_to_rgb($hex);
1659
+
1660
+            if($compatibility===true || $compatibility===1){
1661
+                $compatibility = '.bsui';
1662
+            }elseif(!$compatibility){
1663
+                $compatibility = '';
1664
+            }else{
1665
+                $compatibility = esc_attr($compatibility);
1666
+            }
1667
+
1668
+
1669
+
1670
+//            echo '####'.$color_code;exit;
1671
+
1672
+            $type = sanitize_html_class($type);
1673
+
1674
+            /**
1675
+             * c = color, b = background color, o = border-color, f = fill
1676
+             */
1677
+            $selectors = array(
1678
+                ".btn-{$type}"                                              => array( 'b', 'o' ),
1679
+                ".btn-{$type}.disabled"                                     => array( 'b', 'o' ),
1680
+                ".btn-{$type}:disabled"                                     => array( 'b', 'o' ),
1681
+                ".btn-outline-{$type}"                                      => array( 'c', 'o' ),
1682
+                ".btn-outline-{$type}:hover"                                => array( 'b', 'o' ),
1683
+                ".btn-outline-{$type}:not(:disabled):not(.disabled).active" => array( 'b', 'o' ),
1684
+                ".btn-outline-{$type}:not(:disabled):not(.disabled):active" => array( 'b', 'o' ),
1685
+                ".show>.btn-outline-{$type}.dropdown-toggle"                => array( 'b', 'o' ),
1686
+                ".badge-{$type}"                                            => array( 'b' ),
1687
+                ".alert-{$type}"                                            => array( 'b', 'o' ),
1688
+                ".bg-{$type}"                                               => array( 'b', 'f' ),
1689
+                ".btn-link.btn-{$type}"                                     => array( 'c' ),
1690
+            );
1691
+
1692
+            if ( $aui_bs5 ) {
1693
+                unset($selectors[".alert-{$type}" ]);
1694
+            }
1695
+
1696
+            if ( $type == 'primary' ) {
1697
+                $selectors = $selectors + array(
1698
+                        'a'                                                                                                    => array( 'c' ),
1699
+                        '.btn-link'                                                                                            => array( 'c' ),
1700
+                        '.dropdown-item.active'                                                                                => array( 'b' ),
1701
+                        '.custom-control-input:checked~.custom-control-label::before'                                          => array(
1702
+                            'b',
1703
+                            'o'
1704
+                        ),
1705
+                        '.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before'                   => array(
1706
+                            'b',
1707
+                            'o'
1708
+                        ),
1709
+                        '.nav-pills .nav-link.active'                                                                          => array( 'b' ),
1710
+                        '.nav-pills .show>.nav-link'                                                                           => array( 'b' ),
1711
+                        '.page-link'                                                                                           => array( 'c' ),
1712
+                        '.page-item.active .page-link'                                                                         => array(
1713
+                            'b',
1714
+                            'o'
1715
+                        ),
1716
+                        '.progress-bar'                                                                                        => array( 'b' ),
1717
+                        '.list-group-item.active'                                                                              => array(
1718
+                            'b',
1719
+                            'o'
1720
+                        ),
1721
+                        '.select2-container .select2-results__option--highlighted.select2-results__option[aria-selected=true]' => array( 'b' ),
1722
+//				    '.custom-range::-webkit-slider-thumb' => array('b'), // these break the inline rules...
1723
+//				    '.custom-range::-moz-range-thumb' => array('b'),
1724
+//				    '.custom-range::-ms-thumb' => array('b'),
1725
+                    );
1726
+            }
1727
+
1728
+            $important_selectors = array(
1729
+                ".bg-{$type}" => array('b','f'),
1730
+                ".border-{$type}" => array('o'),
1731
+                ".text-{$type}" => array('c'),
1732
+            );
1733
+
1734
+            $color = array();
1735
+            $color_i = array();
1736
+            $background = array();
1737
+            $background_i = array();
1738
+            $border = array();
1739
+            $border_i = array();
1740
+            $fill = array();
1741
+            $fill_i = array();
1742
+
1743
+            $output = '';
1744
+
1745
+            if ( $aui_bs5 ) {
1746
+//				$output .= $is_var ? 'html body {--bs-'.esc_attr($type).'-rgb: '.$color_code.'; }' : 'html body {--bs-'.esc_attr($type).'-rgb: '.self::hex_to_rgb($color_code).'; }';
1747
+                $output .= 'html body {--bs-'.esc_attr($type).'-rgb: '.$rgb.'; }';
1748
+            }
1749
+
1750
+            // build rules into each type
1751
+            foreach($selectors as $selector => $types){
1752
+                $selector = $compatibility ? $compatibility . " ".$selector : $selector;
1753
+                $types = array_combine($types,$types);
1754
+                if(isset($types['c'])){$color[] = $selector;}
1755
+                if(isset($types['b'])){$background[] = $selector;}
1756
+                if(isset($types['o'])){$border[] = $selector;}
1757
+                if(isset($types['f'])){$fill[] = $selector;}
1758
+            }
1759
+
1760
+            // build rules into each type
1761
+            foreach($important_selectors as $selector => $types){
1762
+                $selector = $compatibility ? $compatibility . " ".$selector : $selector;
1763
+                $types = array_combine($types,$types);
1764
+                if(isset($types['c'])){$color_i[] = $selector;}
1765
+                if(isset($types['b'])){$background_i[] = $selector;}
1766
+                if(isset($types['o'])){$border_i[] = $selector;}
1767
+                if(isset($types['f'])){$fill_i[] = $selector;}
1768
+            }
1769
+
1770
+            // add any color rules
1771
+            if(!empty($color)){
1772
+                $output .= implode(",",$color) . "{color: $color_code;} ";
1773
+            }
1774
+            if(!empty($color_i)){
1775
+                $output .= implode(",",$color_i) . "{color: $color_code !important;} ";
1776
+            }
1777
+
1778
+            // add any background color rules
1779
+            if(!empty($background)){
1780
+                $output .= implode(",",$background) . "{background-color: $color_code;} ";
1781
+            }
1782
+            if(!empty($background_i)){
1783
+                $output .= $aui_bs5 ? '' : implode(",",$background_i) . "{background-color: $color_code !important;} ";
1784
+//				$output .= implode(",",$background_i) . "{background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;} ";
1785
+            }
1786
+
1787
+            // add any border color rules
1788
+            if(!empty($border)){
1789
+                $output .= implode(",",$border) . "{border-color: $color_code;} ";
1790
+            }
1791
+            if(!empty($border_i)){
1792
+                $output .= implode(",",$border_i) . "{border-color: $color_code !important;} ";
1793
+            }
1794
+
1795
+            // add any fill color rules
1796
+            if(!empty($fill)){
1797
+                $output .= implode(",",$fill) . "{fill: $color_code;} ";
1798
+            }
1799
+            if(!empty($fill_i)){
1800
+                $output .= implode(",",$fill_i) . "{fill: $color_code !important;} ";
1801
+            }
1802
+
1803
+
1804
+            $prefix = $compatibility ? $compatibility . " " : "";
1805
+
1806
+            $transition = $is_var ? 'transition: color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out,filter 0.15s ease-in-out;' : '';
1807
+            // darken
1808
+            $darker_075 = $is_var ? $color_code.';filter:brightness(0.925)' : self::css_hex_lighten_darken($color_code,"-0.075");
1809
+            $darker_10 = $is_var ? $color_code.';filter:brightness(0.9)' : self::css_hex_lighten_darken($color_code,"-0.10");
1810
+            $darker_125 = $is_var ? $color_code.';filter:brightness(0.875)' : self::css_hex_lighten_darken($color_code,"-0.125");
1811
+            $darker_40 = $is_var ? $color_code.';filter:brightness(0.6)' : self::css_hex_lighten_darken($color_code,"-0.4");
1812
+
1813
+            // lighten
1814
+            $lighten_25 = $is_var ? $color_code.';filter:brightness(1.25)' :self::css_hex_lighten_darken($color_code,"0.25");
1815
+
1816
+            // opacity see https://css-tricks.com/8-digit-hex-codes/
1817
+            $op_25 = $color_code."40"; // 25% opacity
1818
+
1819
+
1820
+            // button states
1821
+            $output .= $is_var ? $prefix ." .btn-{$type}{{$transition }} " : '';
1822
+            $output .= $prefix ." .btn-{$type}:hover, $prefix .btn-{$type}:focus, $prefix .btn-{$type}.focus{background-color: ".$darker_075.";    border-color: ".$darker_10.";} ";
1823
+//			$output .= $prefix ." .btn-{$type}:hover, $prefix .btn-{$type}:focus, $prefix .btn-{$type}.focus{background-color: #000;    border-color: #000;} ";
1824
+            $output .= $prefix ." .btn-outline-{$type}:not(:disabled):not(.disabled):active:focus, $prefix .btn-outline-{$type}:not(:disabled):not(.disabled).active:focus, .show>$prefix .btn-outline-{$type}.dropdown-toggle:focus{box-shadow: 0 0 0 0.2rem $op_25;} ";
1825
+            $output .= $prefix ." .btn-{$type}:not(:disabled):not(.disabled):active, $prefix .btn-{$type}:not(:disabled):not(.disabled).active, .show>$prefix .btn-{$type}.dropdown-toggle{background-color: ".$darker_10.";    border-color: ".$darker_125.";} ";
1826
+            $output .= $prefix ." .btn-{$type}:not(:disabled):not(.disabled):active:focus, $prefix .btn-{$type}:not(:disabled):not(.disabled).active:focus, .show>$prefix .btn-{$type}.dropdown-toggle:focus {box-shadow: 0 0 0 0.2rem $op_25;} ";
1827
+
1828
+            if ( $type == 'primary' ) {
1829
+                // dropdown's
1830
+                $output .= $prefix . " .dropdown-item.active, $prefix .dropdown-item:active{background-color: $color_code;} ";
1831
+
1832
+                // input states
1833
+                $output .= $prefix . " .form-control:focus{border-color: " . $lighten_25 . ";box-shadow: 0 0 0 0.2rem $op_25;} ";
1834
+
1835
+                // page link
1836
+                $output .= $prefix . " .page-link:focus{box-shadow: 0 0 0 0.2rem $op_25;} ";
1837
+            }
1838
+
1839
+            // alerts
1840
+            if ( $aui_bs5 ) {
1841
+//				$output .= $is_var ? '' : $prefix ." .alert-{$type} {background-color: ".$color_code."20;    border-color: ".$color_code."30;color:$darker_40} ";
1842
+                $output .= $prefix ." .alert-{$type} {--bs-alert-bg: rgba(var(--bs-{$type}-rgb), .1 ) !important;--bs-alert-border-color: rgba(var(--bs-{$type}-rgb), .25 ) !important;--bs-alert-color: rgba(var(--bs-{$type}-rgb), 1 ) !important;} ";
1843
+            }
1484 1844
 
1485
-			//  buttons outline
1486
-			$output .= $prefix . ' .btn-outline-'.esc_attr($type).'{';
1487
-			$output .= ' 
1488
-			--bs-btn-color: '.esc_attr($color_code).';
1489
-            --bs-btn-border-color: '.esc_attr($color_code).';
1490
-            --bs-btn-hover-bg: rgba(var(--bs-'.esc_attr($type).'-rgb), .9);
1491
-            --bs-btn-hover-border-color: rgba(var(--bs-'.esc_attr($type).'-rgb), .9);
1492
-            --bs-btn-focus-shadow-rgb: --bs-'.esc_attr($type).'-rgb;
1493
-            --bs-btn-active-bg: rgba(var(--bs-'.esc_attr($type).'-rgb), .9);
1494
-            --bs-btn-active-border-color: rgba(var(--bs-'.esc_attr($type).'-rgb), .9);
1495
-            --bs-btn-active-shadow: unset;
1496
-            --bs-btn-disabled-bg: rgba(var(--bs-'.esc_attr($type).'-rgb), .5);
1497
-            --bs-btn-disabled-border-color: rgba(var(--bs-'.esc_attr($type).'-rgb), .1);
1498
-            ';
1499
-//			$output .= '
1500
-//		    --bs-btn-color: #fff;
1501
-//			--bs-btn-hover-color: #fff;
1502
-//			--bs-btn-active-color: #fff;
1503
-//			--bs-btn-disabled-color: #fff;
1504
-//            ';
1505
-			$output .= '}';
1845
+            return $output;
1846
+        }
1506 1847
 
1848
+        /**
1849
+         *
1850
+         * @deprecated 0.1.76 Use css_overwrite()
1851
+         *
1852
+         * @param $color_code
1853
+         * @param $compatibility
1854
+         * @param $use_variable
1855
+         *
1856
+         * @return string
1857
+         */
1858
+        public static function css_primary($color_code,$compatibility, $use_variable = false){
1507 1859
 
1508
-            // button hover
1509
-			$output .= $prefix . ' .btn-'.esc_attr($type).':hover{';
1510
-			$output .= ' 
1511
-            box-shadow: 0 0.25rem 0.25rem 0.125rem rgb(var(--bs-'.esc_attr($type).'-rgb), .1), 0 0.375rem 0.75rem -0.125rem rgb(var(--bs-'.esc_attr($type).'-rgb) , .4);
1860
+            if(!$use_variable){
1861
+                $color_code = sanitize_hex_color($color_code);
1862
+                if(!$color_code){return '';}
1512 1863
             }
1513
-            ';
1514 1864
 
1865
+            /**
1866
+             * c = color, b = background color, o = border-color, f = fill
1867
+             */
1868
+            $selectors = array(
1869
+                'a' => array('c'),
1870
+                '.btn-primary' => array('b','o'),
1871
+                '.btn-primary.disabled' => array('b','o'),
1872
+                '.btn-primary:disabled' => array('b','o'),
1873
+                '.btn-outline-primary' => array('c','o'),
1874
+                '.btn-outline-primary:hover' => array('b','o'),
1875
+                '.btn-outline-primary:not(:disabled):not(.disabled).active' => array('b','o'),
1876
+                '.btn-outline-primary:not(:disabled):not(.disabled):active' => array('b','o'),
1877
+                '.show>.btn-outline-primary.dropdown-toggle' => array('b','o'),
1878
+                '.btn-link' => array('c'),
1879
+                '.dropdown-item.active' => array('b'),
1880
+                '.custom-control-input:checked~.custom-control-label::before' => array('b','o'),
1881
+                '.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before' => array('b','o'),
1882
+//				'.custom-range::-webkit-slider-thumb' => array('b'), // these break the inline rules...
1883
+//				'.custom-range::-moz-range-thumb' => array('b'),
1884
+//				'.custom-range::-ms-thumb' => array('b'),
1885
+                '.nav-pills .nav-link.active' => array('b'),
1886
+                '.nav-pills .show>.nav-link' => array('b'),
1887
+                '.page-link' => array('c'),
1888
+                '.page-item.active .page-link' => array('b','o'),
1889
+                '.badge-primary' => array('b'),
1890
+                '.alert-primary' => array('b','o'),
1891
+                '.progress-bar' => array('b'),
1892
+                '.list-group-item.active' => array('b','o'),
1893
+                '.bg-primary' => array('b','f'),
1894
+                '.btn-link.btn-primary' => array('c'),
1895
+                '.select2-container .select2-results__option--highlighted.select2-results__option[aria-selected=true]' => array('b'),
1896
+            );
1897
+
1898
+            $important_selectors = array(
1899
+                '.bg-primary' => array('b','f'),
1900
+                '.border-primary' => array('o'),
1901
+                '.text-primary' => array('c'),
1902
+            );
1903
+
1904
+            $color = array();
1905
+            $color_i = array();
1906
+            $background = array();
1907
+            $background_i = array();
1908
+            $border = array();
1909
+            $border_i = array();
1910
+            $fill = array();
1911
+            $fill_i = array();
1515 1912
 
1516
-			if ( $aui_bs5 ) {
1517
-//				$output .= $is_var ? 'html body {--bs-'.esc_attr($type).'-rgb: '.$color_code.'; }' : 'html body {--bs-'.esc_attr($type).'-rgb: '.self::hex_to_rgb($color_code).'; }';
1518
-				$output .= 'html body {--bs-'.esc_attr($type).': '.esc_attr($color_code).'; }';
1519
-				$output .= 'html body {--bs-'.esc_attr($type).'-rgb: '.$rgb.'; }';
1520
-			}
1913
+            $output = '';
1521 1914
 
1915
+            // build rules into each type
1916
+            foreach($selectors as $selector => $types){
1917
+                $selector = $compatibility ? ".bsui ".$selector : $selector;
1918
+                $types = array_combine($types,$types);
1919
+                if(isset($types['c'])){$color[] = $selector;}
1920
+                if(isset($types['b'])){$background[] = $selector;}
1921
+                if(isset($types['o'])){$border[] = $selector;}
1922
+                if(isset($types['f'])){$fill[] = $selector;}
1923
+            }
1522 1924
 
1523
-			if ( $is_custom ) {
1925
+            // build rules into each type
1926
+            foreach($important_selectors as $selector => $types){
1927
+                $selector = $compatibility ? ".bsui ".$selector : $selector;
1928
+                $types = array_combine($types,$types);
1929
+                if(isset($types['c'])){$color_i[] = $selector;}
1930
+                if(isset($types['b'])){$background_i[] = $selector;}
1931
+                if(isset($types['o'])){$border_i[] = $selector;}
1932
+                if(isset($types['f'])){$fill_i[] = $selector;}
1933
+            }
1524 1934
 
1525
-//				echo '###'.$type;exit;
1935
+            // add any color rules
1936
+            if(!empty($color)){
1937
+                $output .= implode(",",$color) . "{color: $color_code;} ";
1938
+            }
1939
+            if(!empty($color_i)){
1940
+                $output .= implode(",",$color_i) . "{color: $color_code !important;} ";
1941
+            }
1526 1942
 
1527
-				// build rules into each type
1528
-				foreach($selectors as $selector => $types){
1529
-					$selector = $compatibility ? $compatibility . " ".$selector : $selector;
1530
-					$types = array_combine($types,$types);
1531
-					if(isset($types['c'])){$color[] = $selector;}
1532
-					if(isset($types['b'])){$background[] = $selector;}
1533
-					if(isset($types['o'])){$border[] = $selector;}
1534
-					if(isset($types['f'])){$fill[] = $selector;}
1535
-				}
1943
+            // add any background color rules
1944
+            if(!empty($background)){
1945
+                $output .= implode(",",$background) . "{background-color: $color_code;} ";
1946
+            }
1947
+            if(!empty($background_i)){
1948
+                $output .= implode(",",$background_i) . "{background-color: $color_code !important;} ";
1949
+            }
1536 1950
 
1537
-//				// build rules into each type
1538
-//				foreach($important_selectors as $selector => $types){
1539
-//					$selector = $compatibility ? $compatibility . " ".$selector : $selector;
1540
-//					$types = array_combine($types,$types);
1541
-//					if(isset($types['c'])){$color_i[] = $selector;}
1542
-//					if(isset($types['b'])){$background_i[] = $selector;}
1543
-//					if(isset($types['o'])){$border_i[] = $selector;}
1544
-//					if(isset($types['f'])){$fill_i[] = $selector;}
1545
-//				}
1951
+            // add any border color rules
1952
+            if(!empty($border)){
1953
+                $output .= implode(",",$border) . "{border-color: $color_code;} ";
1954
+            }
1955
+            if(!empty($border_i)){
1956
+                $output .= implode(",",$border_i) . "{border-color: $color_code !important;} ";
1957
+            }
1546 1958
 
1547
-				// add any color rules
1548
-				if(!empty($color)){
1549
-					$output .= implode(",",$color) . "{color: $color_code;} ";
1550
-				}
1551
-				if(!empty($color_i)){
1552
-					$output .= implode(",",$color_i) . "{color: $color_code !important;} ";
1553
-				}
1959
+            // add any fill color rules
1960
+            if(!empty($fill)){
1961
+                $output .= implode(",",$fill) . "{fill: $color_code;} ";
1962
+            }
1963
+            if(!empty($fill_i)){
1964
+                $output .= implode(",",$fill_i) . "{fill: $color_code !important;} ";
1965
+            }
1554 1966
 
1555
-				// add any background color rules
1556
-				if(!empty($background)){
1557
-					$output .= implode(",",$background) . "{background-color: $color_code;} ";
1558
-				}
1559
-				if(!empty($background_i)){
1560
-					$output .= $aui_bs5 ? '' : implode(",",$background_i) . "{background-color: $color_code !important;} ";
1561
-//				$output .= implode(",",$background_i) . "{background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;} ";
1562
-				}
1563 1967
 
1564
-				// add any border color rules
1565
-				if(!empty($border)){
1566
-					$output .= implode(",",$border) . "{border-color: $color_code;} ";
1567
-				}
1568
-				if(!empty($border_i)){
1569
-					$output .= implode(",",$border_i) . "{border-color: $color_code !important;} ";
1570
-				}
1968
+            $prefix = $compatibility ? ".bsui " : "";
1571 1969
 
1572
-				// add any fill color rules
1573
-				if(!empty($fill)){
1574
-					$output .= implode(",",$fill) . "{fill: $color_code;} ";
1575
-				}
1576
-				if(!empty($fill_i)){
1577
-					$output .= implode(",",$fill_i) . "{fill: $color_code !important;} ";
1578
-				}
1970
+            // darken
1971
+            $darker_075 = self::css_hex_lighten_darken($color_code,"-0.075");
1972
+            $darker_10 = self::css_hex_lighten_darken($color_code,"-0.10");
1973
+            $darker_125 = self::css_hex_lighten_darken($color_code,"-0.125");
1579 1974
 
1580
-			}
1975
+            // lighten
1976
+            $lighten_25 = self::css_hex_lighten_darken($color_code,"0.25");
1581 1977
 
1978
+            // opacity see https://css-tricks.com/8-digit-hex-codes/
1979
+            $op_25 = $color_code."40"; // 25% opacity
1582 1980
 
1583 1981
 
1982
+            // button states
1983
+            $output .= $prefix ." .btn-primary:hover, $prefix .btn-primary:focus, $prefix .btn-primary.focus{background-color: ".$darker_075.";    border-color: ".$darker_10.";} ";
1984
+            $output .= $prefix ." .btn-outline-primary:not(:disabled):not(.disabled):active:focus, $prefix .btn-outline-primary:not(:disabled):not(.disabled).active:focus, .show>$prefix .btn-outline-primary.dropdown-toggle:focus{box-shadow: 0 0 0 0.2rem $op_25;} ";
1985
+            $output .= $prefix ." .btn-primary:not(:disabled):not(.disabled):active, $prefix .btn-primary:not(:disabled):not(.disabled).active, .show>$prefix .btn-primary.dropdown-toggle{background-color: ".$darker_10.";    border-color: ".$darker_125.";} ";
1986
+            $output .= $prefix ." .btn-primary:not(:disabled):not(.disabled):active:focus, $prefix .btn-primary:not(:disabled):not(.disabled).active:focus, .show>$prefix .btn-primary.dropdown-toggle:focus {box-shadow: 0 0 0 0.2rem $op_25;} ";
1584 1987
 
1585
-			$transition = $is_var ? 'transition: color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out,filter 0.15s ease-in-out;' : '';
1586
-			// darken
1587
-			$darker_075 = $is_var ? $color_code.';filter:brightness(0.925)' : self::css_hex_lighten_darken($color_code,"-0.075");
1588
-			$darker_10 = $is_var ? $color_code.';filter:brightness(0.9)' : self::css_hex_lighten_darken($color_code,"-0.10");
1589
-			$darker_125 = $is_var ? $color_code.';filter:brightness(0.875)' : self::css_hex_lighten_darken($color_code,"-0.125");
1590
-			$darker_40 = $is_var ? $color_code.';filter:brightness(0.6)' : self::css_hex_lighten_darken($color_code,"-0.4");
1591 1988
 
1592
-			// lighten
1593
-			$lighten_25 = $is_var ? $color_code.';filter:brightness(1.25)' :self::css_hex_lighten_darken($color_code,"0.25");
1989
+            // dropdown's
1990
+            $output .= $prefix ." .dropdown-item.active, $prefix .dropdown-item:active{background-color: $color_code;} ";
1594 1991
 
1595
-			// opacity see https://css-tricks.com/8-digit-hex-codes/
1596
-			$op_25 = $color_code."40"; // 25% opacity
1597 1992
 
1993
+            // input states
1994
+            $output .= $prefix ." .form-control:focus{border-color: ".$lighten_25.";box-shadow: 0 0 0 0.2rem $op_25;} ";
1598 1995
 
1599
-			// button states
1600
-			$output .= $is_var ? $prefix ." .btn-{$type}{{$transition }} " : '';
1601
-			$output .= $prefix ." .btn-{$type}:hover, $prefix .btn-{$type}:focus, $prefix .btn-{$type}.focus{background-color: ".$darker_075.";    border-color: ".$darker_10.";} ";
1602
-//			$output .= $prefix ." .btn-{$type}:hover, $prefix .btn-{$type}:focus, $prefix .btn-{$type}.focus{background-color: #000;    border-color: #000;} ";
1603
-			$output .= $prefix ." .btn-outline-{$type}:not(:disabled):not(.disabled):active:focus, $prefix .btn-outline-{$type}:not(:disabled):not(.disabled).active:focus, .show>$prefix .btn-outline-{$type}.dropdown-toggle:focus{box-shadow: 0 0 0 0.2rem $op_25;} ";
1604
-			$output .= $prefix ." .btn-{$type}:not(:disabled):not(.disabled):active, $prefix .btn-{$type}:not(:disabled):not(.disabled).active, .show>$prefix .btn-{$type}.dropdown-toggle{background-color: ".$darker_10.";    border-color: ".$darker_125.";} ";
1605
-            $output .= $prefix ." .btn-{$type}:not(:disabled):not(.disabled):active:focus, $prefix .btn-{$type}:not(:disabled):not(.disabled).active:focus, .show>$prefix .btn-{$type}.dropdown-toggle:focus {box-shadow: 0 0 0 0.2rem $op_25;} ";
1606
-            $output .= $prefix ." .btn-{$type}:not(:disabled):not(.disabled):active:focus, $prefix .btn-{$type}:not(:disabled):not(.disabled):focus {box-shadow: 0 0.25rem 0.25rem 0.125rem rgba(var(--bs-{$type}-rgb), 0.1), 0 0.375rem 0.75rem -0.125rem rgba(var(--bs-{$type}-rgb), 0.4);} ";
1996
+            // page link
1997
+            $output .= $prefix ." .page-link:focus{box-shadow: 0 0 0 0.2rem $op_25;} ";
1607 1998
 
1608
-			// text
1609
-//			$output .= $prefix .".xxx, .text-{$type} {color: var(--bs-".esc_attr($type).");} ";
1999
+            return $output;
2000
+        }
1610 2001
 
2002
+        /**
2003
+         *
2004
+         * @deprecated 0.1.76 Use css_overwrite()
2005
+         *
2006
+         * @param $color_code
2007
+         * @param $compatibility
2008
+         *
2009
+         * @return string
2010
+         */
2011
+        public static function css_secondary($color_code,$compatibility){;
2012
+            $color_code = sanitize_hex_color($color_code);
2013
+            if(!$color_code){return '';}
2014
+            /**
2015
+             * c = color, b = background color, o = border-color, f = fill
2016
+             */
2017
+            $selectors = array(
2018
+                '.btn-secondary' => array('b','o'),
2019
+                '.btn-secondary.disabled' => array('b','o'),
2020
+                '.btn-secondary:disabled' => array('b','o'),
2021
+                '.btn-outline-secondary' => array('c','o'),
2022
+                '.btn-outline-secondary:hover' => array('b','o'),
2023
+                '.btn-outline-secondary.disabled' => array('c'),
2024
+                '.btn-outline-secondary:disabled' => array('c'),
2025
+                '.btn-outline-secondary:not(:disabled):not(.disabled):active' => array('b','o'),
2026
+                '.btn-outline-secondary:not(:disabled):not(.disabled).active' => array('b','o'),
2027
+                '.btn-outline-secondary.dropdown-toggle' => array('b','o'),
2028
+                '.badge-secondary' => array('b'),
2029
+                '.alert-secondary' => array('b','o'),
2030
+                '.btn-link.btn-secondary' => array('c'),
2031
+            );
2032
+
2033
+            $important_selectors = array(
2034
+                '.bg-secondary' => array('b','f'),
2035
+                '.border-secondary' => array('o'),
2036
+                '.text-secondary' => array('c'),
2037
+            );
2038
+
2039
+            $color = array();
2040
+            $color_i = array();
2041
+            $background = array();
2042
+            $background_i = array();
2043
+            $border = array();
2044
+            $border_i = array();
2045
+            $fill = array();
2046
+            $fill_i = array();
1611 2047
 
1612
-//			if ( $type == 'primary' ) {
1613
-//				// dropdown's
1614
-//				$output .= $prefix . " .dropdown-item.active, $prefix .dropdown-item:active{background-color: $color_code;} ";
1615
-//
1616
-//				// input states
1617
-//				$output .= $prefix . " .form-control:focus{border-color: " . $lighten_25 . ";box-shadow: 0 0 0 0.2rem $op_25;} ";
1618
-//
1619
-//				// page link
1620
-//				$output .= $prefix . " .page-link:focus{box-shadow: 0 0 0 0.2rem $op_25;} ";
1621
-//			}
2048
+            $output = '';
1622 2049
 
1623
-			// alerts
1624
-			if ( $aui_bs5 ) {
1625
-//				$output .= $is_var ? '' : $prefix ." .alert-{$type} {background-color: ".$color_code."20;    border-color: ".$color_code."30;color:$darker_40} ";
1626
-				$output .= $prefix ." .alert-{$type} {--bs-alert-bg: rgba(var(--bs-{$type}-rgb), .1 ) !important;--bs-alert-border-color: rgba(var(--bs-{$type}-rgb), .25 ) !important;--bs-alert-color: rgba(var(--bs-{$type}-rgb), 1 ) !important;} ";
1627
-			}
1628
-
1629
-			return $output;
1630
-		}
1631
-
1632
-		/**
1633
-		 * Build the CSS to overwrite a bootstrap color variable.
1634
-		 *
1635
-		 * @param $type
1636
-		 * @param $color_code
1637
-		 * @param $compatibility
1638
-		 *
1639
-		 * @return string
1640
-		 */
1641
-		public static function css_overwrite($type,$color_code,$compatibility, $hex = '' ){
1642
-            global $aui_bs5;
2050
+            // build rules into each type
2051
+            foreach($selectors as $selector => $types){
2052
+                $selector = $compatibility ? ".bsui ".$selector : $selector;
2053
+                $types = array_combine($types,$types);
2054
+                if(isset($types['c'])){$color[] = $selector;}
2055
+                if(isset($types['b'])){$background[] = $selector;}
2056
+                if(isset($types['o'])){$border[] = $selector;}
2057
+                if(isset($types['f'])){$fill[] = $selector;}
2058
+            }
1643 2059
 
1644
-			$is_var = false;
1645
-			if(!$color_code){return '';}
1646
-			if(strpos($color_code, 'var') !== false){
1647
-				//if(!sanitize_hex_color($color_code)){
1648
-				$color_code = esc_attr($color_code);
1649
-				$is_var = true;
1650
-//				$color_code = "rgba($color_code, 0.5)";
1651
-//                echo '###1'.$color_code.'###';//exit;
1652
-			}
2060
+            // build rules into each type
2061
+            foreach($important_selectors as $selector => $types){
2062
+                $selector = $compatibility ? ".bsui ".$selector : $selector;
2063
+                $types = array_combine($types,$types);
2064
+                if(isset($types['c'])){$color_i[] = $selector;}
2065
+                if(isset($types['b'])){$background_i[] = $selector;}
2066
+                if(isset($types['o'])){$border_i[] = $selector;}
2067
+                if(isset($types['f'])){$fill_i[] = $selector;}
2068
+            }
1653 2069
 
1654
-//            echo '@@@'.$color_code.'==='.self::hex_to_rgb($color_code);exit;
2070
+            // add any color rules
2071
+            if(!empty($color)){
2072
+                $output .= implode(",",$color) . "{color: $color_code;} ";
2073
+            }
2074
+            if(!empty($color_i)){
2075
+                $output .= implode(",",$color_i) . "{color: $color_code !important;} ";
2076
+            }
1655 2077
 
1656
-			if(!$color_code){return '';}
2078
+            // add any background color rules
2079
+            if(!empty($background)){
2080
+                $output .= implode(",",$background) . "{background-color: $color_code;} ";
2081
+            }
2082
+            if(!empty($background_i)){
2083
+                $output .= implode(",",$background_i) . "{background-color: $color_code !important;} ";
2084
+            }
1657 2085
 
1658
-            $rgb = self::hex_to_rgb($hex);
2086
+            // add any border color rules
2087
+            if(!empty($border)){
2088
+                $output .= implode(",",$border) . "{border-color: $color_code;} ";
2089
+            }
2090
+            if(!empty($border_i)){
2091
+                $output .= implode(",",$border_i) . "{border-color: $color_code !important;} ";
2092
+            }
1659 2093
 
1660
-			if($compatibility===true || $compatibility===1){
1661
-				$compatibility = '.bsui';
1662
-			}elseif(!$compatibility){
1663
-				$compatibility = '';
1664
-			}else{
1665
-				$compatibility = esc_attr($compatibility);
1666
-			}
2094
+            // add any fill color rules
2095
+            if(!empty($fill)){
2096
+                $output .= implode(",",$fill) . "{fill: $color_code;} ";
2097
+            }
2098
+            if(!empty($fill_i)){
2099
+                $output .= implode(",",$fill_i) . "{fill: $color_code !important;} ";
2100
+            }
1667 2101
 
1668 2102
 
2103
+            $prefix = $compatibility ? ".bsui " : "";
1669 2104
 
1670
-//            echo '####'.$color_code;exit;
2105
+            // darken
2106
+            $darker_075 = self::css_hex_lighten_darken($color_code,"-0.075");
2107
+            $darker_10 = self::css_hex_lighten_darken($color_code,"-0.10");
2108
+            $darker_125 = self::css_hex_lighten_darken($color_code,"-0.125");
1671 2109
 
1672
-			$type = sanitize_html_class($type);
2110
+            // lighten
2111
+            $lighten_25 = self::css_hex_lighten_darken($color_code,"0.25");
2112
+
2113
+            // opacity see https://css-tricks.com/8-digit-hex-codes/
2114
+            $op_25 = $color_code."40"; // 25% opacity
1673 2115
 
1674
-			/**
1675
-			 * c = color, b = background color, o = border-color, f = fill
1676
-			 */
1677
-			$selectors = array(
1678
-				".btn-{$type}"                                              => array( 'b', 'o' ),
1679
-				".btn-{$type}.disabled"                                     => array( 'b', 'o' ),
1680
-				".btn-{$type}:disabled"                                     => array( 'b', 'o' ),
1681
-				".btn-outline-{$type}"                                      => array( 'c', 'o' ),
1682
-				".btn-outline-{$type}:hover"                                => array( 'b', 'o' ),
1683
-				".btn-outline-{$type}:not(:disabled):not(.disabled).active" => array( 'b', 'o' ),
1684
-				".btn-outline-{$type}:not(:disabled):not(.disabled):active" => array( 'b', 'o' ),
1685
-				".show>.btn-outline-{$type}.dropdown-toggle"                => array( 'b', 'o' ),
1686
-				".badge-{$type}"                                            => array( 'b' ),
1687
-				".alert-{$type}"                                            => array( 'b', 'o' ),
1688
-				".bg-{$type}"                                               => array( 'b', 'f' ),
1689
-				".btn-link.btn-{$type}"                                     => array( 'c' ),
1690
-			);
1691
-
1692
-			if ( $aui_bs5 ) {
1693
-                unset($selectors[".alert-{$type}" ]);
1694
-			}
1695
-
1696
-			if ( $type == 'primary' ) {
1697
-				$selectors = $selectors + array(
1698
-						'a'                                                                                                    => array( 'c' ),
1699
-						'.btn-link'                                                                                            => array( 'c' ),
1700
-						'.dropdown-item.active'                                                                                => array( 'b' ),
1701
-						'.custom-control-input:checked~.custom-control-label::before'                                          => array(
1702
-							'b',
1703
-							'o'
1704
-						),
1705
-						'.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before'                   => array(
1706
-							'b',
1707
-							'o'
1708
-						),
1709
-						'.nav-pills .nav-link.active'                                                                          => array( 'b' ),
1710
-						'.nav-pills .show>.nav-link'                                                                           => array( 'b' ),
1711
-						'.page-link'                                                                                           => array( 'c' ),
1712
-						'.page-item.active .page-link'                                                                         => array(
1713
-							'b',
1714
-							'o'
1715
-						),
1716
-						'.progress-bar'                                                                                        => array( 'b' ),
1717
-						'.list-group-item.active'                                                                              => array(
1718
-							'b',
1719
-							'o'
1720
-						),
1721
-						'.select2-container .select2-results__option--highlighted.select2-results__option[aria-selected=true]' => array( 'b' ),
1722
-//				    '.custom-range::-webkit-slider-thumb' => array('b'), // these break the inline rules...
1723
-//				    '.custom-range::-moz-range-thumb' => array('b'),
1724
-//				    '.custom-range::-ms-thumb' => array('b'),
1725
-					);
1726
-			}
1727
-
1728
-			$important_selectors = array(
1729
-				".bg-{$type}" => array('b','f'),
1730
-				".border-{$type}" => array('o'),
1731
-				".text-{$type}" => array('c'),
1732
-			);
1733
-
1734
-			$color = array();
1735
-			$color_i = array();
1736
-			$background = array();
1737
-			$background_i = array();
1738
-			$border = array();
1739
-			$border_i = array();
1740
-			$fill = array();
1741
-			$fill_i = array();
1742
-
1743
-			$output = '';
1744
-
1745
-			if ( $aui_bs5 ) {
1746
-//				$output .= $is_var ? 'html body {--bs-'.esc_attr($type).'-rgb: '.$color_code.'; }' : 'html body {--bs-'.esc_attr($type).'-rgb: '.self::hex_to_rgb($color_code).'; }';
1747
-				$output .= 'html body {--bs-'.esc_attr($type).'-rgb: '.$rgb.'; }';
1748
-			}
1749
-
1750
-			// build rules into each type
1751
-			foreach($selectors as $selector => $types){
1752
-				$selector = $compatibility ? $compatibility . " ".$selector : $selector;
1753
-				$types = array_combine($types,$types);
1754
-				if(isset($types['c'])){$color[] = $selector;}
1755
-				if(isset($types['b'])){$background[] = $selector;}
1756
-				if(isset($types['o'])){$border[] = $selector;}
1757
-				if(isset($types['f'])){$fill[] = $selector;}
1758
-			}
1759
-
1760
-			// build rules into each type
1761
-			foreach($important_selectors as $selector => $types){
1762
-				$selector = $compatibility ? $compatibility . " ".$selector : $selector;
1763
-				$types = array_combine($types,$types);
1764
-				if(isset($types['c'])){$color_i[] = $selector;}
1765
-				if(isset($types['b'])){$background_i[] = $selector;}
1766
-				if(isset($types['o'])){$border_i[] = $selector;}
1767
-				if(isset($types['f'])){$fill_i[] = $selector;}
1768
-			}
1769
-
1770
-			// add any color rules
1771
-			if(!empty($color)){
1772
-				$output .= implode(",",$color) . "{color: $color_code;} ";
1773
-			}
1774
-			if(!empty($color_i)){
1775
-				$output .= implode(",",$color_i) . "{color: $color_code !important;} ";
1776
-			}
1777
-
1778
-			// add any background color rules
1779
-			if(!empty($background)){
1780
-				$output .= implode(",",$background) . "{background-color: $color_code;} ";
1781
-			}
1782
-			if(!empty($background_i)){
1783
-				$output .= $aui_bs5 ? '' : implode(",",$background_i) . "{background-color: $color_code !important;} ";
1784
-//				$output .= implode(",",$background_i) . "{background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;} ";
1785
-			}
1786 2116
 
1787
-			// add any border color rules
1788
-			if(!empty($border)){
1789
-				$output .= implode(",",$border) . "{border-color: $color_code;} ";
1790
-			}
1791
-			if(!empty($border_i)){
1792
-				$output .= implode(",",$border_i) . "{border-color: $color_code !important;} ";
1793
-			}
2117
+            // button states
2118
+            $output .= $prefix ." .btn-secondary:hover{background-color: ".$darker_075.";    border-color: ".$darker_10.";} ";
2119
+            $output .= $prefix ." .btn-outline-secondary:not(:disabled):not(.disabled):active:focus, $prefix .btn-outline-secondary:not(:disabled):not(.disabled).active:focus, .show>$prefix .btn-outline-secondary.dropdown-toggle:focus{box-shadow: 0 0 0 0.2rem $op_25;} ";
2120
+            $output .= $prefix ." .btn-secondary:not(:disabled):not(.disabled):active, $prefix .btn-secondary:not(:disabled):not(.disabled).active, .show>$prefix .btn-secondary.dropdown-toggle{background-color: ".$darker_10.";    border-color: ".$darker_125.";} ";
2121
+            $output .= $prefix ." .btn-secondary:not(:disabled):not(.disabled):active:focus, $prefix .btn-secondary:not(:disabled):not(.disabled).active:focus, .show>$prefix .btn-secondary.dropdown-toggle:focus {box-shadow: 0 0 0 0.2rem $op_25;} ";
1794 2122
 
1795
-			// add any fill color rules
1796
-			if(!empty($fill)){
1797
-				$output .= implode(",",$fill) . "{fill: $color_code;} ";
1798
-			}
1799
-			if(!empty($fill_i)){
1800
-				$output .= implode(",",$fill_i) . "{fill: $color_code !important;} ";
1801
-			}
1802 2123
 
2124
+            return $output;
2125
+        }
2126
+
2127
+        /**
2128
+         * Increases or decreases the brightness of a color by a percentage of the current brightness.
2129
+         *
2130
+         * @param   string  $hexCode        Supported formats: `#FFF`, `#FFFFFF`, `FFF`, `FFFFFF`
2131
+         * @param   float   $adjustPercent  A number between -1 and 1. E.g. 0.3 = 30% lighter; -0.4 = 40% darker.
2132
+         *
2133
+         * @return  string
2134
+         */
2135
+        public static function css_hex_lighten_darken($hexCode, $adjustPercent) {
2136
+            $hexCode = ltrim($hexCode, '#');
1803 2137
 
1804
-			$prefix = $compatibility ? $compatibility . " " : "";
2138
+            if ( strpos( $hexCode, 'rgba(' ) !== false || strpos( $hexCode, 'rgb(' ) !== false ) {
2139
+                return $hexCode;
2140
+            }
1805 2141
 
1806
-			$transition = $is_var ? 'transition: color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out,filter 0.15s ease-in-out;' : '';
1807
-			// darken
1808
-			$darker_075 = $is_var ? $color_code.';filter:brightness(0.925)' : self::css_hex_lighten_darken($color_code,"-0.075");
1809
-			$darker_10 = $is_var ? $color_code.';filter:brightness(0.9)' : self::css_hex_lighten_darken($color_code,"-0.10");
1810
-			$darker_125 = $is_var ? $color_code.';filter:brightness(0.875)' : self::css_hex_lighten_darken($color_code,"-0.125");
1811
-			$darker_40 = $is_var ? $color_code.';filter:brightness(0.6)' : self::css_hex_lighten_darken($color_code,"-0.4");
2142
+            if (strlen($hexCode) == 3) {
2143
+                $hexCode = $hexCode[0] . $hexCode[0] . $hexCode[1] . $hexCode[1] . $hexCode[2] . $hexCode[2];
2144
+            }
1812 2145
 
1813
-			// lighten
1814
-			$lighten_25 = $is_var ? $color_code.';filter:brightness(1.25)' :self::css_hex_lighten_darken($color_code,"0.25");
2146
+            $hexCode = array_map('hexdec', str_split($hexCode, 2));
1815 2147
 
1816
-			// opacity see https://css-tricks.com/8-digit-hex-codes/
1817
-			$op_25 = $color_code."40"; // 25% opacity
2148
+            foreach ($hexCode as & $color) {
2149
+                $adjustableLimit = $adjustPercent < 0 ? $color : 255 - $color;
2150
+                $adjustAmount = ceil($adjustableLimit * $adjustPercent);
1818 2151
 
2152
+                $color = str_pad(dechex($color + $adjustAmount), 2, '0', STR_PAD_LEFT);
2153
+            }
1819 2154
 
1820
-			// button states
1821
-			$output .= $is_var ? $prefix ." .btn-{$type}{{$transition }} " : '';
1822
-			$output .= $prefix ." .btn-{$type}:hover, $prefix .btn-{$type}:focus, $prefix .btn-{$type}.focus{background-color: ".$darker_075.";    border-color: ".$darker_10.";} ";
1823
-//			$output .= $prefix ." .btn-{$type}:hover, $prefix .btn-{$type}:focus, $prefix .btn-{$type}.focus{background-color: #000;    border-color: #000;} ";
1824
-			$output .= $prefix ." .btn-outline-{$type}:not(:disabled):not(.disabled):active:focus, $prefix .btn-outline-{$type}:not(:disabled):not(.disabled).active:focus, .show>$prefix .btn-outline-{$type}.dropdown-toggle:focus{box-shadow: 0 0 0 0.2rem $op_25;} ";
1825
-			$output .= $prefix ." .btn-{$type}:not(:disabled):not(.disabled):active, $prefix .btn-{$type}:not(:disabled):not(.disabled).active, .show>$prefix .btn-{$type}.dropdown-toggle{background-color: ".$darker_10.";    border-color: ".$darker_125.";} ";
1826
-			$output .= $prefix ." .btn-{$type}:not(:disabled):not(.disabled):active:focus, $prefix .btn-{$type}:not(:disabled):not(.disabled).active:focus, .show>$prefix .btn-{$type}.dropdown-toggle:focus {box-shadow: 0 0 0 0.2rem $op_25;} ";
2155
+            return '#' . implode($hexCode);
2156
+        }
1827 2157
 
1828
-			if ( $type == 'primary' ) {
1829
-				// dropdown's
1830
-				$output .= $prefix . " .dropdown-item.active, $prefix .dropdown-item:active{background-color: $color_code;} ";
2158
+        /**
2159
+         * Check if we should display examples.
2160
+         */
2161
+        public function maybe_show_examples(){
2162
+            if(current_user_can('manage_options') && isset($_REQUEST['preview-aui'])){
2163
+                echo "<head>";
2164
+                wp_head();
2165
+                echo "</head>";
2166
+                echo "<body>";
2167
+                echo $this->get_examples(); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
2168
+                echo "</body>";
2169
+                exit;
2170
+            }
2171
+        }
1831 2172
 
1832
-				// input states
1833
-				$output .= $prefix . " .form-control:focus{border-color: " . $lighten_25 . ";box-shadow: 0 0 0 0.2rem $op_25;} ";
2173
+        /**
2174
+         * Get developer examples.
2175
+         *
2176
+         * @return string
2177
+         */
2178
+        public function get_examples(){
2179
+            $output = '';
1834 2180
 
1835
-				// page link
1836
-				$output .= $prefix . " .page-link:focus{box-shadow: 0 0 0 0.2rem $op_25;} ";
1837
-			}
1838 2181
 
1839
-            // alerts
1840
-			if ( $aui_bs5 ) {
1841
-//				$output .= $is_var ? '' : $prefix ." .alert-{$type} {background-color: ".$color_code."20;    border-color: ".$color_code."30;color:$darker_40} ";
1842
-				$output .= $prefix ." .alert-{$type} {--bs-alert-bg: rgba(var(--bs-{$type}-rgb), .1 ) !important;--bs-alert-border-color: rgba(var(--bs-{$type}-rgb), .25 ) !important;--bs-alert-color: rgba(var(--bs-{$type}-rgb), 1 ) !important;} ";
1843
-			}
1844
-
1845
-			return $output;
1846
-		}
1847
-
1848
-		/**
1849
-		 *
1850
-		 * @deprecated 0.1.76 Use css_overwrite()
1851
-		 *
1852
-		 * @param $color_code
1853
-		 * @param $compatibility
1854
-		 * @param $use_variable
1855
-		 *
1856
-		 * @return string
1857
-		 */
1858
-		public static function css_primary($color_code,$compatibility, $use_variable = false){
1859
-
1860
-			if(!$use_variable){
1861
-				$color_code = sanitize_hex_color($color_code);
1862
-				if(!$color_code){return '';}
1863
-			}
1864
-
1865
-			/**
1866
-			 * c = color, b = background color, o = border-color, f = fill
1867
-			 */
1868
-			$selectors = array(
1869
-				'a' => array('c'),
1870
-				'.btn-primary' => array('b','o'),
1871
-				'.btn-primary.disabled' => array('b','o'),
1872
-				'.btn-primary:disabled' => array('b','o'),
1873
-				'.btn-outline-primary' => array('c','o'),
1874
-				'.btn-outline-primary:hover' => array('b','o'),
1875
-				'.btn-outline-primary:not(:disabled):not(.disabled).active' => array('b','o'),
1876
-				'.btn-outline-primary:not(:disabled):not(.disabled):active' => array('b','o'),
1877
-				'.show>.btn-outline-primary.dropdown-toggle' => array('b','o'),
1878
-				'.btn-link' => array('c'),
1879
-				'.dropdown-item.active' => array('b'),
1880
-				'.custom-control-input:checked~.custom-control-label::before' => array('b','o'),
1881
-				'.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before' => array('b','o'),
1882
-//				'.custom-range::-webkit-slider-thumb' => array('b'), // these break the inline rules...
1883
-//				'.custom-range::-moz-range-thumb' => array('b'),
1884
-//				'.custom-range::-ms-thumb' => array('b'),
1885
-				'.nav-pills .nav-link.active' => array('b'),
1886
-				'.nav-pills .show>.nav-link' => array('b'),
1887
-				'.page-link' => array('c'),
1888
-				'.page-item.active .page-link' => array('b','o'),
1889
-				'.badge-primary' => array('b'),
1890
-				'.alert-primary' => array('b','o'),
1891
-				'.progress-bar' => array('b'),
1892
-				'.list-group-item.active' => array('b','o'),
1893
-				'.bg-primary' => array('b','f'),
1894
-				'.btn-link.btn-primary' => array('c'),
1895
-				'.select2-container .select2-results__option--highlighted.select2-results__option[aria-selected=true]' => array('b'),
1896
-			);
1897
-
1898
-			$important_selectors = array(
1899
-				'.bg-primary' => array('b','f'),
1900
-				'.border-primary' => array('o'),
1901
-				'.text-primary' => array('c'),
1902
-			);
1903
-
1904
-			$color = array();
1905
-			$color_i = array();
1906
-			$background = array();
1907
-			$background_i = array();
1908
-			$border = array();
1909
-			$border_i = array();
1910
-			$fill = array();
1911
-			$fill_i = array();
1912
-
1913
-			$output = '';
1914
-
1915
-			// build rules into each type
1916
-			foreach($selectors as $selector => $types){
1917
-				$selector = $compatibility ? ".bsui ".$selector : $selector;
1918
-				$types = array_combine($types,$types);
1919
-				if(isset($types['c'])){$color[] = $selector;}
1920
-				if(isset($types['b'])){$background[] = $selector;}
1921
-				if(isset($types['o'])){$border[] = $selector;}
1922
-				if(isset($types['f'])){$fill[] = $selector;}
1923
-			}
1924
-
1925
-			// build rules into each type
1926
-			foreach($important_selectors as $selector => $types){
1927
-				$selector = $compatibility ? ".bsui ".$selector : $selector;
1928
-				$types = array_combine($types,$types);
1929
-				if(isset($types['c'])){$color_i[] = $selector;}
1930
-				if(isset($types['b'])){$background_i[] = $selector;}
1931
-				if(isset($types['o'])){$border_i[] = $selector;}
1932
-				if(isset($types['f'])){$fill_i[] = $selector;}
1933
-			}
1934
-
1935
-			// add any color rules
1936
-			if(!empty($color)){
1937
-				$output .= implode(",",$color) . "{color: $color_code;} ";
1938
-			}
1939
-			if(!empty($color_i)){
1940
-				$output .= implode(",",$color_i) . "{color: $color_code !important;} ";
1941
-			}
1942
-
1943
-			// add any background color rules
1944
-			if(!empty($background)){
1945
-				$output .= implode(",",$background) . "{background-color: $color_code;} ";
1946
-			}
1947
-			if(!empty($background_i)){
1948
-				$output .= implode(",",$background_i) . "{background-color: $color_code !important;} ";
1949
-			}
1950
-
1951
-			// add any border color rules
1952
-			if(!empty($border)){
1953
-				$output .= implode(",",$border) . "{border-color: $color_code;} ";
1954
-			}
1955
-			if(!empty($border_i)){
1956
-				$output .= implode(",",$border_i) . "{border-color: $color_code !important;} ";
1957
-			}
1958
-
1959
-			// add any fill color rules
1960
-			if(!empty($fill)){
1961
-				$output .= implode(",",$fill) . "{fill: $color_code;} ";
1962
-			}
1963
-			if(!empty($fill_i)){
1964
-				$output .= implode(",",$fill_i) . "{fill: $color_code !important;} ";
1965
-			}
1966
-
1967
-
1968
-			$prefix = $compatibility ? ".bsui " : "";
1969
-
1970
-			// darken
1971
-			$darker_075 = self::css_hex_lighten_darken($color_code,"-0.075");
1972
-			$darker_10 = self::css_hex_lighten_darken($color_code,"-0.10");
1973
-			$darker_125 = self::css_hex_lighten_darken($color_code,"-0.125");
1974
-
1975
-			// lighten
1976
-			$lighten_25 = self::css_hex_lighten_darken($color_code,"0.25");
1977
-
1978
-			// opacity see https://css-tricks.com/8-digit-hex-codes/
1979
-			$op_25 = $color_code."40"; // 25% opacity
1980
-
1981
-
1982
-			// button states
1983
-			$output .= $prefix ." .btn-primary:hover, $prefix .btn-primary:focus, $prefix .btn-primary.focus{background-color: ".$darker_075.";    border-color: ".$darker_10.";} ";
1984
-			$output .= $prefix ." .btn-outline-primary:not(:disabled):not(.disabled):active:focus, $prefix .btn-outline-primary:not(:disabled):not(.disabled).active:focus, .show>$prefix .btn-outline-primary.dropdown-toggle:focus{box-shadow: 0 0 0 0.2rem $op_25;} ";
1985
-			$output .= $prefix ." .btn-primary:not(:disabled):not(.disabled):active, $prefix .btn-primary:not(:disabled):not(.disabled).active, .show>$prefix .btn-primary.dropdown-toggle{background-color: ".$darker_10.";    border-color: ".$darker_125.";} ";
1986
-			$output .= $prefix ." .btn-primary:not(:disabled):not(.disabled):active:focus, $prefix .btn-primary:not(:disabled):not(.disabled).active:focus, .show>$prefix .btn-primary.dropdown-toggle:focus {box-shadow: 0 0 0 0.2rem $op_25;} ";
1987
-
1988
-
1989
-			// dropdown's
1990
-			$output .= $prefix ." .dropdown-item.active, $prefix .dropdown-item:active{background-color: $color_code;} ";
1991
-
1992
-
1993
-			// input states
1994
-			$output .= $prefix ." .form-control:focus{border-color: ".$lighten_25.";box-shadow: 0 0 0 0.2rem $op_25;} ";
1995
-
1996
-			// page link
1997
-			$output .= $prefix ." .page-link:focus{box-shadow: 0 0 0 0.2rem $op_25;} ";
1998
-
1999
-			return $output;
2000
-		}
2001
-
2002
-		/**
2003
-		 *
2004
-		 * @deprecated 0.1.76 Use css_overwrite()
2005
-		 *
2006
-		 * @param $color_code
2007
-		 * @param $compatibility
2008
-		 *
2009
-		 * @return string
2010
-		 */
2011
-		public static function css_secondary($color_code,$compatibility){;
2012
-			$color_code = sanitize_hex_color($color_code);
2013
-			if(!$color_code){return '';}
2014
-			/**
2015
-			 * c = color, b = background color, o = border-color, f = fill
2016
-			 */
2017
-			$selectors = array(
2018
-				'.btn-secondary' => array('b','o'),
2019
-				'.btn-secondary.disabled' => array('b','o'),
2020
-				'.btn-secondary:disabled' => array('b','o'),
2021
-				'.btn-outline-secondary' => array('c','o'),
2022
-				'.btn-outline-secondary:hover' => array('b','o'),
2023
-				'.btn-outline-secondary.disabled' => array('c'),
2024
-				'.btn-outline-secondary:disabled' => array('c'),
2025
-				'.btn-outline-secondary:not(:disabled):not(.disabled):active' => array('b','o'),
2026
-				'.btn-outline-secondary:not(:disabled):not(.disabled).active' => array('b','o'),
2027
-				'.btn-outline-secondary.dropdown-toggle' => array('b','o'),
2028
-				'.badge-secondary' => array('b'),
2029
-				'.alert-secondary' => array('b','o'),
2030
-				'.btn-link.btn-secondary' => array('c'),
2031
-			);
2032
-
2033
-			$important_selectors = array(
2034
-				'.bg-secondary' => array('b','f'),
2035
-				'.border-secondary' => array('o'),
2036
-				'.text-secondary' => array('c'),
2037
-			);
2038
-
2039
-			$color = array();
2040
-			$color_i = array();
2041
-			$background = array();
2042
-			$background_i = array();
2043
-			$border = array();
2044
-			$border_i = array();
2045
-			$fill = array();
2046
-			$fill_i = array();
2047
-
2048
-			$output = '';
2049
-
2050
-			// build rules into each type
2051
-			foreach($selectors as $selector => $types){
2052
-				$selector = $compatibility ? ".bsui ".$selector : $selector;
2053
-				$types = array_combine($types,$types);
2054
-				if(isset($types['c'])){$color[] = $selector;}
2055
-				if(isset($types['b'])){$background[] = $selector;}
2056
-				if(isset($types['o'])){$border[] = $selector;}
2057
-				if(isset($types['f'])){$fill[] = $selector;}
2058
-			}
2059
-
2060
-			// build rules into each type
2061
-			foreach($important_selectors as $selector => $types){
2062
-				$selector = $compatibility ? ".bsui ".$selector : $selector;
2063
-				$types = array_combine($types,$types);
2064
-				if(isset($types['c'])){$color_i[] = $selector;}
2065
-				if(isset($types['b'])){$background_i[] = $selector;}
2066
-				if(isset($types['o'])){$border_i[] = $selector;}
2067
-				if(isset($types['f'])){$fill_i[] = $selector;}
2068
-			}
2069
-
2070
-			// add any color rules
2071
-			if(!empty($color)){
2072
-				$output .= implode(",",$color) . "{color: $color_code;} ";
2073
-			}
2074
-			if(!empty($color_i)){
2075
-				$output .= implode(",",$color_i) . "{color: $color_code !important;} ";
2076
-			}
2077
-
2078
-			// add any background color rules
2079
-			if(!empty($background)){
2080
-				$output .= implode(",",$background) . "{background-color: $color_code;} ";
2081
-			}
2082
-			if(!empty($background_i)){
2083
-				$output .= implode(",",$background_i) . "{background-color: $color_code !important;} ";
2084
-			}
2085
-
2086
-			// add any border color rules
2087
-			if(!empty($border)){
2088
-				$output .= implode(",",$border) . "{border-color: $color_code;} ";
2089
-			}
2090
-			if(!empty($border_i)){
2091
-				$output .= implode(",",$border_i) . "{border-color: $color_code !important;} ";
2092
-			}
2093
-
2094
-			// add any fill color rules
2095
-			if(!empty($fill)){
2096
-				$output .= implode(",",$fill) . "{fill: $color_code;} ";
2097
-			}
2098
-			if(!empty($fill_i)){
2099
-				$output .= implode(",",$fill_i) . "{fill: $color_code !important;} ";
2100
-			}
2101
-
2102
-
2103
-			$prefix = $compatibility ? ".bsui " : "";
2104
-
2105
-			// darken
2106
-			$darker_075 = self::css_hex_lighten_darken($color_code,"-0.075");
2107
-			$darker_10 = self::css_hex_lighten_darken($color_code,"-0.10");
2108
-			$darker_125 = self::css_hex_lighten_darken($color_code,"-0.125");
2109
-
2110
-			// lighten
2111
-			$lighten_25 = self::css_hex_lighten_darken($color_code,"0.25");
2112
-
2113
-			// opacity see https://css-tricks.com/8-digit-hex-codes/
2114
-			$op_25 = $color_code."40"; // 25% opacity
2115
-
2116
-
2117
-			// button states
2118
-			$output .= $prefix ." .btn-secondary:hover{background-color: ".$darker_075.";    border-color: ".$darker_10.";} ";
2119
-			$output .= $prefix ." .btn-outline-secondary:not(:disabled):not(.disabled):active:focus, $prefix .btn-outline-secondary:not(:disabled):not(.disabled).active:focus, .show>$prefix .btn-outline-secondary.dropdown-toggle:focus{box-shadow: 0 0 0 0.2rem $op_25;} ";
2120
-			$output .= $prefix ." .btn-secondary:not(:disabled):not(.disabled):active, $prefix .btn-secondary:not(:disabled):not(.disabled).active, .show>$prefix .btn-secondary.dropdown-toggle{background-color: ".$darker_10.";    border-color: ".$darker_125.";} ";
2121
-			$output .= $prefix ." .btn-secondary:not(:disabled):not(.disabled):active:focus, $prefix .btn-secondary:not(:disabled):not(.disabled).active:focus, .show>$prefix .btn-secondary.dropdown-toggle:focus {box-shadow: 0 0 0 0.2rem $op_25;} ";
2122
-
2123
-
2124
-			return $output;
2125
-		}
2126
-
2127
-		/**
2128
-		 * Increases or decreases the brightness of a color by a percentage of the current brightness.
2129
-		 *
2130
-		 * @param   string  $hexCode        Supported formats: `#FFF`, `#FFFFFF`, `FFF`, `FFFFFF`
2131
-		 * @param   float   $adjustPercent  A number between -1 and 1. E.g. 0.3 = 30% lighter; -0.4 = 40% darker.
2132
-		 *
2133
-		 * @return  string
2134
-		 */
2135
-		public static function css_hex_lighten_darken($hexCode, $adjustPercent) {
2136
-			$hexCode = ltrim($hexCode, '#');
2137
-
2138
-			if ( strpos( $hexCode, 'rgba(' ) !== false || strpos( $hexCode, 'rgb(' ) !== false ) {
2139
-				return $hexCode;
2140
-			}
2141
-
2142
-			if (strlen($hexCode) == 3) {
2143
-				$hexCode = $hexCode[0] . $hexCode[0] . $hexCode[1] . $hexCode[1] . $hexCode[2] . $hexCode[2];
2144
-			}
2145
-
2146
-			$hexCode = array_map('hexdec', str_split($hexCode, 2));
2147
-
2148
-			foreach ($hexCode as & $color) {
2149
-				$adjustableLimit = $adjustPercent < 0 ? $color : 255 - $color;
2150
-				$adjustAmount = ceil($adjustableLimit * $adjustPercent);
2151
-
2152
-				$color = str_pad(dechex($color + $adjustAmount), 2, '0', STR_PAD_LEFT);
2153
-			}
2154
-
2155
-			return '#' . implode($hexCode);
2156
-		}
2157
-
2158
-		/**
2159
-		 * Check if we should display examples.
2160
-		 */
2161
-		public function maybe_show_examples(){
2162
-			if(current_user_can('manage_options') && isset($_REQUEST['preview-aui'])){
2163
-				echo "<head>";
2164
-				wp_head();
2165
-				echo "</head>";
2166
-				echo "<body>";
2167
-				echo $this->get_examples(); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
2168
-				echo "</body>";
2169
-				exit;
2170
-			}
2171
-		}
2172
-
2173
-		/**
2174
-		 * Get developer examples.
2175
-		 *
2176
-		 * @return string
2177
-		 */
2178
-		public function get_examples(){
2179
-			$output = '';
2180
-
2181
-
2182
-			// open form
2183
-			$output .= "<form class='p-5 m-5 border rounded'>";
2184
-
2185
-			// input example
2186
-			$output .= aui()->input(array(
2187
-				'type'  =>  'text',
2188
-				'id'    =>  'text-example',
2189
-				'name'    =>  'text-example',
2190
-				'placeholder'   => 'text placeholder',
2191
-				'title'   => 'Text input example',
2192
-				'value' =>  '',
2193
-				'required'  => false,
2194
-				'help_text' => 'help text',
2195
-				'label' => 'Text input example label'
2196
-			));
2197
-
2198
-			// input example
2199
-			$output .= aui()->input(array(
2200
-				'type'  =>  'url',
2201
-				'id'    =>  'text-example2',
2202
-				'name'    =>  'text-example',
2203
-				'placeholder'   => 'url placeholder',
2204
-				'title'   => 'Text input example',
2205
-				'value' =>  '',
2206
-				'required'  => false,
2207
-				'help_text' => 'help text',
2208
-				'label' => 'Text input example label'
2209
-			));
2210
-
2211
-			// checkbox example
2212
-			$output .= aui()->input(array(
2213
-				'type'  =>  'checkbox',
2214
-				'id'    =>  'checkbox-example',
2215
-				'name'    =>  'checkbox-example',
2216
-				'placeholder'   => 'checkbox-example',
2217
-				'title'   => 'Checkbox example',
2218
-				'value' =>  '1',
2219
-				'checked'   => true,
2220
-				'required'  => false,
2221
-				'help_text' => 'help text',
2222
-				'label' => 'Checkbox checked'
2223
-			));
2224
-
2225
-			// checkbox example
2226
-			$output .= aui()->input(array(
2227
-				'type'  =>  'checkbox',
2228
-				'id'    =>  'checkbox-example2',
2229
-				'name'    =>  'checkbox-example2',
2230
-				'placeholder'   => 'checkbox-example',
2231
-				'title'   => 'Checkbox example',
2232
-				'value' =>  '1',
2233
-				'checked'   => false,
2234
-				'required'  => false,
2235
-				'help_text' => 'help text',
2236
-				'label' => 'Checkbox un-checked'
2237
-			));
2238
-
2239
-			// switch example
2240
-			$output .= aui()->input(array(
2241
-				'type'  =>  'checkbox',
2242
-				'id'    =>  'switch-example',
2243
-				'name'    =>  'switch-example',
2244
-				'placeholder'   => 'checkbox-example',
2245
-				'title'   => 'Switch example',
2246
-				'value' =>  '1',
2247
-				'checked'   => true,
2248
-				'switch'    => true,
2249
-				'required'  => false,
2250
-				'help_text' => 'help text',
2251
-				'label' => 'Switch on'
2252
-			));
2253
-
2254
-			// switch example
2255
-			$output .= aui()->input(array(
2256
-				'type'  =>  'checkbox',
2257
-				'id'    =>  'switch-example2',
2258
-				'name'    =>  'switch-example2',
2259
-				'placeholder'   => 'checkbox-example',
2260
-				'title'   => 'Switch example',
2261
-				'value' =>  '1',
2262
-				'checked'   => false,
2263
-				'switch'    => true,
2264
-				'required'  => false,
2265
-				'help_text' => 'help text',
2266
-				'label' => 'Switch off'
2267
-			));
2268
-
2269
-			// close form
2270
-			$output .= "</form>";
2271
-
2272
-			return $output;
2273
-		}
2274
-
2275
-		/**
2276
-		 * Calendar params.
2277
-		 *
2278
-		 * @since 0.1.44
2279
-		 *
2280
-		 * @return array Calendar params.
2281
-		 */
2282
-		public static function calendar_params() {
2283
-			$params = array(
2284
-				'month_long_1' => __( 'January', 'ayecode-connect' ),
2285
-				'month_long_2' => __( 'February', 'ayecode-connect' ),
2286
-				'month_long_3' => __( 'March', 'ayecode-connect' ),
2287
-				'month_long_4' => __( 'April', 'ayecode-connect' ),
2288
-				'month_long_5' => __( 'May', 'ayecode-connect' ),
2289
-				'month_long_6' => __( 'June', 'ayecode-connect' ),
2290
-				'month_long_7' => __( 'July', 'ayecode-connect' ),
2291
-				'month_long_8' => __( 'August', 'ayecode-connect' ),
2292
-				'month_long_9' => __( 'September', 'ayecode-connect' ),
2293
-				'month_long_10' => __( 'October', 'ayecode-connect' ),
2294
-				'month_long_11' => __( 'November', 'ayecode-connect' ),
2295
-				'month_long_12' => __( 'December', 'ayecode-connect' ),
2296
-				'month_s_1' => _x( 'Jan', 'January abbreviation', 'ayecode-connect' ),
2297
-				'month_s_2' => _x( 'Feb', 'February abbreviation', 'ayecode-connect' ),
2298
-				'month_s_3' => _x( 'Mar', 'March abbreviation', 'ayecode-connect' ),
2299
-				'month_s_4' => _x( 'Apr', 'April abbreviation', 'ayecode-connect' ),
2300
-				'month_s_5' => _x( 'May', 'May abbreviation', 'ayecode-connect' ),
2301
-				'month_s_6' => _x( 'Jun', 'June abbreviation', 'ayecode-connect' ),
2302
-				'month_s_7' => _x( 'Jul', 'July abbreviation', 'ayecode-connect' ),
2303
-				'month_s_8' => _x( 'Aug', 'August abbreviation', 'ayecode-connect' ),
2304
-				'month_s_9' => _x( 'Sep', 'September abbreviation', 'ayecode-connect' ),
2305
-				'month_s_10' => _x( 'Oct', 'October abbreviation', 'ayecode-connect' ),
2306
-				'month_s_11' => _x( 'Nov', 'November abbreviation', 'ayecode-connect' ),
2307
-				'month_s_12' => _x( 'Dec', 'December abbreviation', 'ayecode-connect' ),
2308
-				'day_s1_1' => _x( 'S', 'Sunday initial', 'ayecode-connect' ),
2309
-				'day_s1_2' => _x( 'M', 'Monday initial', 'ayecode-connect' ),
2310
-				'day_s1_3' => _x( 'T', 'Tuesday initial', 'ayecode-connect' ),
2311
-				'day_s1_4' => _x( 'W', 'Wednesday initial', 'ayecode-connect' ),
2312
-				'day_s1_5' => _x( 'T', 'Friday initial', 'ayecode-connect' ),
2313
-				'day_s1_6' => _x( 'F', 'Thursday initial', 'ayecode-connect' ),
2314
-				'day_s1_7' => _x( 'S', 'Saturday initial', 'ayecode-connect' ),
2315
-				'day_s2_1' => __( 'Su', 'ayecode-connect' ),
2316
-				'day_s2_2' => __( 'Mo', 'ayecode-connect' ),
2317
-				'day_s2_3' => __( 'Tu', 'ayecode-connect' ),
2318
-				'day_s2_4' => __( 'We', 'ayecode-connect' ),
2319
-				'day_s2_5' => __( 'Th', 'ayecode-connect' ),
2320
-				'day_s2_6' => __( 'Fr', 'ayecode-connect' ),
2321
-				'day_s2_7' => __( 'Sa', 'ayecode-connect' ),
2322
-				'day_s3_1' => __( 'Sun', 'ayecode-connect' ),
2323
-				'day_s3_2' => __( 'Mon', 'ayecode-connect' ),
2324
-				'day_s3_3' => __( 'Tue', 'ayecode-connect' ),
2325
-				'day_s3_4' => __( 'Wed', 'ayecode-connect' ),
2326
-				'day_s3_5' => __( 'Thu', 'ayecode-connect' ),
2327
-				'day_s3_6' => __( 'Fri', 'ayecode-connect' ),
2328
-				'day_s3_7' => __( 'Sat', 'ayecode-connect' ),
2329
-				'day_s5_1' => __( 'Sunday', 'ayecode-connect' ),
2330
-				'day_s5_2' => __( 'Monday', 'ayecode-connect' ),
2331
-				'day_s5_3' => __( 'Tuesday', 'ayecode-connect' ),
2332
-				'day_s5_4' => __( 'Wednesday', 'ayecode-connect' ),
2333
-				'day_s5_5' => __( 'Thursday', 'ayecode-connect' ),
2334
-				'day_s5_6' => __( 'Friday', 'ayecode-connect' ),
2335
-				'day_s5_7' => __( 'Saturday', 'ayecode-connect' ),
2336
-				'am_lower' => __( 'am', 'ayecode-connect' ),
2337
-				'pm_lower' => __( 'pm', 'ayecode-connect' ),
2338
-				'am_upper' => __( 'AM', 'ayecode-connect' ),
2339
-				'pm_upper' => __( 'PM', 'ayecode-connect' ),
2340
-				'firstDayOfWeek' => (int) get_option( 'start_of_week' ),
2341
-				'time_24hr' => false,
2342
-				'year' => __( 'Year', 'ayecode-connect' ),
2343
-				'hour' => __( 'Hour', 'ayecode-connect' ),
2344
-				'minute' => __( 'Minute', 'ayecode-connect' ),
2345
-				'weekAbbreviation' => __( 'Wk', 'ayecode-connect' ),
2346
-				'rangeSeparator' => __( ' to ', 'ayecode-connect' ),
2347
-				'scrollTitle' => __( 'Scroll to increment', 'ayecode-connect' ),
2348
-				'toggleTitle' => __( 'Click to toggle', 'ayecode-connect' )
2349
-			);
2350
-
2351
-			return apply_filters( 'ayecode_ui_calendar_params', $params );
2352
-		}
2353
-
2354
-		/**
2355
-		 * Flatpickr calendar localize.
2356
-		 *
2357
-		 * @since 0.1.44
2358
-		 *
2359
-		 * @return string Calendar locale.
2360
-		 */
2361
-		public static function flatpickr_locale() {
2362
-			$params = self::calendar_params();
2363
-
2364
-			if ( is_string( $params ) ) {
2365
-				$params = html_entity_decode( $params, ENT_QUOTES, 'UTF-8' );
2366
-			} else {
2367
-				foreach ( (array) $params as $key => $value ) {
2368
-					if ( ! is_scalar( $value ) ) {
2369
-						continue;
2370
-					}
2371
-
2372
-					$params[ $key ] = html_entity_decode( (string) $value, ENT_QUOTES, 'UTF-8' );
2373
-				}
2374
-			}
2182
+            // open form
2183
+            $output .= "<form class='p-5 m-5 border rounded'>";
2184
+
2185
+            // input example
2186
+            $output .= aui()->input(array(
2187
+                'type'  =>  'text',
2188
+                'id'    =>  'text-example',
2189
+                'name'    =>  'text-example',
2190
+                'placeholder'   => 'text placeholder',
2191
+                'title'   => 'Text input example',
2192
+                'value' =>  '',
2193
+                'required'  => false,
2194
+                'help_text' => 'help text',
2195
+                'label' => 'Text input example label'
2196
+            ));
2197
+
2198
+            // input example
2199
+            $output .= aui()->input(array(
2200
+                'type'  =>  'url',
2201
+                'id'    =>  'text-example2',
2202
+                'name'    =>  'text-example',
2203
+                'placeholder'   => 'url placeholder',
2204
+                'title'   => 'Text input example',
2205
+                'value' =>  '',
2206
+                'required'  => false,
2207
+                'help_text' => 'help text',
2208
+                'label' => 'Text input example label'
2209
+            ));
2210
+
2211
+            // checkbox example
2212
+            $output .= aui()->input(array(
2213
+                'type'  =>  'checkbox',
2214
+                'id'    =>  'checkbox-example',
2215
+                'name'    =>  'checkbox-example',
2216
+                'placeholder'   => 'checkbox-example',
2217
+                'title'   => 'Checkbox example',
2218
+                'value' =>  '1',
2219
+                'checked'   => true,
2220
+                'required'  => false,
2221
+                'help_text' => 'help text',
2222
+                'label' => 'Checkbox checked'
2223
+            ));
2224
+
2225
+            // checkbox example
2226
+            $output .= aui()->input(array(
2227
+                'type'  =>  'checkbox',
2228
+                'id'    =>  'checkbox-example2',
2229
+                'name'    =>  'checkbox-example2',
2230
+                'placeholder'   => 'checkbox-example',
2231
+                'title'   => 'Checkbox example',
2232
+                'value' =>  '1',
2233
+                'checked'   => false,
2234
+                'required'  => false,
2235
+                'help_text' => 'help text',
2236
+                'label' => 'Checkbox un-checked'
2237
+            ));
2238
+
2239
+            // switch example
2240
+            $output .= aui()->input(array(
2241
+                'type'  =>  'checkbox',
2242
+                'id'    =>  'switch-example',
2243
+                'name'    =>  'switch-example',
2244
+                'placeholder'   => 'checkbox-example',
2245
+                'title'   => 'Switch example',
2246
+                'value' =>  '1',
2247
+                'checked'   => true,
2248
+                'switch'    => true,
2249
+                'required'  => false,
2250
+                'help_text' => 'help text',
2251
+                'label' => 'Switch on'
2252
+            ));
2253
+
2254
+            // switch example
2255
+            $output .= aui()->input(array(
2256
+                'type'  =>  'checkbox',
2257
+                'id'    =>  'switch-example2',
2258
+                'name'    =>  'switch-example2',
2259
+                'placeholder'   => 'checkbox-example',
2260
+                'title'   => 'Switch example',
2261
+                'value' =>  '1',
2262
+                'checked'   => false,
2263
+                'switch'    => true,
2264
+                'required'  => false,
2265
+                'help_text' => 'help text',
2266
+                'label' => 'Switch off'
2267
+            ));
2268
+
2269
+            // close form
2270
+            $output .= "</form>";
2271
+
2272
+            return $output;
2273
+        }
2274
+
2275
+        /**
2276
+         * Calendar params.
2277
+         *
2278
+         * @since 0.1.44
2279
+         *
2280
+         * @return array Calendar params.
2281
+         */
2282
+        public static function calendar_params() {
2283
+            $params = array(
2284
+                'month_long_1' => __( 'January', 'ayecode-connect' ),
2285
+                'month_long_2' => __( 'February', 'ayecode-connect' ),
2286
+                'month_long_3' => __( 'March', 'ayecode-connect' ),
2287
+                'month_long_4' => __( 'April', 'ayecode-connect' ),
2288
+                'month_long_5' => __( 'May', 'ayecode-connect' ),
2289
+                'month_long_6' => __( 'June', 'ayecode-connect' ),
2290
+                'month_long_7' => __( 'July', 'ayecode-connect' ),
2291
+                'month_long_8' => __( 'August', 'ayecode-connect' ),
2292
+                'month_long_9' => __( 'September', 'ayecode-connect' ),
2293
+                'month_long_10' => __( 'October', 'ayecode-connect' ),
2294
+                'month_long_11' => __( 'November', 'ayecode-connect' ),
2295
+                'month_long_12' => __( 'December', 'ayecode-connect' ),
2296
+                'month_s_1' => _x( 'Jan', 'January abbreviation', 'ayecode-connect' ),
2297
+                'month_s_2' => _x( 'Feb', 'February abbreviation', 'ayecode-connect' ),
2298
+                'month_s_3' => _x( 'Mar', 'March abbreviation', 'ayecode-connect' ),
2299
+                'month_s_4' => _x( 'Apr', 'April abbreviation', 'ayecode-connect' ),
2300
+                'month_s_5' => _x( 'May', 'May abbreviation', 'ayecode-connect' ),
2301
+                'month_s_6' => _x( 'Jun', 'June abbreviation', 'ayecode-connect' ),
2302
+                'month_s_7' => _x( 'Jul', 'July abbreviation', 'ayecode-connect' ),
2303
+                'month_s_8' => _x( 'Aug', 'August abbreviation', 'ayecode-connect' ),
2304
+                'month_s_9' => _x( 'Sep', 'September abbreviation', 'ayecode-connect' ),
2305
+                'month_s_10' => _x( 'Oct', 'October abbreviation', 'ayecode-connect' ),
2306
+                'month_s_11' => _x( 'Nov', 'November abbreviation', 'ayecode-connect' ),
2307
+                'month_s_12' => _x( 'Dec', 'December abbreviation', 'ayecode-connect' ),
2308
+                'day_s1_1' => _x( 'S', 'Sunday initial', 'ayecode-connect' ),
2309
+                'day_s1_2' => _x( 'M', 'Monday initial', 'ayecode-connect' ),
2310
+                'day_s1_3' => _x( 'T', 'Tuesday initial', 'ayecode-connect' ),
2311
+                'day_s1_4' => _x( 'W', 'Wednesday initial', 'ayecode-connect' ),
2312
+                'day_s1_5' => _x( 'T', 'Friday initial', 'ayecode-connect' ),
2313
+                'day_s1_6' => _x( 'F', 'Thursday initial', 'ayecode-connect' ),
2314
+                'day_s1_7' => _x( 'S', 'Saturday initial', 'ayecode-connect' ),
2315
+                'day_s2_1' => __( 'Su', 'ayecode-connect' ),
2316
+                'day_s2_2' => __( 'Mo', 'ayecode-connect' ),
2317
+                'day_s2_3' => __( 'Tu', 'ayecode-connect' ),
2318
+                'day_s2_4' => __( 'We', 'ayecode-connect' ),
2319
+                'day_s2_5' => __( 'Th', 'ayecode-connect' ),
2320
+                'day_s2_6' => __( 'Fr', 'ayecode-connect' ),
2321
+                'day_s2_7' => __( 'Sa', 'ayecode-connect' ),
2322
+                'day_s3_1' => __( 'Sun', 'ayecode-connect' ),
2323
+                'day_s3_2' => __( 'Mon', 'ayecode-connect' ),
2324
+                'day_s3_3' => __( 'Tue', 'ayecode-connect' ),
2325
+                'day_s3_4' => __( 'Wed', 'ayecode-connect' ),
2326
+                'day_s3_5' => __( 'Thu', 'ayecode-connect' ),
2327
+                'day_s3_6' => __( 'Fri', 'ayecode-connect' ),
2328
+                'day_s3_7' => __( 'Sat', 'ayecode-connect' ),
2329
+                'day_s5_1' => __( 'Sunday', 'ayecode-connect' ),
2330
+                'day_s5_2' => __( 'Monday', 'ayecode-connect' ),
2331
+                'day_s5_3' => __( 'Tuesday', 'ayecode-connect' ),
2332
+                'day_s5_4' => __( 'Wednesday', 'ayecode-connect' ),
2333
+                'day_s5_5' => __( 'Thursday', 'ayecode-connect' ),
2334
+                'day_s5_6' => __( 'Friday', 'ayecode-connect' ),
2335
+                'day_s5_7' => __( 'Saturday', 'ayecode-connect' ),
2336
+                'am_lower' => __( 'am', 'ayecode-connect' ),
2337
+                'pm_lower' => __( 'pm', 'ayecode-connect' ),
2338
+                'am_upper' => __( 'AM', 'ayecode-connect' ),
2339
+                'pm_upper' => __( 'PM', 'ayecode-connect' ),
2340
+                'firstDayOfWeek' => (int) get_option( 'start_of_week' ),
2341
+                'time_24hr' => false,
2342
+                'year' => __( 'Year', 'ayecode-connect' ),
2343
+                'hour' => __( 'Hour', 'ayecode-connect' ),
2344
+                'minute' => __( 'Minute', 'ayecode-connect' ),
2345
+                'weekAbbreviation' => __( 'Wk', 'ayecode-connect' ),
2346
+                'rangeSeparator' => __( ' to ', 'ayecode-connect' ),
2347
+                'scrollTitle' => __( 'Scroll to increment', 'ayecode-connect' ),
2348
+                'toggleTitle' => __( 'Click to toggle', 'ayecode-connect' )
2349
+            );
2350
+
2351
+            return apply_filters( 'ayecode_ui_calendar_params', $params );
2352
+        }
2353
+
2354
+        /**
2355
+         * Flatpickr calendar localize.
2356
+         *
2357
+         * @since 0.1.44
2358
+         *
2359
+         * @return string Calendar locale.
2360
+         */
2361
+        public static function flatpickr_locale() {
2362
+            $params = self::calendar_params();
2363
+
2364
+            if ( is_string( $params ) ) {
2365
+                $params = html_entity_decode( $params, ENT_QUOTES, 'UTF-8' );
2366
+            } else {
2367
+                foreach ( (array) $params as $key => $value ) {
2368
+                    if ( ! is_scalar( $value ) ) {
2369
+                        continue;
2370
+                    }
2371
+
2372
+                    $params[ $key ] = html_entity_decode( (string) $value, ENT_QUOTES, 'UTF-8' );
2373
+                }
2374
+            }
2375 2375
 
2376
-			$day_s3 = array();
2377
-			$day_s5 = array();
2376
+            $day_s3 = array();
2377
+            $day_s5 = array();
2378 2378
 
2379
-			for ( $i = 1; $i <= 7; $i ++ ) {
2380
-				$day_s3[] = addslashes( $params[ 'day_s3_' . $i ] ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
2381
-				$day_s5[] = addslashes( $params[ 'day_s3_' . $i ] ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
2382
-			}
2379
+            for ( $i = 1; $i <= 7; $i ++ ) {
2380
+                $day_s3[] = addslashes( $params[ 'day_s3_' . $i ] ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
2381
+                $day_s5[] = addslashes( $params[ 'day_s3_' . $i ] ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
2382
+            }
2383 2383
 
2384
-			$month_s = array();
2385
-			$month_long = array();
2384
+            $month_s = array();
2385
+            $month_long = array();
2386 2386
 
2387
-			for ( $i = 1; $i <= 12; $i ++ ) {
2388
-				$month_s[] = addslashes( $params[ 'month_s_' . $i ] ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
2389
-				$month_long[] = addslashes( $params[ 'month_long_' . $i ] ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
2390
-			}
2387
+            for ( $i = 1; $i <= 12; $i ++ ) {
2388
+                $month_s[] = addslashes( $params[ 'month_s_' . $i ] ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
2389
+                $month_long[] = addslashes( $params[ 'month_long_' . $i ] ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
2390
+            }
2391 2391
 
2392
-			ob_start();
2393
-		if ( 0 ) { ?><script><?php } ?>
2392
+            ob_start();
2393
+        if ( 0 ) { ?><script><?php } ?>
2394 2394
                 {
2395 2395
                     weekdays: {
2396 2396
                         shorthand: ['<?php echo implode( "','", $day_s3 ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>'],
@@ -2429,189 +2429,189 @@  discard block
 block discarded – undo
2429 2429
                 }
2430 2430
 				<?php if ( 0 ) { ?></script><?php } ?>
2431 2431
 			<?php
2432
-			$locale = ob_get_clean();
2433
-
2434
-			return apply_filters( 'ayecode_ui_flatpickr_locale', trim( $locale ) );
2435
-		}
2436
-
2437
-		/**
2438
-		 * Select2 JS params.
2439
-		 *
2440
-		 * @since 0.1.44
2441
-		 *
2442
-		 * @return array Select2 JS params.
2443
-		 */
2444
-		public static function select2_params() {
2445
-			$params = array(
2446
-				'i18n_select_state_text'    => esc_attr__( 'Select an option&hellip;', 'ayecode-connect' ),
2447
-				'i18n_no_matches'           => _x( 'No matches found', 'enhanced select', 'ayecode-connect' ),
2448
-				'i18n_ajax_error'           => _x( 'Loading failed', 'enhanced select', 'ayecode-connect' ),
2449
-				'i18n_input_too_short_1'    => _x( 'Please enter 1 or more characters', 'enhanced select', 'ayecode-connect' ),
2450
-				'i18n_input_too_short_n'    => _x( 'Please enter %item% or more characters', 'enhanced select', 'ayecode-connect' ),
2451
-				'i18n_input_too_long_1'     => _x( 'Please delete 1 character', 'enhanced select', 'ayecode-connect' ),
2452
-				'i18n_input_too_long_n'     => _x( 'Please delete %item% characters', 'enhanced select', 'ayecode-connect' ),
2453
-				'i18n_selection_too_long_1' => _x( 'You can only select 1 item', 'enhanced select', 'ayecode-connect' ),
2454
-				'i18n_selection_too_long_n' => _x( 'You can only select %item% items', 'enhanced select', 'ayecode-connect' ),
2455
-				'i18n_load_more'            => _x( 'Loading more results&hellip;', 'enhanced select', 'ayecode-connect' ),
2456
-				'i18n_searching'            => _x( 'Searching&hellip;', 'enhanced select', 'ayecode-connect' )
2457
-			);
2458
-
2459
-			return apply_filters( 'ayecode_ui_select2_params', $params );
2460
-		}
2461
-
2462
-		/**
2463
-		 * Select2 JS localize.
2464
-		 *
2465
-		 * @since 0.1.44
2466
-		 *
2467
-		 * @return string Select2 JS locale.
2468
-		 */
2469
-		public static function select2_locale() {
2470
-			$params = self::select2_params();
2471
-
2472
-			foreach ( (array) $params as $key => $value ) {
2473
-				if ( ! is_scalar( $value ) ) {
2474
-					continue;
2475
-				}
2432
+            $locale = ob_get_clean();
2476 2433
 
2477
-				$params[ $key ] = html_entity_decode( (string) $value, ENT_QUOTES, 'UTF-8' );
2478
-			}
2479
-
2480
-			$locale = json_encode( $params );
2481
-
2482
-			return apply_filters( 'ayecode_ui_select2_locale', trim( $locale ) );
2483
-		}
2484
-
2485
-		/**
2486
-		 * Time ago JS localize.
2487
-		 *
2488
-		 * @since 0.1.47
2489
-		 *
2490
-		 * @return string Time ago JS locale.
2491
-		 */
2492
-		public static function timeago_locale() {
2493
-			$params = array(
2494
-				'prefix_ago' => '',
2495
-				'suffix_ago' => ' ' . _x( 'ago', 'time ago', 'ayecode-connect' ),
2496
-				'prefix_after' => _x( 'after', 'time ago', 'ayecode-connect' ) . ' ',
2497
-				'suffix_after' => '',
2498
-				'seconds' => _x( 'less than a minute', 'time ago', 'ayecode-connect' ),
2499
-				'minute' => _x( 'about a minute', 'time ago', 'ayecode-connect' ),
2500
-				'minutes' => _x( '%d minutes', 'time ago', 'ayecode-connect' ),
2501
-				'hour' => _x( 'about an hour', 'time ago', 'ayecode-connect' ),
2502
-				'hours' => _x( 'about %d hours', 'time ago', 'ayecode-connect' ),
2503
-				'day' => _x( 'a day', 'time ago', 'ayecode-connect' ),
2504
-				'days' => _x( '%d days', 'time ago', 'ayecode-connect' ),
2505
-				'month' => _x( 'about a month', 'time ago', 'ayecode-connect' ),
2506
-				'months' => _x( '%d months', 'time ago', 'ayecode-connect' ),
2507
-				'year' => _x( 'about a year', 'time ago', 'ayecode-connect' ),
2508
-				'years' => _x( '%d years', 'time ago', 'ayecode-connect' ),
2509
-			);
2510
-
2511
-			$params = apply_filters( 'ayecode_ui_timeago_params', $params );
2512
-
2513
-			foreach ( (array) $params as $key => $value ) {
2514
-				if ( ! is_scalar( $value ) ) {
2515
-					continue;
2516
-				}
2434
+            return apply_filters( 'ayecode_ui_flatpickr_locale', trim( $locale ) );
2435
+        }
2436
+
2437
+        /**
2438
+         * Select2 JS params.
2439
+         *
2440
+         * @since 0.1.44
2441
+         *
2442
+         * @return array Select2 JS params.
2443
+         */
2444
+        public static function select2_params() {
2445
+            $params = array(
2446
+                'i18n_select_state_text'    => esc_attr__( 'Select an option&hellip;', 'ayecode-connect' ),
2447
+                'i18n_no_matches'           => _x( 'No matches found', 'enhanced select', 'ayecode-connect' ),
2448
+                'i18n_ajax_error'           => _x( 'Loading failed', 'enhanced select', 'ayecode-connect' ),
2449
+                'i18n_input_too_short_1'    => _x( 'Please enter 1 or more characters', 'enhanced select', 'ayecode-connect' ),
2450
+                'i18n_input_too_short_n'    => _x( 'Please enter %item% or more characters', 'enhanced select', 'ayecode-connect' ),
2451
+                'i18n_input_too_long_1'     => _x( 'Please delete 1 character', 'enhanced select', 'ayecode-connect' ),
2452
+                'i18n_input_too_long_n'     => _x( 'Please delete %item% characters', 'enhanced select', 'ayecode-connect' ),
2453
+                'i18n_selection_too_long_1' => _x( 'You can only select 1 item', 'enhanced select', 'ayecode-connect' ),
2454
+                'i18n_selection_too_long_n' => _x( 'You can only select %item% items', 'enhanced select', 'ayecode-connect' ),
2455
+                'i18n_load_more'            => _x( 'Loading more results&hellip;', 'enhanced select', 'ayecode-connect' ),
2456
+                'i18n_searching'            => _x( 'Searching&hellip;', 'enhanced select', 'ayecode-connect' )
2457
+            );
2458
+
2459
+            return apply_filters( 'ayecode_ui_select2_params', $params );
2460
+        }
2461
+
2462
+        /**
2463
+         * Select2 JS localize.
2464
+         *
2465
+         * @since 0.1.44
2466
+         *
2467
+         * @return string Select2 JS locale.
2468
+         */
2469
+        public static function select2_locale() {
2470
+            $params = self::select2_params();
2471
+
2472
+            foreach ( (array) $params as $key => $value ) {
2473
+                if ( ! is_scalar( $value ) ) {
2474
+                    continue;
2475
+                }
2476
+
2477
+                $params[ $key ] = html_entity_decode( (string) $value, ENT_QUOTES, 'UTF-8' );
2478
+            }
2479
+
2480
+            $locale = json_encode( $params );
2481
+
2482
+            return apply_filters( 'ayecode_ui_select2_locale', trim( $locale ) );
2483
+        }
2484
+
2485
+        /**
2486
+         * Time ago JS localize.
2487
+         *
2488
+         * @since 0.1.47
2489
+         *
2490
+         * @return string Time ago JS locale.
2491
+         */
2492
+        public static function timeago_locale() {
2493
+            $params = array(
2494
+                'prefix_ago' => '',
2495
+                'suffix_ago' => ' ' . _x( 'ago', 'time ago', 'ayecode-connect' ),
2496
+                'prefix_after' => _x( 'after', 'time ago', 'ayecode-connect' ) . ' ',
2497
+                'suffix_after' => '',
2498
+                'seconds' => _x( 'less than a minute', 'time ago', 'ayecode-connect' ),
2499
+                'minute' => _x( 'about a minute', 'time ago', 'ayecode-connect' ),
2500
+                'minutes' => _x( '%d minutes', 'time ago', 'ayecode-connect' ),
2501
+                'hour' => _x( 'about an hour', 'time ago', 'ayecode-connect' ),
2502
+                'hours' => _x( 'about %d hours', 'time ago', 'ayecode-connect' ),
2503
+                'day' => _x( 'a day', 'time ago', 'ayecode-connect' ),
2504
+                'days' => _x( '%d days', 'time ago', 'ayecode-connect' ),
2505
+                'month' => _x( 'about a month', 'time ago', 'ayecode-connect' ),
2506
+                'months' => _x( '%d months', 'time ago', 'ayecode-connect' ),
2507
+                'year' => _x( 'about a year', 'time ago', 'ayecode-connect' ),
2508
+                'years' => _x( '%d years', 'time ago', 'ayecode-connect' ),
2509
+            );
2510
+
2511
+            $params = apply_filters( 'ayecode_ui_timeago_params', $params );
2512
+
2513
+            foreach ( (array) $params as $key => $value ) {
2514
+                if ( ! is_scalar( $value ) ) {
2515
+                    continue;
2516
+                }
2517
+
2518
+                $params[ $key ] = html_entity_decode( (string) $value, ENT_QUOTES, 'UTF-8' );
2519
+            }
2520
+
2521
+            $locale = json_encode( $params );
2522
+
2523
+            return apply_filters( 'ayecode_ui_timeago_locale', trim( $locale ) );
2524
+        }
2525
+
2526
+        /**
2527
+         * JavaScript Minifier
2528
+         *
2529
+         * @param $input
2530
+         *
2531
+         * @return mixed
2532
+         */
2533
+        public static function minify_js($input) {
2534
+            if(trim($input) === "") return $input;
2535
+            return preg_replace(
2536
+                array(
2537
+                    // Remove comment(s)
2538
+                    '#\s*("(?:[^"\\\]++|\\\.)*+"|\'(?:[^\'\\\\]++|\\\.)*+\')\s*|\s*\/\*(?!\!|@cc_on)(?>[\s\S]*?\*\/)\s*|\s*(?<![\:\=])\/\/.*(?=[\n\r]|$)|^\s*|\s*$#',
2539
+                    // Remove white-space(s) outside the string and regex
2540
+                    '#("(?:[^"\\\]++|\\\.)*+"|\'(?:[^\'\\\\]++|\\\.)*+\'|\/\*(?>.*?\*\/)|\/(?!\/)[^\n\r]*?\/(?=[\s.,;]|[gimuy]|$))|\s*([!%&*\(\)\-=+\[\]\{\}|;:,.<>?\/])\s*#s',
2541
+                    // Remove the last semicolon
2542
+                    '#;+\}#',
2543
+                    // Minify object attribute(s) except JSON attribute(s). From `{'foo':'bar'}` to `{foo:'bar'}`
2544
+                    '#([\{,])([\'])(\d+|[a-z_][a-z0-9_]*)\2(?=\:)#i',
2545
+                    // --ibid. From `foo['bar']` to `foo.bar`
2546
+                    '#([a-z0-9_\)\]])\[([\'"])([a-z_][a-z0-9_]*)\2\]#i'
2547
+                ),
2548
+                array(
2549
+                    '$1',
2550
+                    '$1$2',
2551
+                    '}',
2552
+                    '$1$3',
2553
+                    '$1.$3'
2554
+                ),
2555
+                $input);
2556
+        }
2517 2557
 
2518
-				$params[ $key ] = html_entity_decode( (string) $value, ENT_QUOTES, 'UTF-8' );
2519
-			}
2520
-
2521
-			$locale = json_encode( $params );
2522
-
2523
-			return apply_filters( 'ayecode_ui_timeago_locale', trim( $locale ) );
2524
-		}
2525
-
2526
-		/**
2527
-		 * JavaScript Minifier
2528
-		 *
2529
-		 * @param $input
2530
-		 *
2531
-		 * @return mixed
2532
-		 */
2533
-		public static function minify_js($input) {
2534
-			if(trim($input) === "") return $input;
2535
-			return preg_replace(
2536
-				array(
2537
-					// Remove comment(s)
2538
-					'#\s*("(?:[^"\\\]++|\\\.)*+"|\'(?:[^\'\\\\]++|\\\.)*+\')\s*|\s*\/\*(?!\!|@cc_on)(?>[\s\S]*?\*\/)\s*|\s*(?<![\:\=])\/\/.*(?=[\n\r]|$)|^\s*|\s*$#',
2539
-					// Remove white-space(s) outside the string and regex
2540
-					'#("(?:[^"\\\]++|\\\.)*+"|\'(?:[^\'\\\\]++|\\\.)*+\'|\/\*(?>.*?\*\/)|\/(?!\/)[^\n\r]*?\/(?=[\s.,;]|[gimuy]|$))|\s*([!%&*\(\)\-=+\[\]\{\}|;:,.<>?\/])\s*#s',
2541
-					// Remove the last semicolon
2542
-					'#;+\}#',
2543
-					// Minify object attribute(s) except JSON attribute(s). From `{'foo':'bar'}` to `{foo:'bar'}`
2544
-					'#([\{,])([\'])(\d+|[a-z_][a-z0-9_]*)\2(?=\:)#i',
2545
-					// --ibid. From `foo['bar']` to `foo.bar`
2546
-					'#([a-z0-9_\)\]])\[([\'"])([a-z_][a-z0-9_]*)\2\]#i'
2547
-				),
2548
-				array(
2549
-					'$1',
2550
-					'$1$2',
2551
-					'}',
2552
-					'$1$3',
2553
-					'$1.$3'
2554
-				),
2555
-				$input);
2556
-		}
2557
-
2558
-		/**
2559
-		 * Minify CSS
2560
-		 *
2561
-		 * @param $input
2562
-		 *
2563
-		 * @return mixed
2564
-		 */
2565
-		public static function minify_css($input) {
2566
-			if(trim($input) === "") return $input;
2567
-			return preg_replace(
2568
-				array(
2569
-					// Remove comment(s)
2570
-					'#("(?:[^"\\\]++|\\\.)*+"|\'(?:[^\'\\\\]++|\\\.)*+\')|\/\*(?!\!)(?>.*?\*\/)|^\s*|\s*$#s',
2571
-					// Remove unused white-space(s)
2572
-					'#("(?:[^"\\\]++|\\\.)*+"|\'(?:[^\'\\\\]++|\\\.)*+\'|\/\*(?>.*?\*\/))|\s*+;\s*+(})\s*+|\s*+([*$~^|]?+=|[{};,>~]|\s(?![0-9\.])|!important\b)\s*+|([[(:])\s++|\s++([])])|\s++(:)\s*+(?!(?>[^{}"\']++|"(?:[^"\\\]++|\\\.)*+"|\'(?:[^\'\\\\]++|\\\.)*+\')*+{)|^\s++|\s++\z|(\s)\s+#si',
2573
-					// Replace `0(cm|em|ex|in|mm|pc|pt|px|vh|vw|%)` with `0`
2574
-					'#(?<=[\s:])(0)(cm|em|ex|in|mm|pc|pt|px|vh|vw|%)#si',
2575
-					// Replace `:0 0 0 0` with `:0`
2576
-					'#:(0\s+0|0\s+0\s+0\s+0)(?=[;\}]|\!important)#i',
2577
-					// Replace `background-position:0` with `background-position:0 0`
2578
-					'#(background-position):0(?=[;\}])#si',
2579
-					// Replace `0.6` with `.6`, but only when preceded by `:`, `,`, `-` or a white-space
2580
-					'#(?<=[\s:,\-])0+\.(\d+)#s',
2581
-					// Minify string value
2582
-					'#(\/\*(?>.*?\*\/))|(?<!content\:)([\'"])([a-z_][a-z0-9\-_]*?)\2(?=[\s\{\}\];,])#si',
2583
-					'#(\/\*(?>.*?\*\/))|(\burl\()([\'"])([^\s]+?)\3(\))#si',
2584
-					// Minify HEX color code
2585
-					'#(?<=[\s:,\-]\#)([a-f0-6]+)\1([a-f0-6]+)\2([a-f0-6]+)\3#i',
2586
-					// Replace `(border|outline):none` with `(border|outline):0`
2587
-					'#(?<=[\{;])(border|outline):none(?=[;\}\!])#',
2588
-					// Remove empty selector(s)
2589
-					'#(\/\*(?>.*?\*\/))|(^|[\{\}])(?:[^\s\{\}]+)\{\}#s'
2590
-				),
2591
-				array(
2592
-					'$1',
2593
-					'$1$2$3$4$5$6$7',
2594
-					'$1',
2595
-					':0',
2596
-					'$1:0 0',
2597
-					'.$1',
2598
-					'$1$3',
2599
-					'$1$2$4$5',
2600
-					'$1$2$3',
2601
-					'$1:0',
2602
-					'$1$2'
2603
-				),
2604
-				$input);
2605
-		}
2606
-
2607
-		/**
2608
-		 * Get the conditional fields JavaScript.
2609
-		 *
2610
-		 * @return mixed
2611
-		 */
2612
-		public function conditional_fields_js() {
2613
-			ob_start();
2614
-			?>
2558
+        /**
2559
+         * Minify CSS
2560
+         *
2561
+         * @param $input
2562
+         *
2563
+         * @return mixed
2564
+         */
2565
+        public static function minify_css($input) {
2566
+            if(trim($input) === "") return $input;
2567
+            return preg_replace(
2568
+                array(
2569
+                    // Remove comment(s)
2570
+                    '#("(?:[^"\\\]++|\\\.)*+"|\'(?:[^\'\\\\]++|\\\.)*+\')|\/\*(?!\!)(?>.*?\*\/)|^\s*|\s*$#s',
2571
+                    // Remove unused white-space(s)
2572
+                    '#("(?:[^"\\\]++|\\\.)*+"|\'(?:[^\'\\\\]++|\\\.)*+\'|\/\*(?>.*?\*\/))|\s*+;\s*+(})\s*+|\s*+([*$~^|]?+=|[{};,>~]|\s(?![0-9\.])|!important\b)\s*+|([[(:])\s++|\s++([])])|\s++(:)\s*+(?!(?>[^{}"\']++|"(?:[^"\\\]++|\\\.)*+"|\'(?:[^\'\\\\]++|\\\.)*+\')*+{)|^\s++|\s++\z|(\s)\s+#si',
2573
+                    // Replace `0(cm|em|ex|in|mm|pc|pt|px|vh|vw|%)` with `0`
2574
+                    '#(?<=[\s:])(0)(cm|em|ex|in|mm|pc|pt|px|vh|vw|%)#si',
2575
+                    // Replace `:0 0 0 0` with `:0`
2576
+                    '#:(0\s+0|0\s+0\s+0\s+0)(?=[;\}]|\!important)#i',
2577
+                    // Replace `background-position:0` with `background-position:0 0`
2578
+                    '#(background-position):0(?=[;\}])#si',
2579
+                    // Replace `0.6` with `.6`, but only when preceded by `:`, `,`, `-` or a white-space
2580
+                    '#(?<=[\s:,\-])0+\.(\d+)#s',
2581
+                    // Minify string value
2582
+                    '#(\/\*(?>.*?\*\/))|(?<!content\:)([\'"])([a-z_][a-z0-9\-_]*?)\2(?=[\s\{\}\];,])#si',
2583
+                    '#(\/\*(?>.*?\*\/))|(\burl\()([\'"])([^\s]+?)\3(\))#si',
2584
+                    // Minify HEX color code
2585
+                    '#(?<=[\s:,\-]\#)([a-f0-6]+)\1([a-f0-6]+)\2([a-f0-6]+)\3#i',
2586
+                    // Replace `(border|outline):none` with `(border|outline):0`
2587
+                    '#(?<=[\{;])(border|outline):none(?=[;\}\!])#',
2588
+                    // Remove empty selector(s)
2589
+                    '#(\/\*(?>.*?\*\/))|(^|[\{\}])(?:[^\s\{\}]+)\{\}#s'
2590
+                ),
2591
+                array(
2592
+                    '$1',
2593
+                    '$1$2$3$4$5$6$7',
2594
+                    '$1',
2595
+                    ':0',
2596
+                    '$1:0 0',
2597
+                    '.$1',
2598
+                    '$1$3',
2599
+                    '$1$2$4$5',
2600
+                    '$1$2$3',
2601
+                    '$1:0',
2602
+                    '$1$2'
2603
+                ),
2604
+                $input);
2605
+        }
2606
+
2607
+        /**
2608
+         * Get the conditional fields JavaScript.
2609
+         *
2610
+         * @return mixed
2611
+         */
2612
+        public function conditional_fields_js() {
2613
+            ob_start();
2614
+            ?>
2615 2615
             <script>
2616 2616
                 /**
2617 2617
                  * Conditional Fields
@@ -3146,237 +3146,237 @@  discard block
 block discarded – undo
3146 3146
 				<?php do_action( 'aui_conditional_fields_js', $this ); ?>
3147 3147
             </script>
3148 3148
 			<?php
3149
-			$output = ob_get_clean();
3150
-
3151
-			return str_replace( array( '<script>', '</script>' ), '', self::minify_js( $output ) );
3152
-		}
3153
-
3154
-		/**
3155
-		 * Check if block editor page.
3156
-		 *
3157
-		 * @since 0.2.27
3158
-		 *
3159
-		 * @return bool
3160
-		 */
3161
-		public static function is_block_editor() {
3162
-			if ( is_admin() ) {
3163
-				$current_screen = function_exists('get_current_screen' ) ? get_current_screen() : array();
3164
-
3165
-				if ( ! empty( $current_screen ) && $current_screen->is_block_editor() ) {
3166
-					return true;
3167
-				}
3168
-			}
3169
-
3170
-			return false;
3171
-		}
3172
-
3173
-		/**
3174
-		 * Checks if the current call is a ajax call to get the block content.
3175
-		 *
3176
-		 * This can be used in your widget to return different content as the block content.
3177
-		 *
3178
-		 * @since 0.2.27
3179
-		 *
3180
-		 * @return bool
3181
-		 */
3182
-		public static function is_block_content_call() {
3183
-			$result = false;
3184
-			if ( wp_doing_ajax() && isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'super_duper_output_shortcode' ) {
3185
-				$result = true;
3186
-			}
3187
-
3188
-			return $result;
3189
-		}
3190
-
3191
-		/**
3192
-		 * Tests if the current output is inside a Divi preview.
3193
-		 *
3194
-		 * @since 0.2.27
3195
-		 *
3196
-		 * @return bool
3197
-		 */
3198
-		public static function is_divi_preview() {
3199
-			$result = false;
3200
-			if ( isset( $_REQUEST['et_fb'] ) || isset( $_REQUEST['et_pb_preview'] ) || ( is_admin() && isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'elementor' ) ) {
3201
-				$result = true;
3202
-			}
3203
-
3204
-			return $result;
3205
-		}
3206
-
3207
-		/**
3208
-		 * Tests if the current output is inside a elementor preview.
3209
-		 *
3210
-		 *
3211
-		 * @since 0.2.27
3212
-		 *
3213
-		 * @return bool
3214
-		 */
3215
-		public static function is_elementor_preview() {
3216
-			$result = false;
3217
-			if ( isset( $_REQUEST['elementor-preview'] ) || ( is_admin() && isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'elementor' ) || ( isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'elementor_ajax' ) ) {
3218
-				$result = true;
3219
-			}
3220
-
3221
-			return $result;
3222
-		}
3223
-
3224
-		/**
3225
-		 * Tests if the current output is inside a Beaver builder preview.
3226
-		 *
3227
-		 * @since 0.2.27
3228
-		 *
3229
-		 * @return bool
3230
-		 */
3231
-		public static function is_beaver_preview() {
3232
-			$result = false;
3233
-			if ( isset( $_REQUEST['fl_builder'] ) ) {
3234
-				$result = true;
3235
-			}
3236
-
3237
-			return $result;
3238
-		}
3239
-
3240
-		/**
3241
-		 * Tests if the current output is inside a siteorigin builder preview.
3242
-		 *
3243
-		 * @since 0.2.27
3244
-		 *
3245
-		 * @return bool
3246
-		 */
3247
-		public static function is_siteorigin_preview() {
3248
-			$result = false;
3249
-			if ( ! empty( $_REQUEST['siteorigin_panels_live_editor'] ) ) {
3250
-				$result = true;
3251
-			}
3252
-
3253
-			return $result;
3254
-		}
3255
-
3256
-		/**
3257
-		 * Tests if the current output is inside a cornerstone builder preview.
3258
-		 *
3259
-		 * @since 0.2.27
3260
-		 *
3261
-		 * @return bool
3262
-		 */
3263
-		public static function is_cornerstone_preview() {
3264
-			$result = false;
3265
-			if ( ! empty( $_REQUEST['cornerstone_preview'] ) || basename( $_SERVER['REQUEST_URI'] ) == 'cornerstone-endpoint' ) {
3266
-				$result = true;
3267
-			}
3268
-
3269
-			return $result;
3270
-		}
3271
-
3272
-		/**
3273
-		 * Tests if the current output is inside a fusion builder preview.
3274
-		 *
3275
-		 * @return bool
3276
-		 *@since 1.1.0
3277
-		 */
3278
-		public static function is_fusion_preview() {
3279
-			$result = false;
3280
-			if ( ! empty( $_REQUEST['fb-edit'] ) || ! empty( $_REQUEST['fusion_load_nonce'] ) ) {
3281
-				$result = true;
3282
-			}
3283
-
3284
-			return $result;
3285
-		}
3286
-
3287
-		/**
3288
-		 * Tests if the current output is inside a Oxygen builder preview.
3289
-		 *
3290
-		 * @return bool
3291
-		 *@since 1.0.18
3292
-		 */
3293
-		public static function is_oxygen_preview() {
3294
-			$result = false;
3295
-			if ( ! empty( $_REQUEST['ct_builder'] ) || ( ! empty( $_REQUEST['action'] ) && ( substr( $_REQUEST['action'], 0, 11 ) === "oxy_render_" || substr( $_REQUEST['action'], 0, 10 ) === "ct_render_" ) ) ) {
3296
-				$result = true;
3297
-			}
3298
-
3299
-			return $result;
3300
-		}
3301
-
3302
-		/**
3303
-		 * Check for Kallyas theme Zion builder preview.
3304
-		 *
3305
-		 * @since 0.2.27
3306
-		 *
3307
-		 * @return bool
3308
-		 */
3309
-		public static function is_kallyas_zion_preview() {
3310
-			$result = false;
3311
-
3312
-			if ( function_exists( 'znhg_kallyas_theme_config' ) && ! empty( $_REQUEST['zn_pb_edit'] ) ) {
3313
-				$result = true;
3314
-			}
3315
-
3316
-			return $result;
3317
-		}
3318
-
3319
-		/**
3320
-		 * Check for Bricks theme builder preview.
3321
-		 *
3322
-		 * @since 0.2.27
3323
-		 *
3324
-		 * @return bool
3325
-		 */
3326
-		public static function is_bricks_preview() {
3327
-			$result = false;
3328
-
3329
-			if ( function_exists( 'bricks_is_builder' ) && ( bricks_is_builder() || bricks_is_builder_call() ) ) {
3330
-				$result = true;
3331
-			}
3332
-
3333
-			return $result;
3334
-		}
3335
-
3336
-		/**
3337
-		 * General function to check if we are in a preview situation.
3338
-		 *
3339
-		 * @since 0.2.27
3340
-		 *
3341
-		 * @return bool
3342
-		 */
3343
-		public static function is_preview() {
3344
-			$preview = false;
3345
-
3346
-			if ( self::is_block_editor() ) {
3347
-				return true;
3348
-			}
3349
-
3350
-			if( self::is_block_content_call() ) {
3351
-				$preview = true;
3352
-			} elseif ( self::is_divi_preview() ) {
3353
-				$preview = true;
3354
-			} elseif ( self::is_elementor_preview() ) {
3355
-				$preview = true;
3356
-			} elseif ( self::is_beaver_preview() ) {
3357
-				$preview = true;
3358
-			} elseif ( self::is_siteorigin_preview() ) {
3359
-				$preview = true;
3360
-			} elseif ( self::is_cornerstone_preview() ) {
3361
-				$preview = true;
3362
-			} elseif ( self::is_fusion_preview() ) {
3363
-				$preview = true;
3364
-			} elseif ( self::is_oxygen_preview() ) {
3365
-				$preview = true;
3366
-			} elseif( self::is_kallyas_zion_preview() ) {
3367
-				$preview = true;
3368
-			} elseif( self::is_bricks_preview() ) {
3369
-				$preview = true;
3370
-			}
3371
-
3372
-			return $preview;
3373
-		}
3374
-	}
3375
-
3376
-	global $ayecode_ui_settings;
3377
-
3378
-	/**
3379
-	 * Run the class if found.
3380
-	 */
3381
-	$ayecode_ui_settings = AyeCode_UI_Settings::instance();
3149
+            $output = ob_get_clean();
3150
+
3151
+            return str_replace( array( '<script>', '</script>' ), '', self::minify_js( $output ) );
3152
+        }
3153
+
3154
+        /**
3155
+         * Check if block editor page.
3156
+         *
3157
+         * @since 0.2.27
3158
+         *
3159
+         * @return bool
3160
+         */
3161
+        public static function is_block_editor() {
3162
+            if ( is_admin() ) {
3163
+                $current_screen = function_exists('get_current_screen' ) ? get_current_screen() : array();
3164
+
3165
+                if ( ! empty( $current_screen ) && $current_screen->is_block_editor() ) {
3166
+                    return true;
3167
+                }
3168
+            }
3169
+
3170
+            return false;
3171
+        }
3172
+
3173
+        /**
3174
+         * Checks if the current call is a ajax call to get the block content.
3175
+         *
3176
+         * This can be used in your widget to return different content as the block content.
3177
+         *
3178
+         * @since 0.2.27
3179
+         *
3180
+         * @return bool
3181
+         */
3182
+        public static function is_block_content_call() {
3183
+            $result = false;
3184
+            if ( wp_doing_ajax() && isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'super_duper_output_shortcode' ) {
3185
+                $result = true;
3186
+            }
3187
+
3188
+            return $result;
3189
+        }
3190
+
3191
+        /**
3192
+         * Tests if the current output is inside a Divi preview.
3193
+         *
3194
+         * @since 0.2.27
3195
+         *
3196
+         * @return bool
3197
+         */
3198
+        public static function is_divi_preview() {
3199
+            $result = false;
3200
+            if ( isset( $_REQUEST['et_fb'] ) || isset( $_REQUEST['et_pb_preview'] ) || ( is_admin() && isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'elementor' ) ) {
3201
+                $result = true;
3202
+            }
3203
+
3204
+            return $result;
3205
+        }
3206
+
3207
+        /**
3208
+         * Tests if the current output is inside a elementor preview.
3209
+         *
3210
+         *
3211
+         * @since 0.2.27
3212
+         *
3213
+         * @return bool
3214
+         */
3215
+        public static function is_elementor_preview() {
3216
+            $result = false;
3217
+            if ( isset( $_REQUEST['elementor-preview'] ) || ( is_admin() && isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'elementor' ) || ( isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'elementor_ajax' ) ) {
3218
+                $result = true;
3219
+            }
3220
+
3221
+            return $result;
3222
+        }
3223
+
3224
+        /**
3225
+         * Tests if the current output is inside a Beaver builder preview.
3226
+         *
3227
+         * @since 0.2.27
3228
+         *
3229
+         * @return bool
3230
+         */
3231
+        public static function is_beaver_preview() {
3232
+            $result = false;
3233
+            if ( isset( $_REQUEST['fl_builder'] ) ) {
3234
+                $result = true;
3235
+            }
3236
+
3237
+            return $result;
3238
+        }
3239
+
3240
+        /**
3241
+         * Tests if the current output is inside a siteorigin builder preview.
3242
+         *
3243
+         * @since 0.2.27
3244
+         *
3245
+         * @return bool
3246
+         */
3247
+        public static function is_siteorigin_preview() {
3248
+            $result = false;
3249
+            if ( ! empty( $_REQUEST['siteorigin_panels_live_editor'] ) ) {
3250
+                $result = true;
3251
+            }
3252
+
3253
+            return $result;
3254
+        }
3255
+
3256
+        /**
3257
+         * Tests if the current output is inside a cornerstone builder preview.
3258
+         *
3259
+         * @since 0.2.27
3260
+         *
3261
+         * @return bool
3262
+         */
3263
+        public static function is_cornerstone_preview() {
3264
+            $result = false;
3265
+            if ( ! empty( $_REQUEST['cornerstone_preview'] ) || basename( $_SERVER['REQUEST_URI'] ) == 'cornerstone-endpoint' ) {
3266
+                $result = true;
3267
+            }
3268
+
3269
+            return $result;
3270
+        }
3271
+
3272
+        /**
3273
+         * Tests if the current output is inside a fusion builder preview.
3274
+         *
3275
+         * @return bool
3276
+         *@since 1.1.0
3277
+         */
3278
+        public static function is_fusion_preview() {
3279
+            $result = false;
3280
+            if ( ! empty( $_REQUEST['fb-edit'] ) || ! empty( $_REQUEST['fusion_load_nonce'] ) ) {
3281
+                $result = true;
3282
+            }
3283
+
3284
+            return $result;
3285
+        }
3286
+
3287
+        /**
3288
+         * Tests if the current output is inside a Oxygen builder preview.
3289
+         *
3290
+         * @return bool
3291
+         *@since 1.0.18
3292
+         */
3293
+        public static function is_oxygen_preview() {
3294
+            $result = false;
3295
+            if ( ! empty( $_REQUEST['ct_builder'] ) || ( ! empty( $_REQUEST['action'] ) && ( substr( $_REQUEST['action'], 0, 11 ) === "oxy_render_" || substr( $_REQUEST['action'], 0, 10 ) === "ct_render_" ) ) ) {
3296
+                $result = true;
3297
+            }
3298
+
3299
+            return $result;
3300
+        }
3301
+
3302
+        /**
3303
+         * Check for Kallyas theme Zion builder preview.
3304
+         *
3305
+         * @since 0.2.27
3306
+         *
3307
+         * @return bool
3308
+         */
3309
+        public static function is_kallyas_zion_preview() {
3310
+            $result = false;
3311
+
3312
+            if ( function_exists( 'znhg_kallyas_theme_config' ) && ! empty( $_REQUEST['zn_pb_edit'] ) ) {
3313
+                $result = true;
3314
+            }
3315
+
3316
+            return $result;
3317
+        }
3318
+
3319
+        /**
3320
+         * Check for Bricks theme builder preview.
3321
+         *
3322
+         * @since 0.2.27
3323
+         *
3324
+         * @return bool
3325
+         */
3326
+        public static function is_bricks_preview() {
3327
+            $result = false;
3328
+
3329
+            if ( function_exists( 'bricks_is_builder' ) && ( bricks_is_builder() || bricks_is_builder_call() ) ) {
3330
+                $result = true;
3331
+            }
3332
+
3333
+            return $result;
3334
+        }
3335
+
3336
+        /**
3337
+         * General function to check if we are in a preview situation.
3338
+         *
3339
+         * @since 0.2.27
3340
+         *
3341
+         * @return bool
3342
+         */
3343
+        public static function is_preview() {
3344
+            $preview = false;
3345
+
3346
+            if ( self::is_block_editor() ) {
3347
+                return true;
3348
+            }
3349
+
3350
+            if( self::is_block_content_call() ) {
3351
+                $preview = true;
3352
+            } elseif ( self::is_divi_preview() ) {
3353
+                $preview = true;
3354
+            } elseif ( self::is_elementor_preview() ) {
3355
+                $preview = true;
3356
+            } elseif ( self::is_beaver_preview() ) {
3357
+                $preview = true;
3358
+            } elseif ( self::is_siteorigin_preview() ) {
3359
+                $preview = true;
3360
+            } elseif ( self::is_cornerstone_preview() ) {
3361
+                $preview = true;
3362
+            } elseif ( self::is_fusion_preview() ) {
3363
+                $preview = true;
3364
+            } elseif ( self::is_oxygen_preview() ) {
3365
+                $preview = true;
3366
+            } elseif( self::is_kallyas_zion_preview() ) {
3367
+                $preview = true;
3368
+            } elseif( self::is_bricks_preview() ) {
3369
+                $preview = true;
3370
+            }
3371
+
3372
+            return $preview;
3373
+        }
3374
+    }
3375
+
3376
+    global $ayecode_ui_settings;
3377
+
3378
+    /**
3379
+     * Run the class if found.
3380
+     */
3381
+    $ayecode_ui_settings = AyeCode_UI_Settings::instance();
3382 3382
 }
3383 3383
\ No newline at end of file
Please login to merge, or discard this patch.
vendor/ayecode/wp-ayecode-ui/ayecode-ui-loader.php 1 patch
Indentation   +18 added lines, -18 removed lines patch added patch discarded remove patch
@@ -7,40 +7,40 @@
 block discarded – undo
7 7
  * Bail if we are not in WP.
8 8
  */
9 9
 if ( ! defined( 'ABSPATH' ) ) {
10
-	exit;
10
+    exit;
11 11
 }
12 12
 
13 13
 /**
14 14
  * Set the version only if its the current newest while loading.
15 15
  */
16 16
 add_action('after_setup_theme', function () {
17
-	global $ayecode_ui_version,$ayecode_ui_file_key;
18
-	$this_version = "0.2.30";
19
-	if(empty($ayecode_ui_version) || version_compare($this_version , $ayecode_ui_version, '>')){
20
-		$ayecode_ui_version = $this_version ;
21
-		$ayecode_ui_file_key = wp_hash( __FILE__ );
22
-	}
17
+    global $ayecode_ui_version,$ayecode_ui_file_key;
18
+    $this_version = "0.2.30";
19
+    if(empty($ayecode_ui_version) || version_compare($this_version , $ayecode_ui_version, '>')){
20
+        $ayecode_ui_version = $this_version ;
21
+        $ayecode_ui_file_key = wp_hash( __FILE__ );
22
+    }
23 23
 },0);
24 24
 
25 25
 /**
26 26
  * Load this version of WP Bootstrap Settings only if the file hash is the current one.
27 27
  */
28 28
 add_action('after_setup_theme', function () {
29
-	global $ayecode_ui_file_key;
30
-	if($ayecode_ui_file_key && $ayecode_ui_file_key == wp_hash( __FILE__ )){
31
-		include_once( dirname( __FILE__ ) . '/includes/class-aui.php' );
32
-		include_once( dirname( __FILE__ ) . '/includes/ayecode-ui-settings.php' );
33
-	}
29
+    global $ayecode_ui_file_key;
30
+    if($ayecode_ui_file_key && $ayecode_ui_file_key == wp_hash( __FILE__ )){
31
+        include_once( dirname( __FILE__ ) . '/includes/class-aui.php' );
32
+        include_once( dirname( __FILE__ ) . '/includes/ayecode-ui-settings.php' );
33
+    }
34 34
 },1);
35 35
 
36 36
 /**
37 37
  * Add the function that calls the class.
38 38
  */
39 39
 if(!function_exists('aui')){
40
-	function aui(){
41
-		if(!class_exists("AUI",false)){
42
-			return false;
43
-		}
44
-		return AUI::instance();
45
-	}
40
+    function aui(){
41
+        if(!class_exists("AUI",false)){
42
+            return false;
43
+        }
44
+        return AUI::instance();
45
+    }
46 46
 }
Please login to merge, or discard this patch.
vendor/ayecode/wp-super-duper/includes/class-super-duper-bricks-element.php 1 patch
Indentation   +248 added lines, -248 removed lines patch added patch discarded remove patch
@@ -6,246 +6,246 @@  discard block
 block discarded – undo
6 6
 
7 7
 class Super_Duper_Bricks_Element extends \Bricks\Element {
8 8
 
9
-	public $widget;
10
-
11
-	public function __construct( $element = null ) {
12
-
13
-
14
-		$block_icon = !empty($this->widget->options['block-icon']) ? $this->widget->options['block-icon'] : '';
15
-
16
-
17
-		$this->category = !empty($this->widget->options['textdomain']) ? esc_attr( $this->widget->options['textdomain'] ) : 'Super Duper';
18
-		$this->name     = $this->widget->id_base;
19
-		$this->icon     = (strpos($block_icon, 'fa') === 0) ? esc_attr($this->widget->options['block-icon']) : 'fas fa-globe-americas';
20
-
21
-		parent::__construct($element);
22
-	}
23
-
24
-	/**
25
-	 * Set the element name.
26
-	 *
27
-	 * @return array|string|string[]|null
28
-	 */
29
-	public function get_label() {
30
-		$escaped_text = esc_attr( $this->widget->name );
31
-		return str_replace( ' &gt; ', ' > ', $escaped_text ); // keep our > but have it safe
32
-	}
33
-
34
-	/**
35
-	 * Bricks function to set the controls
36
-	 *
37
-	 * @return void
38
-	 */
39
-	public function set_controls() {
40
-		$args = $this->sd_convert_arguments($this->widget);
41
-
42
-		if (!empty($args)) {
43
-			$this->controls = $this->controls + $args;
44
-		}
45
-
46
-	}
47
-
48
-	/**
49
-	 * Set the bricks control groups from the GD ones.
50
-	 *
51
-	 * @return void
52
-	 */
53
-	public function set_control_groups() {
54
-		$args = $this->sd_get_arguments();
55
-
56
-		$groups = array();
57
-		if(!empty($args)) {
58
-			foreach ($args as $k => $v) {
59
-				$g_slug = !empty($v['group']) ? sanitize_title( $v['group'] ) : '';
60
-				if($g_slug && empty($groups[$g_slug])) {
61
-					$groups[$g_slug] = array(
62
-						'title' => esc_html( $v['group'] ),
63
-						'tab' => 'content',
64
-					);
65
-				}
66
-			}
67
-		}
68
-
69
-		if(!empty($groups)) {
70
-			$this->control_groups = $this->control_groups + $groups;
71
-		}
72
-
73
-	}
74
-
75
-	/**
76
-	 * Get the setting input arguments.
77
-	 *
78
-	 * @return mixed
79
-	 */
80
-	public function sd_get_arguments() {
81
-		$args = $this->widget->set_arguments();
82
-		$arg_keys_subtract = $this->sd_remove_arguments();
83
-
84
-		if ( ! empty( $arg_keys_subtract ) ) {
85
-			foreach($arg_keys_subtract as $key ){
86
-				unset($args[$key]);
87
-			}
88
-		}
89
-
90
-		return $args;
91
-	}
92
-
93
-
94
-	/**
95
-	 * Simply use our own render function for the output.
96
-	 *
97
-	 * @return void
98
-	 */
99
-	public function render() {
100
-		$settings   = $this->sd_maybe_convert_values( $this->settings );
101
-
102
-
103
-		// set the AyeCode UI calss on the wrapper
104
-		$this->set_attribute( '_root', 'class', 'bsui' );
105
-
106
-		// we might need to add a placeholder here for previews.
107
-
108
-		// add the bricks attributes to wrapper
109
-		echo "<div {$this->render_attributes( '_root' )}>";
110
-		echo $this->widget->output($settings);
111
-		echo '</div>';
112
-	}
113
-
114
-	/**
115
-	 * Values can never be arrays so convert if bricks setting make it an array.
116
-	 *
117
-	 * @param $settings
118
-	 * @return mixed
119
-	 */
120
-	public function sd_maybe_convert_values( $settings ) {
121
-
122
-
123
-		if (!empty($settings)) {
124
-			foreach( $settings as $k => $v ) {
125
-				if(is_array($v)) {
126
-					$value = '';
127
-					// is color
128
-					if (isset($v['hex'])) {
129
-						$value = $v['hex'];
130
-					} elseif (isset($v['icon'])) {
131
-						$value = $v['icon'];
132
-					}
133
-
134
-
135
-					// set the value
136
-					$settings[$k] = $value;
137
-				}
138
-
139
-			}
140
-		}
141
-
142
-		return $settings;
143
-	}
144
-
145
-	/**
146
-	 * Convert SD arguments to Bricks arguments.
147
-	 *
148
-	 * @param $widget
149
-	 *
150
-	 * @return array
151
-	 */
152
-	public function sd_convert_arguments()
153
-	{
154
-		$bricks_args = array();
155
-
156
-		$args = $this->sd_get_arguments();
157
-
158
-		if (!empty($args)) {
159
-			foreach ($args as $key => $arg) {
160
-
161
-				// convert title
162
-				if (!empty($arg['title'])) {
163
-					$arg['label'] = $arg['title'];
164
-					unset($arg['title']);
165
-				}
166
-
167
-				// set fields not to use dynamic data
168
-				$arg['hasDynamicData'] = false;
169
-
170
-				if (!empty($arg['group'])) {
171
-					$arg['group'] =  sanitize_title($arg['group']);
172
-				}
173
-
174
-				$arg['rerender'] = true;
175
-
176
-				// required
177
-				if(!empty($arg['element_require'])) {
178
-					$arg['required'] = $this->sd_convert_required($arg['element_require']);
179
-					unset($arg['element_require']);
180
-				}
181
-
182
-				// icons
183
-				if ('icon' === $key) {
184
-					$arg['type'] = 'icon';
185
-				}
186
-
187
-				$bricks_args[$key] = $arg;
188
-
189
-			}
190
-
191
-		}
192
-
193
-		return $bricks_args;
194
-
195
-	}
196
-
197
-	/**
198
-	 * Convert the SD element_required to the Bricks required syntax.
199
-	 *
200
-	 * @param $element_require
201
-	 * @return array
202
-	 */
203
-	public function sd_convert_required($element_require) {
204
-		$bricks_required = [];
205
-
206
-		// Handle logical OR (||) for multiple values
207
-		if (strpos($element_require, '||') !== false) {
208
-			preg_match('/\[%(.+?)%\] *== *"(.*?)"/', $element_require, $matches);
209
-			if ($matches) {
210
-				$control_id = $matches[1];
211
-				preg_match_all('/\[%.*?%\] *== *"(.*?)"/', $element_require, $value_matches);
212
-				$values = $value_matches[1];
213
-				$bricks_required[] = [$control_id, '=', $values];
214
-			}
215
-			return $bricks_required;
216
-		}
217
-
218
-		// Match individual conditions
219
-		preg_match_all('/(!)?\[%(.*?)%\](?:\s*([!=<>]=?)\s*(".*?"|\'.*?\'|\d+))?/', $element_require, $matches, PREG_SET_ORDER);
220
-
221
-		foreach ($matches as $match) {
222
-			$is_negation = isset($match[1]) && $match[1] === '!';
223
-			$control_id = $match[2];
224
-			$operator = isset($match[3]) ? str_replace('==', '=', $match[3]) : ($is_negation ? '=' : '!=');
225
-			$value = isset($match[4]) ? trim($match[4], '"\'') : ($is_negation ? '' : '');
226
-
227
-			// Adjust for negation without explicit operator
228
-			if ($is_negation && !isset($match[3])) {
229
-				$operator = '=';
230
-				$value = '';
231
-			}
232
-
233
-			$bricks_required[] = [$control_id, $operator, $value];
234
-		}
235
-
236
-		return $bricks_required;
237
-	}
238
-
239
-
240
-	/**
241
-	 * A way to remove some settings by keys.
242
-	 *
243
-	 * @return array
244
-	 */
245
-	public function sd_remove_arguments()
246
-	{
247
-		return array();
248
-	}
9
+    public $widget;
10
+
11
+    public function __construct( $element = null ) {
12
+
13
+
14
+        $block_icon = !empty($this->widget->options['block-icon']) ? $this->widget->options['block-icon'] : '';
15
+
16
+
17
+        $this->category = !empty($this->widget->options['textdomain']) ? esc_attr( $this->widget->options['textdomain'] ) : 'Super Duper';
18
+        $this->name     = $this->widget->id_base;
19
+        $this->icon     = (strpos($block_icon, 'fa') === 0) ? esc_attr($this->widget->options['block-icon']) : 'fas fa-globe-americas';
20
+
21
+        parent::__construct($element);
22
+    }
23
+
24
+    /**
25
+     * Set the element name.
26
+     *
27
+     * @return array|string|string[]|null
28
+     */
29
+    public function get_label() {
30
+        $escaped_text = esc_attr( $this->widget->name );
31
+        return str_replace( ' &gt; ', ' > ', $escaped_text ); // keep our > but have it safe
32
+    }
33
+
34
+    /**
35
+     * Bricks function to set the controls
36
+     *
37
+     * @return void
38
+     */
39
+    public function set_controls() {
40
+        $args = $this->sd_convert_arguments($this->widget);
41
+
42
+        if (!empty($args)) {
43
+            $this->controls = $this->controls + $args;
44
+        }
45
+
46
+    }
47
+
48
+    /**
49
+     * Set the bricks control groups from the GD ones.
50
+     *
51
+     * @return void
52
+     */
53
+    public function set_control_groups() {
54
+        $args = $this->sd_get_arguments();
55
+
56
+        $groups = array();
57
+        if(!empty($args)) {
58
+            foreach ($args as $k => $v) {
59
+                $g_slug = !empty($v['group']) ? sanitize_title( $v['group'] ) : '';
60
+                if($g_slug && empty($groups[$g_slug])) {
61
+                    $groups[$g_slug] = array(
62
+                        'title' => esc_html( $v['group'] ),
63
+                        'tab' => 'content',
64
+                    );
65
+                }
66
+            }
67
+        }
68
+
69
+        if(!empty($groups)) {
70
+            $this->control_groups = $this->control_groups + $groups;
71
+        }
72
+
73
+    }
74
+
75
+    /**
76
+     * Get the setting input arguments.
77
+     *
78
+     * @return mixed
79
+     */
80
+    public function sd_get_arguments() {
81
+        $args = $this->widget->set_arguments();
82
+        $arg_keys_subtract = $this->sd_remove_arguments();
83
+
84
+        if ( ! empty( $arg_keys_subtract ) ) {
85
+            foreach($arg_keys_subtract as $key ){
86
+                unset($args[$key]);
87
+            }
88
+        }
89
+
90
+        return $args;
91
+    }
92
+
93
+
94
+    /**
95
+     * Simply use our own render function for the output.
96
+     *
97
+     * @return void
98
+     */
99
+    public function render() {
100
+        $settings   = $this->sd_maybe_convert_values( $this->settings );
101
+
102
+
103
+        // set the AyeCode UI calss on the wrapper
104
+        $this->set_attribute( '_root', 'class', 'bsui' );
105
+
106
+        // we might need to add a placeholder here for previews.
107
+
108
+        // add the bricks attributes to wrapper
109
+        echo "<div {$this->render_attributes( '_root' )}>";
110
+        echo $this->widget->output($settings);
111
+        echo '</div>';
112
+    }
113
+
114
+    /**
115
+     * Values can never be arrays so convert if bricks setting make it an array.
116
+     *
117
+     * @param $settings
118
+     * @return mixed
119
+     */
120
+    public function sd_maybe_convert_values( $settings ) {
121
+
122
+
123
+        if (!empty($settings)) {
124
+            foreach( $settings as $k => $v ) {
125
+                if(is_array($v)) {
126
+                    $value = '';
127
+                    // is color
128
+                    if (isset($v['hex'])) {
129
+                        $value = $v['hex'];
130
+                    } elseif (isset($v['icon'])) {
131
+                        $value = $v['icon'];
132
+                    }
133
+
134
+
135
+                    // set the value
136
+                    $settings[$k] = $value;
137
+                }
138
+
139
+            }
140
+        }
141
+
142
+        return $settings;
143
+    }
144
+
145
+    /**
146
+     * Convert SD arguments to Bricks arguments.
147
+     *
148
+     * @param $widget
149
+     *
150
+     * @return array
151
+     */
152
+    public function sd_convert_arguments()
153
+    {
154
+        $bricks_args = array();
155
+
156
+        $args = $this->sd_get_arguments();
157
+
158
+        if (!empty($args)) {
159
+            foreach ($args as $key => $arg) {
160
+
161
+                // convert title
162
+                if (!empty($arg['title'])) {
163
+                    $arg['label'] = $arg['title'];
164
+                    unset($arg['title']);
165
+                }
166
+
167
+                // set fields not to use dynamic data
168
+                $arg['hasDynamicData'] = false;
169
+
170
+                if (!empty($arg['group'])) {
171
+                    $arg['group'] =  sanitize_title($arg['group']);
172
+                }
173
+
174
+                $arg['rerender'] = true;
175
+
176
+                // required
177
+                if(!empty($arg['element_require'])) {
178
+                    $arg['required'] = $this->sd_convert_required($arg['element_require']);
179
+                    unset($arg['element_require']);
180
+                }
181
+
182
+                // icons
183
+                if ('icon' === $key) {
184
+                    $arg['type'] = 'icon';
185
+                }
186
+
187
+                $bricks_args[$key] = $arg;
188
+
189
+            }
190
+
191
+        }
192
+
193
+        return $bricks_args;
194
+
195
+    }
196
+
197
+    /**
198
+     * Convert the SD element_required to the Bricks required syntax.
199
+     *
200
+     * @param $element_require
201
+     * @return array
202
+     */
203
+    public function sd_convert_required($element_require) {
204
+        $bricks_required = [];
205
+
206
+        // Handle logical OR (||) for multiple values
207
+        if (strpos($element_require, '||') !== false) {
208
+            preg_match('/\[%(.+?)%\] *== *"(.*?)"/', $element_require, $matches);
209
+            if ($matches) {
210
+                $control_id = $matches[1];
211
+                preg_match_all('/\[%.*?%\] *== *"(.*?)"/', $element_require, $value_matches);
212
+                $values = $value_matches[1];
213
+                $bricks_required[] = [$control_id, '=', $values];
214
+            }
215
+            return $bricks_required;
216
+        }
217
+
218
+        // Match individual conditions
219
+        preg_match_all('/(!)?\[%(.*?)%\](?:\s*([!=<>]=?)\s*(".*?"|\'.*?\'|\d+))?/', $element_require, $matches, PREG_SET_ORDER);
220
+
221
+        foreach ($matches as $match) {
222
+            $is_negation = isset($match[1]) && $match[1] === '!';
223
+            $control_id = $match[2];
224
+            $operator = isset($match[3]) ? str_replace('==', '=', $match[3]) : ($is_negation ? '=' : '!=');
225
+            $value = isset($match[4]) ? trim($match[4], '"\'') : ($is_negation ? '' : '');
226
+
227
+            // Adjust for negation without explicit operator
228
+            if ($is_negation && !isset($match[3])) {
229
+                $operator = '=';
230
+                $value = '';
231
+            }
232
+
233
+            $bricks_required[] = [$control_id, $operator, $value];
234
+        }
235
+
236
+        return $bricks_required;
237
+    }
238
+
239
+
240
+    /**
241
+     * A way to remove some settings by keys.
242
+     *
243
+     * @return array
244
+     */
245
+    public function sd_remove_arguments()
246
+    {
247
+        return array();
248
+    }
249 249
 
250 250
 }
251 251
 
@@ -255,12 +255,12 @@  discard block
 block discarded – undo
255 255
  */
256 256
 add_action( 'wp_enqueue_scripts', function() {
257 257
 
258
-	// Check if we're in the Bricks Editor
259
-	if ( isset( $_GET['bricks'] ) && $_GET['bricks'] && bricks_is_builder_main() ) {
260
-		// Add inline script to the 'bricks-builder' script
261
-		wp_add_inline_script(
262
-			'bricks-builder',
263
-			"
258
+    // Check if we're in the Bricks Editor
259
+    if ( isset( $_GET['bricks'] ) && $_GET['bricks'] && bricks_is_builder_main() ) {
260
+        // Add inline script to the 'bricks-builder' script
261
+        wp_add_inline_script(
262
+            'bricks-builder',
263
+            "
264 264
 
265 265
 (function () {
266 266
     // Function to get the current breakpoint from the #bricks-preview class
@@ -467,6 +467,6 @@  discard block
 block discarded – undo
467 467
     addIconsToLabels();
468 468
 })();
469 469
 "
470
-		);
471
-	}
470
+        );
471
+    }
472 472
 });
Please login to merge, or discard this patch.
vendor/ayecode/wp-super-duper/wp-super-duper.php 1 patch
Indentation   +2637 added lines, -2637 removed lines patch added patch discarded remove patch
@@ -1,147 +1,147 @@  discard block
 block discarded – undo
1 1
 <?php
2 2
 if ( ! defined( 'ABSPATH' ) ) {
3
-	exit;
3
+    exit;
4 4
 }
5 5
 
6 6
 if ( ! class_exists( 'WP_Super_Duper' ) ) {
7 7
 
8
-	define( 'SUPER_DUPER_VER', '1.2.16' );
9
-
10
-	/**
11
-	 * A Class to be able to create a Widget, Shortcode or Block to be able to output content for WordPress.
12
-	 *
13
-	 * Should not be called direct but extended instead.
14
-	 *
15
-	 * Class WP_Super_Duper
16
-	 * @since 1.0.16 change log moved to file change-log.txt - CHANGED
17
-	 * @ver 1.1.1
18
-	 */
19
-	class WP_Super_Duper extends WP_Widget {
20
-
21
-		public $version = SUPER_DUPER_VER;
22
-		public $font_awesome_icon_version = "5.11.2";
23
-		public $block_code;
24
-		public $options;
25
-		public $base_id;
26
-		public $settings_hash;
27
-		public $arguments = array();
28
-		public $instance = array();
29
-		private $class_name;
30
-
31
-		/**
32
-		 * The relative url to the current folder.
33
-		 *
34
-		 * @var string
35
-		 */
36
-		public $url = '';
37
-
38
-		/**
39
-		 * Take the array options and use them to build.
40
-		 */
41
-		public function __construct( $options ) {
42
-			global $sd_widgets;
43
-
44
-			$sd_widgets[ $options['base_id'] ] = array(
45
-				'name'       => $options['name'],
46
-				'class_name' => $options['class_name'],
47
-				'output_types' => !empty($options['output_types']) ? $options['output_types'] : array()
48
-			);
49
-			$this->base_id                     = $options['base_id'];
50
-			// lets filter the options before we do anything
51
-			$options       = apply_filters( "wp_super_duper_options", $options );
52
-			$options       = apply_filters( "wp_super_duper_options_{$this->base_id}", $options );
53
-			$options       = $this->add_name_from_key( $options );
54
-			$this->options = $options;
55
-
56
-			$this->base_id   = $options['base_id'];
57
-			$this->arguments = isset( $options['arguments'] ) ? $options['arguments'] : array();
58
-
59
-			// nested blocks can't work as a widget
60
-			if(!empty($this->options['nested-block'])){
61
-				if(empty($this->options['output_types'])){
62
-					$this->options['output_types'] = array('shortcode','block');
63
-				}elseif (($key = array_search('widget', $this->options['output_types'])) !== false) {
64
-					unset($this->options['output_types'][$key]);
65
-				}
66
-			}
8
+    define( 'SUPER_DUPER_VER', '1.2.16' );
9
+
10
+    /**
11
+     * A Class to be able to create a Widget, Shortcode or Block to be able to output content for WordPress.
12
+     *
13
+     * Should not be called direct but extended instead.
14
+     *
15
+     * Class WP_Super_Duper
16
+     * @since 1.0.16 change log moved to file change-log.txt - CHANGED
17
+     * @ver 1.1.1
18
+     */
19
+    class WP_Super_Duper extends WP_Widget {
20
+
21
+        public $version = SUPER_DUPER_VER;
22
+        public $font_awesome_icon_version = "5.11.2";
23
+        public $block_code;
24
+        public $options;
25
+        public $base_id;
26
+        public $settings_hash;
27
+        public $arguments = array();
28
+        public $instance = array();
29
+        private $class_name;
67 30
 
68
-			// init parent
69
-			if(empty($this->options['output_types']) || in_array('widget',$this->options['output_types'])){
70
-				parent::__construct( $options['base_id'], $options['name'], $options['widget_ops'] );
71
-			}
31
+        /**
32
+         * The relative url to the current folder.
33
+         *
34
+         * @var string
35
+         */
36
+        public $url = '';
37
+
38
+        /**
39
+         * Take the array options and use them to build.
40
+         */
41
+        public function __construct( $options ) {
42
+            global $sd_widgets;
43
+
44
+            $sd_widgets[ $options['base_id'] ] = array(
45
+                'name'       => $options['name'],
46
+                'class_name' => $options['class_name'],
47
+                'output_types' => !empty($options['output_types']) ? $options['output_types'] : array()
48
+            );
49
+            $this->base_id                     = $options['base_id'];
50
+            // lets filter the options before we do anything
51
+            $options       = apply_filters( "wp_super_duper_options", $options );
52
+            $options       = apply_filters( "wp_super_duper_options_{$this->base_id}", $options );
53
+            $options       = $this->add_name_from_key( $options );
54
+            $this->options = $options;
55
+
56
+            $this->base_id   = $options['base_id'];
57
+            $this->arguments = isset( $options['arguments'] ) ? $options['arguments'] : array();
58
+
59
+            // nested blocks can't work as a widget
60
+            if(!empty($this->options['nested-block'])){
61
+                if(empty($this->options['output_types'])){
62
+                    $this->options['output_types'] = array('shortcode','block');
63
+                }elseif (($key = array_search('widget', $this->options['output_types'])) !== false) {
64
+                    unset($this->options['output_types'][$key]);
65
+                }
66
+            }
72 67
 
68
+            // init parent
69
+            if(empty($this->options['output_types']) || in_array('widget',$this->options['output_types'])){
70
+                parent::__construct( $options['base_id'], $options['name'], $options['widget_ops'] );
71
+            }
73 72
 
74
-			if ( isset( $options['class_name'] ) ) {
75
-				// register widget
76
-				$this->class_name = $options['class_name'];
77 73
 
78
-				// register shortcode, this needs to be done even for blocks and widgets
79
-				$this->register_shortcode();
74
+            if ( isset( $options['class_name'] ) ) {
75
+                // register widget
76
+                $this->class_name = $options['class_name'];
80 77
 
78
+                // register shortcode, this needs to be done even for blocks and widgets
79
+                $this->register_shortcode();
81 80
 
82
-				// Fusion Builder (avada) support
83
-				if ( function_exists( 'fusion_builder_map' ) ) {
84
-					add_action( 'init', array( $this, 'register_fusion_element' ) );
85
-				}
81
+
82
+                // Fusion Builder (avada) support
83
+                if ( function_exists( 'fusion_builder_map' ) ) {
84
+                    add_action( 'init', array( $this, 'register_fusion_element' ) );
85
+                }
86 86
 
87 87
                 // maybe load the Bricks transformer class
88 88
                 if( class_exists('\Bricks\Elements', false) ){
89
-					add_action( 'init', array( $this, 'load_bricks_element_class' ) );
89
+                    add_action( 'init', array( $this, 'load_bricks_element_class' ) );
90 90
                 }
91 91
 
92
-				// register block
93
-				if(empty($this->options['output_types']) || in_array('block',$this->options['output_types'])){
94
-					add_action( 'admin_enqueue_scripts', array( $this, 'register_block' ) );
95
-				}
96
-			}
92
+                // register block
93
+                if(empty($this->options['output_types']) || in_array('block',$this->options['output_types'])){
94
+                    add_action( 'admin_enqueue_scripts', array( $this, 'register_block' ) );
95
+                }
96
+            }
97 97
 
98
-			// add the CSS and JS we need ONCE
99
-			global $sd_widget_scripts;
98
+            // add the CSS and JS we need ONCE
99
+            global $sd_widget_scripts;
100 100
 
101
-			if ( ! $sd_widget_scripts ) {
102
-				wp_add_inline_script( 'admin-widgets', $this->widget_js() );
103
-				wp_add_inline_script( 'customize-controls', $this->widget_js() );
104
-				wp_add_inline_style( 'widgets', $this->widget_css() );
101
+            if ( ! $sd_widget_scripts ) {
102
+                wp_add_inline_script( 'admin-widgets', $this->widget_js() );
103
+                wp_add_inline_script( 'customize-controls', $this->widget_js() );
104
+                wp_add_inline_style( 'widgets', $this->widget_css() );
105 105
 
106
-				// maybe add elementor editor styles
107
-				add_action( 'elementor/editor/after_enqueue_styles', array( $this, 'elementor_editor_styles' ) );
106
+                // maybe add elementor editor styles
107
+                add_action( 'elementor/editor/after_enqueue_styles', array( $this, 'elementor_editor_styles' ) );
108 108
 
109
-				$sd_widget_scripts = true;
109
+                $sd_widget_scripts = true;
110 110
 
111
-				// add shortcode insert button once
112
-				add_action( 'media_buttons', array( $this, 'wp_media_buttons' ), 1 );
113
-				add_action( 'media_buttons', array( $this, 'shortcode_insert_button' ) );
114
-				// generatepress theme sections compatibility
115
-				if ( function_exists( 'generate_sections_sections_metabox' ) ) {
116
-					add_action( 'generate_sections_metabox', array( $this, 'shortcode_insert_button_script' ) );
117
-				}
118
-				/* Load script on Divi theme builder page */
119
-				if ( function_exists( 'et_builder_is_tb_admin_screen' ) && et_builder_is_tb_admin_screen() ) {
120
-					add_thickbox();
121
-					add_action( 'admin_footer', array( $this, 'shortcode_insert_button_script' ) );
122
-				}
111
+                // add shortcode insert button once
112
+                add_action( 'media_buttons', array( $this, 'wp_media_buttons' ), 1 );
113
+                add_action( 'media_buttons', array( $this, 'shortcode_insert_button' ) );
114
+                // generatepress theme sections compatibility
115
+                if ( function_exists( 'generate_sections_sections_metabox' ) ) {
116
+                    add_action( 'generate_sections_metabox', array( $this, 'shortcode_insert_button_script' ) );
117
+                }
118
+                /* Load script on Divi theme builder page */
119
+                if ( function_exists( 'et_builder_is_tb_admin_screen' ) && et_builder_is_tb_admin_screen() ) {
120
+                    add_thickbox();
121
+                    add_action( 'admin_footer', array( $this, 'shortcode_insert_button_script' ) );
122
+                }
123 123
 
124
-				if ( $this->is_preview() ) {
125
-					add_action( 'wp_footer', array( $this, 'shortcode_insert_button_script' ) );
126
-					// this makes the insert button work for elementor
127
-					add_action( 'elementor/editor/after_enqueue_scripts', array(
128
-						$this,
129
-						'shortcode_insert_button_script'
130
-					) ); // for elementor
131
-				}
132
-				// this makes the insert button work for cornerstone
133
-				add_action( 'wp_print_footer_scripts', array( __CLASS__, 'maybe_cornerstone_builder' ) );
124
+                if ( $this->is_preview() ) {
125
+                    add_action( 'wp_footer', array( $this, 'shortcode_insert_button_script' ) );
126
+                    // this makes the insert button work for elementor
127
+                    add_action( 'elementor/editor/after_enqueue_scripts', array(
128
+                        $this,
129
+                        'shortcode_insert_button_script'
130
+                    ) ); // for elementor
131
+                }
132
+                // this makes the insert button work for cornerstone
133
+                add_action( 'wp_print_footer_scripts', array( __CLASS__, 'maybe_cornerstone_builder' ) );
134 134
 
135
-				add_action( 'wp_ajax_super_duper_get_widget_settings', array( __CLASS__, 'get_widget_settings' ) );
136
-				add_action( 'wp_ajax_super_duper_get_picker', array( __CLASS__, 'get_picker' ) );
135
+                add_action( 'wp_ajax_super_duper_get_widget_settings', array( __CLASS__, 'get_widget_settings' ) );
136
+                add_action( 'wp_ajax_super_duper_get_picker', array( __CLASS__, 'get_picker' ) );
137 137
 
138
-				// add generator text to head
139
-				add_action( 'admin_head', array( $this, 'generator' ), 99 );
140
-				add_action( 'wp_head', array( $this, 'generator' ), 99 );
141
-			}
138
+                // add generator text to head
139
+                add_action( 'admin_head', array( $this, 'generator' ), 99 );
140
+                add_action( 'wp_head', array( $this, 'generator' ), 99 );
141
+            }
142 142
 
143
-			do_action( 'wp_super_duper_widget_init', $options, $this );
144
-		}
143
+            do_action( 'wp_super_duper_widget_init', $options, $this );
144
+        }
145 145
 
146 146
         /**
147 147
          * Load the Bricks conversion class if we are running Bricks.
@@ -151,163 +151,163 @@  discard block
 block discarded – undo
151 151
                     include_once __DIR__ . '/includes/class-super-duper-bricks-element.php';
152 152
         }
153 153
 
154
-		/**
155
-		 * The register widget function
156
-		 * @return void
157
-		 */
158
-		public function _register() {
159
-			if(empty($this->options['output_types']) || in_array('widget',$this->options['output_types'])){
160
-				parent::_register();
161
-			}
162
-		}
163
-
164
-		/**
165
-		 * Add our widget CSS to elementor editor.
166
-		 */
167
-		public function elementor_editor_styles() {
168
-			wp_add_inline_style( 'elementor-editor', $this->widget_css( false ) );
169
-		}
170
-
171
-		public function register_fusion_element() {
172
-
173
-			$options = $this->options;
174
-
175
-			if ( $this->base_id ) {
176
-
177
-				$params = $this->get_fusion_params();
178
-
179
-				$args = array(
180
-					'name'            => $options['name'],
181
-					'shortcode'       => $this->base_id,
182
-					'icon'            => $options['block-icon'] ? $options['block-icon'] : 'far fa-square',
183
-					'allow_generator' => true,
184
-				);
185
-
186
-				if ( ! empty( $params ) ) {
187
-					$args['params'] = $params;
188
-				}
189
-
190
-				fusion_builder_map( $args );
191
-			}
154
+        /**
155
+         * The register widget function
156
+         * @return void
157
+         */
158
+        public function _register() {
159
+            if(empty($this->options['output_types']) || in_array('widget',$this->options['output_types'])){
160
+                parent::_register();
161
+            }
162
+        }
192 163
 
193
-		}
164
+        /**
165
+         * Add our widget CSS to elementor editor.
166
+         */
167
+        public function elementor_editor_styles() {
168
+            wp_add_inline_style( 'elementor-editor', $this->widget_css( false ) );
169
+        }
194 170
 
195
-		public function get_fusion_params() {
196
-			$params    = array();
197
-			$arguments = $this->get_arguments();
198
-
199
-			if ( ! empty( $arguments ) ) {
200
-				foreach ( $arguments as $key => $val ) {
201
-					$param = array();
202
-					// type
203
-					$param['type'] = str_replace(
204
-						array(
205
-							"text",
206
-							"number",
207
-							"email",
208
-							"color",
209
-							"checkbox"
210
-						),
211
-						array(
212
-							"textfield",
213
-							"textfield",
214
-							"textfield",
215
-							"colorpicker",
216
-							"select",
171
+        public function register_fusion_element() {
217 172
 
218
-						),
219
-						$val['type'] );
173
+            $options = $this->options;
220 174
 
221
-					// multiselect
222
-					if ( $val['type'] == 'multiselect' || ( ( $param['type'] == 'select' || $val['type'] == 'select' ) && ! empty( $val['multiple'] ) ) ) {
223
-						$param['type']     = 'multiple_select';
224
-						$param['multiple'] = true;
225
-					}
175
+            if ( $this->base_id ) {
226 176
 
227
-					// heading
228
-					$param['heading'] = isset( $val['title'] ) ? $val['title'] : '';
177
+                $params = $this->get_fusion_params();
229 178
 
230
-					// description
231
-					$param['description'] = isset( $val['desc'] ) ? $val['desc'] : '';
179
+                $args = array(
180
+                    'name'            => $options['name'],
181
+                    'shortcode'       => $this->base_id,
182
+                    'icon'            => $options['block-icon'] ? $options['block-icon'] : 'far fa-square',
183
+                    'allow_generator' => true,
184
+                );
232 185
 
233
-					// param_name
234
-					$param['param_name'] = $key;
186
+                if ( ! empty( $params ) ) {
187
+                    $args['params'] = $params;
188
+                }
235 189
 
236
-					// Default
237
-					$param['default'] = isset( $val['default'] ) ? $val['default'] : '';
190
+                fusion_builder_map( $args );
191
+            }
238 192
 
239
-					// Group
240
-					if ( isset( $val['group'] ) ) {
241
-						$param['group'] = $val['group'];
242
-					}
193
+        }
243 194
 
244
-					// value
245
-					if ( $val['type'] == 'checkbox' ) {
246
-						if ( isset( $val['default'] ) && $val['default'] == '0' ) {
247
-							unset( $param['default'] );
248
-						}
249
-						$param['value'] = array( '0' => __( "No", 'ayecode-connect' ), '1' => __( "Yes", 'ayecode-connect' ) );
250
-					} elseif ( $param['type'] == 'select' || $param['type'] == 'multiple_select' ) {
251
-						$param['value'] = isset( $val['options'] ) ? $val['options'] : array();
252
-					} else {
253
-						$param['value'] = isset( $val['default'] ) ? $val['default'] : '';
254
-					}
195
+        public function get_fusion_params() {
196
+            $params    = array();
197
+            $arguments = $this->get_arguments();
198
+
199
+            if ( ! empty( $arguments ) ) {
200
+                foreach ( $arguments as $key => $val ) {
201
+                    $param = array();
202
+                    // type
203
+                    $param['type'] = str_replace(
204
+                        array(
205
+                            "text",
206
+                            "number",
207
+                            "email",
208
+                            "color",
209
+                            "checkbox"
210
+                        ),
211
+                        array(
212
+                            "textfield",
213
+                            "textfield",
214
+                            "textfield",
215
+                            "colorpicker",
216
+                            "select",
217
+
218
+                        ),
219
+                        $val['type'] );
220
+
221
+                    // multiselect
222
+                    if ( $val['type'] == 'multiselect' || ( ( $param['type'] == 'select' || $val['type'] == 'select' ) && ! empty( $val['multiple'] ) ) ) {
223
+                        $param['type']     = 'multiple_select';
224
+                        $param['multiple'] = true;
225
+                    }
226
+
227
+                    // heading
228
+                    $param['heading'] = isset( $val['title'] ) ? $val['title'] : '';
229
+
230
+                    // description
231
+                    $param['description'] = isset( $val['desc'] ) ? $val['desc'] : '';
232
+
233
+                    // param_name
234
+                    $param['param_name'] = $key;
235
+
236
+                    // Default
237
+                    $param['default'] = isset( $val['default'] ) ? $val['default'] : '';
238
+
239
+                    // Group
240
+                    if ( isset( $val['group'] ) ) {
241
+                        $param['group'] = $val['group'];
242
+                    }
243
+
244
+                    // value
245
+                    if ( $val['type'] == 'checkbox' ) {
246
+                        if ( isset( $val['default'] ) && $val['default'] == '0' ) {
247
+                            unset( $param['default'] );
248
+                        }
249
+                        $param['value'] = array( '0' => __( "No", 'ayecode-connect' ), '1' => __( "Yes", 'ayecode-connect' ) );
250
+                    } elseif ( $param['type'] == 'select' || $param['type'] == 'multiple_select' ) {
251
+                        $param['value'] = isset( $val['options'] ) ? $val['options'] : array();
252
+                    } else {
253
+                        $param['value'] = isset( $val['default'] ) ? $val['default'] : '';
254
+                    }
255
+
256
+                    // setup the param
257
+                    $params[] = $param;
255 258
 
256
-					// setup the param
257
-					$params[] = $param;
259
+                }
260
+            }
258 261
 
259
-				}
260
-			}
261 262
 
263
+            return $params;
264
+        }
262 265
 
263
-			return $params;
264
-		}
266
+        /**
267
+         * Maybe insert the shortcode inserter button in the footer if we are in the cornerstone builder
268
+         */
269
+        public static function maybe_cornerstone_builder() {
270
+            if ( did_action( 'cornerstone_before_boot_app' ) ) {
271
+                self::shortcode_insert_button_script();
272
+            }
273
+        }
265 274
 
266
-		/**
267
-		 * Maybe insert the shortcode inserter button in the footer if we are in the cornerstone builder
268
-		 */
269
-		public static function maybe_cornerstone_builder() {
270
-			if ( did_action( 'cornerstone_before_boot_app' ) ) {
271
-				self::shortcode_insert_button_script();
272
-			}
273
-		}
275
+        /**
276
+         * A function to ge the shortcode builder picker html.
277
+         *
278
+         * @param string $editor_id
279
+         *
280
+         * @return string
281
+         */
282
+        public static function get_picker( $editor_id = '' ) {
274 283
 
275
-		/**
276
-		 * A function to ge the shortcode builder picker html.
277
-		 *
278
-		 * @param string $editor_id
279
-		 *
280
-		 * @return string
281
-		 */
282
-		public static function get_picker( $editor_id = '' ) {
283
-
284
-			ob_start();
285
-			if ( isset( $_POST['editor_id'] ) ) {
286
-				$editor_id = esc_attr( $_POST['editor_id'] );
287
-			} elseif ( isset( $_REQUEST['et_fb'] ) ) {
288
-				$editor_id = 'main_content_content_vb_tiny_mce';
289
-			}
284
+            ob_start();
285
+            if ( isset( $_POST['editor_id'] ) ) {
286
+                $editor_id = esc_attr( $_POST['editor_id'] );
287
+            } elseif ( isset( $_REQUEST['et_fb'] ) ) {
288
+                $editor_id = 'main_content_content_vb_tiny_mce';
289
+            }
290 290
 
291
-			global $sd_widgets;
291
+            global $sd_widgets;
292 292
 
293 293
 //			print_r($sd_widgets);exit;
294
-			?>
294
+            ?>
295 295
 
296 296
 			<div class="sd-shortcode-left-wrap">
297 297
 				<?php
298
-				ksort( $sd_widgets );
299
-				//				print_r($sd_widgets);exit;
300
-				if ( ! empty( $sd_widgets ) ) {
301
-					echo '<select class="widefat" onchange="sd_get_shortcode_options(this);">';
302
-					echo "<option>" . __( 'Select shortcode', 'ayecode-connect' ) . "</option>";
303
-					foreach ( $sd_widgets as $shortcode => $class ) {
304
-						if(!empty($class['output_types']) && !in_array('shortcode', $class['output_types'])){ continue; }
305
-						echo "<option value='" . esc_attr( $shortcode ) . "'>" . esc_attr( $shortcode ) . " (" . esc_attr( $class['name'] ) . ")</option>";
306
-					}
307
-					echo "</select>";
298
+                ksort( $sd_widgets );
299
+                //				print_r($sd_widgets);exit;
300
+                if ( ! empty( $sd_widgets ) ) {
301
+                    echo '<select class="widefat" onchange="sd_get_shortcode_options(this);">';
302
+                    echo "<option>" . __( 'Select shortcode', 'ayecode-connect' ) . "</option>";
303
+                    foreach ( $sd_widgets as $shortcode => $class ) {
304
+                        if(!empty($class['output_types']) && !in_array('shortcode', $class['output_types'])){ continue; }
305
+                        echo "<option value='" . esc_attr( $shortcode ) . "'>" . esc_attr( $shortcode ) . " (" . esc_attr( $class['name'] ) . ")</option>";
306
+                    }
307
+                    echo "</select>";
308 308
 
309
-				}
310
-				?>
309
+                }
310
+                ?>
311 311
 				<div class="sd-shortcode-settings"></div>
312 312
 
313 313
 			</div>
@@ -318,8 +318,8 @@  discard block
 block discarded – undo
318 318
 					<?php if ( $editor_id != '' ) { ?>
319 319
 						<button class="button sd-insert-shortcode-button"
320 320
 								onclick="sd_insert_shortcode(<?php if ( ! empty( $editor_id ) ) {
321
-									echo "'" . $editor_id . "'";
322
-								} ?>)"><?php _e( 'Insert shortcode', 'ayecode-connect' ); ?></button>
321
+                                    echo "'" . $editor_id . "'";
322
+                                } ?>)"><?php _e( 'Insert shortcode', 'ayecode-connect' ); ?></button>
323 323
 					<?php } ?>
324 324
 					<button class="button"
325 325
 							onclick="sd_copy_to_clipboard()"><?php _e( 'Copy shortcode' ); ?></button>
@@ -327,150 +327,150 @@  discard block
 block discarded – undo
327 327
 			</div>
328 328
 			<?php
329 329
 
330
-			$html = ob_get_clean();
331
-
332
-			if ( wp_doing_ajax() ) {
333
-				echo $html;
334
-				$should_die = true;
330
+            $html = ob_get_clean();
335 331
 
336
-				// some builder get the editor via ajax so we should not die on those occasions
337
-				$dont_die = array(
338
-					'parent_tag',// WP Bakery
339
-					'avia_request' // enfold
340
-				);
341
-
342
-				foreach ( $dont_die as $request ) {
343
-					if ( isset( $_REQUEST[ $request ] ) ) {
344
-						$should_die = false;
345
-					}
346
-				}
332
+            if ( wp_doing_ajax() ) {
333
+                echo $html;
334
+                $should_die = true;
347 335
 
348
-				if ( $should_die ) {
349
-					wp_die();
350
-				}
336
+                // some builder get the editor via ajax so we should not die on those occasions
337
+                $dont_die = array(
338
+                    'parent_tag',// WP Bakery
339
+                    'avia_request' // enfold
340
+                );
351 341
 
352
-			} else {
353
-				return $html;
354
-			}
342
+                foreach ( $dont_die as $request ) {
343
+                    if ( isset( $_REQUEST[ $request ] ) ) {
344
+                        $should_die = false;
345
+                    }
346
+                }
355 347
 
356
-			return '';
348
+                if ( $should_die ) {
349
+                    wp_die();
350
+                }
357 351
 
358
-		}
352
+            } else {
353
+                return $html;
354
+            }
359 355
 
360
-		/**
361
-		 * Output the version in the header.
362
-		 */
363
-		public function generator() {
364
-			$file = str_replace( array( "/", "\\" ), "/", realpath( __FILE__ ) );
365
-			$plugins_dir = str_replace( array( "/", "\\" ), "/", realpath( WP_PLUGIN_DIR ) );
366
-
367
-			// Find source plugin/theme of SD
368
-			$source = array();
369
-			if ( strpos( $file, $plugins_dir ) !== false ) {
370
-				$source = explode( "/", plugin_basename( $file ) );
371
-			} else if ( function_exists( 'get_theme_root' ) ) {
372
-				$themes_dir = str_replace( array( "/", "\\" ), "/", realpath( get_theme_root() ) );
373
-
374
-				if ( strpos( $file, $themes_dir ) !== false ) {
375
-					$source = explode( "/", ltrim( str_replace( $themes_dir, "", $file ), "/" ) );
376
-				}
377
-			}
356
+            return '';
378 357
 
379
-			echo '<meta name="generator" content="WP Super Duper v' . esc_attr( $this->version ) . '"' . ( ! empty( $source[0] ) ? ' data-sd-source="' . esc_attr( $source[0] ) . '"' : '' ) . ' />';
380
-		}
358
+        }
381 359
 
382
-		/**
383
-		 * Get widget settings.
384
-		 *
385
-		 * @since 1.0.0
386
-		 */
387
-		public static function get_widget_settings() {
388
-			global $sd_widgets;
389
-
390
-			$shortcode = isset( $_REQUEST['shortcode'] ) && $_REQUEST['shortcode'] ? sanitize_title_with_dashes( $_REQUEST['shortcode'] ) : '';
391
-			if ( ! $shortcode ) {
392
-				wp_die();
393
-			}
394
-			$widget_args = isset( $sd_widgets[ $shortcode ] ) ? $sd_widgets[ $shortcode ] : '';
395
-			if ( ! $widget_args ) {
396
-				wp_die();
397
-			}
398
-			$class_name = isset( $widget_args['class_name'] ) && $widget_args['class_name'] ? $widget_args['class_name'] : '';
399
-			if ( ! $class_name ) {
400
-				wp_die();
401
-			}
360
+        /**
361
+         * Output the version in the header.
362
+         */
363
+        public function generator() {
364
+            $file = str_replace( array( "/", "\\" ), "/", realpath( __FILE__ ) );
365
+            $plugins_dir = str_replace( array( "/", "\\" ), "/", realpath( WP_PLUGIN_DIR ) );
366
+
367
+            // Find source plugin/theme of SD
368
+            $source = array();
369
+            if ( strpos( $file, $plugins_dir ) !== false ) {
370
+                $source = explode( "/", plugin_basename( $file ) );
371
+            } else if ( function_exists( 'get_theme_root' ) ) {
372
+                $themes_dir = str_replace( array( "/", "\\" ), "/", realpath( get_theme_root() ) );
373
+
374
+                if ( strpos( $file, $themes_dir ) !== false ) {
375
+                    $source = explode( "/", ltrim( str_replace( $themes_dir, "", $file ), "/" ) );
376
+                }
377
+            }
402 378
 
403
-			// invoke an instance method
404
-			$widget = new $class_name;
379
+            echo '<meta name="generator" content="WP Super Duper v' . esc_attr( $this->version ) . '"' . ( ! empty( $source[0] ) ? ' data-sd-source="' . esc_attr( $source[0] ) . '"' : '' ) . ' />';
380
+        }
405 381
 
406
-			ob_start();
407
-			$widget->form( array() );
408
-			$form = ob_get_clean();
409
-			echo "<form id='$shortcode'>" . $form . "<div class=\"widget-control-save\"></div></form>";
410
-			echo "<style>" . $widget->widget_css() . "</style>";
411
-			echo "<script>" . $widget->widget_js() . "</script>";
412
-			?>
382
+        /**
383
+         * Get widget settings.
384
+         *
385
+         * @since 1.0.0
386
+         */
387
+        public static function get_widget_settings() {
388
+            global $sd_widgets;
389
+
390
+            $shortcode = isset( $_REQUEST['shortcode'] ) && $_REQUEST['shortcode'] ? sanitize_title_with_dashes( $_REQUEST['shortcode'] ) : '';
391
+            if ( ! $shortcode ) {
392
+                wp_die();
393
+            }
394
+            $widget_args = isset( $sd_widgets[ $shortcode ] ) ? $sd_widgets[ $shortcode ] : '';
395
+            if ( ! $widget_args ) {
396
+                wp_die();
397
+            }
398
+            $class_name = isset( $widget_args['class_name'] ) && $widget_args['class_name'] ? $widget_args['class_name'] : '';
399
+            if ( ! $class_name ) {
400
+                wp_die();
401
+            }
402
+
403
+            // invoke an instance method
404
+            $widget = new $class_name;
405
+
406
+            ob_start();
407
+            $widget->form( array() );
408
+            $form = ob_get_clean();
409
+            echo "<form id='$shortcode'>" . $form . "<div class=\"widget-control-save\"></div></form>";
410
+            echo "<style>" . $widget->widget_css() . "</style>";
411
+            echo "<script>" . $widget->widget_js() . "</script>";
412
+            ?>
413 413
 			<?php
414
-			wp_die();
415
-		}
416
-
417
-		/**
418
-		 * Insert shortcode builder button to classic editor (not inside Gutenberg, not needed).
419
-		 *
420
-		 * @param string $editor_id Optional. Shortcode editor id. Default null.
421
-		 * @param string $insert_shortcode_function Optional. Insert shortcode function. Default null.
422
-		 *
423
-		 *@since 1.0.0
424
-		 *
425
-		 */
426
-		public static function shortcode_insert_button( $editor_id = '', $insert_shortcode_function = '' ) {
427
-			global $sd_widgets, $shortcode_insert_button_once;
428
-			if ( $shortcode_insert_button_once ) {
429
-				return;
430
-			}
431
-			add_thickbox();
432
-
433
-
434
-			/**
435
-			 * Cornerstone makes us play dirty tricks :/
436
-			 * All media_buttons are removed via JS unless they are two specific id's so we wrap our content in this ID so it is not removed.
437
-			 */
438
-			if ( function_exists( 'cornerstone_plugin_init' ) && ! is_admin() ) {
439
-				echo '<span id="insert-media-button">';
440
-			}
441
-
442
-			echo self::shortcode_button( 'this', 'true' );
443
-
444
-			// see opening note
445
-			if ( function_exists( 'cornerstone_plugin_init' ) && ! is_admin() ) {
446
-				echo '</span>'; // end #insert-media-button
447
-			}
448
-
449
-			// Add separate script for generatepress theme sections
450
-			if ( function_exists( 'generate_sections_sections_metabox' ) && did_action( 'generate_sections_metabox' ) ) {
451
-			} else {
452
-				self::shortcode_insert_button_script( $editor_id, $insert_shortcode_function );
453
-			}
414
+            wp_die();
415
+        }
454 416
 
455
-			$shortcode_insert_button_once = true;
456
-		}
417
+        /**
418
+         * Insert shortcode builder button to classic editor (not inside Gutenberg, not needed).
419
+         *
420
+         * @param string $editor_id Optional. Shortcode editor id. Default null.
421
+         * @param string $insert_shortcode_function Optional. Insert shortcode function. Default null.
422
+         *
423
+         *@since 1.0.0
424
+         *
425
+         */
426
+        public static function shortcode_insert_button( $editor_id = '', $insert_shortcode_function = '' ) {
427
+            global $sd_widgets, $shortcode_insert_button_once;
428
+            if ( $shortcode_insert_button_once ) {
429
+                return;
430
+            }
431
+            add_thickbox();
432
+
433
+
434
+            /**
435
+             * Cornerstone makes us play dirty tricks :/
436
+             * All media_buttons are removed via JS unless they are two specific id's so we wrap our content in this ID so it is not removed.
437
+             */
438
+            if ( function_exists( 'cornerstone_plugin_init' ) && ! is_admin() ) {
439
+                echo '<span id="insert-media-button">';
440
+            }
441
+
442
+            echo self::shortcode_button( 'this', 'true' );
443
+
444
+            // see opening note
445
+            if ( function_exists( 'cornerstone_plugin_init' ) && ! is_admin() ) {
446
+                echo '</span>'; // end #insert-media-button
447
+            }
448
+
449
+            // Add separate script for generatepress theme sections
450
+            if ( function_exists( 'generate_sections_sections_metabox' ) && did_action( 'generate_sections_metabox' ) ) {
451
+            } else {
452
+                self::shortcode_insert_button_script( $editor_id, $insert_shortcode_function );
453
+            }
454
+
455
+            $shortcode_insert_button_once = true;
456
+        }
457 457
 
458
-		/**
459
-		 * Gets the shortcode insert button html.
460
-		 *
461
-		 * @param string $id
462
-		 * @param string $search_for_id
463
-		 *
464
-		 * @return mixed
465
-		 */
466
-		public static function shortcode_button( $id = '', $search_for_id = '' ) {
467
-			ob_start();
468
-			?>
458
+        /**
459
+         * Gets the shortcode insert button html.
460
+         *
461
+         * @param string $id
462
+         * @param string $search_for_id
463
+         *
464
+         * @return mixed
465
+         */
466
+        public static function shortcode_button( $id = '', $search_for_id = '' ) {
467
+            ob_start();
468
+            ?>
469 469
 			<span class="sd-lable-shortcode-inserter">
470 470
 				<a onclick="sd_ajax_get_picker(<?php echo $id;
471
-				if ( $search_for_id ) {
472
-					echo "," . $search_for_id;
473
-				} ?>);" href="#TB_inline?width=100%&height=550&inlineId=super-duper-content-ajaxed"
471
+                if ( $search_for_id ) {
472
+                    echo "," . $search_for_id;
473
+                } ?>);" href="#TB_inline?width=100%&height=550&inlineId=super-duper-content-ajaxed"
474 474
 				   class="thickbox button super-duper-content-open" title="Add Shortcode">
475 475
 					<span style="vertical-align: middle;line-height: 18px;font-size: 20px;"
476 476
 						  class="dashicons dashicons-screenoptions"></span>
@@ -481,21 +481,21 @@  discard block
 block discarded – undo
481 481
 			</span>
482 482
 
483 483
 			<?php
484
-			$html = ob_get_clean();
484
+            $html = ob_get_clean();
485 485
 
486
-			// remove line breaks so we can use it in js
487
-			return preg_replace( "/\r|\n/", "", trim( $html ) );
488
-		}
486
+            // remove line breaks so we can use it in js
487
+            return preg_replace( "/\r|\n/", "", trim( $html ) );
488
+        }
489 489
 
490
-		/**
491
-		 * Makes SD work with the siteOrigin page builder.
492
-		 *
493
-		 * @return mixed
494
-		 *@since 1.0.6
495
-		 */
496
-		public static function siteorigin_js() {
497
-			ob_start();
498
-			?>
490
+        /**
491
+         * Makes SD work with the siteOrigin page builder.
492
+         *
493
+         * @return mixed
494
+         *@since 1.0.6
495
+         */
496
+        public static function siteorigin_js() {
497
+            ob_start();
498
+            ?>
499 499
 			<script>
500 500
 				/**
501 501
 				 * Check a form to see what items should be shown or hidden.
@@ -571,29 +571,29 @@  discard block
 block discarded – undo
571 571
 				});
572 572
 			</script>
573 573
 			<?php
574
-			$output = ob_get_clean();
574
+            $output = ob_get_clean();
575 575
 
576
-			/*
576
+            /*
577 577
 			 * We only add the <script> tags for code highlighting, so we strip them from the output.
578 578
 			 */
579 579
 
580
-			return str_replace( array(
581
-				'<script>',
582
-				'</script>'
583
-			), '', $output );
584
-		}
580
+            return str_replace( array(
581
+                '<script>',
582
+                '</script>'
583
+            ), '', $output );
584
+        }
585 585
 
586
-		/**
587
-		 * Output the JS and CSS for the shortcode insert button.
588
-		 *
589
-		 * @param string $editor_id
590
-		 * @param string $insert_shortcode_function
591
-		 *
592
-		 *@since 1.0.6
593
-		 *
594
-		 */
595
-		public static function shortcode_insert_button_script( $editor_id = '', $insert_shortcode_function = '' ) {
596
-			?>
586
+        /**
587
+         * Output the JS and CSS for the shortcode insert button.
588
+         *
589
+         * @param string $editor_id
590
+         * @param string $insert_shortcode_function
591
+         *
592
+         *@since 1.0.6
593
+         *
594
+         */
595
+        public static function shortcode_insert_button_script( $editor_id = '', $insert_shortcode_function = '' ) {
596
+            ?>
597 597
 			<style>
598 598
 				.sd-shortcode-left-wrap {
599 599
 					float: left;
@@ -721,35 +721,35 @@  discard block
 block discarded – undo
721 721
 				<?php } ?>
722 722
 			</style>
723 723
 			<?php
724
-			if ( class_exists( 'SiteOrigin_Panels' ) ) {
725
-				echo "<script>" . self::siteorigin_js() . "</script>";
726
-			}
727
-			?>
724
+            if ( class_exists( 'SiteOrigin_Panels' ) ) {
725
+                echo "<script>" . self::siteorigin_js() . "</script>";
726
+            }
727
+            ?>
728 728
 			<script>
729 729
 				<?php
730
-				if(! empty( $insert_shortcode_function )){
731
-					echo $insert_shortcode_function;
732
-				}else{
733
-
734
-				/**
735
-				 * Function for super duper insert shortcode.
736
-				 *
737
-				 * @since 1.0.0
738
-				 */
739
-				?>
730
+                if(! empty( $insert_shortcode_function )){
731
+                    echo $insert_shortcode_function;
732
+                }else{
733
+
734
+                /**
735
+                 * Function for super duper insert shortcode.
736
+                 *
737
+                 * @since 1.0.0
738
+                 */
739
+                ?>
740 740
 				function sd_insert_shortcode($editor_id) {
741 741
 					$shortcode = jQuery('#TB_ajaxContent #sd-shortcode-output').val();
742 742
 					if ($shortcode) {
743 743
 						if (!$editor_id) {
744 744
 							<?php
745
-							if ( isset( $_REQUEST['et_fb'] ) ) {
746
-								echo '$editor_id = "#main_content_content_vb_tiny_mce";';
747
-							} elseif ( isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'elementor' ) {
748
-								echo '$editor_id = "#elementor-controls .wp-editor-container textarea";';
749
-							} else {
750
-								echo '$editor_id = "#wp-content-editor-container textarea";';
751
-							}
752
-							?>
745
+                            if ( isset( $_REQUEST['et_fb'] ) ) {
746
+                                echo '$editor_id = "#main_content_content_vb_tiny_mce";';
747
+                            } elseif ( isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'elementor' ) {
748
+                                echo '$editor_id = "#elementor-controls .wp-editor-container textarea";';
749
+                            } else {
750
+                                echo '$editor_id = "#wp-content-editor-container textarea";';
751
+                            }
752
+                            ?>
753 753
 						} else {
754 754
 							$editor_id = '#' + $editor_id;
755 755
 						}
@@ -1063,18 +1063,18 @@  discard block
 block discarded – undo
1063 1063
 				}
1064 1064
 			</script>
1065 1065
 			<?php
1066
-		}
1066
+        }
1067 1067
 
1068
-		/**
1069
-		 * Gets some CSS for the widgets screen.
1070
-		 *
1071
-		 * @param bool $advanced If we should include advanced CSS.
1072
-		 *
1073
-		 * @return mixed
1074
-		 */
1075
-		public function widget_css( $advanced = true ) {
1076
-			ob_start();
1077
-			?>
1068
+        /**
1069
+         * Gets some CSS for the widgets screen.
1070
+         *
1071
+         * @param bool $advanced If we should include advanced CSS.
1072
+         *
1073
+         * @return mixed
1074
+         */
1075
+        public function widget_css( $advanced = true ) {
1076
+            ob_start();
1077
+            ?>
1078 1078
 			<style>
1079 1079
 				<?php if( $advanced ){ ?>
1080 1080
 				.sd-advanced-setting {
@@ -1114,26 +1114,26 @@  discard block
 block discarded – undo
1114 1114
 				.elementor-control .sd-argument select[multiple] option{padding:3px}
1115 1115
 			</style>
1116 1116
 			<?php
1117
-			$output = ob_get_clean();
1117
+            $output = ob_get_clean();
1118 1118
 
1119
-			/*
1119
+            /*
1120 1120
 			 * We only add the <script> tags for code highlighting, so we strip them from the output.
1121 1121
 			 */
1122 1122
 
1123
-			return str_replace( array(
1124
-				'<style>',
1125
-				'</style>'
1126
-			), '', $output );
1127
-		}
1123
+            return str_replace( array(
1124
+                '<style>',
1125
+                '</style>'
1126
+            ), '', $output );
1127
+        }
1128 1128
 
1129
-		/**
1130
-		 * Gets some JS for the widgets screen.
1131
-		 *
1132
-		 * @return mixed
1133
-		 */
1134
-		public function widget_js() {
1135
-			ob_start();
1136
-			?>
1129
+        /**
1130
+         * Gets some JS for the widgets screen.
1131
+         *
1132
+         * @return mixed
1133
+         */
1134
+        public function widget_js() {
1135
+            ob_start();
1136
+            ?>
1137 1137
 			<script>
1138 1138
 
1139 1139
 				/**
@@ -1284,513 +1284,513 @@  discard block
 block discarded – undo
1284 1284
 				<?php do_action( 'wp_super_duper_widget_js', $this ); ?>
1285 1285
 			</script>
1286 1286
 			<?php
1287
-			$output = ob_get_clean();
1287
+            $output = ob_get_clean();
1288 1288
 
1289
-			/*
1289
+            /*
1290 1290
 			 * We only add the <script> tags for code highlighting, so we strip them from the output.
1291 1291
 			 */
1292 1292
 
1293
-			return str_replace( array(
1294
-				'<script>',
1295
-				'</script>'
1296
-			), '', $output );
1297
-		}
1293
+            return str_replace( array(
1294
+                '<script>',
1295
+                '</script>'
1296
+            ), '', $output );
1297
+        }
1298 1298
 
1299 1299
 
1300
-		/**
1301
-		 * Set the name from the argument key.
1302
-		 *
1303
-		 * @param $options
1304
-		 *
1305
-		 * @return mixed
1306
-		 */
1307
-		private function add_name_from_key( $options, $arguments = false ) {
1308
-			if ( ! empty( $options['arguments'] ) ) {
1309
-				foreach ( $options['arguments'] as $key => $val ) {
1310
-					$options['arguments'][ $key ]['name'] = $key;
1311
-				}
1312
-			} elseif ( $arguments && is_array( $options ) && ! empty( $options ) ) {
1313
-				foreach ( $options as $key => $val ) {
1314
-					$options[ $key ]['name'] = $key;
1315
-				}
1316
-			}
1300
+        /**
1301
+         * Set the name from the argument key.
1302
+         *
1303
+         * @param $options
1304
+         *
1305
+         * @return mixed
1306
+         */
1307
+        private function add_name_from_key( $options, $arguments = false ) {
1308
+            if ( ! empty( $options['arguments'] ) ) {
1309
+                foreach ( $options['arguments'] as $key => $val ) {
1310
+                    $options['arguments'][ $key ]['name'] = $key;
1311
+                }
1312
+            } elseif ( $arguments && is_array( $options ) && ! empty( $options ) ) {
1313
+                foreach ( $options as $key => $val ) {
1314
+                    $options[ $key ]['name'] = $key;
1315
+                }
1316
+            }
1317 1317
 
1318
-			return $options;
1319
-		}
1318
+            return $options;
1319
+        }
1320 1320
 
1321
-		/**
1322
-		 * Register the parent shortcode.
1323
-		 *
1324
-		 * @since 1.0.0
1325
-		 */
1326
-		public function register_shortcode() {
1327
-			add_shortcode( $this->base_id, array( $this, 'shortcode_output' ) );
1328
-			add_action( 'wp_ajax_super_duper_output_shortcode', array( $this, 'render_shortcode' ) );
1329
-		}
1321
+        /**
1322
+         * Register the parent shortcode.
1323
+         *
1324
+         * @since 1.0.0
1325
+         */
1326
+        public function register_shortcode() {
1327
+            add_shortcode( $this->base_id, array( $this, 'shortcode_output' ) );
1328
+            add_action( 'wp_ajax_super_duper_output_shortcode', array( $this, 'render_shortcode' ) );
1329
+        }
1330 1330
 
1331
-		/**
1332
-		 * Render the shortcode via ajax so we can return it to Gutenberg.
1333
-		 *
1334
-		 * @since 1.0.0
1335
-		 */
1336
-		public function render_shortcode() {
1337
-			check_ajax_referer( 'super_duper_output_shortcode', '_ajax_nonce', true );
1338
-			if ( ! current_user_can( 'manage_options' ) ) {
1339
-				wp_die();
1340
-			}
1331
+        /**
1332
+         * Render the shortcode via ajax so we can return it to Gutenberg.
1333
+         *
1334
+         * @since 1.0.0
1335
+         */
1336
+        public function render_shortcode() {
1337
+            check_ajax_referer( 'super_duper_output_shortcode', '_ajax_nonce', true );
1338
+            if ( ! current_user_can( 'manage_options' ) ) {
1339
+                wp_die();
1340
+            }
1341
+
1342
+            // we might need the $post value here so lets set it.
1343
+            if ( isset( $_POST['post_id'] ) && $_POST['post_id'] ) {
1344
+                $post_obj = get_post( absint( $_POST['post_id'] ) );
1345
+                if ( ! empty( $post_obj ) && empty( $post ) ) {
1346
+                    global $post;
1347
+                    $post = $post_obj;
1348
+                }
1349
+            }
1350
+
1351
+            if ( isset( $_POST['shortcode'] ) && $_POST['shortcode'] ) {
1352
+                $is_preview = $this->is_preview();
1353
+                $shortcode_name   = sanitize_title_with_dashes( $_POST['shortcode'] );
1354
+                $attributes_array = isset( $_POST['attributes'] ) && $_POST['attributes'] ? $_POST['attributes'] : array();
1355
+                $attributes       = '';
1356
+                if ( ! empty( $attributes_array ) ) {
1357
+                    foreach ( $attributes_array as $key => $value ) {
1358
+                        if ( is_array( $value ) ) {
1359
+                            $value = implode( ",", $value );
1360
+                        }
1361
+
1362
+                        if ( ! empty( $value ) ) {
1363
+                            $value = wp_unslash( $value );
1364
+
1365
+                            // Encode [ and ].
1366
+                            if ( $is_preview ) {
1367
+                                $value = $this->encode_shortcodes( $value );
1368
+                            }
1369
+                        }
1370
+                        $attributes .= " " . esc_attr( sanitize_title_with_dashes( $key ) ) . "='" . esc_attr( $value ) . "' ";
1371
+                    }
1372
+                }
1341 1373
 
1342
-			// we might need the $post value here so lets set it.
1343
-			if ( isset( $_POST['post_id'] ) && $_POST['post_id'] ) {
1344
-				$post_obj = get_post( absint( $_POST['post_id'] ) );
1345
-				if ( ! empty( $post_obj ) && empty( $post ) ) {
1346
-					global $post;
1347
-					$post = $post_obj;
1348
-				}
1349
-			}
1374
+                $shortcode = "[" . esc_attr( $shortcode_name ) . " " . $attributes . "]";
1350 1375
 
1351
-			if ( isset( $_POST['shortcode'] ) && $_POST['shortcode'] ) {
1352
-				$is_preview = $this->is_preview();
1353
-				$shortcode_name   = sanitize_title_with_dashes( $_POST['shortcode'] );
1354
-				$attributes_array = isset( $_POST['attributes'] ) && $_POST['attributes'] ? $_POST['attributes'] : array();
1355
-				$attributes       = '';
1356
-				if ( ! empty( $attributes_array ) ) {
1357
-					foreach ( $attributes_array as $key => $value ) {
1358
-						if ( is_array( $value ) ) {
1359
-							$value = implode( ",", $value );
1360
-						}
1376
+                $content = do_shortcode( $shortcode );
1361 1377
 
1362
-						if ( ! empty( $value ) ) {
1363
-							$value = wp_unslash( $value );
1378
+                // Decode [ and ].
1379
+                if ( ! empty( $content ) && $is_preview ) {
1380
+                    $content = $this->decode_shortcodes( $content );
1381
+                }
1364 1382
 
1365
-							// Encode [ and ].
1366
-							if ( $is_preview ) {
1367
-								$value = $this->encode_shortcodes( $value );
1368
-							}
1369
-						}
1370
-						$attributes .= " " . esc_attr( sanitize_title_with_dashes( $key ) ) . "='" . esc_attr( $value ) . "' ";
1371
-					}
1372
-				}
1383
+                echo $content;
1384
+            }
1385
+            wp_die();
1386
+        }
1373 1387
 
1374
-				$shortcode = "[" . esc_attr( $shortcode_name ) . " " . $attributes . "]";
1388
+        /**
1389
+         * Output the shortcode.
1390
+         *
1391
+         * @param array $args
1392
+         * @param string $content
1393
+         *
1394
+         * @return string
1395
+         */
1396
+        public function shortcode_output( $args = array(), $content = '' ) {
1397
+            $_instance = $args;
1398
+
1399
+            $args = $this->argument_values( $args );
1400
+
1401
+            // add extra argument so we know its a output to gutenberg
1402
+            //$args
1403
+            $args = $this->string_to_bool( $args );
1404
+
1405
+            // if we have a enclosed shortcode we add it to the special `html` argument
1406
+            if ( ! empty( $content ) ) {
1407
+                $args['html'] = $content;
1408
+            }
1409
+
1410
+            if ( ! $this->is_preview() ) {
1411
+                /**
1412
+                 * Filters the settings for a particular widget args.
1413
+                 *
1414
+                 * @param array          $args      The current widget instance's settings.
1415
+                 * @param WP_Super_Duper $widget    The current widget settings.
1416
+                 * @param array          $_instance An array of default widget arguments.
1417
+                 *
1418
+                 *@since 1.0.28
1419
+                 *
1420
+                 */
1421
+                $args = apply_filters( 'wp_super_duper_widget_display_callback', $args, $this, $_instance );
1422
+
1423
+                if ( ! is_array( $args ) ) {
1424
+                    return $args;
1425
+                }
1426
+            }
1427
+
1428
+            $class = isset( $this->options['widget_ops']['classname'] ) ? esc_attr( $this->options['widget_ops']['classname'] ) : '';
1429
+            $class .= " sdel-".$this->get_instance_hash();
1430
+
1431
+            $class = apply_filters( 'wp_super_duper_div_classname', $class, $args, $this );
1432
+            $class = apply_filters( 'wp_super_duper_div_classname_' . $this->base_id, $class, $args, $this );
1433
+
1434
+            $attrs = apply_filters( 'wp_super_duper_div_attrs', '', $args, $this );
1435
+            $attrs = apply_filters( 'wp_super_duper_div_attrs_' . $this->base_id, '', $args, $this );
1436
+
1437
+            $shortcode_args = array();
1438
+            $output         = '';
1439
+            $no_wrap        = isset( $this->options['no_wrap'] ) && $this->options['no_wrap'] ? true : false;
1440
+            if ( isset( $args['no_wrap'] ) && $args['no_wrap'] ) {
1441
+                $no_wrap = true;
1442
+            }
1443
+            $main_content = $this->output( $args, $shortcode_args, $content );
1444
+            if ( $main_content && ! $no_wrap ) {
1445
+                // wrap the shortcode in a div with the same class as the widget
1446
+                $output .= '<div class="' . $class . '" ' . $attrs . '>';
1447
+                if ( ! empty( $args['title'] ) ) {
1448
+                    // if its a shortcode and there is a title try to grab the title wrappers
1449
+                    $shortcode_args = array( 'before_title' => '', 'after_title' => '' );
1450
+                    if ( empty( $instance ) ) {
1451
+                        global $wp_registered_sidebars;
1452
+                        if ( ! empty( $wp_registered_sidebars ) ) {
1453
+                            foreach ( $wp_registered_sidebars as $sidebar ) {
1454
+                                if ( ! empty( $sidebar['before_title'] ) ) {
1455
+                                    $shortcode_args['before_title'] = $sidebar['before_title'];
1456
+                                    $shortcode_args['after_title']  = $sidebar['after_title'];
1457
+                                    break;
1458
+                                }
1459
+                            }
1460
+                        }
1461
+                    }
1462
+                    $output .= $this->output_title( $shortcode_args, $args );
1463
+                }
1464
+                $output .= $main_content;
1465
+                $output .= '</div>';
1466
+            } elseif ( $main_content && $no_wrap ) {
1467
+                $output .= $main_content;
1468
+            }
1469
+
1470
+            // if preview show a placeholder if empty
1471
+            if ( $this->is_preview() && $output == '' ) {
1472
+                $output = $this->preview_placeholder_text( "{{" . $this->base_id . "}}" );
1473
+            }
1474
+
1475
+            return apply_filters( 'wp_super_duper_widget_output', $output, $args, $shortcode_args, $this );
1476
+        }
1375 1477
 
1376
-				$content = do_shortcode( $shortcode );
1478
+        /**
1479
+         * Placeholder text to show if output is empty and we are on a preview/builder page.
1480
+         *
1481
+         * @param string $name
1482
+         *
1483
+         * @return string
1484
+         */
1485
+        public function preview_placeholder_text( $name = '' ) {
1486
+            return "<div style='background:#0185ba33;padding: 10px;border: 4px #ccc dashed;'>" . wp_sprintf( __( 'Placeholder for: %s', 'ayecode-connect' ), $name ) . "</div>";
1487
+        }
1377 1488
 
1378
-				// Decode [ and ].
1379
-				if ( ! empty( $content ) && $is_preview ) {
1380
-					$content = $this->decode_shortcodes( $content );
1381
-				}
1489
+        /**
1490
+         * Sometimes booleans values can be turned to strings, so we fix that.
1491
+         *
1492
+         * @param $options
1493
+         *
1494
+         * @return mixed
1495
+         */
1496
+        public function string_to_bool( $options ) {
1497
+            // convert bool strings to booleans
1498
+            foreach ( $options as $key => $val ) {
1499
+                if ( $val == 'false' ) {
1500
+                    $options[ $key ] = false;
1501
+                } elseif ( $val == 'true' ) {
1502
+                    $options[ $key ] = true;
1503
+                }
1504
+            }
1382 1505
 
1383
-				echo $content;
1384
-			}
1385
-			wp_die();
1386
-		}
1506
+            return $options;
1507
+        }
1387 1508
 
1388
-		/**
1389
-		 * Output the shortcode.
1390
-		 *
1391
-		 * @param array $args
1392
-		 * @param string $content
1393
-		 *
1394
-		 * @return string
1395
-		 */
1396
-		public function shortcode_output( $args = array(), $content = '' ) {
1397
-			$_instance = $args;
1398
-
1399
-			$args = $this->argument_values( $args );
1400
-
1401
-			// add extra argument so we know its a output to gutenberg
1402
-			//$args
1403
-			$args = $this->string_to_bool( $args );
1404
-
1405
-			// if we have a enclosed shortcode we add it to the special `html` argument
1406
-			if ( ! empty( $content ) ) {
1407
-				$args['html'] = $content;
1408
-			}
1509
+        /**
1510
+         * Get the argument values that are also filterable.
1511
+         *
1512
+         * @param $instance
1513
+         *
1514
+         * @return array
1515
+         *@since 1.0.12 Don't set checkbox default value if the value is empty.
1516
+         *
1517
+         */
1518
+        public function argument_values( $instance ) {
1519
+            $argument_values = array();
1520
+
1521
+            // set widget instance
1522
+            $this->instance = $instance;
1523
+
1524
+            if ( empty( $this->arguments ) ) {
1525
+                $this->arguments = $this->get_arguments();
1526
+            }
1527
+
1528
+            if ( ! empty( $this->arguments ) ) {
1529
+                foreach ( $this->arguments as $key => $args ) {
1530
+                    // set the input name from the key
1531
+                    $args['name'] = $key;
1532
+                    //
1533
+                    $argument_values[ $key ] = isset( $instance[ $key ] ) ? $instance[ $key ] : '';
1534
+                    if ( $args['type'] == 'checkbox' && $argument_values[ $key ] == '' ) {
1535
+                        // don't set default for an empty checkbox
1536
+                    } elseif ( $argument_values[ $key ] == '' && isset( $args['default'] ) ) {
1537
+                        $argument_values[ $key ] = $args['default'];
1538
+                    }
1539
+                }
1540
+            }
1409 1541
 
1410
-			if ( ! $this->is_preview() ) {
1411
-				/**
1412
-				 * Filters the settings for a particular widget args.
1413
-				 *
1414
-				 * @param array          $args      The current widget instance's settings.
1415
-				 * @param WP_Super_Duper $widget    The current widget settings.
1416
-				 * @param array          $_instance An array of default widget arguments.
1417
-				 *
1418
-				 *@since 1.0.28
1419
-				 *
1420
-				 */
1421
-				$args = apply_filters( 'wp_super_duper_widget_display_callback', $args, $this, $_instance );
1542
+            return $argument_values;
1543
+        }
1422 1544
 
1423
-				if ( ! is_array( $args ) ) {
1424
-					return $args;
1425
-				}
1426
-			}
1545
+        /**
1546
+         * Set arguments in super duper.
1547
+         *
1548
+         * @return array Set arguments.
1549
+         *@since 1.0.0
1550
+         *
1551
+         */
1552
+        public function set_arguments() {
1553
+            return $this->arguments;
1554
+        }
1427 1555
 
1428
-			$class = isset( $this->options['widget_ops']['classname'] ) ? esc_attr( $this->options['widget_ops']['classname'] ) : '';
1429
-			$class .= " sdel-".$this->get_instance_hash();
1556
+        /**
1557
+         * Get arguments in super duper.
1558
+         *
1559
+         * @return array Get arguments.
1560
+         *@since 1.0.0
1561
+         *
1562
+         */
1563
+        public function get_arguments() {
1564
+            if ( empty( $this->arguments ) ) {
1565
+                $this->arguments = $this->set_arguments();
1566
+            }
1430 1567
 
1431
-			$class = apply_filters( 'wp_super_duper_div_classname', $class, $args, $this );
1432
-			$class = apply_filters( 'wp_super_duper_div_classname_' . $this->base_id, $class, $args, $this );
1568
+            $this->arguments = apply_filters( 'wp_super_duper_arguments', $this->arguments, $this->options, $this->instance );
1569
+            $this->arguments = $this->add_name_from_key( $this->arguments, true );
1433 1570
 
1434
-			$attrs = apply_filters( 'wp_super_duper_div_attrs', '', $args, $this );
1435
-			$attrs = apply_filters( 'wp_super_duper_div_attrs_' . $this->base_id, '', $args, $this );
1571
+            return $this->arguments;
1572
+        }
1436 1573
 
1437
-			$shortcode_args = array();
1438
-			$output         = '';
1439
-			$no_wrap        = isset( $this->options['no_wrap'] ) && $this->options['no_wrap'] ? true : false;
1440
-			if ( isset( $args['no_wrap'] ) && $args['no_wrap'] ) {
1441
-				$no_wrap = true;
1442
-			}
1443
-			$main_content = $this->output( $args, $shortcode_args, $content );
1444
-			if ( $main_content && ! $no_wrap ) {
1445
-				// wrap the shortcode in a div with the same class as the widget
1446
-				$output .= '<div class="' . $class . '" ' . $attrs . '>';
1447
-				if ( ! empty( $args['title'] ) ) {
1448
-					// if its a shortcode and there is a title try to grab the title wrappers
1449
-					$shortcode_args = array( 'before_title' => '', 'after_title' => '' );
1450
-					if ( empty( $instance ) ) {
1451
-						global $wp_registered_sidebars;
1452
-						if ( ! empty( $wp_registered_sidebars ) ) {
1453
-							foreach ( $wp_registered_sidebars as $sidebar ) {
1454
-								if ( ! empty( $sidebar['before_title'] ) ) {
1455
-									$shortcode_args['before_title'] = $sidebar['before_title'];
1456
-									$shortcode_args['after_title']  = $sidebar['after_title'];
1457
-									break;
1458
-								}
1459
-							}
1460
-						}
1461
-					}
1462
-					$output .= $this->output_title( $shortcode_args, $args );
1463
-				}
1464
-				$output .= $main_content;
1465
-				$output .= '</div>';
1466
-			} elseif ( $main_content && $no_wrap ) {
1467
-				$output .= $main_content;
1468
-			}
1574
+        /**
1575
+         * This is the main output class for all 3 items, widget, shortcode and block, it is extended in the calling class.
1576
+         *
1577
+         * @param array $args
1578
+         * @param array $widget_args
1579
+         * @param string $content
1580
+         */
1581
+        public function output( $args = array(), $widget_args = array(), $content = '' ) {
1469 1582
 
1470
-			// if preview show a placeholder if empty
1471
-			if ( $this->is_preview() && $output == '' ) {
1472
-				$output = $this->preview_placeholder_text( "{{" . $this->base_id . "}}" );
1473
-			}
1583
+        }
1474 1584
 
1475
-			return apply_filters( 'wp_super_duper_widget_output', $output, $args, $shortcode_args, $this );
1476
-		}
1585
+        /**
1586
+         * Add the dynamic block code inline when the wp-block in enqueued.
1587
+         */
1588
+        public function register_block() {
1589
+            wp_add_inline_script( 'wp-blocks', $this->block() );
1590
+            if ( class_exists( 'SiteOrigin_Panels' ) ) {
1591
+                wp_add_inline_script( 'wp-blocks', $this->siteorigin_js() );
1592
+            }
1593
+        }
1477 1594
 
1478
-		/**
1479
-		 * Placeholder text to show if output is empty and we are on a preview/builder page.
1480
-		 *
1481
-		 * @param string $name
1482
-		 *
1483
-		 * @return string
1484
-		 */
1485
-		public function preview_placeholder_text( $name = '' ) {
1486
-			return "<div style='background:#0185ba33;padding: 10px;border: 4px #ccc dashed;'>" . wp_sprintf( __( 'Placeholder for: %s', 'ayecode-connect' ), $name ) . "</div>";
1487
-		}
1595
+        /**
1596
+         * Check if we need to show advanced options.
1597
+         *
1598
+         * @return bool
1599
+         */
1600
+        public function block_show_advanced() {
1488 1601
 
1489
-		/**
1490
-		 * Sometimes booleans values can be turned to strings, so we fix that.
1491
-		 *
1492
-		 * @param $options
1493
-		 *
1494
-		 * @return mixed
1495
-		 */
1496
-		public function string_to_bool( $options ) {
1497
-			// convert bool strings to booleans
1498
-			foreach ( $options as $key => $val ) {
1499
-				if ( $val == 'false' ) {
1500
-					$options[ $key ] = false;
1501
-				} elseif ( $val == 'true' ) {
1502
-					$options[ $key ] = true;
1503
-				}
1504
-			}
1602
+            $show      = false;
1603
+            $arguments = $this->get_arguments();
1505 1604
 
1506
-			return $options;
1507
-		}
1605
+            if ( ! empty( $arguments ) ) {
1606
+                foreach ( $arguments as $argument ) {
1607
+                    if ( isset( $argument['advanced'] ) && $argument['advanced'] ) {
1608
+                        $show = true;
1609
+                        break; // no need to continue if we know we have it
1610
+                    }
1611
+                }
1612
+            }
1508 1613
 
1509
-		/**
1510
-		 * Get the argument values that are also filterable.
1511
-		 *
1512
-		 * @param $instance
1513
-		 *
1514
-		 * @return array
1515
-		 *@since 1.0.12 Don't set checkbox default value if the value is empty.
1516
-		 *
1517
-		 */
1518
-		public function argument_values( $instance ) {
1519
-			$argument_values = array();
1520
-
1521
-			// set widget instance
1522
-			$this->instance = $instance;
1523
-
1524
-			if ( empty( $this->arguments ) ) {
1525
-				$this->arguments = $this->get_arguments();
1526
-			}
1614
+            return $show;
1615
+        }
1527 1616
 
1528
-			if ( ! empty( $this->arguments ) ) {
1529
-				foreach ( $this->arguments as $key => $args ) {
1530
-					// set the input name from the key
1531
-					$args['name'] = $key;
1532
-					//
1533
-					$argument_values[ $key ] = isset( $instance[ $key ] ) ? $instance[ $key ] : '';
1534
-					if ( $args['type'] == 'checkbox' && $argument_values[ $key ] == '' ) {
1535
-						// don't set default for an empty checkbox
1536
-					} elseif ( $argument_values[ $key ] == '' && isset( $args['default'] ) ) {
1537
-						$argument_values[ $key ] = $args['default'];
1538
-					}
1539
-				}
1540
-			}
1617
+        /**
1618
+         * Get the url path to the current folder.
1619
+         *
1620
+         * @return string
1621
+         */
1622
+        public function get_url() {
1623
+            $url = $this->url;
1541 1624
 
1542
-			return $argument_values;
1543
-		}
1625
+            if ( ! $url ) {
1626
+                $content_dir = wp_normalize_path( untrailingslashit( WP_CONTENT_DIR ) );
1627
+                $content_url = untrailingslashit( WP_CONTENT_URL );
1544 1628
 
1545
-		/**
1546
-		 * Set arguments in super duper.
1547
-		 *
1548
-		 * @return array Set arguments.
1549
-		 *@since 1.0.0
1550
-		 *
1551
-		 */
1552
-		public function set_arguments() {
1553
-			return $this->arguments;
1554
-		}
1629
+                // Replace http:// to https://.
1630
+                if ( strpos( $content_url, 'http://' ) === 0 && strpos( plugins_url(), 'https://' ) === 0 ) {
1631
+                    $content_url = str_replace( 'http://', 'https://', $content_url );
1632
+                }
1555 1633
 
1556
-		/**
1557
-		 * Get arguments in super duper.
1558
-		 *
1559
-		 * @return array Get arguments.
1560
-		 *@since 1.0.0
1561
-		 *
1562
-		 */
1563
-		public function get_arguments() {
1564
-			if ( empty( $this->arguments ) ) {
1565
-				$this->arguments = $this->set_arguments();
1566
-			}
1634
+                // Check if we are inside a plugin
1635
+                $file_dir = str_replace( "/includes", "", wp_normalize_path( dirname( __FILE__ ) ) );
1636
+                $url = str_replace( $content_dir, $content_url, $file_dir );
1637
+                $url = trailingslashit( $url );
1638
+                $this->url = $url;
1639
+            }
1567 1640
 
1568
-			$this->arguments = apply_filters( 'wp_super_duper_arguments', $this->arguments, $this->options, $this->instance );
1569
-			$this->arguments = $this->add_name_from_key( $this->arguments, true );
1641
+            return $url;
1642
+        }
1570 1643
 
1571
-			return $this->arguments;
1572
-		}
1644
+        /**
1645
+         * Get the url path to the current folder.
1646
+         *
1647
+         * @return string
1648
+         */
1649
+        public function get_url_old() {
1573 1650
 
1574
-		/**
1575
-		 * This is the main output class for all 3 items, widget, shortcode and block, it is extended in the calling class.
1576
-		 *
1577
-		 * @param array $args
1578
-		 * @param array $widget_args
1579
-		 * @param string $content
1580
-		 */
1581
-		public function output( $args = array(), $widget_args = array(), $content = '' ) {
1651
+            $url = $this->url;
1582 1652
 
1583
-		}
1653
+            if ( ! $url ) {
1654
+                // check if we are inside a plugin
1655
+                $file_dir = str_replace( "/includes", "", dirname( __FILE__ ) );
1584 1656
 
1585
-		/**
1586
-		 * Add the dynamic block code inline when the wp-block in enqueued.
1587
-		 */
1588
-		public function register_block() {
1589
-			wp_add_inline_script( 'wp-blocks', $this->block() );
1590
-			if ( class_exists( 'SiteOrigin_Panels' ) ) {
1591
-				wp_add_inline_script( 'wp-blocks', $this->siteorigin_js() );
1592
-			}
1593
-		}
1657
+                $dir_parts = explode( "/wp-content/", $file_dir );
1658
+                $url_parts = explode( "/wp-content/", plugins_url() );
1594 1659
 
1595
-		/**
1596
-		 * Check if we need to show advanced options.
1597
-		 *
1598
-		 * @return bool
1599
-		 */
1600
-		public function block_show_advanced() {
1601
-
1602
-			$show      = false;
1603
-			$arguments = $this->get_arguments();
1604
-
1605
-			if ( ! empty( $arguments ) ) {
1606
-				foreach ( $arguments as $argument ) {
1607
-					if ( isset( $argument['advanced'] ) && $argument['advanced'] ) {
1608
-						$show = true;
1609
-						break; // no need to continue if we know we have it
1610
-					}
1611
-				}
1612
-			}
1660
+                if ( ! empty( $url_parts[0] ) && ! empty( $dir_parts[1] ) ) {
1661
+                    $url       = trailingslashit( $url_parts[0] . "/wp-content/" . $dir_parts[1] );
1662
+                    $this->url = $url;
1663
+                }
1664
+            }
1613 1665
 
1614
-			return $show;
1615
-		}
1616 1666
 
1617
-		/**
1618
-		 * Get the url path to the current folder.
1619
-		 *
1620
-		 * @return string
1621
-		 */
1622
-		public function get_url() {
1623
-			$url = $this->url;
1624
-
1625
-			if ( ! $url ) {
1626
-				$content_dir = wp_normalize_path( untrailingslashit( WP_CONTENT_DIR ) );
1627
-				$content_url = untrailingslashit( WP_CONTENT_URL );
1628
-
1629
-				// Replace http:// to https://.
1630
-				if ( strpos( $content_url, 'http://' ) === 0 && strpos( plugins_url(), 'https://' ) === 0 ) {
1631
-					$content_url = str_replace( 'http://', 'https://', $content_url );
1632
-				}
1667
+            return $url;
1668
+        }
1633 1669
 
1634
-				// Check if we are inside a plugin
1635
-				$file_dir = str_replace( "/includes", "", wp_normalize_path( dirname( __FILE__ ) ) );
1636
-				$url = str_replace( $content_dir, $content_url, $file_dir );
1637
-				$url = trailingslashit( $url );
1638
-				$this->url = $url;
1639
-			}
1670
+        /**
1671
+         * Generate the block icon.
1672
+         *
1673
+         * Enables the use of Font Awesome icons.
1674
+         *
1675
+         * @note xlink:href is actually deprecated but href is not supported by all so we use both.
1676
+         *
1677
+         * @param $icon
1678
+         *
1679
+         * @return string
1680
+         *@since 1.1.0
1681
+         */
1682
+        public function get_block_icon( $icon ) {
1683
+
1684
+            // check if we have a Font Awesome icon
1685
+            $fa_type = '';
1686
+            if ( substr( $icon, 0, 7 ) === "fas fa-" ) {
1687
+                $fa_type = 'solid';
1688
+            } elseif ( substr( $icon, 0, 7 ) === "far fa-" ) {
1689
+                $fa_type = 'regular';
1690
+            } elseif ( substr( $icon, 0, 7 ) === "fab fa-" ) {
1691
+                $fa_type = 'brands';
1692
+            } else {
1693
+                $icon = "'" . $icon . "'";
1694
+            }
1695
+
1696
+            // set the icon if we found one
1697
+            if ( $fa_type ) {
1698
+                $fa_icon = str_replace( array( "fas fa-", "far fa-", "fab fa-" ), "", $icon );
1699
+                $icon    = "el('svg',{width: 20, height: 20, viewBox: '0 0 20 20'},el('use', {'xlink:href': '" . $this->get_url() . "icons/" . $fa_type . ".svg#" . $fa_icon . "','href': '" . $this->get_url() . "icons/" . $fa_type . ".svg#" . $fa_icon . "'}))";
1700
+            }
1701
+
1702
+            return $icon;
1703
+        }
1640 1704
 
1641
-			return $url;
1642
-		}
1705
+        public function group_arguments( $arguments ) {
1706
+            if ( ! empty( $arguments ) ) {
1707
+                $temp_arguments = array();
1708
+                $general        = __( "General", 'ayecode-connect' );
1709
+                $add_sections   = false;
1710
+                foreach ( $arguments as $key => $args ) {
1711
+                    if ( isset( $args['group'] ) ) {
1712
+                        $temp_arguments[ $args['group'] ][ $key ] = $args;
1713
+                        $add_sections                             = true;
1714
+                    } else {
1715
+                        $temp_arguments[ $general ][ $key ] = $args;
1716
+                    }
1717
+                }
1643 1718
 
1644
-		/**
1645
-		 * Get the url path to the current folder.
1646
-		 *
1647
-		 * @return string
1648
-		 */
1649
-		public function get_url_old() {
1650
-
1651
-			$url = $this->url;
1652
-
1653
-			if ( ! $url ) {
1654
-				// check if we are inside a plugin
1655
-				$file_dir = str_replace( "/includes", "", dirname( __FILE__ ) );
1656
-
1657
-				$dir_parts = explode( "/wp-content/", $file_dir );
1658
-				$url_parts = explode( "/wp-content/", plugins_url() );
1659
-
1660
-				if ( ! empty( $url_parts[0] ) && ! empty( $dir_parts[1] ) ) {
1661
-					$url       = trailingslashit( $url_parts[0] . "/wp-content/" . $dir_parts[1] );
1662
-					$this->url = $url;
1663
-				}
1664
-			}
1665
-
1666
-
1667
-			return $url;
1668
-		}
1669
-
1670
-		/**
1671
-		 * Generate the block icon.
1672
-		 *
1673
-		 * Enables the use of Font Awesome icons.
1674
-		 *
1675
-		 * @note xlink:href is actually deprecated but href is not supported by all so we use both.
1676
-		 *
1677
-		 * @param $icon
1678
-		 *
1679
-		 * @return string
1680
-		 *@since 1.1.0
1681
-		 */
1682
-		public function get_block_icon( $icon ) {
1683
-
1684
-			// check if we have a Font Awesome icon
1685
-			$fa_type = '';
1686
-			if ( substr( $icon, 0, 7 ) === "fas fa-" ) {
1687
-				$fa_type = 'solid';
1688
-			} elseif ( substr( $icon, 0, 7 ) === "far fa-" ) {
1689
-				$fa_type = 'regular';
1690
-			} elseif ( substr( $icon, 0, 7 ) === "fab fa-" ) {
1691
-				$fa_type = 'brands';
1692
-			} else {
1693
-				$icon = "'" . $icon . "'";
1694
-			}
1695
-
1696
-			// set the icon if we found one
1697
-			if ( $fa_type ) {
1698
-				$fa_icon = str_replace( array( "fas fa-", "far fa-", "fab fa-" ), "", $icon );
1699
-				$icon    = "el('svg',{width: 20, height: 20, viewBox: '0 0 20 20'},el('use', {'xlink:href': '" . $this->get_url() . "icons/" . $fa_type . ".svg#" . $fa_icon . "','href': '" . $this->get_url() . "icons/" . $fa_type . ".svg#" . $fa_icon . "'}))";
1700
-			}
1701
-
1702
-			return $icon;
1703
-		}
1719
+                // only add sections if more than one
1720
+                if ( $add_sections ) {
1721
+                    $arguments = $temp_arguments;
1722
+                }
1723
+            }
1704 1724
 
1705
-		public function group_arguments( $arguments ) {
1706
-			if ( ! empty( $arguments ) ) {
1707
-				$temp_arguments = array();
1708
-				$general        = __( "General", 'ayecode-connect' );
1709
-				$add_sections   = false;
1710
-				foreach ( $arguments as $key => $args ) {
1711
-					if ( isset( $args['group'] ) ) {
1712
-						$temp_arguments[ $args['group'] ][ $key ] = $args;
1713
-						$add_sections                             = true;
1714
-					} else {
1715
-						$temp_arguments[ $general ][ $key ] = $args;
1716
-					}
1717
-				}
1725
+            return $arguments;
1726
+        }
1718 1727
 
1719
-				// only add sections if more than one
1720
-				if ( $add_sections ) {
1721
-					$arguments = $temp_arguments;
1722
-				}
1723
-			}
1728
+        /**
1729
+         * Parse used group tabs.
1730
+         *
1731
+         * @since 1.1.17
1732
+         */
1733
+        public function group_block_tabs( $tabs, $arguments ) {
1734
+            if ( ! empty( $tabs ) && ! empty( $arguments ) ) {
1735
+                $has_sections = false;
1736
+
1737
+                foreach ( $this->arguments as $key => $args ) {
1738
+                    if ( isset( $args['group'] ) ) {
1739
+                        $has_sections = true;
1740
+                        break;
1741
+                    }
1742
+                }
1724 1743
 
1725
-			return $arguments;
1726
-		}
1744
+                if ( ! $has_sections ) {
1745
+                    return $tabs;
1746
+                }
1727 1747
 
1728
-		/**
1729
-		 * Parse used group tabs.
1730
-		 *
1731
-		 * @since 1.1.17
1732
-		 */
1733
-		public function group_block_tabs( $tabs, $arguments ) {
1734
-			if ( ! empty( $tabs ) && ! empty( $arguments ) ) {
1735
-				$has_sections = false;
1736
-
1737
-				foreach ( $this->arguments as $key => $args ) {
1738
-					if ( isset( $args['group'] ) ) {
1739
-						$has_sections = true;
1740
-						break;
1741
-					}
1742
-				}
1748
+                $new_tabs = array();
1743 1749
 
1744
-				if ( ! $has_sections ) {
1745
-					return $tabs;
1746
-				}
1750
+                foreach ( $tabs as $tab_key => $tab ) {
1751
+                    $new_groups = array();
1747 1752
 
1748
-				$new_tabs = array();
1753
+                    if ( ! empty( $tab['groups'] ) && is_array( $tab['groups'] ) ) {
1754
+                        foreach ( $tab['groups'] as $group ) {
1755
+                            if ( isset( $arguments[ $group ] ) ) {
1756
+                                $new_groups[] = $group;
1757
+                            }
1758
+                        }
1759
+                    }
1749 1760
 
1750
-				foreach ( $tabs as $tab_key => $tab ) {
1751
-					$new_groups = array();
1761
+                    if ( ! empty( $new_groups ) ) {
1762
+                        $tab['groups'] = $new_groups;
1752 1763
 
1753
-					if ( ! empty( $tab['groups'] ) && is_array( $tab['groups'] ) ) {
1754
-						foreach ( $tab['groups'] as $group ) {
1755
-							if ( isset( $arguments[ $group ] ) ) {
1756
-								$new_groups[] = $group;
1757
-							}
1758
-						}
1759
-					}
1764
+                        $new_tabs[ $tab_key ] = $tab;
1765
+                    }
1766
+                }
1760 1767
 
1761
-					if ( ! empty( $new_groups ) ) {
1762
-						$tab['groups'] = $new_groups;
1768
+                $tabs = $new_tabs;
1769
+            }
1763 1770
 
1764
-						$new_tabs[ $tab_key ] = $tab;
1765
-					}
1766
-				}
1771
+            return $tabs;
1772
+        }
1767 1773
 
1768
-				$tabs = $new_tabs;
1769
-			}
1774
+        /**
1775
+         * Output the JS for building the dynamic Guntenberg block.
1776
+         *
1777
+         * @return mixed
1778
+         *@since 1.0.9 Save numbers as numbers and not strings.
1779
+         * @since 1.1.0 Font Awesome classes can be used for icons.
1780
+         * @since 1.0.4 Added block_wrap property which will set the block wrapping output element ie: div, span, p or empty for no wrap.
1781
+         */
1782
+        public function block() {
1783
+            global $sd_is_js_functions_loaded, $aui_bs5;
1770 1784
 
1771
-			return $tabs;
1772
-		}
1785
+            $show_advanced = $this->block_show_advanced();
1773 1786
 
1774
-		/**
1775
-		 * Output the JS for building the dynamic Guntenberg block.
1776
-		 *
1777
-		 * @return mixed
1778
-		 *@since 1.0.9 Save numbers as numbers and not strings.
1779
-		 * @since 1.1.0 Font Awesome classes can be used for icons.
1780
-		 * @since 1.0.4 Added block_wrap property which will set the block wrapping output element ie: div, span, p or empty for no wrap.
1781
-		 */
1782
-		public function block() {
1783
-			global $sd_is_js_functions_loaded, $aui_bs5;
1784
-
1785
-			$show_advanced = $this->block_show_advanced();
1786
-
1787
-			ob_start();
1788
-			?>
1787
+            ob_start();
1788
+            ?>
1789 1789
 			<script>
1790 1790
 			<?php
1791
-			if ( ! $sd_is_js_functions_loaded ) {
1792
-				$sd_is_js_functions_loaded = true;
1793
-			?>
1791
+            if ( ! $sd_is_js_functions_loaded ) {
1792
+                $sd_is_js_functions_loaded = true;
1793
+            ?>
1794 1794
 function sd_show_view_options($this){
1795 1795
 	if(jQuery($this).html().length){
1796 1796
 		jQuery($this).html('');
@@ -2244,8 +2244,8 @@  discard block
 block discarded – undo
2244 2244
 				$classes = [];
2245 2245
 
2246 2246
 				<?php
2247
-				if($aui_bs5){
2248
-					?>
2247
+                if($aui_bs5){
2248
+                    ?>
2249 2249
 				$aui_bs5 = true;
2250 2250
 				$p_ml = 'ms-';
2251 2251
 				$p_mr = 'me-';
@@ -2253,8 +2253,8 @@  discard block
 block discarded – undo
2253 2253
 				$p_pl = 'ps-';
2254 2254
 				$p_pr = 'pe-';
2255 2255
 					<?php
2256
-				}else{
2257
-						?>
2256
+                }else{
2257
+                        ?>
2258 2258
 				$aui_bs5 = false;
2259 2259
 				$p_ml = 'ml-';
2260 2260
 				$p_mr = 'mr-';
@@ -2262,8 +2262,8 @@  discard block
 block discarded – undo
2262 2262
 				$p_pl = 'pl-';
2263 2263
 				$p_pr = 'pr-';
2264 2264
 					<?php
2265
-				}
2266
-				?>
2265
+                }
2266
+                ?>
2267 2267
 
2268 2268
 				// margins
2269 2269
 				if ( $args['mt'] !== undefined && $args['mt'] !== '' ) { $classes.push( "mt-" + $args['mt'] );  $mt = $args['mt']; }else{$mt = null;}
@@ -2447,12 +2447,12 @@  discard block
 block discarded – undo
2447 2447
 			<?php
2448 2448
 
2449 2449
 
2450
-			}
2450
+            }
2451 2451
 
2452
-			if(method_exists($this,'block_global_js')){
2453
-					echo $this->block_global_js();
2454
-			}
2455
-			?>
2452
+            if(method_exists($this,'block_global_js')){
2453
+                    echo $this->block_global_js();
2454
+            }
2455
+            ?>
2456 2456
 
2457 2457
 jQuery(function() {
2458 2458
 
@@ -2505,13 +2505,13 @@  discard block
 block discarded – undo
2505 2505
 						icon: <?php echo $this->get_block_icon( $this->options['block-icon'] );?>,//'<?php echo isset( $this->options['block-icon'] ) ? esc_attr( $this->options['block-icon'] ) : 'shield-alt';?>', // Block icon from Dashicons → https://developer.wordpress.org/resource/dashicons/.
2506 2506
 						supports: {
2507 2507
 							<?php
2508
-							if(!isset($this->options['block-supports']['renaming'])){
2509
-								$this->options['block-supports']['renaming'] = false;
2510
-							}
2511
-							if ( isset( $this->options['block-supports'] ) ) {
2512
-								echo $this->array_to_attributes( $this->options['block-supports'] );
2513
-							}
2514
-							?>
2508
+                            if(!isset($this->options['block-supports']['renaming'])){
2509
+                                $this->options['block-supports']['renaming'] = false;
2510
+                            }
2511
+                            if ( isset( $this->options['block-supports'] ) ) {
2512
+                                echo $this->array_to_attributes( $this->options['block-supports'] );
2513
+                            }
2514
+                            ?>
2515 2515
 						},
2516 2516
 						__experimentalLabel( attributes, { context } ) {
2517 2517
 							var visibility_html = attributes && attributes.visibility_conditions ? ' &#128065;' : '';
@@ -2521,174 +2521,174 @@  discard block
 block discarded – undo
2521 2521
 						},
2522 2522
 						category: '<?php echo isset( $this->options['block-category'] ) ? esc_attr( $this->options['block-category'] ) : 'common';?>', // Block category — Group blocks together based on common traits E.g. common, formatting, layout widgets, embed.
2523 2523
 						<?php if ( isset( $this->options['block-keywords'] ) ) {
2524
-						echo "keywords : " . $this->options['block-keywords'] . ",";
2525
-						}
2526
-
2527
-
2528
-						// block hover preview.
2529
-						$example_args = array();
2530
-						if(!empty($this->arguments)){
2531
-							foreach($this->arguments as $key => $a_args){
2532
-								if(isset($a_args['example'])){
2533
-									$example_args[$key] = $a_args['example'];
2534
-								}
2535
-							}
2536
-						}
2537
-						$viewport_width = isset($this->options['example']['viewportWidth']) ? 'viewportWidth: '.absint($this->options['example']['viewportWidth']) : '';
2538
-						$example_inner_blocks = !empty($this->options['example']['innerBlocks']) && is_array($this->options['example']['innerBlocks']) ? 'innerBlocks: ' . wp_json_encode($this->options['example']['innerBlocks']) : '';
2539
-						if( isset( $this->options['example'] ) && $this->options['example'] === false ){
2540
-							// no preview if set to false
2541
-						}elseif( !empty( $example_args ) ){
2542
-							echo "example : {attributes:{".$this->array_to_attributes( $example_args )."},$viewport_width},";
2543
-						}elseif( !empty( $this->options['example'] ) ){
2544
-							unset($this->options['example']['viewportWidth']);
2545
-							unset($this->options['example']['innerBlocks']);
2546
-							$example_atts = $this->array_to_attributes( $this->options['example'] );
2547
-							$example_parts = array();
2548
-							if($example_atts){
2549
-								$example_parts[] = rtrim($example_atts,",");
2550
-							}
2551
-							if($viewport_width){
2552
-								$example_parts[] = $viewport_width;
2553
-							}
2554
-							if($example_inner_blocks){
2555
-								$example_parts[] = $example_inner_blocks;
2556
-							}
2557
-							if(!empty($example_parts)){
2558
-								echo "example : {".implode(',', $example_parts)."},";
2559
-							}
2560
-						}else{
2561
-							echo 'example : {viewportWidth: 500},';
2562
-						}
2563
-
2564
-
2565
-
2566
-						// limit to parent
2567
-						if( !empty( $this->options['parent'] ) ){
2568
-							echo "parent : " . wp_json_encode( $this->options['parent'] ) . ",";
2569
-						}
2570
-
2571
-						// limit allowed blocks
2572
-						if( !empty( $this->options['allowed-blocks'] ) ){
2573
-							echo "allowedBlocks : " . wp_json_encode( $this->options['allowed-blocks'] ) . ",";
2574
-						}
2575
-
2576
-						// maybe set no_wrap
2577
-						$no_wrap = isset( $this->options['no_wrap'] ) && $this->options['no_wrap'] ? true : false;
2578
-						if ( isset( $this->arguments['no_wrap'] ) && $this->arguments['no_wrap'] ) {
2579
-							$no_wrap = true;
2580
-						}
2581
-						if ( $no_wrap ) {
2582
-							$this->options['block-wrap'] = '';
2583
-						}
2584
-
2585
-						// maybe load the drag/drop functions.
2586
-						$img_drag_drop = false;
2587
-
2588
-						$show_alignment = false;
2589
-						// align feature
2590
-						/*echo "supports: {";
2524
+                        echo "keywords : " . $this->options['block-keywords'] . ",";
2525
+                        }
2526
+
2527
+
2528
+                        // block hover preview.
2529
+                        $example_args = array();
2530
+                        if(!empty($this->arguments)){
2531
+                            foreach($this->arguments as $key => $a_args){
2532
+                                if(isset($a_args['example'])){
2533
+                                    $example_args[$key] = $a_args['example'];
2534
+                                }
2535
+                            }
2536
+                        }
2537
+                        $viewport_width = isset($this->options['example']['viewportWidth']) ? 'viewportWidth: '.absint($this->options['example']['viewportWidth']) : '';
2538
+                        $example_inner_blocks = !empty($this->options['example']['innerBlocks']) && is_array($this->options['example']['innerBlocks']) ? 'innerBlocks: ' . wp_json_encode($this->options['example']['innerBlocks']) : '';
2539
+                        if( isset( $this->options['example'] ) && $this->options['example'] === false ){
2540
+                            // no preview if set to false
2541
+                        }elseif( !empty( $example_args ) ){
2542
+                            echo "example : {attributes:{".$this->array_to_attributes( $example_args )."},$viewport_width},";
2543
+                        }elseif( !empty( $this->options['example'] ) ){
2544
+                            unset($this->options['example']['viewportWidth']);
2545
+                            unset($this->options['example']['innerBlocks']);
2546
+                            $example_atts = $this->array_to_attributes( $this->options['example'] );
2547
+                            $example_parts = array();
2548
+                            if($example_atts){
2549
+                                $example_parts[] = rtrim($example_atts,",");
2550
+                            }
2551
+                            if($viewport_width){
2552
+                                $example_parts[] = $viewport_width;
2553
+                            }
2554
+                            if($example_inner_blocks){
2555
+                                $example_parts[] = $example_inner_blocks;
2556
+                            }
2557
+                            if(!empty($example_parts)){
2558
+                                echo "example : {".implode(',', $example_parts)."},";
2559
+                            }
2560
+                        }else{
2561
+                            echo 'example : {viewportWidth: 500},';
2562
+                        }
2563
+
2564
+
2565
+
2566
+                        // limit to parent
2567
+                        if( !empty( $this->options['parent'] ) ){
2568
+                            echo "parent : " . wp_json_encode( $this->options['parent'] ) . ",";
2569
+                        }
2570
+
2571
+                        // limit allowed blocks
2572
+                        if( !empty( $this->options['allowed-blocks'] ) ){
2573
+                            echo "allowedBlocks : " . wp_json_encode( $this->options['allowed-blocks'] ) . ",";
2574
+                        }
2575
+
2576
+                        // maybe set no_wrap
2577
+                        $no_wrap = isset( $this->options['no_wrap'] ) && $this->options['no_wrap'] ? true : false;
2578
+                        if ( isset( $this->arguments['no_wrap'] ) && $this->arguments['no_wrap'] ) {
2579
+                            $no_wrap = true;
2580
+                        }
2581
+                        if ( $no_wrap ) {
2582
+                            $this->options['block-wrap'] = '';
2583
+                        }
2584
+
2585
+                        // maybe load the drag/drop functions.
2586
+                        $img_drag_drop = false;
2587
+
2588
+                        $show_alignment = false;
2589
+                        // align feature
2590
+                        /*echo "supports: {";
2591 2591
 						echo "	align: true,";
2592 2592
 						echo "  html: false";
2593 2593
 						echo "},";*/
2594 2594
 
2595 2595
 
2596
-							echo "attributes : {";
2597
-
2598
-							if ( $show_advanced ) {
2599
-								echo "show_advanced: {";
2600
-								echo "	type: 'boolean',";
2601
-								echo "  default: false,";
2602
-								echo "},";
2603
-							}
2604
-
2605
-							// block wrap element
2606
-							if ( ! empty( $this->options['block-wrap'] ) ) { //@todo we should validate this?
2607
-								echo "block_wrap: {";
2608
-								echo "	type: 'string',";
2609
-								echo "  default: '" . esc_attr( $this->options['block-wrap'] ) . "',";
2610
-								echo "},";
2611
-							}
2612
-
2613
-
2614
-							if ( ! empty( $this->arguments ) ) {
2615
-
2616
-								foreach ( $this->arguments as $key => $args ) {
2617
-
2618
-									if( $args['type'] == 'image' ||  $args['type'] == 'images' ){
2619
-										$img_drag_drop = true;
2620
-									}
2621
-
2622
-									// set if we should show alignment
2623
-									if ( $key == 'alignment' ) {
2624
-										$show_alignment = true;
2625
-									}
2626
-
2627
-									$extra = '';
2628
-
2629
-									if ( $args['type'] == 'notice' ||  $args['type'] == 'tab' ) {
2630
-										continue;
2631
-									}
2632
-									elseif ( $args['type'] == 'checkbox' ) {
2633
-										$type    = 'boolean';
2634
-										$default = isset( $args['default'] ) && $args['default'] ? 'true' : 'false';
2635
-									} elseif ( $args['type'] == 'number' ) {
2636
-										$type    = 'number';
2637
-										$default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
2638
-									} elseif ( $args['type'] == 'select' && ! empty( $args['multiple'] ) ) {
2639
-										$type = 'array';
2640
-										if ( isset( $args['default'] ) && is_array( $args['default'] ) ) {
2641
-											$default = ! empty( $args['default'] ) ? "['" . implode( "','", $args['default'] ) . "']" : "[]";
2642
-										} else {
2643
-											$default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
2644
-										}
2645
-									} elseif ( $args['type'] == 'tagselect' ) {
2646
-										$type    = 'array';
2647
-										$default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
2648
-									} elseif ( $args['type'] == 'multiselect' ) {
2649
-										$type    = 'array';
2650
-										$default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
2651
-									} elseif ( $args['type'] == 'image_xy' ) {
2652
-										$type    = 'object';
2653
-										$default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
2654
-									} elseif ( $args['type'] == 'image' ) {
2655
-										$type    = 'string';
2656
-										$default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
2657
-
2658
-										// add a field for ID
2659
-	//                                    echo $key . "_id : {";
2660
-	//                                    echo "type : 'number',";
2661
-	//                                    echo "},";
2662
-	//                                    echo $key . "_xy : {";
2663
-	//                                    echo "type : 'object',";
2664
-	//                                    echo "},";
2665
-
2666
-									} else {
2667
-										$type    = !empty($args['hidden_type']) ? esc_attr($args['hidden_type']) : 'string';
2668
-										$default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
2669
-
2670
-									}
2671
-									echo $key . " : {";
2672
-									echo "type : '$type',";
2673
-									echo "default : $default,";
2674
-									echo "},";
2675
-								}
2676
-							}
2677
-
2678
-							echo "content : {type : 'string',default: 'Please select the attributes in the block settings'},";
2679
-							echo "sd_shortcode : {type : 'string',default: ''},";
2680
-
2681
-							if(!empty($this->options['nested-block']) || !empty($this->arguments['html']) ){
2682
-								echo "sd_shortcode_close : {type : 'string',default: ''},";
2683
-							}
2684
-
2685
-							echo "className: { type: 'string', default: '' },";
2686
-
2687
-							echo "},";
2688
-
2689
-
2690
-
2691
-						?>
2596
+                            echo "attributes : {";
2597
+
2598
+                            if ( $show_advanced ) {
2599
+                                echo "show_advanced: {";
2600
+                                echo "	type: 'boolean',";
2601
+                                echo "  default: false,";
2602
+                                echo "},";
2603
+                            }
2604
+
2605
+                            // block wrap element
2606
+                            if ( ! empty( $this->options['block-wrap'] ) ) { //@todo we should validate this?
2607
+                                echo "block_wrap: {";
2608
+                                echo "	type: 'string',";
2609
+                                echo "  default: '" . esc_attr( $this->options['block-wrap'] ) . "',";
2610
+                                echo "},";
2611
+                            }
2612
+
2613
+
2614
+                            if ( ! empty( $this->arguments ) ) {
2615
+
2616
+                                foreach ( $this->arguments as $key => $args ) {
2617
+
2618
+                                    if( $args['type'] == 'image' ||  $args['type'] == 'images' ){
2619
+                                        $img_drag_drop = true;
2620
+                                    }
2621
+
2622
+                                    // set if we should show alignment
2623
+                                    if ( $key == 'alignment' ) {
2624
+                                        $show_alignment = true;
2625
+                                    }
2626
+
2627
+                                    $extra = '';
2628
+
2629
+                                    if ( $args['type'] == 'notice' ||  $args['type'] == 'tab' ) {
2630
+                                        continue;
2631
+                                    }
2632
+                                    elseif ( $args['type'] == 'checkbox' ) {
2633
+                                        $type    = 'boolean';
2634
+                                        $default = isset( $args['default'] ) && $args['default'] ? 'true' : 'false';
2635
+                                    } elseif ( $args['type'] == 'number' ) {
2636
+                                        $type    = 'number';
2637
+                                        $default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
2638
+                                    } elseif ( $args['type'] == 'select' && ! empty( $args['multiple'] ) ) {
2639
+                                        $type = 'array';
2640
+                                        if ( isset( $args['default'] ) && is_array( $args['default'] ) ) {
2641
+                                            $default = ! empty( $args['default'] ) ? "['" . implode( "','", $args['default'] ) . "']" : "[]";
2642
+                                        } else {
2643
+                                            $default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
2644
+                                        }
2645
+                                    } elseif ( $args['type'] == 'tagselect' ) {
2646
+                                        $type    = 'array';
2647
+                                        $default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
2648
+                                    } elseif ( $args['type'] == 'multiselect' ) {
2649
+                                        $type    = 'array';
2650
+                                        $default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
2651
+                                    } elseif ( $args['type'] == 'image_xy' ) {
2652
+                                        $type    = 'object';
2653
+                                        $default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
2654
+                                    } elseif ( $args['type'] == 'image' ) {
2655
+                                        $type    = 'string';
2656
+                                        $default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
2657
+
2658
+                                        // add a field for ID
2659
+    //                                    echo $key . "_id : {";
2660
+    //                                    echo "type : 'number',";
2661
+    //                                    echo "},";
2662
+    //                                    echo $key . "_xy : {";
2663
+    //                                    echo "type : 'object',";
2664
+    //                                    echo "},";
2665
+
2666
+                                    } else {
2667
+                                        $type    = !empty($args['hidden_type']) ? esc_attr($args['hidden_type']) : 'string';
2668
+                                        $default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
2669
+
2670
+                                    }
2671
+                                    echo $key . " : {";
2672
+                                    echo "type : '$type',";
2673
+                                    echo "default : $default,";
2674
+                                    echo "},";
2675
+                                }
2676
+                            }
2677
+
2678
+                            echo "content : {type : 'string',default: 'Please select the attributes in the block settings'},";
2679
+                            echo "sd_shortcode : {type : 'string',default: ''},";
2680
+
2681
+                            if(!empty($this->options['nested-block']) || !empty($this->arguments['html']) ){
2682
+                                echo "sd_shortcode_close : {type : 'string',default: ''},";
2683
+                            }
2684
+
2685
+                            echo "className: { type: 'string', default: '' },";
2686
+
2687
+                            echo "},";
2688
+
2689
+
2690
+
2691
+                        ?>
2692 2692
 
2693 2693
 						// The "edit" property must be a valid function.
2694 2694
 						edit: function (props) {
@@ -2763,10 +2763,10 @@  discard block
 block discarded – undo
2763 2763
 							}
2764 2764
 
2765 2765
 							<?php
2766
-							if(!empty($this->options['block-edit-raw'])) {
2767
-								echo $this->options['block-edit-raw']; // strings have to be in single quotes, may cause issues
2768
-							}else{
2769
-							?>
2766
+                            if(!empty($this->options['block-edit-raw'])) {
2767
+                                echo $this->options['block-edit-raw']; // strings have to be in single quotes, may cause issues
2768
+                            }else{
2769
+                            ?>
2770 2770
 
2771 2771
 function hasSelectedInnerBlock(props) {
2772 2772
 	const select = wp.data.select('core/editor');
@@ -2788,9 +2788,9 @@  discard block
 block discarded – undo
2788 2788
 
2789 2789
 	var $value = '';
2790 2790
 	<?php
2791
-	// if we have a post_type and a category then link them
2792
-	if( isset($this->arguments['post_type']) && isset($this->arguments['category']) && !empty($this->arguments['category']['post_type_linked']) ){
2793
-	?>
2791
+    // if we have a post_type and a category then link them
2792
+    if( isset($this->arguments['post_type']) && isset($this->arguments['category']) && !empty($this->arguments['category']['post_type_linked']) ){
2793
+    ?>
2794 2794
 	if(typeof(prev_attributes[props.clientId]) != 'undefined' && selectedBlock && selectedBlock.clientId === props.clientId){
2795 2795
 		$pt = props.attributes.post_type;
2796 2796
 		if(post_type_rest_slugs.length){
@@ -2803,11 +2803,11 @@  discard block
 block discarded – undo
2803 2803
 			term_query_type = $pt;
2804 2804
 		}
2805 2805
 <?php
2806
-	$cat_path = '';
2807
-	if ( ! empty( $this->arguments['post_type']['onchange_rest']['path'] ) ) {
2808
-		$cat_path = esc_js( strip_tags( $this->arguments['post_type']['onchange_rest']['path'] ) );
2809
-		$cat_path = str_replace( array( '&quot;', '&#039;' ), array( '"', "'" ), $cat_path );
2810
-	}
2806
+    $cat_path = '';
2807
+    if ( ! empty( $this->arguments['post_type']['onchange_rest']['path'] ) ) {
2808
+        $cat_path = esc_js( strip_tags( $this->arguments['post_type']['onchange_rest']['path'] ) );
2809
+        $cat_path = str_replace( array( '&quot;', '&#039;' ), array( '"', "'" ), $cat_path );
2810
+    }
2811 2811
 ?>
2812 2812
 		/* taxonomies */
2813 2813
 		if($value && 'post_type' in prev_attributes[props.clientId] && 'category' in prev_attributes[props.clientId] && run){
@@ -2899,7 +2899,7 @@  discard block
 block discarded – undo
2899 2899
 <?php
2900 2900
 $current_screen = function_exists('get_current_screen') ? get_current_screen() : '';
2901 2901
 if(!empty($current_screen->base) && $current_screen->base==='widgets'){
2902
-	echo 'const { deviceType } = "";';
2902
+    echo 'const { deviceType } = "";';
2903 2903
 }else{
2904 2904
 ?>
2905 2905
 /** Get device type const. */
@@ -2963,8 +2963,8 @@  discard block
 block discarded – undo
2963 2963
 										'attributes': props.attributes,
2964 2964
 										'block_parent_name': parentBlocks.length ? parentBlocks[parentBlocks.length - 1].name : '',
2965 2965
 										'post_id': <?php global $post; if ( isset( $post->ID ) ) {
2966
-										echo $post->ID;
2967
-									}else{echo '0';}?>,
2966
+                                        echo $post->ID;
2967
+                                    }else{echo '0';}?>,
2968 2968
 										'_ajax_nonce': '<?php echo wp_create_nonce( 'super_duper_output_shortcode' );?>'
2969 2969
 									};
2970 2970
 
@@ -2978,20 +2978,20 @@  discard block
 block discarded – undo
2978 2978
 										}
2979 2979
 
2980 2980
 										 <?php
2981
-										if(!empty($this->options['nested-block'])){
2982
-											?>
2981
+                                        if(!empty($this->options['nested-block'])){
2982
+                                            ?>
2983 2983
 											// props.setAttributes({content: env});
2984 2984
 										is_fetching = false;
2985 2985
 										prev_attributes[props.clientId] = props.attributes;
2986 2986
 											 <?php
2987
-										}else{
2988
-										?>
2987
+                                        }else{
2988
+                                        ?>
2989 2989
 										props.setAttributes({content: env});
2990 2990
 										is_fetching = false;
2991 2991
 										prev_attributes[props.clientId] = props.attributes;
2992 2992
 										<?php
2993
-										}
2994
-										?>
2993
+                                        }
2994
+                                        ?>
2995 2995
 
2996 2996
 
2997 2997
 										// if AUI is active call the js init function
@@ -3010,31 +3010,31 @@  discard block
 block discarded – undo
3010 3010
 							}
3011 3011
 
3012 3012
 							<?php
3013
-							if(!empty($this->options['block-edit-js'])) {
3014
-								echo  $this->options['block-edit-js'] ; // strings have to be in single quotes, may cause issues
3015
-							}
3013
+                            if(!empty($this->options['block-edit-js'])) {
3014
+                                echo  $this->options['block-edit-js'] ; // strings have to be in single quotes, may cause issues
3015
+                            }
3016 3016
 
3017 3017
 
3018 3018
 
3019 3019
 
3020
-							if(empty($this->options['block-save-return'])){
3021
-							?>
3020
+                            if(empty($this->options['block-save-return'])){
3021
+                            ?>
3022 3022
 								///////////////////////////////////////////////////////////////////////
3023 3023
 
3024 3024
 									 // build the shortcode.
3025 3025
 								shortcode = "[<?php echo $this->options['base_id'];?>";
3026 3026
 								<?php
3027 3027
 
3028
-								if(! empty( $this->arguments )){
3028
+                                if(! empty( $this->arguments )){
3029 3029
 
3030
-								foreach($this->arguments as $key => $args){
3031
-								   // if($args['type']=='tabs'){continue;}
3030
+                                foreach($this->arguments as $key => $args){
3031
+                                    // if($args['type']=='tabs'){continue;}
3032 3032
 
3033
-								   // don't add metadata arguments
3034
-								   if (substr($key, 0, 9 ) === 'metadata_') {
3035
-									   continue;
3036
-								   }
3037
-								?>
3033
+                                    // don't add metadata arguments
3034
+                                    if (substr($key, 0, 9 ) === 'metadata_') {
3035
+                                        continue;
3036
+                                    }
3037
+                                ?>
3038 3038
 								if (props.attributes.hasOwnProperty("<?php echo esc_attr( $key );?>")) {
3039 3039
 									if ('<?php echo esc_attr( $key );?>' == 'html') {
3040 3040
 									} else if ('<?php echo esc_attr( $args['type'] );?>' == 'image_xy') {
@@ -3045,10 +3045,10 @@  discard block
 block discarded – undo
3045 3045
 									}
3046 3046
 								}
3047 3047
 								<?php
3048
-								}
3049
-								}
3048
+                                }
3049
+                                }
3050 3050
 
3051
-								?>
3051
+                                ?>
3052 3052
 								shortcode += "]";
3053 3053
 
3054 3054
 								if(shortcode){
@@ -3060,17 +3060,17 @@  discard block
 block discarded – undo
3060 3060
 
3061 3061
 
3062 3062
 									<?php
3063
-									if(!empty($this->options['nested-block']) || !empty($this->arguments['html']) ){
3064
-										echo "props.setAttributes({sd_shortcode_close: '[/".esc_attr( $this->options['base_id'] )."]'});";
3065
-									}
3066
-									?>
3063
+                                    if(!empty($this->options['nested-block']) || !empty($this->arguments['html']) ){
3064
+                                        echo "props.setAttributes({sd_shortcode_close: '[/".esc_attr( $this->options['base_id'] )."]'});";
3065
+                                    }
3066
+                                    ?>
3067 3067
 								}
3068 3068
 
3069 3069
 
3070 3070
 							///////////////////////////////////////////////////////////////////////
3071 3071
 							<?php
3072
-							} // end nested block check
3073
-							?>
3072
+                            } // end nested block check
3073
+                            ?>
3074 3074
 
3075 3075
 							return [
3076 3076
 
@@ -3094,10 +3094,10 @@  discard block
 block discarded – undo
3094 3094
 
3095 3095
 									<?php
3096 3096
 
3097
-									if(! empty( $this->arguments )){
3097
+                                    if(! empty( $this->arguments )){
3098 3098
 
3099
-									if ( $show_advanced ) {
3100
-									?>
3099
+                                    if ( $show_advanced ) {
3100
+                                    ?>
3101 3101
 									el('div', {
3102 3102
 											style: {'padding-left': '16px','padding-right': '16px'}
3103 3103
 										},
@@ -3114,119 +3114,119 @@  discard block
 block discarded – undo
3114 3114
 									)
3115 3115
 									,
3116 3116
 									<?php
3117
-									}
3118
-
3119
-									$arguments = $this->group_arguments( $this->arguments );
3120
-									$block_group_tabs = ! empty( $this->options['block_group_tabs'] ) ? $this->group_block_tabs( $this->options['block_group_tabs'], $arguments ) : array();
3121
-
3122
-									// Do we have sections?
3123
-									$has_sections = $arguments == $this->arguments ? false : true;
3124
-
3125
-									if($has_sections){
3126
-									$panel_count = 0;
3127
-									$open_tab = '';
3128
-
3129
-									$open_tab_groups = array();
3130
-									$used_tabs = array();
3131
-
3132
-									foreach ( $arguments as $key => $args ) {
3133
-										$close_tab = false;
3134
-										$close_tabs = false;
3135
-
3136
-										 if ( ! empty( $block_group_tabs ) ) {
3137
-											foreach ( $block_group_tabs as $tab_name => $tab_args ) {
3138
-												if ( in_array( $key, $tab_args['groups'] ) ) {
3139
-													$open_tab_groups[] = $key;
3140
-
3141
-													if ( $open_tab != $tab_name ) {
3142
-														$tab_args['tab']['tabs_open'] = $open_tab == '' ? true : false;
3143
-														$tab_args['tab']['open'] = true;
3144
-
3145
-														$this->block_tab_start( '', $tab_args );
3146
-														$open_tab = $tab_name;
3147
-														$used_tabs[] = $tab_name;
3148
-													}
3149
-
3150
-													if ( $open_tab_groups == $tab_args['groups'] ) {
3151
-														$close_tab = true;
3152
-														$open_tab_groups = array();
3153
-
3154
-														if ( $used_tabs == array_keys( $block_group_tabs ) ) {
3155
-															$close_tabs = true;
3156
-														}
3157
-													}
3158
-												}
3159
-											}
3160
-										}
3161
-										?>
3117
+                                    }
3118
+
3119
+                                    $arguments = $this->group_arguments( $this->arguments );
3120
+                                    $block_group_tabs = ! empty( $this->options['block_group_tabs'] ) ? $this->group_block_tabs( $this->options['block_group_tabs'], $arguments ) : array();
3121
+
3122
+                                    // Do we have sections?
3123
+                                    $has_sections = $arguments == $this->arguments ? false : true;
3124
+
3125
+                                    if($has_sections){
3126
+                                    $panel_count = 0;
3127
+                                    $open_tab = '';
3128
+
3129
+                                    $open_tab_groups = array();
3130
+                                    $used_tabs = array();
3131
+
3132
+                                    foreach ( $arguments as $key => $args ) {
3133
+                                        $close_tab = false;
3134
+                                        $close_tabs = false;
3135
+
3136
+                                            if ( ! empty( $block_group_tabs ) ) {
3137
+                                            foreach ( $block_group_tabs as $tab_name => $tab_args ) {
3138
+                                                if ( in_array( $key, $tab_args['groups'] ) ) {
3139
+                                                    $open_tab_groups[] = $key;
3140
+
3141
+                                                    if ( $open_tab != $tab_name ) {
3142
+                                                        $tab_args['tab']['tabs_open'] = $open_tab == '' ? true : false;
3143
+                                                        $tab_args['tab']['open'] = true;
3144
+
3145
+                                                        $this->block_tab_start( '', $tab_args );
3146
+                                                        $open_tab = $tab_name;
3147
+                                                        $used_tabs[] = $tab_name;
3148
+                                                    }
3149
+
3150
+                                                    if ( $open_tab_groups == $tab_args['groups'] ) {
3151
+                                                        $close_tab = true;
3152
+                                                        $open_tab_groups = array();
3153
+
3154
+                                                        if ( $used_tabs == array_keys( $block_group_tabs ) ) {
3155
+                                                            $close_tabs = true;
3156
+                                                        }
3157
+                                                    }
3158
+                                                }
3159
+                                            }
3160
+                                        }
3161
+                                        ?>
3162 3162
 										el(wp.components.PanelBody, {
3163 3163
 												title: '<?php esc_attr_e( $key ); ?>',
3164 3164
 												initialOpen: <?php if ( $panel_count ) {
3165
-												echo "false";
3166
-											} else {
3167
-												echo "true";
3168
-											}?>
3165
+                                                echo "false";
3166
+                                            } else {
3167
+                                                echo "true";
3168
+                                            }?>
3169 3169
 											},
3170 3170
 											<?php
3171
-											foreach ( $args as $k => $a ) {
3172
-												$this->block_tab_start( $k, $a );
3173
-												$this->block_row_start( $k, $a );
3174
-												$this->build_block_arguments( $k, $a );
3175
-												$this->block_row_end( $k, $a );
3176
-												$this->block_tab_end( $k, $a );
3177
-											}
3178
-											?>
3171
+                                            foreach ( $args as $k => $a ) {
3172
+                                                $this->block_tab_start( $k, $a );
3173
+                                                $this->block_row_start( $k, $a );
3174
+                                                $this->build_block_arguments( $k, $a );
3175
+                                                $this->block_row_end( $k, $a );
3176
+                                                $this->block_tab_end( $k, $a );
3177
+                                            }
3178
+                                            ?>
3179 3179
 										),
3180 3180
 										<?php
3181
-										$panel_count ++;
3181
+                                        $panel_count ++;
3182 3182
 
3183
-										if($close_tab || $close_tabs){
3184
-											$tab_args = array(
3185
-												'tab'	=> array(
3186
-													'tabs_close' => $close_tabs,
3187
-												'close' => true,
3188
-												)
3183
+                                        if($close_tab || $close_tabs){
3184
+                                            $tab_args = array(
3185
+                                                'tab'	=> array(
3186
+                                                    'tabs_close' => $close_tabs,
3187
+                                                'close' => true,
3188
+                                                )
3189 3189
 
3190
-											);
3191
-											$this->block_tab_end( '', $tab_args );
3190
+                                            );
3191
+                                            $this->block_tab_end( '', $tab_args );
3192 3192
 //											echo '###close'; print_r($tab_args);
3193
-											$panel_count = 0;
3194
-										}
3193
+                                            $panel_count = 0;
3194
+                                        }
3195 3195
 //
3196 3196
 
3197
-									}
3198
-									}else {
3199
-									?>
3197
+                                    }
3198
+                                    }else {
3199
+                                    ?>
3200 3200
 									el(wp.components.PanelBody, {
3201 3201
 											title: '<?php esc_attr_e( "Settings", 'ayecode-connect' ); ?>',
3202 3202
 											initialOpen: true
3203 3203
 										},
3204 3204
 										<?php
3205
-										foreach ( $this->arguments as $key => $args ) {
3206
-											$this->block_row_start( $key, $args );
3207
-											$this->build_block_arguments( $key, $args );
3208
-											$this->block_row_end( $key, $args );
3209
-										}
3210
-										?>
3205
+                                        foreach ( $this->arguments as $key => $args ) {
3206
+                                            $this->block_row_start( $key, $args );
3207
+                                            $this->build_block_arguments( $key, $args );
3208
+                                            $this->block_row_end( $key, $args );
3209
+                                        }
3210
+                                        ?>
3211 3211
 									),
3212 3212
 									<?php
3213
-									}
3213
+                                    }
3214 3214
 
3215
-									}
3216
-									?>
3215
+                                    }
3216
+                                    ?>
3217 3217
 
3218 3218
 								),
3219 3219
 
3220 3220
 								<?php
3221
-								// If the user sets block-output array then build it
3222
-								if ( ! empty( $this->options['block-output'] ) ) {
3223
-								$this->block_element( $this->options['block-output'] );
3224
-							}elseif(!empty($this->options['block-edit-return'])){
3225
-								   echo $this->options['block-edit-return'];
3226
-							}else{
3227
-								// if no block-output is set then we try and get the shortcode html output via ajax.
3228
-								$block_edit_wrap_tag = !empty($this->options['block_edit_wrap_tag']) ? esc_attr($this->options['block_edit_wrap_tag']) : 'div';
3229
-								?>
3221
+                                // If the user sets block-output array then build it
3222
+                                if ( ! empty( $this->options['block-output'] ) ) {
3223
+                                $this->block_element( $this->options['block-output'] );
3224
+                            }elseif(!empty($this->options['block-edit-return'])){
3225
+                                    echo $this->options['block-edit-return'];
3226
+                            }else{
3227
+                                // if no block-output is set then we try and get the shortcode html output via ajax.
3228
+                                $block_edit_wrap_tag = !empty($this->options['block_edit_wrap_tag']) ? esc_attr($this->options['block_edit_wrap_tag']) : 'div';
3229
+                                ?>
3230 3230
 								el('<?php echo esc_attr($block_edit_wrap_tag); ?>', wp.blockEditor.useBlockProps({
3231 3231
 									dangerouslySetInnerHTML: {__html: onChangeContent()},
3232 3232
 									className: props.className,
@@ -3234,13 +3234,13 @@  discard block
 block discarded – undo
3234 3234
 									style: {'minHeight': '30px'}
3235 3235
 								}))
3236 3236
 								<?php
3237
-								}
3238
-								?>
3237
+                                }
3238
+                                ?>
3239 3239
 							]; // end return
3240 3240
 
3241 3241
 							<?php
3242
-							} // end block-edit-raw else
3243
-							?>
3242
+                            } // end block-edit-raw else
3243
+                            ?>
3244 3244
 						},
3245 3245
 
3246 3246
 						// The "save" property must be specified and must be a valid function.
@@ -3254,16 +3254,16 @@  discard block
 block discarded – undo
3254 3254
 							$html = '';
3255 3255
 							<?php
3256 3256
 
3257
-							if(! empty( $this->arguments )){
3257
+                            if(! empty( $this->arguments )){
3258 3258
 
3259
-							foreach($this->arguments as $key => $args){
3260
-							   // if($args['type']=='tabs'){continue;}
3259
+                            foreach($this->arguments as $key => $args){
3260
+                                // if($args['type']=='tabs'){continue;}
3261 3261
 
3262
-							   // don't add metadata arguments
3263
-							   if (substr($key, 0, 9 ) === 'metadata_') {
3264
-								   continue;
3265
-							   }
3266
-							?>
3262
+                                // don't add metadata arguments
3263
+                                if (substr($key, 0, 9 ) === 'metadata_') {
3264
+                                    continue;
3265
+                                }
3266
+                            ?>
3267 3267
 							if (attr.hasOwnProperty("<?php echo esc_attr( $key );?>")) {
3268 3268
 								if ('<?php echo esc_attr( $key );?>' == 'html') {
3269 3269
 									$html = attr.<?php echo esc_attr( $key );?>;
@@ -3274,10 +3274,10 @@  discard block
 block discarded – undo
3274 3274
 								}
3275 3275
 							}
3276 3276
 							<?php
3277
-							}
3278
-							}
3277
+                            }
3278
+                            }
3279 3279
 
3280
-							?>
3280
+                            ?>
3281 3281
 							content += "]";
3282 3282
 							 content = '';
3283 3283
 
@@ -3287,7 +3287,7 @@  discard block
 block discarded – undo
3287 3287
 //                                $html = 'el( InnerBlocks.Content )';
3288 3288
 //                                <?php
3289 3289
 //                            }
3290
-							?>
3290
+                            ?>
3291 3291
 							// if has html element
3292 3292
 							if ($html) {
3293 3293
 								//content += $html + "[/<?php echo $this->options['base_id'];?>]";
@@ -3320,12 +3320,12 @@  discard block
 block discarded – undo
3320 3320
 //                                <x?php
3321 3321
 //							}else
3322 3322
 
3323
-							if(!empty($this->options['block-output'])){
3323
+                            if(!empty($this->options['block-output'])){
3324 3324
 //                               echo "return";
3325 3325
 //                               $this->block_element( $this->options['block-output'], true );
3326 3326
 //                               echo ";";
3327 3327
 
3328
-							   ?>
3328
+                                ?>
3329 3329
 							  return el(
3330 3330
 								   '',
3331 3331
 								   {},
@@ -3335,10 +3335,10 @@  discard block
 block discarded – undo
3335 3335
 							   );
3336 3336
 								<?php
3337 3337
 
3338
-							}elseif(!empty($this->options['block-save-return'])){
3339
-								   echo 'return ' . $this->options['block-save-return'];
3340
-							}elseif(!empty($this->options['nested-block'])){
3341
-								?>
3338
+                            }elseif(!empty($this->options['block-save-return'])){
3339
+                                    echo 'return ' . $this->options['block-save-return'];
3340
+                            }elseif(!empty($this->options['nested-block'])){
3341
+                                ?>
3342 3342
 							  return el(
3343 3343
 								   '',
3344 3344
 								   {},
@@ -3347,22 +3347,22 @@  discard block
 block discarded – undo
3347 3347
 								 //  el('', {dangerouslySetInnerHTML: {__html: "[/<?php echo $this->options['base_id'];?>]"}})
3348 3348
 							   );
3349 3349
 								<?php
3350
-							}elseif(!empty( $this->options['block-save-return'] ) ){
3351
-								echo "return ". $this->options['block-edit-return'].";";
3352
-							}elseif(isset( $this->options['block-wrap'] ) && $this->options['block-wrap'] == ''){
3353
-							?>
3350
+                            }elseif(!empty( $this->options['block-save-return'] ) ){
3351
+                                echo "return ". $this->options['block-edit-return'].";";
3352
+                            }elseif(isset( $this->options['block-wrap'] ) && $this->options['block-wrap'] == ''){
3353
+                            ?>
3354 3354
 							return content;
3355 3355
 							<?php
3356
-							}else{
3357
-							?>
3356
+                            }else{
3357
+                            ?>
3358 3358
 							var block_wrap = 'div';
3359 3359
 							if (attr.hasOwnProperty("block_wrap")) {
3360 3360
 								block_wrap = attr.block_wrap;
3361 3361
 							}
3362 3362
 							return el(block_wrap, wp.blockEditor.useBlockProps.save( {dangerouslySetInnerHTML: {__html: content}, className: align} ));
3363 3363
 							<?php
3364
-							}
3365
-							?>
3364
+                            }
3365
+                            ?>
3366 3366
 
3367 3367
 
3368 3368
 						}
@@ -3376,43 +3376,43 @@  discard block
 block discarded – undo
3376 3376
 				});
3377 3377
 			</script>
3378 3378
 			<?php
3379
-			$output = ob_get_clean();
3379
+            $output = ob_get_clean();
3380 3380
 
3381
-			/*
3381
+            /*
3382 3382
 			 * We only add the <script> tags for code highlighting, so we strip them from the output.
3383 3383
 			 */
3384 3384
 
3385
-			return str_replace( array(
3386
-				'<script>',
3387
-				'</script>'
3388
-			), '', $output );
3389
-		}
3385
+            return str_replace( array(
3386
+                '<script>',
3387
+                '</script>'
3388
+            ), '', $output );
3389
+        }
3390 3390
 
3391 3391
 
3392 3392
 
3393
-		public function block_row_start($key, $args){
3393
+        public function block_row_start($key, $args){
3394 3394
 
3395
-			// check for row
3396
-			if(!empty($args['row'])){
3395
+            // check for row
3396
+            if(!empty($args['row'])){
3397 3397
 
3398
-				if(!empty($args['row']['open'])){
3398
+                if(!empty($args['row']['open'])){
3399 3399
 
3400
-				// element require
3401
-				$element_require = ! empty( $args['element_require'] ) ? $this->block_props_replace( $args['element_require'], true ) . " && " : "";
3402
-				$device_type = ! empty( $args['device_type'] ) ? esc_attr($args['device_type']) : '';
3403
-				$device_type_require = ! empty( $args['device_type'] ) ? " deviceType == '" . esc_attr($device_type) . "' && " : '';
3404
-				$device_type_icon = '';
3405
-				if($device_type=='Desktop'){
3406
-					$device_type_icon = '<span class="dashicons dashicons-desktop" style="font-size: 18px;" onclick="sd_show_view_options(this);"></span>';
3407
-				}elseif($device_type=='Tablet'){
3408
-					$device_type_icon = '<span class="dashicons dashicons-tablet" style="font-size: 18px;" onclick="sd_show_view_options(this);"></span>';
3409
-				}elseif($device_type=='Mobile'){
3410
-					$device_type_icon = '<span class="dashicons dashicons-smartphone" style="font-size: 18px;" onclick="sd_show_view_options(this);"></span>';
3411
-				}
3412
-				echo $element_require;
3413
-				echo $device_type_require;
3400
+                // element require
3401
+                $element_require = ! empty( $args['element_require'] ) ? $this->block_props_replace( $args['element_require'], true ) . " && " : "";
3402
+                $device_type = ! empty( $args['device_type'] ) ? esc_attr($args['device_type']) : '';
3403
+                $device_type_require = ! empty( $args['device_type'] ) ? " deviceType == '" . esc_attr($device_type) . "' && " : '';
3404
+                $device_type_icon = '';
3405
+                if($device_type=='Desktop'){
3406
+                    $device_type_icon = '<span class="dashicons dashicons-desktop" style="font-size: 18px;" onclick="sd_show_view_options(this);"></span>';
3407
+                }elseif($device_type=='Tablet'){
3408
+                    $device_type_icon = '<span class="dashicons dashicons-tablet" style="font-size: 18px;" onclick="sd_show_view_options(this);"></span>';
3409
+                }elseif($device_type=='Mobile'){
3410
+                    $device_type_icon = '<span class="dashicons dashicons-smartphone" style="font-size: 18px;" onclick="sd_show_view_options(this);"></span>';
3411
+                }
3412
+                echo $element_require;
3413
+                echo $device_type_require;
3414 3414
 
3415
-					if(false){?><script><?php }?>
3415
+                    if(false){?><script><?php }?>
3416 3416
 						el('div', {
3417 3417
 								className: 'bsui components-base-control',
3418 3418
 							},
@@ -3425,8 +3425,8 @@  discard block
 block discarded – undo
3425 3425
 								<?php if($device_type_icon){ ?>
3426 3426
 									deviceType == '<?php echo $device_type;?>' && el('span',{dangerouslySetInnerHTML: {__html: '<?php echo $device_type_icon; ?>'},title: deviceType + ": Set preview mode to change",style: {right:"0",position:"absolute",color:"var(--wp-admin-theme-color)"}})
3427 3427
 								<?php
3428
-								}
3429
-								?>
3428
+                                }
3429
+                                ?>
3430 3430
 
3431 3431
 
3432 3432
 							),
@@ -3450,51 +3450,51 @@  discard block
 block discarded – undo
3450 3450
 									},
3451 3451
 
3452 3452
 					<?php
3453
-					if(false){?></script><?php }
3454
-				}elseif(!empty($args['row']['close'])){
3455
-					if(false){?><script><?php }?>
3453
+                    if(false){?></script><?php }
3454
+                }elseif(!empty($args['row']['close'])){
3455
+                    if(false){?><script><?php }?>
3456 3456
 						el(
3457 3457
 							'div',
3458 3458
 							{
3459 3459
 								className: 'col pl-0 ps-0',
3460 3460
 							},
3461 3461
 					<?php
3462
-					if(false){?></script><?php }
3463
-				}else{
3464
-					if(false){?><script><?php }?>
3462
+                    if(false){?></script><?php }
3463
+                }else{
3464
+                    if(false){?><script><?php }?>
3465 3465
 						el(
3466 3466
 							'div',
3467 3467
 							{
3468 3468
 								className: 'col pl-0 ps-0 pr-2 pe-2',
3469 3469
 							},
3470 3470
 					<?php
3471
-					if(false){?></script><?php }
3472
-				}
3471
+                    if(false){?></script><?php }
3472
+                }
3473 3473
 
3474
-			}
3474
+            }
3475 3475
 
3476
-		}
3476
+        }
3477 3477
 
3478
-		public function block_row_end($key, $args){
3478
+        public function block_row_end($key, $args){
3479 3479
 
3480
-			if(!empty($args['row'])){
3481
-				// maybe close
3482
-				if(!empty($args['row']['close'])){
3483
-					echo "))";
3484
-				}
3480
+            if(!empty($args['row'])){
3481
+                // maybe close
3482
+                if(!empty($args['row']['close'])){
3483
+                    echo "))";
3484
+                }
3485 3485
 
3486
-				echo "),";
3487
-			}
3488
-		}
3486
+                echo "),";
3487
+            }
3488
+        }
3489 3489
 
3490
-		public function block_tab_start($key, $args){
3490
+        public function block_tab_start($key, $args){
3491 3491
 
3492
-			// check for row
3493
-			if(!empty($args['tab'])){
3492
+            // check for row
3493
+            if(!empty($args['tab'])){
3494 3494
 
3495
-				if(!empty($args['tab']['tabs_open'])){
3495
+                if(!empty($args['tab']['tabs_open'])){
3496 3496
 
3497
-					if(false){?><script><?php }?>
3497
+                    if(false){?><script><?php }?>
3498 3498
 
3499 3499
 el('div',{className: 'bsui'},
3500 3500
 
@@ -3507,12 +3507,12 @@  discard block
 block discarded – undo
3507 3507
 										tabs: [
3508 3508
 
3509 3509
 					<?php
3510
-					if(false){?></script><?php }
3511
-				}
3510
+                    if(false){?></script><?php }
3511
+                }
3512 3512
 
3513
-				if(!empty($args['tab']['open'])){
3513
+                if(!empty($args['tab']['open'])){
3514 3514
 
3515
-					if(false){?><script><?php }?>
3515
+                    if(false){?><script><?php }?>
3516 3516
 							{
3517 3517
 												name: '<?php echo addslashes( esc_attr( $args['tab']['key']) ); ?>',
3518 3518
 												title: el('div', {dangerouslySetInnerHTML: {__html: '<?php echo addslashes( esc_attr( $args['tab']['title']) ); ?>'}}),
@@ -3521,93 +3521,93 @@  discard block
 block discarded – undo
3521 3521
 									className: 'components-base-control__help mb-0',
3522 3522
 									dangerouslySetInnerHTML: {__html:'<?php echo addslashes( $args['tab']['desc'] ); ?>'}
3523 3523
 								}),<?php }
3524
-					if(false){?></script><?php }
3525
-				}
3524
+                    if(false){?></script><?php }
3525
+                }
3526 3526
 
3527
-			}
3527
+            }
3528 3528
 
3529
-		}
3529
+        }
3530 3530
 
3531
-		public function block_tab_end($key, $args){
3531
+        public function block_tab_end($key, $args){
3532 3532
 
3533
-			if(!empty($args['tab'])){
3534
-				// maybe close
3535
-				if(!empty($args['tab']['close'])){
3536
-					echo ")}, /* tab close */";
3537
-				}
3533
+            if(!empty($args['tab'])){
3534
+                // maybe close
3535
+                if(!empty($args['tab']['close'])){
3536
+                    echo ")}, /* tab close */";
3537
+                }
3538 3538
 
3539
-				if(!empty($args['tab']['tabs_close'])){
3540
-					if(false){?><script><?php }?>
3539
+                if(!empty($args['tab']['tabs_close'])){
3540
+                    if(false){?><script><?php }?>
3541 3541
 						]}, ( tab ) => {
3542 3542
 								return tab.content;
3543 3543
 							}
3544 3544
 						)), /* tabs close */
3545 3545
 					<?php if(false){ ?></script><?php }
3546
-				}
3547
-			}
3548
-		}
3549
-
3550
-		public function build_block_arguments( $key, $args ) {
3551
-			$custom_attributes = ! empty( $args['custom_attributes'] ) ? $this->array_to_attributes( $args['custom_attributes'] ) : '';
3552
-			$options           = '';
3553
-			$extra             = '';
3554
-			$require           = '';
3555
-			$inside_elements   = '';
3556
-			$after_elements	   = '';
3557
-
3558
-			// `content` is a protected and special argument
3559
-			if ( $key == 'content' ) {
3560
-				return;
3561
-			}
3562
-
3563
-			$device_type = ! empty( $args['device_type'] ) ? esc_attr($args['device_type']) : '';
3564
-			$device_type_require = ! empty( $args['device_type'] ) ? " deviceType == '" . esc_attr($device_type) . "' && " : '';
3565
-			$device_type_icon = '';
3566
-			if($device_type=='Desktop'){
3567
-				$device_type_icon = '<span class="dashicons dashicons-desktop" style="font-size: 18px;" onclick="sd_show_view_options(this);"></span>';
3568
-			}elseif($device_type=='Tablet'){
3569
-				$device_type_icon = '<span class="dashicons dashicons-tablet" style="font-size: 18px;" onclick="sd_show_view_options(this);"></span>';
3570
-			}elseif($device_type=='Mobile'){
3571
-				$device_type_icon = '<span class="dashicons dashicons-smartphone" style="font-size: 18px;" onclick="sd_show_view_options(this);"></span>';
3572
-			}
3573
-
3574
-			// icon
3575
-			$icon = '';
3576
-			if( !empty( $args['icon'] ) ){
3577
-				$icon .= "el('div', {";
3578
-									$icon .= "dangerouslySetInnerHTML: {__html: '".self::get_widget_icon( esc_attr($args['icon']))."'},";
3579
-									$icon .= "className: 'text-center',";
3580
-									$icon .= "title: '".addslashes( $args['title'] )."',";
3581
-								$icon .= "}),";
3582
-
3583
-				// blank title as its added to the icon.
3584
-				$args['title'] = '';
3585
-			}
3586
-
3587
-			// require advanced
3588
-			$require_advanced = ! empty( $args['advanced'] ) ? "props.attributes.show_advanced && " : "";
3589
-
3590
-			// element require
3591
-			$element_require = ! empty( $args['element_require'] ) ? $this->block_props_replace( $args['element_require'], true ) . " && " : "";
3592
-
3546
+                }
3547
+            }
3548
+        }
3593 3549
 
3594
-			$onchange  = "props.setAttributes({ $key: $key } )";
3595
-			$onchangecomplete  = "";
3596
-			$value     = "props.attributes.$key";
3597
-			$text_type = array( 'text', 'password', 'number', 'email', 'tel', 'url', 'colorx','range' );
3598
-			if ( in_array( $args['type'], $text_type ) ) {
3599
-				$type = 'TextControl';
3600
-				// Save numbers as numbers and not strings
3601
-				if ( $args['type'] == 'number' ) {
3602
-					$onchange = "props.setAttributes({ $key: $key ? Number($key) : '' } )";
3603
-				}
3550
+        public function build_block_arguments( $key, $args ) {
3551
+            $custom_attributes = ! empty( $args['custom_attributes'] ) ? $this->array_to_attributes( $args['custom_attributes'] ) : '';
3552
+            $options           = '';
3553
+            $extra             = '';
3554
+            $require           = '';
3555
+            $inside_elements   = '';
3556
+            $after_elements	   = '';
3557
+
3558
+            // `content` is a protected and special argument
3559
+            if ( $key == 'content' ) {
3560
+                return;
3561
+            }
3562
+
3563
+            $device_type = ! empty( $args['device_type'] ) ? esc_attr($args['device_type']) : '';
3564
+            $device_type_require = ! empty( $args['device_type'] ) ? " deviceType == '" . esc_attr($device_type) . "' && " : '';
3565
+            $device_type_icon = '';
3566
+            if($device_type=='Desktop'){
3567
+                $device_type_icon = '<span class="dashicons dashicons-desktop" style="font-size: 18px;" onclick="sd_show_view_options(this);"></span>';
3568
+            }elseif($device_type=='Tablet'){
3569
+                $device_type_icon = '<span class="dashicons dashicons-tablet" style="font-size: 18px;" onclick="sd_show_view_options(this);"></span>';
3570
+            }elseif($device_type=='Mobile'){
3571
+                $device_type_icon = '<span class="dashicons dashicons-smartphone" style="font-size: 18px;" onclick="sd_show_view_options(this);"></span>';
3572
+            }
3573
+
3574
+            // icon
3575
+            $icon = '';
3576
+            if( !empty( $args['icon'] ) ){
3577
+                $icon .= "el('div', {";
3578
+                                    $icon .= "dangerouslySetInnerHTML: {__html: '".self::get_widget_icon( esc_attr($args['icon']))."'},";
3579
+                                    $icon .= "className: 'text-center',";
3580
+                                    $icon .= "title: '".addslashes( $args['title'] )."',";
3581
+                                $icon .= "}),";
3582
+
3583
+                // blank title as its added to the icon.
3584
+                $args['title'] = '';
3585
+            }
3586
+
3587
+            // require advanced
3588
+            $require_advanced = ! empty( $args['advanced'] ) ? "props.attributes.show_advanced && " : "";
3589
+
3590
+            // element require
3591
+            $element_require = ! empty( $args['element_require'] ) ? $this->block_props_replace( $args['element_require'], true ) . " && " : "";
3592
+
3593
+
3594
+            $onchange  = "props.setAttributes({ $key: $key } )";
3595
+            $onchangecomplete  = "";
3596
+            $value     = "props.attributes.$key";
3597
+            $text_type = array( 'text', 'password', 'number', 'email', 'tel', 'url', 'colorx','range' );
3598
+            if ( in_array( $args['type'], $text_type ) ) {
3599
+                $type = 'TextControl';
3600
+                // Save numbers as numbers and not strings
3601
+                if ( $args['type'] == 'number' ) {
3602
+                    $onchange = "props.setAttributes({ $key: $key ? Number($key) : '' } )";
3603
+                }
3604 3604
 
3605
-				if (substr($key, 0, 9 ) === 'metadata_') {
3606
-					$real_key = str_replace('metadata_','', $key );
3607
-					$onchange = "props.setAttributes({ metadata: { $real_key: $key } } )";
3608
-					$value     = "props.attributes.metadata && props.attributes.metadata.$real_key ? props.attributes.metadata.$real_key : ''";
3609
-				}
3610
-			}
3605
+                if (substr($key, 0, 9 ) === 'metadata_') {
3606
+                    $real_key = str_replace('metadata_','', $key );
3607
+                    $onchange = "props.setAttributes({ metadata: { $real_key: $key } } )";
3608
+                    $value     = "props.attributes.metadata && props.attributes.metadata.$real_key ? props.attributes.metadata.$real_key : ''";
3609
+                }
3610
+            }
3611 3611
 //			else if ( $args['type'] == 'popup' ) {
3612 3612
 //				$type = 'TextControl';
3613 3613
 //				$args['type'] == 'text';
@@ -3625,21 +3625,21 @@  discard block
 block discarded – undo
3625 3625
 //
3626 3626
 //				$value     = "props.attributes.$key ? props.attributes.$key : ''";
3627 3627
 //			}
3628
-			else if ( $args['type'] == 'styleid' ) {
3629
-				$type = 'TextControl';
3630
-				$args['type'] == 'text';
3631
-				// Save numbers as numbers and not strings
3632
-				$value     = "props.attributes.$key ? props.attributes.$key : ''";
3633
-			}else if ( $args['type'] == 'notice' ) {
3634
-
3635
-				$notice_message = !empty($args['desc']) ? addslashes($args['desc']) : '';
3636
-				$notice_status = !empty($args['status']) ? esc_attr($args['status']) : 'info';
3637
-
3638
-				$notice = "el('div',{className:'bsui'},el(wp.components.Notice, {status: '$notice_status',isDismissible: false,className: 'm-0 pr-0 pe-0 mb-3'},el('div',{dangerouslySetInnerHTML: {__html: '$notice_message'}}))),";
3639
-				echo $notice_message ? $element_require . $notice : '';
3640
-				return;
3641
-			}
3642
-			/*
3628
+            else if ( $args['type'] == 'styleid' ) {
3629
+                $type = 'TextControl';
3630
+                $args['type'] == 'text';
3631
+                // Save numbers as numbers and not strings
3632
+                $value     = "props.attributes.$key ? props.attributes.$key : ''";
3633
+            }else if ( $args['type'] == 'notice' ) {
3634
+
3635
+                $notice_message = !empty($args['desc']) ? addslashes($args['desc']) : '';
3636
+                $notice_status = !empty($args['status']) ? esc_attr($args['status']) : 'info';
3637
+
3638
+                $notice = "el('div',{className:'bsui'},el(wp.components.Notice, {status: '$notice_status',isDismissible: false,className: 'm-0 pr-0 pe-0 mb-3'},el('div',{dangerouslySetInnerHTML: {__html: '$notice_message'}}))),";
3639
+                echo $notice_message ? $element_require . $notice : '';
3640
+                return;
3641
+            }
3642
+            /*
3643 3643
 			 * https://www.wptricks.com/question/set-current-tab-on-a-gutenberg-tabpanel-component-from-outside-that-component/ es5 layout
3644 3644
 						elseif($args['type']=='tabs'){
3645 3645
 							?>
@@ -3692,22 +3692,22 @@  discard block
 block discarded – undo
3692 3692
 							return;
3693 3693
 						}
3694 3694
 */
3695
-			elseif ( $args['type'] == 'color' ) {
3696
-				$type = 'ColorPicker';
3697
-				$onchange = "";
3698
-				$extra = "color: $value,";
3699
-				if(!empty($args['disable_alpha'])){
3700
-					$extra .= "disableAlpha: true,";
3701
-				}
3702
-				$onchangecomplete = "onChangeComplete: function($key) {
3695
+            elseif ( $args['type'] == 'color' ) {
3696
+                $type = 'ColorPicker';
3697
+                $onchange = "";
3698
+                $extra = "color: $value,";
3699
+                if(!empty($args['disable_alpha'])){
3700
+                    $extra .= "disableAlpha: true,";
3701
+                }
3702
+                $onchangecomplete = "onChangeComplete: function($key) {
3703 3703
 				value =  $key.rgb.a && $key.rgb.a < 1 ? \"rgba(\"+$key.rgb.r+\",\"+$key.rgb.g+\",\"+$key.rgb.b+\",\"+$key.rgb.a+\")\" : $key.hex;
3704 3704
 						props.setAttributes({
3705 3705
 							$key: value
3706 3706
 						});
3707 3707
 					},";
3708
-			}elseif ( $args['type'] == 'gradient' ) {
3709
-				$type = 'GradientPicker';
3710
-				$extra .= "gradients: [{
3708
+            }elseif ( $args['type'] == 'gradient' ) {
3709
+                $type = 'GradientPicker';
3710
+                $extra .= "gradients: [{
3711 3711
 			name: 'Vivid cyan blue to vivid purple',
3712 3712
 			gradient:
3713 3713
 				'linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%)',
@@ -3744,10 +3744,10 @@  discard block
 block discarded – undo
3744 3744
 			slug: 'cool-to-warm-spectrum',
3745 3745
 		}],";
3746 3746
 
3747
-			}elseif ( $args['type'] == 'image' ) {
3747
+            }elseif ( $args['type'] == 'image' ) {
3748 3748
 //                print_r($args);
3749 3749
 
3750
-				$img_preview = isset($args['focalpoint']) && !$args['focalpoint'] ? " props.attributes.$key && el('img', { src: props.attributes.$key,style: {maxWidth:'100%',background: '#ccc'}})," : " ( props.attributes.$key ||  props.attributes.{$key}_use_featured ) && el(wp.components.FocalPointPicker,{
3750
+                $img_preview = isset($args['focalpoint']) && !$args['focalpoint'] ? " props.attributes.$key && el('img', { src: props.attributes.$key,style: {maxWidth:'100%',background: '#ccc'}})," : " ( props.attributes.$key ||  props.attributes.{$key}_use_featured ) && el(wp.components.FocalPointPicker,{
3751 3751
 							url:  props.attributes.{$key}_use_featured === true ? 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxzdmcgYmFzZVByb2ZpbGU9InRpbnkiIGhlaWdodD0iNDAwIiB2ZXJzaW9uPSIxLjIiIHdpZHRoPSI0MDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6ZXY9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLWV2ZW50cyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxkZWZzIC8+PHJlY3QgZmlsbD0iI2QzZDNkMyIgaGVpZ2h0PSI0MDAiIHdpZHRoPSI0MDAiIHg9IjAiIHk9IjAiIC8+PGxpbmUgc3Ryb2tlPSJ3aGl0ZSIgc3Ryb2tlLXdpZHRoPSIxMCIgeDE9IjAiIHgyPSI0MDAiIHkxPSIwIiB5Mj0iNDAwIiAvPjxsaW5lIHN0cm9rZT0id2hpdGUiIHN0cm9rZS13aWR0aD0iMTAiIHgxPSIwIiB4Mj0iNDAwIiB5MT0iNDAwIiB5Mj0iMCIgLz48cmVjdCBmaWxsPSIjZDNkM2QzIiBoZWlnaHQ9IjUwIiB3aWR0aD0iMjE4LjAiIHg9IjkxLjAiIHk9IjE3NS4wIiAvPjx0ZXh0IGZpbGw9IndoaXRlIiBmb250LXNpemU9IjMwIiBmb250LXdlaWdodD0iYm9sZCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iMjAwLjAiIHk9IjIwNy41Ij5QTEFDRUhPTERFUjwvdGV4dD48L3N2Zz4='  : props.attributes.$key,
3752 3752
 							value: props.attributes.{$key}_xy.x !== undefined && props.attributes.{$key}_xy.x >= 0 ? props.attributes.{$key}_xy  : {x: 0.5,y: 0.5,},
3753 3753
 //                            value: props.attributes.{$key}_xy,
@@ -3768,16 +3768,16 @@  discard block
 block discarded – undo
3768 3768
 						}), ";
3769 3769
 
3770 3770
 
3771
-				$value = '""';
3772
-				$type = 'MediaUpload';
3773
-				$extra .= "onSelect: function(media){
3771
+                $value = '""';
3772
+                $type = 'MediaUpload';
3773
+                $extra .= "onSelect: function(media){
3774 3774
 					  return props.setAttributes({
3775 3775
 						  $key: media.url,
3776 3776
 						  {$key}_id: media.id
3777 3777
 						});
3778 3778
 					  },";
3779
-				   $extra .= "type: 'image',";
3780
-				   $extra .= "render: function (obj) {
3779
+                    $extra .= "type: 'image',";
3780
+                    $extra .= "render: function (obj) {
3781 3781
 						return el( 'div',{},
3782 3782
 						( !props.attributes.$key && !props.attributes.{$key}_use_featured ) && el( wp.components.Button, {
3783 3783
 						  className: 'components-button components-circular-option-picker__clear is-primary is-smallx',
@@ -3803,11 +3803,11 @@  discard block
 block discarded – undo
3803 3803
 
3804 3804
 
3805 3805
 					  }";
3806
-				$onchange = "";
3806
+                $onchange = "";
3807 3807
 
3808
-				//$inside_elements = ",el('div',{},'file upload')";
3809
-			} else if ( $args['type'] == 'images' ) {
3810
-				$img_preview = "props.attributes.$key && (function() {
3808
+                //$inside_elements = ",el('div',{},'file upload')";
3809
+            } else if ( $args['type'] == 'images' ) {
3810
+                $img_preview = "props.attributes.$key && (function() {
3811 3811
 	let uploads = JSON.parse('['+props.attributes.$key+']');
3812 3812
 	let images = [];
3813 3813
 	uploads.map((upload, index) => (
@@ -3834,9 +3834,9 @@  discard block
 block discarded – undo
3834 3834
 })(),";
3835 3835
 
3836 3836
 
3837
-				$value = '""';
3838
-				$type = 'MediaUpload';
3839
-				$extra .= "onSelect: function(media){
3837
+                $value = '""';
3838
+                $type = 'MediaUpload';
3839
+                $extra .= "onSelect: function(media){
3840 3840
 	let slim_images = props.attributes.$key ? JSON.parse('['+props.attributes.$key+']') : [];
3841 3841
 	if(media.length){
3842 3842
 		for (var i=0; i < media.length; i++) {
@@ -3849,9 +3849,9 @@  discard block
 block discarded – undo
3849 3849
 	}
3850 3850
 	return props.setAttributes({ $key: slimImagesV});
3851 3851
 },";
3852
-				$extra .= "type: 'image',";
3853
-				$extra .= "multiple: true,";
3854
-				$extra .= "render: function (obj) {
3852
+                $extra .= "type: 'image',";
3853
+                $extra .= "multiple: true,";
3854
+                $extra .= "render: function (obj) {
3855 3855
 	/* Init the sort */
3856 3856
 	enableDragSort('sd-sortable');
3857 3857
 	return el( 'div',{},
@@ -3878,40 +3878,40 @@  discard block
 block discarded – undo
3878 3878
 		)
3879 3879
 	)
3880 3880
 }";
3881
-				$onchange = "";
3882
-
3883
-				//$inside_elements = ",el('div',{},'file upload')";
3884
-			}
3885
-			elseif ( $args['type'] == 'checkbox' ) {
3886
-				$type = 'CheckboxControl';
3887
-				$extra .= "checked: props.attributes.$key,";
3888
-				$onchange = "props.setAttributes({ $key: ! props.attributes.$key } )";
3889
-			} elseif ( $args['type'] == 'textarea' ) {
3890
-				$type = 'TextareaControl';
3891
-
3892
-			} elseif ( $args['type'] == 'select' || $args['type'] == 'multiselect' ) {
3893
-				$type = 'SelectControl';
3894
-
3895
-				if($args['name'] == 'category' && !empty($args['post_type_linked'])){
3896
-					$options .= "options: taxonomies_".str_replace("-","_", $this->id).",";
3897
-				}elseif($args['name'] == 'sort_by' && !empty($args['post_type_linked'])){
3898
-					$options .= "options: sort_by_".str_replace("-","_", $this->id).",";
3899
-				}else {
3900
-
3901
-					if ( ! empty( $args['options'] ) ) {
3902
-						$options .= "options: [";
3903
-						foreach ( $args['options'] as $option_val => $option_label ) {
3904
-							$options .= "{ value: '" . esc_attr( $option_val ) . "', label: '" . esc_js( addslashes( $option_label ) ) . "' },";
3905
-						}
3906
-						$options .= "],";
3907
-					}
3908
-				}
3909
-				if ( isset( $args['multiple'] ) && $args['multiple'] ) { //@todo multiselect does not work at the moment: https://github.com/WordPress/gutenberg/issues/5550
3910
-					$extra .= ' multiple:true,style:{height:"auto",paddingRight:"8px","overflow-y":"auto"}, ';
3911
-				}
3881
+                $onchange = "";
3882
+
3883
+                //$inside_elements = ",el('div',{},'file upload')";
3884
+            }
3885
+            elseif ( $args['type'] == 'checkbox' ) {
3886
+                $type = 'CheckboxControl';
3887
+                $extra .= "checked: props.attributes.$key,";
3888
+                $onchange = "props.setAttributes({ $key: ! props.attributes.$key } )";
3889
+            } elseif ( $args['type'] == 'textarea' ) {
3890
+                $type = 'TextareaControl';
3891
+
3892
+            } elseif ( $args['type'] == 'select' || $args['type'] == 'multiselect' ) {
3893
+                $type = 'SelectControl';
3894
+
3895
+                if($args['name'] == 'category' && !empty($args['post_type_linked'])){
3896
+                    $options .= "options: taxonomies_".str_replace("-","_", $this->id).",";
3897
+                }elseif($args['name'] == 'sort_by' && !empty($args['post_type_linked'])){
3898
+                    $options .= "options: sort_by_".str_replace("-","_", $this->id).",";
3899
+                }else {
3900
+
3901
+                    if ( ! empty( $args['options'] ) ) {
3902
+                        $options .= "options: [";
3903
+                        foreach ( $args['options'] as $option_val => $option_label ) {
3904
+                            $options .= "{ value: '" . esc_attr( $option_val ) . "', label: '" . esc_js( addslashes( $option_label ) ) . "' },";
3905
+                        }
3906
+                        $options .= "],";
3907
+                    }
3908
+                }
3909
+                if ( isset( $args['multiple'] ) && $args['multiple'] ) { //@todo multiselect does not work at the moment: https://github.com/WordPress/gutenberg/issues/5550
3910
+                    $extra .= ' multiple:true,style:{height:"auto",paddingRight:"8px","overflow-y":"auto"}, ';
3911
+                }
3912 3912
 
3913
-				if($args['type'] == 'multiselect' ||  ( isset( $args['multiple'] ) && $args['multiple'] ) ){
3914
-					$after_elements	 .= "props.attributes.$key && el( wp.components.Button, {
3913
+                if($args['type'] == 'multiselect' ||  ( isset( $args['multiple'] ) && $args['multiple'] ) ){
3914
+                    $after_elements	 .= "props.attributes.$key && el( wp.components.Button, {
3915 3915
 									  className: 'components-button components-circular-option-picker__clear is-secondary is-small',
3916 3916
 									  style: {margin:'-8px 0 8px 0',display: 'block'},
3917 3917
 									  onClick: function(){
@@ -3922,8 +3922,8 @@  discard block
 block discarded – undo
3922 3922
 									},
3923 3923
 									'Clear'
3924 3924
 							),";
3925
-				}
3926
-			} elseif ( $args['type'] == 'tagselect' ) {
3925
+                }
3926
+            } elseif ( $args['type'] == 'tagselect' ) {
3927 3927
 //				$type = 'FormTokenField';
3928 3928
 //
3929 3929
 //				if ( ! empty( $args['options'] ) ) {
@@ -3958,20 +3958,20 @@  discard block
 block discarded – undo
3958 3958
 //				$value     = "[]";
3959 3959
 //				$extra .= ' __experimentalExpandOnFocus: true,';
3960 3960
 
3961
-			} else if ( $args['type'] == 'alignment' ) {
3962
-				$type = 'AlignmentToolbar'; // @todo this does not seem to work but cant find a example
3963
-			} else if ( $args['type'] == 'margins' ) {
3964
-
3965
-			} else if ( $args['type'] == 'visibility_conditions' && ( function_exists( 'wp_is_block_theme' ) && wp_is_block_theme() ) ) {
3966
-				$type = 'TextControl';
3967
-				$value = "(props.attributes.$key ? props.attributes.$key : '')";
3968
-				$args['type'] = 'text';
3969
-				$options .= 'disabled:true,';
3970
-				$bsvc_title = esc_attr( addslashes( $args['title'] ) );
3971
-				$bsvc_body = $this->block_visibility_fields( $args );
3972
-				// @TODO reset button
3973
-				$bsvc_footer = '<button type="button" class="btn btn-danger d-none">' . __( 'Reset', 'ayecode-connect' ) . '</button><button type="button" class="btn btn-secondary bs-vc-close text-white" data-bs-dismiss="modal">' . __( 'Close', 'ayecode-connect' ) . '</button><button type="button" class="btn btn-primary bs-vc-save">' . __( 'Save Rules', 'ayecode-connect' ) . '</button>';
3974
-				$after_elements .= "el('div', {className: 'components-base-control bs-vc-button-wrap'}, el(wp.components.Button, {
3961
+            } else if ( $args['type'] == 'alignment' ) {
3962
+                $type = 'AlignmentToolbar'; // @todo this does not seem to work but cant find a example
3963
+            } else if ( $args['type'] == 'margins' ) {
3964
+
3965
+            } else if ( $args['type'] == 'visibility_conditions' && ( function_exists( 'wp_is_block_theme' ) && wp_is_block_theme() ) ) {
3966
+                $type = 'TextControl';
3967
+                $value = "(props.attributes.$key ? props.attributes.$key : '')";
3968
+                $args['type'] = 'text';
3969
+                $options .= 'disabled:true,';
3970
+                $bsvc_title = esc_attr( addslashes( $args['title'] ) );
3971
+                $bsvc_body = $this->block_visibility_fields( $args );
3972
+                // @TODO reset button
3973
+                $bsvc_footer = '<button type="button" class="btn btn-danger d-none">' . __( 'Reset', 'ayecode-connect' ) . '</button><button type="button" class="btn btn-secondary bs-vc-close text-white" data-bs-dismiss="modal">' . __( 'Close', 'ayecode-connect' ) . '</button><button type="button" class="btn btn-primary bs-vc-save">' . __( 'Save Rules', 'ayecode-connect' ) . '</button>';
3974
+                $after_elements .= "el('div', {className: 'components-base-control bs-vc-button-wrap'}, el(wp.components.Button, {
3975 3975
 						className: 'components-button components-circular-option-picker__clear is-primary is-smallx',
3976 3976
 						onClick: function() {
3977 3977
 							var sValue = props.attributes." . $key . ";
@@ -3997,39 +3997,39 @@  discard block
 block discarded – undo
3997 3997
 					},
3998 3998
 					'" . addslashes( ! empty( $args['button_title'] ) ? $args['button_title'] : $args['title'] ) . "'
3999 3999
 				) ),";
4000
-			} else {
4001
-				return;// if we have not implemented the control then don't break the JS.
4002
-			}
4003
-
4004
-			// color input does not show the labels so we add them
4005
-			if($args['type']=='color'){
4006
-				// add show only if advanced
4007
-				echo $require_advanced;
4008
-				// add setting require if defined
4009
-				echo $element_require;
4010
-				echo "el('div', {style: {'marginBottom': '8px'}}, '".addslashes( $args['title'] )."'),";
4011
-			}
4012
-
4013
-			// add show only if advanced
4014
-			echo $require_advanced;
4015
-			// add setting require if defined
4016
-			echo $element_require;
4017
-			echo $device_type_require;
4018
-
4019
-			// icon
4020
-			echo $icon;
4021
-			?>
4000
+            } else {
4001
+                return;// if we have not implemented the control then don't break the JS.
4002
+            }
4003
+
4004
+            // color input does not show the labels so we add them
4005
+            if($args['type']=='color'){
4006
+                // add show only if advanced
4007
+                echo $require_advanced;
4008
+                // add setting require if defined
4009
+                echo $element_require;
4010
+                echo "el('div', {style: {'marginBottom': '8px'}}, '".addslashes( $args['title'] )."'),";
4011
+            }
4012
+
4013
+            // add show only if advanced
4014
+            echo $require_advanced;
4015
+            // add setting require if defined
4016
+            echo $element_require;
4017
+            echo $device_type_require;
4018
+
4019
+            // icon
4020
+            echo $icon;
4021
+            ?>
4022 4022
 			el( <?php echo $args['type'] == 'image' || $args['type'] == 'images' ? $type  : "wp.components.".$type; ?>, {
4023 4023
 			label: <?php if ( empty( $args['title'] ) ) { echo "''"; } else if ( empty( $args['row'] ) && ! empty( $args['device_type'] ) ) { ?>el('label',{className:'components-base-control__label',style:{width:"100%"}},el('span',{dangerouslySetInnerHTML: {__html: '<?php echo addslashes( $args['title'] ) ?>'}}),<?php if ( $device_type_icon ) { ?>deviceType == '<?php echo $device_type;?>' && el('span',{dangerouslySetInnerHTML: {__html: '<?php echo $device_type_icon; ?>'},title: deviceType + ": Set preview mode to change",style: {right:"0",position:"absolute",color:"var(--wp-admin-theme-color)"}})<?php } ?>)<?php
4024
-			} else { ?>'<?php echo addslashes( trim( esc_html( $args['title'] ) ) ); ?>'<?php } ?>,
4024
+            } else { ?>'<?php echo addslashes( trim( esc_html( $args['title'] ) ) ); ?>'<?php } ?>,
4025 4025
 			help: <?php echo ( isset( $args['desc'] ) ? "el('span', {dangerouslySetInnerHTML: {__html: '" . trim( wp_kses_post( addslashes( $args['desc'] ) ) ) . "'}})" : "''" ); ?>,
4026 4026
 			value: <?php echo $value; ?>,
4027 4027
 			<?php if ( $type == 'TextControl' && $args['type'] != 'text' ) {
4028
-				echo "type: '" . addslashes( $args['type'] ) . "',";
4029
-			} ?>
4028
+                echo "type: '" . addslashes( $args['type'] ) . "',";
4029
+            } ?>
4030 4030
 			<?php if ( ! empty( $args['placeholder'] ) ) {
4031
-				echo "placeholder: '" . esc_js( addslashes( trim( esc_html( $args['placeholder'] ) ) ) ) . "',";
4032
-			} ?>
4031
+                echo "placeholder: '" . esc_js( addslashes( trim( esc_html( $args['placeholder'] ) ) ) ) . "',";
4032
+            } ?>
4033 4033
 			<?php echo $options; ?>
4034 4034
 			<?php echo $extra; ?>
4035 4035
 			<?php echo $custom_attributes; ?>
@@ -4041,1266 +4041,1266 @@  discard block
 block discarded – undo
4041 4041
 			<?php } ?>
4042 4042
 		} <?php echo $inside_elements; ?> ),
4043 4043
 			<?php
4044
-			echo $after_elements;
4045
-		}
4044
+            echo $after_elements;
4045
+        }
4046 4046
 
4047
-		/**
4048
-		 * Convert an array of attributes to block string.
4049
-		 *
4050
-		 * @param $custom_attributes
4051
-		 *
4052
-		 * @return string
4053
-		 *@todo there is prob a faster way to do this, also we could add some validation here.
4054
-		 *
4055
-		 */
4056
-		public function array_to_attributes( $custom_attributes, $html = false ) {
4057
-			$attributes = '';
4058
-			if ( ! empty( $custom_attributes ) ) {
4059
-
4060
-				foreach ( $custom_attributes as $key => $val ) {
4061
-					if(is_array($val)){
4062
-						$attributes .= $key.': {'.$this->array_to_attributes( $val, $html ).'},';
4063
-					}else{
4064
-						$attributes .= $html ?  " $key='$val' " : "'$key': '$val',";
4065
-					}
4066
-				}
4047
+        /**
4048
+         * Convert an array of attributes to block string.
4049
+         *
4050
+         * @param $custom_attributes
4051
+         *
4052
+         * @return string
4053
+         *@todo there is prob a faster way to do this, also we could add some validation here.
4054
+         *
4055
+         */
4056
+        public function array_to_attributes( $custom_attributes, $html = false ) {
4057
+            $attributes = '';
4058
+            if ( ! empty( $custom_attributes ) ) {
4059
+
4060
+                foreach ( $custom_attributes as $key => $val ) {
4061
+                    if(is_array($val)){
4062
+                        $attributes .= $key.': {'.$this->array_to_attributes( $val, $html ).'},';
4063
+                    }else{
4064
+                        $attributes .= $html ?  " $key='$val' " : "'$key': '$val',";
4065
+                    }
4066
+                }
4067 4067
 
4068
-			}
4068
+            }
4069 4069
 
4070
-			return $attributes;
4071
-		}
4070
+            return $attributes;
4071
+        }
4072 4072
 
4073 4073
 
4074 4074
 
4075
-		/**
4076
-		 * A self looping function to create the output for JS block elements.
4077
-		 *
4078
-		 * This is what is output in the WP Editor visual view.
4079
-		 *
4080
-		 * @param $args
4081
-		 */
4082
-		public function block_element( $args, $save = false ) {
4075
+        /**
4076
+         * A self looping function to create the output for JS block elements.
4077
+         *
4078
+         * This is what is output in the WP Editor visual view.
4079
+         *
4080
+         * @param $args
4081
+         */
4082
+        public function block_element( $args, $save = false ) {
4083 4083
 
4084 4084
 //            print_r($args);echo '###';exit;
4085 4085
 
4086
-			if ( ! empty( $args ) ) {
4087
-				foreach ( $args as $element => $new_args ) {
4086
+            if ( ! empty( $args ) ) {
4087
+                foreach ( $args as $element => $new_args ) {
4088 4088
 
4089
-					if ( is_array( $new_args ) ) { // its an element
4089
+                    if ( is_array( $new_args ) ) { // its an element
4090 4090
 
4091 4091
 
4092
-						if ( isset( $new_args['element'] ) ) {
4092
+                        if ( isset( $new_args['element'] ) ) {
4093 4093
 
4094
-							if ( isset( $new_args['element_require'] ) ) {
4095
-								echo str_replace( array(
4096
-										"'+",
4097
-										"+'"
4098
-									), '', $this->block_props_replace( $new_args['element_require'] ) ) . " &&  ";
4099
-								unset( $new_args['element_require'] );
4100
-							}
4094
+                            if ( isset( $new_args['element_require'] ) ) {
4095
+                                echo str_replace( array(
4096
+                                        "'+",
4097
+                                        "+'"
4098
+                                    ), '', $this->block_props_replace( $new_args['element_require'] ) ) . " &&  ";
4099
+                                unset( $new_args['element_require'] );
4100
+                            }
4101 4101
 
4102
-							if($new_args['element']=='InnerBlocks'){
4103
-								echo "\n el( InnerBlocks, {";
4104
-							}elseif($new_args['element']=='innerBlocksProps'){
4105
-								$element = isset($new_args['inner_element']) ? esc_attr($new_args['inner_element']) : 'div';
4106
-							  //  echo "\n el( 'section', wp.blockEditor.useInnerBlocksProps( blockProps, {";
4102
+                            if($new_args['element']=='InnerBlocks'){
4103
+                                echo "\n el( InnerBlocks, {";
4104
+                            }elseif($new_args['element']=='innerBlocksProps'){
4105
+                                $element = isset($new_args['inner_element']) ? esc_attr($new_args['inner_element']) : 'div';
4106
+                                //  echo "\n el( 'section', wp.blockEditor.useInnerBlocksProps( blockProps, {";
4107 4107
 //                                echo $save ? "\n el( '$element', wp.blockEditor.useInnerBlocksProps.save( " : "\n el( '$element', wp.blockEditor.useInnerBlocksProps( ";
4108
-								echo $save ? "\n el( '$element', wp.blockEditor.useInnerBlocksProps.save( " : "\n el( '$element', wp.blockEditor.useInnerBlocksProps( ";
4109
-								echo $save ? "wp.blockEditor.useBlockProps.save( {" : "wp.blockEditor.useBlockProps( {";
4110
-								echo !empty($new_args['blockProps']) ? $this->block_element( $new_args['blockProps'],$save ) : '';
4111
-
4112
-								echo "} ), {";
4113
-								echo !empty($new_args['innerBlocksProps']) && !$save ? $this->block_element( $new_args['innerBlocksProps'],$save ) : '';
4114
-							//    echo '###';
4115
-
4116
-							  //  echo '###';
4117
-							}elseif($new_args['element']=='BlocksProps'){
4118
-
4119
-								if ( isset($new_args['if_inner_element']) ) {
4120
-									$element = $new_args['if_inner_element'];
4121
-								}else {
4122
-									$element = isset($new_args['inner_element']) ? "'".esc_attr($new_args['inner_element'])."'" : "'div'";
4123
-								}
4124
-
4125
-								unset($new_args['inner_element']);
4126
-								echo $save ? "\n el( $element, wp.blockEditor.useBlockProps.save( {" : "\n el( $element, wp.blockEditor.useBlockProps( {";
4127
-								echo !empty($new_args['blockProps']) ? $this->block_element( $new_args['blockProps'],$save ) : '';
4128
-
4129
-
4130
-							   // echo "} ),";
4131
-
4132
-							}else{
4133
-								echo "\n el( '" . $new_args['element'] . "', {";
4134
-							}
4135
-
4136
-
4137
-							// get the attributes
4138
-							foreach ( $new_args as $new_key => $new_value ) {
4139
-
4140
-
4141
-								if ( $new_key == 'element' || $new_key == 'content'|| $new_key == 'if_content' || $new_key == 'element_require' || $new_key == 'element_repeat' || is_array( $new_value ) ) {
4142
-									// do nothing
4143
-								} else {
4144
-									echo $this->block_element( array( $new_key => $new_value ),$save );
4145
-								}
4146
-							}
4147
-
4148
-							echo $new_args['element']=='BlocksProps' ? '} ),' : "},";// end attributes
4149
-
4150
-							// get the content
4151
-							$first_item = 0;
4152
-							foreach ( $new_args as $new_key => $new_value ) {
4153
-								if ( $new_key === 'content' || $new_key === 'if_content' || is_array( $new_value ) ) {
4154
-
4155
-									if ( $new_key === 'content' ) {
4156
-										echo "'" . $this->block_props_replace( wp_slash( $new_value ) ) . "'";
4157
-									}else if ( $new_key === 'if_content' ) {
4158
-										echo  $this->block_props_replace(  $new_value  );
4159
-									}
4160
-
4161
-									if ( is_array( $new_value ) ) {
4162
-
4163
-										if ( isset( $new_value['element_require'] ) ) {
4164
-											echo str_replace( array(
4165
-													"'+",
4166
-													"+'"
4167
-												), '', $this->block_props_replace( $new_value['element_require'] ) ) . " &&  ";
4168
-											unset( $new_value['element_require'] );
4169
-										}
4170
-
4171
-										if ( isset( $new_value['element_repeat'] ) ) {
4172
-											$x = 1;
4173
-											while ( $x <= absint( $new_value['element_repeat'] ) ) {
4174
-												$this->block_element( array( '' => $new_value ),$save );
4175
-												$x ++;
4176
-											}
4177
-										} else {
4178
-											$this->block_element( array( '' => $new_value ),$save );
4179
-										}
4180
-									}
4181
-									$first_item ++;
4182
-								}
4183
-							}
4184
-
4185
-							if($new_args['element']=='innerBlocksProps' || $new_args['element']=='xBlocksProps'){
4186
-								echo "))";// end content
4187
-							}else{
4188
-								echo ")";// end content
4189
-							}
4190
-
4191
-
4192
-							echo ", \n";
4193
-
4194
-						}
4195
-					} else {
4196
-
4197
-						if ( substr( $element, 0, 3 ) === "if_" ) {
4198
-							$extra = '';
4199
-							if( strpos($new_args, '[%WrapClass%]') !== false ){
4200
-								$new_args = str_replace('[%WrapClass%]"','" + sd_build_aui_class(props.attributes)',$new_args);
4201
-								$new_args = str_replace('[%WrapClass%]','+ sd_build_aui_class(props.attributes)',$new_args);
4202
-							}
4203
-							echo str_replace( "if_", "", $element ) . ": " . $this->block_props_replace( $new_args, true ) . ",";
4204
-						} elseif ( $element == 'style' &&  strpos($new_args, '[%WrapStyle%]') !== false ) {
4205
-							$new_args = str_replace('[%WrapStyle%]','',$new_args);
4206
-							echo $element . ": {..." . $this->block_props_replace( $new_args ) . " , ...sd_build_aui_styles(props.attributes) },";
4108
+                                echo $save ? "\n el( '$element', wp.blockEditor.useInnerBlocksProps.save( " : "\n el( '$element', wp.blockEditor.useInnerBlocksProps( ";
4109
+                                echo $save ? "wp.blockEditor.useBlockProps.save( {" : "wp.blockEditor.useBlockProps( {";
4110
+                                echo !empty($new_args['blockProps']) ? $this->block_element( $new_args['blockProps'],$save ) : '';
4111
+
4112
+                                echo "} ), {";
4113
+                                echo !empty($new_args['innerBlocksProps']) && !$save ? $this->block_element( $new_args['innerBlocksProps'],$save ) : '';
4114
+                            //    echo '###';
4115
+
4116
+                                //  echo '###';
4117
+                            }elseif($new_args['element']=='BlocksProps'){
4118
+
4119
+                                if ( isset($new_args['if_inner_element']) ) {
4120
+                                    $element = $new_args['if_inner_element'];
4121
+                                }else {
4122
+                                    $element = isset($new_args['inner_element']) ? "'".esc_attr($new_args['inner_element'])."'" : "'div'";
4123
+                                }
4124
+
4125
+                                unset($new_args['inner_element']);
4126
+                                echo $save ? "\n el( $element, wp.blockEditor.useBlockProps.save( {" : "\n el( $element, wp.blockEditor.useBlockProps( {";
4127
+                                echo !empty($new_args['blockProps']) ? $this->block_element( $new_args['blockProps'],$save ) : '';
4128
+
4129
+
4130
+                                // echo "} ),";
4131
+
4132
+                            }else{
4133
+                                echo "\n el( '" . $new_args['element'] . "', {";
4134
+                            }
4135
+
4136
+
4137
+                            // get the attributes
4138
+                            foreach ( $new_args as $new_key => $new_value ) {
4139
+
4140
+
4141
+                                if ( $new_key == 'element' || $new_key == 'content'|| $new_key == 'if_content' || $new_key == 'element_require' || $new_key == 'element_repeat' || is_array( $new_value ) ) {
4142
+                                    // do nothing
4143
+                                } else {
4144
+                                    echo $this->block_element( array( $new_key => $new_value ),$save );
4145
+                                }
4146
+                            }
4147
+
4148
+                            echo $new_args['element']=='BlocksProps' ? '} ),' : "},";// end attributes
4149
+
4150
+                            // get the content
4151
+                            $first_item = 0;
4152
+                            foreach ( $new_args as $new_key => $new_value ) {
4153
+                                if ( $new_key === 'content' || $new_key === 'if_content' || is_array( $new_value ) ) {
4154
+
4155
+                                    if ( $new_key === 'content' ) {
4156
+                                        echo "'" . $this->block_props_replace( wp_slash( $new_value ) ) . "'";
4157
+                                    }else if ( $new_key === 'if_content' ) {
4158
+                                        echo  $this->block_props_replace(  $new_value  );
4159
+                                    }
4160
+
4161
+                                    if ( is_array( $new_value ) ) {
4162
+
4163
+                                        if ( isset( $new_value['element_require'] ) ) {
4164
+                                            echo str_replace( array(
4165
+                                                    "'+",
4166
+                                                    "+'"
4167
+                                                ), '', $this->block_props_replace( $new_value['element_require'] ) ) . " &&  ";
4168
+                                            unset( $new_value['element_require'] );
4169
+                                        }
4170
+
4171
+                                        if ( isset( $new_value['element_repeat'] ) ) {
4172
+                                            $x = 1;
4173
+                                            while ( $x <= absint( $new_value['element_repeat'] ) ) {
4174
+                                                $this->block_element( array( '' => $new_value ),$save );
4175
+                                                $x ++;
4176
+                                            }
4177
+                                        } else {
4178
+                                            $this->block_element( array( '' => $new_value ),$save );
4179
+                                        }
4180
+                                    }
4181
+                                    $first_item ++;
4182
+                                }
4183
+                            }
4184
+
4185
+                            if($new_args['element']=='innerBlocksProps' || $new_args['element']=='xBlocksProps'){
4186
+                                echo "))";// end content
4187
+                            }else{
4188
+                                echo ")";// end content
4189
+                            }
4190
+
4191
+
4192
+                            echo ", \n";
4193
+
4194
+                        }
4195
+                    } else {
4196
+
4197
+                        if ( substr( $element, 0, 3 ) === "if_" ) {
4198
+                            $extra = '';
4199
+                            if( strpos($new_args, '[%WrapClass%]') !== false ){
4200
+                                $new_args = str_replace('[%WrapClass%]"','" + sd_build_aui_class(props.attributes)',$new_args);
4201
+                                $new_args = str_replace('[%WrapClass%]','+ sd_build_aui_class(props.attributes)',$new_args);
4202
+                            }
4203
+                            echo str_replace( "if_", "", $element ) . ": " . $this->block_props_replace( $new_args, true ) . ",";
4204
+                        } elseif ( $element == 'style' &&  strpos($new_args, '[%WrapStyle%]') !== false ) {
4205
+                            $new_args = str_replace('[%WrapStyle%]','',$new_args);
4206
+                            echo $element . ": {..." . $this->block_props_replace( $new_args ) . " , ...sd_build_aui_styles(props.attributes) },";
4207 4207
 //                            echo $element . ": " . $this->block_props_replace( $new_args ) . ",";
4208
-						} elseif ( $element == 'style' ) {
4209
-							echo $element . ": " . $this->block_props_replace( $new_args ) . ",";
4210
-						} elseif ( ( $element == 'class' || $element == 'className'  ) &&  strpos($new_args, '[%WrapClass%]') !== false ) {
4211
-							$new_args = str_replace('[%WrapClass%]','',$new_args);
4212
-							echo $element . ": '" . $this->block_props_replace( $new_args ) . "' + sd_build_aui_class(props.attributes),";
4213
-						} elseif ( $element == 'template' && $new_args ) {
4214
-							echo $element . ": $new_args,";
4215
-						} else {
4216
-							echo $element . ": '" . $this->block_props_replace( $new_args ) . "',";
4217
-						}
4218
-
4219
-					}
4220
-				}
4221
-			}
4222
-		}
4223
-
4224
-		/**
4225
-		 * Replace block attributes placeholders with the proper naming.
4226
-		 *
4227
-		 * @param $string
4228
-		 *
4229
-		 * @return mixed
4230
-		 */
4231
-		public function block_props_replace( $string, $no_wrap = false ) {
4232
-			if ( $no_wrap ) {
4233
-				$string = str_replace( array( "[%", "%]", "%:checked]" ), array( "props.attributes.", "", "" ), $string );
4234
-			} else {
4235
-				$string = str_replace( array( "![%", "[%", "%]", "%:checked]" ), array( "'+!props.attributes.", "'+props.attributes.", "+'", "+'" ), $string );
4236
-			}
4237
-
4238
-			return $string;
4239
-		}
4240
-
4241
-		/**
4242
-		 * Outputs the content of the widget
4243
-		 *
4244
-		 * @param array $args
4245
-		 * @param array $instance
4246
-		 */
4247
-		public function widget( $args, $instance ) {
4248
-			if ( ! is_array( $args ) ) {
4249
-				$args = array();
4250
-			}
4251
-
4252
-			// Get the filtered values
4253
-			$argument_values = $this->argument_values( $instance );
4254
-			$argument_values = $this->string_to_bool( $argument_values );
4255
-			$output          = $this->output( $argument_values, $args );
4256
-
4257
-			$no_wrap = false;
4258
-			if ( isset( $argument_values['no_wrap'] ) && $argument_values['no_wrap'] ) {
4259
-				$no_wrap = true;
4260
-			}
4261
-
4262
-			ob_start();
4263
-			if ( $output && ! $no_wrap ) {
4264
-
4265
-				$class_original = $this->options['widget_ops']['classname'];
4266
-				$class = $this->options['widget_ops']['classname']." sdel-".$this->get_instance_hash();
4267
-
4268
-				// Before widget
4269
-				$before_widget = ! empty( $args['before_widget'] ) ? $args['before_widget'] : '';
4270
-				$before_widget = $before_widget ? str_replace( $class_original, $class, $before_widget ) : $before_widget;
4271
-				$before_widget = apply_filters( 'wp_super_duper_before_widget', $before_widget, $args, $instance, $this );
4272
-				$before_widget = apply_filters( 'wp_super_duper_before_widget_' . $this->base_id, $before_widget, $args, $instance, $this );
4273
-
4274
-				// After widget
4275
-				$after_widget = ! empty( $args['after_widget'] ) ? $args['after_widget'] : '';
4276
-				$after_widget = apply_filters( 'wp_super_duper_after_widget', $after_widget, $args, $instance, $this );
4277
-				$after_widget = apply_filters( 'wp_super_duper_after_widget_' . $this->base_id, $after_widget, $args, $instance, $this );
4278
-
4279
-				echo $before_widget;
4280
-				// elementor strips the widget wrapping div so we check for and add it back if needed
4281
-				if ( $this->is_elementor_widget_output() ) {
4282
-					// Filter class & attrs for elementor widget output.
4283
-					$class = apply_filters( 'wp_super_duper_div_classname', $class, $args, $this );
4284
-					$class = apply_filters( 'wp_super_duper_div_classname_' . $this->base_id, $class, $args, $this );
4285
-
4286
-					$attrs = apply_filters( 'wp_super_duper_div_attrs', '', $args, $this );
4287
-					$attrs = apply_filters( 'wp_super_duper_div_attrs_' . $this->base_id, '', $args, $this );
4288
-
4289
-					echo "<span class='" . esc_attr( $class  ) . "' " . $attrs . ">";
4290
-				}
4291
-				echo $this->output_title( $args, $instance );
4292
-				echo $output;
4293
-				if ( $this->is_elementor_widget_output() ) {
4294
-					echo "</span>";
4295
-				}
4296
-				echo $after_widget;
4297
-			} elseif ( $this->is_preview() && $output == '' ) {// if preview show a placeholder if empty
4298
-				$output = $this->preview_placeholder_text( "{{" . $this->base_id . "}}" );
4299
-				echo $output;
4300
-			} elseif ( $output && $no_wrap ) {
4301
-				echo $output;
4302
-			}
4303
-			$output = ob_get_clean();
4304
-
4305
-			$output = apply_filters( 'wp_super_duper_widget_output', $output, $instance, $args, $this );
4208
+                        } elseif ( $element == 'style' ) {
4209
+                            echo $element . ": " . $this->block_props_replace( $new_args ) . ",";
4210
+                        } elseif ( ( $element == 'class' || $element == 'className'  ) &&  strpos($new_args, '[%WrapClass%]') !== false ) {
4211
+                            $new_args = str_replace('[%WrapClass%]','',$new_args);
4212
+                            echo $element . ": '" . $this->block_props_replace( $new_args ) . "' + sd_build_aui_class(props.attributes),";
4213
+                        } elseif ( $element == 'template' && $new_args ) {
4214
+                            echo $element . ": $new_args,";
4215
+                        } else {
4216
+                            echo $element . ": '" . $this->block_props_replace( $new_args ) . "',";
4217
+                        }
4218
+
4219
+                    }
4220
+                }
4221
+            }
4222
+        }
4306 4223
 
4307
-			echo $output;
4308
-		}
4224
+        /**
4225
+         * Replace block attributes placeholders with the proper naming.
4226
+         *
4227
+         * @param $string
4228
+         *
4229
+         * @return mixed
4230
+         */
4231
+        public function block_props_replace( $string, $no_wrap = false ) {
4232
+            if ( $no_wrap ) {
4233
+                $string = str_replace( array( "[%", "%]", "%:checked]" ), array( "props.attributes.", "", "" ), $string );
4234
+            } else {
4235
+                $string = str_replace( array( "![%", "[%", "%]", "%:checked]" ), array( "'+!props.attributes.", "'+props.attributes.", "+'", "+'" ), $string );
4236
+            }
4237
+
4238
+            return $string;
4239
+        }
4309 4240
 
4310
-		/**
4311
-		 * Tests if the current output is inside a elementor container.
4312
-		 *
4313
-		 * @return bool
4314
-		 *@since 1.0.4
4315
-		 */
4316
-		public function is_elementor_widget_output() {
4317
-			$result = false;
4318
-			if ( defined( 'ELEMENTOR_VERSION' ) && isset( $this->number ) && $this->number == 'REPLACE_TO_ID' ) {
4319
-				$result = true;
4320
-			}
4241
+        /**
4242
+         * Outputs the content of the widget
4243
+         *
4244
+         * @param array $args
4245
+         * @param array $instance
4246
+         */
4247
+        public function widget( $args, $instance ) {
4248
+            if ( ! is_array( $args ) ) {
4249
+                $args = array();
4250
+            }
4251
+
4252
+            // Get the filtered values
4253
+            $argument_values = $this->argument_values( $instance );
4254
+            $argument_values = $this->string_to_bool( $argument_values );
4255
+            $output          = $this->output( $argument_values, $args );
4256
+
4257
+            $no_wrap = false;
4258
+            if ( isset( $argument_values['no_wrap'] ) && $argument_values['no_wrap'] ) {
4259
+                $no_wrap = true;
4260
+            }
4261
+
4262
+            ob_start();
4263
+            if ( $output && ! $no_wrap ) {
4264
+
4265
+                $class_original = $this->options['widget_ops']['classname'];
4266
+                $class = $this->options['widget_ops']['classname']." sdel-".$this->get_instance_hash();
4267
+
4268
+                // Before widget
4269
+                $before_widget = ! empty( $args['before_widget'] ) ? $args['before_widget'] : '';
4270
+                $before_widget = $before_widget ? str_replace( $class_original, $class, $before_widget ) : $before_widget;
4271
+                $before_widget = apply_filters( 'wp_super_duper_before_widget', $before_widget, $args, $instance, $this );
4272
+                $before_widget = apply_filters( 'wp_super_duper_before_widget_' . $this->base_id, $before_widget, $args, $instance, $this );
4273
+
4274
+                // After widget
4275
+                $after_widget = ! empty( $args['after_widget'] ) ? $args['after_widget'] : '';
4276
+                $after_widget = apply_filters( 'wp_super_duper_after_widget', $after_widget, $args, $instance, $this );
4277
+                $after_widget = apply_filters( 'wp_super_duper_after_widget_' . $this->base_id, $after_widget, $args, $instance, $this );
4278
+
4279
+                echo $before_widget;
4280
+                // elementor strips the widget wrapping div so we check for and add it back if needed
4281
+                if ( $this->is_elementor_widget_output() ) {
4282
+                    // Filter class & attrs for elementor widget output.
4283
+                    $class = apply_filters( 'wp_super_duper_div_classname', $class, $args, $this );
4284
+                    $class = apply_filters( 'wp_super_duper_div_classname_' . $this->base_id, $class, $args, $this );
4285
+
4286
+                    $attrs = apply_filters( 'wp_super_duper_div_attrs', '', $args, $this );
4287
+                    $attrs = apply_filters( 'wp_super_duper_div_attrs_' . $this->base_id, '', $args, $this );
4288
+
4289
+                    echo "<span class='" . esc_attr( $class  ) . "' " . $attrs . ">";
4290
+                }
4291
+                echo $this->output_title( $args, $instance );
4292
+                echo $output;
4293
+                if ( $this->is_elementor_widget_output() ) {
4294
+                    echo "</span>";
4295
+                }
4296
+                echo $after_widget;
4297
+            } elseif ( $this->is_preview() && $output == '' ) {// if preview show a placeholder if empty
4298
+                $output = $this->preview_placeholder_text( "{{" . $this->base_id . "}}" );
4299
+                echo $output;
4300
+            } elseif ( $output && $no_wrap ) {
4301
+                echo $output;
4302
+            }
4303
+            $output = ob_get_clean();
4304
+
4305
+            $output = apply_filters( 'wp_super_duper_widget_output', $output, $instance, $args, $this );
4306
+
4307
+            echo $output;
4308
+        }
4321 4309
 
4322
-			return $result;
4323
-		}
4310
+        /**
4311
+         * Tests if the current output is inside a elementor container.
4312
+         *
4313
+         * @return bool
4314
+         *@since 1.0.4
4315
+         */
4316
+        public function is_elementor_widget_output() {
4317
+            $result = false;
4318
+            if ( defined( 'ELEMENTOR_VERSION' ) && isset( $this->number ) && $this->number == 'REPLACE_TO_ID' ) {
4319
+                $result = true;
4320
+            }
4324 4321
 
4325
-		/**
4326
-		 * Tests if the current output is inside a elementor preview.
4327
-		 *
4328
-		 * @return bool
4329
-		 *@since 1.0.4
4330
-		 */
4331
-		public function is_elementor_preview() {
4332
-			$result = false;
4333
-			if ( isset( $_REQUEST['elementor-preview'] ) || ( is_admin() && isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'elementor' ) || ( isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'elementor_ajax' ) ) {
4334
-				$result = true;
4335
-			}
4322
+            return $result;
4323
+        }
4336 4324
 
4337
-			return $result;
4338
-		}
4325
+        /**
4326
+         * Tests if the current output is inside a elementor preview.
4327
+         *
4328
+         * @return bool
4329
+         *@since 1.0.4
4330
+         */
4331
+        public function is_elementor_preview() {
4332
+            $result = false;
4333
+            if ( isset( $_REQUEST['elementor-preview'] ) || ( is_admin() && isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'elementor' ) || ( isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'elementor_ajax' ) ) {
4334
+                $result = true;
4335
+            }
4339 4336
 
4340
-		/**
4341
-		 * Tests if the current output is inside a Divi preview.
4342
-		 *
4343
-		 * @return bool
4344
-		 *@since 1.0.6
4345
-		 */
4346
-		public function is_divi_preview() {
4347
-			$result = false;
4348
-			if ( isset( $_REQUEST['et_fb'] ) || isset( $_REQUEST['et_pb_preview'] ) || ( is_admin() && isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'elementor' ) ) {
4349
-				$result = true;
4350
-			}
4337
+            return $result;
4338
+        }
4351 4339
 
4352
-			return $result;
4353
-		}
4340
+        /**
4341
+         * Tests if the current output is inside a Divi preview.
4342
+         *
4343
+         * @return bool
4344
+         *@since 1.0.6
4345
+         */
4346
+        public function is_divi_preview() {
4347
+            $result = false;
4348
+            if ( isset( $_REQUEST['et_fb'] ) || isset( $_REQUEST['et_pb_preview'] ) || ( is_admin() && isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'elementor' ) ) {
4349
+                $result = true;
4350
+            }
4354 4351
 
4355
-		/**
4356
-		 * Tests if the current output is inside a Beaver builder preview.
4357
-		 *
4358
-		 * @return bool
4359
-		 *@since 1.0.6
4360
-		 */
4361
-		public function is_beaver_preview() {
4362
-			$result = false;
4363
-			if ( isset( $_REQUEST['fl_builder'] ) ) {
4364
-				$result = true;
4365
-			}
4352
+            return $result;
4353
+        }
4366 4354
 
4367
-			return $result;
4368
-		}
4355
+        /**
4356
+         * Tests if the current output is inside a Beaver builder preview.
4357
+         *
4358
+         * @return bool
4359
+         *@since 1.0.6
4360
+         */
4361
+        public function is_beaver_preview() {
4362
+            $result = false;
4363
+            if ( isset( $_REQUEST['fl_builder'] ) ) {
4364
+                $result = true;
4365
+            }
4369 4366
 
4370
-		/**
4371
-		 * Tests if the current output is inside a siteorigin builder preview.
4372
-		 *
4373
-		 * @return bool
4374
-		 *@since 1.0.6
4375
-		 */
4376
-		public function is_siteorigin_preview() {
4377
-			$result = false;
4378
-			if ( ! empty( $_REQUEST['siteorigin_panels_live_editor'] ) ) {
4379
-				$result = true;
4380
-			}
4367
+            return $result;
4368
+        }
4381 4369
 
4382
-			return $result;
4383
-		}
4370
+        /**
4371
+         * Tests if the current output is inside a siteorigin builder preview.
4372
+         *
4373
+         * @return bool
4374
+         *@since 1.0.6
4375
+         */
4376
+        public function is_siteorigin_preview() {
4377
+            $result = false;
4378
+            if ( ! empty( $_REQUEST['siteorigin_panels_live_editor'] ) ) {
4379
+                $result = true;
4380
+            }
4384 4381
 
4385
-		/**
4386
-		 * Tests if the current output is inside a cornerstone builder preview.
4387
-		 *
4388
-		 * @return bool
4389
-		 *@since 1.0.8
4390
-		 */
4391
-		public function is_cornerstone_preview() {
4392
-			$result = false;
4393
-			if ( ! empty( $_REQUEST['cornerstone_preview'] ) || basename( $_SERVER['REQUEST_URI'] ) == 'cornerstone-endpoint' ) {
4394
-				$result = true;
4395
-			}
4382
+            return $result;
4383
+        }
4396 4384
 
4397
-			return $result;
4398
-		}
4385
+        /**
4386
+         * Tests if the current output is inside a cornerstone builder preview.
4387
+         *
4388
+         * @return bool
4389
+         *@since 1.0.8
4390
+         */
4391
+        public function is_cornerstone_preview() {
4392
+            $result = false;
4393
+            if ( ! empty( $_REQUEST['cornerstone_preview'] ) || basename( $_SERVER['REQUEST_URI'] ) == 'cornerstone-endpoint' ) {
4394
+                $result = true;
4395
+            }
4399 4396
 
4400
-		/**
4401
-		 * Tests if the current output is inside a fusion builder preview.
4402
-		 *
4403
-		 * @return bool
4404
-		 *@since 1.1.0
4405
-		 */
4406
-		public function is_fusion_preview() {
4407
-			$result = false;
4408
-			if ( ! empty( $_REQUEST['fb-edit'] ) || ! empty( $_REQUEST['fusion_load_nonce'] ) ) {
4409
-				$result = true;
4410
-			}
4397
+            return $result;
4398
+        }
4411 4399
 
4412
-			return $result;
4413
-		}
4400
+        /**
4401
+         * Tests if the current output is inside a fusion builder preview.
4402
+         *
4403
+         * @return bool
4404
+         *@since 1.1.0
4405
+         */
4406
+        public function is_fusion_preview() {
4407
+            $result = false;
4408
+            if ( ! empty( $_REQUEST['fb-edit'] ) || ! empty( $_REQUEST['fusion_load_nonce'] ) ) {
4409
+                $result = true;
4410
+            }
4414 4411
 
4415
-		/**
4416
-		 * Tests if the current output is inside a Oxygen builder preview.
4417
-		 *
4418
-		 * @return bool
4419
-		 *@since 1.0.18
4420
-		 */
4421
-		public function is_oxygen_preview() {
4422
-			$result = false;
4423
-			if ( ! empty( $_REQUEST['ct_builder'] ) || ( ! empty( $_REQUEST['action'] ) && ( substr( $_REQUEST['action'], 0, 11 ) === "oxy_render_" || substr( $_REQUEST['action'], 0, 10 ) === "ct_render_" ) ) ) {
4424
-				$result = true;
4425
-			}
4412
+            return $result;
4413
+        }
4426 4414
 
4427
-			return $result;
4428
-		}
4415
+        /**
4416
+         * Tests if the current output is inside a Oxygen builder preview.
4417
+         *
4418
+         * @return bool
4419
+         *@since 1.0.18
4420
+         */
4421
+        public function is_oxygen_preview() {
4422
+            $result = false;
4423
+            if ( ! empty( $_REQUEST['ct_builder'] ) || ( ! empty( $_REQUEST['action'] ) && ( substr( $_REQUEST['action'], 0, 11 ) === "oxy_render_" || substr( $_REQUEST['action'], 0, 10 ) === "ct_render_" ) ) ) {
4424
+                $result = true;
4425
+            }
4429 4426
 
4430
-		/**
4431
-		 * Check for Kallyas theme Zion builder preview.
4432
-		 *
4433
-		 * @since 1.1.22
4434
-		 *
4435
-		 * @return bool True when preview page otherwise false.
4436
-		 */
4437
-		public function is_kallyas_zion_preview() {
4438
-			$result = false;
4439
-
4440
-			if ( function_exists( 'znhg_kallyas_theme_config' ) && ! empty( $_REQUEST['zn_pb_edit'] ) ) {
4441
-				$result = true;
4442
-			}
4427
+            return $result;
4428
+        }
4443 4429
 
4444
-			return $result;
4445
-		}
4430
+        /**
4431
+         * Check for Kallyas theme Zion builder preview.
4432
+         *
4433
+         * @since 1.1.22
4434
+         *
4435
+         * @return bool True when preview page otherwise false.
4436
+         */
4437
+        public function is_kallyas_zion_preview() {
4438
+            $result = false;
4446 4439
 
4447
-		/**
4448
-		 * Check for Bricks theme builder preview.
4449
-		 *
4450
-		 * @since 1.1.31
4451
-		 *
4452
-		 * @return bool True when preview page otherwise false.
4453
-		 */
4454
-		public function is_bricks_preview() {
4455
-			$result = false;
4456
-
4457
-			if ( function_exists( 'bricks_is_builder' ) && ( bricks_is_builder() || bricks_is_builder_call() ) ) {
4458
-				$result = true;
4459
-			}
4440
+            if ( function_exists( 'znhg_kallyas_theme_config' ) && ! empty( $_REQUEST['zn_pb_edit'] ) ) {
4441
+                $result = true;
4442
+            }
4460 4443
 
4461
-			return $result;
4462
-		}
4444
+            return $result;
4445
+        }
4463 4446
 
4464
-		/**
4465
-		 * General function to check if we are in a preview situation.
4466
-		 *
4467
-		 * @return bool
4468
-		 *@since 1.0.6
4469
-		 */
4470
-		public function is_preview() {
4471
-			$preview = false;
4472
-			if ( $this->is_divi_preview() ) {
4473
-				$preview = true;
4474
-			} elseif ( $this->is_elementor_preview() ) {
4475
-				$preview = true;
4476
-			} elseif ( $this->is_beaver_preview() ) {
4477
-				$preview = true;
4478
-			} elseif ( $this->is_siteorigin_preview() ) {
4479
-				$preview = true;
4480
-			} elseif ( $this->is_cornerstone_preview() ) {
4481
-				$preview = true;
4482
-			} elseif ( $this->is_fusion_preview() ) {
4483
-				$preview = true;
4484
-			} elseif ( $this->is_oxygen_preview() ) {
4485
-				$preview = true;
4486
-			} elseif( $this->is_kallyas_zion_preview() ) {
4487
-				$preview = true;
4488
-			} elseif( $this->is_block_content_call() ) {
4489
-				$preview = true;
4490
-			} elseif( $this->is_bricks_preview() ) {
4491
-				$preview = true;
4492
-			}
4447
+        /**
4448
+         * Check for Bricks theme builder preview.
4449
+         *
4450
+         * @since 1.1.31
4451
+         *
4452
+         * @return bool True when preview page otherwise false.
4453
+         */
4454
+        public function is_bricks_preview() {
4455
+            $result = false;
4493 4456
 
4494
-			return $preview;
4495
-		}
4457
+            if ( function_exists( 'bricks_is_builder' ) && ( bricks_is_builder() || bricks_is_builder_call() ) ) {
4458
+                $result = true;
4459
+            }
4496 4460
 
4497
-		/**
4498
-		 * Output the super title.
4499
-		 *
4500
-		 * @param $args
4501
-		 * @param array $instance
4502
-		 *
4503
-		 * @return string
4504
-		 */
4505
-		public function output_title( $args, $instance = array() ) {
4506
-			$output = '';
4507
-			if ( ! empty( $instance['title'] ) ) {
4508
-				/** This filter is documented in wp-includes/widgets/class-wp-widget-pages.php */
4509
-				$title  = apply_filters( 'widget_title', $instance['title'], $instance, $this->id_base );
4510
-
4511
-				if ( empty( $instance['widget_title_tag'] ) ) {
4512
-					if ( ! isset( $args['before_title'] ) ) {
4513
-						$args['before_title'] = '';
4514
-					}
4461
+            return $result;
4462
+        }
4515 4463
 
4516
-					if ( ! isset( $args['after_title'] ) ) {
4517
-						$args['after_title'] = '';
4518
-					}
4464
+        /**
4465
+         * General function to check if we are in a preview situation.
4466
+         *
4467
+         * @return bool
4468
+         *@since 1.0.6
4469
+         */
4470
+        public function is_preview() {
4471
+            $preview = false;
4472
+            if ( $this->is_divi_preview() ) {
4473
+                $preview = true;
4474
+            } elseif ( $this->is_elementor_preview() ) {
4475
+                $preview = true;
4476
+            } elseif ( $this->is_beaver_preview() ) {
4477
+                $preview = true;
4478
+            } elseif ( $this->is_siteorigin_preview() ) {
4479
+                $preview = true;
4480
+            } elseif ( $this->is_cornerstone_preview() ) {
4481
+                $preview = true;
4482
+            } elseif ( $this->is_fusion_preview() ) {
4483
+                $preview = true;
4484
+            } elseif ( $this->is_oxygen_preview() ) {
4485
+                $preview = true;
4486
+            } elseif( $this->is_kallyas_zion_preview() ) {
4487
+                $preview = true;
4488
+            } elseif( $this->is_block_content_call() ) {
4489
+                $preview = true;
4490
+            } elseif( $this->is_bricks_preview() ) {
4491
+                $preview = true;
4492
+            }
4493
+
4494
+            return $preview;
4495
+        }
4519 4496
 
4520
-					$output = $args['before_title'] . $title . $args['after_title'];
4521
-				} else {
4522
-					$tag 			= esc_attr( $instance['widget_title_tag'] );
4523
-					$allowed_tags 	= array( 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'span', 'div', 'p' );
4524
-					$title_tag      = in_array( $tag, $allowed_tags, true ) ? esc_attr( $tag ) : 'h2';
4525
-
4526
-					// classes
4527
-					$title_classes = array();
4528
-					$title_classes[] = !empty( $instance['widget_title_size_class'] ) ? sanitize_html_class( $instance['widget_title_size_class'] ) : '';
4529
-					$title_classes[] = !empty( $instance['widget_title_align_class'] ) ? sanitize_html_class( $instance['widget_title_align_class'] ) : '';
4530
-					$title_classes[] = !empty( $instance['widget_title_color_class'] ) ? "text-".sanitize_html_class( $instance['widget_title_color_class'] ) : '';
4531
-					$title_classes[] = !empty( $instance['widget_title_border_class'] ) ? sanitize_html_class( $instance['widget_title_border_class'] ) : '';
4532
-					$title_classes[] = !empty( $instance['widget_title_border_color_class'] ) ? "border-".sanitize_html_class( $instance['widget_title_border_color_class'] ) : '';
4533
-					$title_classes[] = !empty( $instance['widget_title_mt_class'] ) ? "mt-".absint( $instance['widget_title_mt_class'] ) : '';
4534
-					$title_classes[] = !empty( $instance['widget_title_mr_class'] ) ? "mr-".absint( $instance['widget_title_mr_class'] ) : '';
4535
-					$title_classes[] = !empty( $instance['widget_title_mb_class'] ) ? "mb-".absint( $instance['widget_title_mb_class'] ) : '';
4536
-					$title_classes[] = !empty( $instance['widget_title_ml_class'] ) ? "ml-".absint( $instance['widget_title_ml_class'] ) : '';
4537
-					$title_classes[] = !empty( $instance['widget_title_pt_class'] ) ? "pt-".absint( $instance['widget_title_pt_class'] ) : '';
4538
-					$title_classes[] = !empty( $instance['widget_title_pr_class'] ) ? "pr-".absint( $instance['widget_title_pr_class'] ) : '';
4539
-					$title_classes[] = !empty( $instance['widget_title_pb_class'] ) ? "pb-".absint( $instance['widget_title_pb_class'] ) : '';
4540
-					$title_classes[] = !empty( $instance['widget_title_pl_class'] ) ? "pl-".absint( $instance['widget_title_pl_class'] ) : '';
4541
-
4542
-					$class = !empty( $title_classes ) ? implode(" ",$title_classes) : '';
4543
-					$output = "<$title_tag class='$class' >$title</$title_tag>";
4544
-				}
4497
+        /**
4498
+         * Output the super title.
4499
+         *
4500
+         * @param $args
4501
+         * @param array $instance
4502
+         *
4503
+         * @return string
4504
+         */
4505
+        public function output_title( $args, $instance = array() ) {
4506
+            $output = '';
4507
+            if ( ! empty( $instance['title'] ) ) {
4508
+                /** This filter is documented in wp-includes/widgets/class-wp-widget-pages.php */
4509
+                $title  = apply_filters( 'widget_title', $instance['title'], $instance, $this->id_base );
4510
+
4511
+                if ( empty( $instance['widget_title_tag'] ) ) {
4512
+                    if ( ! isset( $args['before_title'] ) ) {
4513
+                        $args['before_title'] = '';
4514
+                    }
4515
+
4516
+                    if ( ! isset( $args['after_title'] ) ) {
4517
+                        $args['after_title'] = '';
4518
+                    }
4519
+
4520
+                    $output = $args['before_title'] . $title . $args['after_title'];
4521
+                } else {
4522
+                    $tag 			= esc_attr( $instance['widget_title_tag'] );
4523
+                    $allowed_tags 	= array( 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'span', 'div', 'p' );
4524
+                    $title_tag      = in_array( $tag, $allowed_tags, true ) ? esc_attr( $tag ) : 'h2';
4525
+
4526
+                    // classes
4527
+                    $title_classes = array();
4528
+                    $title_classes[] = !empty( $instance['widget_title_size_class'] ) ? sanitize_html_class( $instance['widget_title_size_class'] ) : '';
4529
+                    $title_classes[] = !empty( $instance['widget_title_align_class'] ) ? sanitize_html_class( $instance['widget_title_align_class'] ) : '';
4530
+                    $title_classes[] = !empty( $instance['widget_title_color_class'] ) ? "text-".sanitize_html_class( $instance['widget_title_color_class'] ) : '';
4531
+                    $title_classes[] = !empty( $instance['widget_title_border_class'] ) ? sanitize_html_class( $instance['widget_title_border_class'] ) : '';
4532
+                    $title_classes[] = !empty( $instance['widget_title_border_color_class'] ) ? "border-".sanitize_html_class( $instance['widget_title_border_color_class'] ) : '';
4533
+                    $title_classes[] = !empty( $instance['widget_title_mt_class'] ) ? "mt-".absint( $instance['widget_title_mt_class'] ) : '';
4534
+                    $title_classes[] = !empty( $instance['widget_title_mr_class'] ) ? "mr-".absint( $instance['widget_title_mr_class'] ) : '';
4535
+                    $title_classes[] = !empty( $instance['widget_title_mb_class'] ) ? "mb-".absint( $instance['widget_title_mb_class'] ) : '';
4536
+                    $title_classes[] = !empty( $instance['widget_title_ml_class'] ) ? "ml-".absint( $instance['widget_title_ml_class'] ) : '';
4537
+                    $title_classes[] = !empty( $instance['widget_title_pt_class'] ) ? "pt-".absint( $instance['widget_title_pt_class'] ) : '';
4538
+                    $title_classes[] = !empty( $instance['widget_title_pr_class'] ) ? "pr-".absint( $instance['widget_title_pr_class'] ) : '';
4539
+                    $title_classes[] = !empty( $instance['widget_title_pb_class'] ) ? "pb-".absint( $instance['widget_title_pb_class'] ) : '';
4540
+                    $title_classes[] = !empty( $instance['widget_title_pl_class'] ) ? "pl-".absint( $instance['widget_title_pl_class'] ) : '';
4541
+
4542
+                    $class = !empty( $title_classes ) ? implode(" ",$title_classes) : '';
4543
+                    $output = "<$title_tag class='$class' >$title</$title_tag>";
4544
+                }
4545 4545
 
4546
-			}
4546
+            }
4547 4547
 
4548
-			return $output;
4549
-		}
4548
+            return $output;
4549
+        }
4550 4550
 
4551
-		/**
4552
-		 * Outputs the options form inputs for the widget.
4553
-		 *
4554
-		 * @param array $instance The widget options.
4555
-		 */
4556
-		public function form( $instance ) {
4551
+        /**
4552
+         * Outputs the options form inputs for the widget.
4553
+         *
4554
+         * @param array $instance The widget options.
4555
+         */
4556
+        public function form( $instance ) {
4557 4557
 
4558
-			// set widget instance
4559
-			$this->instance = $instance;
4558
+            // set widget instance
4559
+            $this->instance = $instance;
4560 4560
 
4561
-			// set it as a SD widget
4562
-			echo $this->widget_advanced_toggle();
4561
+            // set it as a SD widget
4562
+            echo $this->widget_advanced_toggle();
4563 4563
 
4564
-			echo "<p>" . esc_attr( $this->options['widget_ops']['description'] ) . "</p>";
4565
-			$arguments_raw = $this->get_arguments();
4564
+            echo "<p>" . esc_attr( $this->options['widget_ops']['description'] ) . "</p>";
4565
+            $arguments_raw = $this->get_arguments();
4566 4566
 
4567
-			if ( is_array( $arguments_raw ) ) {
4567
+            if ( is_array( $arguments_raw ) ) {
4568 4568
 
4569
-				$arguments = $this->group_arguments( $arguments_raw );
4569
+                $arguments = $this->group_arguments( $arguments_raw );
4570 4570
 
4571
-				// Do we have sections?
4572
-				$has_sections = $arguments == $arguments_raw ? false : true;
4571
+                // Do we have sections?
4572
+                $has_sections = $arguments == $arguments_raw ? false : true;
4573 4573
 
4574 4574
 
4575
-				if ( $has_sections ) {
4576
-					$panel_count = 0;
4577
-					foreach ( $arguments as $key => $args ) {
4575
+                if ( $has_sections ) {
4576
+                    $panel_count = 0;
4577
+                    foreach ( $arguments as $key => $args ) {
4578 4578
 
4579
-						?>
4579
+                        ?>
4580 4580
 						<script>
4581 4581
 							//							jQuery(this).find("i").toggleClass("fas fa-chevron-up fas fa-chevron-down");jQuery(this).next().toggle();
4582 4582
 						</script>
4583 4583
 						<?php
4584 4584
 
4585
-						$hide       = $panel_count ? ' style="display:none;" ' : '';
4586
-						$icon_class = $panel_count ? 'fas fa-chevron-up' : 'fas fa-chevron-down';
4587
-						echo "<button onclick='jQuery(this).find(\"i\").toggleClass(\"fas fa-chevron-up fas fa-chevron-down\");jQuery(this).next().slideToggle();' type='button' class='sd-toggle-group-button sd-input-group-toggle" . sanitize_title_with_dashes( $key ) . "'>" . esc_attr( $key ) . " <i style='float:right;' class='" . $icon_class . "'></i></button>";
4588
-						echo "<div class='sd-toggle-group sd-input-group-" . sanitize_title_with_dashes( $key ) . "' $hide>";
4585
+                        $hide       = $panel_count ? ' style="display:none;" ' : '';
4586
+                        $icon_class = $panel_count ? 'fas fa-chevron-up' : 'fas fa-chevron-down';
4587
+                        echo "<button onclick='jQuery(this).find(\"i\").toggleClass(\"fas fa-chevron-up fas fa-chevron-down\");jQuery(this).next().slideToggle();' type='button' class='sd-toggle-group-button sd-input-group-toggle" . sanitize_title_with_dashes( $key ) . "'>" . esc_attr( $key ) . " <i style='float:right;' class='" . $icon_class . "'></i></button>";
4588
+                        echo "<div class='sd-toggle-group sd-input-group-" . sanitize_title_with_dashes( $key ) . "' $hide>";
4589 4589
 
4590
-						foreach ( $args as $k => $a ) {
4590
+                        foreach ( $args as $k => $a ) {
4591 4591
 
4592
-							$this->widget_inputs_row_start($k, $a);
4593
-							$this->widget_inputs( $a, $instance );
4594
-							$this->widget_inputs_row_end($k, $a);
4592
+                            $this->widget_inputs_row_start($k, $a);
4593
+                            $this->widget_inputs( $a, $instance );
4594
+                            $this->widget_inputs_row_end($k, $a);
4595 4595
 
4596
-						}
4596
+                        }
4597 4597
 
4598
-						echo "</div>";
4598
+                        echo "</div>";
4599 4599
 
4600
-						$panel_count ++;
4600
+                        $panel_count ++;
4601 4601
 
4602
-					}
4603
-				} else {
4604
-					foreach ( $arguments as $key => $args ) {
4605
-						$this->widget_inputs_row_start($key, $args);
4606
-						$this->widget_inputs( $args, $instance );
4607
-						$this->widget_inputs_row_end($key, $args);
4608
-					}
4609
-				}
4602
+                    }
4603
+                } else {
4604
+                    foreach ( $arguments as $key => $args ) {
4605
+                        $this->widget_inputs_row_start($key, $args);
4606
+                        $this->widget_inputs( $args, $instance );
4607
+                        $this->widget_inputs_row_end($key, $args);
4608
+                    }
4609
+                }
4610 4610
 
4611
-			}
4612
-		}
4611
+            }
4612
+        }
4613 4613
 
4614
-		public function widget_inputs_row_start( $key, $args ) {
4615
-			if ( ! empty( $args['row'] ) ) {
4616
-				// Maybe open
4617
-				if ( ! empty( $args['row']['open'] ) ) {
4618
-					?>
4614
+        public function widget_inputs_row_start( $key, $args ) {
4615
+            if ( ! empty( $args['row'] ) ) {
4616
+                // Maybe open
4617
+                if ( ! empty( $args['row']['open'] ) ) {
4618
+                    ?>
4619 4619
 					<div class='bsui sd-argument' data-argument='<?php echo esc_attr( $args['row']['key'] ); ?>' data-element_require='<?php echo ( ! empty( $args['row']['element_require'] ) ? $this->convert_element_require( $args['row']['element_require'] ) : '' ); ?>'>
4620 4620
 					<?php if ( ! empty( $args['row']['title'] ) ) { ?>
4621 4621
 					<?php
4622
-						if ( isset( $args['row']['icon'] ) ) {
4623
-							$args['row']['icon'] = '';
4624
-						}
4625
-
4626
-						if ( ! isset( $args['row']['device_type'] ) && isset( $args['device_type'] ) ) {
4627
-							$args['row']['device_type'] = $args['device_type'];
4628
-						}
4629
-					?>
4622
+                        if ( isset( $args['row']['icon'] ) ) {
4623
+                            $args['row']['icon'] = '';
4624
+                        }
4625
+
4626
+                        if ( ! isset( $args['row']['device_type'] ) && isset( $args['device_type'] ) ) {
4627
+                            $args['row']['device_type'] = $args['device_type'];
4628
+                        }
4629
+                    ?>
4630 4630
 					<label class="mb-0"><?php echo $this->widget_field_title( $args['row'] ); ?><?php echo $this->widget_field_desc( $args['row'] ); ?></label>
4631 4631
 					<?php } ?>
4632 4632
 					<div class='row<?php echo ( ! empty( $args['row']['class'] ) ? ' ' . esc_attr( $args['row']['class'] ) : '' ); ?>'>
4633 4633
 					<div class='col pr-2'>
4634 4634
 					<?php
4635
-				} else if ( ! empty( $args['row']['close'] ) ) {
4636
-					echo "<div class='col pl-0 ps-0'>";
4637
-				} else {
4638
-					echo "<div class='col pl-0 ps-0 pr-2 pe-2'>";
4639
-				}
4640
-			}
4641
-		}
4642
-
4643
-		public function widget_inputs_row_end( $key, $args ) {
4644
-			if ( ! empty( $args['row'] ) ) {
4645
-				// Maybe close
4646
-				if ( ! empty( $args['row']['close'] ) ) {
4647
-					echo "</div></div>";
4648
-				}
4649
-				echo "</div>";
4650
-			}
4651
-		}
4652
-
4653
-		/**
4654
-		 * Get the hidden input that when added makes the advanced button show on widget settings.
4655
-		 *
4656
-		 * @return string
4657
-		 */
4658
-		public function widget_advanced_toggle() {
4659
-
4660
-			$output = '';
4661
-			if ( $this->block_show_advanced() ) {
4662
-				$val = 1;
4663
-			} else {
4664
-				$val = 0;
4665
-			}
4635
+                } else if ( ! empty( $args['row']['close'] ) ) {
4636
+                    echo "<div class='col pl-0 ps-0'>";
4637
+                } else {
4638
+                    echo "<div class='col pl-0 ps-0 pr-2 pe-2'>";
4639
+                }
4640
+            }
4641
+        }
4666 4642
 
4667
-			$output .= "<input type='hidden'  class='sd-show-advanced' value='$val' />";
4643
+        public function widget_inputs_row_end( $key, $args ) {
4644
+            if ( ! empty( $args['row'] ) ) {
4645
+                // Maybe close
4646
+                if ( ! empty( $args['row']['close'] ) ) {
4647
+                    echo "</div></div>";
4648
+                }
4649
+                echo "</div>";
4650
+            }
4651
+        }
4668 4652
 
4669
-			return $output;
4670
-		}
4653
+        /**
4654
+         * Get the hidden input that when added makes the advanced button show on widget settings.
4655
+         *
4656
+         * @return string
4657
+         */
4658
+        public function widget_advanced_toggle() {
4671 4659
 
4672
-		/**
4673
-		 * Convert require element.
4674
-		 *
4675
-		 * @param string $input Input element.
4676
-		 *
4677
-		 * @return string $output
4678
-		 *@since 1.0.0
4679
-		 *
4680
-		 */
4681
-		public function convert_element_require( $input ) {
4682
-			$input = str_replace( "'", '"', $input );// we only want double quotes
4683
-
4684
-			$output = esc_attr( str_replace( array( "[%", "%]", "%:checked]" ), array(
4685
-				"jQuery(form).find('[data-argument=\"",
4686
-				"\"]').find('input,select,textarea').val()",
4687
-				"\"]').find('input:checked').val()"
4688
-			), $input ) );
4689
-
4690
-			return $output;
4691
-		}
4660
+            $output = '';
4661
+            if ( $this->block_show_advanced() ) {
4662
+                $val = 1;
4663
+            } else {
4664
+                $val = 0;
4665
+            }
4692 4666
 
4693
-		/**
4694
-		 * Builds the inputs for the widget options.
4695
-		 *
4696
-		 * @param $args
4697
-		 * @param $instance
4698
-		 */
4699
-		public function widget_inputs( $args, $instance ) {
4700
-
4701
-			$class             = "";
4702
-			$element_require   = "";
4703
-			$custom_attributes = "";
4704
-
4705
-			// get value
4706
-			if ( isset( $instance[ $args['name'] ] ) ) {
4707
-				$value = $instance[ $args['name'] ];
4708
-			} elseif ( ! isset( $instance[ $args['name'] ] ) && ! empty( $args['default'] ) ) {
4709
-				$value = is_array( $args['default'] ) ? array_map( "esc_html", $args['default'] ) : esc_html( $args['default'] );
4710
-			} else {
4711
-				$value = '';
4712
-			}
4667
+            $output .= "<input type='hidden'  class='sd-show-advanced' value='$val' />";
4713 4668
 
4714
-			// get placeholder
4715
-			if ( ! empty( $args['placeholder'] ) ) {
4716
-				$placeholder = "placeholder='" . esc_html( $args['placeholder'] ) . "'";
4717
-			} else {
4718
-				$placeholder = '';
4719
-			}
4669
+            return $output;
4670
+        }
4720 4671
 
4721
-			// get if advanced
4722
-			if ( isset( $args['advanced'] ) && $args['advanced'] ) {
4723
-				$class .= " sd-advanced-setting ";
4724
-			}
4672
+        /**
4673
+         * Convert require element.
4674
+         *
4675
+         * @param string $input Input element.
4676
+         *
4677
+         * @return string $output
4678
+         *@since 1.0.0
4679
+         *
4680
+         */
4681
+        public function convert_element_require( $input ) {
4682
+            $input = str_replace( "'", '"', $input );// we only want double quotes
4725 4683
 
4726
-			// element_require
4727
-			if ( isset( $args['element_require'] ) && $args['element_require'] ) {
4728
-				$element_require = $args['element_require'];
4729
-			}
4684
+            $output = esc_attr( str_replace( array( "[%", "%]", "%:checked]" ), array(
4685
+                "jQuery(form).find('[data-argument=\"",
4686
+                "\"]').find('input,select,textarea').val()",
4687
+                "\"]').find('input:checked').val()"
4688
+            ), $input ) );
4730 4689
 
4731
-			// custom_attributes
4732
-			if ( isset( $args['custom_attributes'] ) && $args['custom_attributes'] ) {
4733
-				$custom_attributes = $this->array_to_attributes( $args['custom_attributes'], true );
4734
-			}
4690
+            return $output;
4691
+        }
4735 4692
 
4736
-			// before wrapper
4737
-			?>
4693
+        /**
4694
+         * Builds the inputs for the widget options.
4695
+         *
4696
+         * @param $args
4697
+         * @param $instance
4698
+         */
4699
+        public function widget_inputs( $args, $instance ) {
4700
+
4701
+            $class             = "";
4702
+            $element_require   = "";
4703
+            $custom_attributes = "";
4704
+
4705
+            // get value
4706
+            if ( isset( $instance[ $args['name'] ] ) ) {
4707
+                $value = $instance[ $args['name'] ];
4708
+            } elseif ( ! isset( $instance[ $args['name'] ] ) && ! empty( $args['default'] ) ) {
4709
+                $value = is_array( $args['default'] ) ? array_map( "esc_html", $args['default'] ) : esc_html( $args['default'] );
4710
+            } else {
4711
+                $value = '';
4712
+            }
4713
+
4714
+            // get placeholder
4715
+            if ( ! empty( $args['placeholder'] ) ) {
4716
+                $placeholder = "placeholder='" . esc_html( $args['placeholder'] ) . "'";
4717
+            } else {
4718
+                $placeholder = '';
4719
+            }
4720
+
4721
+            // get if advanced
4722
+            if ( isset( $args['advanced'] ) && $args['advanced'] ) {
4723
+                $class .= " sd-advanced-setting ";
4724
+            }
4725
+
4726
+            // element_require
4727
+            if ( isset( $args['element_require'] ) && $args['element_require'] ) {
4728
+                $element_require = $args['element_require'];
4729
+            }
4730
+
4731
+            // custom_attributes
4732
+            if ( isset( $args['custom_attributes'] ) && $args['custom_attributes'] ) {
4733
+                $custom_attributes = $this->array_to_attributes( $args['custom_attributes'], true );
4734
+            }
4735
+
4736
+            // before wrapper
4737
+            ?>
4738 4738
 			<p class="sd-argument <?php echo esc_attr( $class ); ?>" data-argument='<?php echo esc_attr( $args['name'] ); ?>' data-element_require='<?php if ( $element_require ) { echo $this->convert_element_require( $element_require );} ?>'>
4739 4739
 			<?php
4740
-			switch ( $args['type'] ) {
4741
-				//array('text','password','number','email','tel','url','color')
4742
-				case "text":
4743
-				case "password":
4744
-				case "number":
4745
-				case "email":
4746
-				case "tel":
4747
-				case "url":
4748
-				case "color":
4749
-					?>
4740
+            switch ( $args['type'] ) {
4741
+                //array('text','password','number','email','tel','url','color')
4742
+                case "text":
4743
+                case "password":
4744
+                case "number":
4745
+                case "email":
4746
+                case "tel":
4747
+                case "url":
4748
+                case "color":
4749
+                    ?>
4750 4750
 					<label for="<?php echo esc_attr( $this->get_field_id( $args['name'] ) ); ?>"><?php echo $this->widget_field_title( $args );?><?php echo $this->widget_field_desc( $args ); ?></label>
4751 4751
 					<input <?php echo $placeholder; ?> class="widefat" <?php echo $custom_attributes; ?> id="<?php echo esc_attr( $this->get_field_id( $args['name'] ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( $args['name'] ) ); ?>" type="<?php echo esc_attr( $args['type'] ); ?>" value="<?php echo esc_attr( $value ); ?>">
4752 4752
 					<?php
4753 4753
 
4754
-					break;
4755
-				case "select":
4756
-					$multiple = isset( $args['multiple'] ) && $args['multiple'] ? true : false;
4757
-					if ( $multiple ) {
4758
-						if ( empty( $value ) ) {
4759
-							$value = array();
4760
-						}
4761
-					}
4762
-					?>
4754
+                    break;
4755
+                case "select":
4756
+                    $multiple = isset( $args['multiple'] ) && $args['multiple'] ? true : false;
4757
+                    if ( $multiple ) {
4758
+                        if ( empty( $value ) ) {
4759
+                            $value = array();
4760
+                        }
4761
+                    }
4762
+                    ?>
4763 4763
 					<label for="<?php echo esc_attr( $this->get_field_id( $args['name'] ) ); ?>"><?php echo $this->widget_field_title( $args ); ?><?php echo $this->widget_field_desc( $args ); ?></label>
4764 4764
 					<select <?php echo $placeholder; ?> class="widefat" <?php echo $custom_attributes; ?> id="<?php echo esc_attr( $this->get_field_id( $args['name'] ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( $args['name'] ) ); if ( $multiple ) { echo "[]"; } ?>"
4765 4765
 						<?php if ( $multiple ) {
4766
-							echo "multiple";
4767
-						} //@todo not implemented yet due to gutenberg not supporting it
4768
-						?>>
4766
+                            echo "multiple";
4767
+                        } //@todo not implemented yet due to gutenberg not supporting it
4768
+                        ?>>
4769 4769
 						<?php
4770 4770
 
4771
-						if ( ! empty( $args['options'] ) ) {
4772
-							foreach ( $args['options'] as $val => $label ) {
4773
-								if ( $multiple ) {
4774
-									$selected = in_array( $val, $value ) ? 'selected="selected"' : '';
4775
-								} else {
4776
-									$selected = selected( $value, $val, false );
4777
-								}
4778
-								echo "<option value='$val' " . $selected . ">$label</option>";
4779
-							}
4780
-						}
4781
-						?>
4771
+                        if ( ! empty( $args['options'] ) ) {
4772
+                            foreach ( $args['options'] as $val => $label ) {
4773
+                                if ( $multiple ) {
4774
+                                    $selected = in_array( $val, $value ) ? 'selected="selected"' : '';
4775
+                                } else {
4776
+                                    $selected = selected( $value, $val, false );
4777
+                                }
4778
+                                echo "<option value='$val' " . $selected . ">$label</option>";
4779
+                            }
4780
+                        }
4781
+                        ?>
4782 4782
 					</select>
4783 4783
 					<?php
4784
-					break;
4785
-				case "checkbox":
4786
-					?>
4784
+                    break;
4785
+                case "checkbox":
4786
+                    ?>
4787 4787
 					<input <?php echo $placeholder; ?> <?php checked( 1, $value, true ) ?> <?php echo $custom_attributes; ?> class="widefat" id="<?php echo esc_attr( $this->get_field_id( $args['name'] ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( $args['name'] ) ); ?>" type="checkbox" value="1">
4788 4788
 					<label for="<?php echo esc_attr( $this->get_field_id( $args['name'] ) ); ?>"><?php echo $this->widget_field_title( $args );?><?php echo $this->widget_field_desc( $args ); ?></label>
4789 4789
 					<?php
4790
-					break;
4791
-				case "textarea":
4792
-					?>
4790
+                    break;
4791
+                case "textarea":
4792
+                    ?>
4793 4793
 					<label for="<?php echo esc_attr( $this->get_field_id( $args['name'] ) ); ?>"><?php echo $this->widget_field_title( $args ); ?><?php echo $this->widget_field_desc( $args ); ?></label>
4794 4794
 					<textarea <?php echo $placeholder; ?> class="widefat" <?php echo $custom_attributes; ?> id="<?php echo esc_attr( $this->get_field_id( $args['name'] ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( $args['name'] ) ); ?>"><?php echo esc_attr( $value ); ?></textarea>
4795 4795
 					<?php
4796 4796
 
4797
-					break;
4798
-				case "hidden":
4799
-					?>
4797
+                    break;
4798
+                case "hidden":
4799
+                    ?>
4800 4800
 					<input id="<?php echo esc_attr( $this->get_field_id( $args['name'] ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( $args['name'] ) ); ?>" type="hidden" value="<?php echo esc_attr( $value ); ?>">
4801 4801
 					<?php
4802
-					break;
4803
-				default:
4804
-					echo "No input type found!"; // @todo we need to add more input types.
4805
-			}
4806
-			// after wrapper
4807
-			?></p><?php
4808
-		}
4802
+                    break;
4803
+                default:
4804
+                    echo "No input type found!"; // @todo we need to add more input types.
4805
+            }
4806
+            // after wrapper
4807
+            ?></p><?php
4808
+        }
4809 4809
 
4810
-		public function get_widget_icon($icon = 'box-top', $title = ''){
4811
-			if($icon=='box-top'){
4812
-				return '<svg title="'.esc_attr($title).'" width="20px" height="20px" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414" role="img" aria-hidden="true" focusable="false"><rect x="2.714" y="5.492" width="1.048" height="9.017" fill="#555D66"></rect><rect x="16.265" y="5.498" width="1.023" height="9.003" fill="#555D66"></rect><rect x="5.518" y="2.186" width="8.964" height="2.482" fill="#272B2F"></rect><rect x="5.487" y="16.261" width="9.026" height="1.037" fill="#555D66"></rect></svg>';
4813
-			}elseif($icon=='box-right'){
4814
-				return '<svg title="'.esc_attr($title).'" width="20px" height="20px" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414" role="img" aria-hidden="true" focusable="false"><rect x="2.714" y="5.492" width="1.046" height="9.017" fill="#555D66"></rect><rect x="15.244" y="5.498" width="2.518" height="9.003" fill="#272B2F"></rect><rect x="5.518" y="2.719" width="8.964" height="0.954" fill="#555D66"></rect><rect x="5.487" y="16.308" width="9.026" height="0.99" fill="#555D66"></rect></svg>';
4815
-			}elseif($icon=='box-bottom'){
4816
-				return '<svg title="'.esc_attr($title).'" width="20px" height="20px" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414" role="img" aria-hidden="true" focusable="false"><rect x="2.714" y="5.492" width="1" height="9.017" fill="#555D66"></rect><rect x="16.261" y="5.498" width="1.027" height="9.003" fill="#555D66"></rect><rect x="5.518" y="2.719" width="8.964" height="0.968" fill="#555D66"></rect><rect x="5.487" y="15.28" width="9.026" height="2.499" fill="#272B2F"></rect></svg>';
4817
-			}elseif($icon=='box-left'){
4818
-				return '<svg title="'.esc_attr($title).'" width="20px" height="20px" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414" role="img" aria-hidden="true" focusable="false"><rect x="2.202" y="5.492" width="2.503" height="9.017" fill="#272B2F"></rect><rect x="16.276" y="5.498" width="1.012" height="9.003" fill="#555D66"></rect><rect x="5.518" y="2.719" width="8.964" height="0.966" fill="#555D66"></rect><rect x="5.487" y="16.303" width="9.026" height="0.995" fill="#555D66"></rect></svg>';
4819
-			}
4820
-		}
4810
+        public function get_widget_icon($icon = 'box-top', $title = ''){
4811
+            if($icon=='box-top'){
4812
+                return '<svg title="'.esc_attr($title).'" width="20px" height="20px" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414" role="img" aria-hidden="true" focusable="false"><rect x="2.714" y="5.492" width="1.048" height="9.017" fill="#555D66"></rect><rect x="16.265" y="5.498" width="1.023" height="9.003" fill="#555D66"></rect><rect x="5.518" y="2.186" width="8.964" height="2.482" fill="#272B2F"></rect><rect x="5.487" y="16.261" width="9.026" height="1.037" fill="#555D66"></rect></svg>';
4813
+            }elseif($icon=='box-right'){
4814
+                return '<svg title="'.esc_attr($title).'" width="20px" height="20px" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414" role="img" aria-hidden="true" focusable="false"><rect x="2.714" y="5.492" width="1.046" height="9.017" fill="#555D66"></rect><rect x="15.244" y="5.498" width="2.518" height="9.003" fill="#272B2F"></rect><rect x="5.518" y="2.719" width="8.964" height="0.954" fill="#555D66"></rect><rect x="5.487" y="16.308" width="9.026" height="0.99" fill="#555D66"></rect></svg>';
4815
+            }elseif($icon=='box-bottom'){
4816
+                return '<svg title="'.esc_attr($title).'" width="20px" height="20px" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414" role="img" aria-hidden="true" focusable="false"><rect x="2.714" y="5.492" width="1" height="9.017" fill="#555D66"></rect><rect x="16.261" y="5.498" width="1.027" height="9.003" fill="#555D66"></rect><rect x="5.518" y="2.719" width="8.964" height="0.968" fill="#555D66"></rect><rect x="5.487" y="15.28" width="9.026" height="2.499" fill="#272B2F"></rect></svg>';
4817
+            }elseif($icon=='box-left'){
4818
+                return '<svg title="'.esc_attr($title).'" width="20px" height="20px" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414" role="img" aria-hidden="true" focusable="false"><rect x="2.202" y="5.492" width="2.503" height="9.017" fill="#272B2F"></rect><rect x="16.276" y="5.498" width="1.012" height="9.003" fill="#555D66"></rect><rect x="5.518" y="2.719" width="8.964" height="0.966" fill="#555D66"></rect><rect x="5.487" y="16.303" width="9.026" height="0.995" fill="#555D66"></rect></svg>';
4819
+            }
4820
+        }
4821 4821
 
4822
-		/**
4823
-		 * Get the widget input description html.
4824
-		 *
4825
-		 * @param $args
4826
-		 *
4827
-		 * @return string
4828
-		 * @todo, need to make its own tooltip script
4829
-		 */
4830
-		public function widget_field_desc( $args ) {
4831
-
4832
-			$description = '';
4833
-			if ( isset( $args['desc'] ) && $args['desc'] ) {
4834
-				if ( isset( $args['desc_tip'] ) && $args['desc_tip'] ) {
4835
-					$description = $this->desc_tip( $args['desc'] );
4836
-				} else {
4837
-					$description = '<span class="description">' . wp_kses_post( $args['desc'] ) . '</span>';
4838
-				}
4839
-			}
4822
+        /**
4823
+         * Get the widget input description html.
4824
+         *
4825
+         * @param $args
4826
+         *
4827
+         * @return string
4828
+         * @todo, need to make its own tooltip script
4829
+         */
4830
+        public function widget_field_desc( $args ) {
4831
+
4832
+            $description = '';
4833
+            if ( isset( $args['desc'] ) && $args['desc'] ) {
4834
+                if ( isset( $args['desc_tip'] ) && $args['desc_tip'] ) {
4835
+                    $description = $this->desc_tip( $args['desc'] );
4836
+                } else {
4837
+                    $description = '<span class="description">' . wp_kses_post( $args['desc'] ) . '</span>';
4838
+                }
4839
+            }
4840 4840
 
4841
-			return $description;
4842
-		}
4841
+            return $description;
4842
+        }
4843 4843
 
4844
-		/**
4845
-		 * Get the widget input title html.
4846
-		 *
4847
-		 * @param $args
4848
-		 *
4849
-		 * @return string
4850
-		 */
4851
-		public function widget_field_title( $args ) {
4852
-			$title = '';
4853
-
4854
-			if ( isset( $args['title'] ) && $args['title'] ) {
4855
-				if ( ! empty( $args['device_type'] ) ) {
4856
-					$args['title'] .= ' (' . $args['device_type'] . ')'; // Append device type to title.
4857
-				}
4844
+        /**
4845
+         * Get the widget input title html.
4846
+         *
4847
+         * @param $args
4848
+         *
4849
+         * @return string
4850
+         */
4851
+        public function widget_field_title( $args ) {
4852
+            $title = '';
4858 4853
 
4859
-				if ( isset( $args['icon'] ) && $args['icon'] ) {
4860
-					$title = self::get_widget_icon( $args['icon'], $args['title']  );
4861
-				} else {
4862
-					$title = esc_attr( $args['title'] );
4863
-				}
4864
-			}
4854
+            if ( isset( $args['title'] ) && $args['title'] ) {
4855
+                if ( ! empty( $args['device_type'] ) ) {
4856
+                    $args['title'] .= ' (' . $args['device_type'] . ')'; // Append device type to title.
4857
+                }
4865 4858
 
4866
-			return $title;
4867
-		}
4859
+                if ( isset( $args['icon'] ) && $args['icon'] ) {
4860
+                    $title = self::get_widget_icon( $args['icon'], $args['title']  );
4861
+                } else {
4862
+                    $title = esc_attr( $args['title'] );
4863
+                }
4864
+            }
4868 4865
 
4869
-		/**
4870
-		 * Get the tool tip html.
4871
-		 *
4872
-		 * @param $tip
4873
-		 * @param bool $allow_html
4874
-		 *
4875
-		 * @return string
4876
-		 */
4877
-		function desc_tip( $tip, $allow_html = false ) {
4878
-			if ( $allow_html ) {
4879
-				$tip = $this->sanitize_tooltip( $tip );
4880
-			} else {
4881
-				$tip = esc_attr( $tip );
4882
-			}
4866
+            return $title;
4867
+        }
4883 4868
 
4884
-			return '<span class="gd-help-tip dashicons dashicons-editor-help" title="' . $tip . '"></span>';
4885
-		}
4869
+        /**
4870
+         * Get the tool tip html.
4871
+         *
4872
+         * @param $tip
4873
+         * @param bool $allow_html
4874
+         *
4875
+         * @return string
4876
+         */
4877
+        function desc_tip( $tip, $allow_html = false ) {
4878
+            if ( $allow_html ) {
4879
+                $tip = $this->sanitize_tooltip( $tip );
4880
+            } else {
4881
+                $tip = esc_attr( $tip );
4882
+            }
4883
+
4884
+            return '<span class="gd-help-tip dashicons dashicons-editor-help" title="' . $tip . '"></span>';
4885
+        }
4886 4886
 
4887
-		/**
4888
-		 * Sanitize a string destined to be a tooltip.
4889
-		 *
4890
-		 * @param string $var
4891
-		 *
4892
-		 * @return string
4893
-		 */
4894
-		public function sanitize_tooltip( $var ) {
4895
-			return htmlspecialchars( wp_kses( html_entity_decode( $var ), array(
4896
-				'br'     => array(),
4897
-				'em'     => array(),
4898
-				'strong' => array(),
4899
-				'small'  => array(),
4900
-				'span'   => array(),
4901
-				'ul'     => array(),
4902
-				'li'     => array(),
4903
-				'ol'     => array(),
4904
-				'p'      => array(),
4905
-			) ) );
4906
-		}
4887
+        /**
4888
+         * Sanitize a string destined to be a tooltip.
4889
+         *
4890
+         * @param string $var
4891
+         *
4892
+         * @return string
4893
+         */
4894
+        public function sanitize_tooltip( $var ) {
4895
+            return htmlspecialchars( wp_kses( html_entity_decode( $var ), array(
4896
+                'br'     => array(),
4897
+                'em'     => array(),
4898
+                'strong' => array(),
4899
+                'small'  => array(),
4900
+                'span'   => array(),
4901
+                'ul'     => array(),
4902
+                'li'     => array(),
4903
+                'ol'     => array(),
4904
+                'p'      => array(),
4905
+            ) ) );
4906
+        }
4907 4907
 
4908
-		/**
4909
-		 * Processing widget options on save
4910
-		 *
4911
-		 * @param array $new_instance The new options
4912
-		 * @param array $old_instance The previous options
4913
-		 *
4914
-		 * @return array
4915
-		 * @todo we should add some sanitation here.
4916
-		 */
4917
-		public function update( $new_instance, $old_instance ) {
4918
-
4919
-			//save the widget
4920
-			$instance = array_merge( (array) $old_instance, (array) $new_instance );
4921
-
4922
-			// set widget instance
4923
-			$this->instance = $instance;
4924
-
4925
-			if ( empty( $this->arguments ) ) {
4926
-				$this->get_arguments();
4927
-			}
4908
+        /**
4909
+         * Processing widget options on save
4910
+         *
4911
+         * @param array $new_instance The new options
4912
+         * @param array $old_instance The previous options
4913
+         *
4914
+         * @return array
4915
+         * @todo we should add some sanitation here.
4916
+         */
4917
+        public function update( $new_instance, $old_instance ) {
4928 4918
 
4929
-			// check for checkboxes
4930
-			if ( ! empty( $this->arguments ) ) {
4931
-				foreach ( $this->arguments as $argument ) {
4932
-					if ( isset( $argument['type'] ) && $argument['type'] == 'checkbox' && ! isset( $new_instance[ $argument['name'] ] ) ) {
4933
-						$instance[ $argument['name'] ] = '0';
4934
-					}
4935
-				}
4936
-			}
4919
+            //save the widget
4920
+            $instance = array_merge( (array) $old_instance, (array) $new_instance );
4937 4921
 
4938
-			return $instance;
4939
-		}
4922
+            // set widget instance
4923
+            $this->instance = $instance;
4940 4924
 
4941
-		/**
4942
-		 * Checks if the current call is a ajax call to get the block content.
4943
-		 *
4944
-		 * This can be used in your widget to return different content as the block content.
4945
-		 *
4946
-		 * @return bool
4947
-		 *@since 1.0.3
4948
-		 */
4949
-		public function is_block_content_call() {
4950
-			$result = false;
4951
-			if ( wp_doing_ajax() && isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'super_duper_output_shortcode' ) {
4952
-				$result = true;
4953
-			}
4925
+            if ( empty( $this->arguments ) ) {
4926
+                $this->get_arguments();
4927
+            }
4954 4928
 
4955
-			return $result;
4956
-		}
4929
+            // check for checkboxes
4930
+            if ( ! empty( $this->arguments ) ) {
4931
+                foreach ( $this->arguments as $argument ) {
4932
+                    if ( isset( $argument['type'] ) && $argument['type'] == 'checkbox' && ! isset( $new_instance[ $argument['name'] ] ) ) {
4933
+                        $instance[ $argument['name'] ] = '0';
4934
+                    }
4935
+                }
4936
+            }
4957 4937
 
4958
-		/**
4959
-		 * Get an instance hash that will be unique to the type and settings.
4960
-		 *
4961
-		 * @return string
4962
-		 *@since 1.0.20
4963
-		 */
4964
-		public function get_instance_hash(){
4965
-			$instance_string = $this->base_id.serialize($this->instance);
4966
-			return hash('crc32b',$instance_string);
4967
-		}
4938
+            return $instance;
4939
+        }
4968 4940
 
4969
-		/**
4970
-		 * Generate and return inline styles from CSS rules that will match the unique class of the instance.
4971
-		 *
4972
-		 * @param array $rules
4973
-		 *
4974
-		 * @return string
4975
-		 *@since 1.0.20
4976
-		 */
4977
-		public function get_instance_style($rules = array()){
4978
-			$css = '';
4979
-
4980
-			if(!empty($rules)){
4981
-				$rules = array_unique($rules);
4982
-				$instance_hash = $this->get_instance_hash();
4983
-				$css .= "<style>";
4984
-				foreach($rules as $rule){
4985
-					$css .= ".sdel-$instance_hash $rule";
4986
-				}
4987
-				$css .= "</style>";
4988
-			}
4941
+        /**
4942
+         * Checks if the current call is a ajax call to get the block content.
4943
+         *
4944
+         * This can be used in your widget to return different content as the block content.
4945
+         *
4946
+         * @return bool
4947
+         *@since 1.0.3
4948
+         */
4949
+        public function is_block_content_call() {
4950
+            $result = false;
4951
+            if ( wp_doing_ajax() && isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'super_duper_output_shortcode' ) {
4952
+                $result = true;
4953
+            }
4989 4954
 
4990
-			return $css;
4991
-		}
4955
+            return $result;
4956
+        }
4957
+
4958
+        /**
4959
+         * Get an instance hash that will be unique to the type and settings.
4960
+         *
4961
+         * @return string
4962
+         *@since 1.0.20
4963
+         */
4964
+        public function get_instance_hash(){
4965
+            $instance_string = $this->base_id.serialize($this->instance);
4966
+            return hash('crc32b',$instance_string);
4967
+        }
4968
+
4969
+        /**
4970
+         * Generate and return inline styles from CSS rules that will match the unique class of the instance.
4971
+         *
4972
+         * @param array $rules
4973
+         *
4974
+         * @return string
4975
+         *@since 1.0.20
4976
+         */
4977
+        public function get_instance_style($rules = array()){
4978
+            $css = '';
4979
+
4980
+            if(!empty($rules)){
4981
+                $rules = array_unique($rules);
4982
+                $instance_hash = $this->get_instance_hash();
4983
+                $css .= "<style>";
4984
+                foreach($rules as $rule){
4985
+                    $css .= ".sdel-$instance_hash $rule";
4986
+                }
4987
+                $css .= "</style>";
4988
+            }
4989
+
4990
+            return $css;
4991
+        }
4992 4992
 
4993
-		/**
4994
-		 * Encode shortcodes tags.
4995
-		 *
4996
-		 * @param string $content Content to search for shortcode tags.
4997
-		 *
4993
+        /**
4994
+         * Encode shortcodes tags.
4995
+         *
4996
+         * @param string $content Content to search for shortcode tags.
4997
+         *
4998 4998
 *@return string Content with shortcode tags removed.
4999
-		 *@since 1.0.28
5000
-		 *
5001
-		 */
5002
-		public function encode_shortcodes( $content ) {
5003
-			// Avoids existing encoded tags.
5004
-			$trans   = array(
5005
-				'&#91;' => '&#091;',
5006
-				'&#93;' => '&#093;',
5007
-				'&amp;#91;' => '&#091;',
5008
-				'&amp;#93;' => '&#093;',
5009
-				'&lt;' => '&0lt;',
5010
-				'&gt;' => '&0gt;',
5011
-				'&amp;lt;' => '&0lt;',
5012
-				'&amp;gt;' => '&0gt;',
5013
-			);
5014
-
5015
-			$content = strtr( $content, $trans );
5016
-
5017
-			$trans   = array(
5018
-				'[' => '&#91;',
5019
-				']' => '&#93;',
5020
-				'<' => '&lt;',
5021
-				'>' => '&gt;',
5022
-				'"' => '&quot;',
5023
-				"'" => '&#39;',
5024
-			);
5025
-
5026
-			$content = strtr( $content, $trans );
5027
-
5028
-			return $content;
5029
-		}
4999
+         *@since 1.0.28
5000
+         *
5001
+         */
5002
+        public function encode_shortcodes( $content ) {
5003
+            // Avoids existing encoded tags.
5004
+            $trans   = array(
5005
+                '&#91;' => '&#091;',
5006
+                '&#93;' => '&#093;',
5007
+                '&amp;#91;' => '&#091;',
5008
+                '&amp;#93;' => '&#093;',
5009
+                '&lt;' => '&0lt;',
5010
+                '&gt;' => '&0gt;',
5011
+                '&amp;lt;' => '&0lt;',
5012
+                '&amp;gt;' => '&0gt;',
5013
+            );
5014
+
5015
+            $content = strtr( $content, $trans );
5016
+
5017
+            $trans   = array(
5018
+                '[' => '&#91;',
5019
+                ']' => '&#93;',
5020
+                '<' => '&lt;',
5021
+                '>' => '&gt;',
5022
+                '"' => '&quot;',
5023
+                "'" => '&#39;',
5024
+            );
5025
+
5026
+            $content = strtr( $content, $trans );
5027
+
5028
+            return $content;
5029
+        }
5030 5030
 
5031
-		/**
5032
-		 * Remove encoded shortcod tags.
5033
-		 *
5034
-		 * @param string $content Content to search for shortcode tags.
5035
-		 *
5031
+        /**
5032
+         * Remove encoded shortcod tags.
5033
+         *
5034
+         * @param string $content Content to search for shortcode tags.
5035
+         *
5036 5036
 *@return string Content with decoded shortcode tags.
5037
-		 *@since 1.0.28
5038
-		 *
5039
-		 */
5040
-		public function decode_shortcodes( $content ) {
5041
-			$trans   = array(
5042
-				'&#91;' => '[',
5043
-				'&#93;' => ']',
5044
-				'&amp;#91;' => '[',
5045
-				'&amp;#93;' => ']',
5046
-				'&lt;' => '<',
5047
-				'&gt;' => '>',
5048
-				'&amp;lt;' => '<',
5049
-				'&amp;gt;' => '>',
5050
-				'&quot;' => '"',
5051
-				'&apos;' => "'",
5052
-			);
5053
-
5054
-			$content = strtr( $content, $trans );
5055
-
5056
-			$trans   = array(
5057
-				'&#091;' => '&#91;',
5058
-				'&#093;' => '&#93;',
5059
-				'&amp;#091;' => '&#91;',
5060
-				'&amp;#093;' => '&#93;',
5061
-				'&0lt;' => '&lt;',
5062
-				'&0gt;' => '&gt;',
5063
-				'&amp;0lt;' => '&lt;',
5064
-				'&amp;0gt;' => '&gt;',
5065
-			);
5066
-
5067
-			$content = strtr( $content, $trans );
5068
-
5069
-			return $content;
5070
-		}
5071
-
5072
-		public function block_visibility_fields( $args ) {
5073
-			$value = ! empty( $args['value'] ) ? esc_attr( $args['value'] ) : '';
5074
-			$content = '<div class="bs-vc-rule-template d-none">';
5075
-				$content .= '<div class="p-3 pb-0 mb-3 border border-1 rounded-1 position-relative bs-vc-rule" data-bs-index="BSVCINDEX" >';
5076
-					$content .= '<div class="row">';
5077
-						$content .= '<div class="col-sm-12">';
5078
-							$content .= '<div class="bs-rule-action position-absolute top-0 end-0 p-2 zindex-5"><span class="text-danger c-pointer bs-vc-remove-rule" title="' . esc_attr__( 'Remove Rule', 'ayecode-connect' ) . '"><i class="fas fa-circle-minus fs-6"></i></span></div>';
5079
-							$content .= aui()->select(
5080
-								array(
5081
-									'id'          => 'bsvc_rule_BSVCINDEX',
5082
-									'name'        => 'bsvc_rule_BSVCINDEX',
5083
-									'label'       => __( 'Rule', 'ayecode-connect' ),
5084
-									'placeholder' => __( 'Select Rule...', 'ayecode-connect' ),
5085
-									'class'       => 'bsvc_rule form-select-sm no-select2 mw-100',
5086
-									'options'     => sd_visibility_rules_options(),
5087
-									'default'     => '',
5088
-									'value'       => '',
5089
-									'label_type'  => '',
5090
-									'select2'     => false,
5091
-									'input_group_left' => __( 'Rule:', 'ayecode-connect' ),
5092
-									'extra_attributes' => array(
5093
-										'data-minimum-results-for-search' => '-1'
5094
-									)
5095
-								)
5096
-							);
5097
-
5098
-						$content .= '</div>';
5099
-
5100
-						if ( class_exists( 'GeoDirectory' ) ) {
5101
-							$content .= '<div class="col-md-7 col-sm-12">';
5102
-
5103
-								$content .= aui()->select(
5104
-									array(
5105
-										'id'          => 'bsvc_gd_field_BSVCINDEX',
5106
-										'name'        => 'bsvc_gd_field_BSVCINDEX',
5107
-										'label'       => __( 'FIELD', 'ayecode-connect' ),
5108
-										'placeholder' => __( 'FIELD', 'ayecode-connect' ),
5109
-										'class'       => 'bsvc_gd_field form-select-sm no-select2 mw-100',
5110
-										'options'     => sd_visibility_gd_field_options(),
5111
-										'default'     => '',
5112
-										'value'       => '',
5113
-										'label_type'  => '',
5114
-										'select2'     => false,
5115
-										'element_require'  => '[%bsvc_rule_BSVCINDEX%]=="gd_field"',
5116
-										'extra_attributes' => array(
5117
-											'data-minimum-results-for-search' => '-1'
5118
-										)
5119
-									)
5120
-								);
5121
-
5122
-							$content .= '</div>';
5123
-							$content .= '<div class="col-md-5 col-sm-12">';
5124
-
5125
-								$content .= aui()->select(
5126
-									array(
5127
-										'id'          => 'bsvc_gd_field_condition_BSVCINDEX',
5128
-										'name'        => 'bsvc_gd_field_condition_BSVCINDEX',
5129
-										'label'       => __( 'CONDITION', 'ayecode-connect' ),
5130
-										'placeholder' => __( 'CONDITION', 'ayecode-connect' ),
5131
-										'class'       => 'bsvc_gd_field_condition form-select-sm no-select2 mw-100',
5132
-										'options'     => sd_visibility_field_condition_options(),
5133
-										'default'     => '',
5134
-										'value'       => '',
5135
-										'label_type'  => '',
5136
-										'select2'     => false,
5137
-										'element_require'  => '[%bsvc_rule_BSVCINDEX%]=="gd_field"',
5138
-										'extra_attributes' => array(
5139
-											'data-minimum-results-for-search' => '-1'
5140
-										)
5141
-									)
5142
-								);
5143
-
5144
-							$content .= '</div>';
5145
-							$content .= '<div class="col-sm-12">';
5146
-
5147
-								$content .= aui()->input(
5148
-									array(
5149
-										'type'            => 'text',
5150
-										'id'              => 'bsvc_gd_field_search_BSVCINDEX',
5151
-										'name'            => 'bsvc_gd_field_search_BSVCINDEX',
5152
-										'label'           => __( 'VALUE TO MATCH', 'ayecode-connect' ),
5153
-										'class'           => 'bsvc_gd_field_search form-control-sm',
5154
-										'placeholder'     => __( 'VALUE TO MATCH', 'ayecode-connect' ),
5155
-										'label_type'      => '',
5156
-										'value'           => '',
5157
-										'element_require' => '([%bsvc_rule_BSVCINDEX%]=="gd_field" && [%bsvc_gd_field_condition_BSVCINDEX%] && [%bsvc_gd_field_condition_BSVCINDEX%]!="is_empty" && [%bsvc_gd_field_condition_BSVCINDEX%]!="is_not_empty")'
5158
-									)
5159
-								);
5037
+         *@since 1.0.28
5038
+         *
5039
+         */
5040
+        public function decode_shortcodes( $content ) {
5041
+            $trans   = array(
5042
+                '&#91;' => '[',
5043
+                '&#93;' => ']',
5044
+                '&amp;#91;' => '[',
5045
+                '&amp;#93;' => ']',
5046
+                '&lt;' => '<',
5047
+                '&gt;' => '>',
5048
+                '&amp;lt;' => '<',
5049
+                '&amp;gt;' => '>',
5050
+                '&quot;' => '"',
5051
+                '&apos;' => "'",
5052
+            );
5053
+
5054
+            $content = strtr( $content, $trans );
5055
+
5056
+            $trans   = array(
5057
+                '&#091;' => '&#91;',
5058
+                '&#093;' => '&#93;',
5059
+                '&amp;#091;' => '&#91;',
5060
+                '&amp;#093;' => '&#93;',
5061
+                '&0lt;' => '&lt;',
5062
+                '&0gt;' => '&gt;',
5063
+                '&amp;0lt;' => '&lt;',
5064
+                '&amp;0gt;' => '&gt;',
5065
+            );
5066
+
5067
+            $content = strtr( $content, $trans );
5068
+
5069
+            return $content;
5070
+        }
5160 5071
 
5161
-							$content .= '</div>';
5162
-						}
5072
+        public function block_visibility_fields( $args ) {
5073
+            $value = ! empty( $args['value'] ) ? esc_attr( $args['value'] ) : '';
5074
+            $content = '<div class="bs-vc-rule-template d-none">';
5075
+                $content .= '<div class="p-3 pb-0 mb-3 border border-1 rounded-1 position-relative bs-vc-rule" data-bs-index="BSVCINDEX" >';
5076
+                    $content .= '<div class="row">';
5077
+                        $content .= '<div class="col-sm-12">';
5078
+                            $content .= '<div class="bs-rule-action position-absolute top-0 end-0 p-2 zindex-5"><span class="text-danger c-pointer bs-vc-remove-rule" title="' . esc_attr__( 'Remove Rule', 'ayecode-connect' ) . '"><i class="fas fa-circle-minus fs-6"></i></span></div>';
5079
+                            $content .= aui()->select(
5080
+                                array(
5081
+                                    'id'          => 'bsvc_rule_BSVCINDEX',
5082
+                                    'name'        => 'bsvc_rule_BSVCINDEX',
5083
+                                    'label'       => __( 'Rule', 'ayecode-connect' ),
5084
+                                    'placeholder' => __( 'Select Rule...', 'ayecode-connect' ),
5085
+                                    'class'       => 'bsvc_rule form-select-sm no-select2 mw-100',
5086
+                                    'options'     => sd_visibility_rules_options(),
5087
+                                    'default'     => '',
5088
+                                    'value'       => '',
5089
+                                    'label_type'  => '',
5090
+                                    'select2'     => false,
5091
+                                    'input_group_left' => __( 'Rule:', 'ayecode-connect' ),
5092
+                                    'extra_attributes' => array(
5093
+                                        'data-minimum-results-for-search' => '-1'
5094
+                                    )
5095
+                                )
5096
+                            );
5097
+
5098
+                        $content .= '</div>';
5099
+
5100
+                        if ( class_exists( 'GeoDirectory' ) ) {
5101
+                            $content .= '<div class="col-md-7 col-sm-12">';
5102
+
5103
+                                $content .= aui()->select(
5104
+                                    array(
5105
+                                        'id'          => 'bsvc_gd_field_BSVCINDEX',
5106
+                                        'name'        => 'bsvc_gd_field_BSVCINDEX',
5107
+                                        'label'       => __( 'FIELD', 'ayecode-connect' ),
5108
+                                        'placeholder' => __( 'FIELD', 'ayecode-connect' ),
5109
+                                        'class'       => 'bsvc_gd_field form-select-sm no-select2 mw-100',
5110
+                                        'options'     => sd_visibility_gd_field_options(),
5111
+                                        'default'     => '',
5112
+                                        'value'       => '',
5113
+                                        'label_type'  => '',
5114
+                                        'select2'     => false,
5115
+                                        'element_require'  => '[%bsvc_rule_BSVCINDEX%]=="gd_field"',
5116
+                                        'extra_attributes' => array(
5117
+                                            'data-minimum-results-for-search' => '-1'
5118
+                                        )
5119
+                                    )
5120
+                                );
5121
+
5122
+                            $content .= '</div>';
5123
+                            $content .= '<div class="col-md-5 col-sm-12">';
5124
+
5125
+                                $content .= aui()->select(
5126
+                                    array(
5127
+                                        'id'          => 'bsvc_gd_field_condition_BSVCINDEX',
5128
+                                        'name'        => 'bsvc_gd_field_condition_BSVCINDEX',
5129
+                                        'label'       => __( 'CONDITION', 'ayecode-connect' ),
5130
+                                        'placeholder' => __( 'CONDITION', 'ayecode-connect' ),
5131
+                                        'class'       => 'bsvc_gd_field_condition form-select-sm no-select2 mw-100',
5132
+                                        'options'     => sd_visibility_field_condition_options(),
5133
+                                        'default'     => '',
5134
+                                        'value'       => '',
5135
+                                        'label_type'  => '',
5136
+                                        'select2'     => false,
5137
+                                        'element_require'  => '[%bsvc_rule_BSVCINDEX%]=="gd_field"',
5138
+                                        'extra_attributes' => array(
5139
+                                            'data-minimum-results-for-search' => '-1'
5140
+                                        )
5141
+                                    )
5142
+                                );
5143
+
5144
+                            $content .= '</div>';
5145
+                            $content .= '<div class="col-sm-12">';
5146
+
5147
+                                $content .= aui()->input(
5148
+                                    array(
5149
+                                        'type'            => 'text',
5150
+                                        'id'              => 'bsvc_gd_field_search_BSVCINDEX',
5151
+                                        'name'            => 'bsvc_gd_field_search_BSVCINDEX',
5152
+                                        'label'           => __( 'VALUE TO MATCH', 'ayecode-connect' ),
5153
+                                        'class'           => 'bsvc_gd_field_search form-control-sm',
5154
+                                        'placeholder'     => __( 'VALUE TO MATCH', 'ayecode-connect' ),
5155
+                                        'label_type'      => '',
5156
+                                        'value'           => '',
5157
+                                        'element_require' => '([%bsvc_rule_BSVCINDEX%]=="gd_field" && [%bsvc_gd_field_condition_BSVCINDEX%] && [%bsvc_gd_field_condition_BSVCINDEX%]!="is_empty" && [%bsvc_gd_field_condition_BSVCINDEX%]!="is_not_empty")'
5158
+                                    )
5159
+                                );
5160
+
5161
+                            $content .= '</div>';
5162
+                        }
5163
+
5164
+                    $content .= '</div>';
5165
+
5166
+                    $content .= '<div class="row aui-conditional-field" data-element-require="jQuery(form).find(\'[name=bsvc_rule_BSVCINDEX]\').val()==\'user_roles\'" data-argument="bsvc_user_roles_BSVCINDEX_1"><label for="bsvc_user_roles_BSVCINDEX_1" class="form-label mb-3">' . __( 'Select User Roles:', 'ayecode-connect' ) . '</label>';
5167
+                        $role_options = sd_user_roles_options();
5168
+
5169
+                        $role_option_i = 0;
5170
+                        foreach ( $role_options as $role_option_key => $role_option_name ) {
5171
+                            $role_option_i++;
5172
+
5173
+                            $content .= '<div class="col-sm-6">';
5174
+                            $content .= aui()->input(
5175
+                                array(
5176
+                                    'id'               => 'bsvc_user_roles_BSVCINDEX_' . $role_option_i,
5177
+                                    'name'             => 'bsvc_user_roles_BSVCINDEX[]',
5178
+                                    'type'             => 'checkbox',
5179
+                                    'label'            => $role_option_name,
5180
+                                    'label_type'       => 'hidden',
5181
+                                    'class'            => 'bsvc_user_roles',
5182
+                                    'value'            => $role_option_key,
5183
+                                    'switch'           => 'md',
5184
+                                    'no_wrap'          => true
5185
+                                )
5186
+                            );
5187
+                            $content .= '</div>';
5188
+                        }
5189
+                    $content .= '</div>';
5190
+                $content .= '</div>';
5191
+            $content .= '</div>';
5192
+            $content .= '<form id="bs-vc-modal-form" class="bs-vc-modal-form">';
5193
+            $content .= '<div class="bs-vc-rule-sets"></div>';
5194
+            $content .= '<div class="row"><div class="col-sm-12 text-center pt-1 pb-4"><button type="button" class="btn btn-sm btn-primary d-block w-100 bs-vc-add-rule"><i class="fas fa-plus"></i> ' . __( 'Add Rule', 'ayecode-connect' ) . '</button></div></div>';
5195
+            $content .= '<div class="row"><div class="col-md-6 col-sm-12">';
5196
+            $content .= aui()->select(
5197
+                array(
5198
+                    'id'          => 'bsvc_output',
5199
+                    'name'        => 'bsvc_output',
5200
+                    'label'       => __( 'What should happen if rules met.', 'ayecode-connect' ),
5201
+                    'placeholder' => __( 'Default Output', 'ayecode-connect' ),
5202
+                    'class'       => 'bsvc_output form-select-sm no-select2 mw-100',
5203
+                    'options'     => sd_visibility_output_options(),
5204
+                    'default'     => '',
5205
+                    'value'       => '',
5206
+                    'label_type'  => 'top',
5207
+                    'select2'     => false,
5208
+                    'extra_attributes' => array(
5209
+                        'data-minimum-results-for-search' => '-1'
5210
+                    )
5211
+                )
5212
+            );
5213
+
5214
+            $content .= '</div><div class="col-md-6 col-sm-12">';
5215
+
5216
+            $content .= aui()->select(
5217
+                array(
5218
+                    'id'              => 'bsvc_page',
5219
+                    'name'            => 'bsvc_page',
5220
+                    'label'           => __( 'Page Content', 'ayecode-connect' ),
5221
+                    'placeholder'     => __( 'Select Page ID...', 'ayecode-connect' ),
5222
+                    'class'           => 'bsvc_page form-select-sm no-select2 mw-100',
5223
+                    'options'         => sd_template_page_options(),
5224
+                    'default'         => '',
5225
+                    'value'           => '',
5226
+                    'label_type'      => 'top',
5227
+                    'select2'         => false,
5228
+                    'element_require' => '[%bsvc_output%]=="page"'
5229
+                )
5230
+            );
5231
+
5232
+            $content .= aui()->select(
5233
+                array(
5234
+                    'id'          => 'bsvc_tmpl_part',
5235
+                    'name'        => 'bsvc_tmpl_part',
5236
+                    'label'       => __( 'Template Part', 'ayecode-connect' ),
5237
+                    'placeholder' => __( 'Select Template Part...', 'ayecode-connect' ),
5238
+                    'class'       => 'bsvc_tmpl_part form-select-sm no-select2 mw-100',
5239
+                    'options'     => sd_template_part_options(),
5240
+                    'default'     => '',
5241
+                    'value'       => '',
5242
+                    'label_type'  => 'top',
5243
+                    'select2'     => false,
5244
+                    'element_require'  => '[%bsvc_output%]=="template_part"',
5245
+                    'extra_attributes' => array(
5246
+                        'data-minimum-results-for-search' => '-1'
5247
+                    )
5248
+                )
5249
+            );
5250
+
5251
+            $content .= aui()->select(
5252
+                array(
5253
+                    'id'               => 'bsvc_message_type',
5254
+                    'name'             => 'bsvc_message_type',
5255
+                    'label'            => __( 'Custom Message Type', 'ayecode-connect' ),
5256
+                    'placeholder'      => __( 'Default (none)', 'ayecode-connect' ),
5257
+                    'class'            => 'bsvc_message_type form-select-sm no-select2 mw-100',
5258
+                    'options'          => sd_aui_colors(),
5259
+                    'default'          => '',
5260
+                    'value'            => '',
5261
+                    'label_type'       => 'top',
5262
+                    'select2'          => false,
5263
+                    'element_require'  => '[%bsvc_output%]=="message"',
5264
+                    'extra_attributes' => array(
5265
+                        'data-minimum-results-for-search' => '-1'
5266
+                    )
5267
+                )
5268
+            );
5269
+
5270
+            $content .= '</div><div class="col-sm-12">';
5271
+
5272
+            $content .= aui()->input(
5273
+                array(
5274
+                    'type'            => 'text',
5275
+                    'id'              => 'bsvc_message',
5276
+                    'name'            => 'bsvc_message',
5277
+                    'label'           => '',
5278
+                    'class'           => 'bsvc_message form-control-sm',
5279
+                    'placeholder'     => __( 'CUSTOM MESSAGE TO SHOW', 'ayecode-connect' ),
5280
+                    'label_type'      => '',
5281
+                    'value'           => '',
5282
+                    'form_group_class' => ' ',
5283
+                    'element_require' => '[%bsvc_output%]=="message"',
5284
+                )
5285
+            );
5286
+
5287
+            $content .= '</div></div></form><input type="hidden" id="bsvc_raw_value" name="bsvc_raw_value" value="' . $value . '">';
5288
+
5289
+            return $content;
5290
+        }
5163 5291
 
5164
-					$content .= '</div>';
5165
-
5166
-					$content .= '<div class="row aui-conditional-field" data-element-require="jQuery(form).find(\'[name=bsvc_rule_BSVCINDEX]\').val()==\'user_roles\'" data-argument="bsvc_user_roles_BSVCINDEX_1"><label for="bsvc_user_roles_BSVCINDEX_1" class="form-label mb-3">' . __( 'Select User Roles:', 'ayecode-connect' ) . '</label>';
5167
-						$role_options = sd_user_roles_options();
5168
-
5169
-						$role_option_i = 0;
5170
-						foreach ( $role_options as $role_option_key => $role_option_name ) {
5171
-							$role_option_i++;
5172
-
5173
-							$content .= '<div class="col-sm-6">';
5174
-							$content .= aui()->input(
5175
-								array(
5176
-									'id'               => 'bsvc_user_roles_BSVCINDEX_' . $role_option_i,
5177
-									'name'             => 'bsvc_user_roles_BSVCINDEX[]',
5178
-									'type'             => 'checkbox',
5179
-									'label'            => $role_option_name,
5180
-									'label_type'       => 'hidden',
5181
-									'class'            => 'bsvc_user_roles',
5182
-									'value'            => $role_option_key,
5183
-									'switch'           => 'md',
5184
-									'no_wrap'          => true
5185
-								)
5186
-							);
5187
-							$content .= '</div>';
5188
-						}
5189
-					$content .= '</div>';
5190
-				$content .= '</div>';
5191
-			$content .= '</div>';
5192
-			$content .= '<form id="bs-vc-modal-form" class="bs-vc-modal-form">';
5193
-			$content .= '<div class="bs-vc-rule-sets"></div>';
5194
-			$content .= '<div class="row"><div class="col-sm-12 text-center pt-1 pb-4"><button type="button" class="btn btn-sm btn-primary d-block w-100 bs-vc-add-rule"><i class="fas fa-plus"></i> ' . __( 'Add Rule', 'ayecode-connect' ) . '</button></div></div>';
5195
-			$content .= '<div class="row"><div class="col-md-6 col-sm-12">';
5196
-			$content .= aui()->select(
5197
-				array(
5198
-					'id'          => 'bsvc_output',
5199
-					'name'        => 'bsvc_output',
5200
-					'label'       => __( 'What should happen if rules met.', 'ayecode-connect' ),
5201
-					'placeholder' => __( 'Default Output', 'ayecode-connect' ),
5202
-					'class'       => 'bsvc_output form-select-sm no-select2 mw-100',
5203
-					'options'     => sd_visibility_output_options(),
5204
-					'default'     => '',
5205
-					'value'       => '',
5206
-					'label_type'  => 'top',
5207
-					'select2'     => false,
5208
-					'extra_attributes' => array(
5209
-						'data-minimum-results-for-search' => '-1'
5210
-					)
5211
-				)
5212
-			);
5213
-
5214
-			$content .= '</div><div class="col-md-6 col-sm-12">';
5215
-
5216
-			$content .= aui()->select(
5217
-				array(
5218
-					'id'              => 'bsvc_page',
5219
-					'name'            => 'bsvc_page',
5220
-					'label'           => __( 'Page Content', 'ayecode-connect' ),
5221
-					'placeholder'     => __( 'Select Page ID...', 'ayecode-connect' ),
5222
-					'class'           => 'bsvc_page form-select-sm no-select2 mw-100',
5223
-					'options'         => sd_template_page_options(),
5224
-					'default'         => '',
5225
-					'value'           => '',
5226
-					'label_type'      => 'top',
5227
-					'select2'         => false,
5228
-					'element_require' => '[%bsvc_output%]=="page"'
5229
-				)
5230
-			);
5231
-
5232
-			$content .= aui()->select(
5233
-				array(
5234
-					'id'          => 'bsvc_tmpl_part',
5235
-					'name'        => 'bsvc_tmpl_part',
5236
-					'label'       => __( 'Template Part', 'ayecode-connect' ),
5237
-					'placeholder' => __( 'Select Template Part...', 'ayecode-connect' ),
5238
-					'class'       => 'bsvc_tmpl_part form-select-sm no-select2 mw-100',
5239
-					'options'     => sd_template_part_options(),
5240
-					'default'     => '',
5241
-					'value'       => '',
5242
-					'label_type'  => 'top',
5243
-					'select2'     => false,
5244
-					'element_require'  => '[%bsvc_output%]=="template_part"',
5245
-					'extra_attributes' => array(
5246
-						'data-minimum-results-for-search' => '-1'
5247
-					)
5248
-				)
5249
-			);
5250
-
5251
-			$content .= aui()->select(
5252
-				array(
5253
-					'id'               => 'bsvc_message_type',
5254
-					'name'             => 'bsvc_message_type',
5255
-					'label'            => __( 'Custom Message Type', 'ayecode-connect' ),
5256
-					'placeholder'      => __( 'Default (none)', 'ayecode-connect' ),
5257
-					'class'            => 'bsvc_message_type form-select-sm no-select2 mw-100',
5258
-					'options'          => sd_aui_colors(),
5259
-					'default'          => '',
5260
-					'value'            => '',
5261
-					'label_type'       => 'top',
5262
-					'select2'          => false,
5263
-					'element_require'  => '[%bsvc_output%]=="message"',
5264
-					'extra_attributes' => array(
5265
-						'data-minimum-results-for-search' => '-1'
5266
-					)
5267
-				)
5268
-			);
5269
-
5270
-			$content .= '</div><div class="col-sm-12">';
5271
-
5272
-			$content .= aui()->input(
5273
-				array(
5274
-					'type'            => 'text',
5275
-					'id'              => 'bsvc_message',
5276
-					'name'            => 'bsvc_message',
5277
-					'label'           => '',
5278
-					'class'           => 'bsvc_message form-control-sm',
5279
-					'placeholder'     => __( 'CUSTOM MESSAGE TO SHOW', 'ayecode-connect' ),
5280
-					'label_type'      => '',
5281
-					'value'           => '',
5282
-					'form_group_class' => ' ',
5283
-					'element_require' => '[%bsvc_output%]=="message"',
5284
-				)
5285
-			);
5286
-
5287
-			$content .= '</div></div></form><input type="hidden" id="bsvc_raw_value" name="bsvc_raw_value" value="' . $value . '">';
5288
-
5289
-			return $content;
5290
-		}
5292
+        /**
5293
+         * Handle media_buttons hook.
5294
+         *
5295
+         * @since 1.2.7
5296
+         */
5297
+        public function wp_media_buttons() {
5298
+            global $shortcode_insert_button_once;
5291 5299
 
5292
-		/**
5293
-		 * Handle media_buttons hook.
5294
-		 *
5295
-		 * @since 1.2.7
5296
-		 */
5297
-		public function wp_media_buttons() {
5298
-			global $shortcode_insert_button_once;
5299
-
5300
-			// Fix conflicts with UpSolution Core in header template edit element.
5301
-			if ( defined( 'US_CORE_DIR' ) && ! empty( $_REQUEST['action'] ) && $_REQUEST['action'] == 'us_ajax_hb_get_ebuilder_html' ) {
5302
-				$shortcode_insert_button_once = true;
5303
-			}
5304
-		}
5305
-	}
5300
+            // Fix conflicts with UpSolution Core in header template edit element.
5301
+            if ( defined( 'US_CORE_DIR' ) && ! empty( $_REQUEST['action'] ) && $_REQUEST['action'] == 'us_ajax_hb_get_ebuilder_html' ) {
5302
+                $shortcode_insert_button_once = true;
5303
+            }
5304
+        }
5305
+    }
5306 5306
 }
Please login to merge, or discard this patch.
invoicing.php 1 patch
Indentation   +4 added lines, -4 removed lines patch added patch discarded remove patch
@@ -19,16 +19,16 @@  discard block
 block discarded – undo
19 19
 
20 20
 // Define constants.
21 21
 if ( ! defined( 'WPINV_PLUGIN_FILE' ) ) {
22
-	define( 'WPINV_PLUGIN_FILE', __FILE__ );
22
+    define( 'WPINV_PLUGIN_FILE', __FILE__ );
23 23
 }
24 24
 
25 25
 if ( ! defined( 'WPINV_VERSION' ) ) {
26
-	define( 'WPINV_VERSION', '2.8.20' );
26
+    define( 'WPINV_VERSION', '2.8.20' );
27 27
 }
28 28
 
29 29
 // Include the main Invoicing class.
30 30
 if ( ! class_exists( 'WPInv_Plugin', false ) ) {
31
-	require_once plugin_dir_path( WPINV_PLUGIN_FILE ) . 'includes/class-wpinv.php';
31
+    require_once plugin_dir_path( WPINV_PLUGIN_FILE ) . 'includes/class-wpinv.php';
32 32
 }
33 33
 
34 34
 /**
@@ -43,7 +43,7 @@  discard block
 block discarded – undo
43 43
         $GLOBALS['invoicing'] = new WPInv_Plugin();
44 44
     }
45 45
 
46
-	return $GLOBALS['invoicing'];
46
+    return $GLOBALS['invoicing'];
47 47
 }
48 48
 
49 49
 /**
Please login to merge, or discard this patch.
includes/class-wpinv-privacy.php 1 patch
Indentation   +20 added lines, -20 removed lines patch added patch discarded remove patch
@@ -29,7 +29,7 @@  discard block
 block discarded – undo
29 29
         add_action( 'init', array( $this, 'register_erasers_exporters' ) );
30 30
     }
31 31
 
32
-   /**
32
+    /**
33 33
      * Initial registration of privacy erasers and exporters.
34 34
      *
35 35
      * Due to the use of translation functions, this should run only after plugins loaded.
@@ -49,25 +49,25 @@  discard block
 block discarded – undo
49 49
     public function get_privacy_message() {
50 50
 
51 51
         $content = '<div class="wp-suggested-text">' .
52
-                   '<h2>' . __( 'Invoices and checkout', 'invoicing' ) . '</h2>' .
53
-                   '<p class="privacy-policy-tutorial">' . __( 'Example privacy texts.', 'invoicing' ) . '</p>' .
54
-                   '<p>' . __( 'We collect information about you during the checkout process on our site. This information may include, but is not limited to, your name, email address, phone number, address, IP and any other details that might be requested from you for the purpose of processing your payment and retaining your invoice details for legal reasons.', 'invoicing' ) . '</p>' .
55
-                   '<p>' . __( 'Handling this data also allows us to:', 'invoicing' ) . '</p>' .
56
-                   '<ul>' .
57
-                   '<li>' . __( '- Send you important account/invoice/service information.', 'invoicing' ) . '</li>' .
58
-                   '<li>' . __( '- Estimate taxes based on your location.', 'invoicing' ) . '</li>' .
59
-                   '<li>' . __( '- Respond to your queries or complaints.', 'invoicing' ) . '</li>' .
60
-                   '<li>' . __( '- Process payments and to prevent fraudulent transactions. We do this on the basis of our legitimate business interests.', 'invoicing' ) . '</li>' .
61
-                   '<li>' . __( '- Retain historical payment and invoice history. We do this on the basis of legal obligations.', 'invoicing' ) . '</li>' .
62
-                   '<li>' . __( '- Set up and administer your account, provide technical and/or customer support, and to verify your identity. We do this on the basis of our legitimate business interests.', 'invoicing' ) . '</li>' .
63
-                   '</ul>' .
64
-                   '<p>' . __( 'In addition to collecting information at checkout we may also use and store your contact details when manually creating invoices for require payments relating to prior contractual agreements or agreed terms.', 'invoicing' ) . '</p>' .
65
-                   '<h2>' . __( 'What we share with others', 'invoicing' ) . '</h2>' .
66
-                   '<p>' . __( 'We share information with third parties who help us provide our payment and invoicing services to you; for example --', 'invoicing' ) . '</p>' .
67
-                   '<p class="privacy-policy-tutorial">' . __( 'In this subsection you should list which third party payment processors you’re using to take payments since these may handle customer data. We’ve included PayPal as an example, but you should remove this if you’re not using PayPal.', 'invoicing' ) . '</p>' .
68
-                   '<p>' . __( 'We accept payments through PayPal. When processing payments, some of your data will be passed to PayPal, including information required to process or support the payment, such as the purchase total and billing information.', 'invoicing' ) . '</p>' .
69
-                   '<p>' . __( 'Please see the <a href="https://www.paypal.com/us/webapps/mpp/ua/privacy-full">PayPal Privacy Policy</a> for more details.', 'invoicing' ) . '</p>' .
70
-                   '</div>';
52
+                    '<h2>' . __( 'Invoices and checkout', 'invoicing' ) . '</h2>' .
53
+                    '<p class="privacy-policy-tutorial">' . __( 'Example privacy texts.', 'invoicing' ) . '</p>' .
54
+                    '<p>' . __( 'We collect information about you during the checkout process on our site. This information may include, but is not limited to, your name, email address, phone number, address, IP and any other details that might be requested from you for the purpose of processing your payment and retaining your invoice details for legal reasons.', 'invoicing' ) . '</p>' .
55
+                    '<p>' . __( 'Handling this data also allows us to:', 'invoicing' ) . '</p>' .
56
+                    '<ul>' .
57
+                    '<li>' . __( '- Send you important account/invoice/service information.', 'invoicing' ) . '</li>' .
58
+                    '<li>' . __( '- Estimate taxes based on your location.', 'invoicing' ) . '</li>' .
59
+                    '<li>' . __( '- Respond to your queries or complaints.', 'invoicing' ) . '</li>' .
60
+                    '<li>' . __( '- Process payments and to prevent fraudulent transactions. We do this on the basis of our legitimate business interests.', 'invoicing' ) . '</li>' .
61
+                    '<li>' . __( '- Retain historical payment and invoice history. We do this on the basis of legal obligations.', 'invoicing' ) . '</li>' .
62
+                    '<li>' . __( '- Set up and administer your account, provide technical and/or customer support, and to verify your identity. We do this on the basis of our legitimate business interests.', 'invoicing' ) . '</li>' .
63
+                    '</ul>' .
64
+                    '<p>' . __( 'In addition to collecting information at checkout we may also use and store your contact details when manually creating invoices for require payments relating to prior contractual agreements or agreed terms.', 'invoicing' ) . '</p>' .
65
+                    '<h2>' . __( 'What we share with others', 'invoicing' ) . '</h2>' .
66
+                    '<p>' . __( 'We share information with third parties who help us provide our payment and invoicing services to you; for example --', 'invoicing' ) . '</p>' .
67
+                    '<p class="privacy-policy-tutorial">' . __( 'In this subsection you should list which third party payment processors you’re using to take payments since these may handle customer data. We’ve included PayPal as an example, but you should remove this if you’re not using PayPal.', 'invoicing' ) . '</p>' .
68
+                    '<p>' . __( 'We accept payments through PayPal. When processing payments, some of your data will be passed to PayPal, including information required to process or support the payment, such as the purchase total and billing information.', 'invoicing' ) . '</p>' .
69
+                    '<p>' . __( 'Please see the <a href="https://www.paypal.com/us/webapps/mpp/ua/privacy-full">PayPal Privacy Policy</a> for more details.', 'invoicing' ) . '</p>' .
70
+                    '</div>';
71 71
 
72 72
         return apply_filters( 'wpinv_privacy_policy_content', $content );
73 73
     }
Please login to merge, or discard this patch.