()
| 158 | |
| 159 | // --- Load Data For Editing --- |
| 160 | async function loadConfigForEditing() { |
| 161 | if (!isEditing || !domainToEdit) { |
| 162 | return; |
| 163 | } |
| 164 | modalTitle.textContent = `Edit Configuration: ${domainToEdit}`; |
| 165 | domainInput.value = domainToEdit; |
| 166 | domainInput.disabled = true; // Prevent changing domain during edit |
| 167 | hiddenDomainInput.value = domainToEdit; // Store original domain |
| 168 | deleteButton.style.display = "inline-block"; // Show delete/reset button |
| 169 | |
| 170 | try { |
| 171 | const data = await getStorageData([ |
| 172 | STORAGE_KEYS.USER_SELECTORS, |
| 173 | STORAGE_KEYS.DEFAULT_SELECTORS, |
| 174 | ]); |
| 175 | |
| 176 | const userConfigs = data[STORAGE_KEYS.USER_SELECTORS] || {}; |
| 177 | const defaultConfigs = data[STORAGE_KEYS.DEFAULT_SELECTORS] || {}; |
| 178 | |
| 179 | let config = null; |
| 180 | let configSource = "None"; |
| 181 | let defaultConfigData = defaultConfigs.hasOwnProperty(domainToEdit) |
| 182 | ? defaultConfigs[domainToEdit] |
| 183 | : null; |
| 184 | |
| 185 | // Prioritize user config over default |
| 186 | if (userConfigs.hasOwnProperty(domainToEdit)) { |
| 187 | config = userConfigs[domainToEdit]; |
| 188 | configSource = "User"; |
| 189 | } else if (defaultConfigData) { |
| 190 | config = defaultConfigData; |
| 191 | configSource = "Default"; |
| 192 | } |
| 193 | |
| 194 | let isUser = userConfigs.hasOwnProperty(domainToEdit); |
| 195 | let isDefault = defaultConfigs.hasOwnProperty(domainToEdit); |
| 196 | let isPurelyCustom = isUser && !isDefault; |
| 197 | let isUserOverride = isUser && isDefault; |
| 198 | |
| 199 | if (config) { |
| 200 | // Populate form fields |
| 201 | baseUrlInput.value = config.baseUrl || ""; |
| 202 | linkSelectorInput.value = Array.isArray(config.linkSelectors) |
| 203 | ? config.linkSelectors.join(", ") |
| 204 | : config.linkSelector || ""; |
| 205 | const nextPageValue = Array.isArray(config.nextPageSelectors) |
| 206 | ? config.nextPageSelectors.join(", ") |
| 207 | : config.nextPageSelector || ""; |
| 208 | nextPageSelectorInput.value = nextPageValue; |
| 209 | dataTypeInput.value = config.dataType || "href"; |
| 210 | defaultParamsInput.value = config.defaultParams || ""; |
| 211 | if (captchaUrlPatternsInput) { |
| 212 | captchaUrlPatternsInput.value = formatLineList( |
| 213 | getListWithDefault(config, defaultConfigData, "captchaUrlPatterns") |
| 214 | ); |
| 215 | } |
| 216 | if (captchaTextPatternsInput) { |
| 217 | captchaTextPatternsInput.value = formatLineList( |
no test coverage detected