()
| 2245 | } |
| 2246 | } |
| 2247 | async function loadAndDisplayUserSiteSelectors() { |
| 2248 | if (!UI.siteSettingsListContainer) { |
| 2249 | console.error("Site settings list container not found."); |
| 2250 | return; |
| 2251 | } |
| 2252 | setSiteSettingsListMessage("Loading..."); |
| 2253 | try { |
| 2254 | const allConfigs = await loadSiteConfigs(); |
| 2255 | const data = await getStorageData([ |
| 2256 | CONSTANTS.STORAGE_KEYS.USER_SELECTORS, |
| 2257 | CONSTANTS.STORAGE_KEYS.DEFAULT_SELECTORS, |
| 2258 | ]); |
| 2259 | const userConfigs = data[CONSTANTS.STORAGE_KEYS.USER_SELECTORS] || {}; |
| 2260 | const defaultConfigs = |
| 2261 | data[CONSTANTS.STORAGE_KEYS.DEFAULT_SELECTORS] || {}; |
| 2262 | const allKeys = Object.keys(allConfigs); |
| 2263 | allKeys.sort((a, b) => a.toLowerCase().localeCompare(b.toLowerCase())); |
| 2264 | UI.siteSettingsListContainer.replaceChildren(); |
| 2265 | if (allKeys.length === 0) { |
| 2266 | setSiteSettingsListMessage( |
| 2267 | 'No default or custom configurations found. Click "Add New".' |
| 2268 | ); |
| 2269 | return; |
| 2270 | } |
| 2271 | allKeys.forEach((domain) => { |
| 2272 | if (!allConfigs[domain]) return; |
| 2273 | const isUser = userConfigs.hasOwnProperty(domain); |
| 2274 | const isDefault = defaultConfigs.hasOwnProperty(domain); |
| 2275 | const config = allConfigs[domain]; |
| 2276 | let statusText = ""; |
| 2277 | if (isUser && !isDefault) statusText = " (Custom)"; |
| 2278 | else if (isUser && isDefault) statusText = " (Overridden)"; |
| 2279 | else if (!isUser && isDefault) statusText = " (Default)"; |
| 2280 | const listItem = document.createElement("li"); |
| 2281 | listItem.className = "site-config-item"; |
| 2282 | const nameSpan = document.createElement("span"); |
| 2283 | nameSpan.className = "site-config-name"; |
| 2284 | if (isUser) nameSpan.classList.add("is-user-config"); |
| 2285 | if (!isUser && isDefault) nameSpan.classList.add("is-default-config"); |
| 2286 | const truncatedDisplayDomain = truncateText(domain, 18); |
| 2287 | nameSpan.textContent = `${truncatedDisplayDomain}${statusText}`; |
| 2288 | nameSpan.title = `Domain: ${domain}\nStatus: ${ |
| 2289 | statusText.trim().replace(/[()]/g, "") || "Default" |
| 2290 | }\nType: ${ |
| 2291 | config.useInEngineSelect ? "Search Engine" : "Importer/Other" |
| 2292 | }`; |
| 2293 | const buttonDiv = document.createElement("div"); |
| 2294 | buttonDiv.className = "site-config-buttons"; |
| 2295 | const editButton = document.createElement("button"); |
| 2296 | editButton.textContent = "Edit"; |
| 2297 | editButton.className = "xs"; |
| 2298 | editButton.title = `Edit configuration for ${domain}`; |
| 2299 | editButton.addEventListener("click", (e) => { |
| 2300 | e.stopPropagation(); |
| 2301 | const configPageUrl = chrome.runtime.getURL( |
| 2302 | `siteconfig.html?edit=${encodeURIComponent(domain)}` |
| 2303 | ); |
| 2304 | chrome.tabs.create({ url: configPageUrl, active: true }); |
no test coverage detected