bump to version 20261009
This commit is contained in:
1 parent
e88fb193df
commit
07a0f2c1e3
5 files changed
+330
-228
No files matched your search
@@ -9,7 +9,7 @@ on:
|
|||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
inputs:
|
inputs:
|
||||||
version:
|
version:
|
||||||
description: "Version to validate (for example 1.0.1)"
|
description: "Version to validate (for example 20261009)"
|
||||||
required: true
|
required: true
|
||||||
type: string
|
type: string
|
||||||
|
|
||||||
|
|||||||
@@ -124,4 +124,4 @@ python -m json.tool manifest.json >/dev/null
|
|||||||
|
|
||||||
## Project version
|
## Project version
|
||||||
|
|
||||||
Current version: **1.0.1**
|
Current version: **20261009**
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"manifest_version": 3,
|
"manifest_version": 3,
|
||||||
"name": "Proxy Switcher Fork By WT",
|
"name": "Proxy Switcher Fork By WT",
|
||||||
"version": "1.0.1",
|
"version": "20261009",
|
||||||
"description": "Selectively apply proxy servers to specific domains.",
|
"description": "Selectively apply proxy servers to specific domains.",
|
||||||
"minimum_chrome_version": "99",
|
"minimum_chrome_version": "99",
|
||||||
"icons": {
|
"icons": {
|
||||||
|
|||||||
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"manifest_version": 2,
|
"manifest_version": 2,
|
||||||
"name": "Proxy Switcher Fork By WT",
|
"name": "Proxy Switcher Fork By WT",
|
||||||
"version": "1.0.1",
|
"version": "20261009",
|
||||||
"description": "Selectively apply proxy servers to specific domains. All settings are stored locally and no data is collected or transmitted externally.",
|
"description": "Selectively apply proxy servers to specific domains. All settings are stored locally and no data is collected or transmitted externally.",
|
||||||
"icons": {
|
"icons": {
|
||||||
"16": "icons/proxy-switcher-16.png",
|
"16": "icons/proxy-switcher-16.png",
|
||||||
|
|||||||
+326
-224
@@ -1,249 +1,351 @@
|
|||||||
<!DOCTYPE html>
|
<!doctype html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>Proxy Switcher - Options</title>
|
<title>Proxy Switcher - Options</title>
|
||||||
<link rel="stylesheet" href="options.css">
|
<link rel="stylesheet" href="options.css" />
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<!-- Modal Overlay -->
|
<!-- Modal Overlay -->
|
||||||
<div id="modal-overlay" class="modal-overlay hidden"></div>
|
<div id="modal-overlay" class="modal-overlay hidden"></div>
|
||||||
|
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<header>
|
<header>
|
||||||
<h1><img src="icons/proxy-switcher-64.png" alt="Proxy Switcher"> Proxy Switcher</h1>
|
<h1>
|
||||||
<p class="subtitle">Manage domain-specific proxy settings</p>
|
<img
|
||||||
</header>
|
src="icons/proxy-switcher-64.png"
|
||||||
|
alt="Proxy Switcher"
|
||||||
|
/>
|
||||||
|
Proxy Switcher
|
||||||
|
</h1>
|
||||||
|
<p class="subtitle">Manage domain-specific proxy settings</p>
|
||||||
|
</header>
|
||||||
|
|
||||||
<main>
|
<main>
|
||||||
<section class="profiles-section">
|
<section class="profiles-section">
|
||||||
<div class="section-header">
|
<div class="section-header">
|
||||||
<h2>Proxy Profiles</h2>
|
<h2>Proxy Profiles</h2>
|
||||||
<button id="add-profile" class="btn btn-primary">
|
<button id="add-profile" class="btn btn-primary">
|
||||||
<span class="icon">+</span> Add Profile
|
<span class="icon">+</span> Add Profile
|
||||||
</button>
|
</button>
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="profiles-list" class="profiles-list">
|
|
||||||
<!-- Dynamically populated -->
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="domains-section">
|
|
||||||
<div class="section-header">
|
|
||||||
<h2>Configured Domains</h2>
|
|
||||||
<button id="add-domain" class="btn btn-primary">
|
|
||||||
<span class="icon">+</span> Add Domain
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="search-controls">
|
|
||||||
<div class="search-group">
|
|
||||||
<input type="text" id="domain-search" placeholder="Search domains...">
|
|
||||||
<select id="tag-filter">
|
|
||||||
<option value="">All tags</option>
|
|
||||||
<!-- Tags will be added dynamically -->
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="domains-list" class="domains-list">
|
|
||||||
<!-- Dynamically populated -->
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section id="domain-form-section" class="domain-form-section hidden">
|
|
||||||
<h2 id="form-title">Add Domain</h2>
|
|
||||||
|
|
||||||
<form id="domain-form" class="domain-form">
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="domain-input">Domain *</label>
|
|
||||||
<input type="text" id="domain-input"
|
|
||||||
placeholder="example.com"
|
|
||||||
pattern="^([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}$"
|
|
||||||
required>
|
|
||||||
<small class="form-hint">Enter domain without protocol (e.g., example.com)</small>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group">
|
<div id="profiles-list" class="profiles-list">
|
||||||
<label for="proxy-type">Proxy Type *</label>
|
<!-- Dynamically populated -->
|
||||||
<select id="proxy-type" required>
|
</div>
|
||||||
<option value="http">HTTP</option>
|
</section>
|
||||||
<option value="socks">SOCKS5</option>
|
|
||||||
</select>
|
<section class="domains-section">
|
||||||
|
<div class="section-header">
|
||||||
|
<h2>Configured Domains</h2>
|
||||||
|
<button id="add-domain" class="btn btn-primary">
|
||||||
|
<span class="icon">+</span> Add Domain
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="search-controls">
|
||||||
<label for="profile-select">Use Profile (optional)</label>
|
<div class="search-group">
|
||||||
<select id="profile-select">
|
<input
|
||||||
<option value="">-- Select Profile --</option>
|
type="text"
|
||||||
<!-- Profiles will be added dynamically -->
|
id="domain-search"
|
||||||
</select>
|
placeholder="Search domains..."
|
||||||
<small class="form-hint">Selecting a profile will fill the fields below</small>
|
/>
|
||||||
</div>
|
<select id="tag-filter">
|
||||||
|
<option value="">All tags</option>
|
||||||
<div class="form-row">
|
<!-- Tags will be added dynamically -->
|
||||||
<div class="form-group">
|
</select>
|
||||||
<label for="proxy-host">Host *</label>
|
|
||||||
<input type="text" id="proxy-host"
|
|
||||||
placeholder="proxy.example.com"
|
|
||||||
required>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="proxy-port">Port *</label>
|
|
||||||
<input type="number" id="proxy-port"
|
|
||||||
min="1" max="65535"
|
|
||||||
placeholder="8080"
|
|
||||||
required>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-row">
|
<div id="domains-list" class="domains-list">
|
||||||
|
<!-- Dynamically populated -->
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section
|
||||||
|
id="domain-form-section"
|
||||||
|
class="domain-form-section hidden"
|
||||||
|
>
|
||||||
|
<h2 id="form-title">Add Domain</h2>
|
||||||
|
|
||||||
|
<form id="domain-form" class="domain-form">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="proxy-username">Username (optional)</label>
|
<label for="domain-input">Domain *</label>
|
||||||
<input type="text" id="proxy-username"
|
<input
|
||||||
placeholder="username">
|
type="text"
|
||||||
|
id="domain-input"
|
||||||
|
placeholder="example.com"
|
||||||
|
pattern="^([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}$"
|
||||||
|
required
|
||||||
|
/>
|
||||||
|
<small class="form-hint"
|
||||||
|
>Enter domain without protocol (e.g.,
|
||||||
|
example.com)</small
|
||||||
|
>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="proxy-password">Password (optional)</label>
|
<label for="proxy-type">Proxy Type *</label>
|
||||||
<div class="password-input">
|
<select id="proxy-type" required>
|
||||||
<input type="password" id="proxy-password"
|
<option value="http">HTTP</option>
|
||||||
placeholder="••••••••">
|
<option value="socks">SOCKS5</option>
|
||||||
<button type="button" class="toggle-password"
|
</select>
|
||||||
data-target="proxy-password">
|
</div>
|
||||||
👁
|
|
||||||
</button>
|
<div class="form-group">
|
||||||
|
<label for="profile-select"
|
||||||
|
>Use Profile (optional)</label
|
||||||
|
>
|
||||||
|
<select id="profile-select">
|
||||||
|
<option value="">-- Select Profile --</option>
|
||||||
|
<!-- Profiles will be added dynamically -->
|
||||||
|
</select>
|
||||||
|
<small class="form-hint"
|
||||||
|
>Selecting a profile will fill the fields
|
||||||
|
below</small
|
||||||
|
>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-row">
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="proxy-host">Host *</label>
|
||||||
|
<input
|
||||||
|
type="text"
|
||||||
|
id="proxy-host"
|
||||||
|
placeholder="proxy.example.com"
|
||||||
|
required
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="proxy-port">Port *</label>
|
||||||
|
<input
|
||||||
|
type="number"
|
||||||
|
id="proxy-port"
|
||||||
|
min="1"
|
||||||
|
max="65535"
|
||||||
|
placeholder="8080"
|
||||||
|
required
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-row">
|
||||||
<label for="domain-tags">Tags (optional)</label>
|
<div class="form-group">
|
||||||
<input type="text" id="domain-tags"
|
<label for="proxy-username"
|
||||||
placeholder="work, personal, blocked">
|
>Username (optional)</label
|
||||||
<small class="form-hint">Comma-separated tags for organization</small>
|
>
|
||||||
</div>
|
<input
|
||||||
|
type="text"
|
||||||
<div class="form-group checkbox-group">
|
id="proxy-username"
|
||||||
<label class="checkbox-label">
|
placeholder="username"
|
||||||
<input type="checkbox" id="proxy-enabled" checked>
|
/>
|
||||||
<span>Enable proxy for this domain</span>
|
</div>
|
||||||
</label>
|
<div class="form-group">
|
||||||
</div>
|
<label for="proxy-password"
|
||||||
|
>Password (optional)</label
|
||||||
<div class="form-actions">
|
>
|
||||||
<button type="button" id="cancel-form" class="btn btn-secondary">
|
<div class="password-input">
|
||||||
Cancel
|
<input
|
||||||
</button>
|
type="password"
|
||||||
<button type="submit" id="save-domain" class="btn btn-primary">
|
id="proxy-password"
|
||||||
Save Domain
|
placeholder="••••••••"
|
||||||
</button>
|
/>
|
||||||
</div>
|
<button
|
||||||
</form>
|
type="button"
|
||||||
</section>
|
class="toggle-password"
|
||||||
|
data-target="proxy-password"
|
||||||
<section id="profile-form-section" class="profile-form-section hidden">
|
>
|
||||||
<h2 id="profile-form-title">Add Profile</h2>
|
👁
|
||||||
|
</button>
|
||||||
<form id="profile-form" class="profile-form">
|
</div>
|
||||||
<div class="form-group">
|
|
||||||
<label for="profile-name-input">Profile Name *</label>
|
|
||||||
<input type="text" id="profile-name-input"
|
|
||||||
placeholder="My Proxy Profile"
|
|
||||||
required>
|
|
||||||
<small class="form-hint">Enter a unique name for this profile</small>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="profile-proxy-type">Proxy Type *</label>
|
|
||||||
<select id="profile-proxy-type" required>
|
|
||||||
<option value="http">HTTP</option>
|
|
||||||
<option value="socks">SOCKS5</option>
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="form-row">
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="profile-proxy-host">Host *</label>
|
|
||||||
<input type="text" id="profile-proxy-host"
|
|
||||||
placeholder="proxy.example.com"
|
|
||||||
required>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="profile-proxy-port">Port *</label>
|
|
||||||
<input type="number" id="profile-proxy-port"
|
|
||||||
min="1" max="65535"
|
|
||||||
placeholder="8080"
|
|
||||||
required>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="form-row">
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="profile-proxy-username">Username (optional)</label>
|
|
||||||
<input type="text" id="profile-proxy-username"
|
|
||||||
placeholder="username">
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="profile-proxy-password">Password (optional)</label>
|
|
||||||
<div class="password-input">
|
|
||||||
<input type="password" id="profile-proxy-password"
|
|
||||||
placeholder="••••••••">
|
|
||||||
<button type="button" class="toggle-password"
|
|
||||||
data-target="profile-proxy-password">
|
|
||||||
👁
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="form-actions">
|
<div class="form-group">
|
||||||
<button type="button" id="cancel-profile-form" class="btn btn-secondary">
|
<label for="domain-tags">Tags (optional)</label>
|
||||||
Cancel
|
<input
|
||||||
|
type="text"
|
||||||
|
id="domain-tags"
|
||||||
|
placeholder="work, personal, blocked"
|
||||||
|
/>
|
||||||
|
<small class="form-hint"
|
||||||
|
>Comma-separated tags for organization</small
|
||||||
|
>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group checkbox-group">
|
||||||
|
<label class="checkbox-label">
|
||||||
|
<input
|
||||||
|
type="checkbox"
|
||||||
|
id="proxy-enabled"
|
||||||
|
checked
|
||||||
|
/>
|
||||||
|
<span>Enable proxy for this domain</span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-actions">
|
||||||
|
<button
|
||||||
|
type="button"
|
||||||
|
id="cancel-form"
|
||||||
|
class="btn btn-secondary"
|
||||||
|
>
|
||||||
|
Cancel
|
||||||
|
</button>
|
||||||
|
<button
|
||||||
|
type="submit"
|
||||||
|
id="save-domain"
|
||||||
|
class="btn btn-primary"
|
||||||
|
>
|
||||||
|
Save Domain
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section
|
||||||
|
id="profile-form-section"
|
||||||
|
class="profile-form-section hidden"
|
||||||
|
>
|
||||||
|
<h2 id="profile-form-title">Add Profile</h2>
|
||||||
|
|
||||||
|
<form id="profile-form" class="profile-form">
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="profile-name-input"
|
||||||
|
>Profile Name *</label
|
||||||
|
>
|
||||||
|
<input
|
||||||
|
type="text"
|
||||||
|
id="profile-name-input"
|
||||||
|
placeholder="My Proxy Profile"
|
||||||
|
required
|
||||||
|
/>
|
||||||
|
<small class="form-hint"
|
||||||
|
>Enter a unique name for this profile</small
|
||||||
|
>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="profile-proxy-type">Proxy Type *</label>
|
||||||
|
<select id="profile-proxy-type" required>
|
||||||
|
<option value="http">HTTP</option>
|
||||||
|
<option value="socks">SOCKS5</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-row">
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="profile-proxy-host">Host *</label>
|
||||||
|
<input
|
||||||
|
type="text"
|
||||||
|
id="profile-proxy-host"
|
||||||
|
placeholder="proxy.example.com"
|
||||||
|
required
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="profile-proxy-port">Port *</label>
|
||||||
|
<input
|
||||||
|
type="number"
|
||||||
|
id="profile-proxy-port"
|
||||||
|
min="1"
|
||||||
|
max="65535"
|
||||||
|
placeholder="8080"
|
||||||
|
required
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-row">
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="profile-proxy-username"
|
||||||
|
>Username (optional)</label
|
||||||
|
>
|
||||||
|
<input
|
||||||
|
type="text"
|
||||||
|
id="profile-proxy-username"
|
||||||
|
placeholder="username"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="profile-proxy-password"
|
||||||
|
>Password (optional)</label
|
||||||
|
>
|
||||||
|
<div class="password-input">
|
||||||
|
<input
|
||||||
|
type="password"
|
||||||
|
id="profile-proxy-password"
|
||||||
|
placeholder="••••••••"
|
||||||
|
/>
|
||||||
|
<button
|
||||||
|
type="button"
|
||||||
|
class="toggle-password"
|
||||||
|
data-target="profile-proxy-password"
|
||||||
|
>
|
||||||
|
👁
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-actions">
|
||||||
|
<button
|
||||||
|
type="button"
|
||||||
|
id="cancel-profile-form"
|
||||||
|
class="btn btn-secondary"
|
||||||
|
>
|
||||||
|
Cancel
|
||||||
|
</button>
|
||||||
|
<button
|
||||||
|
type="submit"
|
||||||
|
id="save-profile"
|
||||||
|
class="btn btn-primary"
|
||||||
|
>
|
||||||
|
Save Profile
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</section>
|
||||||
|
<section class="advanced-settings-section">
|
||||||
|
<h2>Advanced Settings</h2>
|
||||||
|
<div class="form-group settings-row">
|
||||||
|
<label for="theme-select">Theme</label>
|
||||||
|
<select id="theme-select">
|
||||||
|
<option value="system">System</option>
|
||||||
|
<option value="light">Light</option>
|
||||||
|
<option value="dark">Dark</option>
|
||||||
|
</select>
|
||||||
|
<small class="form-hint"
|
||||||
|
>Choose light, dark, or follow your device
|
||||||
|
theme.</small
|
||||||
|
>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<section class="management-section">
|
||||||
|
<h2>Management</h2>
|
||||||
|
<div class="management-buttons">
|
||||||
|
<button id="clear-domains" class="btn btn-danger">
|
||||||
|
Clear All Domains
|
||||||
</button>
|
</button>
|
||||||
<button type="submit" id="save-profile" class="btn btn-primary">
|
<button id="clear-profiles" class="btn btn-danger">
|
||||||
Save Profile
|
Clear All Profiles
|
||||||
|
</button>
|
||||||
|
<button id="clear-all" class="btn btn-danger">
|
||||||
|
Clear Everything
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</section>
|
||||||
</section>
|
</main>
|
||||||
<section class="advanced-settings-section">
|
|
||||||
<h2>Advanced Settings</h2>
|
|
||||||
<div class="form-group settings-row">
|
|
||||||
<label for="theme-select">Theme</label>
|
|
||||||
<select id="theme-select">
|
|
||||||
<option value="system">System</option>
|
|
||||||
<option value="light">Light</option>
|
|
||||||
<option value="dark">Dark</option>
|
|
||||||
</select>
|
|
||||||
<small class="form-hint">Choose light, dark, or follow your device theme.</small>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
<section class="management-section">
|
|
||||||
<h2>Management</h2>
|
|
||||||
<div class="management-buttons">
|
|
||||||
<button id="clear-domains" class="btn btn-danger">
|
|
||||||
Clear All Domains
|
|
||||||
</button>
|
|
||||||
<button id="clear-profiles" class="btn btn-danger">
|
|
||||||
Clear All Profiles
|
|
||||||
</button>
|
|
||||||
<button id="clear-all" class="btn btn-danger">
|
|
||||||
Clear Everything
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
</main>
|
|
||||||
|
|
||||||
<footer>
|
<footer>
|
||||||
<div class="footer-content">
|
<div class="footer-content">
|
||||||
<p>Proxy Switcher v1.0.1</p>
|
<p>Proxy Switcher v20261009</p>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="browser-api.js"></script>
|
<script src="browser-api.js"></script>
|
||||||
<script src="options.js"></script>
|
<script src="options.js"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
Reference in new issue
Block a user