Migrates the main application logic from a monolithic script to a modular, component-based architecture using ES6 modules. Adds ThemeManager, ServicesManager, ServiceConfigGenerator, and OutputManager components for improved maintainability and scalability. Updates index.html to use the new entry point and enhances accessibility and UI structure. Removes legacy main.js.
297 lines
9.7 KiB
HTML
297 lines
9.7 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
|
|
<!-- Basic Meta Tags -->
|
|
<title>META.js Customizer - Create Custom META.js</title>
|
|
<meta
|
|
name="description"
|
|
content="Create your custom META.js with service rulesets from xixu-me/RFM. Easy-to-use web interface for generating META.js."
|
|
/>
|
|
<meta
|
|
name="keywords"
|
|
content="META.js, customizer, web development, service rulesets, RFM, xixu-me, favicons, JavaScript"
|
|
/>
|
|
<meta name="author" content="xixu-me" />
|
|
|
|
<!-- Open Graph / Facebook -->
|
|
<meta property="og:type" content="website" />
|
|
<meta property="og:url" content="https://metajs.xi-xu.me" />
|
|
<meta
|
|
property="og:title"
|
|
content="META.js Customizer - Create Custom META.js"
|
|
/>
|
|
<meta
|
|
property="og:description"
|
|
content="Create your custom META.js with service rulesets from xixu-me/RFM. Easy-to-use web interface for generating META.js."
|
|
/>
|
|
<meta property="og:site_name" content="META.js Customizer" />
|
|
|
|
<!-- Twitter -->
|
|
<meta name="twitter:url" content="https://metajs.xi-xu.me" />
|
|
<meta
|
|
name="twitter:title"
|
|
content="META.js Customizer - Create Custom META.js"
|
|
/>
|
|
<meta
|
|
name="twitter:description"
|
|
content="Create your custom META.js with service rulesets from xixu-me/RFM. Easy-to-use web interface for generating META.js."
|
|
/>
|
|
<meta name="twitter:creator" content="@xixu_me" />
|
|
<meta name="twitter:site" content="@xixu_me" />
|
|
|
|
<!-- Canonical URL -->
|
|
<link rel="canonical" href="https://metajs.xi-xu.me" />
|
|
|
|
<!-- Preconnect for Performance -->
|
|
<link rel="preconnect" href="https://cdnjs.cloudflare.com" />
|
|
<link rel="preconnect" href="https://api.github.com" />
|
|
<link rel="preconnect" href="https://raw.githubusercontent.com" />
|
|
|
|
<!-- Stylesheets -->
|
|
<link rel="stylesheet" href="src/styles/main.css" />
|
|
<link
|
|
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css"
|
|
rel="stylesheet"
|
|
/>
|
|
</head>
|
|
<body>
|
|
<!-- Theme Toggle -->
|
|
<div class="theme-toggle">
|
|
<button id="theme-toggle" aria-label="Toggle theme" title="Theme: Auto">
|
|
<i class="fas fa-circle-half-stroke"></i>
|
|
</button>
|
|
</div>
|
|
|
|
<!-- Main Container -->
|
|
<div class="container">
|
|
<!-- Header Section -->
|
|
<header class="header">
|
|
<h1>
|
|
<i class="fas fa-cogs" aria-hidden="true"></i>
|
|
META.js Customizer
|
|
</h1>
|
|
<p class="subtitle">
|
|
Create your custom META.js of
|
|
<a
|
|
href="https://github.com/xixu-me/META"
|
|
target="_blank"
|
|
rel="noopener"
|
|
>
|
|
<i class="fab fa-github" aria-hidden="true"></i> xixu-me/META
|
|
</a>
|
|
using service rulesets from
|
|
<a
|
|
href="https://github.com/xixu-me/RFM"
|
|
target="_blank"
|
|
rel="noopener"
|
|
>
|
|
<i class="fab fa-github" aria-hidden="true"></i> xixu-me/RFM
|
|
</a>
|
|
</p>
|
|
</header>
|
|
|
|
<!-- Services Configuration Section -->
|
|
<main>
|
|
<section
|
|
id="services-container"
|
|
class="card"
|
|
aria-labelledby="services-heading"
|
|
>
|
|
<div class="card-header">
|
|
<h2 id="services-heading">
|
|
<i class="fas fa-list" aria-hidden="true"></i>
|
|
Services Configuration
|
|
</h2>
|
|
</div>
|
|
<div class="card-content">
|
|
<!-- Routing Priority Information -->
|
|
<div
|
|
class="routing-priority-reminder"
|
|
role="note"
|
|
aria-label="Important routing information"
|
|
>
|
|
<i
|
|
class="fas fa-exclamation-triangle warning-icon"
|
|
aria-hidden="true"
|
|
></i>
|
|
<div class="content">
|
|
<strong>Routing Priority:</strong>
|
|
<span>
|
|
Routing rules are matched in order from top to bottom, with
|
|
the rule at the top of the list taking precedence over the
|
|
rules below it.
|
|
</span>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Services Controls -->
|
|
<div class="services-controls">
|
|
<div class="search-container">
|
|
<div class="search-input-wrapper">
|
|
<i class="fas fa-search search-icon" aria-hidden="true"></i>
|
|
<input
|
|
type="text"
|
|
id="search-input"
|
|
placeholder="Search and add services..."
|
|
aria-label="Search for services"
|
|
autocomplete="off"
|
|
spellcheck="false"
|
|
/>
|
|
</div>
|
|
<div class="services-count" role="status" aria-live="polite">
|
|
<i class="fas fa-check-circle" aria-hidden="true"></i>
|
|
<span id="selected-count">0 of 0 selected</span>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Search Results Dropdown -->
|
|
<div
|
|
id="search-results"
|
|
class="search-results"
|
|
role="listbox"
|
|
aria-label="Available services"
|
|
aria-hidden="true"
|
|
></div>
|
|
</div>
|
|
|
|
<!-- Selected Services List -->
|
|
<div
|
|
id="selected-services"
|
|
role="list"
|
|
aria-label="Selected services"
|
|
aria-describedby="services-description"
|
|
>
|
|
<div class="no-services">
|
|
<i class="fas fa-inbox" aria-hidden="true"></i>
|
|
<h3>No services selected</h3>
|
|
<p id="services-description">
|
|
Search for services above to get started
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<!-- Generated Output Section -->
|
|
<section
|
|
id="output-container"
|
|
class="card"
|
|
aria-labelledby="output-heading"
|
|
>
|
|
<div class="card-header">
|
|
<h2 id="output-heading">
|
|
<i class="fas fa-code" aria-hidden="true"></i>
|
|
Generated META.js
|
|
</h2>
|
|
</div>
|
|
<div class="card-content">
|
|
<div class="output-actions">
|
|
<button
|
|
id="copyButton"
|
|
class="btn btn-primary"
|
|
disabled
|
|
aria-describedby="copy-description"
|
|
>
|
|
<i class="fas fa-copy" aria-hidden="true"></i>
|
|
Copy to Clipboard
|
|
</button>
|
|
<button
|
|
id="downloadButton"
|
|
class="btn btn-secondary"
|
|
disabled
|
|
aria-describedby="download-description"
|
|
>
|
|
<i class="fas fa-download" aria-hidden="true"></i>
|
|
Download META.js
|
|
</button>
|
|
</div>
|
|
<div class="sr-only">
|
|
<p id="copy-description">
|
|
Copy the generated META.js to your clipboard
|
|
</p>
|
|
<p id="download-description">
|
|
Download the generated META.js as a file
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
</main>
|
|
|
|
<!-- Information Section -->
|
|
<aside class="info-banner card" aria-labelledby="info-heading">
|
|
<div class="card-header">
|
|
<h2 id="info-heading">
|
|
<i class="fas fa-info-circle" aria-hidden="true"></i>
|
|
Icon Configuration Guide
|
|
</h2>
|
|
</div>
|
|
<div class="card-content">
|
|
<div class="info-content">
|
|
<p>
|
|
Service icons are sourced from
|
|
<a
|
|
href="https://github.com/xixu-me/favicons"
|
|
target="_blank"
|
|
rel="noopener"
|
|
>
|
|
<i class="fab fa-github" aria-hidden="true"></i>
|
|
xixu-me/favicons </a
|
|
>. Auto-generated configurations may require manual adjustments
|
|
based on availability.
|
|
</p>
|
|
|
|
<h3>
|
|
<i class="fas fa-cog" aria-hidden="true"></i>
|
|
Configuration Rules
|
|
</h3>
|
|
<ul>
|
|
<li>
|
|
<strong>Icon unavailable:</strong> Uses specific
|
|
<code>domain</code>
|
|
<span class="example"
|
|
>(e.g., "xiaohongshu.com" for rednote)</span
|
|
>
|
|
</li>
|
|
<li>
|
|
<strong>Name matches SLD:</strong> Uses only <code>tld</code>
|
|
<span class="example"
|
|
>(e.g., "github" → <code>tld: "com"</code>)</span
|
|
>
|
|
</li>
|
|
<li>
|
|
<strong>Name mismatch:</strong> Adds <code>sld</code>
|
|
<span class="example"
|
|
>(e.g., "xai" → <code>sld: "x", tld: "ai"</code>)</span
|
|
>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</aside>
|
|
|
|
<!-- Footer -->
|
|
<footer class="footer">
|
|
<p>
|
|
<i class="fas fa-code-branch" aria-hidden="true"></i>
|
|
This web app is open source at
|
|
<a
|
|
href="https://github.com/xixu-me/META.js-Customizer"
|
|
target="_blank"
|
|
rel="noopener"
|
|
>
|
|
<i class="fab fa-github" aria-hidden="true"></i>
|
|
xixu-me/META.js-Customizer
|
|
</a>
|
|
</p>
|
|
</footer>
|
|
</div>
|
|
|
|
<!-- Scripts -->
|
|
<script src="src/templates/meta-template.js"></script>
|
|
<script type="module" src="src/scripts/app.js"></script>
|
|
</body>
|
|
</html>
|