This commit is contained in:
ManeraKai 2023-02-05 12:34:06 +03:00
parent 46a3ea1619
commit fff96565f7
No known key found for this signature in database
GPG Key ID: 5ABC31FFD562E337
8 changed files with 717 additions and 20 deletions

View File

@ -35,6 +35,7 @@ A web extension that redirects YouTube, Twitter, TikTok... requests to alternati
- Genius <span>&#8594;</span> [Dumb](https://github.com/rramiachraf/dumb)
- StackOverflow <span>&#8594;</span> [AnonymousOverflow](https://github.com/httpjamesm/AnonymousOverflow)
- Goodreads <span>&#8594;</span> [BiblioReads](https://github.com/nesaku/BiblioReads)
- Wikipedia <span>&#8594;</span> [Wikiless](https://wikiless.org)
**Note**: The Extension will be using random instances by default. You can modify this and add custom instances too.

View File

@ -0,0 +1,327 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="512"
height="512"
viewBox="0 0 512 512"
fill="none"
version="1.1"
id="svg133"
sodipodi:docname="goodreads-icon-light.svg"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview135"
pagecolor="#c2c2c2"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
showgrid="false"
inkscape:zoom="1.0744708"
inkscape:cx="146.11844"
inkscape:cy="259.66271"
inkscape:window-width="1888"
inkscape:window-height="1060"
inkscape:window-x="32"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg133" />
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M 243.868,66.5799 C 173.928,73.2164 130.327,132.885 135.4,215.019 c 3.345,54.163 25.185,92.212 63.635,110.861 30.289,14.691 73.72,16.016 99.679,3.043 18.46,-9.226 33.654,-24.329 42.898,-42.641 0.879,-1.742 1.826,-3.167 2.103,-3.167 0.666,0 0.662,33.464 -0.005,46.08 -2.537,47.996 -19.585,75.628 -52.882,85.714 -17.471,5.293 -42.156,5.819 -61.552,1.312 -26.331,-6.118 -44.295,-22.137 -49.782,-44.392 l -1.418,-5.751 -16.586,-0.009 -16.585,-0.01 0.337,3.629 c 4.449,47.87 51.436,78.65 117.733,77.123 65.091,-1.5 101.161,-30.87 111.433,-90.736 2.912,-16.969 2.75,-8.667 2.943,-151.168 L 377.53,73.7074 H 360.875 344.22 v 23.04 c 0,13.7376 -0.191,23.0396 -0.473,23.0396 -0.26,0 -1.64,-2.217 -3.066,-4.926 -3.508,-6.663 -7.514,-12.125 -13.515,-18.4238 C 305.151,73.3291 277.435,63.3947 243.868,66.5799 Z m 26.214,27.8599 c 37.926,5.0105 64.743,36.4072 72.053,84.3552 8.496,55.734 -11.404,104.801 -50.204,123.785 -15.645,7.655 -36.015,9.706 -55.173,5.555 -51.91,-11.247 -79.466,-71.313 -64.516,-140.63 8.829,-40.932 38.554,-70.2707 74.442,-73.4748 5.604,-0.5002 18.177,-0.28 23.398,0.4096 z"
fill="#66390C"
id="path6"
style="fill:#ffffff;fill-opacity:1" />
<defs
id="defs131">
<filter
id="filter0_i_121_76"
x="135"
y="66"
width="242.53"
height="380.865"
filterUnits="userSpaceOnUse"
color-interpolation-filters="sRGB">
<feFlood
flood-opacity="0"
result="BackgroundImageFix"
id="feFlood33" />
<feBlend
mode="normal"
in="SourceGraphic"
in2="BackgroundImageFix"
result="shape"
id="feBlend35" />
<feColorMatrix
in="SourceAlpha"
type="matrix"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
result="hardAlpha"
id="feColorMatrix37" />
<feOffset
id="feOffset39" />
<feGaussianBlur
stdDeviation="10"
id="feGaussianBlur41" />
<feComposite
in2="hardAlpha"
operator="arithmetic"
k2="-1"
k3="1"
id="feComposite43" />
<feColorMatrix
type="matrix"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0"
id="feColorMatrix45" />
<feBlend
mode="normal"
in2="shape"
result="effect1_innerShadow_121_76"
id="feBlend47" />
</filter>
<filter
id="filter1_i_121_76"
x="135"
y="66"
width="242.53"
height="380.865"
filterUnits="userSpaceOnUse"
color-interpolation-filters="sRGB">
<feFlood
flood-opacity="0"
result="BackgroundImageFix"
id="feFlood50" />
<feBlend
mode="normal"
in="SourceGraphic"
in2="BackgroundImageFix"
result="shape"
id="feBlend52" />
<feColorMatrix
in="SourceAlpha"
type="matrix"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
result="hardAlpha"
id="feColorMatrix54" />
<feOffset
id="feOffset56" />
<feGaussianBlur
stdDeviation="10"
id="feGaussianBlur58" />
<feComposite
in2="hardAlpha"
operator="arithmetic"
k2="-1"
k3="1"
id="feComposite60" />
<feColorMatrix
type="matrix"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0"
id="feColorMatrix62" />
<feBlend
mode="normal"
in2="shape"
result="effect1_innerShadow_121_76"
id="feBlend64" />
</filter>
<filter
id="filter2_i_121_76"
x="167.199"
y="92.7582"
width="177.874"
height="218.483"
filterUnits="userSpaceOnUse"
color-interpolation-filters="sRGB">
<feFlood
flood-opacity="0"
result="BackgroundImageFix"
id="feFlood67" />
<feBlend
mode="normal"
in="SourceGraphic"
in2="BackgroundImageFix"
result="shape"
id="feBlend69" />
<feColorMatrix
in="SourceAlpha"
type="matrix"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
result="hardAlpha"
id="feColorMatrix71" />
<feOffset
id="feOffset73" />
<feGaussianBlur
stdDeviation="10"
id="feGaussianBlur75" />
<feComposite
in2="hardAlpha"
operator="arithmetic"
k2="-1"
k3="1"
id="feComposite77" />
<feColorMatrix
type="matrix"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0"
id="feColorMatrix79" />
<feBlend
mode="normal"
in2="shape"
result="effect1_innerShadow_121_76"
id="feBlend81" />
</filter>
<linearGradient
id="paint0_linear_121_76"
x1="256"
y1="0"
x2="256"
y2="512"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(2.3691356,82.130583)">
<stop
stop-color="#EFEDDE"
id="stop84" />
<stop
offset="1"
stop-color="#E6E1C3"
id="stop86" />
</linearGradient>
<linearGradient
id="paint1_linear_121_76"
x1="256"
y1="215"
x2="256"
y2="18"
gradientUnits="userSpaceOnUse">
<stop
stop-color="white"
stop-opacity="0.63"
id="stop89" />
<stop
offset="1"
stop-color="white"
stop-opacity="0"
id="stop91" />
</linearGradient>
<radialGradient
id="paint2_radial_121_76"
cx="0"
cy="0"
r="1"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(256 207.5) rotate(90) scale(151 174.315)">
<stop
stop-color="#9A5610"
id="stop94"
offset="0"
style="stop-color:#382111;stop-opacity:1;" />
<stop
offset="1"
stop-color="#6F3E0D"
id="stop96" />
</radialGradient>
<linearGradient
id="paint3_linear_121_76"
x1="256.265"
y1="66"
x2="256.265"
y2="446.865"
gradientUnits="userSpaceOnUse">
<stop
stop-color="white"
stop-opacity="0.41"
id="stop99" />
<stop
offset="0.723958"
stop-opacity="0.34"
id="stop101" />
<stop
offset="0.77414"
stop-color="white"
stop-opacity="0.34"
id="stop103" />
<stop
offset="1"
stop-color="#111111"
stop-opacity="0.344532"
id="stop105" />
</linearGradient>
<linearGradient
id="paint4_linear_121_76"
x1="256.136"
y1="92.7582"
x2="256.136"
y2="311.241"
gradientUnits="userSpaceOnUse">
<stop
stop-opacity="0.28"
id="stop108" />
<stop
offset="1"
stop-color="white"
stop-opacity="0.35"
id="stop110" />
</linearGradient>
<radialGradient
id="paint5_radial_121_76"
cx="0"
cy="0"
r="1"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(256 207.5) rotate(90) scale(151 174.315)">
<stop
stop-color="#9A5610"
id="stop113" />
<stop
offset="1"
stop-color="#6F3E0D"
id="stop115" />
</radialGradient>
<linearGradient
id="paint6_linear_121_76"
x1="255"
y1="213"
x2="255"
y2="16"
gradientUnits="userSpaceOnUse">
<stop
stop-color="white"
stop-opacity="0.17"
id="stop118" />
<stop
offset="1"
stop-color="white"
stop-opacity="0"
id="stop120" />
</linearGradient>
<linearGradient
id="paint7_linear_121_76"
x1="256"
y1="0"
x2="256"
y2="512"
gradientUnits="userSpaceOnUse">
<stop
stop-color="#E4E3D6"
id="stop123" />
<stop
offset="1"
stop-color="#D5D1B6"
id="stop125" />
</linearGradient>
<clipPath
id="clip0_121_76">
<rect
width="512"
height="512"
rx="64"
fill="white"
id="rect128" />
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 9.2 KiB

