117 lines
4.8 KiB
HTML
117 lines
4.8 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<title>vxTwitter - Preferences</title>
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<link rel="icon" href="/favicon.ico">
|
|
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
|
|
<script>
|
|
function savePreference(name, value) {
|
|
localStorage.setItem(name, value);
|
|
}
|
|
|
|
function loadPreference() {
|
|
/* Open Links in App */
|
|
var openlinksToggle = document.getElementById("openLinksCheckbox");
|
|
var openlinksPreference = localStorage.getItem("openLinksPreference");
|
|
openlinksToggle.checked = openlinksPreference === "true";
|
|
/* Nitter toggle */
|
|
document.getElementById("frontendToggle").checked = localStorage.getItem("frontendToggle") === "true";
|
|
}
|
|
|
|
function queryInstances() {
|
|
let instanceList = document.getElementById("instanceList");
|
|
fetch("https://status.d420.de/api/v1/instances")
|
|
.then(response => response.json())
|
|
.then(data => {
|
|
let i = 0;
|
|
for (const instance of data.hosts) {
|
|
if (instance.points > 0) {
|
|
let labelOpen = `<label for="instance${i}">`;
|
|
let labelClose = `</label>`;
|
|
let row = document.createElement("tr");
|
|
let input = document.createElement("td");
|
|
input.innerHTML = `${labelOpen} <input type="radio" name="instance" id="instance${i}" value="${instance.url}" onclick="savePreference('frontendUrl', this.value)"> ${labelClose}`;
|
|
let name = document.createElement("td");
|
|
name.innerHTML = `${labelOpen} ${instance.domain} ${labelClose}`
|
|
let health = document.createElement("td");
|
|
health.innerHTML = `${labelOpen} ${instance.healthy} ${labelClose}`;
|
|
let score = document.createElement("td");
|
|
score.innerHTML = `${labelOpen} ${instance.points} ${labelClose}`;
|
|
row.append(input, name, health, score);
|
|
instanceList.append(row);
|
|
i++;
|
|
}
|
|
}
|
|
document.getElementById("instancePicker").style.removeProperty("display");
|
|
})
|
|
}
|
|
</script>
|
|
<link rel="stylesheet" type="text/css" href="/style.css">
|
|
</head>
|
|
|
|
<body onload="loadPreference()">
|
|
<aside class="top">
|
|
<em> This is not an official X / Twitter website. </em>
|
|
</aside>
|
|
|
|
<header>
|
|
<a href="https://github.com/dylanpdx/BetterTwitFix" aria-label="Back">
|
|
<svg viewBox="0 0 24 24" aria-hidden="true" style="color: white"><path d="M7.414 13l5.043 5.04-1.414 1.42L3.586 12l7.457-7.46 1.414 1.42L7.414 11H21v2H7.414z"></path></svg>
|
|
</a>
|
|
<h1>vxTwitter Preferences</h1>
|
|
</header>
|
|
|
|
<main>
|
|
<section class="optiongroup" id="appSettings">
|
|
<h2 labels="appSettings"> App settings </h2>
|
|
<label for="openLinksCheckbox">
|
|
<div class="checkboxcontainer">
|
|
<input type="checkbox" id="openLinksCheckbox" onchange="savePreference('openLinksPreference', this.checked)">
|
|
<svg viewBox="0 0 20 20" aria-hidden="true"><path d="M9.64 18.952l-5.55-4.861 1.317-1.504 3.951 3.459 8.459-10.948L19.4 6.32 9.64 18.952z"></path></svg>
|
|
</div>
|
|
<h3> Open links in app </h3>
|
|
<p> When you open a link on this device, vxTwitter will try to redirect you to the official X (formerly Twitter) app instead of using your browser. </p>
|
|
</label>
|
|
</section>
|
|
|
|
<section class="optiongroup" id="frontendSettings">
|
|
<h2 labels="frontendSettings"> Frontend settings <em>(EXPERIMENTAL)</em> </h2>
|
|
<label for="frontendToggle">
|
|
<div class="checkboxcontainer">
|
|
<input type="checkbox" id="frontendToggle" onchange="savePreference('frontendToggle', this.checked)">
|
|
<svg viewBox="0 0 20 20" aria-hidden="true"><path d="M9.64 18.952l-5.55-4.861 1.317-1.504 3.951 3.459 8.459-10.948L19.4 6.32 9.64 18.952z"></path></svg>
|
|
</div>
|
|
<h3> Redirect to Nitter </h3>
|
|
<p> When you open a link on this browser, vxTwitter will redirect you to your chosen Nitter instance instead of X / Twitter </p>
|
|
</label>
|
|
<label for="instanceSearch">
|
|
<button onclick="queryInstances()" id="instanceSearch"> Search </button>
|
|
<h3> Search for Nitter instances </h3>
|
|
<p> Use the <a href="https://status.d420.de/about" target="_blank">Nitter health tracker API</a> to query available instances. </p>
|
|
</label>
|
|
<label id="instancePicker" style="display: none;">
|
|
<h3> Choose a Nitter instance </h3>
|
|
<p> Choose which instance to use for redirection. You can only pick one instance, and Nitter is currently <a href="https://status.d420.de/rip" target="_blank">almost dead</a>, so the instance with the highest score is probably your best bet. </p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th scope="col"> Selected </th>
|
|
<th scope="col"> Instance </th>
|
|
<th scope="col"> Healthy </th>
|
|
<th scope="col"> Score </th>
|
|
</tr>
|
|
</thead>
|
|
<tbody id="instanceList">
|
|
<!-- queryInstances() appends instance data here -->
|
|
</tbody>
|
|
</table>
|
|
</label>
|
|
</main>
|
|
|
|
<aside class="bottom">
|
|
<em> This is not an official X / Twitter website. </em>
|
|
</aside>
|
|
</body>
|
|
</html>
|