forked from recloudstream/cloudstream
site list changes (#872)
* site list changes - made site-list.json automatically create providers.json - removed site list from readme (now shows a link) - remove jquery dependency and split src into multiple files * update workflow file * oops wrong number * fix invalid regex * status 1 * revert providers.json
This commit is contained in:
parent
e05f8d0f3a
commit
1db8f98391
6 changed files with 139 additions and 212 deletions
75
.github/site-list.py
vendored
75
.github/site-list.py
vendored
|
@ -1,63 +1,54 @@
|
||||||
#!/usr/bin/python3
|
#!/usr/bin/python3
|
||||||
|
|
||||||
from glob import glob
|
from glob import glob
|
||||||
from re import findall, compile, sub, DOTALL
|
from re import findall, compile, DOTALL
|
||||||
|
from json import dump, load
|
||||||
from typing import List, Dict
|
from typing import List, Dict
|
||||||
|
|
||||||
# Globals
|
# Globals
|
||||||
URL_REGEX = compile(
|
URL_REGEX = compile(
|
||||||
"override\sva[lr]\smainUrl[^\"']+[\"'](https?://[a-zA-Z0-9\.-]+)[\"']")
|
"override\sva[lr]\smainUrl[^\"']+[\"'](https?://[a-zA-Z0-9\.-]+)[\"']")
|
||||||
NAME_REGEX = compile("class (.+?) ?: \w+\(\)\s\{")
|
NAME_REGEX = compile("([A-Za-z0-9]+)(?:.kt)$")
|
||||||
START_MARKER = "<!--SITE LIST START-->"
|
JSON_PATH = "docs/providers.json"
|
||||||
END_MARKER = "<!--SITE LIST END-->"
|
|
||||||
GLOB = "app/src/main/java/com/lagradost/cloudstream3/*providers/*Provider.kt"
|
GLOB = "app/src/main/java/com/lagradost/cloudstream3/*providers/*Provider.kt"
|
||||||
MAIN_API = "app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt"
|
|
||||||
API_REGEX = compile(
|
|
||||||
"val\s*allProviders.*?{\s.*?arrayListOf\(([\W\w]*?)\)\s*\n*\s*}", DOTALL)
|
|
||||||
|
|
||||||
sites: Dict[str, str] = {}
|
old_sites: Dict[str, Dict] = load(open(JSON_PATH, "r", encoding="utf-8"))
|
||||||
enabled_sites: List[str] = []
|
sites: Dict[str, Dict] = {}
|
||||||
|
|
||||||
|
|
||||||
with open(MAIN_API, "r", encoding="utf-8") as f:
|
|
||||||
apis = findall(API_REGEX, f.read())
|
|
||||||
for api_list in apis:
|
|
||||||
for api in api_list.split("\n"):
|
|
||||||
if not api.strip() or api.strip().startswith("/"):
|
|
||||||
continue
|
|
||||||
enabled_sites.append(api.strip().split("(")[0])
|
|
||||||
|
|
||||||
|
# parse all *Provider.kt files
|
||||||
for path in glob(GLOB):
|
for path in glob(GLOB):
|
||||||
with open(path, "r", encoding='utf-8') as file:
|
with open(path, "r", encoding='utf-8') as file:
|
||||||
try:
|
try:
|
||||||
site_text: str = file.read()
|
site_text: str = file.read()
|
||||||
name: List[str] = findall(NAME_REGEX, site_text)
|
name: str = findall(NAME_REGEX, path)[0]
|
||||||
provider_text: str = findall(URL_REGEX, site_text)
|
provider_url: str = [*findall(URL_REGEX, site_text), ""][0]
|
||||||
|
|
||||||
if name:
|
if name in old_sites.keys(): # if already in previous list use old status and name
|
||||||
if name[0] not in enabled_sites:
|
sites[name] = {
|
||||||
continue
|
"name": old_sites[name]['name'],
|
||||||
sites[name[0]] = provider_text[0]
|
"url": provider_url if provider_url else old_sites[name]['url'],
|
||||||
|
"status": old_sites[name]['status']
|
||||||
|
}
|
||||||
|
else: # if not in previous list add with new data
|
||||||
|
display_name = name
|
||||||
|
if display_name.endswith("Provider"):
|
||||||
|
display_name = display_name[:-len("Provider")]
|
||||||
|
sites[name] = {
|
||||||
|
"name": display_name,
|
||||||
|
"url": provider_url if provider_url else "",
|
||||||
|
"status": 1
|
||||||
|
}
|
||||||
|
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
print("{0}: {1}".format(path, ex))
|
print("{0}: {1}".format(path, ex))
|
||||||
|
|
||||||
|
# add sites from old_sites that are missing in new list
|
||||||
|
for name in old_sites.keys():
|
||||||
|
if name not in sites.keys():
|
||||||
|
sites[name] = {
|
||||||
|
"name": old_sites[name]['name'],
|
||||||
|
"url": old_sites[name]['url'],
|
||||||
|
"status": old_sites[name]['status']
|
||||||
|
}
|
||||||
|
|
||||||
with open("README.md", "r+", encoding='utf-8') as readme:
|
dump(sites, open(JSON_PATH, "w+", encoding="utf-8"), indent=4, sort_keys=True)
|
||||||
raw = readme.read()
|
|
||||||
if START_MARKER not in raw or END_MARKER not in raw:
|
|
||||||
raise RuntimeError("Missing start and end markers")
|
|
||||||
readme.seek(0)
|
|
||||||
|
|
||||||
readme.write(raw.split(START_MARKER)[0])
|
|
||||||
readme.write(START_MARKER+"\n")
|
|
||||||
|
|
||||||
for site in enabled_sites:
|
|
||||||
if site in sites:
|
|
||||||
readme.write(
|
|
||||||
"- [{0}]({1}) \n".format(sub("^https?://(?:www\.)?", "", sites[site]), sites[site]))
|
|
||||||
|
|
||||||
readme.write(END_MARKER)
|
|
||||||
readme.write(raw.split(END_MARKER)[-1])
|
|
||||||
|
|
||||||
readme.truncate()
|
|
||||||
|
|
4
.github/workflows/site_list.yml
vendored
4
.github/workflows/site_list.yml
vendored
|
@ -4,10 +4,10 @@ on:
|
||||||
push:
|
push:
|
||||||
branches: [ master ]
|
branches: [ master ]
|
||||||
paths:
|
paths:
|
||||||
- 'README.md'
|
|
||||||
- 'app/src/main/java/com/lagradost/cloudstream3/*providers/*Provider.kt'
|
- 'app/src/main/java/com/lagradost/cloudstream3/*providers/*Provider.kt'
|
||||||
- '.github/workflows/site_list.yml'
|
- '.github/workflows/site_list.yml'
|
||||||
- '.github/site-list.py'
|
- '.github/site-list.py'
|
||||||
|
- 'docs/providers.json'
|
||||||
- 'app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt'
|
- 'app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt'
|
||||||
|
|
||||||
concurrency:
|
concurrency:
|
||||||
|
@ -19,7 +19,7 @@ jobs:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
- name: Edit README.md
|
- name: Edit providers.json
|
||||||
run: |
|
run: |
|
||||||
python3 .github/site-list.py
|
python3 .github/site-list.py
|
||||||
- name: Commit to the repo
|
- name: Commit to the repo
|
||||||
|
|
52
README.md
52
README.md
|
@ -58,53 +58,5 @@ It merely scrapes 3rd-party websites that are publicly accessable via any regula
|
||||||
|
|
||||||
|
|
||||||
***Sites used:***
|
***Sites used:***
|
||||||
https://lagradost.github.io/CloudStream-3/
|
|
||||||
<!-- Do not remove those two comments -->
|
Look [here](https://lagradost.github.io/CloudStream-3/) for a comprehensive list
|
||||||
<!--SITE LIST START-->
|
|
||||||
- [pelisplus.icu](https://pelisplus.icu)
|
|
||||||
- [pelismart.com](https://pelismart.com)
|
|
||||||
- [melomovie.com](https://melomovie.com)
|
|
||||||
- [doramasyt.com](https://doramasyt.com)
|
|
||||||
- [cuevana3.me](https://cuevana3.me)
|
|
||||||
- [pelisflix.li](https://pelisflix.li)
|
|
||||||
- [seriesflix.video](https://seriesflix.video)
|
|
||||||
- [ihavenotv.com](https://ihavenotv.com)
|
|
||||||
- [lookmovie.io](https://lookmovie.io)
|
|
||||||
- [vmovee.watch](https://www.vmovee.watch)
|
|
||||||
- [allmoviesforyou.net](https://allmoviesforyou.net)
|
|
||||||
- [vidembed.cc](https://vidembed.cc)
|
|
||||||
- [vf-film.me](https://vf-film.me)
|
|
||||||
- [vf-serie.org](https://vf-serie.org)
|
|
||||||
- [asianembed.io](https://asianembed.io)
|
|
||||||
- [asiaflix.app](https://asiaflix.app)
|
|
||||||
- [fmovies.to](https://fmovies.to)
|
|
||||||
- [filman.cc](https://filman.cc)
|
|
||||||
- [dopebox.to](https://dopebox.to)
|
|
||||||
- [pinoymoviepedia.ru](https://pinoymoviepedia.ru)
|
|
||||||
- [pinoy-hd.xyz](https://www.pinoy-hd.xyz)
|
|
||||||
- [pinoymovies.es](https://pinoymovies.es)
|
|
||||||
- [trailers.to](https://trailers.to)
|
|
||||||
- [2embed.ru](https://www.2embed.ru)
|
|
||||||
- [dramasee.net](https://dramasee.net)
|
|
||||||
- [watchasian.sh](https://watchasian.sh)
|
|
||||||
- [kdramahood.com](https://kdramahood.com)
|
|
||||||
- [akwam.to](https://akwam.to)
|
|
||||||
- [mycima.tv](https://mycima.tv)
|
|
||||||
- [egy.best](https://www.egy.best)
|
|
||||||
- [hdm.to](https://hdm.to)
|
|
||||||
- [theflix.to](https://theflix.to)
|
|
||||||
- [v2.apimdb.net](https://v2.apimdb.net)
|
|
||||||
- [wcostream.com](https://www.wcostream.com)
|
|
||||||
- [gogoanime.film](https://gogoanime.film)
|
|
||||||
- [allanime.site](https://allanime.site)
|
|
||||||
- [animekisa.in](https://animekisa.in)
|
|
||||||
- [animeflick.net](https://animeflick.net)
|
|
||||||
- [tenshi.moe](https://tenshi.moe)
|
|
||||||
- [wcostream.cc](https://wcostream.cc)
|
|
||||||
- [9anime.id](https://9anime.id)
|
|
||||||
- [animeworld.tv](https://www.animeworld.tv)
|
|
||||||
- [zoro.to](https://zoro.to)
|
|
||||||
- [bestdubbedanime.com](https://bestdubbedanime.com)
|
|
||||||
- [monoschinos2.com](https://monoschinos2.com)
|
|
||||||
- [kawaiifu.com](https://kawaiifu.com)
|
|
||||||
<!--SITE LIST END-->
|
|
||||||
|
|
120
docs/index.html
120
docs/index.html
|
@ -7,131 +7,17 @@
|
||||||
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
||||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto">
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto">
|
||||||
<title>CloudStream-3 Supported Sites</title>
|
<title>CloudStream-3 Supported Sites</title>
|
||||||
<script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js'></script>
|
<link rel="stylesheet" href="/style.css">
|
||||||
|
|
||||||
<style>
|
|
||||||
body {
|
|
||||||
font-family: "Roboto", sans-serif;
|
|
||||||
background-color: #FFF;
|
|
||||||
}
|
|
||||||
.whiteText {
|
|
||||||
color : #FFF;
|
|
||||||
}
|
|
||||||
|
|
||||||
.button {
|
|
||||||
color : #000;
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.redButton {
|
|
||||||
}
|
|
||||||
.blueButton {
|
|
||||||
}
|
|
||||||
.greenButton {
|
|
||||||
}
|
|
||||||
.yellowButton {
|
|
||||||
}
|
|
||||||
.row {
|
|
||||||
padding: 0px 10px;
|
|
||||||
white-space: nowrap;
|
|
||||||
}
|
|
||||||
table {
|
|
||||||
border-spacing: 0.5rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.yellowButton::before {
|
|
||||||
background-image: url("data:image/svg+xml;charset=utf8,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='m12 24c6.6274 0 12-5.3726 12-12 0-6.62744-5.3726-12-12-12-6.62744 0-12 5.37256-12 12 0 6.6274 5.37256 12 12 12zm0-17.5c.4141 0 .75.33582.75.75v4.5c0 .4142-.3359.75-.75.75s-.75-.3358-.75-.75v-4.5c0-.41418.3359-.75.75-.75zm.8242 9.5658c.0635-.0919.1118-.195.1416-.3054.0132-.0482.0225-.0979.0283-.1487.0039-.0366.0059-.074.0059-.1117 0-.5522-.4478-1-1-1s-1 .4478-1 1 .4478 1 1 1c.3423 0 .644-.172.8242-.4342z' fill='%23dbab09'/%3E%3C/svg%3e");
|
|
||||||
}
|
|
||||||
|
|
||||||
.blueButton::before {
|
|
||||||
filter: sepia(100%) saturate(300%) brightness(70%) hue-rotate(180deg);
|
|
||||||
background-image: url("data:image/svg+xml;charset=utf8,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='m12 24c6.6274 0 12-5.3726 12-12 0-6.62744-5.3726-12-12-12-6.62744 0-12 5.37256-12 12 0 6.6274 5.37256 12 12 12zm0-17.5c.4141 0 .75.33582.75.75v4.5c0 .4142-.3359.75-.75.75s-.75-.3358-.75-.75v-4.5c0-.41418.3359-.75.75-.75zm.8242 9.5658c.0635-.0919.1118-.195.1416-.3054.0132-.0482.0225-.0979.0283-.1487.0039-.0366.0059-.074.0059-.1117 0-.5522-.4478-1-1-1s-1 .4478-1 1 .4478 1 1 1c.3423 0 .644-.172.8242-.4342z' fill='%23dbab09'/%3E%3C/svg%3e");
|
|
||||||
}
|
|
||||||
|
|
||||||
.redButton::before {
|
|
||||||
background-image: url("data:image/svg+xml;charset=utf8,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='m12 24c6.6274 0 12-5.3726 12-12 0-6.62744-5.3726-12-12-12-6.62744 0-12 5.37256-12 12 0 6.6274 5.37256 12 12 12zm0-17.5c.4141 0 .75.33582.75.75v4.5c0 .4142-.3359.75-.75.75s-.75-.3358-.75-.75v-4.5c0-.41418.3359-.75.75-.75zm.8242 9.5658c.0635-.0919.1118-.195.1416-.3054.0132-.0482.0225-.0979.0283-.1487.0039-.0366.0059-.074.0059-.1117 0-.5522-.4478-1-1-1s-1 .4478-1 1 .4478 1 1 1c.3423 0 .644-.172.8242-.4342z' fill='%23d73a49'/%3E%3C/svg%3e");
|
|
||||||
}
|
|
||||||
|
|
||||||
.greenButton::before{
|
|
||||||
background-image: url("data:image/svg+xml;charset=utf8,%3Csvg width='15' height='15' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='m1 12c0-6.07513 4.92487-11 11-11 6.0751 0 11 4.92487 11 11 0 6.0751-4.9249 11-11 11-6.07513 0-11-4.9249-11-11zm16.2803-2.71967c.2929-.29289.2929-.76777 0-1.06066s-.7677-.29289-1.0606 0l-5.9697 5.96963-2.46967-2.4696c-.29289-.2929-.76777-.2929-1.06066 0s-.29289.7677 0 1.0606l3 3c.29293.2929.76773.2929 1.06063 0z' fill='%2328a745'/%3E%3C/svg%3e");ontent: '';
|
|
||||||
}
|
|
||||||
|
|
||||||
.indicator::before {
|
|
||||||
display: inline-block;
|
|
||||||
width: 24px;
|
|
||||||
height: 24px;
|
|
||||||
content: "";
|
|
||||||
vertical-align: text-bottom;
|
|
||||||
background-size: 100% 100%;
|
|
||||||
background-repeat: no-repeat;
|
|
||||||
background-position: center center;
|
|
||||||
margin-right:10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<div>
|
<div>
|
||||||
<h1>Site supported:</h1>
|
<h1>Sites supported (<span id="count">0</span>):</h1>
|
||||||
<table>
|
<table>
|
||||||
<tbody id="siteList"></tbody>
|
<tbody id="siteList"></tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<script>
|
<script src="/script.js" type="text/javascript"></script>
|
||||||
var status = document.getElementById("status");
|
|
||||||
var mainContainer = document.getElementById("siteList");
|
|
||||||
$(document).ready(function () {
|
|
||||||
$.getJSON("providers.json", function (data) {
|
|
||||||
status.innerHTML = "Parsing...";
|
|
||||||
for (var key in data) {
|
|
||||||
status.innerHTML = "Reading..." + key;
|
|
||||||
if (data.hasOwnProperty(key)) {
|
|
||||||
var value = data[key];
|
|
||||||
if(value.url == "NONE") { continue; }
|
|
||||||
|
|
||||||
var _status = value.status
|
|
||||||
|
|
||||||
var node = document.createElement("tr");
|
|
||||||
node.classList.add("row");
|
|
||||||
|
|
||||||
var _a = document.createElement("a");
|
|
||||||
_a.setAttribute('href', value.url);
|
|
||||||
_a.innerHTML = value.name
|
|
||||||
|
|
||||||
var _statusText = "Unknown";
|
|
||||||
var _buttonText = "yellow";
|
|
||||||
switch (_status) {
|
|
||||||
case 0:
|
|
||||||
_statusText = "Unavailable";
|
|
||||||
_buttonText = "red";
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
_statusText = "Available";
|
|
||||||
_buttonText = "green";
|
|
||||||
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
_statusText = "Slow";
|
|
||||||
_buttonText = "yellow";
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
_statusText = "Beta";
|
|
||||||
_buttonText = "blue";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
_a.classList.add(_buttonText+"Button");
|
|
||||||
_a.classList.add("indicator");
|
|
||||||
_a.classList.add("button");
|
|
||||||
node.appendChild(_a);
|
|
||||||
mainContainer.appendChild(node);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}).fail(function () {
|
|
||||||
console.log("An error has occurred.");
|
|
||||||
});
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
|
|
49
docs/script.js
Normal file
49
docs/script.js
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
const count = document.getElementById("count")
|
||||||
|
const mainContainer = document.getElementById("siteList");
|
||||||
|
fetch("/providers.json" + "?v=" + Date.now())
|
||||||
|
.then(r => r.json())
|
||||||
|
.then(function (data) {
|
||||||
|
count.innerHTML = Object.keys(data).length;
|
||||||
|
for (var key in data) {
|
||||||
|
if (data.hasOwnProperty(key)) {
|
||||||
|
var value = data[key];
|
||||||
|
if (value.url == "NONE") { continue; }
|
||||||
|
|
||||||
|
var _status = value.status
|
||||||
|
|
||||||
|
var node = document.createElement("tr");
|
||||||
|
node.classList.add("row");
|
||||||
|
|
||||||
|
var _a = document.createElement("a");
|
||||||
|
_a.setAttribute('href', value.url);
|
||||||
|
_a.innerHTML = value.name
|
||||||
|
|
||||||
|
var _statusText = "Unknown";
|
||||||
|
var _buttonText = "yellow";
|
||||||
|
switch (_status) {
|
||||||
|
case 0:
|
||||||
|
_statusText = "Unavailable";
|
||||||
|
_buttonText = "red";
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
_statusText = "Available";
|
||||||
|
_buttonText = "green";
|
||||||
|
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
_statusText = "Slow";
|
||||||
|
_buttonText = "yellow";
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
_statusText = "Beta";
|
||||||
|
_buttonText = "blue";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
_a.classList.add(_buttonText + "Button");
|
||||||
|
_a.classList.add("indicator");
|
||||||
|
_a.classList.add("button");
|
||||||
|
node.appendChild(_a);
|
||||||
|
mainContainer.appendChild(node);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
49
docs/style.css
Normal file
49
docs/style.css
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
body {
|
||||||
|
font-family: "Roboto", sans-serif;
|
||||||
|
background-color: #FFF;
|
||||||
|
}
|
||||||
|
.whiteText {
|
||||||
|
color : #FFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
.button {
|
||||||
|
color : #000;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.row {
|
||||||
|
padding: 0px 10px;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
table {
|
||||||
|
border-spacing: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.yellowButton::before {
|
||||||
|
background-image: url("data:image/svg+xml;charset=utf8,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='m12 24c6.6274 0 12-5.3726 12-12 0-6.62744-5.3726-12-12-12-6.62744 0-12 5.37256-12 12 0 6.6274 5.37256 12 12 12zm0-17.5c.4141 0 .75.33582.75.75v4.5c0 .4142-.3359.75-.75.75s-.75-.3358-.75-.75v-4.5c0-.41418.3359-.75.75-.75zm.8242 9.5658c.0635-.0919.1118-.195.1416-.3054.0132-.0482.0225-.0979.0283-.1487.0039-.0366.0059-.074.0059-.1117 0-.5522-.4478-1-1-1s-1 .4478-1 1 .4478 1 1 1c.3423 0 .644-.172.8242-.4342z' fill='%23dbab09'/%3E%3C/svg%3e");
|
||||||
|
}
|
||||||
|
|
||||||
|
.blueButton::before {
|
||||||
|
filter: sepia(100%) saturate(300%) brightness(70%) hue-rotate(180deg);
|
||||||
|
background-image: url("data:image/svg+xml;charset=utf8,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='m12 24c6.6274 0 12-5.3726 12-12 0-6.62744-5.3726-12-12-12-6.62744 0-12 5.37256-12 12 0 6.6274 5.37256 12 12 12zm0-17.5c.4141 0 .75.33582.75.75v4.5c0 .4142-.3359.75-.75.75s-.75-.3358-.75-.75v-4.5c0-.41418.3359-.75.75-.75zm.8242 9.5658c.0635-.0919.1118-.195.1416-.3054.0132-.0482.0225-.0979.0283-.1487.0039-.0366.0059-.074.0059-.1117 0-.5522-.4478-1-1-1s-1 .4478-1 1 .4478 1 1 1c.3423 0 .644-.172.8242-.4342z' fill='%23dbab09'/%3E%3C/svg%3e");
|
||||||
|
}
|
||||||
|
|
||||||
|
.redButton::before {
|
||||||
|
background-image: url("data:image/svg+xml;charset=utf8,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='m12 24c6.6274 0 12-5.3726 12-12 0-6.62744-5.3726-12-12-12-6.62744 0-12 5.37256-12 12 0 6.6274 5.37256 12 12 12zm0-17.5c.4141 0 .75.33582.75.75v4.5c0 .4142-.3359.75-.75.75s-.75-.3358-.75-.75v-4.5c0-.41418.3359-.75.75-.75zm.8242 9.5658c.0635-.0919.1118-.195.1416-.3054.0132-.0482.0225-.0979.0283-.1487.0039-.0366.0059-.074.0059-.1117 0-.5522-.4478-1-1-1s-1 .4478-1 1 .4478 1 1 1c.3423 0 .644-.172.8242-.4342z' fill='%23d73a49'/%3E%3C/svg%3e");
|
||||||
|
}
|
||||||
|
|
||||||
|
.greenButton::before{
|
||||||
|
background-image: url("data:image/svg+xml;charset=utf8,%3Csvg width='15' height='15' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='m1 12c0-6.07513 4.92487-11 11-11 6.0751 0 11 4.92487 11 11 0 6.0751-4.9249 11-11 11-6.07513 0-11-4.9249-11-11zm16.2803-2.71967c.2929-.29289.2929-.76777 0-1.06066s-.7677-.29289-1.0606 0l-5.9697 5.96963-2.46967-2.4696c-.29289-.2929-.76777-.2929-1.06066 0s-.29289.7677 0 1.0606l3 3c.29293.2929.76773.2929 1.06063 0z' fill='%2328a745'/%3E%3C/svg%3e");ontent: '';
|
||||||
|
}
|
||||||
|
|
||||||
|
.indicator::before {
|
||||||
|
display: inline-block;
|
||||||
|
width: 24px;
|
||||||
|
height: 24px;
|
||||||
|
content: "";
|
||||||
|
vertical-align: text-bottom;
|
||||||
|
background-size: 100% 100%;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: center center;
|
||||||
|
margin-right:10px;
|
||||||
|
}
|
Loading…
Reference in a new issue