View File

@ -0,0 +1,327 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="512"
height="512"
viewBox="0 0 512 512"
fill="none"
version="1.1"
id="svg133"
sodipodi:docname="goodreads-icon.svg"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview135"
pagecolor="#c2c2c2"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
showgrid="false"
inkscape:zoom="1.0744708"
inkscape:cx="33.504866"
inkscape:cy="259.66271"
inkscape:window-width="1888"
inkscape:window-height="1060"
inkscape:window-x="32"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg133" />
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M 243.868,66.5799 C 173.928,73.2164 130.327,132.885 135.4,215.019 c 3.345,54.163 25.185,92.212 63.635,110.861 30.289,14.691 73.72,16.016 99.679,3.043 18.46,-9.226 33.654,-24.329 42.898,-42.641 0.879,-1.742 1.826,-3.167 2.103,-3.167 0.666,0 0.662,33.464 -0.005,46.08 -2.537,47.996 -19.585,75.628 -52.882,85.714 -17.471,5.293 -42.156,5.819 -61.552,1.312 -26.331,-6.118 -44.295,-22.137 -49.782,-44.392 l -1.418,-5.751 -16.586,-0.009 -16.585,-0.01 0.337,3.629 c 4.449,47.87 51.436,78.65 117.733,77.123 65.091,-1.5 101.161,-30.87 111.433,-90.736 2.912,-16.969 2.75,-8.667 2.943,-151.168 L 377.53,73.7074 H 360.875 344.22 v 23.04 c 0,13.7376 -0.191,23.0396 -0.473,23.0396 -0.26,0 -1.64,-2.217 -3.066,-4.926 -3.508,-6.663 -7.514,-12.125 -13.515,-18.4238 C 305.151,73.3291 277.435,63.3947 243.868,66.5799 Z m 26.214,27.8599 c 37.926,5.0105 64.743,36.4072 72.053,84.3552 8.496,55.734 -11.404,104.801 -50.204,123.785 -15.645,7.655 -36.015,9.706 -55.173,5.555 -51.91,-11.247 -79.466,-71.313 -64.516,-140.63 8.829,-40.932 38.554,-70.2707 74.442,-73.4748 5.604,-0.5002 18.177,-0.28 23.398,0.4096 z"
fill="#66390C"
id="path6"
style="fill:#000000;fill-opacity:1" />
<defs
id="defs131">
<filter
id="filter0_i_121_76"
x="135"
y="66"
width="242.53"
height="380.865"
filterUnits="userSpaceOnUse"
color-interpolation-filters="sRGB">
<feFlood
flood-opacity="0"
result="BackgroundImageFix"
id="feFlood33" />
<feBlend
mode="normal"
in="SourceGraphic"
in2="BackgroundImageFix"
result="shape"
id="feBlend35" />
<feColorMatrix
in="SourceAlpha"
type="matrix"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
result="hardAlpha"
id="feColorMatrix37" />
<feOffset
id="feOffset39" />
<feGaussianBlur
stdDeviation="10"
id="feGaussianBlur41" />
<feComposite
in2="hardAlpha"
operator="arithmetic"
k2="-1"
k3="1"
id="feComposite43" />
<feColorMatrix
type="matrix"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0"
id="feColorMatrix45" />
<feBlend
mode="normal"
in2="shape"
result="effect1_innerShadow_121_76"
id="feBlend47" />
</filter>
<filter
id="filter1_i_121_76"
x="135"
y="66"
width="242.53"
height="380.865"
filterUnits="userSpaceOnUse"
color-interpolation-filters="sRGB">
<feFlood
flood-opacity="0"
result="BackgroundImageFix"
id="feFlood50" />
<feBlend
mode="normal"
in="SourceGraphic"
in2="BackgroundImageFix"
result="shape"
id="feBlend52" />
<feColorMatrix
in="SourceAlpha"
type="matrix"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
result="hardAlpha"
id="feColorMatrix54" />
<feOffset
id="feOffset56" />
<feGaussianBlur
stdDeviation="10"
id="feGaussianBlur58" />
<feComposite
in2="hardAlpha"
operator="arithmetic"
k2="-1"
k3="1"
id="feComposite60" />
<feColorMatrix
type="matrix"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0"
id="feColorMatrix62" />
<feBlend
mode="normal"
in2="shape"
result="effect1_innerShadow_121_76"
id="feBlend64" />
</filter>
<filter
id="filter2_i_121_76"
x="167.199"
y="92.7582"
width="177.874"
height="218.483"
filterUnits="userSpaceOnUse"
color-interpolation-filters="sRGB">
<feFlood
flood-opacity="0"
result="BackgroundImageFix"
id="feFlood67" />
<feBlend
mode="normal"
in="SourceGraphic"
in2="BackgroundImageFix"
result="shape"
id="feBlend69" />
<feColorMatrix
in="SourceAlpha"
type="matrix"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
result="hardAlpha"
id="feColorMatrix71" />
<feOffset
id="feOffset73" />
<feGaussianBlur
stdDeviation="10"
id="feGaussianBlur75" />
<feComposite
in2="hardAlpha"
operator="arithmetic"
k2="-1"
k3="1"
id="feComposite77" />
<feColorMatrix
type="matrix"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0"
id="feColorMatrix79" />
<feBlend
mode="normal"
in2="shape"
result="effect1_innerShadow_121_76"
id="feBlend81" />
</filter>
<linearGradient
id="paint0_linear_121_76"
x1="256"
y1="0"
x2="256"
y2="512"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(2.3691356,82.130583)">
<stop
stop-color="#EFEDDE"
id="stop84" />
<stop
offset="1"
stop-color="#E6E1C3"
id="stop86" />
</linearGradient>
<linearGradient
id="paint1_linear_121_76"
x1="256"
y1="215"
x2="256"
y2="18"
gradientUnits="userSpaceOnUse">
<stop
stop-color="white"
stop-opacity="0.63"
id="stop89" />
<stop
offset="1"
stop-color="white"
stop-opacity="0"
id="stop91" />
</linearGradient>
<radialGradient
id="paint2_radial_121_76"
cx="0"
cy="0"
r="1"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(256 207.5) rotate(90) scale(151 174.315)">
<stop
stop-color="#9A5610"
id="stop94"
offset="0"
style="stop-color:#382111;stop-opacity:1;" />
<stop
offset="1"
stop-color="#6F3E0D"
id="stop96" />
</radialGradient>
<linearGradient
id="paint3_linear_121_76"
x1="256.265"
y1="66"
x2="256.265"
y2="446.865"
gradientUnits="userSpaceOnUse">
<stop
stop-color="white"
stop-opacity="0.41"
id="stop99" />
<stop
offset="0.723958"
stop-opacity="0.34"
id="stop101" />
<stop
offset="0.77414"
stop-color="white"
stop-opacity="0.34"
id="stop103" />
<stop
offset="1"
stop-color="#111111"
stop-opacity="0.344532"
id="stop105" />
</linearGradient>
<linearGradient
id="paint4_linear_121_76"
x1="256.136"
y1="92.7582"
x2="256.136"
y2="311.241"
gradientUnits="userSpaceOnUse">
<stop
stop-opacity="0.28"
id="stop108" />
<stop
offset="1"
stop-color="white"
stop-opacity="0.35"
id="stop110" />
</linearGradient>
<radialGradient
id="paint5_radial_121_76"
cx="0"
cy="0"
r="1"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(256 207.5) rotate(90) scale(151 174.315)">
<stop
stop-color="#9A5610"
id="stop113" />
<stop
offset="1"
stop-color="#6F3E0D"
id="stop115" />
</radialGradient>
<linearGradient
id="paint6_linear_121_76"
x1="255"
y1="213"
x2="255"
y2="16"
gradientUnits="userSpaceOnUse">
<stop
stop-color="white"
stop-opacity="0.17"
id="stop118" />
<stop
offset="1"
stop-color="white"
stop-opacity="0"
id="stop120" />
</linearGradient>
<linearGradient
id="paint7_linear_121_76"
x1="256"
y1="0"
x2="256"
y2="512"
gradientUnits="userSpaceOnUse">
<stop
stop-color="#E4E3D6"
id="stop123" />
<stop
offset="1"
stop-color="#D5D1B6"
id="stop125" />
</linearGradient>
<clipPath
id="clip0_121_76">
<rect
width="512"
height="512"
rx="64"
fill="white"
id="rect128" />
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 9.2 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 164 KiB

