Files
Jacek Pyziak cd264483f8 Add PSR HTTP Message Interfaces and Dependencies
- Implemented StreamInterface, UploadedFileInterface, and UriInterface as per PSR standards.
- Added getallheaders function to retrieve HTTP headers in a compatible manner.
- Included LICENSE files for ralouphie/getallheaders and symfony/deprecation-contracts.
- Introduced function for triggering deprecation notices in Symfony.
2025-12-28 12:44:00 +01:00

1 line
5.6 KiB
JavaScript

class BlockFilterSorter{constructor(){if(this.tableBody=document.querySelector(".atfp-custom-data-table-table tbody"),this.filters=document.querySelectorAll(".atfp-custom-data-table-filters .atfp-filter-tab"),this.atfpDataTableObj=null,this.saveButtonEnabled=!1,this.saveButtonText=!1,this.saveButtonClass=!1,this.saveButtonAction=!1,this.saveButtonNonce=!1,this.displayAjaxNotice=!1,this.ajaxUrl=!1,window.atfpCustomTableDataObject){atfpCustomTableDataObject.save_button_enabled&&""!==atfpCustomTableDataObject.save_button_enabled&&(this.saveButtonEnabled=atfpCustomTableDataObject.save_button_enabled),atfpCustomTableDataObject.save_button_text&&""!==atfpCustomTableDataObject.save_button_text&&(this.saveButtonText=atfpCustomTableDataObject.save_button_text),atfpCustomTableDataObject.save_button_class&&""!==atfpCustomTableDataObject.save_button_class&&(this.saveButtonClass=atfpCustomTableDataObject.save_button_class),atfpCustomTableDataObject.save_button_handler&&""!==atfpCustomTableDataObject.save_button_handler&&(this.saveButtonAction=atfpCustomTableDataObject.save_button_handler),atfpCustomTableDataObject.save_button_nonce&&""!==atfpCustomTableDataObject.save_button_nonce&&(this.saveButtonNonce=atfpCustomTableDataObject.save_button_nonce),atfpCustomTableDataObject.admin_url&&""!==atfpCustomTableDataObject.admin_url&&(this.ajaxUrl=atfpCustomTableDataObject.admin_url);const inputFields=document.querySelectorAll('#atfp-custom-datatable tbody input[name="atfp_fields_status"]');inputFields.forEach(input=>{input.addEventListener("change",this.updateStatusHandler.bind(this))})}this.tableBody&&(this.atfpDataTable(),this.filters.forEach(filter=>{filter.addEventListener("input",this.datatableFilterHandler.bind(this))}))}atfpDataTable(){if(this.tableBody){this.atfpDataTableObj=new DataTable("#atfp-custom-datatable",{pageLength:25,infoCallback:function(settings,start,end,total,max){return`Showing ${start} to ${end} of ${max} records`}}),this.atfpDataTableObj.on("draw.dt",(function(e){const rows=jQuery(this).find("tbody tr");0===rows.length.length&&this.atfpDataTableObj.empty();const length=e.dt.page.info().length,page=e.dt.page.info().page;rows.each((function(index,row){const emptyCell=row.querySelector("td.dt-empty");emptyCell||(row.children[0].textContent=page*length+index+1)}))}));const tableWrp=document.getElementById("atfp-custom-datatable_wrapper"),selectWrapper=document.querySelector(".atfp-custom-data-table-filters");if(selectWrapper.remove(),tableWrp.prepend(selectWrapper),this.saveButtonEnabled&&""!==this.saveButtonText&&"false"!==this.saveButtonText){const saveButton=this.appendSaveButton(),lastRow=tableWrp.querySelector(".dt-layout-row:last-child");lastRow.before(saveButton),jQuery(`.${this.saveButtonClass}`).on("click",this.saveButtonHandler.bind(this))}}}datatableFilterHandler(e){if(this.atfpDataTableObj){let value=e.target.value,wrapper=e.target.closest(".atfp-filter-tab"),column=parseInt(wrapper.dataset.column),defaultValue;value=value!==wrapper.dataset.default&&value,this.atfpDataTableObj.column(column).search(value?new RegExp("^"+value,"i"):"",!1,!1,!1).draw()}}updateStatusHandler(e){const table=jQuery("#atfp-custom-datatable").DataTable();if(!table)return;const $tr=jQuery(e.target).closest("tr");if(!$tr.length)return;const dtRow=table.row($tr);if(!dtRow.node())return;const checked=e.target.checked,status=checked?"Supported":"Unsupported",cell=dtRow.cell(dtRow.index(),3);cell&&cell.data(status)}saveButtonHandler(e){e.preventDefault();const saveBtns=jQuery(`.${this.saveButtonClass}`);if(saveBtns.hasClass("saving"))return;if(!this.saveButtonAction||""===this.saveButtonAction||!this.saveButtonNonce||""===this.saveButtonNonce||!this.ajaxUrl||""===this.ajaxUrl)return;const selectedCheckbox=[],tdNodes=this.atfpDataTableObj.column(4).nodes();if(tdNodes.length>0&&Array.from(tdNodes).forEach(tdNode=>{const checkbox=tdNode.querySelector('input[type="checkbox"]');checkbox&&checkbox.checked&&selectedCheckbox.push(checkbox.value)}),0===selectedCheckbox.length)return;const apiSendData={action:this.saveButtonAction,atfp_nonce:this.saveButtonNonce,save_custom_fields_data:JSON.stringify(selectedCheckbox)};saveBtns.addClass("saving").html('<span class="saving-text">Saving<span class="dot" style="--i:0"></span><span class="dot" style="--i:1"></span><span class="dot" style="--i:2"></span></span>',!0),fetch(this.ajaxUrl,{method:"POST",headers:{"content-type":"application/x-www-form-urlencoded; charset=UTF-8",Accept:"application/json"},body:new URLSearchParams(apiSendData)}).then(response=>response.json()).then(data=>{saveBtns.removeClass("saving").html(this.saveButtonText,!0),data.success&&data.data.message&&this.appendMessageNotice(data.data.message,"success")}).catch(error=>{console.log(error),error.data.message&&this.appendMessageNotice(data.data.message,"error"),saveBtns.removeClass("saving").html(this.saveButtonText,!0),console.error(error)})}appendMessageNotice(message,type){this.displayAjaxNotice&&(jQuery("#atfp-custom-fields-message-notice").remove(),clearTimeout(this.displayAjaxNotice)),this.displayAjaxNotice=setTimeout(()=>{this.displayAjaxNotice=!1,jQuery("#atfp-custom-fields-message-notice").remove()},1e4);let messageNotice=jQuery('<div id="atfp-custom-fields-message-notice"><p>'+message+"</p></div>");messageNotice.addClass("is-dismissible notice notice-"+type),jQuery(".atfpp-dashboard-wrapper").before(messageNotice)}appendSaveButton(){if(!this.saveButtonText||""===this.saveButtonText||"false"===this.saveButtonText||!this.saveButtonEnabled)return;const saveButton=document.createElement("button");return saveButton.className="button button-primary "+this.saveButtonClass,saveButton.textContent=this.saveButtonText,saveButton}}window.addEventListener("load",()=>{new BlockFilterSorter});