Re-implement prefilling instance and text
This commit is contained in:
parent
378351a5d8
commit
47c498ad2e
3 changed files with 11 additions and 74 deletions
71
lib/main.js
71
lib/main.js
|
@ -1,71 +0,0 @@
|
||||||
/*!
|
|
||||||
* @source: https://github.com/kytta/share2fedi/blob/main/lib/main.js
|
|
||||||
*
|
|
||||||
* @licstart The following is the entire license notice for the
|
|
||||||
* JavaScript code in this page.
|
|
||||||
*
|
|
||||||
* share2fedi - Instance-agnostic share page for the Fediverse.
|
|
||||||
* Copyright (C) 2020-2023 Nikita Karamov <me@kytta.dev>
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU Affero General Public License as published
|
|
||||||
* by the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU Affero General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Affero General Public License
|
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* @licend The above is the entire license notice
|
|
||||||
* for the JavaScript code in this page.
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
|
||||||
*/
|
|
||||||
|
|
||||||
const LOCAL_STORAGE_KEY = "recentInstances";
|
|
||||||
|
|
||||||
const $instance = document.querySelector("#instance");
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Adds missing "https://" and ending slash to the URL
|
|
||||||
*
|
|
||||||
* @param {string} url URL to normalize
|
|
||||||
* @return {string} normalized URL
|
|
||||||
*/
|
|
||||||
function normalizeUrl(url) {
|
|
||||||
if (!url.includes("http://") && !url.includes("https://")) {
|
|
||||||
url = "https://" + url;
|
|
||||||
}
|
|
||||||
if (url.at(-1) !== "/") {
|
|
||||||
url = url + "/";
|
|
||||||
}
|
|
||||||
return url;
|
|
||||||
}
|
|
||||||
|
|
||||||
function getRecentInstances() {
|
|
||||||
const storedValue = window.localStorage.getItem(LOCAL_STORAGE_KEY);
|
|
||||||
if (!storedValue) return [];
|
|
||||||
return JSON.parse(storedValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
let prefillInstance = getRecentInstances()[0];
|
|
||||||
|
|
||||||
const URLParameters = window.location.search.slice(1).split("&");
|
|
||||||
for (const URLParameter of URLParameters) {
|
|
||||||
const URLParameterPair = URLParameter.split("=");
|
|
||||||
if (URLParameterPair[0] === "text") {
|
|
||||||
document.querySelector("#text").value = decodeURIComponent(
|
|
||||||
URLParameterPair[1],
|
|
||||||
);
|
|
||||||
} else if (URLParameterPair[0] === "instance") {
|
|
||||||
prefillInstance = decodeURIComponent(URLParameterPair[1]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (prefillInstance != undefined) {
|
|
||||||
$instance.value = normalizeUrl(prefillInstance);
|
|
||||||
}
|
|
|
@ -7,6 +7,8 @@ try {
|
||||||
console.error("Couln't fetch instances:", error);
|
console.error("Couln't fetch instances:", error);
|
||||||
instances = [];
|
instances = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const { prefilledInstance } = Astro.props;
|
||||||
---
|
---
|
||||||
|
|
||||||
<datalist id="instanceDatalist">
|
<datalist id="instanceDatalist">
|
||||||
|
@ -24,6 +26,7 @@ try {
|
||||||
list="instanceDatalist"
|
list="instanceDatalist"
|
||||||
required
|
required
|
||||||
aria-describedby="https-label"
|
aria-describedby="https-label"
|
||||||
|
value={prefilledInstance}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</label>
|
</label>
|
||||||
|
@ -98,7 +101,7 @@ try {
|
||||||
}
|
}
|
||||||
|
|
||||||
const host = extractHost(instance);
|
const host = extractHost(instance);
|
||||||
if (index == 0) {
|
if (index == 0 && !$instance.value) {
|
||||||
$instance.value = host;
|
$instance.value = host;
|
||||||
}
|
}
|
||||||
const element = document.createElement("span");
|
const element = document.createElement("span");
|
||||||
|
|
|
@ -1,6 +1,10 @@
|
||||||
---
|
---
|
||||||
import InstanceSelect from "../components/instance-select.astro";
|
import InstanceSelect from "../components/instance-select.astro";
|
||||||
import "../styles/main.scss";
|
import "../styles/main.scss";
|
||||||
|
|
||||||
|
const searchParameters = new URL(Astro.request.url).searchParams;
|
||||||
|
const prefilledText = searchParameters.get("text");
|
||||||
|
const prefilledInstance = searchParameters.get("instance");
|
||||||
---
|
---
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
|
@ -103,10 +107,11 @@ import "../styles/main.scss";
|
||||||
rows="7"
|
rows="7"
|
||||||
placeholder="What's on your mind?"
|
placeholder="What's on your mind?"
|
||||||
required
|
required
|
||||||
></textarea>
|
>{prefilledText}</textarea
|
||||||
|
>
|
||||||
</label>
|
</label>
|
||||||
|
|
||||||
<InstanceSelect />
|
<InstanceSelect prefilledInstance={prefilledInstance} />
|
||||||
|
|
||||||
<input
|
<input
|
||||||
type="submit"
|
type="submit"
|
||||||
|
|
Reference in a new issue