1(function ($, app) { 2 $(document).ready(function () { 3 app.WooPro = function () { 4 app.WooProFrontendEvents(); 5 }; 6 7 app.WooProFrontendEvents = function () { 8 //Click on multy add products button 9 $('.stAddMultyButton').on('click', function (e) { 10 e.preventDefault(); 11 12 var _this = $(this), 13 wrapper = _this.closest('.supsystic-tables-wrap'), 14 rows = wrapper.find('.stMultiAddCheck'), 15 selectedProduct = [], 16 addonData = wrapper.find('.supsystic-tables-addon'), 17 hideViewCart = addonData.length && addonData.attr('data-view-cart-hide') == 'on'; 18 19 rows.each(function () { 20 var checkbox = $(this).find('.stAddMulty'), 21 pushObj = {}, 22 variation = {}; 23 checkbox 24 .closest('td') 25 .find('.stVarAttribute') 26 .each(function () { 27 variation[$(this).attr('data-attribute')] = $(this).val(); 28 }); 29 30 pushObj.id = checkbox.val(); 31 pushObj.varId = checkbox.attr('data-variation_id'); 32 pushObj.quantity = checkbox.attr('data-quantity'); 33 pushObj.variation = variation; 34 selectedProduct.push(pushObj); 35 }); 36 37 app 38 .request( 39 { 40 module: 'woocommerce', 41 action: 'productsAddToCart', 42 nonce: typeof DTGS_NONCE !== 'undefined' ? DTGS_NONCE : DTGS_NONCE_FRONTEND, 43 }, 44 { 45 selectedProducts: selectedProduct, 46 } 47 ) 48 .done(function (res) { 49 console.log(res); 50 $(document.body).trigger('wc_fragment_refresh'); 51 52 rows.each(function () { 53 var _this = $(this); 54 _this.removeClass('.stMultiAddCheck'); 55 _this.find('.quantity .qty').val('1').trigger('change'); 56 _this.find('.stAddMulty').prop('checked', false); 57 if (!hideViewCart) { 58 _this.find('.added_to_cart').removeClass('stHidden'); 59 } 60 }); 61 var message = res.message, 62 errors = res.errors; 63 $.sNotify({ 64 icon: errors ? false : 'fa fa-check', 65 content: '<span>' + message + '</span>', 66 delay: errors ? 5000 : 1500, 67 }); 68 }) 69 .fail(function (error) { 70 console.log(error); 71 }); 72 return false; 73 }); 74 75 //Click on add product button 76 $('body').on('click', '.stAddToCart', function (e) { 77 e.preventDefault(); 78 var _this = $(this), 79 wrapper = _this.closest('.stAddToCartWrapper'), 80 addonData = _this.closest('.supsystic-tables-wrap').find('.supsystic-tables-addon'), 81 hideViewCart = addonData.length && addonData.attr('data-view-cart-hide') == 'on', 82 selectedProduct = [], 83 pushObj = {}, 84 variation = {}; 85 _this 86 .closest('td') 87 .find('.stVarAttribute') 88 .each(function () { 89 variation[$(this).attr('data-attribute')] = $(this).val(); 90 }); 91 92 pushObj.id = _this.attr('data-product_id'); 93 pushObj.varId = _this.attr('data-variation_id'); 94 pushObj.quantity = _this.attr('data-quantity'); 95 pushObj.variation = variation; 96 selectedProduct.push(pushObj); 97 98 app 99 .request( 100 { 101 module: 'woocommerce', 102 action: 'productsAddToCart', 103 nonce: typeof DTGS_NONCE !== 'undefined' ? DTGS_NONCE : DTGS_NONCE_FRONTEND, 104 }, 105 { 106 selectedProducts: selectedProduct, 107 } 108 ) 109 .done(function (res) { 110 $(document.body).trigger('wc_fragment_refresh'); 111 if (!hideViewCart) { 112 wrapper.find('.added_to_cart').removeClass('stHidden'); 113 } 114 115 wrapper.find('.quantity .qty').val('1').trigger('change'); 116 wrapper.find('.stAddMulty').prop('checked', false); 117 118 var message = res.message, 119 errors = res.errors; 120 $.sNotify({ 121 icon: errors ? false : 'fa fa-check', 122 content: '<span>' + message + '</span>', 123 delay: errors ? 5000 : 1500, 124 }); 125 }) 126 .fail(function (error) { 127 console.log(error); 128 }); 129 return false; 130 }); 131 132 //Change multy checkbox event 133 $('.supsystic-tables-wrap').on('change', '.stAddMulty', function () { 134 var checkbox = $(this), 135 row = checkbox.closest('tr'); 136 if (row.hasClass('child')) { 137 row = row.prev(); 138 } 139 if (checkbox.is(':checked')) { 140 row.addClass('stMultiAddCheck'); 141 } else { 142 row.removeClass('stMultiAddCheck'); 143 } 144 }); 145 146 //change quantity input event 147 $('.supsystic-tables-wrap').on('change', '.quantity .qty', function () { 148 var qtyInput = $(this), 149 wrapper = qtyInput.closest('.stAddToCartWrapper'), 150 row = qtyInput.closest('tr'); 151 if (row.hasClass('child')) { 152 row = row.prev(); 153 var wrapperMain = row.find('td.add_to_cart'); 154 wrapperMain.find('.stAddToCartButWrapp .stAddToCart').attr('data-quantity', qtyInput.val()); 155 wrapperMain.find('.qty').val(qtyInput.val()); 156 wrapperMain.find('.stAddMulty').attr('data-quantity', qtyInput.val()); 157 } 158 wrapper.find('.stAddToCartButWrapp .stAddToCart').attr('data-quantity', qtyInput.val()); 159 wrapper.find('.stAddMulty').attr('data-quantity', qtyInput.val()); 160 }); 161 162 $('.supsystic-tables-wrap').on('change', '.stVarAttribute', function () { 163 var select = $(this), 164 wrapper = select.closest('.stVarAttributes'), 165 variations = JSON.parse(wrapper.attr('data-variations')), 166 td = select.closest('td'), 167 curAttr = select.attr('data-attribute'), 168 curValue = select.val(), 169 otherAttrs = wrapper.find('select:not([data-attribute="' + curAttr + '"])'), 170 multy = td.closest('tr').find('.stAddMulty'), 171 attributes = []; 172 173 otherAttrs.each(function () { 174 var current = $(this); 175 attributes.push({ name: current.attr('data-attribute'), value: current.val() }); 176 current.find('option:not([value=""])').css('display', 'none'); 177 }); 178 179 td.find('.stVarPrice').addClass('stHidden'); 180 td.find('.stAddToCart').prop('disabled', true).attr('data-variation_id', 0); 181 multy.prop('disabled', true).attr('data-variation_id', 0); 182 var attrLen = attributes.length, 183 found = false; 184 for (id in variations) { 185 var attrs = variations[id],
186 match = !(curAttr in attrs) || attrs[curAttr] == '' || attrs[curAttr] == curValue; 187 if (match || curValue == '') { 188 for (var i = 0; i < attrLen; i++) { 189 var name = attributes[i]['name'], 190 value = attributes[i]['value']; 191 if (name in attrs) { 192 wrapper.find('select[data-attribute="' + name + '"] option' + (attrs[name] == '' ? '' : '[value="' + attrs[name] + '"]')).css('display', 'block'); 193 if (attrs[name] != '' && attrs[name] != value) { 194 match = false; 195 } 196 } 197 } 198 if (!found && match) { 199 td.find('.stVarPrice[data-variation_id="' + id + '"]').removeClass('stHidden'); 200 td.find('.stAddToCart').prop('disabled', false).attr('data-variation_id', id); 201 multy.prop('disabled', false).attr('data-variation_id', id); 202 found = true; 203 } 204 } 205 } 206 if (multy.length > 0 && multy.prop('disabled')) { 207 multy.prop('checked', false); 208 } 209 otherAttrs.each(function () { 210 var current = $(this); 211 if (current.find('option:selected').css('display') == 'none') { 212 current.val(''); 213 } 214 }); 215 }); 216 }; 217 218 app.WooProExportPrepare = function ($table, exportTable, params) { 219 var addonData = $table.closest('.supsystic-tables-wrap').find('.supsystic-tables-addon'); 220 if (addonData.length && addonData.attr('data-woocommerce-table') === 'on') { 221 exportTable.find('.stbWooExportToggle').remove(); 222 exportTable.find('.stbWooColumnsToggle').remove(); 223 exportTable.find('.stbWooCategoryFilter').remove(); 224 exportTable.find('.stbWooFilterToggle').remove(); 225 exportTable.find('.stbWooFilterWrapper').remove(); 226 exportTable.find('.stbResetWooFilters').remove(); 227 exportTable.find('.stAddMultyButton').remove(); 228 exportTable.find('.stViewCheckoutButton').remove(); 229 230 var buyTds = exportTable.find('.stAddToCartWrapper').closest('td'); 231 if (buyTds.length) { 232 var numColumn = buyTds.eq(0).attr('data-x'); 233 buyTds.remove(); 234 exportTable.find('th[data-x="' + numColumn + '"]').remove(); 235 } 236 exportTable.css('font-size', '80%'); 237 exportTable.find('a').each(function () { 238 $(this).replaceWith($(this).text()); 239 }); 240 exportTable.find('.screen-reader-text').remove(); 241 exportTable.find('.woocommerce-Price-currencySymbol[aria-hidden="true"]').removeAttr('aria-hidden'); 242 exportTable.find('del').css({ 243 'text-decoration': 'line-through', 244 opacity: '1', 245 }); 246 exportTable.find('ins').css({ 247 'text-decoration': 'none', 248 'font-weight': '700', 249 background: 'transparent', 250 }); 251 exportTable.find('.woocommerce-Price-amount').css('white-space', 'nowrap').closest('td').css('white-space', 'nowrap'); 252 exportTable.find('td, th').css('word-break', 'normal'); 253 if (params['type'] == 'pdf') { 254 exportTable.find('.stDateWrapp').css('white-space', 'nowrap'); 255 exportTable 256 .find('.woocommerce-Price-amount') 257 .closest('td') 258 .each(function () { 259 var td = $(this), 260 ins = td.find('ins'); 261 if (ins.length) { 262 ins.replaceWith(ins.html()); 263 } 264 if (td.find('.woocommerce-Price-amount').length > 1) { 265 td.html('<span class="woocommerce-Price-amount">' + td.html() + '<span>'); 266 } 267 }); 268 } 269 } 270 return exportTable; 271 }; 272 273 app.WooPro(); 274 }); 275 276 app.setTableAddSearching = function (table) { 277 return table.closest('.supsystic-tables-wrap').find('.stbWooCategoryFilter, .stbWooFilterWrapper select, .stbWooFilterWrapper .stWooPriceInput, .stbWooFilterWrapper .stWooPriceRange').length > 0; 278 }; 279 280 function isWooServerSideTable(table) { 281 var apiSettings = table.api().settings()[0]; 282 283 return table.attr('data-server-side-processing') === 'on' || (apiSettings && apiSettings.oFeatures && apiSettings.oFeatures.bServerSide); 284 } 285 286 function getWooServerSideFilters(table) { 287 var filters = [], 288 tableWrapper = table.closest('.supsystic-tables-wrap'); 289 290 var categorySelection = getWooCategoryFilterSelection(tableWrapper); 291 if (categorySelection.total > 0 && categorySelection.selected.length !== categorySelection.total) { 292 filters.push({ 293 type: 'category_list', 294 values: categorySelection.selected, 295 }); 296 } 297 298 tableWrapper.find('.stbWooFilterWrapper select').each(function () { 299 var select = $(this), 300 filterType = select.attr('data-filter-type') || '', 301 taxonomy = select.attr('data-taxonomy') || '', 302 value = select.val(), 303 keys = select.attr('data-column-keys'), 304 columns = typeof keys !== 'undefined' ? keys.split(',') : []; 305 306 if (value && filterType === 'stock_status') { 307 filters.push({ 308 type: 'stock_status', 309 value: value, 310 }); 311 return; 312 } 313 314 if (value && filterType === 'attribute_term') { 315 filters.push({ 316 type: 'attribute_term', 317 taxonomy: taxonomy, 318 value: value, 319 }); 320 return; 321 } 322 323 columns = $.map(columns, function (columnId) { 324 columnId = parseInt($.trim(columnId), 10); 325 326 return isNaN(columnId) ? null : columnId; 327 }); 328 329 if (value && columns.length) { 330 filters.push({ 331 columns: columns, 332 value: value, 333 }); 334 } 335 }); 336 337 var priceBounds = getWooSharedPriceState(tableWrapper); 338 if (priceBounds.min !== null || priceBounds.max !== null) { 339 filters.push({ 340 type: 'price_range', 341 min: priceBounds.min !== null ? priceBounds.min : '', 342 max: priceBounds.max !== null ? priceBounds.max : '', 343 }); 344 } 345 346 return filters; 347 } 348 349 function getWooCategoryFilterSelection(tableWrapper) { 350 var filterWrap = tableWrapper.find('.stbWooCategoryFilter').first(), 351 items = filterWrap.find('.stbWooCategoryFilterItem'), 352 selected = []; 353 354 items.each(function () { 355 var item = $(this), 356 checkbox = item.find('.stbWooCategoryFilterCheckbox'), 357 categoryId = parseInt(item.attr('data-category-id'), 10); 358 359 if (!isNaN(categoryId) && checkbox.is(':checked')) { 360 selected.push(categoryId); 361 } 362 });
363 364 return { 365 total: items.length, 366 selected: selected, 367 }; 368 } 369 370 function syncWooCategoryFilterItemState(item, checked) { 371 item.toggleClass('is-active', !!checked); 372 item.attr('aria-pressed', checked ? 'true' : 'false'); 373 item.find('.stbWooCategoryFilterCheckbox').prop('checked', !!checked); 374 } 375 376 function parseWooPriceValue(value) { 377 if (value === null || typeof value === 'undefined') { 378 return null; 379 } 380 381 value = $.trim(String(value)).replace(',', '.'); 382 if (value === '') { 383 return null; 384 } 385 386 value = parseFloat(value); 387 return isNaN(value) ? null : value; 388 } 389 390 function roundWooPriceValue(value, step) { 391 if (value === null) { 392 return null; 393 } 394 395 var precision = step && String(step).indexOf('.') !== -1 ? String(step).split('.')[1].length : 0; 396 return parseFloat(Number(value).toFixed(precision)); 397 } 398 399 function normalizeWooPriceBounds(minValue, maxValue, absoluteMin, absoluteMax) { 400 if (minValue !== null && absoluteMin !== null) { 401 minValue = Math.max(minValue, absoluteMin); 402 } 403 if (maxValue !== null && absoluteMax !== null) { 404 maxValue = Math.min(maxValue, absoluteMax); 405 } 406 407 if (minValue !== null && maxValue !== null && minValue > maxValue) { 408 var swap = minValue; 409 minValue = maxValue; 410 maxValue = swap; 411 } 412 413 return { 414 min: minValue, 415 max: maxValue, 416 }; 417 } 418 419 function compactWooPriceBounds(state, absoluteMin, absoluteMax) { 420 state = state || { 421 min: null, 422 max: null, 423 }; 424 425 if (absoluteMin !== null && state.min !== null && state.min === absoluteMin) { 426 state.min = null; 427 } 428 if (absoluteMax !== null && state.max !== null && state.max === absoluteMax) { 429 state.max = null; 430 } 431 432 return state; 433 } 434 435 function getWooPriceFilterState(priceFilter) { 436 var absoluteMin = parseWooPriceValue(priceFilter.attr('data-min')), 437 absoluteMax = parseWooPriceValue(priceFilter.attr('data-max')), 438 inputMin = priceFilter.find('.stWooPriceInputMin'), 439 inputMax = priceFilter.find('.stWooPriceInputMax'), 440 rangeMin = priceFilter.find('.stWooPriceRangeMin'), 441 rangeMax = priceFilter.find('.stWooPriceRangeMax'), 442 minValue = inputMin.length ? parseWooPriceValue(inputMin.val()) : null, 443 maxValue = inputMax.length ? parseWooPriceValue(inputMax.val()) : null; 444 445 if (minValue === null && rangeMin.length) { 446 minValue = parseWooPriceValue(rangeMin.val()); 447 } 448 if (maxValue === null && rangeMax.length) { 449 maxValue = parseWooPriceValue(rangeMax.val()); 450 } 451 452 return compactWooPriceBounds( 453 normalizeWooPriceBounds(minValue, maxValue, absoluteMin, absoluteMax), 454 absoluteMin, 455 absoluteMax 456 ); 457 } 458 459 function updateWooPriceSliderVisual(priceFilter, minValue, maxValue) { 460 var absoluteMin = parseWooPriceValue(priceFilter.attr('data-min')), 461 absoluteMax = parseWooPriceValue(priceFilter.attr('data-max')), 462 range = absoluteMax !== null && absoluteMin !== null ? absoluteMax - absoluteMin : 0, 463 startPercent = 0, 464 endPercent = 100; 465 466 if (range > 0 && minValue !== null && maxValue !== null) { 467 startPercent = ((minValue - absoluteMin) / range) * 100; 468 endPercent = ((maxValue - absoluteMin) / range) * 100; 469 } 470 471 priceFilter.css({ 472 '--stb-price-start': startPercent + '%', 473 '--stb-price-end': endPercent + '%', 474 }); 475 } 476 477 function syncWooPriceFilterUi(priceFilter, state) { 478 var step = priceFilter.attr('data-step') || '1', 479 rangeMin = priceFilter.find('.stWooPriceRangeMin'), 480 rangeMax = priceFilter.find('.stWooPriceRangeMax'), 481 inputMin = priceFilter.find('.stWooPriceInputMin'), 482 inputMax = priceFilter.find('.stWooPriceInputMax'), 483 absoluteMin = parseWooPriceValue(priceFilter.attr('data-min')), 484 absoluteMax = parseWooPriceValue(priceFilter.attr('data-max')), 485 minValue = state.min !== null ? state.min : absoluteMin, 486 maxValue = state.max !== null ? state.max : absoluteMax; 487
488 minValue = roundWooPriceValue(minValue, step); 489 maxValue = roundWooPriceValue(maxValue, step); 490 491 if (rangeMin.length) { 492 rangeMin.val(minValue); 493 } 494 if (rangeMax.length) { 495 rangeMax.val(maxValue); 496 } 497 if (inputMin.length) { 498 inputMin.val(state.min === null ? '' : minValue); 499 } 500 if (inputMax.length) { 501 inputMax.val(state.max === null ? '' : maxValue); 502 } 503 504 updateWooPriceSliderVisual(priceFilter, minValue, maxValue); 505 } 506 507 function getWooPriceColumnSearchState(priceSearch, absoluteMin, absoluteMax) { 508 if (!priceSearch || !priceSearch.length) { 509 return { 510 min: null, 511 max: null, 512 }; 513 } 514 515 absoluteMin = absoluteMin !== null && typeof absoluteMin !== 'undefined' ? absoluteMin : null; 516 absoluteMax = absoluteMax !== null && typeof absoluteMax !== 'undefined' ? absoluteMax : null; 517 518 return compactWooPriceBounds( 519 normalizeWooPriceBounds( 520 parseWooPriceValue(priceSearch.find('.stWooColumnPriceSearchMin').val()), 521 parseWooPriceValue(priceSearch.find('.stWooColumnPriceSearchMax').val()), 522 absoluteMin, 523 absoluteMax 524 ), 525 absoluteMin, 526 absoluteMax 527 ); 528 } 529 530 function syncWooPriceColumnSearchUi(priceSearch, state) { 531 if (!priceSearch || !priceSearch.length) { 532 return; 533 } 534 535 priceSearch.find('.stWooColumnPriceSearchMin').val(state.min === null ? '' : state.min); 536 priceSearch.find('.stWooColumnPriceSearchMax').val(state.max === null ? '' : state.max); 537 } 538 539 function storeWooPriceFilterState(tableWrapper, state) { 540 tableWrapper.data('dtgWooPriceFilterState', { 541 min: state && state.min !== null ? state.min : null, 542 max: state && state.max !== null ? state.max : null, 543 }); 544 } 545 546 function getWooSharedPriceState(tableWrapper) { 547 var priceFilter = tableWrapper.find('.stWooFilterPrice[data-filter-type="price_range"]').first(), 548 priceSearch = tableWrapper.find('.stWooColumnPriceSearch[data-filter-type="price_range"]').first(), 549 absoluteMin = priceFilter.length ? parseWooPriceValue(priceFilter.attr('data-min')) : null, 550 absoluteMax = priceFilter.length ? parseWooPriceValue(priceFilter.attr('data-max')) : null, 551 filterState = priceFilter.length ? getWooPriceFilterState(priceFilter) : null, 552 searchState = priceSearch.length ? getWooPriceColumnSearchState(priceSearch, absoluteMin, absoluteMax) : null, 553 storedFilterState = tableWrapper.data('dtgWooPriceFilterState') || null, 554 storedSearchState = tableWrapper.data('dtgWooPriceColumnSearchState') || null, 555 state = null; 556 557 if (filterState && (filterState.min !== null || filterState.max !== null)) { 558 state = filterState; 559 } else if (searchState && (searchState.min !== null || searchState.max !== null)) { 560 state = searchState; 561 } else if (storedFilterState && (storedFilterState.min !== null || storedFilterState.max !== null)) { 562 state = compactWooPriceBounds(normalizeWooPriceBounds(storedFilterState.min, storedFilterState.max, absoluteMin, absoluteMax), absoluteMin, absoluteMax); 563 } else if (storedSearchState && (storedSearchState.min !== null || storedSearchState.max !== null)) { 564 state = compactWooPriceBounds(normalizeWooPriceBounds(storedSearchState.min, storedSearchState.max, absoluteMin, absoluteMax), absoluteMin, absoluteMax); 565 } 566 567 return state || { 568 min: null, 569 max: null, 570 }; 571 } 572 573 function syncWooSharedPriceState(tableWrapper, state) { 574 var priceFilter = tableWrapper.find('.stWooFilterPrice[data-filter-type="price_range"]').first(), 575 priceSearch = tableWrapper.find('.stWooColumnPriceSearch[data-filter-type="price_range"]').first(), 576 absoluteMin = priceFilter.length ? parseWooPriceValue(priceFilter.attr('data-min')) : null, 577 absoluteMax = priceFilter.length ? parseWooPriceValue(priceFilter.attr('data-max')) : null, 578 normalizedState = compactWooPriceBounds( 579 normalizeWooPriceBounds( 580 state && typeof state.min !== 'undefined' ? state.min : null, 581 state && typeof state.max !== 'undefined' ? state.max : null, 582 absoluteMin, 583 absoluteMax 584 ), 585 absoluteMin, 586 absoluteMax 587 ); 588 589 if (priceFilter.length) { 590 syncWooPriceFilterUi(priceFilter, normalizedState); 591 } 592 if (priceSearch.length) { 593 syncWooPriceColumnSearchUi(priceSearch, normalizedState); 594 } 595 596 storeWooPriceFilterState(tableWrapper, normalizedState); 597 storeWooPriceColumnSearchState(tableWrapper, normalizedState); 598 599 return normalizedState; 600 } 601 602 function storeWooPriceColumnSearchState(tableWrapper, state) { 603 tableWrapper.data('dtgWooPriceColumnSearchState', { 604 min: state && state.min !== null ? state.min : null, 605 max: state && state.max !== null ? state.max : null, 606 });
607 } 608 609 function getWooAddon(tableWrapper) { 610 return tableWrapper.find('.supsystic-tables-addon[data-woocommerce-table="on"]').first(); 611 } 612 613 function getWooAddonColumnsConfig(tableWrapper) { 614 var addon = getWooAddon(tableWrapper), 615 config = addon.attr('data-woo-columns-config'); 616 617 if (!config) { 618 return []; 619 } 620 621 try { 622 config = JSON.parse(config); 623 } catch (e) { 624 config = []; 625 } 626 627 return $.isArray(config) ? config : []; 628 } 629 630 function getWooColumnSearchInputs(tableWrapper, columnIndex) { 631 var selector = '.search-column'; 632 633 if (typeof columnIndex !== 'undefined' && columnIndex !== null) { 634 selector += '[data-column-num="' + columnIndex + '"]'; 635 } 636 637 return tableWrapper.find(selector); 638 } 639 640 function getWooColumnSearchField(tableWrapper, columnIndex) { 641 return getWooColumnSearchInputs(tableWrapper, columnIndex).first().closest('.stbColumnSearchField'); 642 } 643 644 function initWooColumnSearchVisibility(table) { 645 var tableWrapper = table.closest('.supsystic-tables-wrap'), 646 columnsConfig = getWooAddonColumnsConfig(tableWrapper); 647 648 if (!columnsConfig.length) { 649 return; 650 } 651 652 $.each(columnsConfig, function (index, columnConfig) { 653 var searchField = getWooColumnSearchField(tableWrapper, index), 654 hideSearchInput = columnConfig && parseInt(columnConfig.hide_search_input, 10) === 1; 655 656 if (!searchField.length || !columnConfig) { 657 return; 658 } 659 660 if (columnConfig.slug === 'price') { 661 hideSearchInput = parseInt(columnConfig.show_price_search_inputs, 10) !== 1; 662 } 663 664 searchField.toggle(!hideSearchInput); 665 }); 666 } 667 668 function initWooAttributeFilters(table) { 669 var tableWrapper = table.closest('.supsystic-tables-wrap'), 670 attributeSelects = tableWrapper.find('.stWooFilterAttributes select[data-filter-type="attribute_term"]'), 671 storedFilterFn = tableWrapper.data('dtgWooAttributeFilterFn'), 672 extSearch = $.fn.dataTable.ext.search; 673 674 if (storedFilterFn) { 675 var existingIndex = $.inArray(storedFilterFn, extSearch); 676 if (existingIndex !== -1) { 677 extSearch.splice(existingIndex, 1); 678 } 679 tableWrapper.removeData('dtgWooAttributeFilterFn'); 680 } 681 682 if (!attributeSelects.length) { 683 return; 684 } 685 686 var tableNode = table.get(0), 687 getRowMetaAttributes = function (rowNode) { 688 var row = rowNode ? $(rowNode) : $(), 689 rowMeta = row.find('.stbWooRowMeta').first(); 690 691 return { 692 stock: row.attr('data-stock-status') || (rowMeta.length ? rowMeta.attr('data-stock-status') : '') || '', 693 attrs: row.attr('data-woo-attributes') || (rowMeta.length ? rowMeta.attr('data-woo-attributes') : '') || '', 694 }; 695 }, 696 filterFn = function (settings, data, dataIndex) { 697 if (settings.nTable !== tableNode || isWooServerSideTable(table)) { 698 return true; 699 } 700 701 var hasActiveFilters = false, 702 aoData = settings.aoData && settings.aoData[dataIndex] ? settings.aoData[dataIndex] : null, 703 rowNode = aoData && aoData.nTr ? aoData.nTr : null, 704 rowMeta = getRowMetaAttributes(rowNode), 705 rawAttributes = rowMeta.attrs, 706 rowAttributes = {}; 707 708 if (rawAttributes) { 709 try { 710 rowAttributes = JSON.parse(rawAttributes) || {}; 711 } catch (e) { 712 rowAttributes = {}; 713 } 714 } 715 716 var matchesAll = true; 717 attributeSelects.each(function () { 718 var select = $(this), 719 selectedValue = select.val(), 720 taxonomy = select.attr('data-taxonomy') || '', 721 taxonomyValues = $.isArray(rowAttributes[taxonomy]) ? rowAttributes[taxonomy] : []; 722 723 if (!selectedValue) { 724 return; 725 } 726 727 hasActiveFilters = true; 728 if ($.inArray(selectedValue, taxonomyValues) === -1) { 729 matchesAll = false; 730 return false; 731 } 732 }); 733 734 return !hasActiveFilters || matchesAll; 735 }; 736 737 extSearch.push(filterFn);
738 tableWrapper.data('dtgWooAttributeFilterFn', filterFn); 739 } 740 741 function initWooStockStatusFilter(table) { 742 var tableWrapper = table.closest('.supsystic-tables-wrap'), 743 stockSelect = tableWrapper.find('.stWooFilterStock select'), 744 storedFilterFn = tableWrapper.data('dtgWooStockStatusFilterFn'), 745 extSearch = $.fn.dataTable.ext.search; 746 747 if (storedFilterFn) { 748 var existingIndex = $.inArray(storedFilterFn, extSearch); 749 if (existingIndex !== -1) { 750 extSearch.splice(existingIndex, 1); 751 } 752 tableWrapper.removeData('dtgWooStockStatusFilterFn'); 753 } 754 755 if (!stockSelect.length) { 756 return; 757 } 758 759 var tableNode = table.get(0), 760 getRowStockStatus = function (rowNode) { 761 var row = rowNode ? $(rowNode) : $(), 762 rowMeta = row.find('.stbWooRowMeta').first(); 763 764 return row.attr('data-stock-status') || (rowMeta.length ? rowMeta.attr('data-stock-status') : '') || ''; 765 }, 766 filterFn = function (settings, data, dataIndex) { 767 if (settings.nTable !== tableNode || isWooServerSideTable(table)) { 768 return true; 769 } 770 771 var selectedStatus = stockSelect.val(); 772 if (!selectedStatus) { 773 return true; 774 } 775 776 var aoData = settings.aoData && settings.aoData[dataIndex] ? settings.aoData[dataIndex] : null, 777 rowNode = aoData && aoData.nTr ? aoData.nTr : null, 778 rowStatus = getRowStockStatus(rowNode); 779 780 return rowStatus === selectedStatus; 781 }; 782 783 extSearch.push(filterFn); 784 tableWrapper.data('dtgWooStockStatusFilterFn', filterFn); 785 } 786 787 function initWooPriceFilter(table) { 788 var tableWrapper = table.closest('.supsystic-tables-wrap'), 789 priceFilter = tableWrapper.find('.stWooFilterPrice[data-filter-type="price_range"]'), 790 storedFilterFn = tableWrapper.data('dtgWooPriceFilterFn'), 791 storedState = tableWrapper.data('dtgWooPriceFilterState') || null, 792 extSearch = $.fn.dataTable.ext.search; 793 794 if (storedFilterFn) { 795 var existingIndex = $.inArray(storedFilterFn, extSearch); 796 if (existingIndex !== -1) { 797 extSearch.splice(existingIndex, 1); 798 } 799 tableWrapper.removeData('dtgWooPriceFilterFn'); 800 } 801 802 if (!priceFilter.length) { 803 return; 804 } 805 806 var tableNode = table.get(0), 807 getRowPriceRange = function (rowNode) { 808 var row = rowNode ? $(rowNode) : $(), 809 rowMeta = row.find('.stbWooRowMeta').first(), 810 minValue = row.attr('data-price-min') || (rowMeta.length ? rowMeta.attr('data-price-min') : '') || '', 811 maxValue = row.attr('data-price-max') || (rowMeta.length ? rowMeta.attr('data-price-max') : '') || ''; 812 813 return { 814 min: parseWooPriceValue(minValue), 815 max: parseWooPriceValue(maxValue), 816 }; 817 }, 818 filterFn = function (settings, data, dataIndex) { 819 if (settings.nTable !== tableNode || isWooServerSideTable(table)) { 820 return true; 821 } 822 823 var state = getWooPriceFilterState(priceFilter), 824 absoluteMin = parseWooPriceValue(priceFilter.attr('data-min')), 825 absoluteMax = parseWooPriceValue(priceFilter.attr('data-max')); 826 827 state = normalizeWooPriceBounds(state.min, state.max, absoluteMin, absoluteMax); 828 if (state.min === null && state.max === null) { 829 return true; 830 } 831 832 var aoData = settings.aoData && settings.aoData[dataIndex] ? settings.aoData[dataIndex] : null, 833 rowNode = aoData && aoData.nTr ? aoData.nTr : null, 834 rowRange = getRowPriceRange(rowNode), 835 rowMin = rowRange.min, 836 rowMax = rowRange.max; 837 838 if (rowMin === null && rowMax === null) { 839 return false; 840 } 841 if (rowMin === null) { 842 rowMin = rowMax; 843 } 844 if (rowMax === null) { 845 rowMax = rowMin; 846 } 847 848 if (state.min !== null && rowMax < state.min) { 849 return false; 850 } 851 if (state.max !== null && rowMin > state.max) { 852 return false; 853 } 854 855 return true; 856 }; 857 858 extSearch.push(filterFn);
859 tableWrapper.data('dtgWooPriceFilterFn', filterFn); 860 861 if (storedState && (storedState.min !== null || storedState.max !== null)) { 862 syncWooSharedPriceState(tableWrapper, storedState); 863 } else { 864 syncWooSharedPriceState(tableWrapper, getWooSharedPriceState(tableWrapper)); 865 } 866 867 priceFilter.off('.dtgPrice'); 868 869 priceFilter.on('input.dtgPrice change.dtgPrice', '.stWooPriceRange', function () { 870 var absoluteMin = parseWooPriceValue(priceFilter.attr('data-min')), 871 absoluteMax = parseWooPriceValue(priceFilter.attr('data-max')), 872 rangeMin = parseWooPriceValue(priceFilter.find('.stWooPriceRangeMin').val()), 873 rangeMax = parseWooPriceValue(priceFilter.find('.stWooPriceRangeMax').val()), 874 state = normalizeWooPriceBounds(rangeMin, rangeMax, absoluteMin, absoluteMax); 875 876 syncWooSharedPriceState(tableWrapper, state); 877 }); 878 879 priceFilter.on('change.dtgPrice', '.stWooPriceInput', function () { 880 var state = getWooPriceFilterState(priceFilter), 881 absoluteMin = parseWooPriceValue(priceFilter.attr('data-min')), 882 absoluteMax = parseWooPriceValue(priceFilter.attr('data-max')); 883 884 state = normalizeWooPriceBounds(state.min, state.max, absoluteMin, absoluteMax); 885 syncWooSharedPriceState(tableWrapper, state); 886 table.api().draw(); 887 }); 888 889 priceFilter.on('input.dtgPrice', '.stWooPriceRange', function () { 890 if (!isWooServerSideTable(table)) { 891 table.api().draw(); 892 } 893 }); 894 895 priceFilter.on('change.dtgPrice', '.stWooPriceRange', function () { 896 table.api().draw(); 897 }); 898 } 899 900 function initWooPriceColumnSearch(table) { 901 var tableWrapper = table.closest('.supsystic-tables-wrap'), 902 columnsConfig = getWooAddonColumnsConfig(tableWrapper), 903 storedFilterFn = tableWrapper.data('dtgWooPriceColumnSearchFilterFn'), 904 storedState = tableWrapper.data('dtgWooPriceColumnSearchState') || null, 905 extSearch = $.fn.dataTable.ext.search, 906 addon = getWooAddon(tableWrapper), 907 priceColumnIndex = -1, 908 priceColumnConfig = null, 909 fromPlaceholder = addon.attr('data-price-from-placeholder') || 'From', 910 toPlaceholder = addon.attr('data-price-to-placeholder') || 'To'; 911 912 if (storedFilterFn) { 913 var existingIndex = $.inArray(storedFilterFn, extSearch); 914 if (existingIndex !== -1) { 915 extSearch.splice(existingIndex, 1); 916 } 917 tableWrapper.removeData('dtgWooPriceColumnSearchFilterFn'); 918 } 919 920 if (!columnsConfig.length) { 921 return; 922 } 923 924 $.each(columnsConfig, function (index, columnConfig) { 925 if (columnConfig && columnConfig.slug === 'price') { 926 priceColumnIndex = index; 927 priceColumnConfig = columnConfig; 928 return false; 929 } 930 }); 931 932 if (priceColumnIndex < 0 || !priceColumnConfig) { 933 return; 934 } 935 936 var originalInput = getWooColumnSearchInputs(tableWrapper, priceColumnIndex).first(), 937 searchField = getWooColumnSearchField(tableWrapper, priceColumnIndex), 938 shouldShow = parseInt(priceColumnConfig.show_price_search_inputs, 10) === 1, 939 customWrap = searchField.find('.stWooColumnPriceSearch'); 940 941 if (!searchField.length || !originalInput.length) { 942 return; 943 } 944 945 if (!shouldShow) { 946 if (customWrap.length) { 947 customWrap.remove(); 948 } 949 originalInput.removeClass('stHidden').show(); 950 return; 951 } 952 953 originalInput.val('').addClass('stHidden').hide(); 954 955 if (!customWrap.length) { 956 customWrap = $('<div class="stWooColumnPriceSearch" data-filter-type="price_range"></div>'); 957 customWrap.append('<input type="number" class="stWooColumnPriceSearchInput stWooColumnPriceSearchMin" placeholder="' + fromPlaceholder + '" />'); 958 customWrap.append('<span class="stWooPriceDash">–</span>'); 959 customWrap.append('<input type="number" class="stWooColumnPriceSearchInput stWooColumnPriceSearchMax" placeholder="' + toPlaceholder + '" />'); 960 searchField.append(customWrap); 961 } 962 963 syncWooSharedPriceState(tableWrapper, storedState || getWooSharedPriceState(tableWrapper)); 964 965 var applyPriceColumnSearchState = function () { 966 var priceFilter = tableWrapper.find('.stWooFilterPrice[data-filter-type="price_range"]').first(), 967 absoluteMin = priceFilter.length ? parseWooPriceValue(priceFilter.attr('data-min')) : null, 968 absoluteMax = priceFilter.length ? parseWooPriceValue(priceFilter.attr('data-max')) : null, 969 state = getWooPriceColumnSearchState(customWrap, absoluteMin, absoluteMax), 970 column = table.api().column(priceColumnIndex); 971 972 syncWooSharedPriceState(tableWrapper, state); 973 originalInput.val(''); 974 if (column.search() !== '') { 975 column.search(''); 976 } 977 table.api().draw(); 978 }; 979 980 customWrap 981 .off('.dtgWooPriceColumn') 982 .on('mousedown.dtgWooPriceColumn click.dtgWooPriceColumn touchstart.dtgWooPriceColumn', 'input', function (e) { 983 e.stopPropagation(); 984 }) 985 .on('keydown.dtgWooPriceColumn', 'input', function (e) { 986 if (e.key === 'Enter' || e.keyCode === 13) { 987 var debounceTimer = customWrap.data('dtgWooPriceColumnTimer'); 988 989 e.preventDefault(); 990 e.stopPropagation(); 991 992 if (debounceTimer) { 993 clearTimeout(debounceTimer); 994 customWrap.removeData('dtgWooPriceColumnTimer'); 995 } 996 997 applyPriceColumnSearchState(); 998 return false; 999 } 1000 1001 e.stopPropagation(); 1002 }) 1003 .on('input.dtgWooPriceColumn', 'input', function () { 1004 var debounceTimer = customWrap.data('dtgWooPriceColumnTimer'); 1005 1006 if (debounceTimer) { 1007 clearTimeout(debounceTimer); 1008 } 1009 1010 debounceTimer = setTimeout(function () { 1011 applyPriceColumnSearchState(); 1012 customWrap.removeData('dtgWooPriceColumnTimer'); 1013 }, 2000); 1014 1015 customWrap.data('dtgWooPriceColumnTimer', debounceTimer); 1016 }) 1017 .on('change.dtgWooPriceColumn', 'input', function () { 1018 var debounceTimer = customWrap.data('dtgWooPriceColumnTimer'); 1019 1020 if (debounceTimer) { 1021 clearTimeout(debounceTimer); 1022 customWrap.removeData('dtgWooPriceColumnTimer'); 1023 } 1024 1025 applyPriceColumnSearchState(); 1026 }); 1027 1028 var tableNode = table.get(0), 1029 getRowPriceRange = function (rowNode) { 1030 var row = rowNode ? $(rowNode) : $(), 1031 rowMeta = row.find('.stbWooRowMeta').first(), 1032 minValue = row.attr('data-price-min') || (rowMeta.length ? rowMeta.attr('data-price-min') : '') || '', 1033 maxValue = row.attr('data-price-max') || (rowMeta.length ? rowMeta.attr('data-price-max') : '') || ''; 1034 1035 return { 1036 min: parseWooPriceValue(minValue), 1037 max: parseWooPriceValue(maxValue), 1038 }; 1039 }, 1040 filterFn = function (settings, data, dataIndex) { 1041 if (settings.nTable !== tableNode || isWooServerSideTable(table)) { 1042 return true; 1043 } 1044 1045 var state = tableWrapper.data('dtgWooPriceColumnSearchState') || {}, 1046 stateMin = state.min !== null && typeof state.min !== 'undefined' ? state.min : null, 1047 stateMax = state.max !== null && typeof state.max !== 'undefined' ? state.max : null; 1048 1049 if (stateMin === null && stateMax === null) { 1050 return true; 1051 } 1052 1053 var aoData = settings.aoData && settings.aoData[dataIndex] ? settings.aoData[dataIndex] : null, 1054 rowNode = aoData && aoData.nTr ? aoData.nTr : null, 1055 rowRange = getRowPriceRange(rowNode), 1056 rowMin = rowRange.min, 1057 rowMax = rowRange.max; 1058 1059 if (rowMin === null && rowMax === null) { 1060 return false; 1061 } 1062 if (rowMin === null) { 1063 rowMin = rowMax; 1064 } 1065 if (rowMax === null) { 1066 rowMax = rowMin; 1067 } 1068 1069 if (stateMin !== null && rowMax < stateMin) { 1070 return false; 1071 } 1072 if (stateMax !== null && rowMin > stateMax) { 1073 return false; 1074 } 1075 1076 return true; 1077 }; 1078 1079 extSearch.push(filterFn);
1080 tableWrapper.data('dtgWooPriceColumnSearchFilterFn', filterFn); 1081 } 1082 1083 function getWooColumnToggleKey(table) { 1084 return (table.attr('id') || 'woo-table').replace(/[^A-Za-z0-9_-]/g, ''); 1085 } 1086 1087 function getWooColumnLabel(column) { 1088 var header = $(column.header()); 1089 if (!header.length) { 1090 return ''; 1091 } 1092 1093 var clone = header.clone(); 1094 clone.find('.stbColumnSearchField, input, select, textarea, script, style').remove(); 1095 1096 return $.trim(clone.text()).replace(/\s+/g, ' '); 1097 } 1098 1099 function getWooColumnsConfig(toggleWrap) { 1100 var config = toggleWrap.attr('data-columns-config'); 1101 1102 if (!config) { 1103 return []; 1104 } 1105 1106 try { 1107 config = JSON.parse(config); 1108 } catch (e) { 1109 config = []; 1110 } 1111 1112 return $.isArray(config) ? config : []; 1113 } 1114 1115 function getWooConfiguredColumnLabel(columnConfig, column) { 1116 var configuredLabel = ''; 1117 1118 if (columnConfig) { 1119 if (parseInt(columnConfig.show_display_name, 10) && columnConfig.display_name) { 1120 configuredLabel = $.trim(columnConfig.display_name); 1121 } else if (columnConfig.original_name) { 1122 configuredLabel = $.trim(columnConfig.original_name); 1123 } else if (columnConfig.display_name) { 1124 configuredLabel = $.trim(columnConfig.display_name); 1125 } 1126 } 1127 1128 return configuredLabel || getWooColumnLabel(column); 1129 } 1130 1131 function isWooToggleEligibleColumn(column, columnConfig) { 1132 var header = $(column.header()), 1133 label = getWooConfiguredColumnLabel(columnConfig, column); 1134 1135 if (!header.length || !label) { 1136 return false; 1137 } 1138 1139 if (header.hasClass('control') || header.hasClass('dtr-control')) { 1140 return false; 1141 } 1142 1143 if (columnConfig && parseInt(columnConfig.hide_column, 10)) { 1144 return false; 1145 } 1146 1147 return true; 1148 } 1149 1150 function syncWooColumnToggleItemState(item, column) { 1151 var isVisible = column.visible(); 1152 1153 item.toggleClass('is-active', isVisible); 1154 item.find('.stbWooColumnsToggleCheckbox').prop('checked', isVisible); 1155 item.attr('aria-pressed', isVisible ? 'true' : 'false'); 1156 } 1157 1158 function updateWooMobileDropdownViewportOffset(toggleWrap, toggleButton) { 1159 if (!toggleWrap || !toggleWrap.length || !toggleButton || !toggleButton.length) { 1160 return; 1161 } 1162 1163 if (window.matchMedia && !window.matchMedia('(max-width: 768px)').matches) { 1164 toggleWrap[0].style.removeProperty('--stb-woo-toggle-left'); 1165 return; 1166 } 1167 1168 toggleWrap.css('--stb-woo-toggle-left', toggleButton.get(0).getBoundingClientRect().left + 'px'); 1169 } 1170 1171 function bindWooMobileDropdownViewportOffset(toggleWrap, toggleButton, namespace) { 1172 var updatePosition = function () { 1173 updateWooMobileDropdownViewportOffset(toggleWrap, toggleButton); 1174 }; 1175 1176 updatePosition(); 1177 $(window).off('resize' + namespace).on('resize' + namespace, updatePosition); 1178 $(window).off('scroll' + namespace).on('scroll' + namespace, updatePosition); 1179 $(document).off('scroll' + namespace).on('scroll' + namespace, updatePosition); 1180 } 1181 1182 function closeWooToggleDropdowns(tableWrapper, exceptWrap) { 1183 if (!tableWrapper || !tableWrapper.length) { 1184 return; 1185 } 1186 1187 tableWrapper.find('.stbWooColumnsToggle').each(function () { 1188 var wrap = $(this); 1189 if (exceptWrap && exceptWrap.length && wrap.is(exceptWrap)) { 1190 return; 1191 } 1192 1193 wrap.find('.stbWooColumnsToggleButton').attr('aria-expanded', 'false'); 1194 wrap.find('.stbWooColumnsToggleDropdown').addClass('stHidden'); 1195 }); 1196 1197 tableWrapper.find('.stbWooExportToggle').each(function () { 1198 var wrap = $(this); 1199 if (exceptWrap && exceptWrap.length && wrap.is(exceptWrap)) { 1200 return; 1201 } 1202 1203 wrap.find('.stbWooExportToggleButton').attr('aria-expanded', 'false'); 1204 wrap.find('.stbWooExportToggleDropdown').addClass('stHidden'); 1205 }); 1206 1207 tableWrapper.find('.stbWooCategoryFilter').each(function () { 1208 var wrap = $(this); 1209 if (exceptWrap && exceptWrap.length && wrap.is(exceptWrap)) { 1210 return; 1211 } 1212 1213 wrap.find('.stbWooCategoryFilterButton').attr('aria-expanded', 'false'); 1214 wrap.find('.stbWooCategoryFilterDropdown').addClass('stHidden'); 1215 });
1216 } 1217 1218 function syncWooTableLayoutAfterColumnToggle(table, api) { 1219 var tableWrapper = table.closest('.supsystic-tables-wrap'), 1220 tableId = table.data('id'), 1221 syncLayout = function () { 1222 var scrollBody = tableWrapper.find('.dataTables_scrollBody'), 1223 scrollBodyTable = scrollBody.find('.supsystic-table'); 1224 1225 if (scrollBody.length && scrollBodyTable.length && scrollBodyTable.is(':visible')) { 1226 if (scrollBody.width() > scrollBodyTable.width() || tableWrapper.width() > scrollBodyTable.width()) { 1227 scrollBody.width(scrollBodyTable.width()); 1228 tableWrapper.find('.dataTables_scrollHead, .dataTables_scrollFoot, .dataTables_scrollBody').width(scrollBodyTable.width() + 1); 1229 } 1230 } 1231 1232 if (api.responsive && typeof api.responsive.recalc === 'function') { 1233 api.responsive.recalc(); 1234 } 1235 api.columns.adjust(); 1236 1237 if (typeof app.getTableInstanceById === 'function') { 1238 var instance = app.getTableInstanceById(tableId); 1239 if (instance && typeof instance.fnAdjustColumnSizing === 'function') { 1240 instance.fnAdjustColumnSizing(false); 1241 } 1242 } 1243 }; 1244 1245 window.setTimeout(syncLayout, 0); 1246 window.setTimeout(syncLayout, 120); 1247 window.setTimeout(syncLayout, 320); 1248 } 1249 1250 function sanitizeWooExportFileName(value) { 1251 value = $.trim(value || ''); 1252 if (!value) { 1253 value = 'table'; 1254 } 1255 1256 value = value.replace(/[\\\/:*?"<>|]+/g, '-').replace(/\s+/g, ' '); 1257 1258 return $.trim(value) || 'table'; 1259 } 1260 1261 function removeWooExportColumnByIndex(table, columnIndex) { 1262 if (!table || !table.length || columnIndex < 0) { 1263 return; 1264 } 1265 1266 table.find('tr').each(function () { 1267 $(this).children('th, td').eq(columnIndex).remove(); 1268 }); 1269 } 1270 1271 function getWooVisibleExportTable(wrapper, exportType) { 1272 if (!wrapper || !wrapper.length) { 1273 return $(); 1274 } 1275 1276 var table = wrapper.find('.supsystic-table:first'); 1277 if (!table.length) { 1278 return $(); 1279 } 1280 1281 var tableId = table.data('id'), 1282 tableHtmlId = '#supsystic-table-' + tableId, 1283 clonedWrapper = wrapper.clone(), 1284 clonedTable = clonedWrapper.find(tableHtmlId).first(), 1285 caption = clonedWrapper.find(tableHtmlId + ' caption:first').clone(), 1286 thead = clonedWrapper.find('.dataTables_scrollHead thead:first').clone(), 1287 tbody = clonedWrapper.find(tableHtmlId + ' tbody:first').clone(), 1288 tfoot = clonedWrapper.find('.dataTables_scrollFoot tfoot:first').clone(); 1289 1290 if (!thead.length) { 1291 thead = clonedWrapper.find(tableHtmlId + ' thead:first').clone(); 1292 } 1293 if (!tfoot.length) { 1294 tfoot = clonedWrapper.find(tableHtmlId + ' tfoot:first').clone(); 1295 } 1296 1297 if (typeof _stbPrepareTableToExport === 'function') { 1298 clonedWrapper = _stbPrepareTableToExport(clonedWrapper, table, { 1299 type: exportType, 1300 useClonedId: false, 1301 }); 1302 clonedTable = clonedWrapper.find(tableHtmlId).first(); 1303 } 1304 1305 if (typeof app.WooProExportPrepare === 'function') { 1306 clonedWrapper = app.WooProExportPrepare(table, clonedWrapper, { 1307 type: exportType, 1308 }); 1309 clonedTable = clonedWrapper.find(tableHtmlId).first(); 1310 } 1311 1312 if (!clonedTable.length) { 1313 return $(); 1314 } 1315 1316 clonedWrapper.find('.dataTables_wrapper').each(function () { 1317 var currentWrapper = $(this), 1318 currentTable = currentWrapper.find(tableHtmlId).first(); 1319 1320 if (currentTable.length) { 1321 currentWrapper.empty().append(currentTable); 1322 } 1323 }); 1324 1325 clonedTable.empty(); 1326 if (caption.length) { 1327 clonedTable.append(caption); 1328 } 1329 if (thead.length) { 1330 clonedTable.append(thead); 1331 } 1332 if (tbody.length) { 1333 clonedTable.append(tbody); 1334 } 1335 if (tfoot.length) { 1336 clonedTable.append(tfoot); 1337 } 1338
1339 clonedTable.find('.stbColumnsSearchWrapper, .dataTables_empty, .tblEditLink').remove(); 1340 clonedTable.find('input, textarea, select').each(function () { 1341 var field = $(this), 1342 replacement = ''; 1343 1344 if (field.is('select')) { 1345 replacement = field.find('option:selected').map(function () { 1346 return $.trim($(this).text()); 1347 }).get().join(', '); 1348 } else if (field.is(':checkbox')) { 1349 replacement = field.is(':checked') ? 'Yes' : ''; 1350 } else { 1351 replacement = field.val(); 1352 } 1353 1354 field.replaceWith(document.createTextNode(replacement)); 1355 }); 1356 1357 clonedTable.find('a').each(function () { 1358 $(this).replaceWith(document.createTextNode($.trim($(this).text()))); 1359 }); 1360 1361 if (exportType === 'csv' || exportType === 'xls' || exportType === 'xlsx') { 1362 var addToCartColumnIndex = -1, 1363 addToCartCell = clonedTable 1364 .find('tbody td') 1365 .filter(function () { 1366 return $(this).find('.stAddToCartWrapper, .stAddToCartButWrapp, .stAddToCart, .stAddMulty').length > 0; 1367 }) 1368 .first(); 1369 1370 if (addToCartCell.length) { 1371 addToCartColumnIndex = addToCartCell.get(0).cellIndex; 1372 } 1373 1374 if (addToCartColumnIndex >= 0) { 1375 removeWooExportColumnByIndex(clonedTable, addToCartColumnIndex); 1376 } 1377 1378 clonedTable.find('img').each(function () { 1379 var image = $(this), 1380 imageSrc = $.trim(image.attr('src') || ''); 1381 1382 image.replaceWith(document.createTextNode(imageSrc)); 1383 }); 1384 } 1385 1386 clonedTable.find('.screen-reader-text, .woocommerce-Price-currencySymbol[aria-hidden="true"]').each(function () { 1387 var current = $(this); 1388 1389 if (current.hasClass('woocommerce-Price-currencySymbol')) { 1390 current.removeAttr('aria-hidden'); 1391 return; 1392 } 1393 1394 current.remove(); 1395 }); 1396 1397 clonedTable.find('del').css({ 1398 'text-decoration': 'line-through', 1399 opacity: '1', 1400 }); 1401 clonedTable.find('ins').css({ 1402 'text-decoration': 'none', 1403 'font-weight': '700', 1404 background: 'transparent', 1405 }); 1406 1407 clonedTable.find('.stbWooRowMeta').remove(); 1408 clonedTable.find('th, td').filter(function () { 1409 return $(this).css('display') === 'none' || $(this).hasClass('stHidden'); 1410 }).remove(); 1411 1412 return clonedTable; 1413 } 1414 1415 function getWooExportRows(table) { 1416 var rows = []; 1417 1418 table.find('tr').each(function () { 1419 var currentRow = [], 1420 hasCells = false; 1421 1422 $(this) 1423 .children('th, td') 1424 .each(function () { 1425 var cell = $(this), 1426 cellClone = cell.clone(); 1427 1428 cellClone.find('.screen-reader-text').remove(); 1429 cellClone.find('.woocommerce-Price-currencySymbol[aria-hidden="true"]').removeAttr('aria-hidden'); 1430 1431 var text = $.trim(cellClone.text().replace(/\s+/g, ' ')); 1432 1433 currentRow.push(text); 1434 hasCells = true; 1435 }); 1436 1437 if (hasCells) { 1438 rows.push(currentRow); 1439 } 1440 }); 1441 1442 return rows; 1443 } 1444 1445 function buildWooCsvContent(rows) { 1446 return $.map(rows, function (row) { 1447 return $.map(row, function (cell) { 1448 cell = cell == null ? '' : String(cell); 1449 return '"' + cell.replace(/"/g, '""') + '"'; 1450 }).join(','); 1451 }).join('\r\n'); 1452 } 1453 1454 function buildWooExcelHtml(table, title) { 1455 var html = [ 1456 '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40">', 1457 '<head>', 1458 '<meta charset="utf-8">', 1459 '<meta name="ProgId" content="Excel.Sheet">', 1460 '<meta name="Generator" content="Supsystic Tables">', 1461 '<title>' + $('<div/>').text(title).html() + '</title>', 1462 '<style>', 1463 'table{border-collapse:collapse;width:100%;}', 1464 'th,td{border:1px solid #d7dce1;padding:6px 8px;text-align:left;vertical-align:top;}', 1465 'th{font-weight:700;}', 1466 'del{text-decoration:line-through;opacity:1;}', 1467 'ins{text-decoration:none;font-weight:700;background:transparent;}', 1468 '</style>', 1469 '</head>', 1470 '<body>', 1471 $('<div/>').append(table.clone()).html(), 1472 '</body>', 1473 '</html>', 1474 ]; 1475 1476 return html.join(''); 1477 } 1478 1479 function downloadWooExportBlob(content, fileName, mimeType) { 1480 var blob = new Blob([content], { type: mimeType }), 1481 url = window.URL.createObjectURL(blob), 1482 link = document.createElement('a'); 1483 1484 link.href = url; 1485 link.download = fileName; 1486 document.body.appendChild(link); 1487 link.click(); 1488 document.body.removeChild(link); 1489 1490 window.setTimeout(function () { 1491 window.URL.revokeObjectURL(url); 1492 }, 1000); 1493 } 1494 1495 function exportWooVisibleTable(tableWrapper, exportType) { 1496 if (!tableWrapper || !tableWrapper.length) { 1497 return false; 1498 } 1499 1500 var exportTable = getWooVisibleExportTable(tableWrapper, exportType); 1501 if (!exportTable.length) { 1502 return false; 1503 } 1504 1505 var sourceTable = tableWrapper.find('.supsystic-table:first'), 1506 fileBaseName = sanitizeWooExportFileName(sourceTable.attr('data-title') || sourceTable.data('title') || document.title || 'table'); 1507 1508 if (exportType === 'csv') { 1509 var csvRows = getWooExportRows(exportTable), 1510 csvContent = '\uFEFF' + buildWooCsvContent(csvRows);
1511 1512 downloadWooExportBlob(csvContent, fileBaseName + '.csv', 'text/csv;charset=utf-8;'); 1513 return true; 1514 } 1515 1516 if (exportType === 'xls' || exportType === 'xlsx') { 1517 var excelHtml = buildWooExcelHtml(exportTable, fileBaseName), 1518 excelMime = exportType === 'xlsx' 1519 ? 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8;' 1520 : 'application/vnd.ms-excel;charset=utf-8;'; 1521 1522 downloadWooExportBlob('\uFEFF' + excelHtml, fileBaseName + '.' + exportType, excelMime); 1523 return true; 1524 } 1525 1526 return false; 1527 } 1528 1529 function initWooColumnVisibilityToggle(table) { 1530 var tableWrapper = table.closest('.supsystic-tables-wrap'), 1531 toggleWrap = tableWrapper.find('.stbWooColumnsToggle'); 1532 1533 if (!toggleWrap.length) { 1534 return; 1535 } 1536 1537 var api = table.api(), 1538 toggleButton = toggleWrap.find('.stbWooColumnsToggleButton'), 1539 toggleDropdown = toggleWrap.find('.stbWooColumnsToggleDropdown'), 1540 toggleList = toggleWrap.find('.stbWooColumnsToggleList'), 1541 columnsConfig = getWooColumnsConfig(toggleWrap), 1542 namespace = '.dtgWooColumns' + getWooColumnToggleKey(table), 1543 eligibleColumns = []; 1544 1545 bindWooMobileDropdownViewportOffset(toggleWrap, toggleButton, namespace); 1546 1547 api.columns().every(function (index) { 1548 var column = api.column(index), 1549 columnConfig = columnsConfig[index] || null, 1550 label = getWooConfiguredColumnLabel(columnConfig, column); 1551 1552 if (!isWooToggleEligibleColumn(column, columnConfig)) { 1553 return; 1554 } 1555 1556 eligibleColumns.push({ 1557 index: index, 1558 label: label, 1559 }); 1560 }); 1561 1562 toggleList.empty(); 1563 1564 if (!eligibleColumns.length) { 1565 toggleWrap.addClass('stHidden'); 1566 return; 1567 } 1568 1569 toggleWrap.removeClass('stHidden'); 1570 1571 $.each(eligibleColumns, function (_, itemData) { 1572 var item = $('<button type="button" class="stbWooColumnsToggleItem"></button>'); 1573 item.attr({ 1574 'data-column-index': itemData.index, 1575 'data-column-label': itemData.label, 1576 }); 1577 item.html( 1578 '<span class="stbWooColumnsToggleItemInner">' + 1579 '<input type="checkbox" class="stbWooColumnsToggleCheckbox" />' + 1580 '<span class="stbWooColumnsToggleItemLabel"></span>' + 1581 '</span>' 1582 ); 1583 item.find('.stbWooColumnsToggleItemLabel').text(itemData.label); 1584 syncWooColumnToggleItemState(item, api.column(itemData.index)); 1585 toggleList.append(item); 1586 }); 1587 1588 toggleButton.off('click' + namespace).on('click' + namespace, function (e) { 1589 e.preventDefault(); 1590 e.stopPropagation(); 1591 1592 var expanded = toggleButton.attr('aria-expanded') === 'true'; 1593 if (!expanded) { 1594 closeWooToggleDropdowns(tableWrapper, toggleWrap); 1595 } 1596 updateWooMobileDropdownViewportOffset(toggleWrap, toggleButton); 1597 toggleButton.attr('aria-expanded', expanded ? 'false' : 'true'); 1598 toggleDropdown.toggleClass('stHidden', expanded); 1599 }); 1600 1601 toggleWrap.off('click' + namespace, '.stbWooColumnsToggleItem').on('click' + namespace, '.stbWooColumnsToggleItem', function (e) { 1602 e.preventDefault(); 1603 1604 var item = $(this), 1605 columnIndex = parseInt(item.attr('data-column-index'), 10); 1606 1607 if (isNaN(columnIndex)) { 1608 return; 1609 } 1610 1611 var column = api.column(columnIndex); 1612 column.visible(!column.visible(), false); 1613 1614 if (api.responsive && typeof api.responsive.recalc === 'function') { 1615 api.responsive.recalc(); 1616 } 1617 1618 api.columns.adjust().draw(false); 1619 syncWooTableLayoutAfterColumnToggle(table, api); 1620 syncWooColumnToggleItemState(item, column); 1621 }); 1622 1623 api.off('column-visibility' + namespace).on('column-visibility' + namespace, function (e, settings, columnIndex) { 1624 var item = toggleList.find('.stbWooColumnsToggleItem[data-column-index="' + columnIndex + '"]'); 1625 1626 if (item.length) { 1627 syncWooColumnToggleItemState(item, api.column(columnIndex)); 1628 } 1629 });
1630 1631 $(document).off('click' + namespace).on('click' + namespace, function (e) { 1632 if ($(e.target).closest('.stbWooColumnsToggle').length) { 1633 return; 1634 } 1635 1636 toggleButton.attr('aria-expanded', 'false'); 1637 toggleDropdown.addClass('stHidden'); 1638 }); 1639 } 1640 1641 function initWooFiltersToggle(table) { 1642 var tableWrapper = table.closest('.supsystic-tables-wrap'), 1643 toggleWrap = tableWrapper.find('.stbWooFilterToggle'), 1644 filtersWrap = tableWrapper.find('.stbWooFilterWrapper').first(); 1645 1646 if (!toggleWrap.length || !filtersWrap.length) { 1647 return; 1648 } 1649 1650 var toggleButton = toggleWrap.find('.stbWooFiltersToggleButton'), 1651 resetButton = toggleWrap.find('.stbResetWooFilters'), 1652 namespace = '.dtgWooFiltersToggle' + getWooColumnToggleKey(table), 1653 setExpandedState = function (expanded) { 1654 toggleButton.attr('aria-expanded', expanded ? 'true' : 'false'); 1655 filtersWrap.toggleClass('stHidden', !expanded); 1656 if (resetButton.length) { 1657 resetButton.toggleClass('stHidden', !expanded); 1658 } 1659 }; 1660 1661 setExpandedState(toggleButton.attr('aria-expanded') === 'true'); 1662 1663 toggleButton.off('click' + namespace).on('click' + namespace, function (e) { 1664 e.preventDefault(); 1665 e.stopPropagation(); 1666 1667 setExpandedState(toggleButton.attr('aria-expanded') !== 'true'); 1668 }); 1669 } 1670 1671 function initWooExportToggle(table) { 1672 var tableWrapper = table.closest('.supsystic-tables-wrap'), 1673 toggleWrap = tableWrapper.find('.stbWooExportToggle'); 1674 1675 if (!toggleWrap.length) { 1676 return; 1677 } 1678 1679 var toggleButton = toggleWrap.find('.stbWooExportToggleButton'), 1680 toggleDropdown = toggleWrap.find('.stbWooExportToggleDropdown'), 1681 namespace = '.dtgWooExportToggle' + getWooColumnToggleKey(table); 1682 1683 bindWooMobileDropdownViewportOffset(toggleWrap, toggleButton, namespace); 1684 1685 if (!toggleWrap.find('.stbWooExportToggleItem').length) { 1686 toggleWrap.addClass('stHidden'); 1687 return; 1688 } 1689 1690 toggleButton.off('click' + namespace).on('click' + namespace, function (e) { 1691 e.preventDefault(); 1692 e.stopPropagation(); 1693 1694 var expanded = toggleButton.attr('aria-expanded') === 'true'; 1695 if (!expanded) { 1696 closeWooToggleDropdowns(tableWrapper, toggleWrap); 1697 } 1698 updateWooMobileDropdownViewportOffset(toggleWrap, toggleButton); 1699 toggleButton.attr('aria-expanded', expanded ? 'false' : 'true'); 1700 toggleDropdown.toggleClass('stHidden', expanded); 1701 }); 1702 1703 toggleWrap.off('click' + namespace, '.stbWooExportToggleItem').on('click' + namespace, '.stbWooExportToggleItem', function () { 1704 toggleButton.attr('aria-expanded', 'false'); 1705 toggleDropdown.addClass('stHidden'); 1706 }); 1707 1708 toggleWrap 1709 .find('.export-csv, .export-xls, .export-xlsx') 1710 .off('click.dtgWooFrontendFileExport') 1711 .on('click.dtgWooFrontendFileExport', function (e) { 1712 var exportLink = $(this), 1713 exportType = exportLink.attr('data-export-type') || ''; 1714 1715 if (!exportType) { 1716 return false; 1717 } 1718 1719 e.preventDefault(); 1720 e.stopPropagation(); 1721 if (typeof e.stopImmediatePropagation === 'function') { 1722 e.stopImmediatePropagation(); 1723 } 1724 1725 toggleButton.attr('aria-expanded', 'false'); 1726 toggleDropdown.addClass('stHidden'); 1727 exportWooVisibleTable(tableWrapper, exportType); 1728 1729 return false; 1730 }); 1731 1732 $(document).off('click' + namespace).on('click' + namespace, function (e) { 1733 if ($(e.target).closest('.stbWooExportToggle').length) { 1734 return; 1735 } 1736 1737 toggleButton.attr('aria-expanded', 'false'); 1738 toggleDropdown.addClass('stHidden'); 1739 }); 1740 } 1741 1742 function initWooCategoryListFilter(table) { 1743 var tableWrapper = table.closest('.supsystic-tables-wrap'), 1744 filterWrap = tableWrapper.find('.stbWooCategoryFilter').first(), 1745 storedFilterFn = tableWrapper.data('dtgWooCategoryFilterFn'), 1746 extSearch = $.fn.dataTable.ext.search; 1747 1748 if (storedFilterFn) { 1749 var existingIndex = $.inArray(storedFilterFn, extSearch); 1750 if (existingIndex !== -1) { 1751 extSearch.splice(existingIndex, 1); 1752 } 1753 tableWrapper.removeData('dtgWooCategoryFilterFn'); 1754 } 1755 1756 if (!filterWrap.length) { 1757 return; 1758 } 1759 1760 var api = table.api(), 1761 tableNode = table.get(0), 1762 toggleButton = filterWrap.find('.stbWooCategoryFilterButton'), 1763 dropdown = filterWrap.find('.stbWooCategoryFilterDropdown'), 1764 toggleAllButton = filterWrap.find('.stbWooCategoryFilterToggleAll'), 1765 namespace = '.dtgWooCategoryFilter' + getWooColumnToggleKey(table), 1766 applyCategoryFilter = function () { 1767 api.draw(); 1768 }, 1769 setExpandedState = function (expanded, applyOnClose) { 1770 var wasExpanded = toggleButton.attr('aria-expanded') === 'true'; 1771 1772 updateWooMobileDropdownViewportOffset(filterWrap, toggleButton); 1773 toggleButton.attr('aria-expanded', expanded ? 'true' : 'false'); 1774 dropdown.toggleClass('stHidden', !expanded); 1775 1776 if (!expanded && wasExpanded && applyOnClose) { 1777 applyCategoryFilter(); 1778 } 1779 }, 1780 filterFn = function (settings, data, dataIndex) { 1781 if (settings.nTable !== tableNode || isWooServerSideTable(table)) { 1782 return true; 1783 } 1784 1785 var selection = getWooCategoryFilterSelection(tableWrapper); 1786 if (!selection.total || selection.selected.length === selection.total) { 1787 return true; 1788 } 1789 if (!selection.selected.length) { 1790 return false; 1791 } 1792 1793 var aoData = settings.aoData && settings.aoData[dataIndex] ? settings.aoData[dataIndex] : null, 1794 rowNode = aoData && aoData.nTr ? aoData.nTr : null, 1795 row = rowNode ? $(rowNode) : $(), 1796 rowMeta = row.find('.stbWooRowMeta').first(), 1797 rawCategories = row.attr('data-woo-categories') || (rowMeta.length ? rowMeta.attr('data-woo-categories') : '') || '', 1798 rowCategories = []; 1799 1800 if (rawCategories) { 1801 try { 1802 rowCategories = JSON.parse(rawCategories) || []; 1803 } catch (e) { 1804 rowCategories = []; 1805 } 1806 } 1807 1808 rowCategories = $.map(rowCategories, function (value) { 1809 value = parseInt(value, 10); 1810 return isNaN(value) ? null : value; 1811 }); 1812 1813 if (!rowCategories.length) { 1814 return false; 1815 } 1816 1817 for (var i = 0; i < selection.selected.length; i++) { 1818 if ($.inArray(selection.selected[i], rowCategories) !== -1) { 1819 return true; 1820 } 1821 } 1822 1823 return false; 1824 }; 1825 1826 extSearch.push(filterFn);
1827 tableWrapper.data('dtgWooCategoryFilterFn', filterFn); 1828 bindWooMobileDropdownViewportOffset(filterWrap, toggleButton, namespace); 1829 1830 filterWrap.find('.stbWooCategoryFilterItem').each(function () { 1831 syncWooCategoryFilterItemState($(this), $(this).find('.stbWooCategoryFilterCheckbox').is(':checked')); 1832 }); 1833 1834 toggleButton.off('click' + namespace).on('click' + namespace, function (e) { 1835 e.preventDefault(); 1836 e.stopPropagation(); 1837 1838 if (toggleButton.attr('aria-expanded') !== 'true') { 1839 closeWooToggleDropdowns(tableWrapper, filterWrap); 1840 } 1841 setExpandedState(toggleButton.attr('aria-expanded') !== 'true', true); 1842 }); 1843 1844 filterWrap.off('click' + namespace, '.stbWooCategoryFilterItem').on('click' + namespace, '.stbWooCategoryFilterItem', function (e) { 1845 e.preventDefault(); 1846 e.stopPropagation(); 1847 1848 var item = $(this), 1849 checkbox = item.find('.stbWooCategoryFilterCheckbox'), 1850 checked = !checkbox.is(':checked'); 1851 1852 syncWooCategoryFilterItemState(item, checked); 1853 }); 1854 1855 toggleAllButton.off('click' + namespace).on('click' + namespace, function (e) { 1856 e.preventDefault(); 1857 e.stopPropagation(); 1858 1859 var items = filterWrap.find('.stbWooCategoryFilterItem'), 1860 shouldCheckAll = items.filter(function () { 1861 return !$(this).find('.stbWooCategoryFilterCheckbox').is(':checked'); 1862 }).length > 0; 1863 1864 items.each(function () { 1865 syncWooCategoryFilterItemState($(this), shouldCheckAll); 1866 }); 1867 }); 1868 1869 dropdown.off('mouseleave' + namespace).on('mouseleave' + namespace, function () { 1870 if (toggleButton.attr('aria-expanded') === 'true') { 1871 setExpandedState(false, true); 1872 } 1873 }); 1874 1875 $(document).off('click' + namespace).on('click' + namespace, function (e) { 1876 if ($(e.target).closest('.stbWooCategoryFilter').length) { 1877 return; 1878 } 1879 1880 setExpandedState(false, true); 1881 }); 1882 } 1883 1884 app.getServerSideSearchParams = function (table, searchParams) { 1885 var params = $.extend(true, {}, searchParams || {}), 1886 wooFilters = getWooServerSideFilters(table); 1887 1888 if (wooFilters.length) { 1889 params.wooFilters = wooFilters; 1890 } else if (typeof params.wooFilters !== 'undefined') { 1891 delete params.wooFilters; 1892 } 1893 1894 return params; 1895 }; 1896 app.setTableAddFilters = function (table) { 1897 var self = this, 1898 tableWrapper = table.closest('.supsystic-tables-wrap'); 1899 1900 initWooExportToggle(table); 1901 initWooColumnVisibilityToggle(table); 1902 initWooFiltersToggle(table); 1903 initWooCategoryListFilter(table); 1904 initWooStockStatusFilter(table); 1905 initWooAttributeFilters(table); 1906 initWooPriceFilter(table); 1907 initWooPriceColumnSearch(table); 1908 initWooColumnSearchVisibility(table); 1909 1910 var filtersInput = tableWrapper.find('.stbWooFilterWrapper select'); 1911 filtersInput.each(function () { 1912 var oControl = $(this), 1913 filterType = oControl.attr('data-filter-type') || '', 1914 tableId = table.attr('id'), 1915 columns = table.api().settings()[0].aoColumns, 1916 keys = oControl.attr('data-column-keys'), 1917 columnIds = typeof keys !== 'undefined' ? keys.split(',').map(Number) : [], 1918 serverSide = isWooServerSideTable(table); 1919 1920 if (filterType === 'stock_status' || filterType === 'attribute_term') { 1921 oControl.off('change.dtg').on('change.dtg', function () { 1922 table.api().draw(); 1923 }); 1924 return; 1925 } 1926 1927 if (columnIds.length > 0) { 1928 oControl.off('change.dtg').on('change.dtg', function () { 1929 var value = $(this).val(); 1930 if (serverSide) { 1931 $.each(columnIds, function (_, numColumn) { 1932 getWooColumnSearchInputs(tableWrapper, numColumn).each(function () { 1933 $(this).val(''); 1934 }); 1935 table.api().column(numColumn).search(''); 1936 }); 1937 table.api().draw(); 1938 return; 1939 } 1940 for (var i = 0; i < columnIds.length; i++) { 1941 var numColumn = columnIds[i], 1942 column = table.api().column(numColumn); 1943 if (column.search() !== value) { 1944 if (value != '') { 1945 getWooColumnSearchInputs(tableWrapper, numColumn).each(function () { 1946 $(this).val(''); 1947 }); 1948 } 1949 column.search(value).draw(); 1950 setTimeout(function () { 1951 column.draw(); 1952 }, 50); 1953 return; 1954 } 1955 } 1956 }); 1957 } 1958 });
1959 1960 tableWrapper 1961 .find('.stbResetWooFilters') 1962 .off('click') 1963 .on('click', function (e) { 1964 e.preventDefault(); 1965 self.resetTableAddFilters(table); 1966 }); 1967 }; 1968 1969 app.resetTableAddFilters = function (table) { 1970 var doDraw = false, 1971 tableWrapper = table.closest('.supsystic-tables-wrap'); 1972 1973 tableWrapper.find('.stbWooCategoryFilter').each(function () { 1974 var filterWrap = $(this), 1975 items = filterWrap.find('.stbWooCategoryFilterItem'), 1976 selection = getWooCategoryFilterSelection(tableWrapper); 1977 1978 if (selection.total && selection.selected.length !== selection.total) { 1979 items.each(function () { 1980 syncWooCategoryFilterItemState($(this), true); 1981 }); 1982 doDraw = true; 1983 } 1984 }); 1985 1986 tableWrapper 1987 .find('.stbWooFilterWrapper select') 1988 .each(function () { 1989 var select = $(this), 1990 firstVal = select.find('option:first').val(); 1991 if (select.val() != firstVal) { 1992 select.val(firstVal).trigger('change.dtg'); 1993 doDraw = true; 1994 } 1995 }); 1996 1997 tableWrapper.find('.stWooFilterPrice[data-filter-type="price_range"]').each(function () { 1998 var priceFilter = $(this); 1999 2000 syncWooPriceFilterUi(priceFilter, { 2001 min: null, 2002 max: null, 2003 }); 2004 storeWooPriceFilterState(tableWrapper, { 2005 min: null, 2006 max: null, 2007 }); 2008 doDraw = true; 2009 }); 2010 2011 tableWrapper.find('.stWooColumnPriceSearch').each(function () { 2012 var priceSearch = $(this); 2013 2014 priceSearch.find('.stWooColumnPriceSearchMin, .stWooColumnPriceSearchMax').val(''); 2015 storeWooPriceColumnSearchState(tableWrapper, { 2016 min: null, 2017 max: null, 2018 }); 2019 doDraw = true; 2020 }); 2021 2022 if (doDraw) { 2023 table.api().draw(); 2024 } 2025 }; 2026 2027 app._beforeShowWooTable = function ($table) { 2028 var self = this, 2029 tableWrapper = $table.closest('.supsystic-tables-wrap'), 2030 addonData = tableWrapper.find('.supsystic-tables-addon'); 2031 if (addonData.length == 0) return; 2032 2033 var beforeBlock = addonData.find('.stb-before-woo'), 2034 caption = tableWrapper.find('.supsystic-table-caption:first'); 2035 if (beforeBlock.length) { 2036 if (caption.length) { 2037 caption.after(beforeBlock); 2038 } else { 2039 tableWrapper.prepend(beforeBlock); 2040 } 2041 } 2042 }; 2043 2044 app._initTablesOnPageWoo = function (id) { 2045 var supsysticTables = $(typeof id != 'undefined' ? '#supsystic-table-' + id + ':not(.dataTable)' : '.supsystic-table'); 2046 2047 supsysticTables.each(function () { 2048 var $curTable = $(this); 2049 2050 $curTable.on('beforeShowTable', function () { 2051 app._beforeShowWooTable($curTable); 2052 }); 2053 }); 2054 }; 2055})(window.jQuery, window.supsystic.Tables);
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.