1//======================================================Price Format==============// 2function wbtm_price_format(price) { 3 if (typeof price === 'string') { 4 price = Number(price); 5 } 6 price = price.toFixed(wbtm_num_of_decimal); 7 let total_part = price.toString().split("."); 8 total_part[0] = total_part[0].replace(/\B(?=(\d{3})+(?!\d))/g, wbtm_currency_thousands_separator); 9 price = total_part.join(wbtm_currency_decimal); 10 let price_text = ''; 11 if (wbtm_currency_position === 'right') { 12 price_text = price + wbtm_currency_symbol; 13 } else if (wbtm_currency_position === 'right_space') { 14 price_text = price + ' ' + wbtm_currency_symbol; 15 } else if (wbtm_currency_position === 'left') { 16 price_text = wbtm_currency_symbol + price; 17 } else { 18 price_text = wbtm_currency_symbol + ' ' + price; 19 } 20 return price_text; 21} 22//=======================================================Loader==============// 23function wbtm_loader(target) { 24 if (target.find('div[class*="wbtm_loader"]').length < 1) { 25 target.addClass('pRelative').append('<div class="wbtm_loader"><span class="fas fa-spinner fa-pulse"></span></div>'); 26 } 27} 28function wbtm_loader_xs(target) { 29 if (target.find('div[class*="wbtm_loader"]').length < 1) { 30 target.addClass('pRelative').append('<div class="wbtm_loader_xs"><span class="fas fa-spinner fa-pulse"></span></div>'); 31 } 32} 33function wbtm_loaderBody() { 34 let body = jQuery('body'); 35 if (body.find('div[class*="wbtm_loader"]').length < 1) { 36 body.addClass('noScroll').append('<div class="wbtm_loader pFixed"><span class="fas fa-spinner fa-pulse"></span></div>'); 37 } 38} 39function wbtm_loaderBody_xs() { 40 let body = jQuery('body'); 41 if (body.find('div[class*="wbtm_loader"]').length < 1) { 42 body.addClass('noScroll').append('<div class="wbtm_loader_xs pFixed"><span class="fas fa-spinner fa-pulse"></span></div>'); 43 } 44} 45function wbtm_loader_circle(target) { 46 if (target.find('div[class*="wbtm_loader"]').length < 1) { 47 target.addClass('pRelative').append('<div class="wbtm_loader border_spin_loader"><span class="circle"></span></div>'); 48 } 49} 50function wbtm_loader_xs_circle(target) { 51 if (target.find('div[class*="wbtm_loader"]').length < 1) { 52 target.addClass('pRelative').append('<div class="wbtm_loader_xs border_spin_loader"><span class="circle"></span></div>'); 53 } 54} 55function wbtm_loaderRemove(target = jQuery('body')) { 56 target.removeClass('noScroll'); 57 target.removeClass('pRelative').find('div[class*="wbtm_loader"]').remove(); 58} 59function wbtm_placeholderLoader(target) { 60 target.addClass('wbtm_placeholderLoader'); 61} 62function wbtm_placeholderLoaderRemove(target) { 63 target.each(function () { 64 target.removeClass('wbtm_placeholderLoader'); 65 }) 66} 67//======================================================Page Scroll==============// 68function wbtm_pageScrollTo(target) { 69 jQuery('html, body').animate({ 70 scrollTop: target.offset().top -= 150 71 }, 1000); 72} 73//====================================================Load Date picker==============// 74function wbtm_load_date_picker(parent = jQuery('.wbtm_style')) { 75 // Unified Date Picker Initialization 76 parent.find(".date_type, .date_type_without_year").each(function () { 77 // Reset existing datepicker instances 78 jQuery(this).removeClass('hasDatepicker').attr('id', '').removeData('datepicker').unbind(); 79 }).promise().done(function () { 80 // Apply new datepicker settings 81 parent.find(".date_type, .date_type_without_year").datepicker({ 82 dateFormat: wbtm_date_format, // Ensure this includes the year, e.g., 'yy-mm-dd' 83 autoSize: true, 84 changeMonth: true, 85 changeYear: true, 86 onSelect: function (dateString, data) { 87 // Construct full date (YYYY-MM-DD) 88 const year = data.selectedYear || new Date().getFullYear();
89 const month = ('0' + (parseInt(data.selectedMonth) + 1)).slice(-2); 90 const day = ('0' + parseInt(data.selectedDay)).slice(-2); 91 const fullDate = `${year}-${month}-${day}`; 92 jQuery(this) 93 .closest('label') 94 .find('input[type="hidden"]') 95 .val(fullDate) 96 .trigger('change'); 97 }, 98 }); 99 }); 100} 101//========================================================Alert==============// 102function wbtm_alert($this, attr = 'alert') { 103 alert($this.data(attr)); 104} 105//=====================================================Load initial=================// 106(function ($) { 107 "use strict"; 108 $(document).ready(function () { 109 wbtm_load_date_picker(); 110 $('.wbtm_select2').select2({}); 111 }); 112}(jQuery)); 113//====================================================================Load Bg Image=================// 114function wbtm_loadBgImage() { 115 jQuery('body').find('.wbtm_style [data-bg-image]').each(function () { 116 // jQuery('body').find('.wbtm_style [data-bg-image]:visible').each(function () { 117 let target = jQuery(this); 118 let width = target.outerWidth(); 119 let height = target.outerHeight(); 120 if (target.css('background-image') === 'none' || width === 0 || height === 0) { 121 let bg_url = target.data('bg-image'); 122 if (!bg_url || bg_url.width === 0 || bg_url.width === 'undefined') { 123 bg_url = wbtm_empty_image_url; 124 } 125 wbtm_resize_bg_image_area(target, bg_url); 126 target.css('background-image', 'url("' + bg_url + '")').promise().done(function () { 127 wbtm_loaderRemove(jQuery(this)); 128 }); 129 } 130 }); 131 return true; 132} 133function wbtm_resize_bg_image_area(target, bg_url) { 134 let tmpImg = new Image(); 135 tmpImg.src = bg_url; 136 jQuery(tmpImg).one('load', function () { 137 let imgWidth = tmpImg.width; 138 let imgHeight = tmpImg.height; 139 let height = target.outerWidth() * imgHeight / imgWidth; 140 target.css({"min-height": height}); 141 }); 142} 143(function ($) { 144 let bg_image_load = false; 145 $(document).ready(function () { 146 $('body').find('.wbtm_style [data-bg-image]').each(function () { 147 wbtm_loader($(this)); 148 }); 149 $(window).on('load', function () { 150 load_initial(); 151 }); 152 if (!bg_image_load) { 153 load_initial(); 154 $(document).scroll(function () { 155 load_initial(); 156 }); 157 } 158 }); 159 $(document).on('click', '.wbtm_style [data-href]', function () { 160 let href = $(this).data('href'); 161 if (href) { 162 window.location.href = href; 163 } 164 }); 165 $(window).on('load , resize', function () { 166 $('body').find('.wbtm_style [data-bg-image]:visible').each(function () { 167 let target = $(this); 168 let bg_url = target.data('bg-image'); 169 if (!bg_url || bg_url.width === 0 || bg_url.width === 'undefined') { 170 bg_url = wbtm_empty_image_url; 171 } 172 wbtm_resize_bg_image_area(target, bg_url); 173 }); 174 }); 175 function load_initial() { 176 if (!bg_image_load) { 177 if (wbtm_loadBgImage()) { 178 bg_image_load = true; 179 wbtm_placeholderLoaderRemove($('.wbtm_style.wbtm_placeholderLoader')) 180 } 181 } 182 } 183}(jQuery)); 184//=============================================================================Change icon and text=================// 185function wbtm_content_icon_change(currentTarget) { 186 let openIcon = currentTarget.data('open-icon'); 187 let closeIcon = currentTarget.data('close-icon'); 188 if (openIcon || closeIcon) { 189 currentTarget.find('[data-icon]').toggleClass(closeIcon).toggleClass(openIcon); 190 } 191} 192function wbtm_content_text_change(currentTarget) { 193 let openText = currentTarget.data('open-text'); 194 openText = openText ? openText.toString() : ''; 195 let closeText = currentTarget.data('close-text'); 196 closeText = closeText ? closeText : ''; 197 if (openText || closeText) { 198 let text = currentTarget.find('[data-text]').html(); 199 text = text ? text.toString() : '' 200 if (text !== openText) { 201 currentTarget.find('[data-text]').html(openText); 202 } else { 203 currentTarget.find('[data-text]').html(closeText); 204 } 205 } 206} 207function wbtm_content_class_change(currentTarget) {
208 let clsName = currentTarget.data('add-class'); 209 if (clsName) { 210 if (currentTarget.find('[data-class]').length > 0) { 211 currentTarget.find('[data-class]').toggleClass(clsName); 212 } else { 213 currentTarget.toggleClass(clsName); 214 } 215 } 216} 217function wbtm_content_input_value_change(currentTarget) { 218 currentTarget.find('[data-value]').each(function () { 219 let value = jQuery(this).val(); 220 if (value) { 221 jQuery(this).val(''); 222 } else { 223 jQuery(this).val(jQuery(this).data('value')); 224 } 225 jQuery(this).trigger('change'); 226 }); 227} 228function wbtm_all_content_change($this) { 229 wbtm_loadBgImage(); 230 wbtm_content_class_change($this); 231 wbtm_content_icon_change($this); 232 wbtm_content_text_change($this); 233 wbtm_content_input_value_change($this); 234} 235(function ($) { 236 "use strict"; 237 $(document).on('click', '.wbtm_load_more_text_area [data-read]', function (e) { 238 e.stopPropagation(); 239 let parent = $(this).closest('.wbtm_load_more_text_area'); 240 let open_text = parent.find('[data-read-open]').html(); 241 let close_text = parent.find('[data-read-close]').html(); 242 parent.find('[data-read-close]').html(open_text); 243 parent.find('[data-read-open]').html(close_text); 244 wbtm_content_text_change($(this)); 245 }); 246 $(document).on('click', ' .wbtm_style [data-all-change]', function () { 247 wbtm_all_content_change($(this)); 248 }); 249 $(document).on('click', ' .wbtm_style [data-icon-change]', function () { 250 wbtm_content_icon_change($(this)); 251 }); 252 $(document).on('click', ' .wbtm_style [data-text-change]', function () { 253 wbtm_content_text_change($(this)); 254 }); 255 $(document).on('click', ' .wbtm_style [data-class-change]', function () { 256 wbtm_content_class_change($(this)); 257 }); 258 $(document).on('click', ' .wbtm_style [data-value-change]', function () { 259 wbtm_content_input_value_change($(this)); 260 }); 261 $(document).on('keyup change', '.wbtm_style [data-input-text]', function () { 262 let input_value = $(this).val(); 263 let input_id = $(this).data('input-text'); 264 $(" .wbtm_style [data-input-change='" + input_id + "']").each(function () { 265 $(this).html(input_value); 266 }); 267 }); 268 $(document).on('keyup change', '.wbtm_style [data-target-same-input]', function () { 269 let input_value = $(this).val(); 270 let input_id = $(this).data('target-same-input'); 271 $(" .wbtm_style [data-same-input='" + input_id + "']").each(function () { 272 $(this).val(input_value); 273 }); 274 }); 275}(jQuery)); 276//==============================================================================Qty inc dec================// 277(function ($) { 278 "use strict"; 279 $(document).on("click", "div.wbtm_style .decQty ,div.wbtm_style .incQty", function () { 280 let current = $(this); 281 let target = current.closest('.qtyIncDec').find('input'); 282 let currentValue = parseInt(target.val()); 283 let value = current.hasClass('incQty') ? (currentValue + 1) : ((currentValue - 1) > 0 ? (currentValue - 1) : 0); 284 let min = parseInt(target.attr('min')); 285 let max = parseInt(target.attr('max')); 286 target.parents('.qtyIncDec').find('.incQty , .decQty').removeClass('mpDisabled'); 287 if (value < min || isNaN(value) || value === 0) { 288 value = min; 289 target.parents('.qtyIncDec').find('.decQty').addClass('mpDisabled'); 290 } 291 if (value > max) { 292 value = max; 293 target.parents('.qtyIncDec').find('.incQty').addClass('mpDisabled'); 294 } 295 target.val(value).trigger('change').trigger('input'); 296 }); 297}(jQuery)); 298//==============================================================================Input use as select================// 299(function ($) { 300 "use strict"; 301 $(document).on("click", "div.wbtm_style .wbtm_input_select .wbtm_input_select_list li", function (e) { 302 e.preventDefault(); 303 let current = $(this); 304 let parent = $(this).closest('.wbtm_input_select'); 305 let value = current.data('value'); 306 let text = current.html(); 307 parent.find('.wbtm_input_select_list').slideUp(250); 308 if (parent.find('input[type="hidden"]').length > 0) { 309 parent.find('input.formControl').val(text); 310 parent.find('input[type="hidden"]').val(value).trigger('mp_change'); 311 } else { 312 parent.find('input.formControl').val(value).trigger('mp_change'); 313 } 314 }); 315 $(document).on({ 316 keyup: function () { 317 let input = $(this).val().toLowerCase(); 318 $(this).closest('.wbtm_input_select').find('.wbtm_input_select_list li').each(function () { 319 let input_length = input.length; 320 $(this).toggle($(this).attr('data-value').toLowerCase().substring(0, input_length) === input); 321 }); 322 $(this).closest('.wbtm_input_select').find('.wbtm_input_select_list').slideDown(200); 323 }, 324 click: function () { 325 $('body').find('.wbtm_input_select .wbtm_input_select_list').slideUp(250); 326 let input = $(this).val().toLowerCase(); 327 $(this).closest('.wbtm_input_select').find('.wbtm_input_select_list li').each(function () { 328 let data = $(this).attr('data-value').toLowerCase(); 329 if (!input || input === data) { 330 $(this).slideDown('fast'); 331 } 332 }); 333 $(this).closest('.wbtm_input_select').find('.wbtm_input_select_list').slideDown(250); 334 } 335 }, 'div.wbtm_style .wbtm_input_select input.formControl'); 336}(jQuery)); 337//============================================================================Sticky================// 338function wbtm_sticky_management() { 339 if (jQuery('.wbtm_style .wbtm_sticky_area').length > 0) { 340 window.onscroll = function () { 341 jQuery('.wbtm_style .wbtm_sticky_area').each(function () { 342 let body_width = jQuery('body').outerWidth(); 343 let scroll_top = jQuery(window).scrollTop(); 344 let current = jQuery(this); 345 let target_scroll = current.find('.wbtm_sticky_on_scroll'); 346 let content_top = current.parent().offset().top; 347 let parent = current.closest('.mp_sticky_section'); 348 let depend_height = parent.find('.wbtm_sticky_depend_area').innerHeight(); 349 let content_height = depend_height - Math.max(scroll_top - content_top, 0) - (target_scroll.offset().top - current.offset().top) - 100; 350 if (body_width > 800 && scroll_top + 100 >= content_top) { 351 target_scroll.css('max-height', content_height); 352 if (!current.hasClass('wbtm_sticky')) { 353 current.addClass('wbtm_sticky').css('top', 100); 354 } 355 } else { 356 target_scroll.css('max-height', content_height + 100); 357 current.removeClass('wbtm_sticky'); 358 } 359 }); 360 }; 361 } 362} 363(function ($) { 364 "use strict"; 365 $(document).ready(function () { 366 wbtm_sticky_management(); 367 }); 368}(jQuery)); 369//============================================================================Tabs================// 370(function ($) { 371 "use strict"; 372 function active_next_tab(parent, targetTab) { 373 parent.height(parent.height()); 374 let tabsContent = parent.find('.tabsContentNext:first'); 375 let target_tabContent = tabsContent.children('[data-tabs-next="' + targetTab + '"]'); 376 let index = target_tabContent.index() + 1; 377 let num_of_tab = parent.find('.tabListsNext:first').children('[data-tabs-target-next]').length; 378 let i = 1; 379 for (i; i <= num_of_tab; i++) { 380 let target_tab = parent.find('.tabListsNext:first').children('[data-tabs-target-next]:nth-child(' + i + ')'); 381 if (i <= index) { 382 target_tab.addClass('active'); 383 } else { 384 target_tab.removeClass('active'); 385 } 386 if (i === index - 1) { 387 wbtm_all_content_change(target_tab); 388 } 389 } 390 if (index < 2 && num_of_tab > index) { 391 parent.find('.nextTab_next').slideDown('fast'); 392 parent.find('.nextTab_prev').slideUp('fast'); 393 } else if (num_of_tab === index) { 394 parent.find('.nextTab_next').slideUp('fast'); 395 parent.find('.nextTab_prev').slideDown('fast'); 396 } else { 397 parent.find('.nextTab_next').slideDown('fast'); 398 parent.find('.nextTab_prev').slideDown('fast'); 399 } 400 target_tabContent.slideDown(350); 401 tabsContent.children('[data-tabs-next].active').slideUp(350).removeClass('active').promise().done(function () { 402 target_tabContent.addClass('active').promise().done(function () { 403 wbtm_pageScrollTo(tabsContent); 404 parent.height('auto').promise().done(function () { 405 wbtm_loadBgImage(); 406 wbtm_sticky_management(); 407 wbtm_loaderRemove(parent); 408 }); 409 }); 410 }); 411 } 412 $(document).on('click', '.wbtm_style .wbtm_tab_next .nextTab_prev_link', function () { 413 let parent = $(this).closest('.wbtm_tab_next'); 414 if (parent.find('[data-tabs-target-next].active').length > 1) { 415 parent.find('.nextTab_prev').trigger('click'); 416 } 417 }); 418 $(document).on('click', '.wbtm_style .wbtm_tab_next .nextTab_next', function () { 419 let parent = $(this).closest('.wbtm_tab_next'); 420 let target = parent.find('.tabListsNext:first'); 421 let num_of_tab = target.children('[data-tabs-target-next].active').length + 1; 422 let targetTab = target.children('[data-tabs-target-next]:nth-child(' + num_of_tab + ')').data('tabs-target-next'); 423 active_next_tab(parent, targetTab); 424 }); 425 $(document).on('click', '.wbtm_style .wbtm_tab_next .nextTab_prev', function () { 426 let parent = $(this).closest('.wbtm_tab_next'); 427 let target = parent.find('.tabListsNext:first'); 428 let num_of_tab = target.children('[data-tabs-target-next].active').length - 1; 429 let targetTab = target.children('[data-tabs-target-next]:nth-child(' + num_of_tab + ')').data('tabs-target-next'); 430 active_next_tab(parent, targetTab); 431 }); 432 $(document).ready(function () { 433 $('.wbtm_style .wbtm_tabs').each(function () { 434 let tabLists = $(this).find('.tabLists:first'); 435 let activeTab = tabLists.find('[data-tabs-target].active'); 436 let targetTab = activeTab.length > 0 ? activeTab : tabLists.find('[data-tabs-target]').first(); 437 targetTab.trigger('click'); 438 }); 439 $('.wbtm_style .wbtm_tab_next').each(function () { 440 let parent = $(this); 441 if (parent.find('[data-tabs-target-next].active').length < 1) { 442 wbtm_loader(parent); 443 let tabLists = parent.find('.tabListsNext:first'); 444 let targetTab = tabLists.find('[data-tabs-target-next]').first().data('tabs-target-next') 445 active_next_tab(parent, targetTab); 446 } 447 }); 448 }); 449 $(document).on('click', '.wbtm_style [data-tabs-target]', function () { 450 if (!$(this).hasClass('active')) { 451 let tabsTarget = $(this).data('tabs-target'); 452 let parent = $(this).closest('.wbtm_tabs'); 453 parent.height(parent.height()); 454 let tabLists = $(this).closest('.tabLists'); 455 let tabsContent = parent.find('.tabsContent:first'); 456 tabLists.find('[data-tabs-target].active').each(function () { 457 $(this).removeClass('active').promise().done(function () { 458 wbtm_all_content_change($(this)) 459 }); 460 }); 461 $(this).addClass('active').promise().done(function () { 462 wbtm_all_content_change($(this)) 463 }); 464 tabsContent.children('[data-tabs="' + tabsTarget + '"]').slideDown(350); 465 tabsContent.children('[data-tabs].active').slideUp(350).removeClass('active').promise().done(function () { 466 tabsContent.children('[data-tabs="' + tabsTarget + '"]').addClass('active').promise().done(function () { 467 //wbtm_loaderRemove(tabsContent); 468 wbtm_loadBgImage(); 469 parent.height('auto'); 470 }); 471 }); 472 } 473 }); 474}(jQuery)); 475//======================================================================Collapse=================// 476(function ($) { 477 "use strict"; 478 $(document).on('click', '.wbtm_style [data-collapse-target]', function () { 479 let currentTarget = $(this); 480 let target_id = currentTarget.data('collapse-target'); 481 let close_id = currentTarget.data('close-target'); 482 let target = $('.wbtm_style [data-collapse="' + target_id + '"]'); 483 if (target_close(close_id, target_id) && collapse_close_inside(currentTarget) && target_collapse(target, currentTarget)) { 484 wbtm_all_content_change(currentTarget); 485 } 486 }); 487 $(document).on('change', '.wbtm_style select[data-collapse-target]', function () { 488 let currentTarget = $(this); 489 let value = currentTarget.val(); 490 currentTarget.find('option').each(function () { 491 if ($(this).attr('data-option-target-multi')) { 492 let target_ids = $(this).data('option-target-multi'); 493 target_ids = target_ids.toString().split(" "); 494 target_ids.forEach(function (target_id) { 495 let target = $('[data-collapse="' + target_id + '"]'); 496 target.slideUp(350).removeClass('mActive'); 497 }); 498 } else { 499 let target_id = $(this).data('option-target'); 500 let target = $('[data-collapse="' + target_id + '"]'); 501 target.slideUp('fast').removeClass('mActive'); 502 } 503 }).promise().done(function () { 504 currentTarget.find('option').each(function () { 505 let current_value = $(this).val(); 506 if (current_value === value) { 507 if ($(this).attr('data-option-target-multi')) { 508 let target_ids = $(this).data('option-target-multi'); 509 target_ids = target_ids.toString().split(" "); 510 target_ids.forEach(function (target_id) { 511 let target = $('[data-collapse="' + target_id + '"]'); 512 target.slideDown(350).removeClass('mActive'); 513 }); 514 } else { 515 let target_id = $(this).data('option-target'); 516 let target = $('[data-collapse="' + target_id + '"]'); 517 target.slideDown(350).removeClass('mActive'); 518 } 519 } 520 }); 521 }); 522 }); 523 function target_close(close_id, target_id) { 524 $('body').find('[data-close="' + close_id + '"]:not([data-collapse="' + target_id + '"])').slide
524Up(250); 525 return true; 526 } 527 function target_collapse(target, $this) { 528 if ($this.is('[type="radio"]')) { 529 target.slideDown(250); 530 } else { 531 target.each(function () { 532 $(this).slideToggle(250).toggleClass('mActive'); 533 }); 534 } 535 return true; 536 } 537 function collapse_close_inside(currentTarget) { 538 let parent_target_close = currentTarget.data('collapse-close-inside'); 539 if (parent_target_close) { 540 $(parent_target_close).find('[data-collapse]').each(function () { 541 if ($(this).hasClass('mActive')) { 542 let collapse_id = $(this).data('collapse'); 543 let target_collapse = $('[data-collapse-target="' + collapse_id + '"]'); 544 if (collapse_id !== currentTarget.data('collapse-target')) { 545 $(this).slideUp(250).removeClass('mActive'); 546 let clsName = target_collapse.data('add-class'); 547 if (clsName) { 548 target_collapse.removeClass(clsName); 549 } 550 wbtm_content_text_change(target_collapse); 551 wbtm_content_icon_change(target_collapse); 552 } 553 } 554 }) 555 } 556 return true; 557 } 558}(jQuery)); 559//=====================================================================Group Check box==========// 560(function ($) { 561 "use strict"; 562 $(document).on('click', '.wbtm_style .groupCheckBox .customCheckboxLabel', function () { 563 let parent = $(this).closest('.groupCheckBox'); 564 let value = ''; 565 let separator = ','; 566 parent.find(' input[type="checkbox"]').each(function () { 567 if ($(this).is(":checked")) { 568 let currentValue = $(this).attr('data-checked'); 569 value = value + (value ? separator : '') + currentValue; 570 } 571 }).promise().done(function () { 572 parent.find('input[type="hidden"]').val(value); 573 }); 574 }); 575 // radio 576 $(document).on('click', '.wbtm_style [data-radio]', function () { 577 let target = $(this).closest('label'); 578 let value = $(this).attr('data-radio'); 579 target.find('.customRadio').removeClass('active'); 580 $(this).addClass('active'); 581 target.find('input').val(value).trigger('change'); 582 }); 583 $(document).on('click', '.wbtm_style .groupRadioBox [data-group-radio]', function () { 584 let parent = $(this).closest('.groupRadioBox'); 585 let $this = $(this); 586 let value = $this.data('group-radio'); 587 parent.find('[data-group-radio]').each(function () { 588 $(this).removeClass('active'); 589 }).promise().done(function () { 590 $this.addClass('active'); 591 parent.find('input[type="text"]').val(value); 592 }); 593 }); 594 //Group radio like checkbox 595 $(document).on('click', '.wbtm_style .groupRadioCheck [data-radio-check]', function () { 596 //e.stopPropagation(); 597 let parent = $(this).closest('.groupRadioCheck'); 598 let $this = $(this); 599 if (!$this.hasClass('mpActive')) { 600 let value = $this.data('radio-check'); 601 parent.find('.mpActive[data-radio-check]').each(function () { 602 $(this).removeClass('mpActive'); 603 wbtm_all_content_change($(this)); 604 }).promise().done(function () { 605 $this.addClass('mpActive'); 606 wbtm_all_content_change($this); 607 parent.find('input[type="hidden"]').val(value).trigger('change'); 608 }); 609 } 610 }); 611}(jQuery)); 612//=======================================================validation ==============// 613function wbtm_check_required(input) { 614 if (input.val() !== '') { 615 input.removeClass('mpRequired'); 616 return true; 617 } else { 618 input.addClass('mpRequired'); 619 return false; 620 } 621} 622(function ($) { 623 "use strict"; 624 $(document).on('keyup change', '.wbtm_style .wbtm_number_validation', function () { 625 let n = $(this).val(); 626 $(this).val(n.replace(/\D/g, '')); 627 return true; 628 }); 629 $(document).on('keyup change', '.wbtm_style .wbtm_price_validation', function () { 630 let n = $(this).val(); 631 $(this).val(n.replace(/[^\d.]/g, '')); 632 return true; 633 }); 634 $(document).on('keyup change', '.wbtm_style .wbtm_id_validation', function () { 635 let n = $(this).val(); 636 $(this).val(n.replace(/[^\d_a-zA-Z]/g, '')); 637 return true; 638 });
639 $(document).on('keyup change', '.wbtm_style .wbtm_name_validation', function () { 640 let n = $(this).val(); 641 $(this).val(n.replace(/[@%'":;&_]/g, '')); 642 return true; 643 }); 644 $(document).on('keyup change', '.wbtm_style [required]', function () { 645 wbtm_check_required($(this)); 646 }); 647}(jQuery)); 648//==========================================================pagination==========// 649function wbtm_pagination_page_management(parent, pagination_page, total_item) { 650 let per_page_item = parseInt(parent.find('input[name="pagination_per_page"]').val()); 651 let total_active_page = Math.floor(total_item / per_page_item) + ((total_item % per_page_item) > 0 ? 1 : 0); 652 let page_limit_start = (pagination_page > 2) ? (pagination_page - 2) : 0; 653 let page_limit_end = (pagination_page > 2) ? (pagination_page + 2) : 4; 654 let limit_dif = total_active_page - pagination_page; 655 if (total_active_page > 5 && limit_dif < 3) { 656 page_limit_start = page_limit_start - ((limit_dif > 1) ? 1 : 2); 657 } 658 let total_page = parent.find('[data-pagination]').length; 659 for (let i = 0; i < total_page; i++) { 660 if (i < total_active_page && i >= page_limit_start && i <= page_limit_end) { 661 parent.find('[data-pagination="' + i + '"]').slideDown(200); 662 } else {
663 parent.find('[data-pagination="' + i + '"]').slideUp(200); 664 } 665 } 666 if (pagination_page > 0) { 667 parent.find('.page_prev').removeAttr('disabled'); 668 } else { 669 parent.find('.page_prev').prop('disabled', true); 670 } 671 if (pagination_page > 2 && total_active_page > 5) { 672 parent.find('.ellipse_left').slideDown(200); 673 } else { 674 parent.find('.ellipse_left').slideUp(200); 675 } 676 if (pagination_page < total_active_page - 3 && total_active_page > 5) { 677 parent.find('.ellipse_right').slideDown(200); 678 } else { 679 parent.find('.ellipse_right').slideUp(200); 680 } 681 if (pagination_page < total_active_page - 1) { 682 parent.find('.page_next').removeAttr('disabled'); 683 } else { 684 parent.find('.page_next').prop('disabled', true); 685 } 686 return true; 687} 688(function ($) { 689 "use strict"; 690 $(document).on('click', '.wbtm_style .pagination_area .page_prev', function (e) { 691 e.preventDefault(); 692 let parent = $(this).closest('.pagination_area'); 693 let page_no = parseInt(parent.find('.active_pagination').data('pagination')) - 1; 694 parent.find('[data-pagination="' + page_no + '"]').trigger('click'); 695 }); 696 $(document).on('click', '.wbtm_style .pagination_area .page_next', function (e) { 697 e.preventDefault(); 698 let parent = $(this).closest('.pagination_area'); 699 let page_no = parseInt(parent.find('.active_pagination').data('pagination')) + 1; 700 parent.find('[data-pagination="' + page_no + '"]').trigger('click'); 701 }); 702 // Handle page number clicks 703 $(document).on('click', '.wbtm_style .pagination_area [data-pagination]', function (e) { 704 e.preventDefault(); 705 if (!$(this).hasClass('active_pagination')) { 706 let parent = $(this).closest('.pagination_area'); 707 let main_parent = parent.closest('.wbtm_pagination_main_area'); 708 let page_no = parseInt($(this).data('pagination')); 709 let per_page_item = parseInt(parent.find('input[name="pagination_per_page"]').val()); 710 let total_item = parseInt(parent.find('input[name="mp_total_item"]').val()); 711 let pagination_style = parent.find('input[name="pagination_style"]').val(); 712 713 // Only handle if this is not Load More style 714 if (pagination_style !== 'load_more') { 715 // Hide all items first 716 main_parent.find('.wbtm_pagination_item').hide(); 717 718 // Show items for current page 719 let start_item = page_no * per_page_item; 720 let end_item = start_item + per_page_item; 721 let count = 0; 722 723 main_parent.find('.wbtm_pagination_item').each(function() { 724 if (count >= start_item && count < end_item) { 725 $(this).fadeIn(250); 726 } 727 count++; 728 }); 729 730 // Update active states 731 parent.find('.active_pagination').removeClass('active_pagination'); 732 $(this).addClass('active_pagination'); 733 734 // Update pagination UI 735 wbtm_pagination_page_management(parent, page_no, total_item); 736 737 // Scroll to first item if needed 738 load_more_scroll(main_parent, page_no); 739 740 // Load background images 741 if (typeof wbtm_loadBgImage === 'function') { 742 wbtm_loadBgImage(); 743 } 744 } 745 } 746 }); 747 //*************** Pagination Load More ***************// 748 $(document).on('click', '.wbtm_style .pagination_load_more', function () { 749 let pagination_page = parseInt($(this).attr('data-load-more')) + 1; 750 let main_parent = $(this).closest('div.wbtm_pagination_main_area'); 751 let pagination_area = $(this).closest('.pagination_area'); 752 let per_page_item = parseInt(pagination_area.find('input[name="pagination_per_page"]').val()); 753 let count = 0; 754 let end_item = (pagination_page + 1) * per_page_item; 755 756 $(this).attr('data-load-more', pagination_page); 757 758 main_parent.find('.wbtm_pagination_item').each(function () { 759 if (count < end_item) { 760 $(this).slideDown(250); 761 } 762 count++; 763 }); 764 765 // Check if all items are visible and disable button if so 766 setTimeout(function() { 767 lode_more_init(main_parent); 768 if (typeof wbtm_loadBgImage === 'function') { 769 wbtm_loadBgImage(); 770 } 771 }, 300); 772 }); 773 function lode_more_init(main_parent) { 774 if (main_parent.find('.wbtm_pagination_item:hidden').length === 0) { 775 main_parent.find('[data-load-more]').attr('disabled', 'disabled'); 776 } else { 777 main_parent.find('[data-load-more]').removeAttr('disabled'); 778 } 779 } 780 function load_more_scroll(parent, pagination_page) { 781 let per_page_item = parseInt(parent.find('input[name="pagination_per_page"]').val()); 782 let start_item = pagination_page > 0 ? pagination_page * per_page_item : 0; 783 let target = parent.find('.wbtm_pagination_item:nth-child(' + (start_item + 1) + ')'); 784 wbtm_pageScrollTo(target); 785 } 786}(jQuery)); 787//==============================================================Modal / Popup==========// 788(function ($) { 789 "use strict"; 790 $(document).on('click', '.wbtm_style [data-target-popup]', function () { 791 let target = $(this).attr('data-active-popup', '').data('target-popup'); 792 $('body').addClass('noScroll').find('[data-popup="' + target + '"]').addClass('in').promise().done(function () { 793 wbtm_loadBgImage(); 794 return true; 795 }); 796 }); 797 $(document).on('click', 'div.wbtm_popup .popupClose', function () { 798 $(this).closest('[data-popup]').removeClass('in'); 799 $('body').removeClass('noScroll').find('[data-active-popup]').removeAttr('data-active-popup'); 800 return true; 801 }); 802}(jQuery)); 803//==============================================================Slider=================// 804(function ($) { 805 "use strict"; 806 //=================initial call============// 807 $('.wbtm_style .superSlider').each(function () { 808 sliderItemActive($(this), 1); 809 }); 810 //==============Slider===================//
811 $(document).on('click', '.wbtm_style .superSlider [data-slide-target]', function () { 812 if (!$(this).hasClass('activeSlide')) { 813 let activeItem = $(this).data('slide-target'); 814 let parent = $(this).closest('.superSlider'); 815 sliderItemActive(parent, activeItem); 816 parent.find('[data-slide-target]').removeClass('activeSlide'); 817 $(this).addClass('activeSlide'); 818 } 819 }); 820 $(document).on('click', '.wbtm_style .superSlider .iconIndicator', function () { 821 let parent = $(this).closest('.superSlider'); 822 let activeItem = parseInt(parent.find('.sliderAllItem').first().find('.sliderItem.activeSlide').data('slide-index')); 823 if ($(this).hasClass('nextItem')) { 824 ++activeItem; 825 } else { 826 --activeItem; 827 } 828 sliderItemActive(parent, activeItem); 829 }); 830 function sliderItemActive(parent, activeItem) { 831 let itemLength = parent.find('.sliderAllItem').first().find('[data-slide-index]').length; 832 let currentItem = getSliderItem(parent, activeItem); 833 let activeCurrent = parseInt(parent.find('.sliderAllItem').first().find('.sliderItem.activeSlide').data('slide-index')); 834 let i = 1; 835 for (i; i <= itemLength; i++) { 836 let target = parent.find('.sliderAllItem').first().find('[data-slide-index="' + i + '"]').first(); 837 if (i < currentItem && currentItem !== 1) { 838 sliderClassControl(target, currentItem, activeCurrent, 'prevSlider', 'nextSlider'); 839 } 840 if (i === currentItem) { 841 parent.find('.sliderAllItem').first().find('[data-slide-index="' + currentItem + '"]').removeClass('prevSlider nextSlider').addClass('activeSlide'); 842 } 843 if (i > currentItem && currentItem !== itemLength) { 844 sliderClassControl(target, currentItem, activeCurrent, 'nextSlider', 'prevSlider'); 845 } 846 if (i === itemLength && itemLength > 1) { 847 if (currentItem === 1) { 848 target = parent.find('.sliderAllItem').first().find('[data-slide-index="' + itemLength + '"]'); 849 sliderClassControl(target, currentItem, activeCurrent, 'prevSlider', 'nextSlider'); 850 } 851 if (currentItem === itemLength) { 852 target = parent.find('.sliderAllItem').first().find('[data-slide-index="1"]'); 853 sliderClassControl(target, currentItem, activeCurrent, 'nextSlider', 'prevSlider'); 854 } 855 } 856 } 857 } 858 function sliderClassControl(target, currentItem, activeCurrent, add_class, remove_class) { 859 if (target.hasClass('activeSlide')) { 860 if (currentItem > activeCurrent) { 861 target.removeClass('activeSlide').addClass(add_class); 862 } else { 863 target.removeClass('activeSlide').removeClass(remove_class).addClass(add_class); 864 } 865 } else if (target.hasClass(remove_class)) { 866 target.removeClass(remove_class).delay(600).addClass(add_class); 867 } else { 868 if (!target.hasClass(add_class)) { 869 target.addClass(add_class); 870 } 871 } 872 } 873 function getSliderItem(parent, activeItem) { 874 let itemLength = parent.find('.sliderAllItem').first().find('[data-slide-index]').length; 875 activeItem = activeItem < 1 ? itemLength : activeItem; 876 activeItem = activeItem > itemLength ? 1 : activeItem; 877 return activeItem; 878 } 879 //popup 880 $(document).on('click', '.wbtm_style .superSlider [data-target-popup]', function () { 881 let target = $(this).data('target-popup'); 882 let activeItem = $(this).data('slide-index'); 883 $('body').addClass('noScroll').find('[data-popup="' + target + '"]').addClass('in').promise().done(function () { 884 sliderItemActive($(this), activeItem); 885 wbtm_loadBgImage(); 886 }); 887 }); 888 $(document).on('click', '.wbtm_style .superSlider .popupClose', function () { 889 $(this).closest('[data-popup]').removeClass('in'); 890 $('body').removeClass('noScroll'); 891 }); 892}(jQuery)); 893//======================================================================Outer Close==========// 894(function ($) { 895 "use strict"; 896 $(document).click(function (e) { 897 let target = $(e.target); 898 let popup = target.closest('[data-popup]'); 899 if (popup.length > 0) { 900 let hLength = target.closest('.popupHeader').length; 901 let bLength = target.closest('.popupBody').length; 902 let fLength = target.closest('.popupFooter').length; 903 if (hLength === 0 && bLength === 0 && fLength === 0) { 904 popup.find('.popupClose').trigger('click'); 905 } 906 } 907 let wbtm_input_select_list = target.closest('.wbtm_input_select'); 908 if (wbtm_input_select_list.length === 0) { 909 $('body').find('.wbtm_input_select_list').slideUp(250); 910 } 911 }); 912}(jQuery)); 913 914// --- Pagination Fix: Always re-initialize pagination after rendering --- 915function wbtm_init_pagination_fix() { 916 jQuery('.wbtm_pagination_main_area').each(function() { 917 var main_parent = jQuery(this); 918 var parent = main_parent.find('.pagination_area'); 919 920 if (parent.length > 0) { 921 var page = parseInt(parent.find('.active_pagination').data('pagination')) || 0; 922 var total = parseInt(parent.find('input[name="mp_total_item"]').val()) || 0; 923 var per_page = parseInt(parent.find('input[name="pagination_per_page"]').val()) || 9; 924 var pagination_style = parent.find('input[name="pagination_style"]').val() || 'load_more'; 925 926 // Initialize pagination display based on style 927 if (total > per_page) { 928 var count = 0; 929 main_parent.find('.wbtm_pagination_item').each(function() { 930 if (pagination_style === 'load_more') { 931 // For Load More: Hide items beyond first page initially 932 if (count >= per_page) { 933 jQuery(this).hide(); 934 } 935 } else { 936 // For page numbers: Hide items beyond first page initially 937 if (count >= per_page) { 938 jQuery(this).hide(); 939 } 940 } 941 count++; 942 }); 943 944 // Initialize Load More button if style is load_more 945 if (pagination_style === 'load_more') { 946 lode_more_init(main_parent); 947 } 948 } 949 950 // Only run page management for numbered pagination 951 if (pagination_style !== 'load_more') { 952 wbtm_pagination_page_management(parent, page, total); 953 } 954 } 955 }); 956} 957 958// Run on page load 959jQuery(document).ready(function() { 960 wbtm_init_pagination_fix(); 961 962 // Add delay to ensure all elements are loaded 963 setTimeout(function() { 964 wbtm_force_pagination_style_fix(); 965 }, 500); 966}); 967 968// Also run on window load as backup 969jQuery(window).on('load', function() { 970 setTimeout(function() { 971 wbtm_force_pagination_style_fix(); 972 }, 1000); 973}); 974 975// Force fix pagination style display 976function wbtm_force_pagination_style_fix() { 977 jQuery('.wbtm_pagination_main_area').each(function() { 978 var main_parent = jQuery(this); 979 var pagination_areas = main_parent.find('.pagination_area'); 980 981 pagination_areas.each(function(index) { 982 var pagination_area = jQuery(this); 983 var style = pagination_area.find('input[name="pagination_style"]').val() || 'load_more'; 984 985 if (style === 'load_more') { 986 // Hide page numbers, show load more 987 pagination_area.find('.buttonGroup').hide(); 988 pagination_area.find('.pagination_load_more').show(); 989 990 // Re-bind Load More event 991 pagination_area.find('.pagination_load_more').off('click').on('click', function(e) { 992 e.preventDefault(); 993 wbtm_handle_load_more(jQuery(this)); 994 }); 995 } else { 996 // Hide load more, show page numbers 997 pagination_area.find('.pagination_load_more').hide(); 998 pagination_area.find('.buttonGroup').show(); 999 } 1000 1001 // Add style class for CSS targeting 1002 pagination_area.addClass('wbtm-style-' + style); 1003 }); 1004 1005 // If there are multiple pagination areas, hide all but the first 1006 if (pagination_areas.length > 1) { 1007 pagination_areas.not(':first').hide(); 1008 } 1009 }); 1010} 1011 1012// Handle Load More functionality 1013function wbtm_handle_load_more(button) { 1014 let pagination_page = parseInt(button.attr('data-load-more')) + 1; 1015 let main_parent = button.closest('.wbtm_pagination_main_area'); 1016 let pagination_area = button.closest('.pagination_area'); 1017 let per_page_item = parseInt(pagination_area.find('input[name="pagination_per_page"]').val()) || 3; 1018 let total_items = parseInt(pagination_area.find('input[name="mp_total_item"]').val()) || 0; 1019 1020 button.attr('data-load-more', pagination_page); 1021 1022 // Calculate which items to show 1023 let start_item = 0; 1024 let end_item = (pagination_page + 1) * per_page_item;
1025 let count = 0; 1026 1027 main_parent.find('.wbtm_pagination_item').each(function() { 1028 if (count < end_item) { 1029 jQuery(this).slideDown(250); 1030 } 1031 count++; 1032 }); 1033 1034 // Check if we should disable the button 1035 setTimeout(function() { 1036 let hidden_items = main_parent.find('.wbtm_pagination_item:hidden'); 1037 if (hidden_items.length === 0) { 1038 button.attr('disabled', 'disabled'); 1039 } 1040 }, 300); 1041} 1042 1043// Run after AJAX loads passenger list (you may need to adjust selector/event for your use case) 1044jQuery(document).ajaxComplete(function(event, xhr, settings) { 1045 // Only re-init if passenger list or pagination is updated 1046 if (xhr.responseText && xhr.responseText.indexOf('pagination_area') !== -1) { 1047 wbtm_init_pagination_fix(); 1048 } 1049}); 1050// --- End Pagination Fix ---
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.