Compare commits
1 Commits
master
...
graphs-n-s
Author | SHA1 | Date |
---|---|---|
lza_menace | ff30728863 | 3 years ago |
@ -1,15 +0,0 @@
|
||||
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
||||
Version 2, December 2004
|
||||
|
||||
Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
|
||||
|
||||
Everyone is permitted to copy and distribute verbatim or modified
|
||||
copies of this license document, and changing it is allowed as long
|
||||
as the name is changed.
|
||||
|
||||
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. You just DO WHAT THE FUCK YOU WANT TO.
|
||||
|
||||
|
@ -0,0 +1,9 @@
|
||||
setup:
|
||||
python3 -m venv .venv
|
||||
.venv/bin/pip install -r requirements.txt
|
||||
|
||||
dev:
|
||||
./bin/dev
|
||||
|
||||
prod:
|
||||
./bin/prod
|
@ -0,0 +1,7 @@
|
||||
#!/bin/bash
|
||||
|
||||
source .venv/bin/activate
|
||||
export FLASK_APP=suchwow/app.py
|
||||
export FLASK_SECRETS=config.py
|
||||
export FLASK_DEBUG=1
|
||||
flask $@
|
@ -0,0 +1,7 @@
|
||||
#!/bin/bash
|
||||
|
||||
source .venv/bin/activate
|
||||
export FLASK_APP=suchwow/app.py
|
||||
export FLASK_SECRETS=config.py
|
||||
export FLASK_DEBUG=1
|
||||
flask run
|
@ -0,0 +1,20 @@
|
||||
#!/bin/bash
|
||||
|
||||
BASE=data/gunicorn
|
||||
|
||||
source .venv/bin/activate
|
||||
export FLASK_APP=suchwow/app.py
|
||||
export FLASK_SECRETS=config.py
|
||||
export FLASK_DEBUG=0
|
||||
export FLASK_ENV=production
|
||||
|
||||
mkdir -p $BASE
|
||||
|
||||
gunicorn \
|
||||
--bind 0.0.0.0:4000 "suchwow.app:app" \
|
||||
--daemon \
|
||||
--log-file $BASE/gunicorn.log \
|
||||
--pid $BASE/gunicorn.pid \
|
||||
--reload
|
||||
|
||||
echo "Starting gunicorn"
|
@ -1,25 +0,0 @@
|
||||
OIDC_URL=https://login.wownero.com/auth/realms/master/protocol/openid-connect
|
||||
OIDC_CLIENT_ID=suchwow-dev
|
||||
OIDC_CLIENT_SECRET=yyy-yyyyy-yyyyy-yy
|
||||
OIDC_REDIRECT_URL=http://localhost:5000/auth
|
||||
SECRET_KEY=ssssssssssss
|
||||
DATA_FOLDER=/absolute/path/to/the/place/you/store/images
|
||||
SERVER_NAME=localhost:5000
|
||||
WALLET_PATH=/absolute/path/to/the/place/you/store/wallet
|
||||
WALLET_PASS=mytopsecretpass
|
||||
WALLET_HOST=localhost
|
||||
WALLET_PORT=8888
|
||||
WALLET_PROTO=http
|
||||
WALLET_RPC_USER=suchwow
|
||||
WALLET_RPC_PASS=again
|
||||
DAEMON_URI=http://node.suchwow.xyz:34568
|
||||
PRAW_CLIENT_SECRET=xxxx
|
||||
PRAW_CLIENT_ID=xxxxx
|
||||
PRAW_USER_AGENT=xxxxx
|
||||
PRAW_USERNAME=xxxxx
|
||||
PRAW_PASSWORD=xxxx
|
||||
DISCORD_URL=https://xxxx
|
||||
MM_ICON=https://xxxx
|
||||
MM_CHANNEL=xxxx
|
||||
MM_USERNAME=xxxx
|
||||
MM_ENDPOINT=https://xxxx
|
@ -1,29 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
source .venv/bin/activate
|
||||
export FLASK_APP=suchwow/app.py
|
||||
export FLASK_SECRETS=config.py
|
||||
export FLASK_DEBUG=0
|
||||
export FLASK_ENV=production
|
||||
|
||||
# override
|
||||
export $(cat .env)
|
||||
|
||||
if [[ ${1} == "prod" ]];
|
||||
then
|
||||
export BASE=./data/gunicorn
|
||||
mkdir -p $BASE
|
||||
pgrep -F $BASE/gunicorn.pid
|
||||
if [[ $? != 0 ]]; then
|
||||
gunicorn \
|
||||
--bind 127.0.0.1:4000 "suchwow.app:app" \
|
||||
--daemon \
|
||||
--log-file $BASE/gunicorn.log \
|
||||
--pid $BASE/gunicorn.pid \
|
||||
--reload
|
||||
sleep 2
|
||||
echo "Started gunicorn on 127.0.0.1:4000 with pid $(cat $BASE/gunicorn.pid)"
|
||||
fi
|
||||
else
|
||||
flask $@
|
||||
fi
|
@ -0,0 +1,30 @@
|
||||
from os import getenv
|
||||
|
||||
|
||||
OIDC_URL = 'https://login.wownero.com/auth/realms/master/protocol/openid-connect',
|
||||
OIDC_CLIENT_ID = 'suchwowxxx',
|
||||
OIDC_CLIENT_SECRET = 'xxxxxxxxxx',
|
||||
OIDC_REDIRECT_URL = 'http://localhost:5000/auth'
|
||||
SECRET_KEY = 'yyyyyyyyyyyyy',
|
||||
SESSION_TYPE = 'filesystem'
|
||||
DATA_FOLDER = '/path/to/the/uploads'
|
||||
ALLOWED_EXTENSIONS = {'png', 'jpg', 'jpeg', 'gif'}
|
||||
MAX_CONTENT_LENGTH = 16 * 1024 * 1024
|
||||
WALLET_HOST = 'localhost'
|
||||
WALLET_PORT = 8888
|
||||
WALLET_PROTO = 'http'
|
||||
WALLET_USER = 'suchwow'
|
||||
WALLET_PASS = 'zzzzzzzzzzzzzzz'
|
||||
PRAW_CLIENT_SECRET = 'xxxxxxxx'
|
||||
PRAW_CLIENT_ID = 'xxxxxxxx'
|
||||
PRAW_USER_AGENT = 'suchwow-yyyy-python'
|
||||
PRAW_USERNAME = 'xxxxxxxx'
|
||||
PRAW_PASSWORD = 'xxxxxxxx'
|
||||
SERVER_NAME = 'localhost'
|
||||
DISCORD_URL = 'xxxxxxx'
|
||||
BANNED_USERS = {'username': 'reason for the ban'}
|
||||
|
||||
MM_ICON = getenv('MM_ICON', 'https://funding.wownero.com/static/wowdoge-a.jpg')
|
||||
MM_CHANNEL = getenv('MM_CHANNEL', 'suchwow')
|
||||
MM_USERNAME = getenv('MM_USERNAME', 'SuchWow!')
|
||||
MM_ENDPOINT = getenv('MM_ENDPOINT', 'ppppppppppppppppppppppppp')
|
@ -1,46 +0,0 @@
|
||||
from os import getenv
|
||||
from dotenv import load_dotenv
|
||||
|
||||
|
||||
load_dotenv()
|
||||
|
||||
# generated from https://login.wownero.com/developer/register
|
||||
OIDC_URL = getenv('OIDC_URL', 'https://login.wownero.com/auth/realms/master/protocol/openid-connect')
|
||||
OIDC_CLIENT_ID = getenv('OIDC_CLIENT_ID', 'suchwow-dev')
|
||||
OIDC_CLIENT_SECRET = getenv('OIDC_CLIENT_SECRET', '')
|
||||
OIDC_REDIRECT_URL = getenv('OIDC_REDIRECT_URL', 'http://localhost:5000/auth')
|
||||
|
||||
# you specify something
|
||||
SECRET_KEY = getenv('SECRET_KEY', 'yyyyyyyyyyyyy') # whatever you want it to be
|
||||
DATA_FOLDER = getenv('DATA_FOLDER', '/path/to/uploads') # some stable storage path
|
||||
SERVER_NAME = getenv('SERVER_NAME', 'localhost') # name of your DNS resolvable site (.com)
|
||||
WALLET_HOST = getenv('WALLET_HOST', 'localhost') #
|
||||
WALLET_PORT = int(getenv('WALLET_PORT', 8888)) #
|
||||
WALLET_PROTO = getenv('WALLET_PROTO', 'http') #
|
||||
WALLET_RPC_USER = getenv('WALLET_RPC_USER', 'suchwow') #
|
||||
WALLET_RPC_PASS = getenv('WALLET_RPC_PASS', 'suchwow') #
|
||||
WALLET_PASS = getenv('WALLET_PASS', 'zzzzzzz') # You specify all these wallet details in .env
|
||||
|
||||
# Optional for banning users who post crazy shit (they do)
|
||||
BANNED_USERS = {'username': 'reason for the ban'}
|
||||
|
||||
# Optional for posting to Reddit
|
||||
PRAW_CLIENT_SECRET = getenv('PRAW_CLIENT_SECRET', None)
|
||||
PRAW_CLIENT_ID = getenv('PRAW_CLIENT_ID', None)
|
||||
PRAW_USER_AGENT = getenv('PRAW_USER_AGENT', None)
|
||||
PRAW_USERNAME = getenv('PRAW_USERNAME', None)
|
||||
PRAW_PASSWORD = getenv('PRAW_PASSWORD', None)
|
||||
|
||||
# Optional for posting to Discord
|
||||
DISCORD_URL = getenv('DISCORD_URL', None)
|
||||
|
||||
# Optional for posting to Mattermost
|
||||
MM_ICON = getenv('MM_ICON', 'https://funding.wownero.com/static/wowdoge-a.jpg')
|
||||
MM_CHANNEL = getenv('MM_CHANNEL', 'suchwow')
|
||||
MM_USERNAME = getenv('MM_USERNAME', 'SuchWow!')
|
||||
MM_ENDPOINT = getenv('MM_ENDPOINT', 'ppppppppppppppppppppppppp')
|
||||
|
||||
# defaults
|
||||
SESSION_TYPE = 'filesystem'
|
||||
ALLOWED_EXTENSIONS = {'png', 'jpg', 'jpeg', 'gif'}
|
||||
MAX_CONTENT_LENGTH = 16 * 1024 * 1024
|
@ -1,15 +0,0 @@
|
||||
from flask import Blueprint, current_app
|
||||
from arrow import get as arrow_get
|
||||
|
||||
|
||||
bp = Blueprint('filters', 'filters')
|
||||
|
||||
@bp.app_template_filter('shorten_address')
|
||||
def shorten_address(a):
|
||||
_p = a[0:4]
|
||||
_s = a[-4:]
|
||||
return f'{_p}...{_s}'
|
||||
|
||||
@bp.app_template_filter('humanize')
|
||||
def humanize(d):
|
||||
return arrow_get(d).humanize()
|
@ -1,63 +1,30 @@
|
||||
from flask import jsonify, Blueprint, url_for, request, abort
|
||||
from suchwow.models import Post
|
||||
from suchwow import wownero
|
||||
|
||||
from suchwow.utils.helpers import rw_cache, get_top_posters, get_top_posts
|
||||
|
||||
|
||||
bp = Blueprint("api", "api")
|
||||
|
||||
|
||||
@bp.route("/api/list")
|
||||
def api_list():
|
||||
limit = request.args.get('limit', 30)
|
||||
offset = request.args.get('offset', 0)
|
||||
|
||||
# Hacky way to convert query str value to int
|
||||
try:
|
||||
limit = int(limit)
|
||||
offset = int(offset)
|
||||
except:
|
||||
abort(500, "Bleep bleep")
|
||||
|
||||
if limit > 30:
|
||||
limit = 30
|
||||
|
||||
all_posts = []
|
||||
posts = Post.select().where(Post.approved == True).order_by(
|
||||
Post.timestamp.desc()).limit(limit).offset(offset)
|
||||
for post in posts:
|
||||
wallet = wownero.Wallet()
|
||||
if wallet.connected:
|
||||
address = wallet.get_address(account=post.account_index)
|
||||
else:
|
||||
address = ''
|
||||
|
||||
payload = {
|
||||
'image': url_for('post.uploaded_file', filename=post.image_name, _external=True),
|
||||
'submitter': post.submitter,
|
||||
'address': address,
|
||||
'title': post.title,
|
||||
'text': post.text,
|
||||
'href': url_for('post.read', id=post.id, _external=True),
|
||||
'id': post.id,
|
||||
'timestamp': post.timestamp
|
||||
}
|
||||
all_posts.append(payload)
|
||||
return jsonify(all_posts)
|
||||
|
||||
|
||||
@bp.route("/api/posters")
|
||||
def api_posters():
|
||||
|
||||
posters = get_top_posters()
|
||||
all_posters = {}
|
||||
for poster, data in posters.items():
|
||||
payload = {
|
||||
"submitter": poster,
|
||||
"posts": data["posts"],
|
||||
"amount": data["amount"],
|
||||
}
|
||||
all_posters.append(payload)
|
||||
|
||||
return jsonify(posters)
|
||||
from flask import jsonify, Blueprint, url_for
|
||||
from suchwow.models import Post
|
||||
from suchwow import wownero
|
||||
|
||||
|
||||
bp = Blueprint("api", "api")
|
||||
|
||||
@bp.route("/api/list")
|
||||
def api_list():
|
||||
all_posts = []
|
||||
posts = Post.select().where(Post.approved==True)
|
||||
for post in posts:
|
||||
wallet = wownero.Wallet()
|
||||
if wallet.connected:
|
||||
address = wallet.get_address(account=post.account_index)
|
||||
else:
|
||||
address = ''
|
||||
|
||||
payload = {
|
||||
'image': url_for('post.uploaded_file', filename=post.image_name, _external=True),
|
||||
'submitter': post.submitter,
|
||||
'address': address,
|
||||
'title': post.title,
|
||||
'text': post.text,
|
||||
'href': url_for('post.read', id=post.id, _external=True),
|
||||
'id': post.id,
|
||||
'timestamp': post.timestamp
|
||||
}
|
||||
all_posts.append(payload)
|
||||
return jsonify(all_posts)
|
||||
|
@ -1,30 +1,28 @@
|
||||
from datetime import datetime, timedelta
|
||||
from os import path
|
||||
from flask import render_template, Blueprint, request, session, flash
|
||||
from flask import send_from_directory, redirect, url_for, current_app
|
||||
from werkzeug.utils import secure_filename
|
||||
from suchwow import wownero
|
||||
from suchwow.models import Post
|
||||
from suchwow.utils.helpers import rw_cache, get_top_posters, get_top_posts
|
||||
|
||||
|
||||
bp = Blueprint("leaderboard", "leaderboard")
|
||||
|
||||
@bp.route("/leaderboards/top_posters")
|
||||
def top_posters():
|
||||
top_posters = get_top_posters()
|
||||
return render_template("leaderboard.html", posters=top_posters)
|
||||
|
||||
@bp.route("/leaderboards/top_posts")
|
||||
def top_posts():
|
||||
days = request.args.get('days', 1)
|
||||
try:
|
||||
days = int(days)
|
||||
except:
|
||||
days = 1
|
||||
@bp.route("/leaderboard")
|
||||
def leaderboard():
|
||||
top_posters = {}
|
||||
posts = Post.select().where(Post.approved==True)
|
||||
for post in posts:
|
||||
transfers = []
|
||||
incoming = wownero.Wallet().incoming_transfers(post.account_index)
|
||||
if "transfers" in incoming:
|
||||
for xfer in incoming["transfers"]:
|
||||
transfers.append(wownero.from_atomic(xfer["amount"]))
|
||||
total = sum(transfers)
|
||||
if post.submitter not in top_posters:
|
||||
top_posters[post.submitter] = {"amount": 0, "posts": []}
|
||||
|
||||
if days not in [1, 3, 7, 30]:
|
||||
days = 7
|
||||
top_posters[post.submitter]["amount"] += float(total)
|
||||
top_posters[post.submitter]["posts"].append(post)
|
||||
|
||||
posts = get_top_posts(days)
|
||||
return render_template("post/top.html", posts=posts, days=days)
|
||||
return render_template("leaderboard.html", posters=top_posters)
|
||||
|
Before Width: | Height: | Size: 89 KiB After Width: | Height: | Size: 89 KiB |
Before Width: | Height: | Size: 46 KiB |
@ -0,0 +1,342 @@
|
||||
/*!
|
||||
* Bootstrap Reboot v4.0.0-beta.2 (https://getbootstrap.com)
|
||||
* Copyright 2011-2017 The Bootstrap Authors
|
||||
* Copyright 2011-2017 Twitter, Inc.
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
* Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
|
||||
*/
|
||||
*,
|
||||
*::before,
|
||||
*::after {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
html {
|
||||
font-family: sans-serif;
|
||||
line-height: 1.15;
|
||||
-webkit-text-size-adjust: 100%;
|
||||
-ms-text-size-adjust: 100%;
|
||||
-ms-overflow-style: scrollbar;
|
||||
-webkit-tap-highlight-color: transparent;
|
||||
}
|
||||
|
||||
@-ms-viewport {
|
||||
width: device-width;
|
||||
}
|
||||
|
||||
article, aside, dialog, figcaption, figure, footer, header, hgroup, main, nav, section {
|
||||
display: block;
|
||||
}
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
|
||||
font-size: 1rem;
|
||||
font-weight: 400;
|
||||
line-height: 1.5;
|
||||
color: #212529;
|
||||
text-align: left;
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
[tabindex="-1"]:focus {
|
||||
outline: none !important;
|
||||
}
|
||||
|
||||
hr {
|
||||
box-sizing: content-box;
|
||||
height: 0;
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
p {
|
||||
margin-top: 0;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
abbr[title],
|
||||
abbr[data-original-title] {
|
||||
text-decoration: underline;
|
||||
-webkit-text-decoration: underline dotted;
|
||||
text-decoration: underline dotted;
|
||||
cursor: help;
|
||||
border-bottom: 0;
|
||||
}
|
||||
|
||||
address {
|
||||
margin-bottom: 1rem;
|
||||
font-style: normal;
|
||||
line-height: inherit;
|
||||
}
|
||||
|
||||
ol,
|
||||
ul,
|
||||
dl {
|
||||
margin-top: 0;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
ol ol,
|
||||
ul ul,
|
||||
ol ul,
|
||||
ul ol {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
dt {
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
dd {
|
||||
margin-bottom: .5rem;
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
blockquote {
|
||||
margin: 0 0 1rem;
|
||||
}
|
||||
|
||||
dfn {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
b,
|
||||
strong {
|
||||
font-weight: bolder;
|
||||
}
|
||||
|
||||
small {
|
||||
font-size: 80%;
|
||||
}
|
||||
|
||||
sub,
|
||||
sup {
|
||||
position: relative;
|
||||
font-size: 75%;
|
||||
line-height: 0;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
sub {
|
||||
bottom: -.25em;
|
||||
}
|
||||
|
||||
sup {
|
||||
top: -.5em;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #007bff;
|
||||
text-decoration: none;
|
||||
background-color: transparent;
|
||||
-webkit-text-decoration-skip: objects;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: #0056b3;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
a:not([href]):not([tabindex]) {
|
||||
color: inherit;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a:not([href]):not([tabindex]):focus, a:not([href]):not([tabindex]):hover {
|
||||
color: inherit;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a:not([href]):not([tabindex]):focus {
|
||||
outline: 0;
|
||||
}
|
||||
|
||||
pre,
|
||||
code,
|
||||
kbd,
|
||||
samp {
|
||||
font-family: monospace, monospace;
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
pre {
|
||||
margin-top: 0;
|
||||
margin-bottom: 1rem;
|
||||
overflow: auto;
|
||||
-ms-overflow-style: scrollbar;
|
||||
}
|
||||
|
||||
figure {
|
||||
margin: 0 0 1rem;
|
||||
}
|
||||
|
||||
img {
|
||||
vertical-align: middle;
|
||||
border-style: none;
|
||||
}
|
||||
|
||||
svg:not(:root) {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
a,
|
||||
area,
|
||||
button,
|
||||
[role="button"],
|
||||
input:not([type="range"]),
|
||||
label,
|
||||
select,
|
||||
summary,
|
||||
textarea {
|
||||
-ms-touch-action: manipulation;
|
||||
touch-action: manipulation;
|
||||
}
|
||||
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
caption {
|
||||
padding-top: 0.75rem;
|
||||
padding-bottom: 0.75rem;
|
||||
color: #868e96;
|
||||
text-align: left;
|
||||
caption-side: bottom;
|
||||
}
|
||||
|
||||
th {
|
||||
text-align: inherit;
|
||||
}
|
||||
|
||||
label {
|
||||
display: inline-block;
|
||||
margin-bottom: .5rem;
|
||||
}
|
||||
|
||||
button {
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
button:focus {
|
||||
outline: 1px dotted;
|
||||
outline: 5px auto -webkit-focus-ring-color;
|
||||
}
|
||||
|
||||
input,
|
||||
button,
|
||||
select,
|
||||
optgroup,
|
||||
textarea {
|
||||
margin: 0;
|
||||
font-family: inherit;
|
||||
font-size: inherit;
|
||||
line-height: inherit;
|
||||
}
|
||||
|
||||
button,
|
||||
input {
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
button,
|
||||
select {
|
||||
text-transform: none;
|
||||
}
|
||||
|
||||
button,
|
||||
html [type="button"],
|
||||
[type="reset"],
|
||||
[type="submit"] {
|
||||
-webkit-appearance: button;
|
||||
}
|
||||
|
||||
button::-moz-focus-inner,
|
||||
[type="button"]::-moz-focus-inner,
|
||||
[type="reset"]::-moz-focus-inner,
|
||||
[type="submit"]::-moz-focus-inner {
|
||||
padding: 0;
|
||||
border-style: none;
|
||||
}
|
||||
|
||||
input[type="radio"],
|
||||
input[type="checkbox"] {
|
||||
box-sizing: border-box;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
input[type="date"],
|
||||
input[type="time"],
|
||||
input[type="datetime-local"],
|
||||
input[type="month"] {
|
||||
-webkit-appearance: listbox;
|
||||
}
|
||||
|
||||
textarea {
|
||||
overflow: auto;
|
||||
resize: vertical;
|
||||
}
|
||||
|
||||
fieldset {
|
||||
min-width: 0;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
border: 0;
|
||||
}
|
||||
|
||||
legend {
|
||||
display: block;
|
||||
width: 100%;
|
||||
max-width: 100%;
|
||||
padding: 0;
|
||||
margin-bottom: .5rem;
|
||||
font-size: 1.5rem;
|
||||
line-height: inherit;
|
||||
color: inherit;
|
||||
white-space: normal;
|
||||
}
|
||||
|
||||
progress {
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
[type="number"]::-webkit-inner-spin-button,
|
||||
[type="number"]::-webkit-outer-spin-button {
|
||||
height: auto;
|
||||
}
|
||||
|
||||
[type="search"] {
|
||||
outline-offset: -2px;
|
||||
-webkit-appearance: none;
|
||||
}
|
||||
|
||||
[type="search"]::-webkit-search-cancel-button,
|
||||
[type="search"]::-webkit-search-decoration {
|
||||
-webkit-appearance: none;
|
||||
}
|
||||
|
||||
::-webkit-file-upload-button {
|
||||
font: inherit;
|
||||
-webkit-appearance: button;
|
||||
}
|
||||
|
||||
output {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
summary {
|
||||
display: list-item;
|
||||
}
|
||||
|
||||
template {
|
||||
display: none;
|
||||
}
|
||||
|
||||
[hidden] {
|
||||
display: none !important;
|
||||
}
|
||||
/*# sourceMappingURL=bootstrap-reboot.css.map */
|
@ -0,0 +1,8 @@
|
||||
/*!
|
||||
* Bootstrap Reboot v4.0.0-beta.2 (https://getbootstrap.com)
|
||||
* Copyright 2011-2017 The Bootstrap Authors
|
||||
* Copyright 2011-2017 Twitter, Inc.
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
* Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
|
||||
*/*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}@-ms-viewport{width:device-width}article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg:not(:root){overflow:hidden}[role=button],a,area,button,input:not([type=range]),label,select,summary,textarea{-ms-touch-action:manipulation;touch-action:manipulation}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#868e96;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item}template{display:none}[hidden]{display:none!important}
|
||||
/*# sourceMappingURL=bootstrap-reboot.min.css.map */
|
@ -1,9 +0,0 @@
|
||||
body {
|
||||
background-image: url("/static/bg.webp");
|
||||
background-repeat: repeat;
|
||||
}
|
||||
|
||||
.current-page-btn {
|
||||
color: blue;
|
||||
border: 1px blue solid;
|
||||
}
|
@ -0,0 +1,793 @@
|
||||
body {
|
||||
padding-top: 54px;
|
||||
}
|
||||
|
||||
@media (min-width: 992px) {
|
||||
body {
|
||||
padding-top: 56px;
|
||||
}
|
||||
}
|
||||
.center {
|
||||
text-align: center;
|
||||
margin: 0 auto 0 auto;
|
||||
}
|
||||
.navbar {
|
||||
padding: .1rem 1rem;
|
||||
}
|
||||
|
||||
.navbar .navbar-brand img#logo{
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.navbar .navbar-brand img#text{
|
||||
width:235px;
|
||||
margin-top: -4px;
|
||||
padding-top: 0px;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.navbar-nav .nav-link{
|
||||
color: #fff;
|
||||
font-weight: bold;
|
||||
font-family: 'Lucida Grande', 'Lucida Sans Unicode', 'Geneva', 'Verdana', sans-serif
|
||||
}
|
||||
|
||||
.container>div:first-child {
|
||||
padding-top: 30px;
|
||||
}
|
||||
|
||||
.mb-4, .my-4{
|
||||
margin-top:0 !important;
|
||||
}
|
||||
|
||||
.mt-4, .my-4 {
|
||||
margin-top: 0rem !important;
|
||||
}
|
||||
|
||||
.proposal-info-table td {
|
||||
padding: .35rem !important;
|
||||
}
|
||||
|
||||
.proposal_address {
|
||||
white-space: pre-wrap;
|
||||
padding: 2px;
|
||||
border-radius: 2px;
|
||||
margin-top: 6px;
|
||||
font-weight: bold;
|
||||
color: #ff0000;
|
||||
font-size: 18px;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.proposal_content blockquote {
|
||||
background-color: #efefef;
|
||||
padding: 8px;
|
||||
}
|
||||
|
||||
.proposal_content h1, .proposal_content h2, .proposal_content h3, .proposal_content h4{
|
||||
margin-bottom: 16px;
|
||||
margin-top: 16px;
|
||||
}
|
||||
|
||||
.proposal_content p {
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.proposal_content img {
|
||||
margin-top:8px;
|
||||
margin-bottom:8px;
|
||||
max-width: 70%;
|
||||
}
|
||||
|
||||
.proposal_content code {
|
||||
background: #ebebeb;
|
||||
padding: 2px;
|
||||
}
|
||||
|
||||
.table td, .table th {
|
||||
padding: 0.35rem;
|
||||
}
|
||||
|
||||
/* Sticky footer styles
|
||||
-------------------------------------------------- */
|
||||
html {
|
||||
position: relative;
|
||||
min-height: 100%;
|
||||
}
|
||||
body {
|
||||
margin-bottom: 60px; /* Margin bottom by footer height */
|
||||
font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;
|
||||
background-image: url("/static/bg.png");
|
||||
background-repeat: repeat;
|
||||
}
|
||||
|
||||
.footer {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
width: 100%;
|
||||
height: 30px;
|
||||
line-height: 30px;
|
||||
background-color: #f5f5f5;
|
||||
}
|
||||
|
||||
.bg-dark {
|
||||
background: linear-gradient(90deg, #d253c8, #ffa93e);
|
||||
}
|
||||
|
||||
.navbar-dark .navbar-brand {
|
||||
color: #fff;
|
||||
font-size: 18pt;
|
||||
margin-top: 0;
|
||||
padding-top: 0;
|
||||
margin-bottom: 0;
|
||||
padding-bottom: 0;
|
||||
text-shadow: 2px 2px #667ff952;
|
||||
font-family: "Comic Sans MS", "Comic Sans", cursive;
|
||||
}
|
||||
|
||||
.table-proposal td {
|
||||
font-size: 15px;
|
||||
}
|
||||
|
||||
.table-proposal tbody td:first-child{
|
||||
word-break: break-word;
|
||||
width: 40%;
|
||||
}
|
||||
|
||||
.table-hover tbody tr:hover {
|
||||
background-color: rgba(0,0,0,.055);
|
||||
}
|
||||
|
||||
.table th, .table td {
|
||||
border-top: 1px solid #00000029;
|
||||
padding-top: .65rem;
|
||||
}
|
||||
|
||||
.table-tilted{
|
||||
-ms-transform: rotate(0.5deg);
|
||||
-webkit-transform: rotate(0.5deg);
|
||||
transform: rotate(0.5deg);
|
||||
}
|
||||
|
||||
.table-tilted-v{
|
||||
-ms-transform: rotate(-0.2deg);
|
||||
-webkit-transform: rotate(-0.2deg);
|
||||
transform: rotate(-0.2deg);
|
||||
}
|
||||
|
||||
.table-no-header thead{
|
||||
display: none;
|
||||
}
|
||||
|
||||
.table-wow{
|
||||
background-image: url(https://wownero.win/static/game-table-bg.png);
|
||||
background-size: cover;
|
||||
}
|
||||
|
||||
.table a{
|
||||
color: #006400;
|
||||
}
|
||||
|
||||
.table thead th {
|
||||
border-bottom: 1px solid #00000029 !important;
|
||||
border-top: none;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.table tbody td.date {
|
||||
max-width: 100px;
|
||||
}
|
||||
|
||||
.table tbody td.user {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.table tbody td{
|
||||
font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
|
||||
}
|
||||
|
||||
.nav-tabs .nav-item.show .nav-link, .nav-tabs .nav-link.active {
|
||||
color: #495057;
|
||||
background-color: #fff;
|
||||
border-left-color: #008926;
|
||||
border-left-width: 2px;
|
||||
border-top-color: #008926;
|
||||
border-top-width: 1px;
|
||||
border-right-color: #008926;
|
||||
border-right-width: 1px;
|
||||
}
|
||||
|
||||
.nav-tabs .nav-link {
|
||||
border: 1px solid transparent;
|
||||
border-top-left-radius: .25rem;
|
||||
border-top-right-radius: .25rem;
|
||||
border-bottom-color: #008926;
|
||||
}
|
||||
|
||||
.nav-tabs .nav-link:focus, .nav-tabs .nav-link:hover {
|
||||
border-color: #e9ecef #e9ecef #dee2e6;
|
||||
}
|
||||
|
||||
.nav-tabs .nav-link:focus, .nav-tabs .nav-link:hover {
|
||||
border-color: #00892630 #00892630 #008926;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #008926;
|
||||
}
|
||||
|
||||
.btn-group-toggle a{
|
||||
color: white;
|
||||
}
|
||||
|
||||
.btn-group-toggle a:hover{
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.btn-primary{
|
||||
background-color: #28a745;
|
||||
border-color: #28a745;
|
||||
}
|
||||
|
||||
.btn-primary:hover{
|
||||
color: #fff;
|
||||
background-color: #1e7e34;
|
||||
border-color: #1c7430;
|
||||
}
|
||||
|
||||
.card-body {
|
||||
background-color: #00000008;
|
||||
}
|
||||
|
||||
.card {
|
||||
background-color: #ffffff00;
|
||||
border: 0px solid rgba(0,0,0,.125);
|
||||
border-radius: .25rem;
|
||||
}
|
||||
|
||||
.card-header {
|
||||
padding: 0.5rem;
|
||||
padding-left: 1.0rem;
|
||||
font-size: 16px;
|
||||
margin-bottom: 0;
|
||||
background-color: rgba(0,0,0,.03);
|
||||
background: linear-gradient(90deg, #d253c829, #ffa93e69);
|
||||
/*background: linear-gradient(90deg, #40d61e1f, #ffa93e69);*/
|
||||
border-radius: calc(.25rem - 1px) calc(.25rem - 1px) 0 0;
|
||||
border-bottom: 1px solid #e6e6e6;
|
||||
border-bottom: 0px;
|
||||
}
|
||||
|
||||
.proposal_content{
|
||||
background-color: #00000008;
|
||||
padding: 1.25rem 1.25rem;
|
||||
}
|
||||
|
||||
.form-control {
|
||||
padding: .375rem .75rem;
|
||||
font-size: 1rem;
|
||||
line-height: 1.5;
|
||||
color: #495057;
|
||||
background-color: #fff;
|
||||
background-clip: padding-box;
|
||||
border: 1px solid #008926;
|
||||
}
|
||||
.form-group {
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
.form-group:last-of-type {
|
||||
margin-bottom:2.5rem;
|
||||
}
|
||||
/*fuku chrome*/
|
||||
input {
|
||||
outline:none;
|
||||
}
|
||||
input:focus {
|
||||
outline: 0;
|
||||
}
|
||||
*:focus {
|
||||
outline: none;
|
||||
}
|
||||
input[type="text"], textarea {
|
||||
outline: none;
|
||||
box-shadow:none !important;
|
||||
border: 1px solid #008926 !important;
|
||||
}
|
||||
|
||||
.navbar-dark .navbar-nav .nav-link {
|
||||
color: white;
|
||||
padding-top: 0.4rem;
|
||||
padding-bottom: 0.4rem;
|
||||
font-size: 15px;
|
||||
padding-right: 1em;
|
||||
}
|
||||
|
||||
.navbar-nav .nav-item {
|
||||
line-height: 20px;
|
||||
}
|
||||
|
||||
nav .nav-link{
|
||||
color: white;
|
||||
}
|
||||
|
||||
nav .nav-link .active{
|
||||
text-shadow: none;
|
||||
}
|
||||
|
||||
.proposal-info-table td{
|
||||
border-top: 0;
|
||||
}
|
||||
|
||||
.proposal-info-table td span.badge{
|
||||
font-size:20px;
|
||||
}
|
||||
|
||||
.table-proposal .progress {
|
||||
max-width: 70px !important;
|
||||
min-width: 50px !important;
|
||||
float:right;
|
||||
}
|
||||
|
||||
.table-proposal .progress-bar {
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
-ms-flex-pack: center;
|
||||
justify-content: center;
|
||||
color: #fff;
|
||||
text-shadow: 1px 1px #000000;
|
||||
text-align: center;
|
||||
white-space: nowrap;
|
||||
background-color: #009845;
|
||||
transition: width .6s ease;
|
||||
font-family: monospace;
|
||||
padding: 6px;
|
||||
}
|
||||
|
||||
#point-wow-left{
|
||||
display: inline;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 600px) {
|
||||
.proposal-info-table tr:first-child>td, .proposal-info-table tr:first-child>td>span {
|
||||
font-size: 28px !important;
|
||||
font-weight: 100;
|
||||
}
|
||||
|
||||
.navbar-dark .navbar-brand {
|
||||
font-size: 13pt;
|
||||
}
|
||||
|
||||
.proposal-info-table tr:first-child>td, .proposal-info-table tr:first-child>td>span {
|
||||
font-size: 14px !important;
|
||||
}
|
||||
|
||||
.proposal-info-table td span.badge {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.proposal_content {
|
||||
background-color: #00000008;
|
||||
padding: 0.1rem 0.75rem;
|
||||
}
|
||||
|
||||
.card-body{
|
||||
padding: 0.5rem;
|
||||
}
|
||||
|
||||
#point-wow-left{
|
||||
display: none;
|
||||
}
|
||||
|
||||
.table-proposal thead th#date, .table-proposal tbody td#date{
|
||||
display: none;
|
||||
}
|
||||
|
||||
.table-proposal, .table-proposal td{
|
||||
font-size:14px !important;
|
||||
}
|
||||
|
||||
.navbar-brand {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.navbar-brand-mobile{
|
||||
display: block !important;
|
||||
color: white;
|
||||
font-size:14px;
|
||||
}
|
||||
|
||||
pre.proposal_address{
|
||||
font-size:14px;
|
||||
}
|
||||
|
||||
label {
|
||||
font-size:12px !important;
|
||||
}
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 768px) {
|
||||
#point-wow-left {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
textarea.comment{
|
||||
padding-left: 6px;
|
||||
padding-right: 6px;
|
||||
padding-bottom: 6px;
|
||||
width: 100%;
|
||||
max-width: 600px;
|
||||
}
|
||||
|
||||
.votearrow {
|
||||
width: 10px;
|
||||
height: 10px;
|
||||
border: 0px;
|
||||
margin: 3px 2px 6px;
|
||||
margin-right: 10px;
|
||||
margin-top: 7px;
|
||||
background: url(/static/grayarrow.gif) no-repeat;
|
||||
}
|
||||
|
||||
span.username a{
|
||||
font-family: Verdana, Geneva, sans-serif;
|
||||
font-size: 12pt;
|
||||
color: #828282;
|
||||
}
|
||||
|
||||
.comment-container a.reply{
|
||||
margin-bottom:2px;
|
||||
font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;
|
||||
font-size: 11pt;
|
||||
text-decoration: underline;
|
||||
color: black;
|
||||
}
|
||||
|
||||
span.date_posted a{
|
||||
color: #828282;
|
||||
font-family: Verdana, Geneva, sans-serif;
|
||||
font-size: 10pt;
|
||||
margin-left:2px;
|
||||
}
|
||||
|
||||
.comment-container .comment-container{
|
||||
margin-top: 0.4rem !important;
|
||||
}
|
||||
|
||||
.comment-container, .comment-container .comment-container{
|
||||
margin-bottom: 0.4rem !important;
|
||||
font-family: serif;
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
span.username a.author{
|
||||
color: #008926;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
:target {
|
||||
background: linear-gradient(90deg, #ff606008, #ffa93e2b);
|
||||
}
|
||||
|
||||
.form-admin{
|
||||
border: 1px solid #b60000;
|
||||
}
|
||||
|
||||
ul.b {
|
||||
list-style-type: square;
|
||||
padding-left: 1.0rem;
|
||||
}
|
||||
|
||||
.media-body #comment{
|
||||
word-break: break-all;
|
||||
}
|
||||
|
||||
.api_documentation code{
|
||||
background-color: #f3f3f3;
|
||||
padding: 4px;
|
||||
padding-top:2px;
|
||||
padding-bottom:2px;
|
||||
}
|
||||
|
||||
.api_documentation pre{
|
||||
margin-top:0;
|
||||
background-color: #f3f3f3;
|
||||
padding: 4px;
|
||||
font-size: 12px;
|
||||
padding-left:8px;
|
||||
|
||||
white-space: pre-wrap; /* Since CSS 2.1 */
|
||||
white-space: -moz-pre-wrap; /* Mozilla, since 1999 */
|
||||
white-space: -pre-wrap; /* Opera 4-6 */
|
||||
white-space: -o-pre-wrap; /* Opera 7 */
|
||||
word-wrap: break-word; /* Internet Explorer 5.5+ */
|
||||
}
|
||||
|
||||
.api_documentation .api_container hr{
|
||||
margin-bottom: 14px;
|
||||
margin-top: 12px;
|
||||
}
|
||||
|
||||
.api_documentation .api_container{
|
||||
margin-bottom: 60px;
|
||||
}
|
||||
|
||||
.sidebar .card-body{
|
||||
padding-top: 1rem;
|
||||
padding-left: 1rem;
|
||||
padding-right: 1rem;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.sidebar .card-body ul.b{
|
||||
margin-bottom:0;
|
||||
}
|
||||
|
||||
.card-header {
|
||||
border-radius: 10px 0 0 !important;
|
||||
}
|
||||
|
||||
/* cyrillic-ext */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: local('Roboto'), local('Roboto-Regular'), url(/static/fonts/roboto-1.woff2) format('woff2');
|
||||
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
||||
}
|
||||
/* cyrillic */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: local('Roboto'), local('Roboto-Regular'), url(/static/fonts/roboto-2.woff2) format('woff2');
|
||||
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||
}
|
||||
/* greek-ext */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: local('Roboto'), local('Roboto-Regular'), url(/static/fonts/roboto-3.woff2) format('woff2');
|
||||
unicode-range: U+1F00-1FFF;
|
||||
}
|
||||
/* greek */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: local('Roboto'), local('Roboto-Regular'), url(/static/fonts/roboto-4.woff2) format('woff2');
|
||||
unicode-range: U+0370-03FF;
|
||||
}
|
||||
/* vietnamese */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: local('Roboto'), local('Roboto-Regular'), url(/static/fonts/roboto-5.woff2) format('woff2');
|
||||
unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
|
||||
}
|
||||
/* latin-ext */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: local('Roboto'), local('Roboto-Regular'), url(/static/fonts/roboto-6.woff2) format('woff2');
|
||||
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||
}
|
||||
/* latin */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: local('Roboto'), local('Roboto-Regular'), url(/static/fonts/roboto-7.woff2) format('woff2');
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||
}
|
||||
|
||||
.proposal-overview .table-proposal[data-status="4"] {
|
||||
opacity: 0.4;
|
||||
}
|
||||
|
||||
.proposal-overview .table-proposal[data-status="4"] thead th {
|
||||
border-bottom: 1px solid #4b4b4b !important;
|
||||
}
|
||||
|
||||
.proposal-overview .table-proposal[data-status="4"] td {
|
||||
border-top: 1px solid #4b4b4b;
|
||||
}
|
||||
|
||||
.proposal-overview .table-proposal[data-status="4"], .proposal-overview .table-proposal[data-status="4"] a {
|
||||
color: #4b4b4b;
|
||||
}
|
||||
|
||||
.comments-panel {
|
||||
background-color: #ffffffb0;
|
||||
}
|
||||
|
||||
.wow_addy{
|
||||
color: red;
|
||||
cursor: pointer;
|
||||
font-family: monospace;
|
||||
background: #f6f6f6;
|
||||
font-size:14px;
|
||||
}
|
||||
|
||||
.wow_addy[data-active="true"]{
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
.proposal_qr{
|
||||
margin-top:8px;
|
||||
margin-bottom:8px;
|
||||
}
|
||||
|
||||
.table-proposal tr {
|
||||
background: #00000005;
|
||||
}
|
||||
|
||||
.tx_item {
|
||||
padding-top: 4px;
|
||||
padding-bottom: 4px;
|
||||
background: #ffffff80;
|
||||
}
|
||||
|
||||
.tx_item .amount {
|
||||
float:right;
|
||||
font-weight:bold;
|
||||
color:#890000;
|
||||
}
|
||||
|
||||
.tx_item .amount.in {
|
||||
color:#008926;
|
||||
}
|
||||
|
||||
.tx_item .datetime {
|
||||
font-size: 14px;
|
||||
color: #999;
|
||||
}
|
||||
|
||||
.tx_item .height b {
|
||||
font-size:14px;
|
||||
}
|
||||
|
||||
.container>.content h1,
|
||||
.container>.content h2,
|
||||
.container>.content h3,
|
||||
.container>.content h4{
|
||||
margin-bottom:20px;
|
||||
}
|
||||
|
||||
|
||||
.comment-container .media-body span.body {
|
||||
word-wrap: break-word;
|
||||
display: block;
|
||||
margin-top: 4px;
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
|
||||
.comment-container .media-body span.body img {
|
||||
width: 100%;
|
||||
max-width:500px;
|
||||
max-height:600px;
|
||||
margin-top:10px;
|
||||
margin-bottom:10px;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.navbar-brand {
|
||||
margin-top:0
|
||||
margin-bottom:0
|
||||
padding-top:0
|
||||
padding-bottom:0;
|
||||
}
|
||||
|
||||
.card h5{
|
||||
color: #0000009e;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.wowtable{
|
||||
width:100%;
|
||||
display: block;
|
||||
font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace
|
||||
}
|
||||
.wowtable .trow{
|
||||
width: 100%;
|
||||
height: 34px;
|
||||
display: table;
|
||||
}
|
||||
.wowtable .trow .item{
|
||||
float:right;
|
||||
width:100px;
|
||||
}
|
||||
.wowtable .trow .item.one{
|
||||
width:30%;
|
||||
min-width: 200px;
|
||||
}
|
||||
.wowtable .trow .item.small{
|
||||
max-width:100px;
|
||||
text-align:right;
|
||||
}
|
||||
.wowtable .trow.header .item span {
|
||||
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
|
||||
font-size: 14px;
|
||||
font-weight: 700;
|
||||
padding-top:6px;
|
||||
display: block;
|
||||
}
|
||||
.wowtable .trow .item.comments{
|
||||
max-width:70px;
|
||||
text-align: center;
|
||||
}
|
||||
.wowtable .trow .item.big{
|
||||
display: inline-block;
|
||||
text-align: left;
|
||||
float: left;
|
||||
width: auto;
|
||||
max-width: 50%;
|
||||
}
|
||||
.wowtable .trow.header .item.big span{
|
||||
padding-left:7px;
|
||||
padding-top:3px;
|
||||
font-size:18px;
|
||||
word-break: break-word;
|
||||
}
|
||||
.trow.divider{
|
||||
height:1px;
|
||||
background: #00000029 !important;
|
||||
}
|
||||
.wowtable .trow.body .item span {
|
||||
font-size:14px;
|
||||
padding-top:6px;
|
||||
display: block;
|
||||
}
|
||||
.wowtable .trow.body .item.big a {
|
||||
display: block;
|
||||
padding-left: 7px;
|
||||
color: #006400;
|
||||
padding-top: 6px;
|
||||
font-size: 15px;
|
||||
font-weight: 700;
|
||||
word-break: break-word;
|
||||
}
|
||||
.wowtable .trow span.alignl{
|
||||
text-align:left;
|
||||
padding-left:7px;
|
||||
}
|
||||
|
||||
|
||||
@media (max-width: 990px) {
|
||||
|
||||
.wowtable .small{
|
||||
display:none
|
||||
}
|
||||
.wowtable .trow .item.big{
|
||||
max-width: 88%;
|
||||
}
|
||||
}
|
||||
|
||||
.subtext {
|
||||
color: grey;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.subtitle {
|
||||
font-size: 1.2em;
|
||||
}
|
||||
|
||||
.container {
|
||||
margin: 0 auto;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.flashes {
|
||||
text-align: center;
|
||||
font-size: 1.5em;
|
||||
}
|
||||
|
||||
.navbar-nav {
|
||||
flex-direction: row;
|
||||
}
|
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 174 KiB |
@ -1,49 +1,44 @@
|
||||
<nav class="navbar" role="navigation" aria-label="main navigation">
|
||||
<div class="navbar-brand">
|
||||
<a class="navbar-item" href="/">
|
||||
<img src="/static/wow_logo.webp">
|
||||
</a>
|
||||
|
||||
<a role="button" class="navbar-burger" aria-label="menu" aria-expanded="false" data-target="navbarBasicExample">
|
||||
<span aria-hidden="true"></span>
|
||||
<span aria-hidden="true"></span>
|
||||
<span aria-hidden="true"></span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div id="navbarBasicExample" class="navbar-menu">
|
||||
<div class="navbar-start">
|
||||
<a class="navbar-item" href="{{ url_for('index') }}">Home</a>
|
||||
<div class="navbar-item has-dropdown is-hoverable">
|
||||
<a class="navbar-link">Leaderboards</a>
|
||||
|
||||
<div class="navbar-dropdown">
|
||||
<a class="navbar-item" href="{{ url_for('leaderboard.top_posters') }}">Top Posters</a>
|
||||
<a class="navbar-item" href="{{ url_for('leaderboard.top_posts') }}?days=1">Top Memes Last 1 Day</a>
|
||||
<a class="navbar-item" href="{{ url_for('leaderboard.top_posts') }}?days=3">Top Memes Last 3 Days</a>
|
||||
<a class="navbar-item" href="{{ url_for('leaderboard.top_posts') }}?days=7">Top Memes Last Week</a>
|
||||
<a class="navbar-item" href="{{ url_for('leaderboard.top_posts') }}?days=30">Top Memes Last Month</a>
|
||||
</div>
|
||||
</div>
|
||||
<a class="navbar-item" href="{{ url_for('about') }}">About</a>
|
||||
<a class="navbar-item" href="{{ url_for('post.create') }}">Submit</a>
|
||||
{% if session.auth %}
|
||||
<a class="navbar-item" style="color: orange;" href="{{ url_for('mod_queue') }}">Mods!</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
<div class="navbar-end">
|
||||
<div class="navbar-item">
|
||||
<div class="buttons">
|
||||
{% if not 'auth' in session %}
|
||||
<a class="button is-primary" href="https://login.wownero.com/developer/"><strong>Sign up</strong></a>
|
||||
<a class="button is-light" href="{{ url_for('auth.login') }}">Log in</a>
|
||||
{% else %}
|
||||
<a class="button is-primary" href="{{ url_for('profile.edit') }}">Profile ({{ session.auth.preferred_username }})</a>
|
||||
<a class="button is-light" href="{{ url_for('auth.logout') }}">Logout</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
<!-- Navigation -->
|
||||
<nav class="navbar navbar-expand-lg navbar-dark bg-dark fixed-top">
|
||||
<div class="container">
|
||||
<a class="navbar-brand" href="/">
|
||||
<h3>SuchWow!</h3>
|
||||
</a>
|
||||
|
||||
<div class="" id="">
|
||||
<ul class="navbar-nav ml-auto">
|
||||
{% if session.auth %}
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" style="color: yellow;" href="{{ url_for('mod_queue') }}">Mods!</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="{{ url_for('index') }}">Home</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="{{ url_for('post.create') }}">Submit</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="{{ url_for('about') }}">About</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="{{ url_for('stats') }}">Stats</a>
|
||||
</li>
|
||||
{% if session.auth == None %}
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="{{ url_for('auth.login') }}">Login</a>
|
||||
</li>
|
||||
{% else %}
|
||||
<li class="nav-item">
|
||||
{% if session.auth %}
|
||||
<a class="nav-link" href="{{ url_for('profile.edit') }}">Profile ({{ session.auth.preferred_username }})</a>
|
||||
{% endif %}
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="{{ url_for('auth.logout') }}">Logout</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
@ -0,0 +1,77 @@
|
||||
{% extends 'base.html' %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<div class="container" style="text-align:center;">
|
||||
|
||||
<h3>Stats</h3>
|
||||
|
||||
<div style="width: 100%; text-align: center;">
|
||||
<div class="charts">
|
||||
<canvas id="wow_wallet"></canvas>
|
||||
<canvas id="wow_earnings"></canvas>
|
||||
<canvas id="swap_stats"></canvas>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="/static/js/Chart.bundle.min.js"></script>
|
||||
<script>
|
||||
var monero = '#f96b0e';
|
||||
var set_title = function(t){
|
||||
return {
|
||||
display: true,
|
||||
text: t,
|
||||
fontColor: 'white',
|
||||
}
|
||||
}
|
||||
|
||||
{% for i in wow_txes %}
|
||||
// console.log("{{ i['in'] }}")
|
||||
{% endfor %}
|
||||
|
||||
{#
|
||||
var ctx = document.getElementById('wow_wallet').getContext('2d');
|
||||
new Chart(ctx, {
|
||||
type: 'line',
|
||||
data: {
|
||||
labels: [0, {% for i in wow_txes %}'{{ wow_txes[i].timestamp }}',{% endfor %}],
|
||||
datasets: [{
|
||||
label: 'Balance',
|
||||
backgroundColor: wownero,
|
||||
borderColor: wownero,
|
||||
data: [
|
||||
0, {% for i in wow_txes %}{{ wow_txes[i].total }},{% endfor %}
|
||||
],
|
||||
fill: false,
|
||||
}]
|
||||
},
|
||||
options: {
|
||||
title: set_title('Wownero Wallet Balance')
|
||||
}
|
||||
});
|
||||
|
||||
var ctx = document.getElementById('wow_earnings').getContext('2d');
|
||||
new Chart(ctx, {
|
||||
type: 'bar',
|
||||
data: {
|
||||
labels: ['WOW', 'USD'],
|
||||
datasets: [{
|
||||
label: 'Wownero Earnings',
|
||||
backgroundColor: wownero,
|
||||
borderColor: wownero,
|
||||
data: [
|
||||
{{ earnings['wow'] | from_atomic_wow }}, {{ earnings['wow_as_ausd'] | from_atomic_usd }}
|
||||
],
|
||||
fill: false,
|
||||
}]
|
||||
},
|
||||
options: {
|
||||
title: set_title('Wownero Earnings')
|
||||
}
|
||||
});
|
||||
#}
|
||||
</script>
|
||||
|
||||
</div>
|
||||
|
||||
{% endblock %}
|