Files
ipam/static/js/custom_fields.min.js
T

1 line
7.3 KiB
JavaScript

const urlParams=new URLSearchParams(window.location.search);let currentTab=urlParams.get("tab")||"device";function getCurrentTab(){return currentTab}"device"!==currentTab&&"subnet"!==currentTab&&(currentTab="device"),"subnet"===currentTab?switchTab("subnet"):switchTab("device");let fieldData={};function switchTab(e){currentTab=e,document.getElementById("tab-device").classList.remove("border-gray-600","text-gray-900","dark:text-gray-100"),document.getElementById("tab-device").classList.add("border-transparent","text-gray-500"),document.getElementById("tab-subnet").classList.remove("border-gray-600","text-gray-900","dark:text-gray-100"),document.getElementById("tab-subnet").classList.add("border-transparent","text-gray-500"),"device"===e?(document.getElementById("tab-device").classList.remove("border-transparent","text-gray-500"),document.getElementById("tab-device").classList.add("border-gray-600","text-gray-900","dark:text-gray-100"),document.getElementById("device-fields-tab").classList.remove("hidden"),document.getElementById("subnet-fields-tab").classList.add("hidden")):(document.getElementById("tab-subnet").classList.remove("border-transparent","text-gray-500"),document.getElementById("tab-subnet").classList.add("border-gray-600","text-gray-900","dark:text-gray-100"),document.getElementById("device-fields-tab").classList.add("hidden"),document.getElementById("subnet-fields-tab").classList.remove("hidden"));let t=new URL(window.location);t.searchParams.set("tab",e),window.history.pushState({},"",t)}function showAddFieldModal(e){let t=e;if(!t){let l=document.getElementById("tab-device"),d=document.getElementById("tab-subnet");t=l&&l.classList.contains("border-gray-600")?"device":d&&d.classList.contains("border-gray-600")?"subnet":currentTab||"device"}"device"!==t&&"subnet"!==t&&(t="device"),t!==currentTab&&switchTab(t),document.getElementById("modal-title").textContent="Add Custom Field",document.getElementById("form-action").value="add_field",document.getElementById("form-field-id").value="";let a=document.getElementById("form-entity-type");a.value=t,console.log("Opening modal for entity type:",t,"currentTab:",currentTab,"input value:",a.value),document.getElementById("field-name").value="",document.getElementById("field-key").value="",document.getElementById("field-type").value="text",document.getElementById("field-required").checked=!1,document.getElementById("field-default-value").value="",document.getElementById("field-help-text").value="",document.getElementById("field-display-order").value="0",document.getElementById("field-searchable").checked=!1,document.getElementById("field-min-length").value="",document.getElementById("field-max-length").value="",document.getElementById("field-regex-pattern").value="",document.getElementById("field-min-value").value="",document.getElementById("field-max-value").value="",document.getElementById("field-select-options").value="",updateFieldTypeOptions(),document.getElementById("field-modal").classList.remove("hidden")}function closeFieldModal(){document.getElementById("field-modal").classList.add("hidden")}function updateFieldTypeOptions(){let e=document.getElementById("field-type").value;document.getElementById("text-validation").classList.add("hidden"),document.getElementById("number-validation").classList.add("hidden"),document.getElementById("select-validation").classList.add("hidden"),"text"===e||"textarea"===e?document.getElementById("text-validation").classList.remove("hidden"):"number"===e||"decimal"===e?document.getElementById("number-validation").classList.remove("hidden"):"select"===e&&document.getElementById("select-validation").classList.remove("hidden")}function generateFieldKey(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,"_").replace(/^_+|_+$/g,"")}function editField(e,t){let l=document.getElementById("fields-data");if(!l){console.error("Fields data not found");return}try{let d=JSON.parse(l.textContent),a=d[t]||[],n=a.find(t=>t.id===e);n?populateEditForm(n,t):console.error("Field not found:",e,t)}catch(i){console.error("Error parsing fields data:",i)}}function populateEditForm(e,t){document.getElementById("modal-title").textContent="Edit Custom Field",document.getElementById("form-action").value="edit_field",document.getElementById("form-field-id").value=e.id,document.getElementById("form-entity-type").value=t,document.getElementById("field-name").value=e.name||"",document.getElementById("field-key").value=e.field_key||"",document.getElementById("field-type").value=e.field_type||"text",document.getElementById("field-required").checked=e.required||!1,document.getElementById("field-default-value").value=e.default_value||"",document.getElementById("field-help-text").value=e.help_text||"",document.getElementById("field-display-order").value=e.display_order||0,document.getElementById("field-searchable").checked=e.searchable||!1;let l={};if(e.validation_rules){if("string"==typeof e.validation_rules)try{l=JSON.parse(e.validation_rules)}catch(d){l={}}else l=e.validation_rules}document.getElementById("field-min-length").value=l.min_length||"",document.getElementById("field-max-length").value=l.max_length||"",document.getElementById("field-regex-pattern").value=l.regex_pattern||"",document.getElementById("field-min-value").value=l.min_value||"",document.getElementById("field-max-value").value=l.max_value||"",l.select_options?document.getElementById("field-select-options").value=l.select_options.join(", "):document.getElementById("field-select-options").value="",updateFieldTypeOptions(),document.getElementById("field-modal").classList.remove("hidden")}function moveField(e,t,l){let d=document.getElementById(`${e}-fields-tbody`),a=Array.from(d.querySelectorAll("tr")),n=a.findIndex(e=>e.dataset.fieldId==t);if(-1===n)return;let i;if("up"===l&&n>0)i=n-1;else{if("down"!==l||!(n<a.length-1))return;i=n+1}let r=a[n],s=a[i];d.insertBefore(r,"up"===l?s:s.nextSibling);let u={};Array.from(d.querySelectorAll("tr")).forEach((e,t)=>{u[e.dataset.fieldId]=t});let o=document.createElement("form");o.method="POST",o.action="/custom_fields";let m=document.createElement("input");m.type="hidden",m.name="action",m.value="reorder",o.appendChild(m);let y=document.createElement("input");y.type="hidden",y.name="entity_type",y.value=e,o.appendChild(y);let c=document.createElement("input");c.type="hidden",c.name="field_orders",c.value=JSON.stringify(u),o.appendChild(c),document.body.appendChild(o),o.submit()}document.addEventListener("DOMContentLoaded",function(){let e=document.getElementById("field-name"),t=document.getElementById("field-key");e&&t&&(e.addEventListener("input",function(){t.value&&"true"!==t.dataset.autoGenerated||(t.value=generateFieldKey(this.value),t.dataset.autoGenerated="true")}),t.addEventListener("input",function(){this.dataset.autoGenerated="false"}));let l=document.getElementById("field-type");l&&l.addEventListener("change",updateFieldTypeOptions);let d=document.getElementById("field-form");d&&d.addEventListener("submit",function(e){let t=document.getElementById("form-entity-type");t.value&&""!==t.value.trim()||(t.value=currentTab,console.log("Entity type was empty, setting to:",currentTab)),"device"!==t.value&&"subnet"!==t.value&&(t.value=currentTab,console.log("Entity type was invalid, setting to currentTab:",currentTab)),console.log("Submitting form with entity_type:",t.value,"currentTab:",currentTab)})}),window.onclick=function(e){let t=document.getElementById("field-modal");e.target===t&&closeFieldModal()};