PluginProbe ʕ •ᴥ•ʔ
Photo Gallery by FooGallery : Responsive Image Gallery, Masonry Gallery & Carousel / trunk
Photo Gallery by FooGallery : Responsive Image Gallery, Masonry Gallery & Carousel vtrunk
trunk 1.10.3 2.0.24 2.1.34 2.2.44 2.3.3 2.4.32 3.0.6 3.1.11 3.1.12 3.1.13 3.1.20 3.1.25 3.1.26 3.1.26.1 3.1.26.2
foogallery / freemius / templates / forms / deactivation / form.php
foogallery / freemius / templates / forms / deactivation Last commit date
contact.php 3 years ago form.php 3 years ago index.php 3 years ago retry-skip.php 3 years ago
form.php
667 lines
1 <?php
2 /**
3 * @package Freemius
4 * @copyright Copyright (c) 2015, Freemius, Inc.
5 * @license https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3
6 * @since 1.1.2
7 */
8
9 if ( ! defined( 'ABSPATH' ) ) {
10 exit;
11 }
12
13 /**
14 * @var array $VARS
15 */
16 $fs = freemius( $VARS['id'] );
17 $slug = $fs->get_slug();
18
19 $subscription_cancellation_dialog_box_template_params = $VARS['subscription_cancellation_dialog_box_template_params'];
20 $show_deactivation_feedback_form = $VARS['show_deactivation_feedback_form'];
21 $confirmation_message = $VARS['uninstall_confirmation_message'];
22
23 $is_anonymous = ( ! $fs->is_registered() );
24 $anonymous_feedback_checkbox_html = '';
25
26 $reasons_list_items_html = '';
27 $snooze_select_html = '';
28
29 if ( $show_deactivation_feedback_form ) {
30 $reasons = $VARS['reasons'];
31
32 foreach ( $reasons as $reason ) {
33 $list_item_classes = 'reason' . ( ! empty( $reason['input_type'] ) ? ' has-input' : '' );
34
35 if ( isset( $reason['internal_message'] ) && ! empty( $reason['internal_message'] ) ) {
36 $list_item_classes .= ' has-internal-message';
37 $reason_internal_message = $reason['internal_message'];
38 } else {
39 $reason_internal_message = '';
40 }
41
42 $reason_input_type = ( ! empty( $reason['input_type'] ) ? $reason['input_type'] : '' );
43 $reason_input_placeholder = ( ! empty( $reason['input_placeholder'] ) ? $reason['input_placeholder'] : '' );
44
45 $reason_list_item_html = <<< HTML
46 <li class="{$list_item_classes}"
47 data-input-type="{$reason_input_type}"
48 data-input-placeholder="{$reason_input_placeholder}">
49 <label>
50 <span>
51 <input type="radio" name="selected-reason" value="{$reason['id']}"/>
52 </span>
53 <span>{$reason['text']}</span>
54 </label>
55 <div class="internal-message">{$reason_internal_message}</div>
56 </li>
57 HTML;
58
59 $reasons_list_items_html .= $reason_list_item_html;
60 }
61
62 if ( $is_anonymous ) {
63 $anonymous_feedback_checkbox_html = sprintf(
64 '<label class="anonymous-feedback-label"><input type="checkbox" class="anonymous-feedback-checkbox"> %s</label>',
65 fs_esc_html_inline( 'Anonymous feedback', 'anonymous-feedback', $slug )
66 );
67 }
68
69 $snooze_periods = array(
70 array(
71 'increment' => fs_text_inline( 'hour', $slug ),
72 'quantity' => number_format_i18n(1),
73 'value' => 6 * WP_FS__TIME_10_MIN_IN_SEC,
74 ),
75 array(
76 'increment' => fs_text_inline( 'hours', $slug ),
77 'quantity' => number_format_i18n(24),
78 'value' => WP_FS__TIME_24_HOURS_IN_SEC,
79 ),
80 array(
81 'increment' => fs_text_inline( 'days', $slug ),
82 'quantity' => number_format_i18n(7),
83 'value' => WP_FS__TIME_WEEK_IN_SEC,
84 ),
85 array(
86 'increment' => fs_text_inline( 'days', $slug ),
87 'quantity' => number_format_i18n(30),
88 'value' => 30 * WP_FS__TIME_24_HOURS_IN_SEC,
89 ),
90 );
91
92 $snooze_select_html = '<select>';
93 foreach ($snooze_periods as $period) {
94 $snooze_select_html .= sprintf(
95 '<option value="%s">%s %s</option>',
96 $period['value'],
97 $period['quantity'],
98 $period['increment']
99 );
100 }
101
102 $snooze_select_html .= '</select>';
103 }
104
105 // Aliases.
106 $deactivate_text = fs_text_inline( 'Deactivate', 'deactivate', $slug );
107 $theme_text = fs_text_inline( 'Theme', 'theme', $slug );
108 $activate_x_text = fs_text_inline( 'Activate %s', 'activate-x', $slug );
109
110 $submit_deactivate_text = sprintf(
111 fs_text_inline( 'Submit & %s', 'deactivation-modal-button-submit', $slug ),
112 $fs->is_plugin() ?
113 $deactivate_text :
114 sprintf( $activate_x_text, $theme_text )
115 );
116
117 fs_enqueue_local_style( 'fs_dialog_boxes', '/admin/dialog-boxes.css' );
118
119 if ( ! empty( $subscription_cancellation_dialog_box_template_params ) ) {
120 fs_require_template( 'forms/subscription-cancellation.php', $subscription_cancellation_dialog_box_template_params );
121 }
122 ?>
123 <script type="text/javascript">
124 (function ($) {
125 var reasonsHtml = <?php echo json_encode( $reasons_list_items_html ) ?>,
126 modalHtml =
127 '<div class="fs-modal fs-modal-deactivation-feedback<?php echo empty( $confirmation_message ) ? ' no-confirmation-message' : ''; ?>">'
128 + ' <div class="fs-modal-dialog">'
129 + ' <div class="fs-modal-header">'
130 + ' <h4><?php fs_esc_attr_echo_inline( 'Quick Feedback', 'quick-feedback' , $slug ) ?></h4>'
131 + ' </div>'
132 + ' <div class="fs-modal-body">'
133 + ' <div class="fs-modal-panel" data-panel-id="confirm"><p><?php echo $confirmation_message; ?></p></div>'
134 + ' <div class="fs-modal-panel active" data-panel-id="reasons"><h3><strong><?php echo esc_js( sprintf( fs_text_inline( 'If you have a moment, please let us know why you are %s', 'deactivation-share-reason' , $slug ), ( $fs->is_plugin() ? fs_text_inline( 'deactivating', 'deactivating', $slug ) : fs_text_inline( 'switching', 'switching', $slug ) ) ) ) ?>:</strong></h3><ul id="reasons-list">' + reasonsHtml + '</ul></div>'
135 + ' </div>'
136 + ' <div class="fs-modal-footer">'
137 + ' <?php echo $anonymous_feedback_checkbox_html ?>'
138 + ' <label style="display: none" class="feedback-from-snooze-label"><input type="checkbox" class="feedback-from-snooze-checkbox"> <span><?php fs_esc_js_echo_inline( 'Snooze this panel during troubleshooting', 'snooze-panel-during-troubleshooting', $slug ) ?></span><span style="display: none"><?php fs_esc_js_echo_inline( 'Snooze this panel for', 'snooze-panel-for', $slug ) ?> <?php echo $snooze_select_html ?></span></label>'
139 + ' <a href="#" class="button button-secondary button-deactivate"></a>'
140 + ' <a href="#" class="button button-secondary button-close"><?php fs_esc_js_echo_inline( 'Cancel', 'cancel', $slug ) ?></a>'
141 + ' </div>'
142 + ' </div>'
143 + '</div>',
144 $modal = $(modalHtml),
145 selectedReasonID = false,
146 redirectLink = '',
147 $anonymousFeedback = $modal.find( '.anonymous-feedback-label' ),
148 $feedbackSnooze = $modal.find( '.feedback-from-snooze-label' ),
149 isAnonymous = <?php echo ( $is_anonymous ? 'true' : 'false' ); ?>,
150 otherReasonID = <?php echo Freemius::REASON_OTHER; ?>,
151 dontShareDataReasonID = <?php echo Freemius::REASON_DONT_LIKE_TO_SHARE_MY_INFORMATION; ?>,
152 deleteThemeUpdateData = <?php echo $fs->is_theme() && $fs->is_premium() && ! $fs->has_any_active_valid_license() ? 'true' : 'false' ?>,
153 $subscriptionCancellationModal = $( '.fs-modal-subscription-cancellation-<?php echo $fs->get_id() ?>' ),
154 showDeactivationFeedbackForm = <?php echo ( $show_deactivation_feedback_form ? 'true' : 'false' ) ?>,
155 $body = $( 'body' );
156
157 $modal.appendTo( $body );
158
159 if ( 0 !== $subscriptionCancellationModal.length ) {
160 $subscriptionCancellationModal.on( '<?php echo $fs->get_action_tag( 'subscription_cancellation_action' ) ?>', function( evt, cancelSubscription ) {
161 var shouldDeactivateModule = ( $modal.hasClass( 'no-confirmation-message' ) && ! showDeactivationFeedbackForm );
162
163 if ( false === cancelSubscription ) {
164 if ( ! shouldDeactivateModule ) {
165 showModal();
166 }
167
168 $subscriptionCancellationModal.trigger( 'closeModal' );
169
170 if ( shouldDeactivateModule ) {
171 deactivateModule();
172 }
173 } else {
174 var $errorMessage = $subscriptionCancellationModal.find( '.notice-error' );
175
176 <?php
177 $subscription_cancellation_context = $fs->is_paid_trial() ?
178 fs_text_inline( 'trial', 'trial', $slug ) :
179 fs_text_inline( 'subscription', 'subscription', $slug );
180 ?>
181
182 $.ajax({
183 url : <?php echo Freemius::ajax_url() ?>,
184 method : 'POST',
185 data : {
186 action : '<?php echo $fs->get_ajax_action( 'cancel_subscription_or_trial' ) ?>',
187 security : '<?php echo $fs->get_ajax_security( 'cancel_subscription_or_trial' ) ?>',
188 module_id: '<?php echo $fs->get_id() ?>'
189 },
190 beforeSend: function() {
191 $errorMessage.hide();
192
193 $subscriptionCancellationModal.find( '.fs-modal-footer .button' ).addClass( 'disabled' );
194 $subscriptionCancellationModal.find( '.fs-modal-footer .button-primary' ).text( '<?php echo esc_js(
195 sprintf( fs_text_inline( 'Cancelling %s...', 'cancelling-x' , $slug ), $subscription_cancellation_context )
196 ) ?>' );
197 },
198 success: function( result ) {
199 if ( result.success ) {
200 $subscriptionCancellationModal.removeClass( 'has-subscription-actions' );
201 $subscriptionCancellationModal.find( '.fs-modal-footer .button-primary' ).removeClass( 'warn' );
202
203 $subscriptionCancellationModal.remove();
204
205 if ( ! shouldDeactivateModule ) {
206 showModal();
207 } else {
208 deactivateModule();
209 }
210 } else {
211 $errorMessage.find( '> p' ).html( result.error );
212 $errorMessage.show();
213
214 $subscriptionCancellationModal.find( '.fs-modal-footer .button' ).removeClass( 'disabled' );
215 $subscriptionCancellationModal.find( '.fs-modal-footer .button-primary' ).html( <?php echo json_encode( sprintf(
216 fs_text_inline( 'Cancel %s & Proceed', 'cancel-x-and-proceed', $slug ),
217 ucfirst( $subscription_cancellation_context )
218 ) ) ?> );
219 }
220 }
221 });
222 }
223 });
224 }
225
226 registerEventHandlers();
227
228 function registerEventHandlers() {
229 $body.on( 'click', '#the-list .deactivate > a', function ( evt ) {
230 if ( 0 === $( this ).next( '[data-module-id=<?php echo $fs->get_id() ?>].fs-module-id' ).length ) {
231 return true;
232 }
233
234 evt.preventDefault();
235
236 redirectLink = $(this).attr('href');
237
238 if ( 0 == $subscriptionCancellationModal.length ) {
239 showModal();
240 } else {
241 $subscriptionCancellationModal.trigger( 'showModal' );
242 }
243 });
244
245 <?php
246 if ( ! $fs->is_plugin() ) {
247 /**
248 * For "theme" module type, the modal is shown when the current user clicks on
249 * the "Activate" button of any other theme. The "Activate" button is actually
250 * a link to the "Themes" page (/wp-admin/themes.php) containing query params
251 * that tell WordPress to deactivate the current theme and activate a different theme.
252 *
253 * @author Leo Fajardo (@leorw)
254 * @since 1.2.2
255 *
256 * @since 1.2.2.7 Don't trigger the deactivation feedback form if activating the premium version of the theme.
257 */
258 ?>
259 $('body').on('click', '.theme-browser .theme:not([data-slug=<?php echo $fs->get_premium_slug() ?>]) .theme-actions .button.activate', function (evt) {
260 evt.preventDefault();
261
262 redirectLink = $(this).attr('href');
263
264 if ( 0 != $subscriptionCancellationModal.length ) {
265 $subscriptionCancellationModal.trigger( 'showModal' );
266 } else {
267 if ( $modal.hasClass( 'no-confirmation-message' ) && ! showDeactivationFeedbackForm ) {
268 deactivateModule();
269 } else {
270 showModal();
271 }
272 }
273 });
274 <?php
275 } ?>
276
277 $modal.on('input propertychange', '.reason-input input', function () {
278 var reason = $(this).val().trim();
279
280 /**
281 * If reason is not empty, remove the error-message class of the message container
282 * to change the message color back to default.
283 */
284 if (reason.length > 0) {
285 $('.message').removeClass('error-message');
286 }
287
288 toggleDeactivationButtonPrimary( reason.length > 0 );
289
290 changeDeactivateButtonText();
291 });
292
293 $modal.on('blur', '.reason-input input', function () {
294 var $userReason = $(this);
295
296 setTimeout(function () {
297 if (!isOtherReasonSelected()) {
298 return;
299 }
300
301 /**
302 * If reason is empty, add the error-message class to the message container
303 * to change the message color to red.
304 */
305 if (0 === $userReason.val().trim().length) {
306 $('.message').addClass('error-message');
307 changeDeactivateButtonText();
308 }
309 }, 150);
310 });
311
312 $modal.on('click', '.fs-modal-footer .button', function (evt) {
313 evt.preventDefault();
314
315 if ($(this).hasClass('disabled')) {
316 return;
317 }
318
319 var _parent = $(this).parents('.fs-modal:first');
320 var _this = $(this);
321
322 if (_this.hasClass('allow-deactivate')) {
323 var
324 $radio = $modal.find('input[type="radio"]:checked'),
325 isReasonSelected = (0 < $radio.length),
326 userReason = '';
327
328 if ( isReasonSelected ) {
329 var $selectedReason = $radio.parents('li:first'),
330 $reasonInput = $selectedReason.find('textarea, input[type="text"]');
331
332 if ( 0 < $reasonInput.length ) {
333 userReason = $reasonInput.val().trim();
334 }
335 }
336
337 if ( otherReasonID == selectedReasonID && '' === userReason ) {
338 // If the 'Other' is selected and a reason is not provided (aka it's empty), treat it as if a reason wasn't selected at all.
339 isReasonSelected = false;
340 }
341
342 _parent.find( '.fs-modal-footer .button' ).addClass( 'disabled' );
343
344 if ( ! isReasonSelected ) {
345 if ( ! deleteThemeUpdateData ) {
346 // If no selected reason, just deactivate the plugin.
347 window.location.href = redirectLink;
348 } else {
349 $.ajax({
350 url : <?php echo Freemius::ajax_url() ?>,
351 method : 'POST',
352 data : {
353 action : '<?php echo $fs->get_ajax_action( 'delete_theme_update_data' ) ?>',
354 security : '<?php echo $fs->get_ajax_security( 'delete_theme_update_data' ) ?>',
355 module_id: '<?php echo $fs->get_id() ?>'
356 },
357 beforeSend: function() {
358 _parent.find( '.fs-modal-footer .button-deactivate' ).text( '<?php echo esc_js( fs_text_inline( 'Processing', 'processing', $slug ) ) ?>...' );
359 },
360 complete : function() {
361 window.location.href = redirectLink;
362 }
363 });
364 }
365
366 return;
367 }
368
369 var snoozePeriod = 0,
370 shouldSnooze = $feedbackSnooze.find( '.feedback-from-snooze-checkbox' ).is( ':checked' );
371
372 if ( shouldSnooze && <?php echo Freemius::REASON_TEMPORARY_DEACTIVATION ?> == selectedReasonID ) {
373 snoozePeriod = parseInt($feedbackSnooze.find('select').val(), 10);
374 }
375
376 $.ajax({
377 url : <?php echo Freemius::ajax_url() ?>,
378 method : 'POST',
379 data : {
380 action : '<?php echo $fs->get_ajax_action( 'submit_uninstall_reason' ) ?>',
381 security : '<?php echo $fs->get_ajax_security( 'submit_uninstall_reason' ) ?>',
382 module_id : '<?php echo $fs->get_id() ?>',
383 reason_id : $radio.val(),
384 reason_info : userReason,
385 is_anonymous : isAnonymousFeedback(),
386 snooze_period: snoozePeriod
387 },
388 beforeSend: function () {
389 _parent.find('.fs-modal-footer .button-deactivate').text('<?php echo esc_js( fs_text_inline( 'Processing', 'processing', $slug ) ) ?>...');
390 },
391 complete : function () {
392 // Do not show the dialog box, deactivate the plugin.
393 window.location.href = redirectLink;
394 }
395 });
396 } else if (_this.hasClass('button-deactivate')) {
397 // Change the Deactivate button's text and show the reasons panel.
398 _parent.find('.button-deactivate').addClass('allow-deactivate');
399
400 if ( showDeactivationFeedbackForm ) {
401 showPanel('reasons');
402 } else {
403 deactivateModule();
404 }
405 }
406 });
407
408 $modal.on('click', 'input[type="radio"]', function () {
409 var $selectedReasonOption = $( this );
410
411 // If the selection has not changed, do not proceed.
412 if (selectedReasonID === $selectedReasonOption.val())
413 return;
414
415 selectedReasonID = $selectedReasonOption.val();
416
417 if ( isAnonymous ) {
418 if ( isReasonSelected( dontShareDataReasonID ) ) {
419 $anonymousFeedback.hide();
420 } else {
421 $anonymousFeedback.show();
422 }
423 }
424
425 var _parent = $(this).parents('li:first');
426
427 $modal.find('.reason-input').remove();
428 $modal.find( '.internal-message' ).hide();
429 $modal.find('.button-deactivate').html('<?php echo esc_js( $submit_deactivate_text ) ?>');
430
431 if ( _parent.hasClass( 'has-internal-message' ) ) {
432 _parent.find( '.internal-message' ).show();
433 }
434
435 if ( ! _parent.hasClass('has-input') ) {
436 toggleDeactivationButtonPrimary( true );
437 } else {
438 toggleDeactivationButtonPrimary( false );
439
440 var inputType = _parent.data('input-type'),
441 inputPlaceholder = _parent.data('input-placeholder'),
442 reasonInputHtml = '<div class="reason-input"><span class="message"></span>' + ( ( 'textfield' === inputType ) ? '<input type="text" maxlength="128" />' : '<textarea rows="5" maxlength="128"></textarea>' ) + '</div>';
443
444 _parent.append($(reasonInputHtml));
445 _parent.find('input, textarea').attr('placeholder', inputPlaceholder).focus();
446
447 if (isOtherReasonSelected()) {
448 showMessage('<?php echo esc_js( fs_text_inline( 'Kindly tell us the reason so we can improve.', 'ask-for-reason-message' , $slug ) ); ?>');
449 changeDeactivateButtonText();
450 }
451 }
452
453 $anonymousFeedback.toggle( <?php echo Freemius::REASON_TEMPORARY_DEACTIVATION ?> != selectedReasonID );
454 $feedbackSnooze.toggle( <?php echo Freemius::REASON_TEMPORARY_DEACTIVATION ?> == selectedReasonID );
455
456 if ( <?php echo Freemius::REASON_TEMPORARY_DEACTIVATION ?> == selectedReasonID ) {
457 updateDeactivationButtonOnTrouble();
458 }
459 });
460
461 var toggleDeactivationButtonPrimary = function ( isPrimary ) {
462 if ( isPrimary ) {
463 $modal.find('.button-deactivate')
464 .removeClass( 'button-secondary' )
465 .addClass( 'button-primary' );
466 } else {
467 $modal.find('.button-deactivate')
468 .addClass( 'button-secondary' )
469 .removeClass( 'button-primary' );
470 }
471 };
472
473 var snooze = false;
474
475 var updateDeactivationButtonOnTrouble = function () {
476 if ( snooze ) {
477 $modal.find('.button-deactivate').html('<?php echo esc_js( sprintf(
478 fs_text_inline( 'Snooze & %s', 'snooze-modal-button-submit' , $slug ),
479 $fs->is_plugin() ?
480 $deactivate_text :
481 sprintf( $activate_x_text, $theme_text )
482 ) ) ?>');
483 } else {
484 $modal.find('.button-deactivate').html('<?php echo esc_js(
485 $fs->is_plugin() ?
486 $deactivate_text :
487 sprintf( $activate_x_text, $theme_text )
488 ) ?>');
489 }
490 };
491
492 $feedbackSnooze.on( 'click', 'input', function () {
493 var $spans = $feedbackSnooze.find( 'span' );
494
495 snooze = ( ! snooze );
496
497 $( $spans[0] ).toggle();
498 $( $spans[1] ).toggle();
499
500 updateDeactivationButtonOnTrouble();
501 });
502
503 // If the user has clicked outside the window, cancel it.
504 $modal.on('click', function (evt) {
505 var $target = $(evt.target);
506
507 // If the user has clicked anywhere in the modal dialog, just return.
508 if ($target.hasClass('fs-modal-body') || $target.hasClass('fs-modal-footer')) {
509 return;
510 }
511
512 // If the user has not clicked the close button and the clicked element is inside the modal dialog, just return.
513 if (
514 ! $target.hasClass( 'button-close' ) &&
515 ( $target.parents( '.fs-modal-body' ).length > 0 || $target.parents( '.fs-modal-footer' ).length > 0 )
516 ) {
517 return;
518 }
519
520 closeModal();
521
522 return false;
523 });
524 }
525
526 function isAnonymousFeedback() {
527 if ( ! isAnonymous ) {
528 return false;
529 }
530
531 return ( isReasonSelected( dontShareDataReasonID ) || $anonymousFeedback.find( 'input' ).prop( 'checked' ) );
532 }
533
534 function isReasonSelected( reasonID ) {
535 // Get the selected radio input element.
536 var $selectedReasonOption = $modal.find('input[type="radio"]:checked');
537
538 return ( reasonID == $selectedReasonOption.val() );
539 }
540
541 function isOtherReasonSelected() {
542 return isReasonSelected( otherReasonID );
543 }
544
545 function showModal() {
546 resetModal();
547
548 // Display the dialog box.
549 $modal.addClass('active');
550
551 $('body').addClass('has-fs-modal');
552 }
553
554 function closeModal() {
555 $modal.removeClass('active');
556
557 $('body').removeClass('has-fs-modal');
558 }
559
560 function resetModal() {
561 selectedReasonID = false;
562
563 // Uncheck all radio buttons.
564 $modal.find('input[type="radio"]').prop('checked', false);
565
566 // Remove all input fields ( textfield, textarea ).
567 $modal.find('.reason-input').remove();
568
569 $modal.find('.message').hide();
570
571 if ( isAnonymous ) {
572 $anonymousFeedback.find( 'input' ).prop( 'checked', <?php echo $fs->apply_filters( 'default_to_anonymous_feedback', false ) ? 'true' : 'false' ?> );
573
574 // Hide, since by default there is no selected reason.
575 $anonymousFeedback.hide();
576 }
577
578 var $deactivateButton = $modal.find('.button-deactivate');
579
580 /*
581 * If the modal dialog has no confirmation message, that is, it has only one panel, then ensure
582 * that clicking the deactivate button will actually deactivate the plugin.
583 */
584 if ( $modal.hasClass( 'no-confirmation-message' ) ) {
585 $deactivateButton.addClass( 'allow-deactivate' );
586
587 showPanel( 'reasons' );
588 } else {
589 $deactivateButton.removeClass( 'allow-deactivate' );
590
591 showPanel( 'confirm' );
592 }
593 }
594
595 function showMessage(message) {
596 $modal.find('.message').text(message).show();
597 }
598
599 /**
600 * @author Xiaheng Chen (@xhchen)
601 *
602 * @since 2.4.2
603 */
604 function changeDeactivateButtonText() {
605 if ( ! isOtherReasonSelected()) {
606 return;
607 }
608
609 var
610 $userReason = $modal.find('.reason-input input'),
611 $deactivateButton = $modal.find('.button-deactivate');
612
613 if (0 === $userReason.val().trim().length) {
614 // If the reason is empty, just change the text to 'Deactivate' (plugin) or 'Activate themeX' (theme).
615 $deactivateButton.html('<?php echo
616 $fs->is_plugin() ?
617 $deactivate_text :
618 sprintf( $activate_x_text, $theme_text )
619 ?>');
620 } else {
621 $deactivateButton.html('<?php echo esc_js( $submit_deactivate_text ) ?>');
622 }
623 }
624
625 function showPanel(panelType) {
626 $modal.find( '.fs-modal-panel' ).removeClass( 'active' );
627 $modal.find( '[data-panel-id="' + panelType + '"]' ).addClass( 'active' );
628
629 updateButtonLabels();
630 }
631
632 function updateButtonLabels() {
633 var $deactivateButton = $modal.find( '.button-deactivate' );
634
635 // Reset the deactivate button's text.
636 if ( 'confirm' === getCurrentPanel() ) {
637 $deactivateButton.text( <?php echo json_encode( sprintf(
638 fs_text_inline( 'Yes - %s', 'deactivation-modal-button-confirm', $slug ),
639 $fs->is_plugin() ?
640 $deactivate_text :
641 sprintf( $activate_x_text, $theme_text )
642 ) ) ?> );
643 } else {
644 $deactivateButton.html( <?php echo json_encode( sprintf(
645 fs_text_inline('Skip & %s', 'skip-and-x', $slug ),
646 $fs->is_plugin() ?
647 $deactivate_text :
648 sprintf( $activate_x_text, $theme_text )
649 ) ) ?> );
650 }
651 }
652
653 function getCurrentPanel() {
654 return $modal.find('.fs-modal-panel.active').attr('data-panel-id');
655 }
656
657 /**
658 * @author Leo Fajardo (@leorw)
659 *
660 * @since 2.3.0
661 */
662 function deactivateModule() {
663 window.location.href = redirectLink;
664 }
665 })(jQuery);
666 </script>
667