ENERGIZE!
This commit is contained in:
commit
4875e09740
18
LICENSE
Normal file
18
LICENSE
Normal file
|
@ -0,0 +1,18 @@
|
|||
Copyright (C) 2022 smpl <smpl@slamkode.ml>
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would
|
||||
be appreciated but is not required.
|
||||
2. Altered source versions must be plainly marked as such, and must not
|
||||
be misrepresented as being the original software.
|
||||
3. This notice may not be removed or altered from any source
|
||||
distribution.
|
70
README
Normal file
70
README
Normal file
|
@ -0,0 +1,70 @@
|
|||
Preparing the HTML embed
|
||||
------------------------
|
||||
If your handle on mastodon is @superman@fortitude.fortress the remote
|
||||
follow portal page is this:
|
||||
|
||||
https://fortitude.fortress/users/superman/remote_follow
|
||||
|
||||
In the following HTML snippet to embed on your site replace {uri} with
|
||||
your remote_follow link corresponding to what was just explained.
|
||||
|
||||
<div style="display: inline-block; position: relative;">
|
||||
<a href="{uri}">
|
||||
<img id="mastodonfollow" onclick="mastodon_follow_show()" style="height: 32px;" src="{icon}"/>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
Next decide on the icon you want to use:
|
||||
mastodon-follow-dark-da.svg
|
||||
mastodon-follow-dark-en.svg
|
||||
mastodon-follow-dark.svg
|
||||
mastodon-follow-light-da.svg
|
||||
mastodon-follow-light-en.svg
|
||||
mastodon-follow-light.svg
|
||||
|
||||
This is the icon you upload to somewhere on your site. Replace {icon}
|
||||
with the path to your icon in the above HTML snippet.
|
||||
|
||||
You can adjust the image size in the style attribute as appropriate for
|
||||
your site.
|
||||
|
||||
Insert the HTML snippet in the place where you want the button on your
|
||||
page.
|
||||
|
||||
I have prepared variants of the script to match the icons. Pick the
|
||||
appropriate one and upload it to your site. Replace {script} in the
|
||||
snippet below and insert it in the <head></head> of your website.
|
||||
|
||||
<script src="{script}" type="text/javascript"></script>
|
||||
|
||||
IMPORTANT: Remember to change the account and portal settings to point
|
||||
to your mastodon account.
|
||||
|
||||
You can change the link that "Create account" points to in the
|
||||
create_url setting and easily translate the strings to other languages.
|
||||
|
||||
Implementation notes
|
||||
--------------------
|
||||
The script reserves the following globals:
|
||||
|
||||
HTML/CSS:
|
||||
#mastodonfollow
|
||||
input[name="mastodon-handle"]
|
||||
.mastodon-follow-container
|
||||
.mastodon-follow-title
|
||||
.mastodon-follow-input
|
||||
.mastodon-follow-button
|
||||
JS:
|
||||
var mastodon_follow_settings
|
||||
var mastodon_follow_strings
|
||||
var mastodon_follow_container
|
||||
function mastodon_follow_create_style
|
||||
function mastodon_follow_go
|
||||
function mastodon_follow_lookup
|
||||
function mastodon_follow_show
|
||||
|
||||
Bugs
|
||||
----
|
||||
Report bugs to smpl@slamkode.ml
|
||||
|
||||
License: Zlib
|
210
mastodon-follow-dark-da.js
Normal file
210
mastodon-follow-dark-da.js
Normal file
|
@ -0,0 +1,210 @@
|
|||
/* SPDX-License-Identifier: Zlib
|
||||
Copyright (C) 2022 smpl <smpl@slamkode.ml> */
|
||||
|
||||
var mastodon_follow_settings = {
|
||||
"account": "superman@fortitude.fortress",
|
||||
"portal": "https://fortitude.fortress/users/superman/remote_follow",
|
||||
"dialog": {
|
||||
"width": "256px",
|
||||
"background": "#282c37",
|
||||
"color": "#9baec8",
|
||||
"title": "#fff",
|
||||
"input": {
|
||||
"bordercolor": "#0a0b0e",
|
||||
"background": "#131419",
|
||||
"color": "#fff",
|
||||
"placeholder": "#c83737"
|
||||
},
|
||||
"button": {
|
||||
"background": "#2b90d9",
|
||||
"color": "#fff"
|
||||
}
|
||||
}
|
||||
};
|
||||
var mastodon_follow_strings =
|
||||
{
|
||||
"title": "Tast dit Mastodon id",
|
||||
"button": "Følg",
|
||||
"create": "Opret konto",
|
||||
"create_url": "https://joinmastodon.org/communities",
|
||||
"error": { "handle": "Forkert id" }
|
||||
};
|
||||
|
||||
var mastodon_follow_container = null;
|
||||
|
||||
/* Remove nojs fallback link, when JS enabled. */
|
||||
window.addEventListener("load", function(e) {
|
||||
mastodonfollow.style.cursor = "pointer";
|
||||
var a = mastodonfollow.parentNode;
|
||||
var c = a.parentNode;
|
||||
c.appendChild(mastodonfollow);
|
||||
a.remove();
|
||||
});
|
||||
|
||||
function mastodon_follow_create_style()
|
||||
{
|
||||
var style = document.createElement('style');
|
||||
var d = mastodon_follow_settings.dialog;
|
||||
style.innerHTML =
|
||||
".mastodon-follow-container {" +
|
||||
"display: block;" +
|
||||
"z-index: 1;" +
|
||||
"border: 0;" +
|
||||
"border-radius: 5px;" +
|
||||
"background: " + d.background + ";" +
|
||||
"position: absolute;" +
|
||||
"top:110%;" +
|
||||
"left: 0;" +
|
||||
"width: " + d.width + ";" +
|
||||
'font-family: "Roboto",Roboto,sans-serif;' +
|
||||
"margin: 0 auto;" +
|
||||
"padding: 20px;" +
|
||||
"font-weight: 400;" +
|
||||
"font-size: 13px;" +
|
||||
"color: " + d.color + ";" +
|
||||
"line-height: 18px;" +
|
||||
"}" +
|
||||
".mastodon-follow-title {" +
|
||||
"text-align: center;" +
|
||||
"font-size: 18px;" +
|
||||
"font-weight: 500;" +
|
||||
"margin: 0;" +
|
||||
"color: " + d.title + ";" +
|
||||
"}" +
|
||||
".mastodon-follow-input {" +
|
||||
"border: 0;" +
|
||||
"border-radius: 4px;" +
|
||||
"margin-top: 20px;" +
|
||||
"padding: 10px;" +
|
||||
"background: " + d.input.background + ";" +
|
||||
"width: 100%;" +
|
||||
"box-sizing: border-box;" +
|
||||
"font-family: inherit;" +
|
||||
"font-weight: 500;" +
|
||||
"font-size: 18px;" +
|
||||
"color: " + d.input.color + ";" +
|
||||
"}" +
|
||||
".mastodon-follow-input::placeholder {" +
|
||||
"color: " + d.input.placeholder + ";" +
|
||||
"}" +
|
||||
".mastodon-follow-button {" +
|
||||
"display: block;" +
|
||||
"width: 100%;" +
|
||||
"border: 0;" +
|
||||
"border-radius: 4px;" +
|
||||
"margin-right: 10px;" +
|
||||
"margin-top: 20px;" +
|
||||
"padding: 10px;" +
|
||||
"background: " + d.button.background + ";" +
|
||||
"font-family: inherit;" +
|
||||
"font-weight: 500;" +
|
||||
"font-size: 18px;" +
|
||||
"color: " + d.button.color + ";" +
|
||||
"line-height: inherit;" +
|
||||
"text-align: center;" +
|
||||
"text-transform: uppercase;" +
|
||||
"box-sizing: border-box;" +
|
||||
"cursor: pointer;" +
|
||||
"}";
|
||||
document.head.appendChild(style);
|
||||
}
|
||||
|
||||
/* Called when request to instance is complete.
|
||||
* Parse the JSON response and find the subscribe uri.
|
||||
* On error goes to the instances remote_follow url. */
|
||||
function mastodon_follow_go(event)
|
||||
{
|
||||
var data;
|
||||
|
||||
if (this.readyState === this.DONE) {
|
||||
if (this.status === 200) {
|
||||
try {
|
||||
data = JSON.parse(this.responseText);
|
||||
} catch {
|
||||
window.location = mastodon_follow_settings.portal;
|
||||
return;
|
||||
}
|
||||
|
||||
data.links.forEach( function(e) {
|
||||
if(e.rel === "http://ostatus.org/schema/1.0/subscribe") {
|
||||
window.location = e.template.replace('{uri}', encodeURIComponent(mastodon_follow_settings.account));
|
||||
return;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
window.location = mastodon_follow_settings.portal;
|
||||
return;
|
||||
}
|
||||
|
||||
/* Called when user click on follow button in dialog.
|
||||
* Grab the mastodon handle from the input field and request the
|
||||
* appropriate webfinger document from the users instance.
|
||||
* Response is handled by mastodon_follow_go(). */
|
||||
function mastodon_follow_lookup(event)
|
||||
{
|
||||
var handle_element = document.querySelector('input[name="mastodon-handle"]');
|
||||
var handle = handle_element.value;
|
||||
|
||||
// remove any initial @
|
||||
if(handle.charAt(0) == '@') {
|
||||
handle = handle.substring(1);
|
||||
}
|
||||
|
||||
// split into nick and host
|
||||
var uriparts = handle.split('@');
|
||||
if(uriparts.length < 2) {
|
||||
handle_element.value = '';
|
||||
handle_element.setAttribute('placeholder', mastodon_follow_strings.error.handle);
|
||||
return;
|
||||
}
|
||||
|
||||
var oReq = new XMLHttpRequest();
|
||||
oReq.addEventListener("load", mastodon_follow_go);
|
||||
oReq.open("GET", "https://" + uriparts[1] + "/.well-known/webfinger?resource=acct:" + encodeURIComponent(handle));
|
||||
oReq.send();
|
||||
}
|
||||
|
||||
/* Activated when icon is clicked.
|
||||
* Create the follow dialog on first run, toggle visibility on further
|
||||
* clicks. */
|
||||
function mastodon_follow_show()
|
||||
{
|
||||
if(!mastodon_follow_container) {
|
||||
mastodon_follow_create_style();
|
||||
|
||||
mastodon_follow_container = document.createElement('div');
|
||||
mastodon_follow_container.setAttribute('class', 'mastodon-follow-container');
|
||||
|
||||
var mastodon_title = document.createElement('p');
|
||||
mastodon_title.setAttribute('class', 'mastodon-follow-title');
|
||||
mastodon_title.innerHTML = mastodon_follow_strings.title;
|
||||
|
||||
var mastodon_follow_handle = document.createElement('input');
|
||||
mastodon_follow_handle.setAttribute('name', 'mastodon-handle');
|
||||
mastodon_follow_handle.setAttribute('type', 'text');
|
||||
mastodon_follow_handle.setAttribute('class', 'mastodon-follow-input');
|
||||
|
||||
var mastodon_follow_follow = document.createElement('button');
|
||||
mastodon_follow_follow.innerHTML = mastodon_follow_strings.button;
|
||||
mastodon_follow_follow.setAttribute('class', 'mastodon-follow-button');
|
||||
mastodon_follow_follow.addEventListener('click', mastodon_follow_lookup);
|
||||
|
||||
var createaccount = document.createElement('div');
|
||||
createaccount.style = "text-align: right;";
|
||||
var createaccount_a = document.createElement('a');
|
||||
createaccount_a.setAttribute('href', mastodon_follow_strings.create_url);
|
||||
createaccount_a.innerHTML = mastodon_follow_strings.create;
|
||||
createaccount.appendChild(createaccount_a);
|
||||
|
||||
mastodon_follow_container.appendChild(mastodon_title);
|
||||
mastodon_follow_container.appendChild(mastodon_follow_handle);
|
||||
mastodon_follow_container.appendChild(mastodon_follow_follow);
|
||||
mastodon_follow_container.appendChild(createaccount);
|
||||
|
||||
mastodonfollow.parentElement.appendChild(mastodon_follow_container);
|
||||
} else {
|
||||
mastodon_follow_container.style.display =
|
||||
mastodon_follow_container.style.display == "none" ? "block" : "none";
|
||||
}
|
||||
}
|
33
mastodon-follow-dark-da.svg
Normal file
33
mastodon-follow-dark-da.svg
Normal file
|
@ -0,0 +1,33 @@
|
|||
<?xml version="1.0" standalone="no"?>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
version="1.1"
|
||||
height="45.014904mm"
|
||||
width="85.691597mm"
|
||||
viewBox="0 0 85.691597 45.014904">
|
||||
<rect
|
||||
ry="5.9620543"
|
||||
y="1.0440584"
|
||||
x="1.0440561"
|
||||
height="42.926792"
|
||||
width="83.603485"
|
||||
style="fill:#282c37;stroke:#1b1d25;stroke-width:2.08811116;" />
|
||||
<path
|
||||
d="m 36.173854,25.50178 c -0.412679,2.12307 -3.696111,4.44656 -7.467135,4.89685 -1.966427,0.23464 -3.902531,0.4503 -5.96706,0.3556 -3.376344,-0.15469 -6.040514,-0.80589 -6.040514,-0.80589 0,0.32868 0.02027,0.64164 0.06081,0.93432 0.438947,3.33208 3.304025,3.53169 6.017975,3.62476 2.739247,0.0937 5.178349,-0.67536 5.178349,-0.67536 l 0.112534,2.47639 c 0,0 -1.915997,1.02886 -5.329151,1.2181 -1.882107,0.10345 -4.219053,-0.0474 -6.940949,-0.7678 -5.903334,-1.5625 -6.918572,-7.85516 -7.073914,-14.24009 -0.04735,-1.89573 -0.01816,-3.6833 -0.01816,-5.17835 0,-6.52892 4.277753,-8.44265 4.277753,-8.44265 2.156956,-0.99058 5.858093,-1.40716 9.705815,-1.43862 h 0.09453 c 3.847723,0.0315 7.551293,0.44804 9.708087,1.43862 0,0 4.27759,1.91373 4.27759,8.44265 0,0 0.05367,4.81707 -0.59656,8.16147"
|
||||
style="fill:#3088d4;" />
|
||||
<path
|
||||
d="m 31.724706,17.84681 v 7.90543 h -3.131981 v -7.67307 c 0,-1.61747 -0.680555,-2.43845 -2.041827,-2.43845 -1.505102,0 -2.259437,0.97389 -2.259437,2.89962 v 4.19991 h -3.113495 v -4.19991 c 0,-1.92573 -0.754497,-2.89962 -2.259599,-2.89962 -1.361272,0 -2.041827,0.82098 -2.041827,2.43845 v 7.67307 h -3.131981 v -7.90543 c 0,-1.61569 0.411381,-2.89962 1.237712,-3.84951 0.852113,-0.94989 1.968048,-1.43683 3.353319,-1.43683 1.602719,0 2.816432,0.61602 3.618925,1.84822 l 0.780117,1.30776 0.780279,-1.30776 c 0.802332,-1.2322 2.016046,-1.84822 3.618926,-1.84822 1.385109,0 2.501044,0.48694 3.353319,1.43683 0.826168,0.94989 1.23755,2.23382 1.23755,3.84951"
|
||||
style="fill:#ffffff;" />
|
||||
<g style="fill:#3088d4;">
|
||||
<path
|
||||
d="m 69.506087,14.94682 c 2.06847,0 3.74388,-1.67538 3.74388,-3.74388 0,-2.06851 -1.67541,-3.74389 -3.74388,-3.74389 -2.0685,0 -3.74388,1.67538 -3.74388,3.74389 0,2.0685 1.67538,3.74388 3.74388,3.74388 z m -8.42376,-1.87193 v -2.80792 h -1.87197 v 2.80792 h -2.80792 v 1.87193 h 2.80792 v 2.80792 h 1.87197 v -2.80792 h 2.80792 v -1.87193 z m 8.42376,3.74389 c -2.49906,0 -7.48781,1.2542 -7.48781,3.74389 v 1.87196 h 14.97558 v -1.87196 c 0,-2.48969 -4.98874,-3.74389 -7.48777,-3.74389 z" />
|
||||
<path
|
||||
d="M 40.703998,36.83326 V 25.75843 h 7.408579 v 2.06132 h -4.738753 v 2.54812 h 4.305193 v 2.05371 h -4.305193 v 4.41168 z" />
|
||||
<path
|
||||
d="m 53.847757,36.98539 q -1.22462,0 -2.22105,-0.49441 l -0.60851,1.06488 h -1.58212 l 1.0725,-1.86355 q -1.51367,-1.51366 -1.51367,-4.23673 v -0.38032 q 0,-2.54052 1.34633,-4.00094 1.35393,-1.46802 3.49131,-1.46802 1.2018,0 2.19063,0.48681 l 0.46398,-0.80628 h 1.57452 l -0.92037,1.59734 q 1.54408,1.51366 1.54408,4.26715 v 0.37271 q 0,2.54052 -1.36153,4.00094 -1.35393,1.46042 -3.4761,1.46042 z m -2.13738,-5.46136 q 0,1.00404 0.20537,1.71904 l 2.9969,-5.21795 q -0.45638,-0.32708 -1.0801,-0.32708 -1.99286,0 -2.11456,2.96648 z m 4.25955,-0.46398 q 0,-1.01925 -0.22058,-1.74946 l -3.01211,5.25598 q 0.45638,0.33468 1.11052,0.33468 1.01165,0 1.5593,-0.85952 0.55527,-0.86712 0.56287,-2.47206 z" />
|
||||
<path
|
||||
d="m 67.280557,34.77955 v 2.05371 h -7.3173 V 25.75843 h 2.66983 v 9.02112 z" />
|
||||
<path
|
||||
d="m 76.993857,30.91553 v 4.54859 q -0.42595,0.47159 -1.52127,0.99643 -1.09531,0.52484 -2.8828,0.52484 -2.20584,0 -3.54456,-1.39196 -1.33111,-1.39957 -1.33111,-3.98572 v -0.61612 q 0,-2.58616 1.33111,-3.98572 1.33111,-1.40718 3.40004,-1.40718 2.28951,0 3.33158,1.05729 1.04207,1.05728 1.20941,2.71546 h -2.56334 q -0.1217,-0.82148 -0.54005,-1.27026 -0.41835,-0.44877 -1.34632,-0.44877 -0.9584,0 -1.52888,0.81387 -0.57047,0.81388 -0.57808,2.46446 v 0.67697 q 0,1.66578 0.58569,2.49488 0.59329,0.82909 1.76467,0.82909 1.03446,0 1.54409,-0.46399 v -1.71903 h -1.85595 v -1.83313 z" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 3.8 KiB |
210
mastodon-follow-dark-en.js
Normal file
210
mastodon-follow-dark-en.js
Normal file
|
@ -0,0 +1,210 @@
|
|||
/* SPDX-License-Identifier: Zlib
|
||||
Copyright (C) 2022 smpl <smpl@slamkode.ml> */
|
||||
|
||||
var mastodon_follow_settings = {
|
||||
"account": "superman@fortitude.fortress",
|
||||
"portal": "https://fortitude.fortress/users/superman/remote_follow",
|
||||
"dialog": {
|
||||
"width": "256px",
|
||||
"background": "#282c37",
|
||||
"color": "#9baec8",
|
||||
"title": "#fff",
|
||||
"input": {
|
||||
"bordercolor": "#0a0b0e",
|
||||
"background": "#131419",
|
||||
"color": "#fff",
|
||||
"placeholder": "#c83737"
|
||||
},
|
||||
"button": {
|
||||
"background": "#2b90d9",
|
||||
"color": "#fff"
|
||||
}
|
||||
}
|
||||
};
|
||||
var mastodon_follow_strings =
|
||||
{
|
||||
"title": "Enter your Mastodon handle",
|
||||
"button": "Follow",
|
||||
"create": "Create account",
|
||||
"create_url": "https://joinmastodon.org/communities",
|
||||
"error": { "handle": "Invalid handle" }
|
||||
};
|
||||
|
||||
var mastodon_follow_container = null;
|
||||
|
||||
/* Remove nojs fallback link, when JS enabled. */
|
||||
window.addEventListener("load", function(e) {
|
||||
mastodonfollow.style.cursor = "pointer";
|
||||
var a = mastodonfollow.parentNode;
|
||||
var c = a.parentNode;
|
||||
c.appendChild(mastodonfollow);
|
||||
a.remove();
|
||||
});
|
||||
|
||||
function mastodon_follow_create_style()
|
||||
{
|
||||
var style = document.createElement('style');
|
||||
var d = mastodon_follow_settings.dialog;
|
||||
style.innerHTML =
|
||||
".mastodon-follow-container {" +
|
||||
"display: block;" +
|
||||
"z-index: 1;" +
|
||||
"border: 0;" +
|
||||
"border-radius: 5px;" +
|
||||
"background: " + d.background + ";" +
|
||||
"position: absolute;" +
|
||||
"top:110%;" +
|
||||
"left: 0;" +
|
||||
"width: " + d.width + ";" +
|
||||
'font-family: "Roboto",Roboto,sans-serif;' +
|
||||
"margin: 0 auto;" +
|
||||
"padding: 20px;" +
|
||||
"font-weight: 400;" +
|
||||
"font-size: 13px;" +
|
||||
"color: " + d.color + ";" +
|
||||
"line-height: 18px;" +
|
||||
"}" +
|
||||
".mastodon-follow-title {" +
|
||||
"text-align: center;" +
|
||||
"font-size: 18px;" +
|
||||
"font-weight: 500;" +
|
||||
"margin: 0;" +
|
||||
"color: " + d.title + ";" +
|
||||
"}" +
|
||||
".mastodon-follow-input {" +
|
||||
"border: 0;" +
|
||||
"border-radius: 4px;" +
|
||||
"margin-top: 20px;" +
|
||||
"padding: 10px;" +
|
||||
"background: " + d.input.background + ";" +
|
||||
"width: 100%;" +
|
||||
"box-sizing: border-box;" +
|
||||
"font-family: inherit;" +
|
||||
"font-weight: 500;" +
|
||||
"font-size: 18px;" +
|
||||
"color: " + d.input.color + ";" +
|
||||
"}" +
|
||||
".mastodon-follow-input::placeholder {" +
|
||||
"color: " + d.input.placeholder + ";" +
|
||||
"}" +
|
||||
".mastodon-follow-button {" +
|
||||
"display: block;" +
|
||||
"width: 100%;" +
|
||||
"border: 0;" +
|
||||
"border-radius: 4px;" +
|
||||
"margin-right: 10px;" +
|
||||
"margin-top: 20px;" +
|
||||
"padding: 10px;" +
|
||||
"background: " + d.button.background + ";" +
|
||||
"font-family: inherit;" +
|
||||
"font-weight: 500;" +
|
||||
"font-size: 18px;" +
|
||||
"color: " + d.button.color + ";" +
|
||||
"line-height: inherit;" +
|
||||
"text-align: center;" +
|
||||
"text-transform: uppercase;" +
|
||||
"box-sizing: border-box;" +
|
||||
"cursor: pointer;" +
|
||||
"}";
|
||||
document.head.appendChild(style);
|
||||
}
|
||||
|
||||
/* Called when request to instance is complete.
|
||||
* Parse the JSON response and find the subscribe uri.
|
||||
* On error goes to the instances remote_follow url. */
|
||||
function mastodon_follow_go(event)
|
||||
{
|
||||
var data;
|
||||
|
||||
if (this.readyState === this.DONE) {
|
||||
if (this.status === 200) {
|
||||
try {
|
||||
data = JSON.parse(this.responseText);
|
||||
} catch {
|
||||
window.location = mastodon_follow_settings.portal;
|
||||
return;
|
||||
}
|
||||
|
||||
data.links.forEach( function(e) {
|
||||
if(e.rel === "http://ostatus.org/schema/1.0/subscribe") {
|
||||
window.location = e.template.replace('{uri}', encodeURIComponent(mastodon_follow_settings.account));
|
||||
return;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
window.location = mastodon_follow_settings.portal;
|
||||
return;
|
||||
}
|
||||
|
||||
/* Called when user click on follow button in dialog.
|
||||
* Grab the mastodon handle from the input field and request the
|
||||
* appropriate webfinger document from the users instance.
|
||||
* Response is handled by mastodon_follow_go(). */
|
||||
function mastodon_follow_lookup(event)
|
||||
{
|
||||
var handle_element = document.querySelector('input[name="mastodon-handle"]');
|
||||
var handle = handle_element.value;
|
||||
|
||||
// remove any initial @
|
||||
if(handle.charAt(0) == '@') {
|
||||
handle = handle.substring(1);
|
||||
}
|
||||
|
||||
// split into nick and host
|
||||
var uriparts = handle.split('@');
|
||||
if(uriparts.length < 2) {
|
||||
handle_element.value = '';
|
||||
handle_element.setAttribute('placeholder', mastodon_follow_strings.error.handle);
|
||||
return;
|
||||
}
|
||||
|
||||
var oReq = new XMLHttpRequest();
|
||||
oReq.addEventListener("load", mastodon_follow_go);
|
||||
oReq.open("GET", "https://" + uriparts[1] + "/.well-known/webfinger?resource=acct:" + encodeURIComponent(handle));
|
||||
oReq.send();
|
||||
}
|
||||
|
||||
/* Activated when icon is clicked.
|
||||
* Create the follow dialog on first run, toggle visibility on further
|
||||
* clicks. */
|
||||
function mastodon_follow_show()
|
||||
{
|
||||
if(!mastodon_follow_container) {
|
||||
mastodon_follow_create_style();
|
||||
|
||||
mastodon_follow_container = document.createElement('div');
|
||||
mastodon_follow_container.setAttribute('class', 'mastodon-follow-container');
|
||||
|
||||
var mastodon_title = document.createElement('p');
|
||||
mastodon_title.setAttribute('class', 'mastodon-follow-title');
|
||||
mastodon_title.innerHTML = mastodon_follow_strings.title;
|
||||
|
||||
var mastodon_follow_handle = document.createElement('input');
|
||||
mastodon_follow_handle.setAttribute('name', 'mastodon-handle');
|
||||
mastodon_follow_handle.setAttribute('type', 'text');
|
||||
mastodon_follow_handle.setAttribute('class', 'mastodon-follow-input');
|
||||
|
||||
var mastodon_follow_follow = document.createElement('button');
|
||||
mastodon_follow_follow.innerHTML = mastodon_follow_strings.button;
|
||||
mastodon_follow_follow.setAttribute('class', 'mastodon-follow-button');
|
||||
mastodon_follow_follow.addEventListener('click', mastodon_follow_lookup);
|
||||
|
||||
var createaccount = document.createElement('div');
|
||||
createaccount.style = "text-align: right;";
|
||||
var createaccount_a = document.createElement('a');
|
||||
createaccount_a.setAttribute('href', mastodon_follow_strings.create_url);
|
||||
createaccount_a.innerHTML = mastodon_follow_strings.create;
|
||||
createaccount.appendChild(createaccount_a);
|
||||
|
||||
mastodon_follow_container.appendChild(mastodon_title);
|
||||
mastodon_follow_container.appendChild(mastodon_follow_handle);
|
||||
mastodon_follow_container.appendChild(mastodon_follow_follow);
|
||||
mastodon_follow_container.appendChild(createaccount);
|
||||
|
||||
mastodonfollow.parentElement.appendChild(mastodon_follow_container);
|
||||
} else {
|
||||
mastodon_follow_container.style.display =
|
||||
mastodon_follow_container.style.display == "none" ? "block" : "none";
|
||||
}
|
||||
}
|
37
mastodon-follow-dark-en.svg
Normal file
37
mastodon-follow-dark-en.svg
Normal file
|
@ -0,0 +1,37 @@
|
|||
<?xml version="1.0" standalone="no"?>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
version="1.1"
|
||||
viewBox="0 0 85.691597 45.014904"
|
||||
height="45.014904mm"
|
||||
width="85.691597mm">
|
||||
<rect
|
||||
ry="5.9620543"
|
||||
y="1.0440584"
|
||||
x="1.0440561"
|
||||
height="42.926792"
|
||||
width="83.603485"
|
||||
style="fill:#282c37;stroke:#1b1d25;stroke-width:2.08811116;" />
|
||||
<path
|
||||
d="m 36.173854,25.50178 c -0.412679,2.12307 -3.696111,4.44656 -7.467135,4.89685 -1.966427,0.23464 -3.902531,0.4503 -5.96706,0.3556 -3.376344,-0.15469 -6.040514,-0.80589 -6.040514,-0.80589 0,0.32868 0.02027,0.64164 0.06081,0.93432 0.438947,3.33208 3.304025,3.53169 6.017975,3.62476 2.739247,0.0937 5.178349,-0.67536 5.178349,-0.67536 l 0.112534,2.47639 c 0,0 -1.915997,1.02886 -5.329151,1.2181 -1.882107,0.10345 -4.219053,-0.0474 -6.940949,-0.7678 -5.903334,-1.5625 -6.918572,-7.85516 -7.073914,-14.24009 -0.04735,-1.89573 -0.01816,-3.6833 -0.01816,-5.17835 0,-6.52892 4.277753,-8.44265 4.277753,-8.44265 2.156956,-0.99058 5.858093,-1.40716 9.705815,-1.43862 h 0.09453 c 3.847723,0.0315 7.551293,0.44804 9.708087,1.43862 0,0 4.27759,1.91373 4.27759,8.44265 0,0 0.05367,4.81707 -0.59656,8.16147"
|
||||
style="fill:#3088d4;" />
|
||||
<path
|
||||
d="m 31.724706,17.84681 v 7.90543 h -3.131981 v -7.67307 c 0,-1.61747 -0.680555,-2.43845 -2.041827,-2.43845 -1.505102,0 -2.259437,0.97389 -2.259437,2.89962 v 4.19991 h -3.113495 v -4.19991 c 0,-1.92573 -0.754497,-2.89962 -2.259599,-2.89962 -1.361272,0 -2.041827,0.82098 -2.041827,2.43845 v 7.67307 h -3.131981 v -7.90543 c 0,-1.61569 0.411381,-2.89962 1.237712,-3.84951 0.852113,-0.94989 1.968048,-1.43683 3.353319,-1.43683 1.602719,0 2.816432,0.61602 3.618925,1.84822 l 0.780117,1.30776 0.780279,-1.30776 c 0.802332,-1.2322 2.016046,-1.84822 3.618926,-1.84822 1.385109,0 2.501044,0.48694 3.353319,1.43683 0.826168,0.94989 1.23755,2.23382 1.23755,3.84951"
|
||||
style="fill:#ffffff;" />
|
||||
<g style="fill:#3088d4;">
|
||||
<path
|
||||
d="m 69.506087,14.94682 c 2.06847,0 3.74388,-1.67538 3.74388,-3.74388 0,-2.06851 -1.67541,-3.74389 -3.74388,-3.74389 -2.0685,0 -3.74388,1.67538 -3.74388,3.74389 0,2.0685 1.67538,3.74388 3.74388,3.74388 z m -8.42376,-1.87193 v -2.80792 h -1.87197 v 2.80792 h -2.80792 v 1.87193 h 2.80792 v 2.80792 h 1.87197 v -2.80792 h 2.80792 v -1.87193 z m 8.42376,3.74389 c -2.49906,0 -7.48781,1.2542 -7.48781,3.74389 v 1.87196 h 14.97558 v -1.87196 c 0,-2.48969 -4.98874,-3.74389 -7.48777,-3.74389 z" />
|
||||
<path
|
||||
d="m 38.77358,37.45718 v -7.18419 h 4.805906 v 1.33717 h -3.074004 v 1.65295 h 2.792754 v 1.33224 h -2.792754 v 2.86183 z" />
|
||||
<path
|
||||
d="m 50.378807,34.01311 q 0,1.64802 -0.87829,2.59539 -0.87828,0.94736 -2.25492,0.94736 -1.386512,0 -2.269734,-0.94736 -0.878287,-0.94737 -0.878287,-2.59539 v -0.29112 q 0,-1.64802 0.873353,-2.59538 0.878287,-0.9523 2.264798,-0.9523 1.37664,0 2.25986,0.9523 0.88322,0.94736 0.88322,2.59538 z m -1.75657,-0.30098 q 0,-1.08553 -0.3454,-1.63322 -0.34539,-0.5477 -1.04111,-0.5477 -1.292761,0 -1.371708,1.92434 l -0.0049,0.55756 q 0,1.05592 0.345398,1.62335 0.35032,0.56743 1.04111,0.56743 0.65625,0 1.01151,-0.55756 0.3602,-0.5625 0.36513,-1.60361 z" />
|
||||
<path
|
||||
d="m 56.013657,36.12495 v 1.33223 h -4.74669 v -7.18419 h 1.7319 v 5.85196 z" />
|
||||
<path
|
||||
d="m 61.500487,36.12495 v 1.33223 h -4.7467 v -7.18419 h 1.7319 v 5.85196 z" />
|
||||
<path
|
||||
d="m 68.003757,34.01311 q 0,1.64802 -0.87829,2.59539 -0.87829,0.94736 -2.25493,0.94736 -1.38651,0 -2.26973,-0.94736 -0.87828,-0.94737 -0.87828,-2.59539 v -0.29112 q 0,-1.64802 0.87335,-2.59538 0.87828,-0.9523 2.26479,-0.9523 1.37664,0 2.25987,0.9523 0.88322,0.94736 0.88322,2.59538 z m -1.75658,-0.30098 q 0,-1.08553 -0.34539,-1.63322 -0.34539,-0.5477 -1.04112,-0.5477 -1.29276,0 -1.3717,1.92434 l -0.005,0.55756 q 0,1.05592 0.34539,1.62335 0.35033,0.56743 1.04112,0.56743 0.65625,0 1.01151,-0.55756 0.36019,-0.5625 0.36513,-1.60361 z" />
|
||||
<path
|
||||
d="m 76.993857,30.27299 -1.52466,7.18419 h -1.79112 l -0.96217,-4.09538 -0.94243,4.09538 h -1.79604 l -1.52467,-7.18419 h 1.7171 l 0.82401,4.49505 0.98684,-4.49505 h 1.47039 l 1.00658,4.50986 0.82401,-4.50986 z" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 4 KiB |
24
mastodon-follow-dark.svg
Normal file
24
mastodon-follow-dark.svg
Normal file
|
@ -0,0 +1,24 @@
|
|||
<?xml version="1.0" standalone="no"?>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
version="1.1"
|
||||
width="57.883163mm"
|
||||
height="45.014904mm"
|
||||
viewBox="0 0 57.883163 45.014904">
|
||||
<rect
|
||||
width="56.164337"
|
||||
height="43.296078"
|
||||
x="0.85941321"
|
||||
y="0.85940945"
|
||||
ry="6.0133438"
|
||||
style="fill:#282c37;stroke:#1b1e25;stroke-width:1.71882558;" />
|
||||
<path
|
||||
d="m 36.173854,25.50177 c -0.412679,2.12307 -3.696111,4.44656 -7.467135,4.89685 -1.966427,0.23464 -3.902531,0.4503 -5.96706,0.3556 -3.376344,-0.15469 -6.040514,-0.80589 -6.040514,-0.80589 0,0.32868 0.02027,0.64164 0.06081,0.93432 0.438947,3.33208 3.304025,3.53169 6.017975,3.62476 2.739247,0.0937 5.178349,-0.67536 5.178349,-0.67536 l 0.112534,2.47639 c 0,0 -1.915997,1.02886 -5.329151,1.2181 -1.882107,0.10345 -4.219053,-0.0474 -6.940949,-0.7678 -5.903334,-1.5625 -6.918572,-7.85516 -7.073914,-14.24009 -0.04735,-1.89573 -0.01816,-3.6833 -0.01816,-5.17835 0,-6.52892 4.277753,-8.44265 4.277753,-8.44265 2.156956,-0.99058 5.858093,-1.40716 9.705815,-1.43862 h 0.09453 c 3.847723,0.0315 7.551293,0.44804 9.708087,1.43862 0,0 4.27759,1.91373 4.27759,8.44265 0,0 0.05367,4.81707 -0.59656,8.16147"
|
||||
style="fill:#3088d4;" />
|
||||
<path
|
||||
d="m 31.724706,17.8468 v 7.90543 h -3.131981 v -7.67307 c 0,-1.61747 -0.680555,-2.43845 -2.041827,-2.43845 -1.505102,0 -2.259437,0.97389 -2.259437,2.89962 v 4.19991 h -3.113495 v -4.19991 c 0,-1.92573 -0.754497,-2.89962 -2.259599,-2.89962 -1.361272,0 -2.041827,0.82098 -2.041827,2.43845 v 7.67307 H 13.744559 V 17.8468 c 0,-1.61569 0.411381,-2.89962 1.237712,-3.84951 0.852113,-0.94989 1.968048,-1.43683 3.353319,-1.43683 1.602719,0 2.816432,0.61602 3.618925,1.84822 l 0.780117,1.30776 0.780279,-1.30776 c 0.802332,-1.2322 2.016046,-1.84822 3.618926,-1.84822 1.385109,0 2.501044,0.48694 3.353319,1.43683 0.826168,0.94989 1.23755,2.23382 1.23755,3.84951"
|
||||
style="fill:#ffffff;" />
|
||||
<path
|
||||
d="m 43.314163,32.1437 c 1.49508,0 2.70606,-1.21095 2.70606,-2.70606 0,-1.4951 -1.21098,-2.70606 -2.70606,-2.70606 -1.495103,0 -2.706063,1.21096 -2.706063,2.70606 0,1.49511 1.21096,2.70606 2.706063,2.70606 z m -6.088655,-1.35302 v -2.02955 h -1.353051 v 2.02955 h -2.02955 v 1.35302 h 2.02955 v 2.02955 h 1.353051 V 32.1437 h 2.029552 v -1.35302 z m 6.088655,2.70607 c -1.806313,0 -5.412155,0.90652 -5.412155,2.70606 v 1.35304 h 10.824279 v -1.35304 c 0,-1.79954 -3.605834,-2.70606 -5.412124,-2.70606 z"
|
||||
style="fill:#3088d4;" />
|
||||
</svg>
|
After Width: | Height: | Size: 2.3 KiB |
210
mastodon-follow-light-da.js
Normal file
210
mastodon-follow-light-da.js
Normal file
|
@ -0,0 +1,210 @@
|
|||
/* SPDX-License-Identifier: Zlib
|
||||
Copyright (C) 2022 smpl <smpl@slamkode.ml> */
|
||||
|
||||
var mastodon_follow_settings = {
|
||||
"account": "superman@fortitude.fortress",
|
||||
"portal": "https://fortitude.fortress/users/superman/remote_follow",
|
||||
"dialog": {
|
||||
"width": "256px",
|
||||
"background": "#d9e1e8",
|
||||
"color": "#282c37",
|
||||
"title": "#282c37",
|
||||
"input": {
|
||||
"bordercolor": "#b3c3d1",
|
||||
"background": "#f9fafb",
|
||||
"color": "#000",
|
||||
"placeholder": "#c83737"
|
||||
},
|
||||
"button": {
|
||||
"background": "#2b90d9",
|
||||
"color": "#fff"
|
||||
}
|
||||
}
|
||||
};
|
||||
var mastodon_follow_strings =
|
||||
{
|
||||
"title": "Tast dit Mastodon id",
|
||||
"button": "Følg",
|
||||
"create": "Opret konto",
|
||||
"create_url": "https://joinmastodon.org/communities",
|
||||
"error": { "handle": "Forkert id" }
|
||||
};
|
||||
|
||||
var mastodon_follow_container = null;
|
||||
|
||||
/* Remove nojs fallback link, when JS enabled. */
|
||||
window.addEventListener("load", function(e) {
|
||||
mastodonfollow.style.cursor = "pointer";
|
||||
var a = mastodonfollow.parentNode;
|
||||
var c = a.parentNode;
|
||||
c.appendChild(mastodonfollow);
|
||||
a.remove();
|
||||
});
|
||||
|
||||
function mastodon_follow_create_style()
|
||||
{
|
||||
var style = document.createElement('style');
|
||||
var d = mastodon_follow_settings.dialog;
|
||||
style.innerHTML =
|
||||
".mastodon-follow-container {" +
|
||||
"display: block;" +
|
||||
"z-index: 1;" +
|
||||
"border: 0;" +
|
||||
"border-radius: 5px;" +
|
||||
"background: " + d.background + ";" +
|
||||
"position: absolute;" +
|
||||
"top:110%;" +
|
||||
"left: 0;" +
|
||||
"width: " + d.width + ";" +
|
||||
'font-family: "Roboto",Roboto,sans-serif;' +
|
||||
"margin: 0 auto;" +
|
||||
"padding: 20px;" +
|
||||
"font-weight: 400;" +
|
||||
"font-size: 13px;" +
|
||||
"color: " + d.color + ";" +
|
||||
"line-height: 18px;" +
|
||||
"}" +
|
||||
".mastodon-follow-title {" +
|
||||
"text-align: center;" +
|
||||
"font-size: 18px;" +
|
||||
"font-weight: 500;" +
|
||||
"margin: 0;" +
|
||||
"color: " + d.title + ";" +
|
||||
"}" +
|
||||
".mastodon-follow-input {" +
|
||||
"border: 0;" +
|
||||
"border-radius: 4px;" +
|
||||
"margin-top: 20px;" +
|
||||
"padding: 10px;" +
|
||||
"background: " + d.input.background + ";" +
|
||||
"width: 100%;" +
|
||||
"box-sizing: border-box;" +
|
||||
"font-family: inherit;" +
|
||||
"font-weight: 500;" +
|
||||
"font-size: 18px;" +
|
||||
"color: " + d.input.color + ";" +
|
||||
"}" +
|
||||
".mastodon-follow-input::placeholder {" +
|
||||
"color: " + d.input.placeholder + ";" +
|
||||
"}" +
|
||||
".mastodon-follow-button {" +
|
||||
"display: block;" +
|
||||
"width: 100%;" +
|
||||
"border: 0;" +
|
||||
"border-radius: 4px;" +
|
||||
"margin-right: 10px;" +
|
||||
"margin-top: 20px;" +
|
||||
"padding: 10px;" +
|
||||
"background: " + d.button.background + ";" +
|
||||
"font-family: inherit;" +
|
||||
"font-weight: 500;" +
|
||||
"font-size: 18px;" +
|
||||
"color: " + d.button.color + ";" +
|
||||
"line-height: inherit;" +
|
||||
"text-align: center;" +
|
||||
"text-transform: uppercase;" +
|
||||
"box-sizing: border-box;" +
|
||||
"cursor: pointer;" +
|
||||
"}";
|
||||
document.head.appendChild(style);
|
||||
}
|
||||
|
||||
/* Called when request to instance is complete.
|
||||
* Parse the JSON response and find the subscribe uri.
|
||||
* On error goes to the instances remote_follow url. */
|
||||
function mastodon_follow_go(event)
|
||||
{
|
||||
var data;
|
||||
|
||||
if (this.readyState === this.DONE) {
|
||||
if (this.status === 200) {
|
||||
try {
|
||||
data = JSON.parse(this.responseText);
|
||||
} catch {
|
||||
window.location = mastodon_follow_settings.portal;
|
||||
return;
|
||||
}
|
||||
|
||||
data.links.forEach( function(e) {
|
||||
if(e.rel === "http://ostatus.org/schema/1.0/subscribe") {
|
||||
window.location = e.template.replace('{uri}', encodeURIComponent(mastodon_follow_settings.account));
|
||||
return;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
window.location = mastodon_follow_settings.portal;
|
||||
return;
|
||||
}
|
||||
|
||||
/* Called when user click on follow button in dialog.
|
||||
* Grab the mastodon handle from the input field and request the
|
||||
* appropriate webfinger document from the users instance.
|
||||
* Response is handled by mastodon_follow_go(). */
|
||||
function mastodon_follow_lookup(event)
|
||||
{
|
||||
var handle_element = document.querySelector('input[name="mastodon-handle"]');
|
||||
var handle = handle_element.value;
|
||||
|
||||
// remove any initial @
|
||||
if(handle.charAt(0) == '@') {
|
||||
handle = handle.substring(1);
|
||||
}
|
||||
|
||||
// split into nick and host
|
||||
var uriparts = handle.split('@');
|
||||
if(uriparts.length < 2) {
|
||||
handle_element.value = '';
|
||||
handle_element.setAttribute('placeholder', mastodon_follow_strings.error.handle);
|
||||
return;
|
||||
}
|
||||
|
||||
var oReq = new XMLHttpRequest();
|
||||
oReq.addEventListener("load", mastodon_follow_go);
|
||||
oReq.open("GET", "https://" + uriparts[1] + "/.well-known/webfinger?resource=acct:" + encodeURIComponent(handle));
|
||||
oReq.send();
|
||||
}
|
||||
|
||||
/* Activated when icon is clicked.
|
||||
* Create the follow dialog on first run, toggle visibility on further
|
||||
* clicks. */
|
||||
function mastodon_follow_show()
|
||||
{
|
||||
if(!mastodon_follow_container) {
|
||||
mastodon_follow_create_style();
|
||||
|
||||
mastodon_follow_container = document.createElement('div');
|
||||
mastodon_follow_container.setAttribute('class', 'mastodon-follow-container');
|
||||
|
||||
var mastodon_title = document.createElement('p');
|
||||
mastodon_title.setAttribute('class', 'mastodon-follow-title');
|
||||
mastodon_title.innerHTML = mastodon_follow_strings.title;
|
||||
|
||||
var mastodon_follow_handle = document.createElement('input');
|
||||
mastodon_follow_handle.setAttribute('name', 'mastodon-handle');
|
||||
mastodon_follow_handle.setAttribute('type', 'text');
|
||||
mastodon_follow_handle.setAttribute('class', 'mastodon-follow-input');
|
||||
|
||||
var mastodon_follow_follow = document.createElement('button');
|
||||
mastodon_follow_follow.innerHTML = mastodon_follow_strings.button;
|
||||
mastodon_follow_follow.setAttribute('class', 'mastodon-follow-button');
|
||||
mastodon_follow_follow.addEventListener('click', mastodon_follow_lookup);
|
||||
|
||||
var createaccount = document.createElement('div');
|
||||
createaccount.style = "text-align: right;";
|
||||
var createaccount_a = document.createElement('a');
|
||||
createaccount_a.setAttribute('href', mastodon_follow_strings.create_url);
|
||||
createaccount_a.innerHTML = mastodon_follow_strings.create;
|
||||
createaccount.appendChild(createaccount_a);
|
||||
|
||||
mastodon_follow_container.appendChild(mastodon_title);
|
||||
mastodon_follow_container.appendChild(mastodon_follow_handle);
|
||||
mastodon_follow_container.appendChild(mastodon_follow_follow);
|
||||
mastodon_follow_container.appendChild(createaccount);
|
||||
|
||||
mastodonfollow.parentElement.appendChild(mastodon_follow_container);
|
||||
} else {
|
||||
mastodon_follow_container.style.display =
|
||||
mastodon_follow_container.style.display == "none" ? "block" : "none";
|
||||
}
|
||||
}
|
33
mastodon-follow-light-da.svg
Normal file
33
mastodon-follow-light-da.svg
Normal file
|
@ -0,0 +1,33 @@
|
|||
<?xml version="1.0" standalone="no"?>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
version="1.1"
|
||||
height="45.014904mm"
|
||||
width="85.691597mm"
|
||||
viewBox="0 0 85.691597 45.014904">
|
||||
<rect
|
||||
ry="5.9620543"
|
||||
y="1.0440584"
|
||||
x="1.0440561"
|
||||
height="42.926792"
|
||||
width="83.603485"
|
||||
style="fill:#d9e1e8;stroke:#d1d1d1;stroke-width:2.08811116;" />
|
||||
<path
|
||||
d="m 36.173854,25.50178 c -0.412679,2.12307 -3.696111,4.44656 -7.467135,4.89685 -1.966427,0.23464 -3.902531,0.4503 -5.96706,0.3556 -3.376344,-0.15469 -6.040514,-0.80589 -6.040514,-0.80589 0,0.32868 0.02027,0.64164 0.06081,0.93432 0.438947,3.33208 3.304025,3.53169 6.017975,3.62476 2.739247,0.0937 5.178349,-0.67536 5.178349,-0.67536 l 0.112534,2.47639 c 0,0 -1.915997,1.02886 -5.329151,1.2181 -1.882107,0.10345 -4.219053,-0.0474 -6.940949,-0.7678 -5.903334,-1.5625 -6.918572,-7.85516 -7.073914,-14.24009 -0.04735,-1.89573 -0.01816,-3.6833 -0.01816,-5.17835 0,-6.52892 4.277753,-8.44265 4.277753,-8.44265 2.156956,-0.99058 5.858093,-1.40716 9.705815,-1.43862 h 0.09453 c 3.847723,0.0315 7.551293,0.44804 9.708087,1.43862 0,0 4.27759,1.91373 4.27759,8.44265 0,0 0.05367,4.81707 -0.59656,8.16147"
|
||||
style="fill:#3088d4;" />
|
||||
<path
|
||||
d="m 31.724706,17.84681 v 7.90543 h -3.131981 v -7.67307 c 0,-1.61747 -0.680555,-2.43845 -2.041827,-2.43845 -1.505102,0 -2.259437,0.97389 -2.259437,2.89962 v 4.19991 h -3.113495 v -4.19991 c 0,-1.92573 -0.754497,-2.89962 -2.259599,-2.89962 -1.361272,0 -2.041827,0.82098 -2.041827,2.43845 v 7.67307 h -3.131981 v -7.90543 c 0,-1.61569 0.411381,-2.89962 1.237712,-3.84951 0.852113,-0.94989 1.968048,-1.43683 3.353319,-1.43683 1.602719,0 2.816432,0.61602 3.618925,1.84822 l 0.780117,1.30776 0.780279,-1.30776 c 0.802332,-1.2322 2.016046,-1.84822 3.618926,-1.84822 1.385109,0 2.501044,0.48694 3.353319,1.43683 0.826168,0.94989 1.23755,2.23382 1.23755,3.84951"
|
||||
style="fill:#ffffff;" />
|
||||
<g style="fill:#3088d4;">
|
||||
<path
|
||||
d="m 69.506087,14.94682 c 2.06847,0 3.74388,-1.67538 3.74388,-3.74388 0,-2.06851 -1.67541,-3.74389 -3.74388,-3.74389 -2.0685,0 -3.74388,1.67538 -3.74388,3.74389 0,2.0685 1.67538,3.74388 3.74388,3.74388 z m -8.42376,-1.87193 v -2.80792 h -1.87197 v 2.80792 h -2.80792 v 1.87193 h 2.80792 v 2.80792 h 1.87197 v -2.80792 h 2.80792 v -1.87193 z m 8.42376,3.74389 c -2.49906,0 -7.48781,1.2542 -7.48781,3.74389 v 1.87196 h 14.97558 v -1.87196 c 0,-2.48969 -4.98874,-3.74389 -7.48777,-3.74389 z" />
|
||||
<path
|
||||
d="M 40.703998,36.83326 V 25.75843 h 7.408579 v 2.06132 h -4.738753 v 2.54812 h 4.305193 v 2.05371 h -4.305193 v 4.41168 z" />
|
||||
<path
|
||||
d="m 53.847757,36.98539 q -1.22462,0 -2.22105,-0.49441 l -0.60851,1.06488 h -1.58212 l 1.0725,-1.86355 q -1.51367,-1.51366 -1.51367,-4.23673 v -0.38032 q 0,-2.54052 1.34633,-4.00094 1.35393,-1.46802 3.49131,-1.46802 1.2018,0 2.19063,0.48681 l 0.46398,-0.80628 h 1.57452 l -0.92037,1.59734 q 1.54408,1.51366 1.54408,4.26715 v 0.37271 q 0,2.54052 -1.36153,4.00094 -1.35393,1.46042 -3.4761,1.46042 z m -2.13738,-5.46136 q 0,1.00404 0.20537,1.71904 l 2.9969,-5.21795 q -0.45638,-0.32708 -1.0801,-0.32708 -1.99286,0 -2.11456,2.96648 z m 4.25955,-0.46398 q 0,-1.01925 -0.22058,-1.74946 l -3.01211,5.25598 q 0.45638,0.33468 1.11052,0.33468 1.01165,0 1.5593,-0.85952 0.55527,-0.86712 0.56287,-2.47206 z" />
|
||||
<path
|
||||
d="m 67.280557,34.77955 v 2.05371 h -7.3173 V 25.75843 h 2.66983 v 9.02112 z" />
|
||||
<path
|
||||
d="m 76.993857,30.91553 v 4.54859 q -0.42595,0.47159 -1.52127,0.99643 -1.09531,0.52484 -2.8828,0.52484 -2.20584,0 -3.54456,-1.39196 -1.33111,-1.39957 -1.33111,-3.98572 v -0.61612 q 0,-2.58616 1.33111,-3.98572 1.33111,-1.40718 3.40004,-1.40718 2.28951,0 3.33158,1.05729 1.04207,1.05728 1.20941,2.71546 h -2.56334 q -0.1217,-0.82148 -0.54005,-1.27026 -0.41835,-0.44877 -1.34632,-0.44877 -0.9584,0 -1.52888,0.81387 -0.57047,0.81388 -0.57808,2.46446 v 0.67697 q 0,1.66578 0.58569,2.49488 0.59329,0.82909 1.76467,0.82909 1.03446,0 1.54409,-0.46399 v -1.71903 h -1.85595 v -1.83313 z" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 3.8 KiB |
210
mastodon-follow-light-en.js
Normal file
210
mastodon-follow-light-en.js
Normal file
|
@ -0,0 +1,210 @@
|
|||
/* SPDX-License-Identifier: Zlib
|
||||
Copyright (C) 2022 smpl <smpl@slamkode.ml> */
|
||||
|
||||
var mastodon_follow_settings = {
|
||||
"account": "superman@fortitude.fortress",
|
||||
"portal": "https://fortitude.fortress/users/superman/remote_follow",
|
||||
"dialog": {
|
||||
"width": "256px",
|
||||
"background": "#d9e1e8",
|
||||
"color": "#282c37",
|
||||
"title": "#282c37",
|
||||
"input": {
|
||||
"bordercolor": "#b3c3d1",
|
||||
"background": "#f9fafb",
|
||||
"color": "#000",
|
||||
"placeholder": "#c83737"
|
||||
},
|
||||
"button": {
|
||||
"background": "#2b90d9",
|
||||
"color": "#fff"
|
||||
}
|
||||
}
|
||||
};
|
||||
var mastodon_follow_strings =
|
||||
{
|
||||
"title": "Enter your Mastodon handle",
|
||||
"button": "Follow",
|
||||
"create": "Create account",
|
||||
"create_url": "https://joinmastodon.org/communities",
|
||||
"error": { "handle": "Invalid handle" }
|
||||
};
|
||||
|
||||
var mastodon_follow_container = null;
|
||||
|
||||
/* Remove nojs fallback link, when JS enabled. */
|
||||
window.addEventListener("load", function(e) {
|
||||
mastodonfollow.style.cursor = "pointer";
|
||||
var a = mastodonfollow.parentNode;
|
||||
var c = a.parentNode;
|
||||
c.appendChild(mastodonfollow);
|
||||
a.remove();
|
||||
});
|
||||
|
||||
function mastodon_follow_create_style()
|
||||
{
|
||||
var style = document.createElement('style');
|
||||
var d = mastodon_follow_settings.dialog;
|
||||
style.innerHTML =
|
||||
".mastodon-follow-container {" +
|
||||
"display: block;" +
|
||||
"z-index: 1;" +
|
||||
"border: 0;" +
|
||||
"border-radius: 5px;" +
|
||||
"background: " + d.background + ";" +
|
||||
"position: absolute;" +
|
||||
"top:110%;" +
|
||||
"left: 0;" +
|
||||
"width: " + d.width + ";" +
|
||||
'font-family: "Roboto",Roboto,sans-serif;' +
|
||||
"margin: 0 auto;" +
|
||||
"padding: 20px;" +
|
||||
"font-weight: 400;" +
|
||||
"font-size: 13px;" +
|
||||
"color: " + d.color + ";" +
|
||||
"line-height: 18px;" +
|
||||
"}" +
|
||||
".mastodon-follow-title {" +
|
||||
"text-align: center;" +
|
||||
"font-size: 18px;" +
|
||||
"font-weight: 500;" +
|
||||
"margin: 0;" +
|
||||
"color: " + d.title + ";" +
|
||||
"}" +
|
||||
".mastodon-follow-input {" +
|
||||
"border: 0;" +
|
||||
"border-radius: 4px;" +
|
||||
"margin-top: 20px;" +
|
||||
"padding: 10px;" +
|
||||
"background: " + d.input.background + ";" +
|
||||
"width: 100%;" +
|
||||
"box-sizing: border-box;" +
|
||||
"font-family: inherit;" +
|
||||
"font-weight: 500;" +
|
||||
"font-size: 18px;" +
|
||||
"color: " + d.input.color + ";" +
|
||||
"}" +
|
||||
".mastodon-follow-input::placeholder {" +
|
||||
"color: " + d.input.placeholder + ";" +
|
||||
"}" +
|
||||
".mastodon-follow-button {" +
|
||||
"display: block;" +
|
||||
"width: 100%;" +
|
||||
"border: 0;" +
|
||||
"border-radius: 4px;" +
|
||||
"margin-right: 10px;" +
|
||||
"margin-top: 20px;" +
|
||||
"padding: 10px;" +
|
||||
"background: " + d.button.background + ";" +
|
||||
"font-family: inherit;" +
|
||||
"font-weight: 500;" +
|
||||
"font-size: 18px;" +
|
||||
"color: " + d.button.color + ";" +
|
||||
"line-height: inherit;" +
|
||||
"text-align: center;" +
|
||||
"text-transform: uppercase;" +
|
||||
"box-sizing: border-box;" +
|
||||
"cursor: pointer;" +
|
||||
"}";
|
||||
document.head.appendChild(style);
|
||||
}
|
||||
|
||||
/* Called when request to instance is complete.
|
||||
* Parse the JSON response and find the subscribe uri.
|
||||
* On error goes to the instances remote_follow url. */
|
||||
function mastodon_follow_go(event)
|
||||
{
|
||||
var data;
|
||||
|
||||
if (this.readyState === this.DONE) {
|
||||
if (this.status === 200) {
|
||||
try {
|
||||
data = JSON.parse(this.responseText);
|
||||
} catch {
|
||||
window.location = mastodon_follow_settings.portal;
|
||||
return;
|
||||
}
|
||||
|
||||
data.links.forEach( function(e) {
|
||||
if(e.rel === "http://ostatus.org/schema/1.0/subscribe") {
|
||||
window.location = e.template.replace('{uri}', encodeURIComponent(mastodon_follow_settings.account));
|
||||
return;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
window.location = mastodon_follow_settings.portal;
|
||||
return;
|
||||
}
|
||||
|
||||
/* Called when user click on follow button in dialog.
|
||||
* Grab the mastodon handle from the input field and request the
|
||||
* appropriate webfinger document from the users instance.
|
||||
* Response is handled by mastodon_follow_go(). */
|
||||
function mastodon_follow_lookup(event)
|
||||
{
|
||||
var handle_element = document.querySelector('input[name="mastodon-handle"]');
|
||||
var handle = handle_element.value;
|
||||
|
||||
// remove any initial @
|
||||
if(handle.charAt(0) == '@') {
|
||||
handle = handle.substring(1);
|
||||
}
|
||||
|
||||
// split into nick and host
|
||||
var uriparts = handle.split('@');
|
||||
if(uriparts.length < 2) {
|
||||
handle_element.value = '';
|
||||
handle_element.setAttribute('placeholder', mastodon_follow_strings.error.handle);
|
||||
return;
|
||||
}
|
||||
|
||||
var oReq = new XMLHttpRequest();
|
||||
oReq.addEventListener("load", mastodon_follow_go);
|
||||
oReq.open("GET", "https://" + uriparts[1] + "/.well-known/webfinger?resource=acct:" + encodeURIComponent(handle));
|
||||
oReq.send();
|
||||
}
|
||||
|
||||
/* Activated when icon is clicked.
|
||||
* Create the follow dialog on first run, toggle visibility on further
|
||||
* clicks. */
|
||||
function mastodon_follow_show()
|
||||
{
|
||||
if(!mastodon_follow_container) {
|
||||
mastodon_follow_create_style();
|
||||
|
||||
mastodon_follow_container = document.createElement('div');
|
||||
mastodon_follow_container.setAttribute('class', 'mastodon-follow-container');
|
||||
|
||||
var mastodon_title = document.createElement('p');
|
||||
mastodon_title.setAttribute('class', 'mastodon-follow-title');
|
||||
mastodon_title.innerHTML = mastodon_follow_strings.title;
|
||||
|
||||
var mastodon_follow_handle = document.createElement('input');
|
||||
mastodon_follow_handle.setAttribute('name', 'mastodon-handle');
|
||||
mastodon_follow_handle.setAttribute('type', 'text');
|
||||
mastodon_follow_handle.setAttribute('class', 'mastodon-follow-input');
|
||||
|
||||
var mastodon_follow_follow = document.createElement('button');
|
||||
mastodon_follow_follow.innerHTML = mastodon_follow_strings.button;
|
||||
mastodon_follow_follow.setAttribute('class', 'mastodon-follow-button');
|
||||
mastodon_follow_follow.addEventListener('click', mastodon_follow_lookup);
|
||||
|
||||
var createaccount = document.createElement('div');
|
||||
createaccount.style = "text-align: right;";
|
||||
var createaccount_a = document.createElement('a');
|
||||
createaccount_a.setAttribute('href', mastodon_follow_strings.create_url);
|
||||
createaccount_a.innerHTML = mastodon_follow_strings.create;
|
||||
createaccount.appendChild(createaccount_a);
|
||||
|
||||
mastodon_follow_container.appendChild(mastodon_title);
|
||||
mastodon_follow_container.appendChild(mastodon_follow_handle);
|
||||
mastodon_follow_container.appendChild(mastodon_follow_follow);
|
||||
mastodon_follow_container.appendChild(createaccount);
|
||||
|
||||
mastodonfollow.parentElement.appendChild(mastodon_follow_container);
|
||||
} else {
|
||||
mastodon_follow_container.style.display =
|
||||
mastodon_follow_container.style.display == "none" ? "block" : "none";
|
||||
}
|
||||
}
|
37
mastodon-follow-light-en.svg
Normal file
37
mastodon-follow-light-en.svg
Normal file
|
@ -0,0 +1,37 @@
|
|||
<?xml version="1.0" standalone="no"?>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
version="1.1"
|
||||
viewBox="0 0 85.691597 45.014904"
|
||||
height="45.014904mm"
|
||||
width="85.691597mm">
|
||||
<rect
|
||||
ry="5.9620543"
|
||||
y="1.0440584"
|
||||
x="1.0440561"
|
||||
height="42.926792"
|
||||
width="83.603485"
|
||||
style="fill:#d9e1e8;stroke:#c6d2dc;stroke-width:2.08811116;" />
|
||||
<path
|
||||
d="m 36.173854,25.50178 c -0.412679,2.12307 -3.696111,4.44656 -7.467135,4.89685 -1.966427,0.23464 -3.902531,0.4503 -5.96706,0.3556 -3.376344,-0.15469 -6.040514,-0.80589 -6.040514,-0.80589 0,0.32868 0.02027,0.64164 0.06081,0.93432 0.438947,3.33208 3.304025,3.53169 6.017975,3.62476 2.739247,0.0937 5.178349,-0.67536 5.178349,-0.67536 l 0.112534,2.47639 c 0,0 -1.915997,1.02886 -5.329151,1.2181 -1.882107,0.10345 -4.219053,-0.0474 -6.940949,-0.7678 -5.903334,-1.5625 -6.918572,-7.85516 -7.073914,-14.24009 -0.04735,-1.89573 -0.01816,-3.6833 -0.01816,-5.17835 0,-6.52892 4.277753,-8.44265 4.277753,-8.44265 2.156956,-0.99058 5.858093,-1.40716 9.705815,-1.43862 h 0.09453 c 3.847723,0.0315 7.551293,0.44804 9.708087,1.43862 0,0 4.27759,1.91373 4.27759,8.44265 0,0 0.05367,4.81707 -0.59656,8.16147"
|
||||
style="fill:#3088d4;" />
|
||||
<path
|
||||
d="m 31.724706,17.84681 v 7.90543 h -3.131981 v -7.67307 c 0,-1.61747 -0.680555,-2.43845 -2.041827,-2.43845 -1.505102,0 -2.259437,0.97389 -2.259437,2.89962 v 4.19991 h -3.113495 v -4.19991 c 0,-1.92573 -0.754497,-2.89962 -2.259599,-2.89962 -1.361272,0 -2.041827,0.82098 -2.041827,2.43845 v 7.67307 h -3.131981 v -7.90543 c 0,-1.61569 0.411381,-2.89962 1.237712,-3.84951 0.852113,-0.94989 1.968048,-1.43683 3.353319,-1.43683 1.602719,0 2.816432,0.61602 3.618925,1.84822 l 0.780117,1.30776 0.780279,-1.30776 c 0.802332,-1.2322 2.016046,-1.84822 3.618926,-1.84822 1.385109,0 2.501044,0.48694 3.353319,1.43683 0.826168,0.94989 1.23755,2.23382 1.23755,3.84951"
|
||||
style="fill:#ffffff;" />
|
||||
<g style="fill:#3088d4;">
|
||||
<path
|
||||
d="m 69.506087,14.94682 c 2.06847,0 3.74388,-1.67538 3.74388,-3.74388 0,-2.06851 -1.67541,-3.74389 -3.74388,-3.74389 -2.0685,0 -3.74388,1.67538 -3.74388,3.74389 0,2.0685 1.67538,3.74388 3.74388,3.74388 z m -8.42376,-1.87193 v -2.80792 h -1.87197 v 2.80792 h -2.80792 v 1.87193 h 2.80792 v 2.80792 h 1.87197 v -2.80792 h 2.80792 v -1.87193 z m 8.42376,3.74389 c -2.49906,0 -7.48781,1.2542 -7.48781,3.74389 v 1.87196 h 14.97558 v -1.87196 c 0,-2.48969 -4.98874,-3.74389 -7.48777,-3.74389 z" />
|
||||
<path
|
||||
d="m 38.77358,37.45718 v -7.18419 h 4.805906 v 1.33717 h -3.074004 v 1.65295 h 2.792754 v 1.33224 h -2.792754 v 2.86183 z" />
|
||||
<path
|
||||
d="m 50.378807,34.01311 q 0,1.64802 -0.87829,2.59539 -0.87828,0.94736 -2.25492,0.94736 -1.386512,0 -2.269734,-0.94736 -0.878287,-0.94737 -0.878287,-2.59539 v -0.29112 q 0,-1.64802 0.873353,-2.59538 0.878287,-0.9523 2.264798,-0.9523 1.37664,0 2.25986,0.9523 0.88322,0.94736 0.88322,2.59538 z m -1.75657,-0.30098 q 0,-1.08553 -0.3454,-1.63322 -0.34539,-0.5477 -1.04111,-0.5477 -1.292761,0 -1.371708,1.92434 l -0.0049,0.55756 q 0,1.05592 0.345398,1.62335 0.35032,0.56743 1.04111,0.56743 0.65625,0 1.01151,-0.55756 0.3602,-0.5625 0.36513,-1.60361 z" />
|
||||
<path
|
||||
d="m 56.013657,36.12495 v 1.33223 h -4.74669 v -7.18419 h 1.7319 v 5.85196 z" />
|
||||
<path
|
||||
d="m 61.500487,36.12495 v 1.33223 h -4.7467 v -7.18419 h 1.7319 v 5.85196 z" />
|
||||
<path
|
||||
d="m 68.003757,34.01311 q 0,1.64802 -0.87829,2.59539 -0.87829,0.94736 -2.25493,0.94736 -1.38651,0 -2.26973,-0.94736 -0.87828,-0.94737 -0.87828,-2.59539 v -0.29112 q 0,-1.64802 0.87335,-2.59538 0.87828,-0.9523 2.26479,-0.9523 1.37664,0 2.25987,0.9523 0.88322,0.94736 0.88322,2.59538 z m -1.75658,-0.30098 q 0,-1.08553 -0.34539,-1.63322 -0.34539,-0.5477 -1.04112,-0.5477 -1.29276,0 -1.3717,1.92434 l -0.005,0.55756 q 0,1.05592 0.34539,1.62335 0.35033,0.56743 1.04112,0.56743 0.65625,0 1.01151,-0.55756 0.36019,-0.5625 0.36513,-1.60361 z" />
|
||||
<path
|
||||
d="m 76.993857,30.27299 -1.52466,7.18419 h -1.79112 l -0.96217,-4.09538 -0.94243,4.09538 h -1.79604 l -1.52467,-7.18419 h 1.7171 l 0.82401,4.49505 0.98684,-4.49505 h 1.47039 l 1.00658,4.50986 0.82401,-4.50986 z" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 4 KiB |
24
mastodon-follow-light.svg
Normal file
24
mastodon-follow-light.svg
Normal file
|
@ -0,0 +1,24 @@
|
|||
<?xml version="1.0" standalone="no"?>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
version="1.1"
|
||||
width="57.883163mm"
|
||||
height="45.014904mm"
|
||||
viewBox="0 0 57.883163 45.014904">
|
||||
<rect
|
||||
width="56.164337"
|
||||
height="43.296078"
|
||||
x="0.85941321"
|
||||
y="0.85940945"
|
||||
ry="6.0133438"
|
||||
style="fill:#d9e1e8;stroke:#c6d2dc;stroke-width:1.71882558;" />
|
||||
<path
|
||||
d="m 36.173854,25.50177 c -0.412679,2.12307 -3.696111,4.44656 -7.467135,4.89685 -1.966427,0.23464 -3.902531,0.4503 -5.96706,0.3556 -3.376344,-0.15469 -6.040514,-0.80589 -6.040514,-0.80589 0,0.32868 0.02027,0.64164 0.06081,0.93432 0.438947,3.33208 3.304025,3.53169 6.017975,3.62476 2.739247,0.0937 5.178349,-0.67536 5.178349,-0.67536 l 0.112534,2.47639 c 0,0 -1.915997,1.02886 -5.329151,1.2181 -1.882107,0.10345 -4.219053,-0.0474 -6.940949,-0.7678 -5.903334,-1.5625 -6.918572,-7.85516 -7.073914,-14.24009 -0.04735,-1.89573 -0.01816,-3.6833 -0.01816,-5.17835 0,-6.52892 4.277753,-8.44265 4.277753,-8.44265 2.156956,-0.99058 5.858093,-1.40716 9.705815,-1.43862 h 0.09453 c 3.847723,0.0315 7.551293,0.44804 9.708087,1.43862 0,0 4.27759,1.91373 4.27759,8.44265 0,0 0.05367,4.81707 -0.59656,8.16147"
|
||||
style="fill:#3088d4;" />
|
||||
<path
|
||||
d="m 31.724706,17.8468 v 7.90543 h -3.131981 v -7.67307 c 0,-1.61747 -0.680555,-2.43845 -2.041827,-2.43845 -1.505102,0 -2.259437,0.97389 -2.259437,2.89962 v 4.19991 h -3.113495 v -4.19991 c 0,-1.92573 -0.754497,-2.89962 -2.259599,-2.89962 -1.361272,0 -2.041827,0.82098 -2.041827,2.43845 v 7.67307 H 13.744559 V 17.8468 c 0,-1.61569 0.411381,-2.89962 1.237712,-3.84951 0.852113,-0.94989 1.968048,-1.43683 3.353319,-1.43683 1.602719,0 2.816432,0.61602 3.618925,1.84822 l 0.780117,1.30776 0.780279,-1.30776 c 0.802332,-1.2322 2.016046,-1.84822 3.618926,-1.84822 1.385109,0 2.501044,0.48694 3.353319,1.43683 0.826168,0.94989 1.23755,2.23382 1.23755,3.84951"
|
||||
style="fill:#ffffff;" />
|
||||
<path
|
||||
d="m 43.314163,32.1437 c 1.49508,0 2.70606,-1.21095 2.70606,-2.70606 0,-1.4951 -1.21098,-2.70606 -2.70606,-2.70606 -1.495103,0 -2.706063,1.21096 -2.706063,2.70606 0,1.49511 1.21096,2.70606 2.706063,2.70606 z m -6.088655,-1.35302 v -2.02955 h -1.353051 v 2.02955 h -2.02955 v 1.35302 h 2.02955 v 2.02955 h 1.353051 V 32.1437 h 2.029552 v -1.35302 z m 6.088655,2.70607 c -1.806313,0 -5.412155,0.90652 -5.412155,2.70606 v 1.35304 h 10.824279 v -1.35304 c 0,-1.79954 -3.605834,-2.70606 -5.412124,-2.70606 z"
|
||||
style="fill:#3088d4;" />
|
||||
</svg>
|
After Width: | Height: | Size: 2.3 KiB |
242
mastodon-follow.js
Normal file
242
mastodon-follow.js
Normal file
|
@ -0,0 +1,242 @@
|
|||
/* SPDX-License-Identifier: Zlib
|
||||
Copyright (C) 2022 smpl <smpl@slamkode.ml> */
|
||||
|
||||
///* Light theme matching mastodon-follow-light.svg
|
||||
var mastodon_follow_settings = {
|
||||
"account": "superman@fortitude.fortress",
|
||||
"portal": "https://fortitude.fortress/users/superman/remote_follow",
|
||||
"dialog": {
|
||||
"width": "256px",
|
||||
"background": "#d9e1e8",
|
||||
"color": "#282c37",
|
||||
"title": "#282c37",
|
||||
"input": {
|
||||
"bordercolor": "#b3c3d1",
|
||||
"background": "#f9fafb",
|
||||
"color": "#000",
|
||||
"placeholder": "#c83737"
|
||||
},
|
||||
"button": {
|
||||
"background": "#2b90d9",
|
||||
"color": "#fff"
|
||||
}
|
||||
}
|
||||
};//*/
|
||||
///*
|
||||
var mastodon_follow_strings =
|
||||
{
|
||||
"title": "Enter your Mastodon handle",
|
||||
"button": "Follow",
|
||||
"create": "Create account",
|
||||
"create_url": "https://joinmastodon.org/communities",
|
||||
"error": { "handle": "Invalid handle" }
|
||||
};//*/
|
||||
/* Dark theme matching mastodon-follow-dark.svg
|
||||
var mastodon_follow_settings = {
|
||||
"account": "superman@fortitude.fortress",
|
||||
"portal": "https://fortitude.fortress/users/superman/remote_follow",
|
||||
"dialog": {
|
||||
"width": "256px",
|
||||
"background": "#282c37",
|
||||
"color": "#9baec8",
|
||||
"title": "#fff",
|
||||
"input": {
|
||||
"bordercolor": "#0a0b0e",
|
||||
"background": "#131419",
|
||||
"color": "#fff",
|
||||
"placeholder": "#c83737"
|
||||
},
|
||||
"button": {
|
||||
"background": "#2b90d9",
|
||||
"color": "#fff"
|
||||
}
|
||||
}
|
||||
};//*/
|
||||
/*
|
||||
var mastodon_follow_strings =
|
||||
{
|
||||
"title": "Tast dit Mastodon id",
|
||||
"button": "Følg",
|
||||
"create": "Opret konto",
|
||||
"create_url": "https://joinmastodon.org/communities",
|
||||
"error": { "handle": "Forkert id" }
|
||||
};//*/
|
||||
|
||||
var mastodon_follow_container = null;
|
||||
|
||||
/* Remove nojs fallback link, when JS enabled. */
|
||||
window.addEventListener("load", function(e) {
|
||||
mastodonfollow.style.cursor = "pointer";
|
||||
var a = mastodonfollow.parentNode;
|
||||
var c = a.parentNode;
|
||||
c.appendChild(mastodonfollow);
|
||||
a.remove();
|
||||
});
|
||||
|
||||
function mastodon_follow_create_style()
|
||||
{
|
||||
var style = document.createElement('style');
|
||||
var d = mastodon_follow_settings.dialog;
|
||||
style.innerHTML =
|
||||
".mastodon-follow-container {" +
|
||||
"display: block;" +
|
||||
"z-index: 1;" +
|
||||
"border: 0;" +
|
||||
"border-radius: 5px;" +
|
||||
"background: " + d.background + ";" +
|
||||
"position: absolute;" +
|
||||
"top:110%;" +
|
||||
"left: 0;" +
|
||||
"width: " + d.width + ";" +
|
||||
'font-family: "Roboto",Roboto,sans-serif;' +
|
||||
"margin: 0 auto;" +
|
||||
"padding: 20px;" +
|
||||
"font-weight: 400;" +
|
||||
"font-size: 13px;" +
|
||||
"color: " + d.color + ";" +
|
||||
"line-height: 18px;" +
|
||||
"}" +
|
||||
".mastodon-follow-title {" +
|
||||
"text-align: center;" +
|
||||
"font-size: 18px;" +
|
||||
"font-weight: 500;" +
|
||||
"margin: 0;" +
|
||||
"color: " + d.title + ";" +
|
||||
"}" +
|
||||
".mastodon-follow-input {" +
|
||||
"border: 0;" +
|
||||
"border-radius: 4px;" +
|
||||
"margin-top: 20px;" +
|
||||
"padding: 10px;" +
|
||||
"background: " + d.input.background + ";" +
|
||||
"width: 100%;" +
|
||||
"box-sizing: border-box;" +
|
||||
"font-family: inherit;" +
|
||||
"font-weight: 500;" +
|
||||
"font-size: 18px;" +
|
||||
"color: " + d.input.color + ";" +
|
||||
"}" +
|
||||
".mastodon-follow-input::placeholder {" +
|
||||
"color: " + d.input.placeholder + ";" +
|
||||
"}" +
|
||||
".mastodon-follow-button {" +
|
||||
"display: block;" +
|
||||
"width: 100%;" +
|
||||
"border: 0;" +
|
||||
"border-radius: 4px;" +
|
||||
"margin-right: 10px;" +
|
||||
"margin-top: 20px;" +
|
||||
"padding: 10px;" +
|
||||
"background: " + d.button.background + ";" +
|
||||
"font-family: inherit;" +
|
||||
"font-weight: 500;" +
|
||||
"font-size: 18px;" +
|
||||
"color: " + d.button.color + ";" +
|
||||
"line-height: inherit;" +
|
||||
"text-align: center;" +
|
||||
"text-transform: uppercase;" +
|
||||
"box-sizing: border-box;" +
|
||||
"cursor: pointer;" +
|
||||
"}";
|
||||
document.head.appendChild(style);
|
||||
}
|
||||
|
||||
/* Called when request to instance is complete.
|
||||
* Parse the JSON response and find the subscribe uri.
|
||||
* On error goes to the instances remote_follow url. */
|
||||
function mastodon_follow_go(event)
|
||||
{
|
||||
var data;
|
||||
|
||||
if (this.readyState === this.DONE) {
|
||||
if (this.status === 200) {
|
||||
try {
|
||||
data = JSON.parse(this.responseText);
|
||||
} catch {
|
||||
window.location = mastodon_follow_settings.portal;
|
||||
return;
|
||||
}
|
||||
|
||||
data.links.forEach( function(e) {
|
||||
if(e.rel === "http://ostatus.org/schema/1.0/subscribe") {
|
||||
window.location = e.template.replace('{uri}', encodeURIComponent(mastodon_follow_settings.account));
|
||||
return;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
window.location = mastodon_follow_settings.portal;
|
||||
return;
|
||||
}
|
||||
|
||||
/* Called when user click on follow button in dialog.
|
||||
* Grab the mastodon handle from the input field and request the
|
||||
* appropriate webfinger document from the users instance.
|
||||
* Response is handled by mastodon_follow_go(). */
|
||||
function mastodon_follow_lookup(event)
|
||||
{
|
||||
var handle_element = document.querySelector('input[name="mastodon-handle"]');
|
||||
var handle = handle_element.value;
|
||||
|
||||
// remove any initial @
|
||||
if(handle.charAt(0) == '@') {
|
||||
handle = handle.substring(1);
|
||||
}
|
||||
|
||||
// split into nick and host
|
||||
var uriparts = handle.split('@');
|
||||
if(uriparts.length < 2) {
|
||||
handle_element.value = '';
|
||||
handle_element.setAttribute('placeholder', mastodon_follow_strings.error.handle);
|
||||
return;
|
||||
}
|
||||
|
||||
var oReq = new XMLHttpRequest();
|
||||
oReq.addEventListener("load", mastodon_follow_go);
|
||||
oReq.open("GET", "https://" + uriparts[1] + "/.well-known/webfinger?resource=acct:" + encodeURIComponent(handle));
|
||||
oReq.send();
|
||||
}
|
||||
|
||||
/* Activated when icon is clicked.
|
||||
* Create the follow dialog on first run, toggle visibility on further
|
||||
* clicks. */
|
||||
function mastodon_follow_show()
|
||||
{
|
||||
if(!mastodon_follow_container) {
|
||||
mastodon_follow_create_style();
|
||||
|
||||
mastodon_follow_container = document.createElement('div');
|
||||
mastodon_follow_container.setAttribute('class', 'mastodon-follow-container');
|
||||
|
||||
var mastodon_title = document.createElement('p');
|
||||
mastodon_title.setAttribute('class', 'mastodon-follow-title');
|
||||
mastodon_title.innerHTML = mastodon_follow_strings.title;
|
||||
|
||||
var mastodon_follow_handle = document.createElement('input');
|
||||
mastodon_follow_handle.setAttribute('name', 'mastodon-handle');
|
||||
mastodon_follow_handle.setAttribute('type', 'text');
|
||||
mastodon_follow_handle.setAttribute('class', 'mastodon-follow-input');
|
||||
|
||||
var mastodon_follow_follow = document.createElement('button');
|
||||
mastodon_follow_follow.innerHTML = mastodon_follow_strings.button;
|
||||
mastodon_follow_follow.setAttribute('class', 'mastodon-follow-button');
|
||||
mastodon_follow_follow.addEventListener('click', mastodon_follow_lookup);
|
||||
|
||||
var createaccount = document.createElement('div');
|
||||
createaccount.style = "text-align: right;";
|
||||
var createaccount_a = document.createElement('a');
|
||||
createaccount_a.setAttribute('href', mastodon_follow_strings.create_url);
|
||||
createaccount_a.innerHTML = mastodon_follow_strings.create;
|
||||
createaccount.appendChild(createaccount_a);
|
||||
|
||||
mastodon_follow_container.appendChild(mastodon_title);
|
||||
mastodon_follow_container.appendChild(mastodon_follow_handle);
|
||||
mastodon_follow_container.appendChild(mastodon_follow_follow);
|
||||
mastodon_follow_container.appendChild(createaccount);
|
||||
|
||||
mastodonfollow.parentElement.appendChild(mastodon_follow_container);
|
||||
} else {
|
||||
mastodon_follow_container.style.display =
|
||||
mastodon_follow_container.style.display == "none" ? "block" : "none";
|
||||
}
|
||||
}
|
Reference in a new issue