1( function( $ ) { 2 'use strict'; 3 4 window.EstatikFramework = { initFields: initFields }; 5 6 /** 7 * @param size 8 * @returns {string} 9 */ 10 function humanFileSize(size) { 11 var i = Math.floor( Math.log(size) / Math.log(1024) ); 12 return ( size / Math.pow(1024, i) ).toFixed(2) * 1 + ' ' + ['B', 'kB', 'MB', 'GB', 'TB'][i]; 13 } 14 15 var uploadFiles = []; 16 17 /** 18 * Upload and append files to the uploader area. 19 * 20 * @param $wrapper 21 * @param files 22 */ 23 function esUploadFiles( $wrapper, files ) { 24 var item = $wrapper.find( '.js-es-hidden-item' ).html(); 25 var form_data; 26 27 console.log(files); 28 29 Array.prototype.forEach.call( files, function( file ) { 30 var reader = new FileReader(); 31 var uniqid = Date.now() + Math.random(); 32 33 uploadFiles[ uniqid ] = file; 34 35 reader.addEventListener( 'load', function( event ) { 36 var html = item 37 .replaceAll( '{name}', file.name ) 38 .replaceAll( '{caption}', '' ) 39 .replaceAll( '{size}', humanFileSize( file.size ) ); 40 41 var $html = $( html ).addClass( 'es-media--uploading' ); 42 $html.find( '.es-media__image img' ).attr( 'src', event.target.result ); 43 $html.data( 'uniqid', uniqid ); 44 $wrapper.find( '.js-files-list' ).append( $html ); 45 46 form_data = new FormData(); 47 form_data.append( 'file', file ); 48 form_data.append( '_file-nonce', $wrapper.data( 'nonce' ) ); 49 form_data.append( 'action', $wrapper.data( 'ajax-action' ) ); 50 form_data.append( 'mime_allowed', $wrapper.data( 'mime-allowed' ) ); 51 52 $.ajax( { 53 type: 'POST', 54 url: Es_Framework.ajaxurl, 55 contentType: false, 56 processData: false, 57 dataType: 'json', 58 data: form_data, 59 success:function( response ) { 60 $html.removeClass( 'es-media--uploading' ); 61 if ( response.status === 'success' ) { 62 $html.find( '.js-es-caption' ).data( 'attachment-id', response.attachment_id ); 63 $html.find( '.js-es-media-field' ).val( response.attachment_id ); 64 } else { 65 $html.addClass( 'es-media--failed' ) 66 .find( '.js-es-file__msg' ) 67 .addClass( 'es-file__msg--error' ) 68 .html( Es_Framework.tr.failed ); 69 } 70 }, 71 xhr: function(){ 72 // get the native XmlHttpRequest object 73 var xhr = $.ajaxSettings.xhr() ; 74 // set the onprogress event handler 75 xhr.upload.onprogress = function( evt ) { 76 var progress = evt.loaded / evt.total * 100; 77 $html.find( '.js-es-progress' ).animate( {width: progress + '%'}, 400 ); 78 } ; 79 // set the onload event handler 80 xhr.upload.onload = function() { 81 $html.find( '.js-es-progress' ).animate( {width:'100%'}, 400 ); 82 }; 83 return xhr ; 84 } 85 } ).fail( function() { 86 $html.addClass( 'es-media--failed' ) 87 .find( '.js-es-file__msg' ) 88 .addClass( 'es-file__msg--error' ) 89 .html( Es_Framework.tr.failed ); 90 } ); 91 } ); 92 93 reader.readAsDataURL( file ); 94 } ); 95 } 96 97 function initFields( $context ) { 98 99 $context = $context || $( document ); 100 101 $context.find( '.js-es-field__date' ).each( function() { 102 var format = $( this ).data( 'date-format' ) || 'm/d/y'; 103 if ( ! $( this ).is( ':disabled' ) ) { 104 $( this ).datetimepicker( { 105 format: format, 106 dateFormat: format, 107 timepicker: false 108 } ); 109 } 110 } ); 111 112 $context.find( '.js-es-f-select2' ).each( function() { 113 var config = {}; 114 var $el = $( this ); 115 116 $el.select2( config ); 117 } ); 118 119 $context.find( '.js-es-field__date-time' ).each( function() { 120 var format = $( this ).data( 'date-format' ) || 'm/d/y'; 121 if ( ! $( this ).is( ':disabled' ) ) { 122 $( this ).datetimepicker( { 123 format: format, 124 dateFormat: format, 125 timepicker: true 126 } ); 127 } 128 } ); 129 130 if ( typeof $.fn.wpColorPicker !== 'undefined' ) { 131 $( '.js-es-iris-color-picker:not([disabled])', $context ).wpColorPicker(); 132 } 133 134 $context.find( '.js-es-items' ).each( function() { 135 var $list = $( this ); 136 137 $( this ).sortable( { 138 change: function() {
139 $list.find( 'input' ).eq( 0 ).trigger( 'change' ); 140 } 141 } ); 142 $( this ).disableSelection(); 143 } ); 144 145 $context.find( '.js-es-select2-search:visible:not(:disabled)' ).each( function() { 146 var $field = $( this ); 147 148 if ( ! $field.hasClass( 'select2-hidden-accessible' ) ) { 149 var config = { 150 width: '100%', 151 }; 152 153 if ( $field.data( 'placeholder' ) ) { 154 config.placeholder = $field.data( 'placeholder' ); 155 } 156 157 if ( $field.data( 'formatNoMatches' ) ) { 158 config.formatNoMatches = function () { 159 return $field.data( 'formatNoMatches' ) 160 } 161 } 162 163 if ( $field.data( 'request' ) ) { 164 config.ajax = { 165 delay: 300, 166 url: Es_Framework.ajaxurl, 167 dataType: 'json', 168 data: function (params) { 169 var request_params = $field.data( 'request' ); 170 171 if ( params.hasOwnProperty( 'term' ) ) { 172 request_params.s = params.term; 173 } 174 175 return request_params; 176 }, 177 }; 178 } 179 180 $field.select2( config ); 181 } 182 } ); 183 184 $context.find( '.js-es-entities-items-search:visible:not(:disabled)' ).each( function() { 185 var $field = $( this ); 186 187 if ( ! $field.hasClass( 'select2-hidden-accessible' ) ) { 188 $field.select2( { 189 width: '100%', 190 dropdownCssClass: "es-select2__dropdown", 191 placeholder: $field.data( 'placeholder' ), 192 ajax: { 193 delay: 300, 194 url: Es_Framework.ajaxurl, 195 dataType: 'json', 196 data: function (params) { 197 var request_params = $field.data( 'request' ); 198 199 if ( params.hasOwnProperty( 'term' ) ) { 200 request_params.s = params.term; 201 } 202 203 return request_params; 204 }, 205 processResults: function (data) { 206 data = data || {}; 207 208 if ( ! data.message ) { 209 data = []; 210 $field.find( 'option' ).each(function ( i, e ) { 211 var object = { id: e.value, text: e.text }; 212 if ( $.inArray( object, data.items ) === -1 ) { 213 data.push( object ); 214 } 215 } ); 216 } else { 217 data = data.message; 218 } 219 220 // Transforms the top-level key of the response object from 'items' to 'results' 221 return { 222 results: data 223 }; 224 } 225 } 226 } ).change( function() { 227 var value = $( this ).val(); 228 var item_markup = $( this ).data( 'item-markup' ); 229 var $field = $( this ); 230 231 if ( value ) { 232 $field.prop( 'disabled', 'disabled' ).attr( 'disabled', 'disabled' ); 233 234 $.get( Es_Framework.ajaxurl, {value: value, action: $( this ).data( 'action' ) }, function( response ) { 235 response = response || {}; 236 237 if ( response.id ) { 238 var $wrapper = $field.closest( '.js-es-entities-list-field' ).find( '.js-es-items' ); 239 var $existing_item = $wrapper.find( '.entity-box--' + response.id ); 240 241 if ( ! $existing_item.length ) { 242 item_markup = item_markup 243 .replace( '{value}', response.id ) 244 .replace( '{id}', response.id ) 245 .replace( '{title}', response.text ) 246 .replace( '{subtitle}', response.subtitle ) 247 .replace( '{image}', response.image ); 248 249 $wrapper.append( item_markup ); 250 251 $field.val( null ).trigger( 'change' ); 252 } else { 253 $existing_item.animate( {opacity: 0.5}, 300, function() { 254 $existing_item.animate( {opacity: 1}, 300 ); 255 } ); 256 } 257 } 258 }, 'json' ).always( function() { 259 $field.removeProp( 'disabled' ).removeAttr( 'disabled' ); 260 } ); 261 } 262 } ); 263 } 264 } ); 265 266 $context.find( '.js-es-phone-field:visible:not(:disabled)' ).each( function() { 267 var $field = $( this ); 268 269 if ( ! $field.hasClass( 'select2-hidden-accessible' ) ) { 270 271 $field.select2({ 272 minimumResultsForSearch: -1, 273 dropdownCssClass: 'es-phone-dropdown content-font es-select2__dropdown--positioning', 274 escapeMarkup: function (m) { 275 return m; 276 }, 277 templateSelection: function (option) { 278 var country_icons = $field.data('icons'); 279 if (typeof country_icons[option.id] === 'undefined') { 280 return option.text; 281 } else { 282 return '<img src="' + country_icons[option.id] + '"/>'; 283 } 284 }, 285 templateResult: function (option) { 286 var country_icons = $field.data('icons'); 287 var codes = $field.data('codes'); 288 if (typeof country_icons[option.id] !== 'undefined') { 289 return '<img src="' + country_icons[option.id] + '"/>' + 290 option.text + 291 '<span class="es-country-code">' + codes[option.id] + '</span>'; 292 } else { 293 return '<div class="es-flag-space"></div>' + option.text; 294 } 295 } 296 } ).on( 'change', function () { 297 var codes = $field.data('codes'); 298 var code = $field.val(); 299 var tel_code = codes[ code ]; 300 var $tel = $field.closest( '.es-field--phone' ).find( '.js-es-phone' ); 301 var replaced = false;
302 303 Object.entries( codes ).forEach( function( codes_item ) { 304 if ( $tel.val().indexOf( codes_item[1] ) !== -1 && codes_item[1].length ) { 305 $tel.val( $tel.val().replace( codes_item[1], tel_code ) ); 306 replaced = true; 307 } 308 } ); 309 310 if ( ! replaced && tel_code.length ) { 311 $tel.val( tel_code ); 312 } 313 } ).trigger( 'change' ); 314 315 } 316 317 } ); 318 319 $( 'input[data-toggle-container]:not([data-save-field]), input[data-inactive-container]:not(data-save-field), input[data-toggle-disabled]' ).trigger( 'change' ); 320 } 321 322 $( function() { 323 324 initFields(); 325 326 $( document ).on( 'widget-added', function ( $control ) { 327 initFields(); 328 } ); 329 330 $( document ).on( 'click', '.es-field [type=radio]', function( e ) { 331 if ( e.ctrlKey || e.metaKey ) { 332 $( this ).removeProp( 'checked' ).removeAttr( 'checked' ); 333 } 334 } ); 335 336 $( document ).on( 'change', '.js-es-upload-files', function(e) { 337 if ( $( this )[0].files[0] === undefined ) return; 338 339 var formData = new FormData(); 340 var $button = $( this ).next(); 341 var dataRequest = $( this ).data( 'request' ); 342 343 formData.append( "file", $( this )[0].files[0] ); 344 formData.append( "action", 'es_framework_upload_file' ); 345 formData.append( '_file-nonce', $( this ).data( 'nonce' ) ); 346 formData.append( 'mime_allowed', $( this ).data( 'mime-allowed' ) ); 347 348 if ( ! $.isEmptyObject( dataRequest ) ) { 349 for ( const [key, value] of Object.entries( dataRequest ) ) { 350 formData.append( key, value ); 351 } 352 } 353 354 if ( $button.hasClass( 'es-btn' ) ) { 355 $button.addClass( 'es-preload' ); 356 } 357 358 $.ajax({ 359 type: 'POST', 360 url: Es_Framework.ajaxurl, 361 contentType: false, 362 processData: false, 363 dataType: 'json', 364 data: formData, 365 success: function (response) { 366 response = response || {} 367 if ( response.status === 'success' ) { 368 if ( dataRequest.file_type === 'icon-uploader' ) { 369 $( '.es-icons-overlay ul' ).each( function() { 370 $( this ).append( response.icon ); 371 } ); 372 } 373 } else if ( response.status === 'error' ) { 374 alert( response.message ); 375 } 376 }, 377 }).always( function() { 378 $button.removeClass( 'es-preload' ); 379 } ); 380 381 e.preventDefault(); 382 } ); 383 384 $( '.js-files-list' ).sortable(); 385 386 $( document ).on( 'click', '.js-es-reload-media', function() { 387 var $wrapper = $( this ).closest( '.js-es-file' ); 388 var uniqid = $wrapper.data( 'uniqid' ); 389 var file = uploadFiles[ uniqid ]; 390 391 console.log(file, uniqid, $wrapper, $wrapper.data()); 392 var files = []; 393 files.push( file ); 394 395 esUploadFiles( $wrapper.closest( '.js-es-uploader-area' ), files ); 396 397 uploadFiles[ uniqid ] = null; 398 $wrapper.remove(); 399 return false; 400 } ); 401 402 $( document ).on( 'click', '.js-es-delete-media', function() { 403 $( this ).closest( '.js-es-file' ).remove(); 404 return false; 405 } ); 406 407 $( document ).on( 'drop', '.js-es-uploader-area', function(e) { 408 e.preventDefault(); 409 var $wrapper = $( this ); 410 var files = e.originalEvent.dataTransfer.files; 411 412 if ( files.length ) { 413 esUploadFiles( $wrapper, files ); 414 } 415 } ); 416 417 $( document ).on( 'change', '[data-value-container]', function() { 418 var default_value = $( this ).data( 'value-default' ) || ''; 419 var suffix = $( this ).data( 'value-suffix' ); 420 var value = +$( this ).val() ? $( this ).val() + suffix : default_value; 421 $( $( this ).data( 'value-container' ) ).html( value ); 422 } ); 423 424 $( '[data-value-container]' ).trigger( 'change' ); 425 426 $( document ).on( 'change', '.js-es-drag-files-field', function(e) { 427 e.preventDefault(); 428 var files = $( this )[0].files; 429 var $wrapper = $( this ).closest( '.js-es-uploader-area' ); 430 431 if ( files ) { 432 esUploadFiles( $wrapper, files ); 433 } 434 } ); 435 436 $( document ).on( 'dragenter dragover', '.js-es-uploader-area', function() { 437 $( this ).addClass( 'es-uploader-area--focused' ); 438 } ); 439 440 $( document ).on( 'dragleave drop', '.js-es-uploader-area', function() { 441 $( this ).removeClass( 'es-uploader-area--focused' ); 442 } ); 443 444 $( document ).on( 'dragover', '.js-es-uploader-area', function() { 445 return false;
446 } ); 447 448 $( '.js-es-tabs' ).on( 'tab_changed', function() { 449 initFields( $( this ) ); 450 } ); 451 452 $( document ).on( 'change', '.js-es-password-field', function() { 453 var val = $( this ).val(); 454 var email_val = $( this ).data( 'email' ) ? 455 $( this ).data( 'email' ) : $( this ).closest( 'form' ).find( '[type="email"]' ).val(); 456 var $list = $( this ).closest( '.es-field, .js-es-field' ).find( '.es-field__validate-list' ); 457 var validate1 = false; 458 var validate2 = false; 459 var validate3 = false; 460 461 if ( val && val.length ) { 462 if ( email_val.length && email_val !== val ) { 463 $list.find( '.es-validate-item__contain' ).addClass( 'es-validate-item--active' ); 464 validate1 = true; 465 } else { 466 $list.find( '.es-validate-item__contain' ).removeClass( 'es-validate-item--active' ); 467 validate1 = false; 468 } 469 470 if ( val.length >= 8 ) { 471 validate2 = true; 472 $list.find( '.es-validate-item__length' ).addClass( 'es-validate-item--active' ); 473 } else { 474 validate2 = false; 475 $list.find( '.es-validate-item__length' ).removeClass( 'es-validate-item--active' ); 476 } 477 478 var regExp = /[a-zA-Z0-9]/g; 479 480 if ( regExp.test( val ) ) { 481 validate3 = true; 482 $list.find( '.es-validate-item__char' ).addClass( 'es-validate-item--active' ); 483 } else { 484 validate3 = false; 485 $list.find( '.es-validate-item__char' ).removeClass( 'es-validate-item--active' ); 486 } 487 } 488 489 if ( validate1 && validate2 && validate3 ) { 490 $( this ).closest( 'form' ).find( '[type=submit]' ).removeProp( 'disabled' ).removeAttr( 'disabled' ); 491 } else { 492 $( this ).closest( 'form' ).find( '[type=submit]' ).prop( 'disabled', 'disabled' ); 493 } 494 } ); 495 496 $( '.js-es-password-field' ).trigger( 'change' ); 497 498 $( document ).on( 'click', '.js-es-toggle-pwd', function() { 499 var $field = $( this ).closest( '.es-field, .js-es-field' ).find( 'input' ); 500 $( this ).toggleClass( 'es-secondary-color' ); 501 if ( $field.attr( 'type' ) === 'text' ) { 502 $field.prop( 'type', 'password' ); 503 } else { 504 $field.prop( 'type', 'text' ); 505 } 506 507 return false; 508 } ); 509 510 $( document ).on( 'input', '.es-field__input[maxlength]', function() { 511 var length = $( this ).val().length; 512 513 $( this ).closest( '.es-field, .js-es-field' ).find( '.js-es-strlen' ).html( length ); 514 } ); 515 516 $( document ).on( 'click', '[data-trigger-click]', function() { 517 $( $( this ).data( 'trigger-click' ) ).trigger( 'click' ); 518 519 return false; 520 } ); 521 522 $( document ).on( 'click', '.js-es-delete-entity', function() { 523 $( this ).closest( '.js-es-entity-box' ).remove(); 524 return false; 525 } ); 526 527 // Input on register page. 528 $( '.js-es-image-field' ).change( function() { 529 var el = this; 530 531 var reader = new FileReader(); 532 533 if ( el.files.length ) { 534 reader.onload = function( e ) { 535 $( el ).closest( 'div' ).find( $( el ).data( 'img' ) ) 536 .attr( 'src', e.target.result ) 537 .attr( 'srcset', '' ); 538 539 $( el ).closest( '.js-es-photo' ).find( '.js-es-delete-photo' ).removeClass( 'es-hidden' ); 540 }; 541 542 reader.readAsDataURL( el.files[0] ); 543 } 544 } ); 545 546 $( '.js-es-delete-photo' ).click( function() { 547 var $wrapper = $( this ).closest( '.js-es-photo' ); 548 $wrapper.find( '.js-es-image-field' ).val('').trigger( 'change' ).trigger( 'input' ); 549 $wrapper.find( '.js-es-avatar-field' ).val('').trigger( 'change' ).trigger( 'input' ); 550 var img = $wrapper.find( '.js-es-photo__image' ).data( 'photo' ); 551 $( this ).addClass( 'es-hidden' ); 552 553 $wrapper.find( '.js-es-photo__image img' ).replaceWith( img ); 554 return false;
555 } ); 556 557 $( document ).on( 'click', '.js-es-reset-value', function() { 558 $( this ).closest( '.es-field, .js-es-field' ).find( '.es-field__input' ).val( $( this ).data( 'value' ) ).trigger( 'change' ); 559 return false; 560 } ); 561 562 $( document ).on( 'click', '.js-es-field__show-more', function() { 563 $( this ).closest( '.es-field, .js-es-field' ).find( '.es-field--visibility' ).toggleClass( 'es-hidden' ); 564 return false; 565 } ); 566 567 $( '.js-es-media-files' ).sortable(); 568 569 $( document ).on( 'click', '.js-es-delete-fields-item', function() { 570 $( this ).closest( '.es-item' ).remove(); 571 return false; 572 } ); 573 574 $( document ).on( 'click', '.js-es-field--rating .js-es-rating .es-star', function() { 575 var $el = $( this ); 576 var value = $el.data( 'value' ); 577 var $rating_wrap = $( this ).closest( '.js-es-rating' ); 578 var $input = $( this ).closest( '.js-es-field--rating' ).find( '.es-field__input' ); 579 580 if ( $el.hasClass( 'es-star--active' ) ) { 581 value -= 1; 582 } 583 584 $input.val( value ); 585 $rating_wrap.find( '.es-star' ).removeClass( 'es-star--active' ); 586 587 $rating_wrap.find( '.es-star:nth-child(-n+' + value + ')' ).addClass( 'es-star--active' ); 588 } ); 589 590 $( document ).on( 'click', '.js-es-add-fields-item', function() { 591 var $selector = $( this ).closest( '.es-fields-list__selector' ).find( '.js-es-items-selector' ); 592 var field = $selector.val(); 593 var item_html = $selector.data( 'item' ); 594 var $list = $( this ).closest( '.es-field--fields-list-selector' ).find( '.js-es-items' ); 595 var label = $selector.find( 'option:selected' ).html(); 596 597 if ( field && ! $list.find( '[data-item-id="' + field + '"]' ).length ) { 598 $selector.val( '' ).trigger( 'change' ); 599 $list.append( item_html.replace( '{value}', field ).replace( '{field_name}', label ).replace( '{item-id}' ) ); 600 } else { 601 $list.find( '[data-item-id="' + field + '"]' ).animate( {opacity: 0.5}, 300, function() { 602 $( this ).animate( {opacity: 1}, 300 ); 603 } ); 604 $selector.val( '' ).trigger( 'change' ); 605 } 606 607 return false; 608 } ); 609 610 $( document ).on( 'change', '.js-es-items-selector', function() { 611 var $selector = $( this ); 612 var field = $selector.val(); 613 var $button = $selector.closest( '.es-fields-list__selector' ).find( '.js-es-add-fields-item' ); 614 $button.prop( 'disabled', ! field ); 615 } ); 616 617 $( document ).on( 'click', '.js-es-icon-field', function() { 618 var $el = $( this ); 619 620 $el.closest( '.es-icon-field-wrap' ).toggleClass( 'es-icon-field--active' ); 621 } ); 622 623 $( document ).on( 'click', '.es-file__caption-container, .js-es-file__caption-field', function( e ) { 624 e.stopPropagation(); 625 } ); 626 627 $( document ).on( 'click', '.js-es-icon-item', function() { 628 var $el = $( this ); 629 var icon_config = $el.data( 'icon' ); 630 $el.closest( '.es-icon-field-wrap' ) 631 .removeClass( 'es-icon-field--active' ) 632 .find( '.js-es-icon-html' ) 633 .html( icon_config.icon ); 634 635 $el.closest( '.es-icon-field-wrap' ).find( '.es-field__input' ).val( JSON.stringify( icon_config ) ); 636 } ); 637 638 $( document ).click( function( e ) { 639 if ( ! $( e.target ).closest( '.es-icon-field-wrap' ).length ) { 640 $( '.es-icon-field-wrap' ).removeClass( 'es-icon-field--active' ); 641 } 642 643 //if you click on anything except the modal itself or the "open modal" link, close the modal 644 if ( ! $( e.target ).closest( ".es-file__caption-container").length ) { 645 $( '.es-file__caption-container.es-file__caption--edit' ).each( function() { 646 var $el = $( this ); 647 var $input = $el.find( '.js-es-file__caption-field' ); 648 649 $.post( Es_Framework.ajaxurl, { 650 attachment_id: $input.data( 'attachment-id' ), 651 caption: $input.val(), 652 action: 'es_framework_attachment_save_caption', 653 nonce: Es_Framework.nonces.attachment_save_caption_nonce 654 } ).always( function() { 655 $el.removeClass( 'es-file__caption--edit' ); 656 657 var $caption = $el.find( '.js-es-caption' ); 658 659 if ( $input.val() ) { 660 if ( $caption.prop( 'tagName').toLowerCase() !== 'input' ) { 661 $el.find( '.js-es-caption' ).html( $input.val() ).removeClass( 'no-caption' ); 662 } 663 } else { 664 if ( $caption.prop( 'tagName').toLowerCase() !== 'input' ) { 665 $el.find('.js-es-caption').html(Es_Framework.tr.add_caption).addClass('no-caption'); 666 } 667 } 668 } ); 669 } ); 670 } 671 }); 672 673 // $( '.es-icons-overlay' ).on( 'click', function(e) { 674 // e.stopPropagation(); 675 // } ); 676 677 // Add repeater item button handler. 678 $( document ).on( 'click', '.js-es-repeater__add-item', function() { 679 var $el = $( this ); 680 var $field_wrapper = $el.closest( '.es-field--repeater' ); 681 var $wrapper = $field_wrapper.find( '.js-es-repeater__wrapper' ); 682 var index = +$wrapper.data( 'index' ); 683 var $to_clone = $field_wrapper.find( '.js-es-to-clone .js-es-repeater-item' ); 684 685 var $cloned = $to_clone.clone(); 686 $cloned.data( 'item-index', index ); 687 688 $wrapper.find( '.js-es-repeater__items' ).append( $cloned ); 689 690 $cloned.find( '[disabled]' ).removeProp( 'disabled' ).removeAttr( 'disabled' ); 691 $cloned.find( '.es-field--disabled' ).removeClass( 'es-field--disabled' ); 692 693 $cloned.find( '[for]' ).each( function() { 694 $( this ).prop( 'for', $( this ).prop( 'for' ).replaceAll( '{#index}', index ) ); 695 } ); 696 697 $cloned.find( '.es-field__label' ).each( function() { 698 $( this ).text( $( this ).text().replaceAll( '{#index}', index + 1 ) ); 699 } ); 700 701 $cloned.find( '[name], [id], [for], [value]' ).each( function() { 702 var $el = $( this ); 703 ['name', 'id', 'value', 'for'].forEach( function( selector ) { 704 if ( $el.prop( selector ) ) { 705 var modified = $el.prop( selector ).replaceAll( '{#index}', index ); 706 $el.prop( selector, modified ).attr( selector, modified ); 707 } 708 } ); 709 } ); 710 711 $wrapper.data( 'index', index + 1 ); 712 713 $cloned.find('[disabled]').removeProp( 'disabled' ).removeAttr( 'disabled' ); 714 $cloned.find( '.es-switcher--disabled' ).removeClass( 'es-switcher--disabled' ); 715 716 $cloned.find( 'input:not([type=radio])' ).trigger( 'change' ); 717 718 if ( typeof $.fn.wpColorPicker !== 'undefined' ) { 719 $cloned.find('.js-es-iris-color-picker:not([disabled])').wpColorPicker(); 720 } 721 initFields( $cloned ); 722 723 return false;
724 } ); 725 726 // Remove repeater item button handler. 727 $( document ).on( 'click', '.js-es-repeater__delete-item', function() { 728 var $el = $( this ); 729 var $wrapper = $el.closest( '.js-es-repeater__wrapper' ); 730 var index = $wrapper.data( 'index' ); 731 $el.closest( '.js-es-repeater-item' ).remove(); 732 733 $wrapper.data( 'index', index - 1 ); 734 735 $wrapper.find( 'input:not([type=radio])' ).trigger( 'change' ); 736 737 return false; 738 } ); 739 740 // Upload file handler. 741 if ( typeof wp !== 'undefined' && wp.media && wp.media.editor ) { 742 743 $( document ).on( 'click', '.js-es-media-editor', function() { 744 var frame = wp.media( { multiple: false } ); 745 var $field = $( this ).closest( '.es-field, .js-es-field' ).find( '.es-field__input' ); 746 747 frame.open(); 748 749 // When an image is selected in the media frame... 750 frame.on( 'select', function() { 751 752 // Get media attachment details from the frame state 753 var attachments = frame.state().get('selection').toJSON(); 754 755 // Attachment IDs array. 756 var ids = []; 757 758 if ( attachments.length ) { 759 var attachment = attachments[0]; 760 $field.val( attachment.url ); 761 } 762 } ); 763 764 return false; 765 } ); 766 767 $( document ).on( 'click', '.js-es-media-button', function () { 768 var $button = $( this ); 769 var $wrapper = $button.parent(); 770 var $input = $wrapper.find( '.js-es-media-field' ); 771 var media_item_markup = $button.data( 'item-markup' ); 772 var is_multiple = $button.data( 'multiple' ); 773 var item; 774 775 var frame = wp.media( { multiple: is_multiple } ); 776 777 frame.open(); 778 779 // When an image is selected in the media frame... 780 frame.on( 'select', function() { 781 782 // Get media attachment details from the frame state 783 var attachments = frame.state().get('selection').toJSON(); 784 785 // Attachment IDs array. 786 var ids = []; 787 788 if ( attachments.length ) { 789 var $files_container = $button.parent().find( '.js-es-media-files' ); 790 791 for ( var i in attachments ) { 792 var file = attachments[i]; 793 var filename = file.filename; 794 var url = file.url; 795 var caption = file.caption ? file.caption : false; 796 797 if ( typeof file.sizes !== 'undefined' ) { 798 url = file.url; 799 } 800 801 ids.push( attachments[i].id ); 802 803 item = media_item_markup 804 .replaceAll( '{filename}', filename ) 805 .replaceAll( '{attachment_id}', file.id ) 806 .replaceAll( '{filesize}', file.filesizeHumanReadable ) 807 .replaceAll( '{url}', url ) 808 .replaceAll( '{caption}', caption ? caption : $button.data( 'caption' ) ) 809 .replaceAll( '{input_caption}', caption ? caption : '' ) 810 .replaceAll( '{no_caption}', caption ? '' : 'no-caption' ); 811 812 var $repeater = $files_container.closest( '.js-es-repeater__wrapper' ); 813 814 if ( $repeater.length ) { 815 var index = $files_container.closest( '.js-es-repeater-item' ).data( 'item-index' ); 816 item = item.replaceAll( '{#index}', index ); 817 } 818 819 if ( $button.data( 'multiple' ) ) { 820 $files_container.append( item ); 821 $files_container.sortable(); 822 } else { 823 $files_container.html( item ); 824 } 825 826 $files_container.find( '[disabled]' ).removeProp( 'disabled' ).removeAttr( 'disabled' ); 827 } 828 } 829 } ); 830 831 return false;
832 } ); 833 } 834 835 $( document ).on( 'click', '.js-es-caption', function() { 836 $( this ).closest( '.es-file__caption-container' ).addClass( 'es-file__caption--edit' ); 837 return false; 838 } ); 839 840 $( document ).on( 'click', '.js-es-media-delete-attachment', function() { 841 var $el = $( this ); 842 $el.closest( 'li' ).remove(); 843 844 return false; 845 } ); 846 847 $( document ).on( 'click', '.js-es-tabs .js-es-tabs__nav a.es-tabs__nav-link', function( e ) { 848 var $wrapper = $( this ).closest( '.js-es-tabs' ); 849 var tabContainer = $( this ).data( 'tab' ) || $( this ).attr( 'href' ); 850 851 if ( $( tabContainer ).length ) { 852 $wrapper.find( '.js-es-tabs__wrapper .js-es-tabs__content' ).addClass( 'es-hidden' ); 853 $wrapper.find( tabContainer ).removeClass( 'es-hidden' ); 854 $wrapper.find( '.js-es-tabs__nav li' ).removeClass( 'active' ); 855 $( this ).closest( 'li' ).addClass( 'active' ); 856 857 if ( history.pushState ) { 858 history.pushState( null, null, tabContainer ); 859 } 860 else { 861 location.hash = tabContainer; 862 } 863 864 $wrapper.trigger( 'tab_changed', [ tabContainer, $wrapper, $( this ) ] ); 865 } 866 867 return false; 868 } ); 869 870 try { 871 if ( window.location.hash && $( window.location.hash ).length ) { 872 if ( $( window.location.hash ).hasClass( 'js-es-tabs__content' ) ) { 873 var $link = $( 'a[href="' + window.location.hash + '"]' ); 874 $link.trigger( 'click' ); 875 } 876 } 877 } catch( e ) {} 878 879 $( '[data-toggle-label]' ).click( function( e ) { 880 var temp_label = $( this ).html(); 881 $( this ).html( $( this ).data( 'toggle-label' ) ).data( 'toggle-label', temp_label ); 882 883 e.preventDefault(); 884 } ); 885 886 887 $( '.js-es-tabs' ).each( function() { 888 if ( ! $( this ).find( '.js-es-tabs__nav li.active' ).length ) { 889 var $link = $( this ).find( '.js-es-tabs__nav li:first-child a.es-tabs__nav-link' ); 890 $link.trigger( 'click' ); 891 } 892 893 window.scrollTo( 0, 0 ); 894 895 setTimeout( function() { 896 window.scrollTo( 0, 0 ); 897 }, 1 ); 898 } ); 899 900 $( document ).ajaxComplete( function() { 901 initFields(); 902 } ); 903 904 $( document ).on( 'click', '.js-incrementer-button', function() { 905 var method = $( this ).data( 'method' ); 906 var $input = $( this ).closest( '.js-es-incrementer-field' ).find( '.es-field__input' ); 907 var max = $input.prop( 'max' ); 908 var min = $input.prop( 'min' ); 909 var step = + $input.prop( 'step' ); 910 step = step || 1; 911 var val = $input.val() ? $input.val() : 0; 912 913 if ( 'increment' === method ) { 914 $input.val( ( +max && +max > +val ) || ! max ? + val + step : val ); 915 } else { 916 $input.val((min && min < val) || min === '' ? +val - step : val); 917 } 918 919 $input.trigger( 'change' ); 920 921 return false; 922 } ); 923 924 $( document ).on( 'change', 'input[data-toggle-disabled]', function() { 925 var $el = $( this ); 926 var $field = $( $el.data( 'toggle-disabled' ) ); 927 var revert = $el.data( 'revert-toggler' ); 928 929 if ( $field.length ) { 930 var checked = $el.is( ':checked' ); 931 checked = revert ? ! checked : checked; 932 if ( checked ) { 933 $field.prop( 'disabled', 'disabled' ).closest( '.es-field, .js-es-field' ).addClass( 'es-field--disabled' ); 934 } else { 935 $field.removeProp( 'disabled' ).removeAttr( 'disabled' ).closest( '.es-field, .js-es-field' ).removeClass( 'es-field--disabled' ); 936 } 937 } 938 } ); 939 940 $( document ).on( 'change', 'input[data-toggle-container], input[data-inactive-container]', function() { 941 var $el = $( this ); 942 var container = $el.data( 'toggle-container' ); 943 944 if ( container && container.length ) { 945 var $container = $('body').find( container ); 946 947 if ( $el.is( ':checked' ) ) { 948 $container.removeClass( 'es-hidden' ); 949 } else { 950 $container.addClass( 'es-hidden' ); 951 } 952 } else { 953 var $active_container = $( $el.data( 'active-container' ) ); 954 var $inactive_container = $( $el.data( 'inactive-container' ) ); 955 var fields_selector = 'input:not(.js-es-repeater-input),select:not(.js-es-repeater-input),textarea:not(.js-es-repeater-input)'; 956 957 if ( $el.is( ':checked' ) ) { 958 $active_container.removeClass( 'es-hidden' ); 959 $inactive_container.addClass( 'es-hidden' ); 960 961 $active_container.find( fields_selector ).removeProp( 'disabled' ).removeAttr( 'disabled' ); 962 $inactive_container.find( fields_selector ).prop( 'disabled', 'disabled' ); 963 } else { 964 $active_container.addClass( 'es-hidden' ); 965 $inactive_container.removeClass( 'es-hidden' ); 966 967 $active_container.find( fields_selector ).prop( 'disabled', 'disabled' ); 968 $inactive_container.find( fields_selector ).removeProp( 'disabled' ).removeAttr( 'disabled' ); 969 } 970 } 971 } ); 972 973 $( 'input[data-toggle-container], input[data-inactive-container], input[data-toggle-disabled]' ).trigger( 'change' ); 974 975 $( document ).on( 'click', '[data-toggle-container]:not(input)', function(e) { 976 $( $( this ).data( 'toggle-container' ) ).toggleClass( 'es-hidden' ); 977 e.preventDefault(); 978 } ); 979 980 $( document ).on( 'click', '.js-es-add-field', function() { 981 return false;
982 } ); 983 984 $( document ).on( 'click', '.js-es-price-input-type-container', function() { 985 var value = $(this).val(); 986 esPriceInputType( value ); 987 } ); 988 989 var esValuePriceInputType = $('.js-es-price-input-type-container:checked').val(); 990 991 esPriceInputType( esValuePriceInputType ); 992 993 function esPriceInputType( value ) { 994 if(value == 'dropdown') { 995 $( '.es-field__is_same_price_for_categories_enabled' ).removeClass( 'es-hidden' ); 996 $( '#es-same-price-list-container' ).show(); 997 $( '#es-diff-price-list-container' ).show(); 998 999 } else { 1000 $( '.es-field__is_same_price_for_categories_enabled' ).addClass( 'es-hidden' ); 1001 $( '#es-same-price-list-container' ).hide(); 1002 $( '#es-diff-price-list-container' ).hide(); 1003 } 1004 } 1005 1006 } ); 1007} )( jQuery );
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.