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