Plugin Directory

Changeset 3458319


Ignore:
Timestamp:
02/10/2026 06:01:51 PM (7 weeks ago)
Author:
bbioon
Message:

version 2.2.3

Location:
merchant
Files:
1130 added
30 edited

Legend:

Unmodified
Added
Removed
  • merchant/trunk/admin/classes/class-merchant-plugin-installer.php

    r3232601 r3458319  
    7474
    7575        /**
    76          * Install external plugin.
    77          * This method is responsible for installing plugins from external sources.
     76         * Install and activate an external plugin.
     77         * Handles three states: already active, installed but inactive, not installed.
    7878         *
    7979         * @return void
    8080         */
    8181        public function install_external_plugin() {
     82            list( $url, $plugin_name ) = $this->validate_install_request();
     83
     84            $state = $this->get_plugin_state( $plugin_name );
     85
     86            // Already active — nothing to do.
     87            if ( 'active' === $state ) {
     88                wp_send_json_success( array( 'message' => esc_html__( 'Plugin is already active.', 'merchant' ) ) );
     89            }
     90
     91            // Not installed — download and install first.
     92            if ( 'not_installed' === $state ) {
     93                $install_result = $this->install_from_url( $url );
     94
     95                if ( is_wp_error( $install_result ) ) {
     96                    wp_send_json_error( array( 'message' => $install_result->get_error_message() ) );
     97                }
     98            }
     99
     100            // Activate the plugin (covers both 'installed' and freshly installed).
     101            $activate_result = $this->activate( $plugin_name );
     102
     103            if ( is_wp_error( $activate_result ) ) {
     104                wp_send_json_error( array( 'message' => $activate_result->get_error_message() ) );
     105            }
     106
     107            wp_send_json_success( array( 'message' => esc_html__( 'Plugin activated successfully.', 'merchant' ) ) );
     108        }
     109
     110        /**
     111         * Validate the install request.
     112         * Checks nonce, capability, and required parameters.
     113         * Sends a JSON error and dies if validation fails.
     114         *
     115         * @return array{0: string, 1: string} The validated URL and plugin name.
     116         */
     117        private function validate_install_request() {
    82118            check_ajax_referer( 'merchant_plugin_installer_nonce', 'nonce' );
    83119
     
    90126            }
    91127
    92             $url = esc_url_raw( $_POST['url'] );
    93            
    94128            if ( empty( $_POST['plugin_name'] ) ) {
    95129                wp_send_json_error( array( 'message' => esc_html__( 'Plugin name is required.', 'merchant' ) ) );
    96130            }
    97131
    98             $plugin_name = sanitize_text_field( wp_unslash( $_POST['plugin_name'] ) );
    99 
     132            return array(
     133                esc_url_raw( $_POST['url'] ), // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
     134                sanitize_text_field( wp_unslash( $_POST['plugin_name'] ) ),
     135            );
     136        }
     137
     138        /**
     139         * Determine the current state of a plugin.
     140         *
     141         * @param string $plugin_name The plugin basename (e.g. 'athemes-patcher/athemes-patcher.php').
     142         *
     143         * @return string One of 'active', 'installed', or 'not_installed'.
     144         */
     145        private function get_plugin_state( $plugin_name ) {
     146            if ( is_plugin_active( $plugin_name ) ) {
     147                return 'active';
     148            }
     149
     150            $plugin_file = WP_PLUGIN_DIR . '/' . $plugin_name;
     151
     152            if ( file_exists( $plugin_file ) ) {
     153                return 'installed';
     154            }
     155
     156            return 'not_installed';
     157        }
     158
     159        /**
     160         * Download and install a plugin from an external URL.
     161         * Uses `overwrite_package` to handle leftover directories from failed installs.
     162         *
     163         * @param string $url The URL to the plugin ZIP file.
     164         *
     165         * @return true|WP_Error True on success, WP_Error on failure.
     166         */
     167        private function install_from_url( $url ) {
    100168            include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
    101169            require_once MERCHANT_DIR . 'admin/classes/class-merchant-silent-upgrader-skin.php';
     170
     171            $skin     = new Merchant_Silent_Upgrader_Skin();
     172            $upgrader = new Plugin_Upgrader( $skin );
     173            $result   = $upgrader->install( $url, array( 'overwrite_package' => true ) );
     174
     175            if ( is_wp_error( $result ) ) {
     176                return new WP_Error(
     177                    'merchant_install_failed',
     178                    $this->get_user_friendly_error( $result )
     179                );
     180            }
     181
     182            if ( ! $result ) {
     183                $captured = $skin->get_captured_errors();
     184                $error_message = ! empty( $captured ) ? $captured[0] : '';
     185               
     186                $error = new WP_Error( 'download_failed', $error_message );
     187               
     188                return new WP_Error(
     189                    'merchant_install_failed',
     190                    $this->get_user_friendly_error( $error )
     191                );
     192            }
     193
     194            return true;
     195        }
     196
     197        /**
     198         * Get a user-friendly error message based on the error type.
     199         *
     200         * @param WP_Error $error The WP_Error object.
     201         *
     202         * @return string User-friendly error message.
     203         */
     204        private function get_user_friendly_error( WP_Error $error ) {
     205            $error_code = $error->get_error_code();
     206            $error_message = $error->get_error_message();
     207            $error_data = $error->get_error_data();
    102208           
    103             $upgrader = new Plugin_Upgrader( new Merchant_Silent_Upgrader_Skin() );
    104             $install = $upgrader->install( $url );       
    105 
    106             if ( is_wp_error( $install ) ) {
    107                 wp_send_json_error( array( 'message' => $install->get_error_message() ) );
    108             }
    109 
    110             $activate = activate_plugin( $plugin_name );
    111 
    112             if ( is_wp_error( $activate ) ) {
    113                 wp_send_json_error( array( 'message' => $activate->get_error_message() ) );
    114             }
    115 
    116             wp_send_json_success(
    117                 array(
    118                     'message' => esc_html__( 'Plugin activated successfully.', 'merchant' ),
    119                 )
    120             );
     209            // Ensure error_message is a string for strpos() calls
     210            if ( ! is_string( $error_message ) ) {
     211                $error_message = '';
     212            }
     213           
     214            // Extract HTTP status code if available
     215            $http_code = null;
     216            if ( is_array( $error_data ) && isset( $error_data['status'] ) && is_int( $error_data['status'] ) ) {
     217                $http_code = $error_data['status'];
     218            }
     219           
     220            // Check for 403 Forbidden (server blocking the download)
     221            if ( 403 === $http_code || strpos( $error_message, '403' ) !== false || strpos( $error_message, 'Forbidden' ) !== false ) {
     222                return esc_html__( 'The download is currently unavailable. Please try again later or contact support for assistance.', 'merchant' );
     223            }
     224
     225            // Check for server errors (500, 502, 503)
     226            if ( in_array( $http_code, array( 500, 502, 503 ), true ) ||
     227                strpos( $error_message, '500' ) !== false ||
     228                strpos( $error_message, '502' ) !== false ||
     229                strpos( $error_message, '503' ) !== false ||
     230                strpos( $error_message, 'Internal Server Error' ) !== false ||
     231                strpos( $error_message, 'Bad Gateway' ) !== false ||
     232                strpos( $error_message, 'Service Unavailable' ) !== false ) {
     233                return esc_html__( 'The download server is temporarily unavailable. Please try again in a few minutes.', 'merchant' );
     234            }
     235
     236            // Check for rate limiting (429)
     237            if ( 429 === $http_code || strpos( $error_message, '429' ) !== false || strpos( $error_message, 'Too Many Requests' ) !== false ) {
     238                return esc_html__( 'Too many download requests. Please wait a moment and try again.', 'merchant' );
     239            }
     240
     241            // Check for network/connectivity errors
     242            if ( in_array( $error_code, array( 'http_request_failed', 'http_no_url', 'http_404' ), true ) ) {
     243                return esc_html__( 'The server could not connect to the download source. Please try again or contact your hosting provider if the problem persists.', 'merchant' );
     244            }
     245
     246            // Check for download failures
     247            if ( strpos( $error_message, 'Download failed' ) !== false ) {
     248                return esc_html__( 'The download could not be completed. Please try again or install the plugin manually.', 'merchant' );
     249            }
     250
     251            // Generic fallback
     252            return esc_html__( 'Installation failed. Please try again or contact support if the problem persists.', 'merchant' );
     253        }
     254
     255        /**
     256         * Activate a plugin.
     257         *
     258         * @param string $plugin_name The plugin basename (e.g. 'athemes-patcher/athemes-patcher.php').
     259         *
     260         * @return true|WP_Error True on success, WP_Error on failure.
     261         */
     262        private function activate( $plugin_name ) {
     263            $result = activate_plugin( $plugin_name );
     264
     265            if ( is_wp_error( $result ) ) {
     266                return $result;
     267            }
     268
     269            return true;
    121270        }
    122271    }
  • merchant/trunk/admin/classes/class-merchant-silent-upgrader-skin.php

    r3232601 r3458319  
    33/**
    44 * Silent Upgrader Skin.
    5  * The main purpose of this class is to suppress the output of the upgrader.
     5 * Suppresses the output of the upgrader while capturing errors for logging.
    66 *
    77 * @package Merchant
     
    1717if ( ! class_exists( 'Merchant_Silent_Upgrader_Skin' ) ) {
    1818    class Merchant_Silent_Upgrader_Skin extends WP_Upgrader_Skin {
     19
     20        /**
     21         * Captured errors during the upgrade process.
     22         *
     23         * @var string[]
     24         */
     25        private $captured_errors = array();
     26
     27        /**
     28         * Suppress header output.
     29         *
     30         * @return void
     31         */
    1932        public function header() {}
     33
     34        /**
     35         * Suppress footer output.
     36         *
     37         * @return void
     38         */
    2039        public function footer() {}
    21         public function error( $errors ) {}
     40
     41        /**
     42         * Capture errors instead of outputting them.
     43         *
     44         * @param string|WP_Error $errors The error(s) to capture.
     45         *
     46         * @return void
     47         */
     48        public function error( $errors ) {
     49            if ( is_string( $errors ) ) {
     50                $this->captured_errors[] = $errors;
     51            } elseif ( is_wp_error( $errors ) ) {
     52                foreach ( $errors->get_error_messages() as $message ) {
     53                    $this->captured_errors[] = $message;
     54                }
     55            }
     56        }
     57
     58        /**
     59         * Suppress feedback output.
     60         *
     61         * @param string $feedback The feedback string.
     62         * @param mixed  ...$args Optional text replacements.
     63         *
     64         * @return void
     65         */
    2266        public function feedback( $feedback, ...$args ) {}
     67
     68        /**
     69         * Get all captured errors.
     70         *
     71         * @return string[]
     72         */
     73        public function get_captured_errors() {
     74            return $this->captured_errors;
     75        }
    2376    }
    2477}
  • merchant/trunk/assets/css/admin/metabox.css

    r3354953 r3458319  
     1.merchant-pcr-app * {
     2  outline: none;
     3  border: none;
     4  -webkit-box-sizing: border-box;
     5          box-sizing: border-box;
     6}
     7
     8.merchant-pcr-app input:focus,
     9.merchant-pcr-app input.pcr-active,
     10.merchant-pcr-app button:focus,
     11.merchant-pcr-app button.pcr-active {
     12  -webkit-box-shadow: none;
     13          box-shadow: none;
     14}
     15
     16.merchant-pcr-app .pcr-palette:focus,
     17.merchant-pcr-app .pcr-slider:focus {
     18  -webkit-box-shadow: none;
     19          box-shadow: none;
     20}
     21
     22.merchant-pcr-app {
     23  position: fixed;
     24  z-index: 999999;
     25  top: 0;
     26  left: 0;
     27  display: -webkit-box;
     28  display: -ms-flexbox;
     29  display: flex;
     30  -webkit-box-orient: vertical;
     31  -webkit-box-direction: normal;
     32      -ms-flex-direction: column;
     33          flex-direction: column;
     34  border-radius: 0.1em;
     35  opacity: 0;
     36  visibility: hidden;
     37  -webkit-transition: opacity 0.2s, visibility 0s 0.2s;
     38  transition: opacity 0.2s, visibility 0s 0.2s;
     39  -webkit-box-shadow: 0 0.15em 1.5em 0 rgba(0, 0, 0, 0.1), 0 0 1em 0 rgba(0, 0, 0, 0.03);
     40          box-shadow: 0 0.15em 1.5em 0 rgba(0, 0, 0, 0.1), 0 0 1em 0 rgba(0, 0, 0, 0.03);
     41  background: #fff;
     42}
     43
     44.merchant-pcr-app.visible {
     45  visibility: visible;
     46  opacity: 1;
     47  -webkit-transition: opacity 0.2s;
     48  transition: opacity 0.2s;
     49}
     50
     51.merchant-pcr-app .pcr-swatches {
     52  display: -webkit-box;
     53  display: -ms-flexbox;
     54  display: flex;
     55  -webkit-box-pack: justify;
     56      -ms-flex-pack: justify;
     57          justify-content: space-between;
     58}
     59
     60.merchant-pcr-app .pcr-swatches > button {
     61  cursor: pointer;
     62  font-size: 1em;
     63  position: relative;
     64  z-index: 1;
     65  width: 20px;
     66  height: 20px;
     67  margin: 0;
     68  padding: 0;
     69  background: none;
     70}
     71
     72.merchant-pcr-app .pcr-swatches > button::before {
     73  position: absolute;
     74  content: "";
     75  top: 0;
     76  left: 0;
     77  bottom: 0;
     78  right: 0;
     79  background-image: url('data:image/svg+xml;utf8, <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2 2"><path fill="white" d="M1,0H2V1H1V0ZM0,1H1V2H0V1Z"/><path fill="gray" d="M0,0H1V1H0V0ZM1,1H2V2H1V1Z"/></svg>');
     80  background-size: 6px;
     81  border-radius: 20px;
     82  border: 1px solid transparent;
     83  z-index: -1;
     84}
     85
     86.merchant-pcr-app .pcr-swatches > button::after {
     87  content: "";
     88  position: absolute;
     89  z-index: 1;
     90  top: 0;
     91  left: 0;
     92  right: 0;
     93  bottom: 0;
     94  border-radius: 20px;
     95  border: 1px solid rgba(0, 0, 0, 0.3);
     96  background: var(--pcr-color);
     97}
     98
     99.merchant-pcr-app .pcr-interaction {
     100  display: -webkit-box;
     101  display: -ms-flexbox;
     102  display: flex;
     103  grid-gap: 5px;
     104}
     105
     106.merchant-pcr-app .pcr-interaction input {
     107  font-size: 11px;
     108  border-radius: 3px;
     109}
     110.merchant-pcr-app .pcr-interaction input:focus {
     111  border-color: #3858E9;
     112}
     113
     114.merchant-pcr-app .pcr-interaction .pcr-result {
     115  -webkit-box-flex: 1;
     116      -ms-flex: 1;
     117          flex: 1;
     118  margin: 0;
     119  width: 100%;
     120  max-width: 100%;
     121}
     122
     123.merchant-pcr-app .pcr-interaction .pcr-clear {
     124  cursor: pointer;
     125  margin: 0;
     126  padding: 0 10px;
     127  border-radius: 3px;
     128  color: #fff;
     129  background-color: #3858E9;
     130  text-transform: uppercase;
     131}
     132
     133.merchant-pcr-app .pcr-selection .pcr-picker {
     134  -webkit-user-select: none;
     135     -moz-user-select: none;
     136      -ms-user-select: none;
     137          user-select: none;
     138  position: absolute;
     139  height: 16px;
     140  width: 16px;
     141  border-radius: 16px;
     142  background-color: #fff !important;
     143  -webkit-box-shadow: 1px 2px 6px rgba(0, 0, 0, 0.2);
     144          box-shadow: 1px 2px 6px rgba(0, 0, 0, 0.2);
     145}
     146
     147.merchant-pcr-app .pcr-selection .pcr-color-palette,
     148.merchant-pcr-app .pcr-selection .pcr-color-chooser,
     149.merchant-pcr-app .pcr-selection .pcr-color-opacity {
     150  -webkit-user-select: none;
     151     -moz-user-select: none;
     152      -ms-user-select: none;
     153          user-select: none;
     154  position: relative;
     155  display: -webkit-box;
     156  display: -ms-flexbox;
     157  display: flex;
     158  -webkit-box-orient: vertical;
     159  -webkit-box-direction: normal;
     160      -ms-flex-direction: column;
     161          flex-direction: column;
     162  cursor: -webkit-grab;
     163  cursor: grab;
     164}
     165
     166.merchant-pcr-app .pcr-selection .pcr-color-palette:active,
     167.merchant-pcr-app .pcr-selection .pcr-color-chooser:active,
     168.merchant-pcr-app .pcr-selection .pcr-color-opacity:active {
     169  cursor: -webkit-grabbing;
     170  cursor: grabbing;
     171}
     172
     173.merchant-pcr-app[data-theme=merchant] {
     174  width: 250px;
     175  max-width: 95vw;
     176  padding: 10px;
     177  -webkit-box-sizing: border-box;
     178          box-sizing: border-box;
     179  display: -webkit-box;
     180  display: -ms-flexbox;
     181  display: flex;
     182  grid-gap: 10px;
     183  -webkit-box-orient: vertical;
     184  -webkit-box-direction: normal;
     185      -ms-flex-direction: column;
     186          flex-direction: column;
     187}
     188
     189.merchant-pcr-app[data-theme=merchant] .pcr-selection {
     190  display: grid;
     191  grid-gap: 10px;
     192  grid-template-columns: 1fr 4fr;
     193  grid-template-rows: 5fr auto auto;
     194  -webkit-box-align: center;
     195      -ms-flex-align: center;
     196          align-items: center;
     197  height: 150px;
     198  width: 100%;
     199  align-self: flex-start;
     200}
     201
     202.merchant-pcr-app[data-theme=merchant] .pcr-selection .pcr-color-preview {
     203  grid-area: 2/1/4/1;
     204  height: 100%;
     205  width: 100%;
     206  display: -webkit-box;
     207  display: -ms-flexbox;
     208  display: flex;
     209  -webkit-box-align: center;
     210      -ms-flex-align: center;
     211          align-items: center;
     212  -webkit-box-pack: center;
     213      -ms-flex-pack: center;
     214          justify-content: center;
     215}
     216
     217.merchant-pcr-app[data-theme=merchant] .pcr-selection .pcr-color-preview .pcr-last-color {
     218  display: none;
     219}
     220
     221.merchant-pcr-app[data-theme=merchant] .pcr-selection .pcr-color-preview .pcr-current-color {
     222  position: relative;
     223  width: 32px;
     224  height: 32px;
     225  border-radius: 32px;
     226  overflow: hidden;
     227  border: 1px solid rgba(0, 0, 0, 0.3);
     228  background-color: var(--pcr-color);
     229}
     230
     231.merchant-pcr-app[data-theme=merchant] .pcr-selection .pcr-color-preview .pcr-current-color::before {
     232  position: absolute;
     233  content: "";
     234  top: 0;
     235  left: 0;
     236  width: 100%;
     237  height: 100%;
     238  background: url('data:image/svg+xml;utf8, <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2 2"><path fill="white" d="M1,0H2V1H1V0ZM0,1H1V2H0V1Z"/><path fill="gray" d="M0,0H1V1H0V0ZM1,1H2V2H1V1Z"/></svg>');
     239  background-size: 6px;
     240  border-radius: 100%;
     241  z-index: -1;
     242}
     243
     244.merchant-pcr-app[data-theme=merchant] .pcr-selection .pcr-color-palette {
     245  grid-area: 1/1/2/3;
     246  width: 100%;
     247  height: 100%;
     248  z-index: 1;
     249}
     250
     251.merchant-pcr-app[data-theme=merchant] .pcr-selection .pcr-color-palette .pcr-picker {
     252  width: 18px;
     253  height: 18px;
     254  border: 2px solid #fff;
     255  -webkit-box-shadow: 0 0 1px 2px #000, inset 0 0 1px 1px #000;
     256          box-shadow: 0 0 1px 2px #000, inset 0 0 1px 1px #000;
     257  background-color: transparent !important;
     258}
     259
     260.merchant-pcr-app[data-theme=merchant] .pcr-selection .pcr-color-palette .pcr-palette {
     261  width: 100%;
     262  height: 100%;
     263}
     264
     265.merchant-pcr-app[data-theme=merchant] .pcr-selection .pcr-color-palette .pcr-palette::before {
     266  position: absolute;
     267  content: "";
     268  top: 0;
     269  left: 0;
     270  width: 100%;
     271  height: 100%;
     272  background: url('data:image/svg+xml;utf8, <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2 2"><path fill="white" d="M1,0H2V1H1V0ZM0,1H1V2H0V1Z"/><path fill="gray" d="M0,0H1V1H0V0ZM1,1H2V2H1V1Z"/></svg>');
     273  background-size: 8px;
     274  z-index: -1;
     275}
     276
     277.merchant-pcr-app[data-theme=merchant] .pcr-selection .pcr-color-chooser {
     278  grid-area: 2/2/2/2;
     279}
     280
     281.merchant-pcr-app[data-theme=merchant] .pcr-selection .pcr-color-opacity {
     282  grid-area: 3/2/3/2;
     283}
     284
     285.merchant-pcr-app[data-theme=merchant] .pcr-selection .pcr-color-chooser,
     286.merchant-pcr-app[data-theme=merchant] .pcr-selection .pcr-color-opacity {
     287  height: 12px;
     288  margin-right: 10px;
     289}
     290
     291.merchant-pcr-app[data-theme=merchant] .pcr-selection .pcr-color-chooser .pcr-picker,
     292.merchant-pcr-app[data-theme=merchant] .pcr-selection .pcr-color-opacity .pcr-picker {
     293  top: 50%;
     294  -webkit-transform: translateY(-50%);
     295          transform: translateY(-50%);
     296}
     297
     298.merchant-pcr-app[data-theme=merchant] .pcr-selection .pcr-color-chooser .pcr-slider,
     299.merchant-pcr-app[data-theme=merchant] .pcr-selection .pcr-color-opacity .pcr-slider {
     300  -webkit-box-flex: 1;
     301      -ms-flex-positive: 1;
     302          flex-grow: 1;
     303}
     304
     305.merchant-pcr-app[data-theme=merchant] .pcr-selection .pcr-color-chooser .pcr-slider {
     306  background: -webkit-gradient(linear, left top, right top, from(red), color-stop(#ff0), color-stop(lime), color-stop(cyan), color-stop(blue), color-stop(#f0f), to(red));
     307  background: linear-gradient(to right, red, #ff0, lime, cyan, blue, #f0f, red);
     308}
     309
     310.merchant-pcr-app[data-theme=merchant] .pcr-selection .pcr-color-opacity .pcr-slider {
     311  background: -webkit-gradient(linear, left top, right top, from(transparent), to(black)), url('data:image/svg+xml;utf8, <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2 2"><path fill="white" d="M1,0H2V1H1V0ZM0,1H1V2H0V1Z"/><path fill="gray" d="M0,0H1V1H0V0ZM1,1H2V2H1V1Z"/></svg>');
     312  background: linear-gradient(to right, transparent, black), url('data:image/svg+xml;utf8, <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2 2"><path fill="white" d="M1,0H2V1H1V0ZM0,1H1V2H0V1Z"/><path fill="gray" d="M0,0H1V1H0V0ZM1,1H2V2H1V1Z"/></svg>');
     313  background-size: 100%, 6px;
     314}
     315
    1316.merchant-metabox {
    2317  display: -webkit-box;
     
    106421  -ms-flex-wrap: wrap;
    107422      flex-wrap: wrap;
    108   grid-gap: 20px;
     423  grid-gap: 0;
    109424  padding: 20px;
     425  -webkit-box-orient: vertical;
     426  -webkit-box-direction: normal;
     427      -ms-flex-direction: column;
     428          flex-direction: column;
    110429}
    111430.merchant-metabox-field:first-child {
     
    136455
    137456.merchant-metabox-field-title {
    138   width: 30%;
    139   max-width: 275px;
     457  width: 100%;
     458  max-width: none;
    140459  display: -webkit-box;
    141460  display: -ms-flexbox;
     
    148467      -ms-flex-direction: column;
    149468          flex-direction: column;
     469  margin-bottom: 10px;
    150470}
    151471.merchant-metabox-field-title h4 {
    152472  margin: 0;
    153473  color: #1e1e1e;
     474  font-size: 13px;
     475  font-weight: 500;
    154476}
    155477.merchant-metabox-field-title small {
     
    167489
    168490.merchant-metabox-field-description {
    169   font-size: 80%;
    170   opacity: 0.75;
    171   margin-top: 10px;
     491  font-size: 12px;
     492  color: #666;
     493  opacity: 1;
     494  margin-top: 5px;
    172495}
    173496.merchant-metabox-field-description code {
     
    182505}
    183506
     507.merchant-metabox-datetime-field input,
    184508.merchant-metabox-field-text input {
    185   width: 50%;
     509  padding: 12px;
     510  line-height: 1.3em;
     511  width: 100%;
    186512  max-width: 100%;
     513  min-height: auto;
     514  border: 1px solid #D6D6D6;
     515  border-radius: 4px;
     516}
     517.merchant-metabox-datetime-field input:focus,
     518.merchant-metabox-field-text input:focus {
     519  outline: none;
     520  -webkit-box-shadow: none;
     521          box-shadow: none;
     522  border-color: #3858E9;
    187523}
    188524
    189525.merchant-metabox-field-number input {
    190   width: 100px;
     526  padding: 12px;
     527  line-height: 1.3em;
     528  width: 100%;
    191529  max-width: 100%;
     530  min-height: auto;
     531  border: 1px solid #D6D6D6;
     532  border-radius: 4px;
     533}
     534.merchant-metabox-field-number input:focus {
     535  outline: none;
     536  -webkit-box-shadow: none;
     537          box-shadow: none;
     538  border-color: #3858E9;
    192539}
    193540
     
    263610.merchant-metabox-field-switcher input:checked + i:before {
    264611  left: 26px;
     612}
     613
     614.merchant-metabox-radio-field {
     615  display: -webkit-box;
     616  display: -ms-flexbox;
     617  display: flex;
     618  -ms-flex-wrap: wrap;
     619      flex-wrap: wrap;
     620  -webkit-box-align: center;
     621      -ms-flex-align: center;
     622          align-items: center;
     623  gap: 30px;
     624  /* Hide the hardcoded <br> tags */
     625}
     626.merchant-metabox-radio-field br {
     627  display: none;
     628}
     629.merchant-metabox-radio-field label {
     630  display: -webkit-inline-box;
     631  display: -ms-inline-flexbox;
     632  display: inline-flex;
     633  -webkit-box-align: center;
     634      -ms-flex-align: center;
     635          align-items: center;
     636  gap: 12px;
     637  margin: 0;
     638  cursor: pointer;
     639}
     640.merchant-metabox-radio-field label span {
     641  font-size: 14px;
     642  font-weight: 400;
     643  color: #1D2327;
     644  opacity: 0.8;
     645}
     646.merchant-metabox-radio-field label input:checked + span {
     647  opacity: 1;
     648}
     649.merchant-metabox-radio-field label input {
     650  -ms-flex-negative: 0;
     651      flex-shrink: 0;
     652  margin: 0;
     653  width: 20px;
     654  height: 20px;
     655  border: 1px solid #D6D6D6;
     656  background-color: #fff;
     657  display: -webkit-inline-box;
     658  display: -ms-inline-flexbox;
     659  display: inline-flex;
     660  -webkit-box-align: center;
     661      -ms-flex-align: center;
     662          align-items: center;
     663  -webkit-box-pack: center;
     664      -ms-flex-pack: center;
     665          justify-content: center;
     666  -webkit-transition: none;
     667  transition: none;
     668  -webkit-box-sizing: border-box;
     669          box-sizing: border-box;
     670  -webkit-box-shadow: none;
     671          box-shadow: none;
     672  border-radius: 100%;
     673  -moz-appearance: none;
     674       appearance: none;
     675  -webkit-appearance: none;
     676}
     677.merchant-metabox-radio-field label input:focus {
     678  border-color: #fff;
     679  -webkit-box-shadow: none;
     680          box-shadow: none;
     681  outline: none;
     682}
     683.merchant-metabox-radio-field label input:checked {
     684  border-color: #3858E9;
     685  background-color: #fff;
     686  -webkit-box-shadow: 0 0 0 1px #3858E9;
     687          box-shadow: 0 0 0 1px #3858E9;
     688}
     689.merchant-metabox-radio-field label input:checked::before {
     690  content: "";
     691  width: 12px;
     692  height: 12px;
     693  border-radius: 12px;
     694  background-color: #3858E9;
     695  display: block;
     696}
     697
     698.merchant-metabox-field-select select {
     699  padding: 12px 20px 12px 12px;
     700  line-height: 1.3em;
     701  width: 100%;
     702  max-width: 100%;
     703  min-height: auto;
     704  border-radius: 6px;
     705  color: #2F2F2F;
     706  border: 1px solid #D6D6D6;
     707  background-color: #fff;
     708}
     709.merchant-metabox-field-select select:hover {
     710  color: #2F2F2F;
     711}
     712.merchant-metabox-field-select select:focus {
     713  outline: none;
     714  -webkit-box-shadow: none;
     715          box-shadow: none;
     716  border-color: #3858E9;
     717}
     718.merchant-metabox-field-select select option {
     719  color: #2F2F2F;
    265720}
    266721
     
    10171472}
    10181473
    1019 .merchant-metabox-field-append, .merchant-metabox-field-prepend {
     1474.merchant-metabox-field-append,
     1475.merchant-metabox-field-prepend {
    10201476  background: #f0f0f1;
    10211477  border: 1px solid #8c8f94;
     
    10461502  border-top-left-radius: 5px;
    10471503  border-bottom-left-radius: 5px;
     1504}
     1505
     1506.merchant-pcr-app {
     1507  position: absolute;
     1508  top: 100% !important;
     1509  left: 0 !important;
     1510  z-index: 9999;
     1511  margin-top: 10px;
     1512}
     1513
     1514.merchant-metabox-color-field {
     1515  display: -webkit-box;
     1516  display: -ms-flexbox;
     1517  display: flex;
     1518  -webkit-box-align: center;
     1519      -ms-flex-align: center;
     1520          align-items: center;
     1521  gap: 10px;
     1522  position: relative;
     1523}
     1524.merchant-metabox-color-field .merchant-color-picker {
     1525  cursor: pointer;
     1526  width: 36px;
     1527  height: 36px;
     1528  min-width: 36px;
     1529  min-height: 36px;
     1530  border: 1px solid rgba(0, 0, 0, 0.1);
     1531  border-radius: 4px;
     1532  -webkit-transition: border-color 0.2s ease;
     1533  transition: border-color 0.2s ease;
     1534}
     1535.merchant-metabox-color-field .merchant-color-picker:hover {
     1536  border-color: rgba(0, 0, 0, 0.3);
     1537}
     1538.merchant-metabox-color-field .merchant-color-input {
     1539  width: 100px;
     1540  max-width: 100%;
     1541  padding: 4px 10px;
     1542  border: 1px solid #8c8f94;
     1543  border-radius: 4px;
     1544  display: block;
     1545  text-align: center;
     1546}
     1547
     1548.merchant-range {
     1549  display: -webkit-box;
     1550  display: -ms-flexbox;
     1551  display: flex;
     1552  -webkit-box-align: center;
     1553      -ms-flex-align: center;
     1554          align-items: center;
     1555  gap: 15px;
     1556  width: 100%;
     1557}
     1558.merchant-range .merchant-range-input {
     1559  -webkit-appearance: none;
     1560  width: 100%;
     1561  height: 4px;
     1562  border-radius: 5px;
     1563  background: #e2e2e2;
     1564  outline: none;
     1565  padding: 0;
     1566  margin: 0;
     1567}
     1568.merchant-range .merchant-range-input::-webkit-slider-thumb {
     1569  -webkit-appearance: none;
     1570  appearance: none;
     1571  width: 14px;
     1572  height: 14px;
     1573  border-radius: 50%;
     1574  background: #3858e9;
     1575  cursor: pointer;
     1576  -webkit-transition: background 0.15s ease-in-out;
     1577  transition: background 0.15s ease-in-out;
     1578  -webkit-box-shadow: 0 0 0 1px #3858e9;
     1579          box-shadow: 0 0 0 1px #3858e9;
     1580}
     1581.merchant-range .merchant-range-input::-moz-range-thumb {
     1582  width: 14px;
     1583  height: 14px;
     1584  border: 0;
     1585  border-radius: 50%;
     1586  background: #3858e9;
     1587  cursor: pointer;
     1588  -moz-transition: background 0.15s ease-in-out;
     1589  transition: background 0.15s ease-in-out;
     1590  box-shadow: 0 0 0 1px #3858e9;
     1591}
     1592.merchant-range .merchant-range-number-input {
     1593  width: 70px;
     1594  min-width: 70px;
     1595  padding: 5px 10px;
     1596  text-align: center;
     1597  border: 1px solid #d6d6d6;
     1598  border-radius: 4px;
     1599  font-size: 13px;
     1600  color: #1e1e1e;
     1601}
     1602.merchant-range .merchant-range-number-input:focus {
     1603  border-color: #3858e9;
     1604  outline: none;
     1605}
     1606.merchant-range .merchant-range-number-input::-webkit-inner-spin-button, .merchant-range .merchant-range-number-input::-webkit-outer-spin-button {
     1607  -webkit-appearance: none;
     1608  margin: 0;
     1609}
     1610.merchant-range .merchant-range-number-input {
     1611  -moz-appearance: textfield;
     1612}
     1613.merchant-range .merchant-range-unit {
     1614  color: #757575;
     1615  font-size: 13px;
     1616  margin-left: -10px;
     1617}
     1618
     1619body.rtl .merchant-range .merchant-range-unit {
     1620  margin-left: 0;
     1621  margin-right: -10px;
    10481622}
    10491623
  • merchant/trunk/assets/css/admin/metabox.min.css

    r3354953 r3458319  
    1 .merchant-metabox{display:-webkit-box;display:-ms-flexbox;display:flex;padding:20px}.merchant-metabox-tabs{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:225px;margin-left:-20px}.merchant-metabox-tabs a{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;font-size:16px;line-height:24px;font-weight:600;color:#1a1a1a;padding:9px 16px;text-decoration:none;-webkit-transition:all .1s;transition:all .1s}.merchant-metabox-tabs a:before{content:"";position:absolute;top:0;left:0;width:4px;height:100%;border-radius:0 4px 4px 0;opacity:0;visibility:hidden;-webkit-transition:ease opacity 200ms;transition:ease opacity 200ms}.merchant-metabox-tabs a:focus,.merchant-metabox-tabs a:active,.merchant-metabox-tabs a:hover{color:#757575;outline:none;-webkit-box-shadow:none;box-shadow:none}.merchant-metabox-tabs a:focus:before,.merchant-metabox-tabs a:active:before,.merchant-metabox-tabs a:hover:before{background-color:#e1e1e1;opacity:1;visibility:visible}.merchant-metabox-tabs a.active{color:#3858e9}.merchant-metabox-tabs a.active:before{background-color:#3858e9;opacity:1;visibility:visible}.merchant-metabox-contents{-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;border:1px solid #f0f0f1;border-radius:4px}.merchant-metabox-content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.merchant-metabox-content:not(.active){display:none}.merchant-metabox-content-title{display:none;margin:0;padding:10px 15px;color:#1e1e1e;background-color:#eee}.merchant-metabox-field{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;grid-gap:20px;padding:20px}.merchant-metabox-field:first-child{border-top:none}.merchant-metabox-field:last-child{border-bottom:none}.merchant-metabox-field-hidden{display:none}.merchant-metabox-field-separator-before{border-top:1px solid #eee}.merchant-metabox-field-separator-after{border-bottom:1px solid #eee}.merchant-metabox-field-inline{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.merchant-metabox-field-title{width:30%;max-width:275px;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;grid-gap:5px;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.merchant-metabox-field-title h4{margin:0;color:#1e1e1e}.merchant-metabox-field-title small{opacity:.75}.merchant-metabox-field-title small code{font-size:1em}.merchant-metabox-field-content{-webkit-box-flex:1;-ms-flex:1;flex:1}.merchant-metabox-field-description{font-size:80%;opacity:.75;margin-top:10px}.merchant-metabox-field-description code{font-size:1em}.merchant-metabox-field-description a{color:#3858e9}.merchant-metabox-field-description a:focus{-webkit-box-shadow:none;box-shadow:none}.merchant-metabox-field-text input{width:50%;max-width:100%}.merchant-metabox-field-number input{width:100px;max-width:100%}.merchant-metabox-field-textarea textarea{width:100%;max-width:100%;min-height:100px;vertical-align:top}.merchant-metabox-field-checkbox label{display:-webkit-box;display:-ms-flexbox;display:flex;grid-gap:6px;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.merchant-metabox-field-checkbox label input{margin:0}.merchant-metabox-field-switcher label{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;grid-gap:6px;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.merchant-metabox-field-switcher i{position:relative;overflow:hidden;display:-webkit-box;display:-ms-flexbox;display:flex;width:45px;height:22px;background-color:#c8c8c8;border-radius:20px;-webkit-transition:all .2s;transition:all .2s}.merchant-metabox-field-switcher i:before{content:"";position:absolute;display:block;width:14px;height:14px;top:4px;left:6px;background-color:#fff;border-radius:20px;-webkit-transition:all .1s;transition:all .1s}.merchant-metabox-field-switcher input{display:none}.merchant-metabox-field-switcher input:checked+i{background-color:#3858e9}.merchant-metabox-field-switcher input:checked+i:before{left:26px}.merchant-metabox-field-choices-images{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;grid-gap:2px}.merchant-metabox-field-choices-images label{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.merchant-metabox-field-choices-images figure{padding:4px;margin:0;border:2px solid rgba(0,0,0,0);border-radius:4px;-webkit-transition:all .2s;transition:all .2s;max-width:80px;max-height:80px}.merchant-metabox-field-choices-images figure img{width:100%;vertical-align:top}.merchant-metabox-field-choices-images input{display:none}.merchant-metabox-field-choices-images input:checked+figure{border-color:#1e1e1e}.merchant-metabox-field-choices-images input:checked+figure:before{left:26px}.merchant-metabox-field-uploads-thumbnail{border-right:1px solid #e5e5e5;margin-right:10px;padding-right:10px;position:relative}.merchant-metabox-field-uploads-thumbnail-remove{position:absolute;left:-8px;top:-7px;background:#fff;border-radius:50%;color:#d58f90;font-size:18px;width:18px;height:18px}.merchant-metabox-field-uploads-thumbnail-remove:hover{color:#a00}.merchant-metabox-field-uploads-thumbnail-upload{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:40px;height:40px;border:1px solid #e5e5e5;-webkit-box-sizing:border-box;box-sizing:border-box;color:#d4d4d4;font-size:25px;font-weight:200;text-decoration:none}.merchant-metabox-field-uploads-thumbnail-upload img{width:100%;height:100%;-o-object-fit:cover;object-fit:cover;-o-object-position:center center;object-position:center center}.merchant-metabox-field-repeater-move,.merchant-metabox-field-repeater-remove,.merchant-metabox-field-flexible-content-move,.merchant-metabox-field-flexible-content-remove{cursor:pointer;padding:5px;width:auto;height:auto;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;color:#1e1e1e;opacity:.5;-webkit-transition:all .2s;transition:all .2s}.merchant-metabox-field-repeater-move:hover,.merchant-metabox-field-repeater-remove:hover,.merchant-metabox-field-flexible-content-move:hover,.merchant-metabox-field-flexible-content-remove:hover{opacity:1}.merchant-metabox-field-repeater-remove,.merchant-metabox-field-flexible-content-remove{color:#a00;font-size:18px}.merchant-metabox-field-uploads-content,.merchant-metabox-field-repeater-content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.merchant-metabox-field-uploads-content ul,.merchant-metabox-field-repeater-content ul{margin:0;padding:0;list-style:none;width:100%}.merchant-metabox-field-uploads-content ul li,.merchant-metabox-field-repeater-content ul li{margin:0;padding:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;margin-bottom:10px}.merchant-metabox-field-uploads-content ul li.hidden,.merchant-metabox-field-repeater-content ul li.hidden{display:none}.merchant-metabox-field-uploads-content ul li span,.merchant-metabox-field-repeater-content ul li span{font-size:20px;padding:5px;width:auto;height:auto;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.merchant-metabox-field-uploads-content input,.merchant-metabox-field-repeater-content input{width:50%;max-width:100%;max-width:100%;margin-right:5px}.merchant-metabox-field-uploads-content .merchant-metabox-field-repeater-list-item-field,.merchant-metabox-field-repeater-content .merchant-metabox-field-repeater-list-item-field{display:-webkit-box;display:-ms-flexbox;display:flex;margin-right:5px}.merchant-metabox-field-uploads-content .merchant-metabox-field-repeater-list-item-field input,.merchant-metabox-field-repeater-content .merchant-metabox-field-repeater-list-item-field input{width:100%}.merchant-metabox-field-uploads-content .merchant-metabox-field-repeater-list-item-field span,.merchant-metabox-field-repeater-content .merchant-metabox-field-repeater-list-item-field span{font-size:14px}.merchant-metabox-field-uploads-content .merchant-metabox-field-repeater-list-item-fields,.merchant-metabox-field-repeater-content .merchant-metabox-field-repeater-list-item-fields{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.merchant-metabox-field-size-chart ul{margin:0;padding:0;list-style:none}.merchant-metabox-field-size-chart ul li{margin-bottom:20px}.merchant-metabox-field-size-chart ul li.hidden{display:none}.merchant-metabox-field-size-chart table{width:100%;border-spacing:0;border-collapse:collapse;background-color:#fff}.merchant-metabox-field-size-chart table th,.merchant-metabox-field-size-chart table td{padding:15px;border:1px solid rgba(0,0,0,.1)}.merchant-metabox-field-size-chart table th:last-child,.merchant-metabox-field-size-chart table td:last-child{width:1%;min-width:75px}.merchant-metabox-field-size-chart table thead{text-align:center}.merchant-metabox-field-size-chart table thead label{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;grid-gap:5px;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.merchant-metabox-field-size-chart table tbody input{width:100%;max-width:100%;text-align:center}.merchant-metabox-field-size-chart table tbody tr:nth-child(2) td:not(:last-child){background-color:#eee}.merchant-metabox-field-size-chart table tfoot{text-align:right}.merchant-metabox-field-size-chart .merchant-buttons{display:-webkit-box;display:-ms-flexbox;display:flex;grid-gap:10px;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.merchant-metabox-field-size-chart .merchant-buttons a{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:16px;height:16px;font-size:14px;line-height:1em;font-weight:bold;padding:2px;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-box-shadow:none;box-shadow:none;text-decoration:none}.merchant-metabox-field-size-chart .merchant-buttons a:active{opacity:.5}.merchant-metabox-field-size-chart .merchant-add-col,.merchant-metabox-field-size-chart .merchant-add-row{color:#27ae60;background-color:#d5f5e3}.merchant-metabox-field-size-chart .merchant-del-col,.merchant-metabox-field-size-chart .merchant-del-row{color:#e74c3c;background-color:#f2d7d5}.merchant-metabox-field-size-chart .merchant-remove{color:#fff;border-color:#d50204;background:#d50204}.merchant-metabox-field-size-chart .merchant-remove:hover,.merchant-metabox-field-size-chart .merchant-remove:focus{border-color:#b32d2e;background:#b32d2e}.merchant-metabox-field-size-chart .merchant-remove:focus{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 3px #b32d2e;box-shadow:0 0 0 1px #fff,0 0 0 3px #b32d2e}.merchant-metabox-field-size-chart .merchant-remove:active{border-color:#b32d2e;background:#b32d2e}.merchant-metabox-field-size-chart .merchant-duplicate{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-box-shadow:none;box-shadow:none;text-decoration:none;color:#000;-webkit-transition:all .2s;transition:all .2s}.merchant-metabox-field-size-chart .merchant-duplicate:hover,.merchant-metabox-field-size-chart .merchant-duplicate:active{opacity:.5}.merchant-metabox-field-size-chart .merchant-duplicate i{width:auto;height:auto;font-size:20px}.merchant-metabox-field-media figure{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:0;padding:5px;width:75px;height:75px;border:1px solid #e5e5e5;background-color:#fff;-webkit-box-sizing:border-box;box-sizing:border-box}.merchant-metabox-field-media figure img{max-width:100%;height:auto}.merchant-metabox-field-media input{display:none}.merchant-metabox-field-media .merchant-button-remove{color:#b32d2e;border-color:#b32d2e;background:#fff8f8}.merchant-metabox-field-media .merchant-button-remove:hover,.merchant-metabox-field-media .merchant-button-remove:focus,.merchant-metabox-field-media .merchant-button-remove:active{color:#b32d2e;border-color:#b32d2e;background:#fff0f0}.merchant-metabox-field-media .merchant-button-remove:focus{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 3px #b32d2e;box-shadow:0 0 0 1px #fff,0 0 0 3px #b32d2e}.merchant-metabox-field-select-ajax select{display:none;width:100%}.merchant-metabox-field-select-ajax ul{margin:0;padding:0;list-style:none;vertical-align:top}.merchant-metabox-field-select-ajax ul li{margin:0;padding:0}.merchant-metabox-field-select-ajax .select2-container--default .select2-selection--multiple .select2-selection__rendered{width:auto;display:inline;padding:0}.merchant-metabox-field-select-ajax .select2-container .select2-search--inline .select2-search__field{margin:0;padding:0}.merchant-metabox-field-select-ajax .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#aaa}.merchant-metabox-field-select-ajax .select2-container--default .select2-selection--multiple{padding:0 5px}.merchant-metabox-field-select-ajax .select2-container--default .select2-selection--multiple .select2-selection__choice{margin-left:0}.merchant-metabox-field-select-ajax .merchant-select2-clear{display:block;width:100%;clear:both}.merchant-metabox-field-select-ajax .merchant-metabox-field-content{min-height:32px}.merchant-metabox-field-wc-attributes ul{margin:0;padding:0;list-style:none;display:-webkit-box;display:-ms-flexbox;display:flex;grid-gap:5px;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.merchant-metabox-field-wc-attributes ul li{margin:0;padding:0;display:-webkit-box;display:-ms-flexbox;display:flex;max-width:300px;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border:1px solid #e5e5e5;background-color:#fdfdfd;border-radius:3px}.merchant-metabox-field-wc-attributes ul li:hover{border-color:#ccc}.merchant-metabox-field-wc-attributes ul li label{display:-webkit-box;display:-ms-flexbox;display:flex;grid-gap:5px;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-flex:1;-ms-flex:1;flex:1;padding:8px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.merchant-metabox-field-wc-attributes ul li label input{margin:0}.merchant-metabox-field-wc-attributes ul li .merchant-sortable-move{cursor:pointer;padding:8px}.merchant-metabox-field-code-editor .CodeMirror-wrap{border:1px solid #eee}.merchant-metabox-field-media-content{display:-webkit-box;display:-ms-flexbox;display:flex;grid-gap:10px;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.merchant-metabox-field-media-button{-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;grid-gap:5px}.merchant-metabox-field-no-padding{padding-top:0;padding-bottom:0}body:not(.block-editor-page) #merchant_metabox .inside{margin:0;padding:0}#side-sortables .merchant-metabox-tabs{display:none}#side-sortables .merchant-metabox-content-title,#side-sortables .merchant-metabox-content:not(.active){display:block}#side-sortables .merchant-metabox-field{grid-gap:8px;padding:10px 15px;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}#side-sortables .merchant-metabox-field-title{width:auto;font-size:12px}#side-sortables .merchant-metabox-field-title:empty{display:none}#side-sortables .merchant-metabox-contents{border-left:none;border-right:none}#side-sortables #merchant_metabox .postbox-header{border-top:none}#side-sortables #merchant_metabox .postbox-header h2{color:#1e1e1e;padding:0 0 0 15px;font-size:13px;font-weight:500}#side-sortables #merchant_metabox .inside{padding:0}#side-sortables .merchant-metabox-field-text input,#side-sortables .merchant-metabox-field-uploads-content input,#side-sortables .merchant-metabox-field-repeater-content input{width:100%}.merchant-metabox-field-flexible-content-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:100%;grid-gap:10px}.merchant-metabox-field-flexible-content-list.empty{border:2px dashed #dcdcde;min-height:100px}.merchant-metabox-field-flexible-content-item{border:1px solid #c3c4c7;border-left:3px solid #3858e9}.merchant-metabox-field-flexible-content-item:first-child{display:none}.merchant-metabox-field-flexible-content-item-content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;grid-gap:10px;padding:15px}.merchant-metabox-field-flexible-content-item-content>div{display:-webkit-box;display:-ms-flexbox;display:flex;grid-gap:10px}.merchant-metabox-field-flexible-content-item-content>div:not(:last-child)>div{border-bottom:1px solid #f3f3f3;padding-bottom:15px}.merchant-metabox-field-flexible-content-item-content>div label{width:200px}.merchant-metabox-field-flexible-content-item-content>div>div{width:calc(100% - 200px)}.merchant-metabox-field-flexible-content-item-title{margin-left:10px;font-weight:bold}.merchant-metabox-field-flexible-content-item-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.merchant-metabox-field-flexible-content-item-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:10px 15px;border-bottom:1px solid #f3f3f3}.merchant-metabox-field-flexible-content-item-count{border-radius:50%;width:24px;height:23px;border:1px solid #949494;text-align:center;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;font-size:12px;font-weight:bold}.merchant-metabox-field-flexible-content-add-wrapper{position:relative;display:inline-block}.merchant-metabox-field-flexible-content-add-list{opacity:0;visibility:hidden;position:absolute;background-color:#fff;border:1px solid #c3c4c7;border-left:3px solid #3858e9;-webkit-box-shadow:0 2px 10px 0 rgba(0,0,0,.1019607843);box-shadow:0 2px 10px 0 rgba(0,0,0,.1019607843);width:180px;bottom:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;left:50%;-webkit-transform:translate(-50%, 10px);transform:translate(-50%, 10px);padding:3px 3px 3px 5px}.merchant-metabox-field-flexible-content-add-list.active{z-index:10;opacity:1;visibility:visible;-webkit-transform:translate(-50%, -15px);transform:translate(-50%, -15px);-webkit-transition:all .5s cubic-bezier(0.75, -0.02, 0.2, 0.97);transition:all .5s cubic-bezier(0.75, -0.02, 0.2, 0.97)}.merchant-metabox-field-flexible-content-add-list:before,.merchant-metabox-field-flexible-content-add-list:after{position:absolute;z-index:-1;content:"";border-style:solid;-webkit-transition-duration:.3s;transition-duration:.3s;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform, -webkit-transform}.merchant-metabox-field-flexible-content-add-list:before{right:calc(50% - 12px);bottom:-14px;border-width:14px 14px 0 15px;border-color:#c3c4c7 rgba(0,0,0,0) rgba(0,0,0,0) rgba(0,0,0,0)}.merchant-metabox-field-flexible-content-add-list:after{content:"";right:calc(50% - 10px);bottom:-12px;border-width:12px 12px 0 13px;border-color:#fff rgba(0,0,0,0) rgba(0,0,0,0) rgba(0,0,0,0)}.merchant-metabox-field-flexible-content-add{display:block;-ms-flex-negative:0;flex-shrink:0;padding:10px;text-decoration:none}.merchant-metabox-field-flexible-content-add:hover{background:#f0f0f1}.merchant-metabox-field-input-container{display:-webkit-box;display:-ms-flexbox;display:flex}.merchant-metabox-field-append,.merchant-metabox-field-prepend{background:#f0f0f1;border:1px solid #8c8f94;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;position:relative;padding:0 8px}.merchant-metabox-field-append{font-size:12px;margin-left:-7px;-ms-flex-negative:0;flex-shrink:0;border-top-right-radius:5px;border-bottom-right-radius:5px}.merchant-metabox-field-prepend{font-size:14px;margin-right:-3px;padding:0 10px;margin-left:4px;border-top-left-radius:5px;border-bottom-left-radius:5px}@media only screen and (max-width: 991px){.merchant-metabox-tabs{display:none}.merchant-metabox-content-title,.merchant-metabox-content:not(.active){display:block}.merchant-metabox-field{grid-gap:8px;padding:15px;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.merchant-metabox-field-title{width:auto}.merchant-metabox-field-title:empty{display:none}.merchant-metabox-contents{border-left:none;border-right:none}#merchant_metabox .inside{padding:0}.merchant-metabox-field-text input,.merchant-metabox-field-uploads-content input,.merchant-metabox-field-repeater-content input{width:100%}}.rtl .merchant-metabox-tabs a:before{right:0;left:unset}.rtl .merchant-metabox-tabs{margin-left:unset;margin-right:-20px}.rtl .merchant-metabox-field-append{border-radius:5px}.rtl .merchant-metabox-contents .merchant-metabox-field-flexible-content-item{border-left:1px solid #c3c4c7;border-right:3px solid #3858e9}.rtl .merchant-metabox-contents .merchant-metabox-field-flexible-content-item-title{margin-left:unset;margin-right:10px}
     1.merchant-pcr-app *{outline:none;border:none;-webkit-box-sizing:border-box;box-sizing:border-box}.merchant-pcr-app input:focus,.merchant-pcr-app input.pcr-active,.merchant-pcr-app button:focus,.merchant-pcr-app button.pcr-active{-webkit-box-shadow:none;box-shadow:none}.merchant-pcr-app .pcr-palette:focus,.merchant-pcr-app .pcr-slider:focus{-webkit-box-shadow:none;box-shadow:none}.merchant-pcr-app{position:fixed;z-index:999999;top:0;left:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;border-radius:.1em;opacity:0;visibility:hidden;-webkit-transition:opacity .2s,visibility 0s .2s;transition:opacity .2s,visibility 0s .2s;-webkit-box-shadow:0 .15em 1.5em 0 rgba(0,0,0,.1),0 0 1em 0 rgba(0,0,0,.03);box-shadow:0 .15em 1.5em 0 rgba(0,0,0,.1),0 0 1em 0 rgba(0,0,0,.03);background:#fff}.merchant-pcr-app.visible{visibility:visible;opacity:1;-webkit-transition:opacity .2s;transition:opacity .2s}.merchant-pcr-app .pcr-swatches{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.merchant-pcr-app .pcr-swatches>button{cursor:pointer;font-size:1em;position:relative;z-index:1;width:20px;height:20px;margin:0;padding:0;background:none}.merchant-pcr-app .pcr-swatches>button::before{position:absolute;content:"";top:0;left:0;bottom:0;right:0;background-image:url('data:image/svg+xml;utf8, <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2 2"><path fill="white" d="M1,0H2V1H1V0ZM0,1H1V2H0V1Z"/><path fill="gray" d="M0,0H1V1H0V0ZM1,1H2V2H1V1Z"/></svg>');background-size:6px;border-radius:20px;border:1px solid rgba(0,0,0,0);z-index:-1}.merchant-pcr-app .pcr-swatches>button::after{content:"";position:absolute;z-index:1;top:0;left:0;right:0;bottom:0;border-radius:20px;border:1px solid rgba(0,0,0,.3);background:var(--pcr-color)}.merchant-pcr-app .pcr-interaction{display:-webkit-box;display:-ms-flexbox;display:flex;grid-gap:5px}.merchant-pcr-app .pcr-interaction input{font-size:11px;border-radius:3px}.merchant-pcr-app .pcr-interaction input:focus{border-color:#3858e9}.merchant-pcr-app .pcr-interaction .pcr-result{-webkit-box-flex:1;-ms-flex:1;flex:1;margin:0;width:100%;max-width:100%}.merchant-pcr-app .pcr-interaction .pcr-clear{cursor:pointer;margin:0;padding:0 10px;border-radius:3px;color:#fff;background-color:#3858e9;text-transform:uppercase}.merchant-pcr-app .pcr-selection .pcr-picker{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:absolute;height:16px;width:16px;border-radius:16px;background-color:#fff !important;-webkit-box-shadow:1px 2px 6px rgba(0,0,0,.2);box-shadow:1px 2px 6px rgba(0,0,0,.2)}.merchant-pcr-app .pcr-selection .pcr-color-palette,.merchant-pcr-app .pcr-selection .pcr-color-chooser,.merchant-pcr-app .pcr-selection .pcr-color-opacity{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;cursor:-webkit-grab;cursor:grab}.merchant-pcr-app .pcr-selection .pcr-color-palette:active,.merchant-pcr-app .pcr-selection .pcr-color-chooser:active,.merchant-pcr-app .pcr-selection .pcr-color-opacity:active{cursor:-webkit-grabbing;cursor:grabbing}.merchant-pcr-app[data-theme=merchant]{width:250px;max-width:95vw;padding:10px;-webkit-box-sizing:border-box;box-sizing:border-box;display:-webkit-box;display:-ms-flexbox;display:flex;grid-gap:10px;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.merchant-pcr-app[data-theme=merchant] .pcr-selection{display:grid;grid-gap:10px;grid-template-columns:1fr 4fr;grid-template-rows:5fr auto auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:150px;width:100%;align-self:flex-start}.merchant-pcr-app[data-theme=merchant] .pcr-selection .pcr-color-preview{grid-area:2/1/4/1;height:100%;width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.merchant-pcr-app[data-theme=merchant] .pcr-selection .pcr-color-preview .pcr-last-color{display:none}.merchant-pcr-app[data-theme=merchant] .pcr-selection .pcr-color-preview .pcr-current-color{position:relative;width:32px;height:32px;border-radius:32px;overflow:hidden;border:1px solid rgba(0,0,0,.3);background-color:var(--pcr-color)}.merchant-pcr-app[data-theme=merchant] .pcr-selection .pcr-color-preview .pcr-current-color::before{position:absolute;content:"";top:0;left:0;width:100%;height:100%;background:url('data:image/svg+xml;utf8, <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2 2"><path fill="white" d="M1,0H2V1H1V0ZM0,1H1V2H0V1Z"/><path fill="gray" d="M0,0H1V1H0V0ZM1,1H2V2H1V1Z"/></svg>');background-size:6px;border-radius:100%;z-index:-1}.merchant-pcr-app[data-theme=merchant] .pcr-selection .pcr-color-palette{grid-area:1/1/2/3;width:100%;height:100%;z-index:1}.merchant-pcr-app[data-theme=merchant] .pcr-selection .pcr-color-palette .pcr-picker{width:18px;height:18px;border:2px solid #fff;-webkit-box-shadow:0 0 1px 2px #000,inset 0 0 1px 1px #000;box-shadow:0 0 1px 2px #000,inset 0 0 1px 1px #000;background-color:rgba(0,0,0,0) !important}.merchant-pcr-app[data-theme=merchant] .pcr-selection .pcr-color-palette .pcr-palette{width:100%;height:100%}.merchant-pcr-app[data-theme=merchant] .pcr-selection .pcr-color-palette .pcr-palette::before{position:absolute;content:"";top:0;left:0;width:100%;height:100%;background:url('data:image/svg+xml;utf8, <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2 2"><path fill="white" d="M1,0H2V1H1V0ZM0,1H1V2H0V1Z"/><path fill="gray" d="M0,0H1V1H0V0ZM1,1H2V2H1V1Z"/></svg>');background-size:8px;z-index:-1}.merchant-pcr-app[data-theme=merchant] .pcr-selection .pcr-color-chooser{grid-area:2/2/2/2}.merchant-pcr-app[data-theme=merchant] .pcr-selection .pcr-color-opacity{grid-area:3/2/3/2}.merchant-pcr-app[data-theme=merchant] .pcr-selection .pcr-color-chooser,.merchant-pcr-app[data-theme=merchant] .pcr-selection .pcr-color-opacity{height:12px;margin-right:10px}.merchant-pcr-app[data-theme=merchant] .pcr-selection .pcr-color-chooser .pcr-picker,.merchant-pcr-app[data-theme=merchant] .pcr-selection .pcr-color-opacity .pcr-picker{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.merchant-pcr-app[data-theme=merchant] .pcr-selection .pcr-color-chooser .pcr-slider,.merchant-pcr-app[data-theme=merchant] .pcr-selection .pcr-color-opacity .pcr-slider{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.merchant-pcr-app[data-theme=merchant] .pcr-selection .pcr-color-chooser .pcr-slider{background:-webkit-gradient(linear, left top, right top, from(red), color-stop(#ff0), color-stop(lime), color-stop(cyan), color-stop(blue), color-stop(#f0f), to(red));background:linear-gradient(to right, red, #ff0, lime, cyan, blue, #f0f, red)}.merchant-pcr-app[data-theme=merchant] .pcr-selection .pcr-color-opacity .pcr-slider{background:-webkit-gradient(linear, left top, right top, from(transparent), to(black)),url('data:image/svg+xml;utf8, <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2 2"><path fill="white" d="M1,0H2V1H1V0ZM0,1H1V2H0V1Z"/><path fill="gray" d="M0,0H1V1H0V0ZM1,1H2V2H1V1Z"/></svg>');background:linear-gradient(to right, transparent, black),url('data:image/svg+xml;utf8, <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2 2"><path fill="white" d="M1,0H2V1H1V0ZM0,1H1V2H0V1Z"/><path fill="gray" d="M0,0H1V1H0V0ZM1,1H2V2H1V1Z"/></svg>');background-size:100%,6px}.merchant-metabox{display:-webkit-box;display:-ms-flexbox;display:flex;padding:20px}.merchant-metabox-tabs{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:225px;margin-left:-20px}.merchant-metabox-tabs a{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;font-size:16px;line-height:24px;font-weight:600;color:#1a1a1a;padding:9px 16px;text-decoration:none;-webkit-transition:all .1s;transition:all .1s}.merchant-metabox-tabs a:before{content:"";position:absolute;top:0;left:0;width:4px;height:100%;border-radius:0 4px 4px 0;opacity:0;visibility:hidden;-webkit-transition:ease opacity 200ms;transition:ease opacity 200ms}.merchant-metabox-tabs a:focus,.merchant-metabox-tabs a:active,.merchant-metabox-tabs a:hover{color:#757575;outline:none;-webkit-box-shadow:none;box-shadow:none}.merchant-metabox-tabs a:focus:before,.merchant-metabox-tabs a:active:before,.merchant-metabox-tabs a:hover:before{background-color:#e1e1e1;opacity:1;visibility:visible}.merchant-metabox-tabs a.active{color:#3858e9}.merchant-metabox-tabs a.active:before{background-color:#3858e9;opacity:1;visibility:visible}.merchant-metabox-contents{-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;border:1px solid #f0f0f1;border-radius:4px}.merchant-metabox-content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.merchant-metabox-content:not(.active){display:none}.merchant-metabox-content-title{display:none;margin:0;padding:10px 15px;color:#1e1e1e;background-color:#eee}.merchant-metabox-field{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;grid-gap:0;padding:20px;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.merchant-metabox-field:first-child{border-top:none}.merchant-metabox-field:last-child{border-bottom:none}.merchant-metabox-field-hidden{display:none}.merchant-metabox-field-separator-before{border-top:1px solid #eee}.merchant-metabox-field-separator-after{border-bottom:1px solid #eee}.merchant-metabox-field-inline{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.merchant-metabox-field-title{width:100%;max-width:none;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;grid-gap:5px;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-bottom:10px}.merchant-metabox-field-title h4{margin:0;color:#1e1e1e;font-size:13px;font-weight:500}.merchant-metabox-field-title small{opacity:.75}.merchant-metabox-field-title small code{font-size:1em}.merchant-metabox-field-content{-webkit-box-flex:1;-ms-flex:1;flex:1}.merchant-metabox-field-description{font-size:12px;color:#666;opacity:1;margin-top:5px}.merchant-metabox-field-description code{font-size:1em}.merchant-metabox-field-description a{color:#3858e9}.merchant-metabox-field-description a:focus{-webkit-box-shadow:none;box-shadow:none}.merchant-metabox-datetime-field input,.merchant-metabox-field-text input{padding:12px;line-height:1.3em;width:100%;max-width:100%;min-height:auto;border:1px solid #d6d6d6;border-radius:4px}.merchant-metabox-datetime-field input:focus,.merchant-metabox-field-text input:focus{outline:none;-webkit-box-shadow:none;box-shadow:none;border-color:#3858e9}.merchant-metabox-field-number input{padding:12px;line-height:1.3em;width:100%;max-width:100%;min-height:auto;border:1px solid #d6d6d6;border-radius:4px}.merchant-metabox-field-number input:focus{outline:none;-webkit-box-shadow:none;box-shadow:none;border-color:#3858e9}.merchant-metabox-field-textarea textarea{width:100%;max-width:100%;min-height:100px;vertical-align:top}.merchant-metabox-field-checkbox label{display:-webkit-box;display:-ms-flexbox;display:flex;grid-gap:6px;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.merchant-metabox-field-checkbox label input{margin:0}.merchant-metabox-field-switcher label{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;grid-gap:6px;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.merchant-metabox-field-switcher i{position:relative;overflow:hidden;display:-webkit-box;display:-ms-flexbox;display:flex;width:45px;height:22px;background-color:#c8c8c8;border-radius:20px;-webkit-transition:all .2s;transition:all .2s}.merchant-metabox-field-switcher i:before{content:"";position:absolute;display:block;width:14px;height:14px;top:4px;left:6px;background-color:#fff;border-radius:20px;-webkit-transition:all .1s;transition:all .1s}.merchant-metabox-field-switcher input{display:none}.merchant-metabox-field-switcher input:checked+i{background-color:#3858e9}.merchant-metabox-field-switcher input:checked+i:before{left:26px}.merchant-metabox-radio-field{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:30px}.merchant-metabox-radio-field br{display:none}.merchant-metabox-radio-field label{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:12px;margin:0;cursor:pointer}.merchant-metabox-radio-field label span{font-size:14px;font-weight:400;color:#1d2327;opacity:.8}.merchant-metabox-radio-field label input:checked+span{opacity:1}.merchant-metabox-radio-field label input{-ms-flex-negative:0;flex-shrink:0;margin:0;width:20px;height:20px;border:1px solid #d6d6d6;background-color:#fff;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-transition:none;transition:none;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-shadow:none;box-shadow:none;border-radius:100%;-moz-appearance:none;appearance:none;-webkit-appearance:none}.merchant-metabox-radio-field label input:focus{border-color:#fff;-webkit-box-shadow:none;box-shadow:none;outline:none}.merchant-metabox-radio-field label input:checked{border-color:#3858e9;background-color:#fff;-webkit-box-shadow:0 0 0 1px #3858e9;box-shadow:0 0 0 1px #3858e9}.merchant-metabox-radio-field label input:checked::before{content:"";width:12px;height:12px;border-radius:12px;background-color:#3858e9;display:block}.merchant-metabox-field-select select{padding:12px 20px 12px 12px;line-height:1.3em;width:100%;max-width:100%;min-height:auto;border-radius:6px;color:#2f2f2f;border:1px solid #d6d6d6;background-color:#fff}.merchant-metabox-field-select select:hover{color:#2f2f2f}.merchant-metabox-field-select select:focus{outline:none;-webkit-box-shadow:none;box-shadow:none;border-color:#3858e9}.merchant-metabox-field-select select option{color:#2f2f2f}.merchant-metabox-field-choices-images{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;grid-gap:2px}.merchant-metabox-field-choices-images label{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.merchant-metabox-field-choices-images figure{padding:4px;margin:0;border:2px solid rgba(0,0,0,0);border-radius:4px;-webkit-transition:all .2s;transition:all .2s;max-width:80px;max-height:80px}.merchant-metabox-field-choices-images figure img{width:100%;vertical-align:top}.merchant-metabox-field-choices-images input{display:none}.merchant-metabox-field-choices-images input:checked+figure{border-color:#1e1e1e}.merchant-metabox-field-choices-images input:checked+figure:before{left:26px}.merchant-metabox-field-uploads-thumbnail{border-right:1px solid #e5e5e5;margin-right:10px;padding-right:10px;position:relative}.merchant-metabox-field-uploads-thumbnail-remove{position:absolute;left:-8px;top:-7px;background:#fff;border-radius:50%;color:#d58f90;font-size:18px;width:18px;height:18px}.merchant-metabox-field-uploads-thumbnail-remove:hover{color:#a00}.merchant-metabox-field-uploads-thumbnail-upload{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:40px;height:40px;border:1px solid #e5e5e5;-webkit-box-sizing:border-box;box-sizing:border-box;color:#d4d4d4;font-size:25px;font-weight:200;text-decoration:none}.merchant-metabox-field-uploads-thumbnail-upload img{width:100%;height:100%;-o-object-fit:cover;object-fit:cover;-o-object-position:center center;object-position:center center}.merchant-metabox-field-repeater-move,.merchant-metabox-field-repeater-remove,.merchant-metabox-field-flexible-content-move,.merchant-metabox-field-flexible-content-remove{cursor:pointer;padding:5px;width:auto;height:auto;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;color:#1e1e1e;opacity:.5;-webkit-transition:all .2s;transition:all .2s}.merchant-metabox-field-repeater-move:hover,.merchant-metabox-field-repeater-remove:hover,.merchant-metabox-field-flexible-content-move:hover,.merchant-metabox-field-flexible-content-remove:hover{opacity:1}.merchant-metabox-field-repeater-remove,.merchant-metabox-field-flexible-content-remove{color:#a00;font-size:18px}.merchant-metabox-field-uploads-content,.merchant-metabox-field-repeater-content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.merchant-metabox-field-uploads-content ul,.merchant-metabox-field-repeater-content ul{margin:0;padding:0;list-style:none;width:100%}.merchant-metabox-field-uploads-content ul li,.merchant-metabox-field-repeater-content ul li{margin:0;padding:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;margin-bottom:10px}.merchant-metabox-field-uploads-content ul li.hidden,.merchant-metabox-field-repeater-content ul li.hidden{display:none}.merchant-metabox-field-uploads-content ul li span,.merchant-metabox-field-repeater-content ul li span{font-size:20px;padding:5px;width:auto;height:auto;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.merchant-metabox-field-uploads-content input,.merchant-metabox-field-repeater-content input{width:50%;max-width:100%;max-width:100%;margin-right:5px}.merchant-metabox-field-uploads-content .merchant-metabox-field-repeater-list-item-field,.merchant-metabox-field-repeater-content .merchant-metabox-field-repeater-list-item-field{display:-webkit-box;display:-ms-flexbox;display:flex;margin-right:5px}.merchant-metabox-field-uploads-content .merchant-metabox-field-repeater-list-item-field input,.merchant-metabox-field-repeater-content .merchant-metabox-field-repeater-list-item-field input{width:100%}.merchant-metabox-field-uploads-content .merchant-metabox-field-repeater-list-item-field span,.merchant-metabox-field-repeater-content .merchant-metabox-field-repeater-list-item-field span{font-size:14px}.merchant-metabox-field-uploads-content .merchant-metabox-field-repeater-list-item-fields,.merchant-metabox-field-repeater-content .merchant-metabox-field-repeater-list-item-fields{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.merchant-metabox-field-size-chart ul{margin:0;padding:0;list-style:none}.merchant-metabox-field-size-chart ul li{margin-bottom:20px}.merchant-metabox-field-size-chart ul li.hidden{display:none}.merchant-metabox-field-size-chart table{width:100%;border-spacing:0;border-collapse:collapse;background-color:#fff}.merchant-metabox-field-size-chart table th,.merchant-metabox-field-size-chart table td{padding:15px;border:1px solid rgba(0,0,0,.1)}.merchant-metabox-field-size-chart table th:last-child,.merchant-metabox-field-size-chart table td:last-child{width:1%;min-width:75px}.merchant-metabox-field-size-chart table thead{text-align:center}.merchant-metabox-field-size-chart table thead label{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;grid-gap:5px;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.merchant-metabox-field-size-chart table tbody input{width:100%;max-width:100%;text-align:center}.merchant-metabox-field-size-chart table tbody tr:nth-child(2) td:not(:last-child){background-color:#eee}.merchant-metabox-field-size-chart table tfoot{text-align:right}.merchant-metabox-field-size-chart .merchant-buttons{display:-webkit-box;display:-ms-flexbox;display:flex;grid-gap:10px;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.merchant-metabox-field-size-chart .merchant-buttons a{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:16px;height:16px;font-size:14px;line-height:1em;font-weight:bold;padding:2px;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-box-shadow:none;box-shadow:none;text-decoration:none}.merchant-metabox-field-size-chart .merchant-buttons a:active{opacity:.5}.merchant-metabox-field-size-chart .merchant-add-col,.merchant-metabox-field-size-chart .merchant-add-row{color:#27ae60;background-color:#d5f5e3}.merchant-metabox-field-size-chart .merchant-del-col,.merchant-metabox-field-size-chart .merchant-del-row{color:#e74c3c;background-color:#f2d7d5}.merchant-metabox-field-size-chart .merchant-remove{color:#fff;border-color:#d50204;background:#d50204}.merchant-metabox-field-size-chart .merchant-remove:hover,.merchant-metabox-field-size-chart .merchant-remove:focus{border-color:#b32d2e;background:#b32d2e}.merchant-metabox-field-size-chart .merchant-remove:focus{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 3px #b32d2e;box-shadow:0 0 0 1px #fff,0 0 0 3px #b32d2e}.merchant-metabox-field-size-chart .merchant-remove:active{border-color:#b32d2e;background:#b32d2e}.merchant-metabox-field-size-chart .merchant-duplicate{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-box-shadow:none;box-shadow:none;text-decoration:none;color:#000;-webkit-transition:all .2s;transition:all .2s}.merchant-metabox-field-size-chart .merchant-duplicate:hover,.merchant-metabox-field-size-chart .merchant-duplicate:active{opacity:.5}.merchant-metabox-field-size-chart .merchant-duplicate i{width:auto;height:auto;font-size:20px}.merchant-metabox-field-media figure{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:0;padding:5px;width:75px;height:75px;border:1px solid #e5e5e5;background-color:#fff;-webkit-box-sizing:border-box;box-sizing:border-box}.merchant-metabox-field-media figure img{max-width:100%;height:auto}.merchant-metabox-field-media input{display:none}.merchant-metabox-field-media .merchant-button-remove{color:#b32d2e;border-color:#b32d2e;background:#fff8f8}.merchant-metabox-field-media .merchant-button-remove:hover,.merchant-metabox-field-media .merchant-button-remove:focus,.merchant-metabox-field-media .merchant-button-remove:active{color:#b32d2e;border-color:#b32d2e;background:#fff0f0}.merchant-metabox-field-media .merchant-button-remove:focus{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 3px #b32d2e;box-shadow:0 0 0 1px #fff,0 0 0 3px #b32d2e}.merchant-metabox-field-select-ajax select{display:none;width:100%}.merchant-metabox-field-select-ajax ul{margin:0;padding:0;list-style:none;vertical-align:top}.merchant-metabox-field-select-ajax ul li{margin:0;padding:0}.merchant-metabox-field-select-ajax .select2-container--default .select2-selection--multiple .select2-selection__rendered{width:auto;display:inline;padding:0}.merchant-metabox-field-select-ajax .select2-container .select2-search--inline .select2-search__field{margin:0;padding:0}.merchant-metabox-field-select-ajax .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#aaa}.merchant-metabox-field-select-ajax .select2-container--default .select2-selection--multiple{padding:0 5px}.merchant-metabox-field-select-ajax .select2-container--default .select2-selection--multiple .select2-selection__choice{margin-left:0}.merchant-metabox-field-select-ajax .merchant-select2-clear{display:block;width:100%;clear:both}.merchant-metabox-field-select-ajax .merchant-metabox-field-content{min-height:32px}.merchant-metabox-field-wc-attributes ul{margin:0;padding:0;list-style:none;display:-webkit-box;display:-ms-flexbox;display:flex;grid-gap:5px;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.merchant-metabox-field-wc-attributes ul li{margin:0;padding:0;display:-webkit-box;display:-ms-flexbox;display:flex;max-width:300px;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border:1px solid #e5e5e5;background-color:#fdfdfd;border-radius:3px}.merchant-metabox-field-wc-attributes ul li:hover{border-color:#ccc}.merchant-metabox-field-wc-attributes ul li label{display:-webkit-box;display:-ms-flexbox;display:flex;grid-gap:5px;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-flex:1;-ms-flex:1;flex:1;padding:8px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.merchant-metabox-field-wc-attributes ul li label input{margin:0}.merchant-metabox-field-wc-attributes ul li .merchant-sortable-move{cursor:pointer;padding:8px}.merchant-metabox-field-code-editor .CodeMirror-wrap{border:1px solid #eee}.merchant-metabox-field-media-content{display:-webkit-box;display:-ms-flexbox;display:flex;grid-gap:10px;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.merchant-metabox-field-media-button{-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;grid-gap:5px}.merchant-metabox-field-no-padding{padding-top:0;padding-bottom:0}body:not(.block-editor-page) #merchant_metabox .inside{margin:0;padding:0}#side-sortables .merchant-metabox-tabs{display:none}#side-sortables .merchant-metabox-content-title,#side-sortables .merchant-metabox-content:not(.active){display:block}#side-sortables .merchant-metabox-field{grid-gap:8px;padding:10px 15px;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}#side-sortables .merchant-metabox-field-title{width:auto;font-size:12px}#side-sortables .merchant-metabox-field-title:empty{display:none}#side-sortables .merchant-metabox-contents{border-left:none;border-right:none}#side-sortables #merchant_metabox .postbox-header{border-top:none}#side-sortables #merchant_metabox .postbox-header h2{color:#1e1e1e;padding:0 0 0 15px;font-size:13px;font-weight:500}#side-sortables #merchant_metabox .inside{padding:0}#side-sortables .merchant-metabox-field-text input,#side-sortables .merchant-metabox-field-uploads-content input,#side-sortables .merchant-metabox-field-repeater-content input{width:100%}.merchant-metabox-field-flexible-content-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:100%;grid-gap:10px}.merchant-metabox-field-flexible-content-list.empty{border:2px dashed #dcdcde;min-height:100px}.merchant-metabox-field-flexible-content-item{border:1px solid #c3c4c7;border-left:3px solid #3858e9}.merchant-metabox-field-flexible-content-item:first-child{display:none}.merchant-metabox-field-flexible-content-item-content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;grid-gap:10px;padding:15px}.merchant-metabox-field-flexible-content-item-content>div{display:-webkit-box;display:-ms-flexbox;display:flex;grid-gap:10px}.merchant-metabox-field-flexible-content-item-content>div:not(:last-child)>div{border-bottom:1px solid #f3f3f3;padding-bottom:15px}.merchant-metabox-field-flexible-content-item-content>div label{width:200px}.merchant-metabox-field-flexible-content-item-content>div>div{width:calc(100% - 200px)}.merchant-metabox-field-flexible-content-item-title{margin-left:10px;font-weight:bold}.merchant-metabox-field-flexible-content-item-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.merchant-metabox-field-flexible-content-item-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:10px 15px;border-bottom:1px solid #f3f3f3}.merchant-metabox-field-flexible-content-item-count{border-radius:50%;width:24px;height:23px;border:1px solid #949494;text-align:center;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;font-size:12px;font-weight:bold}.merchant-metabox-field-flexible-content-add-wrapper{position:relative;display:inline-block}.merchant-metabox-field-flexible-content-add-list{opacity:0;visibility:hidden;position:absolute;background-color:#fff;border:1px solid #c3c4c7;border-left:3px solid #3858e9;-webkit-box-shadow:0 2px 10px 0 rgba(0,0,0,.1019607843);box-shadow:0 2px 10px 0 rgba(0,0,0,.1019607843);width:180px;bottom:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;left:50%;-webkit-transform:translate(-50%, 10px);transform:translate(-50%, 10px);padding:3px 3px 3px 5px}.merchant-metabox-field-flexible-content-add-list.active{z-index:10;opacity:1;visibility:visible;-webkit-transform:translate(-50%, -15px);transform:translate(-50%, -15px);-webkit-transition:all .5s cubic-bezier(0.75, -0.02, 0.2, 0.97);transition:all .5s cubic-bezier(0.75, -0.02, 0.2, 0.97)}.merchant-metabox-field-flexible-content-add-list:before,.merchant-metabox-field-flexible-content-add-list:after{position:absolute;z-index:-1;content:"";border-style:solid;-webkit-transition-duration:.3s;transition-duration:.3s;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform, -webkit-transform}.merchant-metabox-field-flexible-content-add-list:before{right:calc(50% - 12px);bottom:-14px;border-width:14px 14px 0 15px;border-color:#c3c4c7 rgba(0,0,0,0) rgba(0,0,0,0) rgba(0,0,0,0)}.merchant-metabox-field-flexible-content-add-list:after{content:"";right:calc(50% - 10px);bottom:-12px;border-width:12px 12px 0 13px;border-color:#fff rgba(0,0,0,0) rgba(0,0,0,0) rgba(0,0,0,0)}.merchant-metabox-field-flexible-content-add{display:block;-ms-flex-negative:0;flex-shrink:0;padding:10px;text-decoration:none}.merchant-metabox-field-flexible-content-add:hover{background:#f0f0f1}.merchant-metabox-field-input-container{display:-webkit-box;display:-ms-flexbox;display:flex}.merchant-metabox-field-append,.merchant-metabox-field-prepend{background:#f0f0f1;border:1px solid #8c8f94;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;position:relative;padding:0 8px}.merchant-metabox-field-append{font-size:12px;margin-left:-7px;-ms-flex-negative:0;flex-shrink:0;border-top-right-radius:5px;border-bottom-right-radius:5px}.merchant-metabox-field-prepend{font-size:14px;margin-right:-3px;padding:0 10px;margin-left:4px;border-top-left-radius:5px;border-bottom-left-radius:5px}.merchant-pcr-app{position:absolute;top:100% !important;left:0 !important;z-index:9999;margin-top:10px}.merchant-metabox-color-field{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:10px;position:relative}.merchant-metabox-color-field .merchant-color-picker{cursor:pointer;width:36px;height:36px;min-width:36px;min-height:36px;border:1px solid rgba(0,0,0,.1);border-radius:4px;-webkit-transition:border-color .2s ease;transition:border-color .2s ease}.merchant-metabox-color-field .merchant-color-picker:hover{border-color:rgba(0,0,0,.3)}.merchant-metabox-color-field .merchant-color-input{width:100px;max-width:100%;padding:4px 10px;border:1px solid #8c8f94;border-radius:4px;display:block;text-align:center}.merchant-range{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:15px;width:100%}.merchant-range .merchant-range-input{-webkit-appearance:none;width:100%;height:4px;border-radius:5px;background:#e2e2e2;outline:none;padding:0;margin:0}.merchant-range .merchant-range-input::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:14px;height:14px;border-radius:50%;background:#3858e9;cursor:pointer;-webkit-transition:background .15s ease-in-out;transition:background .15s ease-in-out;-webkit-box-shadow:0 0 0 1px #3858e9;box-shadow:0 0 0 1px #3858e9}.merchant-range .merchant-range-input::-moz-range-thumb{width:14px;height:14px;border:0;border-radius:50%;background:#3858e9;cursor:pointer;-moz-transition:background .15s ease-in-out;transition:background .15s ease-in-out;box-shadow:0 0 0 1px #3858e9}.merchant-range .merchant-range-number-input{width:70px;min-width:70px;padding:5px 10px;text-align:center;border:1px solid #d6d6d6;border-radius:4px;font-size:13px;color:#1e1e1e}.merchant-range .merchant-range-number-input:focus{border-color:#3858e9;outline:none}.merchant-range .merchant-range-number-input::-webkit-inner-spin-button,.merchant-range .merchant-range-number-input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.merchant-range .merchant-range-number-input{-moz-appearance:textfield}.merchant-range .merchant-range-unit{color:#757575;font-size:13px;margin-left:-10px}body.rtl .merchant-range .merchant-range-unit{margin-left:0;margin-right:-10px}@media only screen and (max-width: 991px){.merchant-metabox-tabs{display:none}.merchant-metabox-content-title,.merchant-metabox-content:not(.active){display:block}.merchant-metabox-field{grid-gap:8px;padding:15px;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.merchant-metabox-field-title{width:auto}.merchant-metabox-field-title:empty{display:none}.merchant-metabox-contents{border-left:none;border-right:none}#merchant_metabox .inside{padding:0}.merchant-metabox-field-text input,.merchant-metabox-field-uploads-content input,.merchant-metabox-field-repeater-content input{width:100%}}.rtl .merchant-metabox-tabs a:before{right:0;left:unset}.rtl .merchant-metabox-tabs{margin-left:unset;margin-right:-20px}.rtl .merchant-metabox-field-append{border-radius:5px}.rtl .merchant-metabox-contents .merchant-metabox-field-flexible-content-item{border-left:1px solid #c3c4c7;border-right:3px solid #3858e9}.rtl .merchant-metabox-contents .merchant-metabox-field-flexible-content-item-title{margin-left:unset;margin-right:10px}
  • merchant/trunk/assets/css/modules/buy-now/buy-now.css

    r3403526 r3458319  
    6363}
    6464
     65.merchant-quick-view-content .merchant-quick-view-summary .merchant-buy-now-button {
     66  -ms-flex-preferred-size: 100%;
     67      flex-basis: 100%;
     68}
     69
    6570.rtl.single-product .merchant-buy-now-button {
    6671  margin-left: 0;
  • merchant/trunk/assets/css/modules/buy-now/buy-now.min.css

    r3403526 r3458319  
    1 .merchant-buy-now-button.merchant-custom-buy-now-button{display:-webkit-inline-box !important;display:-ms-inline-flexbox !important;display:inline-flex !important;-webkit-box-align:center;-ms-flex-align:center;align-items:center;line-height:1.2 !important;max-width:none;margin-top:var(--mrc-buy-now-margin-top, 0.5rem) !important;margin-bottom:var(--mrc-buy-now-margin-bottom, 1rem) !important;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;text-decoration:none !important;padding-top:var(--mrc-buy-now-padding-top-bottom, 13px) !important;padding-bottom:var(--mrc-buy-now-padding-top-bottom, 13px) !important;padding-left:var(--mrc-buy-now-padding-left-right, 24px) !important;padding-right:var(--mrc-buy-now-padding-left-right, 24px) !important;font-size:var(--mrc-buy-now-font-size, 16px) !important;border-radius:var(--mrc-buy-now-border-radius, 0px) !important;color:var(--mrc-buy-now-text-color, #FFF) !important;border-color:var(--mrc-buy-now-border-color, #212121) !important;background-color:var(--mrc-buy-now-background-color, #212121) !important}.merchant-buy-now-button.merchant-custom-buy-now-button.disabled{cursor:not-allowed;opacity:.5}.merchant-buy-now-button.merchant-custom-buy-now-button:hover{color:var(--mrc-buy-now-text-hover-color, #FFF) !important;border-color:var(--mrc-buy-now-border-hover-color, #414141) !important;background-color:var(--mrc-buy-now-background-hover-color, #414141) !important}.merchant-buy-now-button.merchant-custom-buy-now-button::before{display:none}.products .product .merchant-buy-now-button.merchant-custom-buy-now-button,.wc-block-grid__products .wc-block-grid__product .merchant-buy-now-button.merchant-custom-buy-now-button{width:100%}.single-product .product .cart .merchant-buy-now-button{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:-webkit-fit-content !important;width:-moz-fit-content !important;width:fit-content !important;margin-top:var(--mrc-buy-now-margin-top, 0) !important;margin-bottom:var(--mrc-buy-now-margin-bottom, 0) !important;margin-left:5px;float:none !important}.rtl.single-product .merchant-buy-now-button{margin-left:0;margin-right:5px}
     1.merchant-buy-now-button.merchant-custom-buy-now-button{display:-webkit-inline-box !important;display:-ms-inline-flexbox !important;display:inline-flex !important;-webkit-box-align:center;-ms-flex-align:center;align-items:center;line-height:1.2 !important;max-width:none;margin-top:var(--mrc-buy-now-margin-top, 0.5rem) !important;margin-bottom:var(--mrc-buy-now-margin-bottom, 1rem) !important;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;text-decoration:none !important;padding-top:var(--mrc-buy-now-padding-top-bottom, 13px) !important;padding-bottom:var(--mrc-buy-now-padding-top-bottom, 13px) !important;padding-left:var(--mrc-buy-now-padding-left-right, 24px) !important;padding-right:var(--mrc-buy-now-padding-left-right, 24px) !important;font-size:var(--mrc-buy-now-font-size, 16px) !important;border-radius:var(--mrc-buy-now-border-radius, 0px) !important;color:var(--mrc-buy-now-text-color, #FFF) !important;border-color:var(--mrc-buy-now-border-color, #212121) !important;background-color:var(--mrc-buy-now-background-color, #212121) !important}.merchant-buy-now-button.merchant-custom-buy-now-button.disabled{cursor:not-allowed;opacity:.5}.merchant-buy-now-button.merchant-custom-buy-now-button:hover{color:var(--mrc-buy-now-text-hover-color, #FFF) !important;border-color:var(--mrc-buy-now-border-hover-color, #414141) !important;background-color:var(--mrc-buy-now-background-hover-color, #414141) !important}.merchant-buy-now-button.merchant-custom-buy-now-button::before{display:none}.products .product .merchant-buy-now-button.merchant-custom-buy-now-button,.wc-block-grid__products .wc-block-grid__product .merchant-buy-now-button.merchant-custom-buy-now-button{width:100%}.single-product .product .cart .merchant-buy-now-button{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:-webkit-fit-content !important;width:-moz-fit-content !important;width:fit-content !important;margin-top:var(--mrc-buy-now-margin-top, 0) !important;margin-bottom:var(--mrc-buy-now-margin-bottom, 0) !important;margin-left:5px;float:none !important}.merchant-quick-view-content .merchant-quick-view-summary .merchant-buy-now-button{-ms-flex-preferred-size:100%;flex-basis:100%}.rtl.single-product .merchant-buy-now-button{margin-left:0;margin-right:5px}
  • merchant/trunk/assets/css/modules/pre-orders/pre-orders.css

    r3092224 r3458319  
    1212.woocommerce.single-product .merchant-pre-ordered-product .single_add_to_cart_button:not(.merchant_buy_now_button):not(.merchant-quick-view-button) {
    1313  color: var(--mrc-po-text-color, #FFF) !important;
    14   border-color: var(--mrc-po-border-color, #212121) !important;
     14  border: var(--mrc-po-border-width, 0px) solid var(--mrc-po-border-color, #212121) !important;
     15  border-radius: var(--mrc-po-border-radius, 0px) !important;
    1516  background-color: var(--mrc-po-background-color, #212121) !important;
    1617}
     
    1920.woocommerce.single-product .merchant-pre-ordered-product .single_add_to_cart_button:not(.merchant_buy_now_button):not(.merchant-quick-view-button):hover {
    2021  color: var(--mrc-po-text-hover-color, #FFF) !important;
    21   border-color: var(--mrc-po-border-hover-color, #414141) !important;
     22  border: var(--mrc-po-border-width, 0px) solid var(--mrc-po-border-hover-color, #414141) !important;
    2223  background-color: var(--mrc-po-background-hover-color, #414141) !important;
    2324}
  • merchant/trunk/assets/css/modules/pre-orders/pre-orders.min.css

    r3092224 r3458319  
    1 .merchant-pre-orders-date{font-weight:700;margin-bottom:15px}.woocommerce.single-product .merchant-pre-ordered-product .add_to_cart_button:not(.merchant_buy_now_button):not(.merchant-quick-view-button),.woocommerce.single-product .merchant-pre-ordered-product .product_type_grouped:not(.merchant_buy_now_button):not(.merchant-quick-view-button),.woocommerce.single-product .merchant-pre-ordered-product .single_add_to_cart_button:not(.merchant_buy_now_button):not(.merchant-quick-view-button){color:var(--mrc-po-text-color, #FFF) !important;border-color:var(--mrc-po-border-color, #212121) !important;background-color:var(--mrc-po-background-color, #212121) !important}.woocommerce.single-product .merchant-pre-ordered-product .add_to_cart_button:not(.merchant_buy_now_button):not(.merchant-quick-view-button):hover,.woocommerce.single-product .merchant-pre-ordered-product .product_type_grouped:not(.merchant_buy_now_button):not(.merchant-quick-view-button):hover,.woocommerce.single-product .merchant-pre-ordered-product .single_add_to_cart_button:not(.merchant_buy_now_button):not(.merchant-quick-view-button):hover{color:var(--mrc-po-text-hover-color, #FFF) !important;border-color:var(--mrc-po-border-hover-color, #414141) !important;background-color:var(--mrc-po-background-hover-color, #414141) !important}dl.merchant-pre-orders-note{list-style:none outside;margin-bottom:0}dl.merchant-pre-orders-note dt{float:left;clear:both;margin:0;margin-right:.25em;list-style:none outside}dl.merchant-pre-orders-note dd{margin:0}span.merchant-pre-orders-note{display:block;font-size:max(12px,.7em);opacity:.7}span.merchant-pre-orders-note .merchant-pre-orders-label{padding-right:.2em}
     1.merchant-pre-orders-date{font-weight:700;margin-bottom:15px}.woocommerce.single-product .merchant-pre-ordered-product .add_to_cart_button:not(.merchant_buy_now_button):not(.merchant-quick-view-button),.woocommerce.single-product .merchant-pre-ordered-product .product_type_grouped:not(.merchant_buy_now_button):not(.merchant-quick-view-button),.woocommerce.single-product .merchant-pre-ordered-product .single_add_to_cart_button:not(.merchant_buy_now_button):not(.merchant-quick-view-button){color:var(--mrc-po-text-color, #FFF) !important;border:var(--mrc-po-border-width, 0px) solid var(--mrc-po-border-color, #212121) !important;border-radius:var(--mrc-po-border-radius, 0px) !important;background-color:var(--mrc-po-background-color, #212121) !important}.woocommerce.single-product .merchant-pre-ordered-product .add_to_cart_button:not(.merchant_buy_now_button):not(.merchant-quick-view-button):hover,.woocommerce.single-product .merchant-pre-ordered-product .product_type_grouped:not(.merchant_buy_now_button):not(.merchant-quick-view-button):hover,.woocommerce.single-product .merchant-pre-ordered-product .single_add_to_cart_button:not(.merchant_buy_now_button):not(.merchant-quick-view-button):hover{color:var(--mrc-po-text-hover-color, #FFF) !important;border:var(--mrc-po-border-width, 0px) solid var(--mrc-po-border-hover-color, #414141) !important;background-color:var(--mrc-po-background-hover-color, #414141) !important}dl.merchant-pre-orders-note{list-style:none outside;margin-bottom:0}dl.merchant-pre-orders-note dt{float:left;clear:both;margin:0;margin-right:.25em;list-style:none outside}dl.merchant-pre-orders-note dd{margin:0}span.merchant-pre-orders-note{display:block;font-size:max(12px,.7em);opacity:.7}span.merchant-pre-orders-note .merchant-pre-orders-label{padding-right:.2em}
  • merchant/trunk/assets/js/admin/admin.js

    r3403526 r3458319  
    10291029          });
    10301030        });
    1031         $('.customize-control-flexible-content-add-button').click(function (event) {
     1031        $('.customize-control-flexible-content-add-button').on('click', function (event) {
    10321032          event.preventDefault();
    10331033          event.stopImmediatePropagation();
     
    11051105          var $items = $flexibleContent.find('.layout');
    11061106          var index = $sourceLayout.find('.layout-count').text();
     1107          var uuid = self.generateUUID();
     1108          $clonedLayout.attr('data-layout-id', uuid);
     1109          $clonedLayout.find('.flexible-id').val(uuid);
    11071110          $clonedLayout.find('input, select, textarea').each(function () {
    11081111            var $input = $(this);
  • merchant/trunk/assets/js/admin/admin.min.js

    r3403526 r3458319  
    1 function _typeof(e){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}((m,u,p,f)=>{var v={},g=new URLSearchParams(u.location.search),b=g.get("module");function w(e){return"string"==typeof e&&!isNaN(e)&&!isNaN(parseFloat(e))}m(p).ready(function(){var e=m(".merchant-module-page-ajax-form"),n=m(".merchant-module-page-ajax-header"),a=(m(".merchant-module-save-button"),m(".merchant-module-page-content").on("change keypress change.merchant",function(e){m(e.target).hasClass("merchant-backup-file")||(m(this).is(".merchant-module-question-answer-textarea, .merchant-license-code-input")||v.show_save||(n.addClass("merchant-show"),n.removeClass("merchant-saving"),v.show_save=!0),s.initFlag())}),e.ajaxForm({beforeSubmit:function(){n.addClass("merchant-saving")},success:function(){var t;n.removeClass("merchant-show"),v.show_save=!1,m(".merchant-module-action").hasClass("merchant-enabled")||((t=m(".merchant-module-alert")).addClass("merchant-show"),m(p).off("click.merchant-alert-close"),m(p).on("click.merchant-alert-close",function(e){m(e.target).closest(".merchant-module-alert-wrapper").length||(t.removeClass("merchant-show"),m(p).off("click.merchant-alert-close"))})),m(p).trigger("save.merchant",[b])}}),m(".merchant-module-question-answer-button")),i=m(".merchant-module-question-answer-textarea");function r(){var e=m(p).find(".merchant-range");0!==e.length&&e.each(function(){var e=m(this),a=e.find(".merchant-range-input"),i=e.find(".merchant-range-number-input");a.on("change input merchant.range merchant-init.range",function(e){var t=m(this),e=("merchant"===e.type?i:t).val()||0,n=t.attr("min")||0,n=(e-n)/((t.attr("max")||1)-n)*100;m("body").hasClass("rtl")?t.css({background:"linear-gradient(to left, #3858E9 0%, #3858E9 "+n+"%, #ddd "+n+"%, #ddd 100%)"}):t.css({background:"linear-gradient(to right, #3858E9 0%, #3858E9 "+n+"%, #ddd "+n+"%, #ddd 100%)"}),a.val(e),i.val(e)}).trigger("merchant-init.range"),i.on("change input blur",function(){a.hasClass("merchant-range-input")&&a.val(m(this).val()).trigger("merchant.range")})})}i.on("input",function(){a.prop("disabled",""===m(this).val().trim())}),a.on("click",function(e){e.preventDefault();var t,e=i.val();e.trim()?(t=m(this),m(".merchant-module-question-answer-dropdown").removeClass("merchant-show"),m(".merchant-module-question-thank-you-dropdown").addClass("merchant-show"),u.wp.ajax.post("merchant_module_feedback",{subject:i.attr("data-subject"),message:e,module:t.closest(".merchant-module-action").find(".merchant-module-page-button-action-activate").data("module"),nonce:u.merchant.nonce})):alert("Please provide the required information.")}),m(".merchant-module-page-button-action-activate").on("click",function(e){if(e.preventDefault(),m(this).hasClass("merchant-module-deactivated-by-bp"))return!1;m(".merchant-module-question-list-dropdown").removeClass("merchant-show"),m(".merchant-module-question-answer-dropdown").removeClass("merchant-show"),m(".merchant-module-question-answer-form").removeClass("merchant-show"),m(".merchant-module-question-answer-title").removeClass("merchant-show"),m(".merchant-module-question-thank-you-dropdown").removeClass("merchant-show"),m(".merchant-module-question-answer-textarea").val(""),u.wp.ajax.post("merchant_module_activate",{module:m(this).data("module"),nonce:u.merchant.nonce}).done(function(){m("body").removeClass("merchant-module-disabled").addClass("merchant-module-enabled"),m(".merchant-module-action").addClass("merchant-enabled")})}),m(".merchant-module-page-button-action-deactivate").on("click",function(e){e.preventDefault(),u.wp.ajax.post("merchant_module_deactivate",{module:m(this).data("module"),nonce:u.merchant.nonce}).done(function(){m("body").removeClass("merchant-module-enabled").addClass("merchant-module-disabled"),m(".merchant-module-action").removeClass("merchant-enabled"),m(".merchant-module-question-list-dropdown").addClass("merchant-show")})}),m(".merchant-module-question-list-dropdown li").on("click",function(e){a.prop("disabled",""===i.val().trim());var t=m(this),n=t.data("answer-target"),n=m('[data-answer-title="'+n+'"]');n.length?(n.addClass("merchant-show").siblings().removeClass("merchant-show"),m(".merchant-module-question-answer-dropdown").addClass("merchant-show"),m(".merchant-module-question-answer-textarea").attr("data-subject",t.text().trim())):(m(".merchant-module-question-thank-you-dropdown").addClass("merchant-show"),m(".merchant-module-question-answer-dropdown").removeClass("merchant-show")),m(".merchant-module-question-answer-textarea").val(""),m(".merchant-module-question-list-dropdown").removeClass("merchant-show")}),m(".merchant-module-dropdown-close").on("click",function(e){e.preventDefault(),m(this).closest(".merchant-module-dropdown").removeClass("merchant-show")}),m(".merchant-module-page-button-deactivate").on("click",function(e){e.preventDefault();m(this);var t=m(".merchant-module-deactivate-dropdown");t.toggleClass("merchant-show"),m(p).off("click.merchant-close"),m(p).on("click.merchant-close",function(e){m(e.target).closest(".merchant-module-deactivate").length||(t.removeClass("merchant-show"),m(p).off("click.merchant-close"))})}),r(),m(p).on("click",".merchant-module-page-setting-field-hidden-desc-trigger",function(){var e=m(this),t=(e.toggleClass("expanded"),e.attr("data-show-text")),n=e.attr("data-hidden-text");m(this).find("span:first").text(e.text()===t?n:t),m(this).closest(".merchant-module-page-setting-field").find(".merchant-module-page-setting-field-hidden-desc").stop(!0,!0).slideToggle("fast")});({init:function(){this.events()},events:function(){m(p).on("click","#download-backup-button",this.download.bind(this)),m(p).on("click","#restore-backup-button",this.restore.bind(this)),m(p).on("change","#merchant-backup-file",this.removeBackupFile.bind(this))},download:function(e){var a=this,i=(e.preventDefault(),m(".merchant-module-page-setting-fields .backup-section")),o=(a.hideError(i),m(e.target).attr("data-module-id"));m.ajax({url:merchant_admin_options.ajaxurl,type:"GET",data:{action:"merchant_get_module_settings",nonce:merchant_admin_options.ajaxnonce,module_id:o},beforeSend:function(){a.showLoadingIndicator(i)},success:function(e){var t,n;e.success?(t=e.data,n="merchant-"+o+"-backup-"+(new Date).toISOString().slice(0,10)+"-"+(new Date).getHours()+"-"+(new Date).getMinutes()+"-"+(new Date).getSeconds()+".json",a.downloadJson(t,n)):a.displayError(e.data.message,i),a.hideLoadingIndicator(i)},error:function(e,t,n){a.displayError(n,i),a.hideLoadingIndicator(i)}})},restore:function(e){var t,a=this,i=(e.preventDefault(),m(".merchant-module-page-setting-fields .restore-section")),n=(a.hideError(i),m(e.target).attr("data-module-id")),e=m(".merchant-backup-file").prop("files")[0];e&&"application/json"===e.type?((t=new FileReader).onload=function(e){e=e.target.result;m.ajax({url:merchant_admin_options.ajaxurl,type:"POST",data:{action:"merchant_restore_module_settings",nonce:merchant_admin_options.ajaxnonce,module_id:n,module_settings:e},beforeSend:function(){a.showLoadingIndicator(i)},success:function(e){e.success?u.location.href=e.data.redirect_url:a.displayError(e.data.message,i),a.hideLoadingIndicator(i)},error:function(e,t,n){a.displayError(n,i),a.hideLoadingIndicator(i)}})},t.readAsText(e)):a.displayError(merchant_admin_options.invalid_file,i)},removeBackupFile:function(e){var t,n=m(e.target);n.length&&(e=m(".backup-file-remove"),0<(null==(t=n[0])?void 0:t.files.length)?e.show():e.hide(),e.on("click",function(){n.val(""),m(this).hide()}))},downloadJson:function(e,t){"object"===_typeof(e)&&(e=JSON.stringify(e));var e=new Blob([e],{type:"application/json"}),e=URL.createObjectURL(e),n=p.createElement("a");n.href=e,n.download=t,n.click(),URL.revokeObjectURL(e)},displayError:function(e,t){t.append('<div class="error-message"><p>'.concat(e,"</p></div>"))},hideError:function(e){e.find(".error-message").remove()},showLoadingIndicator:function(e){e.find(".merchant-loading-spinner").addClass("show")},hideLoadingIndicator:function(e){e.find(".merchant-loading-spinner").removeClass("show")}}).init();e={init:function(e){this.events()},events:function(){m(p).on("click",".merchant-flexible-content .merchant-toggle-switch .toggle-switch-label span",function(){var e=m(this).closest(".merchant-toggle-switch").find(".toggle-switch-checkbox");e.prop("checked",!e.prop("checked"))}).trigger("merchant.change")}};({init:function(){this.initiate_datepicker(),this.events()},initiate_datepicker:function(){var e=m(".merchant-module-page-setting-field .merchant-datetime-field");0!==e.length&&e.each(function(n){var a=m(this).find("input"),i={locale:JSON.parse(merchant_datepicker_locale),selectedDates:[a.val()?new Date(a.val()):""],onSelect:function(e){e.date;var t=e.formattedDate;void 0===t&&(e.datepicker.$el.value=""),a.trigger("change.merchant"),a.trigger("change.merchant-datepicker",[t,a,i,n])}},e=m(this).data("options"),e=(e.buttons=["clear"],e&&(e.minDate!==f&&"today"===e.minDate&&(e.minDate=new Date,e.timeZone!==f)&&""!==e.timeZone&&(e.minDate=new Date(e.minDate.toLocaleString("en-US",{timeZone:e.timeZone}))),i=Object.assign(i,e)),new AirDatepicker(a.getPath(),i));a.attr("readonly",!0),m(p).trigger("initiated.merchant-datepicker",[e,a,i,n])})},events:function(){var e=this;m(p).on("merchant-flexible-content-added",function(){e.initiate_datepicker()})}}).init();({init:function(e){this.events()},events:function(){var n=this;m(".merchant-sortable").each(function(){var e=m(this),t=e.find(".merchant-sortable-input");m(e.find("ul.merchant-sortable-list").first()).sortable({update:function(){t.val(n.sortableGetNewVal(e)).trigger("change.merchant")}}).disableSelection().find("li").each(function(){m(this).find("i.visibility").click(function(){m(this).toggleClass("dashicons-visibility-faint").parents("li:eq(0)").toggleClass("invisible")})}).click(function(){m(event.target).hasClass("dashicons-visibility")&&t.val(n.sortableGetNewVal(e)).trigger("change.merchant")})})},sortableGetNewVal:function(e){var e=m(e.find("li")),t=[];return _.each(e,function(e){m(e).hasClass("invisible")||t.push(m(e).data("value"))}),JSON.stringify(t)}}).init(),e.init(),m(p).on("merchant-flexible-content-added",function(e,t){t=t.find(".merchant-sortable-repeater-control").find(".merchant-sortable-repeater.sortable");c.makeFieldsSortable(t)});var o,c={init:function(e){var a=this;m(".merchant-sortable-repeater-control").each(function(){var e=JSON.parse(m(this).find(".merchant-sortable-repeater-input").val()),t=e.length;if(0<t&&(m(this).find(".repeater-input").val(e[0]),1<t))for(var n=1;n<t;++n)a.appendRow(m(this),e[n])}),this.events()},events:function(){var t=this;m(p).on("click",".merchant-sortable-repeater.sortable .customize-control-sortable-repeater-delete",function(e){e.preventDefault(),m(this).parent().slideUp("fast",function(){var e=m(this).parent().parent();m(this).remove(),t.getAllInputs(e)}),m(p).trigger("merchant-sortable-repeater-item-deleted")}),m(p).on("click",".customize-control-sortable-repeater-add",function(e){e.preventDefault(),t.appendRow(m(this).parent()),t.getAllInputs(m(this).parent())}),m(p).on("change",".merchant-sortable-repeater.sortable",function(){t.getAllInputs(m(this).parent())}),m(p).on("focusout",".merchant-sortable-repeater.sortable .repeater-input",function(){t.getAllInputs(m(this).parent())})},appendRow:function(e){var t='<div class="repeater" style="display:none"><input type="text" value="'+(1<arguments.length&&arguments[1]!==f?arguments[1]:"")+'" class="repeater-input" /><span class="dashicons dashicons-menu"></span><a class="customize-control-sortable-repeater-delete" href="#"><span class="dashicons dashicons-no-alt"></span></a></div>',t=(e.find(".sortable").append(t),e.find(".sortable").find(".repeater:last"));t.slideDown("slow",function(){m(this).find("input").focus()}),this.makeFieldsSortable(e.find(".sortable")),m(p).trigger("merchant-sortable-repeater-item-added",[t,e.find(".sortable")])},makeFieldsSortable:function(n){n.hasClass("disable-sorting")||n.sortable({update:function(e,t){c.getAllInputs(n.parent())}})},getAllInputs:function(e){var t=e.find(".repeater-input").map(function(){return m(this).val()}).toArray();t.length||t.push(""),e.find(".merchant-sortable-repeater-input").val(JSON.stringify(t)),e.find(".merchant-sortable-repeater-input").trigger("change"),e.find(".merchant-sortable-repeater-input").trigger("sortable.repeater.change")}},s=(c.init(),{init:function(){this.initAccordion(),this.initFlag()},initAccordion:function(){m(".merchant-group-field.has-accordion").each(function(){var e=m(this);e.accordion({collapsible:!0,header:"> .title-area",heightStyle:"content",active:!!e.hasClass("open")&&0})})},initFlag:function(){m(".merchant-group-field.has-flag").each(function(){var e=m(this),t=e.data("id"),t=e.find(".merchant-field-".concat(t,"_status select")),n=t.val(),t=t.find("option:selected").text();e.find(".field-status").removeClass("hidden active inactive").text(t).addClass(n)})}}),e={accordion:null,activePopupContainer:null,init:function(){this.initAccordion(),this.events(),this.makeSelectedReviewsSortable(m(".merchant-reviews-selector").not(".layouts .merchant-reviews-selector"))},events:function(){var n=this;m(p).on("input",".merchant-reviews-selector .products-search",n.ajaxSearch.bind(n)),m(p).on("change",'.merchant-reviews-selector .product-review input[type="checkbox"]',n.toggleReview.bind(n)),m(p).on("click",".merchant-reviews-selector .review-photo img",n.requestReviewImages.bind(n)),m(p).on("click",".review-photos-popup .overlay",n.dismissImagesGallery.bind(n)),m(p).on("click",".merchant-reviews-selector .product-reviews-load-more button",n.loadMoreReviews.bind(n)),m(p).on("click",".merchant-reviews-selector .popup-trigger",n.initPopUp.bind(n)),m(p).on("click",".merchant-reviews-selector .popup-header .close, .merchant-reviews-selector > .overlay",n.dismissPopUp.bind(n)),m(p).on("click",".merchant-reviews-selector .product-review-delete",n.deleteSelectedReview.bind(n)),m(p).on("keyup",function(e){"Escape"!==e.key||n.dismissImagesGallery()||n.dismissPopUp(n)}),m(p).on("merchant-flexible-content-added",function(e,t){n.makeSelectedReviewsSortable(),n.initAccordion()})},makeSelectedReviewsSortable:function(){var e=0<arguments.length&&arguments[0]!==f?arguments[0]:m(p).find(".merchant-reviews-selector").not(".layouts .merchant-reviews-selector"),n=this;e.find(".selected-reviews .product-reviews").sortable({axis:"y",cursor:"move",helper:"original",handle:".product-review-move",cancel:"",placeholder:"placeholder",update:function(e,t){t=t.item.closest(".merchant-reviews-selector");n.saveModifications(t)},start:function(e,t){t.placeholder.height(t.item.height())}})},deleteSelectedReview:function(e){var e=m(e.target).closest(".product-review"),t=e.closest(".merchant-reviews-selector");e.remove(),this.saveModifications(t),this.updateSelectedReviewsCheckboxState(t),this.countSelectedReviewsInProduct(t)},ajaxSearch:function(e){var t=this,e=m(e.target),n=e.closest(".merchant-reviews-selector"),a=n.find(".popup-header");(0===e.val().length||3<=e.val().length)&&m.ajax({url:merchant_admin_options.ajaxurl,type:"POST",data:{action:"merchant_search_reviews",search:e.val(),nonce:merchant_admin_options.ajaxnonce},beforeSend:function(){a.addClass("loading"),t.destroyAccordion(n)},success:function(e){e.success?(a.removeClass("popup-error"),n.find(".products-search-results").html(e.data),t.initAccordion(n)):a.addClass("popup-error")},complete:function(){a.removeClass("loading")},error:function(){a.addClass("popup-error")}})},loadMoreReviews:function(e){var t=this,n=m(e.target).closest(".product-item"),e=n.find(".product-review").length;m.ajax({url:merchant_admin_options.ajaxurl,type:"POST",data:{action:"merchant_load_more_reviews",product_id:n.attr("data-id"),offset:e,nonce:merchant_admin_options.ajaxnonce},beforeSend:function(){n.addClass("loading")},success:function(e){e.success&&(n.find(".product-reviews .reviews-wrapper").append(e.data.reviews),""===e.data.load_more&&t.hideLoadMoreButton(n),t.updateSelectedReviewsCheckboxState(n.closest(".merchant-reviews-selector")),t.countSelectedReviewsInProduct(n.closest(".merchant-reviews-selector")))},complete:function(){n.removeClass("loading")}})},hideLoadMoreButton:function(e){e.find(".product-reviews-load-more").remove()},initPopUp:function(e){var e=m(e.target).closest(".merchant-reviews-selector"),t=e.find(".selector-popup"),n=e.find(".overlay");t.addClass("active"),n.addClass("active"),this.activePopupContainer=e},dismissPopUp:function(){var e,t=this.activePopupContainer;null!==t&&(e=t.find(".selector-popup"),t=t.find(".overlay"),e.removeClass("active"),t.removeClass("active"),this.activePopupContainer=null)},initAccordion:function(){var e=0<arguments.length&&arguments[0]!==f?arguments[0]:m(p).find(".merchant-reviews-selector"),t=this;e.each(function(){var n=m(this).find(".popup-content .product-item.product-item-has-reviews");n.each(function(){n.accordion({collapsible:!0,heightStyle:"content",icons:!1,active:!!n.hasClass("opened")&&0,activate:function(e,t){t.newPanel.length?t.newPanel.parent().addClass("opened"):n.removeClass("opened")}})}),n.find("a").on("click",function(e){e.stopPropagation()}),t.updateSelectedReviewsCheckboxState(m(this)),t.countSelectedReviewsInProduct(m(this))})},destroyAccordion:function(e){e.find(".selector-popup .product-item.product-item-has-reviews").each(function(){m(this).hasClass("ui-accordion")&&m(this).accordion("destroy")})},toggleReview:function(e){var t=this,n=m(e.target).prop("checked"),a=m(e.target).closest(".merchant-reviews-selector"),e=m(e.target).closest(".product-review"),i=e.attr("data-id"),o=a.find(".selected-reviews .product-reviews"),i=o.find('.product-review[data-id="'.concat(i,'"]'));n?0===i.length&&(n=e.clone(),o.append(n),t.makeSelectedReviewsSortable()):i.remove(),setTimeout(function(){t.saveModifications(a)},150)},saveModifications:function(e){var t=e.find(".review-saved-ids"),n=e.find(".selected-reviews .product-reviews").find(".product-review"),a=[];n.each(function(){var e=m(this).attr("data-id");a.push(e)}),t.val(a.join(",")),t.trigger("change"),this.updateSelectedReviewsCheckboxState(e),this.countSelectedReviewsInProduct(e)},updateSelectedReviewsCheckboxState:function(n){var e=n.find(".selector-popup"),t=n.find(".review-saved-ids"),e=e.find(".product-review"),a=t.val().split(",");e.each(function(){var e=m(this).attr("data-id"),t=n.find('.product-review[data-id="'.concat(e,'"] input[type="checkbox"]'));a.includes(e)?t.prop("checked",!0):t.prop("checked",!1)})},countSelectedReviewsInProduct:function(e){var t=e.find(".selector-popup .product-item"),n=e.find(".review-saved-ids").val().split(",");t.each(function(){var t=0,e=m(this);e.find(".product-review").each(function(){var e=m(this).attr("data-id");n.includes(e)&&t++}),e.find(".selected-reviews-count .counter").text(t)})},requestReviewImages:function(e){var t=m(e.target).closest(".product-review"),n=m(e.target),e=t.attr("data-id");m.ajax({url:merchant_admin_options.ajaxurl,type:"POST",data:{action:"merchant_get_review_images",review_id:e,nonce:merchant_admin_options.ajaxnonce},beforeSend:function(){n.addClass("loading")},success:function(e){e.success&&(m("body").append(e.data),setTimeout(function(){m("body").find(".review-photos-popup").addClass("active")},300))},complete:function(){n.removeClass("loading")}})},dismissImagesGallery:function(){var e=m("body").find(".review-photos-popup");return!!e.length&&(e.removeClass("active"),setTimeout(function(){e.remove()},300),!0)}};({init:function(e){var i=this;m(".merchant-flexible-content-control").each(function(){var e=m(this).hasClass("has-accordion"),n=m(this).find(".merchant-flexible-content"),t=g.get("campaign_id"),a=0;t&&n.find("input.flexible-id").each(function(e){if(m(this).val()===t)return a=e,!1}),e?n.accordion({active:a,collapsible:!0,header:function(e){return e.find(".layout__inner > .layout-header")},heightStyle:"content"}).sortable({axis:"y",cursor:"move",helper:"original",handle:".customize-control-flexible-content-move",stop:function(e,t){n.trigger("merchant.sorted"),i.refreshNumbers(n),n.accordion("refresh")}}):n.sortable({axis:"y",cursor:"move",helper:"original",handle:".customize-control-flexible-content-move",stop:function(e,t){n.trigger("merchant.sorted"),i.refreshNumbers(n),n.accordion("refresh")}})}),this.updateLayoutTitle(),this.updateDiscountPercentMaxVal(),this.events()},updateLayoutTitle:function(){m(".merchant-flexible-content .layout").each(function(){var e,t=m(this).find(".layout-title[data-title-field]");t.length&&((e=m(this).find(".layout-body .merchant-field-"+t.data("title-field")+" input")).on("change keyup",function(){t.text(m(this).val())}),t.text(e.val()))})},updateDiscountPercentMaxVal:function(){m(".merchant-flexible-content .layout").each(function(){var e=m(this),t=e.find('.merchant-module-page-setting-field[data-id="discount_type"]'),n=e.find('.merchant-module-page-setting-field[data-id="discount_value"]'),e=(n=(n=n.length?n:e.find('.merchant-module-page-setting-field[data-id="discount"]')).length?n:e.find('.merchant-module-page-setting-field[data-id="discount_amount"]'),t.find("input:checked").val());"percentage_discount"===e||"percentage"===e?n.find("input").attr("max",100):n.find("input").removeAttr("max")}),m(".merchant-module-page-setting-fields")},generateUUID:function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(e){var t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)})},events:function(){var o=this;function n(e){e&&e.length&&e.siblings().find(".layout-actions__inner").slideUp(300)}m(p).on("change",'.merchant-module-page-setting-field[data-id="discount_type"] input',function(){o.updateDiscountPercentMaxVal()}),m(p).on("change","select",function(){var t=m(this).val(),n=m(this).prop("multiple");m(this).find("option").each(function(){var e=m(this).val(),e=n?t.includes(e):e===t;m(this).attr("selected",e)})}),m(".customize-control-flexible-content-add-button").click(function(e){e.preventDefault(),e.stopImmediatePropagation(),1===m(this).parent().find(".customize-control-flexible-content-add-list a").length?m(this).parent().find(".customize-control-flexible-content-add-list a").trigger("click"):m(this).parent().find(".customize-control-flexible-content-add-list").toggleClass("active")}),m(p).on("click",".customize-control-flexible-content-add",function(e){e.preventDefault(),e.stopImmediatePropagation();var e=m(".merchant-flexible-content-control[data-id="+m(this).data("id")+"]"),t=e.find(".layouts"),n=m(this).data("layout"),t=t.find(".layout[data-type="+n+"]").clone(!0),n=e.find(".merchant-flexible-content"),a=n.find(".layout"),e=o.generateUUID(),e=(t.find("input, select, textarea").each(function(){m(this).data("name")&&m(this).attr("name",m(this).data("name").replace("0",a.length)),m(this).is(":checkbox, :radio")&&m(this).attr("checked")&&m(this).prop("checked",!0)}),t.attr("data-layout-id",e),t.find(".layout-count").text(a.length+1),t.find(".flexible-id").val(e),n.append(t),n.removeClass("empty"),m(this).parent().removeClass("active"),t.find(".merchant-module-page-setting-field-upload").length&&l(t.find(".merchant-module-page-setting-field-upload")),t.find(".merchant-module-page-setting-field-select_ajax").length&&d(t.find(".merchant-module-page-setting-field-select_ajax")),m(this).closest(".merchant-flexible-content-control"));e.hasClass("has-accordion")&&(e.find(".merchant-flexible-content").accordion("refresh"),e.find(".merchant-flexible-content").accordion("option","active",-1)),s.init(),m(p).trigger("merchant-flexible-content-added",[t]),r(),o.updateLayoutTitle(),o.updateDiscountPercentMaxVal()}),m(p).on("click",".customize-control-flexible-content-duplicate",function(e){e.preventDefault(),e.stopImmediatePropagation();var t,a,e=m(this),n=e.closest(".merchant-flexible-content-control[data-id="+e.data("id")+"]"),i=null==n?void 0:n.find(".merchant-flexible-content");n.length&&i.length&&(e=e.closest(".layout")).length&&(e.find(".layout-actions__inner").hide(),t=e.clone(),i.find(".layout"),a=e.find(".layout-count").text(),t.find("input, select, textarea").each(function(){var e,t=m(this),n=t.attr("name");n&&(e=n.split("[")[0],n=n.match(/\[(.*?)\]/g))&&1<n.length&&(n[1]="["+a+"]",e="".concat(e).concat(n.join("")),t.attr("name",e))}),t.find("select").each(function(){m(this).hasClass("select2-hidden-accessible")&&(m(this).removeClass("select2-hidden-accessible").removeAttr("data-live-search").removeAttr("data-select2-id").removeAttr("aria-hidden").removeAttr("tabindex"),m(this).nextAll(".select2-container").remove(),m(this).select2())}),t.find(".layout-body").removeAttr("style"),t.hide(),t.insertAfter(e),t.fadeIn(),t.find(".merchant-module-page-setting-field-upload").length&&l(t.find(".merchant-module-page-setting-field-upload")),t.find(".merchant-module-page-setting-field-select_ajax").length&&d(t.find(".merchant-module-page-setting-field-select_ajax")),o.refreshNumbers(i),m(p).trigger("merchant-flexible-content-added",[t]),n.hasClass("has-accordion")&&i.accordion("refresh"),o.updateLayoutTitle(),s.init())}),m(p).on("click",".customize-control-flexible-content-delete",function(e){e.preventDefault();var e=m(this).closest(".layout"),t=e.parent(),t=(e.remove(),0===t.find(".layout").length&&t.addClass("empty"),o.refreshNumbers(t),m(p).trigger("merchant-flexible-content-deleted",[e]),m(this).closest(".merchant-flexible-content-control"));t.hasClass("has-accordion")&&t.find(".merchant-flexible-content").accordion("refresh"),m(p).trigger("change.merchant")}),m(p).on("click",".layout-actions__toggle",function(e){e.preventDefault(),n(m(this).closest(".layout")),m(this).closest(".layout-actions").find(".layout-actions__inner").stop().slideToggle(300)}),m(p).on("click",".layout-header",function(){n(m(this).closest(".layout"))}),m(p).on("merchant-flexible-content-added",function(e,t){n(t)})},refreshNumbers:function(e){e.find(".layout").each(function(e){var t=m(this).find(".layout-count").text(),n=parseInt(t)-1;m(this).find(".layout-count").text(e+1),m(this).find("input, select, textarea").each(function(){m(this).attr("name")&&m(this).attr("name",m(this).attr("name").replace("["+n+"]","[*refreshed*"+e+"]"))})}),e.find(".layout").each(function(e){m(this).find("input, select, textarea").each(function(){var e=m(this).attr("name");e&&m(this).attr("name",e.replace("*refreshed*",""))})}),e.parent().find("input").trigger("change.merchant")}}).init(),s.init(),e.init(),m(p).on("keyup",".merchant-module-page-setting-field-products_selector .merchant-search-field",function(){clearTimeout(o);var e,t,n,a=[],i=(!m(this).closest('[data-id="excluded_products"]').length||"categories"!==(t=(e=m(this).closest(".layout")).find(".merchant-field-rules_to_apply select").val()||e.find(".merchant-field-rules_to_display select").val()||e.find(".merchant-field-display_rules select").val())&&"by_category"!==t||(a=e.find(".merchant-field-category_slugs select").val()||e.find(".merchant-field-product_cats select").val()),m(this).closest(".merchant-products-search-container"));""!==m(this).val()?(i.find(".merchant-searching").addClass("active"),n={action:"merchant_admin_products_search",nonce:merchant_admin_options.ajaxnonce,keyword:m(this).val(),product_types:m(this).data("allowed-types"),ids:i.find(".merchant-selected-products").val(),categories:a},o=setTimeout(function(){m.post(merchant_admin_options.ajaxurl,n,function(e){var t=i.find(".merchant-selections-products-preview");t.show(),t.html(e),i.find(".merchant-searching").removeClass("active")})},250)):i.find(".merchant-selections-products-preview").html("").hide()}),m(p).on("click touch",".merchant-module-page-setting-field-products_selector .merchant-selections-products-preview li",function(){var e=m(this).closest(".merchant-products-search-container"),t=e.find(".merchant-selected-products"),n=t.val(),a="multiple"===e.data("multiple");0<e.find(".merchant-selected-products-preview ul li").length&&!a&&(e.find(".merchant-selected-products-preview ul li").remove(),t.val("").change()),m(this).children(".remove").attr("aria-label","Remove").html("×"),e.find(".merchant-selected-products-preview ul").append(m(this)),e.find(".merchant-selections-products-preview").html("").hide(),e.find(".merchant-search-field").val("").change(),""===n?t.val(m(this).data("id")):(a?((e=n.split(",")).push(m(this).data("id")),t.val(e.join(","))):t.val(m(this).data("id"))).change()}),m(p).on("click touch",".merchant-selected-products-preview .remove",function(){var e=m(this);if(confirm(merchant_admin_options.product_delete_confirmation_message)){var t=e.closest(".merchant-products-search-container").find(".merchant-selected-products"),n=e.parent().data("id"),a=(e.parent().remove(),t.val().split(","));if(0<a.length)for(var i in a)parseInt(a[i])===parseInt(n)&&a.splice(i,1);t.val(a.join(",")).change(),t.trigger("change.merchant")}}),m(p).on("merchant-admin-check-fields merchant-flexible-content-added",function(){m(".merchant-module-page-setting-field").each(function(){var e=m(this);if(e.data("condition")&&e.data("condition").length){var t=e.data("condition"),n=m(this).closest(".layout-body").find('input[name*="'+t[0]+'"],select[name*="'+t[0]+'"]');if((n=n.length?n:m('input[name="merchant['+t[0]+']"],select[name="merchant['+t[0]+']"]')).length){var a,i=!1;switch(t[1]){case"==":"radio"!==n.attr("type")&&"checkbox"!==n.attr("type")||(a=n.parent().find("input:checked")).length&&a.val()===t[2]&&(i=!0),n.is("select")&&n.val()==t[2]&&(i=!0);break;case"any":"radio"!==n.attr("type")&&"checkbox"!==n.attr("type")||(a=n.parent().find("input:checked")).length&&t[2].split("|").includes(a.val())&&(i=!0),n.is("select")&&t[2].split("|").includes(n.val())&&(i=!0)}i?e.removeClass("merchant-hide").addClass("merchant-show"):e.removeClass("merchant-show").addClass("merchant-hide")}}})}).trigger("merchant.change"),m(p).on("merchant-admin-check-fields merchant-flexible-content-added change keyup",function(){m(p).find(".merchant-module-page-setting-field").each(function(){var e=m(this);e.data("conditions")&&(function e(t){var n=1<arguments.length&&arguments[1]!==f&&arguments[1];var a=!1;if("relation"in t){var i=t.relation.toUpperCase();if("OR"===i)for(var o=0;o<t.terms.length;o++){var r=t.terms[o];if(a=e(r,n))return!0}else if("AND"===i){for(var c=0,s=0;s<t.terms.length;s++){var l=t.terms[s];e(l,n)&&c++}c===t.terms.length&&(a=!0)}}else{var d,i="",h=(i="terms"in t?t.terms[0]:t,m('input[name="merchant['+i.field+']"],select[name="merchant['+i.field+']"]')),u=(h.length||0<(d=n.closest(".layout-body")).length&&(h=d.find(".merchant-field-"+i.field).find("input, select")),(h=(h=h.length?h:m('input[name="merchant['+i.field+'][]"],select[name="merchant['+i.field+'][]"]')).length?h:m(".merchant-group-fields-container").find(".merchant-field-"+i.field+' input[name*="'+i.field+'"],.merchant-field-'+i.field+' select[name*="'+i.field+'"]')).val());"checkbox"===h.attr("type")&&(u=h.is(":checked")),"radio"===h.attr("type")&&(u=h.filter(":checked").val()),"checkbox"===h.attr("type")&&1<h.length&&(u=[],h.each(function(){m(this).is(":checked")&&u.push(m(this).val())})),w(u)&&(u=Number(u)),Array.isArray(i.value)&&(i.value=i.value.map(function(e){return w(e)?Number(e):e})),("==="===i.operator&&u===i.value||"!=="===i.operator&&u!==i.value||">"===i.operator&&u>i.value||"<"===i.operator&&u<i.value||">="===i.operator&&u>=i.value||"<="===i.operator&&u<=i.value||"in"===i.operator&&i.value.includes(u)||"!in"===i.operator&&!i.value.includes(u)||"contains"===i.operator&&Array.isArray(u)&&u.includes(i.value)||"!contains"===i.operator&&Array.isArray(u)&&!u.includes(i.value))&&(a=!0)}return a}(e.data("conditions"),e)?e.removeClass("merchant-hide").addClass("merchant-show"):e.removeClass("merchant-show").addClass("merchant-hide"))})}).trigger("merchant.change"),m(p).on("change",".merchant-module-page-setting-field",function(){m(p).trigger("merchant-admin-check-fields")}).trigger("merchant.change"),m(p).trigger("merchant-admin-check-fields"),m(p).on("merchant-admin-check-color-fields merchant-flexible-content-added",function(){m(".merchant-color").each(function(){var n,e=m(this),a=e.find(".merchant-color-picker"),i=e.find(".merchant-color-input"),o=!1;a.off("click").on("click",function(e){e.preventDefault(),e.stopPropagation();var t=m("body,html");t.addClass("merchant-height-auto"),o?n.setColor(i.val()):((n=new Pickr({el:a.get(0),container:"body",theme:"merchant",appClass:"merchant-pcr-app",default:i.val()||a.data("default-color")||"#212121",swatches:["#000000","#F44336","#E91E63","#673AB7","#03A9F4","#8BC34A","#FFEB3B","#FFC107","#FFFFFF"],sliders:"h",useAsButton:!0,components:{hue:!0,preview:!0,opacity:!0,interaction:{input:!0,clear:!0}},i18n:{"btn:clear":"Default"}})).on("change",function(e){e=(1===e.a?(n.setColorRepresentation("HEX"),e.toHEXA()):(n.setColorRepresentation("RGBA"),e.toRGBA())).toString(0);a.css({"background-color":e}),i.val()!==e&&i.val(e).trigger("change.merchant"),m(p).trigger("merchant-color-picker-updated",[e,i])}),n.on("clear",function(){var e=a.data("default-color");e?n.setColor(e):(a.css({"background-color":"white"}),i.val(""))}),n.on("hide",function(){t.removeClass("merchant-height-auto")}),a.data("pickr",n),setTimeout(function(){n.show()},200),o=!0)}),i.on("change keyup",function(){var e=m(this).val();a.css({"background-color":e})})})}),m(p).trigger("merchant-admin-check-color-fields");({init:function(){this.events()},events:function(){var l=this;m(p).on("click",".merchant-create-page-control-button",function(e){e.preventDefault();var t=m(this),n=t.parent().find(".merchant-create-page-control-create-message"),a=t.parent().find(".merchant-create-page-control-success-message"),e=(t.text(),t.data("creating-text")),i=(t.data("created-text"),t.data("page-title")),o=t.data("page-meta-key"),r=t.data("page-meta-value"),c=t.data("option-name"),s=t.data("nonce");if(!i)return!1;m(this).text(e),m(this).attr("disabled",!0),m.ajax({type:"post",url:ajaxurl,data:{action:"merchant_create_page_control",page_title:i,page_meta_key:o,page_meta_value:r,option_name:c,nonce:s},success:function(e){l.ajaxResponseHandler(e,t,a,n)}})})},ajaxResponseHandler:function(e,t,n,a){"success"===e.status&&(e=n.find("a").attr("href").replace("?post=&","?post="+e.page_id+"&"),n.find("a").attr("href",e),n.css("display","block"),a.remove(),t.remove())}}).init(),m(".merchant-module-page-setting-field-gallery").each(function(){var a,i=m(this),e=i.find(".merchant-gallery-button"),o=i.find(".merchant-gallery-input"),r=i.find(".merchant-gallery-images"),t=i.find(".merchant-gallery-remove");r.sortable({helper:"original",update:function(e,t){var n=[];r.find(".merchant-gallery-image").each(function(){n.push(m(this).data("item-id"))}),o.val(n.join(",")).trigger("change")}});t.on("click",function(e){e.preventDefault(),m(this).parent().remove();var t=[];r.find(".merchant-gallery-image").each(function(){t.push(m(this).data("item-id"))}),o.val(t.join(",")).trigger("change")}),e.on("click",function(e){m(this);var t=o.val(),n=t?"edit":"add";e.preventDefault(),void 0!==u.wp&&u.wp.media&&u.wp.media.gallery&&("add"==n?(a=u.wp.media({library:{type:"image"},frame:"post",state:"gallery",multiple:!0})).open():a=u.wp.media.gallery.edit('[gallery ids="'+t+'"]'),a.on("update",function(e){r.empty();e=e.models.map(function(e){var e=e.toJSON(),t=(e.sizes&&e.sizes.thumbnail&&e.sizes.thumbnail.url?e.sizes.thumbnail:e).url;return r.append('<div class="merchant-gallery-image" data-item-id="'+e.id+'"><i class="merchant-gallery-remove dashicons dashicons-no-alt"></i><img src="'+t+'" /></div>'),e.id});o.val(e.join(",")).trigger("change"),i.find(".merchant-gallery-remove").on("click",function(e){e.preventDefault(),m(this).parent().remove();var t=[];r.find(".merchant-gallery-image").each(function(){t.push(m(this).data("item-id"))}),o.val(t.join(",")).trigger("change")})}))})});var l=function(e){var a,i=e,e=i.find(".merchant-upload-button"),o=i.find(".merchant-upload-input"),r=i.find(".merchant-upload-wrapper");i.find(".merchant-upload-remove").on("click",function(e){e.preventDefault(),m(this).parent().remove(),o.val("").trigger("change")}),e.on("click",function(e){e.preventDefault(),void 0!==u.wp&&u.wp.media&&((a=a||u.wp.media({library:{type:"image"}})).open(),a.on("select",function(){r.empty();var e=a.state().get("selection").first().attributes,t=(e.sizes&&e.sizes.thumbnail&&e.sizes.thumbnail.url?e.sizes.thumbnail:e).url,n=e.sizes?JSON.stringify(e.sizes):"";r.append('<div class="merchant-upload-image" data-sizes=\''+n+'\'><i class="merchant-upload-remove dashicons dashicons-no-alt"></i><img src="'+t+'" /></div>'),o.val(e.id).trigger("change"),i.find(".merchant-upload-button-drag-drop").hide(),i.find(".merchant-upload-remove").on("click",function(e){e.preventDefault(),m(this).parent().remove(),o.val("").trigger("change"),i.find(".merchant-upload-button-drag-drop").show()})}))})},d=(m(".merchant-module-page-setting-field-upload:not(.template)").each(function(){l(m(this))}),jQuery.each(["dragenter","dragover","dragleave","drop"],function(e,t){m(p).on(t,".merchant-upload-button-drag-drop",function(e){e.preventDefault(),e.stopPropagation()})}),m(p).on("dragenter",".merchant-upload-button-drag-drop",function(e){m(this).closest(".merchant-module-page-setting-field-upload").find(".merchant-upload-button").click()}),function(e){var t=e.find("select"),n=t.data("source"),a=u.merchant_admin_options,i={width:"100%",templateSelection:function(e){return e.text.replace(/&nbsp;-*\s*/g,"").trim()}};"post"!==n&&"product"!==n&&"user"!==n||(i.minimumInputLength=1,i.ajax={url:a.ajaxurl,dataType:"json",delay:250,cache:!0,data:function(e){return{action:"merchant_admin_options_select_ajax",nonce:a.ajaxnonce,term:e.term,source:n}},processResults:function(e,t){return e.success?{results:e.data}:{}}}),t.select2(i),e.find(".select2-selection--multiple").append('<span class="merchant-select2-clear"></span>')}),h=(m(".merchant-module-page-setting-field-select_ajax:not(.template)").each(function(){d(m(this))}),m(".merchant-module-page-settings-responsive").each(function(){var e=m(this),n=e.find(".merchant-module-page-settings-devices button"),a=e.find(".merchant-module-page-settings-device-container");n.on("click",function(e){e.preventDefault();var t=m(this).data("device");n.removeClass("active"),a.removeClass("active"),m(this).addClass("active"),a.each(function(){m(this).data("device")===t&&m(this).addClass("active")})})}),m(".merchant-animated-buttons").each(function(){var e,t,n=m(this).find("label"),a=m(".merchant-animation-demo");n.on("click",function(){a.removeClass("merchant-animation-"+e),a.removeClass("merchant-animation-"+t),e=m(this).find("input").attr("value"),setTimeout(function(){a.addClass("merchant-animation-"+e)},100),setTimeout(function(){a.removeClass("merchant-animation-"+e)},1e3)}),n.mouseover(function(){a.removeClass("merchant-animation-"+e),t=m(this).find("input").attr("value"),a.addClass("merchant-animation-"+t)}).mouseout(function(){a.removeClass("merchant-animation-"+t)})}),m(".merchant-notifications-sidebar")),e=(h.length&&(m(".merchant-notifications").on("click",function(e){e.preventDefault();var t=m(this),e=h.find(".merchant-notification:first-child .merchant-notification-date").data("raw-date");h.toggleClass("opened"),t.hasClass("read")||m.post(u.merchant.ajax_url,{action:"merchant_notifications_read",nonce:u.merchant.nonce,latest_notification_date:e},function(e){e.success&&setTimeout(function(){t.addClass("read")},2e3)})}),m(".merchant-notification-content").each(function(){var e=m(this),t=(e.find("span.changelog-fixed").each(function(){m(this).closest("li").remove()}),e.find("li")),n=e.find("li.hidden");t.length===n.length&&e.closest(".merchant-notification").remove()}),m(u).on("scroll",function(){60<u.pageYOffset&&(h.addClass("closing"),setTimeout(function(){h.removeClass("opened"),h.removeClass("closing")},300))}),m(".merchant-notifications-sidebar-close").on("click",function(e){e.preventDefault(),h.addClass("closing"),setTimeout(function(){h.removeClass("opened"),h.removeClass("closing")},300)})),m(".merchant-tabs-nav")),t=(e.length&&e.each(function(){var n=m(this).data("tab-wrapper-id");m(this).find(".merchant-tabs-nav-link").on("click",function(e){e.preventDefault();var e=m(this).closest(".merchant-tabs-nav").find(".merchant-tabs-nav-link"),t=m(this).data("tab-to"),e=(e.each(function(){m(this).closest(".merchant-tabs-nav-item").removeClass("active")}),m(this).closest(".merchant-tabs-nav-item").addClass("active"),m('.merchant-tab-content-wrapper[data-tab-wrapper-id="'+n+'"]'));e.find("> .merchant-tab-content").removeClass("active"),e.find('> .merchant-tab-content[data-tab-content-id="'+t+'"]').addClass("active")})}),m(".merchant-module-alert"));t.length&&t.find(".merchant-module-alert-close").on("click",function(e){e.preventDefault(),t.removeClass("merchant-show"),m(p).off("click.merchant-alert-close")})})})(jQuery,window,document),jQuery.fn.extend({getPath:function(){var c=[];return this.each(function(e,t){for(var n,a=jQuery(t);a.length;){var i=a.get(0);if(!(o=i.localName))break;var o=o.toLowerCase(),r=a.parent();1<r.children(o).length&&0<(e=r.children().index(i)+1)&&(o+=":nth-child("+e+")"),n=o+(n?" > "+n:""),a=r}c.push(n)}),c.join(",")}});
     1function _typeof(e){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}((m,u,p,f)=>{var v={},g=new URLSearchParams(u.location.search),b=g.get("module");function w(e){return"string"==typeof e&&!isNaN(e)&&!isNaN(parseFloat(e))}m(p).ready(function(){var e=m(".merchant-module-page-ajax-form"),n=m(".merchant-module-page-ajax-header"),a=(m(".merchant-module-save-button"),m(".merchant-module-page-content").on("change keypress change.merchant",function(e){m(e.target).hasClass("merchant-backup-file")||(m(this).is(".merchant-module-question-answer-textarea, .merchant-license-code-input")||v.show_save||(n.addClass("merchant-show"),n.removeClass("merchant-saving"),v.show_save=!0),s.initFlag())}),e.ajaxForm({beforeSubmit:function(){n.addClass("merchant-saving")},success:function(){var t;n.removeClass("merchant-show"),v.show_save=!1,m(".merchant-module-action").hasClass("merchant-enabled")||((t=m(".merchant-module-alert")).addClass("merchant-show"),m(p).off("click.merchant-alert-close"),m(p).on("click.merchant-alert-close",function(e){m(e.target).closest(".merchant-module-alert-wrapper").length||(t.removeClass("merchant-show"),m(p).off("click.merchant-alert-close"))})),m(p).trigger("save.merchant",[b])}}),m(".merchant-module-question-answer-button")),i=m(".merchant-module-question-answer-textarea");function o(){var e=m(p).find(".merchant-range");0!==e.length&&e.each(function(){var e=m(this),a=e.find(".merchant-range-input"),i=e.find(".merchant-range-number-input");a.on("change input merchant.range merchant-init.range",function(e){var t=m(this),e=("merchant"===e.type?i:t).val()||0,n=t.attr("min")||0,n=(e-n)/((t.attr("max")||1)-n)*100;m("body").hasClass("rtl")?t.css({background:"linear-gradient(to left, #3858E9 0%, #3858E9 "+n+"%, #ddd "+n+"%, #ddd 100%)"}):t.css({background:"linear-gradient(to right, #3858E9 0%, #3858E9 "+n+"%, #ddd "+n+"%, #ddd 100%)"}),a.val(e),i.val(e)}).trigger("merchant-init.range"),i.on("change input blur",function(){a.hasClass("merchant-range-input")&&a.val(m(this).val()).trigger("merchant.range")})})}i.on("input",function(){a.prop("disabled",""===m(this).val().trim())}),a.on("click",function(e){e.preventDefault();var t,e=i.val();e.trim()?(t=m(this),m(".merchant-module-question-answer-dropdown").removeClass("merchant-show"),m(".merchant-module-question-thank-you-dropdown").addClass("merchant-show"),u.wp.ajax.post("merchant_module_feedback",{subject:i.attr("data-subject"),message:e,module:t.closest(".merchant-module-action").find(".merchant-module-page-button-action-activate").data("module"),nonce:u.merchant.nonce})):alert("Please provide the required information.")}),m(".merchant-module-page-button-action-activate").on("click",function(e){if(e.preventDefault(),m(this).hasClass("merchant-module-deactivated-by-bp"))return!1;m(".merchant-module-question-list-dropdown").removeClass("merchant-show"),m(".merchant-module-question-answer-dropdown").removeClass("merchant-show"),m(".merchant-module-question-answer-form").removeClass("merchant-show"),m(".merchant-module-question-answer-title").removeClass("merchant-show"),m(".merchant-module-question-thank-you-dropdown").removeClass("merchant-show"),m(".merchant-module-question-answer-textarea").val(""),u.wp.ajax.post("merchant_module_activate",{module:m(this).data("module"),nonce:u.merchant.nonce}).done(function(){m("body").removeClass("merchant-module-disabled").addClass("merchant-module-enabled"),m(".merchant-module-action").addClass("merchant-enabled")})}),m(".merchant-module-page-button-action-deactivate").on("click",function(e){e.preventDefault(),u.wp.ajax.post("merchant_module_deactivate",{module:m(this).data("module"),nonce:u.merchant.nonce}).done(function(){m("body").removeClass("merchant-module-enabled").addClass("merchant-module-disabled"),m(".merchant-module-action").removeClass("merchant-enabled"),m(".merchant-module-question-list-dropdown").addClass("merchant-show")})}),m(".merchant-module-question-list-dropdown li").on("click",function(e){a.prop("disabled",""===i.val().trim());var t=m(this),n=t.data("answer-target"),n=m('[data-answer-title="'+n+'"]');n.length?(n.addClass("merchant-show").siblings().removeClass("merchant-show"),m(".merchant-module-question-answer-dropdown").addClass("merchant-show"),m(".merchant-module-question-answer-textarea").attr("data-subject",t.text().trim())):(m(".merchant-module-question-thank-you-dropdown").addClass("merchant-show"),m(".merchant-module-question-answer-dropdown").removeClass("merchant-show")),m(".merchant-module-question-answer-textarea").val(""),m(".merchant-module-question-list-dropdown").removeClass("merchant-show")}),m(".merchant-module-dropdown-close").on("click",function(e){e.preventDefault(),m(this).closest(".merchant-module-dropdown").removeClass("merchant-show")}),m(".merchant-module-page-button-deactivate").on("click",function(e){e.preventDefault();m(this);var t=m(".merchant-module-deactivate-dropdown");t.toggleClass("merchant-show"),m(p).off("click.merchant-close"),m(p).on("click.merchant-close",function(e){m(e.target).closest(".merchant-module-deactivate").length||(t.removeClass("merchant-show"),m(p).off("click.merchant-close"))})}),o(),m(p).on("click",".merchant-module-page-setting-field-hidden-desc-trigger",function(){var e=m(this),t=(e.toggleClass("expanded"),e.attr("data-show-text")),n=e.attr("data-hidden-text");m(this).find("span:first").text(e.text()===t?n:t),m(this).closest(".merchant-module-page-setting-field").find(".merchant-module-page-setting-field-hidden-desc").stop(!0,!0).slideToggle("fast")});({init:function(){this.events()},events:function(){m(p).on("click","#download-backup-button",this.download.bind(this)),m(p).on("click","#restore-backup-button",this.restore.bind(this)),m(p).on("change","#merchant-backup-file",this.removeBackupFile.bind(this))},download:function(e){var a=this,i=(e.preventDefault(),m(".merchant-module-page-setting-fields .backup-section")),o=(a.hideError(i),m(e.target).attr("data-module-id"));m.ajax({url:merchant_admin_options.ajaxurl,type:"GET",data:{action:"merchant_get_module_settings",nonce:merchant_admin_options.ajaxnonce,module_id:o},beforeSend:function(){a.showLoadingIndicator(i)},success:function(e){var t,n;e.success?(t=e.data,n="merchant-"+o+"-backup-"+(new Date).toISOString().slice(0,10)+"-"+(new Date).getHours()+"-"+(new Date).getMinutes()+"-"+(new Date).getSeconds()+".json",a.downloadJson(t,n)):a.displayError(e.data.message,i),a.hideLoadingIndicator(i)},error:function(e,t,n){a.displayError(n,i),a.hideLoadingIndicator(i)}})},restore:function(e){var t,a=this,i=(e.preventDefault(),m(".merchant-module-page-setting-fields .restore-section")),n=(a.hideError(i),m(e.target).attr("data-module-id")),e=m(".merchant-backup-file").prop("files")[0];e&&"application/json"===e.type?((t=new FileReader).onload=function(e){e=e.target.result;m.ajax({url:merchant_admin_options.ajaxurl,type:"POST",data:{action:"merchant_restore_module_settings",nonce:merchant_admin_options.ajaxnonce,module_id:n,module_settings:e},beforeSend:function(){a.showLoadingIndicator(i)},success:function(e){e.success?u.location.href=e.data.redirect_url:a.displayError(e.data.message,i),a.hideLoadingIndicator(i)},error:function(e,t,n){a.displayError(n,i),a.hideLoadingIndicator(i)}})},t.readAsText(e)):a.displayError(merchant_admin_options.invalid_file,i)},removeBackupFile:function(e){var t,n=m(e.target);n.length&&(e=m(".backup-file-remove"),0<(null==(t=n[0])?void 0:t.files.length)?e.show():e.hide(),e.on("click",function(){n.val(""),m(this).hide()}))},downloadJson:function(e,t){"object"===_typeof(e)&&(e=JSON.stringify(e));var e=new Blob([e],{type:"application/json"}),e=URL.createObjectURL(e),n=p.createElement("a");n.href=e,n.download=t,n.click(),URL.revokeObjectURL(e)},displayError:function(e,t){t.append('<div class="error-message"><p>'.concat(e,"</p></div>"))},hideError:function(e){e.find(".error-message").remove()},showLoadingIndicator:function(e){e.find(".merchant-loading-spinner").addClass("show")},hideLoadingIndicator:function(e){e.find(".merchant-loading-spinner").removeClass("show")}}).init();e={init:function(e){this.events()},events:function(){m(p).on("click",".merchant-flexible-content .merchant-toggle-switch .toggle-switch-label span",function(){var e=m(this).closest(".merchant-toggle-switch").find(".toggle-switch-checkbox");e.prop("checked",!e.prop("checked"))}).trigger("merchant.change")}};({init:function(){this.initiate_datepicker(),this.events()},initiate_datepicker:function(){var e=m(".merchant-module-page-setting-field .merchant-datetime-field");0!==e.length&&e.each(function(n){var a=m(this).find("input"),i={locale:JSON.parse(merchant_datepicker_locale),selectedDates:[a.val()?new Date(a.val()):""],onSelect:function(e){e.date;var t=e.formattedDate;void 0===t&&(e.datepicker.$el.value=""),a.trigger("change.merchant"),a.trigger("change.merchant-datepicker",[t,a,i,n])}},e=m(this).data("options"),e=(e.buttons=["clear"],e&&(e.minDate!==f&&"today"===e.minDate&&(e.minDate=new Date,e.timeZone!==f)&&""!==e.timeZone&&(e.minDate=new Date(e.minDate.toLocaleString("en-US",{timeZone:e.timeZone}))),i=Object.assign(i,e)),new AirDatepicker(a.getPath(),i));a.attr("readonly",!0),m(p).trigger("initiated.merchant-datepicker",[e,a,i,n])})},events:function(){var e=this;m(p).on("merchant-flexible-content-added",function(){e.initiate_datepicker()})}}).init();({init:function(e){this.events()},events:function(){var n=this;m(".merchant-sortable").each(function(){var e=m(this),t=e.find(".merchant-sortable-input");m(e.find("ul.merchant-sortable-list").first()).sortable({update:function(){t.val(n.sortableGetNewVal(e)).trigger("change.merchant")}}).disableSelection().find("li").each(function(){m(this).find("i.visibility").click(function(){m(this).toggleClass("dashicons-visibility-faint").parents("li:eq(0)").toggleClass("invisible")})}).click(function(){m(event.target).hasClass("dashicons-visibility")&&t.val(n.sortableGetNewVal(e)).trigger("change.merchant")})})},sortableGetNewVal:function(e){var e=m(e.find("li")),t=[];return _.each(e,function(e){m(e).hasClass("invisible")||t.push(m(e).data("value"))}),JSON.stringify(t)}}).init(),e.init(),m(p).on("merchant-flexible-content-added",function(e,t){t=t.find(".merchant-sortable-repeater-control").find(".merchant-sortable-repeater.sortable");c.makeFieldsSortable(t)});var r,c={init:function(e){var a=this;m(".merchant-sortable-repeater-control").each(function(){var e=JSON.parse(m(this).find(".merchant-sortable-repeater-input").val()),t=e.length;if(0<t&&(m(this).find(".repeater-input").val(e[0]),1<t))for(var n=1;n<t;++n)a.appendRow(m(this),e[n])}),this.events()},events:function(){var t=this;m(p).on("click",".merchant-sortable-repeater.sortable .customize-control-sortable-repeater-delete",function(e){e.preventDefault(),m(this).parent().slideUp("fast",function(){var e=m(this).parent().parent();m(this).remove(),t.getAllInputs(e)}),m(p).trigger("merchant-sortable-repeater-item-deleted")}),m(p).on("click",".customize-control-sortable-repeater-add",function(e){e.preventDefault(),t.appendRow(m(this).parent()),t.getAllInputs(m(this).parent())}),m(p).on("change",".merchant-sortable-repeater.sortable",function(){t.getAllInputs(m(this).parent())}),m(p).on("focusout",".merchant-sortable-repeater.sortable .repeater-input",function(){t.getAllInputs(m(this).parent())})},appendRow:function(e){var t='<div class="repeater" style="display:none"><input type="text" value="'+(1<arguments.length&&arguments[1]!==f?arguments[1]:"")+'" class="repeater-input" /><span class="dashicons dashicons-menu"></span><a class="customize-control-sortable-repeater-delete" href="#"><span class="dashicons dashicons-no-alt"></span></a></div>',t=(e.find(".sortable").append(t),e.find(".sortable").find(".repeater:last"));t.slideDown("slow",function(){m(this).find("input").focus()}),this.makeFieldsSortable(e.find(".sortable")),m(p).trigger("merchant-sortable-repeater-item-added",[t,e.find(".sortable")])},makeFieldsSortable:function(n){n.hasClass("disable-sorting")||n.sortable({update:function(e,t){c.getAllInputs(n.parent())}})},getAllInputs:function(e){var t=e.find(".repeater-input").map(function(){return m(this).val()}).toArray();t.length||t.push(""),e.find(".merchant-sortable-repeater-input").val(JSON.stringify(t)),e.find(".merchant-sortable-repeater-input").trigger("change"),e.find(".merchant-sortable-repeater-input").trigger("sortable.repeater.change")}},s=(c.init(),{init:function(){this.initAccordion(),this.initFlag()},initAccordion:function(){m(".merchant-group-field.has-accordion").each(function(){var e=m(this);e.accordion({collapsible:!0,header:"> .title-area",heightStyle:"content",active:!!e.hasClass("open")&&0})})},initFlag:function(){m(".merchant-group-field.has-flag").each(function(){var e=m(this),t=e.data("id"),t=e.find(".merchant-field-".concat(t,"_status select")),n=t.val(),t=t.find("option:selected").text();e.find(".field-status").removeClass("hidden active inactive").text(t).addClass(n)})}}),e={accordion:null,activePopupContainer:null,init:function(){this.initAccordion(),this.events(),this.makeSelectedReviewsSortable(m(".merchant-reviews-selector").not(".layouts .merchant-reviews-selector"))},events:function(){var n=this;m(p).on("input",".merchant-reviews-selector .products-search",n.ajaxSearch.bind(n)),m(p).on("change",'.merchant-reviews-selector .product-review input[type="checkbox"]',n.toggleReview.bind(n)),m(p).on("click",".merchant-reviews-selector .review-photo img",n.requestReviewImages.bind(n)),m(p).on("click",".review-photos-popup .overlay",n.dismissImagesGallery.bind(n)),m(p).on("click",".merchant-reviews-selector .product-reviews-load-more button",n.loadMoreReviews.bind(n)),m(p).on("click",".merchant-reviews-selector .popup-trigger",n.initPopUp.bind(n)),m(p).on("click",".merchant-reviews-selector .popup-header .close, .merchant-reviews-selector > .overlay",n.dismissPopUp.bind(n)),m(p).on("click",".merchant-reviews-selector .product-review-delete",n.deleteSelectedReview.bind(n)),m(p).on("keyup",function(e){"Escape"!==e.key||n.dismissImagesGallery()||n.dismissPopUp(n)}),m(p).on("merchant-flexible-content-added",function(e,t){n.makeSelectedReviewsSortable(),n.initAccordion()})},makeSelectedReviewsSortable:function(){var e=0<arguments.length&&arguments[0]!==f?arguments[0]:m(p).find(".merchant-reviews-selector").not(".layouts .merchant-reviews-selector"),n=this;e.find(".selected-reviews .product-reviews").sortable({axis:"y",cursor:"move",helper:"original",handle:".product-review-move",cancel:"",placeholder:"placeholder",update:function(e,t){t=t.item.closest(".merchant-reviews-selector");n.saveModifications(t)},start:function(e,t){t.placeholder.height(t.item.height())}})},deleteSelectedReview:function(e){var e=m(e.target).closest(".product-review"),t=e.closest(".merchant-reviews-selector");e.remove(),this.saveModifications(t),this.updateSelectedReviewsCheckboxState(t),this.countSelectedReviewsInProduct(t)},ajaxSearch:function(e){var t=this,e=m(e.target),n=e.closest(".merchant-reviews-selector"),a=n.find(".popup-header");(0===e.val().length||3<=e.val().length)&&m.ajax({url:merchant_admin_options.ajaxurl,type:"POST",data:{action:"merchant_search_reviews",search:e.val(),nonce:merchant_admin_options.ajaxnonce},beforeSend:function(){a.addClass("loading"),t.destroyAccordion(n)},success:function(e){e.success?(a.removeClass("popup-error"),n.find(".products-search-results").html(e.data),t.initAccordion(n)):a.addClass("popup-error")},complete:function(){a.removeClass("loading")},error:function(){a.addClass("popup-error")}})},loadMoreReviews:function(e){var t=this,n=m(e.target).closest(".product-item"),e=n.find(".product-review").length;m.ajax({url:merchant_admin_options.ajaxurl,type:"POST",data:{action:"merchant_load_more_reviews",product_id:n.attr("data-id"),offset:e,nonce:merchant_admin_options.ajaxnonce},beforeSend:function(){n.addClass("loading")},success:function(e){e.success&&(n.find(".product-reviews .reviews-wrapper").append(e.data.reviews),""===e.data.load_more&&t.hideLoadMoreButton(n),t.updateSelectedReviewsCheckboxState(n.closest(".merchant-reviews-selector")),t.countSelectedReviewsInProduct(n.closest(".merchant-reviews-selector")))},complete:function(){n.removeClass("loading")}})},hideLoadMoreButton:function(e){e.find(".product-reviews-load-more").remove()},initPopUp:function(e){var e=m(e.target).closest(".merchant-reviews-selector"),t=e.find(".selector-popup"),n=e.find(".overlay");t.addClass("active"),n.addClass("active"),this.activePopupContainer=e},dismissPopUp:function(){var e,t=this.activePopupContainer;null!==t&&(e=t.find(".selector-popup"),t=t.find(".overlay"),e.removeClass("active"),t.removeClass("active"),this.activePopupContainer=null)},initAccordion:function(){var e=0<arguments.length&&arguments[0]!==f?arguments[0]:m(p).find(".merchant-reviews-selector"),t=this;e.each(function(){var n=m(this).find(".popup-content .product-item.product-item-has-reviews");n.each(function(){n.accordion({collapsible:!0,heightStyle:"content",icons:!1,active:!!n.hasClass("opened")&&0,activate:function(e,t){t.newPanel.length?t.newPanel.parent().addClass("opened"):n.removeClass("opened")}})}),n.find("a").on("click",function(e){e.stopPropagation()}),t.updateSelectedReviewsCheckboxState(m(this)),t.countSelectedReviewsInProduct(m(this))})},destroyAccordion:function(e){e.find(".selector-popup .product-item.product-item-has-reviews").each(function(){m(this).hasClass("ui-accordion")&&m(this).accordion("destroy")})},toggleReview:function(e){var t=this,n=m(e.target).prop("checked"),a=m(e.target).closest(".merchant-reviews-selector"),e=m(e.target).closest(".product-review"),i=e.attr("data-id"),o=a.find(".selected-reviews .product-reviews"),i=o.find('.product-review[data-id="'.concat(i,'"]'));n?0===i.length&&(n=e.clone(),o.append(n),t.makeSelectedReviewsSortable()):i.remove(),setTimeout(function(){t.saveModifications(a)},150)},saveModifications:function(e){var t=e.find(".review-saved-ids"),n=e.find(".selected-reviews .product-reviews").find(".product-review"),a=[];n.each(function(){var e=m(this).attr("data-id");a.push(e)}),t.val(a.join(",")),t.trigger("change"),this.updateSelectedReviewsCheckboxState(e),this.countSelectedReviewsInProduct(e)},updateSelectedReviewsCheckboxState:function(n){var e=n.find(".selector-popup"),t=n.find(".review-saved-ids"),e=e.find(".product-review"),a=t.val().split(",");e.each(function(){var e=m(this).attr("data-id"),t=n.find('.product-review[data-id="'.concat(e,'"] input[type="checkbox"]'));a.includes(e)?t.prop("checked",!0):t.prop("checked",!1)})},countSelectedReviewsInProduct:function(e){var t=e.find(".selector-popup .product-item"),n=e.find(".review-saved-ids").val().split(",");t.each(function(){var t=0,e=m(this);e.find(".product-review").each(function(){var e=m(this).attr("data-id");n.includes(e)&&t++}),e.find(".selected-reviews-count .counter").text(t)})},requestReviewImages:function(e){var t=m(e.target).closest(".product-review"),n=m(e.target),e=t.attr("data-id");m.ajax({url:merchant_admin_options.ajaxurl,type:"POST",data:{action:"merchant_get_review_images",review_id:e,nonce:merchant_admin_options.ajaxnonce},beforeSend:function(){n.addClass("loading")},success:function(e){e.success&&(m("body").append(e.data),setTimeout(function(){m("body").find(".review-photos-popup").addClass("active")},300))},complete:function(){n.removeClass("loading")}})},dismissImagesGallery:function(){var e=m("body").find(".review-photos-popup");return!!e.length&&(e.removeClass("active"),setTimeout(function(){e.remove()},300),!0)}};({init:function(e){var i=this;m(".merchant-flexible-content-control").each(function(){var e=m(this).hasClass("has-accordion"),n=m(this).find(".merchant-flexible-content"),t=g.get("campaign_id"),a=0;t&&n.find("input.flexible-id").each(function(e){if(m(this).val()===t)return a=e,!1}),e?n.accordion({active:a,collapsible:!0,header:function(e){return e.find(".layout__inner > .layout-header")},heightStyle:"content"}).sortable({axis:"y",cursor:"move",helper:"original",handle:".customize-control-flexible-content-move",stop:function(e,t){n.trigger("merchant.sorted"),i.refreshNumbers(n),n.accordion("refresh")}}):n.sortable({axis:"y",cursor:"move",helper:"original",handle:".customize-control-flexible-content-move",stop:function(e,t){n.trigger("merchant.sorted"),i.refreshNumbers(n),n.accordion("refresh")}})}),this.updateLayoutTitle(),this.updateDiscountPercentMaxVal(),this.events()},updateLayoutTitle:function(){m(".merchant-flexible-content .layout").each(function(){var e,t=m(this).find(".layout-title[data-title-field]");t.length&&((e=m(this).find(".layout-body .merchant-field-"+t.data("title-field")+" input")).on("change keyup",function(){t.text(m(this).val())}),t.text(e.val()))})},updateDiscountPercentMaxVal:function(){m(".merchant-flexible-content .layout").each(function(){var e=m(this),t=e.find('.merchant-module-page-setting-field[data-id="discount_type"]'),n=e.find('.merchant-module-page-setting-field[data-id="discount_value"]'),e=(n=(n=n.length?n:e.find('.merchant-module-page-setting-field[data-id="discount"]')).length?n:e.find('.merchant-module-page-setting-field[data-id="discount_amount"]'),t.find("input:checked").val());"percentage_discount"===e||"percentage"===e?n.find("input").attr("max",100):n.find("input").removeAttr("max")}),m(".merchant-module-page-setting-fields")},generateUUID:function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(e){var t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)})},events:function(){var r=this;function n(e){e&&e.length&&e.siblings().find(".layout-actions__inner").slideUp(300)}m(p).on("change",'.merchant-module-page-setting-field[data-id="discount_type"] input',function(){r.updateDiscountPercentMaxVal()}),m(p).on("change","select",function(){var t=m(this).val(),n=m(this).prop("multiple");m(this).find("option").each(function(){var e=m(this).val(),e=n?t.includes(e):e===t;m(this).attr("selected",e)})}),m(".customize-control-flexible-content-add-button").on("click",function(e){e.preventDefault(),e.stopImmediatePropagation(),1===m(this).parent().find(".customize-control-flexible-content-add-list a").length?m(this).parent().find(".customize-control-flexible-content-add-list a").trigger("click"):m(this).parent().find(".customize-control-flexible-content-add-list").toggleClass("active")}),m(p).on("click",".customize-control-flexible-content-add",function(e){e.preventDefault(),e.stopImmediatePropagation();var e=m(".merchant-flexible-content-control[data-id="+m(this).data("id")+"]"),t=e.find(".layouts"),n=m(this).data("layout"),t=t.find(".layout[data-type="+n+"]").clone(!0),n=e.find(".merchant-flexible-content"),a=n.find(".layout"),e=r.generateUUID(),e=(t.find("input, select, textarea").each(function(){m(this).data("name")&&m(this).attr("name",m(this).data("name").replace("0",a.length)),m(this).is(":checkbox, :radio")&&m(this).attr("checked")&&m(this).prop("checked",!0)}),t.attr("data-layout-id",e),t.find(".layout-count").text(a.length+1),t.find(".flexible-id").val(e),n.append(t),n.removeClass("empty"),m(this).parent().removeClass("active"),t.find(".merchant-module-page-setting-field-upload").length&&l(t.find(".merchant-module-page-setting-field-upload")),t.find(".merchant-module-page-setting-field-select_ajax").length&&d(t.find(".merchant-module-page-setting-field-select_ajax")),m(this).closest(".merchant-flexible-content-control"));e.hasClass("has-accordion")&&(e.find(".merchant-flexible-content").accordion("refresh"),e.find(".merchant-flexible-content").accordion("option","active",-1)),s.init(),m(p).trigger("merchant-flexible-content-added",[t]),o(),r.updateLayoutTitle(),r.updateDiscountPercentMaxVal()}),m(p).on("click",".customize-control-flexible-content-duplicate",function(e){e.preventDefault(),e.stopImmediatePropagation();var t,a,n,e=m(this),i=e.closest(".merchant-flexible-content-control[data-id="+e.data("id")+"]"),o=null==i?void 0:i.find(".merchant-flexible-content");i.length&&o.length&&(e=e.closest(".layout")).length&&(e.find(".layout-actions__inner").hide(),t=e.clone(),o.find(".layout"),a=e.find(".layout-count").text(),n=r.generateUUID(),t.attr("data-layout-id",n),t.find(".flexible-id").val(n),t.find("input, select, textarea").each(function(){var e,t=m(this),n=t.attr("name");n&&(e=n.split("[")[0],n=n.match(/\[(.*?)\]/g))&&1<n.length&&(n[1]="["+a+"]",e="".concat(e).concat(n.join("")),t.attr("name",e))}),t.find("select").each(function(){m(this).hasClass("select2-hidden-accessible")&&(m(this).removeClass("select2-hidden-accessible").removeAttr("data-live-search").removeAttr("data-select2-id").removeAttr("aria-hidden").removeAttr("tabindex"),m(this).nextAll(".select2-container").remove(),m(this).select2())}),t.find(".layout-body").removeAttr("style"),t.hide(),t.insertAfter(e),t.fadeIn(),t.find(".merchant-module-page-setting-field-upload").length&&l(t.find(".merchant-module-page-setting-field-upload")),t.find(".merchant-module-page-setting-field-select_ajax").length&&d(t.find(".merchant-module-page-setting-field-select_ajax")),r.refreshNumbers(o),m(p).trigger("merchant-flexible-content-added",[t]),i.hasClass("has-accordion")&&o.accordion("refresh"),r.updateLayoutTitle(),s.init())}),m(p).on("click",".customize-control-flexible-content-delete",function(e){e.preventDefault();var e=m(this).closest(".layout"),t=e.parent(),t=(e.remove(),0===t.find(".layout").length&&t.addClass("empty"),r.refreshNumbers(t),m(p).trigger("merchant-flexible-content-deleted",[e]),m(this).closest(".merchant-flexible-content-control"));t.hasClass("has-accordion")&&t.find(".merchant-flexible-content").accordion("refresh"),m(p).trigger("change.merchant")}),m(p).on("click",".layout-actions__toggle",function(e){e.preventDefault(),n(m(this).closest(".layout")),m(this).closest(".layout-actions").find(".layout-actions__inner").stop().slideToggle(300)}),m(p).on("click",".layout-header",function(){n(m(this).closest(".layout"))}),m(p).on("merchant-flexible-content-added",function(e,t){n(t)})},refreshNumbers:function(e){e.find(".layout").each(function(e){var t=m(this).find(".layout-count").text(),n=parseInt(t)-1;m(this).find(".layout-count").text(e+1),m(this).find("input, select, textarea").each(function(){m(this).attr("name")&&m(this).attr("name",m(this).attr("name").replace("["+n+"]","[*refreshed*"+e+"]"))})}),e.find(".layout").each(function(e){m(this).find("input, select, textarea").each(function(){var e=m(this).attr("name");e&&m(this).attr("name",e.replace("*refreshed*",""))})}),e.parent().find("input").trigger("change.merchant")}}).init(),s.init(),e.init(),m(p).on("keyup",".merchant-module-page-setting-field-products_selector .merchant-search-field",function(){clearTimeout(r);var e,t,n,a=[],i=(!m(this).closest('[data-id="excluded_products"]').length||"categories"!==(t=(e=m(this).closest(".layout")).find(".merchant-field-rules_to_apply select").val()||e.find(".merchant-field-rules_to_display select").val()||e.find(".merchant-field-display_rules select").val())&&"by_category"!==t||(a=e.find(".merchant-field-category_slugs select").val()||e.find(".merchant-field-product_cats select").val()),m(this).closest(".merchant-products-search-container"));""!==m(this).val()?(i.find(".merchant-searching").addClass("active"),n={action:"merchant_admin_products_search",nonce:merchant_admin_options.ajaxnonce,keyword:m(this).val(),product_types:m(this).data("allowed-types"),ids:i.find(".merchant-selected-products").val(),categories:a},r=setTimeout(function(){m.post(merchant_admin_options.ajaxurl,n,function(e){var t=i.find(".merchant-selections-products-preview");t.show(),t.html(e),i.find(".merchant-searching").removeClass("active")})},250)):i.find(".merchant-selections-products-preview").html("").hide()}),m(p).on("click touch",".merchant-module-page-setting-field-products_selector .merchant-selections-products-preview li",function(){var e=m(this).closest(".merchant-products-search-container"),t=e.find(".merchant-selected-products"),n=t.val(),a="multiple"===e.data("multiple");0<e.find(".merchant-selected-products-preview ul li").length&&!a&&(e.find(".merchant-selected-products-preview ul li").remove(),t.val("").change()),m(this).children(".remove").attr("aria-label","Remove").html("×"),e.find(".merchant-selected-products-preview ul").append(m(this)),e.find(".merchant-selections-products-preview").html("").hide(),e.find(".merchant-search-field").val("").change(),""===n?t.val(m(this).data("id")):(a?((e=n.split(",")).push(m(this).data("id")),t.val(e.join(","))):t.val(m(this).data("id"))).change()}),m(p).on("click touch",".merchant-selected-products-preview .remove",function(){var e=m(this);if(confirm(merchant_admin_options.product_delete_confirmation_message)){var t=e.closest(".merchant-products-search-container").find(".merchant-selected-products"),n=e.parent().data("id"),a=(e.parent().remove(),t.val().split(","));if(0<a.length)for(var i in a)parseInt(a[i])===parseInt(n)&&a.splice(i,1);t.val(a.join(",")).change(),t.trigger("change.merchant")}}),m(p).on("merchant-admin-check-fields merchant-flexible-content-added",function(){m(".merchant-module-page-setting-field").each(function(){var e=m(this);if(e.data("condition")&&e.data("condition").length){var t=e.data("condition"),n=m(this).closest(".layout-body").find('input[name*="'+t[0]+'"],select[name*="'+t[0]+'"]');if((n=n.length?n:m('input[name="merchant['+t[0]+']"],select[name="merchant['+t[0]+']"]')).length){var a,i=!1;switch(t[1]){case"==":"radio"!==n.attr("type")&&"checkbox"!==n.attr("type")||(a=n.parent().find("input:checked")).length&&a.val()===t[2]&&(i=!0),n.is("select")&&n.val()==t[2]&&(i=!0);break;case"any":"radio"!==n.attr("type")&&"checkbox"!==n.attr("type")||(a=n.parent().find("input:checked")).length&&t[2].split("|").includes(a.val())&&(i=!0),n.is("select")&&t[2].split("|").includes(n.val())&&(i=!0)}i?e.removeClass("merchant-hide").addClass("merchant-show"):e.removeClass("merchant-show").addClass("merchant-hide")}}})}).trigger("merchant.change"),m(p).on("merchant-admin-check-fields merchant-flexible-content-added change keyup",function(){m(p).find(".merchant-module-page-setting-field").each(function(){var e=m(this);e.data("conditions")&&(function e(t){var n=1<arguments.length&&arguments[1]!==f&&arguments[1];var a=!1;if("relation"in t){var i=t.relation.toUpperCase();if("OR"===i)for(var o=0;o<t.terms.length;o++){var r=t.terms[o];if(a=e(r,n))return!0}else if("AND"===i){for(var c=0,s=0;s<t.terms.length;s++){var l=t.terms[s];e(l,n)&&c++}c===t.terms.length&&(a=!0)}}else{var d,i="",h=(i="terms"in t?t.terms[0]:t,m('input[name="merchant['+i.field+']"],select[name="merchant['+i.field+']"]')),u=(h.length||0<(d=n.closest(".layout-body")).length&&(h=d.find(".merchant-field-"+i.field).find("input, select")),(h=(h=h.length?h:m('input[name="merchant['+i.field+'][]"],select[name="merchant['+i.field+'][]"]')).length?h:m(".merchant-group-fields-container").find(".merchant-field-"+i.field+' input[name*="'+i.field+'"],.merchant-field-'+i.field+' select[name*="'+i.field+'"]')).val());"checkbox"===h.attr("type")&&(u=h.is(":checked")),"radio"===h.attr("type")&&(u=h.filter(":checked").val()),"checkbox"===h.attr("type")&&1<h.length&&(u=[],h.each(function(){m(this).is(":checked")&&u.push(m(this).val())})),w(u)&&(u=Number(u)),Array.isArray(i.value)&&(i.value=i.value.map(function(e){return w(e)?Number(e):e})),("==="===i.operator&&u===i.value||"!=="===i.operator&&u!==i.value||">"===i.operator&&u>i.value||"<"===i.operator&&u<i.value||">="===i.operator&&u>=i.value||"<="===i.operator&&u<=i.value||"in"===i.operator&&i.value.includes(u)||"!in"===i.operator&&!i.value.includes(u)||"contains"===i.operator&&Array.isArray(u)&&u.includes(i.value)||"!contains"===i.operator&&Array.isArray(u)&&!u.includes(i.value))&&(a=!0)}return a}(e.data("conditions"),e)?e.removeClass("merchant-hide").addClass("merchant-show"):e.removeClass("merchant-show").addClass("merchant-hide"))})}).trigger("merchant.change"),m(p).on("change",".merchant-module-page-setting-field",function(){m(p).trigger("merchant-admin-check-fields")}).trigger("merchant.change"),m(p).trigger("merchant-admin-check-fields"),m(p).on("merchant-admin-check-color-fields merchant-flexible-content-added",function(){m(".merchant-color").each(function(){var n,e=m(this),a=e.find(".merchant-color-picker"),i=e.find(".merchant-color-input"),o=!1;a.off("click").on("click",function(e){e.preventDefault(),e.stopPropagation();var t=m("body,html");t.addClass("merchant-height-auto"),o?n.setColor(i.val()):((n=new Pickr({el:a.get(0),container:"body",theme:"merchant",appClass:"merchant-pcr-app",default:i.val()||a.data("default-color")||"#212121",swatches:["#000000","#F44336","#E91E63","#673AB7","#03A9F4","#8BC34A","#FFEB3B","#FFC107","#FFFFFF"],sliders:"h",useAsButton:!0,components:{hue:!0,preview:!0,opacity:!0,interaction:{input:!0,clear:!0}},i18n:{"btn:clear":"Default"}})).on("change",function(e){e=(1===e.a?(n.setColorRepresentation("HEX"),e.toHEXA()):(n.setColorRepresentation("RGBA"),e.toRGBA())).toString(0);a.css({"background-color":e}),i.val()!==e&&i.val(e).trigger("change.merchant"),m(p).trigger("merchant-color-picker-updated",[e,i])}),n.on("clear",function(){var e=a.data("default-color");e?n.setColor(e):(a.css({"background-color":"white"}),i.val(""))}),n.on("hide",function(){t.removeClass("merchant-height-auto")}),a.data("pickr",n),setTimeout(function(){n.show()},200),o=!0)}),i.on("change keyup",function(){var e=m(this).val();a.css({"background-color":e})})})}),m(p).trigger("merchant-admin-check-color-fields");({init:function(){this.events()},events:function(){var l=this;m(p).on("click",".merchant-create-page-control-button",function(e){e.preventDefault();var t=m(this),n=t.parent().find(".merchant-create-page-control-create-message"),a=t.parent().find(".merchant-create-page-control-success-message"),e=(t.text(),t.data("creating-text")),i=(t.data("created-text"),t.data("page-title")),o=t.data("page-meta-key"),r=t.data("page-meta-value"),c=t.data("option-name"),s=t.data("nonce");if(!i)return!1;m(this).text(e),m(this).attr("disabled",!0),m.ajax({type:"post",url:ajaxurl,data:{action:"merchant_create_page_control",page_title:i,page_meta_key:o,page_meta_value:r,option_name:c,nonce:s},success:function(e){l.ajaxResponseHandler(e,t,a,n)}})})},ajaxResponseHandler:function(e,t,n,a){"success"===e.status&&(e=n.find("a").attr("href").replace("?post=&","?post="+e.page_id+"&"),n.find("a").attr("href",e),n.css("display","block"),a.remove(),t.remove())}}).init(),m(".merchant-module-page-setting-field-gallery").each(function(){var a,i=m(this),e=i.find(".merchant-gallery-button"),o=i.find(".merchant-gallery-input"),r=i.find(".merchant-gallery-images"),t=i.find(".merchant-gallery-remove");r.sortable({helper:"original",update:function(e,t){var n=[];r.find(".merchant-gallery-image").each(function(){n.push(m(this).data("item-id"))}),o.val(n.join(",")).trigger("change")}});t.on("click",function(e){e.preventDefault(),m(this).parent().remove();var t=[];r.find(".merchant-gallery-image").each(function(){t.push(m(this).data("item-id"))}),o.val(t.join(",")).trigger("change")}),e.on("click",function(e){m(this);var t=o.val(),n=t?"edit":"add";e.preventDefault(),void 0!==u.wp&&u.wp.media&&u.wp.media.gallery&&("add"==n?(a=u.wp.media({library:{type:"image"},frame:"post",state:"gallery",multiple:!0})).open():a=u.wp.media.gallery.edit('[gallery ids="'+t+'"]'),a.on("update",function(e){r.empty();e=e.models.map(function(e){var e=e.toJSON(),t=(e.sizes&&e.sizes.thumbnail&&e.sizes.thumbnail.url?e.sizes.thumbnail:e).url;return r.append('<div class="merchant-gallery-image" data-item-id="'+e.id+'"><i class="merchant-gallery-remove dashicons dashicons-no-alt"></i><img src="'+t+'" /></div>'),e.id});o.val(e.join(",")).trigger("change"),i.find(".merchant-gallery-remove").on("click",function(e){e.preventDefault(),m(this).parent().remove();var t=[];r.find(".merchant-gallery-image").each(function(){t.push(m(this).data("item-id"))}),o.val(t.join(",")).trigger("change")})}))})});var l=function(e){var a,i=e,e=i.find(".merchant-upload-button"),o=i.find(".merchant-upload-input"),r=i.find(".merchant-upload-wrapper");i.find(".merchant-upload-remove").on("click",function(e){e.preventDefault(),m(this).parent().remove(),o.val("").trigger("change")}),e.on("click",function(e){e.preventDefault(),void 0!==u.wp&&u.wp.media&&((a=a||u.wp.media({library:{type:"image"}})).open(),a.on("select",function(){r.empty();var e=a.state().get("selection").first().attributes,t=(e.sizes&&e.sizes.thumbnail&&e.sizes.thumbnail.url?e.sizes.thumbnail:e).url,n=e.sizes?JSON.stringify(e.sizes):"";r.append('<div class="merchant-upload-image" data-sizes=\''+n+'\'><i class="merchant-upload-remove dashicons dashicons-no-alt"></i><img src="'+t+'" /></div>'),o.val(e.id).trigger("change"),i.find(".merchant-upload-button-drag-drop").hide(),i.find(".merchant-upload-remove").on("click",function(e){e.preventDefault(),m(this).parent().remove(),o.val("").trigger("change"),i.find(".merchant-upload-button-drag-drop").show()})}))})},d=(m(".merchant-module-page-setting-field-upload:not(.template)").each(function(){l(m(this))}),jQuery.each(["dragenter","dragover","dragleave","drop"],function(e,t){m(p).on(t,".merchant-upload-button-drag-drop",function(e){e.preventDefault(),e.stopPropagation()})}),m(p).on("dragenter",".merchant-upload-button-drag-drop",function(e){m(this).closest(".merchant-module-page-setting-field-upload").find(".merchant-upload-button").click()}),function(e){var t=e.find("select"),n=t.data("source"),a=u.merchant_admin_options,i={width:"100%",templateSelection:function(e){return e.text.replace(/&nbsp;-*\s*/g,"").trim()}};"post"!==n&&"product"!==n&&"user"!==n||(i.minimumInputLength=1,i.ajax={url:a.ajaxurl,dataType:"json",delay:250,cache:!0,data:function(e){return{action:"merchant_admin_options_select_ajax",nonce:a.ajaxnonce,term:e.term,source:n}},processResults:function(e,t){return e.success?{results:e.data}:{}}}),t.select2(i),e.find(".select2-selection--multiple").append('<span class="merchant-select2-clear"></span>')}),h=(m(".merchant-module-page-setting-field-select_ajax:not(.template)").each(function(){d(m(this))}),m(".merchant-module-page-settings-responsive").each(function(){var e=m(this),n=e.find(".merchant-module-page-settings-devices button"),a=e.find(".merchant-module-page-settings-device-container");n.on("click",function(e){e.preventDefault();var t=m(this).data("device");n.removeClass("active"),a.removeClass("active"),m(this).addClass("active"),a.each(function(){m(this).data("device")===t&&m(this).addClass("active")})})}),m(".merchant-animated-buttons").each(function(){var e,t,n=m(this).find("label"),a=m(".merchant-animation-demo");n.on("click",function(){a.removeClass("merchant-animation-"+e),a.removeClass("merchant-animation-"+t),e=m(this).find("input").attr("value"),setTimeout(function(){a.addClass("merchant-animation-"+e)},100),setTimeout(function(){a.removeClass("merchant-animation-"+e)},1e3)}),n.mouseover(function(){a.removeClass("merchant-animation-"+e),t=m(this).find("input").attr("value"),a.addClass("merchant-animation-"+t)}).mouseout(function(){a.removeClass("merchant-animation-"+t)})}),m(".merchant-notifications-sidebar")),e=(h.length&&(m(".merchant-notifications").on("click",function(e){e.preventDefault();var t=m(this),e=h.find(".merchant-notification:first-child .merchant-notification-date").data("raw-date");h.toggleClass("opened"),t.hasClass("read")||m.post(u.merchant.ajax_url,{action:"merchant_notifications_read",nonce:u.merchant.nonce,latest_notification_date:e},function(e){e.success&&setTimeout(function(){t.addClass("read")},2e3)})}),m(".merchant-notification-content").each(function(){var e=m(this),t=(e.find("span.changelog-fixed").each(function(){m(this).closest("li").remove()}),e.find("li")),n=e.find("li.hidden");t.length===n.length&&e.closest(".merchant-notification").remove()}),m(u).on("scroll",function(){60<u.pageYOffset&&(h.addClass("closing"),setTimeout(function(){h.removeClass("opened"),h.removeClass("closing")},300))}),m(".merchant-notifications-sidebar-close").on("click",function(e){e.preventDefault(),h.addClass("closing"),setTimeout(function(){h.removeClass("opened"),h.removeClass("closing")},300)})),m(".merchant-tabs-nav")),t=(e.length&&e.each(function(){var n=m(this).data("tab-wrapper-id");m(this).find(".merchant-tabs-nav-link").on("click",function(e){e.preventDefault();var e=m(this).closest(".merchant-tabs-nav").find(".merchant-tabs-nav-link"),t=m(this).data("tab-to"),e=(e.each(function(){m(this).closest(".merchant-tabs-nav-item").removeClass("active")}),m(this).closest(".merchant-tabs-nav-item").addClass("active"),m('.merchant-tab-content-wrapper[data-tab-wrapper-id="'+n+'"]'));e.find("> .merchant-tab-content").removeClass("active"),e.find('> .merchant-tab-content[data-tab-content-id="'+t+'"]').addClass("active")})}),m(".merchant-module-alert"));t.length&&t.find(".merchant-module-alert-close").on("click",function(e){e.preventDefault(),t.removeClass("merchant-show"),m(p).off("click.merchant-alert-close")})})})(jQuery,window,document),jQuery.fn.extend({getPath:function(){var c=[];return this.each(function(e,t){for(var n,a=jQuery(t);a.length;){var i=a.get(0);if(!(o=i.localName))break;var o=o.toLowerCase(),r=a.parent();1<r.children(o).length&&0<(e=r.children().index(i)+1)&&(o+=":nth-child("+e+")"),n=o+(n?" > "+n:""),a=r}c.push(n)}),c.join(",")}});
  • merchant/trunk/assets/js/admin/merchant-metabox.js

    r3003440 r3458319  
    66
    77  $.fn.merchantMetabox = function () {
     8    function initSelectMultiple($container) {
     9      var $selectMultiple = $container.find('.merchant-metabox-field-select select[multiple]');
     10      if ($selectMultiple.length) {
     11        $selectMultiple.select2({
     12          width: '100%'
     13        });
     14        $selectMultiple.each(function () {
     15          var $select = $(this);
     16          if ($select.next('.select2-container').find('.select2-selection--multiple').length) {
     17            $select.next('.select2-container').find('.select2-selection--multiple').append('<span class="merchant-select2-clear"></span>');
     18          }
     19        });
     20      }
     21    }
     22    function initMerchantRange($container) {
     23      var $rangeFields = $container.find('.merchant-range');
     24      if ($rangeFields.length) {
     25        $rangeFields.each(function () {
     26          var $range = $(this);
     27          var $rangeInput = $range.find('.merchant-range-input');
     28          var $numberInput = $range.find('.merchant-range-number-input');
     29          $rangeInput.on('change input merchant.range merchant-init.range', function (e) {
     30            var $thisRange = $(this);
     31            var value = (e.type === 'merchant' ? $numberInput.val() : $thisRange.val()) || 0;
     32            var min = $thisRange.attr('min') || 0;
     33            var max = $thisRange.attr('max') || 100;
     34            var percentage = (value - min) / (max - min) * 100;
     35            if ($('body').hasClass('rtl')) {
     36              $thisRange.css({
     37                'background': 'linear-gradient(to left, #3858E9 0%, #3858E9 ' + percentage + '%, #ddd ' + percentage + '%, #ddd 100%)'
     38              });
     39            } else {
     40              $thisRange.css({
     41                'background': 'linear-gradient(to right, #3858E9 0%, #3858E9 ' + percentage + '%, #ddd ' + percentage + '%, #ddd 100%)'
     42              });
     43            }
     44            $rangeInput.val(value);
     45            $numberInput.val(value);
     46          }).trigger('merchant-init.range');
     47          $numberInput.on('change input blur', function () {
     48            $rangeInput.val($(this).val()).trigger('merchant.range');
     49          });
     50        });
     51      }
     52    }
    853    function initSelectAjax($selectAjax) {
    954      $selectAjax.each(function () {
     
    118163              initSelectAjax($selectAjax);
    119164            }
     165            initSelectMultiple($item);
    120166            $(this).parent().removeClass('active');
    121167            $layouts.removeClass('empty');
     
    384430        initSelectAjax($selectAjax);
    385431      }
     432      initSelectMultiple($this);
     433      initMerchantRange($this);
    386434      var $attributes = $('.merchant-metabox-field-wc-attributes');
    387435      if ($attributes.length) {
     
    433481        });
    434482      }
     483
     484      // Initialize Date Time Pickers
     485      var $dateTimeFields = $contents.find('.merchant-metabox-datetime-field');
     486      if ($dateTimeFields.length) {
     487        $dateTimeFields.each(function (index) {
     488          var $field = $(this);
     489          var $input = $field.find('input');
     490          var fieldOptions = $field.data('options') || {};
     491
     492          // Base options with event handling
     493          var options = {
     494            locale: typeof merchant_datepicker_locale !== 'undefined' ? typeof merchant_datepicker_locale === 'string' ? JSON.parse(merchant_datepicker_locale) : merchant_datepicker_locale : {},
     495            selectedDates: [$input.val() ? new Date($input.val()) : ''],
     496            onSelect: function onSelect(_ref) {
     497              var date = _ref.date,
     498                formattedDate = _ref.formattedDate,
     499                datepicker = _ref.datepicker;
     500              if (typeof formattedDate === "undefined") {
     501                // Allow removing date
     502                datepicker.$el.value = '';
     503              }
     504              $input.trigger('change');
     505              $input.trigger('change.merchant-datepicker', [formattedDate, $input, options, index]);
     506            }
     507          };
     508
     509          // Add default buttons
     510          fieldOptions.buttons = ['clear'];
     511
     512          // Convert 'today' string to actual Date object
     513          if (fieldOptions.minDate !== undefined && fieldOptions.minDate === 'today') {
     514            fieldOptions.minDate = new Date();
     515            if (fieldOptions.timeZone !== undefined && fieldOptions.timeZone !== '') {
     516              fieldOptions.minDate = new Date(fieldOptions.minDate.toLocaleString('en-US', {
     517                timeZone: fieldOptions.timeZone
     518              }));
     519            }
     520          }
     521
     522          // Merge field options with base options
     523          options = Object.assign(options, fieldOptions);
     524
     525          // Initialize datepicker
     526          new AirDatepicker($input[0], options);
     527
     528          // Make input readonly to prevent manual typing
     529          $input.attr('readonly', true);
     530        });
     531      }
     532      $(document).on('click', '.merchant-metabox-color-field .merchant-color-picker', function (e) {
     533        e.preventDefault();
     534        e.stopPropagation();
     535        var $picker = $(this);
     536        var $field = $picker.closest('.merchant-metabox-color-field');
     537        var $input = $field.find('.merchant-color-input');
     538        var pickr = $picker.data('pickr');
     539        if (!pickr) {
     540          try {
     541            var $bodyHTML = $('body,html');
     542            $bodyHTML.addClass('merchant-height-auto');
     543            pickr = new Pickr({
     544              el: $picker.get(0),
     545              container: $picker.parent().get(0),
     546              theme: 'merchant',
     547              appClass: 'merchant-pcr-app',
     548              default: $input.val() || $picker.data('default-color') || '#212121',
     549              swatches: ['#000000', '#F44336', '#E91E63', '#673AB7', '#03A9F4', '#8BC34A', '#FFEB3B', '#FFC107', '#FFFFFF'],
     550              sliders: 'h',
     551              useAsButton: true,
     552              position: 'bottom-start',
     553              components: {
     554                hue: true,
     555                preview: true,
     556                opacity: true,
     557                interaction: {
     558                  input: true,
     559                  clear: true
     560                }
     561              },
     562              i18n: {
     563                'btn:clear': 'Default'
     564              }
     565            });
     566            pickr.on('change', function (color) {
     567              var colorCode;
     568              if (color.a === 1) {
     569                pickr.setColorRepresentation('HEX');
     570                colorCode = color.toHEXA().toString(0);
     571              } else {
     572                pickr.setColorRepresentation('RGBA');
     573                colorCode = color.toRGBA().toString(0);
     574              }
     575              $picker.css({
     576                'background-color': colorCode
     577              });
     578              if ($input.val() !== colorCode) {
     579                $input.val(colorCode).trigger('change');
     580              }
     581            });
     582            pickr.on('clear', function () {
     583              var defaultColor = $picker.data('default-color');
     584              if (defaultColor) {
     585                pickr.setColor(defaultColor);
     586              } else {
     587                $picker.css({
     588                  'background-color': 'white'
     589                });
     590                $input.val('');
     591              }
     592            });
     593            pickr.on('hide', function () {
     594              $bodyHTML.removeClass('merchant-height-auto');
     595            });
     596            $picker.data('pickr', pickr);
     597            setTimeout(function () {
     598              pickr.show();
     599            }, 200);
     600          } catch (error) {
     601            console.error('Error creating Pickr:', error);
     602          }
     603        } else {
     604          pickr.setColor($input.val());
     605          pickr.show();
     606        }
     607      });
     608      $(document).on('change keyup', '.merchant-metabox-color-field .merchant-color-input', function () {
     609        var $input = $(this);
     610        var $picker = $input.siblings('.merchant-color-picker');
     611        var colorCode = $input.val();
     612        $picker.css({
     613          'background-color': colorCode
     614        });
     615      });
     616
     617      // Enhanced Conditional Logic (conditions attribute)
     618      function evaluateConditions(conditions, $field) {
     619        var operator = conditions.relation || 'AND';
     620        var results = [];
     621        for (var i = 0; i < conditions.terms.length; i++) {
     622          var term = conditions.terms[i];
     623          var $target = $contents.find('[name="' + term[0] + '"]');
     624          if (!$target.length) {
     625            continue;
     626          }
     627          var passed = false;
     628          var targetValue = null;
     629
     630          // Get target value based on input type
     631          if ($target.attr('type') === 'checkbox') {
     632            // For checkboxes/switchers: return '1' if checked, '0' if not
     633            targetValue = $target.is(':checked') ? '1' : '0';
     634          } else if ($target.attr('type') === 'radio') {
     635            var $checked = $target.filter(':checked');
     636            targetValue = $checked.length ? $checked.val() : '';
     637          } else if ($target.is('select')) {
     638            targetValue = $target.val();
     639          } else {
     640            targetValue = $target.val();
     641          }
     642
     643          // Evaluate condition
     644          switch (term[1]) {
     645            case '==':
     646              if (Array.isArray(targetValue)) {
     647                passed = targetValue.indexOf(term[2]) !== -1;
     648              } else {
     649                passed = targetValue == term[2];
     650              }
     651              break;
     652            case '!=':
     653              if (Array.isArray(targetValue)) {
     654                passed = targetValue.indexOf(term[2]) === -1;
     655              } else {
     656                passed = targetValue != term[2];
     657              }
     658              break;
     659            case 'any':
     660              var allowedValues = term[2].split('|');
     661              if (Array.isArray(targetValue)) {
     662                passed = targetValue.some(function (val) {
     663                  return allowedValues.indexOf(val) !== -1;
     664                });
     665              } else {
     666                passed = allowedValues.indexOf(targetValue) !== -1;
     667              }
     668              break;
     669            case 'not_any':
     670              var disallowedValues = term[2].split('|');
     671              if (Array.isArray(targetValue)) {
     672                passed = !targetValue.some(function (val) {
     673                  return disallowedValues.indexOf(val) !== -1;
     674                });
     675              } else {
     676                passed = disallowedValues.indexOf(targetValue) === -1;
     677              }
     678              break;
     679          }
     680          results.push(passed);
     681        }
     682
     683        // Combine results based on operator
     684        if (operator === 'OR') {
     685          return results.indexOf(true) !== -1;
     686        } else {
     687          return results.indexOf(false) === -1;
     688        }
     689      }
     690
     691      // Check for fields with conditions attribute
     692      var $conditionalFields = $contents.find('[data-conditions]');
     693      if ($conditionalFields.length) {
     694        var checkConditions = function checkConditions() {
     695          $conditionalFields.each(function () {
     696            var $field = $(this);
     697            var conditions = $field.data('conditions');
     698            if (conditions && conditions.terms) {
     699              var passed = evaluateConditions(conditions, $field);
     700              if (passed) {
     701                $field.removeClass('merchant-metabox-field-hidden');
     702              } else {
     703                $field.addClass('merchant-metabox-field-hidden');
     704              }
     705            }
     706          });
     707        };
     708
     709        // Run on load
     710        checkConditions();
     711
     712        // Bind events
     713        $contents.find('input, select, textarea').on('change', checkConditions);
     714      }
    435715    });
    436716  };
  • merchant/trunk/assets/js/admin/merchant-metabox.min.js

    r3198417 r3458319  
    1 (c=>{c.fn.merchantMetabox=function(){function d(a){a.each(function(){var e=c(this).find("select"),t=e.data("source"),n=window.merchant_metabox;e.select2({width:"100%",minimumInputLength:1,ajax:{url:n.ajaxurl,dataType:"json",delay:250,cache:!0,data:function(e){return{action:"merchant_select_ajax",nonce:n.ajaxnonce,term:e.term,source:t}},processResults:function(e,t){return e.success?{results:e.data}:{}}}}),a.find(".select2-selection--multiple").append('<span class="merchant-select2-clear"></span>')})}return this.each(function(){var e=c(this),t=e.find(".merchant-metabox-tab"),n=e.find(".merchant-metabox-content"),a=(t.each(function(){var t=c(this);t.on("click",function(e){e.preventDefault();e=n.eq(t.index());t.addClass("active").siblings().removeClass("active"),e.addClass("active").siblings().removeClass("active"),c(document).trigger("merchant-metabox-content-show",e)})}),n.find(".merchant-metabox-field-flexible-content")),i=(a.length&&a.each(function(){var i=".merchant-metabox-field-flexible-content-select-ajax",l=c(i),n=(l.length&&d(l),c(this).find(".merchant-metabox-field-flexible-content-list"));n.sortable({axis:"y",cursor:"move",helper:"original",handle:".merchant-metabox-field-flexible-content-move",stop:function(e,t){n.find("> li").each(function(e){var t=".merchant-metabox-field-flexible-content-item-count",n=c(this).find(t).text(),a=parseInt(n)-1;c(this).find(t).text(e),c(this).find("input, select").each(function(){c(this).attr("name")&&c(this).attr("name",c(this).attr("name").replace("["+a+"]","["+(e-1)+"]"))})})}}),a.find(".merchant-metabox-field-flexible-content-add-button").on("click",function(e){e.preventDefault(),e.stopImmediatePropagation(),c(this).parent().find(".merchant-metabox-field-flexible-content-add-list").toggleClass("active")}),a.find(".merchant-metabox-field-flexible-content-add").on("click",function(e){e.preventDefault(),e.stopImmediatePropagation();var e=c(".merchant-metabox-field-flexible-content-list[data-id="+c(this).data("id")+"]"),t=c(this).data("layout"),n=e.find("> li"),a=e.find("> li").first().clone(!0);a.find(" > div").each(function(){c(this).data("layout")!==t||c(this).children().appendTo(c(this).parent()),c(this).remove()}),a.find("input, select").each(function(){c(this).data("name")&&c(this).attr("name",c(this).data("name").replace("0",n.length-1))}),a.find(".merchant-metabox-field-flexible-content-item-count").text(n.length),a.find(".merchant-metabox-field-flexible-content-select-ajax-clone").each(function(){c(this).removeClass("merchant-metabox-field-flexible-content-select-ajax-clone"),c(this).addClass("merchant-metabox-field-flexible-content-select-ajax")}),a.removeClass("hidden"),e.append(a),(l=c(i)).length&&d(l),c(this).parent().removeClass("active"),e.removeClass("empty")}),a.find(".merchant-metabox-field-flexible-content-remove").on("click",function(e){e.preventDefault(),e.stopImmediatePropagation();var e=c(this).closest("li"),t=e.parent();e.remove(),1===t.find(">li").length&&t.addClass("empty")})}),n.find(".merchant-metabox-field-repeater, .merchant-metabox-field-flexible-content-repeater")),l=(i.length&&i.each(function(){var a=c(this).find("ul");a.sortable({axis:"y",cursor:"move",helper:"original",handle:".merchant-metabox-field-repeater-move"}),i.find(".merchant-metabox-field-repeater-add").on("click",function(e){e.preventDefault();var t=a.find("li"),e=a.find("li").first().clone(!0),n=e.find("input");e.find(".merchant-metabox-field-repeater-list-item-fields").length?e.find("input").each(function(){c(this).attr("name",c(this).data("name").replace("0",t.length-1))}):n.attr("name",n.data("name")),e.removeClass("hidden"),a.append(e)}),i.find(".merchant-metabox-field-repeater-remove").on("click",function(e){e.preventDefault(),c(this).closest("li").remove()})}),n.find(".merchant-metabox-field-uploads")),o=(l.length&&l.each(function(){var n,a,t=c(this).find("ul");t.sortable({axis:"y",cursor:"move",helper:"original",handle:".merchant-metabox-field-uploads-move"}),l.find(".merchant-metabox-field-uploads-add").on("click",function(e){e.preventDefault(),e.stopImmediatePropagation();var e=c(this).parent().find("ul"),t=e.find("li"),n=t.first().clone(!0);n.find("input").each(function(){c(this).attr("name",c(this).data("name").replace("0",t.length))}),n.removeClass("hidden"),e.append(n)}),l.find(".merchant-metabox-field-uploads-upload").on("click",function(e){e.preventDefault(),(a=c(this).closest("li").find(" > input")).attr("name").length&&(n&&n.options.library.type===t.data("library")?n.open():(n=window.wp.media({library:{type:t.data("library")||"image"}}).open()).on("select",function(){var e=n.state().get("selection").first().toJSON();a.val(e.url)}))}),l.find(".merchant-metabox-field-uploads-thumbnail-upload").on("click",function(e){e.preventDefault(),(a=c(this).parent().find("input")).attr("name").length&&(n&&"image"===n.options.library.type?n.open():(n=window.wp.media({library:{type:"image"}}).open()).on("select",function(){var e=n.state().get("selection").first().toJSON(),t=a.parent();a.val(e.id),t.find("span").hide(),t.find("img").remove(),t.find(".merchant-metabox-field-uploads-thumbnail-remove").show(),t.find(".merchant-metabox-field-uploads-thumbnail-upload").append(c("<img>").attr({src:e.url}))}))}),l.find(".merchant-metabox-field-uploads-thumbnail-remove").on("click",function(e){e.preventDefault();e=c(this).parent();e.find("span").show(),e.find("img").remove(),e.find("input").val(""),e.find(".merchant-metabox-field-uploads-thumbnail-remove").hide()}),l.find(".merchant-metabox-field-uploads-remove").on("click",function(e){e.preventDefault(),c(this).closest("li").remove()})}),n.find(".merchant-metabox-field-size-chart")),e=(o.length&&(o.on("multidimensional",function(e,t){(t||o).find("input").each(function(){var e=c(this),t=Math.max(0,e.closest("li").index()-1),n=Math.max(0,e.closest("tr").index()-1),e=Math.max(0,e.closest("td").index());this.name=this.name.replace(/(\[\d+\])\[sizes\](\[\d+\])(\[\d+\])/,"["+t+"][sizes]["+n+"]["+e+"]"),this.name=this.name.replace(/(\[\d+\])\[name\]/,"["+t+"][name]")})}),o.each(function(){var t=c(this).find("ul");o.on("click",".merchant-add",function(e){e.preventDefault();e=t.find("li").first().clone(!0);e.find("input").each(function(){c(this).attr("name",c(this).data("name")),c(this).removeAttr("data-name")}),e.removeClass("hidden"),t.append(e),o.trigger("multidimensional",[e])}),o.on("click",".merchant-add-col",function(e){e.preventDefault();var e=c(this).closest("td"),t=c(this).closest("table");c(this).closest("tbody").find("tr td:nth-child("+(e.index()+1)+")").each(function(){var e=c(this),t=e.clone(!0);t.find("input").val(""),e.after(t)}),o.trigger("multidimensional",[t])}),o.on("click",".merchant-del-col",function(e){e.preventDefault();var e=c(this).closest("td"),t=c(this).closest("table"),n=c(this).closest("tr").find("td").length,e=c(this).closest("tbody").find("tr td:nth-child("+(e.index()+1)+")");2<n?e.remove():e.find("input").val(""),o.trigger("multidimensional",[t])}),o.on("click",".merchant-add-row",function(e){e.preventDefault();var e=c(this).closest("tr"),t=c(this).closest("table"),n=e.clone(!0);n.find("input").val(""),e.after(n),o.trigger("multidimensional",[t])}),o.on("click",".merchant-del-row",function(e){e.preventDefault();var e=c(this).closest("tr"),t=c(this).closest("table");2<c(this).closest("tbody").find("tr").length?e.remove():e.find("input").val(""),o.trigger("multidimensional",[t])}),o.on("click",".merchant-remove",function(e){e.preventDefault(),c(this).closest("li").remove(),o.trigger("multidimensional")}),o.on("click",".merchant-duplicate",function(e){e.preventDefault();var e=c(this).closest("li"),t=e.clone(!0);e.after(t),o.trigger("multidimensional")})})),c(".merchant-metabox-field-media")),t=(e.length&&e.each(function(){var n,e=c(this),a=e.find(".merchant-metabox-field-media-input"),i=e.find(".merchant-metabox-field-media-preview img"),t=e.find(".merchant-metabox-field-media-upload"),l=e.find(".merchant-metabox-field-media-remove"),o=i.data("placeholder");t.on("click",function(e){e.preventDefault(),n||(n=window.wp.media({library:{type:"image"}})).on("select",function(){var e=n.state().get("selection").first().toJSON(),t=(e&&e.sizes&&e.sizes.thumbnail?e.sizes.thumbnail:e).url;a.val(e.id),i.attr("src",t),l.removeClass("hidden")}),n.open()}),l.on("click",function(e){e.preventDefault(),a.val(""),i.attr("src",o),l.addClass("hidden")})}),c(".merchant-metabox-field-select-ajax")),e=(t.length&&d(t),c(".merchant-metabox-field-wc-attributes")),t=(e.length&&e.each(function(){c(this).find("ul").sortable({axis:"y",cursor:"move",helper:"original"})}),c(document).on("merchant-metabox-content-show",function(e,t){var n,t=c(t);t.data("code-editor-initalized")||((n=c(".merchant-metabox-field-code-editor",t)).length&&n.each(function(){var e=c(this).find("textarea"),t=wp.codeEditor.defaultSettings||{};t.codemirror=_.extend({},t.codemirror,{gutters:[]}),wp.codeEditor.initialize(e,t).codemirror.on("keyup",function(e){e.save()})}),t.data("code-editor-initalized",!0))}),n.find("[data-depend-on]"));t.length&&t.each(function(){var t=c(this),e=n.find('[name="'+t.data("depend-on")+'"]');e.data("depend-on")||(e.on("change",function(){var e=n.find('[data-depend-on="'+t.data("depend-on")+'"]');c(this).is(":checked")?e.removeClass("merchant-metabox-field-hidden"):e.addClass("merchant-metabox-field-hidden")}),e.data("depend-on",!0))})})},c(document).ready(function(e){e(".merchant-metabox").merchantMetabox()})})(jQuery);
     1(d=>{d.fn.merchantMetabox=function(){function l(e){e=e.find(".merchant-metabox-field-select select[multiple]");e.length&&(e.select2({width:"100%"}),e.each(function(){var e=d(this);e.next(".select2-container").find(".select2-selection--multiple").length&&e.next(".select2-container").find(".select2-selection--multiple").append('<span class="merchant-select2-clear"></span>')}))}function c(a){a.each(function(){var e=d(this).find("select"),t=e.data("source"),n=window.merchant_metabox;e.select2({width:"100%",minimumInputLength:1,ajax:{url:n.ajaxurl,dataType:"json",delay:250,cache:!0,data:function(e){return{action:"merchant_select_ajax",nonce:n.ajaxnonce,term:e.term,source:t}},processResults:function(e,t){return e.success?{results:e.data}:{}}}}),a.find(".select2-selection--multiple").append('<span class="merchant-select2-clear"></span>')})}return this.each(function(){var e=d(this),t=e.find(".merchant-metabox-tab"),m=e.find(".merchant-metabox-content"),a=(t.each(function(){var t=d(this);t.on("click",function(e){e.preventDefault();e=m.eq(t.index());t.addClass("active").siblings().removeClass("active"),e.addClass("active").siblings().removeClass("active"),d(document).trigger("merchant-metabox-content-show",e)})}),m.find(".merchant-metabox-field-flexible-content")),n=(a.length&&a.each(function(){var i=".merchant-metabox-field-flexible-content-select-ajax",o=d(i),n=(o.length&&c(o),d(this).find(".merchant-metabox-field-flexible-content-list"));n.sortable({axis:"y",cursor:"move",helper:"original",handle:".merchant-metabox-field-flexible-content-move",stop:function(e,t){n.find("> li").each(function(e){var t=".merchant-metabox-field-flexible-content-item-count",n=d(this).find(t).text(),a=parseInt(n)-1;d(this).find(t).text(e),d(this).find("input, select").each(function(){d(this).attr("name")&&d(this).attr("name",d(this).attr("name").replace("["+a+"]","["+(e-1)+"]"))})})}}),a.find(".merchant-metabox-field-flexible-content-add-button").on("click",function(e){e.preventDefault(),e.stopImmediatePropagation(),d(this).parent().find(".merchant-metabox-field-flexible-content-add-list").toggleClass("active")}),a.find(".merchant-metabox-field-flexible-content-add").on("click",function(e){e.preventDefault(),e.stopImmediatePropagation();var e=d(".merchant-metabox-field-flexible-content-list[data-id="+d(this).data("id")+"]"),t=d(this).data("layout"),n=e.find("> li"),a=e.find("> li").first().clone(!0);a.find(" > div").each(function(){d(this).data("layout")!==t||d(this).children().appendTo(d(this).parent()),d(this).remove()}),a.find("input, select").each(function(){d(this).data("name")&&d(this).attr("name",d(this).data("name").replace("0",n.length-1))}),a.find(".merchant-metabox-field-flexible-content-item-count").text(n.length),a.find(".merchant-metabox-field-flexible-content-select-ajax-clone").each(function(){d(this).removeClass("merchant-metabox-field-flexible-content-select-ajax-clone"),d(this).addClass("merchant-metabox-field-flexible-content-select-ajax")}),a.removeClass("hidden"),e.append(a),(o=d(i)).length&&c(o),l(a),d(this).parent().removeClass("active"),e.removeClass("empty")}),a.find(".merchant-metabox-field-flexible-content-remove").on("click",function(e){e.preventDefault(),e.stopImmediatePropagation();var e=d(this).closest("li"),t=e.parent();e.remove(),1===t.find(">li").length&&t.addClass("empty")})}),m.find(".merchant-metabox-field-repeater, .merchant-metabox-field-flexible-content-repeater")),i=(n.length&&n.each(function(){var a=d(this).find("ul");a.sortable({axis:"y",cursor:"move",helper:"original",handle:".merchant-metabox-field-repeater-move"}),n.find(".merchant-metabox-field-repeater-add").on("click",function(e){e.preventDefault();var t=a.find("li"),e=a.find("li").first().clone(!0),n=e.find("input");e.find(".merchant-metabox-field-repeater-list-item-fields").length?e.find("input").each(function(){d(this).attr("name",d(this).data("name").replace("0",t.length-1))}):n.attr("name",n.data("name")),e.removeClass("hidden"),a.append(e)}),n.find(".merchant-metabox-field-repeater-remove").on("click",function(e){e.preventDefault(),d(this).closest("li").remove()})}),m.find(".merchant-metabox-field-uploads")),o=(i.length&&i.each(function(){var n,a,t=d(this).find("ul");t.sortable({axis:"y",cursor:"move",helper:"original",handle:".merchant-metabox-field-uploads-move"}),i.find(".merchant-metabox-field-uploads-add").on("click",function(e){e.preventDefault(),e.stopImmediatePropagation();var e=d(this).parent().find("ul"),t=e.find("li"),n=t.first().clone(!0);n.find("input").each(function(){d(this).attr("name",d(this).data("name").replace("0",t.length))}),n.removeClass("hidden"),e.append(n)}),i.find(".merchant-metabox-field-uploads-upload").on("click",function(e){e.preventDefault(),(a=d(this).closest("li").find(" > input")).attr("name").length&&(n&&n.options.library.type===t.data("library")?n.open():(n=window.wp.media({library:{type:t.data("library")||"image"}}).open()).on("select",function(){var e=n.state().get("selection").first().toJSON();a.val(e.url)}))}),i.find(".merchant-metabox-field-uploads-thumbnail-upload").on("click",function(e){e.preventDefault(),(a=d(this).parent().find("input")).attr("name").length&&(n&&"image"===n.options.library.type?n.open():(n=window.wp.media({library:{type:"image"}}).open()).on("select",function(){var e=n.state().get("selection").first().toJSON(),t=a.parent();a.val(e.id),t.find("span").hide(),t.find("img").remove(),t.find(".merchant-metabox-field-uploads-thumbnail-remove").show(),t.find(".merchant-metabox-field-uploads-thumbnail-upload").append(d("<img>").attr({src:e.url}))}))}),i.find(".merchant-metabox-field-uploads-thumbnail-remove").on("click",function(e){e.preventDefault();e=d(this).parent();e.find("span").show(),e.find("img").remove(),e.find("input").val(""),e.find(".merchant-metabox-field-uploads-thumbnail-remove").hide()}),i.find(".merchant-metabox-field-uploads-remove").on("click",function(e){e.preventDefault(),d(this).closest("li").remove()})}),m.find(".merchant-metabox-field-size-chart")),t=(o.length&&(o.on("multidimensional",function(e,t){(t||o).find("input").each(function(){var e=d(this),t=Math.max(0,e.closest("li").index()-1),n=Math.max(0,e.closest("tr").index()-1),e=Math.max(0,e.closest("td").index());this.name=this.name.replace(/(\[\d+\])\[sizes\](\[\d+\])(\[\d+\])/,"["+t+"][sizes]["+n+"]["+e+"]"),this.name=this.name.replace(/(\[\d+\])\[name\]/,"["+t+"][name]")})}),o.each(function(){var t=d(this).find("ul");o.on("click",".merchant-add",function(e){e.preventDefault();e=t.find("li").first().clone(!0);e.find("input").each(function(){d(this).attr("name",d(this).data("name")),d(this).removeAttr("data-name")}),e.removeClass("hidden"),t.append(e),o.trigger("multidimensional",[e])}),o.on("click",".merchant-add-col",function(e){e.preventDefault();var e=d(this).closest("td"),t=d(this).closest("table");d(this).closest("tbody").find("tr td:nth-child("+(e.index()+1)+")").each(function(){var e=d(this),t=e.clone(!0);t.find("input").val(""),e.after(t)}),o.trigger("multidimensional",[t])}),o.on("click",".merchant-del-col",function(e){e.preventDefault();var e=d(this).closest("td"),t=d(this).closest("table"),n=d(this).closest("tr").find("td").length,e=d(this).closest("tbody").find("tr td:nth-child("+(e.index()+1)+")");2<n?e.remove():e.find("input").val(""),o.trigger("multidimensional",[t])}),o.on("click",".merchant-add-row",function(e){e.preventDefault();var e=d(this).closest("tr"),t=d(this).closest("table"),n=e.clone(!0);n.find("input").val(""),e.after(n),o.trigger("multidimensional",[t])}),o.on("click",".merchant-del-row",function(e){e.preventDefault();var e=d(this).closest("tr"),t=d(this).closest("table");2<d(this).closest("tbody").find("tr").length?e.remove():e.find("input").val(""),o.trigger("multidimensional",[t])}),o.on("click",".merchant-remove",function(e){e.preventDefault(),d(this).closest("li").remove(),o.trigger("multidimensional")}),o.on("click",".merchant-duplicate",function(e){e.preventDefault();var e=d(this).closest("li"),t=e.clone(!0);e.after(t),o.trigger("multidimensional")})})),d(".merchant-metabox-field-media")),t=(t.length&&t.each(function(){var n,e=d(this),a=e.find(".merchant-metabox-field-media-input"),i=e.find(".merchant-metabox-field-media-preview img"),t=e.find(".merchant-metabox-field-media-upload"),o=e.find(".merchant-metabox-field-media-remove"),r=i.data("placeholder");t.on("click",function(e){e.preventDefault(),n||(n=window.wp.media({library:{type:"image"}})).on("select",function(){var e=n.state().get("selection").first().toJSON(),t=(e&&e.sizes&&e.sizes.thumbnail?e.sizes.thumbnail:e).url;a.val(e.id),i.attr("src",t),o.removeClass("hidden")}),n.open()}),o.on("click",function(e){e.preventDefault(),a.val(""),i.attr("src",r),o.addClass("hidden")})}),d(".merchant-metabox-field-select-ajax")),e=(t.length&&c(t),l(e),(t=(t=e).find(".merchant-range")).length&&t.each(function(){var e=d(this),a=e.find(".merchant-range-input"),i=e.find(".merchant-range-number-input");a.on("change input merchant.range merchant-init.range",function(e){var t=d(this),e=("merchant"===e.type?i:t).val()||0,n=t.attr("min")||0,n=(e-n)/((t.attr("max")||100)-n)*100;d("body").hasClass("rtl")?t.css({background:"linear-gradient(to left, #3858E9 0%, #3858E9 "+n+"%, #ddd "+n+"%, #ddd 100%)"}):t.css({background:"linear-gradient(to right, #3858E9 0%, #3858E9 "+n+"%, #ddd "+n+"%, #ddd 100%)"}),a.val(e),i.val(e)}).trigger("merchant-init.range"),i.on("change input blur",function(){a.val(d(this).val()).trigger("merchant.range")})}),d(".merchant-metabox-field-wc-attributes")),t=(e.length&&e.each(function(){d(this).find("ul").sortable({axis:"y",cursor:"move",helper:"original"})}),d(document).on("merchant-metabox-content-show",function(e,t){var n,t=d(t);t.data("code-editor-initalized")||((n=d(".merchant-metabox-field-code-editor",t)).length&&n.each(function(){var e=d(this).find("textarea"),t=wp.codeEditor.defaultSettings||{};t.codemirror=_.extend({},t.codemirror,{gutters:[]}),wp.codeEditor.initialize(e,t).codemirror.on("keyup",function(e){e.save()})}),t.data("code-editor-initalized",!0))}),m.find("[data-depend-on]")),e=(t.length&&t.each(function(){var t=d(this),e=m.find('[name="'+t.data("depend-on")+'"]');e.data("depend-on")||(e.on("change",function(){var e=m.find('[data-depend-on="'+t.data("depend-on")+'"]');d(this).is(":checked")?e.removeClass("merchant-metabox-field-hidden"):e.addClass("merchant-metabox-field-hidden")}),e.data("depend-on",!0))}),m.find(".merchant-metabox-datetime-field"));e.length&&e.each(function(n){var e=d(this),a=e.find("input"),e=e.data("options")||{},i={locale:"undefined"!=typeof merchant_datepicker_locale?"string"==typeof merchant_datepicker_locale?JSON.parse(merchant_datepicker_locale):merchant_datepicker_locale:{},selectedDates:[a.val()?new Date(a.val()):""],onSelect:function(e){e.date;var t=e.formattedDate;void 0===t&&(e.datepicker.$el.value=""),a.trigger("change"),a.trigger("change.merchant-datepicker",[t,a,i,n])}};e.buttons=["clear"],void 0!==e.minDate&&"today"===e.minDate&&(e.minDate=new Date,void 0!==e.timeZone)&&""!==e.timeZone&&(e.minDate=new Date(e.minDate.toLocaleString("en-US",{timeZone:e.timeZone}))),i=Object.assign(i,e),new AirDatepicker(a[0],i),a.attr("readonly",!0)}),d(document).on("click",".merchant-metabox-color-field .merchant-color-picker",function(e){e.preventDefault(),e.stopPropagation();var t=d(this),n=t.closest(".merchant-metabox-color-field").find(".merchant-color-input"),a=t.data("pickr");if(a)a.setColor(n.val()),a.show();else try{var i=d("body,html");i.addClass("merchant-height-auto"),(a=new Pickr({el:t.get(0),container:t.parent().get(0),theme:"merchant",appClass:"merchant-pcr-app",default:n.val()||t.data("default-color")||"#212121",swatches:["#000000","#F44336","#E91E63","#673AB7","#03A9F4","#8BC34A","#FFEB3B","#FFC107","#FFFFFF"],sliders:"h",useAsButton:!0,position:"bottom-start",components:{hue:!0,preview:!0,opacity:!0,interaction:{input:!0,clear:!0}},i18n:{"btn:clear":"Default"}})).on("change",function(e){e=(1===e.a?(a.setColorRepresentation("HEX"),e.toHEXA()):(a.setColorRepresentation("RGBA"),e.toRGBA())).toString(0);t.css({"background-color":e}),n.val()!==e&&n.val(e).trigger("change")}),a.on("clear",function(){var e=t.data("default-color");e?a.setColor(e):(t.css({"background-color":"white"}),n.val(""))}),a.on("hide",function(){i.removeClass("merchant-height-auto")}),t.data("pickr",a),setTimeout(function(){a.show()},200)}catch(e){console.error("Error creating Pickr:",e)}}),d(document).on("change keyup",".merchant-metabox-color-field .merchant-color-input",function(){var e=d(this),t=e.siblings(".merchant-color-picker"),e=e.val();t.css({"background-color":e})});var r=m.find("[data-conditions]");r.length&&((t=function(){r.each(function(){var e=d(this),t=e.data("conditions");t&&t.terms&&((e=>{for(var t=e.relation||"AND",n=[],a=0;a<e.terms.length;a++){var i=e.terms[a],o=m.find('[name="'+i[0]+'"]');if(o.length){var r,l=!1,c=null;switch(c="checkbox"===o.attr("type")?o.is(":checked")?"1":"0":"radio"===o.attr("type")?(r=o.filter(":checked")).length?r.val():"":(o.is("select"),o.val()),i[1]){case"==":l=Array.isArray(c)?-1!==c.indexOf(i[2]):c==i[2];break;case"!=":l=Array.isArray(c)?-1===c.indexOf(i[2]):c!=i[2];break;case"any":var d=i[2].split("|"),l=Array.isArray(c)?c.some(function(e){return-1!==d.indexOf(e)}):-1!==d.indexOf(c);break;case"not_any":var s=i[2].split("|");l=Array.isArray(c)?!c.some(function(e){return-1!==s.indexOf(e)}):-1===s.indexOf(c)}n.push(l)}}return"OR"===t?-1!==n.indexOf(!0):-1===n.indexOf(!1)})(t)?e.removeClass("merchant-metabox-field-hidden"):e.addClass("merchant-metabox-field-hidden"))})})(),m.find("input, select, textarea").on("change",t))})},d(document).ready(function(e){e(".merchant-metabox").merchantMetabox()})})(jQuery);
  • merchant/trunk/assets/js/modules/quick-view/quick-view.js

    r3389952 r3458319  
    5555                window.botiga.qtyButton.init('quick-view');
    5656              }
     57
     58              // Initialize AJAX add to cart if enabled.
     59              if (window.merchant.setting.ajax_add_to_cart) {
     60                self.initAjaxAddToCart($content, $modal);
     61              }
    5762            } else {
    5863              $content.html(response.data);
     
    7883        });
    7984      });
     85    },
     86    /**
     87     * Initialize AJAX add to cart handler.
     88     *
     89     * @param {jQuery} $content The modal content container.
     90     * @param {jQuery} $modal The modal container.
     91     */
     92    initAjaxAddToCart: function initAjaxAddToCart($content, $modal) {
     93      var self = this;
     94
     95      // Remove any existing handlers to prevent duplicates.
     96      $content.off('submit', 'form.cart');
     97
     98      // Handle add to cart form submission.
     99      $content.on('submit', 'form.cart', function (e) {
     100        // Access the native submitter.
     101        var submitter = e.originalEvent ? e.originalEvent.submitter : null;
     102        var $submitter = $(submitter);
     103        var isAddToCart = false;
     104
     105        // 1. If triggered by Enter key (no submitter), assume Add to Cart (standard behavior)
     106        // Note: You can add extra checks here for document.activeElement if you want to be extra safe for "Enter on Buy Now",
     107        // but typically Enter in input fields implies the default action (Add to Cart).
     108        if (!submitter) {
     109          isAddToCart = true;
     110        }
     111        // 2. Check if submitter is explicitly the "Add to Cart" button
     112        // WooCommerce standard Add to Cart usually has name="add-to-cart" or class="single_add_to_cart_button"
     113        else if ($submitter.attr('name') === 'add-to-cart' || $submitter.hasClass('single_add_to_cart_button')) {
     114          isAddToCart = true;
     115        }
     116
     117        // If it's NOT an Add to Cart action (e.g. it's a Buy Now button), allow default submission
     118        if (!isAddToCart) {
     119          return;
     120        }
     121        e.preventDefault();
     122        e.stopImmediatePropagation(); // Prevent other handlers from firing.
     123
     124        var $form = $(this);
     125        var $button = $form.find('button[type="submit"], input[type="submit"]');
     126        var $addToCartButton = $form.find('.single_add_to_cart_button');
     127
     128        // Use add to cart button if available, otherwise use first submit button.
     129        if (!$addToCartButton.length) {
     130          $addToCartButton = $button.first();
     131        }
     132
     133        // Prevent duplicate submissions.
     134        if ($addToCartButton.hasClass('loading') || $addToCartButton.prop('disabled')) {
     135          return false;
     136        }
     137
     138        // Get form data.
     139        var formData = $form.serializeArray();
     140        var data = {
     141          action: 'merchant_quick_view_add_to_cart',
     142          nonce: window.merchant.setting.nonce
     143        };
     144
     145        // Check if this is a grouped product (has quantity fields with array notation like quantity[14]).
     146        var isGroupedProduct = false;
     147        $.each(formData, function (i, field) {
     148          if (field.name && field.name.indexOf('quantity[') === 0) {
     149            isGroupedProduct = true;
     150            return false; // Break the loop.
     151          }
     152        });
     153
     154        // Convert form data to object, but handle quantity specially.
     155        $.each(formData, function (i, field) {
     156          // Skip standalone quantity field - we'll handle it separately for non-grouped products.
     157          if (field.name === 'quantity') {
     158            return;
     159          }
     160          // Skip add-to-cart field - we'll handle product ID separately.
     161          if (field.name === 'add-to-cart') {
     162            return;
     163          }
     164          // For grouped products, quantity[ID] fields are added as-is.
     165          // Variation attributes are sent as-is (attribute_pa_color, etc.).
     166          data[field.name] = field.value;
     167        });
     168
     169        // Get product ID - try multiple sources (most reliable first).
     170        // 1. Extract from product wrapper div ID (format: product-{id}) - this is always present in the modal.
     171        var $productWrapper = $form.closest('[id^="product-"]');
     172        if ($productWrapper.length) {
     173          var productIdMatch = $productWrapper.attr('id').match(/product-(\d+)/);
     174          if (productIdMatch && productIdMatch[1]) {
     175            data.product_id = productIdMatch[1];
     176          }
     177        }
     178
     179        // 2. Try to get it directly from the form input.
     180        if (!data.product_id) {
     181          var addToCartInput = $form.find('input[name="add-to-cart"]');
     182          if (addToCartInput.length && addToCartInput.val()) {
     183            data.product_id = addToCartInput.val();
     184          }
     185        }
     186
     187        // Ensure product_id is set, otherwise we can't proceed.
     188        if (!data.product_id) {
     189          console.error('Quick View: Could not determine product ID');
     190          return false;
     191        }
     192
     193        // Get variation ID if it's a variable product.
     194        if ($form.find('.variations_form').length) {
     195          var variationId = $form.find('input[name="variation_id"]').val();
     196          if (variationId) {
     197            data.variation_id = parseInt(variationId, 10);
     198          }
     199        }
     200
     201        // Get quantity and ensure it's a number (not a string).
     202        // Only add standalone quantity for non-grouped products.
     203        // Grouped products use quantity[product_id] format which is already in the data object.
     204        if (!isGroupedProduct) {
     205          delete data.quantity; // Remove if it was included in serialized data.
     206          var quantityInput = $form.find('input[name="quantity"]');
     207          var quantity = quantityInput.length ? parseInt(quantityInput.val(), 10) : 1;
     208          if (isNaN(quantity) || quantity < 1) {
     209            quantity = 1;
     210          }
     211          data.quantity = quantity;
     212        } else {
     213          // For grouped products, ensure no standalone quantity field exists.
     214          delete data.quantity;
     215        }
     216
     217        // Show loading state.
     218        var originalText = $addToCartButton.html();
     219        var originalDisabled = $addToCartButton.prop('disabled');
     220        $addToCartButton.addClass('loading').prop('disabled', true);
     221        if ($addToCartButton.is('button')) {
     222          $addToCartButton.data('original-text', originalText);
     223          $addToCartButton.html('<span class="spinner"></span>');
     224        }
     225
     226        // Send AJAX request.
     227        $.ajax({
     228          type: 'POST',
     229          url: window.merchant.setting.ajax_url,
     230          data: data,
     231          success: function success(response) {
     232            self.handleAddToCartSuccess(response, $addToCartButton, originalText, originalDisabled, $content, $modal);
     233          },
     234          error: function error(xhr, textStatus, errorThrown) {
     235            self.handleAddToCartError(xhr, textStatus, errorThrown, $addToCartButton, originalText, originalDisabled, $content);
     236          }
     237        });
     238        return false;
     239      });
     240    },
     241    /**
     242     * Handle successful add to cart response.
     243     *
     244     * @param {Object} response AJAX response.
     245     * @param {jQuery} $button The add to cart button.
     246     * @param {string} originalText Original button text.
     247     * @param {boolean} originalDisabled Original disabled state.
     248     * @param {jQuery} $content The modal content container.
     249     * @param {jQuery} $modal The modal container.
     250     */
     251    handleAddToCartSuccess: function handleAddToCartSuccess(response, $button, originalText, originalDisabled, $content, $modal) {
     252      // Remove loading state.
     253      $button.removeClass('loading').prop('disabled', originalDisabled);
     254      if ($button.is('button') && $button.data('original-text')) {
     255        $button.html($button.data('original-text'));
     256      }
     257      if (response.success && response.data) {
     258        // Update cart fragments.
     259        if (response.data.fragments) {
     260          $.each(response.data.fragments, function (selector, html) {
     261            $(selector).replaceWith(html);
     262          });
     263        }
     264
     265        // Trigger WooCommerce events.
     266        $(document.body).trigger('added_to_cart', [response.data.fragments, response.data.cart_hash, $button, 'quick-view']);
     267        $(document.body).trigger('wc_fragment_refresh');
     268
     269        // Show success message.
     270        if (response.data.message) {
     271          // Remove existing notices.
     272          $content.find('.merchant-quick-view-inner .woocommerce-error, .woocommerce-message, .woocommerce-info').remove();
     273          // trigger event for third party integration
     274          $(document).trigger('merchant_quick_view_add_to_cart_success', [response.data.message, $content]);
     275        }
     276      } else {
     277        // Handle unexpected response.
     278        this.handleAddToCartError(null, 'error', 'Unexpected response format', $button, originalText, originalDisabled, $content);
     279      }
     280    },
     281    /**
     282     * Handle add to cart error response.
     283     *
     284     * @param {Object} xhr XMLHttpRequest object.
     285     * @param {string} textStatus Status text.
     286     * @param {string} errorThrown Error thrown.
     287     * @param {jQuery} $button The add to cart button.
     288     * @param {string} originalText Original button text.
     289     * @param {boolean} originalDisabled Original disabled state.
     290     * @param {jQuery} $content The modal content container.
     291     */
     292    handleAddToCartError: function handleAddToCartError(xhr, textStatus, errorThrown, $button, originalText, originalDisabled, $content) {
     293      // Remove loading state.
     294      $button.removeClass('loading').prop('disabled', originalDisabled);
     295      if ($button.is('button') && $button.data('original-text')) {
     296        $button.html($button.data('original-text'));
     297      }
     298
     299      // Get error message.
     300      var errorMessage = '';
     301      if (xhr && xhr.responseJSON && xhr.responseJSON.data && xhr.responseJSON.data.message) {
     302        errorMessage = xhr.responseJSON.data.message;
     303      } else if (xhr && xhr.responseJSON && xhr.responseJSON.data && xhr.responseJSON.data.notices) {
     304        // Extract error from notices.
     305        var notices = xhr.responseJSON.data.notices;
     306        if (notices.error && notices.error.length > 0) {
     307          errorMessage = notices.error[0].notice;
     308        }
     309      } else {
     310        errorMessage = errorThrown || textStatus || 'An error occurred while adding the product to cart.';
     311      }
     312
     313      // Remove existing notices.
     314      $content.find('.woocommerce-error, .woocommerce-message, .woocommerce-info').remove();
     315
     316      // Add error message.
     317      var $error = $('<div class="woocommerce-error" role="alert"></div>').text(errorMessage);
     318      $content.find('form.cart').before($error);
     319
     320      // Scroll to error if needed.
     321      $error[0].scrollIntoView({
     322        behavior: 'smooth',
     323        block: 'nearest'
     324      });
    80325    }
    81326  };
  • merchant/trunk/assets/js/modules/quick-view/quick-view.min.js

    r3389952 r3458319  
    1 var merchant=merchant||{};merchant.modules=merchant.modules||{},(o=>{merchant.modules.quickView={init:function(){var t=o(".merchant-quick-view-modal");t.length&&t.each(function(){var e=o(this),n=e.find(".merchant-quick-view-close-button"),a=e.find(".merchant-quick-view-inner"),i=e.find(".merchant-quick-view-content"),t=e.find(".merchant-quick-view-overlay"),c=!1;o(document).on("click",".merchant-quick-view-button",function(t){t.preventDefault(),i.empty(),e.addClass("merchant-show"),e.addClass("merchant-loading"),c=!0,o.post(window.merchant.setting.ajax_url,{action:"merchant_quick_view_content",nonce:window.merchant.setting.nonce,product_id:o(this).data("product-id")},function(t){var n;t.success&&c?(i.html(t.data),a.addClass("merchant-show"),e.removeClass("merchant-loading"),n=i.find(".woocommerce-product-gallery"),wc_single_product_params.zoom_enabled=window.merchant.setting.quick_view_zoom,"function"==typeof o.fn.wc_product_gallery&&n.length&&(n.trigger("wc-product-gallery-before-init",[n.get(0),wc_single_product_params]),wc_single_product_params.flexslider_enabled="1",n.wc_product_gallery(wc_single_product_params),n.trigger("wc-product-gallery-after-init",[n.get(0),wc_single_product_params])),n=i.find(".variations_form"),"function"==typeof o.fn.wc_variation_form&&n.length&&n.each(function(){o(this).wc_variation_form()}),window.botiga&&window.botiga.productSwatch&&window.botiga.productSwatch.init(),window.botiga&&window.botiga.qtyButton&&window.botiga.qtyButton.init("quick-view")):(i.html(t.data),a.addClass("merchant-show"),e.removeClass("merchant-loading")),window.dispatchEvent(new Event("merchant.quickview.ajax.loaded"))}).fail(function(t,n){i.html(n),a.addClass("merchant-show"),e.removeClass("merchant-loading")})}),t.on("click",function(t){t.preventDefault(),n.trigger("click")}),n.on("click",function(t){t.preventDefault(),c=!1,e.removeClass("merchant-show"),a.removeClass("merchant-show")})})}},o(document).ready(function(){merchant.modules.quickView.init()})})(jQuery);
     1var merchant=merchant||{};merchant.modules=merchant.modules||{},(u=>{merchant.modules.quickView={init:function(){var i=this,t=u(".merchant-quick-view-modal");t.length&&t.each(function(){var a=u(this),e=a.find(".merchant-quick-view-close-button"),n=a.find(".merchant-quick-view-inner"),o=a.find(".merchant-quick-view-content"),t=a.find(".merchant-quick-view-overlay"),r=!1;u(document).on("click",".merchant-quick-view-button",function(t){t.preventDefault(),o.empty(),a.addClass("merchant-show"),a.addClass("merchant-loading"),r=!0,u.post(window.merchant.setting.ajax_url,{action:"merchant_quick_view_content",nonce:window.merchant.setting.nonce,product_id:u(this).data("product-id")},function(t){var e;t.success&&r?(o.html(t.data),n.addClass("merchant-show"),a.removeClass("merchant-loading"),e=o.find(".woocommerce-product-gallery"),wc_single_product_params.zoom_enabled=window.merchant.setting.quick_view_zoom,"function"==typeof u.fn.wc_product_gallery&&e.length&&(e.trigger("wc-product-gallery-before-init",[e.get(0),wc_single_product_params]),wc_single_product_params.flexslider_enabled="1",e.wc_product_gallery(wc_single_product_params),e.trigger("wc-product-gallery-after-init",[e.get(0),wc_single_product_params])),e=o.find(".variations_form"),"function"==typeof u.fn.wc_variation_form&&e.length&&e.each(function(){u(this).wc_variation_form()}),window.botiga&&window.botiga.productSwatch&&window.botiga.productSwatch.init(),window.botiga&&window.botiga.qtyButton&&window.botiga.qtyButton.init("quick-view"),window.merchant.setting.ajax_add_to_cart&&i.initAjaxAddToCart(o,a)):(o.html(t.data),n.addClass("merchant-show"),a.removeClass("merchant-loading")),window.dispatchEvent(new Event("merchant.quickview.ajax.loaded"))}).fail(function(t,e){o.html(e),n.addClass("merchant-show"),a.removeClass("merchant-loading")})}),t.on("click",function(t){t.preventDefault(),e.trigger("click")}),e.on("click",function(t){t.preventDefault(),r=!1,a.removeClass("merchant-show"),n.removeClass("merchant-show")})})},initAjaxAddToCart:function(s,l){var m=this;s.off("submit","form.cart"),s.on("submit","form.cart",function(t){var n,a,o,r,i,e=t.originalEvent?t.originalEvent.submitter:null,c=u(e),d=!1;if(d=e&&"add-to-cart"!==c.attr("name")&&!c.hasClass("single_add_to_cart_button")?d:!0)return t.preventDefault(),t.stopImmediatePropagation(),c=(e=u(this)).find('button[type="submit"], input[type="submit"]'),(n=(n=e.find(".single_add_to_cart_button")).length?n:c.first()).hasClass("loading")||n.prop("disabled")||(d=e.serializeArray(),a={action:"merchant_quick_view_add_to_cart",nonce:window.merchant.setting.nonce},o=!1,u.each(d,function(t,e){if(e.name&&0===e.name.indexOf("quantity["))return!(o=!0)}),u.each(d,function(t,e){"quantity"!==e.name&&"add-to-cart"!==e.name&&(a[e.name]=e.value)}),(t=e.closest('[id^="product-"]')).length&&(c=t.attr("id").match(/product-(\d+)/))&&c[1]&&(a.product_id=c[1]),a.product_id||(d=e.find('input[name="add-to-cart"]')).length&&d.val()&&(a.product_id=d.val()),a.product_id?(e.find(".variations_form").length&&(t=e.find('input[name="variation_id"]').val())&&(a.variation_id=parseInt(t,10)),o?delete a.quantity:(delete a.quantity,d=(c=e.find('input[name="quantity"]')).length?parseInt(c.val(),10):1,(isNaN(d)||d<1)&&(d=1),a.quantity=d),r=n.html(),i=n.prop("disabled"),n.addClass("loading").prop("disabled",!0),n.is("button")&&(n.data("original-text",r),n.html('<span class="spinner"></span>')),u.ajax({type:"POST",url:window.merchant.setting.ajax_url,data:a,success:function(t){m.handleAddToCartSuccess(t,n,r,i,s,l)},error:function(t,e,a){m.handleAddToCartError(t,e,a,n,r,i,s)}})):console.error("Quick View: Could not determine product ID")),!1})},handleAddToCartSuccess:function(t,e,a,n,o,r){e.removeClass("loading").prop("disabled",n),e.is("button")&&e.data("original-text")&&e.html(e.data("original-text")),t.success&&t.data?(t.data.fragments&&u.each(t.data.fragments,function(t,e){u(t).replaceWith(e)}),u(document.body).trigger("added_to_cart",[t.data.fragments,t.data.cart_hash,e,"quick-view"]),u(document.body).trigger("wc_fragment_refresh"),t.data.message&&(o.find(".merchant-quick-view-inner .woocommerce-error, .woocommerce-message, .woocommerce-info").remove(),u(document).trigger("merchant_quick_view_add_to_cart_success",[t.data.message,o]))):this.handleAddToCartError(null,"error","Unexpected response format",e,a,n,o)},handleAddToCartError:function(t,e,a,n,o,r,i){n.removeClass("loading").prop("disabled",r),n.is("button")&&n.data("original-text")&&n.html(n.data("original-text"));r="",t&&t.responseJSON&&t.responseJSON.data&&t.responseJSON.data.message?r=t.responseJSON.data.message:t&&t.responseJSON&&t.responseJSON.data&&t.responseJSON.data.notices?(n=t.responseJSON.data.notices).error&&0<n.error.length&&(r=n.error[0].notice):r=a||e||"An error occurred while adding the product to cart.",i.find(".woocommerce-error, .woocommerce-message, .woocommerce-info").remove(),t=u('<div class="woocommerce-error" role="alert"></div>').text(r);i.find("form.cart").before(t),t[0].scrollIntoView({behavior:"smooth",block:"nearest"})}},u(document).ready(function(){merchant.modules.quickView.init()})})(jQuery);
  • merchant/trunk/inc/classes/class-merchant-metabox.php

    r3338013 r3458319  
    6969            wp_enqueue_style( 'merchant-select2', MERCHANT_URI . 'assets/vendor/select2/select2.min.css', array(), '4.0.13', 'all' );
    7070
     71            // Enqueue Air Datepicker for date_time fields
     72            wp_enqueue_script( 'air-datepicker', MERCHANT_URI . 'assets/vendor/air-datepicker/air-datepicker.js', array( 'jquery' ), '3.4.0', true );
     73            wp_enqueue_style( 'air-datepicker', MERCHANT_URI . 'assets/vendor/air-datepicker/air-datepicker.css', array(), '3.4.0' );
     74
     75            // Enqueue Pickr for color fields (CSS is bundled in metabox.min.css)
     76            wp_enqueue_script( 'pickr', MERCHANT_URI . 'assets/vendor/pickr/pickr.min.js', array(), '1.8.2', true );
     77
    7178            wp_enqueue_style( 'merchant-metabox-styles', MERCHANT_URI . 'assets/css/admin/metabox.min.css', array(), MERCHANT_VERSION );
    72             wp_enqueue_script( 'merchant-metabox-scripts', MERCHANT_URI . 'assets/js/admin/merchant-metabox.min.js', array( 'jquery', 'jquery-ui-sortable' ), MERCHANT_VERSION, true );
     79            wp_enqueue_script( 'merchant-metabox-scripts', MERCHANT_URI . 'assets/js/admin/merchant-metabox.min.js', array( 'jquery', 'jquery-ui-sortable', 'air-datepicker', 'pickr' ), MERCHANT_VERSION, true );
     80
     81            // Localize datepicker
     82            $datepicker_locale = array(
     83                'days'        => array(
     84                    __( 'Sunday', 'merchant' ),
     85                    __( 'Monday', 'merchant' ),
     86                    __( 'Tuesday', 'merchant' ),
     87                    __( 'Wednesday', 'merchant' ),
     88                    __( 'Thursday', 'merchant' ),
     89                    __( 'Friday', 'merchant' ),
     90                    __( 'Saturday', 'merchant' ),
     91                ),
     92                'daysShort'   => array(
     93                    __( 'Sun', 'merchant' ),
     94                    __( 'Mon', 'merchant' ),
     95                    __( 'Tue', 'merchant' ),
     96                    __( 'Wed', 'merchant' ),
     97                    __( 'Thu', 'merchant' ),
     98                    __( 'Fri', 'merchant' ),
     99                    __( 'Sat', 'merchant' ),
     100                ),
     101                'daysMin'     => array(
     102                    __( 'Su', 'merchant' ),
     103                    __( 'Mo', 'merchant' ),
     104                    __( 'Tu', 'merchant' ),
     105                    __( 'We', 'merchant' ),
     106                    __( 'Th', 'merchant' ),
     107                    __( 'Fr', 'merchant' ),
     108                    __( 'Sa', 'merchant' ),
     109                ),
     110                'months'      => array(
     111                    __( 'January', 'merchant' ),
     112                    __( 'February', 'merchant' ),
     113                    __( 'March', 'merchant' ),
     114                    __( 'April', 'merchant' ),
     115                    __( 'May', 'merchant' ),
     116                    __( 'June', 'merchant' ),
     117                    __( 'July', 'merchant' ),
     118                    __( 'August', 'merchant' ),
     119                    __( 'September', 'merchant' ),
     120                    __( 'October', 'merchant' ),
     121                    __( 'November', 'merchant' ),
     122                    __( 'December', 'merchant' ),
     123                ),
     124                'monthsShort' => array(
     125                    __( 'Jan', 'merchant' ),
     126                    __( 'Feb', 'merchant' ),
     127                    __( 'Mar', 'merchant' ),
     128                    __( 'Apr', 'merchant' ),
     129                    __( 'May', 'merchant' ),
     130                    __( 'Jun', 'merchant' ),
     131                    __( 'Jul', 'merchant' ),
     132                    __( 'Aug', 'merchant' ),
     133                    __( 'Sep', 'merchant' ),
     134                    __( 'Oct', 'merchant' ),
     135                    __( 'Nov', 'merchant' ),
     136                    __( 'Dec', 'merchant' ),
     137                ),
     138                'today'       => __( 'Today', 'merchant' ),
     139                'clear'       => __( 'Clear', 'merchant' ),
     140            );
    73141
    74142            wp_localize_script( 'merchant-metabox-scripts', 'merchant_metabox', array(
     
    76144                'ajaxnonce' => wp_create_nonce( 'merchant_metabox' ),
    77145            ) );
     146
     147            wp_localize_script( 'merchant-metabox-scripts', 'merchant_datepicker_locale', $datepicker_locale );
    78148        }
    79149
     
    115185                        }
    116186
     187                        break;
     188
     189                    case 'user':
     190                        $query = new WP_User_Query( array(
     191                            'search'         => '*' . $term . '*',
     192                            'search_columns' => array( 'user_login', 'user_email', 'display_name' ),
     193                            'number'         => 25,
     194                            'orderby'        => 'display_name',
     195                            'order'          => 'ASC',
     196                            'fields'         => array( 'ID', 'display_name', 'user_email' ),
     197                        ) );
     198                        $users = $query->get_results();
     199                        if ( ! empty( $users ) ) {
     200                            foreach ( $users as $user ) {
     201                                $options[] = array(
     202                                    'id'   => $user->ID,
     203                                    'text' => $user->display_name . ' (' . $user->user_email . ')',
     204                                );
     205                            }
     206                        }
    117207                        break;
    118208                }
     
    305395                        }
    306396
     397                        // Build data attributes array
     398                        $data_attrs = array();
     399                       
     400                        // Handle old simple dependency (data-depend-on)
    307401                        if ( ! empty( $field['depend'] ) ) {
    308402                            $depend_meta = get_post_meta( $post->ID, $field['depend'], true );
     
    312406                            }
    313407
    314                             echo '<div class="' . esc_attr( join( ' ', $classes ) ) . '" data-depend-on="' . esc_attr( $field['depend'] ) . '">';
    315                         } else {
    316                             echo '<div class="' . esc_attr( join( ' ', $classes ) ) . '">';
    317                         }
     408                            $data_attrs[] = 'data-depend-on="' . esc_attr( $field['depend'] ) . '"';
     409                        }
     410                       
     411                        // Handle new enhanced conditions (data-conditions)
     412                        if ( ! empty( $field['conditions'] ) ) {
     413                            $data_attrs[] = "data-conditions='" . esc_attr( wp_json_encode( $field['conditions'] ) ) . "'";
     414                           
     415                            // Check if field should be initially hidden based on conditions
     416                            if ( $this->should_hide_field( $field['conditions'], $post->ID ) ) {
     417                                $classes[] = 'merchant-metabox-field-hidden';
     418                            }
     419                        }
     420                       
     421                        // Output the field wrapper with all data attributes
     422                        echo '<div class="' . esc_attr( join( ' ', $classes ) ) . '"';
     423                        if ( ! empty( $data_attrs ) ) {
     424                            echo ' ' . wp_kses_post( implode( ' ', $data_attrs ) );
     425                        }
     426                        echo '>';
    318427
    319428                        if ( isset( $field['title'] ) || isset( $field['subtitle'] ) ) {
     
    424533                    break;
    425534
     535                case 'range':
    426536                case 'number':
    427537                    return absint( $value );
     
    429539
    430540                case 'select':
     541                    if ( isset( $field['multiple'] ) && $field['multiple'] && is_array( $value ) ) {
     542                        return array_filter( array_map( 'sanitize_key', $value ) );
     543                    }
     544                    return ( in_array( $value, array_keys( $field['options'] ), true ) ) ? sanitize_key( $value ) : '';
     545                    break;
     546
    431547                case 'choices':
    432548                    return ( in_array( $value, array_keys( $field['options'] ), true ) ) ? sanitize_key( $value ) : '';
     
    438554                    break;
    439555
    440                 case 'wc-attributes':
    441                     return ( is_array( $value ) && ! empty( $value ) ) ? array_filter( array_map( 'sanitize_text_field', $value ) ) : array();
    442                     break;
    443 
    444556                case 'repeater':
    445557                case 'uploads':
    446                     return ( is_array( $value ) && ! empty( $value ) ) ? array_filter( map_deep( $value, 'sanitize_text_field' ) ) : array();
    447                     break;
    448 
    449558                case 'size-chart':
    450                 case 'uploads':
    451559                    return ( is_array( $value ) && ! empty( $value ) ) ? array_filter( map_deep( $value, 'sanitize_text_field' ) ) : array();
    452560                    break;
     
    454562                case 'wp-editor':
    455563                    return wp_kses_post( $value );
     564                    break;
     565
     566                case 'date_time':
     567                case 'color':
     568                case 'radio':
     569                    return sanitize_text_field( $value );
    456570                    break;
    457571
     
    482596                            echo '<div class="merchant-metabox-field-prepend">' . esc_attr( $field['prepend'] ) . '</div>';
    483597                        }
    484                         echo '<input type="text" name="' . esc_attr( $field_id ) . '" value="' . esc_attr( $value ) . '" />';
     598                        echo '<input type="text" name="' . esc_attr( $field_id ) . '" value="' . esc_attr( $value ) . '"';
     599                        if ( isset( $field['placeholder'] ) ) {
     600                            echo ' placeholder="' . esc_attr( $field['placeholder'] ) . '"';
     601                        }
     602                        echo ' />';
     603
    485604                        if ( isset( $field['append'] ) ) {
    486605                            echo '<div class="merchant-metabox-field-append">' . esc_attr( $field['append'] ) . '</div>';
     
    488607                        echo '</div>';
    489608                    } else {
    490                         echo '<input type="text" name="' . esc_attr( $field_id ) . '" value="' . esc_attr( $value ) . '" />';
     609                        echo '<input type="text" name="' . esc_attr( $field_id ) . '" value="' . esc_attr( $value ) . '"';
     610                        if ( isset( $field['placeholder'] ) ) {
     611                            echo ' placeholder="' . esc_attr( $field['placeholder'] ) . '"';
     612                        }
     613                        echo ' />';
    491614                    }
    492615                    break;
     
    540663
    541664                case 'select':
    542                     echo '<select name="' . esc_attr( $field_id ) . '">';
     665                    $multiple = ( isset( $field['multiple'] ) && $field['multiple'] ) ? ' multiple' : '';
     666                    $name     = $field_id . ( $multiple ? '[]' : '' );
     667
     668                    echo '<select name="' . esc_attr( $name ) . '"' . esc_attr( $multiple ) . '>';
    543669
    544670                    foreach ( $field['options'] as $key => $option ) {
    545                         echo '<option value="' . esc_attr( $key ) . '"' . selected( $key, $value, false ) . '>' . esc_html( $option ) . '</option>';
     671                        $is_selected = is_array( $value ) ? in_array( $key, $value, true ) : ( (string) $key === (string) $value );
     672                        echo '<option value="' . esc_attr( $key ) . '"' . selected( $is_selected, true, false ) . '>' . esc_html( $option ) . '</option>';
    546673                    }
    547674
     
    573700                                    }
    574701                                    break;
     702
     703                                case 'user':
     704                                    $user = get_user_by( 'id', $id );
     705
     706                                    if ( ! empty( $user ) ) {
     707                                        echo '<option value="' . esc_attr( $user->ID ) . '" selected>' . esc_html( $user->display_name ) . ' (' . esc_html( $user->user_email ) . ')</option>';
     708                                    }
     709                                    break;
    575710                            }
    576711                        }
     
    626761                        echo '</label>';
    627762                    }
    628 
    629763                    echo '</div>';
    630764                    break;
    631765
    632                 case 'content':
    633                     echo wp_kses_post( $field['content'] );
     766                case 'date_time':
     767                $field = wp_parse_args( $field, array(
     768                    'options'     => array(),
     769                    'placeholder' => '',
     770                ) );
     771
     772                // Set default options to match admin settings framework
     773                $default_options = array(
     774                    'dateFormat'  => 'MM-dd-yyyy',
     775                    'timepicker'  => true,
     776                    'timeFormat'  => 'hh:mm AA',
     777                    'minDate'     => 'today',
     778                    'timeZone'    => wp_timezone_string(),
     779                );
     780
     781                $options = wp_parse_args( $field['options'], $default_options );
     782
     783                echo '<div class="merchant-metabox-datetime-field" data-options="' . esc_attr( wp_json_encode( $options ) ) . '">';
     784                echo '<input type="text" name="' . esc_attr( $field_id ) . '" value="' . esc_attr( $value ) . '" placeholder="' . esc_attr( $field['placeholder'] ) . '" />';
     785                echo '</div>';
     786                    break;
     787
     788                case 'color':
     789                    $field = wp_parse_args( $field, array(
     790                        'default' => '#212121',
     791                    ) );
     792
     793                    echo '<div class="merchant-metabox-color-field">';
     794                    echo '<div class="merchant-color-picker" data-default-color="' . esc_attr( $field['default'] ) . '" style="background-color: ' . esc_attr( $value ? $value : $field['default'] ) . ';"></div>';
     795                    echo '<input type="text" class="merchant-color-input" name="' . esc_attr( $field_id ) . '" value="' . esc_attr( $value ) . '" />';
     796                    echo '</div>';
     797                    break;
     798
     799                case 'radio':
     800                    $field = wp_parse_args( $field, array(
     801                        'options' => array(),
     802                    ) );
     803
     804                    echo '<div class="merchant-metabox-radio-field">';
     805                    foreach ( $field['options'] as $option_key => $option_label ) {
     806                        echo '<label>';
     807                        echo '<input type="radio" name="' . esc_attr( $field_id ) . '" value="' . esc_attr( $option_key ) . '"' . checked( $value, $option_key, false ) . ' /> ';
     808                        echo esc_html( $option_label );
     809                        echo '</label><br/>';
     810                    }
     811                    echo '</div>';
    634812                    break;
    635813
     
    9841162                    break;
    9851163
     1164                    case 'range':
     1165                        $min  = isset( $field['min'] ) ? $field['min'] : 0;
     1166                        $max  = isset( $field['max'] ) ? $field['max'] : 100;
     1167                        $step = isset( $field['step'] ) ? $field['step'] : 1;
     1168                        $unit = isset( $field['unit'] ) ? $field['unit'] : '';
     1169                        ?>
     1170                        <div class="merchant-range">
     1171                            <input type="range" class="merchant-range-input" min="<?php echo esc_attr( $min ); ?>" max="<?php echo esc_attr( $max ); ?>" step="<?php echo esc_attr( $step ); ?>" value="<?php echo esc_attr( $value ); ?>" />
     1172                            <input type="number" class="merchant-range-number-input" name="<?php echo esc_attr( $field_id ); ?>" min="<?php echo esc_attr( $min ); ?>" max="<?php echo esc_attr( $max ); ?>" step="<?php echo esc_attr( $step ); ?>" value="<?php echo esc_attr( $value ); ?>" />
     1173                            <?php if ( ! empty( $unit ) ) : ?>
     1174                                <span class="merchant-range-unit"><?php echo esc_html( $unit ); ?></span>
     1175                            <?php endif; ?>
     1176                        </div>
     1177                        <?php
     1178                        break;
    9861179                case 'flexible-content':
    9871180                    $field  = wp_parse_args( $field, array(
     
    10851278            }
    10861279        }
     1280
     1281        /**
     1282         * Evaluate if a field should be hidden based on conditions.
     1283         *
     1284         * @param array $conditions Conditions array with 'relation' and 'terms'.
     1285         * @param int   $post_id   Post ID.
     1286         * @return bool True if field should be hidden, false otherwise.
     1287         */
     1288        private function should_hide_field( $conditions, $post_id ) {
     1289            if ( empty( $conditions['terms'] ) || ! is_array( $conditions['terms'] ) ) {
     1290                return false;
     1291            }
     1292
     1293            $operator = isset( $conditions['relation'] ) ? $conditions['relation'] : 'AND';
     1294            $results  = array();
     1295
     1296            foreach ( $conditions['terms'] as $term ) {
     1297                if ( ! is_array( $term ) || count( $term ) < 3 ) {
     1298                    continue;
     1299                }
     1300
     1301                $field_name  = $term[0];
     1302                $comparison  = $term[1];
     1303                $target_value = $term[2];
     1304
     1305                // Get the actual field value from post meta
     1306                $meta_value = get_post_meta( $post_id, $field_name, true );
     1307
     1308                $passed = false;
     1309
     1310            // Cast to strings to ensure consistent comparison with JavaScript.
     1311            // Switcher values are saved as integers (1/0) but conditions check against strings ('1'/'0').
     1312            $meta_value_str   = is_array( $meta_value ) ? $meta_value : (string) $meta_value;
     1313            $target_value_str = (string) $target_value;
     1314
     1315            // Evaluate condition based on comparison operator
     1316            switch ( $comparison ) {
     1317                case '==':
     1318                    if ( is_array( $meta_value_str ) ) {
     1319                        $passed = in_array( $target_value_str, array_map( 'strval', $meta_value_str ), true );
     1320                    } else {
     1321                        $passed = $meta_value_str === $target_value_str;
     1322                    }
     1323                    break;
     1324                case '!=':
     1325                    if ( is_array( $meta_value_str ) ) {
     1326                        $passed = ! in_array( $target_value_str, array_map( 'strval', $meta_value_str ), true );
     1327                    } else {
     1328                        $passed = $meta_value_str !== $target_value_str;
     1329                    }
     1330                    break;
     1331                case 'any':
     1332                    $allowed_values = explode( '|', $target_value_str );
     1333                    if ( is_array( $meta_value_str ) ) {
     1334                        $passed = count( array_intersect( array_map( 'strval', $meta_value_str ), $allowed_values ) ) > 0;
     1335                    } else {
     1336                        $passed = in_array( $meta_value_str, $allowed_values, true );
     1337                    }
     1338                    break;
     1339                case 'not_any':
     1340                    $disallowed_values = explode( '|', $target_value_str );
     1341                    if ( is_array( $meta_value_str ) ) {
     1342                        $passed = count( array_intersect( array_map( 'strval', $meta_value_str ), $disallowed_values ) ) === 0;
     1343                    } else {
     1344                        $passed = ! in_array( $meta_value_str, $disallowed_values, true );
     1345                    }
     1346                    break;
     1347            }
     1348
     1349                $results[] = $passed;
     1350            }
     1351
     1352            // Combine results based on operator
     1353            if ( $operator === 'OR' ) {
     1354                // For OR, at least one must be true (if all false, hide)
     1355                return ! in_array( true, $results, true );
     1356            } else {
     1357                // For AND, all must be true (if any false, hide)
     1358                return in_array( false, $results, true );
     1359            }
     1360        }
    10871361    }
    10881362}
  • merchant/trunk/inc/compatibility/class-merchant-woo-multi-currency.php

    r3343740 r3458319  
    3030            add_filter( 'merchant_storewide_sale_cart_item_price', array( $this, 'multi_currency_pro_support' ) );
    3131
     32            // Add multi-currency support for Buy X Get Y widget variation price (product single page)
     33            add_filter( 'merchant_bogo_widget_variation_price', array( $this, 'multi_currency_free_support' ) );
     34            add_filter( 'merchant_bogo_widget_variation_price', array( $this, 'multi_currency_pro_support' ) );
     35
    3236            add_filter( 'merchant_free_gifts_min_amount', array( $this, 'multi_currency_support_free_gifts' )  );
    3337            add_filter( 'merchant_free_gifts_min_amount', array( $this, 'multi_currency_pro_support_free_gifts' )  );
     38
     39            // Add multi-currency support for Buy X Get Y (BOGO) cart item price
     40            add_filter( 'merchant_bogo_cart_item_price', array( $this, 'multi_currency_free_support' ) );
     41            add_filter( 'merchant_bogo_cart_item_price', array( $this, 'multi_currency_pro_support' ) );
    3442        }
    3543
  • merchant/trunk/inc/helpers.php

    r3379075 r3458319  
    676676}
    677677
     678if ( ! function_exists( 'merchant_date_string_to_timestamp' ) ) {
     679    /**
     680     * Convert a date string to a Unix timestamp based on the specified format and timezone.
     681     *
     682     * This function signature matches Merchant Pro for compatibility.
     683     *
     684     * @param string      $date            The date string to convert.
     685     * @param string|null $timezone_offset The timezone offset or timezone string. Defaults to WordPress timezone.
     686     * @param string      $format          The format of the date string. Defaults to 'm-d-Y h:i A'.
     687     *
     688     * @return int The timestamp, or 0 on failure.
     689     */
     690    function merchant_date_string_to_timestamp( $date, $timezone_offset = null, $format = 'm-d-Y h:i A' ) {
     691        try {
     692            // If it's already numeric, return it as-is
     693            if ( is_numeric( $date ) ) {
     694                return (int) $date;
     695            }
     696
     697            // Use WordPress timezone if not specified
     698            $timezone_offset = $timezone_offset ?? wp_timezone_string();
     699
     700            // Create DateTime object from the specified format and timezone
     701            $date_object = DateTime::createFromFormat( $format, $date, new DateTimeZone( $timezone_offset ) );
     702
     703            return $date_object ? $date_object->getTimestamp() : 0;
     704        } catch ( Exception $e ) {
     705            return 0;
     706        }
     707    }
     708}
     709
    678710/**
    679711 * Parses a list of product IDs
     
    743775
    744776            case 'customers':
     777            case 'users':
    745778                $allowed_customers = array_map( 'intval', $args['user_condition_users'] ?? array() );
    746779                return $is_logged_in && in_array( $customer_id, $allowed_customers, true );
  • merchant/trunk/inc/modules/buy-now/admin/options.php

    r3403526 r3458319  
    281281    ),
    282282) );
     283
     284// Exclusion Settings
     285Merchant_Admin_Options::create( array(
     286    'module' => 'buy-now',
     287    'title'  => esc_html__( 'Conditional Display', 'merchant' ),
     288    'fields' => array(
     289        array(
     290            'id'      => 'exclusion',
     291            'type'    => 'switcher',
     292            'title'   => __( 'Enable conditional display', 'merchant' ),
     293            'desc'    => __( 'Enable product exclusion rules', 'merchant' ),
     294            'default' => 0,
     295        ),
     296        array(
     297            'id'      => 'excluded_products',
     298            'type'    => 'products_selector',
     299            'title'   => __( 'Exclude Products', 'merchant' ),
     300            'desc'    => __( 'Select products to exclude from buy now button', 'merchant' ),
     301            'condition' => array( 'exclusion', '==', '1' ),
     302        ),
     303        array(
     304            'id'      => 'excluded_categories',
     305            'type'    => 'select_ajax',
     306            'title'   => __( 'Exclude Categories', 'merchant' ),
     307            'source'  => 'options',
     308            'multiple' => true,
     309            'options' => Merchant_Admin_Options::get_category_select2_choices(),
     310            'placeholder' => __( 'Select categories', 'merchant' ),
     311            'desc'    => __( 'Select categories to exclude from buy now button', 'merchant' ),
     312            'condition' => array( 'exclusion', '==', '1' ),
     313        ),
     314        array(
     315            'id'      => 'excluded_tags',
     316            'type'    => 'select_ajax',
     317            'source'  => 'options',
     318            'multiple' => true,
     319            'options' => Merchant_Admin_Options::get_tag_select2_choices(),
     320            'placeholder' => __( 'Select tags', 'merchant' ),
     321            'title'   => __( 'Exclude Tags', 'merchant' ),
     322            'desc'    => __( 'Select tags to exclude from buy now button', 'merchant' ),
     323            'condition' => array( 'exclusion', '==', '1' ),
     324        ),
     325        array(
     326            'id'      => 'excluded_brands',
     327            'type'    => 'select_ajax',
     328            'source'  => 'options',
     329            'multiple' => true,
     330            'options' => Merchant_Admin_Options::get_brand_select2_choices(),
     331            'placeholder' => __( 'Select brands', 'merchant' ),
     332            'title'   => __( 'Exclude Brands', 'merchant' ),
     333            'desc'    => __( 'Select brands to exclude from buy now button', 'merchant' ),
     334            'condition' => array( 'exclusion', '==', '1' ),
     335        ),
     336    ),
     337) );
  • merchant/trunk/inc/modules/buy-now/class-buy-now.php

    r3403526 r3458319  
    3030
    3131    /**
     32     * Exclusion manager instance.
     33     *
     34     * @var Merchant_Buy_Now_Exclusion
     35     */
     36    public $exclusion;
     37
     38    /**
    3239     * Constructor.
    3340     *
     
    4754
    4855        // Module default settings.
    49         $this->module_default_settings = array(
    50             'button-text' => __( 'Buy Now', 'merchant' ),
    51             'customize-button' => 1,
    52         );
     56        $this->module_default_settings = array(
     57                'button-text'         => __( 'Buy Now', 'merchant' ),
     58                'customize-button'    => 1,
     59                'exclusion'           => 0,
     60                'excluded_products'   => array(),
     61                'excluded_categories' => array(),
     62                'excluded_tags'       => array(),
     63                'excluded_brands'     => array(),
     64        );
    5365
    5466        // Module data.
     
    8294            return;
    8395        }
     96
     97        // Initialize exclusion manager.
     98        $this->exclusion = new Merchant_Buy_Now_Exclusion( $this );
     99
     100        // Allow other modules (like Quick View) to check if a product is excluded.
     101        add_filter( 'merchant_buy_now_is_excluded', array( $this, 'check_product_exclusion' ), 10, 2 );
    84102
    85103        // Return early if it's on admin but not in the respective module settings page.
     
    363381        }
    364382
     383        // Check if product should be excluded.
     384        if ( $this->exclusion && $this->exclusion->should_exclude( $product ) ) {
     385            return;
     386        }
     387
    365388        if ( ! empty( $product ) ) {
    366389            if ( 'yes' === get_post_meta( $post->ID, '_is_pre_order', true ) && strtotime( get_post_meta( $post->ID, '_pre_order_date', true ) ) > time() ) {
     
    438461        $settings = $this->get_module_settings();
    439462
     463        // Check if product should be excluded.
     464        if ( $this->exclusion && $this->exclusion->should_exclude( $product ) ) {
     465            return;
     466        }
     467
    440468        if ( ! is_product() && isset( $settings['display-archive'] ) && ! $settings['display-archive'] ) {
    441469            return;
     
    560588        return $classes;
    561589    }
     590
     591    /**
     592     * Check if a product should be excluded from the Buy Now button.
     593     *
     594     * This method is called by the 'merchant_buy_now_is_excluded' filter,
     595     * allowing other modules (like Quick View) to check exclusion status
     596     * without directly accessing the exclusion manager.
     597     *
     598     * @param bool       $is_excluded Current exclusion status.
     599     * @param WC_Product $product     The product to check.
     600     *
     601     * @return bool True if the product should be excluded, false otherwise.
     602     * @since 2.2.4
     603     */
     604    public function check_product_exclusion( $is_excluded, $product ) {
     605        // If already excluded by another filter, respect that decision.
     606        if ( $is_excluded ) {
     607            return $is_excluded;
     608        }
     609
     610        // Delegate to the exclusion manager if it exists.
     611        if ( $this->exclusion && method_exists( $this->exclusion, 'should_exclude' ) ) {
     612            return $this->exclusion->should_exclude( $product );
     613        }
     614
     615        return false;
     616    }
    562617}
     618
     619require_once MERCHANT_DIR.'inc/modules/buy-now/class-buy-now-exclusion.php';
    563620
    564621// Initialize the module.
  • merchant/trunk/inc/modules/pre-orders/admin/options.php

    r3379075 r3458319  
    517517                                'title'   => esc_html__( 'Button border color hover', 'merchant' ),
    518518                                'default' => '#414141',
     519                            ),
     520
     521                            array(
     522                                'id'      => 'border-width',
     523                                'type'    => 'range',
     524                                'title'   => esc_html__( 'Button Border Width (px)', 'merchant' ),
     525                                'min'     => 0,
     526                                'max'     => 10,
     527                                'step'    => 1,
     528                                'default' => 0,
     529                            ),
     530
     531                            array(
     532                                'id'      => 'border-radius',
     533                                'type'    => 'range',
     534                                'title'   => esc_html__( 'Button Border Radius (px)', 'merchant' ),
     535                                'min'     => 0,
     536                                'max'     => 50,
     537                                'step'    => 1,
     538                                'default' => 0,
    519539                            ),
    520540
  • merchant/trunk/inc/modules/pre-orders/class-pre-orders-main-functionality.php

    r3389952 r3458319  
    156156    private function convert_timestamp_to_human_readable( $timestamp ) {
    157157        $timezone = new DateTimeZone( merchant_timezone() );
    158         $date     = new \DateTime( 'now', $timezone );
    159         $date->setTimestamp( $timestamp );
     158        $date     = new \DateTime( '@' . $timestamp ); // Create from UTC timestamp
     159        $date->setTimezone( $timezone );                // Convert to site timezone
    160160
    161161        return $date->format( self::DATE_TIME_FORMAT );
     
    600600            if ( empty( $offer ) && $product->is_type( 'variation' ) ) {
    601601                $offer = self::available_product_rule( $product->get_parent_id() );
    602                 $is_excluded = self::is_product_excluded( $product->get_id(), $offer );
     602                $is_excluded = Merchant_Pre_Orders_Rules_Repository::is_product_excluded( $product->get_id(), $offer );
    603603                if ( $is_excluded ) {
    604604                    $offer = array();
     
    624624     */
    625625    private function variable_product_price_html( $product, $offer, $html_price ) {
    626         $sale = self::get_rule_sale( $offer );
     626        $sale = Merchant_Pre_Orders_Rules_Repository::get_rule_sale( $offer );
    627627        if ( ! $sale ) {
    628628            return $html_price;
     
    645645                $variation_offer = self::available_product_rule( $product->get_id() );
    646646
    647                 $is_excluded = self::is_product_excluded( $variation_id, $variation_offer );
     647                $is_excluded = Merchant_Pre_Orders_Rules_Repository::is_product_excluded( $variation_id, $variation_offer );
    648648                if ( $is_excluded ) {
    649649                    $prices[]      = $regular_price;
     
    711711     */
    712712    private function simple_product_price_html( $product, $offer, $html_price ) {
    713         $sale = self::get_rule_sale( $offer );
     713        $sale = Merchant_Pre_Orders_Rules_Repository::get_rule_sale( $offer );
    714714        if ( ! $sale ) {
    715715            return $html_price;
     
    731731     */
    732732    public function calculate_discounted_price( $price, $offer, $product = null ) {
    733         $sale          = self::get_rule_sale( $offer );
     733        $sale          = Merchant_Pre_Orders_Rules_Repository::get_rule_sale( $offer );
    734734        $discount_type = $discount_value = '';
    735735        if ( $sale ) {
     
    801801                    $offer = self::available_product_rule( $product->get_parent_id() );
    802802
    803                     $is_excluded = self::is_product_excluded( $product_id, $offer );
     803                    $is_excluded = Merchant_Pre_Orders_Rules_Repository::is_product_excluded( $product_id, $offer );
    804804                    if ( $is_excluded ) {
    805805                        continue;
     
    13981398     * @return array|false The pre-order rules or false if there are no rule sale.
    13991399     */
    1400     private static function get_rule_sale( $rule ) {
    1401         $sale = false;
    1402         if ( isset( $rule['discount_toggle'] ) && $rule['discount_toggle'] ) {
    1403             $discount_type   = $rule['discount_type'];
    1404             $discount_amount = $rule['discount_amount'];
    1405 
    1406             $sale = array(
    1407                 'discount_type'   => $discount_type,
    1408                 'discount_amount' => $discount_amount,
    1409             );
    1410         }
    1411 
    1412         /**
    1413          * Filter the pre order sale.
    1414          *
    1415          * @param array $sale The pre order sale.
    1416          * @param array $rule The pre order rule.
    1417          *
    1418          * @since 1.9.9
    1419          */
    1420         return apply_filters( 'merchant_pre_order_rule_sale', $sale, $rule );
    1421     }
    1422 
    1423     /**
    1424      * Get the pre order rules.
    1425      *
    1426      * @return array The pre order rules.
    1427      */
    1428     private static function pre_order_rules() {
    1429         return Merchant_Admin_Options::get( self::MODULE_ID, 'rules', array() );
    1430     }
    1431 
    1432     /**
    1433      * Check if the rule is valid.
    1434      *
    1435      * @param array $rule The rule to check.
    1436      *
    1437      * @return boolean True if the rule is valid, false otherwise.
    1438      */
    1439     private static function is_valid_rule( $rule ) {
    1440         if ( ! isset( $rule['trigger_on'] ) ) {
    1441             return false;
    1442         }
    1443 
    1444         if ( 'product' === $rule['trigger_on'] && empty( $rule['product_ids'] ) ) {
    1445             return false;
    1446         }
    1447 
    1448         if ( 'category' === $rule['trigger_on'] && empty( $rule['category_slugs'] ) ) {
    1449             return false;
    1450         }
    1451 
    1452         if ( 'tags' === $rule['trigger_on'] && empty( $rule['tag_slugs'] ) ) {
    1453             return false;
    1454         }
    1455 
    1456         if ( 'brands' === $rule['trigger_on'] && empty( $rule['brand_slugs'] ) ) {
    1457             return false;
    1458         }
    1459 
    1460         if ( isset( $rule['discount_toggle'] ) && $rule['discount_toggle'] === true ) {
    1461             if ( ! isset( $rule['discount_type'] ) ) {
    1462                 return false;
    1463             }
    1464             if ( ! isset( $rule['discount_amount'] ) ) {
    1465                 return false;
    1466             }
    1467         }
    1468 
    1469         if ( isset( $rule['partial_payment_toggle'] ) && $rule['partial_payment_toggle'] === true ) {
    1470             if ( ! isset( $rule['partial_payment_type'] ) ) {
    1471                 return false;
    1472             }
    1473             if ( ! isset( $rule['partial_payment_amount'] ) ) {
    1474                 return false;
    1475             }
    1476         }
    1477 
    1478         $user_condition_passed = merchant_is_user_condition_passed( $rule );
    1479         if ( ! $user_condition_passed ) {
    1480             return false;
    1481         }
    1482 
    1483         if ( empty( $rule['shipping_date'] ) ) {
    1484             return false;
    1485         }
    1486 
    1487         if ( empty( $rule['button_text'] ) ) {
    1488             return false;
    1489         }
    1490 
    1491         if ( empty( $rule['placement'] ) ) {
    1492             return false;
    1493         }
    1494 
    1495         return true;
    1496     }
    1497 
    1498     /**
    1499      * Prepare the rule fields.
    1500      *
    1501      * @param array $rule The rule to prepare.
    1502      *
    1503      * @return array The prepared rule.
    1504      */
    1505     private static function prepare_rule( $rule ) {
    1506         if ( 'product' === $rule['trigger_on'] ) {
    1507             $rule['product_ids'] = array_map( 'intval', explode( ',', $rule['product_ids'] ) );
    1508         }
    1509 
    1510         if ( ! empty( $rule['pre_order_start'] ) ) {
    1511             $rule['pre_order_start'] = merchant_convert_date_to_timestamp( $rule['pre_order_start'], self::DATE_TIME_FORMAT );
    1512         }
    1513 
    1514         if ( ! empty( $rule['pre_order_end'] ) ) {
    1515             $rule['pre_order_end'] = merchant_convert_date_to_timestamp( $rule['pre_order_end'], self::DATE_TIME_FORMAT );
    1516         }
    1517 
    1518         $rule['shipping_timestamp'] = merchant_convert_date_to_timestamp( $rule['shipping_date'], self::DATE_TIME_FORMAT );
    1519 
    1520         return $rule;
    1521     }
    1522 
    1523     /**
    1524      * Check if a product is excluded from a pre-order rule.
    1525      *
    1526      * @param int   $product_id The product ID.
    1527      * @param array $rule       The pre-order rule.
    1528      *
    1529      * @return bool True if the product is excluded, false otherwise.
    1530      */
    1531     private static function is_product_excluded( $product_id, $rule ) {
    1532         $trigger_on = $rule['trigger_on'] ?? 'product';
    1533         $product = wc_get_product( $product_id );
    1534         $_product_id = $product && $product->is_type( 'variation' ) ? $product->get_parent_id() : $product_id;
    1535 
    1536         // Exclude products
    1537         if ( ! empty( $rule['exclude_products_toggle'] ) ) {
    1538             $excluded_product_ids = $rule['excluded_products'] ?? array();
    1539             $excluded_product_ids = merchant_parse_product_ids( $excluded_product_ids );
    1540 
    1541             if ( in_array( (int) $product_id, $excluded_product_ids, true ) || in_array( (int) $_product_id, $excluded_product_ids, true ) ) {
    1542                 return true;
    1543             }
    1544         }
    1545 
    1546         // Exclude categories (only when not targeting specific categories)
    1547         if ( ! empty( $rule['exclude_categories_toggle'] ) && $trigger_on !== 'category' ) {
    1548             $excluded_categories_slugs = $rule['excluded_categories'] ?? array();
    1549 
    1550             if ( ! empty( $excluded_categories_slugs ) && has_term( $excluded_categories_slugs, 'product_cat', $_product_id ) ) {
    1551                 return true;
    1552             }
    1553         }
    1554 
    1555         // Exclude tags (only when not targeting specific tags)
    1556         if ( ! empty( $rule['exclude_tags_toggle'] ) && $trigger_on !== 'tags' ) {
    1557             $excluded_tags_slugs = $rule['excluded_tags'] ?? array();
    1558 
    1559             if ( ! empty( $excluded_tags_slugs ) && has_term( $excluded_tags_slugs, 'product_tag', $_product_id ) ) {
    1560                 return true;
    1561             }
    1562         }
    1563 
    1564         // Exclude brands (only when not targeting specific brands)
    1565         if ( ! empty( $rule['exclude_brands_toggle'] ) && $trigger_on !== 'brands' ) {
    1566             $excluded_brands_slugs = $rule['excluded_brands'] ?? array();
    1567 
    1568             if ( ! empty( $excluded_brands_slugs ) && has_term( $excluded_brands_slugs, 'product_brand', $_product_id ) ) {
    1569                 return true;
    1570             }
    1571         }
    1572 
    1573         return false;
    1574     }
    1575 
    15761400    /**
    15771401     * Get the available product rule.
    15781402     *
    1579      * @param string $product_id The product ID.
     1403     * @param int $product_id The product ID.
    15801404     *
    15811405     * @return array The available product rule.
    15821406     */
    15831407    public static function available_product_rule( $product_id ) {
    1584         $available_rule = array();
    1585         $rules          = self::pre_order_rules();
    1586         $current_time   = merchant_get_current_timestamp();
    1587 
    1588         foreach ( $rules as $rule ) {
    1589             if ( isset( $rule['campaign_status'] ) && $rule['campaign_status'] === 'inactive' ) {
    1590                 continue;
    1591             }
    1592 
    1593             if ( self::is_valid_rule( $rule ) ) {
    1594                 $rule = self::prepare_rule( $rule );
    1595 
    1596                 // check if pre-order start date is set and if it is not in the future
    1597                 if ( ! empty( $rule['pre_order_start'] ) && $rule['pre_order_start'] > $current_time ) {
    1598                     continue;
    1599                 }
    1600 
    1601                 // check if pre-order end date is set and if it is in the past
    1602                 if ( ! empty( $rule['pre_order_end'] ) && $rule['pre_order_end'] < $current_time ) {
    1603                     continue;
    1604                 }
    1605 
    1606                 $user_condition_passed = merchant_is_user_condition_passed( $rule );
    1607                 if ( ! $user_condition_passed ) {
    1608                     continue;
    1609                 }
    1610 
    1611                 $trigger = $rule['trigger_on'] ?? 'product';
    1612 
    1613                 $is_excluded = self::is_product_excluded( $product_id, $rule );
    1614                 if ( $is_excluded ) {
    1615                     continue;
    1616                 }
    1617 
    1618                 if ( 'product' === $trigger && in_array( $product_id, $rule['product_ids'], true ) ) {
    1619                     $available_rule = $rule;
    1620                     break;
    1621                 } elseif ( 'category' === $trigger || 'tags' === $trigger || 'brands' === $trigger ) {
    1622                     $taxonomy = $trigger === 'category' ? 'product_cat' : ( $trigger === 'tags' ? 'product_tag' : 'product_brand' );
    1623                     $slugs    = $trigger === 'category' ? ( $rule['category_slugs'] ?? array() ) : ( $trigger === 'tags' ? ( $rule['tag_slugs'] ?? array() ) : ( $rule['brand_slugs'] ?? array() ) );
    1624 
    1625                     $terms = get_the_terms( $product_id, $taxonomy );
    1626                     if ( ! empty( $terms ) ) {
    1627                         foreach ( $terms as $term ) {
    1628                             if ( in_array( $term->slug, $slugs, true ) ) {
    1629                                 $available_rule = $rule;
    1630                                 break;
    1631                             }
    1632                         }
    1633                     }
    1634                 } elseif ( 'all' === $trigger ) {
    1635                     $available_rule = $rule;
    1636                 }
    1637             }
    1638         }
    1639 
    1640         /**
    1641          * Filter the available product rule.
    1642          *
    1643          * @param array $available_rule The available product rule.
    1644          * @param int   $product_id     The product ID.
    1645          *
    1646          * @return array The available product rule.
    1647          *
    1648          * @since 1.9.9
    1649          */
    1650         return apply_filters( 'merchant_pre_order_available_rule', $available_rule, $product_id );
     1408        return Merchant_Pre_Orders_Rules_Repository::get_rule_for_product( $product_id );
    16511409    }
    16521410
     
    16641422        }
    16651423
    1666         $rules = self::pre_order_rules();
     1424        $rules = Merchant_Pre_Orders_Rules_Repository::get_global_rules();
    16671425        if ( empty( $rules ) ) {
    16681426            update_option( $option_name, true );
     
    17461504            $products = new WP_Query( $args );
    17471505            if ( $products->have_posts() ) {
    1748                 $rules = self::pre_order_rules();
     1506                $rules = Merchant_Pre_Orders_Rules_Repository::get_global_rules();
    17491507                while ( $products->have_posts() ) {
    17501508                    $products->the_post();
  • merchant/trunk/inc/modules/pre-orders/class-pre-orders.php

    r3232601 r3458319  
    11<?php
    2 
    32/**
    4  * Pre Orders.
     3 * Merchant - Pre Orders
    54 *
    65 * @package Merchant
     
    1413 * Pre Orders Class.
    1514 *
     15 * This class handles the initialization and setup of the Pre Orders module, including
     16 * admin settings, asset enqueueing, and frontend styling.
     17 *
     18 * @property string $module_id The module ID.
     19 * @property bool $wc_only The WooCommerce only flag.
     20 * @property string $module_section The module section.
     21 * @property array $module_default_settings The module default settings.
     22 * @property array $module_data The module data.
     23 * @property string $module_options_path The module options path.
    1624 */
    1725class Merchant_Pre_Orders extends Merchant_Add_Module {
     
    2028     * Module ID.
    2129     *
     30     * @var string The module ID.
    2231     */
    2332    const MODULE_ID = 'pre-orders';
     
    2635     * Is module preview.
    2736     *
     37     * @var bool The is module preview flag.
    2838     */
    2939    public static $is_module_preview = false;
     
    3242     * Main functionality dependency.
    3343     *
     44     * @var Merchant_Pre_Orders_Main_Functionality The main functionality instance.
    3445     */
    3546    public $main_func;
     
    4556     * Constructor.
    4657     *
     58     * @param Merchant_Pre_Orders_Main_Functionality $main_func The main functionality instance.
    4759     */
    4860    public function __construct( Merchant_Pre_Orders_Main_Functionality $main_func ) {
     
    97109            // Init translations.
    98110            $this->init_translations();
    99         }
     111
     112            // Include product metabox for per-product settings.
     113            require_once MERCHANT_DIR . 'inc/modules/' . self::MODULE_ID . '/admin/class-pre-orders-metabox.php';
     114        }
     115
    100116
    101117        if ( ! Merchant_Modules::is_module_active( self::MODULE_ID ) ) {
     
    127143
    128144    /**
    129      * Init translations.
     145     * Init translations for module settings.
     146     *
     147     * Registers strings for the Merchant translator tool.
    130148     *
    131149     * @return void
     
    149167
    150168    /**
    151      * Admin enqueue CSS.
     169     * Enqueue admin-specific CSS.
    152170     *
    153171     * @return void
    154172     */
    155173    public function admin_enqueue_css() {
    156         $page   = ( ! empty( $_GET['page'] ) ) ? sanitize_text_field( wp_unslash( $_GET['page'] ) ) : ''; // phpcs:ignore WordPress.Security.NonceVerification.Recommended
    157         $module = ( ! empty( $_GET['module'] ) ) ? sanitize_text_field( wp_unslash( $_GET['module'] ) ) : ''; // phpcs:ignore WordPress.Security.NonceVerification.Recommended
    158 
    159         if ( 'merchant' === $page && self::MODULE_ID === $module ) {
     174        if ( parent::is_module_settings_page() ) {
    160175            wp_enqueue_style( 'merchant-' . self::MODULE_ID, MERCHANT_URI . 'assets/css/modules/' . self::MODULE_ID . '/pre-orders.min.css', array(), MERCHANT_VERSION );
    161176            wp_enqueue_style( 'merchant-admin-' . self::MODULE_ID, MERCHANT_URI . 'assets/css/modules/' . self::MODULE_ID . '/admin/preview.min.css', array(), MERCHANT_VERSION );
     
    164179
    165180    /**
    166      * Admin JS
    167     *
     181     * Enqueue admin-specific JavaScript.
     182    *
    168183     * @return void
    169184     */
     
    181196
    182197    /**
    183      * Enqueue CSS.
     198     * Enqueue frontend-specific CSS.
    184199     *
    185200     * @return void
     
    195210    }
    196211
     212    /**
     213     * Add inline CSS styles based on the active rule.
     214     *
     215     * @return string The generated inline CSS.
     216     */
    197217    public function add_inline_style() {
    198         ob_start();
     218        ob_start();
    199219        $rule = $this->current_rule();
    200220        if ( ! empty( $rule ) ) {
    201221            ?>
    202222            .woocommerce .merchant-pre-ordered-product{
    203             --mrc-po-text-color: <?php
    204             echo esc_attr( $rule['text-color'] ); ?>;
    205             --mrc-po-text-hover-color: <?php
    206             echo esc_attr( $rule['text-hover-color'] ); ?>;
    207             --mrc-po-border-color: <?php
    208             echo esc_attr( $rule['border-color'] ); ?>;
    209             --mrc-po-border-hover-color: <?php
    210             echo esc_attr( $rule['border-hover-color'] ); ?>;
    211             --mrc-po-background-color: <?php
    212             echo esc_attr( $rule['background-color'] ); ?>;
    213             --mrc-po-background-hover-color: <?php
    214             echo esc_attr( $rule['background-hover-color'] ); ?>;
     223            --mrc-po-text-color: <?php echo esc_attr( $rule['text-color'] ?? '#FFF' ); ?>;
     224            --mrc-po-text-hover-color: <?php echo esc_attr( $rule['text-hover-color'] ?? '#FFF' ); ?>;
     225            --mrc-po-border-color: <?php echo esc_attr( $rule['border-color'] ?? '#212121' ); ?>;
     226            --mrc-po-border-hover-color: <?php echo esc_attr( $rule['border-hover-color'] ?? '#414141' ); ?>;
     227            --mrc-po-border-width: <?php echo esc_attr( ( $rule['border-width'] ?? 0 ) . 'px' ); ?>;
     228            --mrc-po-border-radius: <?php echo esc_attr( ( $rule['border-radius'] ?? 0 ) . 'px' ); ?>;
     229            --mrc-po-background-color: <?php echo esc_attr( $rule['background-color'] ?? '#212121' ); ?>;
     230            --mrc-po-background-hover-color: <?php echo esc_attr( $rule['background-hover-color'] ?? '#414141' ); ?>;
    215231            }
    216232            <?php
     
    221237
    222238    /**
    223      * Enqueue scripts.
     239     * Enqueue frontend-specific scripts.
    224240     *
    225241     * @return void
     
    231247
    232248    /**
    233      * Localize script with module settings.
    234      *
    235      * @param array $setting The merchant global object setting parameter.
    236      *
    237      * @return array $setting The merchant global object setting parameter.
     249     * Localize the main module script with settings and translations.
     250     *
     251     * @param array $setting The localized settings array.
     252     *
     253     * @return array The updated settings array.
    238254     */
    239255    public function localize_script( $setting ) {
    240         //$module_settings = $this->get_module_settings();
    241 
    242256        $setting['pre_orders'] = true;
    243257        $rule                  = $this->current_rule();
    244         if ( ! empty( $rule ) && $rule['button_text'] ) {
     258        if ( ! empty( $rule ) && ! empty( $rule['button_text'] ) ) {
    245259            $setting['pre_orders_add_button_title'] = Merchant_Translator::translate( $rule['button_text'] );
    246260        } else {
     
    254268
    255269    /**
    256      * Render admin preview
    257      *
    258      * @param Merchant_Admin_Preview $preview
    259      * @param string                 $module
    260      *
    261      * @return Merchant_Admin_Preview
     270     * Render the admin preview for the module.
     271     *
     272     * @param Merchant_Admin_Preview $preview The preview object.
     273     * @param string                 $module  The module ID.
     274     *
     275     * @return Merchant_Admin_Preview The updated preview object.
    262276     */
    263277    public function render_admin_preview( $preview, $module ) {
     
    295309
    296310    /**
    297      * Admin preview content.
     311     * Admin preview HTML content.
     312     *
     313     * @param array  $settings The module settings.
     314     * @param string $text     The formatted additional text.
    298315     *
    299316     * @return void
     
    318335                <div class="mrc-preview-text-placeholder mrc-mw-30 mrc-hide-on-smaller-screens"></div>
    319336                <div class="merchant-pre-ordered-product">
    320                     <div class="merchant-pre-orders-date"><?php
    321                         printf( '<div class="merchant-pre-orders-date">%s</div>', esc_html( $text ) ); ?></div>
    322                     <a href="#" class="add_to_cart_button"><?php
    323                         echo esc_html( $settings['button_text'] ); ?></a>
     337                    <div class="merchant-pre-orders-date"><?php echo esc_html( $text ); ?></div>
     338                    <a href="#" class="add_to_cart_button"><?php echo esc_html( $settings['button_text'] ); ?></a>
    324339                </div>
    325340            </div>
     
    329344
    330345    /**
    331      * Custom CSS.
    332      *
    333      * @return string
     346     * Get Custom CSS for the module.
     347     *
     348     * @return string The generated CSS.
    334349     */
    335350    public function get_module_custom_css() {
     
    349364            $css .= Merchant_Custom_CSS::get_variable_css( 'pre-orders', 'border-hover-color', '#414141', '.merchant-pre-ordered-product', '--mrc-po-border-hover-color' );
    350365
     366            // Border Width.
     367            $css .= Merchant_Custom_CSS::get_variable_css( 'pre-orders', 'border-width', 0, '.merchant-pre-ordered-product', '--mrc-po-border-width', 'px' );
     368
     369            // Border Radius.
     370            $css .= Merchant_Custom_CSS::get_variable_css( 'pre-orders', 'border-radius', 0, '.merchant-pre-ordered-product', '--mrc-po-border-radius', 'px' );
     371
    351372            // Background Color.
    352373            $css .= Merchant_Custom_CSS::get_variable_css( 'pre-orders', 'background-color', '#212121', '.merchant-pre-ordered-product', '--mrc-po-background-color' );
     
    360381
    361382    /**
    362      * Admin custom CSS.
     383     * Filter for admin custom CSS.
    363384     *
    364385     * @param string $css The custom CSS.
    365386     *
    366      * @return string $css The custom CSS.
     387     * @return string The updated custom CSS.
    367388     */
    368389    public function admin_custom_css( $css ) {
     
    373394
    374395    /**
    375      * Frontend custom CSS.
     396     * Filter for frontend custom CSS.
    376397     *
    377398     * @param string $css The custom CSS.
    378399     *
    379      * @return string $css The custom CSS.
     400     * @return string The updated custom CSS.
    380401     */
    381402    public function frontend_custom_css( $css ) {
     
    386407
    387408    /**
    388      * Get current product rule.
    389     *
    390      * @return array
     409     * Get the currently applicable product rule.
     410    *
     411     * @return array The rule array if found, empty array otherwise.
    391412     */
    392413    private function current_rule() {
    393414        if ( is_singular( 'product' ) ) {
    394             $product = wc_get_product( get_queried_object_id() );
    395             $rule    = Merchant_Pre_Orders_Main_Functionality::available_product_rule( $product->get_id() );
    396             if ( empty( $rule ) && $product->is_type( 'variable' ) ) {
     415            $product_id = get_queried_object_id();
     416            $product    = wc_get_product( $product_id );
     417
     418            if ( ! $product ) {
     419                return array();
     420            }
     421
     422            $rule = Merchant_Pre_Orders_Main_Functionality::available_product_rule( $product->get_id() );
     423            if ( empty( $rule ) && $product instanceof \WC_Product_Variable ) {
    397424                $available_variations = $product->get_available_variations();
    398425                foreach ( $available_variations as $variation ) {
     
    411438
    412439    /**
    413      * Help banner.
     440     * Display a help banner in the module settings page.
     441     *
     442     * @param string $module_id The module ID.
    414443     *
    415444     * @return void
    416445     */
    417446    public function help_banner( $module_id ) {
    418         if ( $module_id === 'pre-orders' ) {
     447        if ( $module_id === self::MODULE_ID ) {
    419448            ?>
    420449            <div class="merchant-module-page-setting-fields">
     
    426455                                <?php
    427456                                echo esc_html__(
    428                                     'Pre-orders captured by Merchant are tagged with "MerchantPreOrder" and can be found in your WooCommerce Order Section.',
     457                                    'Pre-orders captured by Merchant are tagged with "Merchant PreOrder" and can be found in your WooCommerce Order Section. You can control pre-order settings on a per-product basis from the individual product page.',
    429458                                    'merchant'
    430459                                );
     
    444473
    445474    /**
    446      * Supply missing ID for flexible items.
    447      *
    448      * @param string $setting_key
     475     * Supply missing flexible_id for the rules setting.
     476     *
     477     * @param string $setting_key The setting key for the flexible items.
    449478     *
    450479     * @return void
     
    476505}
    477506
     507// Rules Repository.
     508require_once MERCHANT_DIR . 'inc/modules/pre-orders/classes/class-pre-orders-rules.php';
     509
    478510// Main functionality.
    479 require MERCHANT_DIR . 'inc/modules/pre-orders/class-pre-orders-main-functionality.php';
     511require_once MERCHANT_DIR . 'inc/modules/pre-orders/class-pre-orders-main-functionality.php';
    480512
    481513// Initialize the module.
  • merchant/trunk/inc/modules/quick-view/admin/options.php

    r3175862 r3458319  
    304304            'condition'   => array( 'show_buy_now_button', '==', '1' ),
    305305        ),
    306 
     306        array(
     307            'id'      => 'ajax_add_to_cart',
     308            'type'    => 'switcher',
     309            'title'   => esc_html__( 'Ajax add to cart', 'merchant' ),
     310            'default' => 0,
     311        ),
    307312        array(
    308313            'id'      => 'show_suggested_products',
  • merchant/trunk/inc/modules/quick-view/class-quick-view.php

    r3389952 r3458319  
    180180        add_action( 'wp_ajax_merchant_quick_view_content', array( $this, 'modal_content_ajax_callback' ) );
    181181        add_action( 'wp_ajax_nopriv_merchant_quick_view_content', array( $this, 'modal_content_ajax_callback' ) );
     182
     183        // Initialize AJAX add to cart handler (separate class).
     184        $this->init_ajax_add_to_cart();
     185    }
     186
     187    /**
     188     * Initialize AJAX add to cart functionality.
     189     *
     190     * @return void
     191     */
     192    private function init_ajax_add_to_cart() {
     193        Merchant_Quick_View_Ajax_Add_To_Cart::get_instance()->init();
    182194    }
    183195
     
    307319        $module_settings = $this->get_module_settings();
    308320
    309         $setting[ 'quick_view' ]      = true;
    310         $setting[ 'quick_view_zoom' ] = $module_settings[ 'zoom_effect' ];
     321        $setting[ 'quick_view' ]       = true;
     322        $setting[ 'quick_view_zoom' ]  = $module_settings[ 'zoom_effect' ];
     323        $setting[ 'ajax_add_to_cart' ] = ! empty( $module_settings[ 'ajax_add_to_cart' ] );
    311324
    312325        return $setting;
     
    589602        wp_send_json_success( $content );
    590603    }
     604
    591605
    592606    /**
     
    677691        global $product;
    678692
     693        /**
     694         * Filters whether the Buy Now button should be excluded for a specific product in Quick View.
     695         *
     696         * This filter allows modules (like Buy Now) to control the visibility of the Buy Now button
     697         * in the Quick View modal based on their own exclusion rules.
     698         *
     699         * @param bool       $is_excluded Whether the product is excluded. Default false.
     700         * @param WC_Product $product     The product object.
     701         *
     702         * @since 2.2.4
     703         */
     704        if ( apply_filters( 'merchant_buy_now_is_excluded', false, $product ) ) {
     705            return;
     706        }
     707
    679708        $text = Merchant_Admin_Options::get( Merchant_Buy_Now::MODULE_ID, 'button-text', esc_html__( 'Buy Now', 'merchant' ) );
    680709
     
    927956// Initialize the module.
    928957add_action( 'init', function() {
     958    // Load AJAX add to cart class file.
     959    require_once MERCHANT_DIR . 'inc/modules/quick-view/class-quick-view-ajax-add-to-cart.php';
     960   
     961    // Create and initialize the module.
    929962    Merchant_Modules::create_module( Merchant_Quick_View::get_instance() );
    930963} );
  • merchant/trunk/inc/modules/sticky-add-to-cart/admin/options.php

    r3379075 r3458319  
    152152) );
    153153
     154// Conditional Display
     155Merchant_Admin_Options::create(
     156    array(
     157        'module'    => 'sticky-add-to-cart',
     158        'title'     => esc_html__( 'Conditional Display', 'merchant' ),
     159        'fields'    => array(
     160            // Exclusion.
     161            array(
     162                'id'      => 'exclusion',
     163                'type'    => 'switcher',
     164                'title'   => esc_html__( 'Enable conditional display', 'merchant' ),
     165                'desc'    => esc_html__( 'Sticky Add to Cart will appear on all products except ones selected below.', 'merchant' ),
     166                'default' => 0,
     167            ),
     168
     169            // Excluded Products.
     170            array(
     171                'id'            => 'excluded_products',
     172                'type'          => 'products_selector',
     173                'title'         => esc_html__( 'Excluded products', 'merchant' ),
     174                'desc'          => esc_html__( 'Select specific products to exclude from sticky add to cart.', 'merchant' ),
     175                'multiple'      => true,
     176                'allowed_types' => array( 'simple', 'variable', 'grouped', 'external' ),
     177                'conditions'    => array(
     178                    'relation' => 'AND',
     179                    'terms'    => array(
     180                        array(
     181                            'field'    => 'exclusion',
     182                            'operator' => '===',
     183                            'value'    => true,
     184                        ),
     185                    ),
     186                ),
     187            ),
     188
     189            // Excluded Categories.
     190            array(
     191                'id'         => 'excluded_categories',
     192                'type'       => 'select_ajax',
     193                'title'      => esc_html__( 'Excluded categories', 'merchant' ),
     194                'desc'       => esc_html__( 'Select categories to exclude from sticky add to cart.', 'merchant' ),
     195                'multiple'   => true,
     196                'source'     => 'options',
     197                'options'    => Merchant_Admin_Options::get_category_select2_choices(),
     198                'conditions' => array(
     199                    'relation' => 'AND',
     200                    'terms'    => array(
     201                        array(
     202                            'field'    => 'exclusion',
     203                            'operator' => '===',
     204                            'value'    => true,
     205                        ),
     206                    ),
     207                ),
     208            ),
     209
     210            // Excluded Tags.
     211            array(
     212                'id'         => 'excluded_tags',
     213                'type'       => 'select_ajax',
     214                'title'      => esc_html__( 'Excluded tags', 'merchant' ),
     215                'desc'       => esc_html__( 'Select tags to exclude from sticky add to cart.', 'merchant' ),
     216                'multiple'   => true,
     217                'source'     => 'options',
     218                'options'    => Merchant_Admin_Options::get_tag_select2_choices(),
     219                'conditions' => array(
     220                    'relation' => 'AND',
     221                    'terms'    => array(
     222                        array(
     223                            'field'    => 'exclusion',
     224                            'operator' => '===',
     225                            'value'    => true,
     226                        ),
     227                    ),
     228                ),
     229            ),
     230
     231            // Excluded Brands.
     232            array(
     233                'id'         => 'excluded_brands',
     234                'type'       => 'select_ajax',
     235                'title'      => esc_html__( 'Excluded brands', 'merchant' ),
     236                'desc'       => esc_html__( 'Select brands to exclude from sticky add to cart.', 'merchant' ),
     237                'multiple'   => true,
     238                'source'     => 'options',
     239                'options'    => Merchant_Admin_Options::get_brand_select2_choices(),
     240                'conditions' => array(
     241                    'relation' => 'AND',
     242                    'terms'    => array(
     243                        array(
     244                            'field'    => 'exclusion',
     245                            'operator' => '===',
     246                            'value'    => true,
     247                        ),
     248                    ),
     249                ),
     250            ),
     251        ),
     252    )
     253);
     254
    154255// Style Settings
    155256Merchant_Admin_Options::create( array(
  • merchant/trunk/languages/merchant.pot

    r3434669 r3458319  
    99"Language-Team: aThemes <team@athemes.com>\n"
    1010"Last-Translator: aThemes <team@athemes.com>\n"
    11 "POT-Creation-Date: 2026-01-07 19:05+0000\n"
     11"POT-Creation-Date: 2026-02-10 17:28+0000\n"
    1212"Report-Msgid-Bugs-To: https://athemes.com/contact/\n"
    1313"X-Poedit-Basepath: ..\n"
     
    130130msgstr ""
    131131
    132 #: admin/classes/class-merchant-admin-menu.php:132, admin/classes/class-merchant-admin-options.php:80
     132#: admin/classes/class-merchant-admin-menu.php:132, admin/classes/class-merchant-admin-options.php:80, inc/classes/class-merchant-metabox.php:84
    133133msgid "Sunday"
    134134msgstr ""
    135135
    136 #: admin/classes/class-merchant-admin-menu.php:133, admin/classes/class-merchant-admin-options.php:81
     136#: admin/classes/class-merchant-admin-menu.php:133, admin/classes/class-merchant-admin-options.php:81, inc/classes/class-merchant-metabox.php:85
    137137msgid "Monday"
    138138msgstr ""
    139139
    140 #: admin/classes/class-merchant-admin-menu.php:134, admin/classes/class-merchant-admin-options.php:82
     140#: admin/classes/class-merchant-admin-menu.php:134, admin/classes/class-merchant-admin-options.php:82, inc/classes/class-merchant-metabox.php:86
    141141msgid "Tuesday"
    142142msgstr ""
    143143
    144 #: admin/classes/class-merchant-admin-menu.php:135, admin/classes/class-merchant-admin-options.php:83
     144#: admin/classes/class-merchant-admin-menu.php:135, admin/classes/class-merchant-admin-options.php:83, inc/classes/class-merchant-metabox.php:87
    145145msgid "Wednesday"
    146146msgstr ""
    147147
    148 #: admin/classes/class-merchant-admin-menu.php:136, admin/classes/class-merchant-admin-options.php:84
     148#: admin/classes/class-merchant-admin-menu.php:136, admin/classes/class-merchant-admin-options.php:84, inc/classes/class-merchant-metabox.php:88
    149149msgid "Thursday"
    150150msgstr ""
    151151
    152 #: admin/classes/class-merchant-admin-menu.php:137, admin/classes/class-merchant-admin-options.php:85
     152#: admin/classes/class-merchant-admin-menu.php:137, admin/classes/class-merchant-admin-options.php:85, inc/classes/class-merchant-metabox.php:89
    153153msgid "Friday"
    154154msgstr ""
    155155
    156 #: admin/classes/class-merchant-admin-menu.php:138, admin/classes/class-merchant-admin-options.php:86
     156#: admin/classes/class-merchant-admin-menu.php:138, admin/classes/class-merchant-admin-options.php:86, inc/classes/class-merchant-metabox.php:90
    157157msgid "Saturday"
    158158msgstr ""
    159159
    160 #: admin/classes/class-merchant-admin-menu.php:141, admin/classes/class-merchant-admin-options.php:89
     160#: admin/classes/class-merchant-admin-menu.php:141, admin/classes/class-merchant-admin-options.php:89, inc/classes/class-merchant-metabox.php:93
    161161msgid "Sun"
    162162msgstr ""
    163163
    164 #: admin/classes/class-merchant-admin-menu.php:142, admin/classes/class-merchant-admin-options.php:90
     164#: admin/classes/class-merchant-admin-menu.php:142, admin/classes/class-merchant-admin-options.php:90, inc/classes/class-merchant-metabox.php:94
    165165msgid "Mon"
    166166msgstr ""
    167167
    168 #: admin/classes/class-merchant-admin-menu.php:143, admin/classes/class-merchant-admin-options.php:91
     168#: admin/classes/class-merchant-admin-menu.php:143, admin/classes/class-merchant-admin-options.php:91, inc/classes/class-merchant-metabox.php:95
    169169msgid "Tue"
    170170msgstr ""
    171171
    172 #: admin/classes/class-merchant-admin-menu.php:144, admin/classes/class-merchant-admin-options.php:92
     172#: admin/classes/class-merchant-admin-menu.php:144, admin/classes/class-merchant-admin-options.php:92, inc/classes/class-merchant-metabox.php:96
    173173msgid "Wed"
    174174msgstr ""
    175175
    176 #: admin/classes/class-merchant-admin-menu.php:145, admin/classes/class-merchant-admin-options.php:93
     176#: admin/classes/class-merchant-admin-menu.php:145, admin/classes/class-merchant-admin-options.php:93, inc/classes/class-merchant-metabox.php:97
    177177msgid "Thu"
    178178msgstr ""
    179179
    180 #: admin/classes/class-merchant-admin-menu.php:146, admin/classes/class-merchant-admin-options.php:94
     180#: admin/classes/class-merchant-admin-menu.php:146, admin/classes/class-merchant-admin-options.php:94, inc/classes/class-merchant-metabox.php:98
    181181msgid "Fri"
    182182msgstr ""
    183183
    184 #: admin/classes/class-merchant-admin-menu.php:147, admin/classes/class-merchant-admin-options.php:95
     184#: admin/classes/class-merchant-admin-menu.php:147, admin/classes/class-merchant-admin-options.php:95, inc/classes/class-merchant-metabox.php:99
    185185msgid "Sat"
    186186msgstr ""
    187187
    188 #: admin/classes/class-merchant-admin-menu.php:150, admin/classes/class-merchant-admin-options.php:98
     188#: admin/classes/class-merchant-admin-menu.php:150, admin/classes/class-merchant-admin-options.php:98, inc/classes/class-merchant-metabox.php:102
    189189msgid "Su"
    190190msgstr ""
    191191
    192 #: admin/classes/class-merchant-admin-menu.php:151, admin/classes/class-merchant-admin-options.php:99
     192#: admin/classes/class-merchant-admin-menu.php:151, admin/classes/class-merchant-admin-options.php:99, inc/classes/class-merchant-metabox.php:103
    193193msgid "Mo"
    194194msgstr ""
    195195
    196 #: admin/classes/class-merchant-admin-menu.php:152, admin/classes/class-merchant-admin-options.php:100
     196#: admin/classes/class-merchant-admin-menu.php:152, admin/classes/class-merchant-admin-options.php:100, inc/classes/class-merchant-metabox.php:104
    197197msgid "Tu"
    198198msgstr ""
    199199
    200 #: admin/classes/class-merchant-admin-menu.php:153, admin/classes/class-merchant-admin-options.php:101
     200#: admin/classes/class-merchant-admin-menu.php:153, admin/classes/class-merchant-admin-options.php:101, inc/classes/class-merchant-metabox.php:105
    201201msgid "We"
    202202msgstr ""
    203203
    204 #: admin/classes/class-merchant-admin-menu.php:154, admin/classes/class-merchant-admin-options.php:102
     204#: admin/classes/class-merchant-admin-menu.php:154, admin/classes/class-merchant-admin-options.php:102, inc/classes/class-merchant-metabox.php:106
    205205msgid "Th"
    206206msgstr ""
    207207
    208 #: admin/classes/class-merchant-admin-menu.php:155, admin/classes/class-merchant-admin-options.php:103
     208#: admin/classes/class-merchant-admin-menu.php:155, admin/classes/class-merchant-admin-options.php:103, inc/classes/class-merchant-metabox.php:107
    209209msgid "Fr"
    210210msgstr ""
    211211
    212 #: admin/classes/class-merchant-admin-menu.php:156, admin/classes/class-merchant-admin-options.php:104
     212#: admin/classes/class-merchant-admin-menu.php:156, admin/classes/class-merchant-admin-options.php:104, inc/classes/class-merchant-metabox.php:108
    213213msgid "Sa"
    214214msgstr ""
    215215
    216 #: admin/classes/class-merchant-admin-menu.php:159, admin/classes/class-merchant-admin-options.php:107
     216#: admin/classes/class-merchant-admin-menu.php:159, admin/classes/class-merchant-admin-options.php:107, inc/classes/class-merchant-metabox.php:111
    217217msgid "January"
    218218msgstr ""
    219219
    220 #: admin/classes/class-merchant-admin-menu.php:160, admin/classes/class-merchant-admin-options.php:108
     220#: admin/classes/class-merchant-admin-menu.php:160, admin/classes/class-merchant-admin-options.php:108, inc/classes/class-merchant-metabox.php:112
    221221msgid "February"
    222222msgstr ""
    223223
    224 #: admin/classes/class-merchant-admin-menu.php:161, admin/classes/class-merchant-admin-options.php:109
     224#: admin/classes/class-merchant-admin-menu.php:161, admin/classes/class-merchant-admin-options.php:109, inc/classes/class-merchant-metabox.php:113
    225225msgid "March"
    226226msgstr ""
    227227
    228 #: admin/classes/class-merchant-admin-menu.php:162, admin/classes/class-merchant-admin-options.php:110
     228#: admin/classes/class-merchant-admin-menu.php:162, admin/classes/class-merchant-admin-options.php:110, inc/classes/class-merchant-metabox.php:114
    229229msgid "April"
    230230msgstr ""
    231231
    232 #: admin/classes/class-merchant-admin-menu.php:163, admin/classes/class-merchant-admin-menu.php:177, admin/classes/class-merchant-admin-options.php:111, admin/classes/class-merchant-admin-options.php:125
     232#: admin/classes/class-merchant-admin-menu.php:163, admin/classes/class-merchant-admin-menu.php:177, admin/classes/class-merchant-admin-options.php:111, admin/classes/class-merchant-admin-options.php:125, inc/classes/class-merchant-metabox.php:115, inc/classes/class-merchant-metabox.php:129
    233233msgid "May"
    234234msgstr ""
    235235
    236 #: admin/classes/class-merchant-admin-menu.php:164, admin/classes/class-merchant-admin-options.php:112
     236#: admin/classes/class-merchant-admin-menu.php:164, admin/classes/class-merchant-admin-options.php:112, inc/classes/class-merchant-metabox.php:116
    237237msgid "June"
    238238msgstr ""
    239239
    240 #: admin/classes/class-merchant-admin-menu.php:165, admin/classes/class-merchant-admin-options.php:113
     240#: admin/classes/class-merchant-admin-menu.php:165, admin/classes/class-merchant-admin-options.php:113, inc/classes/class-merchant-metabox.php:117
    241241msgid "July"
    242242msgstr ""
    243243
    244 #: admin/classes/class-merchant-admin-menu.php:166, admin/classes/class-merchant-admin-options.php:114
     244#: admin/classes/class-merchant-admin-menu.php:166, admin/classes/class-merchant-admin-options.php:114, inc/classes/class-merchant-metabox.php:118
    245245msgid "August"
    246246msgstr ""
    247247
    248 #: admin/classes/class-merchant-admin-menu.php:167, admin/classes/class-merchant-admin-options.php:115
     248#: admin/classes/class-merchant-admin-menu.php:167, admin/classes/class-merchant-admin-options.php:115, inc/classes/class-merchant-metabox.php:119
    249249msgid "September"
    250250msgstr ""
    251251
    252 #: admin/classes/class-merchant-admin-menu.php:168, admin/classes/class-merchant-admin-options.php:116
     252#: admin/classes/class-merchant-admin-menu.php:168, admin/classes/class-merchant-admin-options.php:116, inc/classes/class-merchant-metabox.php:120
    253253msgid "October"
    254254msgstr ""
    255255
    256 #: admin/classes/class-merchant-admin-menu.php:169, admin/classes/class-merchant-admin-options.php:117
     256#: admin/classes/class-merchant-admin-menu.php:169, admin/classes/class-merchant-admin-options.php:117, inc/classes/class-merchant-metabox.php:121
    257257msgid "November"
    258258msgstr ""
    259259
    260 #: admin/classes/class-merchant-admin-menu.php:170, admin/classes/class-merchant-admin-options.php:118
     260#: admin/classes/class-merchant-admin-menu.php:170, admin/classes/class-merchant-admin-options.php:118, inc/classes/class-merchant-metabox.php:122
    261261msgid "December"
    262262msgstr ""
    263263
    264 #: admin/classes/class-merchant-admin-menu.php:173, admin/classes/class-merchant-admin-options.php:121
     264#: admin/classes/class-merchant-admin-menu.php:173, admin/classes/class-merchant-admin-options.php:121, inc/classes/class-merchant-metabox.php:125
    265265msgid "Jan"
    266266msgstr ""
    267267
    268 #: admin/classes/class-merchant-admin-menu.php:174, admin/classes/class-merchant-admin-options.php:122
     268#: admin/classes/class-merchant-admin-menu.php:174, admin/classes/class-merchant-admin-options.php:122, inc/classes/class-merchant-metabox.php:126
    269269msgid "Feb"
    270270msgstr ""
    271271
    272 #: admin/classes/class-merchant-admin-menu.php:175, admin/classes/class-merchant-admin-options.php:123
     272#: admin/classes/class-merchant-admin-menu.php:175, admin/classes/class-merchant-admin-options.php:123, inc/classes/class-merchant-metabox.php:127
    273273msgid "Mar"
    274274msgstr ""
    275275
    276 #: admin/classes/class-merchant-admin-menu.php:176, admin/classes/class-merchant-admin-options.php:124
     276#: admin/classes/class-merchant-admin-menu.php:176, admin/classes/class-merchant-admin-options.php:124, inc/classes/class-merchant-metabox.php:128
    277277msgid "Apr"
    278278msgstr ""
    279279
    280 #: admin/classes/class-merchant-admin-menu.php:178, admin/classes/class-merchant-admin-options.php:126
     280#: admin/classes/class-merchant-admin-menu.php:178, admin/classes/class-merchant-admin-options.php:126, inc/classes/class-merchant-metabox.php:130
    281281msgid "Jun"
    282282msgstr ""
    283283
    284 #: admin/classes/class-merchant-admin-menu.php:179, admin/classes/class-merchant-admin-options.php:127
     284#: admin/classes/class-merchant-admin-menu.php:179, admin/classes/class-merchant-admin-options.php:127, inc/classes/class-merchant-metabox.php:131
    285285msgid "Jul"
    286286msgstr ""
    287287
    288 #: admin/classes/class-merchant-admin-menu.php:180, admin/classes/class-merchant-admin-options.php:128
     288#: admin/classes/class-merchant-admin-menu.php:180, admin/classes/class-merchant-admin-options.php:128, inc/classes/class-merchant-metabox.php:132
    289289msgid "Aug"
    290290msgstr ""
    291291
    292 #: admin/classes/class-merchant-admin-menu.php:181, admin/classes/class-merchant-admin-options.php:129
     292#: admin/classes/class-merchant-admin-menu.php:181, admin/classes/class-merchant-admin-options.php:129, inc/classes/class-merchant-metabox.php:133
    293293msgid "Sep"
    294294msgstr ""
    295295
    296 #: admin/classes/class-merchant-admin-menu.php:182, admin/classes/class-merchant-admin-options.php:130
     296#: admin/classes/class-merchant-admin-menu.php:182, admin/classes/class-merchant-admin-options.php:130, inc/classes/class-merchant-metabox.php:134
    297297msgid "Oct"
    298298msgstr ""
    299299
    300 #: admin/classes/class-merchant-admin-menu.php:183, admin/classes/class-merchant-admin-options.php:131
     300#: admin/classes/class-merchant-admin-menu.php:183, admin/classes/class-merchant-admin-options.php:131, inc/classes/class-merchant-metabox.php:135
    301301msgid "Nov"
    302302msgstr ""
    303303
    304 #: admin/classes/class-merchant-admin-menu.php:184, admin/classes/class-merchant-admin-options.php:132
     304#: admin/classes/class-merchant-admin-menu.php:184, admin/classes/class-merchant-admin-options.php:132, inc/classes/class-merchant-metabox.php:136
    305305msgid "Dec"
    306306msgstr ""
    307307
    308 #: admin/classes/class-merchant-admin-menu.php:186, admin/classes/class-merchant-admin-options.php:134
     308#: admin/classes/class-merchant-admin-menu.php:186, admin/classes/class-merchant-admin-options.php:134, inc/classes/class-merchant-metabox.php:139
    309309msgid "Clear"
    310310msgstr ""
     
    366366msgstr ""
    367367
    368 #: admin/classes/class-merchant-admin-modules.php:422
     368#: admin/classes/class-merchant-admin-modules.php:422, inc/modules/pre-orders/admin/class-pre-orders-metabox.php:39
    369369msgid "Pre-Orders"
    370370msgstr ""
     
    390390msgstr ""
    391391
    392 #: admin/classes/class-merchant-admin-modules.php:437, templates/modules/frequently-bought-together/single-product.php:36, inc/modules/frequently-bought-together/admin/options.php:554, inc/modules/quick-view/admin/options.php:321, templates/modules/added-to-cart-popup/admin/layout-1.php:128, templates/modules/added-to-cart-popup/admin/layout-2.php:114, templates/modules/added-to-cart-popup/admin/layout-3.php:127
     392#: admin/classes/class-merchant-admin-modules.php:437, templates/modules/frequently-bought-together/single-product.php:36, inc/modules/frequently-bought-together/admin/options.php:554, inc/modules/quick-view/admin/options.php:326, templates/modules/added-to-cart-popup/admin/layout-1.php:128, templates/modules/added-to-cart-popup/admin/layout-2.php:114, templates/modules/added-to-cart-popup/admin/layout-3.php:127
    393393msgid "Frequently Bought Together"
    394394msgstr ""
     
    414414msgstr ""
    415415
    416 #: admin/classes/class-merchant-admin-modules.php:452, inc/modules/quick-view/admin/options.php:319
     416#: admin/classes/class-merchant-admin-modules.php:452, inc/modules/quick-view/admin/options.php:324
    417417msgid "Bulk Discounts"
    418418msgstr ""
     
    518518msgstr ""
    519519
    520 #: admin/classes/class-merchant-admin-modules.php:517, inc/modules/buy-now/class-buy-now.php:50, inc/modules/buy-now/class-buy-now.php:371, inc/modules/buy-now/class-buy-now.php:464, inc/modules/quick-view/class-quick-view.php:679, inc/modules/buy-now/admin/options.php:22
     520#: admin/classes/class-merchant-admin-modules.php:517, inc/modules/buy-now/class-buy-now.php:57, inc/modules/buy-now/class-buy-now.php:394, inc/modules/buy-now/class-buy-now.php:492, inc/modules/quick-view/class-quick-view.php:708, inc/modules/buy-now/admin/options.php:22
    521521msgid "Buy Now"
    522522msgstr ""
     
    868868msgstr ""
    869869
    870 #: admin/classes/class-merchant-admin-options.php:1788, inc/classes/class-merchant-metabox.php:831, inc/classes/class-merchant-metabox.php:875
     870#: admin/classes/class-merchant-admin-options.php:1788, inc/classes/class-merchant-metabox.php:1009, inc/classes/class-merchant-metabox.php:1053
    871871msgid "Remove"
    872872msgstr ""
     
    885885msgstr ""
    886886
    887 #: admin/classes/class-merchant-admin-options.php:1996, inc/classes/class-merchant-metabox.php:924, inc/modules/advanced-reviews/admin/options.php:89, inc/modules/product-navigation-links/admin/options.php:35
     887#: admin/classes/class-merchant-admin-options.php:1996, inc/classes/class-merchant-metabox.php:1102, inc/modules/advanced-reviews/admin/options.php:89, inc/modules/product-navigation-links/admin/options.php:35
    888888msgid "Default"
    889889msgstr ""
     
    902902
    903903#. translators: 1. Coupon admin url 2. Link target attribute value
    904 #: admin/classes/class-merchant-admin-options.php:2391, inc/classes/class-merchant-metabox.php:976
     904#: admin/classes/class-merchant-admin-options.php:2391, inc/classes/class-merchant-metabox.php:1154
    905905msgid "No coupons found! <a href=\"%1$s\" target=\"%2$s\">Create a new coupon</a>"
    906906msgstr ""
    907907
    908 #: admin/classes/class-merchant-admin-options.php:2370, inc/classes/class-merchant-metabox.php:958
     908#: admin/classes/class-merchant-admin-options.php:2370, inc/classes/class-merchant-metabox.php:1136
    909909msgid "Select a coupon"
    910910msgstr ""
    911911
    912 #: admin/classes/class-merchant-admin-options.php:2381, inc/classes/class-merchant-metabox.php:969
     912#: admin/classes/class-merchant-admin-options.php:2381, inc/classes/class-merchant-metabox.php:1147
    913913msgid "Manage coupons"
    914914msgstr ""
     
    957957msgstr ""
    958958
    959 #: admin/classes/class-merchant-admin-options.php:3079, admin/classes/class-merchant-admin-options.php:3083, inc/classes/class-merchant-metabox.php:817, inc/classes/class-merchant-metabox.php:861
     959#: admin/classes/class-merchant-admin-options.php:3079, admin/classes/class-merchant-admin-options.php:3083, inc/classes/class-merchant-metabox.php:995, inc/classes/class-merchant-metabox.php:1039
    960960msgid "Duplicate"
    961961msgstr ""
     
    977977msgstr ""
    978978
    979 #: admin/classes/class-merchant-plugin-installer.php:85
     979#: admin/classes/class-merchant-plugin-installer.php:88
     980msgid "Plugin is already active."
     981msgstr ""
     982
     983#: admin/classes/class-merchant-plugin-installer.php:107
     984msgid "Plugin activated successfully."
     985msgstr ""
     986
     987#: admin/classes/class-merchant-plugin-installer.php:121
    980988msgid "You do not have permission to install plugins."
    981989msgstr ""
    982990
    983 #: admin/classes/class-merchant-plugin-installer.php:89
     991#: admin/classes/class-merchant-plugin-installer.php:125
    984992msgid "Plugin URL is required."
    985993msgstr ""
    986994
    987 #: admin/classes/class-merchant-plugin-installer.php:95
     995#: admin/classes/class-merchant-plugin-installer.php:129
    988996msgid "Plugin name is required."
    989997msgstr ""
    990998
    991 #: admin/classes/class-merchant-plugin-installer.php:118
    992 msgid "Plugin activated successfully."
     999#: admin/classes/class-merchant-plugin-installer.php:222
     1000msgid "The download is currently unavailable. Please try again later or contact support for assistance."
     1001msgstr ""
     1002
     1003#: admin/classes/class-merchant-plugin-installer.php:233
     1004msgid "The download server is temporarily unavailable. Please try again in a few minutes."
     1005msgstr ""
     1006
     1007#: admin/classes/class-merchant-plugin-installer.php:238
     1008msgid "Too many download requests. Please wait a moment and try again."
     1009msgstr ""
     1010
     1011#: admin/classes/class-merchant-plugin-installer.php:243
     1012msgid "The server could not connect to the download source. Please try again or contact your hosting provider if the problem persists."
     1013msgstr ""
     1014
     1015#: admin/classes/class-merchant-plugin-installer.php:248
     1016msgid "The download could not be completed. Please try again or install the plugin manually."
     1017msgstr ""
     1018
     1019#: admin/classes/class-merchant-plugin-installer.php:252
     1020msgid "Installation failed. Please try again or contact support if the problem persists."
    9931021msgstr ""
    9941022
     
    15551583msgstr ""
    15561584
    1557 #: inc/classes/class-merchant-metabox.php:218
     1585#: inc/classes/class-merchant-metabox.php:138
     1586msgid "Today"
     1587msgstr ""
     1588
     1589#: inc/classes/class-merchant-metabox.php:308
    15581590msgid "Options"
    15591591msgstr ""
    15601592
    1561 #: inc/classes/class-merchant-metabox.php:221
     1593#: inc/classes/class-merchant-metabox.php:311
    15621594msgid "Post Options"
    15631595msgstr ""
    15641596
    1565 #: inc/classes/class-merchant-metabox.php:225
     1597#: inc/classes/class-merchant-metabox.php:315
    15661598msgid "Page Options"
    15671599msgstr ""
    15681600
    1569 #: inc/classes/class-merchant-metabox.php:229
     1601#: inc/classes/class-merchant-metabox.php:319
    15701602msgid "Product Options"
    15711603msgstr ""
    15721604
    1573 #: inc/classes/class-merchant-metabox.php:239
     1605#: inc/classes/class-merchant-metabox.php:329
    15741606msgid "Merchant "
    15751607msgstr ""
    15761608
    1577 #: inc/classes/class-merchant-metabox.php:722
     1609#: inc/classes/class-merchant-metabox.php:900
    15781610msgid "Upload/Add Image"
    15791611msgstr ""
    15801612
    1581 #: inc/classes/class-merchant-metabox.php:723
     1613#: inc/classes/class-merchant-metabox.php:901
    15821614msgid "Remove Image"
    15831615msgstr ""
    15841616
    1585 #: inc/classes/class-merchant-metabox.php:755, inc/classes/class-merchant-metabox.php:781
     1617#: inc/classes/class-merchant-metabox.php:933, inc/classes/class-merchant-metabox.php:959
    15861618msgid "Upload"
    15871619msgstr ""
    15881620
    1589 #: inc/classes/class-merchant-metabox.php:806, inc/classes/class-merchant-metabox.php:848
     1621#: inc/classes/class-merchant-metabox.php:984, inc/classes/class-merchant-metabox.php:1026
    15901622msgid "Chart Name"
    15911623msgstr ""
    15921624
    1593 #: inc/classes/class-merchant-metabox.php:884
     1625#: inc/classes/class-merchant-metabox.php:1062
    15941626msgid "Add Size Chart"
    15951627msgstr ""
    15961628
    1597 #: inc/classes/class-merchant-metabox.php:904
     1629#: inc/classes/class-merchant-metabox.php:1082
    15981630msgid "Select a size chart"
    15991631msgstr ""
     
    16391671msgstr ""
    16401672
    1641 #: inc/modules/add-to-cart-text/class-add-to-cart-text.php:52, templates/modules/buy-x-get-y/single-product.php:215, inc/modules/add-to-cart-text/admin/options.php:106
     1673#: inc/modules/add-to-cart-text/class-add-to-cart-text.php:52, templates/modules/buy-x-get-y/single-product.php:241, inc/modules/add-to-cart-text/admin/options.php:106
    16421674msgid "Out of stock"
    16431675msgstr ""
     
    18311863msgstr ""
    18321864
    1833 #: inc/modules/animated-add-to-cart/class-animated-add-to-cart.php:185, inc/modules/buy-x-get-y/class-buy-x-get-y.php:253, inc/modules/frequently-bought-together/class-frequently-bought-together.php:219, inc/modules/quick-view/class-quick-view.php:386, inc/modules/volume-discounts/class-volume-discounts.php:373, templates/modules/buy-x-get-y/single-product.php:250, inc/modules/buy-x-get-y/admin/options.php:566, inc/modules/buy-x-get-y/admin/options.php:695, inc/modules/buy-x-get-y/admin/options.php:757, inc/modules/buy-x-get-y/admin/options.php:820, inc/modules/complementary-products/admin/options.php:599, inc/modules/frequently-bought-together/admin/options.php:759, inc/modules/volume-discounts/admin/options.php:717, inc/modules/volume-discounts/admin/options.php:781, inc/modules/volume-discounts/admin/options.php:853, templates/modules/complementary-products/admin-preview/cart.php:36
     1865#: inc/modules/animated-add-to-cart/class-animated-add-to-cart.php:185, inc/modules/buy-x-get-y/class-buy-x-get-y.php:253, inc/modules/frequently-bought-together/class-frequently-bought-together.php:219, inc/modules/quick-view/class-quick-view.php:399, inc/modules/volume-discounts/class-volume-discounts.php:373, templates/modules/buy-x-get-y/single-product.php:276, inc/modules/buy-x-get-y/admin/options.php:566, inc/modules/buy-x-get-y/admin/options.php:695, inc/modules/buy-x-get-y/admin/options.php:757, inc/modules/buy-x-get-y/admin/options.php:820, inc/modules/complementary-products/admin/options.php:599, inc/modules/frequently-bought-together/admin/options.php:759, inc/modules/volume-discounts/admin/options.php:717, inc/modules/volume-discounts/admin/options.php:781, inc/modules/volume-discounts/admin/options.php:853, templates/modules/complementary-products/admin-preview/cart.php:36
    18341866msgid "Add To Cart"
    18351867msgstr ""
    18361868
    1837 #: inc/modules/buy-now/class-buy-now.php:129
     1869#: inc/modules/buy-now/class-buy-now.php:147
    18381870msgid "Buy now button text"
    18391871msgstr ""
    18401872
    1841 #: inc/modules/buy-now/class-buy-now.php:316
     1873#: inc/modules/buy-now/class-buy-now.php:334
    18421874msgid "Please choose the quantity of items you wish to add to your cart&hellip;"
    18431875msgstr ""
     
    22172249msgstr ""
    22182250
    2219 #: inc/modules/pre-orders/class-pre-orders-main-functionality.php:940, inc/modules/pre-orders/class-pre-orders-main-functionality.php:1764, inc/modules/pre-orders/class-pre-orders.php:65, inc/modules/pre-orders/class-pre-orders.php:247
     2251#: inc/modules/pre-orders/class-pre-orders-main-functionality.php:940, inc/modules/pre-orders/class-pre-orders-main-functionality.php:1522, inc/modules/pre-orders/class-pre-orders.php:77, inc/modules/pre-orders/class-pre-orders.php:261
    22202252msgid "Pre Order Now!"
    22212253msgstr ""
    22222254
    2223 #: inc/modules/pre-orders/class-pre-orders-main-functionality.php:965, inc/modules/pre-orders/class-pre-orders-main-functionality.php:1084, inc/modules/pre-orders/class-pre-orders-main-functionality.php:1765, inc/modules/pre-orders/class-pre-orders.php:66
     2255#: inc/modules/pre-orders/class-pre-orders-main-functionality.php:965, inc/modules/pre-orders/class-pre-orders-main-functionality.php:1084, inc/modules/pre-orders/class-pre-orders-main-functionality.php:1523, inc/modules/pre-orders/class-pre-orders.php:78
    22242256msgid "Ships on {date}."
    22252257msgstr ""
     
    22402272msgstr ""
    22412273
    2242 #: inc/modules/pre-orders/class-pre-orders-main-functionality.php:1160, inc/modules/pre-orders/class-pre-orders-main-functionality.php:1350, inc/modules/pre-orders/class-pre-orders-main-functionality.php:1767, inc/modules/pre-orders/admin/options.php:491
     2274#: inc/modules/pre-orders/class-pre-orders-main-functionality.php:1160, inc/modules/pre-orders/class-pre-orders-main-functionality.php:1350, inc/modules/pre-orders/class-pre-orders-main-functionality.php:1525, inc/modules/pre-orders/admin/options.php:491, inc/modules/pre-orders/classes/class-pre-orders-rules.php:277
    22432275msgid "Ships on"
    22442276msgstr ""
    22452277
    2246 #: inc/modules/pre-orders/class-pre-orders-main-functionality.php:1758, inc/modules/pre-orders/admin/options.php:52
     2278#: inc/modules/pre-orders/class-pre-orders-main-functionality.php:1516, inc/modules/pre-orders/admin/options.php:52
    22472279msgid "Custom Pre-order"
    22482280msgstr ""
    22492281
    2250 #: inc/modules/pre-orders/class-pre-orders.php:250
     2282#: inc/modules/pre-orders/class-pre-orders.php:264
    22512283msgid "Please set a shipping date first"
    22522284msgstr ""
    22532285
    2254 #: inc/modules/pre-orders/class-pre-orders.php:427
    2255 msgid "Pre-orders captured by Merchant are tagged with \"MerchantPreOrder\" and can be found in your WooCommerce Order Section."
    2256 msgstr ""
    2257 
    2258 #: inc/modules/pre-orders/class-pre-orders.php:434
     2286#: inc/modules/pre-orders/class-pre-orders.php:456
     2287msgid "Pre-orders captured by Merchant are tagged with \"Merchant PreOrder\" and can be found in your WooCommerce Order Section. You can control pre-order settings on a per-product basis from the individual product page."
     2288msgstr ""
     2289
     2290#: inc/modules/pre-orders/class-pre-orders.php:463
    22592291msgid "View Pre-Orders"
    22602292msgstr ""
     
    22922324msgstr ""
    22932325
    2294 #: inc/modules/product-labels/class-product-labels.php:336, inc/modules/quick-view/class-quick-view.php:380, inc/modules/recently-viewed-products/class-recently-viewed-products.php:199, inc/modules/recently-viewed-products/class-recently-viewed-products.php:206, inc/modules/recently-viewed-products/class-recently-viewed-products.php:213, inc/modules/sticky-add-to-cart/class-sticky-add-to-cart.php:218, inc/modules/wishlist/class-wishlist.php:173
     2326#: inc/modules/product-labels/class-product-labels.php:336, inc/modules/quick-view/class-quick-view.php:393, inc/modules/recently-viewed-products/class-recently-viewed-products.php:199, inc/modules/recently-viewed-products/class-recently-viewed-products.php:206, inc/modules/recently-viewed-products/class-recently-viewed-products.php:213, inc/modules/sticky-add-to-cart/class-sticky-add-to-cart.php:218, inc/modules/wishlist/class-wishlist.php:173
    22952327msgid "Product Title"
    22962328msgstr ""
     
    24562488msgstr ""
    24572489
    2458 #: inc/modules/quick-view/class-quick-view.php:205
     2490#: inc/modules/quick-view/class-quick-view-ajax-add-to-cart.php:176, inc/modules/quick-view/class-quick-view-ajax-add-to-cart.php:405
     2491msgid "Please choose the quantity of items you wish to add to your cart."
     2492msgstr ""
     2493
     2494#: inc/modules/quick-view/class-quick-view-ajax-add-to-cart.php:180
     2495msgid "Product could not be added to cart."
     2496msgstr ""
     2497
     2498#: inc/modules/quick-view/class-quick-view-ajax-add-to-cart.php:196
     2499msgid "Quick View module is not active."
     2500msgstr ""
     2501
     2502#: inc/modules/quick-view/class-quick-view-ajax-add-to-cart.php:202
     2503msgid "AJAX add to cart is disabled."
     2504msgstr ""
     2505
     2506#: inc/modules/quick-view/class-quick-view-ajax-add-to-cart.php:207
     2507msgid "WooCommerce is not available."
     2508msgstr ""
     2509
     2510#: inc/modules/quick-view/class-quick-view-ajax-add-to-cart.php:284
     2511msgid "Product ID is required."
     2512msgstr ""
     2513
     2514#: inc/modules/quick-view/class-quick-view-ajax-add-to-cart.php:288
     2515msgid "Quantity is required."
     2516msgstr ""
     2517
     2518#: inc/modules/quick-view/class-quick-view-ajax-add-to-cart.php:312
     2519msgid "Invalid product."
     2520msgstr ""
     2521
     2522#: inc/modules/quick-view/class-quick-view-ajax-add-to-cart.php:374
     2523msgid "Please select product options."
     2524msgstr ""
     2525
     2526#: inc/modules/quick-view/class-quick-view-ajax-add-to-cart.php:379
     2527msgid "This variation is not available."
     2528msgstr ""
     2529
     2530#: inc/modules/quick-view/class-quick-view-ajax-add-to-cart.php:389
     2531msgid "Validation failed."
     2532msgstr ""
     2533
     2534#: inc/modules/quick-view/class-quick-view.php:217
    24592535msgid "Quick view button text"
    24602536msgstr ""
    24612537
    2462 #: inc/modules/quick-view/class-quick-view.php:381
     2538#: inc/modules/quick-view/class-quick-view.php:394
    24632539msgid "The product description normally is displayed here."
    24642540msgstr ""
    24652541
    2466 #: inc/modules/quick-view/class-quick-view.php:610
     2542#: inc/modules/quick-view/class-quick-view.php:624
    24672543msgid "Close quick view modal"
    24682544msgstr ""
     
    29152991
    29162992#. translators: 1. Attribute name
    2917 #: templates/modules/buy-x-get-y/single-product.php:236, templates/modules/frequently-bought-together/single-product.php:87, templates/modules/volume-discounts/single-product-radio.php:240, templates/modules/volume-discounts/single-product.php:221
     2993#: templates/modules/buy-x-get-y/single-product.php:262, templates/modules/frequently-bought-together/single-product.php:87, templates/modules/volume-discounts/single-product-radio.php:240, templates/modules/volume-discounts/single-product.php:221
    29182994msgid "Select %s"
    29192995msgstr ""
     
    31153191msgstr ""
    31163192
    3117 #: inc/modules/added-to-cart-popup/admin/options.php:168, inc/modules/quick-view/admin/options.php:311
     3193#: inc/modules/added-to-cart-popup/admin/options.php:168, inc/modules/quick-view/admin/options.php:316
    31183194msgid "Show suggested products"
    31193195msgstr ""
     
    31273203msgstr ""
    31283204
    3129 #: inc/modules/added-to-cart-popup/admin/options.php:196, inc/modules/quick-view/admin/options.php:362
     3205#: inc/modules/added-to-cart-popup/admin/options.php:196, inc/modules/quick-view/admin/options.php:367
    31303206msgid "View Frequently Bought Together"
    31313207msgstr ""
     
    31393215msgstr ""
    31403216
    3141 #: inc/modules/added-to-cart-popup/admin/options.php:241, inc/modules/quick-view/admin/options.php:385
     3217#: inc/modules/added-to-cart-popup/admin/options.php:241, inc/modules/quick-view/admin/options.php:390
    31423218msgid "View Buy X Get Y"
    31433219msgstr ""
     
    31633239msgstr ""
    31643240
    3165 #: inc/modules/added-to-cart-popup/admin/options.php:313, inc/modules/buy-x-get-y/admin/options.php:75, inc/modules/buy-x-get-y/admin/options.php:169, inc/modules/complementary-products/admin/options.php:75, inc/modules/complementary-products/admin/options.php:167, inc/modules/free-gifts/admin/options.php:76, inc/modules/free-gifts/admin/options.php:170, inc/modules/frequently-bought-together/admin/options.php:75, inc/modules/frequently-bought-together/admin/options.php:170, inc/modules/pre-orders/admin/options.php:83, inc/modules/pre-orders/admin/options.php:178, inc/modules/product-labels/admin/options.php:282, inc/modules/product-labels/admin/options.php:387, inc/modules/reasons-to-buy/admin/options.php:78, inc/modules/reasons-to-buy/admin/options.php:171, inc/modules/side-cart/admin/options.php:224, inc/modules/side-cart/admin/options.php:357, inc/modules/size-chart/admin/options.php:34, inc/modules/spending-goal/admin/options.php:98, inc/modules/spending-goal/admin/options.php:143, inc/modules/storewide-sale/admin/options.php:75, inc/modules/storewide-sale/admin/options.php:167, inc/modules/volume-discounts/admin/options.php:84, inc/modules/volume-discounts/admin/options.php:224, inc/modules/wishlist/admin/options.php:115, inc/modules/wishlist/admin/options.php:160
     3241#: inc/modules/added-to-cart-popup/admin/options.php:313, inc/modules/buy-now/admin/options.php:310, inc/modules/buy-x-get-y/admin/options.php:75, inc/modules/buy-x-get-y/admin/options.php:169, inc/modules/complementary-products/admin/options.php:75, inc/modules/complementary-products/admin/options.php:167, inc/modules/free-gifts/admin/options.php:76, inc/modules/free-gifts/admin/options.php:170, inc/modules/frequently-bought-together/admin/options.php:75, inc/modules/frequently-bought-together/admin/options.php:170, inc/modules/pre-orders/admin/options.php:83, inc/modules/pre-orders/admin/options.php:178, inc/modules/product-labels/admin/options.php:282, inc/modules/product-labels/admin/options.php:387, inc/modules/reasons-to-buy/admin/options.php:78, inc/modules/reasons-to-buy/admin/options.php:171, inc/modules/side-cart/admin/options.php:224, inc/modules/side-cart/admin/options.php:357, inc/modules/size-chart/admin/options.php:34, inc/modules/spending-goal/admin/options.php:98, inc/modules/spending-goal/admin/options.php:143, inc/modules/storewide-sale/admin/options.php:75, inc/modules/storewide-sale/admin/options.php:167, inc/modules/volume-discounts/admin/options.php:84, inc/modules/volume-discounts/admin/options.php:224, inc/modules/wishlist/admin/options.php:115, inc/modules/wishlist/admin/options.php:160
    31663242msgid "Select categories"
    31673243msgstr ""
     
    34933569msgstr ""
    34943570
    3495 #: inc/modules/advanced-reviews/admin/options.php:299, inc/modules/complementary-products/admin/options.php:290, inc/modules/frequently-bought-together/admin/options.php:388, inc/modules/pre-orders/admin/options.php:296, inc/modules/storewide-sale/admin/options.php:294, inc/modules/volume-discounts/admin/options.php:359
     3571#: inc/modules/advanced-reviews/admin/options.php:299, inc/modules/complementary-products/admin/options.php:290, inc/modules/frequently-bought-together/admin/options.php:388, inc/modules/pre-orders/admin/class-pre-orders-metabox.php:142, inc/modules/pre-orders/admin/options.php:296, inc/modules/storewide-sale/admin/options.php:294, inc/modules/volume-discounts/admin/options.php:359
    34963572msgid "Percentage"
    34973573msgstr ""
     
    37693845msgstr ""
    37703846
    3771 #: inc/modules/advanced-reviews/admin/options.php:963, inc/modules/complementary-products/admin/options.php:736, inc/modules/countdown-timer/admin/options.php:293, inc/modules/product-swatches/admin/options.php:100, inc/modules/product-swatches/admin/options.php:158, inc/modules/product-swatches/admin/options.php:250, inc/modules/product-swatches/admin/options.php:338, inc/modules/product-swatches/admin/options.php:409, inc/modules/product-swatches/admin/options.php:512, inc/modules/product-swatches/admin/options.php:645, inc/modules/product-swatches/admin/options.php:733, inc/modules/recent-sales-notifications/admin/options.php:675, inc/modules/scroll-to-top-button/admin/options.php:240, inc/modules/sticky-add-to-cart/admin/options.php:164, inc/modules/trust-badges/admin/options.php:89, inc/modules/volume-discounts/admin/options.php:645
     3847#: inc/modules/advanced-reviews/admin/options.php:963, inc/modules/complementary-products/admin/options.php:736, inc/modules/countdown-timer/admin/options.php:293, inc/modules/product-swatches/admin/options.php:100, inc/modules/product-swatches/admin/options.php:158, inc/modules/product-swatches/admin/options.php:250, inc/modules/product-swatches/admin/options.php:338, inc/modules/product-swatches/admin/options.php:409, inc/modules/product-swatches/admin/options.php:512, inc/modules/product-swatches/admin/options.php:645, inc/modules/product-swatches/admin/options.php:733, inc/modules/recent-sales-notifications/admin/options.php:675, inc/modules/scroll-to-top-button/admin/options.php:240, inc/modules/sticky-add-to-cart/admin/options.php:265, inc/modules/trust-badges/admin/options.php:89, inc/modules/volume-discounts/admin/options.php:645
    37723848msgid "Border color"
    37733849msgstr ""
     
    37893865msgstr ""
    37903866
    3791 #: inc/modules/advanced-reviews/admin/options.php:986, inc/modules/buy-x-get-y/admin/options.php:712, inc/modules/buy-x-get-y/admin/options.php:791, inc/modules/clear-cart/admin/options.php:101, inc/modules/complementary-products/admin/options.php:555, inc/modules/complementary-products/admin/options.php:617, inc/modules/free-shipping-progress-bar/admin/options.php:207, inc/modules/frequently-bought-together/admin/options.php:722, inc/modules/frequently-bought-together/admin/options.php:792, inc/modules/pre-orders/admin/options.php:480, inc/modules/product-navigation-links/admin/options.php:45, inc/modules/volume-discounts/admin/options.php:734, inc/modules/volume-discounts/admin/options.php:816
     3867#: inc/modules/advanced-reviews/admin/options.php:986, inc/modules/buy-x-get-y/admin/options.php:712, inc/modules/buy-x-get-y/admin/options.php:791, inc/modules/clear-cart/admin/options.php:101, inc/modules/complementary-products/admin/options.php:555, inc/modules/complementary-products/admin/options.php:617, inc/modules/free-shipping-progress-bar/admin/options.php:207, inc/modules/frequently-bought-together/admin/options.php:722, inc/modules/frequently-bought-together/admin/options.php:792, inc/modules/pre-orders/admin/class-pre-orders-metabox.php:314, inc/modules/pre-orders/admin/options.php:480, inc/modules/product-navigation-links/admin/options.php:45, inc/modules/volume-discounts/admin/options.php:734, inc/modules/volume-discounts/admin/options.php:816
    37923868msgid "Placement"
    37933869msgstr ""
     
    38103886msgstr ""
    38113887
    3812 #: inc/modules/advanced-reviews/admin/options.php:1054, inc/modules/complementary-products/admin/options.php:722, inc/modules/login-popup/admin/options.php:123, inc/modules/reasons-to-buy/admin/options.php:339, inc/modules/recently-viewed-products/admin/options.php:166, inc/modules/side-cart/admin/options.php:615, inc/modules/size-chart/admin/options.php:141, inc/modules/sticky-add-to-cart/admin/options.php:188
     3888#: inc/modules/advanced-reviews/admin/options.php:1054, inc/modules/complementary-products/admin/options.php:722, inc/modules/login-popup/admin/options.php:123, inc/modules/reasons-to-buy/admin/options.php:339, inc/modules/recently-viewed-products/admin/options.php:166, inc/modules/side-cart/admin/options.php:615, inc/modules/size-chart/admin/options.php:141, inc/modules/sticky-add-to-cart/admin/options.php:289
    38133889msgid "Title color"
    38143890msgstr ""
     
    38383914msgstr ""
    38393915
    3840 #: inc/modules/advanced-reviews/admin/options.php:1110, inc/modules/login-popup/admin/options.php:151, inc/modules/side-cart/admin/options.php:678, inc/modules/sticky-add-to-cart/admin/options.php:212
     3916#: inc/modules/advanced-reviews/admin/options.php:1110, inc/modules/login-popup/admin/options.php:151, inc/modules/side-cart/admin/options.php:678, inc/modules/sticky-add-to-cart/admin/options.php:313
    38413917msgid "Button color"
    38423918msgstr ""
    38433919
    3844 #: inc/modules/advanced-reviews/admin/options.php:1118, inc/modules/sticky-add-to-cart/admin/options.php:220
     3920#: inc/modules/advanced-reviews/admin/options.php:1118, inc/modules/sticky-add-to-cart/admin/options.php:321
    38453921msgid "Button color (hover)"
    38463922msgstr ""
    38473923
    3848 #: inc/modules/advanced-reviews/admin/options.php:1126, inc/modules/buy-now/admin/options.php:68, inc/modules/cookie-banner/admin/options.php:133, inc/modules/login-popup/admin/options.php:179, inc/modules/pre-orders/admin/options.php:524, inc/modules/quick-view/admin/options.php:198, inc/modules/side-cart/admin/options.php:706, inc/modules/sticky-add-to-cart/admin/options.php:196
     3924#: inc/modules/advanced-reviews/admin/options.php:1126, inc/modules/buy-now/admin/options.php:68, inc/modules/cookie-banner/admin/options.php:133, inc/modules/login-popup/admin/options.php:179, inc/modules/pre-orders/admin/options.php:544, inc/modules/quick-view/admin/options.php:198, inc/modules/side-cart/admin/options.php:706, inc/modules/sticky-add-to-cart/admin/options.php:297
    38493925msgid "Button background color"
    38503926msgstr ""
    38513927
    3852 #: inc/modules/advanced-reviews/admin/options.php:1134, inc/modules/sticky-add-to-cart/admin/options.php:204
     3928#: inc/modules/advanced-reviews/admin/options.php:1134, inc/modules/sticky-add-to-cart/admin/options.php:305
    38533929msgid "Button background color (hover)"
    38543930msgstr ""
     
    38823958msgstr ""
    38833959
    3884 #: inc/modules/advanced-reviews/admin/options.php:1206, inc/modules/advanced-reviews/admin/options.php:1211, inc/modules/buy-x-get-y/admin/options.php:841, inc/modules/buy-x-get-y/admin/options.php:846, inc/modules/cart-reserved-timer/admin/options.php:103, inc/modules/cart-reserved-timer/admin/options.php:108, inc/modules/clear-cart/admin/options.php:315, inc/modules/clear-cart/admin/options.php:320, inc/modules/complementary-products/admin/options.php:814, inc/modules/complementary-products/admin/options.php:819, inc/modules/countdown-timer/admin/options.php:336, inc/modules/countdown-timer/admin/options.php:341, inc/modules/frequently-bought-together/admin/options.php:861, inc/modules/frequently-bought-together/admin/options.php:866, inc/modules/payment-logos/admin/options.php:125, inc/modules/payment-logos/admin/options.php:130, inc/modules/product-audio/admin/options.php:34, inc/modules/product-audio/admin/options.php:39, inc/modules/product-brand-image/admin/options.php:82, inc/modules/product-brand-image/admin/options.php:87, inc/modules/product-bundles/admin/options.php:170, inc/modules/product-bundles/admin/options.php:175, inc/modules/product-labels/admin/options.php:541, inc/modules/product-labels/admin/options.php:546, inc/modules/product-navigation-links/admin/options.php:144, inc/modules/product-navigation-links/admin/options.php:149, inc/modules/product-video/admin/options.php:52, inc/modules/product-video/admin/options.php:57, inc/modules/quick-social-links/admin/options.php:419, inc/modules/quick-social-links/admin/options.php:424, inc/modules/quick-view/admin/options.php:445, inc/modules/quick-view/admin/options.php:450, inc/modules/real-time-search/admin/options.php:112, inc/modules/real-time-search/admin/options.php:117, inc/modules/reasons-to-buy/admin/options.php:374, inc/modules/reasons-to-buy/admin/options.php:379, inc/modules/recently-viewed-products/admin/options.php:215, inc/modules/recently-viewed-products/admin/options.php:220, inc/modules/size-chart/admin/options.php:215, inc/modules/size-chart/admin/options.php:220, inc/modules/stock-scarcity/admin/options.php:188, inc/modules/stock-scarcity/admin/options.php:193, inc/modules/trust-badges/admin/options.php:144, inc/modules/trust-badges/admin/options.php:149, inc/modules/volume-discounts/admin/options.php:901, inc/modules/volume-discounts/admin/options.php:906, inc/modules/wait-list/admin/options.php:150, inc/modules/wait-list/admin/options.php:155, inc/modules/wishlist/admin/options.php:488, inc/modules/wishlist/admin/options.php:493
     3960#: inc/modules/advanced-reviews/admin/options.php:1206, inc/modules/advanced-reviews/admin/options.php:1211, inc/modules/buy-x-get-y/admin/options.php:841, inc/modules/buy-x-get-y/admin/options.php:846, inc/modules/cart-reserved-timer/admin/options.php:103, inc/modules/cart-reserved-timer/admin/options.php:108, inc/modules/clear-cart/admin/options.php:315, inc/modules/clear-cart/admin/options.php:320, inc/modules/complementary-products/admin/options.php:814, inc/modules/complementary-products/admin/options.php:819, inc/modules/countdown-timer/admin/options.php:336, inc/modules/countdown-timer/admin/options.php:341, inc/modules/frequently-bought-together/admin/options.php:861, inc/modules/frequently-bought-together/admin/options.php:866, inc/modules/payment-logos/admin/options.php:125, inc/modules/payment-logos/admin/options.php:130, inc/modules/product-audio/admin/options.php:34, inc/modules/product-audio/admin/options.php:39, inc/modules/product-brand-image/admin/options.php:82, inc/modules/product-brand-image/admin/options.php:87, inc/modules/product-bundles/admin/options.php:170, inc/modules/product-bundles/admin/options.php:175, inc/modules/product-labels/admin/options.php:541, inc/modules/product-labels/admin/options.php:546, inc/modules/product-navigation-links/admin/options.php:144, inc/modules/product-navigation-links/admin/options.php:149, inc/modules/product-video/admin/options.php:52, inc/modules/product-video/admin/options.php:57, inc/modules/quick-social-links/admin/options.php:419, inc/modules/quick-social-links/admin/options.php:424, inc/modules/quick-view/admin/options.php:450, inc/modules/quick-view/admin/options.php:455, inc/modules/real-time-search/admin/options.php:112, inc/modules/real-time-search/admin/options.php:117, inc/modules/reasons-to-buy/admin/options.php:374, inc/modules/reasons-to-buy/admin/options.php:379, inc/modules/recently-viewed-products/admin/options.php:215, inc/modules/recently-viewed-products/admin/options.php:220, inc/modules/size-chart/admin/options.php:215, inc/modules/size-chart/admin/options.php:220, inc/modules/stock-scarcity/admin/options.php:188, inc/modules/stock-scarcity/admin/options.php:193, inc/modules/trust-badges/admin/options.php:144, inc/modules/trust-badges/admin/options.php:149, inc/modules/volume-discounts/admin/options.php:901, inc/modules/volume-discounts/admin/options.php:906, inc/modules/wait-list/admin/options.php:150, inc/modules/wait-list/admin/options.php:155, inc/modules/wishlist/admin/options.php:488, inc/modules/wishlist/admin/options.php:493
    38853961msgid "Use shortcode"
    38863962msgstr ""
     
    38903966msgstr ""
    38913967
    3892 #: inc/modules/advanced-reviews/admin/options.php:1223, inc/modules/buy-x-get-y/admin/options.php:858, inc/modules/cart-reserved-timer/admin/options.php:119, inc/modules/clear-cart/admin/options.php:333, inc/modules/complementary-products/admin/options.php:831, inc/modules/countdown-timer/admin/options.php:352, inc/modules/free-shipping-progress-bar/admin/options.php:595, inc/modules/free-shipping-progress-bar/admin/options.php:770, inc/modules/free-shipping-progress-bar/admin/options.php:879, inc/modules/frequently-bought-together/admin/options.php:878, inc/modules/payment-logos/admin/options.php:141, inc/modules/product-audio/admin/options.php:50, inc/modules/product-brand-image/admin/options.php:98, inc/modules/product-bundles/admin/options.php:187, inc/modules/product-labels/admin/options.php:557, inc/modules/product-navigation-links/admin/options.php:160, inc/modules/product-video/admin/options.php:68, inc/modules/quick-social-links/admin/options.php:435, inc/modules/quick-view/admin/options.php:461, inc/modules/real-time-search/admin/options.php:128, inc/modules/reasons-to-buy/admin/options.php:390, inc/modules/recently-viewed-products/admin/options.php:231, inc/modules/size-chart/admin/options.php:231, inc/modules/stock-scarcity/admin/options.php:207, inc/modules/trust-badges/admin/options.php:160, inc/modules/volume-discounts/admin/options.php:918, inc/modules/wait-list/admin/options.php:166, inc/modules/wishlist/admin/options.php:504
     3968#: inc/modules/advanced-reviews/admin/options.php:1223, inc/modules/buy-x-get-y/admin/options.php:858, inc/modules/cart-reserved-timer/admin/options.php:119, inc/modules/clear-cart/admin/options.php:333, inc/modules/complementary-products/admin/options.php:831, inc/modules/countdown-timer/admin/options.php:352, inc/modules/free-shipping-progress-bar/admin/options.php:595, inc/modules/free-shipping-progress-bar/admin/options.php:770, inc/modules/free-shipping-progress-bar/admin/options.php:879, inc/modules/frequently-bought-together/admin/options.php:878, inc/modules/payment-logos/admin/options.php:141, inc/modules/product-audio/admin/options.php:50, inc/modules/product-brand-image/admin/options.php:98, inc/modules/product-bundles/admin/options.php:187, inc/modules/product-labels/admin/options.php:557, inc/modules/product-navigation-links/admin/options.php:160, inc/modules/product-video/admin/options.php:68, inc/modules/quick-social-links/admin/options.php:435, inc/modules/quick-view/admin/options.php:466, inc/modules/real-time-search/admin/options.php:128, inc/modules/reasons-to-buy/admin/options.php:390, inc/modules/recently-viewed-products/admin/options.php:231, inc/modules/size-chart/admin/options.php:231, inc/modules/stock-scarcity/admin/options.php:207, inc/modules/trust-badges/admin/options.php:160, inc/modules/volume-discounts/admin/options.php:918, inc/modules/wait-list/admin/options.php:166, inc/modules/wishlist/admin/options.php:504
    38933969msgid "Shortcode text"
    38943970msgstr ""
     
    39504026msgstr ""
    39514027
    3952 #: inc/modules/buy-now/admin/options.php:76, inc/modules/login-popup/admin/options.php:186, inc/modules/pre-orders/admin/options.php:531, inc/modules/quick-view/admin/options.php:205, inc/modules/side-cart/admin/options.php:713
     4028#: inc/modules/buy-now/admin/options.php:76, inc/modules/login-popup/admin/options.php:186, inc/modules/pre-orders/admin/options.php:551, inc/modules/quick-view/admin/options.php:205, inc/modules/side-cart/admin/options.php:713
    39534029msgid "Button background color hover"
    39544030msgstr ""
     
    40664142msgstr ""
    40674143
     4144#: inc/modules/buy-now/admin/options.php:287, inc/modules/sticky-add-to-cart/admin/options.php:158
     4145msgid "Conditional Display"
     4146msgstr ""
     4147
     4148#: inc/modules/buy-now/admin/options.php:292, inc/modules/sticky-add-to-cart/admin/options.php:164
     4149msgid "Enable conditional display"
     4150msgstr ""
     4151
     4152#: inc/modules/buy-now/admin/options.php:293
     4153msgid "Enable product exclusion rules"
     4154msgstr ""
     4155
     4156#: inc/modules/buy-now/admin/options.php:299, inc/modules/buy-x-get-y/admin/options.php:125, inc/modules/free-gifts/admin/options.php:107, inc/modules/frequently-bought-together/admin/options.php:126, inc/modules/product-labels/admin/options.php:323, inc/modules/spending-goal/admin/options.php:122, inc/modules/storewide-sale/admin/options.php:123, inc/modules/volume-discounts/admin/options.php:180, inc/modules/wishlist/admin/options.php:139
     4157msgid "Exclude Products"
     4158msgstr ""
     4159
     4160#: inc/modules/buy-now/admin/options.php:300
     4161msgid "Select products to exclude from buy now button"
     4162msgstr ""
     4163
     4164#: inc/modules/buy-now/admin/options.php:306, inc/modules/free-gifts/admin/options.php:148, inc/modules/product-labels/admin/options.php:365, inc/modules/spending-goal/admin/options.php:139, inc/modules/wishlist/admin/options.php:156
     4165msgid "Exclude Categories"
     4166msgstr ""
     4167
     4168#: inc/modules/buy-now/admin/options.php:311
     4169msgid "Select categories to exclude from buy now button"
     4170msgstr ""
     4171
     4172#: inc/modules/buy-now/admin/options.php:320, inc/modules/buy-x-get-y/admin/options.php:86, inc/modules/buy-x-get-y/admin/options.php:212, inc/modules/complementary-products/admin/options.php:87, inc/modules/complementary-products/admin/options.php:210, inc/modules/free-gifts/admin/options.php:88, inc/modules/free-gifts/admin/options.php:214, inc/modules/frequently-bought-together/admin/options.php:87, inc/modules/frequently-bought-together/admin/options.php:213, inc/modules/pre-orders/admin/options.php:94, inc/modules/pre-orders/admin/options.php:222, inc/modules/product-labels/admin/options.php:294, inc/modules/product-labels/admin/options.php:431, inc/modules/reasons-to-buy/admin/options.php:90, inc/modules/reasons-to-buy/admin/options.php:214, inc/modules/storewide-sale/admin/options.php:87, inc/modules/storewide-sale/admin/options.php:210, inc/modules/volume-discounts/admin/options.php:144, inc/modules/volume-discounts/admin/options.php:267
     4173msgid "Select tags"
     4174msgstr ""
     4175
     4176#: inc/modules/buy-now/admin/options.php:321, inc/modules/free-gifts/admin/options.php:192, inc/modules/product-labels/admin/options.php:409
     4177msgid "Exclude Tags"
     4178msgstr ""
     4179
     4180#: inc/modules/buy-now/admin/options.php:322
     4181msgid "Select tags to exclude from buy now button"
     4182msgstr ""
     4183
     4184#: inc/modules/buy-now/admin/options.php:331, inc/modules/buy-x-get-y/admin/options.php:97, inc/modules/buy-x-get-y/admin/options.php:255, inc/modules/complementary-products/admin/options.php:98, inc/modules/complementary-products/admin/options.php:253, inc/modules/free-gifts/admin/options.php:99, inc/modules/free-gifts/admin/options.php:258, inc/modules/frequently-bought-together/admin/options.php:98, inc/modules/frequently-bought-together/admin/options.php:256, inc/modules/pre-orders/admin/options.php:105, inc/modules/pre-orders/admin/options.php:266, inc/modules/product-labels/admin/options.php:306, inc/modules/product-labels/admin/options.php:475, inc/modules/reasons-to-buy/admin/options.php:101, inc/modules/reasons-to-buy/admin/options.php:257, inc/modules/storewide-sale/admin/options.php:98, inc/modules/storewide-sale/admin/options.php:253, inc/modules/volume-discounts/admin/options.php:155, inc/modules/volume-discounts/admin/options.php:310
     4185msgid "Select brands"
     4186msgstr ""
     4187
     4188#: inc/modules/buy-now/admin/options.php:332, inc/modules/buy-x-get-y/admin/options.php:234, inc/modules/complementary-products/admin/options.php:232, inc/modules/free-gifts/admin/options.php:236, inc/modules/frequently-bought-together/admin/options.php:235, inc/modules/product-labels/admin/options.php:453, inc/modules/reasons-to-buy/admin/options.php:236
     4189msgid "Exclude Brands"
     4190msgstr ""
     4191
     4192#: inc/modules/buy-now/admin/options.php:333
     4193msgid "Select brands to exclude from buy now button"
     4194msgstr ""
     4195
    40684196#: inc/modules/buy-x-get-y/admin/options.php:15, inc/modules/volume-discounts/admin/options.php:14
    40694197msgid "Offers"
     
    41064234msgstr ""
    41074235
    4108 #: inc/modules/buy-x-get-y/admin/options.php:86, inc/modules/buy-x-get-y/admin/options.php:212, inc/modules/complementary-products/admin/options.php:87, inc/modules/complementary-products/admin/options.php:210, inc/modules/free-gifts/admin/options.php:88, inc/modules/free-gifts/admin/options.php:214, inc/modules/frequently-bought-together/admin/options.php:87, inc/modules/frequently-bought-together/admin/options.php:213, inc/modules/pre-orders/admin/options.php:94, inc/modules/pre-orders/admin/options.php:222, inc/modules/product-labels/admin/options.php:294, inc/modules/product-labels/admin/options.php:431, inc/modules/reasons-to-buy/admin/options.php:90, inc/modules/reasons-to-buy/admin/options.php:214, inc/modules/storewide-sale/admin/options.php:87, inc/modules/storewide-sale/admin/options.php:210, inc/modules/volume-discounts/admin/options.php:144, inc/modules/volume-discounts/admin/options.php:267
    4109 msgid "Select tags"
    4110 msgstr ""
    4111 
    41124236#: inc/modules/buy-x-get-y/admin/options.php:87, inc/modules/frequently-bought-together/admin/options.php:88, inc/modules/storewide-sale/admin/options.php:88, inc/modules/volume-discounts/admin/options.php:145
    41134237msgid "Select the product tags that will show the offer."
     
    41184242msgstr ""
    41194243
    4120 #: inc/modules/buy-x-get-y/admin/options.php:97, inc/modules/buy-x-get-y/admin/options.php:255, inc/modules/complementary-products/admin/options.php:98, inc/modules/complementary-products/admin/options.php:253, inc/modules/free-gifts/admin/options.php:99, inc/modules/free-gifts/admin/options.php:258, inc/modules/frequently-bought-together/admin/options.php:98, inc/modules/frequently-bought-together/admin/options.php:256, inc/modules/pre-orders/admin/options.php:105, inc/modules/pre-orders/admin/options.php:266, inc/modules/product-labels/admin/options.php:306, inc/modules/product-labels/admin/options.php:475, inc/modules/reasons-to-buy/admin/options.php:101, inc/modules/reasons-to-buy/admin/options.php:257, inc/modules/storewide-sale/admin/options.php:98, inc/modules/storewide-sale/admin/options.php:253, inc/modules/volume-discounts/admin/options.php:155, inc/modules/volume-discounts/admin/options.php:310
    4121 msgid "Select brands"
    4122 msgstr ""
    4123 
    41244244#: inc/modules/buy-x-get-y/admin/options.php:98, inc/modules/frequently-bought-together/admin/options.php:99, inc/modules/storewide-sale/admin/options.php:99, inc/modules/volume-discounts/admin/options.php:156
    41254245msgid "Select the product brands that will show the offer."
     
    41304250msgstr ""
    41314251
    4132 #: inc/modules/buy-x-get-y/admin/options.php:125, inc/modules/free-gifts/admin/options.php:107, inc/modules/frequently-bought-together/admin/options.php:126, inc/modules/product-labels/admin/options.php:323, inc/modules/spending-goal/admin/options.php:122, inc/modules/storewide-sale/admin/options.php:123, inc/modules/volume-discounts/admin/options.php:180, inc/modules/wishlist/admin/options.php:139
    4133 msgid "Exclude Products"
    4134 msgstr ""
    4135 
    41364252#: inc/modules/buy-x-get-y/admin/options.php:127, inc/modules/complementary-products/admin/options.php:125, inc/modules/frequently-bought-together/admin/options.php:128, inc/modules/storewide-sale/admin/options.php:125, inc/modules/volume-discounts/admin/options.php:182
    41374253msgid "Exclude products from this campaign."
     
    41624278msgstr ""
    41634279
    4164 #: inc/modules/buy-x-get-y/admin/options.php:234, inc/modules/complementary-products/admin/options.php:232, inc/modules/free-gifts/admin/options.php:236, inc/modules/frequently-bought-together/admin/options.php:235, inc/modules/product-labels/admin/options.php:453, inc/modules/reasons-to-buy/admin/options.php:236
    4165 msgid "Exclude Brands"
    4166 msgstr ""
    4167 
    41684280#: inc/modules/buy-x-get-y/admin/options.php:251, inc/modules/complementary-products/admin/options.php:249, inc/modules/free-gifts/admin/options.php:254, inc/modules/frequently-bought-together/admin/options.php:252, inc/modules/pre-orders/admin/options.php:262, inc/modules/product-labels/admin/options.php:471, inc/modules/reasons-to-buy/admin/options.php:253, inc/modules/storewide-sale/admin/options.php:249, inc/modules/volume-discounts/admin/options.php:306
    41694281msgid "Excluded Brands List"
     
    42144326msgstr ""
    42154327
    4216 #: inc/modules/buy-x-get-y/admin/options.php:347, inc/modules/pre-orders/admin/options.php:294
     4328#: inc/modules/buy-x-get-y/admin/options.php:347, inc/modules/pre-orders/admin/class-pre-orders-metabox.php:140, inc/modules/pre-orders/admin/options.php:294
    42174329msgid "Discount Type"
    42184330msgstr ""
     
    42424354msgstr ""
    42434355
    4244 #: inc/modules/buy-x-get-y/admin/options.php:399, inc/modules/complementary-products/admin/options.php:358, inc/modules/free-gifts/admin/options.php:305, inc/modules/free-shipping-progress-bar/admin/options.php:84, inc/modules/frequently-bought-together/admin/options.php:417, inc/modules/pre-orders/admin/options.php:362, inc/modules/spending-goal/admin/options.php:159, inc/modules/storewide-sale/admin/options.php:321, inc/modules/volume-discounts/admin/options.php:393
     4356#: inc/modules/buy-x-get-y/admin/options.php:399, inc/modules/complementary-products/admin/options.php:358, inc/modules/free-gifts/admin/options.php:305, inc/modules/free-shipping-progress-bar/admin/options.php:84, inc/modules/frequently-bought-together/admin/options.php:417, inc/modules/pre-orders/admin/class-pre-orders-metabox.php:174, inc/modules/pre-orders/admin/options.php:362, inc/modules/spending-goal/admin/options.php:159, inc/modules/storewide-sale/admin/options.php:321, inc/modules/volume-discounts/admin/options.php:393
    42454357msgid "User Condition"
    42464358msgstr ""
    42474359
    4248 #: inc/modules/buy-x-get-y/admin/options.php:401, inc/modules/complementary-products/admin/options.php:360, inc/modules/free-gifts/admin/options.php:307, inc/modules/free-shipping-progress-bar/admin/options.php:86, inc/modules/frequently-bought-together/admin/options.php:419, inc/modules/pre-orders/admin/options.php:364, inc/modules/spending-goal/admin/options.php:161, inc/modules/storewide-sale/admin/options.php:323, inc/modules/volume-discounts/admin/options.php:395
     4360#: inc/modules/buy-x-get-y/admin/options.php:401, inc/modules/complementary-products/admin/options.php:360, inc/modules/free-gifts/admin/options.php:307, inc/modules/free-shipping-progress-bar/admin/options.php:86, inc/modules/frequently-bought-together/admin/options.php:419, inc/modules/pre-orders/admin/class-pre-orders-metabox.php:177, inc/modules/pre-orders/admin/options.php:364, inc/modules/spending-goal/admin/options.php:161, inc/modules/storewide-sale/admin/options.php:323, inc/modules/volume-discounts/admin/options.php:395
    42494361msgid "All Users"
    42504362msgstr ""
     
    42744386msgstr ""
    42754387
    4276 #: inc/modules/buy-x-get-y/admin/options.php:435, inc/modules/free-gifts/admin/options.php:341, inc/modules/free-shipping-progress-bar/admin/options.php:136, inc/modules/pre-orders/admin/options.php:398, inc/modules/storewide-sale/admin/options.php:357, inc/modules/volume-discounts/admin/options.php:429
     4388#: inc/modules/buy-x-get-y/admin/options.php:435, inc/modules/free-gifts/admin/options.php:341, inc/modules/free-shipping-progress-bar/admin/options.php:136, inc/modules/pre-orders/admin/class-pre-orders-metabox.php:226, inc/modules/pre-orders/admin/options.php:398, inc/modules/storewide-sale/admin/options.php:357, inc/modules/volume-discounts/admin/options.php:429
    42774389msgid "Select the users that will not show the offer."
    42784390msgstr ""
     
    42824394msgstr ""
    42834395
    4284 #: inc/modules/buy-x-get-y/admin/options.php:453, inc/modules/complementary-products/admin/options.php:411, inc/modules/free-gifts/admin/options.php:359, inc/modules/free-shipping-progress-bar/admin/options.php:154, inc/modules/frequently-bought-together/admin/options.php:471, inc/modules/pre-orders/admin/options.php:416, inc/modules/spending-goal/admin/options.php:238, inc/modules/storewide-sale/admin/options.php:375, inc/modules/volume-discounts/admin/options.php:447
     4396#: inc/modules/buy-x-get-y/admin/options.php:453, inc/modules/complementary-products/admin/options.php:411, inc/modules/free-gifts/admin/options.php:359, inc/modules/free-shipping-progress-bar/admin/options.php:154, inc/modules/frequently-bought-together/admin/options.php:471, inc/modules/pre-orders/admin/class-pre-orders-metabox.php:240, inc/modules/pre-orders/admin/options.php:416, inc/modules/spending-goal/admin/options.php:238, inc/modules/storewide-sale/admin/options.php:375, inc/modules/volume-discounts/admin/options.php:447
    42854397msgid "This will exclude the offer for users with these roles."
    42864398msgstr ""
     
    42904402msgstr ""
    42914403
    4292 #: inc/modules/buy-x-get-y/admin/options.php:479, inc/modules/complementary-products/admin/options.php:437, inc/modules/free-gifts/admin/options.php:385, inc/modules/free-shipping-progress-bar/admin/options.php:180, inc/modules/frequently-bought-together/admin/options.php:497, inc/modules/pre-orders/admin/options.php:442, inc/modules/spending-goal/admin/options.php:213, inc/modules/storewide-sale/admin/options.php:401, inc/modules/volume-discounts/admin/options.php:473
     4404#: inc/modules/buy-x-get-y/admin/options.php:479, inc/modules/complementary-products/admin/options.php:437, inc/modules/free-gifts/admin/options.php:385, inc/modules/free-shipping-progress-bar/admin/options.php:180, inc/modules/frequently-bought-together/admin/options.php:497, inc/modules/pre-orders/admin/class-pre-orders-metabox.php:256, inc/modules/pre-orders/admin/options.php:442, inc/modules/spending-goal/admin/options.php:213, inc/modules/storewide-sale/admin/options.php:401, inc/modules/volume-discounts/admin/options.php:473
    42934405msgid "This will exclude the offer for the selected customers."
    42944406msgstr ""
     
    45084620msgstr ""
    45094621
    4510 #: inc/modules/cart-count-favicon/admin/options.php:47, inc/modules/login-popup/admin/options.php:200, inc/modules/product-labels/admin/options.php:205, inc/modules/product-swatches/admin/options.php:108, inc/modules/product-swatches/admin/options.php:167, inc/modules/product-swatches/admin/options.php:425, inc/modules/product-swatches/admin/options.php:530, inc/modules/quick-social-links/admin/options.php:67, inc/modules/recent-sales-notifications/admin/options.php:645, inc/modules/scroll-to-top-button/admin/options.php:256, inc/modules/side-cart/admin/options.php:572, inc/modules/size-chart/admin/options.php:120, inc/modules/sticky-add-to-cart/admin/options.php:172, inc/modules/volume-discounts/admin/options.php:631
     4622#: inc/modules/cart-count-favicon/admin/options.php:47, inc/modules/login-popup/admin/options.php:200, inc/modules/product-labels/admin/options.php:205, inc/modules/product-swatches/admin/options.php:108, inc/modules/product-swatches/admin/options.php:167, inc/modules/product-swatches/admin/options.php:425, inc/modules/product-swatches/admin/options.php:530, inc/modules/quick-social-links/admin/options.php:67, inc/modules/recent-sales-notifications/admin/options.php:645, inc/modules/scroll-to-top-button/admin/options.php:256, inc/modules/side-cart/admin/options.php:572, inc/modules/size-chart/admin/options.php:120, inc/modules/sticky-add-to-cart/admin/options.php:273, inc/modules/volume-discounts/admin/options.php:631
    45114623msgid "Background color"
    45124624msgstr ""
     
    47214833msgstr ""
    47224834
    4723 #: inc/modules/clear-cart/admin/options.php:195, inc/modules/cookie-banner/admin/options.php:82, inc/modules/scroll-to-top-button/admin/options.php:147, inc/modules/spending-goal/admin/options.php:305, inc/modules/sticky-add-to-cart/admin/options.php:157, inc/modules/stock-scarcity/admin/options.php:127
     4835#: inc/modules/clear-cart/admin/options.php:195, inc/modules/cookie-banner/admin/options.php:82, inc/modules/scroll-to-top-button/admin/options.php:147, inc/modules/spending-goal/admin/options.php:305, inc/modules/sticky-add-to-cart/admin/options.php:258, inc/modules/stock-scarcity/admin/options.php:127
    47244836msgid "Style"
    47254837msgstr ""
     
    47414853msgstr ""
    47424854
    4743 #: inc/modules/clear-cart/admin/options.php:255
     4855#: inc/modules/clear-cart/admin/options.php:255, inc/modules/pre-orders/admin/class-pre-orders-metabox.php:416
    47444856msgid "Button Background Color"
    47454857msgstr ""
     
    47494861msgstr ""
    47504862
    4751 #: inc/modules/clear-cart/admin/options.php:271
     4863#: inc/modules/clear-cart/admin/options.php:271, inc/modules/pre-orders/admin/class-pre-orders-metabox.php:332
    47524864msgid "Button Text Color"
    47534865msgstr ""
     
    47654877msgstr ""
    47664878
    4767 #: inc/modules/clear-cart/admin/options.php:327, inc/modules/quick-social-links/admin/options.php:430, inc/modules/quick-view/admin/options.php:456, inc/modules/real-time-search/admin/options.php:123
     4879#: inc/modules/clear-cart/admin/options.php:327, inc/modules/quick-social-links/admin/options.php:430, inc/modules/quick-view/admin/options.php:461, inc/modules/real-time-search/admin/options.php:123
    47684880msgid "If you are using a page builder or a theme that supports shortcodes, then you can output the module using the shortcode above. This might be useful if, for example, you find that you want to control the position of the module output more precisely than with the module settings."
    47694881msgstr ""
     
    48494961msgstr ""
    48504962
    4851 #: inc/modules/complementary-products/admin/options.php:474, inc/modules/quick-view/admin/options.php:409
     4963#: inc/modules/complementary-products/admin/options.php:474, inc/modules/quick-view/admin/options.php:414
    48524964msgid "Before Add to Cart"
    48534965msgstr ""
     
    50475159msgstr ""
    50485160
    5049 #: inc/modules/countdown-timer/admin/options.php:49, inc/modules/pre-orders/admin/options.php:335, inc/modules/pre-orders/admin/options.php:355, inc/modules/storewide-sale/admin/options.php:454
     5161#: inc/modules/countdown-timer/admin/options.php:49, inc/modules/pre-orders/admin/class-pre-orders-metabox.php:84, inc/modules/pre-orders/admin/class-pre-orders-metabox.php:107, inc/modules/pre-orders/admin/options.php:335, inc/modules/pre-orders/admin/options.php:355, inc/modules/storewide-sale/admin/options.php:454
    50505162msgid "WordPress Settings"
    50515163msgstr ""
     
    52115323msgstr ""
    52125324
    5213 #: inc/modules/free-gifts/admin/options.php:148, inc/modules/product-labels/admin/options.php:365, inc/modules/spending-goal/admin/options.php:139, inc/modules/wishlist/admin/options.php:156
    5214 msgid "Exclude Categories"
    5215 msgstr ""
    5216 
    52175325#: inc/modules/free-gifts/admin/options.php:149
    52185326msgid "Exclude specific categories from this campaign."
     
    52215329#: inc/modules/free-gifts/admin/options.php:171
    52225330msgid "Select the product categories that the spending goal will not apply to."
    5223 msgstr ""
    5224 
    5225 #: inc/modules/free-gifts/admin/options.php:192, inc/modules/product-labels/admin/options.php:409
    5226 msgid "Exclude Tags"
    52275331msgstr ""
    52285332
     
    60906194msgstr ""
    60916195
     6196#: inc/modules/pre-orders/admin/class-pre-orders-metabox.php:48
     6197msgid "Pre-Order Mode"
     6198msgstr ""
     6199
     6200#: inc/modules/pre-orders/admin/class-pre-orders-metabox.php:49
     6201msgid "Choose how pre-orders should be handled for this product."
     6202msgstr ""
     6203
     6204#: inc/modules/pre-orders/admin/class-pre-orders-metabox.php:51
     6205msgid "Global Settings (Default)"
     6206msgstr ""
     6207
     6208#: inc/modules/pre-orders/admin/class-pre-orders-metabox.php:52
     6209msgid "Product Specific Settings"
     6210msgstr ""
     6211
     6212#: inc/modules/pre-orders/admin/class-pre-orders-metabox.php:53
     6213msgid "Disable Pre-Orders"
     6214msgstr ""
     6215
     6216#: inc/modules/pre-orders/admin/class-pre-orders-metabox.php:61
     6217msgid "Pre-Order Starts At"
     6218msgstr ""
     6219
     6220#: inc/modules/pre-orders/admin/class-pre-orders-metabox.php:62, inc/modules/pre-orders/admin/options.php:343
     6221msgid "If you want your pre-order settings to take effect immediately, leave the pre-order start empty."
     6222msgstr ""
     6223
     6224#: inc/modules/pre-orders/admin/class-pre-orders-metabox.php:63, inc/modules/pre-orders/admin/class-pre-orders-metabox.php:86, inc/modules/pre-orders/admin/class-pre-orders-metabox.php:109
     6225msgid "Select date and time"
     6226msgstr ""
     6227
     6228#: inc/modules/pre-orders/admin/class-pre-orders-metabox.php:79
     6229msgid "Pre-Order Ends At"
     6230msgstr ""
     6231
     6232#. translators: %1$s: Time zone, %2$s WordPress setting link
     6233#: inc/modules/pre-orders/admin/class-pre-orders-metabox.php:82, inc/modules/pre-orders/admin/options.php:352, inc/modules/storewide-sale/admin/options.php:451
     6234msgid "Leave it empty if you don’t want to have an end date. The times set above are in the %1$s timezone, according to your settings from %2$s."
     6235msgstr ""
     6236
     6237#: inc/modules/pre-orders/admin/class-pre-orders-metabox.php:102
     6238msgid "Expected Shipping Date"
     6239msgstr ""
     6240
     6241#. translators: %1$s: Time zone, %2$s WordPress setting link
     6242#: inc/modules/pre-orders/admin/class-pre-orders-metabox.php:105, inc/modules/pre-orders/admin/options.php:332
     6243msgid "The times set above are in the %1$s timezone, according to your settings from %2$s."
     6244msgstr ""
     6245
     6246#: inc/modules/pre-orders/admin/class-pre-orders-metabox.php:126
     6247msgid "Offer Discount"
     6248msgstr ""
     6249
     6250#: inc/modules/pre-orders/admin/class-pre-orders-metabox.php:127
     6251msgid "Enable to offer a discount for pre-ordering this product."
     6252msgstr ""
     6253
     6254#: inc/modules/pre-orders/admin/class-pre-orders-metabox.php:143
     6255msgid "Fixed Amount"
     6256msgstr ""
     6257
     6258#: inc/modules/pre-orders/admin/class-pre-orders-metabox.php:158
     6259msgid "Discount Amount"
     6260msgstr ""
     6261
     6262#: inc/modules/pre-orders/admin/class-pre-orders-metabox.php:159
     6263msgid "Enter the discount amount (percentage or fixed)."
     6264msgstr ""
     6265
     6266#: inc/modules/pre-orders/admin/class-pre-orders-metabox.php:175
     6267msgid "Who can pre-order this product?"
     6268msgstr ""
     6269
     6270#: inc/modules/pre-orders/admin/class-pre-orders-metabox.php:178
     6271msgid "Specific Roles"
     6272msgstr ""
     6273
     6274#: inc/modules/pre-orders/admin/class-pre-orders-metabox.php:179
     6275msgid "Specific Users"
     6276msgstr ""
     6277
     6278#: inc/modules/pre-orders/admin/class-pre-orders-metabox.php:193
     6279msgid "Allowed Roles"
     6280msgstr ""
     6281
     6282#: inc/modules/pre-orders/admin/class-pre-orders-metabox.php:194, inc/modules/pre-orders/admin/options.php:375
     6283msgid "This will limit the rule to users with these roles."
     6284msgstr ""
     6285
     6286#: inc/modules/pre-orders/admin/class-pre-orders-metabox.php:209
     6287msgid "Allowed Users"
     6288msgstr ""
     6289
     6290#: inc/modules/pre-orders/admin/class-pre-orders-metabox.php:210, inc/modules/pre-orders/admin/options.php:387
     6291msgid "This will limit the rule to the selected customers."
     6292msgstr ""
     6293
     6294#: inc/modules/pre-orders/admin/class-pre-orders-metabox.php:225
     6295msgid "Enable Exclusions"
     6296msgstr ""
     6297
     6298#: inc/modules/pre-orders/admin/class-pre-orders-metabox.php:239
     6299msgid "Excluded Roles"
     6300msgstr ""
     6301
     6302#: inc/modules/pre-orders/admin/class-pre-orders-metabox.php:255
     6303msgid "Excluded Users"
     6304msgstr ""
     6305
     6306#: inc/modules/pre-orders/admin/class-pre-orders-metabox.php:272
     6307msgid "Button Text"
     6308msgstr ""
     6309
     6310#: inc/modules/pre-orders/admin/class-pre-orders-metabox.php:273
     6311msgid "Custom text for the pre-order button."
     6312msgstr ""
     6313
     6314#: inc/modules/pre-orders/admin/class-pre-orders-metabox.php:274, inc/modules/pre-orders/classes/class-pre-orders-rules.php:276
     6315msgid "Pre-Order Now"
     6316msgstr ""
     6317
     6318#: inc/modules/pre-orders/admin/class-pre-orders-metabox.php:286
     6319msgid "Cart Label Text"
     6320msgstr ""
     6321
     6322#: inc/modules/pre-orders/admin/class-pre-orders-metabox.php:287
     6323msgid "Text to display in the cart for pre-order items."
     6324msgstr ""
     6325
     6326#: inc/modules/pre-orders/admin/class-pre-orders-metabox.php:288, inc/modules/pre-orders/admin/options.php:467
     6327msgid "Pre-Order"
     6328msgstr ""
     6329
     6330#: inc/modules/pre-orders/admin/class-pre-orders-metabox.php:300
     6331msgid "Additional Information Text"
     6332msgstr ""
     6333
     6334#: inc/modules/pre-orders/admin/class-pre-orders-metabox.php:301
     6335msgid "Additional text to display on the product page, use <strong>{date}</strong> to display the shipping date."
     6336msgstr ""
     6337
     6338#: inc/modules/pre-orders/admin/class-pre-orders-metabox.php:302, inc/modules/pre-orders/admin/options.php:474
     6339msgid "Ships on {date}"
     6340msgstr ""
     6341
     6342#: inc/modules/pre-orders/admin/class-pre-orders-metabox.php:315
     6343msgid "Choose where to display the pre-order information."
     6344msgstr ""
     6345
     6346#: inc/modules/pre-orders/admin/class-pre-orders-metabox.php:317, inc/modules/pre-orders/admin/options.php:482
     6347msgid "Before Button"
     6348msgstr ""
     6349
     6350#: inc/modules/pre-orders/admin/class-pre-orders-metabox.php:318, inc/modules/pre-orders/admin/options.php:483
     6351msgid "After Button"
     6352msgstr ""
     6353
     6354#: inc/modules/pre-orders/admin/class-pre-orders-metabox.php:345
     6355msgid "Button Text Color (Hover)"
     6356msgstr ""
     6357
     6358#: inc/modules/pre-orders/admin/class-pre-orders-metabox.php:358
     6359msgid "Button Border Color"
     6360msgstr ""
     6361
     6362#: inc/modules/pre-orders/admin/class-pre-orders-metabox.php:371
     6363msgid "Button Border Color (Hover)"
     6364msgstr ""
     6365
     6366#: inc/modules/pre-orders/admin/class-pre-orders-metabox.php:384, inc/modules/pre-orders/admin/options.php:524
     6367msgid "Button Border Width (px)"
     6368msgstr ""
     6369
     6370#: inc/modules/pre-orders/admin/class-pre-orders-metabox.php:400, inc/modules/pre-orders/admin/options.php:534
     6371msgid "Button Border Radius (px)"
     6372msgstr ""
     6373
     6374#: inc/modules/pre-orders/admin/class-pre-orders-metabox.php:429
     6375msgid "Button Background Color (Hover)"
     6376msgstr ""
     6377
    60926378#: inc/modules/pre-orders/admin/options.php:22
    60936379msgid "Pre-order Rule"
     
    61706456msgstr ""
    61716457
    6172 #. translators: %1$s: Time zone, %2$s WordPress setting link
    6173 #: inc/modules/pre-orders/admin/options.php:332
    6174 msgid "The times set above are in the %1$s timezone, according to your settings from %2$s."
    6175 msgstr ""
    6176 
    61776458#: inc/modules/pre-orders/admin/options.php:341
    61786459msgid "Pre-order starts at"
    61796460msgstr ""
    61806461
    6181 #: inc/modules/pre-orders/admin/options.php:343
    6182 msgid "If you want your pre-order settings to take effect immediately, leave the pre-order start empty."
    6183 msgstr ""
    6184 
    61856462#: inc/modules/pre-orders/admin/options.php:348
    61866463msgid "Pre-order ends at"
    61876464msgstr ""
    61886465
    6189 #. translators: %1$s: Time zone, %2$s WordPress setting link
    6190 #: inc/modules/pre-orders/admin/options.php:352, inc/modules/storewide-sale/admin/options.php:451
    6191 msgid "Leave it empty if you don’t want to have an end date. The times set above are in the %1$s timezone, according to your settings from %2$s."
    6192 msgstr ""
    6193 
    6194 #: inc/modules/pre-orders/admin/options.php:375
    6195 msgid "This will limit the rule to users with these roles."
    6196 msgstr ""
    6197 
    6198 #: inc/modules/pre-orders/admin/options.php:387
    6199 msgid "This will limit the rule to the selected customers."
    6200 msgstr ""
    6201 
    6202 #: inc/modules/pre-orders/admin/options.php:467
    6203 msgid "Pre-Order"
    6204 msgstr ""
    6205 
    62066466#: inc/modules/pre-orders/admin/options.php:473
    62076467msgid "Additional information"
    62086468msgstr ""
    62096469
    6210 #: inc/modules/pre-orders/admin/options.php:474
    6211 msgid "Ships on {date}"
    6212 msgstr ""
    6213 
    6214 #: inc/modules/pre-orders/admin/options.php:482
    6215 msgid "Before Button"
    6216 msgstr ""
    6217 
    6218 #: inc/modules/pre-orders/admin/options.php:483
    6219 msgid "After Button"
    6220 msgstr ""
    6221 
    62226470#: inc/modules/pre-orders/admin/options.php:490
    62236471msgid "Label text on cart"
    62246472msgstr ""
    62256473
    6226 #: inc/modules/pre-orders/admin/options.php:546
     6474#: inc/modules/pre-orders/admin/options.php:566
    62276475msgid "Pre-order Modes"
    62286476msgstr ""
    62296477
    6230 #: inc/modules/pre-orders/admin/options.php:548
     6478#: inc/modules/pre-orders/admin/options.php:568
    62316479msgid "Allow only pre-orders"
    62326480msgstr ""
    62336481
    6234 #: inc/modules/pre-orders/admin/options.php:549
     6482#: inc/modules/pre-orders/admin/options.php:569
    62356483msgid "Treat the whole order as pre-order"
    62366484msgstr ""
    62376485
    6238 #: inc/modules/pre-orders/admin/options.php:558
     6486#: inc/modules/pre-orders/admin/options.php:578
    62396487msgid "Use this mode if you want to only allow your customers to either choose pre-order products or available ones."
    62406488msgstr ""
    62416489
    6242 #: inc/modules/pre-orders/admin/options.php:572
     6490#: inc/modules/pre-orders/admin/options.php:592
    62436491msgid "Use this mode if you want to treat the whole order as a pre-order if at least one product is a pre-order."
    62446492msgstr ""
    62456493
    6246 #: inc/modules/pre-orders/admin/options.php:586
     6494#: inc/modules/pre-orders/admin/options.php:606
    62476495msgid "Use this mode if you want to generate separate orders for each pre-order product."
    62486496msgstr ""
    62496497
    6250 #: inc/modules/pre-orders/admin/options.php:600
     6498#: inc/modules/pre-orders/admin/options.php:620
    62516499msgid "Use this mode if you want to generate two separate orders, one for pre-orders and one for in-stock products."
    62526500msgstr ""
     
    70307278msgstr ""
    70317279
    7032 #: inc/modules/quick-view/admin/options.php:320, templates/modules/added-to-cart-popup/admin/layout-1.php:76, templates/modules/added-to-cart-popup/admin/layout-2.php:62, templates/modules/added-to-cart-popup/admin/layout-3.php:75
     7280#: inc/modules/quick-view/admin/options.php:309
     7281msgid "Ajax add to cart"
     7282msgstr ""
     7283
     7284#: inc/modules/quick-view/admin/options.php:325, templates/modules/added-to-cart-popup/admin/layout-1.php:76, templates/modules/added-to-cart-popup/admin/layout-2.php:62, templates/modules/added-to-cart-popup/admin/layout-3.php:75
    70337285msgid "Buy X Get Y"
    70347286msgstr ""
    70357287
    7036 #: inc/modules/quick-view/admin/options.php:338, inc/modules/quick-view/admin/options.php:361, inc/modules/quick-view/admin/options.php:384
     7288#: inc/modules/quick-view/admin/options.php:343, inc/modules/quick-view/admin/options.php:366, inc/modules/quick-view/admin/options.php:389
    70377289msgid "You can display suggested products by enabling certain modules (Bulk Discounts, Buy X Get Y or Frequently Bought Together) from Merchant."
    70387290msgstr ""
    70397291
    7040 #: inc/modules/quick-view/admin/options.php:339
     7292#: inc/modules/quick-view/admin/options.php:344
    70417293msgid "View Bulk Discounts"
    70427294msgstr ""
    70437295
    7044 #: inc/modules/quick-view/admin/options.php:407
     7296#: inc/modules/quick-view/admin/options.php:412
    70457297msgid "Suggested products placement"
    70467298msgstr ""
    70477299
    7048 #: inc/modules/quick-view/admin/options.php:410
     7300#: inc/modules/quick-view/admin/options.php:415
    70497301msgid "After Add to Cart"
    70507302msgstr ""
    70517303
    7052 #: inc/modules/quick-view/admin/options.php:427
     7304#: inc/modules/quick-view/admin/options.php:432
    70537305msgid "Sale price color"
    70547306msgstr ""
    70557307
    7056 #: inc/modules/quick-view/admin/options.php:434
     7308#: inc/modules/quick-view/admin/options.php:439
    70577309msgid "Regular price color"
    70587310msgstr ""
     
    82468498msgstr ""
    82478499
    8248 #: inc/modules/sticky-add-to-cart/admin/options.php:180
     8500#: inc/modules/sticky-add-to-cart/admin/options.php:165
     8501msgid "Sticky Add to Cart will appear on all products except ones selected below."
     8502msgstr ""
     8503
     8504#: inc/modules/sticky-add-to-cart/admin/options.php:173
     8505msgid "Excluded products"
     8506msgstr ""
     8507
     8508#: inc/modules/sticky-add-to-cart/admin/options.php:174
     8509msgid "Select specific products to exclude from sticky add to cart."
     8510msgstr ""
     8511
     8512#: inc/modules/sticky-add-to-cart/admin/options.php:193
     8513msgid "Excluded categories"
     8514msgstr ""
     8515
     8516#: inc/modules/sticky-add-to-cart/admin/options.php:194
     8517msgid "Select categories to exclude from sticky add to cart."
     8518msgstr ""
     8519
     8520#: inc/modules/sticky-add-to-cart/admin/options.php:214
     8521msgid "Excluded tags"
     8522msgstr ""
     8523
     8524#: inc/modules/sticky-add-to-cart/admin/options.php:215
     8525msgid "Select tags to exclude from sticky add to cart."
     8526msgstr ""
     8527
     8528#: inc/modules/sticky-add-to-cart/admin/options.php:235
     8529msgid "Excluded brands"
     8530msgstr ""
     8531
     8532#: inc/modules/sticky-add-to-cart/admin/options.php:236
     8533msgid "Select brands to exclude from sticky add to cart."
     8534msgstr ""
     8535
     8536#: inc/modules/sticky-add-to-cart/admin/options.php:281
    82498537msgid "Content color"
    82508538msgstr ""
  • merchant/trunk/merchant.php

    r3434669 r3458319  
    44 * Plugin URI:  https://athemes.com/merchant
    55 * Description: All-in-one WooCommerce plugin for pre-orders, product labels, buy now, quick view, discount rules and more.
    6  * Version:     2.2.2
     6 * Version:     2.2.3
    77 * Author:      aThemes
    88 * Author URI:  https://athemes.com
     
    1111 * Text Domain: merchant
    1212 * Domain Path: /languages
     13 * Requires PHP: 7.3
    1314 *
    1415 * WC requires at least: 6.0
    15  * WC tested up to: 10.3.0
     16 * WC tested up to: 10.5.0
    1617 *
    1718 * @package Merchant
     
    2526
    2627// Merchant constants.
    27 define( 'MERCHANT_VERSION', '2.2.2' );
     28define( 'MERCHANT_VERSION', '2.2.3' );
    2829define( 'MERCHANT_DB_VERSION', '1.1.0' ); // Update only when the database structure changes. In inc/classes/class-merchant-db-tables.php
    2930define( 'MERCHANT_FILE', __FILE__ );
  • merchant/trunk/readme.txt

    r3434669 r3458319  
    11=== Pre-Orders, Product Labels, Buy Now, Quick View, Discount Rules and More for WooCommerce – Merchant ===
    22Tags: pre-orders, buy now button, product labels, quick view, clear cart
    3 Requires at least: 5.5
    4 Tested up to: 6.8
     3Requires at least: 6.4
     4Tested up to: 6.9
    55Requires PHP: 7.3
    6 Stable tag: 2.2.2
     6Stable tag: 2.2.3
    77Contributors: aThemes
    88License: GPLv3 or later
     
    219219
    220220== Changelog ==
     221= 2.2.3 =
     222* Added - Pre-Orders: Added per-product overrides via metaboxes and improved metabox UI/UX for better consistency with global campaign settings
     223* Added - Buy Now: Added exclusion rules to hide the Buy Now button for specific products, categories, tags, or brands
     224* Added - Quick View: Added AJAX add-to-cart support, allowing products to be added to the cart without page reloads
     225
    221226= 2.2.2 =
    222227* Fixed - Product Labels: Fixed an issue where the 5th label shape was rendering incorrectly on the frontend
  • merchant/trunk/templates/modules/buy-x-get-y/single-product.php

    r3421339 r3458319  
    205205                                            echo wp_kses( $buy_product->get_price_html(), merchant_kses_allowed_tags( array( 'bdi' ) ) );
    206206                                        } else {
    207                                             if ( $offer['discount_type'] === 'percentage' ) {
    208                                                 $buy_product_reduced_price = $product_price - ( $product_price * $offer['discount'] / 100 );
    209                                             } else {
    210                                                 $buy_product_reduced_price = $product_price - ( $offer['discount'] / $offer['quantity'] );
    211                                             }
    212                                             echo wp_kses( wc_format_sale_price( $product_price, $buy_product_reduced_price ), merchant_kses_allowed_tags( array( 'bdi' ) ) );
    213                                         }
     207                                            // Calculate reduced price
     208                                            $product_price_float = (float) $product_price;
     209                                           
     210                                            if ( $offer['discount_type'] === 'percentage' ) {
     211                                                $reduced_price = $product_price_float * ( 1 - (float) $offer['discount'] / 100 );
     212                                            } else {
     213                                                $reduced_price = $product_price_float - ( (float) $offer['discount'] / (float) $offer['quantity'] );
     214                                            }
     215
     216                                            // Round and ensure valid price (positive and less than regular)
     217                                            $reduced_price = round( max( 0, $reduced_price ), wc_get_price_decimals() );
     218                                            if ( $reduced_price >= $product_price_float ) {
     219                                                $reduced_price = max( 0, $product_price_float - 0.01 );
     220                                            }
     221
     222                                            // Store original prices
     223                                            $original_regular = $buy_product->get_regular_price( 'edit' );
     224                                            $original_sale    = $buy_product->get_sale_price( 'edit' );
     225
     226                                            // Set temporary prices for dual-currency compatibility
     227                                            $buy_product->set_regular_price( wc_format_decimal( $product_price_float, false, true ) );
     228                                            $buy_product->set_sale_price( wc_format_decimal( $reduced_price, false, true ) );
     229                                            $buy_product->set_price( wc_format_decimal( $reduced_price, false, true ) );
     230                                           
     231                                            $price_html = $buy_product->get_price_html();
     232
     233                                            // Restore original prices
     234                                            $buy_product->set_regular_price( $original_regular );
     235                                            $buy_product->set_sale_price( $original_sale !== '' ? $original_sale : '' );
     236                                            $buy_product->set_price( '' );
     237
     238                                            echo wp_kses( $price_html, merchant_kses_allowed_tags( array( 'bdi' ) ) );
     239                                        }
    214240                                    } else {
    215241                                        echo '<span class="error">' . esc_html__( 'Out of stock', 'merchant' ) . '</span>';
  • merchant/trunk/vendor/composer/installed.php

    r3434669 r3458319  
    22    'root' => array(
    33        'name' => 'athemes/merchant',
    4         'pretty_version' => 'v2.2.2',
    5         'version' => '2.2.2.0',
    6         'reference' => '368b1116bae4d4f4520855827afa8fc28ef51517',
     4        'pretty_version' => 'v2.2.3',
     5        'version' => '2.2.3.0',
     6        'reference' => '5cbe51d4529ad9865ec49d5645b66645c9afa829',
    77        'type' => 'library',
    88        'install_path' => __DIR__ . '/../../',
     
    1212    'versions' => array(
    1313        'athemes/merchant' => array(
    14             'pretty_version' => 'v2.2.2',
    15             'version' => '2.2.2.0',
    16             'reference' => '368b1116bae4d4f4520855827afa8fc28ef51517',
     14            'pretty_version' => 'v2.2.3',
     15            'version' => '2.2.3.0',
     16            'reference' => '5cbe51d4529ad9865ec49d5645b66645c9afa829',
    1717            'type' => 'library',
    1818            'install_path' => __DIR__ . '/../../',
Note: See TracChangeset for help on using the changeset viewer.