1//custom jquery method for toggle attr 2$.fn.toggleAttr = function (attr, attr1, attr2) { 3 return this.each(function () { 4 var self = $(this); 5 if (self.attr(attr) == attr1) self.attr(attr, attr2); 6 else self.attr(attr, attr1); 7 }); 8}; 9(function ($) { 10 // USE STRICT 11 "use strict"; 12 13 AIZ.data = { 14 csrf: $('meta[name="csrf-token"]').attr("content"), 15 appUrl: $('meta[name="app-url"]').attr("content"), 16 fileBaseUrl: $('meta[name="file-base-url"]').attr("content"), 17 }; 18 AIZ.uploader = { 19 data: { 20 selectedFiles: [], 21 selectedFilesObject: [], 22 clickedForDelete: null, 23 allFiles: [], 24 multiple: false, 25 type: "all", 26 next_page_url: null, 27 prev_page_url: null, 28 }, 29 removeInputValue: function (id, array, elem) { 30 var selected = array.filter(function (item) { 31 return item !== id; 32 }); 33 if (selected.length > 0) { 34 $(elem) 35 .find(".file-amount") 36 .html(AIZ.uploader.updateFileHtml(selected)); 37 } else { 38 elem.find(".file-amount").html(AIZ.local.choose_file); 39 } 40 $(elem).find(".selected-files").val(selected); 41 }, 42 removeAttachment: function () { 43 $(document).on("click", ".remove-attachment", function () { 44 var value = $(this).closest(".file-preview-item").data("id"); 45 var selected = $(this) 46 .closest(".file-preview") 47 .prev('[data-toggle="aizuploader"]') 48 .find(".selected-files") 49 .val() 50 .split(",") 51 .map(Number); 52 53 AIZ.uploader.removeInputValue( 54 value, 55 selected, 56 $(this) 57 .closest(".file-preview") 58 .prev('[data-toggle="aizuploader"]') 59 ); 60 $(this).closest(".file-preview-item").remove(); 61 }); 62 }, 63 deleteUploaderFile: function () { 64 $(".aiz-uploader-delete").each(function () { 65 $(this).on("click", function (e) { 66 e.preventDefault(); 67 var id = $(this).data("id"); 68 AIZ.uploader.data.clickedForDelete = id; 69 $("#aizUploaderDelete").modal("show"); 70 71 $(".aiz-uploader-confirmed-delete").on( 72 "click", 73 function (e) { 74 e.preventDefault(); 75 if (e.detail === 1) { 76 var clickedForDeleteObject = 77 AIZ.uploader.data.allFiles[ 78 AIZ.uploader.data.allFiles.findIndex( 79 (x) => 80 x.id === 81 AIZ.uploader.data 82 .clickedForDelete 83 ) 84 ]; 85 $.ajax({ 86 url: 87 AIZ.data.appUrl + 88 "/aiz-uploader/destroy/" + 89 AIZ.uploader.data.clickedForDelete, 90 type: "DELETE", 91 dataType: "JSON", 92 data: { 93 id: AIZ.uploader.data.clickedForDelete, 94 _method: "DELETE", 95 _token: AIZ.data.csrf, 96 }, 97 success: function () { 98 AIZ.uploader.data.selectedFiles = 99 AIZ.uploader.data.selectedFiles.filter( 100 function (item) { 101 return ( 102 item !== 103 AIZ.uploader.data 104 .clickedForDelete 105 ); 106 } 107 ); 108 AIZ.uploader.data.selectedFilesObject = 109 AIZ.uploader.data.selectedFilesObject.filter( 110 function (item) { 111 return ( 112 item !== 113 clickedForDeleteObject 114 ); 115 } 116 ); 117 AIZ.uploader.updateUploaderSelected(); 118 AIZ.uploader.getAllUploads( 119 AIZ.data.appUrl + 120 "/aiz-uploader/get-uploaded-files" 121 ); 122 AIZ.uploader.data.clickedForDelete = 123 null; 124 $("#aizUploaderDelete").modal("hide"); 125 }, 126 }); 127 } 128 } 129 ); 130 }); 131 }); 132 }, 133 uploadSelect: function () { 134 $(".aiz-uploader-select").each(function () { 135 var elem = $(this); 136 elem.on("click", function (e) { 137 var value = $(this).data("value"); 138 var valueObject = 139 AIZ.uploader.data.allFiles[ 140 AIZ.uploader.data.allFiles.findIndex( 141 (x) => x.id === value 142 ) 143 ]; 144 // console.log(valueObject); 145 146 elem.closest(".aiz-file-box-wrap").toggleAttr( 147 "data-selected", 148 "true", 149 "false" 150 ); 151 if (!AIZ.uploader.data.multiple) { 152 elem.closest(".aiz-file-box-wrap") 153 .siblings() 154 .attr("data-selected", "false"); 155 } 156 if (!AIZ.uploader.data.selectedFiles.includes(value)) { 157 if (!AIZ.uploader.data.multiple) { 158 AIZ.uploader.data.selectedFiles = []; 159 AIZ.uploader.data.selectedFilesObject = []; 160 } 161 AIZ.uploader.data.selectedFiles.push(value); 162 AIZ.uploader.data.selectedFilesObject.push(valueObject); 163 } else { 164 AIZ.uploader.data.selectedFiles = 165 AIZ.uploader.data.selectedFiles.filter(function ( 166 item 167 ) { 168 return item !== value; 169 }); 170 AIZ.uploader.data.selectedFilesObject = 171 AIZ.uploader.data.selectedFilesObject.filter( 172 function (item) { 173 return item !== valueObject; 174 } 175 ); 176 } 177 AIZ.uploader.addSelectedValue(); 178 AIZ.uploader.updateUploaderSelected(); 179 }); 180 }); 181 }, 182 updateFileHtml: function (array) { 183 var fileText = ""; 184 if (array.length > 1) { 185 var fileText = AIZ.local.files_selected; 186 } else { 187 var fileText = AIZ.local.file_selected; 188 } 189 return array.length + " " + fileText; 190 }, 191 updateUploaderSelected: function () { 192 $(".aiz-uploader-selected").html( 193 AIZ.uploader.updateFileHtml(AIZ.uploader.data.selectedFiles) 194 ); 195 }, 196 clearUploaderSelected: function () { 197 $(".aiz-uploader-selected-clear").on("click", function () { 198 AIZ.uploader.data.selectedFiles = []; 199 AIZ.uploader.addSelectedValue(); 200 AIZ.uploader.addHiddenValue(); 201 AIZ.uploader.resetFilter(); 202 AIZ.uploader.updateUploaderSelected(); 203 AIZ.uploader.updateUploaderFiles(); 204 }); 205 }, 206 resetFilter: function () { 207 $('[name="aiz-uploader-search"]').val(""); 208 $('[name="aiz-show-selected"]').prop("checked", false); 209 $('[name="aiz-uploader-sort"] option[value=newest]').prop( 210 "selected", 211 true 212 ); 213 }, 214 getAllUploads: function (url, search_key = null, sort_key = null) { 215 $(".aiz-uploader-all").html( 216 '<div class="align-items-center d-flex h-100 justify-content-center w-100"><div class="spinner-border" role="status"></div></div>' 217 ); 218 var params = {}; 219 if (search_key != null && search_key.length > 0) { 220 params["search"] = search_key; 221 } 222 if (sort_key != null && sort_key.length > 0) { 223 params["sort"] = sort_key; 224 } else { 225 params["sort"] = "newest"; 226 } 227 $.get(url, params, function (data, status) { 228 //console.log(data); 229 if (typeof data == "string") { 230 data = JSON.parse(data); 231 } 232 AIZ.uploader.data.allFiles = data.data; 233 AIZ.uploader.allowedFileType(); 234 AIZ.uploader.addSelectedValue(); 235 AIZ.uploader.addHiddenValue(); 236 //AIZ.uploader.resetFilter(); 237 AIZ.uploader.updateUploaderFiles(); 238 if (data.next_page_url != null) { 239 AIZ.uploader.data.next_page_url = data.next_page_url; 240 $("#uploader_next_btn").removeAttr("disabled"); 241 } else { 242 $("#uploader_next_btn").attr("disabled", true); 243 } 244 if (data.prev_page_url != null) { 245 AIZ.uploader.data.prev_page_url = data.prev_page_url; 246 $("#uploader_prev_btn").removeAttr("disabled"); 247 } else { 248 $("#uploader_prev_btn").attr("disabled", true); 249 } 250 }); 251 }, 252 showSelectedFiles: function () { 253 $('[name="aiz-show-selected"]').on("change", function () { 254 if ($(this).is(":checked")) { 255 // for ( 256 // var i = 0; 257 // i < AIZ.uploader.data.allFiles.length; 258 // i++ 259 // ) { 260 // if (AIZ.uploader.data.allFiles[i].selected) { 261 // AIZ.uploader.data.allFiles[ 262 // i 263 // ].aria_hidden = false;
264 // } else { 265 // AIZ.uploader.data.allFiles[ 266 // i 267 // ].aria_hidden = true; 268 // } 269 // } 270 AIZ.uploader.data.allFiles = 271 AIZ.uploader.data.selectedFilesObject; 272 } else { 273 // for ( 274 // var i = 0; 275 // i < AIZ.uploader.data.allFiles.length; 276 // i++ 277 // ) { 278 // AIZ.uploader.data.allFiles[ 279 // i 280 // ].aria_hidden = false; 281 // } 282 AIZ.uploader.getAllUploads( 283 AIZ.data.appUrl + "/aiz-uploader/get-uploaded-files" 284 ); 285 } 286 AIZ.uploader.updateUploaderFiles(); 287 }); 288 }, 289 searchUploaderFiles: function () { 290 $('[name="aiz-uploader-search"]').on("keyup", function () { 291 var value = $(this).val(); 292 AIZ.uploader.getAllUploads( 293 AIZ.data.appUrl + "/aiz-uploader/get-uploaded-files", 294 value, 295 $('[name="aiz-uploader-sort"]').val() 296 ); 297 // if (AIZ.uploader.data.allFiles.length > 0) { 298 // for ( 299 // var i = 0; 300 // i < AIZ.uploader.data.allFiles.length; 301 // i++ 302 // ) { 303 // if ( 304 // AIZ.uploader.data.allFiles[ 305 // i 306 // ].file_original_name 307 // .toUpperCase() 308 // .indexOf(value) > -1 309 // ) { 310 // AIZ.uploader.data.allFiles[ 311 // i 312 // ].aria_hidden = false; 313 // } else { 314 // AIZ.uploader.data.allFiles[ 315 // i 316 // ].aria_hidden = true; 317 // } 318 // } 319 // } 320 //AIZ.uploader.updateUploaderFiles(); 321 }); 322 }, 323 sortUploaderFiles: function () { 324 $('[name="aiz-uploader-sort"]').on("change", function () { 325 var value = $(this).val(); 326 AIZ.uploader.getAllUploads( 327 AIZ.data.appUrl + "/aiz-uploader/get-uploaded-files", 328 $('[name="aiz-uploader-search"]').val(), 329 value 330 ); 331 332 // if (value === "oldest") { 333 // AIZ.uploader.data.allFiles = AIZ.uploader.data.allFiles.sort( 334 // function(a, b) { 335 // return ( 336 // new Date(a.created_at) - new Date(b.created_at) 337 // ); 338 // } 339 // ); 340 // } else if (value === "smallest") { 341 // AIZ.uploader.data.allFiles = AIZ.uploader.data.allFiles.sort( 342 // function(a, b) { 343 // return a.file_size - b.file_size; 344 // } 345 // ); 346 // } else if (value === "largest") { 347 // AIZ.uploader.data.allFiles = AIZ.uploader.data.allFiles.sort( 348 // function(a, b) { 349 // return b.file_size - a.file_size; 350 // } 351 // ); 352 // } else { 353 // AIZ.uploader.data.allFiles = AIZ.uploader.data.allFiles.sort( 354 // function(a, b) { 355 // a = new Date(a.created_at); 356 // b = new Date(b.created_at); 357 // return a > b ? -1 : a < b ? 1 : 0; 358 // } 359 // ); 360 // } 361 //AIZ.uploader.updateUploaderFiles(); 362 }); 363 }, 364 addSelectedValue: function () { 365 for (var i = 0; i < AIZ.uploader.data.allFiles.length; i++) { 366 if ( 367 !AIZ.uploader.data.selectedFiles.includes( 368 AIZ.uploader.data.allFiles[i].id 369 ) 370 ) { 371 AIZ.uploader.data.allFiles[i].selected = false;
372 } else { 373 AIZ.uploader.data.allFiles[i].selected = true; 374 } 375 } 376 }, 377 addHiddenValue: function () { 378 for (var i = 0; i < AIZ.uploader.data.allFiles.length; i++) { 379 AIZ.uploader.data.allFiles[i].aria_hidden = false; 380 } 381 }, 382 allowedFileType: function () { 383 if (AIZ.uploader.data.type !== "all") { 384 let type = AIZ.uploader.data.type.split(","); 385 AIZ.uploader.data.allFiles = AIZ.uploader.data.allFiles.filter( 386 function (item) { 387 return type.includes(item.type); 388 } 389 ); 390 } 391 }, 392 updateUploaderFiles: function () { 393 $(".aiz-uploader-all").html( 394 '<div class="align-items-center d-flex h-100 justify-content-center w-100"><div class="spinner-border" role="status"></div></div>' 395 ); 396 397 var data = AIZ.uploader.data.allFiles; 398 399 setTimeout(function () { 400 $(".aiz-uploader-all").html(null); 401 402 if (data.length > 0) { 403 for (var i = 0; i < data.length; i++) { 404 var thumb = ""; 405 var hidden = ""; 406 if (data[i].type === "image") { 407 thumb = 408 '<img src="' + 409 AIZ.data.fileBaseUrl + 410 data[i].file_name + 411 '" class="img-fit">'; 412 } else if(data[i].type === 'video') { 413 thumb = '<video width="100%" height="100%" controls><source src="'+AIZ.data.fileBaseUrl + data[i].file_name +'" type="video/mp4">Your browser does not support the video tag.</video>' 414 } else { 415 thumb = '<i class="la la-file-text"></i>'; 416 } 417 var html = 418 '<div class="aiz-file-box-wrap" aria-hidden="' + 419 data[i].aria_hidden + 420 '" data-selected="' + 421 data[i].selected + 422 '">' + 423 '<div class="aiz-file-box">' + 424 // '<div class="dropdown-file">' + 425 // '<a class="dropdown-link" data-toggle="dropdown">' + 426 // '<i class="la la-ellipsis-v"></i>' + 427 // "</a>" + 428 // '<div class="dropdown-menu dropdown-menu-right">' + 429 // '<a href="' + 430 // AIZ.data.fileBaseUrl + 431 // data[i].file_name + 432 // '" target="_blank" download="' + 433 // data[i].file_original_name + 434 // "." + 435 // data[i].extension + 436 // '" class="dropdown-item"><i class="la la-download mr-2"></i>Download</a>' + 437 // '<a href="#" class="dropdown-item aiz-uploader-delete" data-id="' + 438 // data[i].id + 439 // '"><i class="la la-trash mr-2"></i>Delete</a>' + 440 // "</div>" + 441 // "</div>" + 442 '<div class="card card-file aiz-uploader-select" title="' + 443 data[i].file_original_name + 444 "." + 445 data[i].extension + 446 '" data-value="' + 447 data[i].id + 448 '">' + 449 '<div class="card-file-thumb">' + 450 thumb + 451 "</div>" + 452 '<div class="card-body ">' + 453 '<h6 class="d-flex">' + 454 '<span class="text-truncate title">' + 455 data[i].file_original_name + 456 "</span>" + 457 '<span class="ext flex-shrink-0">.' + 458 data[i].extension + 459 "</span>" + 460 "</h6>" + 461 "<p>" + 462 AIZ.extra.bytesToSize(data[i].file_size) + 463 "</p>" + 464 "</div>" + 465 "</div>" + 466 "</div>" + 467 "</div>"; 468 469 $(".aiz-uploader-all").append(html); 470 } 471 } else { 472 $(".aiz-uploader-all").html( 473 '<div class="align-items-center d-flex h-100 justify-content-center w-100 nav-tabs"><div class="text-center"><h3>No files found</h3></div></div>' 474 ); 475 } 476 AIZ.uploader.uploadSelect(); 477 AIZ.uploader.deleteUploaderFile(); 478 }, 300); 479 }, 480 inputSelectPreviewGenerate: function (elem) { 481 elem.find(".selected-files").val(AIZ.uploader.data.selectedFiles); 482 elem.next(".file-preview").html(null); 483 484 if (AIZ.uploader.data.selectedFiles.length > 0) { 485 $.post( 486 AIZ.data.appUrl + "/aiz-uploader/get_file_by_ids", 487 { 488 _token: AIZ.data.csrf, 489 ids: AIZ.uploader.data.selectedFiles.toString(), 490 }, 491 function (data) { 492 elem.next(".file-preview").html(null); 493 494 if (data.length > 0) { 495 elem.find(".file-amount").html( 496 AIZ.uploader.updateFileHtml(data) 497 ); 498 for (var i = 0; i < data.length; i++) { 499 var thumb = ""; 500 if (data[i].type === "image") { 501 thumb = 502 '<img src="' + 503 data[i].file_name + 504 '" class="img-fit">'; 505 }else if(data[i].type === 'video') { 506 thumb = '<video width="320" height="240" controls><source src="'+ data[i].file_name +'" type="video/mp4">Your browser does not support the video tag.</video>' 507 } else { 508 thumb = '<i class="la la-file-text"></i>'; 509 } 510 var html = 511 '<div class="d-flex justify-content-between align-items-center mt-2 file-preview-item" data-id="' + 512 data[i].id + 513 '" title="' + 514 data[i].file_original_name + 515 "." + 516 data[i].extension + 517 '">' + 518 '<div class="align-items-center align-self-stretch d-flex justify-content-center thumb">' + 519 thumb + 520 "</div>" + 521 '<div class="col body">' + 522 '<h6 class="d-flex">' + 523 '<span class=" text-truncate " >' + 524 data[i].file_original_name + 525 "</span>" + 526 '<span class="flex-shrink-0 ext">.' + 527 data[i].extension + 528 "</span>" + 529 "</h6>" + 530 "<p>" + 531 AIZ.extra.bytesToSize(data[i].file_size) + 532 "</p>" + 533 "</div>" + 534 '<div class="remove">' + 535 '<button class="btn btn-sm btn-link remove-attachment" type="button">' + 536 '<i class="la la-close"></i>' + 537 "</button>" + 538 "</div>" + 539 "</div>"; 540 541 elem.next(".file-preview").append(html); 542 } 543 } else { 544 elem.find(".file-amount").html( 545 AIZ.local.choose_file 546 ); 547 } 548 } 549 ); 550 } else { 551 elem.find(".file-amount").html(AIZ.local.choose_file); 552 } 553 554 // if (AIZ.uploader.data.selectedFiles.length > 0) { 555 // elem.find(".file-amount").html( 556 // AIZ.uploader.updateFileHtml(AIZ.uploader.data.selectedFiles) 557 // ); 558 // for ( 559 // var i = 0; 560 // i < AIZ.uploader.data.selectedFiles.length; 561 // i++ 562 // ) { 563 // var index = AIZ.uploader.data.allFiles.findIndex( 564 // (x) => x.id === AIZ.uploader.data.selectedFiles[i] 565 // ); 566 // var thumb = ""; 567 // if (AIZ.uploader.data.allFiles[index].type == "image") { 568 // thumb = 569 // '<img src="' + 570 // AIZ.data.appUrl + 571 // "/public/" + 572 // AIZ.uploader.data.allFiles[index].file_name + 573 // '" class="img-fit">'; 574 // } else { 575 // thumb = '<i class="la la-file-text"></i>'; 576 // } 577 // var html = 578 // '<div class="d-flex justify-content-between align-items-center mt-2 file-preview-item" data-id="' + 579 // AIZ.uploader.data.allFiles[index].id + 580 // '" title="' + 581 // AIZ.uploader.data.allFiles[index].file_original_name + 582 // "." + 583 // AIZ.uploader.data.allFiles[index].extension + 584 // '">' + 585 // '<div class="align-items-center align-self-stretch d-flex justify-content-center thumb">' + 586 // thumb + 587 // "</div>" + 588 // '<div class="col body">' + 589 // '<h6 class="d-flex">' + 590 // '<span class="text-truncate title">' + 591 // AIZ.uploader.data.allFiles[index].file_original_name + 592 // "</span>" + 593 // '<span class="ext">.' + 594 // AIZ.uploader.data.allFiles[index].extension + 595 // "</span>" + 596 // "</h6>" + 597 // "<p>" + 598 // AIZ.extra.bytesToSize( 599 // AIZ.uploader.data.allFiles[index].file_size 600 // ) + 601 // "</p>" + 602 // "</div>" + 603 // '<div class="remove">' + 604 // '<button class="btn btn-sm btn-link remove-attachment" type="button">' + 605 // '<i class="la la-close"></i>' + 606 // "</button>" + 607 // "</div>" + 608 // "</div>"; 609 610 // elem.next(".file-preview").append(html); 611 // } 612 // } else { 613 // elem.find(".file-amount").html("Choose File"); 614 // } 615 }, 616 editorImageGenerate: function (elem) { 617 if (AIZ.uploader.data.selectedFiles.length > 0) { 618 for ( 619 var i = 0; 620 i < AIZ.uploader.data.selectedFiles.length; 621 i++ 622 ) { 623 var index = AIZ.uploader.data.allFiles.findIndex( 624 (x) => x.id === AIZ.uploader.data.selectedFiles[i] 625 ); 626 var thumb = ""; 627 if (AIZ.uploader.data.allFiles[index].type === "image") { 628 thumb = 629 '<img src="' + 630 AIZ.data.fileBaseUrl + 631 AIZ.uploader.data.allFiles[index].file_name + 632 '">'; 633 elem[0].insertHTML(thumb); 634 // console.log(elem); 635 } 636 } 637 } 638 },
639 dismissUploader: function () { 640 $("#aizUploaderModal").on("hidden.bs.modal", function () { 641 $(".aiz-uploader-backdrop").remove(); 642 $("#aizUploaderModal").remove(); 643 }); 644 }, 645 trigger: function ( 646 elem = null, 647 from = "", 648 type = "all", 649 selectd = "", 650 multiple = false, 651 callback = null 652 ) { 653 // $("body").append('<div class="aiz-uploader-backdrop"></div>'); 654 655 var elem = $(elem); 656 var multiple = multiple; 657 var type = type; 658 var oldSelectedFiles = selectd; 659 if (oldSelectedFiles !== "") { 660 AIZ.uploader.data.selectedFiles = oldSelectedFiles 661 .split(",") 662 .map(Number); 663 } else { 664 AIZ.uploader.data.selectedFiles = []; 665 } 666 if ("undefined" !== typeof type && type.length > 0) { 667 AIZ.uploader.data.type = type; 668 } 669 670 if (multiple) { 671 AIZ.uploader.data.multiple = true; 672 } else { 673 AIZ.uploader.data.multiple = false; 674 } 675 676 // setTimeout(function() { 677 $.post( 678 AIZ.data.appUrl + "/aiz-uploader", 679 { _token: AIZ.data.csrf }, 680 function (data) { 681 $("body").append(data); 682 $("#aizUploaderModal").modal("show"); 683 AIZ.plugins.aizUppy(); 684 AIZ.uploader.getAllUploads( 685 AIZ.data.appUrl + "/aiz-uploader/get-uploaded-files", 686 null, 687 $('[name="aiz-uploader-sort"]').val() 688 ); 689 AIZ.uploader.updateUploaderSelected(); 690 AIZ.uploader.clearUploaderSelected(); 691 AIZ.uploader.sortUploaderFiles(); 692 AIZ.uploader.searchUploaderFiles(); 693 AIZ.uploader.showSelectedFiles(); 694 AIZ.uploader.dismissUploader(); 695 696 $("#uploader_next_btn").on("click", function () { 697 if (AIZ.uploader.data.next_page_url != null) { 698 $('[name="aiz-show-selected"]').prop( 699 "checked", 700 false 701 ); 702 AIZ.uploader.getAllUploads( 703 AIZ.uploader.data.next_page_url 704 ); 705 } 706 }); 707 708 $("#uploader_prev_btn").on("click", function () { 709 if (AIZ.uploader.data.prev_page_url != null) { 710 $('[name="aiz-show-selected"]').prop( 711 "checked", 712 false 713 ); 714 AIZ.uploader.getAllUploads( 715 AIZ.uploader.data.prev_page_url 716 ); 717 } 718 }); 719 720 $(".aiz-uploader-search i").on("click", function () { 721 $(this).parent().toggleClass("open"); 722 }); 723 724 $('[data-toggle="aizUploaderAddSelected"]').on( 725 "click", 726 function () { 727 if (from === "input") { 728 AIZ.uploader.inputSelectPreviewGenerate(elem); 729 } else if (from === "direct") { 730 callback(AIZ.uploader.data.selectedFiles); 731 } 732 $("#aizUploaderModal").modal("hide"); 733 } 734 ); 735 } 736 ); 737 // }, 50); 738 }, 739 initForInput: function () { 740 $(document).on( 741 "click", 742 '[data-toggle="aizuploader"]', 743 function (e) { 744 if (e.detail === 1) { 745 var elem = $(this); 746 var multiple = elem.data("multiple"); 747 var type = elem.data("type"); 748 var oldSelectedFiles = elem 749 .find(".selected-files") 750 .val(); 751 752 multiple = !multiple ? "" : multiple; 753 type = !type ? "" : type; 754 oldSelectedFiles = !oldSelectedFiles 755 ? "" 756 : oldSelectedFiles; 757 758 AIZ.uploader.trigger( 759 this, 760 "input", 761 type, 762 oldSelectedFiles, 763 multiple 764 ); 765 } 766 } 767 ); 768 }, 769 previewGenerate: function () { 770 $('[data-toggle="aizuploader"]').each(function () { 771 var $this = $(this); 772 var files = $this.find(".selected-files").val(); 773 if (files != "") { 774 $.post( 775 AIZ.data.appUrl + "/aiz-uploader/get_file_by_ids", 776 { _token: AIZ.data.csrf, ids: files }, 777 function (data) { 778 $this.next(".file-preview").html(null); 779 780 if (data.length > 0) { 781 $this 782 .find(".file-amount") 783 .html(AIZ.uploader.updateFileHtml(data)); 784 for (var i = 0; i < data.length; i++) { 785 var thumb = ""; 786 if (data[i].type === "image") { 787 thumb = 788 '<img src="' + 789 data[i].file_name + 790 '" class="img-fit">'; 791 } else if(data[i].type === 'video') { 792 thumb = '<video width="320" height="240" controls><source src="'+ data[i].file_name +'" type="video/mp4">Your browser does not support the video tag.</video>' 793 } else { 794 thumb = '<i class="la la-file-text"></i>'; 795 } 796 var html = 797 '<div class="d-flex justify-content-between align-items-center mt-2 file-preview-item" data-id="' + 798 data[i].id + 799 '" title="' + 800 data[i].file_original_name + 801 "." + 802 data[i].extension + 803 '">' + 804 '<div class="align-items-center align-self-stretch d-flex justify-content-center thumb">' + 805 thumb + 806 "</div>" + 807 '<div class="col body">' + 808 '<h6 class="d-flex">' + 809 '<span class="text-truncate title">' + 810 data[i].file_original_name + 811 "</span>" + 812 '<span class="ext flex-shrink-0">.' + 813 data[i].extension + 814 "</span>" + 815 "</h6>" + 816 "<p>" + 817 AIZ.extra.bytesToSize( 818 data[i].file_size 819 ) + 820 "</p>" + 821 "</div>" + 822 '<div class="remove">' + 823 '<button class="btn btn-sm btn-link remove-attachment" type="button">' + 824 '<i class="la la-close"></i>' + 825 "</button>" + 826 "</div>" + 827 "</div>"; 828 829 $this.next(".file-preview").append(html); 830 } 831 } else { 832 $this 833 .find(".file-amount") 834 .html(AIZ.local.choose_file); 835 } 836 } 837 ); 838 } 839 }); 840 }, 841 }; 842 AIZ.plugins = { 843 metismenu: function () { 844 $('[data-toggle="aiz-side-menu"]').metisMenu(); 845 }, 846 bootstrapSelect: function (refresh = "") { 847 $(".aiz-selectpicker").each(function (el) { 848 var $this = $(this); 849 if (!$this.parent().hasClass("bootstrap-select")) { 850 var selected = $this.data("selected"); 851 if (typeof selected !== "undefined") { 852 $this.val(selected); 853 } 854 $this.selectpicker({ 855 size: 5, 856 noneSelectedText: AIZ.local.nothing_selected, 857 virtualScroll: false, 858 }); 859 } 860 if (refresh === "refresh") { 861 $this.selectpicker("refresh"); 862 } 863 if (refresh === "destroy") { 864 $this.selectpicker("destroy"); 865 } 866 }); 867 }, 868 tagify: function () { 869 $(".aiz-tag-input") 870 .not(".tagify") 871 .each(function () { 872 var $this = $(this); 873 874 var maxTags = $this.data("max-tags"); 875 var whitelist = $this.data("whitelist"); 876 var onchange = $this.data("on-change"); 877 878 maxTags = !maxTags ? Infinity : maxTags; 879 whitelist = !whitelist ? [] : whitelist; 880 881 $this.tagify({ 882 maxTags: maxTags, 883 whitelist: whitelist, 884 dropdown: { 885 enabled: 1, 886 }, 887 }); 888 try { 889 callback = eval(onchange); 890 } catch (e) { 891 var callback = ""; 892 } 893 if (typeof callback == "function") { 894 $this.on("removeTag", function () { 895 callback(); 896 }); 897 $this.on("add", function () { 898 callback(); 899 }); 900 } 901 }); 902 }, 903 textEditor: function () { 904 $(".aiz-text-editor").each(function (el) { 905 var $this = $(this); 906 var buttons = $this.data("buttons"); 907 var minHeight = $this.data("min-height"); 908 var placeholder = $this.attr("placeholder"); 909 var format = $this.data("format"); 910 $.extend($.summernote.options, { 911 buttons: { 912 clearText: function (context) { 913 var ui = $.summernote.ui; 914 var button = ui.button({
915 contents: '<i class="fa fa-trash"></i> Clear', 916 tooltip: 'Clear all content', 917 click: function () { 918 context.invoke('code', ''); 919 } 920 }); 921 return button.render(); 922 } 923 } 924 }); 925 926 buttons = !buttons 927 ? [ 928 ["font", ["bold", "underline", "italic", "clear"]], 929 ["para", ["ul", "ol", "paragraph"]], 930 ["style", ["style"]], 931 ["color", ["color"]], 932 ["table", ["table"]], 933 ["insert", ["link", "picture", "video"]], 934 ["view", ["fullscreen", "undo", "redo"]], 935 ["custom", ["clearText"]], 936 ] 937 : buttons; 938 placeholder = !placeholder ? "" : placeholder; 939 minHeight = !minHeight ? 200 : minHeight; 940 format = typeof format == "undefined" ? false : format; 941 942 $this.summernote({ 943 toolbar: buttons, 944 placeholder: placeholder, 945 disableDragAndDrop: true, 946 height: minHeight, 947 callbacks: { 948 onImageUpload: function (data) { 949 data.pop(); 950 }, 951 onPaste: function (e) { 952 if (format) { 953 var bufferText = ( 954 (e.originalEvent || e).clipboardData || 955 window.clipboardData 956 ).getData("Text"); 957 e.preventDefault(); 958 document.execCommand( 959 "insertText", 960 false, 961 bufferText 962 ); 963 } 964 }, 965 }, 966 }); 967 968 var nativeHtmlBuilderFunc = $this.summernote( 969 "module", 970 "videoDialog" 971 ).createVideoNode; 972 973 $this.summernote("module", "videoDialog").createVideoNode = 974 function (url) { 975 var wrap = $( 976 '<div class="embed-responsive embed-responsive-16by9"></div>' 977 ); 978 var html = nativeHtmlBuilderFunc(url); 979 html = $(html).addClass("embed-responsive-item"); 980 return wrap.append(html)[0]; 981 }; 982 }); 983 }, 984 dateRange: function () { 985 $(".aiz-date-range").each(function () { 986 var $this = $(this); 987 var today = moment().startOf("day"); 988 var value = $this.val(); 989 var startDate = false; 990 var minDate = false; 991 var maxDate = false; 992 var advncdRange = false; 993 var ranges = { 994 Today: [moment(), moment()], 995 Yesterday: [ 996 moment().subtract(1, "days"), 997 moment().subtract(1, "days"), 998 ], 999 "Last 7 Days": [moment().subtract(6, "days"), moment()], 1000 "Last 30 Days": [moment().subtract(29, "days"), moment()], 1001 "This Month": [ 1002 moment().startOf("month"), 1003 moment().endOf("month"), 1004 ], 1005 "Last Month": [ 1006 moment().subtract(1, "month").startOf("month"), 1007 moment().subtract(1, "month").endOf("month"), 1008 ], 1009 }; 1010 1011 var single = $this.data("single"); 1012 var monthYearDrop = $this.data("show-dropdown"); 1013 var format = $this.data("format"); 1014 var separator = $this.data("separator"); 1015 var pastDisable = $this.data("past-disable"); 1016 var futureDisable = $this.data("future-disable"); 1017 var timePicker = $this.data("time-picker"); 1018 var timePickerIncrement = $this.data("time-gap"); 1019 var advncdRange = $this.data("advanced-range"); 1020 1021 single = !single ? false : single; 1022 monthYearDrop = !monthYearDrop ? false : monthYearDrop; 1023 format = !format ? "YYYY-MM-DD" : format; 1024 separator = !separator ? " / " : separator; 1025 minDate = !pastDisable ? minDate : today; 1026 maxDate = !futureDisable ? maxDate : today; 1027 timePicker = !timePicker ? false : timePicker; 1028 timePickerIncrement = !timePickerIncrement 1029 ? 1 1030 : timePickerIncrement; 1031 ranges = !advncdRange ? "" : ranges; 1032 1033 $this.daterangepicker({ 1034 singleDatePicker: single, 1035 showDropdowns: monthYearDrop, 1036 minDate: minDate, 1037 maxDate: maxDate, 1038 timePickerIncrement: timePickerIncrement, 1039 autoUpdateInput: false, 1040 ranges: ranges, 1041 locale: { 1042 format: format, 1043 separator: separator, 1044 applyLabel: "Select", 1045 cancelLabel: "Clear", 1046 }, 1047 }); 1048 if (single) { 1049 $this.on("apply.daterangepicker", function (ev, picker) { 1050 $this.val(picker.startDate.format(format)); 1051 }); 1052 } else { 1053 $this.on("apply.daterangepicker", function (ev, picker) { 1054 $this.val( 1055 picker.startDate.format(format) + 1056 separator + 1057 picker.endDate.format(format) 1058 ); 1059 }); 1060 } 1061 1062 $this.on("cancel.daterangepicker", function (ev, picker) { 1063 $this.val(""); 1064 }); 1065 }); 1066 }, 1067 timePicker: function () { 1068 $(".aiz-time-picker").each(function () { 1069 var $this = $(this); 1070 1071 var minuteStep = $this.data("minute-step"); 1072 var defaultTime = $this.data("default"); 1073 1074 minuteStep = !minuteStep ? 10 : minuteStep; 1075 defaultTime = !defaultTime ? "00:00" : defaultTime; 1076 1077 $this.timepicker({ 1078 template: "dropdown", 1079 minuteStep: minuteStep, 1080 defaultTime: defaultTime, 1081 icons: { 1082 up: "las la-angle-up", 1083 down: "las la-angle-down", 1084 }, 1085 showInputs: false, 1086 }); 1087 }); 1088 }, 1089 colorPicker: function () { 1090 $(".aiz-color-picker").on("change", function () { 1091 var $this = $(this); 1092 let value = $this.val(); 1093 $this.parent().parent().siblings(".aiz-color-input").val(value); 1094 }); 1095 $(".aiz-color-input").on("change", function () { 1096 var $this = $(this); 1097 let value = $this.val(); 1098 $(this) 1099 .siblings(".input-group-append") 1100 .children(".input-group-text") 1101 .children(".aiz-color-picker") 1102 .val(value); 1103 }); 1104 }, 1105 fooTable: function () { 1106 $(".aiz-table").each(function () { 1107 var $this = $(this); 1108 1109 var empty = $this.data("empty"); 1110 empty = !empty ? AIZ.local.nothing_found : empty; 1111 1112 $this.footable({ 1113 breakpoints: { 1114 xs: 576, 1115 sm: 768, 1116 md: 992, 1117 lg: 1200, 1118 xl: 1400, 1119 }, 1120 cascade: true, 1121 on: { 1122 "ready.ft.table": function (e, ft) { 1123 AIZ.extra.deleteConfirm(); 1124 AIZ.plugins.bootstrapSelect("refresh"); 1125 }, 1126 }, 1127 empty: empty, 1128 }); 1129 }); 1130 }, 1131 sectionFooTable: function (section) { 1132 var $this = $(section+" .aiz-table"); 1133 1134 var empty = $this.data("empty"); 1135 empty = !empty ? AIZ.local.nothing_found : empty; 1136 1137 $this.footable({ 1138 breakpoints: { 1139 xs: 576, 1140 sm: 768, 1141 md: 992, 1142 lg: 1200, 1143 xl: 1400, 1144 }, 1145 cascade: true, 1146 on: { 1147 "ready.ft.table": function (e, ft) { 1148 AIZ.extra.deleteConfirm(); 1149 AIZ.plugins.bootstrapSelect("refresh"); 1150 }, 1151 }, 1152 empty: empty, 1153 }); 1154 }, 1155 notify: function (type = "dark", message = "") { 1156 $.notify( 1157 { 1158 // options 1159 message: message, 1160 }, 1161 { 1162 // settings 1163 showProgressbar: true, 1164 delay: 2500, 1165 mouse_over: "pause", 1166 placement: { 1167 from: "bottom", 1168 align: "left", 1169 }, 1170 animate: { 1171 enter: "animated fadeInUp", 1172 exit: "animated fadeOutDown", 1173 }, 1174 type: type, 1175 template: 1176 '<div data-notify="container" class="aiz-notify alert alert-{0}" role="alert">
1176' + 1177 '<button type="button" aria-hidden="true" data-notify="dismiss" class="close"><i class="las la-times"></i></button>' + 1178 '<span data-notify="message">{2}</span>' + 1179 '<div class="progress" data-notify="progressbar">' + 1180 '<div class="progress-bar" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 0%;"></div>' + 1181 "</div>" + 1182 "</div>", 1183 } 1184 ); 1185 }, 1186 aizUppy: function () { 1187 if ($("#aiz-upload-files").length > 0) { 1188 var uppy = Uppy.Core({ 1189 autoProceed: true, 1190 }); 1191 uppy.use(Uppy.Dashboard, { 1192 target: "#aiz-upload-files", 1193 inline: true, 1194 showLinkToFileUploadResult: false, 1195 showProgressDetails: true, 1196 hideCancelButton: true, 1197 hidePauseResumeButton: true, 1198 hideUploadButton: true, 1199 proudlyDisplayPoweredByUppy: false, 1200 locale: { 1201 strings: { 1202 addMoreFiles: AIZ.local.add_more_files, 1203 addingMoreFiles: AIZ.local.adding_more_files, 1204 dropPaste: 1205 AIZ.local.drop_files_here_paste_or + 1206 " %{browse}", 1207 browse: AIZ.local.browse, 1208 uploadComplete: AIZ.local.upload_complete, 1209 uploadPaused: AIZ.local.upload_paused, 1210 resumeUpload: AIZ.local.resume_upload, 1211 pauseUpload: AIZ.local.pause_upload, 1212 retryUpload: AIZ.local.retry_upload, 1213 cancelUpload: AIZ.local.cancel_upload, 1214 xFilesSelected: { 1215 0: "%{smart_count} " + AIZ.local.file_selected, 1216 1: "%{smart_count} " + AIZ.local.files_selected, 1217 }, 1218 uploadingXFiles: { 1219 0: 1220 AIZ.local.uploading + 1221 " %{smart_count} " + 1222 AIZ.local.file, 1223 1: 1224 AIZ.local.uploading + 1225 " %{smart_count} " + 1226 AIZ.local.files, 1227 }, 1228 processingXFiles: { 1229 0: 1230 AIZ.local.processing + 1231 " %{smart_count} " + 1232 AIZ.local.file, 1233 1: 1234 AIZ.local.processing + 1235 " %{smart_count} " + 1236 AIZ.local.files, 1237 }, 1238 uploading: AIZ.local.uploading, 1239 complete: AIZ.local.complete, 1240 }, 1241 }, 1242 }); 1243 uppy.use(Uppy.XHRUpload, { 1244 endpoint: AIZ.data.appUrl + "/aiz-uploader/upload", 1245 fieldName: "aiz_file", 1246 formData: true, 1247 headers: { 1248 "X-CSRF-TOKEN": AIZ.data.csrf, 1249 }, 1250 }); 1251 uppy.on("upload-success", function () { 1252 AIZ.uploader.getAllUploads( 1253 AIZ.data.appUrl + "/aiz-uploader/get-uploaded-files" 1254 ); 1255 }); 1256 } 1257 }, 1258 tooltip: function () { 1259 $("body") 1260 .tooltip({ selector: '[data-toggle="tooltip"]' }) 1261 .click(function () { 1262 $('[data-toggle="tooltip"]').tooltip("hide"); 1263 }); 1264 }, 1265 countDown: function () { 1266 if ($(".aiz-count-down").length > 0) { 1267 $(".aiz-count-down").each(function () { 1268 var $this = $(this); 1269 var date = $this.data("date"); 1270 // console.log(date) 1271 1272 $this 1273 .countdown(date) 1274 .on("update.countdown", function (event) { 1275 var $this = $(this).html( 1276 event.strftime( 1277 "" + 1278 '<div class="countdown-item"><span class="countdown-digit">%-D</span></div><span class="countdown-separator">:</span>' + 1279 '<div class="countdown-item"><span class="countdown-digit">%H</span></div><span class="countdown-separator">:</span>' + 1280 '<div class="countdown-item"><span class="countdown-digit">%M</span></div><span class="countdown-separator">:</span>' + 1281 '<div class="countdown-item"><span class="countdown-digit">%S</span></div>' 1282 ) 1283 ); 1284 }); 1285 }); 1286 } 1287 }, 1288 countDownBox: function () { 1289 if ($(".aiz-count-down-box").length > 0) { 1290 $(".aiz-count-down-box").each(function () { 1291 var $this = $(this); 1292 var date = $this.data("date"); 1293 // console.log(date) 1294 1295 $this 1296 .countdown(date) 1297 .on("update.countdown", function (event) { 1298 var $this = $(this).html( 1299 event.strftime( 1300 "" + 1301 '<div class="countdown-item"><span class="countdown-digit">%-D</span><span class="countdown-name">DAY</span></div><span class="countdown-separator">:</span>' + 1302 '<div class="countdown-item"><span class="countdown-digit">%H</span><span class="countdown-name">HRS</span></div><span class="countdown-separator">:</span>' + 1303 '<div class="countdown-item"><span class="countdown-digit">%M</span><span class="countdown-name">MIN</span></div><span class="countdown-separator">:</span>' + 1304 '<div class="countdown-item"><span class="countdown-digit">%S</span><span class="countdown-name">SEC</span></div>' 1305 ) 1306 ); 1307 }); 1308 }); 1309 } 1310 }, 1311 countDownCircle: function () { 1312 1313 // default values
1314 let cx = 30, cy = 30, r = 30, stroke_length=190; 1315 1316 let homepage = $("#selected_homepage").val(); 1317 1318 if (homepage && homepage == "thecore") { 1319 cx = cy = r = 23; 1320 stroke_length=138; 1321 } 1322 1323 let html = 1324 '<div id="time">' + 1325 '<div class="circle"><svg><circle cx="'+cx+'" cy="'+cy+'" r="'+r+'"></circle><circle cx="'+cx+'" cy="'+cy+'" r="'+r+'" id="dd"></circle></svg><div id="days" class="mb-2">00 <br><span>Day</span></div></div>' + 1326 '<div class="circle"><svg><circle cx="'+cx+'" cy="'+cy+'" r="'+r+'"></circle><circle cx="'+cx+'" cy="'+cy+'" r="'+r+'" id="hh"></circle></svg><div id="hours" class="mb-2">00 <br><span>Hrs</span></div></div>' + 1327 '<div class="circle"><svg><circle cx="'+cx+'" cy="'+cy+'" r="'+r+'"></circle><circle cx="'+cx+'" cy="'+cy+'" r="'+r+'" id="mm"></circle></svg><div id="minutes" class="mb-2">00 <br><span>Min</span></div></div>' + 1328 '<div class="circle"><svg><circle cx="'+cx+'" cy="'+cy+'" r="'+r+'"></circle><circle cx="'+cx+'" cy="'+cy+'" r="'+r+'" id="ss"></circle></svg><div id="seconds" class="mb-2">00 <br><span>Sec</span></div></div>' + 1329 '</div>'; 1330 1331 if ($(".aiz-count-down-circle").length > 0) { 1332 $(".aiz-count-down-circle").each(function () { 1333 var $this = $(this); 1334 $this.html(html); 1335 1336 let days = $this.find("#days"); 1337 let hours = $this.find("#hours"); 1338 let minutes = $this.find("#minutes"); 1339 let seconds = $this.find("#seconds"); 1340 1341 let dd = $this.find("#dd"); 1342 let hh = $this.find("#hh"); 1343 let mm = $this.find("#mm"); 1344 let ss = $this.find("#ss"); 1345 1346 // Date Format mm/dd/yyyy 1347 var endDate = $this.attr("end-date"); 1348 let now = new Date(endDate).getTime(); 1349 let x = setInterval(function () { 1350 let CountDown = new Date().getTime(); 1351 let distance = now - CountDown; 1352 if (distance > 0) { 1353 // Time calculation for days, hours, minutes & seconds 1354 let d = Math.floor( 1355 distance / (1000 * 60 * 60 * 24) 1356 ); 1357 let h = Math.floor( 1358 (distance % (1000 * 60 * 60 * 24)) / 1359 (1000 * 60 * 60) 1360 ); 1361 let m = Math.floor( 1362 (distance % (1000 * 60 * 60)) / (1000 * 60) 1363 ); 1364 let s = Math.floor((distance % (1000 * 60)) / 1000); 1365 1366 // Output the results in elements with id 1367 days.html(d + "<br><span>Day</span>"); 1368 hours.html(h + "<br><span>Hrs</span>"); 1369 minutes.html(m + "<br><span>Min</span>"); 1370 seconds.html(s + "<br><span>Sec</span>"); 1371 1372 // Animate stroke 1373 dd.css("strokeDashoffset", stroke_length - (stroke_length * d) / 365); // 365 days in a year 1374 hh.css("strokeDashoffset", stroke_length - (stroke_length * h) / 24); // 24 hours in a day 1375 mm.css("strokeDashoffset", stroke_length - (stroke_length * m) / 60); // 60 minutes in an hour 1376 ss.css("strokeDashoffset", stroke_length - (stroke_length * s) / 60);
1376 // 60 seconds in a minute 1377 } else { 1378 // If Countdown is over 1379 clearInterval(x); 1380 } 1381 }); 1382 }); 1383 } 1384 }, 1385 slickCarousel: function () { 1386 // Initialize category section slider on mobile 1387 $(document).ready(function () { 1388 function initCategorySlider() { 1389 if (window.innerWidth <= 576) { 1390 // Destroy existing slider if any 1391 if ($('.mobile-category-slider').hasClass('slick-initialized')) { 1392 $('.mobile-category-slider').slick('unslick'); 1393 } 1394 // Initialize new slider 1395 $('.mobile-category-slider').slick({ 1396 slidesToShow: 1.5, 1397 slidesToScroll: 1, 1398 arrows: false, 1399 dots: false, 1400 infinite: false, 1401 variableWidth: false, 1402 centerMode: false, 1403 adaptiveHeight: false, 1404 autoplay: true, 1405 utoplaySpeed: 3000 // 3 seconds 1406 }); 1407 // Equalize heights after initialization 1408 setTimeout(equalizeSlideHeights, 100); 1409 } else { 1410 // Destroy slider on larger screens 1411 if ($('.mobile-category-slider').hasClass('slick-initialized')) { 1412 $('.mobile-category-slider').slick('unslick'); 1413 } 1414 } 1415 } 1416 function equalizeSlideHeights() { 1417 let maxHeight = 0; 1418 $('.category-slide').each(function () { 1419 $(this).css('height', 'auto'); 1420 const slideHeight = $(this).outerHeight(); 1421 if (slideHeight > maxHeight) { 1422 maxHeight = slideHeight; 1423 } 1424 }); 1425 $('.category-slide').css('height', maxHeight + 'px'); 1426 $('.mobile-category-slider').slick('setPosition'); 1427 } 1428 // Initialize on load 1429 initCategorySlider(); 1430 1431 // Reinitialize on resize 1432 $(window).on('resize', function () { 1433 initCategorySlider(); 1434 }); 1435 }); 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 $(".aiz-carousel") 1446 .not(".slick-initialized") 1447 .each(function () { 1448 var $this = $(this); 1449 1450 var slidesPerViewXs = $this.data("xs-items"); 1451 var slidesPerViewSm = $this.data("sm-items"); 1452 var slidesPerViewMd = $this.data("md-items"); 1453 var slidesPerViewLg = $this.data("lg-items"); 1454 var slidesPerViewXl = $this.data("xl-items"); 1455 var slidesPerViewXXl = $this.data("xxl-items"); 1456 var slidesPerViewFullHd = $this.data("full-hd-items"); 1457 var slidesPerView = $this.data("items"); 1458 1459 var slidesCenterMode = $this.data("center"); 1460 var slidesArrows = $this.data("arrows"); 1461 var slidesDots = $this.data("dots"); 1462 var slidesRows = $this.data("rows"); 1463 var slidesAutoplay = $this.data("autoplay"); 1464 var slidesAutoplaySpeed = $this.data("autoplay-speed"); 1465 var slidesFade = $this.data("fade"); 1466 var asNavFor = $this.data("nav-for"); 1467 var infinite = $this.data("infinite"); 1468 var focusOnSelect = $this.data("focus-select"); 1469 var adaptiveHeight = $this.data("auto-height"); 1470 var variableWidth = $this.data("variableWidth"); 1471 1472 var vertical = $this.data("vertical"); 1473 var verticalXs = $this.data("vertical-xs"); 1474 var verticalSm = $this.data("vertical-sm"); 1475 var verticalMd = $this.data("vertical-md"); 1476 var verticalLg = $this.data("vertical-lg"); 1477 var verticalXl = $this.data("vertical-xl"); 1478 var verticalXXl = $this.data("vertical-xxl"); 1479 var verticalFullHd = $this.data("vertical-full-hd"); 1480 1481 slidesPerView = !slidesPerView ? 1 : slidesPerView; 1482 slidesPerViewFullHd = !slidesPerViewFullHd 1483 ? slidesPerView 1484 : slidesPerViewFullHd; 1485 slidesPerViewXXl = !slidesPerViewXXl 1486 ? slidesPerViewFullHd 1487 : slidesPerViewXXl; 1488 slidesPerViewXl = !slidesPerViewXl 1489 ? slidesPerView 1490 : slidesPerViewXl; 1491 slidesPerViewLg = !slidesPerViewLg 1492 ? slidesPerViewXl 1493 : slidesPerViewLg; 1494 slidesPerViewMd = !slidesPerViewMd 1495 ? slidesPerViewLg 1496 : slidesPerViewMd; 1497 slidesPerViewSm = !slidesPerViewSm 1498 ? slidesPerViewMd 1499 : slidesPerViewSm; 1500 slidesPerViewXs = !slidesPerViewXs 1501 ? slidesPerViewSm 1502 : slidesPerViewXs; 1503 1504 vertical = !vertical ? false : vertical; 1505 1506 verticalFullHd = 1507 typeof verticalFullHd == "undefined" 1508 ? vertical 1509 : verticalFullHd; 1510 1511 verticalXXl = 1512 typeof verticalXXl == "undefined" 1513 ? verticalFullHd 1514 : verticalXXl; 1515 1516 verticalXl = 1517 typeof verticalXl == "undefined" 1518 ? vertical 1519 : verticalXl; 1520 verticalLg = 1521 typeof verticalLg == "undefined" 1522 ? verticalXl 1523 : verticalLg; 1524 verticalMd = 1525 typeof verticalMd == "undefined" 1526 ? verticalLg 1527 : verticalMd; 1528 verticalSm = 1529 typeof verticalSm == "undefined" 1530 ? verticalMd 1531 : verticalSm; 1532 verticalXs = 1533 typeof verticalXs == "undefined" 1534 ? verticalSm 1535 : verticalXs; 1536 1537 slidesCenterMode = !slidesCenterMode 1538 ? false 1539 : slidesCenterMode; 1540 slidesArrows = !slidesArrows ? false : slidesArrows; 1541 slidesDots = !slidesDots ? false : slidesDots; 1542 slidesRows = !slidesRows ? 1 : slidesRows; 1543 slidesAutoplay = !slidesAutoplay ? false : slidesAutoplay;
1544 slidesAutoplaySpeed = !slidesAutoplaySpeed 1545 ? "5000" 1546 : slidesAutoplaySpeed; 1547 slidesFade = !slidesFade ? false : slidesFade; 1548 asNavFor = !asNavFor ? null : asNavFor; 1549 infinite = !infinite ? false : infinite; 1550 focusOnSelect = !focusOnSelect ? false : focusOnSelect; 1551 adaptiveHeight = !adaptiveHeight ? false : adaptiveHeight; 1552 variableWidth = !variableWidth ? false : variableWidth; 1553 1554 var slidesRtl = 1555 $("html").attr("dir") === "rtl" && !vertical 1556 ? true 1557 : false; 1558 1559 var slidesRtlFullHd = 1560 $("html").attr("dir") === "rtl" && !verticalFullHd 1561 ? true 1562 : false; 1563 1564 var slidesRtlXXl = 1565 $("html").attr("dir") === "rtl" && !verticalXXl 1566 ? true 1567 : false; 1568 1569 var slidesRtlXL = 1570 $("html").attr("dir") === "rtl" && !verticalXl 1571 ? true 1572 : false; 1573 var slidesRtlLg = 1574 $("html").attr("dir") === "rtl" && !verticalLg 1575 ? true 1576 : false; 1577 var slidesRtlMd = 1578 $("html").attr("dir") === "rtl" && !verticalMd 1579 ? true 1580 : false; 1581 var slidesRtlSm = 1582 $("html").attr("dir") === "rtl" && !verticalSm 1583 ? true 1584 : false; 1585 var slidesRtlXs = 1586 $("html").attr("dir") === "rtl" && !verticalXs 1587 ? true 1588 : false; 1589 1590 $this.slick({ 1591 slidesToShow: slidesPerView, 1592 autoplay: slidesAutoplay, 1593 autoplaySpeed: slidesAutoplaySpeed, 1594 dots: slidesDots, 1595 arrows: slidesArrows, 1596 infinite: infinite, 1597 vertical: vertical, 1598 rtl: slidesRtl, 1599 rows: slidesRows, 1600 centerPadding: "0px", 1601 centerMode: slidesCenterMode, 1602 fade: slidesFade, 1603 asNavFor: asNavFor, 1604 focusOnSelect: focusOnSelect, 1605 adaptiveHeight: adaptiveHeight, 1606 slidesToScroll: 1, 1607 variableWidth: variableWidth, 1608 prevArrow: 1609 '<button type="button" class="slick-prev"><i class="las la-angle-left"></i></button>', 1610 nextArrow: 1611 '<button type="button" class="slick-next"><i class="las la-angle-right"></i></button>', 1612 responsive: [ 1613 { 1614 breakpoint: 2601, 1615 settings: { 1616 slidesToShow: slidesPerViewFullHd, 1617 vertical: verticalFullHd, 1618 rtl: slidesRtlFullHd 1619 }, 1620 }, 1621 { 1622 breakpoint: 1951, 1623 settings: { 1624 slidesToShow: slidesPerViewXXl, 1625 vertical: verticalXXl, 1626 rtl: slidesRtlXXl 1627 }, 1628 }, 1629 { 1630 breakpoint: 1500, 1631 settings: { 1632 slidesToShow: slidesPerViewXl, 1633 vertical: verticalXl, 1634 rtl: slidesRtlXL, 1635 }, 1636 }, 1637 { 1638 breakpoint: 1200, 1639 settings: { 1640 slidesToShow: slidesPerViewLg, 1641 vertical: verticalLg, 1642 rtl: slidesRtlLg, 1643 }, 1644 }, 1645 { 1646 breakpoint: 992, 1647 settings: { 1648 slidesToShow: slidesPerViewMd, 1649 vertical: verticalMd, 1650 rtl: slidesRtlMd, 1651 }, 1652 }, 1653 { 1654 breakpoint: 768, 1655 settings: { 1656 slidesToShow: slidesPerViewSm, 1657 vertical: verticalSm, 1658 rtl: slidesRtlSm, 1659 }, 1660 }, 1661 { 1662 breakpoint: 576, 1663 settings: { 1664 slidesToShow: slidesPerViewXs, 1665 vertical: verticalXs, 1666 rtl: slidesRtlXs, 1667 }, 1668 }, 1669 ], 1670 }); 1671 }); 1672 }, 1673 chart: function (selector, config) { 1674 if (!$(selector).length) return; 1675 1676 $(selector).each(function () { 1677 var $this = $(this); 1678 1679 var aizChart = new Chart($this, config); 1680 }); 1681 }, 1682 noUiSlider: function () { 1683 if ($(".aiz-range-slider")[0]) { 1684 $(".aiz-range-slider").each(function () { 1685 var c = document.getElementById("input-slider-range"), 1686 d = document.getElementById("input-slider-range-value-low"), 1687 e = document.getElementById("input-slider-range-value-high"), 1688 f = [d, e]; 1689 1690 noUiSlider.create(c, { 1691 start: [ 1692 parseInt(d.getAttribute("data-range-value-low")), 1693 parseInt(e.getAttribute("data-range-value-high")), 1694 ], 1695 connect: true, 1696 range: { 1697 min: parseInt(c.getAttribute("data-range-value-min")), 1698 max: parseInt(c.getAttribute("data-range-value-max")), 1699 }, 1700 }); 1701 1702 1703 const handles = c.querySelectorAll(".noUi-handle"); 1704
1705 handles.forEach((handle, index) => { 1706 const touchArea = handle.querySelector(".noUi-touch-area"); 1707 1708 1709 const valueText = document.createElement("span"); 1710 valueText.classList.add("slider-value-text"); 1711 valueText.textContent = f[index].textContent || 0; 1712 touchArea.appendChild(valueText); 1713 1714 valueText.style.position = "absolute"; 1715 valueText.style.top = "-30px"; 1716 valueText.style.left = "50%"; 1717 valueText.style.transform = "translateX(-50%)"; 1718 valueText.style.fontSize = "14px"; 1719 valueText.style.color = "#fff"; 1720 valueText.style.background = "rgba(0, 0, 0, 0.4)"; 1721 valueText.style.padding = "4px 8px"; 1722 valueText.style.borderRadius = "4px"; 1723 valueText.style.whiteSpace = "nowrap"; 1724 valueText.style.pointerEvents = "none"; 1725 valueText.style.transition = "opacity 0.3s ease"; 1726 1727 1728 }); 1729 1730 1731 c.noUiSlider.on("update", function (a, b) { 1732 f[b].textContent = a[b]; // existing element 1733 const handle = c.querySelectorAll(".noUi-handle")[b]; 1734 const label = handle.querySelector(".slider-value-text"); 1735 let value = Math.round(a[b]); 1736 if (label) label.textContent = value.toLocaleString(); 1737 d.textContent = "0"; 1738 e.textContent = parseInt(c.getAttribute("data-range-value-max")).toLocaleString(); 1739 // label.style.display = "none"; 1740 }); 1741 1742 1743 c.noUiSlider.on("change", function (a, b) { 1744 rangefilter(a); 1745 }); 1746 }); 1747 } 1748 }, 1749 1750 zoom: function () { 1751 if ($(".img-zoom")[0]) { 1752 $(".img-zoom").zoom({ 1753 magnify: 1.5, 1754 }); 1755 if ( 1756 "ontouchstart" in window || 1757 navigator.maxTouchPoints > 0 || 1758 navigator.msMaxTouchPoints > 0 1759 ) { 1760 $(".img-zoom").trigger("zoom.destroy"); 1761 } 1762 } 1763 }, 1764 jsSocials: function () { 1765 if ($(".aiz-share")[0]) { 1766 $(".aiz-share").jsSocials({ 1767 showLabel: false, 1768 showCount: false, 1769 shares: [ 1770 { 1771 share: "email", 1772 logo: "lar la-envelope", 1773 }, 1774 { 1775 share: "twitter", 1776 logo: "aiz-custom-x-logo", 1777 }, 1778 { 1779 share: "facebook", 1780 logo: "lab la-facebook-f", 1781 }, 1782 { 1783 share: "linkedin", 1784 logo: "lab la-linkedin-in", 1785 }, 1786 { 1787 share: "whatsapp", 1788 logo: "lab la-whatsapp", 1789 }, 1790 ], 1791 }); 1792 } 1793 }, 1794 particles: function () { 1795 particlesJS( 1796 "particles-js", 1797 1798 { 1799 particles: { 1800 number: { 1801 value: 80, 1802 density: { 1803 enable: true, 1804 value_area: 800, 1805 }, 1806 }, 1807 color: { 1808 value: "#dfdfe6", 1809 }, 1810 shape: { 1811 type: "circle", 1812 stroke: { 1813 width: 0, 1814 color: "#000000", 1815 }, 1816 polygon: { 1817 nb_sides: 5, 1818 }, 1819 image: { 1820 src: "img/github.svg", 1821 width: 100, 1822 height: 100, 1823 }, 1824 }, 1825 opacity: { 1826 value: 0.5, 1827 random: false, 1828 anim: { 1829 enable: false, 1830 speed: 1, 1831 opacity_min: 0.1, 1832 sync: false, 1833 }, 1834 }, 1835 size: { 1836 value: 5, 1837 random: true, 1838 anim: { 1839 enable: false, 1840 speed: 40, 1841 size_min: 0.1, 1842 sync: false, 1843 }, 1844 }, 1845 line_linked: { 1846 enable: true, 1847 distance: 150, 1848 color: "#dfdfe6", 1849 opacity: 0.4, 1850 width: 1, 1851 }, 1852 move: { 1853 enable: true, 1854 speed: 6,
1855 direction: "none", 1856 random: false, 1857 straight: false, 1858 out_mode: "out", 1859 attract: { 1860 enable: false, 1861 rotateX: 600, 1862 rotateY: 1200, 1863 }, 1864 }, 1865 }, 1866 interactivity: { 1867 detect_on: "canvas", 1868 events: { 1869 onhover: { 1870 enable: true, 1871 mode: "repulse", 1872 }, 1873 onclick: { 1874 enable: true, 1875 mode: "push", 1876 }, 1877 resize: true, 1878 }, 1879 modes: { 1880 grab: { 1881 distance: 400, 1882 line_linked: { 1883 opacity: 1, 1884 }, 1885 }, 1886 bubble: { 1887 distance: 400, 1888 size: 40, 1889 duration: 2, 1890 opacity: 8, 1891 speed: 3, 1892 }, 1893 repulse: { 1894 distance: 200, 1895 }, 1896 push: { 1897 particles_nb: 4, 1898 }, 1899 remove: { 1900 particles_nb: 2, 1901 }, 1902 }, 1903 }, 1904 retina_detect: true, 1905 config_demo: { 1906 hide_card: false, 1907 background_color: "#b61924", 1908 background_image: "", 1909 background_position: "50% 50%", 1910 background_repeat: "no-repeat", 1911 background_size: "cover", 1912 }, 1913 } 1914 ); 1915 }, 1916 }; 1917 AIZ.extra = { 1918 refreshToken: function () { 1919 $.get(AIZ.data.appUrl + "/refresh-csrf").done(function (data) { 1920 AIZ.data.csrf = data; 1921 }); 1922 // console.log(AIZ.data.csrf); 1923 }, 1924 mobileNavToggle: function () { 1925 if (window.matchMedia("(max-width: 1200px)").matches) { 1926 $("body").addClass("side-menu-closed"); 1927 } 1928 $('[data-toggle="aiz-mobile-nav"]').on("click", function () { 1929 if ($("body").hasClass("side-menu-open")) { 1930 $("body") 1931 .addClass("side-menu-closed") 1932 .removeClass("side-menu-open"); 1933 } else if ($("body").hasClass("side-menu-closed")) { 1934 $("body") 1935 .removeClass("side-menu-closed") 1936 .addClass("side-menu-open"); 1937 } else { 1938 $("body") 1939 .removeClass("side-menu-open") 1940 .addClass("side-menu-closed"); 1941 } 1942 }); 1943 $(".aiz-sidebar-overlay").on("click", function () { 1944 $("body") 1945 .removeClass("side-menu-open") 1946 .addClass("side-menu-closed"); 1947 }); 1948 }, 1949 initActiveMenu: function () { 1950 $('[data-toggle="aiz-side-menu"] a').each(function () { 1951 var pageUrl = window.location.href.split(/[?#]/)[0]; 1952 if (this.href == pageUrl || $(this).hasClass("active")) { 1953 $(this).addClass("active"); 1954 $(this).closest(".aiz-side-nav-item").addClass("mm-active"); 1955 $(this) 1956 .closest(".level-2") 1957 .siblings("a") 1958 .addClass("level-2-active"); 1959 $(this) 1960 .closest(".level-3") 1961 .siblings("a") 1962 .addClass("level-3-active"); 1963 } 1964 }); 1965 }, 1966 deleteConfirm: function () { 1967 $(".confirm-delete").click(function (e) { 1968 e.preventDefault(); 1969 var url = $(this).data("href"); 1970 $("#delete-modal").modal("show"); 1971 $("#delete-link").attr("href", url); 1972 }); 1973 1974 $(".confirm-cancel").click(function (e) { 1975 e.preventDefault(); 1976 var url = $(this).data("href"); 1977 $("#cancel-modal").modal("show"); 1978 $("#cancel-link").attr("href", url); 1979 }); 1980 1981 $(".confirm-complete").click(function (e) { 1982 e.preventDefault(); 1983 var url = $(this).data("href"); 1984 $("#complete-modal").modal("show"); 1985 $("#comfirm-link").attr("href", url); 1986 }); 1987 1988 $(".confirm-alert").click(function (e) { 1989 e.preventDefault(); 1990 var url = $(this).data("href"); 1991 var target = $(this).data("target"); 1992 $(target).modal("show"); 1993 $(target).find(".comfirm-link").attr("href", url); 1994 $("#comfirm-link").attr("href", url); 1995 }); 1996 }, 1997 bytesToSize: function (bytes) { 1998 var sizes = ["Bytes", "KB", "MB", "GB", "TB"]; 1999 if (bytes == 0) return "0 Byte"; 2000 var i = parseInt(Math.floor(Math.log(bytes) / Math.log(1024))); 2001 return Math.round(bytes / Math.pow(1024, i), 2) + " " + sizes[i]; 2002 }, 2003 multiModal: function () { 2004 $(document).on("show.bs.modal", ".modal", function (event) { 2005 var zIndex = 1040 + 10 * $(".modal:visible").length; 2006 $(this).css("z-index", zIndex); 2007 setTimeout(function () { 2008 $(".modal-backdrop") 2009 .not(".modal-stack") 2010 .css("z-index", zIndex - 1) 2011 .addClass("modal-stack"); 2012 }, 0); 2013 }); 2014 $(document).on("hidden.bs.modal", function () { 2015 if ($(".modal.show").length > 0) { 2016 $("body").addClass("modal-open"); 2017 } 2018 }); 2019 }, 2020 bsCustomFile: function () { 2021 $(".custom-file input").change(function (e) { 2022 var files = []; 2023 for (var i = 0; i < $(this)[0].files.length; i++) { 2024 files.push($(this)[0].files[i].name); 2025 } 2026 if (files.length === 1) { 2027 $(this).next(".custom-file-name").html(files[0]); 2028 } else if (files.length > 1) { 2029 $(this) 2030 .next(".custom-file-name") 2031 .html(files.length + " " + AIZ.local.files_selected); 2032 } else { 2033 $(this) 2034 .next(".custom-file-name") 2035 .html(AIZ.local.choose_file); 2036 } 2037 }); 2038 }, 2039 stopPropagation: function () { 2040 $(document).on("click", ".stop-propagation", function (e) { 2041 e.stopPropagation(); 2042 }); 2043 }, 2044 outsideClickHide: function () { 2045 $(document).on("click", function (e) { 2046 $(".document-click-d-none").addClass("d-none"); 2047 }); 2048 }, 2049 inputRating: function () { 2050 $(".rating-input").each(function () { 2051 $(this) 2052 .find("label") 2053 .on({ 2054 mouseover: function (event) { 2055 $(this).find("i").addClass("hover"); 2056 $(this).prevAll().find("i").addClass("hover"); 2057 }, 2058 mouseleave: function (event) { 2059 $(this).find("i").removeClass("hover"); 2060 $(this).prevAll().find("i").removeClass("hover"); 2061 }, 2062 click: function (event) { 2063 $(this).siblings().find("i").removeClass("active"); 2064 $(this).find("i").addClass("active"); 2065 $(this).prevAll().find("i").addClass("active"); 2066 }, 2067 }); 2068 if ($(this).find("input").is(":checked")) { 2069 $(this) 2070 .find("label") 2071 .siblings() 2072 .find("i") 2073 .removeClass("active"); 2074 $(this) 2075 .find("input:checked") 2076 .closest("label") 2077 .find("i") 2078 .addClass("active"); 2079 $(this) 2080 .find("input:checked") 2081 .closest("label") 2082 .prevAll() 2083 .find("i") 2084 .addClass("active"); 2085 } 2086 }); 2087 }, 2088 scrollToBottom: function () { 2089 $(".scroll-to-btm").each(function (i, el) { 2090 el.scrollTop = el.scrollHeight; 2091 }); 2092 }, 2093 classToggle: function () { 2094 $(document).on( 2095 "click", 2096 '[data-toggle="class-toggle"]', 2097 function () { 2098 var $this = $(this); 2099 var target = $this.data("target"); 2100 var sameTriggers = $this.data("same"); 2101 var backdrop = $(this).data("backdrop"); 2102 2103 if ($(target).hasClass("active")) { 2104 $(target).removeClass("active"); 2105 $(sameTriggers).removeClass("active"); 2106 $this.removeClass("active"); 2107 $("body").removeClass("overflow-hidden"); 2108 } else { 2109 $(target).addClass("active"); 2110 $this.addClass("active"); 2111 if (backdrop == "static") { 2112 $("body").addClass("overflow-hidden"); 2113 } 2114 } 2115 } 2116 ); 2117 }, 2118 collapseSidebar: function () { 2119 $(document).on( 2120 "click", 2121 '[data-toggle="collapse-sidebar"]', 2122 function (i, el) { 2123 var $this = $(this); 2124 var target = $(this).data("target"); 2125 var sameTriggers = $(this).data("siblings"); 2126 2127 // var showOverlay = $this.data('overlay'); 2128 // var overlayMarkup = '<div class="overlay overlay-fixed dark c-pointer" data-toggle="collapse-sidebar" data-target="'+target+'"></div>'; 2129 2130 // showOverlay = !showOverlay ? true : showOverlay; 2131 2132 // if (showOverlay && $(target).siblings('.overlay').length !== 1) { 2133 // $(target).after(overlayMarkup); 2134 // } 2135 2136 e.preventDefault(); 2137 if ($(target).hasClass("opened")) { 2138 $(target).removeClass("opened"); 2139 $(sameTriggers).removeClass("opened"); 2140 $($this).removeClass("opened"); 2141 } else { 2142 $(target).addClass("opened"); 2143 $($this).addClass("opened"); 2144 } 2145 } 2146 ); 2147 }, 2148 autoScroll: function () { 2149 if ($(".aiz-auto-scroll").length > 0) { 2150 $(".aiz-auto-scroll").each(function () { 2151 var options = $(this).data("options"); 2152 2153 options = !options 2154 ? '{"delay" : 2000 ,"amount" : 70 }' 2155 : options; 2156 2157 options = JSON.parse(options); 2158 2159 this.delay = parseInt(options["delay"]) || 2000; 2160 this.amount = parseInt(options["amount"]) || 70; 2161 this.autoScroll = $(this); 2162 this.iScrollHeight = this.autoScroll.prop("scrollHeight"); 2163 this.iScrollTop = this.autoScroll.prop("scrollTop"); 2164 this.iHeight = this.autoScroll.height(); 2165 2166 var self = this; 2167 this.timerId = setInterval(function () { 2168 if ( 2169 self.iScrollTop + self.iHeight < 2170 self.iScrollHeight 2171 ) { 2172 self.iScrollTop = self.autoScroll.prop("scrollTop"); 2173 self.iScrollTop += self.amount; 2174 self.autoScroll.animate( 2175 { scrollTop: self.iScrollTop }, 2176 "slow", 2177 "linear" 2178 ); 2179 } else { 2180 self.iScrollTop -= self.iScrollTop; 2181 self.autoScroll.animate( 2182 { scrollTop: "0px" }, 2183 "fast", 2184 "swing" 2185 ); 2186 } 2187 }, self.delay); 2188 }); 2189 } 2190 }, 2191 addMore: function () { 2192 $('[data-toggle="add-more"]').each(function () { 2193 var $this = $(this);
2194 var content = $this.data("content"); 2195 var target = $this.data("target"); 2196 2197 $this.on("click", function (e) { 2198 e.preventDefault(); 2199 $(target).append(content); 2200 AIZ.plugins.bootstrapSelect(); 2201 }); 2202 }); 2203 }, 2204 removeParent: function () { 2205 $(document).on( 2206 "click", 2207 '[data-toggle="remove-parent"]', 2208 function () { 2209 var $this = $(this); 2210 var parent = $this.data("parent"); 2211 $this.closest(parent).remove(); 2212 } 2213 ); 2214 }, 2215 selectHideShow: function () { 2216 $('[data-show="selectShow"]').each(function () { 2217 var target = $(this).data("target"); 2218 $(this).on("change", function () { 2219 var value = $(this).val(); 2220 // console.log(value); 2221 $(target) 2222 .children() 2223 .not("." + value) 2224 .addClass("d-none"); 2225 $(target) 2226 .find("." + value) 2227 .removeClass("d-none"); 2228 }); 2229 }); 2230 }, 2231 plusMinus: function () { 2232 $(".aiz-plus-minus input").each(function () { 2233 var $this = $(this); 2234 var min = parseInt($(this).attr("min")); 2235 var max = parseInt($(this).attr("max")); 2236 var value = parseInt($(this).val()); 2237 if (value <= min) { 2238 $this 2239 .siblings('[data-type="minus"]') 2240 .attr("disabled", true); 2241 } else if ( 2242 $this.siblings('[data-type="minus"]').attr("disabled") 2243 ) { 2244 $this 2245 .siblings('[data-type="minus"]') 2246 .removeAttr("disabled"); 2247 } 2248 if (value >= max) { 2249 $this.siblings('[data-type="plus"]').attr("disabled", true); 2250 } else if ( 2251 $this.siblings('[data-type="plus"]').attr("disabled") 2252 ) { 2253 $this.siblings('[data-type="plus"]').removeAttr("disabled"); 2254 } 2255 }); 2256 $(".aiz-plus-minus button") 2257 .off("click") 2258 .on("click", function (e) { 2259 e.preventDefault(); 2260 2261 var fieldName = $(this).attr("data-field"); 2262 var type = $(this).attr("data-type"); 2263 var input = $("input[name='" + fieldName + "']"); 2264 var currentVal = parseInt(input.val()); 2265 2266 if (!isNaN(currentVal)) { 2267 if (type == "minus") { 2268 if (currentVal > input.attr("min")) { 2269 input.val(currentVal - 1).change(); 2270 } 2271 if (parseInt(input.val()) == input.attr("min")) { 2272 $(this).attr("disabled", true); 2273 } 2274 } else if (type == "plus") { 2275 if (currentVal < input.attr("max")) { 2276 input.val(currentVal + 1).change(); 2277 } 2278 if (parseInt(input.val()) == input.attr("max")) { 2279 $(this).attr("disabled", true); 2280 } 2281 } 2282 } else { 2283 input.val(0); 2284 } 2285 }); 2286 $(".aiz-plus-minus input") 2287 .off("change") 2288 .on("change", function () { 2289 var minValue = parseInt($(this).attr("min")); 2290 var maxValue = parseInt($(this).attr("max")); 2291 var valueCurrent = parseInt($(this).val()); 2292 2293 name = $(this).attr("name");
2294 if (valueCurrent >= minValue) { 2295 $(this) 2296 .siblings("[data-type='minus']") 2297 .removeAttr("disabled"); 2298 } else { 2299 alert( 2300 translate( 2301 "Sorry, the minimum limit has been reached" 2302 ) 2303 ); 2304 $(this).val(minValue); 2305 } 2306 if (valueCurrent <= maxValue) { 2307 $(this) 2308 .siblings("[data-type='plus']") 2309 .removeAttr("disabled"); 2310 } else { 2311 alert( 2312 translate( 2313 "Sorry, the maximum limit has been reached" 2314 ) 2315 ); 2316 $(this).val(maxValue); 2317 } 2318 2319 if (typeof getVariantPrice === "function") { 2320 getVariantPrice(); 2321 } 2322 }); 2323 }, 2324 hovCategoryMenu: function () { 2325 $("#category-menu-icon, #category-sidebar") 2326 .on("mouseover", function (event) { 2327 $("#hover-category-menu") 2328 .addClass("active") 2329 .removeClass("d-none"); 2330 }) 2331 .on("mouseout", function (event) { 2332 $("#hover-category-menu") 2333 .addClass("d-none") 2334 .removeClass("active"); 2335 }); 2336 }, 2337 clickCategoryMenu: function () { 2338 var menu = $("#click-category-menu"); 2339 menu.hide(); 2340 menu.removeClass("d-none"); 2341 $("#category-menu-bar").on("click", function (event) { 2342 if (event.target.closest('.categoriesAll')) { 2343 event.stopPropagation(); 2344 }else{ 2345 menu.slideToggle(500); 2346 if ($("#category-menu-bar-icon").hasClass("show")) { 2347 $("#category-menu-bar-icon").removeClass("show"); 2348 } else { 2349 $("#category-menu-bar-icon").addClass("show"); 2350 } 2351 } 2352 2353 }); 2354 }, 2355 hovUserTopMenu: function () { 2356 $("#nav-user-info") 2357 .on("mouseover", function (event) { 2358 $(".hover-user-top-menu").addClass("active"); 2359 }) 2360 .on("mouseout", function (event) { 2361 $(".hover-user-top-menu").removeClass("active"); 2362 }); 2363 }, 2364 trimAppUrl: function () { 2365 if (AIZ.data.appUrl.slice(-1) == "/") { 2366 AIZ.data.appUrl = AIZ.data.appUrl.slice( 2367 0, 2368 AIZ.data.appUrl.length - 1 2369 ); 2370 // console.log(AIZ.data.appUrl); 2371 } 2372 }, 2373 setCookie: function (cname, cvalue, exdays) { 2374 var d = new Date(); 2375 d.setTime(d.getTime() + exdays * 24 * 60 * 60 * 1000); 2376 var expires = "expires=" + d.toUTCString(); 2377 document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/"; 2378 }, 2379 getCookie: function (cname) { 2380 var name = cname + "="; 2381 var decodedCookie = decodeURIComponent(document.cookie); 2382 var ca = decodedCookie.split(";"); 2383 for (var i = 0; i < ca.length; i++) { 2384 var c = ca[i]; 2385 while (c.charAt(0) === " ") { 2386 c = c.substring(1); 2387 } 2388 if (c.indexOf(name) === 0) { 2389 return c.substring(name.length, c.length); 2390 } 2391 } 2392 return ""; 2393 }, 2394 2395 acceptCookie: function () { 2396 if (!AIZ.extra.getCookie("acceptCookies")) { 2397 $(".aiz-cookie-alert:not(.club-point-alert)").addClass("show"); 2398 } 2399 if (!AIZ.extra.getCookie("acceptClubPointAlert")) { 2400 $(".club-point-alert").addClass("show"); 2401 } 2402 2403 $(".aiz-cookie-accept").on("click", function () { 2404 AIZ.extra.setCookie("acceptCookies", true, 60); 2405 $(".aiz-cookie-alert:not(.club-point-alert)").fadeOut(600, function() { 2406 $(this).removeClass("show"); 2407 }); 2408 }); 2409 2410 $(".aiz-cookie-accept-club-point").on("click", function () { 2411 AIZ.extra.setCookie("acceptClubPointAlert", true, 60); 2412 $(".aiz-cookie-alert").fadeOut(600, function() { 2413 $(this).removeClass("show"); 2414 }); 2415 }); 2416 }, 2417 setSession: function () { 2418 $(".set-session").each(function () { 2419 var $this = $(this); 2420 var key = $this.data("key"); 2421 var value = $this.data("value"); 2422 2423 const now = new Date(); 2424 const item = { 2425 value: value, 2426 expiry: now.getTime() + 3600000, 2427 }; 2428 2429 $this.on("click", function () { 2430 localStorage.setItem(key, JSON.stringify(item)); 2431 }); 2432 }); 2433 }, 2434 showSessionPopup: function () { 2435 $(".removable-session").each(function () { 2436 var $this = $(this); 2437 var key = $this.data("key"); 2438 var value = $this.data("value"); 2439 var item = {}; 2440 if (localStorage.getItem(key)) { 2441 item = localStorage.getItem(key); 2442 item = JSON.parse(item); 2443 } 2444 const now = new Date(); 2445 if ( 2446 typeof item.expiry == "undefined" || 2447 now.getTime() > item.expiry 2448 ) { 2449 $this.removeClass("d-none"); 2450 } 2451 }); 2452 }, 2453 }; 2454 2455 setInterval(function () { 2456 AIZ.extra.refreshToken(); 2457 }, 3600000); 2458 2459 // init aiz plugins, extra options 2460 AIZ.extra.initActiveMenu(); 2461 AIZ.extra.mobileNavToggle(); 2462 AIZ.extra.deleteConfirm(); 2463 AIZ.extra.multiModal(); 2464 AIZ.extra.inputRating(); 2465 AIZ.extra.bsCustomFile(); 2466 AIZ.extra.stopPropagation(); 2467 AIZ.extra.outsideClickHide(); 2468 AIZ.extra.scrollToBottom();
2469 AIZ.extra.classToggle(); 2470 AIZ.extra.collapseSidebar(); 2471 AIZ.extra.autoScroll(); 2472 AIZ.extra.addMore(); 2473 AIZ.extra.removeParent(); 2474 AIZ.extra.selectHideShow(); 2475 AIZ.extra.plusMinus(); 2476 AIZ.extra.hovCategoryMenu(); 2477 AIZ.extra.clickCategoryMenu(); 2478 AIZ.extra.hovUserTopMenu(); 2479 AIZ.extra.trimAppUrl(); 2480 AIZ.extra.acceptCookie(); 2481 AIZ.extra.setSession(); 2482 AIZ.extra.showSessionPopup(); 2483 2484 AIZ.plugins.metismenu(); 2485 AIZ.plugins.bootstrapSelect(); 2486 //AIZ.plugins.tagify(); 2487 AIZ.plugins.textEditor(); 2488 AIZ.plugins.tooltip(); 2489 AIZ.plugins.countDown(); 2490 AIZ.plugins.countDownBox(); 2491 AIZ.plugins.countDownCircle(); 2492 AIZ.plugins.dateRange(); 2493 AIZ.plugins.timePicker(); 2494 AIZ.plugins.colorPicker(); 2495 AIZ.plugins.fooTable(); 2496 AIZ.plugins.slickCarousel(); 2497 AIZ.plugins.noUiSlider(); 2498 AIZ.plugins.zoom(); 2499 AIZ.plugins.jsSocials(); 2500 2501 // initialization of aiz uploader 2502 AIZ.uploader.initForInput(); 2503 AIZ.uploader.removeAttachment(); 2504 AIZ.uploader.previewGenerate(); 2505 2506 // $(document).ajaxComplete(function(){ 2507 // AIZ.plugins.bootstrapSelect('refresh'); 2508 // }); 2509})(jQuery); 2510 2511 2512 // Footer description expand 2513 const toggleButton = document.getElementById("toggle-btn"); 2514 const textParagraph = document.querySelector(".footer-text-control"); 2515 2516 if (toggleButton && textParagraph) { 2517 toggleButton.addEventListener("click", () => { 2518 const isExpanded = 2519 textParagraph.style.maxHeight && 2520 textParagraph.style.maxHeight !== "80px"; 2521
2522 // Toggle between expanded and collapsed state 2523 textParagraph.style.maxHeight = isExpanded 2524 ? "80px" 2525 : `${textParagraph.scrollHeight}px`; 2526 2527 toggleButton.textContent = isExpanded ? "Read More" : "Show Less"; 2528 }); 2529 } 2530 2531 2532 2533document.querySelectorAll('.video-container').forEach(container => { 2534 const video = container.querySelector('.upload_video'); 2535 const playBtn = container.querySelector('.playButton'); 2536 const playPauseBtn = container.querySelector('.playPauseBtn'); 2537 const muteBtn = container.querySelector('.muteBtn'); 2538 const progress = container.querySelector('.progress'); 2539 const currentTimeText = container.querySelector('.currentTime'); 2540 const durationText = container.querySelector('.duration'); 2541 const openPopupBtn = container.querySelector('.openPopupBtn'); 2542 const popupVideo = document.getElementById('popupVideo'); 2543 const videoModal = document.getElementById('videoModal'); 2544 const closeModalBtn = document.getElementById('closeModalBtn'); 2545 2546 // Format time (mm:ss) 2547 function formatTime(time) { 2548 const minutes = Math.floor(time / 60); 2549 const seconds = Math.floor(time % 60); 2550 return `${minutes}:${seconds.toString().padStart(2, '0')}`; 2551 } 2552 2553 // Initial metadata load 2554 video.addEventListener('loadedmetadata', () => { 2555 durationText.innerText = formatTime(video.duration); 2556 }); 2557 2558 // Play button 2559 playBtn.addEventListener('click', () => { 2560 video.play(); 2561 playBtn.classList.add('hidden'); 2562 playPauseBtn.innerText = 'â¸'; 2563 }); 2564 2565 // Toggle play/pause on video click 2566 video.addEventListener('click', () => { 2567 if (video.paused) { 2568 video.play(); 2569 playBtn.classList.add('hidden'); 2570 playPauseBtn.innerText = 'â¸'; 2571 } else { 2572 video.pause(); 2573 playBtn.classList.remove('hidden'); 2574 playPauseBtn.innerText = 'â¶'; 2575 } 2576 }); 2577 2578 // Play/Pause Button 2579 playPauseBtn.addEventListener('click', () => { 2580 if (video.paused) { 2581 video.play(); 2582 playBtn.classList.add('hidden'); 2583 playPauseBtn.innerText = 'â¸'; 2584 } else { 2585 video.pause(); 2586 playBtn.classList.remove('hidden'); 2587 playPauseBtn.innerText = 'â¶'; 2588 } 2589 }); 2590 2591 // Mute / Unmute 2592 muteBtn.addEventListener('click', () => { 2593 video.muted = !video.muted; 2594 muteBtn.innerText = video.muted ? 'ð' : 'ð'; 2595 }); 2596 2597 // Video ended 2598 video.addEventListener('ended', () => { 2599 playBtn.classList.remove('hidden'); 2600 playPauseBtn.innerText = 'â¶'; 2601 }); 2602 2603 // Update progress and time 2604 video.addEventListener('timeupdate', () => { 2605 if (!isNaN(video.duration)) { 2606 progress.value = (video.currentTime / video.duration) * 100; 2607 currentTimeText.innerText = formatTime(video.currentTime); 2608 } 2609 }); 2610 2611 // Seek video 2612 progress.addEventListener('input', () => { 2613 const seekTime = (progress.value / 100) * video.duration; 2614 video.currentTime = seekTime; 2615 }); 2616 2617 // Open modal popup 2618if (openPopupBtn) { 2619 openPopupBtn.addEventListener('click', () => { 2620 popupVideo.innerHTML = ''; 2621 Array.from(video.getElementsByTagName('source')).forEach(source => { 2622 const cloned = document.createElement('source'); 2623 cloned.src = source.src; 2624 cloned.type = source.type; 2625 popupVideo.appendChild(cloned); 2626 }); 2627 2628 2629 popupVideo.muted = false; 2630 2631 popupVideo.load(); 2632 popupVideo.currentTime = video.currentTime; 2633 popupVideo.play(); 2634 videoModal.classList.add('active'); 2635 }); 2636} 2637 2638// Close modal popup 2639if (closeModalBtn) { 2640 closeModalBtn.addEventListener('click', () => { 2641 popupVideo.pause(); 2642 popupVideo.currentTime = 0; 2643 videoModal.classList.remove('active'); 2644 }); 2645} 2646 2647 2648 2649}); 2650 2651 2652 2653// header 5 js 2654 2655document.addEventListener('DOMContentLoaded', function () { 2656 const gearToggle = document.querySelector('.gear-toggle'); 2657 const topBarContent = document.querySelector('.top-bar-content'); 2658 2659 if (gearToggle && topBarContent) { 2660 gearToggle.addEventListener('click', function () { 2661 this.classList.toggle('active'); 2662 topBarContent.classList.toggle('show'); 2663 }); 2664 } 2665}); 2666 2667document.addEventListener('DOMContentLoaded', function () { 2668 const searchIconDesktop = document.querySelector('.search-icon-desktop'); 2669 const searchIconMobile = document.querySelector('.search-icon-mobile'); 2670 const searchContainer = document.querySelector('.desktop-search-container'); 2671 const searchClose = document.querySelector('.search-close-desktop'); 2672 const headerMenus = document.querySelector('.header-menus-container'); 2673 const searchInput = document.getElementById('search'); 2674 2675 function openSearch() { 2676 if (searchContainer) { 2677 searchContainer.classList.remove('d-none'); 2678 setTimeout(() => { 2679 searchContainer.classList.add('expanded'); 2680 $('.search-icon-mobile-hide').addClass('d-none'); 2681 if (headerMenus) headerMenus.classList.add('hidden'); 2682 }, 10); 2683 if (searchInput) searchInput.focus(); 2684 } 2685 } 2686 2687 function closeSearch() { 2688 if (searchContainer) { 2689 searchContainer.classList.remove('expanded'); 2690 setTimeout(() => { 2691 $('.search-icon-mobile-hide').removeClass('d-none'); 2692 searchContainer.classList.add('d-none'); 2693 if (headerMenus) headerMenus.classList.remove('hidden'); 2694 }, 300); 2695 } 2696 } 2697 2698 [searchIconDesktop, searchIconMobile].forEach(icon => { 2699 if (icon) { 2700 icon.addEventListener('click', function (e) { 2701 e.preventDefault(); 2702 openSearch(); 2703 }); 2704 } 2705 }); 2706 2707 if (searchClose && searchInput) { 2708 searchClose.addEventListener('click', function (e) { 2709 e.preventDefault(); 2710 if (searchInput.value.trim() !== '') { 2711 searchInput.value = ''; 2712 searchInput.focus(); 2713 } else { 2714 closeSearch(); 2715 } 2716 }); 2717 } 2718 2719 document.addEventListener('keydown', function (e) { 2720 if (e.key === 'Escape' && !searchContainer.classList.contains('d-none')) { 2721 closeSearch(); 2722 } 2723 }); 2724 2725 document.addEventListener('click', function (e) { 2726 if ( 2727 (!searchContainer || !searchContainer.contains(e.target)) && 2728 (!searchIconDesktop || !searchIconDesktop.contains(e.target)) && 2729 (!searchIconMobile || !searchIconMobile.contains(e.target)) 2730 ) { 2731 if (searchContainer && !searchContainer.classList.contains('d-none')) { 2732 closeSearch(); 2733 } 2734 } 2735}); 2736 2737 2738 if (searchInput && searchClose) { 2739 searchInput.addEventListener('input', function () { 2740 const icon = searchClose.querySelector('i'); 2741 if (!icon) return; 2742 2743 if (this.value.trim()) { 2744 icon.classList.remove('la-search'); 2745 icon.classList.add('la-times'); 2746 } else { 2747 icon.classList.remove('la-times'); 2748 icon.classList.add('la-search'); 2749 } 2750 }); 2751} 2752}); 2753 2754 2755 2756function toggleChildDropdown(el, event) { 2757 if (event) event.stopPropagation(); 2758 2759 let $submenu = $(el).next('.child-dropdown'); 2760 if ($submenu.hasClass('show')) { 2761 $submenu.removeClass('show'); 2762 } else { 2763 $('.child-dropdown').removeClass('show'); 2764 $submenu.addClass('show'); 2765 } 2766} 2767 2768 2769 2770$('#category-menu-bar').on('click', function () { 2771 $(this).find('.menu-icon').toggleClass('rotated'); 2772}); 2773 2774 2775//product details gallery 2776$('.product-gallery-carousel').on('beforeChange', function(event, slick, currentSlide, nextSlide){ 2777 $(slick.$slides[currentSlide]).find('iframe').each(function(){ 2778 let src = $(this).attr('src'); 2779 $(this).attr('src', src); 2780    }); 2781}); 2782 2783//destroy zoom when mouse on expand btn 2784// Only run hover zoom disable on non-touch devices 2785if (!("ontouchstart" in window || navigator.maxTouchPoints > 0 || navigator.msMaxTouchPoints > 0)) { 2786 $(document).on("mouseenter", ".wd-show-product-gallery-wrap a", function(e){ 2787 $(".img-zoom").trigger("zoom.destroy"); 2788 }).on("mouseleave", ".wd-show-product-gallery-wrap a", function(e){ 2789 $(".img-zoom").zoom({ magnify: 1.5 }); 2790 }); 2791} 2792 2793 2794//for custom x logo 2795document.addEventListener("DOMContentLoaded", function () { 2796 const xLogo = ` 2797 <svg viewBox="0 0 1200 1227" xmlns="http://www.w3.org/2000/svg"> 2798 <path d="M714.2 529.5 1160 0H1050.9L666.4 2799 450.9 357.2 0H0l468.9 681.4L0 1226.9h109.1l409-493.3 2800 330.2 493.3H1200L714.2 529.5zm-144.5 2801 170.9-47.4-68.1L160 79.8h154.6l304.9 2802 438.8 47.4 68.1 395.2 568.5H907.5L569.7 2803 700.4z" /> 2804 </svg> 2805 `; 2806 2807 document.querySelectorAll('.aiz-custom-x-logo').forEach(el => { 2808 el.outerHTML = xLogo.replace('<svg', '<svg class="aiz-custom-x-logo"'); 2809 }); 2810}); 2811 2812$(".jssocials-share-twitter .jssocials-share-link") 2813 .css("background-color", "#332f2fff") 2814 .hover( 2815 function() { 2816 $(this).css("background-color", "#000"); 2817 }, 2818 function() { 2819 $(this).css("background-color", "#332f2fff"); 2820 } 2821); 2822 2823/* top-banner-scroll-text */ 2824function initTopBarScroll() { 2825 const inners = document.querySelectorAll(".top-banner-scroll-inner"); 2826 const speed = 80; 2827
2828 inners.forEach(inner => { 2829 const parentWidth = inner.parentElement.offsetWidth; 2830 const textWidth = inner.scrollWidth; 2831 2832 inner.style.animation = "none"; 2833 inner.style.transform = "translateX(0)"; 2834 inner.style.animationPlayState = "running"; 2835 2836 if (textWidth > parentWidth) { 2837 if (!inner.dataset.cloned) { 2838 const clone = inner.innerHTML; 2839 inner.innerHTML += clone; 2840 inner.dataset.cloned = true; 2841 } 2842 2843 const totalWidth = inner.scrollWidth; 2844 const duration = totalWidth / speed; 2845 2846 inner.style.animation = `top-banner-scroll-left ${duration}s linear infinite`; 2847 inner.style.animationPlayState = "running"; 2848 } else { 2849 inner.style.display = "flex"; 2850 inner.style.justifyContent = "center"; 2851 } 2852 }); 2853} 2854 2855document.addEventListener("DOMContentLoaded", () => { 2856 const inners = document.querySelectorAll(".top-banner-scroll-inner"); 2857 2858 inners.forEach(inner => { 2859 inner.addEventListener("mouseenter", () => { 2860 inner.style.animationPlayState = "paused"; 2861 }); 2862 2863 inner.addEventListener("mouseleave", () => { 2864 inner.style.animationPlayState = "running"; 2865 }); 2866 }); 2867}); 2868 2869document.addEventListener("DOMContentLoaded", initTopBarScroll); 2870window.addEventListener("resize", initTopBarScroll); 2871 2872 2873 2874// Gallery Image vIEWER 2875 2876document.addEventListener("DOMContentLoaded", function() { 2877 const modal = document.getElementById("lightboxModal"); 2878 const modalImg = document.getElementById("lightboxImage"); 2879 const closeBtn = document.querySelector(".lightbox-close"); 2880 const zoomInBtn = document.getElementById("zoomInBtn"); 2881 const zoomOutBtn = document.getElementById("zoomOutBtn"); 2882 const fullscreenBtn = document.getElementById("fullscreenBtn"); 2883 const copyLinkBtn = document.getElementById("copyLinkBtn"); 2884 const downloadBtn = document.getElementById("downloadBtn"); 2885 const prevBtn = document.getElementById("prevBtn"); 2886 const nextBtn = document.getElementById("nextBtn"); 2887 const imageCounter = document.getElementById("imageCounter"); 2888 2889 const galleryImgs = document.querySelectorAll(".lightbox-item img.lightbox-source"); 2890 2891 let currentIndex = 0; 2892 let scale = 1; 2893 2894 function openModal(index, direction = 0) { 2895 if (!modal || !modalImg) return; 2896 2897 currentIndex = index; 2898 modal.style.display = "block"; 2899 2900 // Slide animation 2901 modalImg.style.transition = "transform 0.3s ease, opacity 0.3s ease"; 2902 modalImg.style.transform = `translate(calc(-50% + ${direction * 100}%), -50%) scale(${scale})`; 2903 modalImg.style.opacity = 0; 2904 2905 setTimeout(() => { 2906 modalImg.src = galleryImgs[index].dataset.src || galleryImgs[index].src; 2907 scale = 1; // reset zoom 2908 modalImg.style.transform = `translate(-50%, -50%) scale(${scale})`; 2909 modalImg.style.opacity = 1; 2910 $('.lightbox-content').css('cursor', 'zoom-in'); 2911 updateCounter(); 2912 }, 200); 2913 } 2914 2915 function updateCounter() { 2916 if (imageCounter) { 2917 imageCounter.textContent = `${currentIndex + 1} / ${galleryImgs.length}`; 2918 } 2919 } 2920 2921 // Gallery buttons 2922 document.querySelectorAll(".woodmart-show-product-gallery").forEach((btn, i) => { 2923 btn.addEventListener("click", function(e) { 2924 e.preventDefault(); 2925 openModal(i); 2926 }); 2927 }); 2928 2929 // Double click to zoom 2930 if (modalImg) { 2931 modalImg.addEventListener("dblclick", () => { 2932 scale = scale === 1 ? 2 : 1; 2933 modalImg.style.transform = `translate(-50%, -50%) scale(${scale})`; 2934 $('.lightbox-content').css('cursor', scale === 1 ? 'zoom-in' : 'zoom-out'); 2935 }); 2936 } 2937 2938 // Close modal 2939 if (closeBtn && modal) { 2940 closeBtn.onclick = () => modal.style.display = "none"; 2941 } 2942 2943 // Previous image 2944 if (prevBtn) { 2945 prevBtn.onclick = () => { 2946 currentIndex = (currentIndex - 1 + galleryImgs.length) % galleryImgs.length; 2947 openModal(currentIndex, 0); 2948 }; 2949 } 2950 2951 // Next image 2952 if (nextBtn) { 2953 nextBtn.onclick = () => { 2954 currentIndex = (currentIndex + 1) % galleryImgs.length; 2955 openModal(currentIndex, 0); 2956 }; 2957 } 2958 2959 // Zoom in 2960 if (zoomInBtn && modalImg) { 2961 zoomInBtn.onclick = () => { 2962 scale += 0.2;
2963 modalImg.style.transform = `translate(-50%, -50%) scale(${scale})`; 2964 $('.lightbox-content').css('cursor', 'zoom-out'); 2965 }; 2966 } 2967 2968 // Zoom out 2969 if (zoomOutBtn && modalImg) { 2970 zoomOutBtn.onclick = () => { 2971 scale = Math.max(0.2, scale - 0.2); 2972 modalImg.style.transform = `translate(-50%, -50%) scale(${scale})`; 2973 $('.lightbox-content').css('cursor', 'zoom-in'); 2974 }; 2975 } 2976 2977 // Fullscreen toggle 2978 if (fullscreenBtn && modal) { 2979 fullscreenBtn.onclick = () => { 2980 if (!document.fullscreenElement) { 2981 modal.requestFullscreen(); 2982 } else { 2983 document.exitFullscreen(); 2984 } 2985 }; 2986 } 2987 2988 // Copy link 2989 if (copyLinkBtn && modalImg) { 2990 copyLinkBtn.onclick = () => { 2991 navigator.clipboard.writeText(modalImg.src) 2992 .then(() => AIZ.plugins.notify('success', 'Link copied to clipboard')); 2993 }; 2994 } 2995 2996 // Download 2997 if (downloadBtn && modalImg) { 2998 downloadBtn.onclick = () => { 2999 const link = document.createElement('a'); 3000 link.href = modalImg.src; 3001 link.download = 'image'; 3002 link.click(); 3003 }; 3004 } 3005 3006 // Close modal on outside click 3007 if (modal) { 3008 modal.addEventListener("click", function(e) { 3009 if (e.target === modal) modal.style.display = "none"; 3010 }); 3011 } 3012 3013 // Arrow keys navigation 3014 document.addEventListener("keydown", function(e) { 3015 if (!modal || modal.style.display !== "block") return; 3016 if (e.key === "ArrowRight" && nextBtn) nextBtn.click(); 3017 if (e.key === "ArrowLeft" && prevBtn) prevBtn.click(); 3018 if (e.key === "Escape") modal.style.display = "none"; 3019 }); 3020}); 3021 3022// smart bar 3023document.addEventListener("DOMContentLoaded", function () { 3024 3025 const smartBar = document.getElementById('smart-bar'); 3026 const trigger = document.getElementById('smart-bar-trigger'); 3027 3028 if (!smartBar || !trigger) return; 3029 3030 smartBar.classList.remove('visible'); 3031 smartBar.classList.add('hidden'); 3032 3033 const showSmartBar = () => { 3034 smartBar.classList.remove('hidden'); 3035 smartBar.classList.add('visible'); 3036 }; 3037 3038 const hideSmartBar = () => { 3039 smartBar.classList.remove('visible'); 3040 smartBar.classList.add('hidden'); 3041 }; 3042 3043 const observer = new IntersectionObserver( 3044 (entries) => { 3045 entries.forEach(entry => { 3046 3047 if (entry.isIntersecting && entry.boundingClientRect.top >= 0) { 3048 showSmartBar(); 3049 } 3050 else if (entry.boundingClientRect.top > 0) { 3051 hideSmartBar(); 3052 } 3053 else { 3054 showSmartBar(); 3055 } 3056 3057 }); 3058 }, 3059 { 3060 root: null, 3061 threshold: 0 3062 } 3063 ); 3064 3065 observer.observe(trigger); 3066 3067 const triggerPosition = trigger.getBoundingClientRect(); 3068 if (triggerPosition.top <= window.innerHeight) { 3069 showSmartBar(); 3070 } else { 3071 hideSmartBar(); 3072 } 3073 3074}); 3075 3076 3077function closeSmartBar() { 3078 const bar = document.getElementById('smart-bar'); 3079 if (!bar) return; 3080 3081 bar.classList.add('closing'); 3082 3083 bar.addEventListener('transitionend', function handler() { 3084 bar.removeEventListener('transitionend', handler); 3085 bar.remove(); 3086 }); 3087} 3088 3089function scrollToTopSection() { 3090 const topSection = document.querySelector('.product-details > .container'); 3091 3092 if(topSection) { 3093 topSection.scrollIntoView({ 3094 behavior: 'smooth', 3095 block: 'start' 3096 }); 3097 } 3098} 3099 3100 3101 3102//for header-6 gear icon show-hide 3103function hideOptions() { 3104 document.querySelector('.silder-toggle').classList.add('d-none'); 3105} 3106 3107function showOptions() { 3108 document.querySelector('.silder-toggle').classList.remove('d-none'); 3109} 3110 3111 3112 3113// Product Clone 3114 3115function duplicateProduct(productId = null, type = null) { 3116 let selectedProductId; 3117 3118 if (productId === null) { 3119 var selectedProduct = $('input[name="selected_product_id"]:checked'); 3120 selectedProductId = selectedProduct.val(); 3121 3122 if (!selectedProductId) { 3123 AIZ.plugins.notify('warning', 'Please select a product'); 3124 return; 3125 } 3126 3127 $('#products_select_modal').modal('hide'); 3128 } else { 3129 selectedProductId = productId; 3130 } 3131 3132 $('#loading-modal').modal('show', { backdrop: 'static' }); 3133 3134 $.ajax({ 3135 url: duplicateProductUrl.replace(':id', selectedProductId) + (type ? '?type=' + type : ''), 3136 method: 'GET', 3137 success: function(response) { 3138 $('#loading-modal').modal('hide'); 3139 if (response.success) { 3140 AIZ.plugins.notify('success', response.message); 3141 } else { 3142 AIZ.plugins.notify('danger', response.message); 3143 return; 3144 } 3145 3146 3147 if (response.redirect) { 3148 setTimeout(function() { 3149 window.location.href = response.redirect; 3150 }, 1000); 3151 } else { 3152 setTimeout(function() { 3153 location.reload(); 3154 }, 1000); 3155 } 3156 }, 3157 error: function(xhr) { 3158 $('#loading-modal').modal('hide'); 3159 AIZ.plugins.notify('danger', 'Something went wrong'); 3160 } 3161 }); 3162} 3163 3164 3165 3166// Open Bulk Action Modal 3167 3168function showBulkActionModal(){ 3169 3170 $('#bulk-action-modal').modal('show'); 3171} 3172 3173//Hide BulkActionModal 3174function hideBulkActionModal(){ 3175 $('#bulk-action-modal').modal('hide'); 3176} 3177 3178function initFooTable() { 3179 generateDetails(); 3180 initToggles(); 3181 handleResize(); 3182 updateToggleVisibility(); // Initial check 3183} 3184 3185/* Build details rows for hidden columns */ 3186function generateDetails() { 3187 // Remove old details rows 3188 document.querySelectorAll(".details-row").forEach(el => el.remove()); 3189 3190 document.querySelectorAll(".data-row").forEach(row => { 3191 const details = document.createElement("tr"); 3192 details.className = "details-row"; 3193 3194 // Mark this details row as belonging to its data row 3195 details.dataset.parentId = row.dataset.rowId || row.getAttribute("id") || [...document.querySelectorAll(".data-row")].indexOf(row); 3196 3197 const td = document.createElement("td"); 3198 td.colSpan = row.children.length; 3199 3200 let html = ""; 3201
3202 [...row.children].forEach(cell => { 3203 if (cell.querySelector(".toggle-plus-minus-btn")) return; 3204 3205 if (window.getComputedStyle(cell).display === "none") { 3206 const label = cell.dataset.label || ""; 3207 html += ` 3208 <div class="detail-item py-10px"> 3209 <span class="detail-label d-block text-uppercase fs-12 fw-700 text-secondary mb-2"> 3210 ${label}: 3211 </span> 3212 <span class="detail-value d-block">${cell.innerHTML}</span> 3213 </div> 3214 `; 3215 } 3216 }); 3217 3218 td.innerHTML = html; 3219 details.appendChild(td); 3220 3221 row.insertAdjacentElement("afterend", details); 3222 3223 // check if it was open before rebuild 3224 const toggleBtn = row.querySelector(".toggle-plus-minus-btn"); 3225 if (toggleBtn && toggleBtn.textContent === "-") { 3226 details.style.display = "table-row"; 3227 toggleBtn.textContent = "-"; // keep minus 3228 } else { 3229 details.style.display = "none"; 3230 if (toggleBtn) toggleBtn.textContent = "+"; 3231 } 3232 }); 3233} 3234 3235/* Toggle button handler */ 3236function initToggles() { 3237 document.querySelectorAll(".toggle-plus-minus-btn").forEach(btn => { 3238 btn.onclick = () => { 3239 const row = btn.closest("tr"); 3240 const details = row.nextElementSibling; 3241 const isOpen = details.style.display === "table-row"; 3242 3243 details.style.display = isOpen ? "none" : "table-row"; 3244 btn.textContent = isOpen ? "+" : "-"; 3245 }; 3246 }); 3247} 3248 3249/* Show toggle only if there are hidden columns */ 3250function updateToggleVisibility() { 3251 document.querySelectorAll(".data-row").forEach(row => { 3252 const toggleBtn = row.querySelector(".toggle-plus-minus-btn"); 3253 if (!toggleBtn) return; 3254 3255 const hasHidden = [...row.children].some(cell => 3256 cell !== toggleBtn.parentElement && window.getComputedStyle(cell).display === "none" 3257 ); 3258 3259 toggleBtn.style.display = hasHidden ? "inline-block" : "none"; 3260 3261 // Reset to + if no hidden columns (safety) 3262 if (!hasHidden) { 3263 const details = row.nextElementSibling; 3264 if (details && details.classList.contains("details-row")) { 3265 details.style.display = "none"; 3266 } 3267 toggleBtn.textContent = "+"; 3268 } 3269 }); 3270} 3271 3272function handleResize() { 3273 const openStates = new Map(); 3274 document.querySelectorAll(".data-row").forEach(row => { 3275 const btn = row.querySelector(".toggle-plus-minus-btn"); 3276 const key = row.dataset.rowId || [...document.querySelectorAll(".data-row")].indexOf(row); 3277 if (btn) { 3278 openStates.set(key, btn.textContent === "-"); 3279 } 3280 }); 3281 3282 generateDetails(); 3283 document.querySelectorAll(".data-row").forEach(row => { 3284 const btn = row.querySelector(".toggle-plus-minus-btn"); 3285 if (!btn) return; 3286 3287 const key = row.dataset.rowId || [...document.querySelectorAll(".data-row")].indexOf(row); 3288 if (openStates.get(key)) { 3289 const details = row.nextElementSibling; 3290 if (details && details.classList.contains("details-row")) { 3291 details.style.display = "table-row"; 3292 } 3293 btn.textContent = "-"; 3294 } 3295 }); 3296 3297 // Step 4: Update toggle visibility (in case breakpoints changed) 3298 updateToggleVisibility(); 3299} 3300 3301// Throttle resize for performance 3302let resizeTimeout; 3303window.addEventListener("resize", () => { 3304 clearTimeout(resizeTimeout); 3305 resizeTimeout = setTimeout(handleResize, 100); 3306}); 3307//behabiour for Table Nav Tabs Scroll 3308document.addEventListener('DOMContentLoaded', () => { 3309 const tableTabsContainer = document.querySelector('.table-tabs-container'); 3310 // If element not found â break 3311 if (!tableTabsContainer) return; 3312 const tableTabs = tableTabsContainer.querySelectorAll('.nav-link'); 3313 tableTabs.forEach(tab => { 3314 tab.addEventListener('click', () => { 3315 const offset = 3316 tab.offsetLeft - tableTabsContainer.clientWidth / 2 + tab.clientWidth / 2; 3317 3318 tableTabsContainer.scrollTo({ 3319 left: offset, 3320 behavior: "smooth" 3321 }); 3322 }); 3323 }); 3324}); 3325 3326 3327 3328function startTimer() { 3329 if (currentIdx >= cardIds.length) return; 3330 3331 let activeId = cardIds[currentIdx]; 3332 let $card = $('#' + activeId); 3333 let $bar = $('#fill-' + activeId); 3334 let width = 0; 3335 3336 // show close button 3337 $card.find('.btn-close-stack').removeClass('d-none'); 3338 3339 clearInterval(timer); 3340 3341 // dynamic duration (seconds) 3342 let durationSeconds = window.POPUP_DURATION || 5; 3343 3344 // 100 steps progress bar 3345 let intervalTime = (durationSeconds * 1000) / 100; 3346 3347 timer = setInterval(() => { 3348 width += 1; 3349 $bar.css('width', width + '%'); 3350 3351 if (width >= 100) { 3352 clearInterval(timer); 3353 removeTopCard(activeId, true); 3354 } 3355 }, intervalTime); 3356} 3357 3358function removeTopCard(id, auto = false) { 3359 3360 if (id !== cardIds[currentIdx]) return; 3361 3362 let $card = $('#' + id); 3363 3364 // store session removal state 3365 let key = $card.closest('.removable-session').data('key'); 3366 if (key) { 3367 const item = { 3368 value: "removed", 3369 expiry: Date.now()+(3600000), 3370 }; 3371 localStorage.setItem(key, JSON.stringify(item)); 3372 } 3373 3374 $card.addClass('exit-now'); 3375 3376 setTimeout(() => { 3377 $card.hide(); 3378 currentIdx++; 3379 realignStack(); 3380 3381 if (currentIdx >= cardIds.length) { 3382 $('#stack-popup-main-wrapper').fadeOut(200); 3383 $('body').removeClass('modal-open'); 3384 $('.absolute-full').fadeOut(200); 3385 return; 3386 } 3387 3388 startTimer(); 3389 }, 500); 3390} 3391 3392function realignStack() { 3393 $('.card-wrapper:visible').each(function (i) { 3394 $(this).removeClass(function (index, className) { 3395 return (className.match(/(^|\s)card-pos-\S+/g) || []).join(' '); 3396 }); 3397 $(this).addClass('card-pos-' + i); 3398 }); 3399} 3400 3401function smoothlyRemoveElement($element) { 3402 if (!$element || $element.length === 0) return; 3403 $element.addClass('removing'); 3404 3405 setTimeout(() => { 3406 try { 3407 var sessionKey = $element.data('key') || $element.closest('.removable-session').data('key'); 3408 if (sessionKey) { 3409 const now = new Date(); 3410 const item = { 3411 value: 'removed', 3412 expiry: now.getTime() + 3600000 3413 }; 3414 localStorage.setItem(sessionKey, JSON.stringify(item)); 3415 } 3416 } catch (err) { 3417 console.error('safely storing alert-dismissal key failed', err); 3418 } 3419 3420 $element.remove(); 3421 $(document).trigger('alertRemoved', [$element]); 3422 }, 600); 3423} 3424 3425// new image Uploader 3426 3427$(document).ready(function() { 3428 3429 $(document).on('click', '.direct-uploader', function(e) { 3430 if (!$(e.target).is('input')) { 3431 $(this).find('input[type="file"]')[0].click(); 3432 } 3433 }); 3434 3435 $(document).on('change', '.direct-uploader input', function(e) { 3436 let input = this; 3437 let files = Array.from(input.files); 3438 let wrapper = $(this).closest('.form-group'); 3439 let previewBox = wrapper.find('.direct-preview'); 3440 let errorBox = wrapper.find('.upload-error'); 3441 let isMultiple = $(this).prop('multiple'); 3442 3443 errorBox.text(''); 3444 const allowedExts = ['jpg', 'jpeg', 'png', 'webp']; 3445 let invalidFiles = files.filter(f => { 3446 const ext = f.name.split('.').pop().toLowerCase(); 3447 return !allowedExts.includes(ext); 3448 }); 3449 3450 if (invalidFiles.length > 0) { 3451 errorBox.text('Only JPG, JPEG, PNG, and WEBP images are allowed.'); 3452 input.value = ''; 3453 return; 3454 } 3455 3456 let existingCount = previewBox.find('.direct-file-preview-item').length; 3457 let totalCount = existingCount + files.length; 3458 3459 if (isMultiple && totalCount > 6) { 3460 errorBox.text('Maximum 6 files are allowed.'); 3461 input.value = ''; 3462 return; 3463 } 3464 3465 if (!isMultiple) { 3466 previewBox.html(''); 3467 } else { 3468 let dt = new DataTransfer(); 3469 3470 if (input._storedFiles) {
3471 input._storedFiles.forEach(f => dt.items.add(f)); 3472 } 3473 3474 files.forEach(f => dt.items.add(f)); 3475 3476 input.files = dt.files; 3477 input._storedFiles = Array.from(dt.files); 3478 } 3479 3480 files.forEach((file) => { 3481 3482 if (!file.type.startsWith('image/') && !file.type.startsWith('video/')) return; 3483 3484 let reader = new FileReader(); 3485 3486 reader.onload = function(e) { 3487 3488 if (file.type.startsWith('image/')) { 3489 let img = new Image(); 3490 img.src = e.target.result; 3491 img.onload = function() { 3492 EXIF.getData(img, function() { 3493 let orientation = EXIF.getTag(this, "Orientation") || 1; 3494 let canvas = document.createElement('canvas'); 3495 let ctx = canvas.getContext('2d'); 3496 3497 let width = img.width; 3498 let height = img.height; 3499 3500 let maxSize = 800; 3501 3502 if (width > maxSize || height > maxSize) { 3503 let scale = Math.min(maxSize / width, maxSize / height); 3504 width = Math.round(width * scale); 3505 height = Math.round(height * scale); 3506 } 3507 3508 switch (orientation) { 3509 3510 case 2: 3511 canvas.width = width; 3512 canvas.height = height; 3513 ctx.translate(width, 0); 3514 ctx.scale(-1, 1); 3515 break; 3516 3517 case 3: 3518 canvas.width = width; 3519 canvas.height = height; 3520 ctx.translate(width, height); 3521 ctx.rotate(Math.PI); 3522 break; 3523 3524 case 4: 3525 canvas.width = width; 3526 canvas.height = height; 3527 ctx.translate(0, height); 3528 ctx.scale(1, -1); 3529 break; 3530 3531 case 5: 3532 canvas.width = height; 3533 canvas.height = width; 3534 ctx.rotate(0.5 * Math.PI); 3535 ctx.scale(1, -1); 3536 break; 3537 3538 case 6: 3539 canvas.width = height; 3540 canvas.height = width; 3541 ctx.rotate(0.5 * Math.PI); 3542 ctx.translate(0, -height); 3543 break; 3544 3545 case 7: 3546 canvas.width = height; 3547 canvas.height = width; 3548 ctx.rotate(0.5 * Math.PI); 3549 ctx.translate(width, -height); 3550 ctx.scale(-1, 1); 3551 break; 3552 3553 case 8: 3554 canvas.width = height; 3555 canvas.height = width; 3556 ctx.rotate(-0.5 * Math.PI); 3557 ctx.translate(-width, 0); 3558 break; 3559 3560 default: 3561 canvas.width = width; 3562 canvas.height = height; 3563 } 3564 3565 ctx.drawImage(img, 0, 0, width, height); 3566 3567 let resizedDataUrl = canvas.toDataURL(file.type, 0.8); 3568 3569 let thumbHTML = `<img src="${resizedDataUrl}" class="img-fit">`; 3570 3571 appendPreview(wrapper, file, thumbHTML); 3572 3573 }); 3574 3575 }; 3576 3577 } else if (file.type.startsWith('video/')) { 3578 let thumbHTML = ` 3579 <video width="100%" height="100%" controls> 3580 <source src="${e.target.result}" type="${file.type}"> 3581 </video>`; 3582 3583 appendPreview(wrapper, file, thumbHTML); 3584 } 3585 }; 3586
3587 reader.readAsDataURL(file); 3588 }); 3589 }); 3590 3591 function appendPreview(wrapper, file, thumbHTML) { 3592 let previewBox = wrapper.find('.direct-preview'); 3593 3594 let html = ` 3595 <div class="direct-file-preview-item" title="${file.name}"> 3596 <div class="thumb d-flex justify-content-center align-items-center"> 3597 ${thumbHTML} 3598 </div> 3599 <div class="col body"> 3600 <h6 class="d-flex"> 3601 <span class="text-truncate title">${file.name}</span> 3602 </h6> 3603 <p>${(file.size/1024).toFixed(1)} KB</p> 3604 </div> 3605 <div class="remove"> 3606 <button class="btn btn-sm btn-link remove-btn" type="button"> 3607 <i class="la la-close"></i> 3608 </button> 3609 </div> 3610 </div> 3611 `; 3612 3613 previewBox.append(html); 3614 3615 let totalItems = previewBox.find('.direct-file-preview-item').length; 3616 if (totalItems >= 6) { 3617 wrapper.find('.direct-uploader').hide(); 3618 } 3619 } 3620 3621 $(document).on('click', '.direct-preview .remove-btn', function() { 3622 let parent = $(this).closest('.direct-file-preview-item'); 3623 let wrapper = $(this).closest('.form-group'); 3624 let input = wrapper.find('input[type="file"]')[0]; 3625 let fileName = parent.attr('title'); 3626 3627 if (input._storedFiles) { 3628 input._storedFiles = input._storedFiles.filter(f => f.name !== fileName); 3629 3630 let dt = new DataTransfer(); 3631 input._storedFiles.forEach(f => dt.items.add(f)); 3632 input.files = dt.files; 3633 } 3634 3635 parent.remove(); 3636 3637 if (input._storedFiles && input._storedFiles.length > 0) { 3638 const allowedExts = ['jpg', 'jpeg', 'png', 'webp']; 3639 let hasInvalid = input._storedFiles.some(f => { 3640 const ext = f.name.split('.').pop().toLowerCase(); 3641 return !allowedExts.includes(ext); 3642 }); 3643 wrapper.find('.upload-error').text(hasInvalid ? 'Only JPG, JPEG, PNG, and WEBP images are allowed.' : ''); 3644 } else { 3645 wrapper.find('.upload-error').text(''); 3646 } 3647 3648 let totalItems = wrapper.find('.direct-file-preview-item').length; 3649 if (totalItems < 6) { 3650 wrapper.find('.direct-uploader').show(); 3651 } 3652 3653 if (!$(input).prop('multiple')) { 3654 input.value = ''; 3655 } 3656 }); 3657 3658}); 3659 3660document.addEventListener("DOMContentLoaded", function () { 3661 $(document).on('click', '.custom-submenu-toggle', function (e) { 3662 e.stopPropagation(); 3663 e.preventDefault(); 3664 var $toggle = $(this); 3665 var $subMenu = $toggle.closest('.custom-dropdown-submenu').find('.custom-submenu-nested'); 3666 var $parentDropdown = $toggle.closest('.dropdown-menu'); 3667 var isOpen = $subMenu.hasClass('show'); 3668 $parentDropdown.find('.custom-submenu-nested').not($subMenu).removeClass('show flip-right'); 3669 $parentDropdown.find('.custom-submenu-toggle').not($toggle).removeClass('open').attr('aria-expanded', 'false'); 3670 if (isOpen) { 3671 $subMenu.removeClass('show flip-right'); 3672 $toggle.removeClass('open').attr('aria-expanded', 'false'); 3673 } else { 3674 $subMenu.addClass('show'); 3675 $toggle.addClass('open').attr('aria-expanded', 'true'); 3676 if (window.innerWidth > 767) { 3677 var rect = $subMenu[0].getBoundingClientRect(); 3678 if (rect.left < 0) { 3679 $subMenu.addClass('flip-right'); 3680 } 3681 } 3682 } 3683 }); 3684 3685 $(document).on('hidden.bs.dropdown', '.dropdown', function () { 3686 $(this).find('.custom-submenu-nested').removeClass('show flip-right'); 3687 $(this).find('.custom-submenu-toggle').removeClass('open').attr('aria-expanded', 'false'); 3688 }); 3689 3690 $(document).on('click', function (event) { 3691 var $trigger = $("[data-toggle='collapse'][href='#collapseQuickMenu'], [data-toggle='collapse'][data-target='#collapseQuickMenu']"); 3692 var $collapseMenu = $("#collapseQuickMenu"); 3693 if (!$collapseMenu.is(event.target) && $collapseMenu.has(event.target).length === 0 && !$trigger.is(event.target) && $trigger.has(event.target).length === 0) { 3694 if ($collapseMenu.hasClass('show')) { 3695 $collapseMenu.collapse('hide'); 3696 } 3697 } 3698 }); 3699});
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.