FCX

Mejora la navegación en ForoCoches.

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         FCX
// @namespace    https://github.com/mdmrk/fcx
// @version      0.1.0
// @description  Mejora la navegación en ForoCoches.
// @license      GNU General Public License v3.0
// @author       mdmrk
// @match        https://forocoches.com/*
// @icon         data:image/png;base64,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
// @grant        GM_getValue
// @grant        GM_setValue
// @grant        GM_addStyle
// @grant        GM_registerMenuCommand
// @run-at       document-end
// @noframes
// ==/UserScript==

// src/style.css
var style_default = ".infinite-scroll-separator{justify-content:center;align-items:center;margin:20px 0;display:flex;position:relative}.infinite-scroll-separator-line{background-color:var(--border-color,#e5e7eb);z-index:1;height:1px;position:absolute;left:0;right:0}.infinite-scroll-separator-text{background-color:var(--bg-color,#fff);color:var(--text-secondary,#6b7280);z-index:2;border:1px solid var(--border-color,#e5e7eb);border-radius:9999px;padding:0 16px;font-size:.875rem;font-weight:500}#fcx-config-backdrop{z-index:9998;background:#00000080;width:100%;height:100%;position:fixed;top:0;left:0}#fcx-config-panel{color:#ccc;z-index:9999;opacity:0;background:#1e1e1e;border:1px solid #444;border-radius:4px;flex-direction:column;width:900px;max-width:95%;max-height:90vh;font-size:13px;display:flex;position:fixed;top:50%;left:50%;transform:translate(-50%,-50%)scale(.95);box-shadow:0 10px 25px #00000080}#fcx-config-header{color:#fff;background:linear-gradient(#2a2a2a,#1a1a1a);border-bottom:1px solid #000;padding:8px 10px;font-weight:700}#fcx-config-content{flex:1;padding:0;overflow-y:auto}#fcx-config-table{border-collapse:collapse;width:100%}#fcx-config-table th,#fcx-config-table td{text-align:left;border-bottom:1px solid #333;padding:10px}#fcx-config-table th{color:#fe5e00;z-index:10;background:#252525;font-weight:700;position:sticky;top:0}#fcx-config-table th.fcx-col-opt{width:auto}#fcx-config-table th.fcx-col-chk{text-align:center;width:80px}#fcx-config-table td.fcx-col-chk{text-align:center}.fcx-desc{color:#888;margin-top:4px;font-size:11px;display:block}.fcx-label{color:#eee;font-weight:700}.fcx-disabled{opacity:.3;pointer-events:none}#fcx-footer{text-align:right;color:#666;background:#1a1a1a;border-top:1px solid #333;padding:5px 10px;font-size:11px}#fcx-footer a{color:#888;cursor:pointer;margin-left:10px;text-decoration:none}#fcx-footer a:hover{color:#ccc}";

// src/utils/inject-console.ts
var consoleMethodsThatDontBreakWhenArgumentIsString = [
  "log",
  "error",
  "warn",
  "info",
  "debug",
  "trace"
];
function injectConsole(prefix) {
  const originalConsole = globalThis.console;
  globalThis.console = new Proxy(originalConsole, {
    get(target, prop, receiver) {
      const method = Reflect.get(target, prop, receiver);
      return consoleMethodsThatDontBreakWhenArgumentIsString.some((propName) => propName === prop) ? method.bind(target, `[${prefix}]
`) : method;
    }
  });
}

// src/config.ts
var devMode = false;
var theme = {
  enhancedCommentClass: "enhanced-comment"
};
var oldSelectors = {
  feedContainer: "#posts",
  commentItem: "table[id^='post']",
  avatar: ".avatar",
  authorName: ".bigusername",
  content: "div[id^='post_message_']",
  nextPageLink: "a[rel='next']",
  prevPageLink: "a[rel='prev']",
  activePage: "td.alt2 .mfont strong"
};
var newSelectors = {
  feedContainer: "#posts",
  commentItem: ".postbit_wrapper",
  avatar: ".thread-profile-image",
  authorName: "div[id^='postmenu_'] > a",
  content: "div[id^='post_message_']",
  nextPageLink: "a:has(span[style*='--next-right-icon'])",
  prevPageLink: "a:has(span[style*='--next-left-icon'])",
  activePage: "span[title*='Mostrando resultados'] > strong"
};

