()
| 753 | renderConfigEditor(); |
| 754 | } |
| 755 | function formConfigItem(){ |
| 756 | const elements = $('configForm').elements; |
| 757 | const item = {}; |
| 758 | activeConfigDef().fields.forEach(field => { |
| 759 | const el = elements[field.name]; |
| 760 | if(!el) return; |
| 761 | if(field.type === 'checkbox'){ |
| 762 | item[field.name] = el.checked; |
| 763 | return; |
| 764 | } |
| 765 | if(field.type === 'number'){ |
| 766 | let value = el.value === '' ? (field.default ?? 0) : Number(el.value); |
| 767 | if(!Number.isFinite(value)) value = field.default ?? 0; |
| 768 | if(field.min != null) value = Math.max(field.min, value); |
| 769 | if(field.max != null) value = Math.min(field.max, value); |
| 770 | item[field.name] = value; |
| 771 | return; |
| 772 | } |
| 773 | item[field.name] = field.keepRaw ? el.value : el.value.trim(); |
| 774 | }); |
| 775 | return item; |
| 776 | } |
| 777 | function configItemPath(key, index){ |
| 778 | if(index < 0) return `/api/${key}`; |
| 779 | const current = configItems()[index] || {}; |
no test coverage detected