1(function($){ 2 3 $('body').on('click', '.htmltopdf', function() { 4 const element = document.getElementById('container_prefactor'); 5 6 if (!element) { 7 alert('Ø¹ÙØµØ± container_prefactor Ù¾ÛØ¯Ø§ ÙØ´Ø¯!'); 8 return; 9 } 10 11 // Ø°Ø®ÛØ±Ù استاÛÙâÙØ§Û اصÙÛ 12 const originalStyles = { 13 paddingRight: element.style.paddingRight, 14 paddingLeft: element.style.paddingLeft, 15 paddingTop: element.style.paddingTop, 16 width: element.style.width, 17 margin: element.style.margin 18 }; 19 20 // اع٠ا٠استاÛÙâÙØ§Û بÙÛÙÙ Ø¨Ø±Ø§Û PDF 21 element.style.paddingRight = '20px'; // تغÛÛØ± از درصد ب٠px 22 element.style.paddingLeft = '20px'; 23 element.style.paddingTop = '20px'; 24 element.style.width = '100%'; 25 element.style.margin = '0 auto'; 26 element.style.backgroundColor = '#ffffff'; 27 element.style.boxSizing = 'border-box'; 28 29 // ØªÙØ¸Û٠ات Ø¨ÙØªØ± Ø¨Ø±Ø§Û html2canvas 30 html2canvas(element, { 31 scale: 3, // Ø§ÙØ²Ø§ÛØ´ Ú©ÛÙÛØª (3 برابر) 32 backgroundColor: '#ffffff', 33 logging: false, 34 useCORS: true, 35 windowWidth: element.scrollWidth, 36 windowHeight: element.scrollHeight, 37 onclone: function(clonedDoc, element) { 38 // اع٠ا٠ÙÙÙØªâÙØ§Û Ù ÙØ§Ø³Ø¨ در ÙØ³Ø®Ù Ú©ÙÙ٠شد٠39 const clonedElement = clonedDoc.getElementById('container_prefactor'); 40 if (clonedElement) { 41 clonedElement.style.fontFamily = 'Arial, Helvetica, sans-serif'; 42 clonedElement.style.fontSize = '12px'; 43 clonedElement.style.lineHeight = '1.5'; 44 } 45 } 46 }).then(function(canvas) { 47 // Ù ØØ§Ø³Ø¨Ù دÙÛ٠ابعاد Ø¨Ø±Ø§Û ÚÛØ¯Ù Ø§Ù Ø¨ÙØªØ± 48 var imgWidth = 190; // Ú©Ø§ÙØ´ عرض Ø¨Ø±Ø§Û ØØ§Ø´ÛÙ Ø¨ÙØªØ± (mm) 49 var pageHeight = 277; // Ú©Ø§ÙØ´ Ø§Ø±ØªÙØ§Ø¹ Ø¨Ø±Ø§Û ØØ§Ø´ÛÙ (mm) 50 var marginX = 10; // ØØ§Ø´ÛÙ ÚÙ¾ ٠راست (mm) 51 52 var imgHeight = (canvas.height * imgWidth) / canvas.width; 53 var heightLeft = imgHeight; 54 55 var doc = new jsPDF({ 56 unit: 'mm', 57 format: 'a4', 58 orientation: 'portrait' 59 }); 60 61 var position = 0; 62 63 // اضاÙ٠کرد٠تصÙÛØ± با ØØ§Ø´ÛÙ Ù ÙØ§Ø³Ø¨ 64 doc.addImage(canvas, 'JPEG', marginX, position, imgWidth, imgHeight, undefined, 'FAST'); 65 heightLeft -= pageHeight; 66 67 while (heightLeft >= 0) { 68 position = heightLeft - imgHeight; 69 doc.addPage(); 70 doc.addImage(canvas, 'JPEG', marginX, position, imgWidth, imgHeight, undefined, 'FAST'); 71 heightLeft -= pageHeight; 72 } 73 74 doc.save('factor-Export.pdf'); 75 76 // بازگرداÙÛ Ø§Ø³ØªØ§ÛÙâÙØ§ 77 element.style.paddingRight = originalStyles.paddingRight; 78 element.style.paddingLeft = originalStyles.paddingLeft; 79 element.style.paddingTop = originalStyles.paddingTop; 80 element.style.width = originalStyles.width; 81 element.style.margin = originalStyles.margin; 82 83 }).catch(function(error) { 84 console.error('خطا:', error); 85 alert('خطا در ساخت PDF: ' + error.message); 86 87 // بازگرداÙÛ Ø§Ø³ØªØ§ÛÙâÙØ§ در ØµÙØ±Øª خطا 88 element.style.paddingRight = originalStyles.paddingRight; 89 element.style.paddingLeft = originalStyles.paddingLeft; 90 element.style.paddingTop = originalStyles.paddingTop; 91 element.style.width = originalStyles.width; 92 element.style.margin = originalStyles.margin; 93 }); 94 }); 95 96$('body').on('click', '.htmltoimg', function() { 97 const element = document.getElementById('container_prefactor'); 98 99 if (!element) { 100 alert('Ø¹ÙØµØ± container_prefactor Ù¾ÛØ¯Ø§ ÙØ´Ø¯!'); 101 return; 102 } 103 104 // اع٠ا٠استاÛÙâÙØ§Û Ù ÙÙØª (٠شاب٠PDF) 105 element.style.paddingRight = '20px';
106 element.style.paddingTop = '20px'; 107 element.style.paddingLeft = '20px'; 108 109 html2canvas(element, { 110 scale: 2, 111 backgroundColor: '#ffffff', 112 logging: false 113 }).then(function(canvas) { 114 // Ø±ÙØ´ 1: داÙÙÙØ¯ Ø®ÙØ¯Ú©Ø§Ø± JPEG (٠شاب٠کد img_saver ش٠ا) 115 var a = document.createElement('a'); 116 a.href = canvas.toDataURL("image/jpeg").replace("image/jpeg", "image/octet-stream"); 117 a.download = 'factor-Export.jpg'; 118 a.click(); 119 120 // بازگرداÙÛ Ø§Ø³ØªØ§ÛÙâÙØ§ 121 element.style.paddingRight = ''; 122 element.style.paddingTop = ''; 123 element.style.paddingLeft = ''; 124 125 }).catch(function(error) { 126 console.error('خطا:', error); 127 alert('خطا در ساخت تصÙÛØ±: ' + error.message); 128 129 // بازگرداÙÛ Ø§Ø³ØªØ§ÛÙâÙØ§ در ØµÙØ±Øª خطا 130 element.style.paddingRight = ''; 131 element.style.paddingTop = ''; 132 element.style.paddingLeft = ''; 133 }); 134}); 135 136 $(window).on("elementor/frontend/init", function() { 137 138 elementorFrontend.hooks.addAction( "frontend/element_ready/plus_my_account_slider_dashboard_elementor.default",function( $scope ){ 139 140 if( $('.swiper_homepage').length && window.elementor ) 141 { 142 var swiperHomepage = new Swiper(".swiper_homepage", { 143 slidesPerView: 1, 144 loop: true, 145 paginationClickable: true, 146 navigation: { 147 nextEl: ".swiper-button-next", 148 prevEl: ".swiper-button-prev", 149 }, 150 pagination: { 151 el: ".swiper-pagination", 152 clickable: true 153 }, 154 }); 155 } 156 }); 157 }); 158 159 $(document).ready(function(){ 160 161 $('#avatar_image').on('change',function(e){ 162 e.preventDefault(); 163 var file_input = $(this); 164 var file = this.files[0]; 165 var reader = new FileReader(); 166 reader.onload = function(e){ 167 var $avatar_image = file_input.parents('.dashboard_container').find('.avatar_image_account'); 168 $avatar_image.find('img').attr('src',e.target.result); 169 }; 170 reader.readAsDataURL(file); 171 }); 172 }); 173 174 $(document).ready(function(){ 175 176 $('.input_container').each(function(index,value){ 177 var $this = $(this), 178 btn_clear = $this.find('.btn_clear'), 179 input_form = $this.find('input'); 180 181 $(btn_clear).on('click',function(e){ 182 e.preventDefault(); 183 input_form.val(""); 184 }); 185 186 }); 187 }); 188 189 $(document).ready(function(){ 190 191 if( $('.swiper_homepage').length ) 192 { 193 var swiperHomepage = new Swiper(".swiper_homepage", { 194 slidesPerView: 1, 195 loop: true, 196 paginationClickable: true, 197 navigation: { 198 nextEl: ".swiper-button-next", 199 prevEl: ".swiper-button-prev", 200 }, 201 pagination: { 202 el: ".swiper-pagination", 203 clickable: true 204 }, 205 }); 206 } 207 }); 208 209 210 $(document).ready(function(){ 211 $('.add_ticket__form').on('submit',function(e){ 212 213 var $this = $(this); 214 var select = $this.find('.ticket_select_items'); 215 var hasError = false; 216 select.each(function(index,element){ 217 if( $(element).attr('data-required') != 0 ) 218 { 219 $(element).css({ 220 'border' : '1px solid red' 221 }); 222 hasError = true; 223 } 224 }); 225 226 if( hasError ) 227 { 228 e.preventDefault(); 229 }else{ 230 $this.submit(); 231 } 232 }); 233 234 $('.ticket_select_items').each(function(index,element){ 235 236 $(element).on('change',function(){ 237 var $nextThis = $(this); 238 if( $nextThis.val() !== 'default' || $nextThis.val() !== 'departman_default' || $nextThis.val() !== 'priority_default' ) 239 { 240 $(element).attr('data-required',0); 241 $(element).css('border',''); 242 } 243 }); 244 }); 245 }); 246 247 248 $(document).ready(function(){ 249 250 $('body').on('submit','form.aramis_login', function(e){ 251 252 e.preventDefault(); 253 var $this = $(this); 254 var alert = $('body').find('.alert'); 255 var btn_sub = $(this).find('button'); 256 257 var $user_name = $(this).find('input[name="username"]').val(); 258 var $password = $(this).find('input[name="password"]').val(); 259 var $phone = $(this).find('input[name="phone_login"]').val(); 260 var $nonce = $(this).find('.nonce_login_register').val(); 261 var $checkRemember = $(this).find('#checkRemember').val(); 262 var verify_otp = $('body').find('.verify_otp_login'); 263 var $btn_form = $this.find('.aramis__login_btn'); 264 $btn_form.addClass('loading'); 265 var btn_text = $btn_form.html(); 266 267 $btn_form.empty(); 268 269 btn_sub.addClass('btn-loading'); 270 271 $.ajax({ 272 273 dataType:'json',type:'post',url : optionarray.plus_url, 274 275 data:{ 276 action:'process_login', 277 user_name : $user_name, 278 password : $password, 279 phone : $phone, 280 nonce : $nonce, 281 checkRemember : $checkRemember 282 }, 283 success:function(response) 284 { 285 286 $btn_form.html(btn_text); 287 $btn_form.removeClass('loading'); 288 btn_sub.removeClass('btn-loading'); 289 290 291 alert.addClass('badge_green--border'); 292 alert.children().find('p').append(response.message); 293 alert.show(); 294 btn_sub.removeClass('btn-loading'); 295 296 297 window.location.href = response.redirect_url; 298 }, 299 error:function(error) 300 { 301 $btn_form.html(btn_text); 302 $btn_form.removeClass('loading'); 303 304 alert.addClass('badge_danger--border'); 305 alert.children().find('p').append(error.responseJSON.message); 306 alert.show(); 307 btn_sub.removeClass('btn-loading'); 308 309 setTimeout(function(){ 310 alert.removeClass('badge_danger--border'); 311 alert.children().find('p').empty(); 312 alert.hide(); 313 },3000); 314 } 315 316 317 }); 318 319 }); 320 321 322 }); 323 324 // register 325 $(document).ready(function(){ 326 327 $('body').on('submit','.aramis_register_form', function(e){ 328 e.preventDefault(); 329 330 var $this = $(this); 331 var detail_register = $('body').find('.detail_register'); 332 var alert = $('body').find('.alert'); 333 var $phone = $(this).find('input[name="phone"]').val(); 334 var $nonce = $(this).find('#nonce_plus_register').val(); 335 var verify_form = $('body').find('.verify_otp'); 336 var btn_sub = $(this).find('button'); 337 338 var $username = $(this).find('input[name="username"]').val(); 339 var $password = $(this).find('input[name="password"]').val(); 340 var $email = $(this).find('input[name="email"]').val(); 341 var action = 'register_with_phone'; 342 343 var $form_btn = $this.find('.aramis__register_btn'); 344 var $form_btn_text = $form_btn.html(); 345 346 $form_btn.addClass('loading'); 347 $form_btn.empty(); 348 349 if( $(this).find('input[name="email"]').length) 350 {
351 action = '_woocmmerce_register'; 352 } 353 354 355 btn_sub.addClass('btn-loading'); 356 357 358 $.ajax({ 359 360 type:'post', dataType:'json', url: optionarray.plus_url, 361 data:{ 362 action: action, 363 phone_number: $phone, 364 nonce_register: $nonce, 365 email : $email, 366 password : $password, 367 username : $username, 368 role: 'customer' 369 370 }, 371 success: function(response) 372 { 373 $form_btn.removeClass('loading'); 374 $form_btn.html( $form_btn_text ); 375 if(response.register) 376 { 377 378 alert.children().find('p').append(response.msg); 379 alert.addClass('badge_green--border'); 380 alert.show(); 381 382 setTimeout(function(){ 383 window.location.href = response.redirect_url; 384 },1000) 385 386 return; 387 } 388 $this.hide(); 389 detail_register.hide(); 390 verify_form.show(); 391 verify_form.children().find('.msg_detail_number').append(response.msg); 392 verify_form.find('.phone_number').attr('data-phone_number',$phone); 393 btn_sub.removeClass('btn-loading'); 394 var resendTime = parseInt( optionarray.wating_time_resend_otp ); 395 var $timer = verify_form.find('.time_resend'); 396 397 if( resendTime > 0 ) { 398 // $resendLink.addClass('disabled'); 399 var resendTimer; 400 clearInterval( resendTimer ); 401 $timer.addClass('disable'); 402 resendTimer = setInterval(function(){ 403 404 $timer.html('('+resendTime+') ثاÙÛÙ'); 405 406 if( resendTime <= 0 ){ 407 clearInterval( resendTimer ); 408 409 $timer.removeClass('disable'); 410 // $resendLink.removeClass('disabled'); 411 $timer.html(''); 412 $timer.append('<a href="javascript:void(0);" class="resend_otp_sms">ارسا٠٠جدد</a>'); 413 } 414 resendTime--; 415 416 },1000); 417 } 418 419 }, 420 error: function(error) 421 { 422 423 $form_btn.removeClass('loading'); 424 $form_btn.html( $form_btn_text ); 425 426 btn_sub.removeClass('btn-loading'); 427 428 if(error.responseJSON.user_exists) 429 { 430 alert.children().find('p').append(error.responseJSON.msg + '<a href="'+optionarray.WcPage.myacc+'" > '+error.responseJSON.msg_login+' </a>'); 431 432 }else{ 433 434 alert.children().find('p').append(error.responseJSON.msg); 435 } 436 437 alert.addClass('badge_danger--border'); 438 alert.show(); 439 440 setTimeout(function(){ 441 alert.removeClass('badge_danger--border'); 442 alert.children().find('p').empty(); 443 alert.hide(); 444 },3000); 445 } 446 447 }); 448 449 }) 450 }); 451 452 // verify_otp register 453 $(document).ready(function(){ 454 455 $('body').on('submit', '.verify_otp', function(e){ 456 e.preventDefault(); 457 var $this = $(this); 458 var otp = ''; 459 var $nonce = $(this).find('.nonce_verify_otp').val(); 460 var $phone = $(this).find('.phone_number').data('phone_number'); 461 var alert = $('body').find('.alert'); 462 var btn_sub = $(this).find('button'); 463 btn_sub.addClass('btn-loading'); 464 465 $this.find('.phone_validate').each( function( index, input ){ 466 467 otp += $(this).val(); 468 }); 469 470 $.ajax({ 471 dataType: 'json', type:'post', url: optionarray.plus_url, 472 data:{ 473 action: 'verify_otp', 474 otp_sended : otp, 475 phone : $phone, 476 nonce_verify_otp: $nonce 477 }, 478 success:function(response) 479 { 480 alert.addClass('badge_green--border'); 481 alert.children().find('p').append(response.msg); 482 alert.show(); 483 btn_sub.removeClass('btn-loading'); 484 485 window.location.href = optionarray.WcPage.myacc; 486 }, 487 488 error:function(error) 489 { 490 491 492 alert.children().find('p').append(error.responseJSON.msg); 493 494 alert.addClass('badge_danger--border'); 495 alert.show(); 496 btn_sub.removeClass('btn-loading'); 497 setTimeout(function(){ 498 alert.removeClass('badge_danger--border'); 499 alert.children().find('p').empty(); 500 alert.hide(); 501 },5000); 502 } 503 504 }); 505 }); 506 507 }); 508 509 510 //resend_otp_sms 511 512 $(document).ready(function(){ 513 514 $('body').on('click','.resend_otp_sms',function(e){ 515 e.preventDefault(); 516 var $this = $(this); 517 var parent = $this.parents('.form-box'); 518 var hashed = parent.find('.step_otp').attr('data-hashed'); 519 520 var verify_form = $('body').find('.verify_otp_all,.login_register_otp,.login_register_otp_email,.form-box'); 521 522 parent.addClass('loading-resend'); 523 $.ajax({ 524 dataType:'json',type:'post',url:optionarray.plus_url, 525 data:{ 526 action:'action_resend_otp', 527 nonce_resend: optionarray.aramis_script_nonce, 528 hashed : hashed 529 }, 530 success:function(response) 531 { 532 533 timer_resend(verify_form); 534 show_alert(parent,response.msg,'success'); 535 536 }, 537 error:function(error) 538 { 539 show_alert(parent,error.responseJSON.msg,'error'); 540 541 } 542 543 }); 544 545 }); 546 547 }); 548 549 // edit nummber section 550 551 $(document).ready(function(){ 552 553 $('body').on('click','.edit_number', function(e){ 554 555 var parent = $(this).closest('.verify_otp_all'); 556 var detail_register = $('body').find('.detail_register'); 557 var register_form = $('body').find('.aramis_register_form'); 558 var login_form = $('body').find('.parrent_aramis_login'); 559 var cod_for_phone = $('body').find('.msg_detail_number'); 560 561 var login_register_together = $(this).closest('.login_register_otp'); 562 563 var time_resend = login_register_together.find('.time_resend'); 564 565 var timerId = parseInt(time_resend.attr('data-timer_time')); 566 567 clearInterval(timerId); 568 569 cod_for_phone.empty(); 570 571 572 if( login_register_together.length ) 573 { 574 login_register_together.hide(); 575 $('body').find('.form__login_register').show(); 576 return; 577 } 578 579 580 if(register_form.length) 581 { 582 register_form.css('display','flex'); 583 584 parent.css('display','none'); 585 586 detail_register.show(); 587 588 return; 589 } 590 591 if(login_form.length) 592 { 593 login_form.css('display','block'); 594 $('body').find('.verify_otp_login').css('display','none'); 595 return; 596 } 597 598 }); 599 600 }); 601 602 //login and register now 603 604 $(document).ready(function(){ 605 606 607 $('body').on('submit','.form__login_register',function(e){ 608 e.preventDefault(); 609 var $this = $(this); 610 var $value = $(this).find('input[name="username"]').val(); 611 var $nonce = $(this).find('.nonce_login_register').val(); 612 613 var captcha_val = false;
614 615 var $captcha = $(this).find('textarea[name="g-recaptcha-response"]'); 616 617 if( optionarray.captcha_is_enable ) 618 { 619 captcha_val = $captcha.val(); 620 } 621 622 var $parents = $this.closest('.login_register__body,.login_register_smart'); 623 var btn = $this.find('.login_register__submitbtn'); 624 btn.addClass('loading'); 625 var text_btn = btn.html(); 626 btn.empty(); 627 628 $.ajax({ 629 type: 'POST',dataType :'json', url: optionarray.plus_url, 630 data:{ 631 action:'login_register_together', 632 value : $value, 633 captcha : captcha_val, 634 nonce : $nonce 635 }, 636 success: function(response) 637 { 638 $this.hide(); 639 btn.removeClass('loading'); 640 btn.html(text_btn); 641 642 if( 'email_login' === response.status || 'account_login' === response.status ) 643 { 644 var $login_form = $parents.find('.form_login_email'); 645 $login_form.find('.login_register__description').empty(); 646 $login_form.find('.login_register__description').html( response.msg ); 647 $login_form.show(); 648 $login_form.append('<input name="username_sended" type="hidden" value="'+$value+'">'); 649 650 } 651 652 if( 'email_register' === response.status ) 653 { 654 655 var $register_otp_form = $parents.find('.login_register_otp_email'); 656 657 $register_otp_form.find('.msg_detail_number').append(response.msg) 658 659 var resendTime = parseInt( optionarray.wating_time_resend_otp ); 660 var $timer = $register_otp_form.find('.time_resend'); 661 662 if( resendTime > 0 ) { 663 // $resendLink.addClass('disabled'); 664 var resendTimer; 665 clearInterval( resendTimer ); 666 667 resendTimer = setInterval(function(){ 668 669 $timer.html('('+resendTime+') ثاÙÛÙ'); 670 671 if( resendTime <= 0 ){ 672 clearInterval( resendTimer ); 673 // $timer.empty().append('<a href="#" class="resend_otp_sms">ارسا٠٠جدد</a>'); 674 // $resendLink.removeClass('disabled'); 675 $timer.html(''); 676 $timer.append('<a href="javascript:void(0);" class="resend_otp_sms" data-type_value="email">ارسا٠٠جدد</a>'); 677 } 678 resendTime--; 679 680 },1000); 681 $timer.attr('data-timer_time',resendTimer); 682 683 } 684 685 $register_otp_form.show(); 686 $register_otp_form.append('<input name="username_sended" type="hidden" value="'+$value+'">'); 687 } 688 689 if( 'mobile' === response.status ) 690 { 691 var $form_otp = $parents.find('.login_register_otp'); 692 $form_otp.find('.msg_detail_number').append(response.msg) 693 694 var resendTime = parseInt( optionarray.wating_time_resend_otp ); 695 var $timer = $form_otp.find('.time_resend'); 696 697 if( resendTime > 0 ) { 698 699 var resendTimer; 700 clearInterval( resendTimer ); 701 702 resendTimer = setInterval(function(){ 703 704 $timer.html('('+resendTime+') ثاÙÛÙ'); 705 706 if( resendTime <= 0 ){ 707 clearInterval( resendTimer ); 708 // $timer.empty().append('<a href="#" class="resend_otp_sms">ارسا٠٠جدد</a>'); 709 // $resendLink.removeClass('disabled'); 710 $timer.html(''); 711 $timer.append('<a href="javascript:void(0);" class="resend_otp_sms" data-type_value="mobile" >ارسا٠٠جدد</a>'); 712 } 713 resendTime--; 714 715 },1000); 716 $timer.attr('data-timer_time',resendTimer); 717 718 } 719 720 $form_otp.show(); 721 $form_otp.append('<input name="username_sended" type="hidden" value="'+$value+'">'); 722 } 723 }, 724 error:function( error ) 725 { 726 btn.removeClass('loading'); 727 btn.html(text_btn); 728 729 if( 'error' === error.responseJSON.status ) 730 { 731 $this.find('.login_register__description').after(show_alert_message( error.responseJSON.msg,error.responseJSON.status )); 732 733 setTimeout(function(e){ 734 $('body').find('.alert_message').remove(); 735 },3000); 736 737 if ( optionarray.captcha_is_enable ) { 738 if (!window.grecaptcha) { 739 } else { 740 grecaptcha.reset(); 741 } 742 } 743 } 744 } 745 }); 746 }); 747 748 $('body').on('submit','.form_login_email',function(e){ 749 e.preventDefault(); 750 var $this = $(this); 751 var $password = $this.find('input[name="password"]').val(); 752 var $nonce = $this.find('.nonce_login_email').val(); 753 var $value = $this.find('input[name="username_sended"]').val(); 754 755 var btn = $this.find('.login_register__submitbtn'); 756 btn.addClass('loading'); 757 var text_btn = btn.html(); 758 btn.empty(); 759 760 $.ajax({ 761 type: 'POST',dataType :'json', url: optionarray.plus_url, 762 data : { 763 action : 'email_or_account_login', 764 nonce : $nonce, 765 value : $value, 766 password : $password 767 }, 768 success:function(response) 769 { 770 btn.removeClass('loading'); 771 btn.html(text_btn); 772 if( 'success' === response.status ) 773 { 774 $this.find('.login_register__description').after(show_alert_message( response.msg,response.status )); 775 window.location.href = optionarray.WcPage.myacc; 776 } 777 }, 778 error:function( error ) 779 { 780 btn.removeClass('loading'); 781 btn.html(text_btn); 782 if( 'error' === error.responseJSON.status ) 783 { 784 $this.find('.login_register__description').after(show_alert_message( error.responseJSON.msg,error.responseJSON.status )); 785 786 setTimeout(function(e){ 787 $('body').find('.alert_message').remove(); 788 },3000); 789 790 } 791 } 792 }); 793 794 }); 795 796 }); 797 798 function show_alert_message( $msg , $class ) 799 { 800 return $('<div class="alert_message '+$class+'"> <i class="fa-light fa-square-exclamation"></i> '+$msg+' </div>'); 801 } 802 803 async function copyToClipboard(text) { 804 if (text === "") return; 805 try { 806 await navigator.clipboard.writeText(text); 807 } catch (err) { 808 console.error("Failed to copy: ", err); 809 } 810 } 811 812 const btn_copy__codes = document.querySelectorAll(".btn_copy__code"); 813 814 const tabbar_buttons_container = document.querySelector( 815 ".tabbar_container__buttons" 816 ); 817 818 const tabbar_contents_container = document.querySelector( 819 ".tabbar_container__contents" 820 ); 821 822 const accordion_containers = document.querySelectorAll(".accordion_container"); 823 824 if (tabbar_buttons_container && tabbar_contents_container) { 825 const tabbar_buttons = Array.from(tabbar_buttons_container.children);
826 const tabbar_contents = Array.from(tabbar_contents_container.children); 827 tabbar_buttons.forEach((button, index) => { 828 const selectedTab = tabbar_contents[index]; 829 button.addEventListener("click", () => { 830 tabbar_buttons.forEach((item) => item.classList.remove("show")); 831 tabbar_contents.forEach((item) => item.classList.remove("show")); 832 button.classList.add("show"); 833 selectedTab.classList.add("show"); 834 }); 835 }); 836 } 837 838 if (accordion_containers.length > 0) { 839 accordion_containers.forEach((menu) => { 840 const btn_open = menu.querySelector(".accordion_button"); 841 btn_open.addEventListener("click", () => { 842 menu.classList.toggle("opened"); 843 }); 844 }); 845 } 846 847 if (btn_copy__codes.length > 0) { 848 btn_copy__codes.forEach((button) => { 849 const content = button.querySelector(".content"); 850 const status = button.querySelector('.status'); 851 button.addEventListener("click", () => { 852 copyToClipboard(content.innerHTML) 853 status.innerHTML = "Ú©Ù¾Û Ø´Ø¯" 854 button.classList.add('active'); 855 setTimeout(() => { 856 status.innerHTML = "Ú©Ù¾Û Ú©Ø±Ø¯Ù" 857 button.classList.remove('active'); 858 }, 5000); 859 }); 860 }); 861 } 862 863 $('.dashboard_sidebar__container .btn_toggle__sidebar').click(function() { 864 $('.dashboard_sidebar__container').toggleClass('opened'); 865 $('.dashboard_sidebar__container').find(".blob").toggleClass('d-none'); 866 }); 867 868 869 //new form login register 870 $(document).ready(function(){ 871 872 $('.first_step').on('submit',function(e){ 873 e.preventDefault(); 874 var $this = $(this); 875 var from_parent = $this.parents('.form-box'); 876 var $value = $this.find('.username').val(); 877 var $nonce = $(this).find('.nonce_login_register').val(); 878 879 var captcha_val = false; 880 var $captcha = $(this).find('textarea[name="g-recaptcha-response"]'); 881 882 //otp form 883 var form_otp = $('.step_otp'); 884 var parent_formotp = form_otp.parents('.form-box'); 885 886 if( optionarray.captcha_is_enable ) 887 { 888 captcha_val = $captcha.val(); 889 } 890 891 var passwod_form = $('.step_password'); 892 var password_from_parent = passwod_form.parents('.form-box'); 893 894 var register_form = $('.register_step'); 895 var parent_register_form = register_form.parents('.form-box'); 896 $this.find('.submit-btn').addClass('loading'); 897 $this.find('.submit-btn').attr('disabled',true); 898 remove_show_password(); 899 $.ajax({ 900 type: 'POST',dataType :'json', url: optionarray.plus_url, 901 data:{ 902 action:'login_register_together', 903 value : $value, 904 captcha : captcha_val, 905 nonce : $nonce 906 }, 907 success:function(response){ 908 909 $this.find('.submit-btn').removeClass('loading'); 910 $this.find('.submit-btn').attr('disabled',false); 911 912 if( 'register_mobile' === response.status || 'register_email' === response.status || 'login' === response.status ) 913 { 914 if( 'login' === response.status ) 915 { 916 show_password(parent_formotp); 917 password_from_parent.find('.title_password').html(response.msg); 918 } 919 920 timer_resend(parent_formotp) 921 from_parent.hide(); 922 parent_formotp.find('.title_otp').html(response.msg); 923 parent_formotp.show(); 924 form_otp.attr('data-hashed',response.hashed); 925 back_to_start(parent_formotp,from_parent,response.back_to_start); 926 927 return; 928 } 929 930 if( !response?.tooltip_text?.step ) 931 { 932 $('a.tooltip.go_to_otp_auth').remove(); 933 $('a.tooltip.reset_pass').remove(); 934 }else{ 935 $('a.tooltip.go_to_otp_auth').attr('data-tooltip',response.tooltip_text.send_otp); 936 $('a.tooltip.reset_pass').attr('data-tooltip',response.tooltip_text.reset_password); 937 } 938 939 from_parent.hide(); 940 password_from_parent.show(); 941 password_from_parent.find('.title_password').html(response.msg); 942 passwod_form.find('.go_to_otp_auth').attr('data-hashed',response.hashed); 943 show_alert(from_parent,response.msg,'success'); 944 back_to_start(password_from_parent,from_parent,response.back_to_start); 945 }, 946 error : function(error){ 947 $this.find('.submit-btn').removeClass('loading'); 948 $this.find('.submit-btn').attr('disabled',false); 949 show_alert(from_parent,error.responseJSON.msg,'error'); 950 } 951 }); 952 953 }); 954 955 $('.step_password').on('submit',function(e){ 956 e.preventDefault(); 957 var $this = $(this); 958 var from_parent = $this.parents('.form-box'); 959 var $nonce = $this.find('.nonce_login_email').val(); 960 var $value = from_parent.find('.msg_strong').text(); 961 962 var $password = $this.find('.password').val(); 963 964 $this.find('.submit-btn').addClass('loading'); 965 $this.find('.submit-btn').attr('disabled',true); 966 967 $.ajax({ 968 type: 'POST',dataType :'json', url: optionarray.plus_url, 969 data : { 970 action : 'email_or_account_login', 971 nonce : $nonce, 972 value : $value, 973 password : $password 974 }, 975 success: function(response){ 976 977 $this.find('.submit-btn').removeClass('loading'); 978 $this.find('.submit-btn').attr('disabled',false); 979 980 show_alert(from_parent,response.msg,'success'); 981 982 setTimeout(() => { 983 if( $('body.plus_is_checkout').length ){ 984 window.location.href = optionarray.checkout_url; 985 }else{ 986 window.location.href = response.redirect_url; 987 } 988 }, 1000); 989 }, 990 error : function(error){ 991 $this.find('.submit-btn').removeClass('loading'); 992 $this.find('.submit-btn').attr('disabled',false); 993 994 show_alert(from_parent,error.responseJSON.msg,'error'); 995 } 996 }); 997 998 }); 999 1000 var ajax_start = false;
1001 $('.go_to_otp_auth').on('click',function(e){ 1002 e.preventDefault(); 1003 if( ajax_start ) 1004 { 1005 return; 1006 } 1007 1008 var $this = $(this); 1009 var from = $this.parents('.step_password'); 1010 var parents = from.parents('.form-box'); 1011 var $nonce = from.find('.nonce_login_email').val(); 1012 var form_otp = $('.step_otp'); 1013 var parent_otp = form_otp.parents('.form-box'); 1014 var hashed = $this.attr('data-hashed'); 1015 1016 from.find('.submit-btn').addClass('loading'); 1017 from.find('.submit-btn').attr('disabled',true); 1018 $this.attr('disabled',true); 1019 ajax_start = true; 1020 $.ajax({ 1021 type: 'POST',dataType :'json', url: optionarray.plus_url, 1022 data : { 1023 action : 'send_otp', 1024 nonce : $nonce, 1025 hashed_data : hashed 1026 }, 1027 success : function(response) 1028 { 1029 from.find('.submit-btn').removeClass('loading'); 1030 from.find('.submit-btn').attr('disabled',false); 1031 $this.attr('disabled',false); 1032 form_otp.attr('data-hashed',response.hashed); 1033 from.parents('.form-box').hide(); 1034 parent_otp.show(); 1035 timer_resend(parent_otp); 1036 parent_otp.find('.title_otp').html(response.msg); 1037 ajax_start = false;
1038 back_to_start(parent_otp,$('body .first_step'),response.back_to_start) 1039 }, 1040 error : function(error){ 1041 from.find('.submit-btn').removeClass('loading'); 1042 from.find('.submit-btn').attr('disabled',false); 1043 $this.attr('disabled',false); 1044 show_alert(parents,error.responseJSON.msg,'error'); 1045 ajax_start = false; 1046 back_to_start(parent_otp,$('body .first_step')) 1047 } 1048 }); 1049 1050 1051 }); 1052 1053 $('.step_otp').on('submit',function(e){ 1054 1055 e.preventDefault(); 1056 var $this = $(this); 1057 var parent_otp = $this.parents('.form-box'); 1058 var hashed = $this.attr('data-hashed'); 1059 var $nonce = $(this).find('.nonce_verify_otp').val(); 1060 var otp = ''; 1061 1062 //register 1063 var register_form = $('.register_step'); 1064 var parent_register_form = register_form.parents('.form-box'); 1065 1066 $this.find('.otp-input').each( function( index, input ){ 1067 1068 otp += $(this).val(); 1069 }); 1070 1071 otp = toEnglishDigits(otp); 1072 1073 $this.find('.submit-btn').addClass('loading'); 1074 $this.find('.submit-btn').attr('disabled',true); 1075 $.ajax({ 1076 dataType: 'json', type:'post', url: optionarray.plus_url, 1077 data:{ 1078 action: 'verify_otp', 1079 otp_sended : otp, 1080 hashed : hashed, 1081 nonce_verify_otp: $nonce 1082 }, 1083 success: function(response){ 1084 1085 $this.find('.submit-btn').removeClass('loading'); 1086 $this.find('.submit-btn').attr('disabled',false); 1087 if('register' === response.step) 1088 { 1089 if( 'email' === response.register ) 1090 { 1091 register_form.find('.email_here').empty(); 1092 $(`${'<input type="text" id="phone" name="phone" required autocomplete="off"><label for="phone">Ø´Ù Ø§Ø±Ù Ù ÙØ¨Ø§ÛÙ</label><svg class="input-icon" width="20" height="20" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M5 4H9L11 9L8.5 10.5C9.57096 12.6715 11.3285 14.429 13.5 15.5L15 13L20 15V19C20 19.5304 19.7893 20.0391 19.4142 20.4142C19.0391 20.7893 18.5304 21 18 21C14.0993 20.763 10.4202 19.1065 7.65683 16.3432C4.8935 13.5798 3.23705 9.90074 3 6C3 5.46957 3.21071 4.96086 3.58579 4.58579C3.96086 4.21071 4.46957 4 5 4" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" /> </svg></div>'}`).appendTo('.email_here'); 1093 } 1094 parent_otp.hide(); 1095 register_form.attr('data-hashed',response.hashed); 1096 parent_register_form.show(); 1097 return; 1098 } 1099 1100 if( 'rest_pass'=== response.step ) 1101 { 1102 parent_otp.hide(); 1103 const from_rest_pass = $('.reset_password'); 1104 const parent_rest_pass = from_rest_pass.parents('.form-box'); 1105 from_rest_pass.attr('data-hashed',response.hashed); 1106 parent_rest_pass.show(); 1107 return; 1108 } 1109 1110 show_alert(parent_otp,response.msg,'success'); 1111 1112 setTimeout(() => { 1113 if( $('body.plus_is_checkout').length ){ 1114 window.location.href = optionarray.checkout_url; 1115 }else{ 1116 window.location.href = response.redirect_url; 1117 } 1118 1119 }, 1000); 1120 1121 }, 1122 error : function(error){ 1123 1124 $this.find('.submit-btn').removeClass('loading'); 1125 $this.find('.submit-btn').attr('disabled',false); 1126 1127 show_alert(parent_otp,error.responseJSON.msg,'error'); 1128 }, 1129 }); 1130 }); 1131 1132 var isAjaxLoading = false; 1133 $('.reset_pass').on('click',function(e){ 1134 e.preventDefault(); 1135 1136 if (isAjaxLoading) { 1137 return; 1138 } 1139 var $this = $(this); 1140 var parent = $this.parents('.step_password'); 1141 var parents = parent.parents('.form-box'); 1142 var hashed = parent.find('.go_to_otp_auth').attr('data-hashed'); 1143 1144 var form_otp = $('.step_otp'); 1145 var parent_otp = form_otp.parents('.form-box'); 1146 1147 parent.find('.submit-btn').addClass('loading'); 1148 parent.find('.submit-btn').attr('disabled',true); 1149 1150 isAjaxLoading = true; 1151 $.ajax({ 1152 dataType: 'json', type:'post', url: optionarray.plus_url, 1153 data:{ 1154 action: 'lets_reset_password', 1155 hashed : hashed, 1156 nonce_lets_reset : optionarray.nonce 1157 }, 1158 success: function(response){ 1159 1160 parent.find('.submit-btn').removeClass('loading'); 1161 parent.find('.submit-btn').attr('disabled',false); 1162 1163 form_otp.attr('data-hashed',response.hashed); 1164 parent.parents('.form-box').hide(); 1165 parent_otp.show(); 1166 timer_resend(parent_otp); 1167 parent_otp.find('.title_otp').html(response.msg); 1168 isAjaxLoading = false;
1169 }, 1170 error : function(error){ 1171 1172 parent.find('.submit-btn').removeClass('loading'); 1173 parent.find('.submit-btn').attr('disabled',false); 1174 1175 show_alert(parents,error.responseJSON.msg,'error'); 1176 isAjaxLoading = false; 1177 }, 1178 }); 1179 1180 }); 1181 1182 $('.reset_password').on('submit',function(e){ 1183 e.preventDefault(); 1184 var $this = $(this); 1185 var newpassword = $this.find('.newpassword').val(); 1186 var repatpassword = $this.find('.repeatpassword').val(); 1187 var parent = $this.parents('.form-box'); 1188 1189 if( newpassword !== repatpassword ) 1190 { 1191 return show_alert(parent,'Ø±Ù Ø²Ø¹Ø¨ÙØ± Ûکسا٠ÙÛØ³Øª','error'); 1192 } 1193 1194 if(newpassword.length < 6) 1195 { 1196 return show_alert(parent,'ر٠ز Ø¹Ø¨ÙØ± ÙÙ ÛØªÙØ§ÙØ¯ Ú©ÙÚÚ© تر از 6 رÙ٠باشد','error'); 1197 } 1198 1199 var nonce_reset_password = $this.find('.nonce_reset_password').val(); 1200 var hashed = $this.attr('data-hashed'); 1201 1202 $this.find('.submit-btn').addClass('loading'); 1203 $this.find('.submit-btn').attr('disabled',true); 1204 1205 $.ajax({ 1206 dataType: 'json', type:'post', url: optionarray.plus_url, 1207 data:{ 1208 action: 'reset_password', 1209 hashed : hashed, 1210 nonce_reset_password: nonce_reset_password, 1211 newpassword : newpassword 1212 }, 1213 success: function(response){ 1214 1215 $this.find('.submit-btn').removeClass('loading'); 1216 $this.find('.submit-btn').attr('disabled',false); 1217 1218 show_alert(parent,response.msg,'success'); 1219 1220 setTimeout(() => { 1221 if( $('body.plus_is_checkout').length ){ 1222 window.location.href = optionarray.checkout_url; 1223 }else{ 1224 window.location.href = response.redirect_url; 1225 } 1226 1227 }, 1000); 1228 }, 1229 error : function(error){ 1230 $this.find('.submit-btn').removeClass('loading'); 1231 $this.find('.submit-btn').attr('disabled',false); 1232 show_alert(parent,error.responseJSON.msg,'error'); 1233 }, 1234 }); 1235 }); 1236 1237 $('.register_step').on('submit',function(e){ 1238 e.preventDefault(); 1239 var $this = $(this); 1240 var parent = $this.parent('.form-box'); 1241 var username = $this.find('.user_name').val(); 1242 var email = $this.find('.email').val(); 1243 var phone = $this.find('#phone').val(); 1244 var birth_day = $this.find('#birth_day').val(); 1245 var newpassword = $this.find('.new_password').val(); 1246 var repatpassword = $this.find('.repate_password').val(); 1247 var nonce_register_form = $this.find('.nonce_form_register').val(); 1248 var hashed = $this.attr('data-hashed'); 1249 1250 var isValid = /^[a-zA-Z0-9_]+$/.test(username); 1251 1252 if( !isValid ) 1253 { 1254 return show_alert(parent,optionarray.errors.latinUsername,'error'); 1255 } 1256 1257 if( newpassword !== repatpassword ) 1258 { 1259 return show_alert(parent,optionarray.errors.passwordNotSame,'error'); 1260 } 1261 1262 if(newpassword.length < 6) 1263 { 1264 return show_alert(parent,optionarray.errors.passwordLessThan,'error'); 1265 } 1266 1267 $this.find('.submit-btn').addClass('loading'); 1268 $this.find('.submit-btn').attr('disabled',true); 1269 1270 $.ajax({ 1271 1272 dataType: 'json', type:'post', url: optionarray.plus_url, 1273 data:{ 1274 action: 'register_form', 1275 hashed : hashed, 1276 nonce_register_form: nonce_register_form, 1277 username : username, 1278 email : email, 1279 phone : phone, 1280 password : newpassword, 1281 birth_day : birth_day 1282 }, 1283 success:function(response){ 1284 1285 $this.find('.submit-btn').removeClass('loading'); 1286 $this.find('.submit-btn').attr('disabled',false); 1287 1288 show_alert(parent,response.msg,'success'); 1289 1290 setTimeout(() => { 1291 if( $('body.plus_is_checkout').length ){ 1292 window.location.href = optionarray.checkout_url; 1293 }else{ 1294 window.location.href = response.redirect_url; 1295 } 1296 }, 1000); 1297 1298 }, 1299 error : function(error){ 1300 $this.find('.submit-btn').removeClass('loading'); 1301 $this.find('.submit-btn').attr('disabled',false); 1302 1303 show_alert(parent,error.responseJSON.msg,'error'); 1304 } 1305 }); 1306 }); 1307 1308 if( $('#birth_day').length ) 1309 { 1310 $("#birth_day").on("change", function () { 1311 if ($(this).val().trim() !== "") { 1312 $(this).addClass("has-value"); 1313 } else { 1314 $(this).removeClass("has-value"); 1315 } 1316 }); 1317 1318 if ($("#birth_day").val().trim() !== "") { 1319 $("#birth_day").addClass("has-value"); 1320 } 1321 kamaDatepicker('birth_day', 1322 { 1323 twodigit : false 1324 } 1325 ); 1326 } 1327 }); 1328 1329 function toEnglishDigits(str) { 1330 return str 1331 .replace(/[Û°-Û¹]/g, d => 'Û°Û±Û²Û³Û´ÛµÛ¶Û·Û¸Û¹'.indexOf(d)) 1332 .replace(/[Ù -Ù©]/g, d => '٠١٢٣٤٥٦٧٨٩'.indexOf(d)); 1333 } 1334 1335 function back_to_start($current,$back,$text) 1336 { 1337 $('body').find('.back_to_start').text($text); 1338 1339 $('body').on('click','.back_to_start',function(){
1340 let $this = $(this); 1341 let current = $this.parents('.form-box'); 1342 1343 var alert = $back.find('.alert'); 1344 1345 if( alert.length ) 1346 { 1347 alert.hide(); 1348 } 1349 current.hide(); 1350 1351 $back.show(); 1352 }); 1353 } 1354 1355 function timer_resend( $form_otp ) 1356 { 1357 var resendTime = parseInt( optionarray.wating_time_resend_otp ); 1358 var $timer = $form_otp.find('.timer'); 1359 1360 if( resendTime > 0 ) { 1361 1362 var resendTimer; 1363 1364 clearInterval( resendTimer ); 1365 1366 resendTimer = setInterval(function(){ 1367 1368 if( !$timer.find('#countdown').length ) 1369 { 1370 $timer.html(optionarray.resend_text+' <span id="countdown"></span>'); 1371 } 1372 $timer.find('#countdown').html('('+resendTime+') ثاÙÛÙ'); 1373 1374 if( resendTime <= 0 ){ 1375 clearInterval( resendTimer ); 1376 $timer.html(''); 1377 $timer.append('<a href="javascript:void(0);" class="resend_otp_sms" data-type_value="mobile" >ارسا٠٠جدد</a>'); 1378 } 1379 resendTime--; 1380 1381 },1000); 1382 $timer.attr('data-timer_time',resendTimer); 1383 } 1384 } 1385 1386 function show_alert( form,msg,type ) 1387 { 1388 var alert = form.find('.alert'); 1389 var msg_box = alert.find('.alert_msg'); 1390 1391 if( type == 'error' ) 1392 { 1393 msg_box.html(msg); 1394 alert.addClass('alert-error'); 1395 alert.show(); 1396 1397 } 1398 1399 if( type === 'success' ) 1400 { 1401 msg_box.html(msg); 1402 alert.addClass('alert-success'); 1403 alert.show(); 1404 } 1405 setTimeout(function(){ 1406 if( alert.hasClass('alert-error') ){ 1407 alert.removeClass('alert-error'); 1408 } 1409 if( alert.hasClass('alert-success') ){ 1410 alert.removeClass('alert-success'); 1411 } 1412 alert.hide(); 1413 },3000); 1414 1415 } 1416 1417 function show_password($need_to_append) 1418 { 1419 1420 $need_to_append.find('.extra-links').append('<a href="#" class="show_password" onclick="event.preventDefault();">'+optionarray.login_whit_password+'</a>'); 1421 1422 $('body').on('click','.show_password',function(){ 1423 let password_step = $('.step_password').parent('.form-box'); 1424 password_step.find('.go_to_otp_auth').remove(); 1425 password_step.show(); 1426 1427 $(this).parents('.form-box').hide(); 1428 }); 1429 } 1430 function remove_show_password() 1431 { 1432 $('body').find('.extra-links .show_password').remove(); 1433 } 1434 //checkout fixed 1435 1436 if( $('body.plus_is_checkout').length ) 1437 { 1438 1439 let login_register_wd = $('.wd-dropdown-register'); 1440 let login_register_wd_side = $('.login-form-side'); 1441 let wd_button_login = $('.wd-header-my-account'); 1442 1443 if( login_register_wd.length || login_register_wd_side.length ) 1444 { 1445 login_register_wd.remove(); 1446 login_register_wd_side.remove(); 1447 wd_button_login.removeClass('wd-with-overlay'); 1448 } 1449 } 1450 1451})( jQuery ); 1452 1453function onloadCallbackCaptcha() 1454{ 1455 if( optionarray.captcha_is_enable ) 1456 { 1457 if (!window.grecaptcha) { 1458 } else { 1459 setTimeout(function(){ 1460 var recaptchas = document.getElementsByClassName("ga-recaptcha"); 1461 for(var i=0; i<recaptchas.length; i++) { 1462 var recaptcha = recaptchas[i]; 1463 var sitekey = recaptcha.dataset.sitekey; 1464 1465 grecaptcha.render(recaptcha, { 1466 'sitekey' : sitekey 1467 }); 1468 } 1469 }, 500); 1470 } 1471 } 1472} 1473 1474 1475function myFunction() { 1476 document.getElementById("myDropdown").classList.toggle("show"); 1477 } 1478 1479 // Close the dropdown if the user clicks outside of it 1480window.onclick = function(event) { 1481 if (!event.target.matches('.dropbtn')) { 1482 var dropdowns = document.getElementsByClassName("dropdown-content"); 1483 var i; 1484 for (i = 0; i < dropdowns.length; i++) { 1485 var openDropdown = dropdowns[i]; 1486 if (openDropdown.classList.contains('show')) { 1487 openDropdown.classList.remove('show'); 1488 } 1489 } 1490 } 1491}
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.