// src/utils/logger.ts
var logger = {
  log: (...args) => {
    if (devMode)
      console.log(...args);
  },
  warn: (...args) => {
    if (devMode)
      console.warn(...args);
  },
  error: (...args) => {
    if (devMode)
      console.error(...args);
  },
  info: (...args) => {
    if (devMode)
      console.info(...args);
  }
};

// src/utils/detect-interface.ts
var isNewInterface = () => {
  return !!document.getElementById("fc-desktop-version-tag-for-monitoring");
};

// src/utils/page-state.ts
var detectPageType = () => {
  const url = window.location.href;
  if (url.includes("showthread.php")) {
    return "THREAD" /* THREAD */;
  }
  if (url.includes("forumdisplay.php")) {
    return "CATEGORY" /* CATEGORY */;
  }
  if (/\/foro\/?($|\?|#)/.test(url)) {
    return "HOME" /* HOME */;
  }
  if (/^https?:\/\/[^/]+\/?(?:$|\?|#)/.test(url)) {
    return "HOME" /* HOME */;
  }
  return "UNKNOWN" /* UNKNOWN */;
};
var currentPageType = detectPageType();

// src/config-registry.ts
var CONFIG_KEYS = {
  REMOVE_SIDEBAR: "remove_sidebar",
  INFINITE_SCROLL: "infinite_scroll",
  REMOVE_BANNERS: "remove_banners"
};
var configs = [
  {
    key: CONFIG_KEYS.REMOVE_SIDEBAR,
    label: "Eliminar Barra Lateral",
    description: "Elimina la barra lateral derecha y expande el área de contenido principal.",
    defaultValue: false,
    type: "checkbox",
    scopes: ["new"]
  },
  {
    key: CONFIG_KEYS.INFINITE_SCROLL,
    label: "Scroll Infinito",
    description: "Carga automáticamente la siguiente página de hilos al llegar al final.",
    defaultValue: true,
    type: "checkbox"
  },
  {
    key: CONFIG_KEYS.REMOVE_BANNERS,
    label: "Eliminar Publicidad",
    description: "Oculta los banners de publicidad.",
    defaultValue: true,
    type: "checkbox"
  }
];

// src/utils/storage.ts
var getConfig = (key, defaultValue) => {
  if (typeof GM_getValue !== "undefined") {
    return GM_getValue(key, defaultValue);
  }
  const val = localStorage.getItem(`fcx_${key}`);
  if (val === null)
    return defaultValue;
  try {
    return JSON.parse(val);
  } catch {
    return val;
  }
};
var setConfig = (key, value) => {
  if (typeof GM_setValue !== "undefined") {
    GM_setValue(key, value);
    return;
  }
  localStorage.setItem(`fcx_${key}`, JSON.stringify(value));
};
var resetConfig = (key, defaultValue) => {
  setConfig(key, defaultValue);
};
var getScopedConfigKey = (key, scope) => {
  return `${key}_${scope}`;
};
var getEffectiveConfig = (key, scope) => {
  const general = getConfig(key, false);
  if (general === true)
    return true;
  const scopedKey = getScopedConfigKey(key, scope);
  return getConfig(scopedKey, false);
};

// src/ui/config-panel.ts
var createCheckbox = (checked, onChange) => {
  const input = document.createElement("input");
  input.type = "checkbox";
  input.checked = checked;
  input.onchange = (e) => {
    onChange(e.target.checked);
  };
  return input;
};
var renderRow = (item) => {
  const tr = document.createElement("tr");
  const tdName = document.createElement("td");
  const label = document.createElement("div");
  label.className = "fcx-label";
  label.textContent = item.label;
  const desc = document.createElement("span");
  desc.className = "fcx-desc";
  desc.textContent = item.description;
  tdName.append(label, desc);
  const tdGeneral = document.createElement("td");
  tdGeneral.className = "fcx-col-chk";
  const generalChecked = getConfig(item.key, item.defaultValue);
  const updateRowState = (isGeneralChecked) => {
    if (isGeneralChecked) {
      tdNew.classList.add("fcx-disabled");
      tdOld.classList.add("fcx-disabled");
    } else {
      tdNew.classList.remove("fcx-disabled");
      tdOld.classList.remove("fcx-disabled");
    }
  };
  const checkGeneral = createCheckbox(generalChecked, (val) => {
    setConfig(item.key, val);
    updateRowState(val);
  });
  tdGeneral.append(checkGeneral);
  const tdNew = document.createElement("td");
  tdNew.className = "fcx-col-chk";
  if (!item.scopes || item.scopes.includes("new")) {
    const keyNew = getScopedConfigKey(item.key, "new");
    const checkNew = createCheckbox(getConfig(keyNew, false), (val) => setConfig(keyNew, val));
    tdNew.append(checkNew);
  }
  const tdOld = document.createElement("td");
  tdOld.className = "fcx-col-chk";
  if (!item.scopes || item.scopes.includes("old")) {
    const keyOld = getScopedConfigKey(item.key, "old");
    const checkOld = createCheckbox(getConfig(keyOld, false), (val) => setConfig(keyOld, val));
    tdOld.append(checkOld);
  }
  updateRowState(generalChecked);
  tr.append(tdName, tdGeneral, tdNew, tdOld);
  return tr;
};
var toggleConfigPanel = () => {
  if (document.getElementById("fcx-config-panel")) {
    closePanel();
    return;
  }
  openPanel();
};
var openPanel = () => {
  const backdrop = document.createElement("div");
  backdrop.id = "fcx-config-backdrop";
  backdrop.onclick = closePanel;
  const panel = document.createElement("div");
  panel.id = "fcx-config-panel";
  const header = document.createElement("div");
  header.id = "fcx-config-header";
  header.textContent = "Configuración FCX";
  const content = document.createElement("div");
  content.id = "fcx-config-content";
  const table = document.createElement("table");
  table.id = "fcx-config-table";
  const thead = document.createElement("thead");
  const trHead = document.createElement("tr");
  const thName = document.createElement("th");
  thName.className = "fcx-col-opt";
  thName.textContent = "Opción";
  const thGen = document.createElement("th");
  thGen.className = "fcx-col-chk";
  thGen.textContent = "General";
  const thNew = document.createElement("th");
  thNew.className = "fcx-col-chk";
  thNew.textContent = "Nuevo";
  const thOld = document.createElement("th");
  thOld.className = "fcx-col-chk";
  thOld.textContent = "Antiguo";
  trHead.append(thName, thGen, thNew, thOld);
  thead.append(trHead);
  table.append(thead);
  const tbody = document.createElement("tbody");
  configs.forEach((item) => {
    if (item.type === "checkbox") {
      tbody.append(renderRow(item));
    }
  });
  table.append(tbody);
  content.append(table);
  const footer = document.createElement("div");
  footer.id = "fcx-footer";
  const closeLink = document.createElement("a");
  closeLink.textContent = "Cerrar";
  closeLink.onclick = closePanel;
  const resetLink = document.createElement("a");
  resetLink.textContent = "Restaurar todo";
  resetLink.onclick = () => {
    if (confirm("¿Restaurar toda la configuración?")) {
      configs.forEach((c) => {
        resetConfig(c.key, c.defaultValue);
        if (!c.scopes || c.scopes.includes("new")) {
          resetConfig(getScopedConfigKey(c.key, "new"), false);
        }
        if (!c.scopes || c.scopes.includes("old")) {
          resetConfig(getScopedConfigKey(c.key, "old"), false);
        }
      });
      closePanel();
      openPanel();
    }
  };
  footer.append(resetLink, document.createTextNode(" | "), closeLink);
  panel.append(header, content, footer);
  document.body.append(backdrop, panel);
  requestAnimationFrame(() => {
    backdrop.style.opacity = "1";
    panel.style.opacity = "1";
    panel.style.transform = "translate(-50%, -50%) scale(1)";
  });
};
var closePanel = () => {
  const b = document.getElementById("fcx-config-backdrop");
  const p = document.getElementById("fcx-config-panel");
  if (b && p) {
    b.style.opacity = "0";
    p.style.opacity = "0";
    setTimeout(() => {
      b.remove();
      p.remove();
    }, 200);
  }
};

// src/lib/style-comment.ts
var styleComment = (element, _selectors) => {
  if (element.dataset.processed === "true")
    return;
  element.dataset.processed = "true";
  element.classList.add(theme.enhancedCommentClass);
};

// src/lib/watch-feed.ts
var watchFeed = (selectors) => {
  if (!window.location.href.includes("showthread.php")) {
    logger.log("Watch Feed: Not a thread page.");
    return () => {};
  }
  const feed = document.querySelector(selectors.feedContainer);
  if (!feed) {
    logger.warn("Feed container not found, retrying in 1s...");
    const timer = setTimeout(() => watchFeed(selectors), 1000);
    return () => clearTimeout(timer);
  }
  logger.log("Feed found, starting watcher...");
  const existing = feed.querySelectorAll(selectors.commentItem);
  existing.forEach((el) => {
    styleComment(el, selectors);
  });
  const observer = new MutationObserver((mutations) => {
    for (const mutation of mutations) {
      for (const node of mutation.addedNodes) {
        if (node instanceof HTMLElement) {
          if (node.matches(selectors.commentItem)) {
            styleComment(node, selectors);
          } else {
            const children = node.querySelectorAll(selectors.commentItem);
            children.forEach((el) => {
              styleComment(el, selectors);
            });
          }
        }
      }
    }
  });
  observer.observe(feed, { childList: true, subtree: true });
  return () => {
    observer.disconnect();
    logger.log("Feed watcher stopped");
  };
};

// src/lib/infinite-scroll.ts
var isLoading = false;
var nextUrl = null;
var prevUrl = null;
var currentSelectors = null;
var initInfiniteScroll = (selectors) => {
  currentSelectors = selectors;
  if (currentPageType !== "THREAD" /* THREAD */) {
    logger.log("Infinite Scroll: Not a thread page.");
    return;
  }
  const prevLink = document.querySelector(selectors.prevPageLink);
  if (prevLink) {
    prevUrl = prevLink.href;
    logger.log("Infinite Scroll: Prev page is", prevUrl);
    const topSentry = document.createElement("div");
    topSentry.id = "infinite-scroll-top-sentry";
    topSentry.innerHTML = "<p style='color: #666; font-weight: bold;'>Cargando página anterior...</p>";
    topSentry.style.textAlign = "center";
    topSentry.style.padding = "40px";
    const feed = document.querySelector(selectors.feedContainer);
    if (feed)
      feed.before(topSentry);
    const topObserver = new IntersectionObserver((entries) => {
      const entry = entries[0];
      if (entry.isIntersecting && !isLoading && prevUrl) {
        loadPrevPage();
      }
    }, { rootMargin: "300px" });
    topObserver.observe(topSentry);
  }
  const nextLink = document.querySelector(selectors.nextPageLink);
  if (!nextLink) {
    logger.log("Infinite Scroll: No next page found.");
  } else {
    nextUrl = nextLink.href;
    logger.log("Infinite Scroll: Next page is", nextUrl);
    const bottomSentry = document.createElement("div");
    bottomSentry.id = "infinite-scroll-bottom-sentry";
    bottomSentry.innerHTML = "<p style='color: #666; font-weight: bold;'>Cargando página siguiente...</p>";
    bottomSentry.style.textAlign = "center";
    bottomSentry.style.padding = "40px";
    const feed = document.querySelector(selectors.feedContainer);
    if (feed)
      feed.after(bottomSentry);
    const bottomObserver = new IntersectionObserver((entries) => {
      const entry = entries[0];
      if (entry.isIntersecting && !isLoading && nextUrl) {
        loadNextPage();
      }
    }, { rootMargin: "300px" });
    bottomObserver.observe(bottomSentry);
  }
};
var getPageNumber = (url) => {
  try {
    const urlObj = new URL(url);
    const params = new URLSearchParams(urlObj.search);
    return params.get("page");
  } catch (e) {
    console.error("Error parsing URL for page number", e);
    return null;
  }
};
var getPageNumberFromDoc = (doc) => {
  if (currentSelectors?.activePage) {
    const activePageEl = doc.querySelector(currentSelectors.activePage);
    if (activePageEl?.textContent) {
      return activePageEl.textContent.trim();
    }
  }
  return null;
};
var createSeparator = (pageNumber) => {
  const div = document.createElement("div");
  div.classList.add("infinite-scroll-separator");
  const line = document.createElement("div");
  line.classList.add("infinite-scroll-separator-line");
  const span = document.createElement("span");
  span.textContent = `Página ${pageNumber}`;
  span.classList.add("infinite-scroll-separator-text");
  div.appendChild(line);
  div.appendChild(span);
  return div;
};
var loadPrevPage = async () => {
  if (!prevUrl)
    return;
  isLoading = true;
  try {
    const response = await fetch(prevUrl);
    const text = await response.text();
    const parser = new DOMParser;
    const doc = parser.parseFromString(text, "text/html");
    const newFeed = doc.querySelector(currentSelectors.feedContainer);
    const currentFeed = document.querySelector(currentSelectors.feedContainer);
    if (newFeed && currentFeed) {
      const oldScrollHeight = document.documentElement.scrollHeight;
      const oldScrollTop = document.documentElement.scrollTop;
      Array.from(newFeed.children).reverse().forEach((child) => {
        const importedNode = document.importNode(child, true);
        currentFeed.insertBefore(importedNode, currentFeed.firstChild);
      });
      const pageNum = getPageNumberFromDoc(doc) || getPageNumber(prevUrl);
      if (pageNum) {
        const separator = createSeparator(pageNum);
        currentFeed.insertBefore(separator, currentFeed.firstChild);
      }
      const newScrollHeight = document.documentElement.scrollHeight;
      document.documentElement.scrollTop = oldScrollTop + (newScrollHeight - oldScrollHeight);
    }
    const prevLink = doc.querySelector(currentSelectors.prevPageLink);
    if (prevLink) {
      prevUrl = prevLink.href;
    } else {
      prevUrl = null;
      document.querySelector("#infinite-scroll-top-sentry")?.remove();
    }
  } catch (err) {
    console.error("Infinite Scroll (Prev) Error:", err);
  } finally {
    isLoading = false;
  }
};
var loadNextPage = async () => {
  if (!nextUrl)
    return;
  isLoading = true;
  try {
    const response = await fetch(nextUrl);
    const text = await response.text();
    const parser = new DOMParser;
    const doc = parser.parseFromString(text, "text/html");
    const newFeed = doc.querySelector(currentSelectors.feedContainer);
    const currentFeed = document.querySelector(currentSelectors.feedContainer);
    if (newFeed && currentFeed) {
      const pageNum = getPageNumberFromDoc(doc) || getPageNumber(nextUrl);
      if (pageNum) {
        const separator = createSeparator(pageNum);
        currentFeed.appendChild(separator);
      }
      Array.from(newFeed.children).forEach((child) => {
        const importedNode = document.importNode(child, true);
        currentFeed.appendChild(importedNode);
      });
    }
    const nextLink = doc.querySelector(currentSelectors.nextPageLink);
    if (nextLink) {
      nextUrl = nextLink.href;
    } else {
      nextUrl = null;
      document.querySelector("#infinite-scroll-bottom-sentry")?.remove();
    }
  } catch (err) {
    console.error("Infinite Scroll Error:", err);
  } finally {
    isLoading = false;
  }
};

// src/lib/remove-banners.ts
var removeBanners = (scope) => {
  const shouldRemove = getEffectiveConfig(CONFIG_KEYS.REMOVE_BANNERS, scope);
  if (!shouldRemove)
    return;
  const banner = document.getElementById("notices-wrapper");
  if (banner) {
    banner.remove();
  }
};

// src/adapters/new-adapter.ts
class NewSiteAdapter {
  name = "New Interface";
  selectors;
  constructor() {
    this.selectors = newSelectors;
  }
  init() {
    logger.log(`Initializing ${this.name} adapter...`);
    this.removeSidebar();
    removeBanners("new");
  }
  removeSidebar() {
    const shouldRemove = getEffectiveConfig(CONFIG_KEYS.REMOVE_SIDEBAR, "new");
    if (!shouldRemove)
      return;
    const sidebar = document.querySelector("#sidebar");
    if (sidebar)
      sidebar.remove();
    const main = document.querySelector("main");
    if (main)
      main.style.display = "block";
  }
  setupFeatures() {
    watchFeed(this.selectors);
    if (getEffectiveConfig(CONFIG_KEYS.INFINITE_SCROLL, "new")) {
      initInfiniteScroll(this.selectors);
    }
  }
}

// src/adapters/old-adapter.ts
class OldSiteAdapter {
  name = "Old Interface";
  selectors;
  constructor() {
    this.selectors = oldSelectors;
  }
  init() {
    logger.log(`Initializing ${this.name} adapter...`);
    removeBanners("old");
  }
  setupFeatures() {
    watchFeed(this.selectors);
    if (getEffectiveConfig(CONFIG_KEYS.INFINITE_SCROLL, "old")) {
      initInfiniteScroll(this.selectors);
    }
  }
}

// src/index.ts
(() => {
  injectConsole("FCX");
  GM_addStyle(style_default);
  const isNew = isNewInterface();
  logger.log("Script initializing...");
  logger.log(`Interface: ${isNew ? "New" : "Old"}`);
  logger.log(`Page Type: ${currentPageType}`);
  const adapter = isNew ? new NewSiteAdapter : new OldSiteAdapter;
  adapter.init();
  adapter.setupFeatures();
  GM_registerMenuCommand("Configuración", toggleConfigPanel);
  return () => {
    logger.log("Script unloaded");
  };
})();