View File

@ -425,6 +425,28 @@ function redirect(url, type, initiator, forceRedirection) {
if (!url.pathname.startsWith('/book/show/') && url.pathname != '/') return
return `${randomInstance}${url.pathname}${url.search}`
}
case "wikiless": {
let GETArguments = []
if (url.search.length > 0) {
let search = url.search.substring(1) //get rid of '?'
let argstrings = search.split("&")
for (let i = 0; i < argstrings.length; i++) {
let args = argstrings[i].split("=")
GETArguments.push([args[0], args[1]])
}
}
let link = `${randomInstance}${url.pathname}`
let urlSplit = url.host.split(".")
if (urlSplit[0] != "wikipedia" && urlSplit[0] != "www") {
if (urlSplit[0] == "m") GETArguments.push(["mobileaction", "toggle_view_mobile"])
else GETArguments.push(["lang", urlSplit[0]])
if (urlSplit[1] == "m") GETArguments.push(["mobileaction", "toggle_view_mobile"])
// wikiless doesn't have mobile view support yet
}
for (let i = 0; i < GETArguments.length; i++) link += (i == 0 ? "?" : "&") + GETArguments[i][0] + "=" + GETArguments[i][1]
return link
}
default:
return `${randomInstance}${url.pathname}${url.search}`
}
@ -568,6 +590,7 @@ function initDefaults() {
options['ruralDictionary'] = ['https://rd.vern.cc']
options['anonymousOverflow'] = ['https://code.whatever.social']
options['biblioReads'] = ['https://biblioreads.ml']
options['wikiless'] = ['https://wikiless.org']
browser.storage.local.set({ options },
() => resolve()

View File

@ -489,7 +489,7 @@
"genius": {
"frontends": {
"dumb": {
"name": "dumb",
"name": "Dumb",
"instanceList": true,
"url": "https://github.com/rramiachraf/dumb"
}
@ -543,10 +543,10 @@
"embeddable": false,
"url": "https://stackoverflow.com/"
},
"goodReads": {
"goodreads": {
"frontends": {
"biblioReads": {
"name": "goodReads",
"name": "BiblioReads",
"instanceList": true,
"url": "https://github.com/nesaku/BiblioReads"
}
@ -558,9 +558,28 @@
"options": {
"enabled": false
},
"imageType": "svg",
"imageType": "svgMono",
"embeddable": false,
"url": "https://goodreads.com/"
},
"wikipedia": {
"frontends": {
"wikiless": {
"name": "Wikiless",
"instanceList": true,
"url": "https://wikiless.org"
}
},
"targets": [
"^https?:\\/{2}(?:[a-z]+\\.)*wikipedia\\.org\\/?"
],
"name": "Wikipedia",
"options": {
"enabled": false
},
"imageType": "svg",
"embeddable": false,
"url": "https://wikipedia.org"
}
}
}

View File

@ -41,6 +41,12 @@ function changeFrontendsSettings(service) {
}
}
}
const frontend_name_element = document.getElementById(`${service}_page`).getElementsByClassName("frontend_name")[0]
if (divs[service].frontend) {
frontend_name_element.href = config.services[service].frontends[divs[service].frontend.value].url
} else {
frontend_name_element.href = Object.values(config.services[service].frontends)[0].url
}
}
async function loadPage(path) {
@ -78,13 +84,6 @@ async function loadPage(path) {
})
}
const frontend_name_element = document.getElementById(`${service}_page`).getElementsByClassName("frontend_name")[0]
if (divs[service].frontend) {
frontend_name_element.href = config.services[service].frontends[divs[service].frontend.value].url
} else {
frontend_name_element.href = Object.values(config.services[service].frontends)[0].url
}
changeFrontendsSettings(service)

View File

@ -16,17 +16,15 @@ each val, service in services
h4(data-localise="__MSG_showInPopup__") Show in popup
input(id=service type="checkbox")
if Object.keys(services[service].frontends).length> 1
div(class="some-block option-block")
h4
a(class="frontend_name" target="_blank" data-localise="__MSG_frontend__") Frontend
select(id=service+"-frontend")
div(class="some-block option-block")
h4
a(class="frontend_name" target="_blank" data-localise="__MSG_frontend__") Frontend
select(id=service+"-frontend")
if Object.keys(services[service].frontends).length> 1
each val, frontend in services[service].frontends
option(value=frontend)=services[service].frontends[frontend].name
else
div(class="some-block option-block")
h4
a(class="frontend_name" target="_blank" data-localise="__MSG_frontend__") Frontend
else
option(value=frontend)=Object.values(services[service].frontends)[0].name
if services[service].embeddable
div(class="some-block option-block")