Changeset 3441213
- Timestamp:
- 01/16/2026 06:56:17 PM (3 months ago)
- Location:
- discko/trunk
- Files:
-
- 2 added
- 8 edited
-
admin/admin-scripts.js (modified) (1 diff)
-
admin/admin-settings-new.php (modified) (1 diff)
-
admin/admin-styles.css (modified) (1 diff)
-
admin/select2.min.css (added)
-
admin/select2.min.js (added)
-
discko.php (modified) (9 diffs)
-
elementor/discko-widget.php (modified) (6 diffs)
-
public/discko-button.js (modified) (4 diffs)
-
public/discko-styles.css (modified) (2 diffs)
-
readme.txt (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
discko/trunk/admin/admin-scripts.js
r3440218 r3441213 28 28 if ($('.discko-color-picker').length) { 29 29 $('.discko-color-picker').wpColorPicker(); 30 } 31 32 // Initialize Select2 for font selector 33 if ($('.discko-font-select').length && $.fn.select2) { 34 $('.discko-font-select').select2({ 35 placeholder: disckoAdmin.selectFont || 'Select a font...', 36 allowClear: true, 37 width: '300px' 38 }); 30 39 } 31 40 -
discko/trunk/admin/admin-settings-new.php
r3440185 r3441213 390 390 </div> 391 391 392 <!-- Section 3: Modal Size (Mobile) --> 393 <div class="discko-settings-card discko-section-full" id="discko-modal-size-section"> 394 <h4><?php esc_html_e('Modal Size (Mobile)', 'discko'); ?></h4> 395 <table class="form-table"> 396 <tr> 397 <th><label for="discko_modal_mobile_width"><?php esc_html_e('Modal Width on Mobile', 'discko'); ?></label></th> 398 <td> 399 <input type="text" id="discko_modal_mobile_width" name="discko_modal_mobile_width" 400 value="<?php echo esc_attr(get_option('discko_modal_mobile_width', '95%')); ?>" 401 class="small-text" /> 402 </td> 403 </tr> 404 <tr> 405 <th><label for="discko_modal_mobile_height"><?php esc_html_e('Modal Height on Mobile', 'discko'); ?></label></th> 406 <td> 407 <input type="text" id="discko_modal_mobile_height" name="discko_modal_mobile_height" 408 value="<?php echo esc_attr(get_option('discko_modal_mobile_height', '85vh')); ?>" 409 class="small-text" /> 410 </td> 411 </tr> 412 </table> 392 <!-- Section 3: Modal Customization --> 393 <div class="discko-section-row"> 394 <!-- Modal Form Style --> 395 <div class="discko-settings-card"> 396 <h4><?php esc_html_e('Modal Form Style', 'discko'); ?></h4> 397 <table class="form-table"> 398 <tr> 399 <th><label for="discko_modal_primary_color"><?php esc_html_e('Primary Color', 'discko'); ?></label></th> 400 <td> 401 <input type="text" id="discko_modal_primary_color" name="discko_modal_primary_color" 402 value="<?php echo esc_attr(get_option('discko_modal_primary_color', '')); ?>" 403 class="discko-color-picker" /> 404 <p class="description"><?php esc_html_e('Override the form primary color (buttons, links, etc.). Leave empty to use default.', 'discko'); ?></p> 405 </td> 406 </tr> 407 <tr> 408 <th><label for="discko_modal_font_family"><?php esc_html_e('Font Family', 'discko'); ?></label></th> 409 <td> 410 <?php 411 $discko_current_font = get_option('discko_modal_font_family', ''); 412 413 // Get fonts from Elementor if available, otherwise use fallback list 414 if (class_exists('\Elementor\Fonts')) { 415 $discko_elementor_fonts = \Elementor\Fonts::get_fonts(); 416 $discko_fonts = array(); 417 foreach ($discko_elementor_fonts as $discko_font_name => $discko_font_type) { 418 $discko_fonts[] = $discko_font_name; 419 } 420 } else { 421 // Fallback list when Elementor is not installed 422 $discko_fonts = array( 423 'Arial', 424 'Courier New', 425 'Georgia', 426 'Helvetica', 427 'Lucida Sans Unicode', 428 'Tahoma', 429 'Times New Roman', 430 'Trebuchet MS', 431 'Verdana' 432 ); 433 } 434 ?> 435 <select id="discko_modal_font_family" 436 name="discko_modal_font_family" 437 class="discko-font-select" 438 style="width: 300px;"> 439 <option value=""><?php esc_html_e('Default', 'discko'); ?></option> 440 <?php foreach ($discko_fonts as $discko_font_name) : ?> 441 <option value="<?php echo esc_attr($discko_font_name); ?>" <?php selected($discko_current_font, $discko_font_name); ?>> 442 <?php echo esc_html($discko_font_name); ?> 443 </option> 444 <?php endforeach; ?> 445 </select> 446 <p class="description"><?php esc_html_e('Override the form font family. Select "Default" to use the form default.', 'discko'); ?></p> 447 </td> 448 </tr> 449 </table> 450 </div> 451 452 <!-- Modal Size --> 453 <div class="discko-settings-card" id="discko-modal-size-section"> 454 <h4><?php esc_html_e('Modal Size', 'discko'); ?></h4> 455 <table class="form-table"> 456 <!-- Desktop --> 457 <tr> 458 <th><label><?php esc_html_e('Desktop', 'discko'); ?></label></th> 459 <td> 460 <div class="discko-size-fields"> 461 <?php 462 $discko_desktop_width_value = get_option('discko_modal_desktop_width_value', ''); 463 $discko_desktop_width_unit = get_option('discko_modal_desktop_width_unit', '%'); 464 $discko_desktop_height_value = get_option('discko_modal_desktop_height_value', ''); 465 $discko_desktop_height_unit = get_option('discko_modal_desktop_height_unit', '%'); 466 ?> 467 <div class="discko-size-field"> 468 <label><?php esc_html_e('Width', 'discko'); ?></label> 469 <div class="discko-input-with-unit"> 470 <input type="number" 471 id="discko_modal_desktop_width_value" 472 name="discko_modal_desktop_width_value" 473 value="<?php echo esc_attr($discko_desktop_width_value); ?>" 474 placeholder="50" 475 min="0" 476 step="1" /> 477 <select id="discko_modal_desktop_width_unit" name="discko_modal_desktop_width_unit"> 478 <option value="px" <?php selected($discko_desktop_width_unit, 'px'); ?>>px</option> 479 <option value="%" <?php selected($discko_desktop_width_unit, '%'); ?>>%</option> 480 </select> 481 </div> 482 </div> 483 <div class="discko-size-field"> 484 <label><?php esc_html_e('Height', 'discko'); ?></label> 485 <div class="discko-input-with-unit"> 486 <input type="number" 487 id="discko_modal_desktop_height_value" 488 name="discko_modal_desktop_height_value" 489 value="<?php echo esc_attr($discko_desktop_height_value); ?>" 490 placeholder="60" 491 min="0" 492 step="1" /> 493 <select id="discko_modal_desktop_height_unit" name="discko_modal_desktop_height_unit"> 494 <option value="px" <?php selected($discko_desktop_height_unit, 'px'); ?>>px</option> 495 <option value="%" <?php selected($discko_desktop_height_unit, '%'); ?>>%</option> 496 </select> 497 </div> 498 </div> 499 </div> 500 </td> 501 </tr> 502 <!-- Mobile --> 503 <tr> 504 <th><label><?php esc_html_e('Mobile', 'discko'); ?></label></th> 505 <td> 506 <div class="discko-size-fields"> 507 <?php 508 $discko_mobile_width_value = get_option('discko_modal_mobile_width_value', ''); 509 $discko_mobile_width_unit = get_option('discko_modal_mobile_width_unit', 'vw'); 510 $discko_mobile_height_value = get_option('discko_modal_mobile_height_value', ''); 511 $discko_mobile_height_unit = get_option('discko_modal_mobile_height_unit', 'vh'); 512 ?> 513 <div class="discko-size-field"> 514 <label><?php esc_html_e('Width', 'discko'); ?></label> 515 <div class="discko-input-with-unit"> 516 <input type="number" 517 id="discko_modal_mobile_width_value" 518 name="discko_modal_mobile_width_value" 519 value="<?php echo esc_attr($discko_mobile_width_value); ?>" 520 placeholder="85" 521 min="0" 522 max="100" 523 step="1" /> 524 <select id="discko_modal_mobile_width_unit" name="discko_modal_mobile_width_unit"> 525 <option value="vw" <?php selected($discko_mobile_width_unit, 'vw'); ?>>vw</option> 526 <option value="%" <?php selected($discko_mobile_width_unit, '%'); ?>>%</option> 527 </select> 528 </div> 529 </div> 530 <div class="discko-size-field"> 531 <label><?php esc_html_e('Height', 'discko'); ?></label> 532 <div class="discko-input-with-unit"> 533 <input type="number" 534 id="discko_modal_mobile_height_value" 535 name="discko_modal_mobile_height_value" 536 value="<?php echo esc_attr($discko_mobile_height_value); ?>" 537 placeholder="50" 538 min="0" 539 max="100" 540 step="1" /> 541 <select id="discko_modal_mobile_height_unit" name="discko_modal_mobile_height_unit"> 542 <option value="vh" <?php selected($discko_mobile_height_unit, 'vh'); ?>>vh</option> 543 <option value="%" <?php selected($discko_mobile_height_unit, '%'); ?>>%</option> 544 </select> 545 </div> 546 </div> 547 </div> 548 </td> 549 </tr> 550 </table> 551 </div> 413 552 </div> 414 553 -
discko/trunk/admin/admin-styles.css
r3440218 r3441213 1143 1143 gap: 16px; 1144 1144 } 1145 1146 /* ============================================ 1147 Input with Unit (Elementor style) 1148 ============================================ */ 1149 1150 .discko-size-fields { 1151 display: flex; 1152 gap: 24px; 1153 flex-wrap: wrap; 1154 } 1155 1156 .discko-size-field { 1157 display: flex; 1158 flex-direction: column; 1159 gap: 6px; 1160 } 1161 1162 .discko-size-field > label { 1163 font-size: 12px; 1164 font-weight: 500; 1165 color: #666; 1166 text-transform: uppercase; 1167 letter-spacing: 0.3px; 1168 } 1169 1170 .discko-input-with-unit { 1171 display: flex; 1172 border: 1px solid #8c8f94; 1173 border-radius: 4px; 1174 overflow: hidden; 1175 background: #fff; 1176 transition: border-color 0.2s ease, box-shadow 0.2s ease; 1177 } 1178 1179 .discko-input-with-unit:focus-within { 1180 border-color: #ff6b35; 1181 box-shadow: 0 0 0 1px #ff6b35; 1182 } 1183 1184 .discko-input-with-unit input[type="number"] { 1185 width: 70px; 1186 border: none; 1187 padding: 6px 10px; 1188 font-size: 13px; 1189 background: transparent; 1190 -moz-appearance: textfield; 1191 margin: 0; 1192 box-shadow: none; 1193 } 1194 1195 .discko-input-with-unit input[type="number"]:focus { 1196 outline: none; 1197 box-shadow: none; 1198 } 1199 1200 /* Show spinner arrows */ 1201 .discko-input-with-unit input[type="number"]::-webkit-outer-spin-button, 1202 .discko-input-with-unit input[type="number"]::-webkit-inner-spin-button { 1203 -webkit-appearance: inner-spin-button; 1204 opacity: 1; 1205 height: auto; 1206 cursor: pointer; 1207 } 1208 1209 .discko-input-with-unit select { 1210 border: none; 1211 border-left: 1px solid #e0e0e0; 1212 padding: 6px 8px; 1213 font-size: 12px; 1214 font-weight: 500; 1215 background: #f5f5f5; 1216 color: #666; 1217 cursor: pointer; 1218 min-width: 45px; 1219 margin: 0; 1220 border-radius: 0; 1221 } 1222 1223 .discko-input-with-unit select:focus { 1224 outline: none; 1225 background: #eee; 1226 } 1227 1228 .discko-input-with-unit select:hover { 1229 background: #eee; 1230 } -
discko/trunk/discko.php
r3440185 r3441213 4 4 * Plugin URI: https://discko.io/plugin-wordpress 5 5 * Description: Integrates Discko.io into your website 6 * Version: 1. 1.16 * Version: 1.2.0 7 7 * Author: Discko 8 8 * Author URI: https://discko.io … … 17 17 18 18 // Define plugin constants 19 define('DISCKO_VERSION', '1. 1.1');19 define('DISCKO_VERSION', '1.2.0'); 20 20 define('DISCKO_PLUGIN_DIR', plugin_dir_path(__FILE__)); 21 21 define('DISCKO_PLUGIN_URL', plugin_dir_url(__FILE__)); … … 180 180 )); 181 181 182 register_setting('discko_settings_group', 'discko_modal_mobile_width', array( 183 'type' => 'string', 184 'sanitize_callback' => array($this, 'sanitize_modal_size'), 185 'default' => '95%' 186 )); 187 188 register_setting('discko_settings_group', 'discko_modal_mobile_height', array( 189 'type' => 'string', 190 'sanitize_callback' => array($this, 'sanitize_modal_size'), 191 'default' => '85vh' 182 // Desktop modal size 183 register_setting('discko_settings_group', 'discko_modal_desktop_width_value', array( 184 'type' => 'integer', 185 'sanitize_callback' => array($this, 'sanitize_desktop_width'), 186 'default' => '' 187 )); 188 189 register_setting('discko_settings_group', 'discko_modal_desktop_width_unit', array( 190 'type' => 'string', 191 'sanitize_callback' => array($this, 'sanitize_size_unit'), 192 'default' => '%' 193 )); 194 195 register_setting('discko_settings_group', 'discko_modal_desktop_height_value', array( 196 'type' => 'integer', 197 'sanitize_callback' => array($this, 'sanitize_desktop_height'), 198 'default' => '' 199 )); 200 201 register_setting('discko_settings_group', 'discko_modal_desktop_height_unit', array( 202 'type' => 'string', 203 'sanitize_callback' => array($this, 'sanitize_size_unit'), 204 'default' => '%' 205 )); 206 207 // Mobile modal size 208 register_setting('discko_settings_group', 'discko_modal_mobile_width_value', array( 209 'type' => 'integer', 210 'sanitize_callback' => array($this, 'sanitize_mobile_width'), 211 'default' => '' 212 )); 213 214 register_setting('discko_settings_group', 'discko_modal_mobile_width_unit', array( 215 'type' => 'string', 216 'sanitize_callback' => array($this, 'sanitize_size_unit'), 217 'default' => 'vw' 218 )); 219 220 register_setting('discko_settings_group', 'discko_modal_mobile_height_value', array( 221 'type' => 'integer', 222 'sanitize_callback' => array($this, 'sanitize_mobile_height'), 223 'default' => '' 224 )); 225 226 register_setting('discko_settings_group', 'discko_modal_mobile_height_unit', array( 227 'type' => 'string', 228 'sanitize_callback' => array($this, 'sanitize_size_unit'), 229 'default' => 'vh' 192 230 )); 193 231 … … 227 265 'default' => '' 228 266 )); 267 268 register_setting('discko_settings_group', 'discko_modal_primary_color', array( 269 'type' => 'string', 270 'sanitize_callback' => array($this, 'sanitize_hex_color_optional'), 271 'default' => '' 272 )); 273 274 register_setting('discko_settings_group', 'discko_modal_font_family', array( 275 'type' => 'string', 276 'sanitize_callback' => 'sanitize_text_field', 277 'default' => '' 278 )); 279 } 280 281 /** 282 * Sanitize hex color (optional - allows empty) 283 */ 284 public function sanitize_hex_color_optional($value) { 285 if (empty($value)) { 286 return ''; 287 } 288 return sanitize_hex_color($value); 229 289 } 230 290 … … 321 381 322 382 /** 323 * Sanitize modal size (width/height) 324 */ 325 public function sanitize_modal_size($value) { 326 // Allow percentage or vh/vw units 327 if (preg_match('/^(\d+)(%)|(vh)|(vw)$/', $value)) { 328 return $value; 329 } 330 // Default fallback 331 return '85vh'; 383 * Sanitize size unit 384 */ 385 public function sanitize_size_unit($value) { 386 $allowed = array('px', '%', 'vw', 'vh'); 387 return in_array($value, $allowed) ? $value : 'px'; 388 } 389 390 /** 391 * Sanitize desktop width (default: 50) 392 */ 393 public function sanitize_desktop_width($value) { 394 $value = absint($value); 395 return ($value === 0 || $value === '') ? 50 : $value; 396 } 397 398 /** 399 * Sanitize desktop height (default: 60) 400 */ 401 public function sanitize_desktop_height($value) { 402 $value = absint($value); 403 return ($value === 0 || $value === '') ? 60 : $value; 404 } 405 406 /** 407 * Sanitize mobile width (default: 85) 408 */ 409 public function sanitize_mobile_width($value) { 410 $value = absint($value); 411 return ($value === 0 || $value === '') ? 85 : $value; 412 } 413 414 /** 415 * Sanitize mobile height (default: 50) 416 */ 417 public function sanitize_mobile_height($value) { 418 $value = absint($value); 419 return ($value === 0 || $value === '') ? 50 : $value; 332 420 } 333 421 … … 344 432 wp_enqueue_script('wp-color-picker'); 345 433 434 // Select2 for font selector (bundled locally) 435 wp_enqueue_style( 436 'discko-select2', 437 DISCKO_PLUGIN_URL . 'admin/select2.min.css', 438 array(), 439 '4.1.0' 440 ); 441 wp_enqueue_script( 442 'discko-select2', 443 DISCKO_PLUGIN_URL . 'admin/select2.min.js', 444 array('jquery'), 445 '4.1.0', 446 true 447 ); 448 346 449 wp_enqueue_style( 347 450 'discko-admin-styles', 348 451 DISCKO_PLUGIN_URL . 'admin/admin-styles.css', 349 array( ),452 array('discko-select2'), 350 453 DISCKO_VERSION 351 454 ); … … 354 457 'discko-admin-scripts', 355 458 DISCKO_PLUGIN_URL . 'admin/admin-scripts.js', 356 array('jquery', 'wp-color-picker' ),459 array('jquery', 'wp-color-picker', 'discko-select2'), 357 460 DISCKO_VERSION, 358 461 true … … 369 472 'cropIcon' => __('Crop Icon', 'discko'), 370 473 'resetCrop' => __('Reset Crop', 'discko'), 371 'defaultHoverText' => __('Have a project in mind? Let\'s prepare your appointment in 3 minutes', 'discko') 474 'defaultHoverText' => __('Have a project in mind? Let\'s prepare your appointment in 3 minutes', 'discko'), 475 'selectFont' => __('Search for a font...', 'discko') 372 476 )); 373 477 } … … 411 515 'iconUrl' => esc_url($this->get_icon_url()), 412 516 'iconCropData' => get_option('discko_icon_crop_data', ''), 413 'modalMobileWidth' => sanitize_text_field(get_option('discko_modal_mobile_width', '95%')), 414 'modalMobileHeight' => sanitize_text_field(get_option('discko_modal_mobile_height', '85vh')) 517 'modalDesktopWidth' => intval(get_option('discko_modal_desktop_width_value', 50)) . sanitize_text_field(get_option('discko_modal_desktop_width_unit', '%')), 518 'modalDesktopHeight' => intval(get_option('discko_modal_desktop_height_value', 60)) . sanitize_text_field(get_option('discko_modal_desktop_height_unit', '%')), 519 'modalMobileWidth' => intval(get_option('discko_modal_mobile_width_value', 85)) . sanitize_text_field(get_option('discko_modal_mobile_width_unit', 'vw')), 520 'modalMobileHeight' => intval(get_option('discko_modal_mobile_height_value', 50)) . sanitize_text_field(get_option('discko_modal_mobile_height_unit', 'vh')), 521 'modalPrimaryColor' => sanitize_text_field(get_option('discko_modal_primary_color', '')), 522 'modalFontFamily' => sanitize_text_field(get_option('discko_modal_font_family', '')) 415 523 )); 416 524 } -
discko/trunk/elementor/discko-widget.php
r3440185 r3441213 108 108 ); 109 109 110 // TODO: Uncomment when ready to activate color and font customization111 /*112 110 $this->add_control( 113 111 'primary_color', … … 129 127 ] 130 128 ); 131 */132 129 133 130 $this->end_controls_section(); … … 218 215 } 219 216 220 // TODO: Uncomment when ready to activate color and font customization221 /*222 217 // Build URL with parameters 223 218 $params = []; … … 281 276 $url = $url . $separator . http_build_query($params); 282 277 } 283 */284 278 285 279 // Sanitize URL … … 308 302 <# 309 303 var baseUrl = '<?php echo esc_js($form_url); ?>'; 310 311 // TODO: Uncomment when ready to activate color and font customization312 /*313 304 var params = []; 314 305 … … 377 368 finalUrl = baseUrl + separator + params.join('&'); 378 369 } 379 */380 381 // Use base URL without parameters for now382 var finalUrl = baseUrl;383 370 #> 384 371 <iframe -
discko/trunk/public/discko-button.js
r3440185 r3441213 27 27 iconUrl: disckoData.iconUrl, 28 28 iconCropData: disckoData.iconCropData || null, 29 modalMobileWidth: disckoData.modalMobileWidth || '95%', 30 modalMobileHeight: disckoData.modalMobileHeight || '85vh' 29 modalDesktopWidth: disckoData.modalDesktopWidth || '50%', 30 modalDesktopHeight: disckoData.modalDesktopHeight || '60%', 31 modalMobileWidth: disckoData.modalMobileWidth || '85vw', 32 modalMobileHeight: disckoData.modalMobileHeight || '50vh', 33 modalPrimaryColor: disckoData.modalPrimaryColor || '', 34 modalFontFamily: disckoData.modalFontFamily || '' 31 35 }; 32 36 … … 155 159 modalContent.className = 'discko-modal-content'; 156 160 157 // Apply mobile modal dimensions as CSS custom properties 161 // Apply modal dimensions as CSS custom properties 162 modalContent.style.setProperty('--modal-desktop-width', config.modalDesktopWidth); 163 modalContent.style.setProperty('--modal-desktop-height', config.modalDesktopHeight); 158 164 modalContent.style.setProperty('--modal-mobile-width', config.modalMobileWidth); 159 165 modalContent.style.setProperty('--modal-mobile-height', config.modalMobileHeight); … … 296 302 297 303 /** 304 * Build form URL with parameters 305 */ 306 function buildFormUrl() { 307 var url = config.formUrl; 308 var params = []; 309 310 // Add primary color parameter if set 311 if (config.modalPrimaryColor) { 312 var color = config.modalPrimaryColor.replace('#', ''); 313 params.push('primary_color=' + encodeURIComponent(color)); 314 } 315 316 // Add font family parameter if set 317 if (config.modalFontFamily) { 318 params.push('font_family=' + encodeURIComponent(config.modalFontFamily)); 319 } 320 321 // Append parameters to URL 322 if (params.length > 0) { 323 var separator = url.indexOf('?') !== -1 ? '&' : '?'; 324 url = url + separator + params.join('&'); 325 } 326 327 return url; 328 } 329 330 /** 298 331 * Open modal 299 332 */ … … 305 338 loader.style.display = 'flex'; 306 339 307 // Load iframe 308 modalIframe.src = config.formUrl;340 // Load iframe with parameters 341 modalIframe.src = buildFormUrl(); 309 342 310 343 // Show modal with animation -
discko/trunk/public/discko-styles.css
r3438964 r3441213 200 200 .discko-modal-content { 201 201 position: relative; 202 width: 90%;203 max-width: 9 00px;204 height: 90vh;205 max-height: 700px;202 width: var(--modal-desktop-width, 50%); 203 max-width: 95vw; 204 height: var(--modal-desktop-height, 60%); 205 max-height: 95vh; 206 206 background: #fff; 207 207 border-radius: 16px; … … 342 342 /* Full screen modal on mobile */ 343 343 .discko-modal-content { 344 width: var(--modal-mobile-width, 95%);345 height: var(--modal-mobile-height, 85vh);344 width: var(--modal-mobile-width, 85vw); 345 height: var(--modal-mobile-height, 50vh); 346 346 max-height: none; 347 347 border-radius: 12px; -
discko/trunk/readme.txt
r3440185 r3441213 5 5 Tested up to: 6.9 6 6 Requires PHP: 7.4 7 Stable tag: 1. 1.17 Stable tag: 1.2.0 8 8 License: GPLv2 or later 9 9 License URI: https://www.gnu.org/licenses/gpl-2.0.html … … 162 162 == Changelog == 163 163 164 = 1.2.0 = 165 166 **New Features** 167 * Modal form styling: Added primary color and font family customization for the floating button modal 168 * Modal size customization: Configure desktop and mobile dimensions separately with px/% or vw/vh units 169 * Elementor widget styling: Enabled primary color and font family options in Elementor widget 170 * Searchable font selector: Select2-powered font dropdown with 1400+ fonts when Elementor is installed 171 172 **Enhancements** 173 * Elementor-style size inputs: Number fields with unit selector (px, %, vw, vh) for modal dimensions 174 * Smart default values: Empty fields show placeholder with default values (Desktop: 50%×60%, Mobile: 85vw×50vh) 175 * Improved admin UI: Reorganized Modal Customization section with Form Style and Size cards 176 177 **Technical** 178 * Added 8 new settings for modal dimensions (desktop/mobile × width/height × value/unit) 179 * New settings for modal styling: `discko_modal_primary_color`, `discko_modal_font_family` 180 * Added Select2 library for enhanced font selection 181 * New sanitization functions with automatic default value fallback 182 164 183 = 1.1.1 = 165 184
Note: See TracChangeset
for help on using the changeset viewer.